@myagentroam/node 0.9.0 → 0.9.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/dist/connector.d.ts +2 -0
- package/dist/connector.js +50 -25
- package/dist/control-outbound-scheduler.d.ts +4 -1
- package/dist/control-outbound-scheduler.js +39 -6
- package/dist/database.d.ts +0 -19
- package/dist/database.js +1 -62
- package/dist/event-buffer.d.ts +2 -5
- package/dist/event-buffer.js +3 -12
- package/dist/native-session-history.js +105 -26
- package/dist/runner/abstract-runner.d.ts +1 -1
- package/dist/runner/abstract-runner.js +2 -2
- package/dist/runner/claude/managed-run-controller.d.ts +0 -1
- package/dist/runner/claude/managed-run-controller.js +32 -17
- package/dist/runner/claude-code-runner.js +3 -4
- package/dist/runner/codex/conversation-parser.d.ts +3 -3
- package/dist/runner/codex/conversation-parser.js +33 -12
- package/dist/runner/codex/managed-run-controller.d.ts +2 -2
- package/dist/runner/codex/managed-run-controller.js +26 -10
- package/dist/runner/codex-runner.d.ts +3 -1
- package/dist/runner/codex-runner.js +40 -10
- package/dist/runner/opencode/conversation-parser.d.ts +11 -7
- package/dist/runner/opencode/conversation-parser.js +16 -16
- package/dist/runner/opencode/managed-run-controller.d.ts +8 -2
- package/dist/runner/opencode/managed-run-controller.js +94 -22
- package/dist/runner/opencode-runner.d.ts +3 -0
- package/dist/runner/opencode-runner.js +25 -0
- package/dist/runner-command-engine.js +1 -1
- package/dist/runner-profiles.js +29 -17
- package/dist/runner-usage.js +5 -5
- package/dist/runtime-state.d.ts +5 -12
- package/dist/runtime-state.js +32 -46
- package/dist/service/attachment-domain-state.d.ts +2 -0
- package/dist/service/attachment-domain-state.js +2 -0
- package/dist/service/conversation-history-service.js +55 -24
- package/dist/service/conversation-segment-service.d.ts +20 -0
- package/dist/service/conversation-segment-service.js +156 -0
- package/dist/service/external-session-resume-service.js +9 -0
- package/dist/service/fake-managed-run-service.d.ts +0 -1
- package/dist/service/fake-managed-run-service.js +0 -2
- package/dist/service/mcp-installation-verifier.js +1 -1
- package/dist/service/native-session-projection-service.js +5 -0
- package/dist/service/native-session-watch-service.d.ts +1 -0
- package/dist/service/native-session-watch-service.js +21 -4
- package/dist/service/node-connection-lifecycle-service.d.ts +0 -2
- package/dist/service/node-connection-lifecycle-service.js +0 -1
- package/dist/service/node-control-channel.js +1 -1
- package/dist/service/node-control-message-service.d.ts +0 -1
- package/dist/service/node-control-message-service.js +9 -6
- package/dist/service/node-request-service.js +2 -1
- package/dist/service/node-workspace-coordinator.d.ts +1 -4
- package/dist/service/node-workspace-coordinator.js +2 -12
- package/dist/service/run-attachment-service.d.ts +3 -2
- package/dist/service/run-attachment-service.js +51 -17
- package/dist/service/run-event-service.d.ts +2 -0
- package/dist/service/run-event-service.js +77 -2
- package/dist/service/run-workbench-service.d.ts +1 -1
- package/dist/service/run-workbench-service.js +1 -5
- package/dist/service/runner-interaction-service.d.ts +1 -2
- package/dist/service/runner-interaction-service.js +1 -4
- package/dist/service/session-catalog-service.js +4 -4
- package/dist/service/session-context-service.d.ts +1 -0
- package/dist/service/session-context-service.js +14 -0
- package/dist/service/session-domain-state.d.ts +1 -0
- package/dist/service/session-domain-state.js +1 -0
- package/dist/service/session-message-service.js +5 -10
- package/dist/service/session-presentation-service.d.ts +1 -0
- package/dist/service/session-presentation-service.js +8 -1
- package/dist/service/session-query-service.d.ts +4 -0
- package/dist/service/session-query-service.js +6 -1
- package/dist/service/skill-directory-service.d.ts +3 -1
- package/dist/service/skill-directory-service.js +31 -30
- package/dist/service/skill-install-service.js +4 -74
- package/dist/service/skill-node-operation-service.d.ts +1 -1
- package/dist/service/skill-node-operation-service.js +6 -3
- package/dist/service/workbench-event-service.d.ts +1 -13
- package/dist/service/workbench-event-service.js +2 -36
- package/dist/service/workbench-manifest-service.d.ts +0 -1
- package/dist/service/workbench-manifest-service.js +0 -1
- package/dist/service/workspace-domain-state.d.ts +1 -0
- package/dist/service/workspace-git-exclude-service.d.ts +4 -0
- package/dist/service/workspace-git-exclude-service.js +119 -0
- package/dist/service/workspace-queue-workbench-service.d.ts +1 -0
- package/dist/service/workspace-queue-workbench-service.js +4 -2
- package/dist/service/workspace-service.js +2 -0
- package/dist/service/workspace-upload-service.d.ts +2 -0
- package/dist/service/workspace-upload-service.js +28 -6
- package/dist/service/workspace-workbench-service.d.ts +0 -3
- package/dist/service/workspace-workbench-service.js +0 -17
- package/dist/supervisor.js +2 -1
- package/dist/terminal.js +1 -1
- package/dist/util/node-operation-parsers.js +2 -2
- package/dist/util/runner-error.d.ts +6 -0
- package/dist/util/runner-error.js +52 -0
- package/dist/util/runner-native-session-parsers.d.ts +2 -3
- package/dist/util/runner-native-session-parsers.js +48 -20
- package/dist/util/safe-error.d.ts +2 -0
- package/dist/util/safe-error.js +5 -0
- package/package.json +2 -2
|
@@ -69,15 +69,6 @@ export function codexThreadActivity(result) {
|
|
|
69
69
|
return 'IDLE';
|
|
70
70
|
return 'UNAVAILABLE';
|
|
71
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
72
|
export function codexActiveTurnId(result) {
|
|
82
73
|
if (!isPlainRecord(result) ||
|
|
83
74
|
!isPlainRecord(result.thread) ||
|
|
@@ -155,23 +146,49 @@ export function deduplicateDirectSessions(sessions) {
|
|
|
155
146
|
export function nativeConversationPage(session, history, input, runtimeTurns = [], registerImages = () => []) {
|
|
156
147
|
const limit = Math.min(Math.max(input.limit ?? 30, 1), 500);
|
|
157
148
|
const nativeTurns = nativeTranscriptTurns(history.items);
|
|
149
|
+
const representedClientMessageIds = new Set(nativeTurns.flatMap((entries) => entries.flatMap(({ entry, index }) => {
|
|
150
|
+
if (entry.kind !== 'message' || entry.role !== 'USER')
|
|
151
|
+
return [];
|
|
152
|
+
const clientMessageId = nativeUserClientMessageId(entry, entry.createdAt ?? index, runtimeTurns);
|
|
153
|
+
return clientMessageId === null ? [] : [clientMessageId];
|
|
154
|
+
})));
|
|
155
|
+
const missingRuntimeErrorTurns = input.cursor === undefined
|
|
156
|
+
? runtimeTurns.filter((turn) => {
|
|
157
|
+
const clientMessageId = runtimeTurnClientMessageId(turn);
|
|
158
|
+
return (turn.items.some((item) => item.kind === 'error') &&
|
|
159
|
+
(clientMessageId === undefined || !representedClientMessageIds.has(clientMessageId)));
|
|
160
|
+
})
|
|
161
|
+
: [];
|
|
158
162
|
const end = nativePageEnd(input.cursor, session.id, nativeTurns.length);
|
|
159
163
|
const start = Math.max(0, end - limit);
|
|
160
|
-
const
|
|
164
|
+
const nativePageTurns = nativeTurns
|
|
161
165
|
.slice(start, end)
|
|
162
166
|
.map((entries, relativeIndex) => {
|
|
163
167
|
const firstIndex = entries[0]?.index ?? 0;
|
|
164
168
|
const turnId = `${session.id}:native:${firstIndex}`;
|
|
165
|
-
const
|
|
169
|
+
const nativeItems = entries.map(({ entry, index }) => nativeTranscriptConversationItem(session, entry, index, turnId, runtimeTurns, registerImages));
|
|
170
|
+
const clientMessageId = nativeItems.flatMap((item) => item.kind === 'user_message' && isPlainRecord(item.payload)
|
|
171
|
+
? [item.payload.clientMessageId]
|
|
172
|
+
: [])[0];
|
|
173
|
+
const runtimeTurn = typeof clientMessageId === 'string'
|
|
174
|
+
? runtimeTurns.find((turn) => runtimeTurnClientMessageId(turn) === clientMessageId)
|
|
175
|
+
: undefined;
|
|
176
|
+
const runtimeErrors = (runtimeTurn?.items ?? [])
|
|
177
|
+
.filter((item) => item.kind === 'error')
|
|
178
|
+
.map((item) => ({ ...item, turnId, runId: runtimeTurn?.runId ?? null }));
|
|
179
|
+
const items = [
|
|
180
|
+
...nativeItems,
|
|
181
|
+
...runtimeErrors.filter((error) => !nativeItems.some((item) => item.id === error.id))
|
|
182
|
+
];
|
|
166
183
|
const startedAt = items[0]?.startedAt ?? firstIndex;
|
|
167
184
|
const completedAt = items.at(-1)?.completedAt ?? startedAt;
|
|
168
185
|
const after = lastNativeItemId(entries);
|
|
169
186
|
return {
|
|
170
187
|
id: turnId,
|
|
171
188
|
sessionId: session.id,
|
|
172
|
-
runId: null,
|
|
189
|
+
runId: runtimeTurn?.runId ?? null,
|
|
173
190
|
userItemId: items.find((item) => item.kind === 'user_message')?.id ?? null,
|
|
174
|
-
status: 'SUCCEEDED',
|
|
191
|
+
status: runtimeErrors.length > 0 ? 'FAILED' : 'SUCCEEDED',
|
|
175
192
|
model: null,
|
|
176
193
|
effort: null,
|
|
177
194
|
access: null,
|
|
@@ -188,13 +205,24 @@ export function nativeConversationPage(session, history, input, runtimeTurns = [
|
|
|
188
205
|
completedAt
|
|
189
206
|
};
|
|
190
207
|
});
|
|
208
|
+
const combined = [...nativePageTurns, ...missingRuntimeErrorTurns].sort((left, right) => (left.startedAt ?? 0) - (right.startedAt ?? 0));
|
|
209
|
+
const dropped = combined.slice(0, Math.max(0, combined.length - limit));
|
|
210
|
+
const turns = combined.slice(-limit);
|
|
211
|
+
const nativePageIds = new Set(nativePageTurns.map((turn) => turn.id));
|
|
212
|
+
const nextEnd = start + dropped.filter((turn) => nativePageIds.has(turn.id)).length;
|
|
191
213
|
return {
|
|
192
214
|
turns,
|
|
193
|
-
nextCursor:
|
|
194
|
-
? Buffer.from(JSON.stringify({ sessionId: session.id, end:
|
|
215
|
+
nextCursor: nextEnd > 0
|
|
216
|
+
? Buffer.from(JSON.stringify({ sessionId: session.id, end: nextEnd })).toString('base64url')
|
|
195
217
|
: null
|
|
196
218
|
};
|
|
197
219
|
}
|
|
220
|
+
function runtimeTurnClientMessageId(turn) {
|
|
221
|
+
const user = turn.items.find((item) => item.kind === 'user_message');
|
|
222
|
+
return isPlainRecord(user?.payload) && typeof user.payload.clientMessageId === 'string'
|
|
223
|
+
? user.payload.clientMessageId
|
|
224
|
+
: undefined;
|
|
225
|
+
}
|
|
198
226
|
function lastNativeItemId(entries) {
|
|
199
227
|
return entries.findLast(({ entry }) => entry.nativeId !== undefined)?.entry.nativeId;
|
|
200
228
|
}
|
|
@@ -228,8 +256,8 @@ function nativeTranscriptConversationItem(session, entry, index, turnId, runtime
|
|
|
228
256
|
const clientMessageId = entry.kind === 'message' && entry.role === 'USER'
|
|
229
257
|
? nativeUserClientMessageId(entry, time, runtimeTurns)
|
|
230
258
|
: null;
|
|
231
|
-
// Claude
|
|
232
|
-
//
|
|
259
|
+
// Claude tagged Plan Mode strips the injected planning instruction label from user content
|
|
260
|
+
// and normalizes a complete <proposed_plan> Agent response into a plan card.
|
|
233
261
|
const entryText = entry.kind === 'message'
|
|
234
262
|
? entry.role === 'USER'
|
|
235
263
|
? stripClaudePlanTag(entry.text)
|
|
@@ -304,8 +332,8 @@ function nativeTranscriptConversationItem(session, entry, index, turnId, runtime
|
|
|
304
332
|
return item;
|
|
305
333
|
}
|
|
306
334
|
/**
|
|
307
|
-
* Claude JSONL
|
|
308
|
-
*
|
|
335
|
+
* Claude JSONL does not retain browser request IDs. While the Node process is alive, match current
|
|
336
|
+
* runtime user messages by content and creation time so native history replaces the optimistic Turn.
|
|
309
337
|
*/
|
|
310
338
|
export function nativeUserClientMessageId(entry, createdAt, runtimeTurns) {
|
|
311
339
|
for (const turn of runtimeTurns) {
|
|
@@ -314,7 +342,7 @@ export function nativeUserClientMessageId(entry, createdAt, runtimeTurns) {
|
|
|
314
342
|
continue;
|
|
315
343
|
const payload = user.payload;
|
|
316
344
|
const clientMessageId = typeof payload.clientMessageId === 'string' ? payload.clientMessageId : null;
|
|
317
|
-
//
|
|
345
|
+
// Tagged Plan Mode instruction labels exist only in native transcripts; runtime bubbles retain the original content.
|
|
318
346
|
if (clientMessageId === null || payload.text !== stripClaudePlanTag(entry.text))
|
|
319
347
|
continue;
|
|
320
348
|
const runtimeCreatedAt = user.startedAt ?? turn.startedAt;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const STABLE_ERROR_CODE = /^[A-Z][A-Z0-9_]{0,127}$/u;
|
|
2
|
+
/** Returns only a stable public error code, never a raw runtime exception message. */
|
|
3
|
+
export function safeErrorCode(error, fallback) {
|
|
4
|
+
return error instanceof Error && STABLE_ERROR_CODE.test(error.message) ? error.message : fallback;
|
|
5
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@myagentroam/node",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "MyAgentRoam Node runtime CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"node-pty": "1.1.0",
|
|
25
25
|
"ws": "^8.21.3",
|
|
26
26
|
"zod": "4.4.3",
|
|
27
|
-
"@myagentroam/protocol": "^0.9.
|
|
27
|
+
"@myagentroam/protocol": "^0.9.3"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/ws": "^8.18.1"
|