@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,21 @@
1
+ import type { ApprovalsReviewer } from "../codex/generated/v2/ApprovalsReviewer.js";
2
+ import type { AskForApproval } from "../codex/generated/v2/AskForApproval.js";
3
+ import type { SandboxPolicy } from "../codex/generated/v2/SandboxPolicy.js";
4
+ import type { Thread } from "../codex/generated/v2/Thread.js";
5
+ import type { ThreadTokenUsage } from "../codex/generated/v2/ThreadTokenUsage.js";
6
+ import type { UserInput } from "../codex/generated/v2/UserInput.js";
7
+ export interface ThreadStateSnapshot {
8
+ readonly provider: "claude" | "codex";
9
+ readonly model: string;
10
+ readonly effort: string | null;
11
+ readonly serviceTier: string | null;
12
+ readonly approvalPolicy: AskForApproval | null;
13
+ readonly approvalsReviewer: ApprovalsReviewer | null;
14
+ readonly sandboxPolicy: SandboxPolicy | null;
15
+ readonly thread: Thread;
16
+ readonly tokenUsage: ThreadTokenUsage | null;
17
+ readonly providerCostUsd: number | null;
18
+ }
19
+ export declare function isCCodexStateCommand(input: UserInput[]): boolean;
20
+ export declare function stateModelName(provider: "claude" | "codex", value: string): string;
21
+ export declare function formatCCodexState(snapshot: ThreadStateSnapshot, nowMs?: number): string;
@@ -0,0 +1,198 @@
1
+ export function isCCodexStateCommand(input) {
2
+ return input.length === 1
3
+ && input[0]?.type === "text"
4
+ && input[0].text.trim().toLowerCase() === "/ccstate";
5
+ }
6
+ export function stateModelName(provider, value) {
7
+ const withoutProvider = value
8
+ .replace(/^claude:/, "")
9
+ .replace(/^claude-/, "")
10
+ .replace(/^gpt-/, "");
11
+ const words = withoutProvider.split("-").filter(Boolean);
12
+ const version = words.length >= 2
13
+ && /^\d+$/.test(words.at(-1))
14
+ && /^\d+$/.test(words.at(-2))
15
+ ? `${words.splice(-2).join(".")}`
16
+ : undefined;
17
+ const name = words.map((word) => word.length <= 3 && /^\d+$/.test(word)
18
+ ? word
19
+ : `${word.charAt(0).toUpperCase()}${word.slice(1)}`).join(" ");
20
+ return `${provider === "claude" ? "Claude" : "Codex"} ${name}${version ? ` ${version}` : ""}`.trim();
21
+ }
22
+ function compactNumber(value) {
23
+ if (value < 1_000)
24
+ return String(Math.round(value));
25
+ const units = [
26
+ { size: 1_000_000_000, suffix: "b" },
27
+ { size: 1_000_000, suffix: "m" },
28
+ { size: 1_000, suffix: "k" },
29
+ ];
30
+ const unit = units.find((candidate) => value >= candidate.size);
31
+ const scaled = value / unit.size;
32
+ const precision = scaled >= 100 || Number.isInteger(scaled) ? 0 : 1;
33
+ return `${scaled.toFixed(precision).replace(/\.0$/, "")}${unit.suffix}`;
34
+ }
35
+ function elapsed(valueMs) {
36
+ const seconds = Math.max(0, Math.floor(valueMs / 1_000));
37
+ const days = Math.floor(seconds / 86_400);
38
+ const hours = Math.floor(seconds % 86_400 / 3_600);
39
+ const minutes = Math.floor(seconds % 3_600 / 60);
40
+ const remainder = seconds % 60;
41
+ if (days > 0)
42
+ return `${days}d ${hours}h`;
43
+ if (hours > 0)
44
+ return `${hours}h ${minutes}m`;
45
+ if (minutes > 0)
46
+ return `${minutes}m ${remainder}s`;
47
+ return `${remainder}s`;
48
+ }
49
+ function relative(valueSeconds, nowMs) {
50
+ const delta = Math.max(0, nowMs - valueSeconds * 1_000);
51
+ if (delta < 60_000)
52
+ return `${Math.floor(delta / 1_000)}s ago`;
53
+ if (delta < 3_600_000)
54
+ return `${Math.floor(delta / 60_000)}m ago`;
55
+ if (delta < 86_400_000)
56
+ return `${Math.floor(delta / 3_600_000)}h ago`;
57
+ return `${Math.floor(delta / 86_400_000)}d ago`;
58
+ }
59
+ function syntheticTurn(items) {
60
+ const user = items.find((item) => item.type === "userMessage");
61
+ if (user?.type !== "userMessage")
62
+ return false;
63
+ return isCCodexStateCommand(user.content)
64
+ || (user.content.length === 1 && user.content[0]?.type === "text"
65
+ && ["/ccstatus", "ccodex status", "/ccodex-status"]
66
+ .includes(user.content[0].text.trim().toLowerCase()));
67
+ }
68
+ function toolKind(item) {
69
+ if (item.type === "fileChange")
70
+ return "edit";
71
+ if (item.type === "collabAgentToolCall")
72
+ return "agent";
73
+ if (item.type === "mcpToolCall")
74
+ return "mcp";
75
+ if (item.type === "dynamicToolCall")
76
+ return item.tool.toLowerCase();
77
+ if (item.type === "webSearch")
78
+ return "web";
79
+ if (item.type === "imageView")
80
+ return "read";
81
+ if (item.type === "imageGeneration")
82
+ return "image";
83
+ if (item.type === "sleep")
84
+ return "sleep";
85
+ if (item.type !== "commandExecution")
86
+ return undefined;
87
+ const actions = item.commandActions.map((action) => action.type);
88
+ if (actions.some((type) => type === "read"))
89
+ return "read";
90
+ if (actions.some((type) => type === "search" || type === "listFiles"))
91
+ return "search";
92
+ return "bash";
93
+ }
94
+ function mode(snapshot) {
95
+ if (snapshot.approvalsReviewer === "auto_review")
96
+ return "ᗢ approve for me";
97
+ if (snapshot.approvalPolicy === "on-request" || snapshot.approvalPolicy === "untrusted"
98
+ || snapshot.approvalPolicy !== null && typeof snapshot.approvalPolicy === "object") {
99
+ return "◇ ask for approval";
100
+ }
101
+ if (snapshot.sandboxPolicy?.type === "dangerFullAccess")
102
+ return "◆ full access";
103
+ if (snapshot.sandboxPolicy?.type === "readOnly")
104
+ return "◈ read only";
105
+ if (!snapshot.approvalPolicy || !snapshot.sandboxPolicy)
106
+ return "unavailable";
107
+ return "◇ no approvals";
108
+ }
109
+ function header(snapshot) {
110
+ const avatar = snapshot.provider === "claude" ? "❋" : "֎";
111
+ const speed = snapshot.serviceTier === "fast" || snapshot.serviceTier === "priority"
112
+ ? "⚡ fast"
113
+ : "standard";
114
+ return [
115
+ `${avatar} **${snapshot.model}**`,
116
+ snapshot.effort,
117
+ speed,
118
+ ].filter(Boolean).join(" · ");
119
+ }
120
+ function tree(lines) {
121
+ return lines.map((line, index) => ` ${index === lines.length - 1 ? "└" : "├"} ${line}`);
122
+ }
123
+ export function formatCCodexState(snapshot, nowMs = Date.now()) {
124
+ const turns = snapshot.thread.turns.filter((turn) => !syntheticTurn(turn.items));
125
+ let userMessages = 0;
126
+ let assistantMessages = 0;
127
+ const tools = new Map();
128
+ for (const item of turns.flatMap((turn) => turn.items)) {
129
+ if (item.type === "userMessage")
130
+ userMessages += 1;
131
+ else if (item.type === "agentMessage")
132
+ assistantMessages += 1;
133
+ const kind = toolKind(item);
134
+ if (kind)
135
+ tools.set(kind, (tools.get(kind) ?? 0) + 1);
136
+ }
137
+ const compacts = turns.filter((turn) => turn.items.some((item) => item.type === "contextCompaction"));
138
+ const lastCompact = compacts.map((turn) => turn.completedAt ?? turn.startedAt).filter((value) => value !== null).at(-1);
139
+ const runTimeMs = turns.reduce((total, turn) => total + (turn.durationMs
140
+ ?? (turn.startedAt === null ? 0 : Math.max(0, nowMs - turn.startedAt * 1_000))), 0);
141
+ const usage = snapshot.tokenUsage;
142
+ const context = usage?.last.totalTokens;
143
+ const window = usage?.modelContextWindow;
144
+ const contextPercent = context !== undefined && window
145
+ ? Math.min(100, Math.max(0, Math.round(context / window * 100)))
146
+ : null;
147
+ const filled = contextPercent === null || contextPercent === 0
148
+ ? 0
149
+ : contextPercent === 100 ? 10 : Math.max(1, Math.floor(contextPercent / 10));
150
+ const contextBar = contextPercent === null
151
+ ? "unavailable"
152
+ : `${"▰".repeat(filled)}${"▱".repeat(10 - filled)} ${contextPercent}% · ${compactNumber(context)}/${compactNumber(window)}`;
153
+ const total = usage?.total;
154
+ const cacheRate = total && total.inputTokens > 0
155
+ ? `${Math.round(total.cachedInputTokens / total.inputTokens * 100)}% hit rate`
156
+ : "unavailable";
157
+ const toolEntries = [...tools.entries()].sort((left, right) => right[1] - left[1] || left[0].localeCompare(right[0]));
158
+ const toolTotal = toolEntries.reduce((sum, [, count]) => sum + count, 0);
159
+ const visibleTools = toolEntries.slice(0, 5);
160
+ const hiddenTools = toolEntries.slice(5).reduce((sum, [, count]) => sum + count, 0);
161
+ const toolDetails = visibleTools.length > 0
162
+ ? ` (${[
163
+ ...visibleTools.map(([name, count]) => `${name} ${count}`),
164
+ ...(hiddenTools ? [`other ${hiddenTools}`] : []),
165
+ ].join(" · ")})`
166
+ : "";
167
+ const cost = snapshot.providerCostUsd === null
168
+ ? "unavailable for subscription"
169
+ : `$${snapshot.providerCostUsd.toFixed(2)} provider estimate`;
170
+ return [
171
+ "◆ **CCodex** │ /ccstate",
172
+ "",
173
+ header(snapshot),
174
+ ...tree([
175
+ `context ▸ ${contextBar}`,
176
+ `tokens ▸ ${total
177
+ ? `${compactNumber(total.totalTokens)} processed (${compactNumber(total.inputTokens)} in / ${compactNumber(total.outputTokens)} out)`
178
+ : "unavailable"}`,
179
+ `cache ▸ ${cacheRate}`,
180
+ ]),
181
+ "",
182
+ "💬 **Chat**",
183
+ ...tree([
184
+ `messages ▸ ${userMessages} user / ${assistantMessages} assistant / ${userMessages + assistantMessages} total`,
185
+ `compacts ▸ ${compacts.length}${lastCompact ? ` (last: ${relative(lastCompact, nowMs)})` : ""}`,
186
+ `session ▸ started ${elapsed(nowMs - snapshot.thread.createdAt * 1_000)} ago`,
187
+ ]),
188
+ "",
189
+ "⚙️ **Session**",
190
+ ...tree([
191
+ `mode ▸ ${mode(snapshot)}`,
192
+ `agent ▸ ${elapsed(runTimeMs)} cumulative turn time`,
193
+ `tools ▸ ${toolTotal} calls${toolDetails}`,
194
+ `cost ▸ ${cost}`,
195
+ ]),
196
+ ].join("\n");
197
+ }
198
+ //# sourceMappingURL=stateCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateCommand.js","sourceRoot":"","sources":["../../src/state/stateCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Thread } from "../codex/generated/v2/Thread.js";
2
+ import { type RpcMessage } from "../protocol/envelopes.js";
3
+ import { type ThreadStateSnapshot } from "./stateCommand.js";
4
+ export declare class StockStateTracker {
5
+ private readonly pending;
6
+ private readonly settings;
7
+ private readonly usage;
8
+ observeRequest(connectionId: string, message: RpcMessage): void;
9
+ observeResponse(connectionId: string, message: RpcMessage): void;
10
+ observeNotification(message: RpcMessage): void;
11
+ snapshot(thread: Thread): ThreadStateSnapshot;
12
+ detach(connectionId: string): void;
13
+ private merge;
14
+ }
@@ -0,0 +1,120 @@
1
+ import { isRequest, isResponse, } from "../protocol/envelopes.js";
2
+ import { stateModelName } from "./stateCommand.js";
3
+ function key(connectionId, id) {
4
+ return `${connectionId}:${typeof id}:${id}`;
5
+ }
6
+ function settingsFrom(value) {
7
+ const collaboration = value.collaborationMode && typeof value.collaborationMode === "object"
8
+ ? value.collaborationMode.settings
9
+ : undefined;
10
+ const model = typeof value.model === "string"
11
+ ? value.model
12
+ : typeof collaboration?.model === "string" ? collaboration.model : undefined;
13
+ const effort = typeof value.effort === "string"
14
+ ? value.effort
15
+ : typeof value.reasoningEffort === "string"
16
+ ? value.reasoningEffort
17
+ : typeof collaboration?.reasoning_effort === "string" ? collaboration.reasoning_effort : undefined;
18
+ return {
19
+ ...(model ? { model } : {}),
20
+ ...("serviceTier" in value && (typeof value.serviceTier === "string" || value.serviceTier === null)
21
+ ? { serviceTier: value.serviceTier } : {}),
22
+ ...(effort ? { effort: effort } : {}),
23
+ ...(value.approvalPolicy ? { approvalPolicy: value.approvalPolicy } : {}),
24
+ ...(value.approvalsReviewer
25
+ ? { approvalsReviewer: value.approvalsReviewer } : {}),
26
+ ...(value.sandboxPolicy
27
+ ? { sandboxPolicy: value.sandboxPolicy }
28
+ : value.sandbox ? { sandboxPolicy: value.sandbox } : {}),
29
+ };
30
+ }
31
+ export class StockStateTracker {
32
+ pending = new Map();
33
+ settings = new Map();
34
+ usage = new Map();
35
+ observeRequest(connectionId, message) {
36
+ if (!isRequest(message))
37
+ return;
38
+ const params = message.params && typeof message.params === "object"
39
+ ? message.params
40
+ : {};
41
+ if (["thread/start", "thread/resume", "thread/fork", "thread/settings/update", "turn/start"]
42
+ .includes(message.method)) {
43
+ this.pending.set(key(connectionId, message.id), { method: message.method, params });
44
+ }
45
+ }
46
+ observeResponse(connectionId, message) {
47
+ if (!isResponse(message))
48
+ return;
49
+ const pending = this.pending.get(key(connectionId, message.id));
50
+ if (!pending)
51
+ return;
52
+ this.pending.delete(key(connectionId, message.id));
53
+ if ("error" in message)
54
+ return;
55
+ const result = message.result && typeof message.result === "object"
56
+ ? message.result
57
+ : {};
58
+ const thread = result.thread && typeof result.thread === "object"
59
+ ? result.thread
60
+ : undefined;
61
+ const threadId = thread?.id
62
+ ?? (typeof pending.params.threadId === "string" ? pending.params.threadId : undefined);
63
+ if (!threadId)
64
+ return;
65
+ if (["thread/start", "thread/resume", "thread/fork"].includes(pending.method)) {
66
+ this.merge(threadId, settingsFrom(result));
67
+ }
68
+ else if (pending.method === "thread/settings/update") {
69
+ this.merge(threadId, settingsFrom(pending.params));
70
+ }
71
+ else if (pending.method === "turn/start") {
72
+ this.merge(threadId, settingsFrom(pending.params));
73
+ }
74
+ }
75
+ observeNotification(message) {
76
+ if (!("method" in message) || "id" in message)
77
+ return;
78
+ const params = message.params && typeof message.params === "object"
79
+ ? message.params
80
+ : {};
81
+ const threadId = typeof params.threadId === "string" ? params.threadId : undefined;
82
+ if (message.method === "thread/settings/updated" && threadId
83
+ && params.threadSettings && typeof params.threadSettings === "object") {
84
+ this.merge(threadId, settingsFrom(params.threadSettings));
85
+ }
86
+ else if (message.method === "thread/tokenUsage/updated" && threadId
87
+ && params.tokenUsage && typeof params.tokenUsage === "object") {
88
+ this.usage.set(threadId, params.tokenUsage);
89
+ }
90
+ else if (message.method === "thread/deleted" && threadId) {
91
+ this.settings.delete(threadId);
92
+ this.usage.delete(threadId);
93
+ }
94
+ }
95
+ snapshot(thread) {
96
+ const settings = this.settings.get(thread.id);
97
+ return {
98
+ provider: "codex",
99
+ model: stateModelName("codex", settings?.model ?? "unknown"),
100
+ effort: settings?.effort ?? null,
101
+ serviceTier: settings?.serviceTier ?? null,
102
+ approvalPolicy: settings?.approvalPolicy ?? null,
103
+ approvalsReviewer: settings?.approvalsReviewer ?? null,
104
+ sandboxPolicy: settings?.sandboxPolicy ?? null,
105
+ thread,
106
+ tokenUsage: this.usage.get(thread.id) ?? null,
107
+ providerCostUsd: null,
108
+ };
109
+ }
110
+ detach(connectionId) {
111
+ for (const pendingKey of this.pending.keys()) {
112
+ if (pendingKey.startsWith(`${connectionId}:`))
113
+ this.pending.delete(pendingKey);
114
+ }
115
+ }
116
+ merge(threadId, update) {
117
+ this.settings.set(threadId, { ...this.settings.get(threadId), ...update });
118
+ }
119
+ }
120
+ //# sourceMappingURL=stockStateTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stockStateTracker.js","sourceRoot":"","sources":["../../src/state/stockStateTracker.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,23 @@ import type { Turn } from "../codex/generated/v2/Turn.js";
4
4
  import type { ThreadGoal } from "../codex/generated/v2/ThreadGoal.js";
