@roackb2/heddle 0.0.27 → 0.0.29

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 (207) hide show
  1. package/README.md +65 -11
  2. package/dist/examples/programmatic-loop.js +12 -0
  3. package/dist/examples/programmatic-loop.js.map +1 -1
  4. package/dist/src/cli/ask.d.ts +2 -0
  5. package/dist/src/cli/ask.d.ts.map +1 -1
  6. package/dist/src/cli/ask.js +107 -5
  7. package/dist/src/cli/ask.js.map +1 -1
  8. package/dist/src/cli/chat/App.d.ts.map +1 -1
  9. package/dist/src/cli/chat/App.js +16 -4
  10. package/dist/src/cli/chat/App.js.map +1 -1
  11. package/dist/src/cli/chat/components/RuntimeHostInterstitial.d.ts +7 -0
  12. package/dist/src/cli/chat/components/RuntimeHostInterstitial.d.ts.map +1 -0
  13. package/dist/src/cli/chat/components/RuntimeHostInterstitial.js +22 -0
  14. package/dist/src/cli/chat/components/RuntimeHostInterstitial.js.map +1 -0
  15. package/dist/src/cli/chat/components/index.d.ts +1 -0
  16. package/dist/src/cli/chat/components/index.d.ts.map +1 -1
  17. package/dist/src/cli/chat/components/index.js +1 -0
  18. package/dist/src/cli/chat/components/index.js.map +1 -1
  19. package/dist/src/cli/chat/hooks/useAgentRun.d.ts +1 -0
  20. package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -1
  21. package/dist/src/cli/chat/hooks/useAgentRun.js +118 -1
  22. package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -1
  23. package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts +1 -0
  24. package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts.map +1 -1
  25. package/dist/src/cli/chat/hooks/useApprovalFlow.js +3 -0
  26. package/dist/src/cli/chat/hooks/useApprovalFlow.js.map +1 -1
  27. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +3 -1
  28. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  29. package/dist/src/cli/chat/hooks/useChatSessions.js +7 -2
  30. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  31. package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
  32. package/dist/src/cli/chat/utils/format.js +8 -0
  33. package/dist/src/cli/chat/utils/format.js.map +1 -1
  34. package/dist/src/cli/chat/utils/runtime.d.ts +3 -0
  35. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  36. package/dist/src/cli/chat/utils/runtime.js +8 -3
  37. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  38. package/dist/src/cli/daemon.d.ts +1 -0
  39. package/dist/src/cli/daemon.d.ts.map +1 -1
  40. package/dist/src/cli/daemon.js +6 -1
  41. package/dist/src/cli/daemon.js.map +1 -1
  42. package/dist/src/cli/heartbeat/task-commands.d.ts.map +1 -1
  43. package/dist/src/cli/heartbeat/task-commands.js +10 -1
  44. package/dist/src/cli/heartbeat/task-commands.js.map +1 -1
  45. package/dist/src/cli/heartbeat/worker.d.ts.map +1 -1
  46. package/dist/src/cli/heartbeat/worker.js +9 -1
  47. package/dist/src/cli/heartbeat/worker.js.map +1 -1
  48. package/dist/src/cli/main.js +304 -7
  49. package/dist/src/cli/main.js.map +1 -1
  50. package/dist/src/cli/remote/control-plane-client.d.ts +290 -0
  51. package/dist/src/cli/remote/control-plane-client.d.ts.map +1 -0
  52. package/dist/src/cli/remote/control-plane-client.js +11 -0
  53. package/dist/src/cli/remote/control-plane-client.js.map +1 -0
  54. package/dist/src/core/agent/mutation-tracking.d.ts.map +1 -1
  55. package/dist/src/core/agent/mutation-tracking.js +3 -0
  56. package/dist/src/core/agent/mutation-tracking.js.map +1 -1
  57. package/dist/src/core/agent/post-mutation.js +2 -2
  58. package/dist/src/core/agent/post-mutation.js.map +1 -1
  59. package/dist/src/core/agent/run-agent.d.ts.map +1 -1
  60. package/dist/src/core/agent/run-agent.js +132 -28
  61. package/dist/src/core/agent/run-agent.js.map +1 -1
  62. package/dist/src/core/chat/conversation-lines.d.ts.map +1 -1
  63. package/dist/src/core/chat/conversation-lines.js +1 -26
  64. package/dist/src/core/chat/conversation-lines.js.map +1 -1
  65. package/dist/src/core/chat/session-lease.d.ts +23 -0
  66. package/dist/src/core/chat/session-lease.d.ts.map +1 -0
  67. package/dist/src/core/chat/session-lease.js +72 -0
  68. package/dist/src/core/chat/session-lease.js.map +1 -0
  69. package/dist/src/core/chat/session-submit.d.ts +5 -0
  70. package/dist/src/core/chat/session-submit.d.ts.map +1 -1
  71. package/dist/src/core/chat/session-submit.js +243 -108
  72. package/dist/src/core/chat/session-submit.js.map +1 -1
  73. package/dist/src/core/chat/storage.d.ts +4 -1
  74. package/dist/src/core/chat/storage.d.ts.map +1 -1
  75. package/dist/src/core/chat/storage.js +31 -0
  76. package/dist/src/core/chat/storage.js.map +1 -1
  77. package/dist/src/core/chat/trace-summary.d.ts.map +1 -1
  78. package/dist/src/core/chat/trace-summary.js +10 -0
  79. package/dist/src/core/chat/trace-summary.js.map +1 -1
  80. package/dist/src/core/chat/types.d.ts +9 -0
  81. package/dist/src/core/chat/types.d.ts.map +1 -1
  82. package/dist/src/core/memory/catalog.d.ts +46 -0
  83. package/dist/src/core/memory/catalog.d.ts.map +1 -0
  84. package/dist/src/core/memory/catalog.js +230 -0
  85. package/dist/src/core/memory/catalog.js.map +1 -0
  86. package/dist/src/core/memory/domain-prompt.d.ts +2 -0
  87. package/dist/src/core/memory/domain-prompt.d.ts.map +1 -0
  88. package/dist/src/core/memory/domain-prompt.js +35 -0
  89. package/dist/src/core/memory/domain-prompt.js.map +1 -0
  90. package/dist/src/core/memory/maintainer-tools.d.ts +5 -0
  91. package/dist/src/core/memory/maintainer-tools.d.ts.map +1 -0
  92. package/dist/src/core/memory/maintainer-tools.js +10 -0
  93. package/dist/src/core/memory/maintainer-tools.js.map +1 -0
  94. package/dist/src/core/memory/maintainer.d.ts +45 -0
  95. package/dist/src/core/memory/maintainer.d.ts.map +1 -0
  96. package/dist/src/core/memory/maintainer.js +204 -0
  97. package/dist/src/core/memory/maintainer.js.map +1 -0
  98. package/dist/src/core/memory/maintenance-integration.d.ts +20 -0
  99. package/dist/src/core/memory/maintenance-integration.d.ts.map +1 -0
  100. package/dist/src/core/memory/maintenance-integration.js +189 -0
  101. package/dist/src/core/memory/maintenance-integration.js.map +1 -0
  102. package/dist/src/core/memory/templates.d.ts +9 -0
  103. package/dist/src/core/memory/templates.d.ts.map +1 -0
  104. package/dist/src/core/memory/templates.js +32 -0
  105. package/dist/src/core/memory/templates.js.map +1 -0
  106. package/dist/src/core/memory/validation.d.ts +39 -0
  107. package/dist/src/core/memory/validation.d.ts.map +1 -0
  108. package/dist/src/core/memory/validation.js +94 -0
  109. package/dist/src/core/memory/validation.js.map +1 -0
  110. package/dist/src/core/memory/visibility.d.ts +42 -0
  111. package/dist/src/core/memory/visibility.d.ts.map +1 -0
  112. package/dist/src/core/memory/visibility.js +156 -0
  113. package/dist/src/core/memory/visibility.js.map +1 -0
  114. package/dist/src/core/prompts/system-prompt.d.ts.map +1 -1
  115. package/dist/src/core/prompts/system-prompt.js +0 -10
  116. package/dist/src/core/prompts/system-prompt.js.map +1 -1
  117. package/dist/src/core/runtime/daemon-registry.d.ts +39 -0
  118. package/dist/src/core/runtime/daemon-registry.d.ts.map +1 -0
  119. package/dist/src/core/runtime/daemon-registry.js +120 -0
  120. package/dist/src/core/runtime/daemon-registry.js.map +1 -0
  121. package/dist/src/core/runtime/default-tools.d.ts +1 -0
  122. package/dist/src/core/runtime/default-tools.d.ts.map +1 -1
  123. package/dist/src/core/runtime/default-tools.js +22 -4
  124. package/dist/src/core/runtime/default-tools.js.map +1 -1
  125. package/dist/src/core/runtime/heartbeat-task-store.d.ts +2 -0
  126. package/dist/src/core/runtime/heartbeat-task-store.d.ts.map +1 -1
  127. package/dist/src/core/runtime/heartbeat-task-store.js +1 -0
  128. package/dist/src/core/runtime/heartbeat-task-store.js.map +1 -1
  129. package/dist/src/core/runtime/heartbeat-views.d.ts +2 -0
  130. package/dist/src/core/runtime/heartbeat-views.d.ts.map +1 -1
  131. package/dist/src/core/runtime/heartbeat-views.js +2 -0
  132. package/dist/src/core/runtime/heartbeat-views.js.map +1 -1
  133. package/dist/src/core/runtime/heartbeat.d.ts.map +1 -1
  134. package/dist/src/core/runtime/heartbeat.js +9 -2
  135. package/dist/src/core/runtime/heartbeat.js.map +1 -1
  136. package/dist/src/core/runtime/runtime-hosts.d.ts +30 -0
  137. package/dist/src/core/runtime/runtime-hosts.d.ts.map +1 -0
  138. package/dist/src/core/runtime/runtime-hosts.js +95 -0
  139. package/dist/src/core/runtime/runtime-hosts.js.map +1 -0
  140. package/dist/src/core/runtime/workspaces.d.ts +48 -0
  141. package/dist/src/core/runtime/workspaces.d.ts.map +1 -0
  142. package/dist/src/core/runtime/workspaces.js +139 -0
  143. package/dist/src/core/runtime/workspaces.js.map +1 -0
  144. package/dist/src/core/tools/file-edit-core.d.ts +1 -0
  145. package/dist/src/core/tools/file-edit-core.d.ts.map +1 -1
  146. package/dist/src/core/tools/file-edit-core.js +10 -0
  147. package/dist/src/core/tools/file-edit-core.js.map +1 -1
  148. package/dist/src/core/tools/memory-checkpoint.d.ts +8 -0
  149. package/dist/src/core/tools/memory-checkpoint.d.ts.map +1 -0
  150. package/dist/src/core/tools/memory-checkpoint.js +131 -0
  151. package/dist/src/core/tools/memory-checkpoint.js.map +1 -0
  152. package/dist/src/core/tools/memory-notes.d.ts.map +1 -1
  153. package/dist/src/core/tools/memory-notes.js +4 -3
  154. package/dist/src/core/tools/memory-notes.js.map +1 -1
  155. package/dist/src/core/tools/record-knowledge.d.ts +9 -0
  156. package/dist/src/core/tools/record-knowledge.d.ts.map +1 -0
  157. package/dist/src/core/tools/record-knowledge.js +177 -0
  158. package/dist/src/core/tools/record-knowledge.js.map +1 -0
  159. package/dist/src/core/types.d.ts +33 -0
  160. package/dist/src/core/types.d.ts.map +1 -1
  161. package/dist/src/index.d.ts +13 -0
  162. package/dist/src/index.d.ts.map +1 -1
  163. package/dist/src/index.js +8 -0
  164. package/dist/src/index.js.map +1 -1
  165. package/dist/src/server/app.d.ts +5 -2
  166. package/dist/src/server/app.d.ts.map +1 -1
  167. package/dist/src/server/app.js +31 -7
  168. package/dist/src/server/app.js.map +1 -1
  169. package/dist/src/server/features/control-plane/router.d.ts +88 -0
  170. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  171. package/dist/src/server/features/control-plane/router.js +131 -18
  172. package/dist/src/server/features/control-plane/router.js.map +1 -1
  173. package/dist/src/server/features/control-plane/services/ask.d.ts +17 -0
  174. package/dist/src/server/features/control-plane/services/ask.d.ts.map +1 -0
  175. package/dist/src/server/features/control-plane/services/ask.js +63 -0
  176. package/dist/src/server/features/control-plane/services/ask.js.map +1 -0
  177. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +8 -0
  178. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
  179. package/dist/src/server/features/control-plane/services/chat-sessions.js +6 -2
  180. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
  181. package/dist/src/server/features/control-plane/services/control-plane-state.d.ts.map +1 -1
  182. package/dist/src/server/features/control-plane/services/control-plane-state.js +15 -6
  183. package/dist/src/server/features/control-plane/services/control-plane-state.js.map +1 -1
  184. package/dist/src/server/features/control-plane/services/memory.d.ts +22 -0
  185. package/dist/src/server/features/control-plane/services/memory.d.ts.map +1 -0
  186. package/dist/src/server/features/control-plane/services/memory.js +36 -0
  187. package/dist/src/server/features/control-plane/services/memory.js.map +1 -0
  188. package/dist/src/server/features/control-plane/types.d.ts +19 -0
  189. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  190. package/dist/src/server/index.d.ts.map +1 -1
  191. package/dist/src/server/index.js +114 -6
  192. package/dist/src/server/index.js.map +1 -1
  193. package/dist/src/server/router.d.ts +92 -0
  194. package/dist/src/server/router.d.ts.map +1 -1
  195. package/dist/src/server/router.js +4 -0
  196. package/dist/src/server/router.js.map +1 -1
  197. package/dist/src/server/static.d.ts.map +1 -1
  198. package/dist/src/server/static.js +7 -5
  199. package/dist/src/server/static.js.map +1 -1
  200. package/dist/src/server/types.d.ts +22 -0
  201. package/dist/src/server/types.d.ts.map +1 -1
  202. package/dist/src/web/assets/index-BCCIDJRN.js +52 -0
  203. package/dist/src/web/assets/index-DarVaee6.css +2 -0
  204. package/dist/src/web/index.html +2 -2
  205. package/package.json +16 -2
  206. package/dist/src/web/assets/index-BPZ31ir-.js +0 -12
  207. package/dist/src/web/assets/index-C9sFoCL6.css +0 -2
