@gkorepanov/ccodex 0.3.0 → 0.3.4

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 (176) hide show
  1. package/README.md +27 -9
  2. package/RELEASING.md +14 -15
  3. package/SSH_VERIFY.md +11 -0
  4. package/archive/README.md +23 -0
  5. package/compatibility.json +1 -2
  6. package/config.example.toml +12 -4
  7. package/dist/claude/asyncQueue.d.ts +3 -0
  8. package/dist/claude/asyncQueue.js +13 -2
  9. package/dist/claude/asyncQueue.js.map +1 -1
  10. package/dist/claude/commandActions.d.ts +6 -0
  11. package/dist/claude/commandActions.js +57 -0
  12. package/dist/claude/commandActions.js.map +1 -0
  13. package/dist/claude/compactCommand.d.ts +2 -0
  14. package/dist/claude/compactCommand.js +7 -0
  15. package/dist/claude/compactCommand.js.map +1 -0
  16. package/dist/claude/goalTools.d.ts +15 -0
  17. package/dist/claude/goalTools.js +173 -0
  18. package/dist/claude/goalTools.js.map +1 -0
  19. package/dist/claude/hookMapper.d.ts +17 -4
  20. package/dist/claude/hookMapper.js +7 -5
  21. package/dist/claude/hookMapper.js.map +1 -1
  22. package/dist/claude/rateLimits.d.ts +72 -0
  23. package/dist/claude/rateLimits.js +330 -0
  24. package/dist/claude/rateLimits.js.map +1 -0
  25. package/dist/claude/responseItemValidation.d.ts +2 -0
  26. package/dist/claude/responseItemValidation.js +40 -0
  27. package/dist/claude/responseItemValidation.js.map +1 -0
  28. package/dist/claude/resultClassifier.d.ts +8 -2
  29. package/dist/claude/resultClassifier.js +1 -1
  30. package/dist/claude/resultClassifier.js.map +1 -1
  31. package/dist/claude/service.d.ts +108 -28
  32. package/dist/claude/service.js +1276 -668
  33. package/dist/claude/service.js.map +1 -1
  34. package/dist/claude/session/backgroundOutput.d.ts +2 -0
  35. package/dist/claude/session/backgroundOutput.js +29 -0
  36. package/dist/claude/session/backgroundOutput.js.map +1 -0
  37. package/dist/claude/session/commands.d.ts +855 -0
  38. package/dist/claude/session/commands.js +2 -0
  39. package/dist/claude/session/commands.js.map +1 -0
  40. package/dist/claude/session/goalState.d.ts +49 -0
  41. package/dist/claude/session/goalState.js +407 -0
  42. package/dist/claude/session/goalState.js.map +1 -0
  43. package/dist/claude/session/mailbox.d.ts +52 -0
  44. package/dist/claude/session/mailbox.js +190 -0
  45. package/dist/claude/session/mailbox.js.map +1 -0
  46. package/dist/claude/session/outputAdapter.d.ts +11 -0
  47. package/dist/claude/session/outputAdapter.js +31 -0
  48. package/dist/claude/session/outputAdapter.js.map +1 -0
  49. package/dist/claude/session/providerFacts.d.ts +47 -0
  50. package/dist/claude/session/providerFacts.js +84 -0
  51. package/dist/claude/session/providerFacts.js.map +1 -0
  52. package/dist/claude/session/providerRuntime.d.ts +1 -0
  53. package/dist/claude/session/providerRuntime.js +2 -0
  54. package/dist/claude/session/providerRuntime.js.map +1 -0
  55. package/dist/claude/session/providerRuntimeFactory.d.ts +49 -0
  56. package/dist/claude/session/providerRuntimeFactory.js +127 -0
  57. package/dist/claude/session/providerRuntimeFactory.js.map +1 -0
  58. package/dist/claude/session/repository.d.ts +57 -0
  59. package/dist/claude/session/repository.js +161 -0
  60. package/dist/claude/session/repository.js.map +1 -0
  61. package/dist/claude/session/runtime.d.ts +46 -0
  62. package/dist/claude/session/runtime.js +140 -0
  63. package/dist/claude/session/runtime.js.map +1 -0
  64. package/dist/claude/session/scopeState.d.ts +61 -0
  65. package/dist/claude/session/scopeState.js +74 -0
  66. package/dist/claude/session/scopeState.js.map +1 -0
  67. package/dist/claude/session/session.d.ts +281 -0
  68. package/dist/claude/session/session.js +6664 -0
  69. package/dist/claude/session/session.js.map +1 -0
  70. package/dist/claude/session/shellRunner.d.ts +13 -0
  71. package/dist/claude/session/shellRunner.js +103 -0
  72. package/dist/claude/session/shellRunner.js.map +1 -0
  73. package/dist/claude/session/usage.d.ts +2 -0
  74. package/dist/claude/session/usage.js +10 -0
  75. package/dist/claude/session/usage.js.map +1 -0
  76. package/dist/claude/sessionRegistry.d.ts +26 -0
  77. package/dist/claude/sessionRegistry.js +118 -0
  78. package/dist/claude/sessionRegistry.js.map +1 -0
  79. package/dist/claude/shellSupervisor.d.ts +1 -0
  80. package/dist/claude/shellSupervisor.js +69 -0
  81. package/dist/claude/shellSupervisor.js.map +1 -0
  82. package/dist/claude/statusCommand.d.ts +21 -0
  83. package/dist/claude/statusCommand.js +97 -0
  84. package/dist/claude/statusCommand.js.map +1 -0
  85. package/dist/claude/toolMapper.d.ts +9 -1
  86. package/dist/claude/toolMapper.js +92 -16
  87. package/dist/claude/toolMapper.js.map +1 -1
  88. package/dist/claude/transcriptBrancher.d.ts +37 -0
  89. package/dist/claude/transcriptBrancher.js +103 -0
  90. package/dist/claude/transcriptBrancher.js.map +1 -0
  91. package/dist/cli/delegate.js +23 -1
  92. package/dist/cli/delegate.js.map +1 -1
  93. package/dist/cli/main.js +28 -12
  94. package/dist/cli/main.js.map +1 -1
  95. package/dist/codex/generated/ResponseItemRuntimeSchema.d.ts +8 -0
  96. package/dist/codex/generated/ResponseItemRuntimeSchema.js +7 -0
  97. package/dist/codex/generated/ResponseItemRuntimeSchema.js.map +1 -0
  98. package/dist/compatibility/probe.js +11 -6
  99. package/dist/compatibility/probe.js.map +1 -1
  100. package/dist/config/config.d.ts +9 -0
  101. package/dist/config/config.js +80 -11
  102. package/dist/config/config.js.map +1 -1
  103. package/dist/daemon/daemon.js +91 -43
  104. package/dist/daemon/daemon.js.map +1 -1
  105. package/dist/daemon/ownership.d.ts +15 -0
  106. package/dist/daemon/ownership.js +185 -0
  107. package/dist/daemon/ownership.js.map +1 -0
  108. package/dist/daemon/supervisor.d.ts +3 -0
  109. package/dist/daemon/supervisor.js +37 -1
  110. package/dist/daemon/supervisor.js.map +1 -1
  111. package/dist/gateway/clientConnection.d.ts +7 -1
  112. package/dist/gateway/clientConnection.js +435 -48
  113. package/dist/gateway/clientConnection.js.map +1 -1
  114. package/dist/gateway/remoteRelay.js +0 -1
  115. package/dist/gateway/remoteRelay.js.map +1 -1
  116. package/dist/gateway/server.d.ts +1 -1
  117. package/dist/gateway/server.js +37 -9
  118. package/dist/gateway/server.js.map +1 -1
  119. package/dist/gateway/subscriptions.d.ts +9 -2
  120. package/dist/gateway/subscriptions.js +87 -9
  121. package/dist/gateway/subscriptions.js.map +1 -1
  122. package/dist/gateway/transientNotice.d.ts +2 -0
  123. package/dist/gateway/transientNotice.js +42 -1
  124. package/dist/gateway/transientNotice.js.map +1 -1
  125. package/dist/handoff/service.d.ts +32 -3
  126. package/dist/handoff/service.js +304 -26
  127. package/dist/handoff/service.js.map +1 -1
  128. package/dist/handoff/titleGeneration.d.ts +28 -0
  129. package/dist/handoff/titleGeneration.js +151 -0
  130. package/dist/handoff/titleGeneration.js.map +1 -0
  131. package/dist/management/doctor.d.ts +1 -1
  132. package/dist/management/doctor.js +32 -23
  133. package/dist/management/doctor.js.map +1 -1
  134. package/dist/management/lifecycle.js +14 -2
  135. package/dist/management/lifecycle.js.map +1 -1
  136. package/dist/management/remoteShim.d.ts +10 -0
  137. package/dist/management/remoteShim.js +65 -0
  138. package/dist/management/remoteShim.js.map +1 -0
  139. package/dist/management/setup.d.ts +4 -0
  140. package/dist/management/setup.js +108 -39
  141. package/dist/management/setup.js.map +1 -1
  142. package/dist/observability/metrics.d.ts +2 -0
  143. package/dist/observability/metrics.js +6 -0
  144. package/dist/observability/metrics.js.map +1 -1
  145. package/dist/protocol/errors.d.ts +1 -0
  146. package/dist/protocol/errors.js +4 -1
  147. package/dist/protocol/errors.js.map +1 -1
  148. package/dist/runtime/dependencies.js +2 -2
  149. package/dist/runtime/dependencies.js.map +1 -1
  150. package/dist/runtime/providerAvailability.d.ts +24 -0
  151. package/dist/runtime/providerAvailability.js +107 -0
  152. package/dist/runtime/providerAvailability.js.map +1 -0
  153. package/dist/state/stateCommand.d.ts +21 -0
  154. package/dist/state/stateCommand.js +198 -0
  155. package/dist/state/stateCommand.js.map +1 -0
  156. package/dist/state/stockStateTracker.d.ts +14 -0
  157. package/dist/state/stockStateTracker.js +120 -0
  158. package/dist/state/stockStateTracker.js.map +1 -0
  159. package/dist/store/HybridStore.d.ts +118 -2
  160. package/dist/store/HybridStore.js +23 -1
  161. package/dist/store/HybridStore.js.map +1 -1
  162. package/dist/store/memoryStore.d.ts +57 -7
  163. package/dist/store/memoryStore.js +337 -5
  164. package/dist/store/memoryStore.js.map +1 -1
  165. package/dist/store/sqliteStore.d.ts +30 -4
  166. package/dist/store/sqliteStore.js +395 -42
  167. package/dist/store/sqliteStore.js.map +1 -1
  168. package/install.sh +2 -2
  169. package/package.json +18 -10
  170. package/dist/claude/interactions.d.ts +0 -23
  171. package/dist/claude/interactions.js +0 -77
  172. package/dist/claude/interactions.js.map +0 -1
  173. package/dist/claude/sessionRuntime.d.ts +0 -102
  174. package/dist/claude/sessionRuntime.js +0 -1361
  175. package/dist/claude/sessionRuntime.js.map +0 -1
  176. /package/{BUILD_BENCHMARKS.md → archive/BUILD_BENCHMARKS.md} +0 -0
