@roackb2/heddle 0.0.15 → 0.0.16

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 (68) hide show
  1. package/README.md +31 -3
  2. package/dist/src/cli/chat/App.js +1 -1
  3. package/dist/src/cli/chat/App.js.map +1 -1
  4. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +2 -2
  5. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  6. package/dist/src/cli/chat/hooks/useChatSessions.js +4 -4
  7. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  8. package/dist/src/cli/chat/state/approval-rules.js +66 -5
  9. package/dist/src/cli/chat/state/approval-rules.js.map +1 -1
  10. package/dist/src/cli/chat/state/storage.d.ts +1 -1
  11. package/dist/src/cli/chat/state/storage.d.ts.map +1 -1
  12. package/dist/src/cli/chat/state/storage.js +1 -1
  13. package/dist/src/cli/chat/state/storage.js.map +1 -1
  14. package/dist/src/cli/chat/utils/runtime.d.ts +1 -1
  15. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  16. package/dist/src/cli/chat/utils/runtime.js +1 -1
  17. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  18. package/dist/src/cli/daemon.js +2 -2
  19. package/dist/src/cli/heartbeat.d.ts.map +1 -1
  20. package/dist/src/cli/heartbeat.js +136 -46
  21. package/dist/src/cli/heartbeat.js.map +1 -1
  22. package/dist/src/cli/main.js +107 -100
  23. package/dist/src/cli/main.js.map +1 -1
  24. package/dist/src/cli/session.d.ts +11 -0
  25. package/dist/src/cli/session.d.ts.map +1 -0
  26. package/dist/src/cli/session.js +30 -0
  27. package/dist/src/cli/session.js.map +1 -0
  28. package/dist/src/core/agent/mutation-tracking.js +13 -3
  29. package/dist/src/core/agent/mutation-tracking.js.map +1 -1
  30. package/dist/src/core/chat/session-submit.d.ts +9 -1
  31. package/dist/src/core/chat/session-submit.d.ts.map +1 -1
  32. package/dist/src/core/chat/session-submit.js +5 -2
  33. package/dist/src/core/chat/session-submit.js.map +1 -1
  34. package/dist/src/core/chat/storage.d.ts +20 -1
  35. package/dist/src/core/chat/storage.d.ts.map +1 -1
  36. package/dist/src/core/chat/storage.js +260 -23
  37. package/dist/src/core/chat/storage.js.map +1 -1
  38. package/dist/src/server/app.d.ts.map +1 -1
  39. package/dist/src/server/app.js +40 -0
  40. package/dist/src/server/app.js.map +1 -1
  41. package/dist/src/server/features/control-plane/router.d.ts +80 -0
  42. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  43. package/dist/src/server/features/control-plane/router.js +79 -5
  44. package/dist/src/server/features/control-plane/router.js.map +1 -1
  45. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +32 -7
  46. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
  47. package/dist/src/server/features/control-plane/services/chat-sessions.js +191 -26
  48. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
  49. package/dist/src/server/features/control-plane/services/control-plane-state.js +1 -1
  50. package/dist/src/server/features/control-plane/services/control-plane-state.js.map +1 -1
  51. package/dist/src/server/features/control-plane/services/workspace-files.d.ts +9 -0
  52. package/dist/src/server/features/control-plane/services/workspace-files.d.ts.map +1 -0
  53. package/dist/src/server/features/control-plane/services/workspace-files.js +71 -0
  54. package/dist/src/server/features/control-plane/services/workspace-files.js.map +1 -0
  55. package/dist/src/server/features/control-plane/types.d.ts +13 -0
  56. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  57. package/dist/src/server/index.d.ts +2 -1
  58. package/dist/src/server/index.d.ts.map +1 -1
  59. package/dist/src/server/index.js +2 -1
  60. package/dist/src/server/index.js.map +1 -1
  61. package/dist/src/server/router.d.ts +80 -0
  62. package/dist/src/server/router.d.ts.map +1 -1
  63. package/dist/src/web/assets/index-C_kziU0x.css +1 -0
  64. package/dist/src/web/assets/index-DecqlZlx.js +12 -0
  65. package/dist/src/web/index.html +2 -2
  66. package/package.json +2 -1
  67. package/dist/src/web/assets/index-DH9iWMSO.js +0 -9
  68. package/dist/src/web/assets/index-DyCJ7Ml4.css +0 -1
