@optima-chat/optima-agent 0.9.50 → 0.9.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +166 -0
- package/.claude/skills/doctor-avatar/SKILL.md +15 -0
- package/.claude/skills/scout/SKILL.md +13 -7
- package/.claude/skills/scout/references/concept.md +1 -3
- package/.claude/skills/scout/references/planning.md +8 -2
- package/dist/bin/banner-tool.js +0 -0
- package/dist/bin/bi-cli.js +0 -0
- package/dist/bin/browser-cli.js +0 -0
- package/dist/bin/channels.js +0 -0
- package/dist/bin/comfy.d.ts +3 -0
- package/dist/bin/comfy.d.ts.map +1 -0
- package/dist/bin/comfy.js +3 -0
- package/dist/bin/comfy.js.map +1 -0
- package/dist/bin/commerce.js +0 -0
- package/dist/bin/gen.js +0 -0
- package/dist/bin/google-ads.js +0 -0
- package/dist/bin/growth.d.ts +3 -0
- package/dist/bin/growth.d.ts.map +1 -0
- package/dist/bin/growth.js +3 -0
- package/dist/bin/growth.js.map +1 -0
- package/dist/bin/kb-skills.js +0 -0
- package/dist/bin/logistics.js +0 -0
- package/dist/bin/optima.js +0 -0
- package/dist/bin/scout.js +0 -0
- package/dist/bin/sentinel.js +0 -0
- package/dist/bin/shopify.js +0 -0
- package/dist/src/hooks-loader.d.ts +6 -0
- package/dist/src/hooks-loader.d.ts.map +1 -0
- package/dist/src/hooks-loader.js +215 -0
- package/dist/src/hooks-loader.js.map +1 -0
- package/dist/src/ui/App.d.ts +6 -0
- package/dist/src/ui/App.d.ts.map +1 -0
- package/dist/src/ui/App.js +164 -0
- package/dist/src/ui/App.js.map +1 -0
- package/dist/src/ui/components/Composer.d.ts +10 -0
- package/dist/src/ui/components/Composer.d.ts.map +1 -0
- package/dist/src/ui/components/Composer.js +13 -0
- package/dist/src/ui/components/Composer.js.map +1 -0
- package/dist/src/ui/components/Header.d.ts +7 -0
- package/dist/src/ui/components/Header.d.ts.map +1 -0
- package/dist/src/ui/components/Header.js +7 -0
- package/dist/src/ui/components/Header.js.map +1 -0
- package/dist/src/ui/components/Message.d.ts +12 -0
- package/dist/src/ui/components/Message.d.ts.map +1 -0
- package/dist/src/ui/components/Message.js +21 -0
- package/dist/src/ui/components/Message.js.map +1 -0
- package/dist/src/ui/components/MessageList.d.ts +9 -0
- package/dist/src/ui/components/MessageList.d.ts.map +1 -0
- package/dist/src/ui/components/MessageList.js +18 -0
- package/dist/src/ui/components/MessageList.js.map +1 -0
- package/dist/src/ui/components/Spinner.d.ts +6 -0
- package/dist/src/ui/components/Spinner.d.ts.map +1 -0
- package/dist/src/ui/components/Spinner.js +7 -0
- package/dist/src/ui/components/Spinner.js.map +1 -0
- package/dist/src/ui/components/StatusBar.d.ts +11 -0
- package/dist/src/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/src/ui/components/StatusBar.js +7 -0
- package/dist/src/ui/components/StatusBar.js.map +1 -0
- package/dist/src/ui/components/index.d.ts +7 -0
- package/dist/src/ui/components/index.d.ts.map +1 -0
- package/dist/src/ui/components/index.js +7 -0
- package/dist/src/ui/components/index.js.map +1 -0
- package/dist/src/validation/error-formatter.d.ts +21 -0
- package/dist/src/validation/error-formatter.d.ts.map +1 -0
- package/dist/src/validation/error-formatter.js +98 -0
- package/dist/src/validation/error-formatter.js.map +1 -0
- package/dist/src/validation/index.d.ts +10 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +10 -0
- package/dist/src/validation/index.js.map +1 -0
- package/dist/src/validation/json-validator.d.ts +25 -0
- package/dist/src/validation/json-validator.d.ts.map +1 -0
- package/dist/src/validation/json-validator.js +173 -0
- package/dist/src/validation/json-validator.js.map +1 -0
- package/dist/src/validation/schema.d.ts +353 -0
- package/dist/src/validation/schema.d.ts.map +1 -0
- package/dist/src/validation/schema.js +57 -0
- package/dist/src/validation/schema.js.map +1 -0
- package/dist/src/validation/suggestions.d.ts +25 -0
- package/dist/src/validation/suggestions.d.ts.map +1 -0
- package/dist/src/validation/suggestions.js +144 -0
- package/dist/src/validation/suggestions.js.map +1 -0
- package/dist/src/validation/types.d.ts +40 -0
- package/dist/src/validation/types.d.ts.map +1 -0
- package/dist/src/validation/types.js +5 -0
- package/dist/src/validation/types.js.map +1 -0
- package/dist/src/validation/yaml-validator.d.ts +25 -0
- package/dist/src/validation/yaml-validator.d.ts.map +1 -0
- package/dist/src/validation/yaml-validator.js +177 -0
- package/dist/src/validation/yaml-validator.js.map +1 -0
- package/package.json +11 -12
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(gh api:*)",
|
|
5
|
+
"WebFetch(domain:platform.claude.com)",
|
|
6
|
+
"Bash(git init:*)",
|
|
7
|
+
"Bash(mkdir:*)",
|
|
8
|
+
"Bash(npm run typecheck:*)",
|
|
9
|
+
"Bash(npm view:*)",
|
|
10
|
+
"WebSearch",
|
|
11
|
+
"Bash(commerce --help)",
|
|
12
|
+
"Bash(done)",
|
|
13
|
+
"Bash(commerce product:*)",
|
|
14
|
+
"Bash(commerce order:*)",
|
|
15
|
+
"Bash(commerce i18n:*)",
|
|
16
|
+
"Bash(google-ads:*)",
|
|
17
|
+
"Bash(scout --help:*)",
|
|
18
|
+
"Bash(tree:*)",
|
|
19
|
+
"Bash(cloc:*)",
|
|
20
|
+
"Bash(npm run build:*)",
|
|
21
|
+
"Bash(git restore:*)",
|
|
22
|
+
"Bash(gh repo view:*)",
|
|
23
|
+
"Bash(mv:*)",
|
|
24
|
+
"Bash(rmdir:*)",
|
|
25
|
+
"Bash(git add:*)",
|
|
26
|
+
"Bash(git commit:*)",
|
|
27
|
+
"Bash(git push)",
|
|
28
|
+
"Bash(timeout 5 npm run optima:*)",
|
|
29
|
+
"Bash(npm install:*)",
|
|
30
|
+
"Bash(cat:*)",
|
|
31
|
+
"Bash(gh issue create:*)",
|
|
32
|
+
"Bash(npx tsx:*)",
|
|
33
|
+
"Bash(timeout 30 npx tsx:*)",
|
|
34
|
+
"Bash(git push origin feature/ask-user-question)",
|
|
35
|
+
"Bash(node:*)",
|
|
36
|
+
"Bash(npm version:*)",
|
|
37
|
+
"Bash(git push:*)",
|
|
38
|
+
"Bash(npm publish:*)",
|
|
39
|
+
"Bash(pkill:*)",
|
|
40
|
+
"Bash(git -C /Users/verypro/optima-agent log --oneline --all -- \".claude/\")",
|
|
41
|
+
"Bash(wc:*)",
|
|
42
|
+
"Bash(grep:*)",
|
|
43
|
+
"Bash(find:*)",
|
|
44
|
+
"Bash(commerce collection --help:*)",
|
|
45
|
+
"Bash(commerce collection update --help:*)",
|
|
46
|
+
"Bash(commerce collection set-cover:*)",
|
|
47
|
+
"Bash(commerce collection get --help:*)",
|
|
48
|
+
"Bash(commerce collection list --help:*)",
|
|
49
|
+
"Bash(commerce collection create --help:*)",
|
|
50
|
+
"Bash(commerce collection remove-products:*)",
|
|
51
|
+
"Bash(commerce collection list-products:*)",
|
|
52
|
+
"Bash(commerce --version:*)",
|
|
53
|
+
"Bash(bi-cli --version:*)",
|
|
54
|
+
"Bash(commerce homepage create --help:*)",
|
|
55
|
+
"Bash(commerce homepage reorder --help:*)",
|
|
56
|
+
"Bash(commerce homepage delete --help:*)",
|
|
57
|
+
"Bash(commerce homepage update-images:*)",
|
|
58
|
+
"Bash(commerce homepage update-collections:*)",
|
|
59
|
+
"Bash(commerce homepage update-target:*)",
|
|
60
|
+
"Bash(commerce homepage switch-template:*)",
|
|
61
|
+
"Bash(commerce inventory:*)",
|
|
62
|
+
"Bash(commerce merchant:*)",
|
|
63
|
+
"Bash(commerce review:*)",
|
|
64
|
+
"Bash(commerce product-page:*)",
|
|
65
|
+
"Bash(bi-cli:*)",
|
|
66
|
+
"Bash(comfy:*)",
|
|
67
|
+
"Bash(scout search:*)",
|
|
68
|
+
"Bash(scout product:*)",
|
|
69
|
+
"Bash(commerce homepage create-collections:*)",
|
|
70
|
+
"Bash(commerce homepage create-featured:*)",
|
|
71
|
+
"Bash(commerce homepage create-collection-products:*)",
|
|
72
|
+
"Bash(commerce homepage create-banner:*)",
|
|
73
|
+
"Bash(xargs -I {} sh -c 'echo \"\"\"\"=== {} ===\"\"\"\"; head -3 /Users/verypro/optima-agent/.claude/skills/{}/SKILL.md | grep \"\"\"\"name:\"\"\"\"')",
|
|
74
|
+
"Bash(ls:*)",
|
|
75
|
+
"Bash(gh issue view:*)",
|
|
76
|
+
"Bash(npx markdownlint-cli:*)",
|
|
77
|
+
"Bash(chmod:*)",
|
|
78
|
+
"Bash(npm whoami:*)",
|
|
79
|
+
"Bash(tsx test-scripts/test-headless-progress.ts:*)",
|
|
80
|
+
"Bash(DEBUG_STREAM=1 node dist/bin/optima.js:*)",
|
|
81
|
+
"Bash(git describe:*)",
|
|
82
|
+
"WebFetch(domain:github.com)",
|
|
83
|
+
"Bash(./scripts/test-headless.sh:*)",
|
|
84
|
+
"Bash(./scripts/test-headless-simple.sh:*)",
|
|
85
|
+
"Bash(env)",
|
|
86
|
+
"Bash(gh pr list:*)",
|
|
87
|
+
"Bash(gh pr view:*)",
|
|
88
|
+
"Bash(gh pr diff:*)",
|
|
89
|
+
"Bash(optima --version:*)",
|
|
90
|
+
"Bash(optima agent headless:*)",
|
|
91
|
+
"Bash(optima headless:*)",
|
|
92
|
+
"Bash(/Users/verypro/optima-agent/scripts/test-headless.sh:*)",
|
|
93
|
+
"Bash(/Users/verypro/optima-agent/scripts/test-headless-simple.sh:*)",
|
|
94
|
+
"Bash(tee:*)",
|
|
95
|
+
"Bash(CONV_ID=\"conv-1\":*)",
|
|
96
|
+
"Bash(echo:*)",
|
|
97
|
+
"Bash(scout tiktok trending --help:*)",
|
|
98
|
+
"Bash(scout tiktok trending:*)",
|
|
99
|
+
"Bash(git checkout:*)",
|
|
100
|
+
"Bash(npm test:*)",
|
|
101
|
+
"Bash(git tag:*)",
|
|
102
|
+
"Bash(/private/tmp/claude/-Users-verypro-optima-agent/68a9ac2c-def2-44e1-b42b-e53bd9022ab6/scratchpad/test-canUseTool.sh)",
|
|
103
|
+
"Bash(optima --help:*)",
|
|
104
|
+
"Bash(npx @optima-chat/ads-cli:*)",
|
|
105
|
+
"Bash(head:*)",
|
|
106
|
+
"Bash(git pull:*)",
|
|
107
|
+
"Bash(pnpm build:*)",
|
|
108
|
+
"Skill(read-code)",
|
|
109
|
+
"Bash(npm run cli:*)",
|
|
110
|
+
"Bash(scout:*)",
|
|
111
|
+
"WebFetch(domain:docs.scrapecreators.com)",
|
|
112
|
+
"WebFetch(domain:scrapecreators.com)",
|
|
113
|
+
"Bash(gh auth status:*)",
|
|
114
|
+
"Bash(optima-agent:*)",
|
|
115
|
+
"Bash(python3:*)",
|
|
116
|
+
"Bash(python3 -c \" import sys content = sys.stdin.read\\(\\) # Find flushMessageQueueSync idx = content.find\\(''flushMessageQueueSync''\\) # Get context around it lines = content.split\\(''\\\\n''\\) for i, line in enumerate\\(lines\\): if ''flushMessageQueueSync'' in line and ''private'' in line: for j in range\\(i, min\\(i+20, len\\(lines\\)\\)\\): print\\(f''{j+1}: {lines[j]}''\\) break \")",
|
|
117
|
+
"Bash(optima:*)",
|
|
118
|
+
"WebFetch(domain:www.npmjs.com)",
|
|
119
|
+
"WebFetch(domain:registry.npmjs.org)",
|
|
120
|
+
"WebFetch(domain:zod.dev)",
|
|
121
|
+
"Bash(npm ls:*)",
|
|
122
|
+
"Bash(NODE_DEBUG=child_process npx tsx:*)",
|
|
123
|
+
"Bash(DEBUG_CLAUDE_AGENT_SDK=1 npx tsx:*)",
|
|
124
|
+
"Bash(CLAUDECODE= npx tsx:*)",
|
|
125
|
+
"Bash(env:*)",
|
|
126
|
+
"Bash(gh release:*)",
|
|
127
|
+
"Bash(npm info:*)",
|
|
128
|
+
"Bash(gh run:*)",
|
|
129
|
+
"Bash(gtimeout 90:*)",
|
|
130
|
+
"Bash(sentinel:*)",
|
|
131
|
+
"Bash(gh pr:*)",
|
|
132
|
+
"Bash(git fetch:*)",
|
|
133
|
+
"Bash(git log:*)",
|
|
134
|
+
"Bash(npm bin:*)",
|
|
135
|
+
"Bash(git status:*)",
|
|
136
|
+
"Bash(browser-cli --version && browser-cli --help)",
|
|
137
|
+
"Bash(browser-cli status:*)",
|
|
138
|
+
"Bash(browser-cli launch:*)",
|
|
139
|
+
"Bash(browser-cli screenshot:*)",
|
|
140
|
+
"Bash(browser-cli --version)",
|
|
141
|
+
"Bash(browser-cli close:*)",
|
|
142
|
+
"Bash(npm update:*)",
|
|
143
|
+
"Bash(node -e \"console.log\\(require\\('./node_modules/@optima-chat/browser-cli/package.json'\\).version\\)\")",
|
|
144
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
145
|
+
"Bash(aws ecs:*)",
|
|
146
|
+
"Bash(aws ecr:*)",
|
|
147
|
+
"Bash(gh search:*)",
|
|
148
|
+
"Bash(npx tsc:*)",
|
|
149
|
+
"Bash(find /Users/verypro/optima-agent -path */node_modules -prune -o -type f \\\\\\(-name *comfy* -o -name *gen* \\\\\\) -print)",
|
|
150
|
+
"Bash(export PATH=\"/usr/local/bin:$PATH\")",
|
|
151
|
+
"Bash(pnpm add:*)",
|
|
152
|
+
"Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/max-rounds-hit)",
|
|
153
|
+
"Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/budget-almost-spent)",
|
|
154
|
+
"Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/two-active-campaigns)",
|
|
155
|
+
"Bash(cp -r ~/optima-agent/test/skills/kol-outreach/fixtures/one-active-campaign ~/optima-agent/test/skills/kol-outreach/fixtures/brand-only)",
|
|
156
|
+
"Bash(pnpm vitest:*)",
|
|
157
|
+
"Bash(pnpm test:*)",
|
|
158
|
+
"Bash(pnpm --filter @optima-scout/backend test --reporter=verbose backend/src/routes/outreach/__tests__/lock.test.ts backend/src/routes/outreach/__tests__/inbound.test.ts)",
|
|
159
|
+
"Bash(npx vitest:*)",
|
|
160
|
+
"Bash(DATABASE_URL=postgres://optima_scout:optima_scout_dev@localhost:7293/optima_scout pnpm --filter @optima-scout/backend test)",
|
|
161
|
+
"Bash(pnpm --filter @optima-scout/backend exec vitest run src/routes/outreach/__tests__/inbound.test.ts)"
|
|
162
|
+
],
|
|
163
|
+
"deny": [],
|
|
164
|
+
"ask": []
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -190,6 +190,21 @@ gen doctor profile <external_id>
|
|
|
190
190
|
|
|
191
191
|
> **内部备忘(不主动告诉用户)**:单视频实际训出 4 个 looks 但当前只暴露第一个(spec §13.5 limitation,[v1.1 issue #54](https://github.com/Optima-Chat/optima-gen/issues/54) 跟踪)。用户问起 "为什么只有一种表情" 再说。
|
|
192
192
|
|
|
193
|
+
### 7.5 注册到用户的"我的分身"列表
|
|
194
|
+
|
|
195
|
+
训练成功后(voice + avatar 至少一项 status=complete/completed),把 `external_id` 注册给 chat backend,让前端"我的分身"组件能列出来。**Idempotent**(后端 upsert),重复调安全。
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
curl -s -X POST -H "Authorization: Bearer $OPTIMA_TOKEN" \
|
|
199
|
+
-H "Content-Type: application/json" \
|
|
200
|
+
-d "{\"external_id\":\"$EXTERNAL_ID\"}" \
|
|
201
|
+
"${CHAT_API_URL:-https://www.optima.onl}/api/user/me/doctor-avatars"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**如失败**(网络 / 401 / 5xx)→ **不阻塞**,继续给用户报告 + 可选 demo;只在内部 log 警告。理由:训练已经完成且 IDs 有了,UI 列表注册是 nice-to-have,不该卡住主流程。
|
|
205
|
+
|
|
206
|
+
> 这一步让 `external_id` 进 user 的 mapping table,UI 才能显示。如果 skip 这一步,IDs 仍在 `gen doctor profile` 能查,但 UI 看不到(用户得记 slug)。
|
|
207
|
+
|
|
193
208
|
### 8. (可选)立即合成 demo
|
|
194
209
|
|
|
195
210
|
如果用户在原始请求里说了想"看效果 / 做一段试试 / 给我个 demo":
|
|
@@ -85,13 +85,19 @@ description: "基于 IPD 方法论的产品研究全生命周期工具。在 ~/k
|
|
|
85
85
|
- 使用 `scout cache list` 查看已缓存文件
|
|
86
86
|
- stdout 输出摘要 + 缓存路径,不再输出完整 JSON
|
|
87
87
|
|
|
88
|
-
###
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
### Ingest(缓存数据收录到 KB)
|
|
89
|
+
|
|
90
|
+
数据采集完成后,必须将缓存文件 ingest 到 KB 才能进入分析。步骤:
|
|
91
|
+
|
|
92
|
+
1. `cp ~/.scout/cache/{project}/*.json ~/kb/product-research/raw/`
|
|
93
|
+
2. 读取 `~/kb/product-research/AGENTS.md`,了解每种数据类型应创建/更新哪些页面
|
|
94
|
+
3. 对每个 raw/ 文件:
|
|
95
|
+
- 读取 JSON 内容,提取关键信息
|
|
96
|
+
- 在 `wiki/sources/` 创建对应的来源摘要页(命名:`YYYY-MM-DD-<命令>-<参数>.md`)
|
|
97
|
+
- 根据 AGENTS.md 的"数据来源类型"表,创建/更新相关的 entity 和 overview 页面
|
|
98
|
+
4. 更新 `index.md`(添加新页面引用)和 `log.md`(记录本次 ingest)
|
|
99
|
+
5. `cd ~/kb/product-research && git add -A && git commit -m "[product-research] ingest: <简述>"`
|
|
100
|
+
6. 运行 `ls ~/kb/product-research/raw/` 和 `ls ~/kb/product-research/wiki/sources/` 确认文件已生成
|
|
95
101
|
|
|
96
102
|
### 分析数据来源
|
|
97
103
|
|
|
@@ -108,9 +108,7 @@
|
|
|
108
108
|
|
|
109
109
|
### Ingest
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
- 对 `~/.scout/cache/{project}/` 中的每个缓存文件调用 kb-skills 的 ingesting-sources 流程
|
|
113
|
-
- 确认 raw/、wiki/sources/ 和相关 entity/overview 页面已更新
|
|
111
|
+
按 SKILL.md「Ingest(缓存数据收录到 KB)」章节的步骤,将所有缓存文件收录到 KB。
|
|
114
112
|
|
|
115
113
|
### 数据完整性检查
|
|
116
114
|
|
|
@@ -205,9 +205,15 @@
|
|
|
205
205
|
|
|
206
206
|
**完成标准**:主要风险识别,每个有应对方案
|
|
207
207
|
|
|
208
|
-
## 数据完整性检查
|
|
208
|
+
## Ingest + 数据完整性检查
|
|
209
209
|
|
|
210
|
-
|
|
210
|
+
### Ingest
|
|
211
|
+
|
|
212
|
+
按 SKILL.md「Ingest(缓存数据收录到 KB)」章节的步骤,将所有缓存文件收录到 KB。
|
|
213
|
+
|
|
214
|
+
### 数据完整性检查
|
|
215
|
+
|
|
216
|
+
**Ingest 完成后执行检查。全部通过才能进入 PDCP Gate 评审。任何一项未通过 → 补齐后重新检查。**
|
|
211
217
|
|
|
212
218
|
```
|
|
213
219
|
计划阶段数据完整性检查清单:
|
package/dist/bin/banner-tool.js
CHANGED
|
File without changes
|
package/dist/bin/bi-cli.js
CHANGED
|
File without changes
|
package/dist/bin/browser-cli.js
CHANGED
|
File without changes
|
package/dist/bin/channels.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfy.d.ts","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfy.js","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
|
package/dist/bin/commerce.js
CHANGED
|
File without changes
|
package/dist/bin/gen.js
CHANGED
|
File without changes
|
package/dist/bin/google-ads.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth.d.ts","sourceRoot":"","sources":["../../bin/growth.ts"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth.js","sourceRoot":"","sources":["../../bin/growth.ts"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC"}
|
package/dist/bin/kb-skills.js
CHANGED
|
File without changes
|
package/dist/bin/logistics.js
CHANGED
|
File without changes
|
package/dist/bin/optima.js
CHANGED
|
File without changes
|
package/dist/bin/scout.js
CHANGED
|
File without changes
|
package/dist/bin/sentinel.js
CHANGED
|
File without changes
|
package/dist/bin/shopify.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-loader.d.ts","sourceRoot":"","sources":["../../src/hooks-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAwL5D;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,GACrC,WAAW,CAiFb"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, existsSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
+
import { join, dirname } from "path";
|
|
3
|
+
import yaml from "js-yaml";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
import { YamlValidator, formatValidationErrors, formatValidationWarning } from "./validation/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* 从 SKILL.md 提取 YAML frontmatter
|
|
8
|
+
*/
|
|
9
|
+
function extractYamlFrontmatter(content) {
|
|
10
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
11
|
+
if (!match)
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
return yaml.load(match[1]);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error("Failed to parse YAML frontmatter:", error);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 执行 shell 命令并返回结果
|
|
23
|
+
*/
|
|
24
|
+
function executeCommand(command, cwd, skillDir, sessionId) {
|
|
25
|
+
try {
|
|
26
|
+
// 替换环境变量
|
|
27
|
+
const expandedCommand = command
|
|
28
|
+
.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, skillDir)
|
|
29
|
+
.replace(/\$\{SESSION_ID\}/g, sessionId || 'default');
|
|
30
|
+
const result = execSync(expandedCommand, {
|
|
31
|
+
cwd,
|
|
32
|
+
encoding: "utf-8",
|
|
33
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
34
|
+
});
|
|
35
|
+
return result.trim();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// 命令失败不阻塞,返回错误信息
|
|
39
|
+
return error.stdout || error.message || "";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 转换 skill hooks 为 SDK hooks 格式
|
|
44
|
+
*/
|
|
45
|
+
function convertSkillHooksToSdkHooks(skillHooks, skillDir, cwd, getSessionId, hookType) {
|
|
46
|
+
return skillHooks.map((hookConfig) => ({
|
|
47
|
+
matcher: hookConfig.matcher,
|
|
48
|
+
hooks: hookConfig.hooks.map((hook) => {
|
|
49
|
+
// SDK HookCallback 签名: (input, toolUseID, options) => Promise<HookJSONOutput>
|
|
50
|
+
return async (input, toolUseID, options) => {
|
|
51
|
+
// PreToolUse: 拦截并重定向 planning 文件操作
|
|
52
|
+
if (hookType === "PreToolUse" && input.tool_name && input.tool_input) {
|
|
53
|
+
const toolName = input.tool_name;
|
|
54
|
+
const toolInput = input.tool_input;
|
|
55
|
+
// 处理文件操作工具的路径重定向
|
|
56
|
+
if ((toolName === "Write" || toolName === "Read" || toolName === "Edit") && toolInput.file_path) {
|
|
57
|
+
const filePath = toolInput.file_path;
|
|
58
|
+
if (filePath.includes(".planning/default/")) {
|
|
59
|
+
const sessionId = getSessionId() || "default";
|
|
60
|
+
const updatedPath = filePath.replace(".planning/default/", `.planning/${sessionId}/`);
|
|
61
|
+
console.log(`[hooks-loader] Intercepting and redirecting: ${filePath} -> ${updatedPath}`);
|
|
62
|
+
// 手动执行文件操作并 return,不要继续到 command 部分
|
|
63
|
+
try {
|
|
64
|
+
console.log(`[hooks-loader] Inside try block, toolName=${toolName}`);
|
|
65
|
+
if (toolName === "Write") {
|
|
66
|
+
console.log(`[hooks-loader] Handling Write operation`);
|
|
67
|
+
// 创建目录
|
|
68
|
+
const dir = dirname(updatedPath);
|
|
69
|
+
if (!existsSync(dir)) {
|
|
70
|
+
mkdirSync(dir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
// 写入文件
|
|
73
|
+
writeFileSync(updatedPath, toolInput.content || "", "utf-8");
|
|
74
|
+
console.log(`[hooks-loader] File written to ${updatedPath}`);
|
|
75
|
+
// Block 原始工具执行
|
|
76
|
+
return {
|
|
77
|
+
decision: "block",
|
|
78
|
+
systemMessage: `File written to session-specific directory`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else if (toolName === "Read") {
|
|
82
|
+
// 读取文件
|
|
83
|
+
if (existsSync(updatedPath)) {
|
|
84
|
+
const content = readFileSync(updatedPath, "utf-8");
|
|
85
|
+
console.log(`[hooks-loader] File read from ${updatedPath}`);
|
|
86
|
+
// Block 原始工具,返回文件内容
|
|
87
|
+
return {
|
|
88
|
+
decision: "block",
|
|
89
|
+
systemMessage: `File content:\n\n${content}`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return {
|
|
94
|
+
decision: "block",
|
|
95
|
+
systemMessage: `File not found: ${updatedPath}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (toolName === "Edit") {
|
|
100
|
+
// Edit 需要读取、修改、写入
|
|
101
|
+
if (existsSync(updatedPath)) {
|
|
102
|
+
let content = readFileSync(updatedPath, "utf-8");
|
|
103
|
+
// 执行替换
|
|
104
|
+
if (toolInput.old_string && toolInput.new_string) {
|
|
105
|
+
if (toolInput.replace_all) {
|
|
106
|
+
content = content.split(toolInput.old_string).join(toolInput.new_string);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
content = content.replace(toolInput.old_string, toolInput.new_string);
|
|
110
|
+
}
|
|
111
|
+
writeFileSync(updatedPath, content, "utf-8");
|
|
112
|
+
console.log(`[hooks-loader] File edited at ${updatedPath}`);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
decision: "block",
|
|
116
|
+
systemMessage: `File edited successfully`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return {
|
|
121
|
+
decision: "block",
|
|
122
|
+
systemMessage: `File not found: ${updatedPath}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error(`[hooks-loader] Error:`, error);
|
|
129
|
+
return {
|
|
130
|
+
decision: "block",
|
|
131
|
+
systemMessage: `Error: ${error.message}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (hook.type === "command") {
|
|
138
|
+
const sessionId = getSessionId();
|
|
139
|
+
const result = executeCommand(hook.command, cwd, skillDir, sessionId);
|
|
140
|
+
// 如果有输出,作为系统消息返回
|
|
141
|
+
if (result) {
|
|
142
|
+
return {
|
|
143
|
+
continue: true,
|
|
144
|
+
systemMessage: result,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return { continue: true };
|
|
149
|
+
};
|
|
150
|
+
}),
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 从 skills 目录加载所有 skill 的 hooks
|
|
155
|
+
*/
|
|
156
|
+
export function loadSkillHooks(skillsDir, cwd, getSessionId) {
|
|
157
|
+
const hooks = {};
|
|
158
|
+
if (!existsSync(skillsDir)) {
|
|
159
|
+
return hooks;
|
|
160
|
+
}
|
|
161
|
+
const skillDirs = readdirSync(skillsDir, { withFileTypes: true })
|
|
162
|
+
.filter((dirent) => dirent.isDirectory())
|
|
163
|
+
.map((dirent) => dirent.name);
|
|
164
|
+
for (const skillName of skillDirs) {
|
|
165
|
+
const skillDir = join(skillsDir, skillName);
|
|
166
|
+
const skillMdPath = join(skillDir, "SKILL.md");
|
|
167
|
+
if (!existsSync(skillMdPath)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const content = readFileSync(skillMdPath, "utf-8");
|
|
172
|
+
// 验证配置文件
|
|
173
|
+
const validator = new YamlValidator();
|
|
174
|
+
const validationResult = validator.validate(content, skillMdPath);
|
|
175
|
+
// 显示错误
|
|
176
|
+
if (!validationResult.valid) {
|
|
177
|
+
console.error(formatValidationErrors(validationResult.errors));
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// 显示警告
|
|
181
|
+
if (validationResult.warnings && validationResult.warnings.length > 0) {
|
|
182
|
+
for (const warning of validationResult.warnings) {
|
|
183
|
+
console.warn(formatValidationWarning(warning));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const frontmatter = extractYamlFrontmatter(content);
|
|
187
|
+
if (!frontmatter?.hooks) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
// 转换各个 hook 事件
|
|
191
|
+
if (frontmatter.hooks.SessionStart) {
|
|
192
|
+
hooks.SessionStart = hooks.SessionStart || [];
|
|
193
|
+
hooks.SessionStart.push(...convertSkillHooksToSdkHooks(frontmatter.hooks.SessionStart, skillDir, cwd, getSessionId, "SessionStart"));
|
|
194
|
+
}
|
|
195
|
+
if (frontmatter.hooks.PreToolUse) {
|
|
196
|
+
hooks.PreToolUse = hooks.PreToolUse || [];
|
|
197
|
+
hooks.PreToolUse.push(...convertSkillHooksToSdkHooks(frontmatter.hooks.PreToolUse, skillDir, cwd, getSessionId, "PreToolUse"));
|
|
198
|
+
}
|
|
199
|
+
if (frontmatter.hooks.PostToolUse) {
|
|
200
|
+
hooks.PostToolUse = hooks.PostToolUse || [];
|
|
201
|
+
hooks.PostToolUse.push(...convertSkillHooksToSdkHooks(frontmatter.hooks.PostToolUse, skillDir, cwd, getSessionId, "PostToolUse"));
|
|
202
|
+
}
|
|
203
|
+
if (frontmatter.hooks.Stop) {
|
|
204
|
+
hooks.Stop = hooks.Stop || [];
|
|
205
|
+
hooks.Stop.push(...convertSkillHooksToSdkHooks(frontmatter.hooks.Stop, skillDir, cwd, getSessionId, "Stop"));
|
|
206
|
+
}
|
|
207
|
+
console.log(`[hooks-loader] Loaded hooks from skill: ${skillName}`);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
console.error(`[hooks-loader] Failed to load hooks from ${skillName}:`, error);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return hooks;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=hooks-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-loader.js","sourceRoot":"","sources":["../../src/hooks-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/ui/App.tsx"],"names":[],"mappings":"AAcA,UAAU,QAAQ;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,2CAqMpC"}
|