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,82 @@
1
+ import { runtime, readInput, withWait, waitOptions, pollOperation, businessWrite } from '../shared.js';
2
+ import { integrationKey } from '../../interactions/handlers/reply-plugin.js';
3
+ import { object, requiredText, text } from '../../contracts/value.js';
4
+ import { CliError } from '../../output/exit-codes.js';
5
+ const ACTIVE = new Set(['ENABLING', 'RESTORING', 'DISABLING', 'PAUSING']);
6
+ export function registerPlugin(chat, context) {
7
+ const plugin = chat.command('plugin').description('查询、启用和禁用插件');
8
+ plugin
9
+ .command('list <sessionId>')
10
+ .description('查询可用插件')
11
+ .action(async (sessionId, _options, command) => {
12
+ const service = await runtime(context, command);
13
+ context.output.write({ state: 'COMPLETED', sessionId, ...(await service.plugin.list(sessionId)) });
14
+ });
15
+ plugin
16
+ .command('status <sessionId> <pluginId>')
17
+ .description('查询插件状态')
18
+ .action(async (sessionId, pluginId, _options, command) => {
19
+ const service = await runtime(context, command);
20
+ context.output.write({
21
+ state: 'COMPLETED',
22
+ sessionId,
23
+ plugin: await service.plugin.operate('status', sessionId, pluginId),
24
+ });
25
+ });
26
+ for (const action of ['enable', 'disable']) {
27
+ const command = withWait(plugin
28
+ .command(`${action} <sessionId> <pluginId>`)
29
+ .description(action === 'enable' ? '启用插件' : '禁用插件'));
30
+ if (action === 'enable')
31
+ command.option('--input <file>', '插件配置 JSON 文件');
32
+ command.action(async (sessionId, pluginId, _options, current) => {
33
+ const service = await runtime(context, current), options = object(current.opts());
34
+ let result = await service.plugin.operate('status', sessionId, pluginId);
35
+ const completed = action === 'enable'
36
+ ? result.state === 'ENABLED'
37
+ : ['NOT_ENABLED', 'DISABLED', 'PAUSED'].includes(String(result.state));
38
+ if (!completed) {
39
+ result = object(await businessWrite(context, service, sessionId, async () => {
40
+ if (action === 'enable' && options.input) {
41
+ const config = await readInput(requiredText(options.input, 'input'));
42
+ for (const value of Object.values(config))
43
+ if (typeof value === 'string')
44
+ context.output.registerSecret(value);
45
+ const response = await service.integration.connect(sessionId, integrationKey(pluginId), config);
46
+ return { pluginId, state: response.integrationStatus };
47
+ }
48
+ return service.plugin.operate(action, sessionId, pluginId);
49
+ }));
50
+ }
51
+ let waitTimedOut = false;
52
+ if (options.wait !== false && ACTIVE.has(String(result.state))) {
53
+ try {
54
+ result = await pollOperation(() => service.plugin.operate('status', sessionId, pluginId), (value) => !ACTIVE.has(String(value.state)), { ...waitOptions(current), signal: context.signal });
55
+ }
56
+ catch (error) {
57
+ if (!(error instanceof CliError) || error.code !== 'LOCAL_WAIT_TIMEOUT')
58
+ throw error;
59
+ waitTimedOut = true;
60
+ result = await service.plugin.operate('status', sessionId, pluginId);
61
+ }
62
+ }
63
+ const pending = ACTIVE.has(String(result.state));
64
+ const success = action === 'enable'
65
+ ? result.state === 'ENABLED'
66
+ : ['NOT_ENABLED', 'DISABLED', 'PAUSED'].includes(String(result.state));
67
+ if (!pending && !success)
68
+ throw new CliError('BUSINESS_ERROR', '插件操作未达到目标状态', {
69
+ sessionId,
70
+ pluginId,
71
+ state: text(result.state),
72
+ });
73
+ context.output.write({
74
+ state: pending ? 'RUNNING' : 'COMPLETED',
75
+ sessionId,
76
+ plugin: result,
77
+ ...(waitTimedOut ? { waitTimedOut } : {}),
78
+ });
79
+ });
80
+ }
81
+ }
82
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/commands/chat/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandContext } from '../shared.js';
3
+ export declare function registerPublish(chat: Command, context: CommandContext): void;
@@ -0,0 +1,207 @@
1
+ /** 发布按目标版本与更新时间跟踪结果。@author xiuyu.yi */
2
+ import { Option } from 'commander';
3
+ import { list, object, text } from '../../contracts/value.js';
4
+ import { CliError } from '../../output/exit-codes.js';
5
+ import { runtime, withWait, waitOptions, pollOperation, businessWrite } from '../shared.js';
6
+ import { COMMAND_NAME } from '../../config/constants.js';
7
+ function versions(value) {
8
+ return [
9
+ ...(value.unPublishedVersion ? [object(value.unPublishedVersion)] : []),
10
+ ...list(value.publishedVersions).map(object),
11
+ ];
12
+ }
13
+ function projectPublish(value, encryptedId) {
14
+ return {
15
+ targetRegion: value.targetRegion,
16
+ deploymentNode: value.deploymentNode,
17
+ publishUrl: value.publishUrl,
18
+ versions: versions(value)
19
+ .filter((item) => !encryptedId || item.encryptedId === encryptedId)
20
+ .map((item) => ({
21
+ encryptedId: item.encryptedId,
22
+ updatedAt: item.updatedAt,
23
+ deployStatus: item.deployStatus,
24
+ errorMessage: item.errorMessage,
25
+ deploymentSteps: item.deploymentSteps,
26
+ changeLog: item.changeLog,
27
+ changeLogSummary: item.changeLogSummary,
28
+ websiteIntroduction: item.websiteIntroduction,
29
+ })),
30
+ };
31
+ }
32
+ function publishActions(service, sessionId, value, publicStatus, encryptedId, forLaunch = false, showCompletedGuidance = true) {
33
+ const command = [
34
+ COMMAND_NAME,
35
+ '--endpoint',
36
+ service.client.config.endpoint,
37
+ '--locale',
38
+ service.client.config.locale,
39
+ 'chat',
40
+ 'publish',
41
+ ];
42
+ const records = versions(value);
43
+ const pending = records.find((item) => (!encryptedId || item.encryptedId === encryptedId) && item.deployStatus === 2);
44
+ if (pending)
45
+ return [
46
+ {
47
+ action: 'QUERY_PUBLISH',
48
+ instruction: '发布正在进行,继续查询该版本结果,不要重复提交发布。',
49
+ requiresUserInput: false,
50
+ command: [
51
+ ...command,
52
+ 'status',
53
+ ...(forLaunch ? ['--for-launch'] : []),
54
+ '--version-id',
55
+ String(pending.encryptedId),
56
+ '--',
57
+ sessionId,
58
+ ],
59
+ },
60
+ ];
61
+ const candidate = encryptedId
62
+ ? records.find((item) => item.encryptedId === encryptedId)
63
+ : object(value.unPublishedVersion);
64
+ const target = text(candidate?.encryptedId);
65
+ if (target && candidate?.deployStatus !== 1)
66
+ return [
67
+ {
68
+ action: 'PUBLISH_VERSION',
69
+ instruction: forLaunch
70
+ ? '用户已明确要求上线运营。原样展示目标版本的 changeLog 作为发布进度说明,与 Glow 发布卡片保持一致;不要改写、概括或用 changeLogSummary 替代,缺少日志时如实说明。直接执行本版本发布并等待完成,不再询问是否确认发布;完成后展示 publishUrl。'
71
+ : '只展示目标版本的 changeLog 原文和发布状态;用户明确要求发布或上线运营后执行发布命令,不把查询状态视为发布授权。',
72
+ requiresUserInput: !forLaunch,
73
+ command: [...command, 'start', ...(forLaunch ? ['--for-launch'] : []), '--', sessionId, target],
74
+ },
75
+ ];
76
+ if (records.some((item) => item.deployStatus === 1) && publicStatus === 0)
77
+ return [
78
+ {
79
+ action: 'MAKE_PUBLIC',
80
+ instruction: forLaunch
81
+ ? '部署已完成,继续按用户的上线运营要求将站点公开,不再重复确认;完成后展示 publishUrl。'
82
+ : '部署已完成,但站点尚未公开;用户明确要求对外上线后执行此命令。',
83
+ requiresUserInput: !forLaunch,
84
+ command: [...command, 'visibility', '--', sessionId, 'public'],
85
+ },
86
+ ];
87
+ if (showCompletedGuidance &&
88
+ publicStatus === 1 &&
89
+ records.some((item) => (!encryptedId || item.encryptedId === encryptedId) && item.deployStatus === 1))
90
+ return [
91
+ {
92
+ action: 'CONTINUE_CHAT',
93
+ instruction: '展示发布成功结果、目标版本的 changeLog 原文和 publishUrl 可点击链接;未指定版本时使用 updatedAt 最新的已发布版本。最后另起一行原样展示:\n**继续创作**:直接告诉我想新增或调整的内容。\n等待用户响应;收到新的创作要求后,将用户原文不经改写或扩充地放入 content,通过 --input - 提交 JSON,不自动追加需求或重复发布。',
94
+ requiresUserInput: true,
95
+ command: [...command.slice(0, -1), 'send', '--input', '-', '--', sessionId],
96
+ },
97
+ ];
98
+ return [];
99
+ }
100
+ async function publishResult(service, sessionId, value, encryptedId, waitTimedOut = false, forLaunch = false) {
101
+ const { session } = await service.conversation.recently(sessionId);
102
+ const running = versions(value).some((item) => (!encryptedId || item.encryptedId === encryptedId) && item.deployStatus === 2);
103
+ return {
104
+ state: running || waitTimedOut ? 'RUNNING' : 'COMPLETED',
105
+ sessionId,
106
+ publish: { ...projectPublish(value, encryptedId), publicStatus: session.publicStatus },
107
+ ...(waitTimedOut ? { waitTimedOut } : {}),
108
+ nextActions: publishActions(service, sessionId, value, session.publicStatus, encryptedId, forLaunch, !waitTimedOut),
109
+ };
110
+ }
111
+ export function registerPublish(chat, context) {
112
+ const publish = chat.command('publish').description('发布应用和管理站点状态');
113
+ publish
114
+ .command('status <sessionId>')
115
+ .description('查询发布版本与部署进度')
116
+ .option('--version-id <encryptedId>', '只查询指定版本')
117
+ .option('--for-launch', '用户已明确要求上线运营,返回直接发布的后续动作;本命令仍只读')
118
+ .action(async (sessionId, _options, command) => {
119
+ const service = await runtime(context, command), value = await service.publish.status(sessionId), options = object(command.opts());
120
+ context.output.write(await publishResult(service, sessionId, value, text(options.versionId), false, options.forLaunch === true));
121
+ });
122
+ withWait(publish
123
+ .command('start <sessionId> <encryptedId>')
124
+ .description('发布指定版本')
125
+ .option('--for-launch', '继续已授权的上线运营流程,部署后引导公开站点')
126
+ .addOption(new Option('--region <region>', '部署区域').choices(['CN', 'INTL']))
127
+ .addOption(new Option('--indexing <policy>', '搜索引擎索引策略;不代表访问权限').choices(['allow', 'deny']))
128
+ .option('--acknowledge-cloud-fee', '确认服务端提示的云服务费用')).action(async (sessionId, encryptedId, _options, command) => {
129
+ const service = await runtime(context, command), options = object(command.opts());
130
+ const before = versions(await service.publish.status(sessionId)).find((item) => item.encryptedId === encryptedId);
131
+ if (!before)
132
+ throw new CliError('INVALID_ARGUMENT', '该版本不在当前项目的可发布记录中');
133
+ if (before.deployStatus === 2)
134
+ throw new CliError('INVALID_ARGUMENT', '该版本正在发布,请查询进度');
135
+ await businessWrite(context, service, sessionId, async () => {
136
+ const response = await service.publish.start({
137
+ sessionId,
138
+ encryptedId,
139
+ changeLog: text(before.changeLog),
140
+ changeLogSummary: text(before.changeLogSummary),
141
+ websiteIntroduction: text(before.websiteIntroduction),
142
+ targetRegion: text(options.region),
143
+ ...(options.indexing ? { noIndex: options.indexing === 'deny' } : {}),
144
+ ...(options.acknowledgeCloudFee ? { acknowledgedCloudServiceFee: true } : {}),
145
+ });
146
+ try {
147
+ await service.command.sessionExtra(sessionId, { hasViewedLaunch: '1' });
148
+ }
149
+ catch {
150
+ throw new CliError('OUTCOME_UNKNOWN', '发布已提交,但发布阶段标记同步未确认;请查询发布进度,勿重复提交', {
151
+ sessionId,
152
+ encryptedId,
153
+ phase: 'PUBLISH_STAGE_SYNC',
154
+ retryable: false,
155
+ });
156
+ }
157
+ return response;
158
+ });
159
+ if (options.wait === false) {
160
+ context.output.write({
161
+ state: 'ACCEPTED',
162
+ sessionId,
163
+ publish: { encryptedId },
164
+ nextActions: publishActions(service, sessionId, { publishedVersions: [{ encryptedId, deployStatus: 2 }] }, undefined, encryptedId, options.forLaunch === true),
165
+ });
166
+ return;
167
+ }
168
+ let observed = {}, waitTimedOut = false;
169
+ try {
170
+ observed = await pollOperation(() => service.publish.status(sessionId), (value) => {
171
+ const record = versions(value).find((item) => item.encryptedId === encryptedId);
172
+ return (!!record && Number(record.updatedAt) > Number(before.updatedAt ?? 0) && record.deployStatus !== 2);
173
+ }, { ...waitOptions(command), signal: context.signal });
174
+ }
175
+ catch (error) {
176
+ if (!(error instanceof CliError) || error.code !== 'LOCAL_WAIT_TIMEOUT')
177
+ throw error;
178
+ waitTimedOut = true;
179
+ observed = await service.publish.status(sessionId);
180
+ }
181
+ const record = versions(observed).find((item) => item.encryptedId === encryptedId);
182
+ if (!waitTimedOut && record?.deployStatus !== 1)
183
+ throw new CliError('BUSINESS_ERROR', text(record?.errorMessage) ?? '发布失败', {
184
+ sessionId,
185
+ encryptedId,
186
+ publish: projectPublish(observed, encryptedId),
187
+ });
188
+ context.output.write(await publishResult(service, sessionId, observed, encryptedId, waitTimedOut, options.forLaunch === true));
189
+ });
190
+ publish
191
+ .command('visibility <sessionId> <visibility>')
192
+ .description('设置站点上线或下线状态')
193
+ .action(async (sessionId, visibility, _options, command) => {
194
+ if (!['public', 'private'].includes(visibility))
195
+ throw new CliError('INVALID_ARGUMENT', 'visibility 必须为 public 或 private');
196
+ const service = await runtime(context, command);
197
+ if (visibility === 'public' &&
198
+ !versions(await service.publish.status(sessionId)).some((item) => item.deployStatus === 1))
199
+ throw new CliError('INVALID_ARGUMENT', '请先成功部署一个版本再上线');
200
+ await businessWrite(context, service, sessionId, () => service.publish.visibility(sessionId, visibility === 'public'));
201
+ context.output.write({
202
+ ...(await publishResult(service, sessionId, await service.publish.status(sessionId))),
203
+ visibility,
204
+ });
205
+ });
206
+ }
207
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/chat/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** 继续项目创作。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerSend(chat: Command, context: CommandContext): void;
@@ -0,0 +1,5 @@
1
+ import { messageOptions, sendMessage } from './message.js';
2
+ export function registerSend(chat, context) {
3
+ messageOptions(chat.command('send <sessionId>').description('继续项目创作')).action(async (sessionId, _options, command) => sendMessage(context, sessionId, command));
4
+ }
5
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/chat/send.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAC3E,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CAC/D,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAC3C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 查询当前任务和交互。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerState(chat: Command, context: CommandContext): void;
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { object } from '../../contracts/value.js';
3
+ import { applySnapshot } from '../../conversation/session-waiter.js';
4
+ import { runtime } from '../shared.js';
5
+ import { appendValue } from './message.js';
6
+ export function registerState(chat, context) {
7
+ chat
8
+ .command('state <sessionId>')
9
+ .description('查询当前任务和交互')
10
+ .option('--message-id <messageId>', '刷新指定消息快照')
11
+ .option('--include-file <name>', '包含指定可见附件正文,可重复使用', appendValue, [])
12
+ .action(async (sessionId, _options, command) => {
13
+ const service = await runtime(context, command), options = object(command.opts());
14
+ let view = await service.load(sessionId);
15
+ if (typeof options.messageId === 'string') {
16
+ const snapshot = await service.conversation.snapshot(sessionId, options.messageId);
17
+ if (snapshot.pipeline)
18
+ view = applySnapshot(view, snapshot.pipeline);
19
+ }
20
+ const result = await service.inspect(view), names = z.array(z.string()).parse(options.includeFile);
21
+ if (names.length)
22
+ result.attachments = await service.query.attachments(sessionId, names);
23
+ context.output.write(service.withGuidance(result));
24
+ });
25
+ }
26
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/commands/chat/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,IAAI;SACD,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,0BAA0B,EAAE,UAAU,CAAC;SAC9C,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,QAAQ;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EACxC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 停止远端任务。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerStop(chat: Command, context: CommandContext): void;
@@ -0,0 +1,16 @@
1
+ import { Option } from 'commander';
2
+ import { object, text } from '../../contracts/value.js';
3
+ import { runtime, businessWrite } from '../shared.js';
4
+ export function registerStop(chat, context) {
5
+ chat
6
+ .command('stop <sessionId>')
7
+ .description('停止远端任务')
8
+ .option('--message-id <messageId>', '指定任务消息')
9
+ .addOption(new Option('--scope <scope>', '停止范围').choices(['own', 'all']).default('own'))
10
+ .action(async (sessionId, _options, command) => {
11
+ const service = await runtime(context, command), options = object(command.opts());
12
+ await businessWrite(context, service, sessionId, () => service.command.stop(sessionId, options.scope === 'all' ? 'all' : 'own', text(options.messageId)));
13
+ context.output.write({ state: 'COMPLETED', sessionId });
14
+ });
15
+ }
16
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/chat/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,0BAA0B,EAAE,QAAQ,CAAC;SAC5C,SAAS,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACpD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAClG,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 创作流程中的风格生成、查询与选择。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerStyle(chat: Command, context: CommandContext): void;
@@ -0,0 +1,45 @@
1
+ import { object, requiredText, text } from '../../contracts/value.js';
2
+ import { CliError } from '../../output/exit-codes.js';
3
+ import { runtime, positive, withWait, waitOptions, businessWrite } from '../shared.js';
4
+ import { latestStyleChoices, styleBatchState, styleBranchAnchor, } from '../../interactions/parsers/style-selection.js';
5
+ export function registerStyle(chat, context) {
6
+ const style = chat.command('style').description('管理创作风格');
7
+ withWait(style
8
+ .command('generate <sessionId>')
9
+ .description('生成风格候选')
10
+ .requiredOption('--content <text>', '风格需求')
11
+ .option('--count <count>', '候选数量,1~4', positive, 2)).action(async (sessionId, _options, command) => {
12
+ const service = await runtime(context, command), options = object(command.opts());
13
+ const count = Number(options.count);
14
+ if (count > 4)
15
+ throw new CliError('INVALID_ARGUMENT', '最多生成 4 个风格');
16
+ const response = await businessWrite(context, service, sessionId, () => service.generateStyles(sessionId, requiredText(options.content, 'content'), count));
17
+ context.output.write(await service.accepted(object(response), sessionId, options.wait !== false, waitOptions(command)));
18
+ });
19
+ style
20
+ .command('list <sessionId>')
21
+ .description('查询全部风格批次')
22
+ .option('--anchor <preReplyMessageId>', '分支查询锚点')
23
+ .action(async (sessionId, _options, command) => {
24
+ const service = await runtime(context, command), view = await service.load(sessionId), currentAnchor = styleBranchAnchor(view), anchor = text(object(command.opts()).anchor) ?? currentAnchor, choices = await service.choices(sessionId, anchor, view);
25
+ const result = service.withGuidance({
26
+ state: choices.length ? styleBatchState(latestStyleChoices(choices)) : 'COMPLETED',
27
+ sessionId,
28
+ choices,
29
+ cursor: { branchAnchor: anchor },
30
+ });
31
+ context.output.write({
32
+ state: result.state,
33
+ sessionId,
34
+ choices,
35
+ // 历史批次只供查看;选择命令仅接受当前未决批次。
36
+ nextActions: anchor === currentAnchor ? result.nextActions : [],
37
+ });
38
+ });
39
+ withWait(style.command('select <sessionId> <choiceId>').description('选择已完成的风格')).action(async (sessionId, choiceId, _options, command) => {
40
+ const service = await runtime(context, command);
41
+ const response = await businessWrite(context, service, sessionId, () => service.selectStyle(sessionId, choiceId));
42
+ context.output.write(await service.accepted(object(response), sessionId, object(command.opts()).wait !== false, waitOptions(command)));
43
+ });
44
+ }
45
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/commands/chat/style.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,+CAA+C,CAAC;AAEvD,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1D,QAAQ,CACN,KAAK;SACF,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,QAAQ,CAAC;SACrB,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC;SAC1C,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CACtD,CAAC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACrE,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CACnF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAClG,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,KAAK;SACF,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,UAAU,CAAC;SACvB,MAAM,CAAC,8BAA8B,EAAE,QAAQ,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EACpC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,EACvC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,aAAa,EAC7D,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;YAClF,SAAS;YACT,OAAO;YACP,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS;YACT,OAAO;YACP,0BAA0B;YAC1B,WAAW,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;SAChE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACL,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CACrF,KAAK,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACrE,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CACzC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,OAAO,CAAC,QAAQ,CACpB,MAAM,CAAC,QAAQ,CAAC,EAChB,SAAS,EACT,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,EACrC,WAAW,CAAC,OAAO,CAAC,CACrB,CACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 等待当前交互或任务结果。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerWait(chat: Command, context: CommandContext): void;
@@ -0,0 +1,11 @@
1
+ import { runtime, positive, waitOptions } from '../shared.js';
2
+ export function registerWait(chat, context) {
3
+ chat
4
+ .command('wait <sessionId>')
5
+ .description('等待当前交互或任务结果')
6
+ .option('--message-id <messageId>', '起始消息 ID')
7
+ .option('--timeout <seconds>', '本地等待上限;不传则持续等待', positive)
8
+ .option('--interval <seconds>', '轮询最小间隔', positive)
9
+ .action(async (sessionId, _options, command) => context.output.write(await (await runtime(context, command)).wait(sessionId, waitOptions(command))));
10
+ }
11
+ //# sourceMappingURL=wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/chat/wait.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,0BAA0B,EAAE,SAAS,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CACpG,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 查询项目详情。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerGet(session: Command, context: CommandContext): void;
@@ -0,0 +1,15 @@
1
+ import { object } from '../../contracts/value.js';
2
+ import { runtime } from '../shared.js';
3
+ export function registerGet(session, context) {
4
+ session
5
+ .command('get <sessionId>')
6
+ .description('查询项目详情')
7
+ .option('--include-attachments', '包含可见附件清单')
8
+ .action(async (sessionId, _options, command) => {
9
+ const service = await runtime(context, command), result = await service.state(sessionId);
10
+ if (object(command.opts()).includeAttachments)
11
+ result.attachments = await service.query.attachments(sessionId);
12
+ context.output.write(result);
13
+ });
14
+ }
15
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/session/get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,OAAuB;IACnE,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,uBAAuB,EAAE,UAAU,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,kBAAkB;YAC3C,MAAM,CAAC,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 查询项目。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerSession(program: Command, context: CommandContext): void;
@@ -0,0 +1,8 @@
1
+ import { registerList } from './list.js';
2
+ import { registerGet } from './get.js';
3
+ export function registerSession(program, context) {
4
+ const session = program.command('session').description('查询项目');
5
+ registerList(session, context);
6
+ registerGet(session, context);
7
+ }
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/session/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,OAAuB;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** 查询项目列表。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerList(session: Command, context: CommandContext): void;
@@ -0,0 +1,43 @@
1
+ import { Option } from 'commander';
2
+ import { list, object } from '../../contracts/value.js';
3
+ import { runtime, positive } from '../shared.js';
4
+ export function registerList(session, context) {
5
+ session
6
+ .command('list')
7
+ .description('查询项目列表')
8
+ .option('--limit <count>', '每页数量', positive, 20)
9
+ .option('--keyword <text>', '按项目名或 ID 筛选')
10
+ .addOption(new Option('--scope <scope>', '项目范围').choices(['all', 'mine', 'team', 'shared']).default('all'))
11
+ .option('--cursor-updated-at <timestamp>', '上一页更新时间游标', positive)
12
+ .option('--id-lt <id>', '上一页 ID 游标', positive)
13
+ .action(async (_options, command) => {
14
+ const service = await runtime(context, command), options = object(command.opts());
15
+ const page = await service.query.sessions({
16
+ pageSize: options.limit,
17
+ keyword: options.keyword,
18
+ scopes: [options.scope],
19
+ cursorUpdatedAt: options.cursorUpdatedAt,
20
+ idLT: options.idLt,
21
+ });
22
+ const items = list(page.items ?? page.list ?? page.data)
23
+ .map(object)
24
+ .map((item) => ({
25
+ sessionId: item.sessionId,
26
+ topic: item.topic,
27
+ status: item.status,
28
+ updatedAt: item.updatedAt,
29
+ id: item.id,
30
+ workspaceId: item.workspaceId,
31
+ }));
32
+ context.output.write({
33
+ state: 'COMPLETED',
34
+ items,
35
+ total: page.totalCount,
36
+ hasMore: page.hasMore,
37
+ cursor: items.length
38
+ ? { cursorUpdatedAt: items.at(-1)?.updatedAt, idLT: items.at(-1)?.id }
39
+ : undefined,
40
+ });
41
+ });
42
+ }
43
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/session/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAuB;IACpE,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;SAC/C,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC;SACzC,SAAS,CACR,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAChG;SACA,MAAM,CAAC,iCAAiC,EAAE,WAAW,EAAE,QAAQ,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxC,QAAQ,EAAE,OAAO,CAAC,KAAK;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;aACrD,GAAG,CAAC,MAAM,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,KAAK,EAAE,WAAW;YAClB,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;gBAClB,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtE,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}