@@ -1,8 +1,11 @@
1
1
  import { join } from 'node:path';
2
- import { createDefaultAgentTools, createLlmAdapter, DEFAULT_OPENAI_MODEL, inferProviderFromModel, runAgentLoop, } from '../../index.js';
2
+ import { readFileSync, writeFileSync } from 'node:fs';
3
+ import { appendMemoryCatalogSystemContext, createDefaultAgentTools, createLlmAdapter, DEFAULT_OPENAI_MODEL, inferProviderFromModel, runAgentLoop, } from '../../index.js';
4
+ import { runMaintenanceForRecordedCandidates } from '../memory/maintenance-integration.js';
3
5
  import { buildCompactionRunningContext, compactChatHistoryWithArchive, estimateChatHistoryTokens } from './compaction.js';
4
6
  import { buildConversationMessages } from './conversation-lines.js';
5
7
  import { formatChatFailureMessage } from './failure-messages.js';
8
+ import { acquireSessionLease, getSessionLeaseConflict, releaseSessionLease } from './session-lease.js';
6
9
  import { loadChatSessions, saveChatSessions, touchSession } from './storage.js';
7
10
  import { saveTrace } from './trace.js';
8
11
  import { countAssistantSteps, summarizeTrace } from './trace-summary.js';
@@ -19,123 +22,255 @@ export async function submitChatSessionPrompt(args) {
19
22
  if (!apiKey) {
20
23
  throw new Error(`Missing provider API key for ${provider}`);
21
24
  }
25
+ const leaseOwner = args.leaseOwner ?? {
26
+ ownerKind: 'ask',
27
+ ownerId: `submit-${process.pid}`,
28
+ clientLabel: 'another Heddle client',
29
+ };
30
+ const leaseConflict = getSessionLeaseConflict(session, leaseOwner);
31
+ if (leaseConflict) {
32
+ throw new Error(leaseConflict);
33
+ }
34
+ const leasedSession = touchSession(acquireSessionLease(session, leaseOwner));
35
+ saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? leasedSession : candidate));
22
36
  const llm = createLlmAdapter({ model, apiKey });
