superun-ai-cli 0.1.0

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 (247) hide show
  1. package/INSTALL.md +118 -0
  2. package/README.en.md +257 -0
  3. package/README.md +255 -0
  4. package/dist/api/agent-command-api.d.ts +39 -0
  5. package/dist/api/agent-command-api.js +69 -0
  6. package/dist/api/agent-command-api.js.map +1 -0
  7. package/dist/api/agent-query-api.d.ts +14 -0
  8. package/dist/api/agent-query-api.js +72 -0
  9. package/dist/api/agent-query-api.js.map +1 -0
  10. package/dist/api/config-api.d.ts +9 -0
  11. package/dist/api/config-api.js +17 -0
  12. package/dist/api/config-api.js.map +1 -0
  13. package/dist/api/conversation-api.d.ts +15 -0
  14. package/dist/api/conversation-api.js +29 -0
  15. package/dist/api/conversation-api.js.map +1 -0
  16. package/dist/api/integration-api.d.ts +9 -0
  17. package/dist/api/integration-api.js +17 -0
  18. package/dist/api/integration-api.js.map +1 -0
  19. package/dist/api/plugin-api.d.ts +9 -0
  20. package/dist/api/plugin-api.js +14 -0
  21. package/dist/api/plugin-api.js.map +1 -0
  22. package/dist/api/preview-version-api.d.ts +6 -0
  23. package/dist/api/preview-version-api.js +31 -0
  24. package/dist/api/preview-version-api.js.map +1 -0
  25. package/dist/api/publish-api.d.ts +19 -0
  26. package/dist/api/publish-api.js +17 -0
  27. package/dist/api/publish-api.js.map +1 -0
  28. package/dist/api/upload-api.d.ts +8 -0
  29. package/dist/api/upload-api.js +71 -0
  30. package/dist/api/upload-api.js.map +1 -0
  31. package/dist/auth/browser-login.d.ts +11 -0
  32. package/dist/auth/browser-login.js +77 -0
  33. package/dist/auth/browser-login.js.map +1 -0
  34. package/dist/auth/pat-store.d.ts +15 -0
  35. package/dist/auth/pat-store.js +131 -0
  36. package/dist/auth/pat-store.js.map +1 -0
  37. package/dist/auto-tools/read-logs.d.ts +3 -0
  38. package/dist/auto-tools/read-logs.js +4 -0
  39. package/dist/auto-tools/read-logs.js.map +1 -0
  40. package/dist/auto-tools/registry.d.ts +8 -0
  41. package/dist/auto-tools/registry.js +26 -0
  42. package/dist/auto-tools/registry.js.map +1 -0
  43. package/dist/cli.d.ts +2 -0
  44. package/dist/cli.js +10 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/commands/auth/index.d.ts +4 -0
  47. package/dist/commands/auth/index.js +10 -0
  48. package/dist/commands/auth/index.js.map +1 -0
  49. package/dist/commands/auth/login.d.ts +3 -0
  50. package/dist/commands/auth/login.js +23 -0
  51. package/dist/commands/auth/login.js.map +1 -0
  52. package/dist/commands/auth/logout.d.ts +4 -0
  53. package/dist/commands/auth/logout.js +15 -0
  54. package/dist/commands/auth/logout.js.map +1 -0
  55. package/dist/commands/auth/status.d.ts +4 -0
  56. package/dist/commands/auth/status.js +14 -0
  57. package/dist/commands/auth/status.js.map +1 -0
  58. package/dist/commands/chat/create.d.ts +4 -0
  59. package/dist/commands/chat/create.js +8 -0
  60. package/dist/commands/chat/create.js.map +1 -0
  61. package/dist/commands/chat/demo.d.ts +4 -0
  62. package/dist/commands/chat/demo.js +11 -0
  63. package/dist/commands/chat/demo.js.map +1 -0
  64. package/dist/commands/chat/develop.d.ts +4 -0
  65. package/dist/commands/chat/develop.js +10 -0
  66. package/dist/commands/chat/develop.js.map +1 -0
  67. package/dist/commands/chat/index.d.ts +4 -0
  68. package/dist/commands/chat/index.js +26 -0
  69. package/dist/commands/chat/index.js.map +1 -0
  70. package/dist/commands/chat/interaction.d.ts +4 -0
  71. package/dist/commands/chat/interaction.js +22 -0
  72. package/dist/commands/chat/interaction.js.map +1 -0
  73. package/dist/commands/chat/message.d.ts +6 -0
  74. package/dist/commands/chat/message.js +78 -0
  75. package/dist/commands/chat/message.js.map +1 -0
  76. package/dist/commands/chat/plugin.d.ts +4 -0
  77. package/dist/commands/chat/plugin.js +82 -0
  78. package/dist/commands/chat/plugin.js.map +1 -0
  79. package/dist/commands/chat/publish.d.ts +3 -0
  80. package/dist/commands/chat/publish.js +207 -0
  81. package/dist/commands/chat/publish.js.map +1 -0
  82. package/dist/commands/chat/send.d.ts +4 -0
  83. package/dist/commands/chat/send.js +5 -0
  84. package/dist/commands/chat/send.js.map +1 -0
  85. package/dist/commands/chat/state.d.ts +4 -0
  86. package/dist/commands/chat/state.js +26 -0
  87. package/dist/commands/chat/state.js.map +1 -0
  88. package/dist/commands/chat/stop.d.ts +4 -0
  89. package/dist/commands/chat/stop.js +16 -0
  90. package/dist/commands/chat/stop.js.map +1 -0
  91. package/dist/commands/chat/style.d.ts +4 -0
  92. package/dist/commands/chat/style.js +45 -0
  93. package/dist/commands/chat/style.js.map +1 -0
  94. package/dist/commands/chat/wait.d.ts +4 -0
  95. package/dist/commands/chat/wait.js +11 -0
  96. package/dist/commands/chat/wait.js.map +1 -0
  97. package/dist/commands/session/get.d.ts +4 -0
  98. package/dist/commands/session/get.js +15 -0
  99. package/dist/commands/session/get.js.map +1 -0
  100. package/dist/commands/session/index.d.ts +4 -0
  101. package/dist/commands/session/index.js +8 -0
  102. package/dist/commands/session/index.js.map +1 -0
  103. package/dist/commands/session/list.d.ts +4 -0
  104. package/dist/commands/session/list.js +43 -0
  105. package/dist/commands/session/list.js.map +1 -0
  106. package/dist/commands/shared.d.ts +33 -0
  107. package/dist/commands/shared.js +127 -0
  108. package/dist/commands/shared.js.map +1 -0
  109. package/dist/commands/system/update.d.ts +6 -0
  110. package/dist/commands/system/update.js +10 -0
  111. package/dist/commands/system/update.js.map +1 -0
  112. package/dist/commands/system/version.d.ts +4 -0
  113. package/dist/commands/system/version.js +8 -0
  114. package/dist/commands/system/version.js.map +1 -0
  115. package/dist/config/constants.d.ts +9 -0
  116. package/dist/config/constants.js +22 -0
  117. package/dist/config/constants.js.map +1 -0
  118. package/dist/config/runtime-config.d.ts +9 -0
  119. package/dist/config/runtime-config.js +28 -0
  120. package/dist/config/runtime-config.js.map +1 -0
  121. package/dist/contracts/cli-output.d.ts +110 -0
  122. package/dist/contracts/cli-output.js +2 -0
  123. package/dist/contracts/cli-output.js.map +1 -0
  124. package/dist/contracts/node-wire.d.ts +36381 -0
  125. package/dist/contracts/node-wire.js +102 -0
  126. package/dist/contracts/node-wire.js.map +1 -0
  127. package/dist/contracts/value.d.ts +6 -0
  128. package/dist/contracts/value.js +20 -0
  129. package/dist/contracts/value.js.map +1 -0
  130. package/dist/conversation/demo-preview.d.ts +7 -0
  131. package/dist/conversation/demo-preview.js +62 -0
  132. package/dist/conversation/demo-preview.js.map +1 -0
  133. package/dist/conversation/development-snapshot.d.ts +5 -0
  134. package/dist/conversation/development-snapshot.js +52 -0
  135. package/dist/conversation/development-snapshot.js.map +1 -0
  136. package/dist/conversation/next-actions.d.ts +4 -0
  137. package/dist/conversation/next-actions.js +199 -0
  138. package/dist/conversation/next-actions.js.map +1 -0
  139. package/dist/conversation/round-selector.d.ts +4 -0
  140. package/dist/conversation/round-selector.js +25 -0
  141. package/dist/conversation/round-selector.js.map +1 -0
  142. package/dist/conversation/session-waiter.d.ts +28 -0
  143. package/dist/conversation/session-waiter.js +176 -0
  144. package/dist/conversation/session-waiter.js.map +1 -0
  145. package/dist/conversation/state-resolver.d.ts +8 -0
  146. package/dist/conversation/state-resolver.js +90 -0
  147. package/dist/conversation/state-resolver.js.map +1 -0
  148. package/dist/conversation/text-projector.d.ts +5 -0
  149. package/dist/conversation/text-projector.js +45 -0
  150. package/dist/conversation/text-projector.js.map +1 -0
  151. package/dist/development.d.ts +1 -0
  152. package/dist/development.js +16 -0
  153. package/dist/development.js.map +1 -0
  154. package/dist/interactions/context.d.ts +23 -0
  155. package/dist/interactions/context.js +50 -0
  156. package/dist/interactions/context.js.map +1 -0
  157. package/dist/interactions/handlers/index.d.ts +2 -0
  158. package/dist/interactions/handlers/index.js +52 -0
  159. package/dist/interactions/handlers/index.js.map +1 -0
  160. package/dist/interactions/handlers/reply-ask.d.ts +2 -0
  161. package/dist/interactions/handlers/reply-ask.js +33 -0
  162. package/dist/interactions/handlers/reply-ask.js.map +1 -0
  163. package/dist/interactions/handlers/reply-ddl.d.ts +2 -0
  164. package/dist/interactions/handlers/reply-ddl.js +8 -0
  165. package/dist/interactions/handlers/reply-ddl.js.map +1 -0
  166. package/dist/interactions/handlers/reply-plugin.d.ts +3 -0
  167. package/dist/interactions/handlers/reply-plugin.js +56 -0
  168. package/dist/interactions/handlers/reply-plugin.js.map +1 -0
  169. package/dist/interactions/handlers/reply-prd.d.ts +2 -0
  170. package/dist/interactions/handlers/reply-prd.js +35 -0
  171. package/dist/interactions/handlers/reply-prd.js.map +1 -0
  172. package/dist/interactions/handlers/reply-secret.d.ts +2 -0
  173. package/dist/interactions/handlers/reply-secret.js +27 -0
  174. package/dist/interactions/handlers/reply-secret.js.map +1 -0
  175. package/dist/interactions/handlers/reply-semantic.d.ts +2 -0
  176. package/dist/interactions/handlers/reply-semantic.js +98 -0
  177. package/dist/interactions/handlers/reply-semantic.js.map +1 -0
  178. package/dist/interactions/handlers/reply-style.d.ts +2 -0
  179. package/dist/interactions/handlers/reply-style.js +9 -0
  180. package/dist/interactions/handlers/reply-style.js.map +1 -0
  181. package/dist/interactions/handlers/reply-universal-ask.d.ts +2 -0
  182. package/dist/interactions/handlers/reply-universal-ask.js +13 -0
  183. package/dist/interactions/handlers/reply-universal-ask.js.map +1 -0
  184. package/dist/interactions/handlers/types.d.ts +10 -0
  185. package/dist/interactions/handlers/types.js +2 -0
  186. package/dist/interactions/handlers/types.js.map +1 -0
  187. package/dist/interactions/interaction-id.d.ts +2 -0
  188. package/dist/interactions/interaction-id.js +15 -0
  189. package/dist/interactions/interaction-id.js.map +1 -0
  190. package/dist/interactions/parsers/ask-user-tool.d.ts +2 -0
  191. package/dist/interactions/parsers/ask-user-tool.js +14 -0
  192. package/dist/interactions/parsers/ask-user-tool.js.map +1 -0
  193. package/dist/interactions/parsers/ddl-approval.d.ts +2 -0
  194. package/dist/interactions/parsers/ddl-approval.js +12 -0
  195. package/dist/interactions/parsers/ddl-approval.js.map +1 -0
  196. package/dist/interactions/parsers/plugin-action.d.ts +2 -0
  197. package/dist/interactions/parsers/plugin-action.js +19 -0
  198. package/dist/interactions/parsers/plugin-action.js.map +1 -0
  199. package/dist/interactions/parsers/prd-clarification.d.ts +2 -0
  200. package/dist/interactions/parsers/prd-clarification.js +26 -0
  201. package/dist/interactions/parsers/prd-clarification.js.map +1 -0
  202. package/dist/interactions/parsers/secret-input.d.ts +2 -0
  203. package/dist/interactions/parsers/secret-input.js +27 -0
  204. package/dist/interactions/parsers/secret-input.js.map +1 -0
  205. package/dist/interactions/parsers/semantic-action.d.ts +4 -0
  206. package/dist/interactions/parsers/semantic-action.js +84 -0
  207. package/dist/interactions/parsers/semantic-action.js.map +1 -0
  208. package/dist/interactions/parsers/style-selection.d.ts +15 -0
  209. package/dist/interactions/parsers/style-selection.js +77 -0
  210. package/dist/interactions/parsers/style-selection.js.map +1 -0
  211. package/dist/interactions/parsers/universal-ask-user.d.ts +2 -0
  212. package/dist/interactions/parsers/universal-ask-user.js +15 -0
  213. package/dist/interactions/parsers/universal-ask-user.js.map +1 -0
  214. package/dist/interactions/questions.d.ts +46 -0
  215. package/dist/interactions/questions.js +95 -0
  216. package/dist/interactions/questions.js.map +1 -0
  217. package/dist/interactions/registry.d.ts +4 -0
  218. package/dist/interactions/registry.js +64 -0
  219. package/dist/interactions/registry.js.map +1 -0
  220. package/dist/output/exit-codes.d.ts +22 -0
  221. package/dist/output/exit-codes.js +27 -0
  222. package/dist/output/exit-codes.js.map +1 -0
  223. package/dist/output/writer.d.ts +13 -0
  224. package/dist/output/writer.js +53 -0
  225. package/dist/output/writer.js.map +1 -0
  226. package/dist/program.d.ts +9 -0
  227. package/dist/program.js +39 -0
  228. package/dist/program.js.map +1 -0
  229. package/dist/runner.d.ts +11 -0
  230. package/dist/runner.js +54 -0
  231. package/dist/runner.js.map +1 -0
  232. package/dist/runtime.d.ts +48 -0
  233. package/dist/runtime.js +404 -0
  234. package/dist/runtime.js.map +1 -0
  235. package/dist/transport/api-client.d.ts +17 -0
  236. package/dist/transport/api-client.js +37 -0
  237. package/dist/transport/api-client.js.map +1 -0
  238. package/dist/transport/http-client.d.ts +20 -0
  239. package/dist/transport/http-client.js +79 -0
  240. package/dist/transport/http-client.js.map +1 -0
  241. package/dist/update/update-lock.d.ts +1 -0
  242. package/dist/update/update-lock.js +57 -0
  243. package/dist/update/update-lock.js.map +1 -0
  244. package/dist/update/version-gate.d.ts +6 -0
  245. package/dist/update/version-gate.js +118 -0
  246. package/dist/update/version-gate.js.map +1 -0
  247. package/package.json +43 -0
