@myagentroam/node 0.11.36 → 0.11.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/application/execution-lifecycle.js +54 -0
  2. package/dist/application/node-lifecycle.js +104 -0
  3. package/dist/application/node-operation-admission.js +51 -0
  4. package/dist/application/node-operation-contracts.js +1 -0
  5. package/dist/application/runner-composition.js +22 -0
  6. package/dist/application/session-projection-composition.js +26 -0
  7. package/dist/application/workspace-application.js +61 -0
  8. package/dist/application/workspace-composition.js +21 -0
  9. package/dist/capabilities.js +2 -3
  10. package/dist/codex-app-server.js +1 -471
  11. package/dist/connection/authorization.js +26 -0
  12. package/dist/{service → connection}/direct-transfer-service.js +1 -1
  13. package/dist/connection/endpoints.js +32 -0
  14. package/dist/connector.js +145 -253
  15. package/dist/control-outbound-scheduler.js +3 -0
  16. package/dist/database.js +34 -14
  17. package/dist/git-askpass.js +1 -1
  18. package/dist/git-execution-helper.js +1 -1
  19. package/dist/hosting/hosted-conversation-file-identity.js +27 -0
  20. package/dist/hosting/hosted-conversation-file-operations.js +44 -0
  21. package/dist/hosting/hosted-conversation-node-service.js +974 -0
  22. package/dist/hosting/hosted-conversation-runs.js +599 -0
  23. package/dist/hosting/hosted-conversation-templates.js +280 -0
  24. package/dist/hosting/hosted-conversation-uploads.js +344 -0
  25. package/dist/hosting/hosted-conversation-watch.js +194 -0
  26. package/dist/hosting/runtime-contracts.js +1 -0
  27. package/dist/runner/abstract-runner.js +4 -13
  28. package/dist/{claude-agent-sdk.js → runner/claude/claude-agent-sdk.js} +2 -2
  29. package/dist/runner/claude/conversation-parser.js +2 -1
  30. package/dist/runner/claude/managed-run-controller.js +6 -7
  31. package/dist/runner/claude/message-parsers.js +2 -1
  32. package/dist/runner/claude/native-transcript.js +2 -1
  33. package/dist/runner/claude/tool-normalizer.js +1 -1
  34. package/dist/runner/claude-code-runner.js +2 -2
  35. package/dist/runner/codex/codex-app-server.js +471 -0
  36. package/dist/runner/codex/conversation-parser.js +4 -2
  37. package/dist/runner/codex/managed-run-controller.js +7 -9
  38. package/dist/runner/codex/native-transcript.js +1 -1
  39. package/dist/runner/codex/tool-normalizer.js +1 -1
  40. package/dist/runner/codex-runner.js +9 -27
  41. package/dist/runner/contracts.js +1 -0
  42. package/dist/runner/mar-agent/conversation-normalizer.js +2 -2
  43. package/dist/runner/mar-agent/history-projection.js +1 -1
  44. package/dist/runner/mar-agent/hosted-conversation-runtime.js +6 -10
  45. package/dist/runner/mar-agent/managed-run-controller.js +85 -61
  46. package/dist/runner/mar-agent/runtime-model-factory.js +0 -3
  47. package/dist/runner/mar-agent-runner.js +1 -1
  48. package/dist/runner/normalization.js +42 -0
  49. package/dist/runner/opencode/conversation-parser.js +1 -1
  50. package/dist/runner/opencode/managed-run-controller.js +6 -7
  51. package/dist/{opencode-server.js → runner/opencode/opencode-server.js} +2 -2
  52. package/dist/runner/opencode/tool-normalizer.js +1 -1
  53. package/dist/runner/opencode-runner.js +4 -5
  54. package/dist/runner/runner-registry.js +4 -1
  55. package/dist/runtime-state.js +48 -372
  56. package/dist/service/computer-use-enablement-service.js +1 -1
  57. package/dist/service/continuous-run-coordinator.js +52 -7
  58. package/dist/service/conversation-history-service.js +4 -4
  59. package/dist/service/conversation-hosting-capability-service.js +1 -1
  60. package/dist/service/conversation-hosting-enablement-service.js +1 -1
  61. package/dist/service/conversation-hosting-lifecycle-service.js +3 -3
  62. package/dist/service/conversation-hosting-maintenance-service.js +1 -1
  63. package/dist/service/conversation-observation.js +1 -1
  64. package/dist/service/conversation-segment-service.js +1 -1
  65. package/dist/service/external-session-resume-service.js +47 -27
  66. package/dist/service/fake-managed-run-service.js +3 -7
  67. package/dist/service/git-operation-service.js +1 -1
  68. package/dist/service/goal-continuation-coordinator.js +14 -7
  69. package/dist/service/mar-agent-model-transport-test-service.js +1 -1
  70. package/dist/service/native-session-watch-service.js +1 -1
  71. package/dist/service/node-connection-lifecycle-service.js +6 -3
  72. package/dist/service/node-control-channel.js +48 -11
  73. package/dist/service/node-request-service.js +1 -1
  74. package/dist/service/node-terminal-channel.js +2 -1
  75. package/dist/service/node-workspace-coordinator.js +3 -2
  76. package/dist/service/notification-mcp-bridge.js +6 -2
  77. package/dist/service/recent-run-projection-service.js +1 -1
  78. package/dist/service/restart-session-restorer.js +1 -1
  79. package/dist/service/run-event-service.js +49 -42
  80. package/dist/service/run-workbench-service.js +3 -3
  81. package/dist/service/runner-interaction-service.js +6 -5
  82. package/dist/service/runner-service.js +1 -1
  83. package/dist/service/session-recent-activity.js +2 -1
  84. package/dist/service/skill-directory-service.js +1 -1
  85. package/dist/service/skill-install-service.js +2 -2
  86. package/dist/service/terminal-service.js +1 -1
  87. package/dist/service/workbench-event-projection.js +3 -2
  88. package/dist/service/workbench-event-service.js +1 -1
  89. package/dist/service/workspace-service.js +3 -2
  90. package/dist/session/attachments.js +110 -0
  91. package/dist/session/contracts.js +1 -0
  92. package/dist/{util → session}/conversation-identity.js +1 -1
  93. package/dist/session/input-validation.js +15 -0
  94. package/dist/{service → session}/native-session-projection-service.js +40 -11
  95. package/dist/session/pagination.js +77 -0
  96. package/dist/{util → session}/runner-native-session-parsers.js +2 -1
  97. package/dist/session/runtime/approvals.js +90 -0
  98. package/dist/session/runtime/conversation-projection.js +310 -0
  99. package/dist/session/runtime/type-guards.js +19 -0
  100. package/dist/{service → session}/session-catalog-service.js +5 -4
  101. package/dist/{service → session}/session-command-service.js +3 -3
  102. package/dist/{service → session}/session-identity-service.js +1 -1
  103. package/dist/{service → session}/session-lifecycle-service.js +18 -7
  104. package/dist/{service → session}/session-message-service.js +6 -5
  105. package/dist/{service → session}/session-presentation-service.js +1 -1
  106. package/dist/{service → session}/session-query-service.js +2 -2
  107. package/dist/{service → session}/session-schedule-service.js +2 -2
  108. package/dist/util/records.js +3 -0
  109. package/dist/workspace/contracts.js +1 -0
  110. package/dist/workspace/file-index.js +534 -0
  111. package/dist/workspace/files.js +466 -0
  112. package/dist/workspace/git.js +991 -0
  113. package/dist/workspace/path-access.js +184 -0
  114. package/dist/workspace/utf8.js +12 -0
  115. package/dist/{service → workspace}/workspace-change-service.js +45 -21
  116. package/dist/{service → workspace}/workspace-code-navigation-service.js +6 -6
  117. package/dist/{service → workspace}/workspace-file-manager-service.js +1 -1
  118. package/dist/{service → workspace}/workspace-file-service.js +16 -16
  119. package/dist/{service → workspace}/workspace-git-exclude-service.js +1 -1
  120. package/dist/{service → workspace}/workspace-queue-workbench-service.js +3 -2
  121. package/dist/{service → workspace}/workspace-session-service.js +45 -40
  122. package/dist/{service → workspace}/workspace-upload-service.js +28 -28
  123. package/dist/{service → workspace}/workspace-watch-service.js +29 -28
  124. package/dist/{service → workspace}/workspace-workbench-service.js +4 -3
  125. package/package.json +4 -4
  126. package/dist/service/hosted-conversation-node-service.js +0 -2252
  127. package/dist/service/run-domain-state.js +0 -4
  128. package/dist/service/session-domain-state.js +0 -9
  129. package/dist/service/workspace-domain-state.js +0 -41
  130. package/dist/util/node-operation-parsers.js +0 -320
  131. package/dist/workspace.js +0 -2168
  132. /package/dist/{connector → application}/node-connector-options.js +0 -0
  133. /package/dist/{util → connection}/node-operation-data.js +0 -0
  134. /package/dist/{connector → connection}/node-operation-router.js +0 -0
  135. /package/dist/{service → hosting}/hosted-conversation-sandbox-profile.js +0 -0
  136. /package/dist/{service → hosting}/hosted-conversation-store.js +0 -0
  137. /package/dist/{util → mcp}/secret-environment.js +0 -0
  138. /package/dist/{claude-channel.js → runner/claude/claude-channel.js} +0 -0
  139. /package/dist/{util → runner}/personal-instructions.js +0 -0
  140. /package/dist/{util → runner}/runner-error.js +0 -0
  141. /package/dist/{service/conversation-work-process.js → session/runtime/work-process.js} +0 -0
  142. /package/dist/{service → session}/session-context-service.js +0 -0
  143. /package/dist/{util → workspace}/git-credential-client.js +0 -0
  144. /package/dist/{service → workspace}/workspace-content-search-service.js +0 -0
  145. /package/dist/{service → workspace}/workspace-watch-snapshot-service.js +0 -0
