@optima-chat/optima-agent 0.8.48 → 0.8.49

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.
Files changed (80) hide show
  1. package/.claude/skills/product/SKILL.md +16 -4
  2. package/dist/bin/bi-cli.js +0 -0
  3. package/dist/bin/commerce.js +0 -0
  4. package/dist/bin/google-ads.js +0 -0
  5. package/dist/bin/optima.js +0 -0
  6. package/dist/bin/scout.js +0 -0
  7. package/dist/src/agent.d.ts +1 -1
  8. package/dist/src/system-prompt.d.ts.map +1 -1
  9. package/dist/src/system-prompt.js +9 -1
  10. package/dist/src/system-prompt.js.map +1 -1
  11. package/package.json +1 -1
  12. package/.claude/settings.local.json +0 -154
  13. package/dist/bin/comfy.d.ts +0 -3
  14. package/dist/bin/comfy.d.ts.map +0 -1
  15. package/dist/bin/comfy.js +0 -3
  16. package/dist/bin/comfy.js.map +0 -1
  17. package/dist/src/hooks-loader.d.ts +0 -6
  18. package/dist/src/hooks-loader.d.ts.map +0 -1
  19. package/dist/src/hooks-loader.js +0 -215
  20. package/dist/src/hooks-loader.js.map +0 -1
  21. package/dist/src/ui/App.d.ts +0 -6
  22. package/dist/src/ui/App.d.ts.map +0 -1
  23. package/dist/src/ui/App.js +0 -164
  24. package/dist/src/ui/App.js.map +0 -1
  25. package/dist/src/ui/components/Composer.d.ts +0 -10
  26. package/dist/src/ui/components/Composer.d.ts.map +0 -1
  27. package/dist/src/ui/components/Composer.js +0 -13
  28. package/dist/src/ui/components/Composer.js.map +0 -1
  29. package/dist/src/ui/components/Header.d.ts +0 -7
  30. package/dist/src/ui/components/Header.d.ts.map +0 -1
  31. package/dist/src/ui/components/Header.js +0 -7
  32. package/dist/src/ui/components/Header.js.map +0 -1
  33. package/dist/src/ui/components/Message.d.ts +0 -12
  34. package/dist/src/ui/components/Message.d.ts.map +0 -1
  35. package/dist/src/ui/components/Message.js +0 -21
  36. package/dist/src/ui/components/Message.js.map +0 -1
  37. package/dist/src/ui/components/MessageList.d.ts +0 -9
  38. package/dist/src/ui/components/MessageList.d.ts.map +0 -1
  39. package/dist/src/ui/components/MessageList.js +0 -18
  40. package/dist/src/ui/components/MessageList.js.map +0 -1
  41. package/dist/src/ui/components/Spinner.d.ts +0 -6
  42. package/dist/src/ui/components/Spinner.d.ts.map +0 -1
  43. package/dist/src/ui/components/Spinner.js +0 -7
  44. package/dist/src/ui/components/Spinner.js.map +0 -1
  45. package/dist/src/ui/components/StatusBar.d.ts +0 -11
  46. package/dist/src/ui/components/StatusBar.d.ts.map +0 -1
  47. package/dist/src/ui/components/StatusBar.js +0 -7
  48. package/dist/src/ui/components/StatusBar.js.map +0 -1
  49. package/dist/src/ui/components/index.d.ts +0 -7
  50. package/dist/src/ui/components/index.d.ts.map +0 -1
  51. package/dist/src/ui/components/index.js +0 -7
  52. package/dist/src/ui/components/index.js.map +0 -1
  53. package/dist/src/validation/error-formatter.d.ts +0 -21
  54. package/dist/src/validation/error-formatter.d.ts.map +0 -1
  55. package/dist/src/validation/error-formatter.js +0 -98
  56. package/dist/src/validation/error-formatter.js.map +0 -1
  57. package/dist/src/validation/index.d.ts +0 -10
  58. package/dist/src/validation/index.d.ts.map +0 -1
  59. package/dist/src/validation/index.js +0 -10
  60. package/dist/src/validation/index.js.map +0 -1
  61. package/dist/src/validation/json-validator.d.ts +0 -25
  62. package/dist/src/validation/json-validator.d.ts.map +0 -1
  63. package/dist/src/validation/json-validator.js +0 -173
  64. package/dist/src/validation/json-validator.js.map +0 -1
  65. package/dist/src/validation/schema.d.ts +0 -353
  66. package/dist/src/validation/schema.d.ts.map +0 -1
  67. package/dist/src/validation/schema.js +0 -57
  68. package/dist/src/validation/schema.js.map +0 -1
  69. package/dist/src/validation/suggestions.d.ts +0 -25
  70. package/dist/src/validation/suggestions.d.ts.map +0 -1
  71. package/dist/src/validation/suggestions.js +0 -144
  72. package/dist/src/validation/suggestions.js.map +0 -1
  73. package/dist/src/validation/types.d.ts +0 -40
  74. package/dist/src/validation/types.d.ts.map +0 -1
  75. package/dist/src/validation/types.js +0 -5
  76. package/dist/src/validation/types.js.map +0 -1
  77. package/dist/src/validation/yaml-validator.d.ts +0 -25
  78. package/dist/src/validation/yaml-validator.d.ts.map +0 -1
  79. package/dist/src/validation/yaml-validator.js +0 -177
  80. package/dist/src/validation/yaml-validator.js.map +0 -1
