@jingyi0605/codingns4dsh 0.2.1-beta.1 → 0.2.1-beta.3
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/README.en.md +25 -14
- package/README.md +21 -17
- package/data/build/dist/client/bundle.js +366 -81
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -1
- package/data/build/dist/client/locales/fileWorkspace.js +4 -0
- package/data/build/dist/client/locales/fileWorkspace.js.map +1 -1
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -1
- package/data/build/dist/client/locales/peerHostWorkspace.js +16 -2
- package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts +4 -3
- package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.js +7 -6
- package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-native-store-projection.js +9 -21
- package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.js +139 -10
- package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
- package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
- package/data/build/dist/client/session-changed-files-view.js +162 -58
- package/data/build/dist/client/session-changed-files-view.js.map +1 -1
- package/data/build/dist/client/skill-command.d.ts +1 -1
- package/data/build/dist/client/skill-command.d.ts.map +1 -1
- package/data/build/dist/client/skill-command.js +25 -2
- package/data/build/dist/client/skill-command.js.map +1 -1
- package/data/build/dist/client/skill-reference-dom.js +1 -1
- package/data/build/dist/client/skill-reference-dom.js.map +1 -1
- package/data/build/dist/client/terminal/styles.js +2 -2
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts +28 -0
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js +109 -0
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js.map +1 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +25 -3
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js +120 -9
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts +31 -0
- package/data/build/dist/host/cli-adapters/acp-elicitation.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/acp-elicitation.js +144 -0
- package/data/build/dist/host/cli-adapters/acp-elicitation.js.map +1 -0
- package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +2 -1
- package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/antigravity-driver.js +15 -2
- package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/attachment-utils.d.ts +16 -5
- package/data/build/dist/host/cli-adapters/attachment-utils.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/attachment-utils.js +152 -42
- package/data/build/dist/host/cli-adapters/attachment-utils.js.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts +23 -8
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js +227 -70
- package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +7 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js +143 -6
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.js +74 -6
- package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts +23 -0
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.js +39 -0
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.js.map +1 -0
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +17 -6
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js +448 -26
- package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-subscription.d.ts +1 -1
- package/data/build/dist/host/cli-adapters/command-code-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-subscription.js +7 -4
- package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +1 -1
- package/data/build/dist/host/cli-adapters/cursor-driver.js +2 -2
- package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +1 -1
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js +28 -0
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-tool-history.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-tool-history.js +23 -1
- package/data/build/dist/host/cli-adapters/dsh-tool-history.js.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +5 -3
- package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.d.ts +2 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.js +66 -11
- package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts +5 -2
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.js +268 -18
- package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +2 -0
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.js +8 -3
- package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.d.ts +4 -0
- package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.js +11 -4
- package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kiro-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/kiro-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +6 -2
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/mcode-driver.js +95 -26
- package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +55 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +148 -6
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +7 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
- package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/new-api-subscription.js +11 -58
- package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +5 -2
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.js +136 -18
- package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js +2 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/process-utils.d.ts +10 -0
- package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/process-utils.js +20 -0
- package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +3 -0
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.js +42 -8
- package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +4 -4
- package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/qoder-driver.js +31 -8
- package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +5 -3
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/rpc-driver-utils.js +2 -9
- package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -1
- package/data/build/dist/host/cli-adapters/skill-filesystem.d.ts +25 -0
- package/data/build/dist/host/cli-adapters/skill-filesystem.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/skill-filesystem.js +161 -0
- package/data/build/dist/host/cli-adapters/skill-filesystem.js.map +1 -0
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +1 -0
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js +7 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.js +40 -10
- package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +8 -2
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-driver.js +166 -55
- package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-interactions.d.ts +18 -0
- package/data/build/dist/host/cli-adapters/zcode-interactions.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-interactions.js +90 -0
- package/data/build/dist/host/cli-adapters/zcode-interactions.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-provider-config.d.ts +26 -0
- package/data/build/dist/host/cli-adapters/zcode-provider-config.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-provider-config.js +102 -0
- package/data/build/dist/host/cli-adapters/zcode-provider-config.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +2 -7
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/zcode-telemetry.d.ts +17 -0
- package/data/build/dist/host/cli-adapters/zcode-telemetry.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-telemetry.js +124 -0
- package/data/build/dist/host/cli-adapters/zcode-telemetry.js.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +4 -1
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts +11 -3
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-server.js +8 -4
- package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
- package/data/build/dist/host/cli-bridge/command-code-mod.js +18 -2
- package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
- package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/dispatch.js +30 -5
- package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.d.ts +2 -9
- package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.js +9 -19
- package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +49 -7
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
- package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/host/features/peer-host.js +23 -0
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/index.d.ts +1 -1
- package/data/build/dist/host/index.d.ts.map +1 -1
- package/data/build/dist/host/index.js +4 -1
- package/data/build/dist/host/index.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +2 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +5 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +3 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
- package/data/build/dist/host/rpc.d.ts.map +1 -1
- package/data/build/dist/host/rpc.js +5 -0
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +4 -0
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/version.d.ts +1 -1
- package/data/build/dist/shared/contracts/version.js +1 -1
- package/package.json +3 -1
- package/profile/README.md +2 -2
- package/profile/package.json +2 -2
- package/profile/version.json +1 -1
- package/version.json +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { readAgentQuestions } from './interaction-events.js';
|
|
2
|
+
/** 缺省权限必须覆盖恢复会话残留的 yolo 模式,不能沿用 Provider 的宽松设置。 */
|
|
3
|
+
export function zcodePermissionMode(input) {
|
|
4
|
+
if (input.plan === true || input.permission?.sandboxMode === 'read-only')
|
|
5
|
+
return 'plan';
|
|
6
|
+
if (input.permission?.approvalPolicy !== 'never')
|
|
7
|
+
return 'build';
|
|
8
|
+
if (input.permission.sandboxMode === 'danger-full-access')
|
|
9
|
+
return 'yolo';
|
|
10
|
+
return input.permission.sandboxMode === 'workspace-write' ? 'edit' : 'build';
|
|
11
|
+
}
|
|
12
|
+
/** 只识别真正的反向 RPC 请求,不把流式工具快照再次当成问题。 */
|
|
13
|
+
export function readZcodeInteraction(message) {
|
|
14
|
+
if (typeof message.id !== 'string' && typeof message.id !== 'number')
|
|
15
|
+
return null;
|
|
16
|
+
const params = isRecord(message.params) ? message.params : {};
|
|
17
|
+
const requestId = text(params.requestId) ?? String(message.id);
|
|
18
|
+
const callId = text(params.toolCallId);
|
|
19
|
+
const toolName = text(params.toolName);
|
|
20
|
+
const withCall = callId === undefined ? {} : { callId };
|
|
21
|
+
const detail = [text(params.reason), stringify(params.input)].filter(Boolean).join('\n');
|
|
22
|
+
if (message.method === 'interaction/requestPermission') {
|
|
23
|
+
return {
|
|
24
|
+
event: { type: 'permission-request', requestId, kind: 'tool', ...withCall,
|
|
25
|
+
...(toolName === undefined ? {} : { toolName }), ...(detail ? { detail } : {}) },
|
|
26
|
+
permissionResponse: (response) => ({ decision: response.approved ? 'allow' : 'deny',
|
|
27
|
+
...(response.reason === undefined ? {} : { reason: response.reason }) }),
|
|
28
|
+
questionResponse: () => ({ decision: 'deny' }),
|
|
29
|
+
cancelled: { decision: 'deny', reason: 'DSH 交互已取消' },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (message.method !== 'interaction/requestUserInput')
|
|
33
|
+
return null;
|
|
34
|
+
const schema = isRecord(params.schema) ? params.schema : {};
|
|
35
|
+
// ExitPlanMode 也是 requestUserInput,但它授权实施计划,必须走审批入口。
|
|
36
|
+
if (schema.interaction === 'plan_approval') {
|
|
37
|
+
const plan = isRecord(params.input) ? text(params.input.plan) : undefined;
|
|
38
|
+
return {
|
|
39
|
+
event: { type: 'permission-request', requestId, kind: 'plan', ...withCall,
|
|
40
|
+
toolName: toolName ?? 'exitPlanMode', ...(plan ? { detail: plan } : {}) },
|
|
41
|
+
permissionResponse: (response) => response.approved
|
|
42
|
+
? { action: 'accept', content: { answer: 'approve' } }
|
|
43
|
+
: { action: 'decline', ...(response.reason === undefined ? {} : { reason: response.reason }) },
|
|
44
|
+
questionResponse: () => ({ action: 'decline' }),
|
|
45
|
+
cancelled: { action: 'cancel' },
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const source = Array.isArray(params.questions) ? params.questions : [];
|
|
49
|
+
const questions = readAgentQuestions(source);
|
|
50
|
+
if (questions.length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
return {
|
|
53
|
+
event: { type: 'question-request', requestId, questions, ...withCall },
|
|
54
|
+
permissionResponse: () => ({ action: 'cancel' }),
|
|
55
|
+
questionResponse: (response) => {
|
|
56
|
+
if (response.answers.length === 0)
|
|
57
|
+
return { action: 'cancel' };
|
|
58
|
+
const answers = {};
|
|
59
|
+
for (const question of questions) {
|
|
60
|
+
const answer = response.answers.find((item) => item.id === question.id);
|
|
61
|
+
if (answer === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
// ZCode 不接受 DSH 的 question-N 键:答案键必须是原始问题正文。
|
|
64
|
+
const original = source.find((item) => isRecord(item) && text(item.question)?.trim() === question.question);
|
|
65
|
+
if (!isRecord(original) || typeof original.question !== 'string')
|
|
66
|
+
continue;
|
|
67
|
+
const options = Array.isArray(original.options) ? original.options : [];
|
|
68
|
+
answers[original.question] = [
|
|
69
|
+
...answer.selected.map((label) => {
|
|
70
|
+
const option = options.find((item) => isRecord(item) && text(item.label)?.trim() === label);
|
|
71
|
+
return isRecord(option) ? text(option.value) ?? label : label;
|
|
72
|
+
}),
|
|
73
|
+
...(answer.custom?.trim() ? [answer.custom.trim()] : []),
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
return { action: 'accept', content: { answers } };
|
|
77
|
+
},
|
|
78
|
+
cancelled: { action: 'cancel' },
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function text(value) {
|
|
82
|
+
return typeof value === 'string' && value.trim() !== '' ? value : undefined;
|
|
83
|
+
}
|
|
84
|
+
function stringify(value) {
|
|
85
|
+
return value === undefined ? undefined : typeof value === 'string' ? value : JSON.stringify(value);
|
|
86
|
+
}
|
|
87
|
+
function isRecord(value) {
|
|
88
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=zcode-interactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcode-interactions.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type CodingNsDesktopAppRuntime } from './desktop-app-runtime.js';
|
|
2
|
+
export interface ZcodeProviderConfigOptions {
|
|
3
|
+
readonly homeDirectory?: string;
|
|
4
|
+
readonly personalProviderConfigPath?: string;
|
|
5
|
+
readonly builtinProviderConfigPath?: string;
|
|
6
|
+
readonly credentialsPath?: string;
|
|
7
|
+
readonly credentialSecret?: string;
|
|
8
|
+
readonly runtime?: CodingNsDesktopAppRuntime | null;
|
|
9
|
+
}
|
|
10
|
+
export interface ZcodeProviderConfig {
|
|
11
|
+
readonly providerId: string;
|
|
12
|
+
readonly accessMode?: string;
|
|
13
|
+
/** 只有地址和凭据同时可用时才允许查询;原始凭据始终留在 Host。 */
|
|
14
|
+
readonly source: {
|
|
15
|
+
readonly baseUrl: string;
|
|
16
|
+
readonly apiKey: string;
|
|
17
|
+
} | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 按原生顺序合并模板、内置 Provider 和个人覆盖规则。
|
|
21
|
+
* ZCode 把地址存于 config.api,把密钥存于 config.access;不能递归猜测顶层字段。
|
|
22
|
+
*/
|
|
23
|
+
export declare function readZcodeProviderConfigs(providerId?: string, options?: ZcodeProviderConfigOptions): ZcodeProviderConfig[];
|
|
24
|
+
/** AES-GCM 回退格式与本机 ZCode 一致;认证失败时不把密文当成 API Key。 */
|
|
25
|
+
export declare function decryptZcodeProviderCredential(value: string, credentialSecret?: string): string;
|
|
26
|
+
//# sourceMappingURL=zcode-provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcode-provider-config.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-provider-config.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAErG,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAC5C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CACpD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC9E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,mBAAmB,EAAE,CAwC7H;AAED,oDAAoD;AACpD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAe/F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { createDecipheriv, createHash } from 'node:crypto';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { homedir, userInfo } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { resolveZCodeDesktopRuntime } from './desktop-app-runtime.js';
|
|
6
|
+
/**
|
|
7
|
+
* 按原生顺序合并模板、内置 Provider 和个人覆盖规则。
|
|
8
|
+
* ZCode 把地址存于 config.api,把密钥存于 config.access;不能递归猜测顶层字段。
|
|
9
|
+
*/
|
|
10
|
+
export function readZcodeProviderConfigs(providerId, options = {}) {
|
|
11
|
+
const home = options.homeDirectory ?? homedir();
|
|
12
|
+
const runtime = options.runtime === undefined && options.homeDirectory === undefined
|
|
13
|
+
? resolveZCodeDesktopRuntime() : options.runtime;
|
|
14
|
+
const builtinPath = options.builtinProviderConfigPath
|
|
15
|
+
?? (options.homeDirectory === undefined ? process.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE : undefined)
|
|
16
|
+
?? runtime?.env.ZCODE_BUILTIN_PROVIDER_CONFIG_FILE;
|
|
17
|
+
const personalPath = options.personalProviderConfigPath
|
|
18
|
+
?? (options.homeDirectory === undefined ? process.env.ZCODE_PERSONAL_PROVIDER_CONFIG_FILE : undefined)
|
|
19
|
+
?? join(home, '.zcode', 'v2', 'provider_config.json');
|
|
20
|
+
const documents = [readJson(builtinPath), readJson(personalPath)];
|
|
21
|
+
const templates = new Map();
|
|
22
|
+
const providers = new Map();
|
|
23
|
+
for (const document of documents) {
|
|
24
|
+
const rules = document?.config?.providerConfigRules;
|
|
25
|
+
for (const template of Array.isArray(rules?.templateRules) ? rules.templateRules : []) {
|
|
26
|
+
if (typeof template?.templateId === 'string')
|
|
27
|
+
templates.set(template.templateId, overlay(templates.get(template.templateId), template.config));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (const document of documents) {
|
|
31
|
+
const rules = document?.config?.providerConfigRules?.providerRules;
|
|
32
|
+
for (const rule of Array.isArray(rules) ? rules : []) {
|
|
33
|
+
if (typeof rule?.providerId !== 'string')
|
|
34
|
+
continue;
|
|
35
|
+
const base = providers.get(rule.providerId) ?? templates.get(rule.templateId);
|
|
36
|
+
providers.set(rule.providerId, overlay(base, rule.config));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const credentials = readJson(options.credentialsPath
|
|
40
|
+
?? (options.homeDirectory === undefined ? process.env.ZCODE_CREDENTIALS_FILE : undefined)
|
|
41
|
+
?? join(home, '.zcode', 'v2', 'credentials.json'));
|
|
42
|
+
return [...providers].filter(([id]) => providerId === undefined || id === providerId).map(([id, config]) => {
|
|
43
|
+
const baseUrl = text(config.api?.baseUrl ?? config.api?.baseURL ?? config.baseUrl ?? config.baseURL ?? config.endpoint);
|
|
44
|
+
const prefix = `account-provider:coding-plan:${id}:account:`;
|
|
45
|
+
const credentialKey = Object.keys(credentials ?? {}).find((key) => key.startsWith(prefix) && key.endsWith(':api-key'));
|
|
46
|
+
const encoded = text(config.access?.apiKey ?? config.apiKey ?? config.api_key)
|
|
47
|
+
?? (credentialKey === undefined ? null : text(credentials?.[credentialKey]));
|
|
48
|
+
const apiKey = encoded === null ? null : text(decryptZcodeProviderCredential(encoded, options.credentialSecret));
|
|
49
|
+
return { providerId: id, ...(typeof config.access?.mode === 'string' ? { accessMode: config.access.mode } : {}),
|
|
50
|
+
source: baseUrl === null || apiKey === null ? null : { baseUrl, apiKey } };
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** AES-GCM 回退格式与本机 ZCode 一致;认证失败时不把密文当成 API Key。 */
|
|
54
|
+
export function decryptZcodeProviderCredential(value, credentialSecret) {
|
|
55
|
+
if (!value.startsWith('enc:v1:'))
|
|
56
|
+
return value.trim();
|
|
57
|
+
const [ivRaw, tagRaw, cipherRaw] = value.slice(7).split('.');
|
|
58
|
+
if (!ivRaw || !tagRaw || !cipherRaw)
|
|
59
|
+
return '';
|
|
60
|
+
try {
|
|
61
|
+
let username = 'unknown';
|
|
62
|
+
try {
|
|
63
|
+
username = userInfo().username;
|
|
64
|
+
}
|
|
65
|
+
catch { /* 受限环境可能没有用户名。 */ }
|
|
66
|
+
const secret = credentialSecret ?? `zcode-credential-fallback:${process.platform}:${homedir()}:${username}`;
|
|
67
|
+
const iv = Buffer.from(ivRaw, 'base64url');
|
|
68
|
+
const tag = Buffer.from(tagRaw, 'base64url');
|
|
69
|
+
if (iv.length !== 12 || tag.length !== 16)
|
|
70
|
+
return '';
|
|
71
|
+
const decipher = createDecipheriv('aes-256-gcm', createHash('sha256').update(secret).digest(), iv);
|
|
72
|
+
decipher.setAuthTag(tag);
|
|
73
|
+
return Buffer.concat([decipher.update(Buffer.from(cipherRaw, 'base64url')), decipher.final()]).toString('utf8').trim();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function overlay(base, value) {
|
|
80
|
+
if (!isRecord(value))
|
|
81
|
+
return base ?? {};
|
|
82
|
+
const result = { ...base, ...value };
|
|
83
|
+
for (const key of ['api', 'access']) {
|
|
84
|
+
if (isRecord(value[key]))
|
|
85
|
+
result[key] = { ...base?.[key], ...value[key] };
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
function readJson(path) {
|
|
90
|
+
if (path === undefined)
|
|
91
|
+
return null;
|
|
92
|
+
try {
|
|
93
|
+
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
94
|
+
return isRecord(value) ? value : null;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function isRecord(value) { return value !== null && typeof value === 'object' && !Array.isArray(value); }
|
|
101
|
+
function text(value) { return typeof value === 'string' && value.trim() !== '' ? value.trim() : null; }
|
|
102
|
+
//# sourceMappingURL=zcode-provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcode-provider-config.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import type { CliSubscriptionUsage } from '../../shared/contracts/subscription.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { ZcodeProviderConfigOptions } from './zcode-provider-config.js';
|
|
3
3
|
type FetchLike = typeof fetch;
|
|
4
4
|
/** ZCode Start Plan 的 billing/balance 读取器;凭据与设备标识始终只在 Host 内处理。 */
|
|
5
|
-
export interface ZcodeSubscriptionOptions {
|
|
5
|
+
export interface ZcodeSubscriptionOptions extends ZcodeProviderConfigOptions {
|
|
6
6
|
readonly fetch?: FetchLike;
|
|
7
7
|
readonly timeoutMs?: number;
|
|
8
|
-
readonly homeDirectory?: string;
|
|
9
|
-
readonly credentialsPath?: string;
|
|
10
8
|
readonly telemetryPath?: string;
|
|
11
|
-
readonly credentialSecret?: string;
|
|
12
9
|
readonly appVersion?: string;
|
|
13
|
-
/** 测试或桌面运行时探测失败时注入运行时快照。 */
|
|
14
|
-
readonly runtime?: CodingNsDesktopAppRuntime | null;
|
|
15
10
|
}
|
|
16
11
|
/** 读取 ZCode 套餐余额、已用额度和剩余额度。 */
|
|
17
12
|
export declare class ZcodeSubscriptionService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zcode-subscription.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-subscription.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAwB,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"zcode-subscription.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-subscription.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAwB,MAAM,wCAAwC,CAAA;AAExG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAE5E,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAK7B,mEAAmE;AACnE,MAAM,WAAW,wBAAyB,SAAQ,0BAA0B;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAsCD,+BAA+B;AAC/B,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,GAAE,wBAA6B;IAO5C,IAAI,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAmDlD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;CAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zcode-subscription.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"zcode-subscription.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CodingNsAgentEvent, CodingNsAgentToolEvent } from '../../shared/contracts/cli-adapter.js';
|
|
2
|
+
import type { JsonRpcMessage } from './json-rpc-process.js';
|
|
3
|
+
/** 每轮独立持有统计;累计账单和当前请求上下文是两种数据,不能互相覆盖。 */
|
|
4
|
+
export declare class ZcodeTurnTelemetry {
|
|
5
|
+
private readonly sessionId;
|
|
6
|
+
private readonly seen;
|
|
7
|
+
private readonly samples;
|
|
8
|
+
private readonly tools;
|
|
9
|
+
private context;
|
|
10
|
+
constructor(sessionId: string);
|
|
11
|
+
observe(message: JsonRpcMessage): CodingNsAgentToolEvent | null;
|
|
12
|
+
/** 原生模型完成事件没有窗口时才读取快照;窗口以实际请求报告为准。 */
|
|
13
|
+
get needsContextSnapshot(): boolean;
|
|
14
|
+
readContextSnapshot(value: unknown): void;
|
|
15
|
+
finish(legacyUsage: unknown, baseline: unknown): CodingNsAgentEvent | null;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=zcode-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcode-telemetry.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAK3D,yCAAyC;AACzC,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,QAAQ,CAAC,SAAS;IALtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsD;IAC5E,OAAO,CAAC,OAAO,CAA0D;gBAE5C,SAAS,EAAE,MAAM;IAE9C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,sBAAsB,GAAG,IAAI;IAwD/D,sCAAsC;IACtC,IAAI,oBAAoB,IAAI,OAAO,CAAoD;IAEvF,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IASzC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI;CA2B3E"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { isRecord, usageChunk } from './rpc-driver-utils.js';
|
|
2
|
+
/** 每轮独立持有统计;累计账单和当前请求上下文是两种数据,不能互相覆盖。 */
|
|
3
|
+
export class ZcodeTurnTelemetry {
|
|
4
|
+
sessionId;
|
|
5
|
+
seen = new Set();
|
|
6
|
+
samples = [];
|
|
7
|
+
tools = new Map();
|
|
8
|
+
context = {};
|
|
9
|
+
constructor(sessionId) {
|
|
10
|
+
this.sessionId = sessionId;
|
|
11
|
+
}
|
|
12
|
+
observe(message) {
|
|
13
|
+
if (message.method !== 'session/event')
|
|
14
|
+
return null;
|
|
15
|
+
const params = isRecord(message.params) ? message.params : {};
|
|
16
|
+
if (typeof params.sessionId === 'string' && params.sessionId !== this.sessionId)
|
|
17
|
+
return null;
|
|
18
|
+
const key = typeof params.eventId === 'string' ? params.eventId
|
|
19
|
+
: typeof params.seq === 'number' ? `seq:${params.seq}` : undefined;
|
|
20
|
+
if (key !== undefined && this.seen.has(key))
|
|
21
|
+
return null;
|
|
22
|
+
if (key !== undefined)
|
|
23
|
+
this.seen.add(key);
|
|
24
|
+
const payload = isRecord(params.payload) ? params.payload : {};
|
|
25
|
+
// model_request_completed 网络通知也有 usage,但同一次请求稍后还会收到
|
|
26
|
+
// ModelComplete。只结算带 stopReason 的模型完成事件,避免双倍计费。
|
|
27
|
+
if (params.type === 'session.updated' && typeof payload.stopReason === 'string') {
|
|
28
|
+
const sample = usageChunk(payload.usage);
|
|
29
|
+
if (sample?.type === 'usage') {
|
|
30
|
+
this.samples.push(sample);
|
|
31
|
+
if (payload.querySource === 'main_turn' || payload.querySource === undefined) {
|
|
32
|
+
this.context = { contextTokens: sample.totalTokens ?? sample.inputTokens + sample.outputTokens,
|
|
33
|
+
...(positive(payload.contextWindow) === undefined ? {} : { contextWindow: payload.contextWindow }) };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const callId = typeof payload.toolCallId === 'string' ? payload.toolCallId : undefined;
|
|
38
|
+
if (callId === undefined)
|
|
39
|
+
return null;
|
|
40
|
+
const tool = this.tools.get(callId) ?? { name: zcodeToolName(payload.toolName) };
|
|
41
|
+
if (typeof payload.toolName === 'string')
|
|
42
|
+
tool.name = zcodeToolName(payload.toolName);
|
|
43
|
+
this.tools.set(callId, tool);
|
|
44
|
+
if (params.type === 'model.streaming') {
|
|
45
|
+
if (payload.kind === 'tool_input_start')
|
|
46
|
+
tool.input = '';
|
|
47
|
+
if (payload.kind === 'tool_input_delta' && typeof payload.delta === 'string') {
|
|
48
|
+
tool.input = `${tool.input ?? ''}${payload.delta}`.slice(0, 64 * 1024);
|
|
49
|
+
}
|
|
50
|
+
return payload.kind === 'tool_input_end'
|
|
51
|
+
? { type: 'tool-event', callId, toolName: tool.name, status: 'started', ...(tool.input === undefined ? {} : { input: tool.input }) } : null;
|
|
52
|
+
}
|
|
53
|
+
if (params.type !== 'tool.updated')
|
|
54
|
+
return null;
|
|
55
|
+
if (payload.input !== undefined)
|
|
56
|
+
tool.input = serialize(payload.input);
|
|
57
|
+
const base = { type: 'tool-event', callId, toolName: tool.name,
|
|
58
|
+
...(tool.input === undefined ? {} : { input: tool.input }) };
|
|
59
|
+
if (payload.kind === 'scheduled' || payload.kind === 'started')
|
|
60
|
+
return { ...base, status: 'started' };
|
|
61
|
+
if (payload.kind === 'progress') {
|
|
62
|
+
return { ...base, status: 'running', ...(typeof payload.outputPreview === 'string'
|
|
63
|
+
? { output: payload.outputPreview, outputMode: 'snapshot' } : {}) };
|
|
64
|
+
}
|
|
65
|
+
if (payload.kind === 'result') {
|
|
66
|
+
const result = isRecord(payload.result) ? payload.result : {};
|
|
67
|
+
const output = serialize(result.content ?? result.error ?? '');
|
|
68
|
+
return { ...base, status: result.success === false ? 'failed' : 'completed', output, outputMode: 'snapshot',
|
|
69
|
+
...(result.success === false ? { error: firstText(result.error, output) ?? 'ZCode 工具执行失败' } : {}) };
|
|
70
|
+
}
|
|
71
|
+
if (payload.kind === 'error') {
|
|
72
|
+
const error = firstText(payload.error?.message, payload.error, payload.message) ?? serialize(payload.error ?? payload);
|
|
73
|
+
return { ...base, status: 'failed', error, output: error, outputMode: 'snapshot' };
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
/** 原生模型完成事件没有窗口时才读取快照;窗口以实际请求报告为准。 */
|
|
78
|
+
get needsContextSnapshot() { return this.context.contextWindow === undefined; }
|
|
79
|
+
readContextSnapshot(value) {
|
|
80
|
+
const root = isRecord(value) && isRecord(value.snapshot) ? value.snapshot : value;
|
|
81
|
+
const projection = isRecord(root) && isRecord(root.projection) ? root.projection : {};
|
|
82
|
+
const window = positive(projection.contextWindow);
|
|
83
|
+
const tokens = nonnegative(projection.contextUsed);
|
|
84
|
+
if (window !== undefined && this.context.contextWindow === undefined)
|
|
85
|
+
this.context = { ...this.context, contextWindow: window };
|
|
86
|
+
if (this.context.contextTokens === undefined && tokens !== undefined)
|
|
87
|
+
this.context = { ...this.context, contextTokens: tokens };
|
|
88
|
+
}
|
|
89
|
+
finish(legacyUsage, baseline) {
|
|
90
|
+
let usage = null;
|
|
91
|
+
if (this.samples.length > 0) {
|
|
92
|
+
const sum = (key) => this.samples.reduce((total, sample) => total + (sample[key] ?? 0), 0);
|
|
93
|
+
usage = usageChunk({ inputTokens: sum('inputTokens'), outputTokens: sum('outputTokens'),
|
|
94
|
+
cacheReadTokens: sum('cacheReadTokens'), cacheWriteTokens: sum('cacheWriteTokens'),
|
|
95
|
+
totalTokens: this.samples.reduce((total, sample) => total + (sample.totalTokens ?? sample.inputTokens + sample.outputTokens), 0) });
|
|
96
|
+
}
|
|
97
|
+
else if (isRecord(legacyUsage) && !isRecord(legacyUsage.inputBaselineBySource)) {
|
|
98
|
+
// 旧 CLI 没有模型用量事件;只对原始累计桶求差。新 CLI 的基线去重口径
|
|
99
|
+
// 不是请求消耗,不能拿它冒充账单或推导缓存命中率。
|
|
100
|
+
const current = usageChunk(legacyUsage);
|
|
101
|
+
const previous = usageChunk(baseline);
|
|
102
|
+
if (current?.type === 'usage') {
|
|
103
|
+
const values = {};
|
|
104
|
+
const reset = previous?.type === 'usage' && current.inputTokens < previous.inputTokens;
|
|
105
|
+
for (const key of ['inputTokens', 'outputTokens', 'cacheReadTokens', 'cacheWriteTokens', 'totalTokens']) {
|
|
106
|
+
if (current[key] !== undefined)
|
|
107
|
+
values[key] = Math.max(0, current[key] - (!reset && previous?.type === 'usage' ? previous[key] ?? 0 : 0));
|
|
108
|
+
}
|
|
109
|
+
usage = usageChunk(values);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (usage === null)
|
|
113
|
+
return usageChunk({ inputTokens: 0, outputTokens: 0, ...this.context });
|
|
114
|
+
const { contextWindow, contextTokens } = this.context;
|
|
115
|
+
return { ...usage, ...this.context, ...(contextWindow !== undefined && contextTokens !== undefined
|
|
116
|
+
? { contextUsageRatio: Number(Math.min(1, contextTokens / contextWindow).toFixed(6)) } : {}) };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function positive(value) { const number = nonnegative(value); return number !== undefined && number > 0 ? number : undefined; }
|
|
120
|
+
function nonnegative(value) { return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined; }
|
|
121
|
+
function serialize(value) { return typeof value === 'string' ? value : JSON.stringify(value) ?? ''; }
|
|
122
|
+
function firstText(...values) { return values.find((value) => typeof value === 'string' && value.trim() !== ''); }
|
|
123
|
+
function zcodeToolName(value) { return value === 'AskUserQuestion' ? 'question' : typeof value === 'string' ? value : 'tool'; }
|
|
124
|
+
//# sourceMappingURL=zcode-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcode-telemetry.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/zcode-telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
* Host 装配桥接服务后写入;驱动在拼参数/环境时读取。运行时不保存任何凭据到
|
|
5
5
|
* 磁盘:token 与端口只存在于当前进程,并通过注入通道下发给外部 CLI 子进程。
|
|
6
6
|
*/
|
|
7
|
-
/** 一次被桥接接管的子代理调用结果,供驱动把 hook_blocked
|
|
7
|
+
/** 一次被桥接接管的子代理调用结果,供驱动把 hook_blocked 投影为真实状态。 */
|
|
8
8
|
export interface SubagentBridgeRedirect {
|
|
9
9
|
readonly childSessionId: string;
|
|
10
10
|
readonly ok: boolean;
|
|
11
|
+
/** 后台派发只表示已创建;必须保留 running,不能伪装成 completed。 */
|
|
12
|
+
readonly completed?: boolean | undefined;
|
|
13
|
+
readonly status?: 'running' | 'completed' | 'failed' | 'interrupted' | undefined;
|
|
11
14
|
readonly toolCalls: number;
|
|
12
15
|
}
|
|
13
16
|
export interface SubagentBridgeRuntime {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-holder.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-holder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"bridge-holder.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-holder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAA;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAA;IAC7F,sCAAsC;IACtC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAA;CAC3F;AAOD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,GAAG,IAAI,CAElF;AAED,wBAAgB,iBAAiB,IAAI,qBAAqB,GAAG,SAAS,CAErE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,CA6BhI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-holder.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-holder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"bridge-holder.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-holder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAA;AACnC,MAAM,aAAa,GAAG,IAAI,CAAA;AAE1B,IAAI,OAA0C,CAAA;AAE9C,MAAM,UAAU,iBAAiB,CAAC,OAA0C;IAC1E,OAAO,GAAG,OAAO,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA6D;IACvG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqF,CAAA;IAC9G,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,UAAkB,EAAU,EAAE,CAAC,GAAG,SAAS,SAAS,UAAU,EAAE,CAAA;IAClG,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG;gBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACnD,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,aAAa,CAAC;gBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzG,CAAC;IACH,CAAC,CAAA;IACD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ;YAC5C,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE;gBAAE,OAAM;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,KAAK,CAAC,GAAG,CAAC,CAAA;YACV,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,eAAe,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,eAAe,CAAC,SAAS,EAAE,UAAU;YACnC,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE;gBAAE,OAAO,SAAS,CAAA;YAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAChC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAA;YACzC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACrB,OAAO,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;QACnE,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -3,7 +3,10 @@ import type { SubagentBridgeRuntime } from './bridge-holder.js';
|
|
|
3
3
|
export interface SubagentBridgeDispatchRequest {
|
|
4
4
|
readonly sessionId: string;
|
|
5
5
|
readonly prompt: string;
|
|
6
|
-
readonly action?: 'start' | 'wait' | 'read' | undefined;
|
|
6
|
+
readonly action?: 'start' | 'wait' | 'read' | 'send' | undefined;
|
|
7
|
+
readonly message?: string | undefined;
|
|
8
|
+
/** start 是否只创建后台子会话并立即返回;外部 CLI 桥接默认由调用方显式传 true。 */
|
|
9
|
+
readonly runInBackground?: boolean | undefined;
|
|
7
10
|
readonly childSessionId?: string | undefined;
|
|
8
11
|
readonly dependsOn?: readonly string[] | undefined;
|
|
9
12
|
readonly timeoutMs?: number | undefined;
|
|
@@ -20,7 +23,11 @@ export interface SubagentBridgeDispatchResult {
|
|
|
20
23
|
readonly status?: 'creating' | 'running' | 'completed' | 'failed' | 'interrupted' | undefined;
|
|
21
24
|
readonly text: string;
|
|
22
25
|
readonly childSessionId?: string | undefined;
|
|
26
|
+
readonly messageId?: string | undefined;
|
|
23
27
|
readonly toolCalls?: number | undefined;
|
|
28
|
+
readonly failureReviewed?: boolean | undefined;
|
|
29
|
+
readonly failureReviewRequired?: boolean | undefined;
|
|
30
|
+
readonly failureGuidance?: string | undefined;
|
|
24
31
|
readonly error?: string | undefined;
|
|
25
32
|
}
|
|
26
33
|
export interface SubagentBridgeServer {
|
|
@@ -30,8 +37,9 @@ export interface SubagentBridgeServer {
|
|
|
30
37
|
/**
|
|
31
38
|
* 本机回环桥接服务:只监听 127.0.0.1,每次启动生成随机令牌。
|
|
32
39
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
40
|
+
* 显式 foreground 派发可能阻塞较长时间,因此关闭 HTTP 请求超时;默认的外部
|
|
41
|
+
* MCP/Command Code start 走后台路径,会在创建子会话后立即返回。认证失败、
|
|
42
|
+
* 路由不存在和内部错误都返回稳定的 JSON 结构。
|
|
35
43
|
*/
|
|
36
44
|
export declare function startSubagentBridgeServer(options: {
|
|
37
45
|
readonly dispatch: (request: SubagentBridgeDispatchRequest) => Promise<SubagentBridgeDispatchResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-server.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,2BAA2B;AAC3B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"bridge-server.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/bridge-server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,2BAA2B;AAC3B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,qDAAqD;IACrD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,CAAA;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAID;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,4BAA4B,CAAC,CAAA;CACrG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0BhC"}
|
|
@@ -5,8 +5,9 @@ const MAX_BODY_BYTES = 2 * 1024 * 1024;
|
|
|
5
5
|
/**
|
|
6
6
|
* 本机回环桥接服务:只监听 127.0.0.1,每次启动生成随机令牌。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* 显式 foreground 派发可能阻塞较长时间,因此关闭 HTTP 请求超时;默认的外部
|
|
9
|
+
* MCP/Command Code start 走后台路径,会在创建子会话后立即返回。认证失败、
|
|
10
|
+
* 路由不存在和内部错误都返回稳定的 JSON 结构。
|
|
10
11
|
*/
|
|
11
12
|
export async function startSubagentBridgeServer(options) {
|
|
12
13
|
const token = randomBytes(24).toString('hex');
|
|
@@ -104,8 +105,9 @@ function readDispatchRequest(value) {
|
|
|
104
105
|
const record = value;
|
|
105
106
|
const sessionId = typeof record.sessionId === 'string' ? record.sessionId.trim() : '';
|
|
106
107
|
const prompt = typeof record.prompt === 'string' ? record.prompt : '';
|
|
107
|
-
const action = record.action === 'wait' || record.action === 'read' || record.action === 'start' ? record.action : 'start';
|
|
108
|
-
|
|
108
|
+
const action = record.action === 'wait' || record.action === 'read' || record.action === 'send' || record.action === 'start' ? record.action : 'start';
|
|
109
|
+
const message = typeof record.message === 'string' ? record.message : '';
|
|
110
|
+
if (sessionId === '' || action === 'start' && prompt.trim() === '' || action === 'send' && message.trim() === '' && prompt.trim() === '')
|
|
109
111
|
return undefined;
|
|
110
112
|
const optional = (key) => {
|
|
111
113
|
const raw = record[key];
|
|
@@ -115,6 +117,8 @@ function readDispatchRequest(value) {
|
|
|
115
117
|
sessionId,
|
|
116
118
|
prompt,
|
|
117
119
|
action,
|
|
120
|
+
...(message.trim() === '' ? {} : { message }),
|
|
121
|
+
...(typeof record.runInBackground === 'boolean' ? { runInBackground: record.runInBackground } : {}),
|
|
118
122
|
...(typeof record.childSessionId === 'string' && record.childSessionId.trim() !== '' ? { childSessionId: record.childSessionId.trim() } : {}),
|
|
119
123
|
...(Array.isArray(record.dependsOn) ? { dependsOn: record.dependsOn.filter((item) => typeof item === 'string' && item.trim() !== '').map((item) => item.trim()) } : {}),
|
|
120
124
|
...(typeof record.timeoutMs === 'number' && Number.isFinite(record.timeoutMs) ? { timeoutMs: record.timeoutMs } : {}),
|