@@ -0,0 +1,56 @@
1
+ /** 启用插件并在未被托管时提交工具结果。@author xiuyu.yi */
2
+ import { setTimeout as delay } from 'node:timers/promises';
3
+ import { object, requiredText, text } from '../../contracts/value.js';
4
+ import { toolData } from '../context.js';
5
+ import { CliError } from '../../output/exit-codes.js';
6
+ const ALIASES = {
7
+ SUPABASE_EMBED: ['SuperunCloud', 'Superun', 'SUPERUN_CLOUD'],
8
+ SUPERUN_AI: ['SuperunAI'],
9
+ STRIPE: ['Stripe'],
10
+ NANO_BANANA: ['NanoBanana'],
11
+ DINGTALK: ['DingTalk'],
12
+ FEISHU: ['Feishu', 'FeiShu', 'Lark', 'feishu', 'lark'],
13
+ WECOM: ['WeCom'],
14
+ CUSTOM_MINIPROGRAM: ['Miniprogram', 'MINIPROGRAM', 'WeChat Miniprogram', 'WechatMiniprogram'],
15
+ };
16
+ export function integrationKey(name) {
17
+ return (Object.entries(ALIASES).find(([key, aliases]) => key === name || aliases.includes(name))?.[0] ?? name);
18
+ }
19
+ export const replyPlugin = async ({ runtime, binding, input }) => {
20
+ const sessionId = binding.round.sessionId, toolId = requiredText(binding.interaction.source.toolId, 'toolId');
21
+ if (input.action === 'SKIP')
22
+ return runtime.command.replySingle({
23
+ sessionId,
24
+ toolId,
25
+ toolResult: JSON.stringify({ enabled: false, skipped: true, statusText: '用户已跳过插件配置' }),
26
+ });
27
+ const plugin = integrationKey(requiredText(toolData(binding.item).pluginName, 'pluginName'));
28
+ const config = object(input.config);
29
+ for (const value of Object.values(config))
30
+ if (typeof value === 'string')
31
+ runtime.output.registerSecret(value);
32
+ let result = await runtime.integration.connect(sessionId, plugin, config, toolId);
33
+ if (result.toolCallOwned === true)
34
+ return { sessionId };
35
+ const deadline = Date.now() + 1800_000;
36
+ while (['ENABLING', 'RESTORING', 'PAUSING', 'DISABLING'].includes(String(result.integrationStatus))) {
37
+ if (Date.now() >= deadline)
38
+ throw new CliError('LOCAL_WAIT_TIMEOUT', '插件仍在处理中,请查询会话状态后继续', { sessionId });
39
+ try {
40
+ await delay(2000, undefined, { signal: runtime.client.signal });
41
+ }
42
+ catch {
43
+ throw new CliError('INTERRUPTED', '已停止等待插件,远端任务继续运行', { sessionId });
44
+ }
45
+ result = await runtime.integration.status(sessionId, plugin);
46
+ }
47
+ return runtime.command.replySingle({
48
+ sessionId,
49
+ toolId,
50
+ toolResult: JSON.stringify({
51
+ enabled: result.integrationStatus === 'ENABLED',
52
+ statusText: text(result.integrationStatus) ?? 'UNKNOWN',
53
+ }),
54
+ });
55
+ };
56
+ //# sourceMappingURL=reply-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-plugin.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-plugin.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,OAAO,GAAkC;IAC7C,cAAc,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,eAAe,CAAC;IAC5D,UAAU,EAAE,CAAC,WAAW,CAAC;IACzB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,WAAW,EAAE,CAAC,YAAY,CAAC;IAC3B,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;IACtD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,kBAAkB,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;CAC9F,CAAC;AACF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,CACL,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CACtG,CAAC;AACJ,CAAC;AACD,MAAM,CAAC,MAAM,WAAW,GAAiB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EACvC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QACzB,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YACjC,SAAS;YACT,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IACvC,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YACxB,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,kBAAkB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACjC,SAAS;QACT,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC,iBAAiB,KAAK,SAAS;YAC/C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,SAAS;SACxD,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ReplyHandler } from './types.js';
2
+ export declare const replyPrd: ReplyHandler;
@@ -0,0 +1,35 @@
1
+ /** 保存需求问卷后直接生成风格。@author xiuyu.yi */
2
+ import { resolveAnswers } from '../questions.js';
3
+ import { object } from '../../contracts/value.js';
4
+ import { CliError } from '../../output/exit-codes.js';
5
+ export const replyPrd = async ({ runtime, binding, input }) => {
6
+ const { source, questions } = binding.interaction;
7
+ const sessionId = binding.round.sessionId;
8
+ const answers = resolveAnswers(questions, input.answers);
9
+ const count = input.styleCount ?? 2;
10
+ if (!Number.isInteger(count) || typeof count !== 'number' || count < 1 || count > 4)
11
+ throw new CliError('INVALID_ARGUMENT', 'styleCount 必须是 1 到 4 的整数');
12
+ const states = answers.map((answer) => ({
13
+ question: answer.question.question,
14
+ selectedIndices: answer.selectedIndices,
15
+ selectedOptions: answer.selectedOptions,
16
+ otherSelected: !!answer.otherValue,
17
+ otherValue: answer.otherValue,
18
+ }));
19
+ const name = `internal/prd_answers__${source.messageId}__${source.contentId.replace('.', '_')}.json`;
20
+ await runtime.command.saveAttachment(sessionId, name, states, binding.round.anchorUserMessageId);
21
+ await runtime.command.contentExtra({
22
+ sessionId,
23
+ messageId: source.messageId,
24
+ contentId: source.contentId,
25
+ extra: { ...object(binding.item.payload.extra), prdAnswersAttachment: name, submitPrdQuestions: '1' },
26
+ });
27
+ const content = answers
28
+ .map((answer, index) => `${index + 1}. ${answer.question.question}\n${[...answer.selectedOptions, answer.otherValue]
29
+ .filter(Boolean)
30
+ .map((value) => ` - ${value}`)
31
+ .join('\n')}`)
32
+ .join('\n');
33
+ return runtime.generateStyles(sessionId, content, count, binding.round.anchorUserMessageId);
34
+ };
35
+ //# sourceMappingURL=reply-prd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-prd.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-prd.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,CAAC,MAAM,QAAQ,GAAiB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;QACjF,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;QAClC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,yBAAyB,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC;IACrG,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QACjC,SAAS;QACT,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE;KACtG,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CACF,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAChB,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;SACzF,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC;SAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAClB;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC9F,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ReplyHandler } from './types.js';
2
+ export declare const replySecret: ReplyHandler;
@@ -0,0 +1,27 @@
1
+ /** Secret 只发送输入值,不回显、不保存到 CLI。@author xiuyu.yi */
2
+ import { object, list, requiredText } from '../../contracts/value.js';
3
+ import { CliError } from '../../output/exit-codes.js';
4
+ export const replySecret = async ({ runtime, binding, input }) => {
5
+ const sessionId = binding.round.sessionId, toolId = requiredText(binding.interaction.source.toolId, 'toolId');
6
+ if (input.action === 'SKIP')
7
+ return runtime.command.replySingle({
8
+ sessionId,
9
+ toolId,
10
+ toolResult: JSON.stringify({ enabled: false, skipped: true, statusText: '用户已跳过配置' }),
11
+ });
12
+ const values = object(input.values), allowed = new Set(list(binding.interaction.details?.keys));
13
+ if (!Object.keys(values).length)
14
+ throw new CliError('INVALID_ARGUMENT', 'values 不能为空');
15
+ for (const [key, value] of Object.entries(values)) {
16
+ if (!allowed.has(key) || typeof value !== 'string')
17
+ throw new CliError('INVALID_ARGUMENT', 'Secret 键名必须来自当前提问,值必须为字符串');
18
+ runtime.output.registerSecret(value);
19
+ }
20
+ return runtime.conversation.replySecret({
21
+ sessionId,
22
+ toolId,
23
+ extraParam: JSON.stringify(values),
24
+ content: '已确认密钥配置',
25
+ });
26
+ };
27
+ //# sourceMappingURL=reply-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-secret.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-secret.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAiB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EACvC,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QACzB,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YACjC,SAAS;YACT,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;SACrF,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EACjC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACvF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAChD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;QACtE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;QACtC,SAAS;QACT,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAClC,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ReplyHandler } from './types.js';
2
+ export declare const replySemantic: ReplyHandler;
@@ -0,0 +1,98 @@
1
+ /** Stage0、架构确认、功能选择与执行动作的请求构造。@author xiuyu.yi */
2
+ import { list, object, text, enabled } from '../../contracts/value.js';
3
+ import { visibleText } from '../../conversation/text-projector.js';
4
+ import { CliError } from '../../output/exit-codes.js';
5
+ export const replySemantic = async ({ runtime, binding, input }) => {
6
+ const sessionId = binding.round.sessionId, kind = binding.interaction.kind;
7
+ if (kind === 'ENTER_IDEATION')
8
+ return runtime.command.chat({
9
+ sessionId,
10
+ content: '[superun:handoff]',
11
+ businessParams: { business_type: 'stage0_handoff_generate' },
12
+ });
13
+ if (kind === 'APPROVE_ARCHITECTURE_PLAN')
14
+ return runtime.command.chat({
15
+ sessionId,
16
+ content: '确认研发规划',
17
+ businessParams: { business_type: 'architecture_plan_approve' },
18
+ });
19
+ const selected = list(input.featureIds);
20
+ if (selected.length && new Set(selected.map(String)).size !== selected.length)
21
+ throw new CliError('INVALID_ARGUMENT', 'featureIds 不能重复');
22
+ if (kind === 'SELECT_FEATURES') {
23
+ const features = list(binding.interaction.details?.features).map(object);
24
+ if (!selected.length ||
25
+ selected.some((id) => !features.some((feature) => String(feature.id) === String(id))))
26
+ throw new CliError('INVALID_ARGUMENT', '请选择当前列表中的功能 ID');
27
+ const chosen = features
28
+ .filter((feature) => selected.some((id) => String(feature.id) === String(id)))
29
+ .map((feature) => ({ ...feature, checked: true }));
30
+ const saved = features.map((feature) => chosen.some((item) => item.id === feature.id) ? { ...feature, checked: true } : feature);
31
+ const source = binding.interaction.source;
32
+ const name = `internal/fl__${source.messageId}.json`;
33
+ await runtime.command.saveAttachment(sessionId, name, saved, binding.round.anchorUserMessageId);
34
+ await runtime.command.messageExtra(sessionId, source.messageId, {
35
+ ...object(binding.message?.extra),
36
+ featureListMessageAttachment: name,
37
+ featureListConfirmed: '1',
38
+ });
39
+ const response = await runtime.command.chat({
40
+ sessionId,
41
+ content: `开始实现以下功能:\n${chosen.map((feature) => feature.title).join('\n')}`,
42
+ businessParams: { business_type: 'feature_manage', features: chosen },
43
+ });
44
+ const fullFeatures = binding.view.features ?? features;
45
+ await runtime.command.saveAttachment(sessionId, 'internal/features.json', fullFeatures.map((feature) => chosen.some((item) => String(item.id) === String(feature.id))
46
+ ? { ...feature, checked: true }
47
+ : feature), binding.round.anchorUserMessageId);
48
+ return response;
49
+ }
50
+ const message = binding.message;
51
+ if (!message)
52
+ throw new CliError('UNSUPPORTED_INTERACTION', '执行动作缺少源消息');
53
+ const mode = Number(message.mode ?? object(message.extra).mode);
54
+ if (mode === 11 || (mode === 6 && !enabled(message.roundExtra?.startDevelopment))) {
55
+ const content = binding.round.agentItems
56
+ .filter((item) => item.kind === 'bubble')
57
+ .map((item) => visibleText(item.payload))
58
+ .join('\n')
59
+ .replace(/<superun-action\s+type=["']start-executing["']\s*\/?>/g, '')
60
+ .trim();
61
+ if (!content)
62
+ throw new CliError('UNSUPPORTED_INTERACTION', '当前执行动作缺少可转发的内容');
63
+ return runtime.command.chat({
64
+ sessionId,
65
+ content: '立即执行',
66
+ businessParams: {
67
+ business_type: 'casual_chat',
68
+ forwarded_consultation: true,
69
+ consultation_message_count: 1,
70
+ consultation_messages: [{ role: 'system', text: content }],
71
+ },
72
+ });
73
+ }
74
+ const planBacked = mode === 10;
75
+ const planBatch = planBacked
76
+ ? (text(message.roundExtra?.plan_batch_id) ?? message.replyMessageId)
77
+ : undefined;
78
+ if (planBacked && !planBatch)
79
+ throw new CliError('UNSUPPORTED_INTERACTION', '执行动作缺少计划来源锚点');
80
+ if (!planBacked && selected.length)
81
+ throw new CliError('INVALID_ARGUMENT', '当前执行动作不接受规划功能 ID,请使用功能选择交互');
82
+ if (selected.some((id) => typeof id !== 'number' || !Number.isInteger(id) || id <= 0))
83
+ throw new CliError('INVALID_ARGUMENT', '规划功能 ID 必须为正整数');
84
+ return runtime.command.chat({
85
+ sessionId,
86
+ content: '立即执行',
87
+ ...(planBacked ? { preReplyMessageId: planBatch } : {}),
88
+ businessParams: {
89
+ business_type: 'ExitPlanMode',
90
+ ...(planBatch ? { plan_batch_id: planBatch } : {}),
91
+ ...(text(message.consultId ?? message.meta?.consultId)
92
+ ? { consultId: message.consultId ?? message.meta?.consultId }
93
+ : {}),
94
+ ...(selected.length ? { selected_feature_ids: selected } : {}),
95
+ },
96
+ });
97
+ };
98
+ //# sourceMappingURL=reply-semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-semantic.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ReplyHandler } from './types.js';
2
+ export declare const replyStyle: ReplyHandler;
@@ -0,0 +1,9 @@
1
+ /** 风格交互与 chat style select 共用同一条调用链。@author xiuyu.yi */
2
+ import { requiredText } from '../../contracts/value.js';
3
+ import { CliError } from '../../output/exit-codes.js';
4
+ export const replyStyle = ({ runtime, binding, input }) => {
5
+ if (input.action !== 'SELECT')
6
+ throw new CliError('INVALID_ARGUMENT', '风格交互仅支持选择候选');
7
+ return runtime.selectStyle(binding.round.sessionId, requiredText(input.choiceId, 'choiceId'));
8
+ };
9
+ //# sourceMappingURL=reply-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-style.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-style.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,MAAM,CAAC,MAAM,UAAU,GAAiB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ReplyHandler } from './types.js';
2
+ export declare const replyUniversalAsk: ReplyHandler;
@@ -0,0 +1,13 @@
1
+ /** Universal Ask 的回答为编号文本,继续普通 Chat。@author xiuyu.yi */
2
+ import { resolveAnswers } from '../questions.js';
3
+ export const replyUniversalAsk = async ({ runtime, binding, input }) => {
4
+ const answers = resolveAnswers(binding.interaction.questions, input.answers);
5
+ const content = answers
6
+ .map((answer, index) => `${index + 1}. ${answer.question.question}\n${[...answer.selectedOptions, answer.otherValue]
7
+ .filter(Boolean)
8
+ .map((value) => ` - ${value}`)
9
+ .join('\n')}`)
10
+ .join('\n');
11
+ return runtime.command.chat({ sessionId: binding.round.sessionId, content });
12
+ };
13
+ //# sourceMappingURL=reply-universal-ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-universal-ask.js","sourceRoot":"","sources":["../../../src/interactions/handlers/reply-universal-ask.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAiB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IACnF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CACF,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAChB,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;SACzF,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC;SAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAClB;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/E,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** 回答处理器的内部入参。@author xiuyu.yi */
2
+ import type { CreationRuntime } from '../../runtime.js';
3
+ import type { InteractionBinding } from '../context.js';
4
+ import type { JsonObject } from '../../contracts/value.js';
5
+ export type ReplyContext = {
6
+ runtime: CreationRuntime;
7
+ binding: InteractionBinding;
8
+ input: JsonObject;
9
+ };
10
+ export type ReplyHandler = (context: ReplyContext) => Promise<JsonObject>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interactions/handlers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import type { Interaction } from '../contracts/cli-output.js';
2
+ export declare function interactionId(sessionId: string, source: Interaction['source']): string;
@@ -0,0 +1,15 @@
1
+ /** 根据服务端来源生成交互标识,回复时重查。@author xiuyu.yi */
2
+ import { createHash } from 'node:crypto';
3
+ export function interactionId(sessionId, source) {
4
+ return `int_${createHash('sha256')
5
+ .update([
6
+ sessionId,
7
+ source.roundId,
8
+ source.messageId,
9
+ source.contentId,
10
+ source.variant,
11
+ source.toolId ?? '',
12
+ ].join('|'))
13
+ .digest('hex')}`;
14
+ }
15
+ //# sourceMappingURL=interaction-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-id.js","sourceRoot":"","sources":["../../src/interactions/interaction-id.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,MAA6B;IAC5E,OAAO,OAAO,UAAU,CAAC,QAAQ,CAAC;SAC/B,MAAM,CACL;QACE,SAAS;QACT,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,MAAM,IAAI,EAAE;KACpB,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ;SACA,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { InteractionParser } from '../context.js';
2
+ export declare const parseAskTool: InteractionParser;
@@ -0,0 +1,14 @@
1
+ /** Native Ask 的协议 pending 状态可跨越多个显示轮。@author xiuyu.yi */
2
+ import { bind, pendingTool, toolId } from '../context.js';
3
+ import { ANSWER_JSON_SCHEMA, projectQuestions } from '../questions.js';
4
+ export const parseAskTool = (context) => {
5
+ if (!pendingTool(context.item) || !toolId(context.item))
6
+ return undefined;
7
+ const questions = projectQuestions(context.item.payload.questions);
8
+ return bind(context, 'ASK_USER_TOOL', {
9
+ questions,
10
+ actions: questions.length ? ['SUBMIT', 'SKIP'] : ['SKIP'],
11
+ schema: ANSWER_JSON_SCHEMA,
12
+ });
13
+ };
14
+ //# sourceMappingURL=ask-user-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-user-tool.js","sourceRoot":"","sources":["../../../src/interactions/parsers/ask-user-tool.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,CAAC,MAAM,YAAY,GAAsB,CAAC,OAAO,EAAE,EAAE;IACzD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE;QACpC,SAAS;QACT,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzD,MAAM,EAAE,kBAAkB;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { InteractionParser } from '../context.js';
2
+ export declare const parseDdl: InteractionParser;
@@ -0,0 +1,12 @@
1
+ /** DDL 仅在服务端未自动同意时要求用户确认。@author xiuyu.yi */
2
+ import { bind, pendingTool, toolId } from '../context.js';
3
+ import { visibleText } from '../../conversation/text-projector.js';
4
+ export const parseDdl = (context) => {
5
+ if (!pendingTool(context.item) || !toolId(context.item) || context.item.payload.autoApprove === true)
6
+ return undefined;
7
+ return bind(context, 'DDL_CONFIRMATION', {
8
+ actions: ['APPROVE'],
9
+ details: { summary: visibleText(context.item.payload) },
10
+ });
11
+ };
12
+ //# sourceMappingURL=ddl-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl-approval.js","sourceRoot":"","sources":["../../../src/interactions/parsers/ddl-approval.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,OAAO,EAAE,EAAE;IACrD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI;QAClG,OAAO,SAAS,CAAC;IACnB,OAAO,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;QACvC,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;KACxD,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { InteractionParser } from '../context.js';
2
+ export declare const parsePlugin: InteractionParser;
@@ -0,0 +1,19 @@
1
+ /** 插件操作提示保留业务字段,连接密钥不返回。@author xiuyu.yi */
2
+ import { text } from '../../contracts/value.js';
3
+ import { bind, pendingTool, toolData, toolId } from '../context.js';
4
+ export const parsePlugin = (context) => {
5
+ if (!pendingTool(context.item) || !toolId(context.item))
6
+ return undefined;
7
+ const data = toolData(context.item);
8
+ return bind(context, 'PLUGIN_ACTION', {
9
+ actions: ['ENABLE', 'SKIP'],
10
+ details: { pluginName: text(data.pluginName), mode: text(data.mode), statusText: text(data.statusText) },
11
+ schema: {
12
+ type: 'object',
13
+ properties: { action: { enum: ['ENABLE', 'SKIP'] }, config: { type: 'object' } },
14
+ required: ['action'],
15
+ additionalProperties: false,
16
+ },
17
+ });
18
+ };
19
+ //# sourceMappingURL=plugin-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-action.js","sourceRoot":"","sources":["../../../src/interactions/parsers/plugin-action.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGpE,MAAM,CAAC,MAAM,WAAW,GAAsB,CAAC,OAAO,EAAE,EAAE;IACxD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE;QACpC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QACxG,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAChF,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { InteractionParser } from '../context.js';
2
+ export declare const parsePrd: InteractionParser;
@@ -0,0 +1,26 @@
1
+ /** 需求澄清卡片。@author xiuyu.yi */
2
+ import { object } from '../../contracts/value.js';
3
+ import { bind, toolData } from '../context.js';
4
+ import { ANSWER_JSON_SCHEMA, projectQuestions } from '../questions.js';
5
+ export const parsePrd = (context) => {
6
+ if (!context.current || object(context.item.payload.extra).submitPrdQuestions)
7
+ return undefined;
8
+ if (context.round.status !== 'completed')
9
+ return undefined;
10
+ const questions = projectQuestions(object(toolData(context.item).toolParams).questions).map((question) => ({
11
+ ...question,
12
+ multiSelect: true,
13
+ }));
14
+ return bind(context, 'PRD_CLARIFICATION', {
15
+ questions,
16
+ actions: ['GENERATE_STYLES'],
17
+ schema: {
18
+ ...ANSWER_JSON_SCHEMA,
19
+ properties: {
20
+ ...ANSWER_JSON_SCHEMA.properties,
21
+ action: { type: 'string', enum: ['GENERATE_STYLES'], default: 'GENERATE_STYLES' },
22
+ },
23
+ },
24
+ });
25
+ };
26
+ //# sourceMappingURL=prd-clarification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-clarification.js","sourceRoot":"","sources":["../../../src/interactions/parsers/prd-clarification.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,OAAO,EAAE,EAAE;IACrD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAChG,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzG,GAAG,QAAQ;QACX,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE;QACxC,SAAS;QACT,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,MAAM,EAAE;YACN,GAAG,kBAAkB;YACrB,UAAU,EAAE;gBACV,GAAG,kBAAkB,CAAC,UAAU;gBAChC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE;aAClF;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { InteractionParser } from '../context.js';
2
+ export declare const parseSecret: InteractionParser;
@@ -0,0 +1,27 @@
1
+ /** Secret 卡片只输出键名与说明。@author xiuyu.yi */
2
+ import { list, object, text } from '../../contracts/value.js';
3
+ import { bind, pendingTool, toolData, toolId } from '../context.js';
4
+ export const parseSecret = (context) => {
5
+ if (!pendingTool(context.item) || !toolId(context.item))
6
+ return undefined;
7
+ const data = toolData(context.item);
8
+ const keys = [...list(data.envs), ...list(data.secretKeys)]
9
+ .map((item) => {
10
+ const value = object(item), name = text(value.name);
11
+ return (text(item) ??
12
+ text(value.key) ??
13
+ (name ? `${text(value.prefix) ? `${String(value.prefix)}_` : ''}${name}` : undefined));
14
+ })
15
+ .filter((key) => !!key);
16
+ return bind(context, context.item.variant === 'tool_plugin_secrets_create' ? 'PLUGIN_SECRET_INPUT' : 'SECRET_INPUT', {
17
+ actions: ['SUBMIT', 'SKIP'],
18
+ details: { keys: [...new Set(keys)], pluginName: text(data.pluginName) },
19
+ schema: {
20
+ type: 'object',
21
+ properties: { values: { type: 'object', additionalProperties: { type: 'string' } } },
22
+ required: ['values'],
23
+ additionalProperties: false,
24
+ },
25
+ });
26
+ };
27
+ //# sourceMappingURL=secret-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-input.js","sourceRoot":"","sources":["../../../src/interactions/parsers/secret-input.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGpE,MAAM,CAAC,MAAM,WAAW,GAAsB,CAAC,OAAO,EAAE,EAAE;IACxD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CACL,IAAI,CAAC,IAAI,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACf,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CACtF,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,IAAI,CACT,OAAO,EACP,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,4BAA4B,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,EAC9F;QACE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QACxE,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACpF,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,oBAAoB,EAAE,KAAK;SAC5B;KACF,CACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 由当前轮服务端标记推导 Stage0 与规划交互。@author xiuyu.yi */
2
+ import type { SessionView, NodeRound, NodeMessage } from '../../contracts/node-wire.js';
3
+ import type { InteractionBinding } from '../context.js';
4
+ export declare function semanticInteraction(view: SessionView, round?: NodeRound, message?: NodeMessage): InteractionBinding | undefined;
@@ -0,0 +1,84 @@
1
+ import { object, text, enabled } from '../../contracts/value.js';
2
+ import { bind } from '../context.js';
3
+ import { visibleText } from '../../conversation/text-projector.js';
4
+ export function semanticInteraction(view, round, message) {
5
+ if (!round || !message)
6
+ return undefined;
7
+ const retryHandoff = view.extra.agentRuntime === 'shire' &&
8
+ message.roundExtra?.business_type === 'stage0_handoff_generate' &&
9
+ message.roundExtra?.stage0_handoff_status === 'failed' &&
10
+ [3, -1].includes(view.session.status);
11
+ if (!retryHandoff && (round.status !== 'completed' || view.session.status !== 3))
12
+ return undefined;
13
+ const extra = message.roundExtra ?? {};
14
+ let variant;
15
+ let kind;
16
+ if (view.extra.agentRuntime === 'shire') {
17
+ if (extra.business_type === 'stage0_handoff_generate' && extra.stage0_handoff_status !== 'failed')
18
+ return undefined;
19
+ variant = 'stage0_handoff';
20
+ kind = 'ENTER_IDEATION';
21
+ }
22
+ else if (Number(view.extra.version) >= 6 &&
23
+ enabled(extra.startDevelopment) &&
24
+ !enabled(extra.architecturePlanApproved)) {
25
+ variant = 'architecture_plan_approve';
26
+ kind = 'APPROVE_ARCHITECTURE_PLAN';
27
+ }
28
+ else if (round.agentItems.some((item) => /<superun-action\s+type=["']start-executing["']/.test(visibleText(item.payload)))) {
29
+ variant = 'start_execution';
30
+ kind = 'START_EXECUTION';
31
+ }
32
+ else if (view.features?.some((feature) => !feature.checked && feature.id !== undefined)) {
33
+ variant = 'select_features';
34
+ kind = 'SELECT_FEATURES';
35
+ }
36
+ if (!variant || !kind)
37
+ return undefined;
38
+ const item = {
39
+ id: `${round.roundId}:${variant}`,
40
+ kind: 'card',
41
+ variant,
42
+ source: { messageId: message.messageId, contentId: variant },
43
+ payload: {},
44
+ };
45
+ const details = kind === 'SELECT_FEATURES'
46
+ ? {
47
+ features: view.features
48
+ ?.filter((feature) => !feature.checked && feature.id !== undefined)
49
+ .map((feature) => ({
50
+ id: feature.id,
51
+ title: feature.title,
52
+ description: feature.description,
53
+ checked: false,
54
+ })),
55
+ }
56
+ : kind === 'START_EXECUTION'
57
+ ? { planBatchId: text(extra.plan_batch_id), mode: object(message.extra).mode }
58
+ : retryHandoff
59
+ ? { retry: true }
60
+ : undefined;
61
+ const actions = [
62
+ kind === 'ENTER_IDEATION'
63
+ ? 'ENTER'
64
+ : kind === 'START_EXECUTION'
65
+ ? 'EXECUTE'
66
+ : kind === 'SELECT_FEATURES'
67
+ ? 'SELECT'
68
+ : 'APPROVE',
69
+ ];
70
+ return bind({ item, round, view, current: true, message }, kind, {
71
+ actions,
72
+ details,
73
+ schema: {
74
+ type: 'object',
75
+ properties: {
76
+ action: { enum: actions },
77
+ featureIds: { type: 'array', items: { type: ['string', 'integer'] }, uniqueItems: true },
78
+ },
79
+ required: kind === 'SELECT_FEATURES' ? ['action', 'featureIds'] : ['action'],
80
+ additionalProperties: false,
81
+ },
82
+ });
83
+ }
84
+ //# sourceMappingURL=semantic-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-action.js","sourceRoot":"","sources":["../../../src/interactions/parsers/semantic-action.ts"],"names":[],"mappings":"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"}