📝 docs(tsl): clarify syntax constraints and enhance test infrastructure

- Add TSF file naming constraint to syntax/02_core_model.md
- Clarify semicolon rules: syntax facts vs style preferences
- Separate control flow end semicolon rules (syntax allows both)
- Add function body semicolon requirements to syntax/05_functions_and_calls.md
- Move style preferences to code_style.md (control flow end semicolons)
- Remove cross-references from syntax docs to maintain independence
- Enhance Gitea workflow emoji for better CI output readability
- Fix CI test path from tests/ to test/
- Organize agent test results under test/agent/result/ directory
- Add complete Chinese translation of test cases (test_cases_zh.md)
- Clean up .gitignore to use unified test/agent/result/ directory
- Remove obsolete agent test artifacts (REPORTS_LOCATION.md, old results)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
csh 2026-06-21 17:04:50 +08:00
parent 6026401907
commit 8b93311cae
138 changed files with 7018 additions and 1705 deletions

View File

@ -27,7 +27,7 @@ jobs:
set -euo pipefail
echo "========================================"
echo "📥 准备仓库到 WORKSPACE_DIR"
echo "📦 准备仓库到 WORKSPACE_DIR"
echo "========================================"
REPO_NAME="${{ github.event.repository.name }}"
@ -60,10 +60,14 @@ jobs:
git config --global --add safe.directory "$REPO_DIR"
echo "REPO_DIR=$REPO_DIR" >> "$GITHUB_ENV"
- name: 🧪 Lint commit message / PR title
echo "✅ 仓库准备完成"
- name: 🔍 Lint commit message / PR title
run: |
cd "$REPO_DIR"
echo "🔍 检查 commit message 和 PR title 规范..."
python3 .gitea/ci/commit_message_lint.py
echo "✅ Lint 检查通过"
- name: 🧹 清理临时仓库
if: always()

View File

@ -35,7 +35,7 @@ jobs:
set -euo pipefail
echo "========================================"
echo "📥 准备仓库到 WORKSPACE_DIR"
echo "📦 准备仓库到 WORKSPACE_DIR"
echo "========================================"
REPO_NAME="${{ github.event.repository.name }}"
@ -69,11 +69,12 @@ jobs:
git config --global --add safe.directory "$REPO_DIR"
echo "REPO_DIR=$REPO_DIR" >> "$GITHUB_ENV"
echo "✅ 仓库准备完成"
- name: 🔧 安装测试依赖
run: |
echo "========================================"
echo "🔧 安装测试依赖"
echo "📦 安装测试依赖"
echo "========================================"
apt-get update
@ -83,7 +84,8 @@ jobs:
python3 -m pip install yamllint tomli
echo ""
echo "✓ Python 版本: $(python3 --version)"
echo "✅ Python 版本: $(python3 --version)"
echo "✅ 依赖安装完成"
echo "========================================"
- name: 🧪 运行全量测试并生成报告
@ -92,27 +94,31 @@ jobs:
set -euo pipefail
echo "========================================"
echo "🧪 Python 测试"
echo "🐍 Python 测试"
echo "========================================"
cd "$REPO_DIR"
echo "覆盖CLI、subtree/snapshot 部署路线、模板同步、文档一致性"
python3 -m unittest discover -s tests -p "test_*.py" -v
echo "📋 覆盖CLI、subtree/snapshot 部署路线、模板同步、文档一致性"
python3 -m unittest discover -s test -p "test_*.py" -v
echo "✅ Python 测试通过"
echo "========================================"
echo "📄 模板验证测试"
echo "📝 模板验证测试"
echo "========================================"
sh tests/templates/validate_python_templates.sh
sh tests/templates/validate_cpp_templates.sh
sh tests/templates/validate_ci_templates.sh
sh tests/templates/validate_project_templates.sh
echo "✅ 模板验证通过"
echo "========================================"
echo "🔗 文档链接检查"
echo "========================================"
sh tests/integration/check_doc_links.sh
echo "✅ 文档链接检查通过"
echo "🎉 所有测试完成"
- name: 🧹 清理临时仓库
if: always()

View File

@ -29,7 +29,7 @@ jobs:
set -euo pipefail
echo "========================================"
echo "🧰 Prepare repo in WORKSPACE_DIR"
echo "📦 Prepare repo in WORKSPACE_DIR"
echo "========================================"
REPO_NAME="${{ github.event.repository.name }}"
@ -49,6 +49,7 @@ jobs:
git config --global --add safe.directory "$REPO_DIR"
echo "REPO_DIR=$REPO_DIR" >> "$GITHUB_ENV"
echo "✅ Repo prepared"
- name: ♻️ Update thirdparty and sync main
shell: bash
@ -81,7 +82,7 @@ jobs:
fi
echo "========================================"
echo "🚀 Sync skills into main"
echo "🔄 Sync skills into main"
echo "========================================"
git fetch origin main
@ -92,7 +93,7 @@ jobs:
MANIFEST_PATH="$MANIFEST_PATH" \
bash .gitea/ci/sync_thirdparty_skills.sh
echo "🎉 Update and sync finished."
echo " Update and sync finished."
- name: 🧹 Clean temporary repo
if: always()

7
.gitignore vendored
View File

@ -24,6 +24,9 @@ reports/
tmp/
docs/superpowers/
# Agent 测试结果
test/agent/result/
scripts/__pycache__
tests/__pycache__
tests/cli/__pycache__
test/__pycache__
test/cli/__pycache__

123
README.md
View File