@@ -0,0 +1,194 @@
1
+ import { safeErrorCode } from '../util/safe-error.js';
2
+ const WATCH_TTL_MS = 45_000;
3
+ /** Owns hosted Watch leases, initialization ordering and pending realtime events. */
4
+ export class HostedConversationWatch {
5
+ options;
6
+ leases = new Map();
7
+ snapshotSequence = 0;
8
+ constructor(options) {
9
+ this.options = options;
10
+ }
11
+ watch(input, sessionHash, userId, templateId, models) {
12
+ const ownerKey = `${sessionHash}:${input.workbenchConnectionId}`;
13
+ const existing = this.leases.get(ownerKey);
14
+ if (input.mode === 'renew') {
15
+ if (!existing ||
16
+ !this.options.slots.owns(ownerKey, existing.slotToken) ||
17
+ existing.watchId !== input.watchId ||
18
+ existing.conversationId !== input.conversationId ||
19
+ existing.userId !== userId)
20
+ throw new Error('SESSION_WATCH_NOT_FOUND');
21
+ if (existing.expiresAt <= Date.now()) {
22
+ this.remove(ownerKey);
23
+ throw new Error('SESSION_WATCH_NOT_FOUND');
24
+ }
25
+ return this.renew(existing);
26
+ }
27
+ const resolvedModels = models();
28
+ if (existing &&
29
+ this.options.slots.owns(ownerKey, existing.slotToken) &&
30
+ existing.watchId === input.watchId &&
31
+ existing.conversationId === input.conversationId &&
32
+ existing.userId === userId &&
33
+ existing.expiresAt > Date.now())
34
+ return this.renew(existing);
35
+ this.remove(ownerKey);
36
+ const slotToken = this.options.slots.replace(ownerKey, 'hosted-conversation', () => this.remove(ownerKey));
37
+ const lease = {
38
+ ownerKey,
39
+ slotToken,
40
+ sessionHash,
41
+ workbenchConnectionId: input.workbenchConnectionId,
42
+ watchId: input.watchId,
43
+ conversationId: input.conversationId,
44
+ templateId,
45
+ userId,
46
+ models: resolvedModels,
47
+ nodeGeneration: this.options.nodeGeneration?.() ?? 'local-test-generation',
48
+ pendingEvents: [],
49
+ expiresAt: Date.now() + WATCH_TTL_MS,
50
+ ready: false,
51
+ timer: undefined
52
+ };
53
+ lease.timer = this.timer(ownerKey);
54
+ this.leases.set(ownerKey, lease);
55
+ void this.initialize(lease);
56
+ return this.accepted(lease);
57
+ }
58
+ unwatch(input, sessionHash, userId) {
59
+ const key = `${sessionHash}:${input.workbenchConnectionId}`;
60
+ const lease = this.leases.get(key);
61
+ if (lease?.watchId === input.watchId &&
62
+ lease.conversationId === input.conversationId &&
63
+ lease.userId === userId)
64
+ this.remove(key);
65
+ return { unwatched: true };
66
+ }
67
+ hasConversation(id) {
68
+ return [...this.leases.values()].some((lease) => lease.conversationId === id);
69
+ }
70
+ removeConversation(id) {
71
+ for (const lease of [...this.leases.values()])
72
+ if (lease.conversationId === id)
73
+ this.remove(lease.ownerKey);
74
+ }
75
+ close() {
76
+ for (const key of [...this.leases.keys()])
77
+ this.remove(key);
78
+ }
79
+ publishEvent(conversationId, payload) {
80
+ const leases = [...this.leases.values()].filter((lease) => lease.conversationId === conversationId);
81
+ if (leases.length === 0)
82
+ return false;
83
+ const event = this.options.nextEvent(payload);
84
+ if (event === undefined)
85
+ return false;
86
+ for (const lease of leases) {
87
+ if (!lease.ready)
88
+ lease.pendingEvents.push(event);
89
+ else
90
+ this.emitEvent(lease, event);
91
+ }
92
+ return true;
93
+ }
94
+ publishSnapshot(conversationId, snapshot) {
95
+ for (const lease of this.leases.values())
96
+ if (lease.conversationId === conversationId && lease.ready)
97
+ this.emitSnapshot(lease, snapshot);
98
+ }
99
+ async refreshReadySnapshots(conversationId, completedRunId) {
100
+ const leases = [...this.leases.values()].filter((lease) => lease.conversationId === conversationId && lease.ready);
101
+ await Promise.allSettled(leases.map(async (lease) => {
102
+ const snapshot = await this.options.snapshot(lease.userId, conversationId, lease.models);
103
+ if (this.leases.get(lease.ownerKey) !== lease ||
104
+ !lease.ready ||
105
+ !this.options.mayRefresh(conversationId, completedRunId))
106
+ return;
107
+ this.emitSnapshot(lease, { ...snapshot, run: null });
108
+ }));
109
+ }
110
+ async initialize(lease) {
111
+ try {
112
+ const snapshot = await this.options.initial(lease);
113
+ if (this.leases.get(lease.ownerKey) !== lease)
114
+ return;
115
+ this.emitSnapshot(lease, snapshot);
116
+ lease.ready = true;
117
+ for (const event of lease.pendingEvents)
118
+ this.emitEvent(lease, event);
119
+ lease.pendingEvents.length = 0;
120
+ }
121
+ catch (error) {
122
+ if (this.leases.get(lease.ownerKey) !== lease)
123
+ return;
124
+ this.options.emit?.({
125
+ type: 'watch.failed',
126
+ workbenchConnectionId: lease.workbenchConnectionId,
127
+ watchType: 'hosted-conversation',
128
+ watchId: lease.watchId,
129
+ nodeGeneration: lease.nodeGeneration,
130
+ nodeId: this.options.nodeId(),
131
+ templateId: lease.templateId,
132
+ conversationId: lease.conversationId,
133
+ code: safeErrorCode(error, 'HOSTED_CONVERSATION_WATCH_FAILED'),
134
+ message: 'Hosted conversation watch snapshot failed.'
135
+ });
136
+ this.remove(lease.ownerKey);
137
+ }
138
+ }
139
+ emitSnapshot(lease, payload) {
140
+ this.options.emit?.({
141
+ type: 'watch.hosted-conversation.snapshot',
142
+ workbenchConnectionId: lease.workbenchConnectionId,
143
+ watchId: lease.watchId,
144
+ nodeGeneration: lease.nodeGeneration,
145
+ nodeId: this.options.nodeId(),
146
+ templateId: lease.templateId,
147
+ conversationId: lease.conversationId,
148
+ revision: 1,
149
+ snapshotSequence: ++this.snapshotSequence,
150
+ expiresAt: lease.expiresAt,
151
+ payload
152
+ });
153
+ }
154
+ emitEvent(lease, event) {
155
+ this.options.emit?.({
156
+ type: 'watch.hosted-conversation.event',
157
+ workbenchConnectionId: lease.workbenchConnectionId,
158
+ watchId: lease.watchId,
159
+ nodeGeneration: lease.nodeGeneration,
160
+ nodeId: this.options.nodeId(),
161
+ templateId: lease.templateId,
162
+ conversationId: lease.conversationId,
163
+ expiresAt: lease.expiresAt,
164
+ event
165
+ });
166
+ }
167
+ accepted(lease) {
168
+ return {
169
+ accepted: true,
170
+ watchId: lease.watchId,
171
+ nodeGeneration: lease.nodeGeneration,
172
+ expiresAt: lease.expiresAt
173
+ };
174
+ }
175
+ renew(lease) {
176
+ lease.expiresAt = Date.now() + WATCH_TTL_MS;
177
+ clearTimeout(lease.timer);
178
+ lease.timer = this.timer(lease.ownerKey);
179
+ return this.accepted(lease);
180
+ }
181
+ remove(key) {
182
+ const lease = this.leases.get(key);
183
+ if (!lease)
184
+ return;
185
+ clearTimeout(lease.timer);
186
+ this.leases.delete(key);
187
+ this.options.slots.release(key, lease.slotToken);
188
+ }
189
+ timer(key) {
190
+ const timer = setTimeout(() => this.remove(key), WATCH_TTL_MS);
191
+ timer.unref();
192
+ return timer;
193
+ }
194
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -65,16 +65,8 @@ export class AbstractRunner {
65
65
  usesRunnerTitleForRename() {
66
66
  return false;
67
67
  }
68
- async renameNative(session, input, database) {
69
- if (session.externalSessionId === null)
70
- return;
71
- database.saveNativeSessionMetadata({
72
- runner: session.runner,
73
- externalSessionId: session.externalSessionId,
74
- workspaceId: session.workspaceId,
75
- ...(input.title === undefined ? {} : { customTitle: input.title }),
76
- ...(input.pinned === undefined ? {} : { pinned: input.pinned })
77
- });
68
+ async renameNative(session, input) {
69
+ void [session, input];
78
70
  }
79
71
  async removeNative(session, nativeSessionId) {
80
72
  void [session, nativeSessionId];
@@ -96,9 +88,8 @@ export class AbstractRunner {
96
88
  void session;
97
89
  throw new RunnerCapabilityError(this.name, 'session.clear');
98
90
  }
99
- projectedRunnerTitle(metadata, input, database) {
100
- void database;
101
- return input.title ?? metadata?.runnerTitle ?? null;
91
+ projectedRunnerTitle(metadata, input) {
92
+ return { title: input.title ?? metadata?.runnerTitle ?? null, clearPending: false };
102
93
  }
103
94
  managedAliasId(nativeSessionId) {
104
95
  void nativeSessionId;
@@ -1,9 +1,9 @@
1
- import { NODE_MCP, NODE_MCP_VERSION } from './mcp/naming.js';
1
+ import { NODE_MCP, NODE_MCP_VERSION } from '../../mcp/naming.js';
2
2
  import { spawnSync } from 'node:child_process';
3
3
  import { createSdkMcpServer, forkSession, getSessionInfo, getSessionMessages, listSessions, query } from '@anthropic-ai/claude-agent-sdk';
4
4
  import { tool } from '@anthropic-ai/claude-agent-sdk';
5
5
  import { z } from 'zod';
6
- import { minimalRunnerEnvironment, platformCliInvocation, runRunnerProbe } from './operational.js';
6
+ import { minimalRunnerEnvironment, platformCliInvocation, runRunnerProbe } from '../../operational.js';
7
7
  const nativeBindings = {
8
8
  query,
9
9
  listSessions,
@@ -1,4 +1,5 @@
1
- import { boundedConversationItemId, isPlainRecord, compactRunnerText } from '../../util/node-operation-parsers.js';
1
+ import { boundedConversationItemId, compactRunnerText } from '../normalization.js';
2
+ import { isPlainRecord } from '../../util/records.js';
2
3
  import { claudeContentBlocks } from './message-parsers.js';
3
4
  export function extractClaudeThinkingText(record) {
4
5
  return claudeContentBlocks(record).flatMap((block) => {
@@ -1,16 +1,16 @@
1
1
  import { claudeAssistantBlocks, extractClaudeThinkingText } from './conversation-parser.js';
2
2
  import { ClaudeUsageNormalizer } from './tool-normalizer.js';
3
3
  import { createEnvelope } from '@myagentroam/protocol';
4
- import { ClaudeChannelGate } from '../../claude-channel.js';
4
+ import { ClaudeChannelGate } from './claude-channel.js';
5
5
  import { nodeExecutionEnvironment } from '../../node-execution-environment.js';
6
- import { boundedConversationItemId, compactRunnerText } from '../../util/node-operation-parsers.js';
6
+ import { boundedConversationItemId, compactRunnerText } from '../normalization.js';
7
7
  import { extractClaudeText, extractClaudeToolUses } from './message-parsers.js';
8
8
  import { claudePlanText } from './conversation-parser.js';
9
9
  import { normalizeClaudeTool, extractClaudeToolResults } from './tool-normalizer.js';
10
10
  import { claudeContentBlocks } from './message-parsers.js';
11
- import { parseSecretEnvironment } from '../../util/secret-environment.js';
11
+ import { parseSecretEnvironment } from '../../mcp/secret-environment.js';
12
12
  import { safeErrorCode } from '../../util/safe-error.js';
13
- import { runnerErrorProjection } from '../../util/runner-error.js';
13
+ import { runnerErrorProjection } from '../runner-error.js';
14
14
  import { ResponseLatencyTracker } from '../../service/response-latency-tracker.js';
15
15
  import { GenerationTimingTracker } from '../../service/generation-timing-tracker.js';
16
16
  export class ClaudeManagedRunController {
@@ -81,7 +81,7 @@ export class ClaudeManagedRunController {
81
81
  typeof payload.input !== 'string' ||
82
82
  typeof payload.cwd !== 'string' ||
83
83
  this.host.intercepted() ||
84
- this.host.active.has(payload.runId))
84
+ this.host.isExecutionActive(payload.runId))
85
85
  return;
86
86
  const runId = payload.runId;
87
87
  const sessionId = payload.sessionId;
@@ -123,7 +123,7 @@ export class ClaudeManagedRunController {
123
123
  this.host.emit(runId, 'run.rejected', { code: 'SESSION_ACTIVATION_REQUIRED' }, 'FAILED');
124
124
  return;
125
125
  }
126
- this.host.active.add(runId);
126
+ this.host.executionAccepted(runId);
127
127
  this.host.emit(runId, 'run.started', {}, 'STARTING');
128
128
  if (contextCompactionItemId !== undefined)
129
129
  this.host.emitItem(runId, {
@@ -166,7 +166,6 @@ export class ClaudeManagedRunController {
166
166
  this.host.emit(runId, eventType, projected ?? eventPayload, status);
167
167
  this.runner.execution.runs.delete(runId);
168
168
  handle?.cancel();
169
- this.host.active.delete(runId);
170
169
  };
171
170
  try {
172
171
  const gate = new ClaudeChannelGate(sessionId);
@@ -1,4 +1,5 @@
1
- import { compactRunnerText, compactRunnerValue, isPlainRecord } from '../../util/node-operation-parsers.js';
1
+ import { compactRunnerText, compactRunnerValue } from '../normalization.js';
2
+ import { isPlainRecord } from '../../util/records.js';
2
3
  export function extractClaudeText(message) {
3
4
  return claudeContentBlocks(message)
4
5
  .flatMap((block) => block.type === 'text' && typeof block.text === 'string' ? [block.text] : [])
@@ -1,7 +1,8 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { join } from 'node:path';
3
3
  import { forEachJsonlRecord } from '../../native-jsonl-reader.js';
4
- import { compactRunnerValue as compactValue, isPlainRecord } from '../../util/node-operation-parsers.js';
4
+ import { compactRunnerValue as compactValue } from '../normalization.js';
5
+ import { isPlainRecord } from '../../util/records.js';
5
6
  import { stripGoalStartPrompt, publicGoalHistoryText } from '../../service/goal-runtime.js';
6
7
  import { readdir } from 'node:fs/promises';
7
8
  import { stripClaudePlanTag } from '../../runner-command-engine.js';
@@ -1,5 +1,5 @@
1
1
  import { claudeContentBlocks } from './message-parsers.js';
2
- import { compactRunnerText, compactRunnerValue } from '../../util/node-operation-parsers.js';
2
+ import { compactRunnerText, compactRunnerValue } from '../normalization.js';
3
3
  import { RunnerUsageTracker, usageToken, usageTokenSum } from '../../service/runner-usage-tracker.js';
4
4
  export class ClaudeUsageNormalizer {
5
5
  tracker;
@@ -1,12 +1,12 @@
1
1
  import { withMarctlGuide } from '../mcp/marctl-guide.js';
2
- import { ClaudeAgentSdkAdapter } from '../claude-agent-sdk.js';
2
+ import { ClaudeAgentSdkAdapter } from './claude/claude-agent-sdk.js';
3
3
  import { AbstractRunner } from './abstract-runner.js';
4
4
  import { claudeDefaultModel, declaredRunnerProfiles } from '../runner-profiles.js';
5
5
  import { withClaudePlanTag } from '../runner-command-engine.js';
6
6
  import { discoverNativeSessions, readNativeSession } from '../native-session-history.js';
7
7
  import { readClaudeNativeContextUsage } from './claude/native-context-usage.js';
8
8
  import { claudeDiscoveredSession } from './claude/conversation-parser.js';
9
- import { deduplicateDirectSessions, isNativeHistory, isWithinWorkspace, latestNativeActivity } from '../util/runner-native-session-parsers.js';
9
+ import { deduplicateDirectSessions, isNativeHistory, isWithinWorkspace, latestNativeActivity } from '../session/runner-native-session-parsers.js';
10
10
  export class ClaudeCodeRunner extends AbstractRunner {
11
11
  client;
12
12
  environment;