@cjhyy/code-shell 0.1.6 → 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 (171) hide show
  1. package/dist/anthropic-OVRWAZRD.js +1 -0
  2. package/dist/arena/index.js +1 -104
  3. package/dist/arena-64T2EQD4.js +3 -0
  4. package/dist/bwrap-PVZMLHZR.js +2 -0
  5. package/dist/chunk-2EUIMKJA.js +1 -0
  6. package/dist/chunk-2GJ7H5NC.js +641 -0
  7. package/dist/chunk-2OD6VR4N.js +2 -0
  8. package/dist/chunk-3QP5BQ3L.js +1 -0
  9. package/dist/chunk-A4M2Y42L.js +2 -0
  10. package/dist/chunk-DEYFK6FP.js +1 -0
  11. package/dist/chunk-DTPABBSV.js +2 -0
  12. package/dist/chunk-EU3J7TBP.js +1 -0
  13. package/dist/chunk-FU7AHZNN.js +1 -0
  14. package/dist/chunk-L7B2ORID.js +4 -0
  15. package/dist/chunk-M7VU4YVY.js +49 -0
  16. package/dist/chunk-MGP35GKD.js +254 -0
  17. package/dist/chunk-MLCTC53I.js +1 -0
  18. package/dist/chunk-O5HFCH2U.js +1 -0
  19. package/dist/chunk-P6JSTIFM.js +1 -0
  20. package/dist/chunk-Q3RSX66I.js +1 -0
  21. package/dist/chunk-QTWU7UNA.js +5 -0
  22. package/dist/chunk-RERBX75D.js +251 -0
  23. package/dist/chunk-SNFAPSLA.js +1 -0
  24. package/dist/chunk-T222K6IV.js +18 -0
  25. package/dist/chunk-TKJA6W36.js +3 -0
  26. package/dist/chunk-VKKU4LOM.js +3 -0
  27. package/dist/chunk-WI6FSWGU.js +1 -0
  28. package/dist/chunk-XXCZE2U2.js +2 -0
  29. package/dist/chunk-ZSAONDT6.js +2 -0
  30. package/dist/cli/main.js +303 -22060
  31. package/dist/cli/onboarding.d.ts +7 -2
  32. package/dist/client-base-F5FCRSB3.js +1 -0
  33. package/dist/compaction-L3Y6NG4N.js +1 -0
  34. package/dist/context/compaction.d.ts +2 -1
  35. package/dist/data/static-catalogs.d.ts +25 -0
  36. package/dist/devtools-SGDUOOM4.js +1 -0
  37. package/dist/engine/engine.d.ts +24 -0
  38. package/dist/engine/turn-loop.d.ts +20 -0
  39. package/dist/export-md-U72T7NW7.js +22 -0
  40. package/dist/file-history-7FQFEQOL.js +1 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +1 -347
  43. package/dist/llm/capabilities/index.d.ts +20 -0
  44. package/dist/llm/capabilities/rules.d.ts +26 -0
  45. package/dist/llm/capabilities/types.d.ts +108 -0
  46. package/dist/llm/model-pool.d.ts +7 -0
  47. package/dist/llm/provider-catalog.d.ts +2 -0
  48. package/dist/llm/provider-kinds.d.ts +1 -1
  49. package/dist/llm/providers/openai.d.ts +22 -0
  50. package/dist/llm/token-counter.d.ts +17 -0
  51. package/dist/llm/types.d.ts +8 -0
  52. package/dist/logging/logger.d.ts +10 -2
  53. package/dist/logging/session-recorder.d.ts +16 -3
  54. package/dist/manager-J6FXEUEK.js +1 -0
  55. package/dist/mcp-manager-27EVBKRT.js +1 -0
  56. package/dist/memory-BNI4WEWL.js +1 -0
  57. package/dist/model-cache-HEDXI7UJ.js +1 -0
  58. package/dist/model-fetcher-X5W5EASG.js +1 -0
  59. package/dist/off-7SDVMMXW.js +1 -0
  60. package/dist/openai-3QEADSYL.js +1 -0
  61. package/dist/openrouter-models-GZVCRWD2.js +1 -0
  62. package/dist/openrouter-sync-WG4AG5NC.js +1 -0
  63. package/dist/product/index.js +1 -21
  64. package/dist/protocol/client.d.ts +1 -1
  65. package/dist/run/index.js +1 -48
  66. package/dist/seatbelt-L54CNI2Y.js +37 -0
  67. package/dist/session/session-manager.d.ts +2 -0
  68. package/dist/session-manager-AGWS5SMJ.js +1 -0
  69. package/dist/settings/schema.d.ts +147 -21
  70. package/dist/tool-summary-V2B3MD5N.js +2 -0
  71. package/dist/tool-system/builtin/bash.d.ts +7 -1
  72. package/dist/tool-system/context.d.ts +7 -0
  73. package/dist/tool-system/executor.d.ts +4 -0
  74. package/dist/tool-system/sandbox/bwrap.d.ts +13 -0
  75. package/dist/tool-system/sandbox/index.d.ts +78 -0
  76. package/dist/tool-system/sandbox/off.d.ts +2 -0
  77. package/dist/tool-system/sandbox/seatbelt.d.ts +18 -0
  78. package/dist/tool-system/task-guard.d.ts +30 -0
  79. package/dist/types.d.ts +17 -0
  80. package/dist/ui/components/SessionPicker.d.ts +2 -0
  81. package/dist/ui/components/SpinnerWithVerb.d.ts +7 -2
  82. package/dist/ui/components/StatusLine.d.ts +7 -3
  83. package/dist/updater-OCNU2K2Z.js +1 -0
  84. package/package.json +7 -10
  85. package/dist/anthropic-IBTI4WL2.cjs +0 -10
  86. package/dist/anthropic-PRZZKHEZ.js +0 -10
  87. package/dist/arena/index.cjs +0 -104
  88. package/dist/arena-2LTLIXOL.js +0 -261
  89. package/dist/arena-ADB7DRFI.cjs +0 -261
  90. package/dist/chunk-2YW4FPFG.cjs +0 -101
  91. package/dist/chunk-3OA5G4TM.js +0 -47
  92. package/dist/chunk-3QO25N6E.js +0 -4711
  93. package/dist/chunk-3SBSUOWZ.js +0 -447
  94. package/dist/chunk-52LGZKT3.cjs +0 -47
  95. package/dist/chunk-55XGPMAP.cjs +0 -146
  96. package/dist/chunk-6QVAYW7C.cjs +0 -438
  97. package/dist/chunk-6S4BJ65N.js +0 -113
  98. package/dist/chunk-76HYEPDM.js +0 -307
  99. package/dist/chunk-7BI3V74Y.cjs +0 -447
  100. package/dist/chunk-7EG3V4JY.cjs +0 -113
  101. package/dist/chunk-7JVTYEEC.js +0 -340
  102. package/dist/chunk-7QIM3BKD.js +0 -44
  103. package/dist/chunk-7Y6S3OCX.js +0 -438
  104. package/dist/chunk-ABRRONJ7.js +0 -107
  105. package/dist/chunk-BSW22MPA.js +0 -146
  106. package/dist/chunk-BXCY2FSE.js +0 -203
  107. package/dist/chunk-BZ5TNE7L.js +0 -5128
  108. package/dist/chunk-DDB6QOKJ.cjs +0 -1252
  109. package/dist/chunk-HEKQCI7B.cjs +0 -224
  110. package/dist/chunk-IK4EWJBP.cjs +0 -203
  111. package/dist/chunk-ILHE7XLT.cjs +0 -107
  112. package/dist/chunk-JMR33QVF.cjs +0 -169
  113. package/dist/chunk-KAQHULYN.js +0 -54
  114. package/dist/chunk-KE4EQOWA.js +0 -294
  115. package/dist/chunk-KOVYSDHZ.cjs +0 -340
  116. package/dist/chunk-KS3RYAYL.cjs +0 -45
  117. package/dist/chunk-MD32R22I.js +0 -50
  118. package/dist/chunk-MV7YI4WO.cjs +0 -293
  119. package/dist/chunk-MY5XHADU.cjs +0 -216
  120. package/dist/chunk-NUNC3VFB.cjs +0 -307
  121. package/dist/chunk-PKGRTCCY.js +0 -9092
  122. package/dist/chunk-QARL3IDQ.js +0 -1252
  123. package/dist/chunk-S754JHLR.cjs +0 -54
  124. package/dist/chunk-SFXHZSRF.js +0 -101
  125. package/dist/chunk-SIHHIQLO.js +0 -224
  126. package/dist/chunk-T6VYG46N.js +0 -105
  127. package/dist/chunk-TNLGBJYS.cjs +0 -44
  128. package/dist/chunk-TUY2T5KP.cjs +0 -105
  129. package/dist/chunk-UXOCVJJ6.cjs +0 -9092
  130. package/dist/chunk-VIAGTYYW.js +0 -169
  131. package/dist/chunk-WASS5YWB.js +0 -215
  132. package/dist/chunk-WZJV6DJC.cjs +0 -5128
  133. package/dist/chunk-YIQBXAYU.cjs +0 -264
  134. package/dist/chunk-YKIAELDZ.cjs +0 -4711
  135. package/dist/chunk-ZBPSQCPU.js +0 -264
  136. package/dist/cli/main.cjs +0 -22156
  137. package/dist/client-base-HTF236ZD.cjs +0 -9
  138. package/dist/client-base-QKRKCOWB.js +0 -9
  139. package/dist/compaction-6VU2T643.js +0 -33
  140. package/dist/compaction-OKUNTCA7.cjs +0 -33
  141. package/dist/devtools-T2NIZBJK.cjs +0 -6
  142. package/dist/devtools-YXWHOVKR.js +0 -6
  143. package/dist/export-md-RXDW6F5W.cjs +0 -135
  144. package/dist/export-md-XXKZANW5.js +0 -135
  145. package/dist/file-history-KYPE3ECT.cjs +0 -7
  146. package/dist/file-history-LF4F7X26.js +0 -7
  147. package/dist/index.cjs +0 -347
  148. package/dist/manager-D65VFAPX.js +0 -7
  149. package/dist/manager-TTF5VHJC.cjs +0 -7
  150. package/dist/mcp-manager-QMKWPBZ4.js +0 -8
  151. package/dist/mcp-manager-Z3OKI74O.cjs +0 -8
  152. package/dist/memory-5LWZ6FI2.cjs +0 -9
  153. package/dist/memory-VIJLBAMQ.js +0 -9
  154. package/dist/model-cache-5KIYL5SL.js +0 -13
  155. package/dist/model-cache-OED3IM4R.cjs +0 -13
  156. package/dist/model-fetcher-HKGICACL.js +0 -8
  157. package/dist/model-fetcher-UR6WJOQP.cjs +0 -8
  158. package/dist/openai-JR2WEKOF.js +0 -10
  159. package/dist/openai-YBTOET4O.cjs +0 -10
  160. package/dist/openrouter-models-H56GHBHN.js +0 -15
  161. package/dist/openrouter-models-TWUFWZ5T.cjs +0 -15
  162. package/dist/openrouter-sync-5VMGN6C2.cjs +0 -11
  163. package/dist/openrouter-sync-ALEMF5IU.js +0 -11
  164. package/dist/product/index.cjs +0 -21
  165. package/dist/run/index.cjs +0 -48
  166. package/dist/session-manager-Q22BBMD3.js +0 -8
  167. package/dist/session-manager-XODQVL3C.cjs +0 -8
  168. package/dist/tool-summary-63DPIS7G.cjs +0 -31
  169. package/dist/tool-summary-NP5CDBKG.js +0 -31
  170. package/dist/updater-I7QBW4DP.cjs +0 -17
  171. package/dist/updater-NVME5S3Z.js +0 -17