37
+ const memoryDir = join(args.stateRoot, 'memory');
38
+ const systemContext = appendMemoryCatalogSystemContext({
39
+ systemContext: args.systemContext,
40
+ memoryRoot: memoryDir,
41
+ });
23
42
  const tools = createDefaultAgentTools({
24
43
  model,
25
44
  apiKey,
26
45
  workspaceRoot: args.workspaceRoot,
27
- memoryDir: join(args.stateRoot, 'memory'),
46
+ memoryDir,
28
47
  searchIgnoreDirs: [],
29
48
  includePlanTool: true,
30
49
  });
31
- const preflightCompacted = await compactChatHistoryWithArchive({
32
- history: session.history,
33
- model,
34
- sessionId: session.id,
35
- stateRoot: args.stateRoot,
36
- toolNames: tools.map((tool) => tool.name),
37
- goal: args.prompt,
38
- onStatusChange: (event) => {
39
- args.onCompactionStatus?.(event);
40
- if (event.status === 'running') {
41
- const compactionSeed = touchSession({
42
- ...session,
43
- context: buildCompactionRunningContext({
44
- history: session.history,
45
- previous: session.context,
46
- archiveCount: session.archives?.length,
47
- currentSummaryPath: session.context?.currentSummaryPath,
48
- lastArchivePath: event.archivePath,
49
- }),
50
- });
51
- saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? compactionSeed : candidate));
52
- }
53
- },
54
- });
55
- const preflightSession = preflightCompacted.history !== session.history || preflightCompacted.archives.length !== (session.archives?.length ?? 0) ?
56
- touchSession({
57
- ...session,
58
- history: preflightCompacted.history,
59
- context: preflightCompacted.context,
60
- archives: preflightCompacted.archives,
61
- messages: buildConversationMessages(preflightCompacted.history),
62
- })
63
- : session;
64
- if (preflightSession !== session) {
65
- saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? preflightSession : candidate));
66
- }
67
- const result = await runAgentLoop({
68
- goal: args.prompt,
69
- model,
70
- apiKey,
71
- workspaceRoot: args.workspaceRoot,
72
- stateDir: args.stateRoot,
73
- memoryDir: join(args.stateRoot, 'memory'),
74
- llm,
75
- tools,
76
- includeDefaultTools: false,
77
- history: preflightSession.history,
78
- onEvent: args.onEvent,
79
- approveToolCall: args.approveToolCall,
80
- abortSignal: args.abortSignal,
81
- });
82
- const compacted = await compactChatHistoryWithArchive({
83
- history: result.transcript,
84
- model,
85
- sessionId: session.id,
86
- stateRoot: args.stateRoot,
87
- usage: result.usage,
88
- toolNames: tools.map((tool) => tool.name),
89
- goal: args.prompt,
90
- onStatusChange: (event) => {
91
- args.onCompactionStatus?.(event);
92
- if (event.status === 'running') {
93
- const compactionSeed = touchSession({
94
- ...preflightSession,
95
- history: result.transcript,
96
- context: buildCompactionRunningContext({
50
+ try {
51
+ const preflightCompacted = await compactChatHistoryWithArchive({
52
+ history: session.history,
53
+ model,
54
+ sessionId: session.id,
55
+ stateRoot: args.stateRoot,
56
+ toolNames: tools.map((tool) => tool.name),
57
+ goal: args.prompt,
58
+ systemContext,
59
+ onStatusChange: (event) => {
60
+ args.onCompactionStatus?.(event);
61
+ if (event.status === 'running') {
62
+ const compactionSeed = touchSession({
63
+ ...leasedSession,
64
+ context: buildCompactionRunningContext({
65
+ history: leasedSession.history,
66
+ previous: leasedSession.context,
67
+ archiveCount: leasedSession.archives?.length,
68
+ currentSummaryPath: leasedSession.context?.currentSummaryPath,
69
+ lastArchivePath: event.archivePath,
70
+ }),
71
+ });
72
+ saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? compactionSeed : candidate));
73
+ }
74
+ },
75
+ });
76
+ const preflightSession = preflightCompacted.history !== leasedSession.history || preflightCompacted.archives.length !== (leasedSession.archives?.length ?? 0) ?
77
+ touchSession({
78
+ ...leasedSession,
79
+ history: preflightCompacted.history,
80
+ context: preflightCompacted.context,
81
+ archives: preflightCompacted.archives,
82
+ messages: buildConversationMessages(preflightCompacted.history),
83
+ })
84
+ : leasedSession;
85
+ if (preflightSession !== leasedSession) {
86
+ saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? preflightSession : candidate));
87
+ }
88
+ const result = await runAgentLoop({
89
+ goal: args.prompt,
90
+ model,
91
+ apiKey,
92
+ workspaceRoot: args.workspaceRoot,
93
+ stateDir: args.stateRoot,
94
+ memoryDir,
95
+ llm,
96
+ tools,
97
+ includeDefaultTools: false,
98
+ history: preflightSession.history,
99
+ systemContext,
100
+ onEvent: args.onEvent,
101
+ approveToolCall: args.approveToolCall,
102
+ abortSignal: args.abortSignal,
103
+ });
104
+ const maintenanceMode = args.memoryMaintenanceMode ?? 'background';
105
+ const inlineMaintenance = maintenanceMode === 'inline' ?
106
+ await runMaintenanceForRecordedCandidates({
107
+ memoryRoot: memoryDir,
108
+ llm,
109
+ source: `chat session ${session.id}`,
110
+ trace: result.trace,
111
+ maxSteps: 20,
112
+ onTraceEvent: (event) => args.onEvent?.({ type: 'trace', runId: result.state.runId, event, timestamp: new Date().toISOString() }),
113
+ })
114
+ : undefined;
115
+ const resultTrace = inlineMaintenance && inlineMaintenance.events.length > 0 ?
116
+ [...result.trace, ...inlineMaintenance.events]
117
+ : result.trace;
118
+ const resultForPersistence = {
119
+ ...result,
120
+ trace: resultTrace,
121
+ state: {
122
+ ...result.state,
123
+ trace: resultTrace,
124
+ },
125
+ };
126
+ const compacted = await compactChatHistoryWithArchive({
127
+ history: resultForPersistence.transcript,
128
+ model,
129
+ sessionId: session.id,
130
+ stateRoot: args.stateRoot,
131
+ usage: resultForPersistence.usage,
132
+ toolNames: tools.map((tool) => tool.name),
133
+ goal: args.prompt,
134
+ systemContext,
135
+ onStatusChange: (event) => {
136
+ args.onCompactionStatus?.(event);
137
+ if (event.status === 'running') {
138
+ const compactionSeed = touchSession({
139
+ ...preflightSession,
97
140
  history: result.transcript,
98
- previous: preflightSession.context,
99
- archiveCount: preflightSession.archives?.length,
100
- currentSummaryPath: preflightSession.context?.currentSummaryPath,
101
- lastArchivePath: event.archivePath,
102
- }),
103
- });
104
- saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? compactionSeed : candidate));
141
+ context: buildCompactionRunningContext({
142
+ history: resultForPersistence.transcript,
143
+ previous: preflightSession.context,
144
+ archiveCount: preflightSession.archives?.length,
145
+ currentSummaryPath: preflightSession.context?.currentSummaryPath,
146
+ lastArchivePath: event.archivePath,
147
+ }),
148
+ });
149
+ saveChatSessions(args.sessionStoragePath, sessions.map((candidate) => candidate.id === session.id ? compactionSeed : candidate));
150
+ }
151
+ },
152
+ });
153
+ const traceFile = saveTrace(join(args.stateRoot, 'traces'), resultForPersistence.trace);
154
+ const nextTurn = {
155
+ id: `server-turn-${Date.now()}`,
156
+ prompt: args.prompt,
157
+ outcome: resultForPersistence.outcome,
158
+ summary: resultForPersistence.summary,
159
+ steps: countAssistantSteps(resultForPersistence.trace),
160
+ traceFile,
161
+ events: summarizeTrace(resultForPersistence.trace),
162
+ };
163
+ const formattedSummary = resultForPersistence.outcome === 'error' ?
164
+ formatChatFailureMessage(resultForPersistence.summary, {
165
+ model,
166
+ estimatedHistoryTokens: estimateChatHistoryTokens(session.history),
167
+ })
168
+ : resultForPersistence.summary;
169
+ const updatedSession = touchSession({
170
+ ...preflightSession,
171
+ lastContinuePrompt: args.prompt,
172
+ history: compacted.history,
173
+ context: compacted.context,
174
+ archives: compacted.archives,
175
+ lease: undefined,
176
+ messages: buildConversationMessages(compacted.history),
177
+ turns: [...preflightSession.turns, nextTurn].slice(-8),
178
+ });
179
+ const nextSessions = sessions.map((candidate) => candidate.id === session.id ? updatedSession : candidate);
180
+ saveChatSessions(args.sessionStoragePath, nextSessions);
181
+ if (maintenanceMode === 'background') {
182
+ scheduleBackgroundMemoryMaintenance({
183
+ memoryRoot: memoryDir,
184
+ llm,
185
+ source: `chat session ${session.id}`,
186
+ trace: result.trace,
187
+ traceFile,
188
+ sessionStoragePath: args.sessionStoragePath,
189
+ sessionId: session.id,
190
+ runId: result.state?.runId ?? `session-${session.id}`,
191
+ onEvent: args.onEvent,
192
+ });
193
+ }
194
+ return {
195
+ outcome: resultForPersistence.outcome,
196
+ summary: formattedSummary,
197
+ session: updatedSession,
198
+ };
199
+ }
200
+ finally {
201
+ clearChatSessionLease(args.sessionStoragePath, session.id, leaseOwner);
202
+ }
203
+ }
204
+ function scheduleBackgroundMemoryMaintenance(args) {
205
+ void (async () => {
206
+ const maintenance = await runMaintenanceForRecordedCandidates({
207
+ memoryRoot: args.memoryRoot,
208
+ llm: args.llm,
209
+ source: args.source,
210
+ trace: args.trace,
211
+ maxSteps: 20,
212
+ onTraceEvent: (event) => args.onEvent?.({ type: 'trace', runId: args.runId, event, timestamp: new Date().toISOString() }),
213
+ });
214
+ if (maintenance.events.length === 0) {
215
+ return;
216
+ }
217
+ const currentTrace = readTraceEvents(args.traceFile);
218
+ const nextTrace = [...currentTrace, ...maintenance.events];
219
+ writeFileSync(args.traceFile, `${JSON.stringify(nextTrace, null, 2)}\n`, 'utf8');
220
+ const sessions = loadChatSessions(args.sessionStoragePath, true);
221
+ const nextSessions = sessions.map((session) => {
222
+ if (session.id !== args.sessionId) {
223
+ return session;
105
224
  }
106
- },
225
+ return touchSession({
226
+ ...session,
227
+ turns: session.turns.map((turn, index) => (index === session.turns.length - 1 ?
228
+ {
229
+ ...turn,
230
+ events: summarizeTrace(nextTrace),
231
+ }
232
+ : turn)),
233
+ });
234
+ });
235
+ saveChatSessions(args.sessionStoragePath, nextSessions);
236
+ })().catch((error) => {
237
+ args.onEvent?.({
238
+ type: 'trace',
239
+ runId: args.runId,
240
+ event: {
241
+ type: 'memory.maintenance_failed',
242
+ runId: `memory-run-${Date.now()}`,
243
+ error: error instanceof Error ? error.message : String(error),
244
+ candidateIds: [],
245
+ step: nextTraceStep(args.trace),
246
+ timestamp: new Date().toISOString(),
247
+ },
248
+ timestamp: new Date().toISOString(),
249
+ });
107
250
  });
