@botbotgo/agent-harness 0.0.290 → 0.0.291

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 (134) hide show
  1. package/README.md +20 -20
  2. package/README.zh.md +14 -14
  3. package/dist/acp.d.ts +5 -5
  4. package/dist/acp.js +3 -3
  5. package/dist/api.d.ts +20 -21
  6. package/dist/api.js +38 -50
  7. package/dist/cli.js +47 -43
  8. package/dist/config/agents/orchestra.yaml +3 -3
  9. package/dist/config/knowledge/knowledge-runtime.yaml +4 -4
  10. package/dist/config/runtime/runtime-memory.yaml +7 -7
  11. package/dist/config/runtime/workspace.yaml +7 -7
  12. package/dist/contracts/core.d.ts +1 -1
  13. package/dist/contracts/runtime.d.ts +35 -40
  14. package/dist/contracts/workspace.d.ts +2 -2
  15. package/dist/flow/build-flow-graph.js +20 -33
  16. package/dist/flow/export-sequence-mermaid.js +4 -4
  17. package/dist/flow/types.d.ts +2 -2
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.js +1 -1
  20. package/dist/init-project.js +10 -10
  21. package/dist/knowledge/module.js +37 -45
  22. package/dist/mcp.d.ts +9 -9
  23. package/dist/mcp.js +6 -6
  24. package/dist/package-version.d.ts +1 -1
  25. package/dist/package-version.js +1 -1
  26. package/dist/persistence/file-store.d.ts +69 -69
  27. package/dist/persistence/file-store.js +224 -221
  28. package/dist/persistence/sqlite-request-context-store.d.ts +22 -0
  29. package/dist/persistence/sqlite-request-context-store.js +64 -0
  30. package/dist/persistence/sqlite-request-queue-store.d.ts +41 -0
  31. package/dist/persistence/sqlite-request-queue-store.js +120 -0
  32. package/dist/persistence/sqlite-store.d.ts +72 -72
  33. package/dist/persistence/sqlite-store.js +361 -361
  34. package/dist/persistence/types.d.ts +84 -84
  35. package/dist/protocol/a2a/http.js +79 -74
  36. package/dist/protocol/ag-ui/http.d.ts +7 -7
  37. package/dist/protocol/ag-ui/http.js +20 -20
  38. package/dist/resource/resource-impl.js +1 -1
  39. package/dist/runtime/adapter/compat/deepagent-compat.d.ts +2 -2
  40. package/dist/runtime/adapter/flow/invocation-flow.d.ts +6 -5
  41. package/dist/runtime/adapter/flow/invocation-flow.js +6 -5
  42. package/dist/runtime/adapter/flow/stream-runtime.d.ts +3 -3
  43. package/dist/runtime/adapter/flow/stream-runtime.js +5 -4
  44. package/dist/runtime/adapter/invocation-result.d.ts +6 -5
  45. package/dist/runtime/adapter/invocation-result.js +5 -4
  46. package/dist/runtime/adapter/middleware-assembly.js +3 -2
  47. package/dist/runtime/adapter/tool/tool-hitl.js +1 -1
  48. package/dist/runtime/adapter/upstream-configurable-keys.d.ts +2 -0
  49. package/dist/runtime/adapter/upstream-configurable-keys.js +2 -0
  50. package/dist/runtime/agent-runtime-adapter.d.ts +11 -8
  51. package/dist/runtime/agent-runtime-adapter.js +36 -32
  52. package/dist/runtime/harness/events/events.d.ts +8 -8
  53. package/dist/runtime/harness/events/events.js +25 -19
  54. package/dist/runtime/harness/events/listener-runtime.d.ts +5 -4
  55. package/dist/runtime/harness/events/listener-runtime.js +7 -3
  56. package/dist/runtime/harness/events/runtime-event-operations.d.ts +7 -7
  57. package/dist/runtime/harness/events/runtime-event-operations.js +5 -5
  58. package/dist/runtime/harness/events/streaming.d.ts +8 -7
  59. package/dist/runtime/harness/events/streaming.js +20 -19
  60. package/dist/runtime/harness/events/timeline.js +6 -6
  61. package/dist/runtime/harness/index.d.ts +1 -1
  62. package/dist/runtime/harness/index.js +1 -1
  63. package/dist/runtime/harness/run/helpers.d.ts +14 -11
  64. package/dist/runtime/harness/run/helpers.js +10 -7
  65. package/dist/runtime/harness/run/inspection.d.ts +3 -2
  66. package/dist/runtime/harness/run/inspection.js +7 -7
  67. package/dist/runtime/harness/run/operator-overview.d.ts +2 -2
  68. package/dist/runtime/harness/run/operator-overview.js +18 -17
  69. package/dist/runtime/harness/run/queue-diagnostics.js +6 -6
  70. package/dist/runtime/harness/run/recovery.d.ts +15 -15
  71. package/dist/runtime/harness/run/recovery.js +53 -50
  72. package/dist/runtime/harness/run/resources.d.ts +2 -2
  73. package/dist/runtime/harness/run/resources.js +8 -8
  74. package/dist/runtime/harness/run/resume.d.ts +3 -3
  75. package/dist/runtime/harness/run/resume.js +4 -4
  76. package/dist/runtime/harness/run/routing.d.ts +4 -4
  77. package/dist/runtime/harness/run/routing.js +8 -8
  78. package/dist/runtime/harness/run/run-lifecycle.d.ts +12 -12
  79. package/dist/runtime/harness/run/run-lifecycle.js +26 -26
  80. package/dist/runtime/harness/run/run-operations.d.ts +45 -45
  81. package/dist/runtime/harness/run/run-operations.js +79 -78
  82. package/dist/runtime/harness/run/run-queue.d.ts +8 -8
  83. package/dist/runtime/harness/run/run-queue.js +16 -16
  84. package/dist/runtime/harness/run/run-slot-acquisition.d.ts +32 -32
  85. package/dist/runtime/harness/run/run-slot-acquisition.js +41 -41
  86. package/dist/runtime/harness/run/{thread-records.d.ts → session-records.d.ts} +6 -13
  87. package/dist/runtime/harness/run/{thread-records.js → session-records.js} +14 -60
  88. package/dist/runtime/harness/run/start-run.d.ts +36 -36
  89. package/dist/runtime/harness/run/start-run.js +55 -36
  90. package/dist/runtime/harness/run/startup-runtime.d.ts +9 -9
  91. package/dist/runtime/harness/run/startup-runtime.js +22 -20
  92. package/dist/runtime/harness/run/stream-run.d.ts +18 -18
  93. package/dist/runtime/harness/run/stream-run.js +52 -52
  94. package/dist/runtime/harness/runtime-defaults.d.ts +2 -2
  95. package/dist/runtime/harness/runtime-defaults.js +7 -7
  96. package/dist/runtime/harness/system/health-monitor.d.ts +3 -3
  97. package/dist/runtime/harness/system/health-monitor.js +18 -18
  98. package/dist/runtime/harness/system/mem0-ingestion-sync.d.ts +6 -6
  99. package/dist/runtime/harness/system/mem0-ingestion-sync.js +36 -27
  100. package/dist/runtime/harness/system/runtime-memory-candidates.js +2 -2
  101. package/dist/runtime/harness/system/runtime-memory-manager.d.ts +13 -13
  102. package/dist/runtime/harness/system/runtime-memory-manager.js +41 -38
  103. package/dist/runtime/harness/system/runtime-memory-policy.d.ts +1 -1
  104. package/dist/runtime/harness/system/runtime-memory-policy.js +1 -1
  105. package/dist/runtime/harness/system/runtime-memory-records.d.ts +4 -2
  106. package/dist/runtime/harness/system/runtime-memory-records.js +21 -8
  107. package/dist/runtime/harness/system/runtime-memory-sync.d.ts +6 -6
  108. package/dist/runtime/harness/system/runtime-memory-sync.js +47 -44
  109. package/dist/runtime/harness/system/{thread-memory-sync.d.ts → session-memory-sync.d.ts} +7 -7
  110. package/dist/runtime/harness/system/{thread-memory-sync.js → session-memory-sync.js} +28 -28
  111. package/dist/runtime/harness.d.ts +33 -45
  112. package/dist/runtime/harness.js +273 -291
  113. package/dist/runtime/maintenance/checkpoint-maintenance.js +2 -2
  114. package/dist/runtime/maintenance/file-checkpoint-saver.d.ts +1 -1
  115. package/dist/runtime/maintenance/file-checkpoint-saver.js +6 -6
  116. package/dist/runtime/maintenance/runtime-record-maintenance.d.ts +1 -1
  117. package/dist/runtime/maintenance/runtime-record-maintenance.js +33 -33
  118. package/dist/runtime/maintenance/sqlite-checkpoint-saver.d.ts +1 -1
  119. package/dist/runtime/maintenance/sqlite-checkpoint-saver.js +30 -10
  120. package/dist/runtime/support/harness-support.d.ts +2 -2
  121. package/dist/runtime/support/harness-support.js +7 -7
  122. package/dist/runtime/support/runtime-adapter-options.d.ts +2 -2
  123. package/dist/runtime/support/runtime-adapter-options.js +3 -3
  124. package/dist/runtime/support/runtime-factories.d.ts +2 -2
  125. package/dist/runtime/support/runtime-factories.js +10 -10
  126. package/dist/workspace/agent-binding-compiler.js +3 -3
  127. package/dist/workspace/object-loader.js +1 -1
  128. package/dist/workspace/support/workspace-ref-utils.d.ts +4 -3
  129. package/dist/workspace/support/workspace-ref-utils.js +5 -4
  130. package/package.json +1 -1
  131. package/dist/persistence/sqlite-run-context-store.d.ts +0 -22
  132. package/dist/persistence/sqlite-run-context-store.js +0 -64
  133. package/dist/persistence/sqlite-run-queue-store.d.ts +0 -41
  134. package/dist/persistence/sqlite-run-queue-store.js +0 -120