@@ -25,7 +25,7 @@ commerce product create \
25
25
  ```
26
26
 
27
27
  ### 场景2:多规格商品上架
28
- **流程**: 创建主商品 → 创建所有变体 → 关联图片
28
+ **流程**: 创建主商品 → 创建所有变体 → 关联图片(共享+变体专属)
29
29
  ```bash
30
30
  # 1. 创建主商品
31
31
  commerce product create --name "T恤" --price 99
@@ -34,10 +34,18 @@ commerce product create --name "T恤" --price 99
34
34
  # 2. 创建所有变体
35
35
  commerce variant create --product-id prod_123 --sku "TSHIRT-RED-S" \
36
36
  --attributes '{"颜色":"红色","尺寸":"S"}' --price 99 --stock 50
37
- commerce variant create --product-id prod_123 --sku "TSHIRT-RED-M" \
38
- --attributes '{"颜色":"红色","尺寸":"M"}' --price 99 --stock 50
37
+ # 获得 variant_id: var_red_s
39
38
  commerce variant create --product-id prod_123 --sku "TSHIRT-BLUE-S" \
40
39
  --attributes '{"颜色":"蓝色","尺寸":"S"}' --price 99 --stock 50
40
+ # 获得 variant_id: var_blue_s
41
+
42
+ # 3. 关联共享图片(所有变体都能看到)
43
+ commerce product add-images --id prod_123 --media-id media_front,media_back
44
+
45
+ # 4. 关联变体专属图片(选择该变体时显示)
46
+ commerce variant add-images --product-id prod_123 --variant-id var_red_s --url "https://cdn.../red.jpg"
47
+ commerce variant add-images --product-id prod_123 --variant-id var_blue_s --url "https://cdn.../blue.jpg"
48
+ # 也可以用已有 media_id:--media-id media_red
41
49
  ```
42
50
 
43
51
  ### 场景3:批量商品导入
@@ -216,6 +224,8 @@ commerce product create --name "T恤" --price 99 --stock 50 # 确保真实有50
216
224
  - "创建促销商品,价格79,划线价99" → `commerce product create --name XX --price 79 --original-price 99`
217
225
  - "上传商品图片" → `commerce upload image --path ./photo.jpg`
218
226
  - "添加商品变体" → `commerce variant create --product-id XX --sku YY`
227
+ - "给变体加图片" / "变体图片" / "变体显示图片" → `commerce variant add-images --product-id XX --variant-id YY --url/--media-id`
228
+ - "把已有图片指定给变体" → `commerce variant add-images --product-id XX --variant-id YY --media-id ZZ`
219
229
  - "更新商品价格" → `commerce product update --id XX --price YY`
220
230
  - "设置商品原价/划线价" → `commerce product update --id XX --original-price YY`
221
231
  - "给商品打标签" → `commerce product update --id XX --tags "featured,new"`
@@ -237,11 +247,13 @@ commerce product create --name "T恤" --price 99 --stock 50 # 确保真实有50
237
247
  - `commerce variant list` - 查看变体列表
238
248
  - `commerce variant update` - 更新变体信息
239
249
  - `commerce variant delete` - 删除变体
250
+ - `commerce variant add-images` - 给变体关联图片(支持 URL/本地文件/media_id)
240
251
 
241
252
  **图片管理**:
242
253
  - `commerce upload image` - 上传图片
243
- - `commerce product add-images` - 关联图片到商品
254
+ - `commerce product add-images` - 关联图片到商品(所有变体共享)
244
255
  - `commerce product remove-images` - 移除商品图片
256
+ - `commerce variant add-images` - 关联图片到特定变体(变体专属)
245
257
 
246
258
  ## 详细示例
247
259
 
File without changes
File without changes
File without changes
File without changes
package/dist/bin/scout.js CHANGED
File without changes
@@ -11,7 +11,7 @@ export declare class OptimaAgent {
11
11
  * @param prompt 用户输入
12
12
  * @param chatOptions 选项,包括 streamFormat: 'delta' | 'content'
13
13
  */
14
- chat(prompt: string, chatOptions?: ChatOptions): AsyncGenerator<import("@anthropic-ai/claude-agent-sdk").SDKUserMessage | import("@anthropic-ai/claude-agent-sdk").SDKAssistantMessage | import("@anthropic-ai/claude-agent-sdk").SDKResultSuccess | import("@anthropic-ai/claude-agent-sdk").SDKResultError | import("@anthropic-ai/claude-agent-sdk").SDKSystemMessage | import("@anthropic-ai/claude-agent-sdk").SDKPartialAssistantMessage | import("@anthropic-ai/claude-agent-sdk").SDKCompactBoundaryMessage | import("@anthropic-ai/claude-agent-sdk").SDKStatusMessage | import("@anthropic-ai/claude-agent-sdk").SDKAPIRetryMessage | import("@anthropic-ai/claude-agent-sdk").SDKLocalCommandOutputMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookStartedMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookResponseMessage | import("@anthropic-ai/claude-agent-sdk").SDKToolProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKAuthStatusMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskNotificationMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskStartedMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKFilesPersistedEvent | import("@anthropic-ai/claude-agent-sdk").SDKToolUseSummaryMessage | import("@anthropic-ai/claude-agent-sdk").SDKRateLimitEvent | import("@anthropic-ai/claude-agent-sdk").SDKElicitationCompleteMessage | import("@anthropic-ai/claude-agent-sdk").SDKPromptSuggestionMessage | {
14
+ chat(prompt: string, chatOptions?: ChatOptions): AsyncGenerator<import("@anthropic-ai/claude-agent-sdk").SDKUserMessage | import("@anthropic-ai/claude-agent-sdk").SDKAssistantMessage | import("@anthropic-ai/claude-agent-sdk").SDKResultSuccess | import("@anthropic-ai/claude-agent-sdk").SDKResultError | import("@anthropic-ai/claude-agent-sdk").SDKSystemMessage | import("@anthropic-ai/claude-agent-sdk").SDKPartialAssistantMessage | import("@anthropic-ai/claude-agent-sdk").SDKCompactBoundaryMessage | import("@anthropic-ai/claude-agent-sdk").SDKStatusMessage | import("@anthropic-ai/claude-agent-sdk").SDKLocalCommandOutputMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookStartedMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKHookResponseMessage | import("@anthropic-ai/claude-agent-sdk").SDKToolProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKAuthStatusMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskNotificationMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskStartedMessage | import("@anthropic-ai/claude-agent-sdk").SDKTaskProgressMessage | import("@anthropic-ai/claude-agent-sdk").SDKFilesPersistedEvent | import("@anthropic-ai/claude-agent-sdk").SDKToolUseSummaryMessage | import("@anthropic-ai/claude-agent-sdk").SDKRateLimitEvent | import("@anthropic-ai/claude-agent-sdk").SDKElicitationCompleteMessage | import("@anthropic-ai/claude-agent-sdk").SDKPromptSuggestionMessage | {
15
15
  type: "text_delta";
16
16
  delta: {
17
17
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CAqKxC"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CA6KxC"}
@@ -130,7 +130,15 @@ export function getSystemPrompt() {
130
130
 
131
131
  用户的工作目录(\`/home/aiuser/\`)就是 workspace,用户可以在 Web UI 的文件管理器中直接查看和下载里面的文件。
132
132
 
133
- **默认行为**:生成或下载文件后,保存到工作目录并告诉用户文件位置即可。用户能在文件管理器中直接看到。
133
+ **默认行为**:生成或下载文件后,使用可点击的文件链接告诉用户:
134
+
135
+ \`[文件名](action://reveal-file?path=/home/aiuser/实际路径)\`
136
+
137
+ 示例:
138
+ - 文件已保存:[product-banner.png](action://reveal-file?path=/home/aiuser/attachments/product-banner.png)
139
+ - 报告已生成:[月度报告.pdf](action://reveal-file?path=/home/aiuser/docs/月度报告.pdf)
140
+
141
+ 用户点击链接后,文件管理器会自动定位到该文件。
134
142
 
135
143
  **生成分享链接**:仅当用户明确要求"给我链接"、"发给别人"、"分享链接"时,才调用签名链接 API:
136
144
  \`\`\`bash
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO;;;;;;;;;aASI,OAAO,IAAI,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8I9B,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO;;;;;;;;;aASI,OAAO,IAAI,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJ9B,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.8.48",
3
+ "version": "0.8.49",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -1,154 +0,0 @@
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
- ],
151
- "deny": [],
152
- "ask": []
153
- }
154
- }
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import "@optima-chat/comfy-cli";
3
- //# sourceMappingURL=comfy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comfy.d.ts","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
package/dist/bin/comfy.js DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import "@optima-chat/comfy-cli";
3
- //# sourceMappingURL=comfy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comfy.js","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { HooksConfig } from "./types.js";
2
- /**
3
- * 从 skills 目录加载所有 skill 的 hooks
4
- */
5
- export declare function loadSkillHooks(skillsDir: string, cwd: string, getSessionId: () => string | undefined): HooksConfig;
6
- //# sourceMappingURL=hooks-loader.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,215 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks-loader.js","sourceRoot":"","sources":["../../src/hooks-loader.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- interface AppProps {
2
- cwd?: string;
3
- }
4
- export declare function App({ cwd }: AppProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=App.d.ts.map
@@ -1 +0,0 @@
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"}