108
- const traceFile = saveTrace(join(args.stateRoot, 'traces'), result.trace);
109
- const nextTurn = {
110
- id: `server-turn-${Date.now()}`,
111
- prompt: args.prompt,
112
- outcome: result.outcome,
113
- summary: result.summary,
114
- steps: countAssistantSteps(result.trace),
115
- traceFile,
116
- events: summarizeTrace(result.trace),
117
- };
118
- const formattedSummary = result.outcome === 'error' ?
119
- formatChatFailureMessage(result.summary, {
120
- model,
121
- estimatedHistoryTokens: estimateChatHistoryTokens(session.history),
122
- })
123
- : result.summary;
124
- const updatedSession = touchSession({
125
- ...preflightSession,
126
- lastContinuePrompt: args.prompt,
127
- history: compacted.history,
128
- context: compacted.context,
129
- archives: compacted.archives,
130
- messages: buildConversationMessages(compacted.history),
131
- turns: [...preflightSession.turns, nextTurn].slice(-8),
132
- });
133
- const nextSessions = sessions.map((candidate) => candidate.id === session.id ? updatedSession : candidate);
134
- saveChatSessions(args.sessionStoragePath, nextSessions);
135
- return {
136
- outcome: result.outcome,
137
- summary: formattedSummary,
138
- session: updatedSession,
139
- };
251
+ }
252
+ function readTraceEvents(path) {
253
+ try {
254
+ const parsed = JSON.parse(readFileSync(path, 'utf8'));
255
+ return Array.isArray(parsed) ? parsed : [];
256
+ }
257
+ catch {
258
+ return [];
259
+ }
260
+ }
261
+ function nextTraceStep(trace) {
262
+ return trace.reduce((max, event) => 'step' in event ? Math.max(max, event.step) : max, 0) + 1;
263
+ }
264
+ export function clearChatSessionLease(sessionStoragePath, sessionId, owner) {
265
+ const sessions = loadChatSessions(sessionStoragePath, true);
266
+ const session = sessions.find((candidate) => candidate.id === sessionId);
267
+ if (!session?.lease) {
268
+ return;
269
+ }
270
+ const released = releaseSessionLease(session, owner);
271
+ if (released === session) {
272
+ return;
273
+ }
274
+ saveChatSessions(sessionStoragePath, sessions.map((candidate) => candidate.id === sessionId ? touchSession(released) : candidate));
140
275
  }
