@cjhyy/code-shell 0.1.0-alpha.1 → 0.1.0-alpha.3
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.
- package/README.md +8 -0
- package/dist/anthropic-P5VETAFI.cjs +10 -0
- package/dist/{anthropic-NENYS535.js → anthropic-W2GU3D76.js} +3 -2
- package/dist/arena/context/context-tools.d.ts +1 -1
- package/dist/arena/index.cjs +4 -4
- package/dist/arena/index.js +3 -3
- package/dist/arena/providers/index.d.ts +19 -3
- package/dist/arena/strategies/utils.d.ts +6 -1
- package/dist/arena/types.d.ts +10 -1
- package/dist/{arena-46QQ6BZQ.js → arena-ENHBHB2W.js} +5 -7
- package/dist/{arena-HZZZ2GJH.cjs → arena-HHDYYVHJ.cjs} +19 -21
- package/dist/{chunk-BE6IPRDM.js → chunk-2EUAE7AY.js} +1 -1
- package/dist/{chunk-WYKNZ54E.cjs → chunk-3CAZIWUA.cjs} +6 -6
- package/dist/{chunk-J5XW6UYL.js → chunk-5C5HIOML.js} +63 -4
- package/dist/chunk-75E4BBFC.js +224 -0
- package/dist/chunk-BF4LXLQV.cjs +4753 -0
- package/dist/{chunk-ZJV3YSY3.cjs → chunk-BUJ5KYCI.cjs} +53 -11
- package/dist/{chunk-BMH65OVB.cjs → chunk-C7C7ZZY4.cjs} +8 -8
- package/dist/{chunk-KO2FPF7G.js → chunk-F5BS3GUC.js} +20 -2
- package/dist/chunk-FPFTIKEJ.js +4753 -0
- package/dist/chunk-FV2ARONZ.cjs +224 -0
- package/dist/{chunk-DICG4AB7.cjs → chunk-GZBD6QRS.cjs} +42 -3
- package/dist/{chunk-FVP7XJGS.cjs → chunk-HOXQLX5R.cjs} +406 -196
- package/dist/{chunk-4PKZPFCD.js → chunk-I57ZD5IQ.js} +47 -14
- package/dist/{chunk-JUHRV2XF.js → chunk-ID6EJUHP.js} +1703 -438
- package/dist/chunk-JHNCK7JP.cjs +202 -0
- package/dist/{chunk-MOILS4WE.cjs → chunk-JHXNOB5G.cjs} +3 -3
- package/dist/{chunk-UK2SU23S.cjs → chunk-KOGV6PDQ.cjs} +20 -2
- package/dist/{chunk-VKGNCYRL.js → chunk-LMEKCQX4.js} +95 -13
- package/dist/{chunk-3EAEC566.cjs → chunk-M2QI5X3X.cjs} +51 -18
- package/dist/{chunk-YZ25SSWJ.js → chunk-M2SVOKC6.js} +46 -4
- package/dist/{chunk-NG73UR3L.cjs → chunk-OP57WUWQ.cjs} +23 -1
- package/dist/{chunk-ZXYDDJEJ.js → chunk-OUC2DFA7.js} +2 -2
- package/dist/{chunk-AP5F6VYE.js → chunk-REFCCVDM.js} +1 -1
- package/dist/{chunk-O6F2EF2Z.js → chunk-SCDKLTN3.js} +41 -2
- package/dist/{chunk-FECTK5KJ.js → chunk-SW3L7HIM.js} +1 -1
- package/dist/chunk-TDXBHD24.js +54 -0
- package/dist/chunk-VIPLU4RY.cjs +54 -0
- package/dist/{chunk-Q6BYFYGD.cjs → chunk-VWFET3MG.cjs} +1886 -621
- package/dist/{chunk-3EUDE77E.cjs → chunk-X2DNIMPC.cjs} +19 -19
- package/dist/{chunk-SQZHPD3S.js → chunk-Y7TSCDF6.js} +297 -87
- package/dist/{chunk-WHRTARDJ.cjs → chunk-YAFCN7ZW.cjs} +112 -30
- package/dist/{chunk-LRAY5IYC.cjs → chunk-YD7XTI7T.cjs} +65 -6
- package/dist/{chunk-S74VVJBF.js → chunk-ZLPJJZUW.js} +23 -1
- package/dist/chunk-ZRVPCXI7.js +202 -0
- package/dist/cli/commands/builtin/advanced-commands.d.ts +1 -1
- package/dist/cli/commands/builtin/extra-commands.d.ts +2 -2
- package/dist/cli/commands/builtin/more-commands.d.ts +1 -3
- package/dist/cli/commands/registry.d.ts +8 -0
- package/dist/cli/cost-tracker.d.ts +6 -0
- package/dist/cli/main.cjs +3556 -1995
- package/dist/cli/main.js +3658 -2097
- package/dist/cli/onboarding.d.ts +67 -14
- package/dist/client-base-TOVE25FA.js +9 -0
- package/dist/client-base-VDDIADAC.cjs +9 -0
- package/dist/compaction-D3KV2NWY.cjs +31 -0
- package/dist/{compaction-CCHWA4G6.js → compaction-YNWCEF7B.js} +1 -2
- package/dist/context/manager.d.ts +9 -0
- package/dist/data/openrouter-models.d.ts +35 -0
- package/dist/data/openrouter-sync.d.ts +16 -0
- package/dist/{devtools-KIY3LWQJ.js → devtools-IRQQPIRY.js} +1 -1
- package/dist/{devtools-LRP47DDV.cjs → devtools-WTC3NFNE.cjs} +1 -1
- package/dist/engine/engine.d.ts +29 -6
- package/dist/engine/turn-loop.d.ts +7 -0
- package/dist/engine/turn-state.d.ts +6 -0
- package/dist/index.cjs +19 -28
- package/dist/index.js +28 -37
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/model-pool.d.ts +4 -0
- package/dist/logging/logger.d.ts +69 -8
- package/dist/manager-FWLOVEEK.cjs +7 -0
- package/dist/manager-GEXJLOIS.js +7 -0
- package/dist/{mcp-manager-OKXHHWYR.js → mcp-manager-37GQLFGX.js} +2 -2
- package/dist/mcp-manager-U77NEXBY.cjs +8 -0
- package/dist/memory-ADGOWADP.cjs +9 -0
- package/dist/memory-EPFDBPII.js +9 -0
- package/dist/native-ts/yoga-layout/index.d.ts +2 -2
- package/dist/{openai-5HQGBL4L.js → openai-RXU5URYI.js} +3 -2
- package/dist/openai-SQW4H2K4.cjs +10 -0
- package/dist/openrouter-models-2FM3H4SQ.js +15 -0
- package/dist/openrouter-models-PLCWZZYE.cjs +15 -0
- package/dist/openrouter-sync-K2WK3A2A.cjs +11 -0
- package/dist/openrouter-sync-SO3AWEAM.js +11 -0
- package/dist/product/index.cjs +12 -16
- package/dist/product/index.js +11 -15
- package/dist/protocol/types.d.ts +11 -3
- package/dist/{ink → render}/hooks/use-input.d.ts +1 -1
- package/dist/run/index.cjs +12 -16
- package/dist/run/index.js +11 -15
- package/dist/session/memory.d.ts +23 -3
- package/dist/session/session-manager.d.ts +4 -1
- package/dist/{session-manager-UQKB564H.cjs → session-manager-HRSKENKB.cjs} +2 -2
- package/dist/{session-manager-JIIBCFTC.js → session-manager-NEKFEHF3.js} +1 -1
- package/dist/settings/manager.d.ts +9 -0
- package/dist/settings/schema.d.ts +48 -39
- package/dist/{tool-summary-J2ICNMWP.js → tool-summary-2RUFL5QK.js} +1 -1
- package/dist/{tool-summary-5P2GKRA4.cjs → tool-summary-RYNR4DDB.cjs} +2 -2
- package/dist/tool-system/builtin/agent.d.ts +3 -26
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +26 -0
- package/dist/tool-system/builtin/apply-patch/index.d.ts +19 -0
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +17 -0
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +18 -0
- package/dist/tool-system/builtin/apply-patch/types.d.ts +49 -0
- package/dist/tool-system/builtin/arena.d.ts +18 -5
- package/dist/tool-system/builtin/ask-user.d.ts +6 -6
- package/dist/tool-system/builtin/index.d.ts +11 -1
- package/dist/tool-system/builtin/tool-search.d.ts +2 -3
- package/dist/tool-system/context.d.ts +74 -0
- package/dist/tool-system/executor.d.ts +16 -0
- package/dist/tool-system/permission.d.ts +40 -5
- package/dist/tool-system/registry.d.ts +2 -0
- package/dist/types.d.ts +28 -1
- package/dist/ui/App.d.ts +1 -1
- package/dist/ui/components/AgentBlock.d.ts +1 -1
- package/dist/ui/components/AskUserPrompt.d.ts +7 -0
- package/dist/ui/components/MessageContent.d.ts +7 -3
- package/dist/ui/components/ModelManager.d.ts +35 -0
- package/dist/ui/components/ModelSelector.d.ts +10 -0
- package/dist/ui/components/OnboardingPrompt.d.ts +7 -0
- package/dist/ui/components/PermissionPrompt.d.ts +5 -2
- package/dist/ui/components/SessionPicker.d.ts +14 -0
- package/dist/ui/components/StatusLine.d.ts +4 -2
- package/dist/ui/components/ThemedBox.d.ts +1 -1
- package/dist/ui/components/ToolCall.d.ts +8 -1
- package/dist/ui/components/WelcomeTips.d.ts +5 -0
- package/dist/ui/onboarding-runner.d.ts +2 -0
- package/dist/ui/store.d.ts +1 -0
- package/dist/{updater-2N6745WR.cjs → updater-J7L7R6BY.cjs} +7 -5
- package/dist/{updater-PV7FKSUI.js → updater-LDBNYCAO.js} +7 -5
- package/dist/utils/debug.d.ts +17 -33
- package/package.json +7 -5
- package/scripts/check-node.cjs +21 -0
- package/dist/anthropic-XMTTVNSH.cjs +0 -9
- package/dist/bridge-4ZRXVWBN.js +0 -98
- package/dist/bridge-W476QDFH.cjs +0 -98
- package/dist/chunk-4RRUP4MM.js +0 -86
- package/dist/chunk-4SFPFHMG.js +0 -132
- package/dist/chunk-5LHVI777.cjs +0 -246
- package/dist/chunk-6ZIROYXX.js +0 -207
- package/dist/chunk-C7JBCO5V.js +0 -80
- package/dist/chunk-CSO5EOEP.cjs +0 -132
- package/dist/chunk-FGZGCFJX.cjs +0 -207
- package/dist/chunk-HD7MT5XU.cjs +0 -86
- package/dist/chunk-IMMTBZ33.cjs +0 -63
- package/dist/chunk-JT2WSQSR.cjs +0 -335
- package/dist/chunk-NZ4DQ72D.cjs +0 -664
- package/dist/chunk-OG4MIQJ6.js +0 -335
- package/dist/chunk-WRZJUQ5Z.js +0 -664
- package/dist/chunk-X4HAERTQ.js +0 -63
- package/dist/chunk-XHC2JMEC.cjs +0 -80
- package/dist/chunk-ZRSSGYA5.js +0 -246
- package/dist/compaction-44I55TLI.cjs +0 -32
- package/dist/coordinator-5HY7ALO2.js +0 -7
- package/dist/coordinator-INDLPVMF.cjs +0 -7
- package/dist/cost-tracker-IWYAUPXH.js +0 -9
- package/dist/cost-tracker-JXTJQQWE.cjs +0 -9
- package/dist/loader-DXFSUB4R.cjs +0 -91
- package/dist/loader-J5UID6CV.js +0 -91
- package/dist/manager-ETWDOCHN.cjs +0 -9
- package/dist/manager-HGMQNEJB.cjs +0 -11
- package/dist/manager-HUAQOORS.js +0 -9
- package/dist/manager-VJIZ2CQC.js +0 -11
- package/dist/mcp-manager-G4G2QASE.cjs +0 -8
- package/dist/memory-AP747G5H.js +0 -7
- package/dist/memory-BH3BYUN5.cjs +0 -7
- package/dist/onboarding-6WEPV7C2.js +0 -11
- package/dist/onboarding-QM5DY2TU.cjs +0 -11
- package/dist/openai-656VWUQW.cjs +0 -9
- package/dist/skills-63RBYQRX.js +0 -13
- package/dist/skills-V3BPLW3D.cjs +0 -13
- package/dist/token-counter-CHAXW5O7.cjs +0 -13
- package/dist/token-counter-DSOZGZ5Q.js +0 -13
- package/dist/utils/log.d.ts +0 -56
- package/dist/voice-KTZ7PAGO.js +0 -80
- package/dist/voice-KZE25GKB.cjs +0 -80
- /package/dist/{ink → render}/Ansi.d.ts +0 -0
- /package/dist/{ink → render}/bidi.d.ts +0 -0
- /package/dist/{ink → render}/clearTerminal.d.ts +0 -0
- /package/dist/{ink → render}/colorize.d.ts +0 -0
- /package/dist/{ink → render}/components/AlternateScreen.d.ts +0 -0
- /package/dist/{ink → render}/components/App.d.ts +0 -0
- /package/dist/{ink → render}/components/AppContext.d.ts +0 -0
- /package/dist/{ink → render}/components/Box.d.ts +0 -0
- /package/dist/{ink → render}/components/Button.d.ts +0 -0
- /package/dist/{ink → render}/components/ClockContext.d.ts +0 -0
- /package/dist/{ink → render}/components/CursorDeclarationContext.d.ts +0 -0
- /package/dist/{ink → render}/components/ErrorOverview.d.ts +0 -0
- /package/dist/{ink → render}/components/Link.d.ts +0 -0
- /package/dist/{ink → render}/components/Newline.d.ts +0 -0
- /package/dist/{ink → render}/components/NoSelect.d.ts +0 -0
- /package/dist/{ink → render}/components/RawAnsi.d.ts +0 -0
- /package/dist/{ink → render}/components/ScrollBox.d.ts +0 -0
- /package/dist/{ink → render}/components/Spacer.d.ts +0 -0
- /package/dist/{ink → render}/components/StdinContext.d.ts +0 -0
- /package/dist/{ink → render}/components/TerminalFocusContext.d.ts +0 -0
- /package/dist/{ink → render}/components/TerminalSizeContext.d.ts +0 -0
- /package/dist/{ink → render}/components/Text.d.ts +0 -0
- /package/dist/{ink → render}/constants.d.ts +0 -0
- /package/dist/{ink → render}/cursor.d.ts +0 -0
- /package/dist/{ink → render}/devtools.d.ts +0 -0
- /package/dist/{ink → render}/dom.d.ts +0 -0
- /package/dist/{ink → render}/events/click-event.d.ts +0 -0
- /package/dist/{ink → render}/events/dispatcher.d.ts +0 -0
- /package/dist/{ink → render}/events/emitter.d.ts +0 -0
- /package/dist/{ink → render}/events/event-handlers.d.ts +0 -0
- /package/dist/{ink → render}/events/event.d.ts +0 -0
- /package/dist/{ink → render}/events/focus-event.d.ts +0 -0
- /package/dist/{ink → render}/events/input-event.d.ts +0 -0
- /package/dist/{ink → render}/events/keyboard-event.d.ts +0 -0
- /package/dist/{ink → render}/events/paste-event.d.ts +0 -0
- /package/dist/{ink → render}/events/resize-event.d.ts +0 -0
- /package/dist/{ink → render}/events/terminal-event.d.ts +0 -0
- /package/dist/{ink → render}/events/terminal-focus-event.d.ts +0 -0
- /package/dist/{ink → render}/focus.d.ts +0 -0
- /package/dist/{ink → render}/frame.d.ts +0 -0
- /package/dist/{ink → render}/get-max-width.d.ts +0 -0
- /package/dist/{ink → render}/hit-test.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-animation-frame.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-app.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-declared-cursor.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-interval.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-search-highlight.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-selection.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-stdin.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-tab-status.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-terminal-focus.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-terminal-title.d.ts +0 -0
- /package/dist/{ink → render}/hooks/use-terminal-viewport.d.ts +0 -0
- /package/dist/{ink → render}/index.d.ts +0 -0
- /package/dist/{ink → render}/ink.d.ts +0 -0
- /package/dist/{ink → render}/instances.d.ts +0 -0
- /package/dist/{ink → render}/layout/engine.d.ts +0 -0
- /package/dist/{ink → render}/layout/geometry.d.ts +0 -0
- /package/dist/{ink → render}/layout/node.d.ts +0 -0
- /package/dist/{ink → render}/layout/yoga.d.ts +0 -0
- /package/dist/{ink → render}/line-width-cache.d.ts +0 -0
- /package/dist/{ink → render}/log-update.d.ts +0 -0
- /package/dist/{ink → render}/measure-element.d.ts +0 -0
- /package/dist/{ink → render}/measure-text.d.ts +0 -0
- /package/dist/{ink → render}/node-cache.d.ts +0 -0
- /package/dist/{ink → render}/optimizer.d.ts +0 -0
- /package/dist/{ink → render}/output.d.ts +0 -0
- /package/dist/{ink → render}/parse-keypress.d.ts +0 -0
- /package/dist/{ink → render}/reconciler.d.ts +0 -0
- /package/dist/{ink → render}/render-border.d.ts +0 -0
- /package/dist/{ink → render}/render-node-to-output.d.ts +0 -0
- /package/dist/{ink → render}/render-to-screen.d.ts +0 -0
- /package/dist/{ink → render}/renderer.d.ts +0 -0
- /package/dist/{ink → render}/root.d.ts +0 -0
- /package/dist/{ink → render}/screen.d.ts +0 -0
- /package/dist/{ink → render}/searchHighlight.d.ts +0 -0
- /package/dist/{ink → render}/selection.d.ts +0 -0
- /package/dist/{ink → render}/squash-text-nodes.d.ts +0 -0
- /package/dist/{ink → render}/stringWidth.d.ts +0 -0
- /package/dist/{ink → render}/styles.d.ts +0 -0
- /package/dist/{ink → render}/supports-hyperlinks.d.ts +0 -0
- /package/dist/{ink → render}/tabstops.d.ts +0 -0
- /package/dist/{ink → render}/terminal-focus-state.d.ts +0 -0
- /package/dist/{ink → render}/terminal-querier.d.ts +0 -0
- /package/dist/{ink → render}/terminal.d.ts +0 -0
- /package/dist/{ink → render}/termio/ansi.d.ts +0 -0
- /package/dist/{ink → render}/termio/csi.d.ts +0 -0
- /package/dist/{ink → render}/termio/dec.d.ts +0 -0
- /package/dist/{ink → render}/termio/esc.d.ts +0 -0
- /package/dist/{ink → render}/termio/osc.d.ts +0 -0
- /package/dist/{ink → render}/termio/parser.d.ts +0 -0
- /package/dist/{ink → render}/termio/sgr.d.ts +0 -0
- /package/dist/{ink → render}/termio/tokenize.d.ts +0 -0
- /package/dist/{ink → render}/termio/types.d.ts +0 -0
- /package/dist/{ink → render}/termio.d.ts +0 -0
- /package/dist/{ink → render}/useTerminalNotification.d.ts +0 -0
- /package/dist/{ink → render}/warn.d.ts +0 -0
- /package/dist/{ink → render}/widest-line.d.ts +0 -0
- /package/dist/{ink → render}/wrap-text.d.ts +0 -0
- /package/dist/{ink → render}/wrapAnsi.d.ts +0 -0
|
@@ -5,14 +5,29 @@ import type { ToolCall, ToolResult, Message } from "../types.js";
|
|
|
5
5
|
import type { HookRegistry } from "../hooks/registry.js";
|
|
6
6
|
import { ToolRegistry } from "./registry.js";
|
|
7
7
|
import { PermissionClassifier } from "./permission.js";
|
|
8
|
+
import { logger as rootLogger } from "../logging/logger.js";
|
|
9
|
+
import type { ToolContext } from "./context.js";
|
|
10
|
+
type Logger = typeof rootLogger;
|
|
8
11
|
export declare class ToolExecutor {
|
|
9
12
|
private readonly registry;
|
|
10
13
|
private readonly permission;
|
|
11
14
|
private readonly hooks;
|
|
12
15
|
private signal?;
|
|
16
|
+
/** Per-Engine ToolContext injected for every tool call. */
|
|
17
|
+
private toolCtx?;
|
|
18
|
+
/**
|
|
19
|
+
* Turn-scoped logger set by TurnLoop at the top of each iteration.
|
|
20
|
+
* Falls back to the root logger so executor calls outside the turn loop
|
|
21
|
+
* (tests, ad-hoc tool runs) still write log lines, just without turn tags.
|
|
22
|
+
*/
|
|
23
|
+
private log;
|
|
13
24
|
constructor(registry: ToolRegistry, permission: PermissionClassifier, hooks: HookRegistry);
|
|
14
25
|
/** Set the abort signal for cascading cancellation. */
|
|
15
26
|
setSignal(signal?: AbortSignal): void;
|
|
27
|
+
/** Set the per-Engine ToolContext (askUser, llmConfig, modelPool, etc.). */
|
|
28
|
+
setContext(ctx: ToolContext | undefined): void;
|
|
29
|
+
/** Inject a turn-scoped logger so tool-execution lines carry turn/turnId. */
|
|
30
|
+
setLogger(log: Logger): void;
|
|
16
31
|
/** Check if a tool is safe for concurrent execution (read-only). */
|
|
17
32
|
isConcurrencySafe(toolName: string): boolean;
|
|
18
33
|
executeSingle(call: ToolCall): Promise<ToolResult>;
|
|
@@ -23,3 +38,4 @@ export declare class ToolExecutor {
|
|
|
23
38
|
*/
|
|
24
39
|
resultsToMessages(toolCalls: ToolCall[], results: ToolResult[]): Message[];
|
|
25
40
|
}
|
|
41
|
+
export {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Permission system — classifier + approval backend.
|
|
3
3
|
*/
|
|
4
4
|
import type { PermissionDecision, PermissionMode, PermissionRule, ApprovalRequest, ApprovalResult } from "../types.js";
|
|
5
|
+
import { logger as rootPermLogger } from "../logging/logger.js";
|
|
5
6
|
export interface ApprovalBackend {
|
|
6
7
|
requestApproval(request: ApprovalRequest): Promise<ApprovalResult>;
|
|
7
8
|
}
|
|
@@ -22,14 +23,33 @@ export declare class AutoApprovalBackend implements ApprovalBackend {
|
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* Interactive approval backend — prompts the user via a callback.
|
|
25
|
-
*
|
|
26
|
+
*
|
|
27
|
+
* Stores "always allow" decisions at two scopes:
|
|
28
|
+
* - session: in-memory map, lost when the process exits
|
|
29
|
+
* - project: persisted to <cwd>/.code-shell/settings.local.json so the
|
|
30
|
+
* same project remembers the rule across REPL restarts
|
|
31
|
+
*
|
|
32
|
+
* The classifier reads project rules from settings on session start (see
|
|
33
|
+
* Engine.buildPermissionConfig), so persisted rules become "auto-allow"
|
|
34
|
+
* the next time the user opens the project.
|
|
26
35
|
*/
|
|
27
36
|
export declare class InteractiveApprovalBackend implements ApprovalBackend {
|
|
28
37
|
private sessionRules;
|
|
29
38
|
private promptFn;
|
|
39
|
+
private cwd;
|
|
40
|
+
private savedProjectRules;
|
|
41
|
+
private onProjectRules;
|
|
30
42
|
setPromptFn(fn: (request: ApprovalRequest) => Promise<ApprovalResult>): void;
|
|
43
|
+
/** Inject the project root so persistence writes to the right settings file. */
|
|
44
|
+
setCwd(cwd: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Inject a callback fired when the user approves "for this project". The
|
|
47
|
+
* callback receives the *full* accumulated list of project rules saved in
|
|
48
|
+
* this session, so the classifier can be reconfigured without losing
|
|
49
|
+
* earlier approvals.
|
|
50
|
+
*/
|
|
51
|
+
setOnProjectRules(fn: (rules: PermissionRule[]) => void): void;
|
|
31
52
|
requestApproval(req: ApprovalRequest): Promise<ApprovalResult>;
|
|
32
|
-
private ruleKeyFromArgs;
|
|
33
53
|
}
|
|
34
54
|
export declare function getInteractiveApprovalBackend(): InteractiveApprovalBackend;
|
|
35
55
|
export declare function setInteractiveApprovalFn(fn: (request: ApprovalRequest) => Promise<ApprovalResult>): void;
|
|
@@ -52,11 +72,21 @@ export declare class DenialTracker {
|
|
|
52
72
|
export declare function setRuntimeBypass(enabled: boolean): void;
|
|
53
73
|
export declare function isRuntimeBypass(): boolean;
|
|
54
74
|
export declare class PermissionClassifier {
|
|
55
|
-
private
|
|
56
|
-
private
|
|
57
|
-
private
|
|
75
|
+
private rules;
|
|
76
|
+
private defaultMode;
|
|
77
|
+
private approvalBackend;
|
|
58
78
|
private denialTracker;
|
|
79
|
+
/**
|
|
80
|
+
* Turn-scoped logger so permission events (ask/decision/auto-deny) are
|
|
81
|
+
* tagged with the current turn/turnId. Falls back to the root logger so
|
|
82
|
+
* tests and ad-hoc usages still write log lines.
|
|
83
|
+
*/
|
|
84
|
+
private log;
|
|
59
85
|
constructor(rules: PermissionRule[], defaultMode?: PermissionMode, approvalBackend?: ApprovalBackend);
|
|
86
|
+
setLogger(log: typeof rootPermLogger): void;
|
|
87
|
+
/** Replace mode + backend in place so live tool execution sees the change. */
|
|
88
|
+
reconfigure(mode: PermissionMode, approvalBackend: ApprovalBackend, rules?: PermissionRule[]): void;
|
|
89
|
+
getMode(): PermissionMode;
|
|
60
90
|
classify(toolName: string, args: Record<string, unknown>): PermissionDecision;
|
|
61
91
|
handleAsk(toolName: string, args: Record<string, unknown>): Promise<boolean>;
|
|
62
92
|
/** Get denial warning message if the model keeps getting denied. */
|
|
@@ -64,6 +94,11 @@ export declare class PermissionClassifier {
|
|
|
64
94
|
private matchesRule;
|
|
65
95
|
private isDangerousCommand;
|
|
66
96
|
private assessRisk;
|
|
97
|
+
/**
|
|
98
|
+
* Short, human-friendly subtitle. The UI shows this under the tool title;
|
|
99
|
+
* full args (command bodies, diffs, etc.) come from the args field, so this
|
|
100
|
+
* stays compact — no truncation here, just a label.
|
|
101
|
+
*/
|
|
67
102
|
private describeToolCall;
|
|
68
103
|
}
|
|
69
104
|
export {};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { RegisteredTool, ToolDefinition, ToolResult } from "../types.js";
|
|
5
5
|
import { type BuiltinToolFn } from "./builtin/index.js";
|
|
6
|
+
import type { ToolContext } from "./context.js";
|
|
6
7
|
/**
|
|
7
8
|
* Default execution timeout for any tool that does not declare its own
|
|
8
9
|
* timeoutMs at registration time. Tools that need to run longer (Agent,
|
|
@@ -24,6 +25,7 @@ export declare class ToolRegistry {
|
|
|
24
25
|
executeTool(name: string, args: Record<string, unknown>, options?: {
|
|
25
26
|
timeoutMs?: number;
|
|
26
27
|
signal?: AbortSignal;
|
|
28
|
+
ctx?: ToolContext;
|
|
27
29
|
}): Promise<ToolResult>;
|
|
28
30
|
listTools(): string[];
|
|
29
31
|
listToolsDetailed(): RegisteredTool[];
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Core type definitions for the code-shell orchestration framework.
|
|
3
3
|
*/
|
|
4
4
|
export interface ContentBlock {
|
|
5
|
-
type: "text" | "tool_use" | "tool_result" | "image";
|
|
5
|
+
type: "text" | "tool_use" | "tool_result" | "image" | "reasoning";
|
|
6
6
|
text?: string;
|
|
7
7
|
id?: string;
|
|
8
8
|
name?: string;
|
|
@@ -14,6 +14,7 @@ export interface ContentBlock {
|
|
|
14
14
|
media_type: string;
|
|
15
15
|
data: string;
|
|
16
16
|
};
|
|
17
|
+
reasoningContent?: string;
|
|
17
18
|
}
|
|
18
19
|
export interface Message {
|
|
19
20
|
role: "system" | "user" | "assistant" | "tool";
|
|
@@ -124,14 +125,25 @@ export interface ApprovalRequest {
|
|
|
124
125
|
description: string;
|
|
125
126
|
riskLevel: "low" | "medium" | "high";
|
|
126
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Scope of an "always allow" decision.
|
|
130
|
+
* "once" — this single call only (default when always not set)
|
|
131
|
+
* "session" — remembered for the rest of the REPL session (in-memory)
|
|
132
|
+
* "project" — persisted to <cwd>/.code-shell/settings.local.json so it
|
|
133
|
+
* survives restart for the current project. Not committed.
|
|
134
|
+
*/
|
|
135
|
+
export type ApprovalScope = "once" | "session" | "project";
|
|
127
136
|
export type ApprovalResult = {
|
|
128
137
|
approved: true;
|
|
129
138
|
permanent?: boolean;
|
|
130
139
|
always?: boolean;
|
|
140
|
+
scope?: ApprovalScope;
|
|
141
|
+
/** Used by AskUserQuestion to carry the user's free-text answer. */ answer?: string;
|
|
131
142
|
} | {
|
|
132
143
|
approved: false;
|
|
133
144
|
reason?: string;
|
|
134
145
|
always?: boolean;
|
|
146
|
+
scope?: ApprovalScope;
|
|
135
147
|
};
|
|
136
148
|
export type TurnPhase = "pre_check" | "model_call" | "post_check" | "tool_exec" | "context_mgmt" | "hook_notify" | "complete" | "error";
|
|
137
149
|
export interface TurnResult {
|
|
@@ -148,6 +160,9 @@ export interface TaskInfo {
|
|
|
148
160
|
status: "pending" | "in_progress" | "completed" | "stopped";
|
|
149
161
|
}
|
|
150
162
|
export type StreamEvent = {
|
|
163
|
+
type: "session_started";
|
|
164
|
+
sessionId: string;
|
|
165
|
+
} | {
|
|
151
166
|
type: "stream_request_start";
|
|
152
167
|
turnNumber: number;
|
|
153
168
|
agentId?: string;
|
|
@@ -159,6 +174,11 @@ export type StreamEvent = {
|
|
|
159
174
|
type: "tool_use_start";
|
|
160
175
|
toolCall: ToolCall;
|
|
161
176
|
agentId?: string;
|
|
177
|
+
} | {
|
|
178
|
+
type: "tool_use_args_delta";
|
|
179
|
+
toolCallId: string;
|
|
180
|
+
args: Record<string, unknown>;
|
|
181
|
+
agentId?: string;
|
|
162
182
|
} | {
|
|
163
183
|
type: "tool_result";
|
|
164
184
|
result: ToolResult;
|
|
@@ -197,6 +217,12 @@ export type StreamEvent = {
|
|
|
197
217
|
} | {
|
|
198
218
|
type: "tool_summary";
|
|
199
219
|
summary: string;
|
|
220
|
+
} | {
|
|
221
|
+
type: "context_compact";
|
|
222
|
+
strategy: "summary" | "window" | "snip" | "emergency";
|
|
223
|
+
before: number;
|
|
224
|
+
after: number;
|
|
225
|
+
agentId?: string;
|
|
200
226
|
};
|
|
201
227
|
export type StreamCallback = (event: StreamEvent) => void | Promise<void>;
|
|
202
228
|
export interface LLMConfig {
|
|
@@ -216,6 +242,7 @@ export interface LLMResponse {
|
|
|
216
242
|
toolCalls: ToolCall[];
|
|
217
243
|
usage?: TokenUsage;
|
|
218
244
|
stopReason?: string;
|
|
245
|
+
reasoningContent?: string;
|
|
219
246
|
}
|
|
220
247
|
export interface LLMStreamChunk {
|
|
221
248
|
type: "text" | "tool_use_start" | "tool_use_delta" | "tool_use_end" | "stop";
|
package/dist/ui/App.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ interface AppProps {
|
|
|
10
10
|
/** Pre-fill the input box without submitting (--prefill flag). */
|
|
11
11
|
prefill?: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function App({ client, model: initialModel, effort, maxTurns, cwd, maxContextTokens, sessionId: initialSessionId, prefill }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function App({ client, model: initialModel, effort, maxTurns, cwd, maxContextTokens, sessionId: initialSessionId, prefill, }: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
export {};
|
|
@@ -25,7 +25,7 @@ export declare function AgentBlockEnd({ description, error, isLast }: AgentBlock
|
|
|
25
25
|
/**
|
|
26
26
|
* Tree line prefix for nested content under an agent.
|
|
27
27
|
*/
|
|
28
|
-
export declare function NestedPrefix({ children, isLast }: {
|
|
28
|
+
export declare function NestedPrefix({ children, isLast, }: {
|
|
29
29
|
children: React.ReactNode;
|
|
30
30
|
isLast?: boolean;
|
|
31
31
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
interface MessageContentProps {
|
|
2
2
|
text: string;
|
|
3
3
|
streaming?: boolean;
|
|
4
|
+
/** When rendered inside an agent block, suppress the leading message gap. */
|
|
5
|
+
nested?: boolean;
|
|
4
6
|
}
|
|
5
|
-
export declare function MessageContent({ text, streaming }: MessageContentProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export declare function MessageContent({ text, streaming, nested }: MessageContentProps): import("react/jsx-runtime").JSX.Element | null;
|
|
6
8
|
interface UserMessageProps {
|
|
7
9
|
text: string;
|
|
8
10
|
}
|
|
9
11
|
export declare function UserMessage({ text }: UserMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
interface ErrorMessageProps {
|
|
11
13
|
error: string;
|
|
14
|
+
nested?: boolean;
|
|
12
15
|
}
|
|
13
|
-
export declare function ErrorMessage({ error }: ErrorMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function ErrorMessage({ error, nested }: ErrorMessageProps): import("react/jsx-runtime").JSX.Element;
|
|
14
17
|
export declare function RateLimitMessage({ text }: {
|
|
15
18
|
text: string;
|
|
16
19
|
}): import("react/jsx-runtime").JSX.Element;
|
|
17
20
|
export declare function ContextLimitMessage(): import("react/jsx-runtime").JSX.Element;
|
|
18
|
-
export declare function ThinkingMessage({ content, collapsed }: {
|
|
21
|
+
export declare function ThinkingMessage({ content, collapsed, nested, }: {
|
|
19
22
|
content?: string;
|
|
20
23
|
collapsed?: boolean;
|
|
24
|
+
nested?: boolean;
|
|
21
25
|
}): import("react/jsx-runtime").JSX.Element;
|
|
22
26
|
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ProtocolModelEntry } from "../../protocol/types.js";
|
|
2
|
+
interface SnapshotInfo {
|
|
3
|
+
count: number;
|
|
4
|
+
fetchedAt: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Settings stores arena.participants as Array<string | object>. The panel
|
|
8
|
+
* surfaces strings (pool keys); object-form entries are shown read-only so
|
|
9
|
+
* we don't clobber a user's hand-edited config.
|
|
10
|
+
*/
|
|
11
|
+
export type ArenaParticipantEntry = {
|
|
12
|
+
kind: "key";
|
|
13
|
+
value: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: "object";
|
|
16
|
+
label: string;
|
|
17
|
+
};
|
|
18
|
+
interface ModelManagerProps {
|
|
19
|
+
entries: ProtocolModelEntry[];
|
|
20
|
+
snapshot: SnapshotInfo;
|
|
21
|
+
arenaParticipants: ArenaParticipantEntry[];
|
|
22
|
+
/** Activate a model. */
|
|
23
|
+
onSwitch: (key: string) => Promise<void>;
|
|
24
|
+
/** Trigger an OpenRouter snapshot refresh. */
|
|
25
|
+
onSync: () => Promise<{
|
|
26
|
+
ok: boolean;
|
|
27
|
+
count: number;
|
|
28
|
+
error?: string;
|
|
29
|
+
}>;
|
|
30
|
+
/** Persist updated participant list (string[]) to settings. */
|
|
31
|
+
onSaveArena: (participants: string[]) => Promise<void>;
|
|
32
|
+
onClose: () => void;
|
|
33
|
+
}
|
|
34
|
+
export declare function ModelManager({ entries, snapshot, arenaParticipants, onSwitch, onSync, onSaveArena, onClose, }: ModelManagerProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProtocolModelEntry } from "../../protocol/types.js";
|
|
2
|
+
/** Re-export under the UI name for convenience. */
|
|
3
|
+
export type ModelEntry = ProtocolModelEntry;
|
|
4
|
+
interface ModelSelectorProps {
|
|
5
|
+
entries: ModelEntry[];
|
|
6
|
+
onSelect: (key: string) => void;
|
|
7
|
+
onCancel: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function ModelSelector({ entries, onSelect, onCancel }: ModelSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type OnboardingResult } from "../../cli/onboarding.js";
|
|
2
|
+
interface OnboardingPromptProps {
|
|
3
|
+
onComplete: (result: OnboardingResult) => void;
|
|
4
|
+
onCancel: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function OnboardingPrompt({ onComplete, onCancel }: OnboardingPromptProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { ApprovalScope } from "../../types.js";
|
|
1
2
|
interface PermissionPromptProps {
|
|
2
3
|
toolName: string;
|
|
3
4
|
description: string;
|
|
4
5
|
riskLevel: string;
|
|
5
|
-
|
|
6
|
+
args: Record<string, unknown>;
|
|
7
|
+
cwd: string;
|
|
8
|
+
onDecision: (approved: boolean, scope: ApprovalScope) => void;
|
|
6
9
|
}
|
|
7
|
-
export declare function PermissionPrompt({ toolName, description, riskLevel, onDecision }: PermissionPromptProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function PermissionPrompt({ toolName, description, riskLevel, args, cwd, onDecision, }: PermissionPromptProps): import("react/jsx-runtime").JSX.Element;
|
|
8
11
|
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SessionPickerEntry {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
startedAt: number;
|
|
4
|
+
turnCount: number;
|
|
5
|
+
preview?: string;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
}
|
|
8
|
+
interface SessionPickerProps {
|
|
9
|
+
entries: SessionPickerEntry[];
|
|
10
|
+
onSelect: (sessionId: string) => void;
|
|
11
|
+
onCancel: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function SessionPicker({ entries, onSelect, onCancel }: SessionPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -12,11 +12,13 @@ interface StatusLineProps {
|
|
|
12
12
|
tokens: number;
|
|
13
13
|
cost: number;
|
|
14
14
|
sessionId?: string;
|
|
15
|
-
|
|
15
|
+
/** Last known prompt tokens from completed turn. Live streaming is added on top. */
|
|
16
|
+
baseContextTokens?: number;
|
|
17
|
+
maxContextTokens?: number;
|
|
16
18
|
gitBranch?: string;
|
|
17
19
|
isRunning?: boolean;
|
|
18
20
|
streamingCharsRef?: MutableRefObject<number>;
|
|
19
21
|
runStartRef?: MutableRefObject<number>;
|
|
20
22
|
}
|
|
21
|
-
export declare function StatusLine({ model, effort, tokens, cost, sessionId,
|
|
23
|
+
export declare function StatusLine({ model, effort, tokens, cost, sessionId, baseContextTokens, maxContextTokens, gitBranch, isRunning, streamingCharsRef, runStartRef, }: StatusLineProps): import("react/jsx-runtime").JSX.Element;
|
|
22
24
|
export {};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* version uses the lightweight ui/theme.ts context.
|
|
8
8
|
*/
|
|
9
9
|
import React from "react";
|
|
10
|
-
import { type BoxProps } from "../../
|
|
10
|
+
import { type BoxProps } from "../../render/index.js";
|
|
11
11
|
import type { Theme } from "../../utils/theme.js";
|
|
12
12
|
type ColorProp = keyof Theme | string;
|
|
13
13
|
export interface ThemedBoxProps extends Omit<BoxProps, "borderColor" | "backgroundColor"> {
|
|
@@ -16,6 +16,13 @@ interface ToolCallResultProps {
|
|
|
16
16
|
nested?: boolean;
|
|
17
17
|
/** When true, show full output instead of collapsed preview. */
|
|
18
18
|
expanded?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* When true, render as a single dim line — used for transient
|
|
21
|
+
* "this attempt failed and was retried" cases (e.g. Arena's
|
|
22
|
+
* fail-fast endpoint check) so the feed isn't swamped with scary
|
|
23
|
+
* red error cards for what was just a parameter fix-up.
|
|
24
|
+
*/
|
|
25
|
+
compact?: boolean;
|
|
19
26
|
}
|
|
20
|
-
export declare function ToolCallResult({ toolName, result, error, nested, expanded: forceExpand }: ToolCallResultProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function ToolCallResult({ toolName, result, error, nested, expanded: forceExpand, compact, }: ToolCallResultProps): import("react/jsx-runtime").JSX.Element;
|
|
21
28
|
export {};
|
package/dist/ui/store.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ var require_package = _chunkIJSHQGMPcjs.__commonJS.call(void 0, {
|
|
|
8
8
|
"package.json"(exports, module) {
|
|
9
9
|
module.exports = {
|
|
10
10
|
name: "@cjhyy/code-shell",
|
|
11
|
-
version: "0.1.0-alpha.
|
|
11
|
+
version: "0.1.0-alpha.3",
|
|
12
12
|
description: "Code Shell \u2014 general-purpose agent orchestration framework with a terminal coding preset",
|
|
13
13
|
type: "module",
|
|
14
14
|
main: "./dist/index.cjs",
|
|
@@ -52,9 +52,11 @@ var require_package = _chunkIJSHQGMPcjs.__commonJS.call(void 0, {
|
|
|
52
52
|
access: "public"
|
|
53
53
|
},
|
|
54
54
|
scripts: {
|
|
55
|
-
|
|
55
|
+
preinstall: "node scripts/check-node.cjs",
|
|
56
|
+
build: "bun run sync-models && bun run tsup && bun run build:dts",
|
|
56
57
|
"build:dts": "tsc --emitDeclarationOnly --declaration --outDir dist || true",
|
|
57
|
-
|
|
58
|
+
"sync-models": "bun run scripts/sync-models.ts",
|
|
59
|
+
dev: "CODE_SHELL_DEV=1 bun run src/cli/main.ts",
|
|
58
60
|
test: "bun test",
|
|
59
61
|
"test:watch": "bun test --watch",
|
|
60
62
|
lint: "eslint src/",
|
|
@@ -63,10 +65,11 @@ var require_package = _chunkIJSHQGMPcjs.__commonJS.call(void 0, {
|
|
|
63
65
|
prepublishOnly: "bun run build"
|
|
64
66
|
},
|
|
65
67
|
engines: {
|
|
66
|
-
node: ">=20"
|
|
68
|
+
node: ">=20.10"
|
|
67
69
|
},
|
|
68
70
|
files: [
|
|
69
71
|
"dist",
|
|
72
|
+
"scripts/check-node.cjs",
|
|
70
73
|
"README.md",
|
|
71
74
|
"LICENSE",
|
|
72
75
|
"CHANGELOG.md"
|
|
@@ -100,7 +103,6 @@ var require_package = _chunkIJSHQGMPcjs.__commonJS.call(void 0, {
|
|
|
100
103
|
"get-east-asian-width": "^1.5.0",
|
|
101
104
|
glob: "^11.0.0",
|
|
102
105
|
"indent-string": "^5.0.0",
|
|
103
|
-
ink: "^6.8.0",
|
|
104
106
|
"lodash-es": "^4.17.23",
|
|
105
107
|
marked: "^17.0.5",
|
|
106
108
|
"marked-terminal": "^7.3.0",
|
|
@@ -8,7 +8,7 @@ var require_package = __commonJS({
|
|
|
8
8
|
"package.json"(exports, module) {
|
|
9
9
|
module.exports = {
|
|
10
10
|
name: "@cjhyy/code-shell",
|
|
11
|
-
version: "0.1.0-alpha.
|
|
11
|
+
version: "0.1.0-alpha.3",
|
|
12
12
|
description: "Code Shell \u2014 general-purpose agent orchestration framework with a terminal coding preset",
|
|
13
13
|
type: "module",
|
|
14
14
|
main: "./dist/index.cjs",
|
|
@@ -52,9 +52,11 @@ var require_package = __commonJS({
|
|
|
52
52
|
access: "public"
|
|
53
53
|
},
|
|
54
54
|
scripts: {
|
|
55
|
-
|
|
55
|
+
preinstall: "node scripts/check-node.cjs",
|
|
56
|
+
build: "bun run sync-models && bun run tsup && bun run build:dts",
|
|
56
57
|
"build:dts": "tsc --emitDeclarationOnly --declaration --outDir dist || true",
|
|
57
|
-
|
|
58
|
+
"sync-models": "bun run scripts/sync-models.ts",
|
|
59
|
+
dev: "CODE_SHELL_DEV=1 bun run src/cli/main.ts",
|
|
58
60
|
test: "bun test",
|
|
59
61
|
"test:watch": "bun test --watch",
|
|
60
62
|
lint: "eslint src/",
|
|
@@ -63,10 +65,11 @@ var require_package = __commonJS({
|
|
|
63
65
|
prepublishOnly: "bun run build"
|
|
64
66
|
},
|
|
65
67
|
engines: {
|
|
66
|
-
node: ">=20"
|
|
68
|
+
node: ">=20.10"
|
|
67
69
|
},
|
|
68
70
|
files: [
|
|
69
71
|
"dist",
|
|
72
|
+
"scripts/check-node.cjs",
|
|
70
73
|
"README.md",
|
|
71
74
|
"LICENSE",
|
|
72
75
|
"CHANGELOG.md"
|
|
@@ -100,7 +103,6 @@ var require_package = __commonJS({
|
|
|
100
103
|
"get-east-asian-width": "^1.5.0",
|
|
101
104
|
glob: "^11.0.0",
|
|
102
105
|
"indent-string": "^5.0.0",
|
|
103
|
-
ink: "^6.8.0",
|
|
104
106
|
"lodash-es": "^4.17.23",
|
|
105
107
|
marked: "^17.0.5",
|
|
106
108
|
"marked-terminal": "^7.3.0",
|
package/dist/utils/debug.d.ts
CHANGED
|
@@ -1,35 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Debug logging —
|
|
2
|
+
* Debug logging — thin facade over the unified logger.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* --debug — all debug output to file (~/.code-shell/debug/<session>.txt)
|
|
7
|
-
* --debug=api,hooks — filtered categories only
|
|
8
|
-
* --debug-file=/path/to/file — explicit output file
|
|
9
|
-
* --debug-to-stderr / -d2e — force stderr output
|
|
4
|
+
* Historically this module wrote to ~/.code-shell/debug/<session>.txt.
|
|
5
|
+
* It now delegates to logger so all output lands in ~/.code-shell/logs/.
|
|
10
6
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* Activation knobs (still honored, parsed inside logger):
|
|
8
|
+
* CODE_SHELL_LOG_LEVEL=debug — explicit level
|
|
9
|
+
* CODE_SHELL_DEBUG=mcp,api — category filter
|
|
10
|
+
* --debug — local dev: defaults to debug level
|
|
11
|
+
* --debug=mcp,api — category filter (CLI form)
|
|
12
|
+
* --debug-to-stderr / -d2e — echo to stderr instead of file
|
|
13
13
|
*/
|
|
14
|
-
|
|
15
|
-
type
|
|
16
|
-
categories: Set<string>;
|
|
17
|
-
};
|
|
14
|
+
import { type LogLevel } from "../logging/logger.js";
|
|
15
|
+
export type DebugLogLevel = "verbose" | LogLevel;
|
|
18
16
|
export declare function setDebugSessionId(id: string): void;
|
|
19
|
-
export declare function getMinDebugLogLevel(): DebugLogLevel;
|
|
20
17
|
export declare function isDebugMode(): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Enable debug logging mid-session (e.g. via /debug command).
|
|
23
|
-
* Returns true if logging was already active.
|
|
24
|
-
*/
|
|
25
18
|
export declare function enableDebugLogging(): boolean;
|
|
26
19
|
export declare function isDebugToStdErr(): boolean;
|
|
27
|
-
export declare function
|
|
28
|
-
export declare function getDebugFilePath(): string | null;
|
|
20
|
+
export declare function getMinDebugLogLevel(): DebugLogLevel;
|
|
29
21
|
/**
|
|
30
|
-
* Log a debug message
|
|
31
|
-
*
|
|
32
|
-
* or to a file (~/.code-shell/debug/<session>.txt).
|
|
22
|
+
* Log a debug message. Optional level via opts.level.
|
|
23
|
+
* Embedded `[category]` tags are extracted into the structured `cat` field.
|
|
33
24
|
*/
|
|
34
25
|
export declare function logForDebugging(message: string, opts?: {
|
|
35
26
|
level?: DebugLogLevel | string;
|
|
@@ -40,18 +31,11 @@ export declare function logForDebugging(message: string, opts?: {
|
|
|
40
31
|
*/
|
|
41
32
|
export declare function debugCategory(category: string): (msg: string) => void;
|
|
42
33
|
/**
|
|
43
|
-
* Time a function and log the duration.
|
|
34
|
+
* Time a function and log the duration at debug level.
|
|
44
35
|
*/
|
|
45
36
|
export declare function debugTiming<T>(label: string, fn: () => T | Promise<T>): Promise<T>;
|
|
46
|
-
/**
|
|
47
|
-
* CC compatibility: log errors for Anthropic internal users.
|
|
48
|
-
* In Code Shell this is a debug-level error log.
|
|
49
|
-
*/
|
|
50
37
|
export declare function logAntError(msg: string, _err?: unknown): void;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*/
|
|
54
|
-
export declare function setHasFormattedOutput(_value: boolean): void;
|
|
38
|
+
export declare function getDebugFilePath(): string | null;
|
|
39
|
+
export declare function setHasFormattedOutput(_v: boolean): void;
|
|
55
40
|
export declare function getHasFormattedOutput(): boolean;
|
|
56
41
|
export declare function flushDebugLogs(): Promise<void>;
|
|
57
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cjhyy/code-shell",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.3",
|
|
4
4
|
"description": "Code Shell — general-purpose agent orchestration framework with a terminal coding preset",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -44,9 +44,11 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
|
-
"
|
|
47
|
+
"preinstall": "node scripts/check-node.cjs",
|
|
48
|
+
"build": "bun run sync-models && bun run tsup && bun run build:dts",
|
|
48
49
|
"build:dts": "tsc --emitDeclarationOnly --declaration --outDir dist || true",
|
|
49
|
-
"
|
|
50
|
+
"sync-models": "bun run scripts/sync-models.ts",
|
|
51
|
+
"dev": "CODE_SHELL_DEV=1 bun run src/cli/main.ts",
|
|
50
52
|
"test": "bun test",
|
|
51
53
|
"test:watch": "bun test --watch",
|
|
52
54
|
"lint": "eslint src/",
|
|
@@ -55,10 +57,11 @@
|
|
|
55
57
|
"prepublishOnly": "bun run build"
|
|
56
58
|
},
|
|
57
59
|
"engines": {
|
|
58
|
-
"node": ">=20"
|
|
60
|
+
"node": ">=20.10"
|
|
59
61
|
},
|
|
60
62
|
"files": [
|
|
61
63
|
"dist",
|
|
64
|
+
"scripts/check-node.cjs",
|
|
62
65
|
"README.md",
|
|
63
66
|
"LICENSE",
|
|
64
67
|
"CHANGELOG.md"
|
|
@@ -92,7 +95,6 @@
|
|
|
92
95
|
"get-east-asian-width": "^1.5.0",
|
|
93
96
|
"glob": "^11.0.0",
|
|
94
97
|
"indent-string": "^5.0.0",
|
|
95
|
-
"ink": "^6.8.0",
|
|
96
98
|
"lodash-es": "^4.17.23",
|
|
97
99
|
"marked": "^17.0.5",
|
|
98
100
|
"marked-terminal": "^7.3.0",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const REQUIRED_MAJOR = 20;
|
|
3
|
+
const REQUIRED_MINOR = 10;
|
|
4
|
+
|
|
5
|
+
const [major, minor] = process.versions.node.split('.').map(Number);
|
|
6
|
+
|
|
7
|
+
if (major < REQUIRED_MAJOR || (major === REQUIRED_MAJOR && minor < REQUIRED_MINOR)) {
|
|
8
|
+
const red = (s) => `\x1b[31m${s}\x1b[0m`;
|
|
9
|
+
const bold = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
10
|
+
console.error('');
|
|
11
|
+
console.error(red(bold('✖ @cjhyy/code-shell requires Node.js >= 20.10')));
|
|
12
|
+
console.error(` current: ${process.versions.node}`);
|
|
13
|
+
console.error('');
|
|
14
|
+
console.error(' Some dependencies use ESM import attributes (`with { type: "json" }`),');
|
|
15
|
+
console.error(' which Node 16/18 do not support.');
|
|
16
|
+
console.error('');
|
|
17
|
+
console.error(' Fix: install Node 20.10+ (or 22 LTS) via nvm:');
|
|
18
|
+
console.error(' nvm install 22 && nvm use 22');
|
|
19
|
+
console.error('');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|