@@ -40,16 +40,16 @@ function formatApprovalSection(approvals) {
40
40
  return lines;
41
41
  }
42
42
  function renderRunSummaryMarkdown(input) {
43
- const sessionId = input.thread.sessionId ?? input.thread.threadId ?? "";
43
+ const sessionId = input.session.sessionId;
44
44
  const userMessages = input.messages.filter((message) => message.role === "user").slice(-3);
45
45
  const assistantMessages = input.messages.filter((message) => message.role === "assistant").slice(-3);
46
46
  return [
47
- "# Run Memory Summary",
47
+ "# Request Memory Summary",
48
48
  "",
49
- `- thread_id: ${sessionId}`,
50
- `- run_id: ${input.runId}`,
49
+ `- session_id: ${sessionId}`,
50
+ `- request_id: ${input.requestId}`,
51
51
  `- agent_id: ${input.agentId}`,
52
- `- status: ${input.thread.status}`,
52
+ `- status: ${input.session.status}`,
53
53
  `- trigger: ${input.trigger}`,
54
54
  `- captured_at: ${input.capturedAt}`,
55
55
  "",
@@ -58,16 +58,16 @@ function renderRunSummaryMarkdown(input) {
58
58
  ...formatApprovalSection(input.approvals),
59
59
  ].join("\n");
60
60
  }
61
- function renderThreadDigestMarkdown(input) {
62
- const sessionId = input.thread.sessionId ?? input.thread.threadId ?? "";
61
+ function renderSessionDigestMarkdown(input) {
62
+ const sessionId = input.session.sessionId;
63
63
  const latestUser = input.messages.filter((message) => message.role === "user").at(-1);
64
64
  const latestAssistant = input.messages.filter((message) => message.role === "assistant").at(-1);
65
65
  return [
66
- "# Durable Thread Digest",
66
+ "# Durable Session Digest",
67
67
  "",
68
- `- thread_id: ${sessionId}`,
69
- `- latest_run_id: ${input.runId}`,
70
- `- status: ${input.thread.status}`,
68
+ `- session_id: ${sessionId}`,
69
+ `- latest_request_id: ${input.requestId}`,
70
+ `- status: ${input.session.status}`,
71
71
  `- last_memory_trigger: ${input.trigger}`,
72
72
  `- updated_at: ${input.capturedAt}`,
73
73
  "",
@@ -79,23 +79,26 @@ function renderThreadDigestMarkdown(input) {
79
79
  "",
80
80
  ].join("\n");
81
81
  }
82
- const RUNTIME_MEMORY_EVENT_TYPES = new Set(["run.state.changed", "approval.resolved"]);
82
+ const RUNTIME_MEMORY_EVENT_TYPES = new Set([
83
+ "request.state.changed",
84
+ "approval.resolved",
85
+ ]);
83
86
  export function readRuntimeMemorySyncConfig(runtimeMemory) {
84
87
  if (runtimeMemory?.enabled !== true) {
85
88
  return undefined;
86
89
  }
87
90
  const ingestion = asRecord(runtimeMemory.ingestion);
88
91
  const writeOnApprovalResolution = asBoolean(ingestion?.writeOnApprovalResolution) ?? true;
89
- const writeOnRunCompletion = asBoolean(ingestion?.writeOnRunCompletion) ?? true;
90
- if (!writeOnApprovalResolution && !writeOnRunCompletion) {
92
+ const writeOnRequestCompletion = asBoolean(ingestion?.writeOnRequestCompletion) ?? true;
93
+ if (!writeOnApprovalResolution && !writeOnRequestCompletion) {
91
94
  return undefined;
92
95
  }
93
96
  return {
94
97
  enabled: true,
95
98
  writeOnApprovalResolution,
96
- writeOnRunCompletion,
99
+ writeOnRequestCompletion,
97
100
  backgroundConsolidation: asBoolean(ingestion?.backgroundConsolidation) ?? true,
98
- maxMessagesPerRun: asPositiveInteger(ingestion?.maxMessagesPerRun) ?? 40,
101
+ maxMessagesPerRequest: asPositiveInteger(ingestion?.maxMessagesPerRequest) ?? 40,
99
102
  };
100
103
  }
101
104
  export class RuntimeMemorySync {
@@ -119,15 +122,15 @@ export class RuntimeMemorySync {
119
122
  if (event.eventType === "approval.resolved") {
120
123
  return this.config.writeOnApprovalResolution;
121
124
  }
122
- return this.config.writeOnRunCompletion && event.payload.state === "completed";
125
+ return this.config.writeOnRequestCompletion && event.payload.state === "completed";
123
126
  }
124
127
  async handleEvent(event) {
125
128
  if (!this.shouldHandle(event)) {
126
129
  return;
127
130
  }
128
- const trigger = event.eventType === "approval.resolved" ? "approval.resolved" : "run.completed";
131
+ const trigger = event.eventType === "approval.resolved" ? "approval.resolved" : "request.completed";
129
132
  const task = this.syncChain
130
- .then(() => this.syncRun(event.sessionId ?? event.threadId ?? "", event.requestId ?? event.runId ?? "", trigger, event.timestamp))
133
+ .then(() => this.syncRun(event.sessionId, event.requestId, trigger, event.timestamp))
131
134
  .catch(() => {
132
135
  // Fail open: runtime memory sync must not break the hot path.
133
136
  });
@@ -140,24 +143,24 @@ export class RuntimeMemorySync {
140
143
  });
141
144
  this.pending.add(task);
142
145
  }
143
- async syncRun(threadId, runId, trigger, capturedAt) {
144
- const [thread, run, allMessages, approvals] = await Promise.all([
145
- this.persistence.getSession(threadId),
146
- this.persistence.getRun(runId),
147
- this.persistence.listThreadMessages(threadId, this.config.maxMessagesPerRun),
148
- this.persistence.getRunApprovals(threadId, runId),
146
+ async syncRun(sessionId, requestId, trigger, capturedAt) {
147
+ const [session, run, allMessages, approvals] = await Promise.all([
148
+ this.persistence.getSession(sessionId),
149
+ this.persistence.getRequest(requestId),
150
+ this.persistence.listSessionMessages(sessionId, this.config.maxMessagesPerRequest),
151
+ this.persistence.getRequestApprovals(sessionId, requestId),
149
152
  ]);
150
- if (!thread || !run) {
153
+ if (!session || !run) {
151
154
  return;
152
155
  }
153
- const messages = allMessages.filter((message) => (message.requestId ?? message.runId) === runId);
156
+ const messages = allMessages.filter((message) => message.requestId === requestId);
154
157
  if (messages.length === 0) {
155
158
  return;
156
159
  }
157
- const agentId = run.agentId ?? thread.agentId;
160
+ const agentId = run.agentId ?? session.agentId;
158
161
  const summaryMarkdown = renderRunSummaryMarkdown({
159
- thread,
160
- runId,
162
+ session,
163
+ requestId,
161
164
  agentId,
162
165
  trigger,
163
166
  capturedAt,
@@ -165,16 +168,16 @@ export class RuntimeMemorySync {
165
168
  approvals,
166
169
  });
167
170
  await Promise.all([
168
- this.store.put(this.resolveRunNamespace(threadId), `${runId}.summary.md`, { content: `${summaryMarkdown}\n` }),
169
- this.store.put(this.resolveRunNamespace(threadId), `${runId}.record.json`, {
171
+ this.store.put(this.resolveRequestNamespace(sessionId), `${requestId}.summary.md`, { content: `${summaryMarkdown}\n` }),
172
+ this.store.put(this.resolveRequestNamespace(sessionId), `${requestId}.record.json`, {
170
173
  kind: "summary",
171
- scope: "thread",
172
- threadId,
173
- runId,
174
+ scope: "session",
175
+ sessionId,
176
+ requestId,
174
177
  agentId,
175
178
  trigger,
176
179
  capturedAt,
177
- status: thread.status,
180
+ status: session.status,
178
181
  messageCount: messages.length,
179
182
  approvalCount: approvals.length,
180
183
  }),
@@ -182,20 +185,20 @@ export class RuntimeMemorySync {
182
185
  if (!this.config.backgroundConsolidation) {
183
186
  return;
184
187
  }
185
- const digestMarkdown = renderThreadDigestMarkdown({
186
- thread,
187
- runId,
188
+ const digestMarkdown = renderSessionDigestMarkdown({
189
+ session,
190
+ requestId,
188
191
  trigger,
189
192
  capturedAt,
190
193
  messages,
191
194
  });
192
- await this.store.put(this.resolveThreadNamespace(threadId), "durable-summary.md", { content: `${digestMarkdown}\n` });
195
+ await this.store.put(this.resolveSessionNamespace(sessionId), "durable-summary.md", { content: `${digestMarkdown}\n` });
193
196
  }
194
- resolveThreadNamespace(threadId) {
195
- return this.options.resolveThreadNamespace ? this.options.resolveThreadNamespace(threadId) : ["memories", "sessions", threadId];
197
+ resolveSessionNamespace(sessionId) {
198
+ return this.options.resolveSessionNamespace ? this.options.resolveSessionNamespace(sessionId) : ["memories", "sessions", sessionId];
196
199
  }
197
- resolveRunNamespace(threadId) {
198
- return this.options.resolveRunNamespace ? this.options.resolveRunNamespace(threadId) : ["memories", "requests", threadId];
200
+ resolveRequestNamespace(sessionId) {
201
+ return this.options.resolveRequestNamespace ? this.options.resolveRequestNamespace(sessionId) : ["memories", "requests", sessionId];
199
202
  }
200
203
  async close() {
201
204
  await Promise.allSettled(Array.from(this.pending));
@@ -1,21 +1,21 @@
1
1
  import type { HarnessEvent, HarnessEventProjection } from "../../../contracts/types.js";
2
2
  import type { RuntimePersistence } from "../../../persistence/types.js";
3
- type ThreadMemorySyncOptions = {
4
- resolveThreadNamespace?: (threadId: string) => string[];
3
+ type SessionMemorySyncOptions = {
4
+ resolveSessionNamespace?: (sessionId: string) => string[];
5
5
  };
6
- export declare class ThreadMemorySync implements HarnessEventProjection {
6
+ export declare class SessionMemorySync implements HarnessEventProjection {
7
7
  private readonly persistence;
8
8
  private readonly store?;
9
9
  private readonly options;
10
10
  private readonly pending;
11
11
  private syncChain;
12
- readonly name = "thread-memory-sync";
12
+ readonly name = "session-memory-sync";
13
13
  constructor(persistence: RuntimePersistence, store?: {
14
14
  put: (namespace: string[], key: string, value: Record<string, any>) => Promise<void>;
15
- } | undefined, options?: ThreadMemorySyncOptions);
15
+ } | undefined, options?: SessionMemorySyncOptions);
16
16
  shouldHandle(event: HarnessEvent): boolean;
17
17
  handleEvent(event: HarnessEvent): Promise<void>;
18
- private syncThread;
18
+ private syncSession;
19
19
  close(): Promise<void>;
20
20
  }
21
- export { ThreadMemorySync as MemoryWorker };
21
+ export { SessionMemorySync as MemoryWorker };
@@ -6,19 +6,19 @@ function excerpt(message) {
6
6
  const normalized = extractMessageText(message.content).replace(/\s+/g, " ").trim();
7
7
  return normalized.length > 240 ? `${normalized.slice(0, 237)}...` : normalized;
8
8
  }
9
- function renderThreadSnapshotMarkdown(thread, messages, approvals) {
10
- const sessionId = thread.sessionId ?? thread.threadId ?? "";
11
- const latestRequestId = thread.latestRequestId ?? thread.latestRunId ?? "";
9
+ function renderSessionSnapshotMarkdown(session, messages, approvals) {
10
+ const sessionId = session.sessionId;
11
+ const latestRequestId = session.latestRequestId;
12
12
  const userMessages = messages.filter((message) => message.role === "user");
13
13
  const assistantMessages = messages.filter((message) => message.role === "assistant");
14
14
  return [
15
- "# Thread Snapshot",
15
+ "# Session Snapshot",
16
16
  "",
17
- `- thread_id: ${sessionId}`,
18
- `- latest_run_id: ${latestRequestId}`,
19
- `- agent_id: ${thread.agentId}`,
20
- `- status: ${thread.status}`,
21
- `- updated_at: ${thread.updatedAt}`,
17
+ `- session_id: ${sessionId}`,
18
+ `- latest_request_id: ${latestRequestId}`,
19
+ `- agent_id: ${session.agentId}`,
20
+ `- status: ${session.status}`,
21
+ `- updated_at: ${session.updatedAt}`,
22
22
  "",
23
23
  "## Recent User Message",
24
24
  excerpt(userMessages.at(-1)),
@@ -39,44 +39,44 @@ function formatOpenApprovalsSection(approvals) {
39
39
  lines.push(`### ${approval.approvalId}`);
40
40
  lines.push(`- pending_action_id: ${approval.pendingActionId}`);
41
41
  lines.push(`- tool: ${approval.toolName}`);
42
- lines.push(`- run_id: ${approval.requestId ?? approval.runId}`);
42
+ lines.push(`- request_id: ${approval.requestId}`);
43
43
  lines.push(`- requested_at: ${approval.requestedAt}`);
44
44
  lines.push(`- allowed: ${approval.allowedDecisions.join(", ")}`);
45
45
  lines.push("");
46
46
  }
47
47
  return lines;
48
48
  }
49
- function resolveThreadNamespace(threadId, resolver) {
50
- return resolver ? resolver(threadId) : ["memories", "sessions", threadId];
49
+ function resolveSessionNamespace(sessionId, resolver) {
50
+ return resolver ? resolver(sessionId) : ["memories", "sessions", sessionId];
51
51
  }
52
- const THREAD_MEMORY_EVENT_TYPES = new Set([
53
- "run.state.changed",
54
- "run.queued",
55
- "run.dequeued",
52
+ const SESSION_MEMORY_EVENT_TYPES = new Set([
53
+ "request.state.changed",
54
+ "request.queued",
55
+ "request.dequeued",
56
56
  "approval.resolved",
57
57
  "approval.requested",
58
58
  ]);
59
- export class ThreadMemorySync {
59
+ export class SessionMemorySync {
60
60
  persistence;
61
61
  store;
62
62
  options;
63
63
  pending = new Set();
64
64
  syncChain = Promise.resolve();
65
- name = "thread-memory-sync";
65
+ name = "session-memory-sync";
66
66
  constructor(persistence, store, options = {}) {
67
67
  this.persistence = persistence;
68
68
  this.store = store;
69
69
  this.options = options;
70
70
  }
71
71
  shouldHandle(event) {
72
- return THREAD_MEMORY_EVENT_TYPES.has(event.eventType);
72
+ return SESSION_MEMORY_EVENT_TYPES.has(event.eventType);
73
73
  }
74
74
  async handleEvent(event) {
75
75
  if (!this.shouldHandle(event)) {
76
76
  return;
77
77
  }
78
78
  const task = this.syncChain
79
- .then(() => this.syncThread(event.sessionId ?? event.threadId ?? ""))
79
+ .then(() => this.syncSession(event.sessionId))
80
80
  .catch(() => {
81
81
  // Fail open: background memory digestion must not break the hot path.
82
82
  });
@@ -89,25 +89,25 @@ export class ThreadMemorySync {
89
89
  });
90
90
  this.pending.add(task);
91
91
  }
92
- async syncThread(threadId) {
93
- const thread = await this.persistence.getSession(threadId);
94
- if (!thread) {
92
+ async syncSession(sessionId) {
93
+ const session = await this.persistence.getSession(sessionId);
94
+ if (!session) {
95
95
  return;
96
96
  }
97
97
  const [messages, approvals] = await Promise.all([
98
- this.persistence.listThreadMessages(threadId, 24),
98
+ this.persistence.listSessionMessages(sessionId, 24),
99
99
  this.persistence.listApprovals(),
100
100
  ]);
101
- const pendingApprovals = approvals.filter((approval) => (approval.sessionId ?? approval.threadId) === threadId && approval.status === "pending");
101
+ const pendingApprovals = approvals.filter((approval) => approval.sessionId === sessionId && approval.status === "pending");
102
102
  if (!this.store) {
103
103
  return;
104
104
  }
105
- await this.store.put(resolveThreadNamespace(threadId, this.options.resolveThreadNamespace), "snapshot.md", {
106
- content: `${renderThreadSnapshotMarkdown(thread, messages, pendingApprovals)}\n`,
105
+ await this.store.put(resolveSessionNamespace(sessionId, this.options.resolveSessionNamespace), "snapshot.md", {
106
+ content: `${renderSessionSnapshotMarkdown(session, messages, pendingApprovals)}\n`,
107
107
  });
108
108
  }
109
109
  async close() {
110
110
  await Promise.allSettled(Array.from(this.pending));
111
111
  }
112
112
  }
113
- export { ThreadMemorySync as MemoryWorker };
113
+ export { SessionMemorySync as MemoryWorker };
@@ -1,4 +1,4 @@
1
- import type { ApprovalRecord, ArtifactListing, CancelOptions, HarnessEvent, HarnessStreamItem, RuntimeHealthSnapshot, RuntimeOperatorOverview, ListMemoriesInput, ListMemoriesResult, MessageContent, RemoveMemoryInput, RunRecord, RunStartOptions, RestartConversationOptions, RuntimeAdapterOptions, RuntimeArtifactWriteInput, RuntimeEvaluationExport, RuntimeEvaluationExportInput, RuntimeEvaluationReplayInput, RuntimeEvaluationReplayResult, RuntimeRunPackage, RuntimeRunPackageInput, RuntimeSessionPackage, RuntimeSessionPackageInput, ResumeOptions, RunOptions, RunResult, RunSummary, MemoryRecord, MemorizeInput, MemorizeResult, RecallInput, RecallResult, UpdateMemoryInput, SessionSummary, ThreadSummary, ThreadRecord, SessionRecord, RequestRecord, RequestSummary, SessionListSummary, WorkspaceBundle } from "../contracts/types.js";
1
+ import type { ApprovalRecord, ArtifactListing, CancelOptions, HarnessEvent, HarnessStreamItem, RuntimeHealthSnapshot, RuntimeOperatorOverview, ListMemoriesInput, ListMemoriesResult, MessageContent, RemoveMemoryInput, RequestOptions, RequestRecord, RequestResult, RequestSummary, RequestStartOptions, RestartConversationOptions, RuntimeAdapterOptions, RuntimeArtifactWriteInput, RuntimeEvaluationExport, RuntimeEvaluationExportInput, RuntimeEvaluationReplayInput, RuntimeEvaluationReplayResult, RuntimeRequestPackage, RuntimeRequestPackageInput, RuntimeSessionPackage, RuntimeSessionPackageInput, ResumeOptions, MemoryRecord, MemorizeInput, MemorizeResult, RecallInput, RecallResult, UpdateMemoryInput, SessionSummary, SessionRecord, SessionListSummary, WorkspaceBundle } from "../contracts/types.js";
2
2
  import { type RuntimeMcpServerOptions, type ToolMcpServerOptions } from "../mcp.js";
3
3
  import { type InventoryAgentRecord, type InventorySkillRecord } from "./harness/system/inventory.js";
4
4
  import type { RequirementAssessmentOptions } from "./harness/system/skill-requirements.js";
@@ -16,15 +16,15 @@ export declare class AgentHarnessRuntime {
16
16
  private readonly vectorStores;
17
17
  private readonly runtimeEntryBindings;
18
18
  private readonly defaultRuntimeEntryBinding?;
19
- private readonly defaultRunRootValue;
19
+ private readonly defaultRuntimeRootValue;
20
20
  private readonly defaultStore;
21
21
  private readonly runtimeMemoryStore;
22
22
  private readonly runtimeMemoryPolicy;
23
23
  private readonly runtimeMemoryMaintenanceConfig;
24
24
  private readonly routingRules;
25
25
  private readonly routingDefaultAgentId?;
26
- private readonly threadMemorySync;
27
- private readonly unregisterThreadMemorySync;
26
+ private readonly sessionMemorySync;
27
+ private readonly unregisterSessionMemorySync;
28
28
  private readonly runtimeMemorySync;
29
29
  private readonly unregisterRuntimeMemorySync;
30
30
  private readonly mem0IngestionSync;
@@ -41,16 +41,16 @@ export declare class AgentHarnessRuntime {
41
41
  private readonly concurrencyConfig;
42
42
  private readonly backgroundTasks;
43
43
  private readonly workerId;
44
- private activeRunSlots;
44
+ private activeRequestSlots;
45
45
  private pendingRunInsertionOrder;
46
- private readonly pendingRunSlots;
46
+ private readonly pendingRequestSlots;
47
47
  private runtimeEventSequence;
48
48
  private initialized;
49
49
  private closed;
50
50
  private readonly backgroundEventRuntime;
51
51
  private readonly runtimeEventOperations;
52
52
  private resolveRuntimeMemoryVectorStore;
53
- private defaultRunRoot;
53
+ private defaultRuntimeRoot;
54
54
  private getDefaultRuntimeEntryAgentId;
55
55
  private resolveSelectedAgentId;
56
56
  private createPrepareRunStartRuntime;
@@ -70,43 +70,33 @@ export declare class AgentHarnessRuntime {
70
70
  listSessionSummaries(filter?: {
71
71
  agentId?: string;
72
72
  }): Promise<SessionListSummary[]>;
73
- listThreads(filter?: {
74
- agentId?: string;
75
- }): Promise<ThreadSummary[]>;
76
73
  listRequests(filter?: {
77
74
  agentId?: string;
78
75
  sessionId?: string;
79
76
  state?: RequestSummary["state"];
80
77
  }): Promise<RequestSummary[]>;
81
- listRuns(filter?: {
82
- agentId?: string;
83
- threadId?: string;
84
- state?: RunSummary["state"];
85
- }): Promise<RunSummary[]>;
86
78
  memorize(input: MemorizeInput): Promise<MemorizeResult>;
87
79
  recall(input: RecallInput): Promise<RecallResult>;
88
80
  listMemories(input?: ListMemoriesInput): Promise<ListMemoriesResult>;
89
81
  updateMemory(input: UpdateMemoryInput): Promise<MemoryRecord>;
90
82
  removeMemory(input: RemoveMemoryInput): Promise<MemoryRecord>;
91
83
  getRequest(requestId: string): Promise<RequestRecord | null>;
92
- getRun(runId: string): Promise<RunRecord | null>;
93
84
  private getSessionSummary;
94
- private getSession;
85
+ private getSessionSummaryRecord;
86
+ getSession(sessionId: string): Promise<SessionRecord | null>;
95
87
  getSessionRecord(sessionId: string): Promise<SessionRecord | null>;
96
- getThread(threadId: string): Promise<ThreadRecord | null>;
97
88
  listApprovals(filter?: {
98
89
  status?: ApprovalRecord["status"];
99
90
  sessionId?: string;
100
91
  requestId?: string;
101
92
  }): Promise<ApprovalRecord[]>;
102
93
  getApproval(approvalId: string): Promise<ApprovalRecord | null>;
103
- listArtifacts(threadId: string, runId: string): Promise<ArtifactListing>;
104
- readArtifact(threadId: string, runId: string, artifactPath: string): Promise<unknown>;
94
+ listRequestArtifacts(sessionId: string, requestId: string): Promise<ArtifactListing>;
105
95
  recordArtifact(input: RuntimeArtifactWriteInput): Promise<import("../contracts/types.js").ArtifactRecord>;
96
+ readRequestArtifact(sessionId: string, requestId: string, artifactPath: string): Promise<unknown>;
106
97
  listRequestEvents(sessionId: string, requestId: string): Promise<HarnessEvent[]>;
107
- listRunEvents(threadId: string, runId: string): Promise<HarnessEvent[]>;
108
- exportRequestPackage(input: RuntimeRunPackageInput): Promise<RuntimeRunPackage>;
109
- exportRunPackage(input: RuntimeRunPackageInput): Promise<RuntimeRunPackage>;
98
+ exportRequestPackage(input: RuntimeRequestPackageInput): Promise<RuntimeRequestPackage>;
99
+ exportRunPackage(input: RuntimeRequestPackageInput): Promise<RuntimeRequestPackage>;
110
100
  exportSessionPackage(input: RuntimeSessionPackageInput): Promise<RuntimeSessionPackage>;
111
101
  exportEvaluationBundle(input: RuntimeEvaluationExportInput): Promise<RuntimeEvaluationExport>;
112
102
  replayEvaluationBundle(input: RuntimeEvaluationReplayInput): Promise<RuntimeEvaluationReplayResult>;
@@ -116,50 +106,48 @@ export declare class AgentHarnessRuntime {
116
106
  workspaceRoot: string;
117
107
  agents: InventoryAgentRecord[];
118
108
  };
119
- private deleteThreadCheckpoints;
109
+ private deleteSessionCheckpoints;
120
110
  deleteSession(sessionId: string): Promise<boolean>;
121
- deleteThread(threadId: string): Promise<boolean>;
122
- deleteThreadLegacy(threadId: string): Promise<boolean>;
123
111
  createToolMcpServer(options: ToolMcpServerOptions): Promise<import("@modelcontextprotocol/sdk/server/mcp").McpServer>;
124
112
  serveToolsOverStdio(options: ToolMcpServerOptions): Promise<import("@modelcontextprotocol/sdk/server/mcp").McpServer>;
125
113
  createRuntimeMcpServer(options?: RuntimeMcpServerOptions): Promise<import("@modelcontextprotocol/sdk/server/mcp").McpServer>;
126
114
  serveRuntimeMcpOverStdio(options?: RuntimeMcpServerOptions): Promise<import("@modelcontextprotocol/sdk/server/mcp").McpServer>;
127
115
  routeAgent(input: MessageContent, options?: {
128
- threadId?: string;
116
+ sessionId?: string;
129
117
  }): Promise<string>;
130
118
  private emit;
131
119
  private trackBackgroundTask;
132
120
  private scheduleBackgroundStartupTask;
133
121
  private resolveToolMcpServerTools;
134
122
  private loadPriorHistory;
135
- private loadRunInput;
136
- private getRunCancellation;
137
- private finalizeCancelledRun;
123
+ private loadRequestInput;
124
+ private getRequestCancellation;
125
+ private finalizeCancelledRequest;
138
126
  private invokeWithHistory;
139
127
  private resolveMemoryNamespace;
140
128
  private getWorkspaceId;
141
129
  private buildRuntimeMemoryContext;
142
130
  private persistRuntimeMemoryCandidates;
143
- private resolvePersistedRunPriority;
144
- private enqueuePendingRunSlot;
145
- private executeQueuedRun;
146
- private finalizeContinuedRun;
147
- private setRunStateAndEmit;
131
+ private resolvePersistedRequestPriority;
132
+ private enqueuePendingRequestSlot;
133
+ private executeQueuedRequest;
134
+ private finalizeContinuedRequest;
135
+ private setRequestStateAndEmit;
148
136
  private requestApprovalAndEmit;
149
137
  private isDecisionRun;
150
138
  private notifyListener;
151
- private acquireRunSlot;
152
- private dropPendingRunSlot;
153
- run(options: RunOptions): Promise<RunResult>;
154
- streamEvents(options: RunStartOptions): AsyncGenerator<HarnessStreamItem>;
155
- resume(options: ResumeOptions): Promise<RunResult>;
156
- restartConversation(options: RestartConversationOptions): Promise<RunResult & {
139
+ private acquireRequestSlot;
140
+ private dropPendingRequestSlot;
141
+ run(options: RequestOptions): Promise<RequestResult>;
142
+ streamEvents(options: RequestStartOptions): AsyncGenerator<HarnessStreamItem>;
143
+ resume(options: ResumeOptions): Promise<RequestResult>;
144
+ restartConversation(options: RestartConversationOptions): Promise<RequestResult & {
157
145
  restart: Record<string, string>;
158
146
  }>;
159
147
  close(): Promise<void>;
160
148
  stop(): Promise<void>;
161
- cancelRun(options: CancelOptions): Promise<RunResult>;
162
- private recoverStartupRuns;
163
- private reclaimExpiredClaimedRuns;
164
- private isStaleRunningRun;
149
+ cancelRequest(options: CancelOptions): Promise<RequestResult>;
150
+ private recoverStartupRequests;
151
+ private reclaimExpiredClaimedRequests;
152
+ private isStaleRunningRequest;
165
153
  }