@myagentroam/node 0.1.2 → 0.1.4
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/dist/claude-agent-sdk.d.ts +1 -15
- package/dist/claude-agent-sdk.js +9 -77
- package/dist/claude-agent-sdk.js.map +1 -1
- package/dist/codex-app-server.d.ts +4 -0
- package/dist/codex-app-server.js +18 -4
- package/dist/codex-app-server.js.map +1 -1
- package/dist/connector/node-connector-options.d.ts +23 -0
- package/dist/connector/node-connector-options.js +2 -0
- package/dist/connector/node-connector-options.js.map +1 -0
- package/dist/connector/node-operation-router.d.ts +9 -0
- package/dist/connector/node-operation-router.js +23 -0
- package/dist/connector/node-operation-router.js.map +1 -0
- package/dist/connector.d.ts +59 -353
- package/dist/connector.js +614 -5936
- package/dist/connector.js.map +1 -1
- package/dist/control-outbound-scheduler.d.ts +26 -0
- package/dist/control-outbound-scheduler.js +122 -0
- package/dist/control-outbound-scheduler.js.map +1 -0
- package/dist/database.js +1 -1
- package/dist/database.js.map +1 -1
- package/dist/native-jsonl-reader.d.ts +14 -0
- package/dist/native-jsonl-reader.js +98 -0
- package/dist/native-jsonl-reader.js.map +1 -0
- package/dist/native-session-history.d.ts +22 -3
- package/dist/native-session-history.js +281 -157
- package/dist/native-session-history.js.map +1 -1
- package/dist/runner/abstract-runner.d.ts +148 -0
- package/dist/runner/abstract-runner.js +139 -0
- package/dist/runner/abstract-runner.js.map +1 -0
- package/dist/runner/claude/managed-run-controller.d.ts +52 -0
- package/dist/runner/claude/managed-run-controller.js +307 -0
- package/dist/runner/claude/managed-run-controller.js.map +1 -0
- package/dist/runner/claude-code-runner.d.ts +68 -0
- package/dist/runner/claude-code-runner.js +268 -0
- package/dist/runner/claude-code-runner.js.map +1 -0
- package/dist/runner/codex/conversation-parser.d.ts +61 -0
- package/dist/runner/codex/conversation-parser.js +676 -0
- package/dist/runner/codex/conversation-parser.js.map +1 -0
- package/dist/runner/codex/managed-run-controller.d.ts +79 -0
- package/dist/runner/codex/managed-run-controller.js +379 -0
- package/dist/runner/codex/managed-run-controller.js.map +1 -0
- package/dist/runner/codex-runner.d.ts +81 -0
- package/dist/runner/codex-runner.js +342 -0
- package/dist/runner/codex-runner.js.map +1 -0
- package/dist/runner/fake-test-runner.d.ts +26 -0
- package/dist/runner/fake-test-runner.js +48 -0
- package/dist/runner/fake-test-runner.js.map +1 -0
- package/dist/runner/runner-registry.d.ts +17 -0
- package/dist/runner/runner-registry.js +66 -0
- package/dist/runner/runner-registry.js.map +1 -0
- package/dist/runner-command-engine.d.ts +9 -0
- package/dist/runner-command-engine.js +24 -0
- package/dist/runner-command-engine.js.map +1 -1
- package/dist/runner-profiles.js +12 -0
- package/dist/runner-profiles.js.map +1 -1
- package/dist/runner-usage.d.ts +2 -2
- package/dist/runner-usage.js +3 -5
- package/dist/runner-usage.js.map +1 -1
- package/dist/runtime-state.js +6 -5
- package/dist/runtime-state.js.map +1 -1
- package/dist/service/attachment-domain-state.d.ts +5 -0
- package/dist/service/attachment-domain-state.js +6 -0
- package/dist/service/attachment-domain-state.js.map +1 -0
- package/dist/service/conversation-history-service.d.ts +34 -0
- package/dist/service/conversation-history-service.js +159 -0
- package/dist/service/conversation-history-service.js.map +1 -0
- package/dist/service/external-session-resume-service.d.ts +32 -0
- package/dist/service/external-session-resume-service.js +99 -0
- package/dist/service/external-session-resume-service.js.map +1 -0
- package/dist/service/fake-managed-run-service.d.ts +29 -0
- package/dist/service/fake-managed-run-service.js +63 -0
- package/dist/service/fake-managed-run-service.js.map +1 -0
- package/dist/service/managed-runner-session-service.d.ts +10 -0
- package/dist/service/managed-runner-session-service.js +31 -0
- package/dist/service/managed-runner-session-service.js.map +1 -0
- package/dist/service/native-session-projection-service.d.ts +50 -0
- package/dist/service/native-session-projection-service.js +268 -0
- package/dist/service/native-session-projection-service.js.map +1 -0
- package/dist/service/native-session-watch-service.d.ts +37 -0
- package/dist/service/native-session-watch-service.js +151 -0
- package/dist/service/native-session-watch-service.js.map +1 -0
- package/dist/service/node-connection-lifecycle-service.d.ts +37 -0
- package/dist/service/node-connection-lifecycle-service.js +84 -0
- package/dist/service/node-connection-lifecycle-service.js.map +1 -0
- package/dist/service/node-control-channel.d.ts +32 -0
- package/dist/service/node-control-channel.js +84 -0
- package/dist/service/node-control-channel.js.map +1 -0
- package/dist/service/node-control-message-service.d.ts +28 -0
- package/dist/service/node-control-message-service.js +105 -0
- package/dist/service/node-control-message-service.js.map +1 -0
- package/dist/service/node-request-service.d.ts +14 -0
- package/dist/service/node-request-service.js +51 -0
- package/dist/service/node-request-service.js.map +1 -0
- package/dist/service/node-run-event-bridge.d.ts +38 -0
- package/dist/service/node-run-event-bridge.js +80 -0
- package/dist/service/node-run-event-bridge.js.map +1 -0
- package/dist/service/node-terminal-channel.d.ts +29 -0
- package/dist/service/node-terminal-channel.js +176 -0
- package/dist/service/node-terminal-channel.js.map +1 -0
- package/dist/service/node-workspace-coordinator.d.ts +32 -0
- package/dist/service/node-workspace-coordinator.js +81 -0
- package/dist/service/node-workspace-coordinator.js.map +1 -0
- package/dist/service/run-attachment-service.d.ts +37 -0
- package/dist/service/run-attachment-service.js +161 -0
- package/dist/service/run-attachment-service.js.map +1 -0
- package/dist/service/run-domain-state.d.ts +4 -0
- package/dist/service/run-domain-state.js +5 -0
- package/dist/service/run-domain-state.js.map +1 -0
- package/dist/service/run-event-service.d.ts +31 -0
- package/dist/service/run-event-service.js +103 -0
- package/dist/service/run-event-service.js.map +1 -0
- package/dist/service/run-workbench-service.d.ts +27 -0
- package/dist/service/run-workbench-service.js +114 -0
- package/dist/service/run-workbench-service.js.map +1 -0
- package/dist/service/runner-channel-message-service.d.ts +13 -0
- package/dist/service/runner-channel-message-service.js +21 -0
- package/dist/service/runner-channel-message-service.js.map +1 -0
- package/dist/service/runner-interaction-service.d.ts +40 -0
- package/dist/service/runner-interaction-service.js +245 -0
- package/dist/service/runner-interaction-service.js.map +1 -0
- package/dist/service/runner-service.d.ts +43 -0
- package/dist/service/runner-service.js +55 -0
- package/dist/service/runner-service.js.map +1 -0
- package/dist/service/session-catalog-service.d.ts +30 -0
- package/dist/service/session-catalog-service.js +145 -0
- package/dist/service/session-catalog-service.js.map +1 -0
- package/dist/service/session-command-service.d.ts +23 -0
- package/dist/service/session-command-service.js +70 -0
- package/dist/service/session-command-service.js.map +1 -0
- package/dist/service/session-context-service.d.ts +34 -0
- package/dist/service/session-context-service.js +88 -0
- package/dist/service/session-context-service.js.map +1 -0
- package/dist/service/session-domain-state.d.ts +8 -0
- package/dist/service/session-domain-state.js +9 -0
- package/dist/service/session-domain-state.js.map +1 -0
- package/dist/service/session-identity-service.d.ts +24 -0
- package/dist/service/session-identity-service.js +87 -0
- package/dist/service/session-identity-service.js.map +1 -0
- package/dist/service/session-lifecycle-service.d.ts +31 -0
- package/dist/service/session-lifecycle-service.js +236 -0
- package/dist/service/session-lifecycle-service.js.map +1 -0
- package/dist/service/session-message-service.d.ts +33 -0
- package/dist/service/session-message-service.js +158 -0
- package/dist/service/session-message-service.js.map +1 -0
- package/dist/service/session-presentation-service.d.ts +33 -0
- package/dist/service/session-presentation-service.js +37 -0
- package/dist/service/session-presentation-service.js.map +1 -0
- package/dist/service/session-query-service.d.ts +31 -0
- package/dist/service/session-query-service.js +78 -0
- package/dist/service/session-query-service.js.map +1 -0
- package/dist/service/terminal-relay-state.d.ts +6 -0
- package/dist/service/terminal-relay-state.js +4 -0
- package/dist/service/terminal-relay-state.js.map +1 -0
- package/dist/service/terminal-service.d.ts +12 -0
- package/dist/service/terminal-service.js +53 -0
- package/dist/service/terminal-service.js.map +1 -0
- package/dist/service/workbench-event-service.d.ts +21 -0
- package/dist/service/workbench-event-service.js +54 -0
- package/dist/service/workbench-event-service.js.map +1 -0
- package/dist/service/workbench-manifest-service.d.ts +88 -0
- package/dist/service/workbench-manifest-service.js +69 -0
- package/dist/service/workbench-manifest-service.js.map +1 -0
- package/dist/service/workspace-change-service.d.ts +9 -0
- package/dist/service/workspace-change-service.js +86 -0
- package/dist/service/workspace-change-service.js.map +1 -0
- package/dist/service/workspace-domain-state.d.ts +75 -0
- package/dist/service/workspace-domain-state.js +41 -0
- package/dist/service/workspace-domain-state.js.map +1 -0
- package/dist/service/workspace-file-service.d.ts +14 -0
- package/dist/service/workspace-file-service.js +77 -0
- package/dist/service/workspace-file-service.js.map +1 -0
- package/dist/service/workspace-queue-workbench-service.d.ts +55 -0
- package/dist/service/workspace-queue-workbench-service.js +227 -0
- package/dist/service/workspace-queue-workbench-service.js.map +1 -0
- package/dist/service/workspace-service.d.ts +15 -0
- package/dist/service/workspace-service.js +54 -0
- package/dist/service/workspace-service.js.map +1 -0
- package/dist/service/workspace-session-service.d.ts +23 -0
- package/dist/service/workspace-session-service.js +140 -0
- package/dist/service/workspace-session-service.js.map +1 -0
- package/dist/service/workspace-upload-service.d.ts +37 -0
- package/dist/service/workspace-upload-service.js +241 -0
- package/dist/service/workspace-upload-service.js.map +1 -0
- package/dist/service/workspace-watch-service.d.ts +18 -0
- package/dist/service/workspace-watch-service.js +121 -0
- package/dist/service/workspace-watch-service.js.map +1 -0
- package/dist/service/workspace-workbench-service.d.ts +38 -0
- package/dist/service/workspace-workbench-service.js +156 -0
- package/dist/service/workspace-workbench-service.js.map +1 -0
- package/dist/terminal.d.ts +1 -0
- package/dist/terminal.js +1 -1
- package/dist/terminal.js.map +1 -1
- package/dist/util/node-operation-parsers.d.ts +91 -0
- package/dist/util/node-operation-parsers.js +380 -0
- package/dist/util/node-operation-parsers.js.map +1 -0
- package/dist/util/runner-native-session-parsers.d.ts +72 -0
- package/dist/util/runner-native-session-parsers.js +337 -0
- package/dist/util/runner-native-session-parsers.js.map +1 -0
- package/dist/util/secret-environment.d.ts +1 -0
- package/dist/util/secret-environment.js +26 -0
- package/dist/util/secret-environment.js.map +1 -0
- package/dist/workspace.d.ts +9 -2
- package/dist/workspace.js +41 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { stripClaudePlanTag } from '../runner-command-engine.js';
|
|
3
|
+
import { compactRunnerText, isClaudeCommandTool, isPlainRecord, nativeClaudeCommand, nativePageEnd } from './node-operation-parsers.js';
|
|
4
|
+
export function extractId(result, key) {
|
|
5
|
+
if (typeof result === 'object' &&
|
|
6
|
+
result !== null &&
|
|
7
|
+
key in result &&
|
|
8
|
+
typeof result[key] === 'object' &&
|
|
9
|
+
result[key] !== null &&
|
|
10
|
+
typeof result[key]['id'] === 'string') {
|
|
11
|
+
return result[key]['id'];
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`CODEX_${key.toUpperCase()}_ID_MISSING`);
|
|
14
|
+
}
|
|
15
|
+
export async function settleWithin(promise, milliseconds) {
|
|
16
|
+
let timer;
|
|
17
|
+
try {
|
|
18
|
+
return await Promise.race([
|
|
19
|
+
promise,
|
|
20
|
+
new Promise((resolve) => {
|
|
21
|
+
timer = setTimeout(() => resolve(undefined), milliseconds);
|
|
22
|
+
timer.unref();
|
|
23
|
+
})
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
if (timer !== undefined)
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function extractCodexThreads(result) {
|
|
32
|
+
if (typeof result !== 'object' || result === null || !('data' in result))
|
|
33
|
+
return [];
|
|
34
|
+
const data = result.data;
|
|
35
|
+
if (!Array.isArray(data))
|
|
36
|
+
return [];
|
|
37
|
+
return data.flatMap((entry) => {
|
|
38
|
+
if (typeof entry !== 'object' || entry === null)
|
|
39
|
+
return [];
|
|
40
|
+
const value = entry;
|
|
41
|
+
if (typeof value.id !== 'string')
|
|
42
|
+
return [];
|
|
43
|
+
const source = typeof value.sourceKind === 'string'
|
|
44
|
+
? value.sourceKind
|
|
45
|
+
: typeof value.source === 'string'
|
|
46
|
+
? value.source
|
|
47
|
+
: typeof value.source === 'object' &&
|
|
48
|
+
value.source !== null &&
|
|
49
|
+
typeof value.source.kind === 'string'
|
|
50
|
+
? value.source.kind
|
|
51
|
+
: undefined;
|
|
52
|
+
const title = typeof value.name === 'string' && value.name.trim().length > 0
|
|
53
|
+
? value.name.trim()
|
|
54
|
+
: typeof value.preview === 'string' && value.preview.trim().length > 0
|
|
55
|
+
? value.preview.trim()
|
|
56
|
+
: undefined;
|
|
57
|
+
return [{ id: value.id, source, cwd: value.cwd, title }];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function codexThreadActivity(result) {
|
|
61
|
+
if (!isPlainRecord(result) || !isPlainRecord(result.thread))
|
|
62
|
+
return 'UNAVAILABLE';
|
|
63
|
+
const status = result.thread.status;
|
|
64
|
+
if (!isPlainRecord(status) || typeof status.type !== 'string')
|
|
65
|
+
return 'UNAVAILABLE';
|
|
66
|
+
if (status.type === 'active')
|
|
67
|
+
return 'EXTERNAL_ACTIVE';
|
|
68
|
+
if (status.type === 'idle' || status.type === 'notLoaded')
|
|
69
|
+
return 'IDLE';
|
|
70
|
+
return 'UNAVAILABLE';
|
|
71
|
+
}
|
|
72
|
+
export function externalResumeFailureDetail(error) {
|
|
73
|
+
const message = error instanceof Error ? error.message : 'SESSION_RESUME_REJECTED';
|
|
74
|
+
return [...message]
|
|
75
|
+
.map((character) => (character <= '\u001f' || character === '\u007f' ? ' ' : character))
|
|
76
|
+
.join('')
|
|
77
|
+
.replace(/\s+/g, ' ')
|
|
78
|
+
.trim()
|
|
79
|
+
.slice(0, 240);
|
|
80
|
+
}
|
|
81
|
+
export function codexActiveTurnId(result) {
|
|
82
|
+
if (!isPlainRecord(result) ||
|
|
83
|
+
!isPlainRecord(result.thread) ||
|
|
84
|
+
!Array.isArray(result.thread.turns))
|
|
85
|
+
return undefined;
|
|
86
|
+
const active = result.thread.turns.find((turn) => isPlainRecord(turn) &&
|
|
87
|
+
typeof turn.id === 'string' &&
|
|
88
|
+
(turn.status === 'active' || turn.status === 'inProgress'));
|
|
89
|
+
return isPlainRecord(active) && typeof active.id === 'string' ? active.id : undefined;
|
|
90
|
+
}
|
|
91
|
+
export function codexThreadCwd(value) {
|
|
92
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
93
|
+
throw new Error('CODEX_THREAD_CWD_INVALID');
|
|
94
|
+
if (!value.startsWith('file:'))
|
|
95
|
+
return value;
|
|
96
|
+
try {
|
|
97
|
+
return fileURLToPath(value);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
throw new Error('CODEX_THREAD_CWD_INVALID');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function isWithinWorkspace(cwd, workspacePath) {
|
|
104
|
+
const normalize = (value) => {
|
|
105
|
+
const compact = value.replace(/[\\/]+/g, '/').replace(/\/$/, '');
|
|
106
|
+
return process.platform === 'win32' ? compact.toLowerCase() : compact;
|
|
107
|
+
};
|
|
108
|
+
const normalizedCwd = normalize(cwd);
|
|
109
|
+
const normalizedWorkspace = normalize(workspacePath);
|
|
110
|
+
if (normalizedCwd === normalizedWorkspace)
|
|
111
|
+
return true;
|
|
112
|
+
return normalizedCwd.startsWith(`${normalizedWorkspace}/`);
|
|
113
|
+
}
|
|
114
|
+
export function claudeDiscoveredSession(value, fallbackCwd) {
|
|
115
|
+
if (typeof value !== 'object' || value === null)
|
|
116
|
+
return undefined;
|
|
117
|
+
const record = value;
|
|
118
|
+
const externalSessionId = typeof record.sessionId === 'string'
|
|
119
|
+
? record.sessionId
|
|
120
|
+
: typeof record.id === 'string'
|
|
121
|
+
? record.id
|
|
122
|
+
: undefined;
|
|
123
|
+
if (externalSessionId === undefined || externalSessionId.length === 0)
|
|
124
|
+
return undefined;
|
|
125
|
+
const title = typeof record.summary === 'string'
|
|
126
|
+
? record.summary
|
|
127
|
+
: typeof record.title === 'string'
|
|
128
|
+
? record.title
|
|
129
|
+
: undefined;
|
|
130
|
+
const cwd = typeof record.cwd === 'string' && record.cwd.length > 0 ? record.cwd : fallbackCwd;
|
|
131
|
+
return { externalSessionId, cwd, ...(title === undefined ? {} : { title: title.slice(0, 80) }) };
|
|
132
|
+
}
|
|
133
|
+
export function latestNativeActivity(history) {
|
|
134
|
+
return history.lastActivityAt;
|
|
135
|
+
}
|
|
136
|
+
export function sameContextUsage(left, right) {
|
|
137
|
+
return (left.model === right.model &&
|
|
138
|
+
left.usedTokens === right.usedTokens &&
|
|
139
|
+
left.maxTokens === right.maxTokens);
|
|
140
|
+
}
|
|
141
|
+
export function isNativeHistory(value) {
|
|
142
|
+
return (typeof value === 'object' &&
|
|
143
|
+
value !== null &&
|
|
144
|
+
Array.isArray(value.items));
|
|
145
|
+
}
|
|
146
|
+
export function deduplicateDirectSessions(sessions) {
|
|
147
|
+
const values = new Map();
|
|
148
|
+
for (const session of sessions) {
|
|
149
|
+
const existing = values.get(session.id);
|
|
150
|
+
if (existing === undefined || existing.lastActivityAt < session.lastActivityAt)
|
|
151
|
+
values.set(session.id, session);
|
|
152
|
+
}
|
|
153
|
+
return [...values.values()].sort((left, right) => right.lastActivityAt - left.lastActivityAt);
|
|
154
|
+
}
|
|
155
|
+
export function nativeConversationPage(session, history, input, runtimeTurns = [], registerImages = () => []) {
|
|
156
|
+
const limit = Math.min(Math.max(input.limit ?? 30, 1), 500);
|
|
157
|
+
const end = nativePageEnd(input.cursor, session.id, history.items.length);
|
|
158
|
+
const start = Math.max(0, end - limit);
|
|
159
|
+
const turns = history.items.slice(start, end).map((entry, offset) => {
|
|
160
|
+
const index = start + offset;
|
|
161
|
+
const time = entry.createdAt ?? index;
|
|
162
|
+
const turnId = `${session.id}:native:${index}`;
|
|
163
|
+
const isToolCall = entry.kind === 'tool_call';
|
|
164
|
+
const isCommand = isToolCall && isClaudeCommandTool(entry.toolName);
|
|
165
|
+
const userInputQuestions = session.runner === 'claude-code' &&
|
|
166
|
+
isToolCall &&
|
|
167
|
+
entry.toolName === 'AskUserQuestion' &&
|
|
168
|
+
isPlainRecord(entry.input)
|
|
169
|
+
? claudeUserInputQuestions(entry.input)
|
|
170
|
+
: [];
|
|
171
|
+
const isUserInputRequest = userInputQuestions.length > 0;
|
|
172
|
+
const clientMessageId = !isToolCall && entry.role === 'USER'
|
|
173
|
+
? nativeUserClientMessageId(entry, time, runtimeTurns)
|
|
174
|
+
: null;
|
|
175
|
+
// Claude 标签式 Plan Mode:用户正文剥离注入的规划指令标签,
|
|
176
|
+
// 完整的 <proposed_plan> Agent 文本归一化为计划卡。
|
|
177
|
+
const entryText = entry.kind === 'message'
|
|
178
|
+
? entry.role === 'USER'
|
|
179
|
+
? stripClaudePlanTag(entry.text)
|
|
180
|
+
: entry.text
|
|
181
|
+
: '';
|
|
182
|
+
const planText = entry.kind === 'message' && entry.role !== 'USER' ? claudePlanText(entryText) : undefined;
|
|
183
|
+
const item = {
|
|
184
|
+
id: `${turnId}:item`,
|
|
185
|
+
sessionId: session.id,
|
|
186
|
+
turnId,
|
|
187
|
+
runId: null,
|
|
188
|
+
parentItemId: null,
|
|
189
|
+
sourceSequence: index,
|
|
190
|
+
revision: 0,
|
|
191
|
+
kind: isUserInputRequest
|
|
192
|
+
? 'user_input_request'
|
|
193
|
+
: isToolCall
|
|
194
|
+
? isCommand
|
|
195
|
+
? 'command_execution'
|
|
196
|
+
: 'tool_call'
|
|
197
|
+
: entry.role === 'USER'
|
|
198
|
+
? 'user_message'
|
|
199
|
+
: planText !== undefined
|
|
200
|
+
? 'plan'
|
|
201
|
+
: 'assistant_message',
|
|
202
|
+
status: 'COMPLETED',
|
|
203
|
+
payload: isUserInputRequest
|
|
204
|
+
? {
|
|
205
|
+
requestId: `native:${entry.kind === 'tool_call' ? entry.toolUseId : `item-${index}`}`,
|
|
206
|
+
questions: userInputQuestions
|
|
207
|
+
}
|
|
208
|
+
: isToolCall
|
|
209
|
+
? isCommand
|
|
210
|
+
? {
|
|
211
|
+
command: nativeClaudeCommand(entry),
|
|
212
|
+
cwd: null,
|
|
213
|
+
outputPreview: entry.outputSummary ?? '',
|
|
214
|
+
outputRef: null,
|
|
215
|
+
exitCode: null,
|
|
216
|
+
durationMs: null,
|
|
217
|
+
truncated: entry.inputTruncated || entry.outputTruncated
|
|
218
|
+
}
|
|
219
|
+
: {
|
|
220
|
+
namespace: session.runner,
|
|
221
|
+
toolName: entry.toolName,
|
|
222
|
+
title: entry.toolName,
|
|
223
|
+
inputSummary: entry.inputSummary,
|
|
224
|
+
outputSummary: entry.outputSummary,
|
|
225
|
+
progressLabel: null,
|
|
226
|
+
errorCode: entry.failed ? 'TOOL_EXECUTION_FAILED' : null,
|
|
227
|
+
truncated: entry.inputTruncated || entry.outputTruncated,
|
|
228
|
+
...(entry.imageAttachments === undefined
|
|
229
|
+
? {}
|
|
230
|
+
: { attachments: registerImages(entry.imageAttachments) })
|
|
231
|
+
}
|
|
232
|
+
: entry.role === 'USER'
|
|
233
|
+
? { clientMessageId, text: entryText, contexts: [], delivery: 'ACCEPTED' }
|
|
234
|
+
: planText !== undefined
|
|
235
|
+
? { explanation: compactRunnerText(planText, 20_000), steps: [] }
|
|
236
|
+
: { text: entryText, format: 'markdown', source: 'native-file' },
|
|
237
|
+
startedAt: time,
|
|
238
|
+
completedAt: time
|
|
239
|
+
};
|
|
240
|
+
return {
|
|
241
|
+
id: turnId,
|
|
242
|
+
sessionId: session.id,
|
|
243
|
+
runId: null,
|
|
244
|
+
userItemId: !isToolCall && entry.role === 'USER' ? item.id : null,
|
|
245
|
+
status: 'SUCCEEDED',
|
|
246
|
+
model: null,
|
|
247
|
+
effort: null,
|
|
248
|
+
access: null,
|
|
249
|
+
items: [item],
|
|
250
|
+
startedAt: time,
|
|
251
|
+
completedAt: time
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
return {
|
|
255
|
+
turns,
|
|
256
|
+
nextCursor: start > 0
|
|
257
|
+
? Buffer.from(JSON.stringify({ sessionId: session.id, end: start })).toString('base64url')
|
|
258
|
+
: null
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Claude JSONL 不保存浏览器请求 ID。Node 进程仍存活时,以正文和生成时刻
|
|
263
|
+
* 对齐当前运行态的用户消息,让 native 历史页替换同一乐观 Turn,而不是重复一条。
|
|
264
|
+
*/
|
|
265
|
+
export function nativeUserClientMessageId(entry, createdAt, runtimeTurns) {
|
|
266
|
+
for (const turn of runtimeTurns) {
|
|
267
|
+
const user = turn.items.find((item) => item.kind === 'user_message');
|
|
268
|
+
if (user === undefined || !isPlainRecord(user.payload))
|
|
269
|
+
continue;
|
|
270
|
+
const payload = user.payload;
|
|
271
|
+
const clientMessageId = typeof payload.clientMessageId === 'string' ? payload.clientMessageId : null;
|
|
272
|
+
// 标签式 Plan Mode 的指令标签只存在于原生 transcript,运行态气泡始终是原文。
|
|
273
|
+
if (clientMessageId === null || payload.text !== stripClaudePlanTag(entry.text))
|
|
274
|
+
continue;
|
|
275
|
+
const runtimeCreatedAt = user.startedAt ?? turn.startedAt;
|
|
276
|
+
if (runtimeCreatedAt !== null &&
|
|
277
|
+
runtimeCreatedAt !== undefined &&
|
|
278
|
+
Math.abs(createdAt - runtimeCreatedAt) > 60_000)
|
|
279
|
+
continue;
|
|
280
|
+
return clientMessageId;
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Normalize the documented App Server `thread/read(includeTurns: true)`
|
|
286
|
+
* result. Only items with a user-visible Workbench representation are kept;
|
|
287
|
+
* raw protocol envelopes are deliberately never exposed to Web.
|
|
288
|
+
*/
|
|
289
|
+
export function claudePlanText(text) {
|
|
290
|
+
const trimmed = text.trim();
|
|
291
|
+
if (!trimmed.startsWith('<proposed_plan>') || !/<\/proposed_plan>\s*$/.test(trimmed))
|
|
292
|
+
return undefined;
|
|
293
|
+
const plan = trimmed
|
|
294
|
+
.slice('<proposed_plan>'.length)
|
|
295
|
+
.replace(/<\/proposed_plan>\s*$/, '')
|
|
296
|
+
.trim();
|
|
297
|
+
return plan.length > 0 ? plan : undefined;
|
|
298
|
+
}
|
|
299
|
+
export function claudeUserInputQuestions(value) {
|
|
300
|
+
if (!Array.isArray(value.questions) || value.questions.length === 0 || value.questions.length > 4)
|
|
301
|
+
return [];
|
|
302
|
+
const questions = value.questions.map((raw, index) => {
|
|
303
|
+
if (!isPlainRecord(raw) || typeof raw.question !== 'string')
|
|
304
|
+
return undefined;
|
|
305
|
+
const options = Array.isArray(raw.options)
|
|
306
|
+
? raw.options.flatMap((option) => {
|
|
307
|
+
if (!isPlainRecord(option) || typeof option.label !== 'string')
|
|
308
|
+
return [];
|
|
309
|
+
const label = compactRunnerText(option.label, 500);
|
|
310
|
+
return label.length === 0
|
|
311
|
+
? []
|
|
312
|
+
: [
|
|
313
|
+
{
|
|
314
|
+
value: label,
|
|
315
|
+
label,
|
|
316
|
+
description: typeof option.description === 'string'
|
|
317
|
+
? compactRunnerText(option.description, 1_000)
|
|
318
|
+
: null
|
|
319
|
+
}
|
|
320
|
+
];
|
|
321
|
+
})
|
|
322
|
+
: [];
|
|
323
|
+
const multiSelect = raw.multiSelect === true;
|
|
324
|
+
return {
|
|
325
|
+
id: `claude-question-${index}`,
|
|
326
|
+
prompt: compactRunnerText(raw.question, 5_000),
|
|
327
|
+
input: options.length === 0 ? 'SHORT_TEXT' : multiSelect ? 'MULTI_SELECT' : 'SINGLE_SELECT',
|
|
328
|
+
options,
|
|
329
|
+
allowOther: options.length === 0,
|
|
330
|
+
multiSelect
|
|
331
|
+
};
|
|
332
|
+
});
|
|
333
|
+
return questions.some((question) => question === undefined)
|
|
334
|
+
? []
|
|
335
|
+
: questions;
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=runner-native-session-parsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-native-session-parsers.js","sourceRoot":"","sources":["../../src/util/runner-native-session-parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function parseSecretEnvironment(value: unknown): Readonly<Record<string, string>>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const ENVIRONMENT_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/;
|
|
2
|
+
const MAX_SECRET_COUNT = 128;
|
|
3
|
+
const MAX_SECRET_VALUE_BYTES = 16 * 1024;
|
|
4
|
+
const MAX_SECRET_TOTAL_BYTES = 64 * 1024;
|
|
5
|
+
export function parseSecretEnvironment(value) {
|
|
6
|
+
if (value === undefined)
|
|
7
|
+
return {};
|
|
8
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
9
|
+
throw new Error('SECRET_ENVIRONMENT_INVALID');
|
|
10
|
+
const entries = Object.entries(value);
|
|
11
|
+
if (entries.length > MAX_SECRET_COUNT)
|
|
12
|
+
throw new Error('SECRET_ENVIRONMENT_LIMIT_EXCEEDED');
|
|
13
|
+
const environment = {};
|
|
14
|
+
let bytes = 0;
|
|
15
|
+
for (const [name, secret] of entries) {
|
|
16
|
+
if (!ENVIRONMENT_NAME.test(name) || typeof secret !== 'string' || secret.includes('\0'))
|
|
17
|
+
throw new Error('SECRET_ENVIRONMENT_INVALID');
|
|
18
|
+
const valueBytes = Buffer.byteLength(secret);
|
|
19
|
+
bytes += Buffer.byteLength(name) + valueBytes;
|
|
20
|
+
if (valueBytes > MAX_SECRET_VALUE_BYTES || bytes > MAX_SECRET_TOTAL_BYTES)
|
|
21
|
+
throw new Error('SECRET_ENVIRONMENT_LIMIT_EXCEEDED');
|
|
22
|
+
environment[name] = secret;
|
|
23
|
+
}
|
|
24
|
+
return environment;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=secret-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-environment.js","sourceRoot":"","sources":["../../src/util/secret-environment.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,GAAG,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC5F,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC9C,IAAI,UAAU,GAAG,sBAAsB,IAAI,KAAK,GAAG,sBAAsB;YACvE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC7B,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -111,15 +111,23 @@ export declare function readRestrictedDiff(workspacePath: string, fromRef: strin
|
|
|
111
111
|
readonly summary?: string;
|
|
112
112
|
readonly truncated: boolean;
|
|
113
113
|
}>;
|
|
114
|
-
type CurrentChange = {
|
|
114
|
+
export type CurrentChange = {
|
|
115
115
|
readonly path: string;
|
|
116
116
|
readonly state: 'STAGED' | 'UNSTAGED' | 'UNTRACKED';
|
|
117
117
|
readonly change: 'ADDED' | 'MODIFIED' | 'DELETED' | 'RENAMED' | 'COPIED' | 'TYPE_CHANGED';
|
|
118
118
|
};
|
|
119
|
+
export interface CurrentChangesRepository {
|
|
120
|
+
readonly repositoryPath: string;
|
|
121
|
+
readonly repositoryName: string;
|
|
122
|
+
readonly branch: string | null;
|
|
123
|
+
readonly changes: readonly CurrentChange[];
|
|
124
|
+
}
|
|
119
125
|
export declare function readCurrentChangesSummary(workspacePath: string): Promise<{
|
|
120
126
|
readonly branch: string | null;
|
|
121
127
|
readonly changes: readonly CurrentChange[];
|
|
122
128
|
}>;
|
|
129
|
+
export declare function listInitializedSubmodulePaths(workspacePath: string): Promise<readonly string[]>;
|
|
130
|
+
export declare function resolveGitRepository(workspacePath: string, repositoryPath: string): Promise<string>;
|
|
123
131
|
export declare function readCurrentChanges(workspacePath: string): Promise<readonly {
|
|
124
132
|
readonly path: string;
|
|
125
133
|
readonly state: 'STAGED' | 'UNSTAGED' | 'UNTRACKED';
|
|
@@ -141,4 +149,3 @@ export declare class GitCommandError extends Error {
|
|
|
141
149
|
readonly stderr: string;
|
|
142
150
|
constructor(code: number, stderr: string);
|
|
143
151
|
}
|
|
144
|
-
export {};
|
package/dist/workspace.js
CHANGED
|
@@ -738,6 +738,44 @@ export async function readCurrentChangesSummary(workspacePath) {
|
|
|
738
738
|
changes: output
|
|
739
739
|
};
|
|
740
740
|
}
|
|
741
|
+
export async function listInitializedSubmodulePaths(workspacePath) {
|
|
742
|
+
const result = await runGit(workspacePath, ['submodule', 'status', '--recursive']);
|
|
743
|
+
return result.text
|
|
744
|
+
.split(/\r?\n/)
|
|
745
|
+
.flatMap((line) => {
|
|
746
|
+
if (line.length < 42)
|
|
747
|
+
return [];
|
|
748
|
+
const marker = line[0];
|
|
749
|
+
if (marker === '-')
|
|
750
|
+
return [];
|
|
751
|
+
const match = /^.[0-9a-f]+\s+(.+?)(?:\s+\([^)]*\))?$/.exec(line);
|
|
752
|
+
const path = match?.[1]?.replaceAll('\\', '/');
|
|
753
|
+
return path === undefined || path.length === 0 ? [] : [path];
|
|
754
|
+
})
|
|
755
|
+
.sort((left, right) => left.localeCompare(right));
|
|
756
|
+
}
|
|
757
|
+
export async function resolveGitRepository(workspacePath, repositoryPath) {
|
|
758
|
+
if (repositoryPath.length === 0)
|
|
759
|
+
return realpath(workspacePath);
|
|
760
|
+
if (repositoryPath.includes('\0') ||
|
|
761
|
+
repositoryPath.startsWith('/') ||
|
|
762
|
+
repositoryPath.startsWith('\\') ||
|
|
763
|
+
repositoryPath
|
|
764
|
+
.split('/')
|
|
765
|
+
.some((segment) => segment.length === 0 || segment === '.' || segment === '..'))
|
|
766
|
+
throw new Error('GIT_REPOSITORY_INVALID');
|
|
767
|
+
const repositories = await listInitializedSubmodulePaths(workspacePath);
|
|
768
|
+
if (!repositories.includes(repositoryPath))
|
|
769
|
+
throw new Error('GIT_REPOSITORY_INVALID');
|
|
770
|
+
const repository = resolve(await realpath(workspacePath), repositoryPath);
|
|
771
|
+
try {
|
|
772
|
+
await readGitSummary(repository);
|
|
773
|
+
}
|
|
774
|
+
catch {
|
|
775
|
+
throw new Error('GIT_REPOSITORY_INVALID');
|
|
776
|
+
}
|
|
777
|
+
return repository;
|
|
778
|
+
}
|
|
741
779
|
export async function readCurrentChanges(workspacePath) {
|
|
742
780
|
return (await readCurrentChangesSummary(workspacePath)).changes;
|
|
743
781
|
}
|
|
@@ -807,6 +845,9 @@ async function readWorkingTreeText(workspacePath, path) {
|
|
|
807
845
|
return undefined;
|
|
808
846
|
throw error;
|
|
809
847
|
}
|
|
848
|
+
const metadata = await lstat(file);
|
|
849
|
+
if (!metadata.isFile())
|
|
850
|
+
return undefined;
|
|
810
851
|
const source = await readFile(file);
|
|
811
852
|
return diffTextFromBuffer(source, source.length > GIT_OUTPUT_LIMIT);
|
|
812
853
|
}
|