@@ -0,0 +1,190 @@
1
+ export const DEFAULT_CLAUDE_MAILBOX_CAPACITY = 512;
2
+ export class ClaudeMailboxClosedError extends Error {
3
+ constructor(message = "Claude mailbox is closed.") {
4
+ super(message);
5
+ this.name = "ClaudeMailboxClosedError";
6
+ }
7
+ }
8
+ export function createDeferred() {
9
+ let settled = false;
10
+ let resolvePromise;
11
+ let rejectPromise;
12
+ const promise = new Promise((resolve, reject) => {
13
+ resolvePromise = resolve;
14
+ rejectPromise = reject;
15
+ });
16
+ return {
17
+ promise,
18
+ get settled() {
19
+ return settled;
20
+ },
21
+ resolve(value) {
22
+ if (settled)
23
+ return;
24
+ settled = true;
25
+ resolvePromise(value);
26
+ },
27
+ reject(reason) {
28
+ if (settled)
29
+ return;
30
+ settled = true;
31
+ rejectPromise(reason);
32
+ },
33
+ };
34
+ }
35
+ export class ClaudeMailbox {
36
+ capacity;
37
+ control = [];
38
+ regular = [];
39
+ pendingControl = [];
40
+ pendingRegular = [];
41
+ consumer;
42
+ consumerAcquired = false;
43
+ closedError;
44
+ sequence = 0;
45
+ constructor(capacity = DEFAULT_CLAUDE_MAILBOX_CAPACITY) {
46
+ this.capacity = capacity;
47
+ if (!Number.isSafeInteger(capacity) || capacity < 1) {
48
+ throw new RangeError("Claude mailbox capacity must be a positive safe integer.");
49
+ }
50
+ }
51
+ get size() {
52
+ return this.control.length + this.regular.length;
53
+ }
54
+ get pendingAdmissions() {
55
+ return this.pendingControl.length + this.pendingRegular.length;
56
+ }
57
+ get closed() {
58
+ return this.closedError !== undefined;
59
+ }
60
+ enqueue(envelope, options = {}) {
61
+ const completion = envelope.completion;
62
+ const stored = {
63
+ envelope: completion ? { command: envelope.command, completion } : { command: envelope.command },
64
+ lane: options.lane ?? "normal",
65
+ sequence: this.sequence++,
66
+ ...(options.coalesce ? { coalesce: options.coalesce } : {}),
67
+ };
68
+ if (stored.coalesce && stored.lane !== "provider") {
69
+ return this.rejectEnvelope(stored, new TypeError("Only provider-lane envelopes may coalesce."));
70
+ }
71
+ if (this.closedError)
72
+ return this.rejectEnvelope(stored, this.closedError);
73
+ const coalesced = this.tryCoalesce(stored);
74
+ if (coalesced)
75
+ return coalesced;
76
+ if (this.consumer && this.size === 0) {
77
+ const consumer = this.consumer;
78
+ this.consumer = undefined;
79
+ consumer({ value: stored.envelope, done: false });
80
+ return Promise.resolve();
81
+ }
82
+ if (this.size < this.capacity) {
83
+ this.push(stored);
84
+ return Promise.resolve();
85
+ }
86
+ return new Promise((resolve, reject) => {
87
+ const pending = { ...stored, accepted: [{ resolve, reject }] };
88
+ (stored.lane === "control" ? this.pendingControl : this.pendingRegular).push(pending);
89
+ });
90
+ }
91
+ submit(command, options = {}) {
92
+ const completion = createDeferred();
93
+ void this.enqueue({ command, completion }, options).catch((error) => completion.reject(error));
94
+ return completion.promise;
95
+ }
96
+ close(error = new ClaudeMailboxClosedError()) {
97
+ if (this.closedError)
98
+ return;
99
+ this.closedError = error;
100
+ this.rejectPending(error);
101
+ if (this.size === 0)
102
+ this.finishConsumer();
103
+ }
104
+ [Symbol.asyncIterator]() {
105
+ if (this.consumerAcquired)
106
+ throw new Error("Claude mailbox supports exactly one consumer.");
107
+ this.consumerAcquired = true;
108
+ return {
109
+ next: () => this.next(),
110
+ return: () => {
111
+ this.cancel(new ClaudeMailboxClosedError("Claude mailbox consumer stopped."));
112
+ return Promise.resolve({ value: undefined, done: true });
113
+ },
114
+ };
115
+ }
116
+ next() {
117
+ const stored = this.shift();
118
+ if (stored) {
119
+ this.admitPending();
120
+ return Promise.resolve({ value: stored.envelope, done: false });
121
+ }
122
+ if (this.closedError)
123
+ return Promise.resolve({ value: undefined, done: true });
124
+ if (this.consumer)
125
+ throw new Error("Claude mailbox consumer called next() concurrently.");
126
+ return new Promise((resolve) => {
127
+ this.consumer = resolve;
128
+ });
129
+ }
130
+ push(stored) {
131
+ (stored.lane === "control" ? this.control : this.regular).push(stored);
132
+ }
133
+ shift() {
134
+ return this.control.shift() ?? this.regular.shift();
135
+ }
136
+ admitPending() {
137
+ while (!this.closedError && this.size < this.capacity) {
138
+ const pending = this.pendingControl.shift() ?? this.pendingRegular.shift();
139
+ if (!pending)
140
+ return;
141
+ this.push(pending);
142
+ for (const waiter of pending.accepted)
143
+ waiter.resolve();
144
+ }
145
+ }
146
+ tryCoalesce(incoming) {
147
+ if (!incoming.coalesce || incoming.envelope.completion)
148
+ return undefined;
149
+ const pending = this.pendingRegular.at(-1);
150
+ const target = pending ?? this.regular.at(-1);
151
+ if (!target?.coalesce || target.envelope.completion)
152
+ return undefined;
153
+ if (target.lane !== "provider" || target.coalesce.key !== incoming.coalesce.key)
154
+ return undefined;
155
+ const command = incoming.coalesce.merge(target.envelope.command, incoming.envelope.command);
156
+ target.envelope = { command };
157
+ if (pending) {
158
+ return new Promise((resolve, reject) => pending.accepted.push({ resolve, reject }));
159
+ }
160
+ return Promise.resolve();
161
+ }
162
+ rejectEnvelope(stored, error) {
163
+ stored.envelope.completion?.reject(error);
164
+ return Promise.reject(error);
165
+ }
166
+ rejectPending(error) {
167
+ for (const pending of [...this.pendingControl.splice(0), ...this.pendingRegular.splice(0)]) {
168
+ pending.envelope.completion?.reject(error);
169
+ for (const waiter of pending.accepted)
170
+ waiter.reject(error);
171
+ }
172
+ }
173
+ finishConsumer() {
174
+ if (!this.consumer)
175
+ return;
176
+ const consumer = this.consumer;
177
+ this.consumer = undefined;
178
+ consumer({ value: undefined, done: true });
179
+ }
180
+ cancel(error) {
181
+ if (!this.closedError)
182
+ this.closedError = error;
183
+ this.rejectPending(this.closedError);
184
+ for (const stored of [...this.control.splice(0), ...this.regular.splice(0)]) {
185
+ stored.envelope.completion?.reject(this.closedError);
186
+ }
187
+ this.finishConsumer();
188
+ }
189
+ }
190
+ //# sourceMappingURL=mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../src/claude/session/mailbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SubscriptionHub } from "../../gateway/subscriptions.js";
2
+ export declare class ClaudeOutputAdapter {
3
+ private readonly hub;
4
+ constructor(hub: SubscriptionHub);
5
+ emit(threadId: string, method: string, params: unknown): void;
6
+ request(threadId: string, requestId: string, method: string, params: unknown, connectionId?: string): boolean;
7
+ suppress(threadId: string): void;
8
+ unsuppress(threadId: string): void;
9
+ withInternalThreadHidden<Result>(threadId: string, operation: () => Promise<Result>): Promise<Result>;
10
+ threadDeleted(threadId: string): void;
11
+ }
@@ -0,0 +1,31 @@
1
+ export class ClaudeOutputAdapter {
2
+ hub;
3
+ constructor(hub) {
4
+ this.hub = hub;
5
+ }
6
+ emit(threadId, method, params) {
7
+ this.hub.emit(threadId, method, params);
8
+ }
9
+ request(threadId, requestId, method, params, connectionId) {
10
+ return this.hub.request(threadId, requestId, method, params, connectionId);
11
+ }
12
+ suppress(threadId) {
13
+ this.hub.suppress(threadId);
14
+ }
15
+ unsuppress(threadId) {
16
+ this.hub.unsuppress(threadId);
17
+ }
18
+ async withInternalThreadHidden(threadId, operation) {
19
+ this.hub.suppress(threadId);
20
+ try {
21
+ return await operation();
22
+ }
23
+ finally {
24
+ this.hub.unsuppress(threadId);
25
+ }
26
+ }
27
+ threadDeleted(threadId) {
28
+ this.hub.threadDeleted(threadId);
29
+ }
30
+ }
31
+ //# sourceMappingURL=outputAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputAdapter.js","sourceRoot":"","sources":["../../../src/claude/session/outputAdapter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACM;IAApC,YAAoC,GAAoB;QAApB,QAAG,GAAH,GAAG,CAAiB;IAAG,CAAC;IAErD,IAAI,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAe;QAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAEM,OAAO,CACZ,QAAgB,EAChB,SAAiB,EACjB,MAAc,EACd,MAAe,EACf,YAAqB;QAErB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7E,CAAC;IAEM,QAAQ,CAAC,QAAgB;QAC9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEM,UAAU,CAAC,QAAgB;QAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,wBAAwB,CACnC,QAAgB,EAChB,SAAgC;QAEhC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,QAAgB;QACnC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import type { SDKMessage, SDKResultMessage } from "@anthropic-ai/claude-agent-sdk";
2
+ import type { RuntimeFactSource } from "./commands.js";
3
+ export interface RuntimeFactContext extends RuntimeFactSource {
4
+ readonly activeTurnId: string | null;
5
+ readonly readOnly: boolean;
6
+ }
7
+ export interface ProviderEventIdentity {
8
+ readonly providerEventId: string | null;
9
+ readonly providerEventType: string;
10
+ }
11
+ interface ProviderFactEnvelope extends ProviderEventIdentity {
12
+ readonly runtimeGeneration: number;
13
+ }
14
+ export type ProviderMessageFact = ProviderFactEnvelope & {
15
+ readonly kind: "message";
16
+ readonly message: Exclude<SDKMessage, SDKResultMessage>;
17
+ } | ProviderFactEnvelope & {
18
+ readonly kind: "terminal";
19
+ readonly message: SDKResultMessage;
20
+ };
21
+ export type ClaudeProviderFact = ProviderMessageFact | {
22
+ readonly kind: "inputPending";
23
+ readonly runtimeGeneration: number;
24
+ readonly pendingInputs: number;
25
+ } | {
26
+ readonly kind: "exit";
27
+ readonly runtimeGeneration: number;
28
+ readonly error?: unknown;
29
+ };
30
+ export declare function providerEventIdentity(message: SDKMessage): ProviderEventIdentity;
31
+ export declare function normalizeProviderMessage(runtimeGeneration: number, message: SDKMessage): ProviderMessageFact;
32
+ export declare function assistantHasTools(message: Extract<SDKMessage, {
33
+ type: "assistant";
34
+ }>): boolean;
35
+ export interface ToolResult {
36
+ readonly toolUseId: string;
37
+ readonly output: string;
38
+ readonly isError: boolean;
39
+ }
40
+ export declare function toolResults(message: SDKMessage): ToolResult[];
41
+ export declare function backgroundTaskId(message: SDKMessage): string | undefined;
42
+ export declare function backgroundOutputFile(output: string): string | undefined;
43
+ export declare function serverToolResult(value: unknown): ToolResult | undefined;
44
+ export declare function isNoQueryAcknowledgement(message: Extract<SDKMessage, {
45
+ type: "result";
46
+ }>): boolean;
47
+ export {};
@@ -0,0 +1,84 @@
1
+ export function providerEventIdentity(message) {
2
+ return {
3
+ providerEventId: "uuid" in message && typeof message.uuid === "string" ? message.uuid : null,
4
+ providerEventType: message.type === "system" ? `system/${message.subtype}` : message.type,
5
+ };
6
+ }
7
+ export function normalizeProviderMessage(runtimeGeneration, message) {
8
+ const envelope = {
9
+ runtimeGeneration,
10
+ ...providerEventIdentity(message),
11
+ };
12
+ return message.type === "result"
13
+ ? { ...envelope, kind: "terminal", message }
14
+ : { ...envelope, kind: "message", message };
15
+ }
16
+ function isGoalMcpToolBlock(block) {
17
+ if (!block || typeof block !== "object")
18
+ return false;
19
+ const value = block;
20
+ return ["tool_use", "server_tool_use", "mcp_tool_use"].includes(String(value.type))
21
+ && typeof value.name === "string"
22
+ && value.name.startsWith("mcp__ccodex_goal__");
23
+ }
24
+ export function assistantHasTools(message) {
25
+ return Array.isArray(message.message.content) && message.message.content.some((block) => !isGoalMcpToolBlock(block)
26
+ && (block.type === "tool_use" || block.type === "server_tool_use" || block.type === "mcp_tool_use"));
27
+ }
28
+ function outputText(value) {
29
+ if (typeof value === "string")
30
+ return value;
31
+ if (!Array.isArray(value))
32
+ return "";
33
+ return value.flatMap((block) => {
34
+ if (!block || typeof block !== "object")
35
+ return [];
36
+ const candidate = block;
37
+ return typeof candidate.text === "string" ? [candidate.text] : [];
38
+ }).join("\n");
39
+ }
40
+ export function toolResults(message) {
41
+ if (message.type !== "user" || !Array.isArray(message.message.content))
42
+ return [];
43
+ return message.message.content.flatMap((block) => {
44
+ if (!block || typeof block !== "object" || block.type !== "tool_result")
45
+ return [];
46
+ return [{ toolUseId: block.tool_use_id, output: outputText(block.content), isError: block.is_error === true }];
47
+ });
48
+ }
49
+ export function backgroundTaskId(message) {
50
+ if (message.type !== "user")
51
+ return undefined;
52
+ const value = message.tool_use_result;
53
+ if (!value || typeof value !== "object")
54
+ return undefined;
55
+ const id = value.backgroundTaskId;
56
+ return typeof id === "string" ? id : undefined;
57
+ }
58
+ export function backgroundOutputFile(output) {
59
+ return /Output is being written to: (.+?)(?:\. You will|$)/s.exec(output)?.[1]?.trim();
60
+ }
61
+ export function serverToolResult(value) {
62
+ if (!value || typeof value !== "object")
63
+ return undefined;
64
+ const block = value;
65
+ if (typeof block.type !== "string" || !block.type.endsWith("_tool_result") || typeof block.tool_use_id !== "string")
66
+ return undefined;
67
+ const content = block.content;
68
+ const errorType = content && typeof content === "object" && !Array.isArray(content)
69
+ ? content.type
70
+ : undefined;
71
+ return {
72
+ toolUseId: block.tool_use_id,
73
+ output: typeof content === "string" ? content : content === undefined ? "" : JSON.stringify(content),
74
+ isError: typeof errorType === "string" && errorType.endsWith("_error"),
75
+ };
76
+ }
77
+ export function isNoQueryAcknowledgement(message) {
78
+ return message.subtype === "success"
79
+ && message.is_error === false
80
+ && message.num_turns === 0
81
+ && message.result === ""
82
+ && message.stop_reason === null;
83
+ }
84
+ //# sourceMappingURL=providerFacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerFacts.js","sourceRoot":"","sources":["../../../src/claude/session/providerFacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { ClaudeRuntime as ProviderRuntime, type ClaudeRuntimeFact as ProviderRuntimeFact, type ClaudeRuntimeSettings as ProviderRuntimeSettings, } from "./runtime.js";
@@ -0,0 +1,2 @@
1
+ export { ClaudeRuntime as ProviderRuntime, } from "./runtime.js";
2
+ //# sourceMappingURL=providerRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerRuntime.js","sourceRoot":"","sources":["../../../src/claude/session/providerRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,eAAe,GAGjC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type CanUseTool, type ElicitationRequest, type ElicitationResult, type HookInput, type HookJSONOutput, type McpSdkServerConfigWithInstance, type Options } from "@anthropic-ai/claude-agent-sdk";
2
+ import type { Logger } from "../../observability/logger.js";
3
+ import type { ClaudeQueryFactory } from "../queryFactory.js";
4
+ import { ProviderRuntime, type ProviderRuntimeFact, type ProviderRuntimeSettings } from "./providerRuntime.js";
5
+ import type { RuntimeTransportSettings } from "./commands.js";
6
+ export type { RuntimeTransportSettings } from "./commands.js";
7
+ export interface GoalRuntimeEvents {
8
+ readonly mcpServer: McpSdkServerConfigWithInstance;
9
+ }
10
+ export interface ProviderRuntimeCallbacks {
11
+ readonly canUseTool: CanUseTool;
12
+ readonly onElicitation: (request: ElicitationRequest, signal: AbortSignal) => Promise<ElicitationResult>;
13
+ readonly beforeToolUse: (input: HookInput, toolUseId: string | undefined) => Promise<HookJSONOutput>;
14
+ readonly captureFileAfter: (input: HookInput, toolUseId: string | undefined) => Promise<HookJSONOutput>;
15
+ }
16
+ export declare class StaleClaudeRuntimeSettingsError extends Error {
17
+ readonly reason: "runtime" | "settings";
18
+ readonly settings: RuntimeTransportSettings;
19
+ constructor(message: string, reason: "runtime" | "settings", settings: RuntimeTransportSettings);
20
+ }
21
+ export declare function providerPermissionMode(settings: RuntimeTransportSettings): NonNullable<Options["permissionMode"]>;
22
+ export declare function runtimeTransportSettings(startup: RuntimeStartup): RuntimeTransportSettings;
23
+ export declare function providerRuntimeSettings(settings: RuntimeTransportSettings, applied: RuntimeTransportSettings): ProviderRuntimeSettings;
24
+ export interface RuntimeStartup {
25
+ readonly threadId: string;
26
+ readonly runtimeGeneration: number;
27
+ readonly providerSessionId: string;
28
+ readonly resume: boolean;
29
+ readonly cwd: string;
30
+ readonly ephemeral: boolean;
31
+ readonly claudeBinary: string;
32
+ readonly model: string;
33
+ readonly settingsGeneration: number;
34
+ readonly lastCompletedTurnId: string | null;
35
+ readonly modelContextWindow: number | null;
36
+ readonly approvalPolicy: unknown;
37
+ readonly approvalsReviewer: string;
38
+ readonly sandboxPolicy: unknown;
39
+ readonly baseInstructions: string | null;
40
+ readonly developerInstructions: string | null;
41
+ readonly personality: string | null;
42
+ readonly serviceTier: string | null;
43
+ readonly reasoningEffort: string | null;
44
+ readonly reasoningSummary: string | null;
45
+ readonly collaborationMode: unknown | null;
46
+ readonly outputSchema: unknown | null;
47
+ readonly approvedTools?: readonly string[];
48
+ }
49
+ export declare function createProviderRuntime(startup: RuntimeStartup, logger: Logger, queryFactory: ClaudeQueryFactory, submitFact: (fact: ProviderRuntimeFact) => Promise<void>, callbacks: ProviderRuntimeCallbacks, goalEvents?: GoalRuntimeEvents): ProviderRuntime;
@@ -0,0 +1,127 @@
1
+ import { invalidParams } from "../../protocol/errors.js";
2
+ import { normalizeClaudeModelIdentifier } from "../modelSelection.js";
3
+ import { GOAL_MCP_TOOL_NAMES } from "../goalTools.js";
4
+ import { ProviderRuntime, } from "./providerRuntime.js";
5
+ export class StaleClaudeRuntimeSettingsError extends Error {
6
+ reason;
7
+ settings;
8
+ constructor(message, reason, settings) {
9
+ super(message);
10
+ this.reason = reason;
11
+ this.settings = settings;
12
+ }
13
+ }
14
+ function appendInstructions(startup) {
15
+ const parts = [startup.baseInstructions, startup.developerInstructions];
16
+ if (startup.personality === "friendly")
17
+ parts.push("Use a friendly, collaborative communication style.");
18
+ if (startup.personality === "pragmatic")
19
+ parts.push("Be direct, pragmatic, and focused on concrete outcomes.");
20
+ const value = parts.filter((part) => Boolean(part)).join("\n\n");
21
+ return value || undefined;
22
+ }
23
+ function effort(value) {
24
+ return value === "low" || value === "medium" || value === "high" || value === "xhigh" || value === "max"
25
+ ? value
26
+ : undefined;
27
+ }
28
+ export function providerPermissionMode(settings) {
29
+ if (settings.approvalsReviewer !== "user")
30
+ return "auto";
31
+ const sandbox = settings.sandboxPolicy && typeof settings.sandboxPolicy === "object" && "type" in settings.sandboxPolicy
32
+ ? settings.sandboxPolicy
33
+ : undefined;
34
+ if (settings.approvalPolicy === "never" && sandbox?.type === "dangerFullAccess")
35
+ return "bypassPermissions";
36
+ if (settings.approvalPolicy === "never")
37
+ return "dontAsk";
38
+ return "default";
39
+ }
40
+ export function runtimeTransportSettings(startup) {
41
+ return {
42
+ cwd: startup.cwd,
43
+ model: startup.model,
44
+ settingsGeneration: startup.settingsGeneration,
45
+ approvalPolicy: startup.approvalPolicy,
46
+ approvalsReviewer: startup.approvalsReviewer,
47
+ sandboxPolicy: startup.sandboxPolicy,
48
+ serviceTier: startup.serviceTier,
49
+ reasoningEffort: startup.reasoningEffort,
50
+ reasoningSummary: startup.reasoningSummary,
51
+ collaborationMode: startup.collaborationMode,
52
+ };
53
+ }
54
+ export function providerRuntimeSettings(settings, applied) {
55
+ const selectedEffort = effort(settings.reasoningEffort);
56
+ if (selectedEffort === "max" && applied.reasoningEffort !== "max") {
57
+ throw invalidParams("Claude Agent SDK 0.3.209 cannot apply max effort after ephemeral model-visible input.");
58
+ }
59
+ return {
60
+ model: normalizeClaudeModelIdentifier(settings.model),
61
+ permissionMode: providerPermissionMode(settings),
62
+ effort: selectedEffort === "max" ? undefined : selectedEffort ?? null,
63
+ fastMode: settings.serviceTier === "fast",
64
+ thinkingDisplay: settings.reasoningSummary === "none"
65
+ ? "omitted"
66
+ : settings.reasoningSummary ? "summarized" : null,
67
+ };
68
+ }
69
+ function claudeOutputSchema(value) {
70
+ if (!value || typeof value !== "object" || Array.isArray(value))
71
+ return undefined;
72
+ const { $schema: _dialect, ...schema } = value;
73
+ return schema;
74
+ }
75
+ export function createProviderRuntime(startup, logger, queryFactory, submitFact, callbacks, goalEvents) {
76
+ const transportSettings = runtimeTransportSettings(startup);
77
+ const append = appendInstructions(startup);
78
+ const selectedPermissionMode = providerPermissionMode(transportSettings);
79
+ const selectedEffort = effort(startup.reasoningEffort);
80
+ if (startup.reasoningEffort && !selectedEffort)
81
+ throw new Error(`Unsupported Claude effort '${startup.reasoningEffort}'.`);
82
+ const outputSchema = claudeOutputSchema(startup.outputSchema);
83
+ return new ProviderRuntime(startup.runtimeGeneration, {
84
+ cwd: startup.cwd,
85
+ model: normalizeClaudeModelIdentifier(startup.model),
86
+ ...(startup.resume ? { resume: startup.providerSessionId } : { sessionId: startup.providerSessionId }),
87
+ pathToClaudeCodeExecutable: startup.claudeBinary,
88
+ persistSession: !startup.ephemeral,
89
+ includePartialMessages: true,
90
+ includeHookEvents: true,
91
+ forwardSubagentText: true,
92
+ settingSources: ["user", "project", "local"],
93
+ ...(goalEvents ? { mcpServers: { ccodex_goal: goalEvents.mcpServer } } : {}),
94
+ ...((goalEvents || startup.approvedTools?.length)
95
+ ? { allowedTools: [...(goalEvents ? GOAL_MCP_TOOL_NAMES : []), ...(startup.approvedTools ?? [])] }
96
+ : {}),
97
+ systemPrompt: { type: "preset", preset: "claude_code", ...(append ? { append } : {}) },
98
+ permissionMode: selectedPermissionMode,
99
+ ...(startup.ephemeral || selectedPermissionMode === "bypassPermissions"
100
+ ? { allowDangerouslySkipPermissions: true }
101
+ : {}),
102
+ ...(selectedPermissionMode === "auto" && !startup.ephemeral
103
+ ? {}
104
+ : {
105
+ canUseTool: (name, input, options) => callbacks.canUseTool(name, input, options),
106
+ }),
107
+ onElicitation: (request, options) => callbacks.onElicitation(request, options.signal),
108
+ hooks: {
109
+ PreToolUse: [{ hooks: [(input, toolUseId) => callbacks.beforeToolUse(input, toolUseId)] }],
110
+ PostToolUse: [{ matcher: "Edit|Write|NotebookEdit", hooks: [(input, toolUseId) => callbacks.captureFileAfter(input, toolUseId)] }],
111
+ PostToolUseFailure: [{ matcher: "Edit|Write|NotebookEdit", hooks: [(input, toolUseId) => callbacks.captureFileAfter(input, toolUseId)] }],
112
+ },
113
+ ...(startup.serviceTier === "fast" ? { settings: { fastMode: true } } : {}),
114
+ ...(selectedEffort ? { effort: selectedEffort } : {}),
115
+ ...(startup.reasoningSummary === "none"
116
+ ? { thinking: { type: "adaptive", display: "omitted" } }
117
+ : startup.reasoningSummary
118
+ ? { thinking: { type: "adaptive", display: "summarized" } }
119
+ : {}),
120
+ ...(outputSchema
121
+ ? { outputFormat: { type: "json_schema", schema: outputSchema } }
122
+ : {}),
123
+ env: process.env,
124
+ stderr: (line) => logger.debug("claude.stderr", { threadId: startup.threadId, output: line }),
125
+ }, queryFactory, submitFact);
126
+ }
127
+ //# sourceMappingURL=providerRuntimeFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerRuntimeFactory.js","sourceRoot":"","sources":["../../../src/claude/session/providerRuntimeFactory.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAe9B,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAGtC;IACA;IAHlB,YACE,OAAe,EACC,MAA8B,EAC9B,QAAkC;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAwB;QAC9B,aAAQ,GAAR,QAAQ,CAA0B;IAGpD,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,OAAuB;IACjD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACzG,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAC/G,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,KAAgC;IAC9C,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;QACtG,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAkC;IAElC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,aAAa;QACtH,CAAC,CAAC,QAAQ,CAAC,aAAkC;QAC7C,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,QAAQ,CAAC,cAAc,KAAK,OAAO,IAAI,OAAO,EAAE,IAAI,KAAK,kBAAkB;QAAE,OAAO,mBAAmB,CAAC;IAC5G,IAAI,QAAQ,CAAC,cAAc,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAkC,EAClC,OAAiC;IAEjC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,cAAc,KAAK,KAAK,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;QAClE,MAAM,aAAa,CAAC,uFAAuF,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO;QACL,KAAK,EAAE,8BAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrD,cAAc,EAAE,sBAAsB,CAAC,QAAQ,CAAC;QAChD,MAAM,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI;QACrE,QAAQ,EAAE,QAAQ,CAAC,WAAW,KAAK,MAAM;QACzC,eAAe,EAAE,QAAQ,CAAC,gBAAgB,KAAK,MAAM;YACnD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,KAAgC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AA4BD,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,MAAc,EACd,YAAgC,EAChC,UAAwD,EACxD,SAAmC,EACnC,UAA8B;IAE9B,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC;IAC3H,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,OAAO,IAAI,eAAe,CACxB,OAAO,CAAC,iBAAiB,EACzB;QACI,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,8BAA8B,CAAC,OAAO,CAAC,KAAK,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACtG,0BAA0B,EAAE,OAAO,CAAC,YAAY;QAChD,cAAc,EAAE,CAAC,OAAO,CAAC,SAAS;QAClC,sBAAsB,EAAE,IAAI;QAC5B,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,IAAI;QACzB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;YAC/C,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,EAAE;YAClG,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACtF,cAAc,EAAE,sBAAsB;QACtC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,sBAAsB,KAAK,mBAAmB;YACrE,CAAC,CAAC,EAAE,+BAA+B,EAAE,IAAI,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,sBAAsB,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS;YACzD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,UAAU,EAAE,CACV,IAA+B,EAC/B,KAAgC,EAChC,OAAkC,EAClC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;aAChD,CAAC;QACN,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;QACrF,KAAK,EAAE;YACL,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAC1F,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAClI,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;SAC1I;QACD,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,MAAM;YACrC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAW,EAAE;YACjE,CAAC,CAAC,OAAO,CAAC,gBAAgB;gBACxB,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAW,EAAE;gBACpE,CAAC,CAAC,EAAE,CAAC;QACT,GAAG,CAAC,YAAY;YACd,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAW,EAAE;YAC1E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAChG,EACD,YAAY,EACZ,UAAU,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { Turn } from "../../codex/generated/v2/Turn.js";
2
+ import type { ClaudeThreadRecord, GoalPatch, GoalUsageInput, HybridStore, InternalGoal, PendingRequestRecord, ProviderEventDisposition, ProviderEventRecord, ProviderBoundaryCommit, ProviderItemCorrelation, ProviderRetractionMutation, PendingThreadRemoval, StateEvent, TurnProviderBoundary } from "../../store/HybridStore.js";
3
+ import type { RuntimeFactSource, SessionBranchSnapshot } from "./commands.js";
4
+ export declare function branchRevision(record: ClaudeThreadRecord, boundaries: readonly TurnProviderBoundary[], turns?: Turn[]): string;
5
+ export declare function remapBoundaries(boundaries: readonly TurnProviderBoundary[], uuidEntries: readonly (readonly [string, string])[], retainedTurnIds: ReadonlySet<string>): TurnProviderBoundary[];
6
+ export declare class ClaudeSessionRepository {
7
+ private readonly store;
8
+ constructor(store: HybridStore);
9
+ create(record: ClaudeThreadRecord): void;
10
+ read(threadId: string, includeTurns: boolean): ClaudeThreadRecord | undefined;
11
+ branchSnapshot(threadId: string): SessionBranchSnapshot | undefined;
12
+ update(record: ClaudeThreadRecord): void;
13
+ commitState(record: ClaudeThreadRecord, events: readonly StateEvent[], turn?: Turn, insertTurn?: boolean, providerBoundary?: ProviderBoundaryCommit): number[];
14
+ delete(threadId: string): void;
15
+ goal(threadId: string): InternalGoal | undefined;
16
+ setGoal(threadId: string, patch: GoalPatch): InternalGoal;
17
+ clearGoal(threadId: string): boolean;
18
+ accountGoalUsage(input: GoalUsageInput): InternalGoal | undefined;
19
+ archived(threadId: string): boolean;
20
+ commitArchived(threadIds: readonly string[], archived: boolean): void;
21
+ beginRemoval(removal: PendingThreadRemoval): void;
22
+ cancelRemoval(rootThreadId: string): void;
23
+ pendingRemoval(rootThreadId: string): PendingThreadRemoval | undefined;
24
+ commitRemoval(rootThreadId: string, threadIds: readonly string[]): void;
25
+ ownedThreadIds(threadId: string): string[];
26
+ commitFork(record: ClaudeThreadRecord, turns: readonly Turn[], boundaries: readonly TurnProviderBoundary[]): void;
27
+ commitRollback(record: ClaudeThreadRecord, keepCount: number, boundaries: readonly TurnProviderBoundary[], removedThreadIds: readonly string[]): void;
28
+ createTurn(threadId: string, turn: Turn): void;
29
+ readTurn(threadId: string, turnId: string): Turn | undefined;
30
+ updateTurn(threadId: string, turn: Turn): void;
31
+ appendProviderEvent(event: {
32
+ readonly threadId: string;
33
+ readonly processEpoch: string;
34
+ readonly providerSequence: number;
35
+ readonly providerEventType: string;
36
+ readonly providerEventId: string | null;
37
+ readonly payload: unknown;
38
+ readonly createdAt: number;
39
+ }): {
40
+ record: ProviderEventRecord;
41
+ inserted: boolean;
42
+ };
43
+ finishProviderEvent(threadId: string, sequence: number, disposition: Exclude<ProviderEventDisposition, "pending">, error?: string): void;
44
+ abandonPendingProviderEvents(threadId: string, error: string): string[];
45
+ markProviderEventProcessed(threadId: string, providerEventType: string, providerEventId: string): void;
46
+ pruneProviderEvents(threadId: string, maxEvents: number, maxBytes: number): number;
47
+ providerItemCorrelations(threadId: string, providerMessageIds: readonly string[]): ProviderItemCorrelation[];
48
+ deleteProviderItemCorrelations(threadId: string, providerMessageIds: readonly string[]): void;
49
+ commitProviderRetraction(record: ClaudeThreadRecord, providerMessageIds: readonly string[], mutations: readonly ProviderRetractionMutation[], removedThreadIds: readonly string[]): void;
50
+ appendEvent(threadId: string, turnId: string | null, method: string, params: unknown, dedupKey?: string): number;
51
+ appendTurnEvent(threadId: string, turn: Turn, method: string, params: unknown, source: RuntimeFactSource): number;
52
+ pendingRequest(requestId: string): PendingRequestRecord | undefined;
53
+ pendingRequestByClaudeId(threadId: string, claudeRequestId: string): PendingRequestRecord | undefined;
54
+ createPendingRequest(request: PendingRequestRecord): void;
55
+ pendingRequests(threadId: string): PendingRequestRecord[];
56
+ resolvePendingRequest(requestId: string, status: "resolved" | "cancelled", response: unknown): void;
57
+ }