@x-code-cli/core 0.1.10 → 0.2.0

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 (111) hide show
  1. package/dist/agent/api-errors.d.ts.map +1 -1
  2. package/dist/agent/api-errors.js +18 -0
  3. package/dist/agent/api-errors.js.map +1 -1
  4. package/dist/agent/diff.d.ts +35 -0
  5. package/dist/agent/diff.d.ts.map +1 -0
  6. package/dist/agent/diff.js +83 -0
  7. package/dist/agent/diff.js.map +1 -0
  8. package/dist/agent/loop-state.d.ts +45 -3
  9. package/dist/agent/loop-state.d.ts.map +1 -1
  10. package/dist/agent/loop-state.js +24 -3
  11. package/dist/agent/loop-state.js.map +1 -1
  12. package/dist/agent/loop.d.ts +10 -6
  13. package/dist/agent/loop.d.ts.map +1 -1
  14. package/dist/agent/loop.js +212 -30
  15. package/dist/agent/loop.js.map +1 -1
  16. package/dist/agent/plan-storage.d.ts +55 -0
  17. package/dist/agent/plan-storage.d.ts.map +1 -0
  18. package/dist/agent/plan-storage.js +156 -0
  19. package/dist/agent/plan-storage.js.map +1 -0
  20. package/dist/agent/session-store.d.ts +114 -0
  21. package/dist/agent/session-store.d.ts.map +1 -0
  22. package/dist/agent/session-store.js +415 -0
  23. package/dist/agent/session-store.js.map +1 -0
  24. package/dist/agent/sub-agents/built-in.d.ts +3 -0
  25. package/dist/agent/sub-agents/built-in.d.ts.map +1 -0
  26. package/dist/agent/sub-agents/built-in.js +98 -0
  27. package/dist/agent/sub-agents/built-in.js.map +1 -0
  28. package/dist/agent/sub-agents/index.d.ts +7 -0
  29. package/dist/agent/sub-agents/index.d.ts.map +1 -0
  30. package/dist/agent/sub-agents/index.js +5 -0
  31. package/dist/agent/sub-agents/index.js.map +1 -0
  32. package/dist/agent/sub-agents/loader.d.ts +5 -0
  33. package/dist/agent/sub-agents/loader.d.ts.map +1 -0
  34. package/dist/agent/sub-agents/loader.js +117 -0
  35. package/dist/agent/sub-agents/loader.js.map +1 -0
  36. package/dist/agent/sub-agents/registry.d.ts +14 -0
  37. package/dist/agent/sub-agents/registry.d.ts.map +1 -0
  38. package/dist/agent/sub-agents/registry.js +37 -0
  39. package/dist/agent/sub-agents/registry.js.map +1 -0
  40. package/dist/agent/sub-agents/runner.d.ts +26 -0
  41. package/dist/agent/sub-agents/runner.d.ts.map +1 -0
  42. package/dist/agent/sub-agents/runner.js +287 -0
  43. package/dist/agent/sub-agents/runner.js.map +1 -0
  44. package/dist/agent/sub-agents/types.d.ts +63 -0
  45. package/dist/agent/sub-agents/types.d.ts.map +1 -0
  46. package/dist/agent/sub-agents/types.js +2 -0
  47. package/dist/agent/sub-agents/types.js.map +1 -0
  48. package/dist/agent/system-prompt.d.ts +15 -0
  49. package/dist/agent/system-prompt.d.ts.map +1 -1
  50. package/dist/agent/system-prompt.js +161 -0
  51. package/dist/agent/system-prompt.js.map +1 -1
  52. package/dist/agent/tool-execution.d.ts +4 -3
  53. package/dist/agent/tool-execution.d.ts.map +1 -1
  54. package/dist/agent/tool-execution.js +316 -14
  55. package/dist/agent/tool-execution.js.map +1 -1
  56. package/dist/agent/tool-result-sanitize.d.ts +12 -0
  57. package/dist/agent/tool-result-sanitize.d.ts.map +1 -1
  58. package/dist/agent/tool-result-sanitize.js +70 -0
  59. package/dist/agent/tool-result-sanitize.js.map +1 -1
  60. package/dist/config/index.d.ts +6 -0
  61. package/dist/config/index.d.ts.map +1 -1
  62. package/dist/config/index.js.map +1 -1
  63. package/dist/index.d.ts +11 -5
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +10 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/knowledge/session.d.ts +4 -7
  68. package/dist/knowledge/session.d.ts.map +1 -1
  69. package/dist/knowledge/session.js +20 -55
  70. package/dist/knowledge/session.js.map +1 -1
  71. package/dist/permissions/index.d.ts +18 -3
  72. package/dist/permissions/index.d.ts.map +1 -1
  73. package/dist/permissions/index.js +20 -2
  74. package/dist/permissions/index.js.map +1 -1
  75. package/dist/tools/ask-user.d.ts.map +1 -1
  76. package/dist/tools/ask-user.js +8 -6
  77. package/dist/tools/ask-user.js.map +1 -1
  78. package/dist/tools/enter-plan-mode.d.ts +25 -0
  79. package/dist/tools/enter-plan-mode.d.ts.map +1 -0
  80. package/dist/tools/enter-plan-mode.js +120 -0
  81. package/dist/tools/enter-plan-mode.js.map +1 -0
  82. package/dist/tools/exit-plan-mode.d.ts +13 -0
  83. package/dist/tools/exit-plan-mode.d.ts.map +1 -0
  84. package/dist/tools/exit-plan-mode.js +22 -0
  85. package/dist/tools/exit-plan-mode.js.map +1 -0
  86. package/dist/tools/grep.d.ts +1 -1
  87. package/dist/tools/index.d.ts +20 -4
  88. package/dist/tools/index.d.ts.map +1 -1
  89. package/dist/tools/index.js +7 -1
  90. package/dist/tools/index.js.map +1 -1
  91. package/dist/tools/save-knowledge.d.ts +2 -2
  92. package/dist/tools/shell-provider.d.ts +4 -0
  93. package/dist/tools/shell-provider.d.ts.map +1 -1
  94. package/dist/tools/shell-provider.js +2 -0
  95. package/dist/tools/shell-provider.js.map +1 -1
  96. package/dist/tools/task.d.ts +14 -0
  97. package/dist/tools/task.d.ts.map +1 -0
  98. package/dist/tools/task.js +95 -0
  99. package/dist/tools/task.js.map +1 -0
  100. package/dist/tools/todo-write.d.ts +21 -0
  101. package/dist/tools/todo-write.d.ts.map +1 -0
  102. package/dist/tools/todo-write.js +117 -0
  103. package/dist/tools/todo-write.js.map +1 -0
  104. package/dist/types/index.d.ts +103 -0
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/types/index.js.map +1 -1
  107. package/package.json +1 -1
  108. package/dist/knowledge/session-usage.d.ts +0 -24
  109. package/dist/knowledge/session-usage.d.ts.map +0 -1
  110. package/dist/knowledge/session-usage.js +0 -86
  111. package/dist/knowledge/session-usage.js.map +0 -1