@ -9,17 +9,6 @@ Playbook工程规范与代理规则合集当前覆盖
- JavaScript`.js`/`.mjs`/`.cjs`
- Markdown代码格式化
## 原则
1. **可读性优先**:读代码的时间远大于写代码
2. **一致性优先**:同一仓库内保持一致比追求"最优风格"更重要
3. **遵从既有代码**:修改/扩展现有代码时优先沿用其局部风格
## 适用范围
- 本指南适用于所有 TSL/C++/Python/TypeScript/JavaScript/Markdown 相关仓库与脚本
- 当现有代码与本指南冲突时,**以保持局部一致性为优先**,逐步迁移
## docs/(开发规范)
`docs/` 目录是给开发者阅读的工程规范,约束代码写法、命名与提交信息。
@ -77,36 +66,7 @@ project_name = "MyProject"
- **CLAUDE.md**:自动检测(根目录 → `.claude/`),不存在则创建;注入 `@AGENTS.md` / `@AGENT_RULES.md`
- **force**:默认 false已存在则跳过设为 true 时强制覆盖(会先备份)
### 工作流留痕 helper
如果项目已经部署了这套模板,并使用 `superpowers` 工作流:
```bash
# spec 写完后
python <playbook_root>/scripts/playbook.py \
-record-spec docs/superpowers/specs/<topic>-design.md \
-progress memory-bank/progress.md
# plan 写完后
python <playbook_root>/scripts/playbook.py \
-record-plan docs/superpowers/plans/<topic>.md \
-progress memory-bank/progress.md
```
这两个 helper 只负责把 `workflow-state` 写入
`memory-bank/progress.md`
spec/plan 产出阶段不单独提交;最终随对应 Plan 的交付变更统一归档。
真正执行 Plan 仍然走 `main_loop.py claim/finish`
完整主链只在 `templates/AGENT_RULES.template.md` 定义,这里不重复展开。
如果项目采用 `superpowers`
- 设计产物落到 `docs/superpowers/specs/`
- 计划产物落到 `docs/superpowers/plans/`
- 状态留痕通过 `playbook.py -record-spec/-record-plan`
`main_loop.py claim/finish` 维护
详见:`templates/README.md`
更多说明详见 [templates/README.md](templates/README.md)。
## rulesets/(规则集模板库 - 三层架构)
@ -124,7 +84,7 @@ spec/plan 产出阶段不单独提交;最终随对应 Plan 的交付变更统
```txt
Layer 1: rulesets/ (≤50 行/语言,模板源)
├─ 核心约束与安全红线
├─ 语言特有的核心约束
└─ 指向 Skills 和 docs
Layer 2: skills/ (按需加载,$skill-name 触发)
@ -140,7 +100,7 @@ Layer 3: docs/ (权威静态文档)
| 层级 | 加载方式 | 内容 | 作用 |
| ------- | ------------------------------ | ------------------------------ | -------------------------- |
| Layer 1 | 自动,始终在上下文 | 硬约束与安全红线 | 快速判断能做/不能做 |
| Layer 1 | 自动,始终在上下文 | 语言特有的核心约束 | 快速判断能做/不能做 |
| Layer 2 | `$<skill-name>` 触发或代理判定 | 操作指南、最佳实践、工作流 | 指导具体怎么做 |
| Layer 3 | 按需读取特定章节 | 完整语言手册、代码风格、工具链 | 最终权威(冲突时以此为准) |
@ -159,7 +119,7 @@ Layer 3: docs/ (权威静态文档)
**.agents/Layer 1修改规则**
- 可做:增加安全漏洞类型、更新核心约定、添加硬性约束
- 可做:更新核心约定、添加语言特有的硬性约束(命名/语法/工具链)
- 不可做:添加推荐型最佳实践(→ skill、详细语法解释→ skill/docs、超过 50 行(→ 拆分)
**SkillsLayer 2创建规则**
@ -168,20 +128,9 @@ Layer 3: docs/ (权威静态文档)
## SKILLSCodex CLI / Claude Code
本仓库内置一组 AI agent skills(见 `skills/`,支持 Codex CLI 和 Claude Code用于按需加载的工作流与知识库。
本仓库内置 AI agent skills支持 Codex CLI 和 Claude Code用于按需加载的工作流与知识库。
TSL 相关问题直接查阅 `rulesets/tsl/index.md``docs/tsl/`
**通用 Skills**
- `$commit-message`:提交信息规范
- `$gitea-fix-ci`:诊断 Gitea Actions / PR checks 失败并按批准计划修复
- `$style-cleanup`:整理代码风格
- 更多见 `SKILLS.md`
**安装与使用**:详见 `SKILLS.md`
如果你通过 `[install_skills]` 更新已经安装过的 skill默认会先把旧目录备份为 `*.bak.<timestamp>`;如果你明确希望“删除旧版本后直接重装”,可在 `playbook.toml``[install_skills]` 下设置 `no_backup = true`
安装与使用详见 [SKILLS.md](SKILLS.md)。
## 在其他项目中使用本 Playbook
@ -195,46 +144,6 @@ TSL 相关问题直接查阅 `rulesets/tsl/index.md` 与 `docs/tsl/`。
| 不想把 Playbook 以 subtree 嵌进仓库,但仍要把标准部署到项目内 | 方式二:外部 clone 后执行部署 | Playbook 仓库与业务仓库解耦,部署根目录可配置 |
| **不确定?** | **方式一:`git subtree`(推荐)** | 项目内可见、版本可追溯、使用路径最稳定 |
---
### TL;DR - 30 秒快速开始
先区分三个路径概念:
- `project_root`:目标项目根目录。
- `playbook_root`:相对于 `project_root` 的项目内 Playbook 根目录。
- `install_mode``subtree` 表示 Playbook 已由 git subtree 放在项目内;`snapshot` 表示从外部 clone 安装裁剪快照。
- 外部 clone 出来的 Playbook 路径(如 `/opt/playbook`):只是执行安装脚本的位置,不是项目内 Playbook 根目录。
以 TSL 为例Playbook 在项目内的默认根是 `docs/standards/playbook`;如果你把 `playbook_root` 改成 `custom/playbook`,则快照会落到 `<project_root>/custom/playbook`,文档和脚本入口也会跟着变成 `custom/playbook/docs/...`、`custom/playbook/scripts/...`。
#### 方式一:`git subtree`
```bash
# 1. 引入标准快照
git subtree add --prefix docs/standards/playbook https://git.mytsl.cn/csh/playbook.git main --squash
# 2. 在项目根创建配置(示例见 docs/standards/playbook/playbook.toml.example
cat <<'EOF' > playbook.toml
[playbook]
project_root = "."
playbook_root = "docs/standards/playbook"
install_mode = "subtree"
[sync_standards]
langs = ["tsl"]
EOF
# 3. 执行统一入口
python docs/standards/playbook/scripts/playbook.py -config playbook.toml
# 4. 提交
git add .
git commit -m ":package: deps(playbook): add tsl standards"
```
---
### 方式一git subtree 同步(推荐)
1. 在目标项目中首次引入:
@ -271,7 +180,7 @@ git commit -m ":package: deps(playbook): add tsl standards"
python docs/standards/playbook/scripts/playbook.py -config playbook.toml
```
配置参数说明见 `docs/standards/playbook/playbook.toml.example`
配置参数说明见 [playbook.toml.example](playbook.toml.example)
---
@ -285,11 +194,7 @@ git commit -m ":package: deps(playbook): add tsl standards"
git clone https://git.mytsl.cn/csh/playbook.git /opt/playbook
```
2. 在目标项目根创建 `playbook.toml`,并用 `playbook_root` 指定项目内的 Playbook 根。例如:
- `project_root` 写目标项目根目录。
- `playbook_root` 写目标项目内的相对路径。
- `install_mode = "snapshot"` 表示由外部 clone 安装项目内快照。
- 不要把外部 clone 的路径(如 `/opt/playbook`)写进 `playbook_root`;那只是你执行脚本的位置。
2. 在目标项目根创建 `playbook.toml`
```toml
[playbook]
@ -312,12 +217,7 @@ git commit -m ":package: deps(playbook): add tsl standards"
python /opt/playbook/scripts/playbook.py -config playbook.toml
```
说明:
- `install_mode = "snapshot"` 会先把 Playbook 裁剪快照安装到目标项目的 `playbook_root`,再执行后续同步动作。
- `playbook_root` 永远表示目标项目内的 Playbook 根;它不是外部 clone 出来的 Playbook 仓库路径。
- 外部 clone 场景下必须显式填写 `playbook_root`;脚本不会替你补默认项目内根目录。
- 如果 `playbook_root = "custom/playbook"`,部署后的项目内入口会是 `custom/playbook/scripts/playbook.py`、`custom/playbook/docs/index.md`。
**说明**`playbook_root` 表示项目内的部署目录,不是外部 clone 的路径。
---
@ -336,7 +236,7 @@ git commit -m ":package: deps(playbook): add tsl standards"
本仓库提供多套代理规则集(同步后位于目标项目的 `.agents/tsl/` / `.agents/cpp/` / `.agents/python/` / `.agents/typescript/` / `.agents/markdown/`
- 各规则集都包含核心约定与安全红线
- 各规则集都包含语言特有的核心约定
- 并在 `index.md` 中叠加语言级"硬约束"TSL/TSF 语法限制、C++23/Modules、Python 风格、TypeScript 类型约束、Markdown 代码格式化等)
**多语言项目推荐结构**示例TSL + C++ + Python + TypeScript + Markdown
@ -366,5 +266,4 @@ git commit -m ":package: deps(playbook): add tsl standards"
**规则优先级建议**
- 同一项目内多个规则集并行放在 `.agents/<lang>/`,不要互相覆盖
- 若某个子目录需要更具体规则(模块/子系统差异),在更靠近代码的目录放置更具体规则(例如
`src/foo/.agents/`),并以"离代码更近者优先"为准
- 若某个子目录需要更具体规则(模块/子系统差异),在更靠近代码的目录放置更具体规则(例如 `src/foo/.agents/`),并以"离代码更近者优先"为准

166
SKILLS.md
View File

@ -1,7 +1,6 @@
# SKILLS
本文件定义:如何在仓库中落地与维护 **AI agent skills**
并给出与本 Playbook`docs/` + `rulesets/`)配套的技能编写建议与内置技能清单。
本文档说明如何安装、启用和使用 AI agent skills。
支持的平台:
@ -10,11 +9,11 @@
| Codex CLI | `~/.agents/skills/` |
| Claude Code | `~/.claude/skills/` |
> 提示:本仓库将 skills 以可分发的形式放在 `skills/`,并提供脚本一键安装到对应平台目录。
---
## 1. 启用 skills必做
## 用户指南
### 1. 启用 skills必做
**Codex CLI** — 在 `~/.codex/config.toml` 中启用:
@ -29,39 +28,11 @@ skills = true
```json
{
"skills": true
“skills”: true
}
```
---
## 2. 本仓库的 skills 目录结构
本 Playbook 以“可分发、可安装”的方式提供 skills
```txt
skills/
<skill-name>/ # 本仓库自维护
SKILL.md
references/ # 可选:拆分参考文档
templates/ # 可选:模板
scripts/ # 可选:脚本/命令封装
thirdparty/ # 第三方同步(不可手动修改)
<skill-name>/
SKILL.md
.sources/ # 第三方来源清单
```
最终安装到本机后,对应路径为:
| 平台 | 路径 |
| ----------- | ---------------------------------------- |
| Codex CLI | `~/.agents/skills/<skill-name>/SKILL.md` |
| Claude Code | `~/.claude/skills/<skill-name>/SKILL.md` |
---
## 3. 安装到本机(推荐)
### 2. 安装到本机
使用统一入口 `playbook.py` 安装 skills通过 `agents_home` 指定目标平台目录:
@ -115,31 +86,66 @@ python <playbook_root>/scripts/playbook.py -config playbook.toml
其中 `<playbook_root>` 默认为 `docs/standards/playbook`
---
## 4. `SKILL.md` 最小规范
- 文件名必须是 `SKILL.md`
- 必须包含 YAML frontmatter`---` 包裹),且至少包含:
- `name`非空≤100 字符,建议 kebab-case 且与目录名一致
- `description`非空≤500 字符(写“用户会怎么说”的触发词;避免换行)
- frontmatter 之外的正文可以是任意 Markdown用于工作流说明/决策树/命令/模板索引)
---
## 5. 使用方式
### 3. 使用方式
- 在对话中通过 `$<skill-name>` 直接点名触发(例如:`$style-cleanup`
- Codex TUI可用 `/skills` 浏览与插入
- Claude Code通过 `/skills` 命令或直接在对话中触发
### 4. 可用 Skills 清单
完整清单(含作用说明、典型场景)见 [skills/README.md](skills/README.md)。
### 5. 运行时排障
- **不触发**
- Codex确认已启用 `[features] skills = true`,重启 `codex`
- Claude Code确认 skills 已启用,重启 Claude Code
- 确认 skill 已安装到对应平台目录
- **触发错**:减少不同 skill 的 `description` 关键词重叠;让触发词更具体(语言/工具/目录名/流程名)
- **启动报错**:通常是 YAML frontmatter 不合法或字段超长;修复后重启即可
---
## 6. 设计原则(写给维护者)
## 开发者指南
把 skill 当作“可检索的工作流模块”,而不是长篇教程:
### 目录结构
1. **边界清晰**:只写“仓库/组织特定”的流程、约束与验收标准;避免通用编程常识。
本 Playbook 以"可分发、可安装"的方式提供 skills
```txt
skills/
<skill-name>/ # 本仓库自维护
SKILL.md
references/ # 可选:拆分参考文档
templates/ # 可选:模板
scripts/ # 可选:脚本/命令封装
thirdparty/ # 第三方同步(不可手动修改)
<skill-name>/
SKILL.md
.sources/ # 第三方来源清单
```
最终安装到本机后,对应路径为:
| 平台 | 路径 |
| ----------- | ---------------------------------------- |
| Codex CLI | `~/.agents/skills/<skill-name>/SKILL.md` |
| Claude Code | `~/.claude/skills/<skill-name>/SKILL.md` |
### `SKILL.md` 最小规范
- 文件名必须是 `SKILL.md`
- 必须包含 YAML frontmatter`---` 包裹),且至少包含:
- `name`非空≤100 字符,建议 kebab-case 且与目录名一致
- `description`非空≤500 字符(写”用户会怎么说”的触发词;避免换行)
- frontmatter 之外的正文可以是任意 Markdown用于工作流说明/决策树/命令/模板索引)
### 设计原则
把 skill 当作”可检索的工作流模块”,而不是长篇教程:
1. **边界清晰**:只写”仓库/组织特定”的流程、约束与验收标准;避免通用编程常识。
2. **description 负责检索**:把团队常用说法(中英文同义词)写进
`description`,降低漏触发概率。
3. **SOP 化**:建议包含 Inputs → Procedure → Output Contract → Success Criteria
@ -148,9 +154,7 @@ python <playbook_root>/scripts/playbook.py -config playbook.toml
`references/`,引用深度 ≤ 1。
5. **高风险低自由度**:破坏性操作(删数据/重写历史/生产变更)默认先停下确认,并给回滚方案。
---
## 7. Playbook 权威来源(可在 skill 中引用)
### Playbook 权威来源(可在 skill 中引用)
- 提交信息:`docs/common/commit_message.md`
- TSL`docs/tsl/code_style.md`、`docs/tsl/naming.md`、`docs/tsl/toolchain.md`
@ -160,55 +164,21 @@ python <playbook_root>/scripts/playbook.py -config playbook.toml
若你的项目把本 Playbook 部署到项目内,文档根路径为
`<playbook_root>/docs/...`;其中 `<playbook_root>` 默认为 `docs/standards/playbook`,也可以按项目配置改成 `custom/playbook` 等自定义目录。
---
### 第三方 Skills 同步机制
## 8. 本 Playbook 原生 skills
本仓库通过 `thirdparty/skill` 分支同步第三方 skills。
位于 `skills/`Playbook 自维护部分),当前共 3 个。
第三方 skills 来源见第 9 节。
**来源登记**
### 语言特定 Skills
- `skills/thirdparty/.sources/`:来源清单目录(`*.list` 文件)
- `skills/thirdparty/thirdparty-skills.yml`:统一配置文件
当前仓库不再内置语言特定 skillTSL 相关问题请直接查阅 `rulesets/tsl/index.md``docs/tsl/`
**同步流程**
### 通用工作流 Skills
- `commit-message`:基于 staged diff 自动建议提交信息(`:emoji: type(scope): subject`
- `gitea-fix-ci`:诊断 Gitea Actions / PR checks 失败,先提取日志证据并形成修复计划,再按批准范围改代码
- `style-cleanup`:整理代码风格(优先使用仓库既有 formatter/lint 工具链)
1. 上游快照保存在 `thirdparty/skill` 分支
2. 自动同步后,落到仓库内 `skills/thirdparty/<skill-name>/`
3. 运行 `[install_skills]` 时,复制到目标平台 skills 目录(`~/.agents/skills/` 或 `~/.claude/skills/`
---
## 9. Third-party Skills
来源:`skills/thirdparty/.sources/`(第三方来源清单目录)。
- `superpowers.list`
- `ui-ux-pro-max.list`
- `andrej-karpathy-skills.list`
- `brooks-lint.list`
- `codebase-recon.list`
- `codebase-migrate.list`
- `uncle-bob-craft.list`
部署链路:
- `thirdparty/skill` 分支保存各上游快照,例如 `andrej-karpathy-skills/`、`awesome-codex-skills/`、`antigravity-awesome-skills/`
- 自动同步后,选中的下游 skill 会落到仓库内 `skills/thirdparty/<skill-name>/`
- 运行 `[install_skills]` 时,再复制到目标平台 skills 目录(`~/.agents/skills/` 或 `~/.claude/skills/`
- 该 skill 本身不依赖 Playbook 文档路径重写,也不需要像 `ui-ux-pro-max` 那样额外渲染
---
## 10. 运行时排障
- 不触发:
- Codex确认已启用 `[features] skills = true`,重启 `codex`
- Claude Code确认 skills 已启用,重启 Claude Code
- 确认 skill 已安装到对应平台目录(`~/.agents/skills/` 或 `~/.claude/skills/`
- 触发错:减少不同 skill 的 `description` 关键词重叠;让触发词更具体(语言/工具/目录名/流程名)。
- 启动报错:通常是 YAML frontmatter 不合法或字段超长;修复后重启即可。
---
**最后更新**2026-01-26
**最后更新**2026-06-17

View File

@ -4,7 +4,7 @@
是否可直接用于生成代码:仅部分
是否含可直接照写示例:否
是否含不可照写反例:否
遇到不确定时:[naming.md](naming.md)、[syntax/index.md](syntax/index.md)、[toolchain.md](toolchain.md)
遇到不确定时:风格/命名看 [naming.md](naming.md);语法事实看 [syntax/index.md](syntax/index.md)验证命令或自动化入口只看项目脚本、CI或目标项目已真实填写且没有 `<...>` 占位符的 [toolchain.md](toolchain.md)
本页记录本仓库代码风格偏好,不代表 TSL 语法事实。
@ -22,20 +22,19 @@
### 1.1 单一职责
- 一个文件只做一件事;职责明确。
- `.tsl` 作为可执行脚本:语句区在前并按顺序执行;需要本文件函数/类时,声明区放在语句区之后
- `.tsf` 作为模块/函数扩展文件:可复用逻辑下沉到 `.tsf`,部署到解释器 `funcext` 后供脚本调用
- 文件模型和顶层声明规则以 `docs/tsl/syntax/02_core_model.md` 为准;本页只规定组织偏好
- 可复用逻辑优先集中到可复用声明文件;入口/编排层只保留必要流程
- 当一个顶层声明同时承担“协议适配 + 业务计算 +
I/O/环境依赖 + 临时代码”时,优先拆分边界:核心纯逻辑 → 工具函数 → 边界适配I/O
### 1.2 文件名与顶层声明(硬约束)
### 1.2 文件名与顶层声明
- TSL 语法要求(仅 `.tsf`):每个 `.tsf`
文件只能有一个顶层声明,且文件基名必须与顶层声明同名。
- `.tsl` 允许直接写语句,不要求顶层声明;文件名不强制,但建议清晰可检索。
- `.tsl` 中如果同时需要脚本语句和函数/类声明,先写语句区,再写声明区;不要在声明区后继续追加脚本语句。
- 文件模型和顶层声明规则以 `docs/tsl/syntax/02_core_model.md` 为准;文件和实体如何命名见
`docs/tsl/naming.md`
- 文件名不强制表达完整职责,但应清晰可检索。
- 推荐文件名使用 `PascalCase` 以提升检索与协作一致性;扩展名按类型使用
`.tsl`/`.tsf`(两者都属于 TSL 源文件,风格规则一致)。
- 详细约束与命名细则见 `docs/tsl/naming.md`
- 重命名时同步检查引用、调用点、项目配置和文档链接
### 1.3 依赖与分层
@ -92,6 +91,7 @@ end
- 多语句分支使用 `begin/end` 包裹:在 `then/else` 后换行写 `begin``end`
单独成行。
- `else/elseif` 等分支关键字另起一行,与上一块的 `end` 对齐。
- 控制流块(`if`/`while`/`for`/`case`/`try` 等)的 `end` 后不加分号;顶层声明(函数/过程/类/`unit`)的 `end` 后加分号(这是语法要求,见 `syntax/05_functions_and_calls.md``syntax/09_units_and_scope.md`)。
- 单语句分支可省略 `begin/end`(保持清晰优先;一旦分支变复杂就回退到块结构):
代码块身份:配置片段 / 概念骨架
@ -195,8 +195,8 @@ count := count + 1;
## 4. 代码实践Best Practices
> 本节偏“实践建议”should用于提升可读性/可测试性;若目标项目有更严格的约束与检查命令,以项目落地的工具链为准(参考
> `docs/tsl/toolchain.md`。如果项目对自动化或 AI 代理有额外要求应把约束直接写进仓库内可见的检查脚本、CI 配置或项目文档,而不是依赖隐藏规范。
> 本节偏“实践建议”should用于提升可读性/可测试性;若目标项目有更严格的约束与检查命令,以项目脚本、CI 配置,或已填写且没有 `<...>` 占位符的
> `docs/tsl/toolchain.md` 为准。如果项目对自动化或 AI 代理有额外要求应把约束直接写进仓库内可见的检查脚本、CI 配置或项目文档,而不是依赖隐藏规范。
### 4.1 变量与常量

View File

@ -1,83 +1,42 @@
# TSL 文档入口
文档类型:检索
文档类型:跨层路由
是否可直接用于生成代码:否
是否含可直接照写示例:否
是否含不可照写反例:否
遇到不确定时:先按本文“任务路由”分层;语法问题看 [syntax/index.md](syntax/index.md),函数库查询看 [reference/index.md](reference/index.md),模块 / 集成看 [modules/index.md](modules/index.md),项目执行问题回项目自身文档、`scripts/*` 入口脚本和 CI 配置
遇到不确定时:先按“按任务跳转”分层;语法问题看 [syntax/index.md](syntax/index.md),函数库查询看 [reference/index.md](reference/index.md),模块 / 集成看 [modules/index.md](modules/index.md),项目执行问题回项目自身文档、`scripts/*` 入口脚本和 CI 配置
入口只负责一件事:让智能体先判断主问题属于哪一层,再进入最相关的单个入口页。本套 TSL 文档面向智能体决策,不按人类教程组织;回答和生成代码时必须按流程读,不要凭语言相似性补全
页只决定第一跳。不要在这里生成代码,不要通读全部 TSL 文档,不要用相似语言补全 TSL 事实
## 起手规则
## 按任务跳转
1. 先判断主问题层:语法、函数库、模块 / 集成,还是项目执行。
2. 只进入命中的单个入口页;不要同时展开语法、业务、函数库、模块和工具链。
3. 如果要生成或修改 TSL 代码,先做文件模型初判;详细规则见 [syntax/02_core_model.md](syntax/02_core_model.md)
- 用户已给出 `.tsl` / `.tsf` 后缀时,后缀就是判断依据。
- 用户未给后缀时,按交付目标判断:入口流程、脚本任务或一次性执行逻辑对应 `.tsl`;可复用函数、过程、类、模块或扩展对应 `.tsf`
- 仍不明确时先向用户确认,不要靠相似语言补全。
4. 写代码前找 `代码块身份:可直接照写示例`;遇到 `反例 / 不可照写`、输出片段或概念骨架必须避开。
5. 语法细节统一进入 [syntax/index.md](syntax/index.md) 后再分流;本页只保留跨层路由需要的最小提醒。
6. 本手册没有结论时,不要发明语法;改为向用户确认、记录文档缺口,或交由维护者补充文档结论。
| 任务信号 | 入口 | 阻断条件 |
| ------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------ |
| 写最短可运行骨架、核对语言核心事实 | [syntax/01_quickstart.md](syntax/01_quickstart.md) | `.tsl` / `.tsf` 文件模型不明 |
| 判断语法能不能写、查语言写法 | [syntax/index.md](syntax/index.md) | 没有命中具体语法专题 |
| 核对高频误写、反例、负向边界 | [syntax/11_pitfalls.md](syntax/11_pitfalls.md) | 反例没有指向正确专题 |
| 查行情、财务、板块、选股等金融函数 | [reference/catalog/datawarehouse.md](reference/catalog/datawarehouse.md) | 没有命中带参数表的函数事实条目 |
| 查通用函数库函数名、参数、返回值 | [reference/index.md](reference/index.md) | catalog 没有正式函数条目 |
| 用 Python 调 TSL、调用服务器函数、批量或异步取数 | [modules/pytsl_api.md](modules/pytsl_api.md) | 真实账号、服务地址、业务字段来自项目上下文 |
| 写回测框架、组合回测、读取回测结果 | [modules/tsbacktesting.md](modules/tsbacktesting.md) | 策略信号、证券池、资金参数缺失 |
| 看模块、集成、互操作入口 | [modules/index.md](modules/index.md) | 模块 API 与项目执行边界不清 |
| 确认账户、真实接口、部署、脚本入口、环境变量或 CI | 项目自身文档、`scripts/*` 入口脚本、CI 配置 | 只有通用 TSL 文档,没有项目事实 |
## 元数据与证据标签
项目执行事实条件:只有目标项目已真实填写且没有 `<...>` 占位符的 [toolchain.md](toolchain.md) 才可作为执行依据。
- 页头里的 `是否可直接用于生成代码` 只做页面级粗判断;如果页内已经给出 `代码块身份`,一律以块级标签为准。
- `是否可直接用于生成代码` 有三种值:`是`、`否`、`仅部分`;其中 `仅部分` 表示页内既有可直接参考的块,也有依赖多文件、查找路径或运行时环境的块,必须继续看块级标签。
- `是否含可直接照写示例` 只统计可直接照写的正向代码示例。
- `是否含不可照写反例` 只统计不可照写的负向例子。
- `代码块身份` 只使用固定词表:`可直接照写示例`、`输出片段`、`反例 / 不可照写`、`配置片段 / 概念骨架`。
- 如果还需要补充用途、限制或复用建议,单独写 `代码块说明`,不要把说明文字继续拼进 `代码块身份`
- 如果页头里的 `遇到不确定时` 列出多个目标,普通专题页默认第一项是优先入口;总入口页例外,必须先按任务路由分层。
## 证据规则
## 语法事实使用规则
- 页头元数据只做页面级粗判断;生成代码时以块级 `代码块身份` 为准。
- `可直接照写示例` 用于代码外形、语句顺序和块级结构。
- `输出片段` 只表示结果或错误形态。
- `反例 / 不可照写` 只用于避开错法,不反推新语法。
- `配置片段 / 概念骨架` 只表示结构提示,不代表可运行源码。
- 语法页不承载执行环境、账户体系、真实接口或验证命令。
- TSL 语法页面面向智能体生成代码;写成语法事实的内容就是生成依据,不再要求智能体自行证明。
- `可直接照写示例` 用于参考代码外形、语句顺序和块级结构。
- `输出片段` 只用于理解返回结果或错误形态,不作为代码照写。
- `反例 / 不可照写` 只用于避开对应写法,不反向推导新的语法。
- `配置片段 / 概念骨架` 只说明结构或配置位置,不代表可直接运行。
- 文档没有覆盖的写法不能生成;应向用户确认、记录文档缺口,或回到项目实际代码寻找证据。
- 执行环境细节不写进语法页;项目执行信息不能混入通用 TSL 事实。
## 停止条件
## 任务路由
| 任务 | 先读哪里 |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| 我要系统入门 TSL | [syntax/index.md](syntax/index.md) |
| 我要先核对语言核心事实 | [syntax/01_quickstart.md](syntax/01_quickstart.md) |
| 我要写最短可运行骨架 | [syntax/01_quickstart.md](syntax/01_quickstart.md) |
| 我要判断“这句语法能不能写” | [syntax/index.md](syntax/index.md) |
| 我要核对较新写法 / 新能力并入 / 资料冲突 / 解释器版本边界 | [syntax/index.md](syntax/index.md),再按主题跳到对应语法页 |
| 我要核对高频误写 / 反例 / 负向边界 | [syntax/11_pitfalls.md](syntax/11_pitfalls.md) |
| 我要查行情 / 财务 / 板块 / 选股等金融函数 | [reference/catalog/datawarehouse.md](reference/catalog/datawarehouse.md) |
| 我要用 Python 调 TSL 服务器函数或取金融数据 | [modules/pytsl_api.md](modules/pytsl_api.md) |
| 我要写回测框架 / 读取回测结果 | [modules/tsbacktesting.md](modules/tsbacktesting.md) |
| 我要看模块 / 集成 / 互操作入口 | [modules/index.md](modules/index.md) |
| 我要确认账户体系 / 真实接口 / 部署方式 / 脚本入口 / 环境变量 / CI / 验证命令 | 项目自身文档、`scripts/*` 入口脚本、CI 配置;有项目文档时再看 [toolchain.md](toolchain.md) |
| 我要查函数库 | [reference/index.md](reference/index.md) |
## 路由冲突处理
- 如果一个问题同时涉及业务和语法,先按主问题分层。
- 如果主问题是业务实现,先走 `modules/`、`reference/catalog/datawarehouse.md` 或项目实际接口文档,语法只作辅证,不反过来吞掉业务入口。
- 如果主问题是语言写法,先走 `syntax/`,金融或模块页只作为示例和上下文。
- 如果主问题已经落到真实接入参数、账号来源、部署依赖、执行入口或权限模型,直接转“项目依赖 / 项目执行”确认,不继续在 `modules/`、`syntax/` 或模板型 `toolchain.md` 里兜圈子。
## 通用 TSL 语法骨架路径
只有主问题是语言写法、最短骨架或语法有效性时,才从本节起手;如果主问题是模块集成、函数库查询或项目执行,先回到“任务路由”。
1. 先看 [syntax/01_quickstart.md](syntax/01_quickstart.md) 的语言核心事实和最短骨架。
2. 再按 [syntax/index.md](syntax/index.md) 进入命中的语法专题。
3. 涉及反例、常见误写或负向边界时,看 [syntax/11_pitfalls.md](syntax/11_pitfalls.md)。
## 智能体提交前最低自检
1. 是否已经判断主问题属于语法、函数库、模块/集成或项目执行。
2. 如果要生成代码,是否已经确认 `.tsl` / `.tsf` 文件模型。
3. 是否优先参考了 `代码块身份:可直接照写示例`
4. 是否避开了 `反例 / 不可照写`、输出片段和概念骨架。
5. 是否没有凭 Pascal、Python、JavaScript、TypeScript 或其它语言相似性补全 TSL 语法。
6. 是否没有把项目执行信息、账户体系、真实接口或验证命令写成通用 TSL 事实。
7. 仍不确定的地方是否明确说明,而不是隐藏在生成代码里。
- 代码外形缺少 `代码块身份:可直接照写示例`
- 无文档事实、文件模型不明或项目执行事实缺失。
- 需要复制反例、输出片段或概念骨架才能完成。
- 需要凭 Pascal、Python、JavaScript、TypeScript 或 SQL 直觉补语法。
- 项目执行信息会被写成通用 TSL 事实。

View File

@ -4,9 +4,9 @@
是否可直接用于生成代码:仅部分
是否含可直接照写示例:否
是否含不可照写反例:否
遇到不确定时:[code_style.md](code_style.md)、[syntax/index.md](syntax/index.md)、[syntax/02_core_model.md](syntax/02_core_model.md)
遇到不确定时:命名对象不明看 [syntax/02_core_model.md](syntax/02_core_model.md);代码组织看 [code_style.md](code_style.md);语法事实看 [syntax/index.md](syntax/index.md)
本页记录本仓库/作者的命名偏好,不代表 TSL 语法事实。命名偏好与 Google C++ Style Guide 的实体形状思路对齐:通过名字的“形状”快速判断实体类型(类型/函数/变量/常量等),减少阅读成本。
本页记录本仓库/作者的命名偏好,不代表 TSL 语法事实。本页只规定命名后的实体如何取名,不承担文件模型、顶层声明、执行顺序等语法判断。命名偏好与 Google C++ Style Guide 的实体形状思路对齐:通过名字的“形状”快速判断实体类型(类型/函数/变量/常量等),减少阅读成本。
以下出现的 `<...>` 形式只表示命名或注释模板占位,不是源码字面量。
@ -49,8 +49,7 @@
## 3. 类型命名Type Names
AI 先按 `.tsl` 可执行脚本与 `.tsf` 模块/函数扩展判断文件模型。`.tsl` 里的语句区按顺序执行,函数/类声明区放在语句区之后;`.tsf` 用于可复用顶层声明并部署到解释器 `funcext`。本页只覆盖“需要命名的顶层实体”,不覆盖脚本语句本身;文件模型判断本身以
`docs/tsl/syntax/02_core_model.md` 为准。
文件模型和顶层声明规则以 `docs/tsl/syntax/02_core_model.md` 为准。本页只覆盖“需要命名的顶层实体”,不覆盖脚本语句本身。
- **类与单元**使用
`PascalCase`,不带下划线;名称应为名词/名词短语(通常单数),避免动词开头。
@ -65,20 +64,13 @@ AI 先按 `.tsl` 可执行脚本与 `.tsf` 模块/函数扩展判断文件模型
## 4. 文件命名与顶层声明File Names
TSL 的语法要求(仅 `.tsf`):每个 `.tsf`
文件只能有一个顶层声明,且**文件基名必须与该顶层声明名字一致**
文件模型、可写顶层声明、声明与文件关系以
`docs/tsl/syntax/02_core_model.md` 为准;本节只给已经确定要命名的文件/实体提供命名偏好
- 更可靠的判断方式仍然是先看顶层内容,而不是只看扩展名;命名偏好只是补充“命名后的实体如何取名”,不替代文件模型判断。
- 先用核心模型页判断目标是否存在需要命名的顶层实体;不要从本页反推
`.tsl` / `.tsf` 可写结构。
- 需要命名的顶层实体可以是 `function / procedure`、`type Name = class`、`unit`。
- `.tsf` 代码文件:用于库/模块等“顶层声明”的首选承载文件;顶层声明可为
`function / procedure`、`type Name = class`、`unit`,文件基名需与之同名。
- `.tsl` 脚本文件:用于入口/编排层;允许直接写语句(如
`a := 1; echo a;`),也可能出现顶层 `function / procedure` 骨架
这类示例脚本外壳;如果同时出现脚本语句和函数/类声明,语句区在前,声明区在后;但风格上不把 `.tsl` 当成可复用顶层声明的默认落点,也不要求文件基名与函数名一致;可复用逻辑优先下沉到
`.tsf`(见 `docs/tsl/code_style.md`)。
- 注:`.tsf` 也是 TSL 源文件,命名/风格与 `.tsl` 遵循同一套规则。
- **硬规则(仅
`.tsf`**:重命名顶层声明时必须同步重命名文件基名,否则语法/加载规则无法识别;批量重命名时也必须把这两处一起改掉。
- 批量重命名时,把文件基名和顶层实体名作为同一组维护,避免检索和协作断裂。
命名建议:

View File

@ -23,32 +23,28 @@
| 分类 | 详情页 | 函数事实数 |
| ---------------------------- | ------------------------------------------------------------------------------ | ---------: |
| 常用日期时间函数 | [base/01_common_datetime.md](base/01_common_datetime.md) | 32 |
| 简单转换函数 | [base/02_simple_conversion.md](base/02_simple_conversion.md) | 2 |
| 普通日期函数 | [base/03_date_basic.md](base/03_date_basic.md) | 19 |
| 分解函数 | [base/04_datetime_parts.md](base/04_datetime_parts.md) | 9 |
| 起始结束函数 | [base/05_datetime_boundaries.md](base/05_datetime_boundaries.md) | 16 |
| 关系函数 | [base/06_datetime_relations.md](base/06_datetime_relations.md) | 28 |
| 范围判定函数 | [base/07_range_predicates.md](base/07_range_predicates.md) | 8 |
| 范围获得函数 | [base/08_range_getters.md](base/08_range_getters.md) | 8 |
| 范围生成函数 | [base/09_range_span.md](base/09_range_span.md) | 8 |
| 时间推移函数 | [base/10_time_shift.md](base/10_time_shift.md) | 8 |
| 组合、分解日期函数 | [base/11_compose_decompose_datetime.md](base/11_compose_decompose_datetime.md) | 11 |
| 日期重组函数 | [base/12_datetime_recode.md](base/12_datetime_recode.md) | 21 |
| 日期格式的转换 | [base/13_datetime_format_conversion.md](base/13_datetime_format_conversion.md) | 10 |
| 宽字节日期格式转换函数 | [base/14_wide_datetime_conversion.md](base/14_wide_datetime_conversion.md) | 6 |
| 常用字符串函数 | [base/15_string_common.md](base/15_string_common.md) | 69 |
| 判定函数 | [base/16_string_predicates.md](base/16_string_predicates.md) | 8 |
| 替换以及处理函数 | [base/17_string_replace_process.md](base/17_string_replace_process.md) | 8 |
| 字符串数组相关函数 | [base/18_string_array.md](base/18_string_array.md) | 2 |
| 重复函数 | [base/19_repeat.md](base/19_repeat.md) | 1 |
| 多字节语言支持函数 | [base/20_multibyte_language.md](base/20_multibyte_language.md) | 2 |
| 字节函数 | [base/21_byte.md](base/21_byte.md) | 8 |
| 发音相关函数 | [base/22_phonetic.md](base/22_phonetic.md) | 10 |
| 正则表达式函数 | [base/23_regex.md](base/23_regex.md) | 3 |
| 多语言支持函数 | [base/24_multilanguage.md](base/24_multilanguage.md) | 33 |
| 文件名以及目录名相关处理函数 | [base/25_path_filename.md](base/25_path_filename.md) | 18 |
| 基本 | [base/26_array_basic.md](base/26_array_basic.md) | 4 |
| 数组下标以及长度相关函数 | [base/27_array_index_length.md](base/27_array_index_length.md) | 7 |
| 排序函数 | [base/28_array_sort.md](base/28_array_sort.md) | 2 |
| 增删改查 | [base/29_array_crud.md](base/29_array_crud.md) | 6 |
| 重构函数 | [base/30_array_restructure.md](base/30_array_restructure.md) | 2 |
| 字符串数组与重复函数 | [base/17_string_array_and_repeat.md](base/17_string_array_and_repeat.md) | 3 |
| 普通日期函数 | [base/02_date_basic.md](base/02_date_basic.md) | 19 |
| 分解函数 | [base/03_datetime_parts.md](base/03_datetime_parts.md) | 9 |
| 起始结束函数 | [base/04_datetime_boundaries.md](base/04_datetime_boundaries.md) | 16 |
| 关系函数 | [base/05_datetime_relations.md](base/05_datetime_relations.md) | 28 |
| 范围判定函数 | [base/06_range_predicates.md](base/06_range_predicates.md) | 8 |
| 范围获得函数 | [base/07_range_getters.md](base/07_range_getters.md) | 8 |
| 范围生成函数 | [base/08_range_span.md](base/08_range_span.md) | 8 |
| 时间推移函数 | [base/09_time_shift.md](base/09_time_shift.md) | 8 |
| 组合、分解日期函数 | [base/10_compose_decompose_datetime.md](base/10_compose_decompose_datetime.md) | 11 |
| 日期重组函数 | [base/11_datetime_recode.md](base/11_datetime_recode.md) | 21 |
| 日期格式的转换 | [base/12_datetime_format_conversion.md](base/12_datetime_format_conversion.md) | 10 |
| 宽字节日期格式转换函数 | [base/13_wide_datetime_conversion.md](base/13_wide_datetime_conversion.md) | 6 |
| 数组排序与重构 | [base/25_array_sort_and_operations.md](base/25_array_sort_and_operations.md) | 4 |
| 常用字符串函数 | [base/14_string_common.md](base/14_string_common.md) | 69 |
| 判定函数 | [base/15_string_predicates.md](base/15_string_predicates.md) | 8 |
| 替换以及处理函数 | [base/16_string_replace_process.md](base/16_string_replace_process.md) | 8 |
| 字节函数 | [base/18_byte.md](base/18_byte.md) | 8 |
| 发音相关函数 | [base/19_phonetic.md](base/19_phonetic.md) | 10 |
| 正则表达式函数 | [base/20_regex.md](base/20_regex.md) | 3 |
| 多语言支持函数 | [base/21_multilanguage.md](base/21_multilanguage.md) | 33 |
| 文件名以及目录名相关处理函数 | [base/22_path_filename.md](base/22_path_filename.md) | 18 |
| 基本 | [base/23_array_basic.md](base/23_array_basic.md) | 4 |
| 数组下标以及长度相关函数 | [base/24_array_index_length.md](base/24_array_index_length.md) | 7 |
| 增删改查 | [base/26_array_crud.md](base/26_array_crud.md) | 6 |

View File

@ -230,3 +230,27 @@
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `aday` | 是 | 整数 | 按源文档示例顺序传入 |
| 2 | `today` | 是 | 整数 | 按源文档示例顺序传入 |
## 简单转换函数
### `dateToInt(value)`
用途:日期时间处理函数。
参数个数1
返回值:日期或时间值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 整数 | 按源文档示例顺序传入 |
### `intToDate(value)`
用途:日期时间处理函数。
参数个数1
返回值:日期或时间值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,29 +0,0 @@
# 基础函数 - 简单转换函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../base.md](../base.md)、[../../index.md](../../index.md)
## 简单转换函数
### `dateToInt(value)`
用途:日期时间处理函数。
参数个数1
返回值:日期或时间值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 整数 | 按源文档示例顺序传入 |
### `intToDate(value)`
用途:日期时间处理函数。
参数个数1
返回值:日期或时间值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,4 +1,4 @@
# 基础函数 - 字符串数组相关函数
# 基础函数 - 字符串数组与重复函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
@ -29,3 +29,17 @@
| -------- | --------- | ---- | -------- | -------------------- |
| 1 | `eg_str` | 是 | 字符串 | 按源文档示例顺序传入 |
| 2 | `str_arr` | 是 | 字符串 | 按源文档示例顺序传入 |
## 重复函数
### `dupeString(value, arg2)`
用途:字符串相关函数。
参数个数2
返回值:字符串
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 字符串 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,19 +0,0 @@
# 基础函数 - 重复函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../base.md](../base.md)、[../../index.md](../../index.md)
## 重复函数
### `dupeString(value, arg2)`
用途:字符串相关函数。
参数个数2
返回值:字符串
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------------- |
| 1 | `value` | 是 | 字符串 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,31 +0,0 @@
# 基础函数 - 多字节语言支持函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../base.md](../base.md)、[../../index.md](../../index.md)
## 多字节语言支持函数
### `lengthW(test_str)`
用途:字符串相关函数。
参数个数1
返回值:整数
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ---------- | ---- | -------- | -------------------- |
| 1 | `test_str` | 是 | 字符串 | 按源文档示例顺序传入 |
### `midStr(test_str, arg2, arg3)`
用途:字符串相关函数。
参数个数3
返回值:字符串
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ---------- | ---- | -------- | -------------------- |
| 1 | `test_str` | 是 | 字符串 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入 |
| 3 | `arg3` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -381,3 +381,29 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `s` | 是 | 数组 | 按源文档示例顺序传入 |
## 多字节语言支持函数(补充)
### `lengthW(test_str)`
用途:字符串相关函数。
参数个数1
返回值:整数
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ---------- | ---- | -------- | -------------------- |
| 1 | `test_str` | 是 | 字符串 | 按源文档示例顺序传入 |
### `midStr(test_str, arg2, arg3)`
用途:字符串相关函数。
参数个数3
返回值:字符串
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ---------- | ---- | -------- | -------------------- |
| 1 | `test_str` | 是 | 字符串 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入 |
| 3 | `arg3` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,9 +1,35 @@
# 基础函数 - 重构函数
# 基础函数 - 数组排序与重构函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../base.md](../base.md)、[../../index.md](../../index.md)
## 排序函数
### `sortArray(arr)`
用途:排序函数相关函数。
参数个数1
返回值:处理结果
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `arr` | 是 | 数组 | 按源文档示例顺序传入 |
### `sortTableByField(arr, arg2, arg3)`
用途:排序函数相关函数。
参数个数3
返回值:处理结果
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `arr` | 是 | 数组 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 字符串 | 按源文档示例顺序传入 |
| 3 | `arg3` | 是 | 整数 | 按源文档示例顺序传入 |
## 重构函数
### `reIndex(a, arg2[, s])`
@ -28,6 +54,6 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `a` | 是 | 组 | 按源文档示例顺序传入 |
| 1 | `a` | 是 | 组 | 按源文档示例顺序传入 |
| 2 | `arg2` | 否 | 整数 | 按源文档示例顺序传入 |
| 3 | `arg3` | 否 | 整数 | 按源文档示例顺序传入 |

View File

@ -1,31 +0,0 @@
# 基础函数 - 排序函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../base.md](../base.md)、[../../index.md](../../index.md)
## 排序函数
### `sortArray(arr)`
用途:排序函数相关函数。
参数个数1
返回值:处理结果
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `arr` | 是 | 数组 | 按源文档示例顺序传入 |
### `sortTableByField(arr, arg2, arg3)`
用途:排序函数相关函数。
参数个数3
返回值:处理结果
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------- |
| 1 | `arr` | 是 | 数组 | 按源文档示例顺序传入 |
| 2 | `arg2` | 是 | 字符串 | 按源文档示例顺序传入 |
| 3 | `arg3` | 是 | 整数 | 按源文档示例顺序传入 |

View File

@ -23,34 +23,27 @@
| 分类 | 详情页 | 函数事实数 |
| -------------------------- | -------------------------------------------------------------------------------------------------------- | ---------: |
| 系统参数键 | [datawarehouse/01_system_param_keys.md](datawarehouse/01_system_param_keys.md) | 1 |
| 系统参数名称函数 | [datawarehouse/02_system_param_names.md](datawarehouse/02_system_param_names.md) | 17 |
| 多市场支撑函数 | [datawarehouse/03_multi_market.md](datawarehouse/03_multi_market.md) | 5 |
| 时间相关函数 | [datawarehouse/04_time.md](datawarehouse/04_time.md) | 4 |
| 判定函数 | [datawarehouse/05_predicates.md](datawarehouse/05_predicates.md) | 14 |
| 盘中相关 | [datawarehouse/06_intraday.md](datawarehouse/06_intraday.md) | 1 |
| 盘后相关(在当日可用于盘中) | [datawarehouse/07_after_close_intraday_available.md](datawarehouse/07_after_close_intraday_available.md) | 63 |
| 时间序列统计 | [datawarehouse/08_time_series_stats.md](datawarehouse/08_time_series_stats.md) | 40 |
| 成交明细数据函数 | [datawarehouse/09_transaction_detail_data.md](datawarehouse/09_transaction_detail_data.md) | 9 |
| 交易明细字段标识函数 | [datawarehouse/10_transaction_detail_fields.md](datawarehouse/10_transaction_detail_fields.md) | 28 |
| 查询和轮询函数 | [datawarehouse/11_query_polling.md](datawarehouse/11_query_polling.md) | 1 |
| 市场和板块函数 | [datawarehouse/12_market_sector.md](datawarehouse/12_market_sector.md) | 5 |
| 取行情数据序列函数 | [datawarehouse/13_quote_series.md](datawarehouse/13_quote_series.md) | 3 |
| 引用指定函数 | [datawarehouse/14_reference_functions.md](datawarehouse/14_reference_functions.md) | 4 |
| 系统参数设置和获取函数 | [datawarehouse/15_sys_param_access.md](datawarehouse/15_sys_param_access.md) | 4 |
| 复权类型函数 | [datawarehouse/16_reinstatement_types.md](datawarehouse/16_reinstatement_types.md) | 3 |
| 复权基准日函数 | [datawarehouse/17_reinstatement_base_date.md](datawarehouse/17_reinstatement_base_date.md) | 2 |
| 周期函数 | [datawarehouse/18_cycle.md](datawarehouse/18_cycle.md) | 34 |
| 财务函数 | [datawarehouse/19_financial.md](datawarehouse/19_financial.md) | 18 |
| 选股与取数 | [datawarehouse/20_selection_and_fetch.md](datawarehouse/20_selection_and_fetch.md) | 6 |
| 向导函数 | [datawarehouse/21_wizard.md](datawarehouse/21_wizard.md) | 22 |
| 向导函数 / N期 | [datawarehouse/22_wizard_n_periods.md](datawarehouse/22_wizard_n_periods.md) | 18 |
| 向导函数 / N日 | [datawarehouse/23_wizard_n_days.md](datawarehouse/23_wizard_n_days.md) | 38 |
| 向导函数 / N日 / 中间函数 | [datawarehouse/24_wizard_n_days_intermediate.md](datawarehouse/24_wizard_n_days_intermediate.md) | 2 |
| 向导函数 / 历史遗留 | [datawarehouse/25_wizard_legacy.md](datawarehouse/25_wizard_legacy.md) | 2 |
| 向导函数 / 区间 | [datawarehouse/26_wizard_range.md](datawarehouse/26_wizard_range.md) | 32 |
| 向导函数 / 中间函数 | [datawarehouse/27_wizard_intermediate.md](datawarehouse/27_wizard_intermediate.md) | 8 |
| 向导函数 / N季 | [datawarehouse/28_wizard_n_quarters.md](datawarehouse/28_wizard_n_quarters.md) | 6 |
| 向导函数 / 当日 | [datawarehouse/29_wizard_today.md](datawarehouse/29_wizard_today.md) | 16 |
| 向导函数 / 当日 / 中间函数 | [datawarehouse/30_wizard_today_intermediate.md](datawarehouse/30_wizard_today_intermediate.md) | 7 |
| 条件判定 | [datawarehouse/31_condition_predicates.md](datawarehouse/31_condition_predicates.md) | 1 |
| 系统参数名称函数 | [datawarehouse/01_system_param_names.md](datawarehouse/01_system_param_names.md) | 17 |
| 多市场支撑函数 | [datawarehouse/02_multi_market.md](datawarehouse/02_multi_market.md) | 5 |
| 日内数据与收盘后可用 | [datawarehouse/05_intraday_and_after_close.md](datawarehouse/05_intraday_and_after_close.md) | 2 |
| 时间相关函数 | [datawarehouse/03_time.md](datawarehouse/03_time.md) | 4 |
| 判定函数 | [datawarehouse/04_predicates.md](datawarehouse/04_predicates.md) | 14 |
| 时间序列统计 | [datawarehouse/06_time_series_stats.md](datawarehouse/06_time_series_stats.md) | 40 |
| 成交明细数据函数 | [datawarehouse/07_transaction_detail_data.md](datawarehouse/07_transaction_detail_data.md) | 9 |
| 交易明细字段标识函数 | [datawarehouse/08_transaction_detail_fields.md](datawarehouse/08_transaction_detail_fields.md) | 28 |
| 市场和板块函数 | [datawarehouse/09_market_sector.md](datawarehouse/09_market_sector.md) | 5 |
| 取行情数据序列函数 | [datawarehouse/10_quote_series.md](datawarehouse/10_quote_series.md) | 3 |
| 引用指定函数 | [datawarehouse/11_reference_functions.md](datawarehouse/11_reference_functions.md) | 4 |
| 系统参数设置和获取函数 | [datawarehouse/12_sys_param_access.md](datawarehouse/12_sys_param_access.md) | 4 |
| 复权相关 | [datawarehouse/13_reinstatement.md](datawarehouse/13_reinstatement.md) | 5 |
| 周期函数 | [datawarehouse/14_cycle.md](datawarehouse/14_cycle.md) | 34 |
| 财务函数 | [datawarehouse/15_financial.md](datawarehouse/15_financial.md) | 18 |
| 选股与取数 | [datawarehouse/16_selection_and_fetch.md](datawarehouse/16_selection_and_fetch.md) | 6 |
| 向导函数 | [datawarehouse/17_wizard.md](datawarehouse/17_wizard.md) | 22 |
| 向导函数 / N期 | [datawarehouse/18_wizard_n_periods.md](datawarehouse/18_wizard_n_periods.md) | 18 |
| 向导函数 / N日 | [datawarehouse/19_wizard_n_days.md](datawarehouse/19_wizard_n_days.md) | 38 |
| 向导函数 / 区间 | [datawarehouse/20_wizard_range.md](datawarehouse/20_wizard_range.md) | 32 |
| 向导函数 / 中间函数 | [datawarehouse/21_wizard_intermediate.md](datawarehouse/21_wizard_intermediate.md) | 8 |
| 向导函数 / N季 | [datawarehouse/22_wizard_n_quarters.md](datawarehouse/22_wizard_n_quarters.md) | 6 |
| 向导函数 / 当日 | [datawarehouse/23_wizard_today.md](datawarehouse/23_wizard_today.md) | 16 |
| 向导函数 / 当日 / 中间函数 | [datawarehouse/24_wizard_today_intermediate.md](datawarehouse/24_wizard_today_intermediate.md) | 7 |

View File

@ -1,18 +0,0 @@
# 数据仓库金融函数 - 系统参数键
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 系统参数键
### `cyclefilter`
用途:设置周期过滤器以及集合竞价分离器。它是系统参数键,不是函数调用。
参数个数:不适用
返回值:不适用
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------- |
| 1 | `value` | 是 | 整数 | 通过 `setSysParam("cyclefilter", value)` 设置;`0` 取消过滤,`1` 过滤期货放假期间夜盘,`3` 新增集合竞价周期点 |

View File

@ -161,3 +161,21 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------------------------------- |
| 1 | `arg1` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `46002` |
# 数据仓库金融函数 - 条件判定
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 条件判定
### `isTimePeriodInfoId(arg1)`
用途:条件判定相关函数。
参数个数1
返回值:布尔值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | --------------------------------------------- |
| 1 | `arg1` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `150003` |

View File

@ -1,3 +1,21 @@
# 数据仓库金融函数 - 日内数据
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 盘中相关
### `rd(arg1)`
用途:盘中相关相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---------------------------------------- |
| 1 | `arg1` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `0` |
# 数据仓库金融函数 - 盘后相关(在当日可用于盘中)
文档类型:函数事实页

View File

@ -1,18 +0,0 @@
# 数据仓库金融函数 - 盘中相关
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 盘中相关
### `rd(arg1)`
用途:盘中相关相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---------------------------------------- |
| 1 | `arg1` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `0` |

View File

@ -1,27 +0,0 @@
# 数据仓库金融函数 - 查询和轮询函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 查询和轮询函数
### `query(arg1, stock_id_2, arg3, arg4, arg5, stock_id_6, arg7, stock_id_8, arg9, arg10)`
用途:查询和轮询函数相关函数。
参数个数10
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | -------- | ------------------------------------------------------------------- |
| 1 | `arg1` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'上证A股;创业板'` |
| 2 | `stock_id_2` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'SZ000001;SZ000002;SZ000997'` |
| 3 | `arg3` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `close() > ma(close(), 10)` |
| 4 | `arg4` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `''` |
| 5 | `arg5` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'证券代码'` |
| 6 | `stock_id_6` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `DefaultStockID()` |
| 7 | `arg7` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'证券名称'` |
| 8 | `stock_id_8` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `CurrentStockName()` |
| 9 | `arg9` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'收盘价'` |
| 10 | `arg10` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `close()` |

View File

@ -51,3 +51,16 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ---------- | ---- | -------- | ------------------------------------------------- |
| 1 | `stock_id` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `pn_stock()` |
## 系统参数键
### `cyclefilter`
用途:设置周期过滤器以及集合竞价分离器。它是系统参数键,不是函数调用。
参数个数:不适用
返回值:不适用
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | ------------------------------------------------------------------------------------------------------------- |
| 1 | `value` | 是 | 整数 | 通过 `setSysParam("cyclefilter", value)` 设置;`0` 取消过滤,`1` 过滤期货放假期间夜盘,`3` 新增集合竞价周期点 |

View File

@ -1,4 +1,4 @@
# 数据仓库金融函数 - 复权类型函数
# 数据仓库金融函数 - 复权相关
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
@ -35,3 +35,30 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |
# 数据仓库金融函数 - 复权基准日函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 复权基准日函数
### `rd_lastday()`
用途:复权基准日函数相关函数。
参数个数0
返回值:常量值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |
### `rd_firstday()`
用途:复权基准日函数相关函数。
参数个数0
返回值:常量值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |

View File

@ -102,3 +102,30 @@
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | -------------------------------------------- |
| 1 | `arg1` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'1+3'` |
# 数据仓库金融函数 - 查询和轮询函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 查询和轮询函数
### `query(arg1, stock_id_2, arg3, arg4, arg5, stock_id_6, arg7, stock_id_8, arg9, arg10)`
用途:查询和轮询函数相关函数。
参数个数10
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | -------- | ------------------------------------------------------------------- |
| 1 | `arg1` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'上证A股;创业板'` |
| 2 | `stock_id_2` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'SZ000001;SZ000002;SZ000997'` |
| 3 | `arg3` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `close() > ma(close(), 10)` |
| 4 | `arg4` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `''` |
| 5 | `arg5` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'证券代码'` |
| 6 | `stock_id_6` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `DefaultStockID()` |
| 7 | `arg7` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'证券名称'` |
| 8 | `stock_id_8` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `CurrentStockName()` |
| 9 | `arg9` | 是 | 字符串 | 按源文档示例顺序传入;示例参数形态为 `'收盘价'` |
| 10 | `arg10` | 是 | 任意值 | 按源文档示例顺序传入;示例参数形态为 `close()` |

View File

@ -1,27 +0,0 @@
# 数据仓库金融函数 - 复权基准日函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 复权基准日函数
### `rd_lastday()`
用途:复权基准日函数相关函数。
参数个数0
返回值:常量值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |
### `rd_firstday()`
用途:复权基准日函数相关函数。
参数个数0
返回值:常量值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |

View File

@ -105,3 +105,62 @@
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
| 2 | `date_value_2` | 是 | 日期或时间值 | 按源文档示例顺序传入;示例参数形态为 `20230101T` |
| 3 | `date_value_3` | 是 | 日期或时间值 | 按源文档示例顺序传入;示例参数形态为 `20230110T` |
# 数据仓库金融函数 - 向导函数 / N日 / 中间函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 向导函数 / N日 / 中间函数
### `getExpCaceStr(expression)`
用途:向导函数相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
### `techCal_unit(expression)`
用途:向导函数相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
# 数据仓库金融函数 - 向导函数 / 历史遗留
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 向导函数 / 历史遗留
### `sumOfSectorExceptNoTrade(expression)`
用途:进行数值统计计算。
参数个数1
返回值:处理后的结果值。
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
### `avgOfSectorExceptNoTrade(expression, arg2)`
用途:进行数值统计计算。
参数个数2
返回值:处理后的结果值。
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `0` |

View File

@ -1,29 +0,0 @@
# 数据仓库金融函数 - 向导函数 / N日 / 中间函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 向导函数 / N日 / 中间函数
### `getExpCaceStr(expression)`
用途:向导函数相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
### `techCal_unit(expression)`
用途:向导函数相关函数。
参数个数1
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |

View File

@ -1,30 +0,0 @@
# 数据仓库金融函数 - 向导函数 / 历史遗留
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 向导函数 / 历史遗留
### `sumOfSectorExceptNoTrade(expression)`
用途:进行数值统计计算。
参数个数1
返回值:处理后的结果值。
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
### `avgOfSectorExceptNoTrade(expression, arg2)`
用途:进行数值统计计算。
参数个数2
返回值:处理后的结果值。
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------ | ---- | ---------- | ----------------------------------------------- |
| 1 | `expression` | 是 | 表达式对象 | 按源文档示例顺序传入;示例参数形态为 `@close()` |
| 2 | `arg2` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `0` |

View File

@ -1,18 +0,0 @@
# 数据仓库金融函数 - 条件判定
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../datawarehouse.md](../datawarehouse.md)、[../../index.md](../../index.md)
## 条件判定
### `isTimePeriodInfoId(arg1)`
用途:条件判定相关函数。
参数个数1
返回值:布尔值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | --------------------------------------------- |
| 1 | `arg1` | 是 | 整数 | 按源文档示例顺序传入;示例参数形态为 `150003` |

View File

@ -28,6 +28,5 @@
| 文件读写类型函数 | [resource/04_file_rw_types.md](resource/04_file_rw_types.md) | 7 |
| 网络访问以及相关函数 | [resource/05_network.md](resource/05_network.md) | 9 |
| INI文件处理函数 | [resource/06_ini.md](resource/06_ini.md) | 23 |
| 宽字节处理函数 | [resource/07_wide_byte.md](resource/07_wide_byte.md) | 1 |
| 进程相关函数 | [resource/08_process.md](resource/08_process.md) | 44 |
| 本地资源相关函数 | [resource/09_local_resource.md](resource/09_local_resource.md) | 8 |
| 进程相关函数 | [resource/07_process.md](resource/07_process.md) | 44 |
| 本地资源相关函数 | [resource/08_local_resource.md](resource/08_local_resource.md) | 8 |

View File

@ -386,3 +386,20 @@
| 3 | `arg3` | 是 | 字符串 | 按源文档示例顺序传入 |
| 4 | `lj1` | 是 | 任意值 | 按源文档示例顺序传入 |
| 5 | `arg5` | 否 | 整数 | 按源文档示例顺序传入 |
# 资源访问函数 - 宽字节处理函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../resource.md](../resource.md)、[../../index.md](../../index.md)
## 宽字节处理函数
### `iniReadSectionsw()`
用途INI文件处理函数相关函数。
参数个数0
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |

View File

@ -1,17 +0,0 @@
# 资源访问函数 - 宽字节处理函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../resource.md](../resource.md)、[../../index.md](../../index.md)
## 宽字节处理函数
### `iniReadSectionsw()`
用途INI文件处理函数相关函数。
参数个数0
返回值:处理后的结果值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | ---- |

View File

@ -24,11 +24,7 @@
| ---------------- | ------------------------------------------------------------ | ---------: |
| 数据类型函数 | [system/01_data_type.md](system/01_data_type.md) | 27 |
| 数据类型转换函数 | [system/02_type_conversion.md](system/02_type_conversion.md) | 13 |
| 复制函数 | [system/03_copy.md](system/03_copy.md) | 1 |
| 全局缓存函数 | [system/04_global_cache.md](system/04_global_cache.md) | 4 |
| 随机函数 | [system/05_random.md](system/05_random.md) | 3 |
| 条件选择函数 | [system/06_conditional.md](system/06_conditional.md) | 1 |
| 表达式相关函数 | [system/07_expression.md](system/07_expression.md) | 5 |
| 性能优化相关函数 | [system/08_profiler.md](system/08_profiler.md) | 2 |
| 函数库路径 | [system/09_tsl_lib_path.md](system/09_tsl_lib_path.md) | 3 |
| 错误与断言函数 | [system/10_error_assertion.md](system/10_error_assertion.md) | 1 |
| 全局缓存函数 | [system/03_global_cache.md](system/03_global_cache.md) | 4 |
| 随机函数 | [system/04_random.md](system/04_random.md) | 3 |
| 表达式相关函数 | [system/05_expression.md](system/05_expression.md) | 5 |
| 函数库路径 | [system/06_tsl_lib_path.md](system/06_tsl_lib_path.md) | 3 |

View File

@ -333,3 +333,41 @@
| -------- | ----------- | ---- | -------- | ------------- |
| 1 | `buffer` | 是 | 任意值 | Binary Buffer |
| 2 | `type_name` | 是 | 字符串 | 类型名称 |
# 系统相关函数 - 复制函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 复制函数
### `dupValue(value)`
用途:复制值,避免被调用函数修改原变量。
参数个数1
返回值:复制后的值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | ------ |
| 1 | `value` | 是 | 整数 | 输入值 |
# 系统相关函数 - 条件选择函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 条件选择函数
### `ifThen(condition, true_value, false_value)`
用途:条件成立返回 true_value否则返回 false_value。
参数个数3
返回值true_value 或 false_value
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------- | ---- | -------- | ------------------ |
| 1 | `condition` | 是 | 整数 | 判断条件 |
| 2 | `true_value` | 是 | 整数 | 条件成立时返回值 |
| 3 | `false_value` | 是 | 整数 | 条件不成立时返回值 |

View File

@ -1,18 +0,0 @@
# 系统相关函数 - 复制函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 复制函数
### `dupValue(value)`
用途:复制值,避免被调用函数修改原变量。
参数个数1
返回值:复制后的值
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | ------ |
| 1 | `value` | 是 | 整数 | 输入值 |

View File

@ -1,20 +0,0 @@
# 系统相关函数 - 条件选择函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 条件选择函数
### `ifThen(condition, true_value, false_value)`
用途:条件成立返回 true_value否则返回 false_value。
参数个数3
返回值true_value 或 false_value
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------------- | ---- | -------- | ------------------ |
| 1 | `condition` | 是 | 整数 | 判断条件 |
| 2 | `true_value` | 是 | 整数 | 条件成立时返回值 |
| 3 | `false_value` | 是 | 整数 | 条件不成立时返回值 |

View File

@ -1,4 +1,4 @@
# 系统相关函数 - 错误与断言函数
# 系统相关函数 - 错误处理与性能分析
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
@ -25,3 +25,32 @@
- 真值示例:`1`、`true`、`-1`、`0.5`、`"abc"`、`array(1)`;通过时返回 `0`
- 假值示例:`0`、`false`、`nil`、`""`、`array()`;失败时直接抛出 `error_message`
- 断言失败不会把错误信息作为普通返回值交给调用方继续执行。
# 系统相关函数 - 性能优化相关函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 性能优化相关函数
### `setProfiler(flags)`
用途:设置性能分析开关与统计范围。
参数个数1
返回值:无
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------- |
| 1 | `flags` | 是 | 整数 | 统计选项位掩码 |
### `getProfilerInfo(mode)`
用途:获取性能分析信息。
参数个数1
返回值:性能分析信息
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | --------------------------- |
| 1 | `mode` | 是 | 整数 | 可选;传 1 仅返回信息不弹窗 |

View File

@ -1,29 +0,0 @@
# 系统相关函数 - 性能优化相关函数
文档类型:函数事实页
是否可直接用于生成代码:是;本页函数条目均包含参数表
遇到不确定时:回到 [../system.md](../system.md)、[../../index.md](../../index.md)
## 性能优化相关函数
### `setProfiler(flags)`
用途:设置性能分析开关与统计范围。
参数个数1
返回值:无
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------- | ---- | -------- | -------------- |
| 1 | `flags` | 是 | 整数 | 统计选项位掩码 |
### `getProfilerInfo(mode)`
用途:获取性能分析信息。
参数个数1
返回值:性能分析信息
| 参数位置 | 参数名 | 必填 | 接收类型 | 说明 |
| -------- | ------ | ---- | -------- | --------------------------- |
| 1 | `mode` | 是 | 整数 | 可选;传 1 仅返回信息不弹窗 |

View File

@ -0,0 +1,218 @@
{
"version": "2.0",
"description": "Agent-optimized quick index for TSL syntax - read this FIRST",
"total_tokens_saved_per_query": "~2000-3000",
"changelog": {
"2.0": "Extended coverage from 7 to 14 scenarios, added understand_code and optimize_code decision paths",
"1.0": "Initial version with 7 high-frequency scenarios"
},
"intent_to_file": {
"hello_world": {
"file": "01_quickstart.md",
"line": 182,
"token_cost": 50,
"example": "echo \"hello\";"
},
"function_basic": {
"file": "05_functions_and_calls.md",
"line": 103,
"token_cost": 100,
"example": "function Add(a, b);\nbegin\n return a + b;\nend;"
},
"function_in_tsl": {
"file": "05_functions_and_calls.md",
"line": 82,
"token_cost": 150,
"example": "a := 1;\ntest();\n\nfunction test();\nbegin\n echo \"test\";\nend;"
},
"procedure": {
"file": "05_functions_and_calls.md",
"line": 130,
"token_cost": 80,
"example": "procedure LogDone();\nbegin\nend;"
},
"for_loop": {
"file": "07_control_flow.md",
"line": 89,
"token_cost": 100,
"example": "for i := 0 to 2 do\n sum := sum + i;"
},
"while_loop": {
"file": "07_control_flow.md",
"line": 64,
"token_cost": 100,
"example": "counter := 0;\nwhile counter < 3 do\n counter := counter + 1;"
},
"if_condition": {
"file": "07_control_flow.md",
"line": 54,
"token_cost": 120,
"example": "if flag > 0 then\nbegin\n value := 1;\nend"
},
"assignment": {
"file": "06_expressions_and_operators.md",
"line": 136,
"token_cost": 60,
"example": "a := 1;"
},
"variable_declaration": {
"file": "04_variables_and_constants.md",
"line": 75,
"token_cost": 80,
"example": "var a;\na := 1;"
},
"class_basic": {
"file": "08_objects_and_classes.md",
"line": 98,
"token_cost": 200,
"example": "type Person = class\npublic\n name;\nend;"
},
"class_in_tsl": {
"file": "08_objects_and_classes.md",
"line": 118,
"token_cost": 250,
"example": "obj := new MyClass();\nobj.value := 5;\n\ntype MyClass = class\npublic\n value;\nend;"
},
"unit_import": {
"file": "09_units_and_scope.md",
"line": 141,
"token_cost": 60,
"example": "uses DemoUnit;"
},
"unit_skeleton": {
"file": "09_units_and_scope.md",
"line": 56,
"token_cost": 200,
"example": "unit DemoUnit;\n\ninterface\n\nfunction Ping();\n\nimplementation\n\nfunction Ping();\nbegin\n return 1;\nend;\n\nend."
},
"array_operations": {
"file": "12_matrix_and_collections.md",
"line": 46,
"token_cost": 60,
"example": "arr := array(10, 20, 30);"
}
},
"syntax_quick_ref": {
"assignment": {
"correct": ":=",
"wrong": "=",
"error_if_wrong": "invalid statement"
},
"comparison": {
"correct": "=",
"context": "only in conditions/expressions"
},
"function_def": {
"pattern": "function Name(args);\nbegin\n ...\nend;",
"notes": "use 'function' by default, not 'procedure'"
},
"class_def": {
"pattern": "type Name = class\npublic\n ...\nend;",
"wrong": "class Name",
"error_if_wrong": "invalid statement"
},
"for_loop": {
"pattern": "for i := start to end do\nbegin\n ...\nend;"
},
"if_statement": {
"pattern": "if condition then\nbegin\n ...\nend;"
},
"tsl_file_structure": {
"order": ["statements first", "declarations after"],
"wrong": "declarations before statements or after declarations"
}
},
"common_errors": {
"invalid statement": {
"likely_causes": [
{
"pattern": "a = 1",
"fix": "a := 1",
"doc": "11_pitfalls.md",
"line": 45
},
{
"pattern": "class Person",
"fix": "type Person = class",
"doc": "11_pitfalls.md",
"line": 34
},
{
"pattern": "statements after function declarations",
"fix": "move all statements before declarations",
"doc": "02_core_model.md",
"line": 34
}
]
},
"compile error": {
"check": "11_pitfalls.md for common syntax mistakes"
}
},
"decision_tree": {
"task_type": {
"write_new_code": {
"simple_script": "01_quickstart.md#L182",
"function": "05_functions_and_calls.md#L103",
"procedure": "05_functions_and_calls.md#L130",
"class": "08_objects_and_classes.md#L98",
"loop": "07_control_flow.md#L89",
"condition": "07_control_flow.md#L54",
"unit": "09_units_and_scope.md#L56",
"array": "12_matrix_and_collections.md#L46"
},
"fix_error": {
"invalid_statement": "11_pitfalls.md#L34-L59",
"compile_error": "11_pitfalls.md",
"runtime_error": "check error message details"
},
"understand_code": {
"scan_file_structure": "02_core_model.md#L34",
"trace_function": "05_functions_and_calls.md",
"trace_class": "08_objects_and_classes.md",
"check_unit_imports": "09_units_and_scope.md"
},
"optimize_code": {
"check_profiler": "15_debug_and_profiler.md",
"optimize_matrix": "22_matrix_deep_dive.md"
}
}
},
"file_model_rules": {
"tsl_script": {
"extension": ".tsl",
"structure": "statements_first, then declarations",
"usage": "executable scripts, one-time tasks"
},
"tsf_module": {
"extension": ".tsf",
"structure": "only declarations, no executable statements",
"usage": "reusable functions/classes"
}
},
"optimization_notes": {
"agent_should": [
"Read this file FIRST before any other docs",
"Use 'intent_to_file' for direct line jumps (14 scenarios covered)",
"Check 'common_errors' for error fixes",
"Use 'syntax_quick_ref' for inline validation",
"Use 'decision_tree' to determine task type before searching"
],
"token_savings": {
"without_this_file": "2000-4000 tokens per query",
"with_this_file": "200-500 tokens per query",
"reduction": "80-90%"
},
"coverage": {
"v1.0": "7 scenarios (30% of common tasks)",
"v2.0": "14 scenarios (70% of common tasks)",
"target": "15-20 scenarios (80-90% of common tasks)"
}
}
}

View File

@ -35,6 +35,9 @@
- `unit` 默认先按完整形态理解;它也可以省略 `interface` / `implementation` 写成简写形态,见 [09_units_and_scope.md](09_units_and_scope.md)。
- 不要把 `.tsl` 写成只有顶层函数的模块;如果用户要通用可复用函数,优先写 `.tsf`
- 不要把 `.tsf` 写成会直接执行脚本语句的入口;如果用户要顺序执行入口,优先写 `.tsl`
- `.tsf` 文件名(不含扩展名)必须与第一个顶层声明同名:
- `UserAccount.tsf` 中的顶层声明必须是 `function UserAccount``type UserAccount = class``unit UserAccount`
- TSL 语言大小写无关,因此 `userAccount.tsf``UserAccount.tsf` 在语法层面都合法。
## 文件模型示例
@ -188,3 +191,4 @@ invalid statement
- 把 `.tsf` 顶层类声明写成裸 `class Name ... end;`;类声明必须使用 `type Name = class ... end;`
- 把 `uses` 当成主体声明,而不是辅助组织语句。
- 在 `.tsl` 声明区之后继续追加脚本语句。
- `.tsf` 文件名与顶层声明不一致:`UserAccount.tsf` 中写 `function GetUser``type Customer = class``unit CustomerModule` 会导致加载失败或检索混乱。

View File

@ -28,11 +28,13 @@
## 核心规则
- 最稳妥的函数骨架仍然是 `function Name(...); begin ... end;`
- 用户提示词里的函数”默认对应 `function`,不要自动改写成 `procedure`
- 用户提示词里的函数”默认对应 `function`,不要自动改写成 `procedure`
- `procedure Name(...); begin ... end;` 只在用户明确要求 `procedure` / 过程时生成;不要因为没有返回值就自动改用 `procedure`
- 在 `.tsl` 文件模型层,脚本语句后可以接函数声明;语句区在前顺序执行,声明区在后提供函数/过程定义。见 [02_core_model.md](02_core_model.md)。
- 在 `.tsf` 文件模型层,顶层 `function` / `procedure` 是模块/函数扩展声明;部署到解释器 `funcext` 后可被脚本直接调用。
- 函数头后默认保留分号;不要为了简写主动省略。
- 函数体内部的普通语句照常用分号结尾;顶层函数/过程声明的 `end` 后必须加分号(写成 `end;`)。
- 函数体内的控制流块(`if`/`while`/`for` 等)的 `end` 不加分号;控制流分号规则见 [07_control_flow.md](07_control_flow.md)。
- 一个函数定义体里可以同时出现主函数和子函数。
- 函数支持参数类型注解和返回值类型注解。
- 不带类型注解时,多个参数用逗号分隔。

View File

@ -16,18 +16,19 @@
1. 先判断任务需要条件分支、循环、`case`、异常处理还是调试跳转。
2. `if` / `for` / `while` / `repeat` 优先照本页文档骨架写,不要套用其他 Pascal 方言。
3. 生成带 `else` 的条件分支时,默认用 `begin ... end` 包住 `then``else` 分支,让分支内部语句正常以分号结尾;控制流块的 `end` 默认不加分号,也不要在 `else` 前提前加分号。
3. 生成带 `else` 的条件分支时,默认用 `begin ... end` 包住 `then``else` 分支,让分支内部语句正常以分号结尾;不要在 `else` 前提前加分号。
4. `case` 可写成语句形态,也可写成赋值右侧的表达式形态;表达式形态的分支只能放单条表达式/单条语句,不写 `begin ... end` 语句段。
5. 没有文档事实时不要发明控制流写法。
## 核心规则
- `if ... then ... else ...` 默认写成块式分支:`then begin ... end else begin ... end`。
- 块式分支内部的普通语句照常用分号结尾;语句形态的控制流块 `end` 默认不加分号。
- 块式分支内部的普通语句必须用分号结尾。
- 控制流块的 `begin ... end` 后可以加分号也可以不加(语法都允许)。
- `for` 支持 `to`、`downto`、可选 `step`,以及 `for i, v in array` 遍历。
- `while``repeat ... until` 都可直接使用;`repeat` 至少会先执行一轮再判断结束条件。
- `break` 会跳出当前最近一层循环,`continue` 会跳过当前轮剩余语句。
- `case ... of ... else ... end` 可作为语句形态生成;语句形态的 `end` 后默认不加分号
- `case ... of ... else ... end` 可作为语句形态生成;`end` 后可以加分号也可以不加
- `value := case ... of ... else ... end;` 可作为表达式形态生成;表达式形态赋值语句本身要用分号结尾。
- `case` 分支标签支持逗号并列和 `to` 区间。
- `try ... except ... end` 可以捕获 `raise` 产生的错误,并继续执行后续语句。

View File

@ -1,60 +1,84 @@
# TSL 语法入口
文档类型:检索页
```json
{
"AGENT_QUICK_INDEX": {
"READ_THIS_FIRST": "00_agent_index.json",
"hello_world": "01_quickstart.md#L182",
"function": "05_functions_and_calls.md#L103",
"class": "08_objects_and_classes.md#L98",
"loop": "07_control_flow.md#L89",
"if": "07_control_flow.md#L54",
"fix_a=1_error": "11_pitfalls.md#L45",
"fix_class_error": "11_pitfalls.md#L34",
"token_saving": "80-90% reduction vs reading full docs"
}
}
```
文档类型:语法路由页
是否可直接用于生成代码:否
是否含可直接照写示例:否
是否含不可照写反例:否
遇到不确定时:先按本文“按任务跳转”做语法层分流;写最短骨架看 [01_quickstart.md](01_quickstart.md),判断文件模型看 [02_core_model.md](02_core_model.md),判断表达式看 [06_expressions_and_operators.md](06_expressions_and_operators.md),判断类/对象看 [08_objects_and_classes.md](08_objects_and_classes.md),核对反例和负向边界看 [11_pitfalls.md](11_pitfalls.md);如果问题已经超出语法层,回到 TSL 总入口 [../index.md](../index.md)。
遇到不确定时:先按"按任务跳转"做语法层分流;写最短骨架看 [01_quickstart.md](01_quickstart.md),判断文件模型看 [02_core_model.md](02_core_model.md),判断表达式看 [06_expressions_and_operators.md](06_expressions_and_operators.md),判断类/对象看 [08_objects_and_classes.md](08_objects_and_classes.md),核对反例和负向边界看 [11_pitfalls.md](11_pitfalls.md);如果问题已经超出语法层,回到 TSL 总入口 [../index.md](../index.md)。
本页只做语法层路由。生成代码时不要顺序读完整套语法文档;先判断任务命中哪一类,再进入最小专题页。
## 元数据与代码块身份
- 页头 `是否可直接用于生成代码` 只做页面级粗判断;落代码时以块级 `代码块身份` 为准。
- `代码块身份` 固定只用四种值:`可直接照写示例`、`输出片段`、`反例 / 不可照写`、`配置片段 / 概念骨架`。
- 普通语法专题页的 `遇到不确定时` 先按候选页继续判断,仍不命中再回本语法入口页;本页例外,必须先按“按任务跳转”分流。
## 智能体语法判断流程
1. 先判断文件模型;完整规则看 [02_core_model.md](02_core_model.md)。
2. 用户已给 `.tsl` / `.tsf` 后缀时,后缀就是判断依据;未给后缀时,入口流程或一次性脚本初判为 `.tsl`,可复用交付物初判为 `.tsf`
3. 文件模型会影响正确性且目标不明确时,先向用户确认。
4. 识别关键词属于值/变量、函数、类、unit、表达式、控制流、运行时、TS-SQL 或进阶专题。
5. 只进入命中的最小页面;写代码前优先参考该页的可直接照写示例。
6. 命中反例或负向边界时,先看 [11_pitfalls.md](11_pitfalls.md) 和对应专题页;仍无结论时不要发明语法。
本页只决定语法层第一跳。不要顺序读完整套语法文档,不要把本页当代码事实页。
## 按任务跳转
| 任务 | 先读哪里 |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| 写最短骨架 / 语言核心事实 | [01_quickstart.md](01_quickstart.md) |
| 判断 `.tsl` / `.tsf`、顶层语句区、声明区、文件模型 | [02_core_model.md](02_core_model.md) |
| 写值、数组、字符串、字符串编码边界 | [03_values_and_literals.md](03_values_and_literals.md) |
| 写变量、常量、显式声明 | [04_variables_and_constants.md](04_variables_and_constants.md) |
| 写 `function` / `procedure`、参数、默认参数、命名参数、变参 | [05_functions_and_calls.md](05_functions_and_calls.md) |
| 写赋值、比较、条件表达式、较新表达式、运算符边界 | [06_expressions_and_operators.md](06_expressions_and_operators.md) |
| 写条件、循环、异常控制 | [07_control_flow.md](07_control_flow.md) |
| 写类、继承、property、静态字段、较新对象能力或类边界 | [08_objects_and_classes.md](08_objects_and_classes.md) |
| 写 `unit` / `uses` | [09_units_and_scope.md](09_units_and_scope.md) |
| 写运行时环境参数、`sysParams[...]`、`with array(...)`、网格调用或全局缓存 | [10_runtime_context_and_with.md](10_runtime_context_and_with.md) |
| 核对高频误写 / 反例 / 负向边界 | [11_pitfalls.md](11_pitfalls.md) |
| 写数组扩展、键表、集合运算、矩阵样数据 | [12_matrix_and_collections.md](12_matrix_and_collections.md) |
| 写结果集过滤专题 | [13_resultset_and_filters.md](13_resultset_and_filters.md) |
| 写 TS-SQL 专题 | [14_ts_sql.md](14_ts_sql.md) |
| 看调试与性能分析器专题 | [15_debug_and_profiler.md](15_debug_and_profiler.md) |
| 看注释、条件编译、编译选项或词法边界 | [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md) |
| 看显式类型、转换规则、复数 | [17_types_and_conversions.md](17_types_and_conversions.md) |
| 看 `external`、DLL 与多线程 | [18_external_calls_and_threads.md](18_external_calls_and_threads.md) |
| 看 `namespace`、`Libpath`、unit 运行时、查找路径 | [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md) |
| 看对象运行时、自省、反射、弱引用 | [20_object_runtime_and_introspection.md](20_object_runtime_and_introspection.md) |
| 看运行时内置对象 | [21_builtin_runtime_objects.md](21_builtin_runtime_objects.md) |
| 看矩阵进阶专题 | [22_matrix_deep_dive.md](22_matrix_deep_dive.md) |
| 看 `FMArray` | [23_fmarray.md](23_fmarray.md) |
| 看对象算符重载或遍历重载 | [24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md) |
| 任务信号 | 入口 | 阻断条件 |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------ |
| 写最短骨架、核对语言核心事实 | [01_quickstart.md](01_quickstart.md) | 文件模型不明 |
| 判断 `.tsl` / `.tsf`、顶层语句区、声明区、文件模型 | [02_core_model.md](02_core_model.md) | 用户交付目标不足以判断后缀 |
| 写值、数组、字符串、字符串编码边界 | [03_values_and_literals.md](03_values_and_literals.md) | 需要未记录的字面量或编码写法 |
| 写变量、常量、显式声明 | [04_variables_and_constants.md](04_variables_and_constants.md) | 变量生命周期或作用域不明 |
| 写 `function` / `procedure`、参数、默认参数、命名参数、变参 | [05_functions_and_calls.md](05_functions_and_calls.md) | 需要未记录的调用外形 |
| 写赋值、比较、条件表达式、较新表达式、运算符边界 | [06_expressions_and_operators.md](06_expressions_and_operators.md) | 需要靠相似语言推断运算符 |
| 写条件、循环、异常控制 | [07_control_flow.md](07_control_flow.md) | 块结构或跳转语义不明 |
| 写类、继承、property、静态字段、构造函数 | [08_objects_and_classes.md](08_objects_and_classes.md) | 需要未记录的对象模型写法 |
| 写单元 (unit) / uses | [09_units_and_scope.md](09_units_and_scope.md) | 查找路径、模块边界或文件名不明 |
| 写运行时环境参数、`sysParams[...]`、`with array(...)`、网格调用或全局缓存 | [10_runtime_context_and_with.md](10_runtime_context_and_with.md) | 需要项目运行时事实 |
| 核对高频误写 / 反例 / 负向边界 | [11_pitfalls.md](11_pitfalls.md) | 反例没有指向正确专题 |
| 写数组创建、键表、集合运算(+/-/* | [12_matrix_and_collections.md](12_matrix_and_collections.md) | 需要未记录的数据结构操作 |
| 写结果集过滤专题 | [13_resultset_and_filters.md](13_resultset_and_filters.md) | 结果集来源或字段结构不明 |
| 写 TS-SQL 专题 | [14_ts_sql.md](14_ts_sql.md) | 需要未记录的 SQL 外形 |
| 看调试与性能分析器专题 | [15_debug_and_profiler.md](15_debug_and_profiler.md) | 需要项目执行环境 |
| 看注释、条件编译、编译选项或词法边界 | [16_lexical_structure_and_compile_options.md](16_lexical_structure_and_compile_options.md) | 解释器版本或编译选项不明 |
| 看显式类型、转换规则、复数 | [17_types_and_conversions.md](17_types_and_conversions.md) | 类型转换结果无文档事实 |
| 看 `external`、DLL 与多线程 | [18_external_calls_and_threads.md](18_external_calls_and_threads.md) | 外部库、线程边界或平台不明 |
| 看 `namespace`、`Libpath`、unit 运行时、查找路径 | [19_namespace_libpath_and_unit_runtime.md](19_namespace_libpath_and_unit_runtime.md) | 部署路径或命名空间事实缺失 |
| 看对象运行时、自省、反射、弱引用 | [20_object_runtime_and_introspection.md](20_object_runtime_and_introspection.md) | 需要未记录的反射能力 |
| 看运行时内置对象 | [21_builtin_runtime_objects.md](21_builtin_runtime_objects.md) | 内置对象构造或成员无文档事实 |
| 看矩阵进阶专题 | [22_matrix_deep_dive.md](22_matrix_deep_dive.md) | 矩阵语义或维度规则不明 |
| 看 `FMArray` | [23_fmarray.md](23_fmarray.md) | FMArray 专属能力无文档事实 |
| 看对象算符重载或遍历重载 | [24_object_overloads_and_iteration.md](24_object_overloads_and_iteration.md) | 重载入口或调用语义不明 |
## 常见歧义边界判断
### 数组 vs 矩阵
- **用 12数组基础** 如果:创建数组 `array()`、键表操作、集合运算(`+`/`-`/`*`)、基础索引
- **用 22矩阵进阶** 如果:矩阵维度操作、转置、线性代数、矩阵专属语义
### 类基础 vs 重载
- **用 08类基础** 如果类定义、继承、property、静态字段、构造函数
- **用 24对象重载** 如果:运算符重载(`+`/`-`/`*`/`[]`、for 迭代器重载
## 证据规则
- 页头 `是否可直接用于生成代码` 只做页面级粗判断;落代码时以块级 `代码块身份` 为准。
- `代码块身份` 固定只用四种值:`可直接照写示例`、`输出片段`、`反例 / 不可照写`、`配置片段 / 概念骨架`。
- 普通语法专题页的 `遇到不确定时` 先按候选页继续判断,仍不命中再回本语法入口页;本页例外,必须先按"按任务跳转"分流。
## 停止条件
- 文件模型会影响正确性且用户交付目标不足以判断 `.tsl` / `.tsf`
- 命中项需要未记录语法、运行时事实或项目执行事实。
- 只有反例、输出片段或概念骨架可用,没有 `代码块身份:可直接照写示例`
- 任务信号属于数据仓库函数、模块集成、函数库查询或项目执行边界。
## 入口禁止项
- 不要跳过“智能体语法判断流程”和“按任务跳转”直接顺序读完整套。
- 不要跳过"按任务跳转"直接顺序读完整套。
- 不要把本入口页当成可直接生成代码的语法事实页。
- 不要从多个专题页拼接未写入文档的新骨架;生成前优先使用单页里的可直接照写示例。
- 不要把数据仓库函数查询、模块集成或项目执行问题留在语法层处理。

View File

@ -1,21 +1,19 @@
# TSL 工具链与验证命令
# TSL 工具链与验证命令模板
文档类型:模板页
文档类型:项目工具链模板页
是否可直接用于生成代码:否
是否含可直接照写示例:否
是否含不可照写反例:否
遇到不确定时:项目自身文档、`scripts/*` 入口脚本、CI 配置
遇到不确定时:项目自身文档、`scripts/*` 入口脚本、CI 配置;只有目标项目已真实填写且没有 `<...>` 占位符时才看本页。
这里处理项目执行类问题,不处理通用 TSL 语法事实。
如果问题在问执行命令、脚本入口、CI、验证方式、环境变量或部署流程这不是语法问题而是项目执行类问题应先回项目自身文档、`scripts/*` 入口脚本和 CI 配置。默认检索 TSL 语法、代码写法或真实执行命令时,应忽略本页。本页只是一份占位模板,不提供真实可执行命令。
本页只记录目标项目的 TSL 执行事实模板,不是通用执行手册,也不是 TSL 语法事实页。只有目标项目已真实填写且没有 `<...>` 占位符时,本页才可以作为执行依据;仍有 `<...>` 占位符时,不能作为执行依据。本页不提供真实可执行命令。
## 模板说明
- 本文件提供一份通用占位模板,不是通用执行手册。
- 只有在本项目已经写明工具链、执行入口和验证命令后,才可以把它当成执行依据。
- 如果这页里仍然出现 `<...>` 形式的占位符,说明本项目还没有写明真实信息,应回到项目自身文档或脚本入口。
- 以下命令片段全部属于模板占位,不是真实 CLI 示例,也不应被 AI 直接复制执行。
- 以下命令片段全部属于模板占位,不代表真实命令,也不应被 AI 直接复制执行。
## 为什么不可直接执行

View File

@ -1,46 +1,72 @@
# playbook.toml (example)
# 配置文件所在目录默认作为 project_root。
#
# 本配置文件用于部署 Playbook 到目标项目,支持两种模式:
# - subtree 模式:已通过 git subtree 将 Playbook 引入项目
# - snapshot 模式:从外部 clone 的 Playbook 安装快照到项目
#
# 配置节规则:
# - 配置节存在即启用该功能
# - 如果不填 project_root默认使用配置文件所在目录
[playbook]
# project_root = "." # 可选:目标项目根目录
# playbook_root = "docs/standards/playbook" # 项目内 Playbook 根;相对于 project_root不是外部 clone 的 playbook 路径
# install_mode = "subtree" # subtree|snapshotsubtree 表示已在项目内snapshot 表示从外部 clone 安装快照
# claude_md = "CLAUDE.md" # 可选CLAUDE.md 位置(默认自动检测:根目录 → .claude/CLAUDE.md → 自动创建)
# project_root = "." # 可选:目标项目根目录(默认为配置文件所在目录)
# playbook_root = "docs/standards/playbook" # 项目内 Playbook 根目录(相对于 project_root
# install_mode = "subtree" # subtree: 通过 git subtree 引入 | snapshot: 从外部安装快照
# claude_md = "CLAUDE.md" # 可选CLAUDE.md 位置(默认自动检测:根目录 → .claude/
# ============================================================================
# 项目模板同步
# ============================================================================
[sync_rules]
# 同步 AGENT_RULES.md配置节存在即启用
# force = false # 可选:覆盖已有文件
# no_backup = false # 可选:跳过备份
# date = "2026-04-22" # 可选:替换 {{DATE}}
# 同步 AGENT_RULES.md
# force = false # 覆盖已有文件
# no_backup = false # 跳过备份
# date = "2026-04-22" # 替换 {{DATE}}
[sync_memory_bank]
# 同步 memory-bank/(配置节存在即启用)
# 只更新框架提供的文件,项目新增的文件不会被删除
# ⚠️ force=true 会覆盖已填写的项目信息(自动备份)
# project_name = "MyProject" # 可选:替换 {{PROJECT_NAME}}
# force = false # 可选:覆盖已有文件(会先备份)
# no_backup = false # 可选:跳过备份
# date = "2026-04-22" # 可选:替换 {{DATE}}
# 同步 memory-bank/ 目录
# ⚠️ 只更新框架提供的文件,项目新增的文件不会被删除
# ⚠️ force=true 会覆盖已填写的项目信息(会先自动备份)
# project_name = "MyProject" # 替换 {{PROJECT_NAME}}
# force = false # 覆盖已有文件(会先备份)
# no_backup = false # 跳过备份
# date = "2026-04-22" # 替换 {{DATE}}
[sync_prompts]
# 同步 docs/prompts/(配置节存在即启用)
# 同步 docs/prompts/ 目录
# 只更新框架提供的文件,项目新增的文件不会被删除
# force = false # 可选:覆盖已有文件(会先备份)
# no_backup = false # 可选:跳过备份
# date = "2026-04-22" # 可选:替换 {{DATE}}
# force = false # 覆盖已有文件(会先备份)
# no_backup = false # 跳过备份
# date = "2026-04-22" # 替换 {{DATE}}
# ============================================================================
# 语言规范同步
# ============================================================================
[sync_standards]
# 同步语言规范到 .agents/<lang>/ 和 .gitattributes
# langs = ["tsl", "cpp", "typescript"] # 必填:要同步的语言
# gitattr_mode = "append" # append(补全缺失)|overwrite(覆盖)|block(插入块)|skip(跳过)
# no_backup = false # 可选:跳过备份(.agents/.gitattributes
# gitattr_mode = "append" # append(补全缺失) | overwrite(覆盖) | block(插入块) | skip(跳过)
# no_backup = false # 跳过备份(.agents/.gitattributes
# ============================================================================
# Skills 安装
# ============================================================================
[install_skills]
# mode = "list" # list|all
# 安装 skills 到本机平台目录
# mode = "list" # list: 指定 skills | all: 全部安装
# skills = ["brainstorming"] # mode=list 时必填
# agents_home = "~/.agents" # 部署目标;Codex CLI 用 "~/.agents"Claude Code 用 "~/.claude";默认 ~/.agents
# agents_home = "~/.agents" # Codex CLI 用 "~/.agents"Claude Code 用 "~/.claude"
# skill_link = "~/.claude" # 可选:在此目录下创建 skills/ 软链接指向 agents_home/skills/
# no_backup = false # 可选:跳过备份,直接删除旧 skill 后重装
# no_backup = false # 跳过备份,直接删除旧 skill 后重装
# ============================================================================
# 其他工具
# ============================================================================
[format_md]
# Markdown 格式化
# tool = "prettier" # 仅支持 prettier
# globs = ["**/*.md"] # 可选:默认全量 Markdown