@@ -0,0 +1,30 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { deriveSessionStoragePaths, migrateLegacyChatSessions } from '../core/chat/storage.js';
4
+ export async function runSessionCli(args, options = {}) {
5
+ const parsed = parseSessionArgs(args);
6
+ if (parsed.command !== 'migrate') {
7
+ process.stdout.write('Usage: heddle session migrate\n');
8
+ return;
9
+ }
10
+ const workspaceRoot = options.workspaceRoot ?? process.cwd();
11
+ const stateDir = options.stateDir ?? '.heddle';
12
+ const sessionsPath = resolve(workspaceRoot, stateDir, 'chat-sessions.json');
13
+ const paths = deriveSessionStoragePaths(sessionsPath);
14
+ const hadLegacyFile = existsSync(paths.legacyPath);
15
+ const hadCatalog = existsSync(paths.catalogPath);
16
+ const sessions = migrateLegacyChatSessions(sessionsPath, true);
17
+ process.stdout.write([
18
+ `Migrated ${sessions.length} chat sessions.`,
19
+ `Legacy file: ${hadLegacyFile ? 'preserved' : 'not found'} at ${paths.legacyPath}`,
20
+ `Catalog: ${existsSync(paths.catalogPath) ? (hadCatalog ? 'updated' : 'created') : 'missing'} at ${paths.catalogPath}`,
21
+ `Per-session directory: ${paths.sessionsDir}`,
22
+ ].join('\n') + '\n');
23
+ }
24
+ export function parseSessionArgs(args) {
25
+ const [command] = args;
26
+ return {
27
+ command: command === 'migrate' ? 'migrate' : undefined,
28
+ };
29
+ }
30
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAO/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,UAA6B,EAAE;IACjF,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAE/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,YAAY,QAAQ,CAAC,MAAM,iBAAiB;QAC5C,gBAAgB,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,OAAO,KAAK,CAAC,UAAU,EAAE;QAClF,YAAY,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,KAAK,CAAC,WAAW,EAAE;QACtH,0BAA0B,KAAK,CAAC,WAAW,EAAE;KAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACpB,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACvB,OAAO;QACL,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACvD,CAAC;AACJ,CAAC"}
@@ -109,15 +109,25 @@ function describeEditMutation(input) {
109
109
  }
110
110
  function summarizeCommandEvidence(output) {
111
111
  if (!output || typeof output !== 'object' || Array.isArray(output)) {
112
- return 'no structured command output recorded';
112
+ return 'command completed';
113
113
  }
114
114
  const candidate = output;
115
115
  const command = typeof candidate.command === 'string' && candidate.command.trim() ? candidate.command.trim() : 'command';
116
116
  const stdout = typeof candidate.stdout === 'string' ? candidate.stdout.trim() : '';
117
117
  const stderr = typeof candidate.stderr === 'string' ? candidate.stderr.trim() : '';
118
118
  const exitCode = typeof candidate.exitCode === 'number' ? candidate.exitCode : 0;
119
+ const normalized = normalizeCommand(command);
120
+ if (normalized.startsWith('git status') || normalized.startsWith('git diff')) {
121
+ return `${command} reviewed (exit ${exitCode})`;
122
+ }
123
+ if (/^(?:yarn test|yarn build|yarn lint|yarn vitest|vitest|tsc)\b/.test(normalized)) {
124
+ return `${command} passed (exit ${exitCode})`;
125
+ }
119
126
  const body = stdout || stderr;
120
- const snippet = body ? body.replace(/\s+/g, ' ').slice(0, 120) : 'no stdout/stderr output';
121
- return `${command} => exit ${exitCode}, ${snippet}`;
127
+ if (!body) {
128
+ return `${command} completed (exit ${exitCode})`;
129
+ }
130
+ const snippet = body.replace(/\s+/g, ' ').slice(0, 80);
131
+ return `${command} completed (exit ${exitCode}): ${snippet}`;
122
132
  }
123
133
  //# sourceMappingURL=mutation-tracking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-tracking.js","sourceRoot":"","sources":["../../../../src/core/agent/mutation-tracking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutation-tracking.js","sourceRoot":"","sources":["../../../../src/core/agent/mutation-tracking.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