@@ -1,5 +1,47 @@
1
1
  import type { LanguageModel, ModelMessage } from 'ai';
2
+ import type { EditDiffPayload } from '../agent/diff.js';
3
+ import type { SubAgentEvent } from '../agent/sub-agents/types.js';
4
+ import type { SubAgentRegistry } from '../agent/sub-agents/registry.js';
2
5
  export type PermissionLevel = 'always-allow' | 'ask' | 'deny';
6
+ /** Approval mode for the current session.
7
+ *
8
+ * 'default' — normal flow: write tools ask, model can call anything.
9
+ * 'plan' — read-only mode: the model is told (via system-prompt
10
+ * overlay) to explore + write a plan to a session-local
11
+ * plan file but make no other edits. Enforcement is
12
+ * prompt-based — matching Claude Code, no hard
13
+ * permission-layer block — so a non-compliant model
14
+ * would still hit the regular `ask` prompt for
15
+ * write/edit/shell.
16
+ * 'acceptEdits' — write tools (writeFile / edit) auto-approve without
17
+ * asking; shell still goes through normal classification
18
+ * (always-allow / ask / deny) so destructive commands
19
+ * stay gated. Useful right after a plan is approved —
20
+ * the user already vetted the plan, having to click
21
+ * "Yes" on every writeFile during implementation is
22
+ * pure friction. exitPlanMode auto-switches into this
23
+ * mode on approval; the user can also enter it
24
+ * manually via Shift+Tab cycling.
25
+ *
26
+ * Cycling order on Shift+Tab: default → acceptEdits → plan → default. */
27
+ export type PermissionMode = 'default' | 'acceptEdits' | 'plan';
28
+ /** A single entry on the model's working checklist.
29
+ *
30
+ * content — imperative phrasing of the task ("Update auth handler")
31
+ * activeForm — present-continuous phrasing for the live indicator
32
+ * ("Updating auth handler"); shown in UI while status is
33
+ * 'in_progress' so the user sees what the agent is doing
34
+ * right now.
35
+ * status — 'pending' | 'in_progress' | 'completed'.
36
+ *
37
+ * Mirrors Claude Code's TodoWrite payload shape verbatim. Persisted
38
+ * in-memory only (LoopState.todos), per-session, no disk. */
39
+ export type TodoStatus = 'pending' | 'in_progress' | 'completed';
40
+ export interface TodoItem {
41
+ content: string;
42
+ activeForm: string;
43
+ status: TodoStatus;
44
+ }
3
45
  export interface TokenUsage {
4
46
  inputTokens: number;
5
47
  outputTokens: number;
@@ -12,6 +54,21 @@ export interface TokenUsage {
12
54
  * Billed at a premium over normal input rate but unlocks cheap reads on
13
55
  * subsequent turns. Zero on providers that don't separate creation from read. */
14
56
  cacheCreationTokens: number;
57
+ /** Current context-window occupancy — `input_tokens + output_tokens` of
58
+ * the MOST RECENT API response (`inputTokens` already includes cache_read
59
+ * + cache_write since AI SDK v6 normalises them into one field). Unlike
60
+ * the cumulative fields above, this is a SNAPSHOT — overwritten each
61
+ * turn, not accumulated. Drives the footer "N / M · X%" indicator.
62
+ *
63
+ * Why input + output (matching every provider's definition):
64
+ * every major LLM API — Anthropic, OpenAI, Google Gemini, DeepSeek,
65
+ * Moonshot, Alibaba, xAI — defines "context window" as the shared
66
+ * budget pool of input + output, with `input + output ≤ context_window`
67
+ * as the architectural constraint (single KV-cache cap). Showing input
68
+ * alone in the footer would be a different number than what users see
69
+ * when reading provider docs about model context windows. The cumulative
70
+ * fields above remain for `/usage` billing summaries. */
71
+ currentContextTokens: number;
15
72
  }
16
73
  export interface DisplayMessage {
17
74
  id: string;
@@ -47,6 +104,11 @@ export interface DisplayToolCall {
47
104
  status: 'pending' | 'running' | 'completed' | 'denied' | 'error';
48
105
  /** How long the tool call took to execute (milliseconds) */
49
106
  durationMs?: number;
107
+ /** Structured patch produced by writeFile / edit — drives the colored
108
+ * diff block under the tool bullet in scrollback. Absent for non-edit
109
+ * tools, hydrated history (we don't recompute on session resume), and
110
+ * edits that actually had no effect (oldContent === newContent). */
111
+ editPayload?: EditDiffPayload;
50
112
  }
51
113
  export interface AgentCallbacks {
52
114
  onTextDelta: (text: string) => void;
@@ -56,6 +118,12 @@ export interface AgentCallbacks {
56
118
  * shown in the live UI; the final summary comes through onToolResult. */
57
119
  onToolProgress: (toolCallId: string, message: string) => void;
58
120
  onToolResult: (toolCallId: string, result: string, isError?: boolean) => void;
121
+ /** Optional. Fired right BEFORE `onToolResult` for a successful
122
+ * writeFile / edit, carrying the structured patch + line counts so the
123
+ * UI can render a diff block under the tool bullet. Skipped for
124
+ * permission-denied / errored writes (the file wasn't actually changed)
125
+ * and for no-op edits that produced an identical file. */
126
+ onFileEdit?: (toolCallId: string, payload: EditDiffPayload) => void;
59
127
  onAskPermission: (toolCall: {
60
128
  toolCallId: string;
61
129
  toolName: string;
@@ -65,10 +133,24 @@ export interface AgentCallbacks {
65
133
  label: string;
66
134
  description: string;
67
135
  }[]) => Promise<string>;
136
+ /** Triggered by `exitPlanMode`. Resolve `true` to leave plan mode and
137
+ * let the model start implementing; resolve `false` to reject the plan
138
+ * and keep the model in plan mode for further iteration. */
139
+ onPlanApprovalRequest: (planText: string) => Promise<boolean>;
140
+ /** Fired whenever permissionMode flips so the UI can resync the bottom
141
+ * indicator and (when persisting) write the new value to user config. */
142
+ onPlanModeChange: (mode: PermissionMode) => void;
143
+ /** Fired after the model calls `todoWrite` so the UI can show the
144
+ * current checklist. The full list is passed every call (todoWrite
145
+ * is a full-replacement tool, not a delta) — UI just stores it. */
146
+ onTodosUpdate: (todos: TodoItem[]) => void;
68
147
  onShellOutput: (chunk: string) => void;
69
148
  onUsageUpdate: (usage: TokenUsage) => void;
70
149
  onContextCompressed: (summary: string) => void;
71
150
  onError: (error: Error) => void;
151
+ /** Fired by the sub-agent runner to stream progress from child agent loops.
152
+ * The CLI UI uses these events to build the collapsed/expanded task block. */
153
+ onSubAgentEvent?: (event: SubAgentEvent) => void;
72
154
  }
73
155
  export interface AgentOptions {
74
156
  modelId: string;
@@ -80,8 +162,27 @@ export interface AgentOptions {
80
162
  * Persisted in `~/.x-code/config.json` as `thinking: boolean`,
81
163
  * toggled at runtime via `/thinking on|off`. Defaults to false. */
82
164
  thinking?: boolean;
165
+ /** Initial permission mode for the session. Defaults to 'default'.
166
+ * Set from `--plan` CLI flag or `loadUserConfig().permissionMode`. */
167
+ permissionMode?: PermissionMode;
83
168
  systemPromptExtra?: string;
84
169
  abortSignal?: AbortSignal;
170
+ /** Provider registry for resolving sub-agent model overrides.
171
+ * Injected by the CLI at startup. Absent = sub-agents inherit the
172
+ * parent model (no independent model selection). */
173
+ modelRegistry?: {
174
+ languageModel: (...args: any[]) => LanguageModel;
175
+ };
176
+ /** Sub-agent registry. Injected by the CLI at startup after scanning
177
+ * built-in + custom agent definitions. Absent = task tool is not
178
+ * registered (no sub-agent support). */
179
+ subAgentRegistry?: SubAgentRegistry;
180
+ /** Tool allow/deny filter. Used by sub-agent loops to restrict
181
+ * which tools the child can call. `task` is always in `deny`. */
182
+ toolFilter?: {
183
+ allow?: string[];
184
+ deny?: string[];
185
+ };
85
186
  }
86
187
  /**
87
188
  * Category taxonomy for auto memory entries. Categories describe the TYPE of
@@ -157,4 +258,6 @@ export interface ProviderModel {
157
258
  export declare const PROVIDER_MODELS: Record<string, readonly ProviderModel[]>;
158
259
  export declare const PROVIDER_KEY_URLS: Record<string, string>;
159
260
  export type { ModelMessage, LanguageModel };
261
+ export type { SubAgentEvent, SubAgentDefinition, SubAgentTrace } from '../agent/sub-agents/types.js';
262
+ export type { SubAgentRegistry } from '../agent/sub-agents/registry.js';
160
263
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAIrD,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,KAAK,GAAG,MAAM,CAAA;AAI7D,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB;;gFAE4E;IAC5E,eAAe,EAAE,MAAM,CAAA;IACvB;;sFAEkF;IAClF,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,eAAe,EAAE,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB;;;;gEAI4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;;2EAOuE;IACvE,IAAI,CAAC,EAAE,cAAc,GAAG,gBAAgB,CAAA;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;kCAG8B;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;IAChE,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAID,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC1F;;8EAE0E;IAC1E,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7D,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7E,eAAe,EAAE,CAAC,QAAQ,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACnG,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1C,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAChC;AAID,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB;;;wEAGoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAID;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAA;AAE7E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,CAAA;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAID,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWhD,CAAA;AAID,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;EAS3B,CAAA;AAIV,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAkDpE,CAAA;AAID,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASpD,CAAA;AAID,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-code-cli/core",
3
- "version": "0.1.10",
3
+ "version": "0.2.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/woai3c/x-code-cli",
@@ -1,24 +0,0 @@
1
- import type { LoopState } from '../agent/loop-state.js';
2
- import type { TokenUsage } from '../types/index.js';
3
- export interface SessionUsageSnapshot {
4
- id: string;
5
- modelId: string;
6
- startedAt: string;
7
- updatedAt: string;
8
- turnCount: number;
9
- usage: TokenUsage;
10
- }
11
- /** Write the current usage state to disk. Fire-and-forget from the loop —
12
- * callers should `void` this; failures are swallowed so a transient FS error
13
- * never aborts the agent turn. */
14
- export declare function persistUsageSnapshot(state: LoopState, modelId: string): Promise<void>;
15
- /** Read the most recent usage snapshot for the current project (cwd). Returns
16
- * null when no session has run here yet. /usage prefers in-memory state for
17
- * the live session and only hits this on a fresh process. */
18
- export declare function loadLatestUsageSnapshot(): Promise<SessionUsageSnapshot | null>;
19
- /** Enumerate every per-session usage snapshot in this project, newest first.
20
- * Used by `/usage history` — purely project-local, never traverses other
21
- * cwds. Skips `latest.usage.json` since it's a duplicate pointer. Silently
22
- * drops malformed JSON files instead of failing the whole listing. */
23
- export declare function listSessionUsageSnapshots(): Promise<SessionUsageSnapshot[]>;
24
- //# sourceMappingURL=session-usage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-usage.d.ts","sourceRoot":"","sources":["../../src/knowledge/session-usage.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;CAClB;AAgBD;;mCAEmC;AACnC,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB3F;AAED;;8DAE8D;AAC9D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAOpF;AAED;;;uEAGuE;AACvE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAqBjF"}
@@ -1,86 +0,0 @@
1
- // @x-code-cli/core — Per-session token usage persistence.
2
- //
3
- // Writes a small JSON snapshot to .x-code/sessions/{sessionId}.usage.json on
4
- // every assistant turn so that /usage works after a restart and so the user
5
- // can grep/diff usage across sessions in the project. Scope is intentionally
6
- // per-cwd (project-local) — there's no cross-project aggregation.
7
- //
8
- // Kept separate from session.ts (which writes the LLM-generated SessionSummary
9
- // at exit/compact) because the two write at different cadences and would
10
- // clobber each other if they shared a file.
11
- import fs from 'node:fs/promises';
12
- import path from 'node:path';
13
- import { XCODE_DIR } from '../utils.js';
14
- const SESSIONS_DIR = `${XCODE_DIR}/sessions`;
15
- function getSessionsDir() {
16
- return path.join(process.cwd(), SESSIONS_DIR);
17
- }
18
- function getUsagePath(sessionId) {
19
- return path.join(getSessionsDir(), `${sessionId}.usage.json`);
20
- }
21
- function getLatestUsagePath() {
22
- return path.join(getSessionsDir(), 'latest.usage.json');
23
- }
24
- /** Write the current usage state to disk. Fire-and-forget from the loop —
25
- * callers should `void` this; failures are swallowed so a transient FS error
26
- * never aborts the agent turn. */
27
- export async function persistUsageSnapshot(state, modelId) {
28
- const snapshot = {
29
- id: state.sessionId,
30
- modelId,
31
- startedAt: state.startedAt,
32
- updatedAt: new Date().toISOString(),
33
- turnCount: state.turnCount,
34
- usage: { ...state.tokenUsage },
35
- };
36
- try {
37
- await fs.mkdir(getSessionsDir(), { recursive: true });
38
- const json = JSON.stringify(snapshot, null, 2);
39
- await Promise.all([
40
- fs.writeFile(getUsagePath(state.sessionId), json, 'utf-8'),
41
- fs.writeFile(getLatestUsagePath(), json, 'utf-8'),
42
- ]);
43
- }
44
- catch {
45
- // Persistence is best-effort; never block the agent loop on FS errors.
46
- }
47
- }
48
- /** Read the most recent usage snapshot for the current project (cwd). Returns
49
- * null when no session has run here yet. /usage prefers in-memory state for
50
- * the live session and only hits this on a fresh process. */
51
- export async function loadLatestUsageSnapshot() {
52
- try {
53
- const raw = await fs.readFile(getLatestUsagePath(), 'utf-8');
54
- return JSON.parse(raw);
55
- }
56
- catch {
57
- return null;
58
- }
59
- }
60
- /** Enumerate every per-session usage snapshot in this project, newest first.
61
- * Used by `/usage history` — purely project-local, never traverses other
62
- * cwds. Skips `latest.usage.json` since it's a duplicate pointer. Silently
63
- * drops malformed JSON files instead of failing the whole listing. */
64
- export async function listSessionUsageSnapshots() {
65
- let entries;
66
- try {
67
- entries = await fs.readdir(getSessionsDir());
68
- }
69
- catch {
70
- return [];
71
- }
72
- const usageFiles = entries.filter((f) => f.endsWith('.usage.json') && f !== 'latest.usage.json');
73
- const snapshots = await Promise.all(usageFiles.map(async (f) => {
74
- try {
75
- const raw = await fs.readFile(path.join(getSessionsDir(), f), 'utf-8');
76
- return JSON.parse(raw);
77
- }
78
- catch {
79
- return null;
80
- }
81
- }));
82
- return snapshots
83
- .filter((s) => s !== null)
84
- .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
85
- }
86
- //# sourceMappingURL=session-usage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-usage.js","sourceRoot":"","sources":["../../src/knowledge/session-usage.ts"],"names":[],"mappings":"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"}