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.
- package/INSTALL.md +118 -0
- package/README.en.md +257 -0
- package/README.md +255 -0
- package/dist/api/agent-command-api.d.ts +39 -0
- package/dist/api/agent-command-api.js +69 -0
- package/dist/api/agent-command-api.js.map +1 -0
- package/dist/api/agent-query-api.d.ts +14 -0
- package/dist/api/agent-query-api.js +72 -0
- package/dist/api/agent-query-api.js.map +1 -0
- package/dist/api/config-api.d.ts +9 -0
- package/dist/api/config-api.js +17 -0
- package/dist/api/config-api.js.map +1 -0
- package/dist/api/conversation-api.d.ts +15 -0
- package/dist/api/conversation-api.js +29 -0
- package/dist/api/conversation-api.js.map +1 -0
- package/dist/api/integration-api.d.ts +9 -0
- package/dist/api/integration-api.js +17 -0
- package/dist/api/integration-api.js.map +1 -0
- package/dist/api/plugin-api.d.ts +9 -0
- package/dist/api/plugin-api.js +14 -0
- package/dist/api/plugin-api.js.map +1 -0
- package/dist/api/preview-version-api.d.ts +6 -0
- package/dist/api/preview-version-api.js +31 -0
- package/dist/api/preview-version-api.js.map +1 -0
- package/dist/api/publish-api.d.ts +19 -0
- package/dist/api/publish-api.js +17 -0
- package/dist/api/publish-api.js.map +1 -0
- package/dist/api/upload-api.d.ts +8 -0
- package/dist/api/upload-api.js +71 -0
- package/dist/api/upload-api.js.map +1 -0
- package/dist/auth/browser-login.d.ts +11 -0
- package/dist/auth/browser-login.js +77 -0
- package/dist/auth/browser-login.js.map +1 -0
- package/dist/auth/pat-store.d.ts +15 -0
- package/dist/auth/pat-store.js +131 -0
- package/dist/auth/pat-store.js.map +1 -0
- package/dist/auto-tools/read-logs.d.ts +3 -0
- package/dist/auto-tools/read-logs.js +4 -0
- package/dist/auto-tools/read-logs.js.map +1 -0
- package/dist/auto-tools/registry.d.ts +8 -0
- package/dist/auto-tools/registry.js +26 -0
- package/dist/auto-tools/registry.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth/index.d.ts +4 -0
- package/dist/commands/auth/index.js +10 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +3 -0
- package/dist/commands/auth/login.js +23 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +4 -0
- package/dist/commands/auth/logout.js +15 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +4 -0
- package/dist/commands/auth/status.js +14 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/chat/create.d.ts +4 -0
- package/dist/commands/chat/create.js +8 -0
- package/dist/commands/chat/create.js.map +1 -0
- package/dist/commands/chat/demo.d.ts +4 -0
- package/dist/commands/chat/demo.js +11 -0
- package/dist/commands/chat/demo.js.map +1 -0
- package/dist/commands/chat/develop.d.ts +4 -0
- package/dist/commands/chat/develop.js +10 -0
- package/dist/commands/chat/develop.js.map +1 -0
- package/dist/commands/chat/index.d.ts +4 -0
- package/dist/commands/chat/index.js +26 -0
- package/dist/commands/chat/index.js.map +1 -0
- package/dist/commands/chat/interaction.d.ts +4 -0
- package/dist/commands/chat/interaction.js +22 -0
- package/dist/commands/chat/interaction.js.map +1 -0
- package/dist/commands/chat/message.d.ts +6 -0
- package/dist/commands/chat/message.js +78 -0
- package/dist/commands/chat/message.js.map +1 -0
- package/dist/commands/chat/plugin.d.ts +4 -0
- package/dist/commands/chat/plugin.js +82 -0
- package/dist/commands/chat/plugin.js.map +1 -0
- package/dist/commands/chat/publish.d.ts +3 -0
- package/dist/commands/chat/publish.js +207 -0
- package/dist/commands/chat/publish.js.map +1 -0
- package/dist/commands/chat/send.d.ts +4 -0
- package/dist/commands/chat/send.js +5 -0
- package/dist/commands/chat/send.js.map +1 -0
- package/dist/commands/chat/state.d.ts +4 -0
- package/dist/commands/chat/state.js +26 -0
- package/dist/commands/chat/state.js.map +1 -0
- package/dist/commands/chat/stop.d.ts +4 -0
- package/dist/commands/chat/stop.js +16 -0
- package/dist/commands/chat/stop.js.map +1 -0
- package/dist/commands/chat/style.d.ts +4 -0
- package/dist/commands/chat/style.js +45 -0
- package/dist/commands/chat/style.js.map +1 -0
- package/dist/commands/chat/wait.d.ts +4 -0
- package/dist/commands/chat/wait.js +11 -0
- package/dist/commands/chat/wait.js.map +1 -0
- package/dist/commands/session/get.d.ts +4 -0
- package/dist/commands/session/get.js +15 -0
- package/dist/commands/session/get.js.map +1 -0
- package/dist/commands/session/index.d.ts +4 -0
- package/dist/commands/session/index.js +8 -0
- package/dist/commands/session/index.js.map +1 -0
- package/dist/commands/session/list.d.ts +4 -0
- package/dist/commands/session/list.js +43 -0
- package/dist/commands/session/list.js.map +1 -0
- package/dist/commands/shared.d.ts +33 -0
- package/dist/commands/shared.js +127 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/system/update.d.ts +6 -0
- package/dist/commands/system/update.js +10 -0
- package/dist/commands/system/update.js.map +1 -0
- package/dist/commands/system/version.d.ts +4 -0
- package/dist/commands/system/version.js +8 -0
- package/dist/commands/system/version.js.map +1 -0
- package/dist/config/constants.d.ts +9 -0
- package/dist/config/constants.js +22 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/runtime-config.d.ts +9 -0
- package/dist/config/runtime-config.js +28 -0
- package/dist/config/runtime-config.js.map +1 -0
- package/dist/contracts/cli-output.d.ts +110 -0
- package/dist/contracts/cli-output.js +2 -0
- package/dist/contracts/cli-output.js.map +1 -0
- package/dist/contracts/node-wire.d.ts +36381 -0
- package/dist/contracts/node-wire.js +102 -0
- package/dist/contracts/node-wire.js.map +1 -0
- package/dist/contracts/value.d.ts +6 -0
- package/dist/contracts/value.js +20 -0
- package/dist/contracts/value.js.map +1 -0
- package/dist/conversation/demo-preview.d.ts +7 -0
- package/dist/conversation/demo-preview.js +62 -0
- package/dist/conversation/demo-preview.js.map +1 -0
- package/dist/conversation/development-snapshot.d.ts +5 -0
- package/dist/conversation/development-snapshot.js +52 -0
- package/dist/conversation/development-snapshot.js.map +1 -0
- package/dist/conversation/next-actions.d.ts +4 -0
- package/dist/conversation/next-actions.js +199 -0
- package/dist/conversation/next-actions.js.map +1 -0
- package/dist/conversation/round-selector.d.ts +4 -0
- package/dist/conversation/round-selector.js +25 -0
- package/dist/conversation/round-selector.js.map +1 -0
- package/dist/conversation/session-waiter.d.ts +28 -0
- package/dist/conversation/session-waiter.js +176 -0
- package/dist/conversation/session-waiter.js.map +1 -0
- package/dist/conversation/state-resolver.d.ts +8 -0
- package/dist/conversation/state-resolver.js +90 -0
- package/dist/conversation/state-resolver.js.map +1 -0
- package/dist/conversation/text-projector.d.ts +5 -0
- package/dist/conversation/text-projector.js +45 -0
- package/dist/conversation/text-projector.js.map +1 -0
- package/dist/development.d.ts +1 -0
- package/dist/development.js +16 -0
- package/dist/development.js.map +1 -0
- package/dist/interactions/context.d.ts +23 -0
- package/dist/interactions/context.js +50 -0
- package/dist/interactions/context.js.map +1 -0
- package/dist/interactions/handlers/index.d.ts +2 -0
- package/dist/interactions/handlers/index.js +52 -0
- package/dist/interactions/handlers/index.js.map +1 -0
- package/dist/interactions/handlers/reply-ask.d.ts +2 -0
- package/dist/interactions/handlers/reply-ask.js +33 -0
- package/dist/interactions/handlers/reply-ask.js.map +1 -0
- package/dist/interactions/handlers/reply-ddl.d.ts +2 -0
- package/dist/interactions/handlers/reply-ddl.js +8 -0
- package/dist/interactions/handlers/reply-ddl.js.map +1 -0
- package/dist/interactions/handlers/reply-plugin.d.ts +3 -0
- package/dist/interactions/handlers/reply-plugin.js +56 -0
- package/dist/interactions/handlers/reply-plugin.js.map +1 -0
- package/dist/interactions/handlers/reply-prd.d.ts +2 -0
- package/dist/interactions/handlers/reply-prd.js +35 -0
- package/dist/interactions/handlers/reply-prd.js.map +1 -0
- package/dist/interactions/handlers/reply-secret.d.ts +2 -0
- package/dist/interactions/handlers/reply-secret.js +27 -0
- package/dist/interactions/handlers/reply-secret.js.map +1 -0
- package/dist/interactions/handlers/reply-semantic.d.ts +2 -0
- package/dist/interactions/handlers/reply-semantic.js +98 -0
- package/dist/interactions/handlers/reply-semantic.js.map +1 -0
- package/dist/interactions/handlers/reply-style.d.ts +2 -0
- package/dist/interactions/handlers/reply-style.js +9 -0
- package/dist/interactions/handlers/reply-style.js.map +1 -0
- package/dist/interactions/handlers/reply-universal-ask.d.ts +2 -0
- package/dist/interactions/handlers/reply-universal-ask.js +13 -0
- package/dist/interactions/handlers/reply-universal-ask.js.map +1 -0
- package/dist/interactions/handlers/types.d.ts +10 -0
- package/dist/interactions/handlers/types.js +2 -0
- package/dist/interactions/handlers/types.js.map +1 -0
- package/dist/interactions/interaction-id.d.ts +2 -0
- package/dist/interactions/interaction-id.js +15 -0
- package/dist/interactions/interaction-id.js.map +1 -0
- package/dist/interactions/parsers/ask-user-tool.d.ts +2 -0
- package/dist/interactions/parsers/ask-user-tool.js +14 -0
- package/dist/interactions/parsers/ask-user-tool.js.map +1 -0
- package/dist/interactions/parsers/ddl-approval.d.ts +2 -0
- package/dist/interactions/parsers/ddl-approval.js +12 -0
- package/dist/interactions/parsers/ddl-approval.js.map +1 -0
- package/dist/interactions/parsers/plugin-action.d.ts +2 -0
- package/dist/interactions/parsers/plugin-action.js +19 -0
- package/dist/interactions/parsers/plugin-action.js.map +1 -0
- package/dist/interactions/parsers/prd-clarification.d.ts +2 -0
- package/dist/interactions/parsers/prd-clarification.js +26 -0
- package/dist/interactions/parsers/prd-clarification.js.map +1 -0
- package/dist/interactions/parsers/secret-input.d.ts +2 -0
- package/dist/interactions/parsers/secret-input.js +27 -0
- package/dist/interactions/parsers/secret-input.js.map +1 -0
- package/dist/interactions/parsers/semantic-action.d.ts +4 -0
- package/dist/interactions/parsers/semantic-action.js +84 -0
- package/dist/interactions/parsers/semantic-action.js.map +1 -0
- package/dist/interactions/parsers/style-selection.d.ts +15 -0
- package/dist/interactions/parsers/style-selection.js +77 -0
- package/dist/interactions/parsers/style-selection.js.map +1 -0
- package/dist/interactions/parsers/universal-ask-user.d.ts +2 -0
- package/dist/interactions/parsers/universal-ask-user.js +15 -0
- package/dist/interactions/parsers/universal-ask-user.js.map +1 -0
- package/dist/interactions/questions.d.ts +46 -0
- package/dist/interactions/questions.js +95 -0
- package/dist/interactions/questions.js.map +1 -0
- package/dist/interactions/registry.d.ts +4 -0
- package/dist/interactions/registry.js +64 -0
- package/dist/interactions/registry.js.map +1 -0
- package/dist/output/exit-codes.d.ts +22 -0
- package/dist/output/exit-codes.js +27 -0
- package/dist/output/exit-codes.js.map +1 -0
- package/dist/output/writer.d.ts +13 -0
- package/dist/output/writer.js +53 -0
- package/dist/output/writer.js.map +1 -0
- package/dist/program.d.ts +9 -0
- package/dist/program.js +39 -0
- package/dist/program.js.map +1 -0
- package/dist/runner.d.ts +11 -0
- package/dist/runner.js +54 -0
- package/dist/runner.js.map +1 -0
- package/dist/runtime.d.ts +48 -0
- package/dist/runtime.js +404 -0
- package/dist/runtime.js.map +1 -0
- package/dist/transport/api-client.d.ts +17 -0
- package/dist/transport/api-client.js +37 -0
- package/dist/transport/api-client.js.map +1 -0
- package/dist/transport/http-client.d.ts +20 -0
- package/dist/transport/http-client.js +79 -0
- package/dist/transport/http-client.js.map +1 -0
- package/dist/update/update-lock.d.ts +1 -0
- package/dist/update/update-lock.js +57 -0
- package/dist/update/update-lock.js.map +1 -0
- package/dist/update/version-gate.d.ts +6 -0
- package/dist/update/version-gate.js +118 -0
- package/dist/update/version-gate.js.map +1 -0
- 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":"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"}
|
|
@@ -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,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,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,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,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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/interactions/handlers/types.ts"],"names":[],"mappings":""}
|
|
@@ -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,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,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,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,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,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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"}
|