@@ -1,307 +0,0 @@
1
- import {
2
- SessionError
3
- } from "./chunk-SFXHZSRF.js";
4
- import {
5
- init_esm_shims
6
- } from "./chunk-MD32R22I.js";
7
-
8
- // src/session/session-manager.ts
9
- init_esm_shims();
10
- import { mkdirSync as mkdirSync2, existsSync as existsSync2, readdirSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2, renameSync } from "fs";
11
- import { join } from "path";
12
- import { homedir } from "os";
13
- import { nanoid as nanoid2 } from "nanoid";
14
-
15
- // src/session/transcript.ts
16
- init_esm_shims();
17
- import { appendFileSync, readFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
18
- import { dirname } from "path";
19
- import { nanoid } from "nanoid";
20
- var Transcript = class _Transcript {
21
- events = [];
22
- filePath;
23
- currentTurn = 0;
24
- getFilePath() {
25
- return this.filePath;
26
- }
27
- constructor(filePath) {
28
- this.filePath = filePath;
29
- mkdirSync(dirname(filePath), { recursive: true });
30
- if (!existsSync(filePath)) {
31
- writeFileSync(filePath, "", "utf-8");
32
- }
33
- }
34
- append(type, data) {
35
- const event = {
36
- id: nanoid(12),
37
- type,
38
- timestamp: Date.now(),
39
- turnNumber: this.currentTurn,
40
- data
41
- };
42
- this.events.push(event);
43
- this.flush(event);
44
- return event;
45
- }
46
- appendMessage(role, content) {
47
- return this.append("message", { role, content });
48
- }
49
- appendToolUse(toolName, toolCallId, args) {
50
- return this.append("tool_use", { toolName, toolCallId, args });
51
- }
52
- appendToolResult(toolCallId, toolName, result, error) {
53
- return this.append("tool_result", { toolCallId, toolName, result, error });
54
- }
55
- appendTurnBoundary() {
56
- this.currentTurn++;
57
- return this.append("turn_boundary", { turnNumber: this.currentTurn });
58
- }
59
- appendSummary(summary, compactedRange) {
60
- return this.append("summary", {
61
- summary,
62
- trigger: "auto",
63
- compactedRange,
64
- preservedSegment: {
65
- headEventId: this.events[0]?.id,
66
- tailEventId: this.events[this.events.length - 1]?.id
67
- }
68
- });
69
- }
70
- appendError(error, details) {
71
- return this.append("error", { error, ...details });
72
- }
73
- /**
74
- * Derive Message[] from transcript events for sending to the LLM.
75
- * This is the critical boundary: the LLM never sees the event log directly.
76
- */
77
- toMessages() {
78
- const messages = [];
79
- for (const event of this.events) {
80
- switch (event.type) {
81
- case "message": {
82
- const { role, content } = event.data;
83
- messages.push({ role, content });
84
- break;
85
- }
86
- case "tool_use": {
87
- break;
88
- }
89
- case "tool_result": {
90
- const { toolCallId, result, error } = event.data;
91
- const lastMsg = messages[messages.length - 1];
92
- const block = {
93
- type: "tool_result",
94
- tool_use_id: toolCallId,
95
- content: error ? `Error: ${error}` : result ?? "(no output)"
96
- };
97
- if (lastMsg?.role === "user" && Array.isArray(lastMsg.content)) {
98
- lastMsg.content.push(block);
99
- } else {
100
- messages.push({ role: "user", content: [block] });
101
- }
102
- break;
103
- }
104
- case "summary": {
105
- const { summary } = event.data;
106
- messages.push({
107
- role: "user",
108
- content: `<system-reminder>Previous conversation was summarized:
109
- ${summary}</system-reminder>`
110
- });
111
- break;
112
- }
113
- }
114
- }
115
- return messages;
116
- }
117
- getEvents(type) {
118
- if (!type) return [...this.events];
119
- return this.events.filter((e) => e.type === type);
120
- }
121
- get turnNumber() {
122
- return this.currentTurn;
123
- }
124
- get eventCount() {
125
- return this.events.length;
126
- }
127
- flush(event) {
128
- try {
129
- appendFileSync(this.filePath, JSON.stringify(event) + "\n", "utf-8");
130
- } catch {
131
- }
132
- }
133
- /**
134
- * Repair tool_result pairing issues:
135
- * - Orphaned tool_results (no matching tool_use) get removed
136
- * - Missing tool_results (tool_use with no result) get synthetic error results
137
- */
138
- repairToolResultPairs() {
139
- const toolUseIds = /* @__PURE__ */ new Set();
140
- const toolResultIds = /* @__PURE__ */ new Set();
141
- for (const event of this.events) {
142
- if (event.type === "tool_use") {
143
- toolUseIds.add(event.data.toolCallId);
144
- } else if (event.type === "tool_result") {
145
- toolResultIds.add(event.data.toolCallId);
146
- }
147
- }
148
- for (const id of toolUseIds) {
149
- if (!toolResultIds.has(id)) {
150
- this.append("tool_result", {
151
- toolCallId: id,
152
- toolName: "unknown",
153
- error: "[Tool result missing due to interrupted session]"
154
- });
155
- }
156
- }
157
- this.events = this.events.filter((event) => {
158
- if (event.type === "tool_result") {
159
- const id = event.data.toolCallId;
160
- return toolUseIds.has(id);
161
- }
162
- return true;
163
- });
164
- }
165
- static loadFromFile(filePath) {
166
- const transcript = new _Transcript(filePath);
167
- if (!existsSync(filePath)) return transcript;
168
- const content = readFileSync(filePath, "utf-8");
169
- const lines = content.split("\n").filter((l) => l.trim());
170
- for (const line of lines) {
171
- try {
172
- const event = JSON.parse(line);
173
- transcript.events.push(event);
174
- if (event.type === "turn_boundary") {
175
- transcript.currentTurn = event.data.turnNumber ?? transcript.currentTurn + 1;
176
- }
177
- } catch {
178
- }
179
- }
180
- transcript.repairToolResultPairs();
181
- return transcript;
182
- }
183
- };
184
-
185
- // src/session/session-manager.ts
186
- var SessionManager = class {
187
- sessionsDir;
188
- constructor(storageDir) {
189
- this.sessionsDir = storageDir ?? join(homedir(), ".code-shell", "sessions");
190
- mkdirSync2(this.sessionsDir, { recursive: true });
191
- }
192
- create(cwd, model, provider) {
193
- const sessionId = nanoid2(16);
194
- const sessionDir = join(this.sessionsDir, sessionId);
195
- mkdirSync2(sessionDir, { recursive: true });
196
- const state = {
197
- sessionId,
198
- cwd,
199
- startedAt: Date.now(),
200
- model,
201
- provider,
202
- tokenUsage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
203
- turnCount: 0,
204
- invokedSkills: [],
205
- status: "active"
206
- };
207
- writeFileSync2(join(sessionDir, "state.json"), JSON.stringify(state, null, 2), "utf-8");
208
- const transcript = new Transcript(join(sessionDir, "transcript.jsonl"));
209
- transcript.append("session_meta", {
210
- sessionId,
211
- cwd,
212
- model,
213
- provider,
214
- startedAt: state.startedAt
215
- });
216
- return { state, transcript };
217
- }
218
- resume(sessionId) {
219
- const sessionDir = join(this.sessionsDir, sessionId);
220
- if (!existsSync2(sessionDir)) {
221
- throw new SessionError(`Session not found: ${sessionId}`);
222
- }
223
- const stateFile = join(sessionDir, "state.json");
224
- if (!existsSync2(stateFile)) {
225
- throw new SessionError(`Session state file not found: ${sessionId}`);
226
- }
227
- const state = JSON.parse(readFileSync2(stateFile, "utf-8"));
228
- const transcriptFile = join(sessionDir, "transcript.jsonl");
229
- const transcript = Transcript.loadFromFile(transcriptFile);
230
- state.status = "active";
231
- return { state, transcript };
232
- }
233
- saveState(state) {
234
- const sessionDir = join(this.sessionsDir, state.sessionId);
235
- mkdirSync2(sessionDir, { recursive: true });
236
- const target = join(sessionDir, "state.json");
237
- const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
238
- writeFileSync2(tmp, JSON.stringify(state, null, 2), "utf-8");
239
- renameSync(tmp, target);
240
- }
241
- /**
242
- * Fork a session from a specific point.
243
- * Creates a new session that shares events up to the given turn,
244
- * then diverges independently.
245
- */
246
- fork(sourceSessionId, forkAtTurn) {
247
- const source = this.resume(sourceSessionId);
248
- const events = source.transcript.getEvents();
249
- const forkTurn = forkAtTurn ?? source.state.turnCount;
250
- const newBundle = this.create(
251
- source.state.cwd,
252
- source.state.model,
253
- source.state.provider
254
- );
255
- newBundle.state.parentSessionId = sourceSessionId;
256
- for (const event of events) {
257
- if (event.type === "turn_boundary" && event.data.turnNumber > forkTurn) {
258
- break;
259
- }
260
- newBundle.transcript.append(event.type, event.data);
261
- }
262
- this.saveState(newBundle.state);
263
- return newBundle;
264
- }
265
- list(limit = 20) {
266
- if (!existsSync2(this.sessionsDir)) return [];
267
- const dirs = readdirSync(this.sessionsDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
268
- const sessions = [];
269
- for (const dir of dirs) {
270
- const stateFile = join(this.sessionsDir, dir, "state.json");
271
- if (!existsSync2(stateFile)) continue;
272
- try {
273
- const state = JSON.parse(readFileSync2(stateFile, "utf-8"));
274
- const transcriptFile = join(this.sessionsDir, dir, "transcript.jsonl");
275
- const preview = readFirstUserMessage(transcriptFile);
276
- sessions.push({ ...state, preview });
277
- } catch {
278
- }
279
- }
280
- return sessions.sort((a, b) => b.startedAt - a.startedAt).slice(0, limit);
281
- }
282
- };
283
- function readFirstUserMessage(transcriptFile) {
284
- if (!existsSync2(transcriptFile)) return void 0;
285
- const raw = readFileSync2(transcriptFile, "utf-8");
286
- for (const line of raw.split("\n")) {
287
- if (!line) continue;
288
- let event;
289
- try {
290
- event = JSON.parse(line);
291
- } catch {
292
- continue;
293
- }
294
- if (event.type !== "message") continue;
295
- if (event.data?.role !== "user") continue;
296
- const content = event.data.content;
297
- const text = typeof content === "string" ? content : Array.isArray(content) ? content.find((b) => b.type === "text")?.text ?? "" : "";
298
- if (!text.trim()) continue;
299
- return text.replace(/\s+/g, " ").trim();
300
- }
301
- return void 0;
302
- }
303
-
304
- export {
305
- Transcript,
306
- SessionManager
307
- };