5
5
  import type { TokenUsageBreakdown } from "../codex/generated/v2/TokenUsageBreakdown.js";
6
6
  import type { ApprovalsReviewer } from "../codex/generated/v2/ApprovalsReviewer.js";
7
+ export interface InternalGoal extends ThreadGoal {
8
+ readonly goalId: string;
9
+ }
10
+ export interface GoalPatch {
11
+ readonly objective?: string;
12
+ readonly status?: ThreadGoal["status"];
13
+ readonly tokenBudget?: number | null;
14
+ readonly replace?: boolean;
15
+ readonly now?: number;
16
+ }
17
+ export interface GoalUsageInput {
18
+ readonly threadId: string;
19
+ readonly expectedGoalId: string;
20
+ readonly tokenDelta: number;
21
+ readonly timeDeltaSeconds: number;
22
+ readonly checkpointKey?: string;
23
+ }
7
24
  export interface ClaudeThreadRecord {
8
25
  readonly thread: Thread;
9
26
  readonly claudeSessionId: string;
@@ -25,7 +42,13 @@ export interface ClaudeThreadRecord {
25
42
  readonly collaborationMode: unknown | null;
26
43
  readonly outputSchema: unknown | null;
27
44
  readonly tokenUsageTotal: TokenUsageBreakdown;
45
+ readonly tokenUsageLast: TokenUsageBreakdown | null;
46
+ readonly modelContextWindow: number | null;
47
+ readonly providerCostUsdTotal?: number;
48
+ readonly settingsGeneration?: number;
28
49
  }
50
+ export declare function settingsGeneration(record: ClaudeThreadRecord): number;
51
+ export declare function withSettingsFrom(base: ClaudeThreadRecord, settings: ClaudeThreadRecord): ClaudeThreadRecord;
29
52
  export interface PendingRequestRecord {
30
53
  readonly requestId: string;
31
54
  readonly threadId: string;
@@ -44,6 +67,76 @@ export interface EventPersistence {
44
67
  readonly providerEventId?: string | null;
45
68
  readonly dedupKey?: string | null;
46
69
  }
70
+ export interface StateEvent {
71
+ readonly turnId: string | null;
72
+ readonly method: string;
73
+ readonly params: unknown;
74
+ readonly providerEventType?: string | null;
75
+ readonly providerEventId?: string | null;
76
+ }
77
+ export interface ThreadStateCommit {
78
+ readonly record: ClaudeThreadRecord;
79
+ readonly turn?: Turn;
80
+ readonly insertTurn?: boolean;
81
+ readonly providerBoundary?: ProviderBoundaryCommit;
82
+ readonly events: readonly StateEvent[];
83
+ }
84
+ export interface TurnProviderBoundary {
85
+ readonly turnId: string;
86
+ readonly messageUuid: string;
87
+ }
88
+ export interface ProviderBoundaryCommit extends TurnProviderBoundary {
89
+ readonly ownerThreadId: string;
90
+ readonly itemIds?: readonly string[];
91
+ }
92
+ export interface PendingThreadRemoval {
93
+ readonly rootThreadId: string;
94
+ readonly claudeSessionId: string;
95
+ readonly cwd: string;
96
+ readonly kind: "delete" | "release" | "discard";
97
+ }
98
+ export interface StoredEvent {
99
+ readonly sequence: number;
100
+ readonly threadId: string;
101
+ readonly turnId: string | null;
102
+ readonly method: string;
103
+ readonly params: unknown;
104
+ readonly createdAt: number;
105
+ }
106
+ export type ProviderEventDisposition = "pending" | "projected" | "stateOnly" | "retainedOnly" | "abandoned" | "unsupportedVisible" | "failed";
107
+ export interface ProviderEventRecord {
108
+ readonly sequence: number;
109
+ readonly threadId: string;
110
+ readonly processEpoch: string;
111
+ readonly providerSequence: number;
112
+ readonly providerEventType: string;
113
+ readonly providerEventId: string | null;
114
+ readonly payload: unknown;
115
+ readonly disposition: ProviderEventDisposition;
116
+ readonly error: string | null;
117
+ readonly createdAt: number;
118
+ readonly projectedAt: number | null;
119
+ }
120
+ export interface ProviderItemCorrelation {
121
+ readonly providerMessageId: string;
122
+ readonly ownerThreadId: string;
123
+ readonly turnId: string;
124
+ readonly itemId: string;
125
+ }
126
+ export interface ProviderRetractionMutation {
127
+ readonly ownerThreadId: string;
128
+ readonly turn: Turn;
129
+ readonly clearBoundary: boolean;
130
+ }
131
+ export interface AppendProviderEvent {
132
+ readonly threadId: string;
133
+ readonly processEpoch: string;
134
+ readonly providerSequence: number;
135
+ readonly providerEventType: string;
136
+ readonly providerEventId: string | null;
137
+ readonly payload: unknown;
138
+ readonly createdAt: number;
139
+ }
47
140
  export interface HybridStore {
48
141
  createThread(record: ClaudeThreadRecord): void;
49
142
  hasThread(threadId: string): boolean;
@@ -51,7 +144,13 @@ export interface HybridStore {
51
144
  allThreadRecords(): ClaudeThreadRecord[];
52
145
  listThreads(params: ThreadListParams): Thread[];
53
146
  updateThread(record: ClaudeThreadRecord): void;
147
+ isThreadArchived(threadId: string): boolean;
54
148
  setThreadArchived(threadId: string, archived: boolean): void;
149
+ commitThreadsArchived(threadIds: readonly string[], archived: boolean): void;
150
+ beginThreadRemoval(removal: PendingThreadRemoval): void;
151
+ cancelThreadRemoval(rootThreadId: string): void;
152
+ listPendingThreadRemovals(): PendingThreadRemoval[];
153
+ commitThreadRemoval(rootThreadId: string, threadIds: readonly string[]): void;
55
154
  deleteThread(threadId: string): void;
56
155
  createTurn(threadId: string, turn: Turn): void;
57
156
  updateTurn(threadId: string, turn: Turn): void;
@@ -60,16 +159,33 @@ export interface HybridStore {
60
159
  setTurnClaudeMessageUuid(threadId: string, turnId: string, messageUuid: string): void;
61
160
  getTurnClaudeMessageUuid(threadId: string, turnId: string): string | undefined;
62
161
  truncateTurns(threadId: string, keepCount: number): void;
162
+ commitForkedThread(record: ClaudeThreadRecord, turns: readonly Turn[], boundaries: readonly TurnProviderBoundary[]): void;
163
+ commitThreadRollback(record: ClaudeThreadRecord, keepCount: number, boundaries: readonly TurnProviderBoundary[], removedThreadIds?: readonly string[]): void;
164
+ commitThreadState(commit: ThreadStateCommit): number[];
63
165
  appendEvent(threadId: string, turnId: string | null, method: string, params: unknown, persistence?: EventPersistence): number;
166
+ eventHighWatermark(threadId: string): number;
167
+ listEventsAfter(threadId: string, sequence: number): StoredEvent[];
64
168
  hasProcessedProviderEvent(threadId: string, providerEventId: string): boolean;
65
169
  markProviderEventProcessed(threadId: string, providerEventType: string, providerEventId: string): void;
170
+ appendProviderEvent(event: AppendProviderEvent): {
171
+ record: ProviderEventRecord;
172
+ inserted: boolean;
173
+ };
174
+ completeProviderEvent(threadId: string, sequence: number, disposition: Exclude<ProviderEventDisposition, "pending">, error?: string | null): void;
175
+ listProviderEvents(threadId: string, disposition?: ProviderEventDisposition): ProviderEventRecord[];
176
+ pruneProviderEvents(threadId: string, maxEvents: number, maxBytes: number): number;
177
+ linkProviderItems(threadId: string, providerMessageId: string, ownerThreadId: string, turnId: string, itemIds: readonly string[]): void;
178
+ listProviderItemCorrelations(threadId: string, providerMessageIds: readonly string[]): ProviderItemCorrelation[];
179
+ deleteProviderItemCorrelations(threadId: string, providerMessageIds: readonly string[]): void;
180
+ commitProviderRetraction(record: ClaudeThreadRecord, providerMessageIds: readonly string[], mutations: readonly ProviderRetractionMutation[], removedThreadIds?: readonly string[]): void;
66
181
  createPendingRequest(request: PendingRequestRecord): void;
67
182
  getPendingRequest(requestId: string): PendingRequestRecord | undefined;
68
183
  findPendingRequestByClaudeId(threadId: string, claudeRequestId: string): PendingRequestRecord | undefined;
69
184
  listPendingRequests(threadId: string): PendingRequestRecord[];
70
185
  resolvePendingRequest(requestId: string, status: "resolved" | "cancelled", response: unknown): void;
71
- getGoal(threadId: string): ThreadGoal | undefined;
72
- setGoal(goal: ThreadGoal): void;
186
+ getGoal(threadId: string): InternalGoal | undefined;
187
+ setGoal(threadId: string, patch: GoalPatch): InternalGoal;
73
188
  clearGoal(threadId: string): boolean;
189
+ accountGoalUsage(input: GoalUsageInput): InternalGoal | undefined;
74
190
  close(): void;
75
191
  }
@@ -1,2 +1,24 @@
1
- export {};
1
+ export function settingsGeneration(record) {
2
+ return record.settingsGeneration ?? 0;
3
+ }
4
+ export function withSettingsFrom(base, settings) {
5
+ return {
6
+ ...base,
7
+ thread: { ...base.thread, cwd: settings.thread.cwd },
8
+ modelPickerId: settings.modelPickerId,
9
+ claudeModelValue: settings.claudeModelValue,
10
+ serviceTier: settings.serviceTier,
11
+ approvalPolicy: settings.approvalPolicy,
12
+ approvalsReviewer: settings.approvalsReviewer,
13
+ sandboxPolicy: settings.sandboxPolicy,
14
+ baseInstructions: settings.baseInstructions,
15
+ developerInstructions: settings.developerInstructions,
16
+ personality: settings.personality,
17
+ reasoningEffort: settings.reasoningEffort,
18
+ reasoningSummary: settings.reasoningSummary,
19
+ collaborationMode: settings.collaborationMode,
20
+ outputSchema: settings.outputSchema,
21
+ settingsGeneration: settingsGeneration(settings),
22
+ };
23
+ }
2
24
  //# sourceMappingURL=HybridStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HybridStore.js","sourceRoot":"","sources":["../../src/store/HybridStore.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"HybridStore.js","sourceRoot":"","sources":["../../src/store/HybridStore.ts"],"names":[],"mappings":"AAsDA,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,OAAO,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAwB,EACxB,QAA4B;IAE5B,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QACpD,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,kBAAkB,EAAE,kBAAkB,CAAC,QAAQ,CAAC;KACjD,CAAC;AACJ,CAAC"}