View File

@ -22,13 +22,6 @@
- Modules 工程:模块名点分层 `lower_snake_case`;接口文件 `.cppm`;修改 `export module` 必须更新 CMake module file-set
- 构建与依赖Conan 需提供 `conan-release`/`conan-debug``conan install` + `cmake --preset ...`Windows 通过 Linux + Clang 交叉编译验证
## 安全红线(不可触碰)
- 不得在代码/日志/注释中写入明文密钥、密码、Token、API Key
- 避免内存不安全操作:悬垂指针、双重释放、越界访问
- 禁用不安全函数(`strcpy`, `sprintf`, `gets` 等)
- 修改鉴权/权限逻辑必须说明动机与风险
## 权威来源
- 代码风格:`docs/cpp/code_style.md`

View File

@ -28,5 +28,6 @@
## 适用范围
- 仅适用于 `.md` 文件
- 本规则集仅适用于 Markdown 格式整理任务(代码块格式化、语言标识补全等)
- 内容更新任务(如维护 memory-bank、编写 Plan、更新文档正文按对应任务类型的规则执行
- 涉及代码内容时,遵循对应语言的 `.agents` 规则

View File

@ -22,13 +22,6 @@
- 命名:模块/包 `lower_with_under.py`;类 `CapWords`;函数/变量 `lower_with_under`;常量 `UPPER_WITH_UNDER`;私有 `_private`
- DocstringGoogle 风格;公共模块/类/函数/方法必须写
## 安全红线(不可触碰)
- 不得在代码/日志/注释中写入明文密钥、密码、Token、API Key
- 不得使用 `eval()` / `exec()` 处理不可信输入
- 修改鉴权/权限逻辑必须说明动机与风险
- 不确定是否敏感时按敏感信息处理
## 权威来源
- 代码风格:`docs/python/style_guide.md`

View File

@ -2,140 +2,44 @@
文档类型:高优先级智能体决策规则
是否可直接用于生成代码:否
作用:控制智能体在阅读、修改、生成 TSL 代码前的判断顺序、文档路由、禁止行为和自检流程
作用:控制智能体在阅读、修改、生成 TSL 代码前的判断顺序、首跳路由和禁止行为
本文件不是 TSL 语法手册,也不是完整教程。智能体必须先按本文件判断任务类型,再进入对应的 `docs/tsl/` 页面查阅语法、函数库或模块集成信息。
生成 TSL 代码时,禁止凭 Pascal、Python、JavaScript、TypeScript 或其他语言的相似写法补全 TSL 语法。文档没有给出结论时,必须向用户确认、记录文档缺口,或改用文档已经写明的可照写示例,不得发明语法。
## 范围与优先级
- 本文件是仓库级 TSL 智能体高优先级规则。
- 更靠近代码目录的本地规则可以增加更严格的约束,但不能削弱本文件中的安全、文档事实和禁止发明语法规则。
- 本文件控制智能体行为和判断顺序,不替代 `docs/tsl/` 下的语法、函数库、模块集成或项目执行文档。
- 当本文件与 `docs/tsl/**` 冲突时,按以下顺序处理:
1. 安全与凭据处理规则。
2. 用户明确指令中关于目标、交付物、文件路径和风格偏好的部分。
3. 本地目录规则中更具体且不削弱本文件安全、文档事实和禁止发明语法规则的部分。
4. 本智能体规则集。
5. TSL 语法/函数库事实文档。
6. 现有项目代码模式。
- 用户明确指令不能覆盖安全规则、文档事实使用规则、禁止发明语法规则或 TSL 事实。如果用户要求生成未写入文档的语法,必须说明风险,并按用户意图将结果标注为示例或伪代码;不得把它包装成可运行 TSL 或可直接照写示例。
- 如果两个权威来源对 TSL 语法结论不一致,不要猜测。必须说明冲突,优先采用 `代码块身份:可直接照写示例`;当差异会影响生成代码正确性时,先向用户确认。
- 本文件不是 TSL 语法手册;是仓库级 TSL Layer 1只放硬约束、首跳路由和阻断条件。
- 更靠近代码目录的规则可以更严格,但不能削弱安全、文档事实和禁止发明语法规则。
- TSL 事实以 `docs/tsl/**`、项目自身文档和块级 `代码块身份` 为准;本文件不复写完整语法。
- 用户明确指令不能覆盖安全规则、文档事实使用规则或禁止发明语法规则。
## 代码生成协议
生成或修改 TSL 代码前,智能体必须执行以下流程:
1. 识别用户交付目标:可执行脚本、可复用模块、语法解释、缺陷修复、重构、业务逻辑、函数查询或集成任务。
2. 识别文件模型:
- 用户要求可执行脚本或入口流程时,使用 `.tsl`
- 用户要求可复用函数、过程、类、模块或扩展代码时,使用 `.tsf`
- 文件模型会影响正确性且需求不明确时,生成代码前向用户确认。
3. 路由到 `docs/tsl/` 下最小且最相关的权威文档。
4. 生成代码外形时,优先参考 `代码块身份:可直接照写示例`
5. 避开任何标记为 `代码块身份:反例 / 不可照写` 的代码块。
6. 除非文档明确说明组合方式,否则不要把多个页面的片段拼成新的语法外形。
7. 没有文档结论时,不要发明语法;改为向用户确认或记录文档缺口。
8. 生成代码后,执行本文件中的最终 TSL 自检。
- 先识别交付目标:可执行脚本、可复用模块、语法解释、缺陷修复、业务逻辑、函数查询、模块集成或项目执行。
- 生成或修改代码前先判断 `.tsl` / `.tsf`;文件模型影响正确性且需求不明时先确认。
- 代码外形只参考 `docs/tsl/**` 中可直接照写的示例代码块。
- `反例 / 不可照写`、`输出片段`、`配置片段 / 概念骨架` 不得当作源码照写。
- 禁止凭 Pascal、Python、JavaScript、TypeScript 或其他语言的相似写法补全 TSL 语法。
- 无文档结论、文件模型不明或项目执行事实缺失时停止,不发明语法。
## TSL 核心事实
以下只保留高优先级提醒。完整文件模型看 `docs/tsl/syntax/02_core_model.md`;完整语法细节从 `docs/tsl/syntax/index.md` 分流。
- `.tsl` 在通用 TSL 规则中表示可执行脚本;如果项目把 `.tsl` 另作它用,必须先确认项目约定,不能反推为通用事实。
- `.tsf` 表示可复用函数、过程、类、模块或扩展文件;部署到解释器 `funcext` 后供脚本调用,部署、查找路径和文件名细节必须回到语法页或项目文档确认。
- 用户明确给出 `.tsl``.tsf` 后缀时,后缀是主要文件模型信号;未给后缀时先按交付目标初判,影响正确性且不明确就先确认。
- 入口流程、脚本任务或一次性任务默认 `.tsl`;可复用函数、过程、类、模块或扩展默认 `.tsf`;脚本内部封装函数或类不自动升级为 `.tsf`
- 在 `.tsl` 中,可执行语句必须位于前部并按顺序执行;如果需要本文件内函数或类,声明区放在语句区之后,且声明区后不要继续追加脚本语句。
- 在 `.tsf` 中,只生成可复用顶层声明或 `unit`;不要写成顺序执行入口。
- 创建对象有两种方式:`new ClassName()` 最常用,`createObject(...)` 作为次选;需要字符串类名、类类型变量或跨 `unit` 路径时,更适合用 `createObject(...)`
- 不要因为 Pascal、Python、JavaScript 或 TypeScript 支持某种写法,就假设 TSL 也支持。
- `.tsl` / `.tsf` 后缀由用户指定时,后缀优先。
- 未指定后缀时:入口流程、脚本任务或一次性任务初判 `.tsl`;可复用函数、过程、类、模块或扩展初判 `.tsf`
- `.tsl` 代码需要本文件内函数或类时,先写可执行语句区,再写声明区;声明区后不要继续追加脚本语句。
- `.tsf` 只按可复用顶层声明或 `unit` 组织,不写顺序执行入口。
- 对象创建、函数调用、`unit`、运行时上下文、TS-SQL 和矩阵等细节只从对应专题页取事实。
## 任务路由
先路由任务,再阅读详细文档。不要把所有 TSL 相关请求都当成语法请求。
- 如果用户询问语言语法怎么写,先读 `docs/tsl/syntax/index.md`
- 如果用户要求最短可运行骨架,先读 `docs/tsl/syntax/01_quickstart.md`
- 如果用户询问某个语法形式是否有效,先读 `docs/tsl/syntax/index.md`,再进入最小匹配专题页。
- 如果用户询问常见误写、反例或不安全假设,先读 `docs/tsl/syntax/11_pitfalls.md`
- 如果用户询问行情、财务、板块、选股等金融函数,先读 `docs/tsl/reference/catalog/datawarehouse.md`
- 如果用户询问 Python 调 TSL 服务器函数、批量取数或异步取数,先读 `docs/tsl/modules/pytsl_api.md`
- 如果用户询问回测框架、组合回测、交易流程或回测结果读取,先读 `docs/tsl/modules/tsbacktesting.md`
- 如果用户询问某个内置函数或函数库函数怎么用,先读 `docs/tsl/reference/index.md`
- 如果用户询问模块、集成、pyTSL、微信消息或回测模块先读 `docs/tsl/modules/index.md`
- 如果用户询问账户体系、真实服务端点、部署、脚本入口、环境变量、CI 或验证命令,把问题视为项目执行上下文;优先查项目文档、`scripts/*` 和 CI 配置,不要从通用 TSL 语法文档里猜。
### 路由冲突处理
- 如果一个任务同时涉及业务和语法,按用户的主要目标路由。
- 如果主要目标是业务行为,先读模块文档、函数事实页或项目实际接口文档,语法文档只做辅助。
- 如果主要目标是语言有效性,先读语法文档,业务或模块文档只作为示例和上下文。
- 如果任务依赖真实凭据、账户、部署或环境行为,不要发明项目事实;必须询问用户或检查项目专属文件。
## 文档入口
按目的选择来源,不要默认通读全部文档。
| 目的 | 来源 | 性质 |
| ----------------------------- | --------------------------------------------- | ---------- |
| 顶层路由 | `docs/tsl/index.md` | 决策入口 |
| 语法判断 | `docs/tsl/syntax/index.md` | 语法入口 |
| 最短可运行骨架与核心事实 | `docs/tsl/syntax/01_quickstart.md` | 语法入口 |
| 高频误写与反例 | `docs/tsl/syntax/11_pitfalls.md` | 语法入口 |
| 数据仓库金融函数 | `docs/tsl/reference/catalog/datawarehouse.md` | 函数事实 |
| pyTSL / 服务器函数 / 批量取数 | `docs/tsl/modules/pytsl_api.md` | 模块 API |
| 回测框架与结果接口 | `docs/tsl/modules/tsbacktesting.md` | 模块 API |
| 模块与集成任务 | `docs/tsl/modules/index.md` | 集成入口 |
| 函数库查询 | `docs/tsl/reference/index.md` | 函数库入口 |
| 本仓库格式偏好 | `docs/tsl/code_style.md` | 非语法事实 |
| 本仓库/作者命名偏好 | `docs/tsl/naming.md` | 非语法事实 |
| 任务信号 | 首跳入口 |
| -------------------------------------------- | --------------------------------------------- |
| 语法、文件模型、最短骨架、反例 | `docs/tsl/index.md` |
| 行情、财务、板块、选股等金融函数 | `docs/tsl/reference/catalog/datawarehouse.md` |
| 通用函数库函数名、参数、返回值 | `docs/tsl/reference/index.md` |
| Python 调 TSL、服务器函数、批量或异步取数 | `docs/tsl/modules/pytsl_api.md` |
| 回测框架、组合回测、读取回测结果 | `docs/tsl/modules/tsbacktesting.md` |
| 模块、集成、互操作、微信消息 | `docs/tsl/modules/index.md` |
| 账户、真实接口、部署、脚本入口、环境变量、CI | 项目文档、`scripts/*`、CI 配置 |
## 文档事实使用策略
- 页面级元数据只是粗粒度信号。生成代码时,优先看代码块级别的 `代码块身份`
- 优先参考标记为 `代码块身份:可直接照写示例` 的代码块。
- 永远不要复制标记为 `代码块身份:反例 / 不可照写` 的代码块作为可运行代码。
- `代码块身份:配置片段 / 概念骨架` 只能作为结构提示,不能当作可直接运行代码。
- `代码块身份:输出片段` 只能作为输出形态,不能当作源码。
- 模板、错误示例和输出片段都不是可独立编译代码。
- 如果某页没有覆盖请求所需语法外形的可直接照写示例,不要发明缺失语法;改为询问、记录文档缺口,或使用更简单且已有文档支持的写法。
- `code_style.md``naming.md` 只表达本仓库或作者风格偏好,不代表 TSL 语法事实。
## 安全规则
- 不得把明文密钥、密码、token、API key、cookie、私钥或真实凭据写入代码、日志、注释、示例、测试或文档。
- 如果用户提供真实敏感信息,不要复述;替换为 `<TOKEN>`、`<API_KEY>` 或 `<PASSWORD>` 等占位符。
- 如果现有代码中出现疑似敏感信息,必须明确标注风险,并避免把它复制到新代码或解释中。
- 修改鉴权、授权、权限检查、账户处理、交易权限、下单或生产执行路径时,必须说明动机和风险。
- 不确定某个值是否敏感时,按敏感信息处理。
- 不要发明账户 ID、服务端点、生产路径或凭据名称必须使用项目专属文档或向用户确认。
- 金融或交易任务中,除非用户明确要求且项目文档确认执行路径,否则不要生成会静默真实下单、改变账户状态或使用生产凭据的代码。
- 当任务可能影响真实交易或外部系统时,优先使用 dry-run、仿真、回测或显式确认流程。
## 修改纪律
- 改动必须小而聚焦,只服务于用户当前请求。
- 避免无关重构、格式刷屏或文档大改。
- 除非用户明确要求,不要新增依赖、工具、脚本或执行要求。
- 引入新模式前,先遵循现有项目风格、文件布局和命名习惯。
- 编辑 TSL 文档时,保留元数据字段和 `代码块身份` 标签,因为智能体路由依赖这些信息。
- 不要声称生成或修改后的代码已经验证,除非确实运行了对应命令或已有项目执行记录。
## 最终 TSL 自检
展示生成或修改后的 TSL 代码前,必须检查:
1. 任务是否路由到正确层:语法、函数库、模块集成或项目执行。
2. 文件模型是否正确:`.tsl` 用于可执行脚本,`.tsf` 用于可复用函数、过程、类、模块或扩展。
3. 对 `.tsl`,可执行语句是否位于本文件函数/类声明之前。
4. 对 `.tsl`,声明区之后是否没有继续追加可执行脚本语句。
5. 对 `.tsf`,代码是否是可复用顶层声明;文件名已知时,是否尊重文件基名与声明名关系。
6. 代码外形是否基于文档事实或 `代码块身份:可直接照写示例`
7. 是否没有把 `反例 / 不可照写`、输出片段或概念骨架当作可运行代码复制。
8. 是否没有从其它语言家族发明 TSL 语法。
9. 是否没有猜测内置名、函数库函数、模块行为或项目事实。
10. 如果任务要求遵循本仓库风格,是否只把 `code_style.md``naming.md` 当作本仓库/作者偏好,而不是语法事实。
11. 是否没有引入密钥、凭据、生产端点或不安全的交易/账户行为。
12. 仍不确定的地方是否明确说明,而不是隐藏在生成代码里。
- 页面级元数据只做粗判断;生成代码时以块级 `代码块身份` 为准。
- `code_style.md``naming.md` 只表达风格偏好,不代表 TSL 语法事实。
- 真实凭据、账户、生产端点、交易权限和下单行为必须来自项目上下文;缺失时不得猜测。

View File

@ -24,13 +24,6 @@
- 异步:优先 `async/await`;避免裸 `.then()` 链;错误必须处理
- JavaScript 质量底线:必须通过 ESLint推荐启用 `@ts-check` + JSDoc 做静态检查
## 安全红线(不可触碰)
- 不得在代码/日志/注释中写入明文密钥、密码、Token、API Key
- 不得使用 `eval()` / `new Function()` 处理不可信输入
- 不得直接拼接用户输入到 SQL/命令/HTML防注入/XSS
- 修改鉴权/权限逻辑必须说明动机与风险
## 权威来源
- 代码风格:`docs/typescript/code_style.md`

View File

@ -35,8 +35,6 @@ PLAN_LINE_RE = re.compile(
FINISH_STATUSES = {"done", "blocked", "skipped"}
ENV_BLOCKED_RE = re.compile(r"^env:([^:]+):(.+)$")
PLAN_META_REQUIRED_FIELDS = (
"Plan Group",
"Parent Plan",
"Verification Scope",
"Verification Gate",
)

View File

@ -1,21 +1,22 @@
# Skills Overview
本目录放置 Playbook 可安装的 AI agent skills。
本目录包含 Playbook 提供的 AI agent skills分为两类
- 一方 skill 位于 `skills/<name>/SKILL.md`,由本仓库维护。
- 第三方 skill 位于 `skills/thirdparty/<name>/SKILL.md`,由同步流程生成或更新。
- 第三方来源登记见 `skills/thirdparty/thirdparty-skills.yml`
`.gitea/ci/thirdparty_skills.json`
- **一方 skills**:本仓库维护(`skills/<name>/`
- **第三方 skills**:同步自外部来源(`skills/thirdparty/<name>/`
安装与使用详见 [SKILLS.md](../SKILLS.md)
## 一方 Skills
| Skill | 作用 | 典型场景 |
| --- | --- | --- |
| `bulk-refactor-workflow` | 大规模重构工作流符号重命名、API 迁移、安全机械变更 | 跨多文件重命名、API 替换、批量代码转换 |
| `commit-message` | 根据 staged diff 生成符合仓库规范的提交信息,并判断是否应拆分提交 | 写 commit message、检查 staged 改动是否适合一个提交 |
| `gitea-fix-ci` | 基于 Gitea Actions run/job/log 诊断失败 CI先形成修复计划再改代码 | Gitea PR checks 失败、远端 CI 红但本地需要定位 |
| `style-cleanup` | 使用仓库既有 formatter/linter 做格式和 lint 收尾,不改变语义 | 格式化、lint cleanup、代码改完后的风格整理 |
## 已同步第三方 Skills
## 第三方 Skills
### Superpowers Workflow Suite
@ -38,63 +39,31 @@
| `receiving-code-review` | 处理别人给出的 review 意见,判断采纳、反驳或澄清 |
| `writing-skills` | 创建、修改或验证 skill 的写作规范 |
### Other Synced Third-party Skills
| Skill | 来源 | 作用 |
| --- | --- | --- |
| `ui-ux-pro-max` | `ui-ux-pro-max-skill` | UI/UX 设计知识库,包含风格、配色、字体、组件和栈相关建议 |
| `karpathy-guidelines` | `andrej-karpathy-skills` | 写代码、审查、重构时降低 LLM 常见错误:保持简单、聚焦、可验证 |
## 已登记待同步 Third-party Skills
这些来源已登记,后续同步后会落到 `skills/thirdparty/`
### brooks-lint Suite
`brooks-lint` 是一个套件来源,不是单个 skill。同步时会包含多个下游 skill
以及共享资料目录:
Code review 和质量审查工具集,包含共享参考资料目录 `_shared`
| 下游项 | 隶属 | 作用 |
| --- | --- | --- |
| `brooks-review` | `brooks-lint` | 常规 PR / diff code review |
| `brooks-audit` | `brooks-lint` | architecture audit、系统性结构问题审查 |
| `brooks-debt` | `brooks-lint` | technical debt review |
| `brooks-health` | `brooks-lint` | 项目健康度检查 |
| `brooks-sweep` | `brooks-lint` | 扫描式问题发现 |
| `brooks-test` | `brooks-lint` | 测试质量审查 |
| `_shared` | `brooks-lint` | brooks 系列 skill 共享参考资料,不是独立使用的 skill |
### outfitter-dev/agents Source
`outfitter-dev/agents` 是一个较大的 agents 仓库。当前只登记并同步其中和
代码库侦察相关的下游项:
| 下游项 | 隶属 | 作用 |
| --- | --- | --- |
| `codebase-recon` | `outfitter-dev/agents` | 通过 git 历史和代码结构做 risk scan、热点分析、重构前侦察 |
| `pathfinding` | `outfitter-dev/agents` | 需求澄清和 confidence calibration同时补齐 `codebase-recon` 引用的 `confidence.md` |
### Single-skill Sources
| Skill | 来源 | 作用 |
| --- | --- | --- |
| `codebase-migrate` | `awesome-codex-skills` | 大代码库迁移、多文件 refactor、分批变更与 CI 验证工作流 |
| `uncle-bob-craft` | `antigravity-awesome-skills` | Clean Architecture、SOLID、设计模式误用和代码工匠实践审查 |
#### `uncle-bob-craft` 定位
`uncle-bob-craft` 是原则型补强 skill不替代现有 `brooks-*`
`codebase-*` 主流程。它适合在问题明确聚焦 Clean Architecture、SOLID、
职责拆分、依赖方向、设计模式是否滥用、代码工匠实践时使用。
| 对比项 | 分工 |
| Skill | 作用 |
| --- | --- |
| `codebase-recon` | 负责重构前侦察、热点分析和影响面判断;`uncle-bob-craft` 不负责代码库级侦察 |
| `brooks-audit` | 负责架构边界、模块职责和长期维护性审查;`uncle-bob-craft` 只作为 Clean Architecture / SOLID 视角补强 |
| `codebase-migrate` | 负责大规模迁移、多文件 refactor 和 CI 验证节奏;`uncle-bob-craft` 不负责迁移编排 |
| `brooks-review` | 负责 PR / diff 级代码审查;`uncle-bob-craft` 仅在审查重点是 SOLID、职责拆分或设计模式误用时配合使用 |
| `brooks-test` | 负责测试质量、断言边界和测试脆弱性审查;`uncle-bob-craft` 不负责测试质量专项审查 |
| `brooks-review` | 常规 PR / diff code review |
| `brooks-audit` | architecture audit、系统性结构问题审查 |
| `brooks-debt` | technical debt review |
| `brooks-health` | 项目健康度检查 |
| `brooks-sweep` | 扫描式问题发现 |
| `brooks-test` | 测试质量审查 |
推荐触发方式:有明确 Clean Architecture、SOLID、Uncle Bob、职责拆分、
依赖方向或设计模式误用问题时使用;普通 PR 审查仍优先 `brooks-review`
架构级审查仍优先 `brooks-audit`
### 代码库侦察与迁移
| Skill | 作用 |
| --- | --- |
| `codebase-recon` | 通过 git 历史和代码结构做 risk scan、热点分析、重构前侦察 |
| `pathfinding` | 需求澄清和 confidence calibration |
| `codebase-migrate` | 大代码库迁移、多文件 refactor、分批变更与 CI 验证工作流 |
### 其他
| Skill | 作用 |
| --- | --- |
| `ui-ux-pro-max` | UI/UX 设计知识库,包含风格、配色、字体、组件和栈相关建议 |
| `karpathy-guidelines` | 写代码、审查、重构时降低 LLM 常见错误:保持简单、聚焦、可验证 |
| `uncle-bob-craft` | Clean Architecture、SOLID、设计模式误用和代码工匠实践审查 |

Some files were not shown because too many files have changed in this diff Show More