+ import type { ToolCall, ToolDefinition } from '../../index.js';
1
2
  import type { ChatSession } from './types.js';
3
+ import type { AgentLoopEvent } from '../../index.js';
2
4
  export type SubmitChatSessionPromptArgs = {
3
5
  workspaceRoot: string;
4
6
  stateRoot: string;
5
- sessionsPath: string;
7
+ sessionStoragePath: string;
6
8
  sessionId: string;
7
9
  prompt: string;
10
+ onEvent?: (event: AgentLoopEvent) => void;
11
+ approveToolCall?: (call: ToolCall, tool: ToolDefinition) => Promise<{
12
+ approved: boolean;
13
+ reason?: string;
14
+ }>;
15
+ abortSignal?: AbortSignal;
8
16
  };
9
17
  export declare function submitChatSessionPrompt(args: SubmitChatSessionPromptArgs): Promise<{
10
18
  outcome: import("../types.js").StopReason;
@@ -1 +1 @@
1
- {"version":3,"file":"session-submit.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/session-submit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,2BAA2B;;;;GAgF9E"}
1
+ {"version":3,"file":"session-submit.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/session-submit.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5G,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,2BAA2B;;;;GAmF9E"}
@@ -6,7 +6,7 @@ import { buildConversationMessages, countAssistantSteps, formatChatFailureMessag
6
6
  import { saveTrace } from './trace.js';
7
7
  import { resolveApiKeyForModel } from '../../core/runtime/api-keys.js';
8
8
  export async function submitChatSessionPrompt(args) {
9
- const sessions = loadChatSessions(args.sessionsPath, true);
9
+ const sessions = loadChatSessions(args.sessionStoragePath, true);
10
10
  const session = sessions.find((candidate) => candidate.id === args.sessionId);
11
11
  if (!session) {
12
12
  throw new Error(`Chat session not found: ${args.sessionId}`);
@@ -37,6 +37,9 @@ export async function submitChatSessionPrompt(args) {
37
37
  tools,
38
38
  includeDefaultTools: false,
39
39
  history: session.history,
40
+ onEvent: args.onEvent,
41
+ approveToolCall: args.approveToolCall,
42
+ abortSignal: args.abortSignal,
40
43
  });
41
44
  const compacted = compactChatHistory({
42
45
  history: result.transcript,
@@ -70,7 +73,7 @@ export async function submitChatSessionPrompt(args) {
70
73
  turns: [...session.turns, nextTurn].slice(-8),
71
74
  });
72
75
  const nextSessions = sessions.map((candidate) => candidate.id === session.id ? updatedSession : candidate);
73
- saveChatSessions(args.sessionsPath, nextSessions);
76
+ saveChatSessions(args.sessionStoragePath, nextSessions);
74
77
  return {
75
78
  outcome: result.outcome,
76
79
  summary: formattedSummary,
@@ -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,4 +1,14 @@
1
- import type { ChatSession, ConversationLine } from './types.js';
1
+ import type { ChatContextStats, ChatSession, ConversationLine } from './types.js';
2
+ type ChatSessionCatalogEntry = {
3
+ id: string;
4
+ name: string;
5
+ createdAt: string;
6
+ updatedAt: string;
7
+ model?: string;
8
+ driftEnabled?: boolean;
9
+ lastContinuePrompt?: string;
10
+ context?: ChatContextStats;
11
+ };
2
12
  export declare function createInitialMessages(apiKeyPresent: boolean): ConversationLine[];
3
13
  export declare function createChatSession(options: {
4
14
  id: string;
@@ -10,5 +20,14 @@ export declare function touchSession(session: ChatSession): ChatSession;
10
20
  export declare function summarizeSession(session: ChatSession): string;
11
21
  export declare function isGenericSessionName(name: string): boolean;
12
22
  export declare function loadChatSessions(sessionsPath: string, apiKeyPresent: boolean): ChatSession[];
23
+ export declare function readChatSessionCatalog(sessionsPath: string): ChatSessionCatalogEntry[];
24
+ export declare function readChatSession(sessionsPath: string, sessionId: string, apiKeyPresent: boolean): ChatSession | undefined;
25
+ export declare function migrateLegacyChatSessions(sessionsPath: string, apiKeyPresent: boolean): ChatSession[];
13
26
  export declare function saveChatSessions(sessionsPath: string, sessions: ChatSession[]): void;
27
+ export declare function deriveSessionStoragePaths(storagePath: string): {
28
+ legacyPath: string;
29
+ catalogPath: string;
30
+ sessionsDir: string;
31
+ };
32
+ export {};
14
33
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,WAAW,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAG/F,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,CAed;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,CAmC5F;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAG7E"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAG/F,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;CAC5B,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,CAed;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,5 +1,5 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { dirname } from 'node:path';
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
3
  import { truncate } from './format.js';
4
4
  export function createInitialMessages(apiKeyPresent) {
5
5
  return [
@@ -45,40 +45,274 @@ export function isGenericSessionName(name) {
45
45
  return /^Session \d+$/.test(name.trim());
46
46
  }
47
47
  export function loadChatSessions(sessionsPath, apiKeyPresent) {
48
+ const resolved = loadChatSessionsFromCurrentStorage(sessionsPath, apiKeyPresent);
49
+ if (resolved.length > 0) {
50
+ return resolved;
51
+ }
52
+ const migrated = migrateLegacyChatSessions(sessionsPath, apiKeyPresent);
53
+ if (migrated.length > 0) {
54
+ return migrated;
55
+ }
56
+ return [
57
+ createChatSession({
58
+ id: 'session-1',
59
+ name: 'Session 1',
60
+ apiKeyPresent,
61
+ }),
62
+ ];
63
+ }
64
+ export function readChatSessionCatalog(sessionsPath) {
65
+ const paths = deriveSessionStoragePaths(sessionsPath);
66
+ const catalog = readCatalog(paths.catalogPath);
67
+ return catalog?.sessions.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt)) ?? [];
68
+ }
69
+ export function readChatSession(sessionsPath, sessionId, apiKeyPresent) {
70
+ const paths = deriveSessionStoragePaths(sessionsPath);
71
+ const catalog = readCatalog(paths.catalogPath);
72
+ const entry = catalog?.sessions.find((candidate) => candidate.id === sessionId);
73
+ if (!entry) {
74
+ return undefined;
75
+ }
76
+ return readSessionFile(paths.sessionsDir, entry, apiKeyPresent)[0];
77
+ }
78
+ export function migrateLegacyChatSessions(sessionsPath, apiKeyPresent) {
79
+ const legacySessions = loadLegacyChatSessions(sessionsPath, apiKeyPresent);
80
+ if (legacySessions.length === 0) {
81
+ return [];
82
+ }
83
+ saveChatSessions(sessionsPath, legacySessions);
84
+ return legacySessions.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
85
+ }
86
+ export function saveChatSessions(sessionsPath, sessions) {
87
+ mkdirSync(dirname(sessionsPath), { recursive: true });
88
+ const paths = deriveSessionStoragePaths(sessionsPath);
89
+ mkdirSync(paths.sessionsDir, { recursive: true });
90
+ const sorted = dedupeSessionsById(sessions).sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
91
+ const previousCatalog = readCatalog(paths.catalogPath);
92
+ const previousSessionBodies = new Map();
93
+ for (const entry of previousCatalog?.sessions ?? []) {
94
+ const body = readSessionFileContents(paths.sessionsDir, entry.id);
95
+ if (body !== undefined) {
96
+ previousSessionBodies.set(entry.id, body);
97
+ }
98
+ }
99
+ for (const session of sorted) {
100
+ writeSessionFileIfChanged(paths.sessionsDir, session, previousSessionBodies.get(session.id));
101
+ }
102
+ const catalog = {
103
+ version: 1,
104
+ sessions: sorted.map((session) => projectCatalogEntry(session)),
105
+ };
106
+ writeCatalogIfChanged(paths.catalogPath, catalog, previousCatalog);
107
+ removeOrphanedSessionFiles(paths.sessionsDir, catalog.sessions.map((session) => session.id));
108
+ }
109
+ export function deriveSessionStoragePaths(storagePath) {
110
+ const stateDir = dirname(storagePath);
111
+ const legacyPath = storagePath.endsWith('chat-sessions.catalog.json') ? join(stateDir, 'chat-sessions.json') : storagePath;
112
+ return {
113
+ legacyPath,
114
+ catalogPath: join(stateDir, 'chat-sessions.catalog.json'),
115
+ sessionsDir: join(stateDir, 'chat-sessions'),
116
+ };
117
+ }
118
+ function loadChatSessionsFromCurrentStorage(sessionsPath, apiKeyPresent) {
119
+ const paths = deriveSessionStoragePaths(sessionsPath);
120
+ return loadSessionsFromCatalog(paths, apiKeyPresent);
121
+ }
122
+ function loadSessionsFromCatalog(paths, apiKeyPresent) {
123
+ if (!existsSync(paths.catalogPath)) {
124
+ return [];
125
+ }
126
+ try {
127
+ const raw = JSON.parse(readFileSync(paths.catalogPath, 'utf8'));
128
+ const catalog = parseCatalog(raw);
129
+ if (!catalog) {
130
+ return [];
131
+ }
132
+ const sessions = catalog.sessions.flatMap((entry) => readSessionFile(paths.sessionsDir, entry, apiKeyPresent));
133
+ return sessions.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
134
+ }
135
+ catch (error) {
136
+ process.stderr.write(`Failed to load chat session catalog from ${paths.catalogPath}: ${error instanceof Error ? error.message : String(error)}\n`);
137
+ return [];
138
+ }
139
+ }
140
+ function loadLegacyChatSessions(sessionsPath, apiKeyPresent) {
48
141
  try {
49
142
  if (!existsSync(sessionsPath)) {
50
- return [
51
- createChatSession({
52
- id: 'session-1',
53
- name: 'Session 1',
54
- apiKeyPresent,
55
- }),
56
- ];
143
+ return [];
57
144
  }
58
145
  const raw = readFileSync(sessionsPath, 'utf8');
59
146
  const parsed = JSON.parse(raw);
60
147
  if (!Array.isArray(parsed)) {
61
148
  throw new Error('Expected session array');
62
149
  }
63
- const sessions = parsed.flatMap((value) => parseSavedSession(value, apiKeyPresent));
64
- if (sessions.length > 0) {
65
- return sessions.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
66
- }
150
+ return parsed
151
+ .flatMap((value) => parseSavedSession(value, apiKeyPresent))
152
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
67
153
  }
68
154
  catch (error) {
69
155
  process.stderr.write(`Failed to load chat sessions from ${sessionsPath}: ${error instanceof Error ? error.message : String(error)}\n`);
156
+ return [];
70
157
  }
71
- return [
72
- createChatSession({
73
- id: 'session-1',
74
- name: 'Session 1',
75
- apiKeyPresent,
76
- }),
77
- ];
78
158
  }
79
- export function saveChatSessions(sessionsPath, sessions) {
80
- mkdirSync(dirname(sessionsPath), { recursive: true });
81
- writeFileSync(sessionsPath, JSON.stringify(sessions, null, 2));
159
+ function parseCatalog(value) {
160
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
161
+ return undefined;
162
+ }
163
+ const candidate = value;
164
+ if (candidate.version !== 1 || !Array.isArray(candidate.sessions)) {
165
+ return undefined;
166
+ }
167
+ const sessions = candidate.sessions.flatMap(parseCatalogEntry);
168
+ return { version: 1, sessions };
169
+ }
170
+ function parseCatalogEntry(value) {
171
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
172
+ return [];
173
+ }
174
+ const candidate = value;
175
+ if (typeof candidate.id !== 'string' || typeof candidate.name !== 'string') {
176
+ return [];
177
+ }
178
+ const createdAt = typeof candidate.createdAt === 'string' ? candidate.createdAt : new Date().toISOString();
179
+ const updatedAt = typeof candidate.updatedAt === 'string' ? candidate.updatedAt : createdAt;
180
+ return [{
181
+ id: candidate.id,
182
+ name: candidate.name,
183
+ createdAt,
184
+ updatedAt,
185
+ model: typeof candidate.model === 'string' ? candidate.model : undefined,
186
+ driftEnabled: typeof candidate.driftEnabled === 'boolean' ? candidate.driftEnabled : true,
187
+ lastContinuePrompt: typeof candidate.lastContinuePrompt === 'string' ? candidate.lastContinuePrompt : undefined,
188
+ context: isChatContextStats(candidate.context) ? candidate.context : undefined,
189
+ }];
190
+ }
191
+ function projectCatalogEntry(session) {
192
+ return {
193
+ id: session.id,
194
+ name: session.name,
195
+ createdAt: session.createdAt,
196
+ updatedAt: session.updatedAt,
197
+ model: session.model,
198
+ driftEnabled: session.driftEnabled,
199
+ lastContinuePrompt: session.lastContinuePrompt,
200
+ context: session.context,
201
+ };
202
+ }
203
+ function readSessionFile(sessionsDir, entry, apiKeyPresent) {
204
+ const path = sessionFilePath(sessionsDir, entry.id);
205
+ if (!existsSync(path)) {
206
+ return [];
207
+ }
208
+ try {
209
+ const parsed = JSON.parse(readFileSync(path, 'utf8'));
210
+ const payload = readObjectRecord(parsed);
211
+ if (!payload) {
212
+ return [];
213
+ }
214
+ return [{
215
+ id: entry.id,
216
+ name: entry.name,
217
+ createdAt: entry.createdAt,
218
+ updatedAt: entry.updatedAt,
219
+ model: entry.model,
220
+ driftEnabled: entry.driftEnabled,
221
+ lastContinuePrompt: entry.lastContinuePrompt,
222
+ context: entry.context,
223
+ history: Array.isArray(payload.history) ? payload.history : [],
224
+ messages: Array.isArray(payload.messages) && payload.messages.length > 0 ?
225
+ payload.messages.filter(isConversationLine)
226
+ : createInitialMessages(apiKeyPresent),
227
+ turns: Array.isArray(payload.turns) ? payload.turns.filter(isTurnSummary) : [],
228
+ }];
229
+ }
230
+ catch (error) {
231
+ process.stderr.write(`Failed to load chat session file ${path}: ${error instanceof Error ? error.message : String(error)}\n`);
232
+ return [];
233
+ }
234
+ }
235
+ function writeSessionFileIfChanged(sessionsDir, session, previousContent) {
236
+ const path = sessionFilePath(sessionsDir, session.id);
237
+ const nextContent = serializeSessionBody(session);
238
+ if (previousContent === nextContent) {
239
+ return;
240
+ }
241
+ writeFileSync(path, nextContent);
242
+ }
243
+ function writeCatalogIfChanged(catalogPath, catalog, previousCatalog) {
244
+ const nextContent = `${JSON.stringify(catalog, null, 2)}\n`;
245
+ const previousContent = previousCatalog ? `${JSON.stringify(previousCatalog, null, 2)}\n` : undefined;
246
+ if (previousContent === nextContent) {
247
+ return;
248
+ }
249
+ writeFileSync(catalogPath, nextContent);
250
+ }
251
+ function serializeSessionBody(session) {
252
+ return `${JSON.stringify({
253
+ id: session.id,
254
+ history: session.history,
255
+ messages: session.messages,
256
+ turns: session.turns,
257
+ }, null, 2)}\n`;
258
+ }
259
+ function readSessionFileContents(sessionsDir, sessionId) {
260
+ const path = sessionFilePath(sessionsDir, sessionId);
261
+ if (!existsSync(path)) {
262
+ return undefined;
263
+ }
264
+ try {
265
+ return readFileSync(path, 'utf8');
266
+ }
267
+ catch {
268
+ return undefined;
269
+ }
270
+ }
271
+ function readCatalog(catalogPath) {
272
+ if (!existsSync(catalogPath)) {
273
+ return undefined;
274
+ }
275
+ try {
276
+ return parseCatalog(JSON.parse(readFileSync(catalogPath, 'utf8')));
277
+ }
278
+ catch {
279
+ return undefined;
280
+ }
281
+ }
282
+ function dedupeSessionsById(sessions) {
283
+ const seen = new Set();
284
+ const deduped = [];
285
+ for (const session of sessions) {
286
+ if (seen.has(session.id)) {
287
+ continue;
288
+ }
289
+ seen.add(session.id);
290
+ deduped.push(session);
291
+ }
292
+ return deduped;
293
+ }
294
+ function sessionFilePath(sessionsDir, sessionId) {
295
+ return join(sessionsDir, `${sessionId}.json`);
296
+ }
297
+ function removeOrphanedSessionFiles(sessionsDir, activeSessionIds) {
298
+ if (!existsSync(sessionsDir)) {
299
+ return;
300
+ }
301
+ const allowed = new Set(activeSessionIds.map((id) => `${id}.json`));
302
+ for (const name of safeReadDirFiles(sessionsDir)) {
303
+ if (allowed.has(name) || !name.endsWith('.json')) {
304
+ continue;
305
+ }
306
+ unlinkSync(join(sessionsDir, name));
307
+ }
308
+ }
309
+ function safeReadDirFiles(path) {
310
+ try {
311
+ return readdirSync(path);
312
+ }
313
+ catch {
314
+ return [];
315
+ }
82
316
  }
83
317
  function parseSavedSession(value, apiKeyPresent) {
84
318
  if (!value || typeof value !== 'object' || Array.isArray(value)) {
@@ -144,4 +378,7 @@ function isChatContextStats(value) {
144
378
  (candidate.compactedMessages === undefined || typeof candidate.compactedMessages === 'number') &&
145
379
  (candidate.compactedAt === undefined || typeof candidate.compactedAt === 'string'));
146
380
  }
381
+ function readObjectRecord(value) {
382
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
383
+ }
147
384
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/core/chat/storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAM9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CA+B3K"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAM9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CA2E3K"}
@@ -1,9 +1,11 @@
1
+ import { watch } from 'node:fs';
1
2
  import express from 'express';
2
3
  import { createExpressMiddleware } from '@trpc/server/adapters/express';
3
4
  import { createServerLogger } from './logger.js';
4
5
  import { createRequestLoggingMiddleware } from './middleware/request-logging.js';
5
6
  import { appRouter } from './router.js';
6
7
  import { installWebStaticRoutes } from './static.js';
8
+ import { resolveChatSessionFilePath, subscribeToControlPlaneSessionEvents } from './features/control-plane/services/chat-sessions.js';
7
9
  export function createHeddleServerApp(options) {
8
10
  const logger = options.logger ?? createServerLogger({ stateRoot: options.stateRoot });
9
11
  const app = express();
@@ -28,6 +30,44 @@ export function createHeddleServerApp(options) {
28
30
  }, 'tRPC request failed');
29
31
  },
30
32
  }));
33
+ app.get('/control-plane/sessions/:sessionId/events', (request, response) => {
34
+ const sessionId = typeof request.params.sessionId === 'string' ? request.params.sessionId.trim() : '';
35
+ if (!sessionId) {
36
+ response.status(400).json({ error: 'Missing sessionId' });
37
+ return;
38
+ }
39
+ const sessionFilePath = resolveChatSessionFilePath(options.stateRoot, sessionId);
40
+ response.setHeader('Content-Type', 'text/event-stream');
41
+ response.setHeader('Cache-Control', 'no-cache, no-transform');
42
+ response.setHeader('Connection', 'keep-alive');
43
+ response.flushHeaders?.();
44
+ const send = (event, data) => {
45
+ response.write(`event: ${event}\n`);
46
+ response.write(`data: ${JSON.stringify(data)}\n\n`);
47
+ };
48
+ send('ready', { sessionId });
49
+ const heartbeat = setInterval(() => {
50
+ send('heartbeat', { sessionId, timestamp: new Date().toISOString() });
51
+ }, 15000);
52
+ const unsubscribe = subscribeToControlPlaneSessionEvents(sessionId, (payload) => {
53
+ send('session.event', payload);
54
+ });
55
+ let watcher;
56
+ try {
57
+ watcher = watch(sessionFilePath, { persistent: false }, () => {
58
+ send('session.updated', { sessionId, timestamp: new Date().toISOString() });
59
+ });
60
+ }
61
+ catch {
62
+ send('waiting', { sessionId, timestamp: new Date().toISOString() });
63
+ }
64
+ request.on('close', () => {
65
+ clearInterval(heartbeat);
66
+ unsubscribe();
67
+ watcher?.close();
68
+ response.end();
69
+ });
70
+ });
31
71
  if (options.assetsDir) {
32
72
  installWebStaticRoutes(app, options.assetsDir);
33
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,UAAU,qBAAqB,CAAC,OAAoH;IACxJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC;QACvC,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM;SACP,CAAC;QACF,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC;gBACX,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;gBACD,IAAI;gBACJ,IAAI;aACL,EAAE,qBAAqB,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/server/app.ts"],"names":[],"mappings":"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"}