141
276
  //# sourceMappingURL=session-submit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../../../src/core/chat/session-submit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../../../src/core/chat/session-submit.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ChatArchiveRecord, ChatContextStats, ChatSession, ConversationLine } from './types.js';
1
+ import type { ChatArchiveRecord, ChatContextStats, ChatSession, ChatSessionLease, ConversationLine } from './types.js';
2
2
  type ChatSessionCatalogEntry = {
3
3
  id: string;
4
4
  name: string;
5
+ workspaceId?: string;
5
6
  createdAt: string;
6
7
  updatedAt: string;
7
8
  model?: string;
@@ -9,6 +10,7 @@ type ChatSessionCatalogEntry = {
9
10
  lastContinuePrompt?: string;
10
11
  context?: ChatContextStats;
11
12
  archives?: ChatArchiveRecord[];
13
+ lease?: ChatSessionLease;
12
14
  };
13
15
  export declare function createInitialMessages(apiKeyPresent: boolean): ConversationLine[];
14
16
  export declare function createChatSession(options: {
@@ -16,6 +18,7 @@ export declare function createChatSession(options: {
16
18
  name: string;
17
19
  apiKeyPresent: boolean;
18
20
  model?: string;
21
+ workspaceId?: string;
19
22
  }): ChatSession;
20
23
  export declare function touchSession(session: ChatSession): ChatSession;
21
24
  export declare function summarizeSession(session: ChatSession): string;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAGlH,KAAK,uBAAuB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC;AAOF,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAiBhF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,WAAW,CAgBd;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAI7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,EAAE,CAkB5F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAItF;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CASxH;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,EAAE,CAQrG;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QA0B7E;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM;;;;EAQ5D"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAGpI,KAAK,uBAAuB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAOF,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAiBhF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,WAAW,CAkBd;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAI7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,EAAE,CAkB5F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAItF;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CASxH;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,WAAW,EAAE,CAQrG;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QA0B7E;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM;;;;EAQ5D"}
@@ -22,6 +22,7 @@ export function createChatSession(options) {
22
22
  return {
23
23
  id: options.id,
24
24
  name: options.name,
25
+ workspaceId: options.workspaceId,
25
26
  history: [],
26
27
  messages: createInitialMessages(options.apiKeyPresent),
27
28
  turns: [],
@@ -32,6 +33,7 @@ export function createChatSession(options) {
32
33
  lastContinuePrompt: undefined,
33
34
  context: undefined,
34
35
  archives: [],
36
+ lease: undefined,
35
37
  };
36
38
  }
37
39
  export function touchSession(session) {
@@ -181,6 +183,7 @@ function parseCatalogEntry(value) {
181
183
  return [{
182
184
  id: candidate.id,
183
185
  name: candidate.name,
186
+ workspaceId: typeof candidate.workspaceId === 'string' ? candidate.workspaceId : undefined,
184
187
  createdAt,
185
188
  updatedAt,
186
189
  model: typeof candidate.model === 'string' ? candidate.model : undefined,
@@ -188,12 +191,14 @@ function parseCatalogEntry(value) {
188
191
  lastContinuePrompt: typeof candidate.lastContinuePrompt === 'string' ? candidate.lastContinuePrompt : undefined,
189
192
  context: isChatContextStats(candidate.context) ? candidate.context : undefined,
190
193
  archives: Array.isArray(candidate.archives) ? candidate.archives.flatMap(parseArchiveRecord) : undefined,
194
+ lease: parseLease(candidate.lease),
191
195
  }];
192
196
  }
193
197
  function projectCatalogEntry(session) {
194
198
  return {
195
199
  id: session.id,
196
200
  name: session.name,
201
+ workspaceId: session.workspaceId,
197
202
  createdAt: session.createdAt,
198
203
  updatedAt: session.updatedAt,
199
204
  model: session.model,
@@ -201,6 +206,7 @@ function projectCatalogEntry(session) {
201
206
  lastContinuePrompt: session.lastContinuePrompt,
202
207
  context: session.context,
203
208
  archives: session.archives,
209
+ lease: session.lease,
204
210
  };
205
211
  }
206
212
  function readSessionFile(sessionsDir, entry, apiKeyPresent) {
@@ -217,6 +223,7 @@ function readSessionFile(sessionsDir, entry, apiKeyPresent) {
217
223
  return [{
218
224
  id: entry.id,
219
225
  name: entry.name,
226
+ workspaceId: entry.workspaceId,
220
227
  createdAt: entry.createdAt,
221
228
  updatedAt: entry.updatedAt,
222
229
  model: entry.model,
@@ -224,6 +231,7 @@ function readSessionFile(sessionsDir, entry, apiKeyPresent) {
224
231
  lastContinuePrompt: entry.lastContinuePrompt,
225
232
  context: entry.context,
226
233
  archives: entry.archives,
234
+ lease: entry.lease,
227
235
  history: Array.isArray(payload.history) ? payload.history : [],
228
236
  messages: Array.isArray(payload.messages) && payload.messages.length > 0 ?
229
237
  payload.messages.filter(isConversationLine)
@@ -255,10 +263,12 @@ function writeCatalogIfChanged(catalogPath, catalog, previousCatalog) {
255
263
  function serializeSessionBody(session) {
256
264
  return `${JSON.stringify({
257
265
  id: session.id,
266
+ workspaceId: session.workspaceId,
258
267
  history: session.history,
259
268
  messages: session.messages,
260
269
  turns: session.turns,
261
270
  archives: session.archives,
271
+ lease: session.lease,
262
272
  }, null, 2)}\n`;
263
273
  }
264
274
  function readSessionFileContents(sessionsDir, sessionId) {
@@ -332,6 +342,7 @@ function parseSavedSession(value, apiKeyPresent) {
332
342
  return [{
333
343
  id: candidate.id,
334
344
  name: candidate.name,
345
+ workspaceId: typeof candidate.workspaceId === 'string' ? candidate.workspaceId : undefined,
335
346
  history: Array.isArray(candidate.history) ? candidate.history : [],
336
347
  messages: Array.isArray(candidate.messages) && candidate.messages.length > 0 ?
337
348
  candidate.messages.filter(isConversationLine)
@@ -344,8 +355,28 @@ function parseSavedSession(value, apiKeyPresent) {
344
355
  lastContinuePrompt: typeof candidate.lastContinuePrompt === 'string' ? candidate.lastContinuePrompt : undefined,
345
356
  context: isChatContextStats(candidate.context) ? candidate.context : undefined,
346
357
  archives: Array.isArray(candidate.archives) ? candidate.archives.flatMap(parseArchiveRecord) : undefined,
358
+ lease: parseLease(candidate.lease),
347
359
  }];
348
360
  }
361
+ function parseLease(value) {
362
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
363
+ return undefined;
364
+ }
365
+ const candidate = value;
366
+ if ((candidate.ownerKind !== 'tui' && candidate.ownerKind !== 'daemon' && candidate.ownerKind !== 'ask') ||
367
+ typeof candidate.ownerId !== 'string' ||
368
+ typeof candidate.acquiredAt !== 'string' ||
369
+ typeof candidate.lastSeenAt !== 'string') {
370
+ return undefined;
371
+ }
372
+ return {
373
+ ownerKind: candidate.ownerKind,
374
+ ownerId: candidate.ownerId,
375
+ acquiredAt: candidate.acquiredAt,
376
+ lastSeenAt: candidate.lastSeenAt,
377
+ clientLabel: typeof candidate.clientLabel === 'string' ? candidate.clientLabel : undefined,
378
+ };
379
+ }
349
380
  function isConversationLine(value) {
350
381
  if (!value || typeof value !== 'object' || Array.isArray(value)) {
351
382
  return false;