reasonix 0.41.0 → 0.44.0-rc.5
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 +73 -12
- package/README.zh-CN.md +35 -7
- package/dashboard/app.css +225 -4
- package/dashboard/dist/app.js +6538 -6082
- package/dashboard/dist/app.js.map +1 -1
- package/data/deepseek-tokenizer.json.gz +0 -0
- package/dist/cli/{acp-64VQZLDJ.js → acp-TYZ2CTDL.js} +40 -37
- package/dist/cli/acp-TYZ2CTDL.js.map +1 -0
- package/dist/cli/chat-TH7VNNCJ.js +51 -0
- package/dist/cli/{chunk-E46ECXJD.js → chunk-2425HK6U.js} +2 -1
- package/dist/cli/{chunk-E46ECXJD.js.map → chunk-2425HK6U.js.map} +1 -1
- package/dist/cli/chunk-25T6CVUP.js +172 -0
- package/dist/cli/chunk-25T6CVUP.js.map +1 -0
- package/dist/cli/{chunk-3Q3C4W66.js → chunk-2UQP6H6T.js} +2 -1
- package/dist/cli/{chunk-3Q3C4W66.js.map → chunk-2UQP6H6T.js.map} +1 -1
- package/dist/cli/{chunk-SXLJBFIV.js → chunk-2V6EAEUW.js} +99 -31
- package/dist/cli/chunk-2V6EAEUW.js.map +1 -0
- package/dist/cli/{chunk-4H3ZRJ2U.js → chunk-4CTDEJUF.js} +4 -3
- package/dist/cli/{chunk-4H3ZRJ2U.js.map → chunk-4CTDEJUF.js.map} +1 -1
- package/dist/cli/{chunk-7VFNPMKG.js → chunk-4QUNBQQ2.js} +3 -2
- package/dist/cli/{chunk-7VFNPMKG.js.map → chunk-4QUNBQQ2.js.map} +1 -1
- package/dist/cli/chunk-5QCB62C4.js +25319 -0
- package/dist/cli/chunk-5QCB62C4.js.map +1 -0
- package/dist/cli/chunk-6OWJV3YW.js +390 -0
- package/dist/cli/chunk-6OWJV3YW.js.map +1 -0
- package/dist/cli/{chunk-YJFKFTAL.js → chunk-6PBZN4VI.js} +15 -3
- package/dist/cli/chunk-6PBZN4VI.js.map +1 -0
- package/dist/cli/{chunk-WE3YZULK.js → chunk-7CIGMZT3.js} +3 -2
- package/dist/cli/{chunk-WE3YZULK.js.map → chunk-7CIGMZT3.js.map} +1 -1
- package/dist/cli/{chunk-LTXADNCO.js → chunk-7UCMM425.js} +8 -3
- package/dist/cli/chunk-7UCMM425.js.map +1 -0
- package/dist/cli/{chunk-UV7XJUJH.js → chunk-AB2RED3C.js} +16 -9
- package/dist/cli/{chunk-UV7XJUJH.js.map → chunk-AB2RED3C.js.map} +1 -1
- package/dist/cli/chunk-AVFXO2EZ.js +2996 -0
- package/dist/cli/chunk-AVFXO2EZ.js.map +1 -0
- package/dist/cli/{chunk-7SPOFTMT.js → chunk-C53JQES5.js} +4 -3
- package/dist/cli/{chunk-7SPOFTMT.js.map → chunk-C53JQES5.js.map} +1 -1
- package/dist/cli/{chunk-MHGPBJ2T.js → chunk-CGDR2ELH.js} +131 -34
- package/dist/cli/chunk-CGDR2ELH.js.map +1 -0
- package/dist/cli/{chunk-4DCHFFEY.js → chunk-CWZKQ5FE.js} +8 -4
- package/dist/cli/chunk-CWZKQ5FE.js.map +1 -0
- package/dist/cli/chunk-FEZK652I.js +3644 -0
- package/dist/cli/chunk-FEZK652I.js.map +1 -0
- package/dist/cli/{chunk-A7VHMMDE.js → chunk-HNXDZGC6.js} +114 -5
- package/dist/cli/chunk-HNXDZGC6.js.map +1 -0
- package/dist/cli/{chunk-FWGEHRB7.js → chunk-J5XJHLWM.js} +2 -1
- package/dist/cli/{chunk-FWGEHRB7.js.map → chunk-J5XJHLWM.js.map} +1 -1
- package/dist/cli/{chunk-Y5XNV3NX.js → chunk-JMBMLOBP.js} +2 -1
- package/dist/cli/{chunk-Y5XNV3NX.js.map → chunk-JMBMLOBP.js.map} +1 -1
- package/dist/cli/{chunk-ARF3N2SY.js → chunk-JNAQYELD.js} +17 -8
- package/dist/cli/{chunk-ARF3N2SY.js.map → chunk-JNAQYELD.js.map} +1 -1
- package/dist/cli/{chunk-AT6GGIBV.js → chunk-KGBG6M2X.js} +25 -18
- package/dist/cli/chunk-KGBG6M2X.js.map +1 -0
- package/dist/cli/{chunk-A3LL4XDV.js → chunk-KLQTAZIY.js} +69 -5
- package/dist/cli/chunk-KLQTAZIY.js.map +1 -0
- package/dist/cli/{chunk-KZYLMMU5.js → chunk-KM465GST.js} +13 -12
- package/dist/cli/{chunk-KZYLMMU5.js.map → chunk-KM465GST.js.map} +1 -1
- package/dist/cli/{chunk-2CXPDAWX.js → chunk-LIR2HBQH.js} +3 -2
- package/dist/cli/{chunk-2CXPDAWX.js.map → chunk-LIR2HBQH.js.map} +1 -1
- package/dist/cli/{chunk-RAUPWSYA.js → chunk-MJ6W5UN3.js} +3 -2
- package/dist/cli/{chunk-RAUPWSYA.js.map → chunk-MJ6W5UN3.js.map} +1 -1
- package/dist/cli/{chunk-4W2CICFQ.js → chunk-MRHHQJAQ.js} +72 -60
- package/dist/cli/chunk-MRHHQJAQ.js.map +1 -0
- package/dist/cli/{chunk-BOFL3T45.js → chunk-NVURFF27.js} +23 -11
- package/dist/cli/chunk-NVURFF27.js.map +1 -0
- package/dist/cli/chunk-OPFUUYHL.js +11645 -0
- package/dist/cli/chunk-OPFUUYHL.js.map +1 -0
- package/dist/cli/{chunk-FM57FNPJ.js → chunk-PLHAZOLZ.js} +2 -1
- package/dist/cli/{chunk-FM57FNPJ.js.map → chunk-PLHAZOLZ.js.map} +1 -1
- package/dist/cli/{chunk-ZTLZO42A.js → chunk-R3CTO2HM.js} +3 -2
- package/dist/cli/{chunk-ZTLZO42A.js.map → chunk-R3CTO2HM.js.map} +1 -1
- package/dist/cli/{chunk-BYZGO3BX.js → chunk-RDRC3XDT.js} +145 -39
- package/dist/cli/chunk-RDRC3XDT.js.map +1 -0
- package/dist/cli/chunk-S4XVGLRW.js +499 -0
- package/dist/cli/chunk-S4XVGLRW.js.map +1 -0
- package/dist/cli/{chunk-WJ3YX4PZ.js → chunk-SZ5XES2N.js} +3 -2
- package/dist/cli/{chunk-WJ3YX4PZ.js.map → chunk-SZ5XES2N.js.map} +1 -1
- package/dist/cli/{chunk-CD4SCQL4.js → chunk-TEUDEGX2.js} +64 -10
- package/dist/cli/chunk-TEUDEGX2.js.map +1 -0
- package/dist/cli/chunk-TKVXTQ3T.js +96 -0
- package/dist/cli/chunk-TKVXTQ3T.js.map +1 -0
- package/dist/cli/chunk-TUK7OWJA.js +51 -0
- package/dist/cli/chunk-TXJMRPIL.js +54 -0
- package/dist/cli/{chunk-L7W3HJZQ.js.map → chunk-TXJMRPIL.js.map} +1 -1
- package/dist/cli/{chunk-H4OLWRSX.js → chunk-V26WPN3J.js} +11 -7
- package/dist/cli/chunk-V26WPN3J.js.map +1 -0
- package/dist/cli/{chunk-VFG4GIT3.js → chunk-WK3UFQY3.js} +3 -2
- package/dist/cli/{chunk-VFG4GIT3.js.map → chunk-WK3UFQY3.js.map} +1 -1
- package/dist/cli/chunk-X53B3JIX.js +34320 -0
- package/dist/cli/chunk-X53B3JIX.js.map +1 -0
- package/dist/cli/{chunk-SOZE7V7V.js → chunk-XJXDHAES.js} +3 -2
- package/dist/cli/{chunk-SOZE7V7V.js.map → chunk-XJXDHAES.js.map} +1 -1
- package/dist/cli/{chunk-CFY2XLY6.js → chunk-XSU4QVFW.js} +7 -85
- package/dist/cli/chunk-XSU4QVFW.js.map +1 -0
- package/dist/cli/{chunk-CRPQUBP6.js → chunk-XXC2BYTV.js} +2 -1
- package/dist/cli/{chunk-CRPQUBP6.js.map → chunk-XXC2BYTV.js.map} +1 -1
- package/dist/cli/chunk-Z4S7EYXG.js +63813 -0
- package/dist/cli/chunk-Z4S7EYXG.js.map +1 -0
- package/dist/cli/chunk-ZZM6QJ4W.js +109 -0
- package/dist/cli/chunk-ZZM6QJ4W.js.map +1 -0
- package/dist/cli/{chunk-ORM6PK57.js → chunk-ZZYBBX5N.js} +14 -5
- package/dist/cli/chunk-ZZYBBX5N.js.map +1 -0
- package/dist/cli/code-PSVJ3KEN.js +166 -0
- package/dist/cli/code-PSVJ3KEN.js.map +1 -0
- package/dist/cli/{commands-QY7MSQG7.js → commands-OCU42XG4.js} +7 -5
- package/dist/cli/{commands-QY7MSQG7.js.map → commands-OCU42XG4.js.map} +1 -1
- package/dist/cli/{commit-BRCQ3OQO.js → commit-XCQIQCYG.js} +7 -4
- package/dist/cli/{commit-BRCQ3OQO.js.map → commit-XCQIQCYG.js.map} +1 -1
- package/dist/cli/{desktop-ZTMHQR2Y.js → desktop-KWGR4BNE.js} +327 -98
- package/dist/cli/desktop-KWGR4BNE.js.map +1 -0
- package/dist/cli/devtools-HW3WDT3Q.js +91 -0
- package/dist/cli/devtools-HW3WDT3Q.js.map +1 -0
- package/dist/cli/diff-NHANTNC3.js +165 -0
- package/dist/cli/{diff-YASCB7PU.js.map → diff-NHANTNC3.js.map} +1 -1
- package/dist/cli/doctor-CC5CLOGG.js +27 -0
- package/dist/cli/{events-2AJTXR7I.js → events-XEFAD5VX.js} +6 -4
- package/dist/cli/{events-2AJTXR7I.js.map → events-XEFAD5VX.js.map} +1 -1
- package/dist/cli/index.js +3266 -152
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-YMWBLRR7.js → mcp-MPVGBBJF.js} +6 -4
- package/dist/cli/{mcp-YMWBLRR7.js.map → mcp-MPVGBBJF.js.map} +1 -1
- package/dist/cli/{mcp-browse-XLDUE6SB.js → mcp-browse-4XOTC3FJ.js} +32 -21
- package/dist/cli/{mcp-browse-XLDUE6SB.js.map → mcp-browse-4XOTC3FJ.js.map} +1 -1
- package/dist/cli/{mcp-inspect-H4D2HSJP.js → mcp-inspect-CEMGKKAH.js} +18 -10
- package/dist/cli/mcp-inspect-CEMGKKAH.js.map +1 -0
- package/dist/cli/package.json +3 -0
- package/dist/cli/prompt-2D7ID24X.js +16 -0
- package/dist/cli/{prune-sessions-4N3BVST2.js → prune-sessions-3RWUBYRS.js} +4 -2
- package/dist/cli/{prune-sessions-4N3BVST2.js.map → prune-sessions-3RWUBYRS.js.map} +1 -1
- package/dist/cli/{replay-3GTWM75X.js → replay-SR44E6RS.js} +42 -30
- package/dist/cli/{replay-3GTWM75X.js.map → replay-SR44E6RS.js.map} +1 -1
- package/dist/cli/{run-BLZPTRDX.js → run-MDGL27WL.js} +42 -40
- package/dist/cli/run-MDGL27WL.js.map +1 -0
- package/dist/cli/{server-DRFPXXSH.js → server-27ARQXIZ.js} +95 -55
- package/dist/cli/server-27ARQXIZ.js.map +1 -0
- package/dist/cli/{sessions-BOWFPTXT.js → sessions-CKQXCYGP.js} +25 -22
- package/dist/cli/sessions-CKQXCYGP.js.map +1 -0
- package/dist/cli/setup-TPAGSVXO.js +618 -0
- package/dist/cli/setup-TPAGSVXO.js.map +1 -0
- package/dist/cli/stats-DPUBZNVX.js +16 -0
- package/dist/cli/update-6ITLPRDV.js +15 -0
- package/dist/cli/version-2X3BHVVK.js +33 -0
- package/dist/cli/{version-XQXYSJ5L.js.map → version-2X3BHVVK.js.map} +1 -1
- package/dist/index.d.ts +182 -45
- package/dist/index.js +1420 -546
- package/dist/index.js.map +1 -1
- package/package.json +21 -8
- package/dist/cli/.-3G6VX5S7.js +0 -327
- package/dist/cli/.-6YRPB2C7.js +0 -329
- package/dist/cli/.-EYSVINK3.js +0 -317
- package/dist/cli/acp-64VQZLDJ.js.map +0 -1
- package/dist/cli/chat-ZAGX52RV.js +0 -46
- package/dist/cli/chunk-4DCHFFEY.js.map +0 -1
- package/dist/cli/chunk-4W2CICFQ.js.map +0 -1
- package/dist/cli/chunk-5X7LZJDE.js +0 -36
- package/dist/cli/chunk-5X7LZJDE.js.map +0 -1
- package/dist/cli/chunk-65Q5HQ26.js +0 -892
- package/dist/cli/chunk-65Q5HQ26.js.map +0 -1
- package/dist/cli/chunk-A3LL4XDV.js.map +0 -1
- package/dist/cli/chunk-A7VHMMDE.js.map +0 -1
- package/dist/cli/chunk-AFFZF3MW.js +0 -36
- package/dist/cli/chunk-AFFZF3MW.js.map +0 -1
- package/dist/cli/chunk-AT6GGIBV.js.map +0 -1
- package/dist/cli/chunk-BOFL3T45.js.map +0 -1
- package/dist/cli/chunk-BYZGO3BX.js.map +0 -1
- package/dist/cli/chunk-CD4SCQL4.js.map +0 -1
- package/dist/cli/chunk-CFY2XLY6.js.map +0 -1
- package/dist/cli/chunk-CPOV2O73.js +0 -39
- package/dist/cli/chunk-CPOV2O73.js.map +0 -1
- package/dist/cli/chunk-DAEAAVDF.js +0 -199
- package/dist/cli/chunk-DAEAAVDF.js.map +0 -1
- package/dist/cli/chunk-F2AV2QDK.js +0 -16514
- package/dist/cli/chunk-F2AV2QDK.js.map +0 -1
- package/dist/cli/chunk-H4OLWRSX.js.map +0 -1
- package/dist/cli/chunk-IEA6JOIP.js +0 -5430
- package/dist/cli/chunk-IEA6JOIP.js.map +0 -1
- package/dist/cli/chunk-L7W3HJZQ.js +0 -46
- package/dist/cli/chunk-LN27AKV3.js +0 -26
- package/dist/cli/chunk-LN27AKV3.js.map +0 -1
- package/dist/cli/chunk-LTXADNCO.js.map +0 -1
- package/dist/cli/chunk-MHGPBJ2T.js.map +0 -1
- package/dist/cli/chunk-ORM6PK57.js.map +0 -1
- package/dist/cli/chunk-SXLJBFIV.js.map +0 -1
- package/dist/cli/chunk-YJFKFTAL.js.map +0 -1
- package/dist/cli/code-X3M6ENTQ.js +0 -150
- package/dist/cli/code-X3M6ENTQ.js.map +0 -1
- package/dist/cli/desktop-ZTMHQR2Y.js.map +0 -1
- package/dist/cli/diff-YASCB7PU.js +0 -153
- package/dist/cli/doctor-XCN5ETVP.js +0 -24
- package/dist/cli/mcp-inspect-H4D2HSJP.js.map +0 -1
- package/dist/cli/prompt-RSIHN62V.js +0 -14
- package/dist/cli/run-BLZPTRDX.js.map +0 -1
- package/dist/cli/server-DRFPXXSH.js.map +0 -1
- package/dist/cli/sessions-BOWFPTXT.js.map +0 -1
- package/dist/cli/setup-FQL2JJC2.js +0 -516
- package/dist/cli/setup-FQL2JJC2.js.map +0 -1
- package/dist/cli/stats-5RJCATCE.js +0 -12
- package/dist/cli/stats-5RJCATCE.js.map +0 -1
- package/dist/cli/update-GUCWB4UN.js +0 -13
- package/dist/cli/update-GUCWB4UN.js.map +0 -1
- package/dist/cli/version-XQXYSJ5L.js +0 -30
- /package/dist/cli/{.-3G6VX5S7.js.map → chat-TH7VNNCJ.js.map} +0 -0
- /package/dist/cli/{.-6YRPB2C7.js.map → chunk-TUK7OWJA.js.map} +0 -0
- /package/dist/cli/{.-EYSVINK3.js.map → doctor-CC5CLOGG.js.map} +0 -0
- /package/dist/cli/{chat-ZAGX52RV.js.map → prompt-2D7ID24X.js.map} +0 -0
- /package/dist/cli/{doctor-XCN5ETVP.js.map → stats-DPUBZNVX.js.map} +0 -0
- /package/dist/cli/{prompt-RSIHN62V.js.map → update-6ITLPRDV.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/setup.tsx","../../src/cli/ui/Wizard.tsx","../../node_modules/ink-text-input/source/index.tsx"],"sourcesContent":["/**\n * `reasonix setup` — re-mount the first-run wizard on demand so users\n * can reconfigure (add/remove MCP servers, switch preset) without\n * editing JSON by hand.\n *\n * Invoked both explicitly (`reasonix setup`) and implicitly (the no-args\n * entry point when `setupCompleted` is false).\n */\n\nimport { render } from \"ink\";\nimport React from \"react\";\nimport { loadApiKey, readConfig } from \"../../config.js\";\nimport { loadDotenv } from \"../../env.js\";\nimport { Wizard } from \"../ui/Wizard.js\";\n\nexport interface SetupOptions {\n /**\n * When true, bypass the API-key step even if no key is saved — useful\n * from test harnesses. Normal CLI use always pushes through the key\n * step when missing.\n */\n skipKeyStep?: boolean;\n /** Show the API-key step even when a saved/env key already exists. */\n forceKeyStep?: boolean;\n}\n\nexport async function setupCommand(opts: SetupOptions = {}): Promise<void> {\n loadDotenv();\n const existingKey = loadApiKey();\n const existing = readConfig();\n\n const { waitUntilExit, unmount } = render(\n <Wizard\n existingApiKey={existingKey}\n initial={{ preset: existing.preset, mcp: existing.mcp, theme: existing.theme }}\n forceApiKeyStep={opts.forceKeyStep}\n onComplete={() => {\n // Ink handles its own enter-to-exit inside the \"saved\" step; we\n // just wait for the app to exit naturally.\n }}\n onCancel={() => {\n unmount();\n }}\n />,\n { exitOnCtrlC: true, patchConsole: false },\n );\n await waitUntilExit();\n}\n","/**\n * First-run / re-configure wizard.\n *\n * Walks a new user through: language → theme → API key → preset pick → MCP\n * server pick → per-server args → save. Saved output lives in\n * `~/.reasonix/config.json` so the next `reasonix chat` starts with\n * everything already wired.\n */\n\nimport { mkdirSync, statSync } from \"node:fs\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport TextInput from \"ink-text-input\";\n// biome-ignore lint/style/useImportType: JSX (jsx: \"react\") needs React as a value at runtime\nimport React, { useEffect, useState } from \"react\";\nimport {\n type PresetName,\n type ReasonixConfig,\n defaultConfigPath,\n isPlausibleKey,\n loadBaseUrl,\n loadTheme,\n readConfig,\n redactKey,\n resolveThemePreference,\n writeConfig,\n} from \"../../config.js\";\nimport {\n detectSystemLanguage,\n getLanguage,\n getSupportedLanguages,\n notifyLanguageChange,\n onLanguageChange,\n setLanguage,\n t,\n} from \"../../i18n/index.js\";\nimport type { LanguageCode } from \"../../i18n/types.js\";\nimport { type CatalogEntry, MCP_CATALOG } from \"../../mcp/catalog.js\";\nimport { MultiSelect, type SelectItem, SingleSelect } from \"./Select.js\";\nimport { PRESET_DESCRIPTIONS } from \"./presets.js\";\nimport { ThemeProvider, useTheme } from \"./theme/context.js\";\nimport { type ThemeName, listThemeNames } from \"./theme/tokens.js\";\n\nexport interface WizardProps {\n /** Called once the config has been saved. */\n onComplete: (cfg: ReasonixConfig) => void;\n /** Called if the user presses Esc to abort. */\n onCancel?: () => void;\n /** Skip the API-key step if a key already exists (env or config). */\n existingApiKey?: string;\n /** Force the API-key step so `reasonix setup` can replace a saved key. */\n forceApiKeyStep?: boolean;\n /** Verifies the submitted key before the wizard can continue. */\n validateApiKey?: (apiKey: string) => Promise<ApiKeyValidationResult>;\n /** Pre-fill selections when re-running (reconfigure flow). */\n initial?: {\n preset?: PresetName;\n mcp?: string[];\n theme?: ThemeName | \"auto\";\n };\n}\n\nexport type ApiKeyValidationResult =\n | { ok: true }\n | { ok: false; reason: \"rejected\" | \"failed\"; message?: string };\n\ntype Step = \"language\" | \"theme\" | \"apiKey\" | \"preset\" | \"mcp\" | \"mcpArgs\" | \"review\" | \"saved\";\n\ninterface WizardData {\n language: LanguageCode;\n theme: ThemeName;\n apiKey: string;\n preset: PresetName;\n selectedCatalog: string[];\n catalogArgs: Record<string, string>;\n}\n\nconst CATALOG_BY_NAME = new Map(MCP_CATALOG.map((e) => [e.name, e]));\n\nconst LANGUAGE_LABELS: Record<LanguageCode, string> = {\n EN: \"English\",\n \"zh-CN\": \"简体中文\",\n};\n\nexport function Wizard({\n onComplete,\n onCancel,\n existingApiKey,\n forceApiKeyStep = false,\n validateApiKey = validateDeepSeekApiKey,\n initial,\n}: WizardProps) {\n const { exit } = useApp();\n const [, setLanguageVersion] = useState(0);\n useEffect(() => onLanguageChange(() => setLanguageVersion((v) => v + 1)), []);\n\n const [previewTheme, setPreviewTheme] = useState<ThemeName>(() =>\n resolveThemePreference(initial?.theme ?? loadTheme(), process.env.REASONIX_THEME),\n );\n\n const [step, setStep] = useState<Step>(\"language\");\n const [data, setData] = useState<WizardData>(() => ({\n language: getLanguage(),\n theme: resolveThemePreference(initial?.theme ?? loadTheme(), process.env.REASONIX_THEME),\n apiKey: existingApiKey ?? \"\",\n preset: initial?.preset ?? \"auto\",\n selectedCatalog: deriveInitialCatalog(initial?.mcp ?? []),\n catalogArgs: {},\n }));\n const [error, setError] = useState<string | null>(null);\n\n useInput((_input, key) => {\n if (key.escape && step !== \"saved\" && onCancel) onCancel();\n });\n\n const content = (() => {\n if (step === \"language\") {\n return (\n <LanguageStep\n initialValue={data.language}\n onSubmit={(lang) => {\n setLanguage(lang);\n notifyLanguageChange();\n setData((d) => ({ ...d, language: lang }));\n setStep(\"theme\");\n }}\n />\n );\n }\n\n if (step === \"theme\") {\n return (\n <ThemeStep\n initialValue={data.theme}\n onPreview={setPreviewTheme}\n onSubmit={(theme) => {\n setData((d) => ({ ...d, theme }));\n setStep(existingApiKey && !forceApiKeyStep ? \"preset\" : \"apiKey\");\n }}\n />\n );\n }\n\n if (step === \"apiKey\") {\n return (\n <ApiKeyStep\n initialValue={data.apiKey}\n validateApiKey={validateApiKey}\n onSubmit={(key) => {\n setData((d) => ({ ...d, apiKey: key }));\n setError(null);\n setStep(\"preset\");\n }}\n error={error}\n onError={setError}\n />\n );\n }\n\n if (step === \"preset\") {\n return (\n <StepFrame title={t(\"wizard.presetTitle\")} step={1} total={3}>\n <SingleSelect<PresetName>\n items={presetItems()}\n initialValue={data.preset}\n onSubmit={(preset) => {\n setData((d) => ({ ...d, preset }));\n setStep(\"mcp\");\n }}\n />\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.selectFooter\")}</Text>\n </Box>\n </StepFrame>\n );\n }\n\n if (step === \"mcp\") {\n return (\n <StepFrame title={t(\"wizard.mcpTitle\")} step={2} total={3}>\n <MultiSelect\n items={mcpItems()}\n initialSelected={data.selectedCatalog}\n onSubmit={(selected) => {\n setData((d) => ({ ...d, selectedCatalog: selected }));\n const needsArgs = selected.some((name) => CATALOG_BY_NAME.get(name)?.userArgs);\n setStep(needsArgs ? \"mcpArgs\" : \"review\");\n }}\n footer={t(\"wizard.mcpFooterMulti\")}\n />\n </StepFrame>\n );\n }\n\n if (step === \"mcpArgs\") {\n const pending = data.selectedCatalog.filter((name) => {\n const entry = CATALOG_BY_NAME.get(name);\n return entry?.userArgs && !data.catalogArgs[name];\n });\n if (pending.length === 0) {\n setStep(\"review\");\n return null;\n }\n const currentName = pending[0]!;\n const entry = CATALOG_BY_NAME.get(currentName)!;\n return (\n <McpArgsStep\n entry={entry}\n error={error}\n onSubmit={(value) => {\n setData((d) => ({\n ...d,\n catalogArgs: { ...d.catalogArgs, [currentName]: value },\n }));\n setError(null);\n }}\n onError={setError}\n />\n );\n }\n\n if (step === \"review\") {\n const specs = data.selectedCatalog.map((name) => buildSpec(name, data.catalogArgs));\n return (\n <StepFrame title={t(\"wizard.reviewTitle\")} step={3} total={3}>\n <Box flexDirection=\"column\">\n <SummaryLine\n label={t(\"wizard.reviewLabelLanguage\")}\n value={LANGUAGE_LABELS[data.language]}\n />\n <SummaryLine label={t(\"wizard.reviewLabelApiKey\")} value={redactKey(data.apiKey)} />\n <SummaryLine label={t(\"wizard.reviewLabelTheme\")} value={data.theme} />\n <SummaryLine label={t(\"wizard.reviewLabelPreset\")} value={data.preset} />\n <SummaryLine\n label={t(\"wizard.reviewLabelMcp\")}\n value={\n specs.length === 0\n ? t(\"wizard.reviewMcpNone\")\n : t(\"wizard.reviewMcpServers\", { count: specs.length })\n }\n />\n {specs.map((spec, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: review-only render, order fixed\n <Box key={i} paddingLeft={14}>\n <Text dimColor>· {spec}</Text>\n </Box>\n ))}\n <Box marginTop={1}>\n <Text>{t(\"wizard.reviewSavesTo\", { path: defaultConfigPath() })}</Text>\n </Box>\n {error ? (\n <Box marginTop={1}>\n <Text color=\"red\">{error}</Text>\n </Box>\n ) : null}\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.reviewFooter\")}</Text>\n </Box>\n </Box>\n <ReviewConfirm\n onConfirm={() => {\n try {\n const specsNow = data.selectedCatalog.map((name) =>\n buildSpec(name, data.catalogArgs),\n );\n const prev = readConfig();\n const next: ReasonixConfig = {\n ...prev,\n apiKey: data.apiKey,\n preset: data.preset,\n theme: data.theme,\n mcp: specsNow,\n setupCompleted: true,\n };\n writeConfig(next);\n setStep(\"saved\");\n onComplete(next);\n } catch (e) {\n setError(t(\"wizard.reviewSaveError\", { message: (e as Error).message }));\n }\n }}\n />\n </StepFrame>\n );\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Text bold color=\"green\">\n {t(\"wizard.savedTitle\")}\n </Text>\n <Box marginTop={1}>\n <Text>{t(\"ui.welcome\")}</Text>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.savedFooter\")}</Text>\n </Box>\n <ExitOnEnter onExit={exit} />\n </Box>\n );\n })();\n\n return <ThemeProvider name={previewTheme}>{content}</ThemeProvider>;\n}\n\nconst THEME_NAMES = listThemeNames();\n\nfunction ThemeStep({\n initialValue,\n onPreview,\n onSubmit,\n}: {\n initialValue: ThemeName;\n onPreview: (theme: ThemeName) => void;\n onSubmit: (theme: ThemeName) => void;\n}) {\n const initialIndex = Math.max(0, THEME_NAMES.indexOf(initialValue));\n const [index, setIndex] = useState(initialIndex);\n const theme = useTheme();\n\n useInput((_input, key) => {\n if (key.upArrow) {\n const next = (index - 1 + THEME_NAMES.length) % THEME_NAMES.length;\n setIndex(next);\n onPreview(THEME_NAMES[next]!);\n } else if (key.downArrow) {\n const next = (index + 1) % THEME_NAMES.length;\n setIndex(next);\n onPreview(THEME_NAMES[next]!);\n } else if (key.return) {\n onSubmit(THEME_NAMES[index]!);\n }\n });\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.tone.brand} paddingX={1}>\n <Text bold color={theme.tone.brand}>\n {t(\"wizard.themeTitle\")}\n </Text>\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.themeSubtitle\")}</Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {THEME_NAMES.map((name, i) => (\n <Box key={name}>\n <Text color={i === index ? theme.tone.brand : undefined}>\n {i === index ? \"▸ \" : \" \"}\n </Text>\n <Text bold={i === index} color={i === index ? theme.fg.strong : theme.fg.body}>\n {name}\n </Text>\n <Text color={theme.fg.meta}>{\" — \"}</Text>\n <Text color={theme.fg.meta}>{t(`wizard.themeCaption.${name}`)}</Text>\n </Box>\n ))}\n </Box>\n <Box\n marginTop={1}\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.fg.faint}\n paddingX={1}\n >\n <Text color={theme.fg.meta}>{t(\"wizard.themeSampleHeading\")}</Text>\n <Box marginTop={1}>\n <Text color={theme.tone.accent}>{\"◆ \"}</Text>\n <Text color={theme.tone.accent}>{t(\"wizard.themeSampleReasoning\")}</Text>\n </Box>\n <Box>\n <Text color={theme.tone.info}>{\"▣ \"}</Text>\n <Text color={theme.fg.body}>{\"fs.readFile(\"}</Text>\n <Text color={theme.tone.ok}>{'\"main.ts\"'}</Text>\n <Text color={theme.fg.body}>{\")\"}</Text>\n </Box>\n <Box>\n <Text color={theme.fg.meta}>~/project/main.ts:42</Text>\n </Box>\n <Box marginTop={1}>\n <Text color={theme.tone.ok}>ok</Text>\n <Text color={theme.fg.faint}>{\" · \"}</Text>\n <Text color={theme.tone.warn}>warn</Text>\n <Text color={theme.fg.faint}>{\" · \"}</Text>\n <Text color={theme.tone.err}>err</Text>\n </Box>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.themeFooter\")}</Text>\n </Box>\n </Box>\n );\n}\n\n// ---------- step components ----------\n\nfunction LanguageStep({\n initialValue,\n onSubmit,\n}: {\n initialValue: LanguageCode;\n onSubmit: (lang: LanguageCode) => void;\n}) {\n const items: SelectItem<LanguageCode>[] = getSupportedLanguages().map((code) => ({\n value: code,\n label: LANGUAGE_LABELS[code],\n hint: code === detectSystemLanguage() ? \"(detected)\" : undefined,\n }));\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n <Text bold color=\"cyan\">\n {t(\"wizard.languageTitle\")}\n </Text>\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.languageSubtitle\")}</Text>\n </Box>\n <Box marginTop={1}>\n <SingleSelect<LanguageCode>\n items={items}\n initialValue={initialValue}\n onSubmit={onSubmit}\n footer={t(\"wizard.selectFooter\")}\n />\n </Box>\n </Box>\n );\n}\n\nfunction ApiKeyStep({\n initialValue,\n validateApiKey,\n onSubmit,\n error,\n onError,\n}: {\n initialValue?: string;\n validateApiKey: (apiKey: string) => Promise<ApiKeyValidationResult>;\n onSubmit: (key: string) => void;\n error: string | null;\n onError: (e: string | null) => void;\n}) {\n const [value, setValue] = useState(\"\");\n const [checking, setChecking] = useState(false);\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n <Text bold color=\"cyan\">\n {t(\"wizard.welcomeTitle\")}\n </Text>\n <Box marginTop={1}>\n <Text>{t(\"wizard.apiKeyPrompt\")}</Text>\n </Box>\n <Text dimColor>{t(\"wizard.apiKeyGetOne\")}</Text>\n <Text dimColor>{t(\"wizard.apiKeySavedLocally\", { path: defaultConfigPath() })}</Text>\n {initialValue ? (\n <Text dimColor>{t(\"wizard.apiKeyPreview\", { redacted: redactKey(initialValue) })}</Text>\n ) : null}\n <Box marginTop={1}>\n <Text bold color=\"cyan\">\n {t(\"wizard.apiKeyInputLabel\")}\n </Text>\n <TextInput\n value={value}\n onChange={setValue}\n onSubmit={(raw) => {\n const trimmed = raw.trim() || initialValue?.trim() || \"\";\n if (!isPlausibleKey(trimmed)) {\n onError(t(\"wizard.apiKeyInvalid\"));\n setValue(\"\");\n return;\n }\n setChecking(true);\n onError(null);\n void validateApiKey(trimmed).then((result) => {\n setChecking(false);\n if (!result.ok) {\n onError(\n result.reason === \"rejected\"\n ? t(\"wizard.apiKeyRejected\")\n : t(\"wizard.apiKeyCheckFailed\", { message: result.message ?? \"unknown\" }),\n );\n setValue(\"\");\n return;\n }\n onSubmit(trimmed);\n });\n }}\n mask=\"•\"\n placeholder=\"sk-...\"\n />\n </Box>\n {checking ? (\n <Box marginTop={1}>\n <Text color=\"yellow\">{t(\"wizard.apiKeyChecking\")}</Text>\n </Box>\n ) : error ? (\n <Box marginTop={1}>\n <Text color=\"red\">{error}</Text>\n </Box>\n ) : value ? (\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.apiKeyPreview\", { redacted: redactKey(value) })}</Text>\n </Box>\n ) : null}\n </Box>\n );\n}\n\nexport async function validateDeepSeekApiKey(\n apiKey: string,\n opts: {\n baseUrl?: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n } = {},\n): Promise<ApiKeyValidationResult> {\n const fetchImpl = opts.fetch ?? globalThis.fetch.bind(globalThis);\n let baseUrl = opts.baseUrl ?? loadBaseUrl() ?? \"https://api.deepseek.com\";\n while (baseUrl.endsWith(\"/\")) baseUrl = baseUrl.slice(0, -1);\n\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), opts.timeoutMs ?? 10_000);\n try {\n const resp = await fetchImpl(`${baseUrl}/user/balance`, {\n method: \"GET\",\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: ctrl.signal,\n });\n if (resp.ok) return { ok: true };\n if (resp.status === 401 || resp.status === 403) return { ok: false, reason: \"rejected\" };\n return { ok: false, reason: \"failed\", message: `DeepSeek ${resp.status}` };\n } catch (e) {\n return { ok: false, reason: \"failed\", message: (e as Error).message };\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction McpArgsStep({\n entry,\n error,\n onSubmit,\n onError,\n}: {\n entry: CatalogEntry;\n error: string | null;\n onSubmit: (value: string) => void;\n onError: (e: string | null) => void;\n}) {\n const [value, setValue] = useState(\"\");\n const [pendingCreate, setPendingCreate] = useState<string | null>(null);\n\n useInput((input, key) => {\n if (!pendingCreate) return;\n const ch = input.toLowerCase();\n if (ch === \"y\" || key.return) {\n try {\n mkdirSync(pendingCreate, { recursive: true });\n const created = pendingCreate;\n setPendingCreate(null);\n setValue(\"\");\n onError(null);\n onSubmit(created);\n } catch (e) {\n onError(\n t(\"wizard.mcpArgsDirCreateFailed\", {\n path: pendingCreate,\n message: (e as Error).message,\n }),\n );\n setPendingCreate(null);\n }\n } else if (ch === \"n\" || key.escape) {\n setPendingCreate(null);\n onError(null);\n }\n });\n\n if (pendingCreate) {\n return (\n <StepFrame title={t(\"wizard.mcpArgsTitle\", { name: entry.name })} step={2} total={3}>\n <Box flexDirection=\"column\">\n <Text>{t(\"wizard.mcpArgsDirMissing\", { path: pendingCreate })}</Text>\n <Box marginTop={1}>\n <Text dimColor>{t(\"wizard.mcpArgsDirCreateHint\")}</Text>\n </Box>\n {error ? (\n <Box marginTop={1}>\n <Text color=\"red\">{error}</Text>\n </Box>\n ) : null}\n </Box>\n </StepFrame>\n );\n }\n\n return (\n <StepFrame title={t(\"wizard.mcpArgsTitle\", { name: entry.name })} step={2} total={3}>\n <Box flexDirection=\"column\">\n <Text>{entry.summary}</Text>\n {entry.note ? (\n <Box marginTop={1}>\n <Text dimColor>{entry.note}</Text>\n </Box>\n ) : null}\n <Box marginTop={1}>\n <Text>{t(\"wizard.mcpArgsRequiredParam\")}</Text>\n <Text bold>{entry.userArgs}</Text>\n </Box>\n <Box marginTop={1}>\n <Text bold color=\"cyan\">\n {entry.userArgs}\n {\" › \"}\n </Text>\n <TextInput\n value={value}\n onChange={setValue}\n onSubmit={(raw) => {\n const trimmed = raw.trim();\n if (!trimmed) {\n onError(t(\"wizard.mcpArgsEmpty\", { name: entry.name }));\n return;\n }\n if (entry.name === \"filesystem\") {\n const check = checkFilesystemPath(trimmed);\n if (check.kind === \"missing\") {\n setPendingCreate(trimmed);\n return;\n }\n if (check.kind === \"not-a-dir\") {\n onError(t(\"wizard.mcpArgsNotADir\", { path: trimmed }));\n return;\n }\n }\n onSubmit(trimmed);\n setValue(\"\");\n }}\n placeholder={placeholderFor(entry)}\n />\n </Box>\n {error ? (\n <Box marginTop={1}>\n <Text color=\"red\">{error}</Text>\n </Box>\n ) : null}\n </Box>\n </StepFrame>\n );\n}\n\nfunction checkFilesystemPath(p: string): { kind: \"ok\" | \"missing\" | \"not-a-dir\" } {\n try {\n return { kind: statSync(p).isDirectory() ? \"ok\" : \"not-a-dir\" };\n } catch {\n return { kind: \"missing\" };\n }\n}\n\nfunction ReviewConfirm({ onConfirm }: { onConfirm: () => void }) {\n useInput((_i, key) => {\n if (key.return) onConfirm();\n });\n return null;\n}\n\nfunction ExitOnEnter({ onExit }: { onExit: () => void }) {\n useInput((_i, key) => {\n if (key.return) onExit();\n });\n return null;\n}\n\nfunction StepFrame({\n title,\n step,\n total,\n children,\n}: {\n title: string;\n step: number;\n total: number;\n children: React.ReactNode;\n}) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n <Box>\n <Text dimColor>{t(\"wizard.stepCounter\", { step, total })}</Text>\n <Text bold color=\"cyan\">\n {title}\n </Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {children}\n </Box>\n </Box>\n );\n}\n\nfunction SummaryLine({ label, value }: { label: string; value: string }) {\n return (\n <Box>\n <Text>{label.padEnd(12)}</Text>\n <Text bold>{value}</Text>\n </Box>\n );\n}\n\nfunction presetItems(): SelectItem<PresetName>[] {\n return ([\"auto\", \"flash\", \"pro\"] as const).map((name) => ({\n value: name as PresetName,\n label: `${name} — ${PRESET_DESCRIPTIONS[name].headline}`,\n hint: PRESET_DESCRIPTIONS[name].cost,\n }));\n}\n\nfunction mcpItems(): SelectItem<string>[] {\n return MCP_CATALOG.map((entry) => {\n const hintParts: string[] = [entry.summary];\n if (entry.userArgs) hintParts.push(t(\"wizard.mcpUserArgsHint\", { arg: entry.userArgs }));\n if (entry.note) hintParts.push(entry.note);\n return {\n value: entry.name,\n label: entry.name,\n hint: hintParts.join(\" · \"),\n };\n });\n}\n\nfunction placeholderFor(entry: CatalogEntry): string {\n if (entry.name === \"filesystem\") return \"e.g. /tmp/reasonix-sandbox\";\n if (entry.name === \"sqlite\") return \"e.g. ./notes.sqlite\";\n return entry.userArgs ?? \"\";\n}\n\nfunction deriveInitialCatalog(existingSpecs: string[]): string[] {\n const packageToName = new Map(MCP_CATALOG.map((e) => [e.package, e.name]));\n const out: string[] = [];\n for (const spec of existingSpecs) {\n for (const [pkg, name] of packageToName) {\n if (spec.includes(pkg)) {\n out.push(name);\n break;\n }\n }\n }\n return out;\n}\n\n/**\n * Build the `--mcp` spec string for a catalog entry. Same format\n * `mcpCommandFor` produces for `reasonix mcp list`, minus the leading\n * `--mcp \"...\"` wrapper — we store the inner spec directly.\n */\nexport function buildSpec(name: string, argsByName: Record<string, string>): string {\n const entry = CATALOG_BY_NAME.get(name);\n if (!entry) return name;\n const userArg = entry.userArgs ? argsByName[name] : undefined;\n const tail = userArg ? ` ${quoteIfNeeded(userArg)}` : \"\";\n return `${entry.name}=npx -y ${entry.package}${tail}`;\n}\n\nfunction quoteIfNeeded(s: string): string {\n // Escape backslashes BEFORE quotes — otherwise a trailing `\\` in the\n // input would consume the closing quote when a downstream parser\n // un-escapes the output (CodeQL js/incomplete-sanitization).\n return /\\s|\"/.test(s) ? `\"${s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"` : s;\n}\n",null],"mappings":"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","names":["import_react","React","import_react","React","entry","React"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
import {
|
|
4
|
+
renderDashboard,
|
|
5
|
+
statsCommand
|
|
6
|
+
} from "./chunk-CWZKQ5FE.js";
|
|
7
|
+
import "./chunk-R3CTO2HM.js";
|
|
8
|
+
import "./chunk-ZZYBBX5N.js";
|
|
9
|
+
import "./chunk-CGDR2ELH.js";
|
|
10
|
+
import "./chunk-AVFXO2EZ.js";
|
|
11
|
+
import "./chunk-TUK7OWJA.js";
|
|
12
|
+
export {
|
|
13
|
+
renderDashboard,
|
|
14
|
+
statsCommand
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=stats-DPUBZNVX.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
import {
|
|
4
|
+
MANUAL_UPDATE_COMMANDS,
|
|
5
|
+
planUpdate,
|
|
6
|
+
updateCommand
|
|
7
|
+
} from "./chunk-SZ5XES2N.js";
|
|
8
|
+
import "./chunk-XXC2BYTV.js";
|
|
9
|
+
import "./chunk-TUK7OWJA.js";
|
|
10
|
+
export {
|
|
11
|
+
MANUAL_UPDATE_COMMANDS,
|
|
12
|
+
planUpdate,
|
|
13
|
+
updateCommand
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=update-6ITLPRDV.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
|
|
3
|
+
import "./chunk-OPFUUYHL.js";
|
|
4
|
+
import "./chunk-WK3UFQY3.js";
|
|
5
|
+
import "./chunk-C53JQES5.js";
|
|
6
|
+
import "./chunk-XSU4QVFW.js";
|
|
7
|
+
import "./chunk-JNAQYELD.js";
|
|
8
|
+
import "./chunk-6OWJV3YW.js";
|
|
9
|
+
import "./chunk-V26WPN3J.js";
|
|
10
|
+
import "./chunk-25T6CVUP.js";
|
|
11
|
+
import "./chunk-2UQP6H6T.js";
|
|
12
|
+
import "./chunk-RDRC3XDT.js";
|
|
13
|
+
import "./chunk-TEUDEGX2.js";
|
|
14
|
+
import "./chunk-7CIGMZT3.js";
|
|
15
|
+
import "./chunk-S4XVGLRW.js";
|
|
16
|
+
import "./chunk-6PBZN4VI.js";
|
|
17
|
+
import "./chunk-R3CTO2HM.js";
|
|
18
|
+
import "./chunk-ZZYBBX5N.js";
|
|
19
|
+
import "./chunk-CGDR2ELH.js";
|
|
20
|
+
import "./chunk-AVFXO2EZ.js";
|
|
21
|
+
import {
|
|
22
|
+
VERSION
|
|
23
|
+
} from "./chunk-XXC2BYTV.js";
|
|
24
|
+
import "./chunk-TUK7OWJA.js";
|
|
25
|
+
|
|
26
|
+
// src/cli/commands/version.ts
|
|
27
|
+
function versionCommand() {
|
|
28
|
+
console.log(`reasonix ${VERSION}`);
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
versionCommand
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=version-2X3BHVVK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/version.ts"],"sourcesContent":["import { VERSION } from \"../../index.js\";\n\nexport function versionCommand(): void {\n console.log(`reasonix ${VERSION}`);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/version.ts"],"sourcesContent":["import { VERSION } from \"../../index.js\";\n\nexport function versionCommand(): void {\n console.log(`reasonix ${VERSION}`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,SAAS,iBAAuB;AACrC,UAAQ,IAAI,YAAY,OAAO,EAAE;AACnC;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -497,6 +497,8 @@ interface TruncationRepairResult {
|
|
|
497
497
|
repaired: string;
|
|
498
498
|
changed: boolean;
|
|
499
499
|
notes: string[];
|
|
500
|
+
/** True when all repair attempts failed and the result falls back to "{}" — the original args are unrecoverable. */
|
|
501
|
+
fallback: boolean;
|
|
500
502
|
}
|
|
501
503
|
declare function repairTruncatedJson(input: string): TruncationRepairResult;
|
|
502
504
|
|
|
@@ -590,6 +592,7 @@ declare class SessionStats {
|
|
|
590
592
|
cacheMissTokens?: number;
|
|
591
593
|
lastPromptTokens?: number;
|
|
592
594
|
}): void;
|
|
595
|
+
reset(): void;
|
|
593
596
|
record(turn: number, model: string, usage: Usage): TurnStats;
|
|
594
597
|
get totalCost(): number;
|
|
595
598
|
get totalClaudeEquivalent(): number;
|
|
@@ -606,7 +609,9 @@ type EventRole = "assistant_delta" | "assistant_final"
|
|
|
606
609
|
/** Pre-dispatch ping so the TUI can show a spinner during long tool awaits. */
|
|
607
610
|
| "tool_start" | "tool" | "done" | "error" | "warning"
|
|
608
611
|
/** Transient indicator for silent phases; UI clears on next primary event. */
|
|
609
|
-
| "status"
|
|
612
|
+
| "status"
|
|
613
|
+
/** Mid-turn steer injected as a user utterance without aborting the current turn. */
|
|
614
|
+
| "steer";
|
|
610
615
|
interface LoopEvent {
|
|
611
616
|
turn: number;
|
|
612
617
|
role: EventRole;
|
|
@@ -754,7 +759,6 @@ interface CacheFirstLoopOptions {
|
|
|
754
759
|
prefix: ImmutablePrefix;
|
|
755
760
|
tools?: ToolRegistry;
|
|
756
761
|
model?: string;
|
|
757
|
-
maxToolIters?: number;
|
|
758
762
|
stream?: boolean;
|
|
759
763
|
reasoningEffort?: "high" | "max";
|
|
760
764
|
autoEscalate?: boolean;
|
|
@@ -784,7 +788,6 @@ declare class CacheFirstLoop {
|
|
|
784
788
|
readonly client: DeepSeekClient;
|
|
785
789
|
readonly prefix: ImmutablePrefix;
|
|
786
790
|
readonly tools: ToolRegistry;
|
|
787
|
-
readonly maxToolIters: number;
|
|
788
791
|
readonly log: AppendOnlyLog;
|
|
789
792
|
readonly scratch: VolatileScratch;
|
|
790
793
|
readonly stats: SessionStats;
|
|
@@ -810,13 +813,20 @@ declare class CacheFirstLoop {
|
|
|
810
813
|
private _turnAbort;
|
|
811
814
|
/** Authoritative running-id set — UI cards consult this instead of trusting end-event delivery. Insert at dispatch entry, delete in finally. */
|
|
812
815
|
private readonly _inflight;
|
|
816
|
+
/** Typeahead steer message set by the UI; step() consumes it at the next iter boundary. */
|
|
817
|
+
private _steer;
|
|
818
|
+
/** Set true when a steer was consumed this turn; cleared on next step() entry. */
|
|
819
|
+
private _steerConsumed;
|
|
820
|
+
/** UI calls this to inject a mid-turn steer message without aborting the current turn.
|
|
821
|
+
* New text resets steerConsumed — a fresh steer hasn't been consumed yet. */
|
|
822
|
+
steer(text: string | null): void;
|
|
823
|
+
/** True when a steer was consumed this turn (UI gate to avoid double-submit). */
|
|
824
|
+
get steerConsumed(): boolean;
|
|
813
825
|
private _proArmedForNextTurn;
|
|
814
826
|
private _escalateThisTurn;
|
|
815
827
|
private readonly _turnFailures;
|
|
816
|
-
private readonly _readOnlyLoop;
|
|
817
828
|
private _turnSelfCorrected;
|
|
818
829
|
private _foldedThisTurn;
|
|
819
|
-
private _toolDispatchesThisStep;
|
|
820
830
|
private context;
|
|
821
831
|
/** Subscribe API so UI hooks can derive `running` from finally-guaranteed insertions. */
|
|
822
832
|
get inflight(): InflightSet;
|
|
@@ -840,6 +850,13 @@ declare class CacheFirstLoop {
|
|
|
840
850
|
archived: string | null;
|
|
841
851
|
systemRebuilt: boolean;
|
|
842
852
|
};
|
|
853
|
+
/** `/cwd` follow-through — archives the previous session, drops in-memory state, repoints sessionName, and rebuilds the system prompt against whatever the rebuilder closure now resolves (the caller is expected to have already updated the root the closure reads). */
|
|
854
|
+
switchWorkspace(opts: {
|
|
855
|
+
sessionName: string;
|
|
856
|
+
}): {
|
|
857
|
+
dropped: number;
|
|
858
|
+
archived: string | null;
|
|
859
|
+
};
|
|
843
860
|
configure(opts: ReconfigurableOptions): void;
|
|
844
861
|
/** `null` disables the cap; any change re-arms the 80% warning. */
|
|
845
862
|
setBudget(usd: number | null): void;
|
|
@@ -856,8 +873,6 @@ declare class CacheFirstLoop {
|
|
|
856
873
|
private modelForCurrentCall;
|
|
857
874
|
/** Returns true ONLY on the tipping call — caller surfaces a one-shot warning. */
|
|
858
875
|
private noteToolFailureSignal;
|
|
859
|
-
/** Returns true ONLY on the call where the read-only streak crosses the threshold (#681). */
|
|
860
|
-
private noteReadOnlyToolCall;
|
|
861
876
|
/** A call counts as mutating when its definition reports `readOnly !== true` and any dynamic `readOnlyCheck` doesn't override that for these args. */
|
|
862
877
|
private isMutating;
|
|
863
878
|
private runOneToolCall;
|
|
@@ -1038,6 +1053,31 @@ interface IndexUserConfig {
|
|
|
1038
1053
|
maxFileBytes?: number;
|
|
1039
1054
|
}
|
|
1040
1055
|
|
|
1056
|
+
/** Plain http:// stays HTTP+SSE for back-compat; Streamable HTTP is opt-in via the `streamable+` URL prefix. */
|
|
1057
|
+
interface StdioMcpSpec {
|
|
1058
|
+
transport: "stdio";
|
|
1059
|
+
/** Namespace prefix applied to each registered tool, or null if anonymous. */
|
|
1060
|
+
name: string | null;
|
|
1061
|
+
/** Argv[0]. */
|
|
1062
|
+
command: string;
|
|
1063
|
+
/** Remaining argv. */
|
|
1064
|
+
args: string[];
|
|
1065
|
+
}
|
|
1066
|
+
interface SseMcpSpec {
|
|
1067
|
+
transport: "sse";
|
|
1068
|
+
name: string | null;
|
|
1069
|
+
/** Fully qualified SSE endpoint URL. */
|
|
1070
|
+
url: string;
|
|
1071
|
+
}
|
|
1072
|
+
interface StreamableHttpMcpSpec {
|
|
1073
|
+
transport: "streamable-http";
|
|
1074
|
+
name: string | null;
|
|
1075
|
+
/** Fully qualified Streamable HTTP endpoint URL (no `streamable+` prefix). */
|
|
1076
|
+
url: string;
|
|
1077
|
+
}
|
|
1078
|
+
type McpSpec = StdioMcpSpec | SseMcpSpec | StreamableHttpMcpSpec;
|
|
1079
|
+
declare function parseMcpSpec(input: string): McpSpec;
|
|
1080
|
+
|
|
1041
1081
|
/** Library reads only DEEPSEEK_API_KEY from env; the CLI bridges config.json → env var. */
|
|
1042
1082
|
|
|
1043
1083
|
/** Legacy `fast|smart|max` kept for back-compat with existing config.json files. */
|
|
@@ -1061,6 +1101,21 @@ interface SemanticEmbeddingUserConfig {
|
|
|
1061
1101
|
ollama?: OllamaEmbeddingUserConfig;
|
|
1062
1102
|
openaiCompat?: OpenAICompatEmbeddingUserConfig;
|
|
1063
1103
|
}
|
|
1104
|
+
interface McpServerConfig {
|
|
1105
|
+
command?: string;
|
|
1106
|
+
args?: string[];
|
|
1107
|
+
env?: Record<string, string>;
|
|
1108
|
+
transport?: "stdio" | "sse" | "streamable-http";
|
|
1109
|
+
url?: string;
|
|
1110
|
+
headers?: Record<string, string>;
|
|
1111
|
+
disabled?: boolean;
|
|
1112
|
+
}
|
|
1113
|
+
interface QQBotConfig {
|
|
1114
|
+
appId?: string;
|
|
1115
|
+
appSecret?: string;
|
|
1116
|
+
sandbox?: boolean;
|
|
1117
|
+
enabled?: boolean;
|
|
1118
|
+
}
|
|
1064
1119
|
interface ReasonixConfig {
|
|
1065
1120
|
apiKey?: string;
|
|
1066
1121
|
baseUrl?: string;
|
|
@@ -1069,11 +1124,15 @@ interface ReasonixConfig {
|
|
|
1069
1124
|
editMode?: EditMode;
|
|
1070
1125
|
editModeHintShown?: boolean;
|
|
1071
1126
|
mouseClipboardHintShown?: boolean;
|
|
1127
|
+
/** When false, skip the boot splash animation and show the main UI immediately. Default true. */
|
|
1128
|
+
banner?: boolean;
|
|
1072
1129
|
reasoningEffort?: ReasoningEffort;
|
|
1073
1130
|
/** Default workspace root for the desktop client. CLI uses cwd. */
|
|
1074
1131
|
workspaceDir?: string;
|
|
1075
1132
|
/** Last N workspace paths the desktop client has opened, most recent first. */
|
|
1076
1133
|
recentWorkspaces?: string[];
|
|
1134
|
+
/** Desktop only — workspace dir per open tab in tab order, persisted so restart restores every tab (issue #933). Empty/absent → boot with a single default tab. */
|
|
1135
|
+
desktopOpenTabs?: string[];
|
|
1077
1136
|
/** Desktop only — `openWith` value for clicking file links. Empty/undefined = OS default app. Examples: "code", "cursor", "C:\\path\\to\\editor.exe". */
|
|
1078
1137
|
editor?: string;
|
|
1079
1138
|
theme?: ThemeName | "auto";
|
|
@@ -1083,16 +1142,24 @@ interface ReasonixConfig {
|
|
|
1083
1142
|
mcpDisabled?: string[];
|
|
1084
1143
|
/** Env overlay per MCP server name (matches the `name=` prefix of the spec). Stdio transports merge this over process.env; SSE/HTTP ignore it. */
|
|
1085
1144
|
mcpEnv?: Record<string, Record<string, string>>;
|
|
1145
|
+
/** Canonical MCP server configuration — merges with and overrides legacy `mcp`/`mcpEnv`/`mcpDisabled`. */
|
|
1146
|
+
mcpServers?: Record<string, McpServerConfig>;
|
|
1086
1147
|
session?: string | null;
|
|
1087
1148
|
setupCompleted?: boolean;
|
|
1088
1149
|
search?: boolean;
|
|
1089
|
-
/** Web search engine backend: "mojeek" (default, scrapes Mojeek)
|
|
1090
|
-
webSearchEngine?: "mojeek" | "searxng";
|
|
1150
|
+
/** Web search engine backend: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), or "metaso" (Metaso API). */
|
|
1151
|
+
webSearchEngine?: "mojeek" | "searxng" | "metaso";
|
|
1091
1152
|
/** Base URL for SearXNG instance (default http://localhost:8080). */
|
|
1092
1153
|
webSearchEndpoint?: string;
|
|
1154
|
+
/** Metaso API key. Falls back to METASO_API_KEY env var, then a built-in default. */
|
|
1155
|
+
metasoApiKey?: string;
|
|
1093
1156
|
dashboard?: {
|
|
1094
1157
|
/** Pin the embedded dashboard to a fixed port — required for stable SSH tunnels. 0/absent → ephemeral. */
|
|
1095
1158
|
port?: number;
|
|
1159
|
+
/** Bind address (#968). Defaults to 127.0.0.1 (loopback only). Set to 0.0.0.0 / :: / a LAN IP to expose to other devices; the URL token is then the only auth, so keep it secret. */
|
|
1160
|
+
host?: string;
|
|
1161
|
+
/** Stable URL token (#968). If unset, a fresh token is minted each boot. Min 16 chars enforced at load time. */
|
|
1162
|
+
token?: string;
|
|
1096
1163
|
};
|
|
1097
1164
|
escalation?: {
|
|
1098
1165
|
/** Per-turn repair/error signal count required to escalate flash→pro. Defaults to 3. Out-of-range → default. */
|
|
@@ -1104,6 +1171,7 @@ interface ReasonixConfig {
|
|
|
1104
1171
|
showSessionCost?: boolean;
|
|
1105
1172
|
showTurnCost?: boolean;
|
|
1106
1173
|
showCacheHit?: boolean;
|
|
1174
|
+
showCtxUsage?: boolean;
|
|
1107
1175
|
showVersion?: boolean;
|
|
1108
1176
|
showFeedbackHint?: boolean;
|
|
1109
1177
|
};
|
|
@@ -1114,12 +1182,25 @@ interface ReasonixConfig {
|
|
|
1114
1182
|
pathAllowed?: string[];
|
|
1115
1183
|
};
|
|
1116
1184
|
};
|
|
1185
|
+
/** Issue #259 — user-configurable sensitive-path prefixes and filename patterns.
|
|
1186
|
+
* Commands touching these paths are demoted to the confirm gate even when allowlisted. */
|
|
1187
|
+
sensitivePaths?: {
|
|
1188
|
+
/** Path prefixes (tilde-relative or absolute) that trigger confirmation. */
|
|
1189
|
+
prefixes?: string[];
|
|
1190
|
+
/** Glob-style filename patterns (matched against basename, case-insensitive). */
|
|
1191
|
+
patterns?: string[];
|
|
1192
|
+
};
|
|
1117
1193
|
index?: IndexUserConfig;
|
|
1118
1194
|
semantic?: SemanticEmbeddingUserConfig;
|
|
1195
|
+
skills?: {
|
|
1196
|
+
paths?: string[];
|
|
1197
|
+
};
|
|
1119
1198
|
/** User-declared extensions to the built-in memory types (#709). Unknown types round-trip even without a declaration; declaring one lets you attach a default priority + lifecycle. */
|
|
1120
1199
|
memory?: {
|
|
1121
1200
|
customTypes?: CustomMemoryTypeConfig[];
|
|
1122
1201
|
};
|
|
1202
|
+
/** QQ Bot configuration */
|
|
1203
|
+
qq?: QQBotConfig;
|
|
1123
1204
|
}
|
|
1124
1205
|
interface CustomMemoryTypeConfig {
|
|
1125
1206
|
name: string;
|
|
@@ -1127,6 +1208,7 @@ interface CustomMemoryTypeConfig {
|
|
|
1127
1208
|
priority?: "low" | "medium" | "high";
|
|
1128
1209
|
expires?: "project_end";
|
|
1129
1210
|
}
|
|
1211
|
+
declare function loadMetasoApiKey(path?: string): string;
|
|
1130
1212
|
declare function defaultConfigPath(): string;
|
|
1131
1213
|
declare function readConfig(path?: string): ReasonixConfig;
|
|
1132
1214
|
declare function writeConfig(cfg: ReasonixConfig, path?: string): void;
|
|
@@ -1217,7 +1299,10 @@ declare function applyUserMemory(basePrompt: string, opts?: {
|
|
|
1217
1299
|
projectRoot?: string;
|
|
1218
1300
|
cfg?: ReasonixConfig;
|
|
1219
1301
|
}): string;
|
|
1220
|
-
declare function applyMemoryStack(basePrompt: string, rootDir: string
|
|
1302
|
+
declare function applyMemoryStack(basePrompt: string, rootDir: string, opts?: {
|
|
1303
|
+
homeDir?: string;
|
|
1304
|
+
cfg?: ReasonixConfig;
|
|
1305
|
+
}): string;
|
|
1221
1306
|
|
|
1222
1307
|
/** Native FS tools — sandbox enforced here, not delegated. `edit_file` takes a single SEARCH/REPLACE string. */
|
|
1223
1308
|
|
|
@@ -1226,8 +1311,8 @@ interface FilesystemToolsOptions {
|
|
|
1226
1311
|
rootDir: string;
|
|
1227
1312
|
/** false → register only read-side tools. Default true. */
|
|
1228
1313
|
allowWriting?: boolean;
|
|
1229
|
-
/**
|
|
1230
|
-
|
|
1314
|
+
/** Files at or under this size get full content; larger go to outline mode. Default 512 KiB. */
|
|
1315
|
+
outlineThresholdBytes?: number;
|
|
1231
1316
|
/** Cap on total bytes from listing/grep tools — bounds tree-as-one-string accidents. */
|
|
1232
1317
|
maxListBytes?: number;
|
|
1233
1318
|
}
|
|
@@ -1351,20 +1436,87 @@ interface SubagentEvent {
|
|
|
1351
1436
|
interface SubagentSink {
|
|
1352
1437
|
current: ((ev: SubagentEvent) => void) | null;
|
|
1353
1438
|
}
|
|
1439
|
+
interface SubagentResult {
|
|
1440
|
+
success: boolean;
|
|
1441
|
+
output: string;
|
|
1442
|
+
error?: string;
|
|
1443
|
+
turns: number;
|
|
1444
|
+
toolIters: number;
|
|
1445
|
+
elapsedMs: number;
|
|
1446
|
+
costUsd: number;
|
|
1447
|
+
model: string;
|
|
1448
|
+
skillName?: string;
|
|
1449
|
+
/** Zero-filled when no API calls landed so consumers always see a valid shape. */
|
|
1450
|
+
usage: Usage;
|
|
1451
|
+
/** True when the child terminated via forceSummaryAfterIterLimit (storm-breaker / context-guard) — `output` carries the partial synthesis the model managed to produce; not a full answer. User-abort forced summaries do NOT set this (their content is a UX placeholder, routed to `error`). */
|
|
1452
|
+
forcedSummary?: boolean;
|
|
1453
|
+
}
|
|
1354
1454
|
interface SubagentToolOptions {
|
|
1355
1455
|
client: DeepSeekClient;
|
|
1356
1456
|
defaultSystem?: string;
|
|
1357
1457
|
projectRoot?: string;
|
|
1358
1458
|
defaultModel?: string;
|
|
1359
|
-
maxToolIters?: number;
|
|
1360
1459
|
maxResultChars?: number;
|
|
1361
1460
|
sink?: SubagentSink;
|
|
1461
|
+
/** Fires once per spawn, after `spawnSubagent` returns and before its result is formatted for the parent. Bind a `SubagentTelemetry.record` here for automatic distillation capture. */
|
|
1462
|
+
onSpawnComplete?: (result: SubagentResult) => void;
|
|
1362
1463
|
}
|
|
1363
1464
|
/** Library surface only — `reasonix code` uses Skills `runAs: subagent` as the user-facing path. */
|
|
1364
1465
|
declare function registerSubagentTool(parentRegistry: ToolRegistry, opts: SubagentToolOptions): ToolRegistry;
|
|
1365
1466
|
/** Plan-mode state propagates — a subagent spawned under `/plan` MUST NOT escape it. */
|
|
1366
1467
|
declare function forkRegistryExcluding(parent: ToolRegistry, exclude: ReadonlySet<string>): ToolRegistry;
|
|
1367
1468
|
|
|
1469
|
+
/** Distillation telemetry — measures parent-log growth avoided per spawn. */
|
|
1470
|
+
/** Minimum shape `computeSpawnDistillation` needs. `SubagentResult` matches structurally; declaring a local interface avoids a stats ↔ subagent ↔ loop import cycle. */
|
|
1471
|
+
interface SubagentResultLike {
|
|
1472
|
+
output: string;
|
|
1473
|
+
costUsd: number;
|
|
1474
|
+
usage: {
|
|
1475
|
+
completionTokens: number;
|
|
1476
|
+
};
|
|
1477
|
+
}
|
|
1478
|
+
interface SpawnDistillation {
|
|
1479
|
+
completionTokens: number;
|
|
1480
|
+
outputTokens: number;
|
|
1481
|
+
/** `completionTokens − outputTokens`, clamped to 0. Lower bound — ignores tool-result tokens that would also have landed in the parent log inline. */
|
|
1482
|
+
savingsTokens: number;
|
|
1483
|
+
/** `outputTokens / completionTokens`; 1 when completion is 0. Lower is more distilled; ≥1 means writes / passthrough. */
|
|
1484
|
+
compressionRatio: number;
|
|
1485
|
+
/** True iff `output.trim().length > 0`. */
|
|
1486
|
+
hasOutput: boolean;
|
|
1487
|
+
costUsd: number;
|
|
1488
|
+
}
|
|
1489
|
+
declare function computeSpawnDistillation(result: SubagentResultLike): SpawnDistillation;
|
|
1490
|
+
interface SubagentSessionSummary {
|
|
1491
|
+
spawnCount: number;
|
|
1492
|
+
usefulSpawnCount: number;
|
|
1493
|
+
/** `usefulSpawnCount / spawnCount`; 0 when no spawns. */
|
|
1494
|
+
successRate: number;
|
|
1495
|
+
totalCompletionTokens: number;
|
|
1496
|
+
totalOutputTokens: number;
|
|
1497
|
+
totalSavingsTokens: number;
|
|
1498
|
+
/** Weighted by completion tokens — fair vs. naive mean of ratios. */
|
|
1499
|
+
aggregateCompressionRatio: number;
|
|
1500
|
+
totalCostUsd: number;
|
|
1501
|
+
}
|
|
1502
|
+
declare function summarizeSubagentSession(spawns: SpawnDistillation[]): SubagentSessionSummary;
|
|
1503
|
+
declare const DEFAULT_SPAWN_STORM_THRESHOLD = 3;
|
|
1504
|
+
declare function countSpawnStorms(spawnsByTurn: ReadonlyArray<ReadonlyArray<SpawnDistillation>>, threshold?: number): number;
|
|
1505
|
+
/** Live collector — append every spawn result, query aggregates whenever. Bind `record` and pass as `onSpawnComplete` to `registerSubagentTool` for automatic capture. */
|
|
1506
|
+
declare class SubagentTelemetry {
|
|
1507
|
+
private readonly _spawns;
|
|
1508
|
+
private readonly _byTurn;
|
|
1509
|
+
private _currentTurn;
|
|
1510
|
+
/** Bound for ergonomic use as a callback. */
|
|
1511
|
+
readonly record: (result: SubagentResultLike) => SpawnDistillation;
|
|
1512
|
+
/** Mark the start of a new parent turn so subsequent records group into a new bucket — call from the parent loop when its turn counter advances. */
|
|
1513
|
+
startTurn(turn: number): void;
|
|
1514
|
+
get spawns(): readonly SpawnDistillation[];
|
|
1515
|
+
get spawnsByTurn(): ReadonlyArray<ReadonlyArray<SpawnDistillation>>;
|
|
1516
|
+
get summary(): SubagentSessionSummary;
|
|
1517
|
+
stormCount(threshold?: number): number;
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1368
1520
|
/** Background process registry for never-exiting commands; ready-signal detection short-circuits the startup wait. */
|
|
1369
1521
|
interface JobStartOptions {
|
|
1370
1522
|
/** Absolute path to cwd for the spawned child. */
|
|
@@ -1483,8 +1635,12 @@ declare function quoteForCmdExe(arg: string): string;
|
|
|
1483
1635
|
declare function tokenizeCommand(cmd: string): string[];
|
|
1484
1636
|
/** Up-front detection — without it, `dir | findstr foo` quotes `|` literal and pipe silently fails. */
|
|
1485
1637
|
declare function detectShellOperator(cmd: string): string | null;
|
|
1486
|
-
/** Allowlist match on leading argv tokens; demoted by `RISKY_ARGS` when a destructive flag appears in the tail
|
|
1487
|
-
|
|
1638
|
+
/** Allowlist match on leading argv tokens; demoted by `RISKY_ARGS` when a destructive flag appears in the tail,
|
|
1639
|
+
* or by `SENSITIVE_PATHS` when a path argument targets a sensitive location (#259). */
|
|
1640
|
+
declare function isAllowed(cmd: string, extra?: readonly string[], projectRoot?: string, sensitivePathConfig?: {
|
|
1641
|
+
prefixes?: readonly string[];
|
|
1642
|
+
patterns?: readonly string[];
|
|
1643
|
+
}): boolean;
|
|
1488
1644
|
|
|
1489
1645
|
/** cwd pinned to root; non-allowlisted commands throw to a UI confirm gate; spawn is `shell: false`, tokenized argv only. */
|
|
1490
1646
|
|
|
@@ -1499,6 +1655,12 @@ interface ShellToolsOptions {
|
|
|
1499
1655
|
/** Getter form lets `editMode === "yolo"` flip mid-session without re-registering tools. */
|
|
1500
1656
|
allowAll?: boolean | (() => boolean);
|
|
1501
1657
|
jobs?: JobRegistry;
|
|
1658
|
+
/** Fired after `run_background` / `stop_job` mutate the registry — used by the desktop popover for near-real-time updates without polling. */
|
|
1659
|
+
onJobsChanged?: () => void;
|
|
1660
|
+
sensitivePaths?: {
|
|
1661
|
+
prefixes?: readonly string[];
|
|
1662
|
+
patterns?: readonly string[];
|
|
1663
|
+
};
|
|
1502
1664
|
}
|
|
1503
1665
|
/** Error thrown by `run_command` when the command isn't allowlisted. */
|
|
1504
1666
|
declare class NeedsConfirmationError extends Error {
|
|
@@ -1532,8 +1694,8 @@ interface WebFetchOptions {
|
|
|
1532
1694
|
interface WebSearchOptions {
|
|
1533
1695
|
topK?: number;
|
|
1534
1696
|
signal?: AbortSignal;
|
|
1535
|
-
/** Backend engine: "mojeek" (scrapes Mojeek HTML)
|
|
1536
|
-
engine?: "mojeek" | "searxng";
|
|
1697
|
+
/** Backend engine: "mojeek" (scrapes Mojeek HTML), "searxng" (self-hosted SearXNG JSON API), or "metaso" (Metaso API). */
|
|
1698
|
+
engine?: "mojeek" | "searxng" | "metaso";
|
|
1537
1699
|
/** Base URL for SearXNG. Default http://localhost:8080. */
|
|
1538
1700
|
endpoint?: string;
|
|
1539
1701
|
}
|
|
@@ -1550,8 +1712,8 @@ interface WebToolsOptions {
|
|
|
1550
1712
|
defaultTopK?: number;
|
|
1551
1713
|
/** Byte cap for `web_fetch` extracted text. */
|
|
1552
1714
|
maxFetchChars?: number;
|
|
1553
|
-
/** Backend engine: "mojeek" (default, scrapes Mojeek)
|
|
1554
|
-
webSearchEngine?: "mojeek" | "searxng";
|
|
1715
|
+
/** Backend engine: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), or "metaso" (Metaso API). */
|
|
1716
|
+
webSearchEngine?: "mojeek" | "searxng" | "metaso";
|
|
1555
1717
|
/** Base URL for SearXNG (default http://localhost:8080). */
|
|
1556
1718
|
webSearchEndpoint?: string;
|
|
1557
1719
|
}
|
|
@@ -2111,31 +2273,6 @@ declare function truncateForModel(s: string, maxChars: number): string;
|
|
|
2111
2273
|
/** Never tokenizes full input — pathological repetitive text (`AAAA…`) costs 30s+ on the pure-TS BPE port. */
|
|
2112
2274
|
declare function truncateForModelByTokens(s: string, maxTokens: number): string;
|
|
2113
2275
|
|
|
2114
|
-
/** Plain http:// stays HTTP+SSE for back-compat; Streamable HTTP is opt-in via the `streamable+` URL prefix. */
|
|
2115
|
-
interface StdioMcpSpec {
|
|
2116
|
-
transport: "stdio";
|
|
2117
|
-
/** Namespace prefix applied to each registered tool, or null if anonymous. */
|
|
2118
|
-
name: string | null;
|
|
2119
|
-
/** Argv[0]. */
|
|
2120
|
-
command: string;
|
|
2121
|
-
/** Remaining argv. */
|
|
2122
|
-
args: string[];
|
|
2123
|
-
}
|
|
2124
|
-
interface SseMcpSpec {
|
|
2125
|
-
transport: "sse";
|
|
2126
|
-
name: string | null;
|
|
2127
|
-
/** Fully qualified SSE endpoint URL. */
|
|
2128
|
-
url: string;
|
|
2129
|
-
}
|
|
2130
|
-
interface StreamableHttpMcpSpec {
|
|
2131
|
-
transport: "streamable-http";
|
|
2132
|
-
name: string | null;
|
|
2133
|
-
/** Fully qualified Streamable HTTP endpoint URL (no `streamable+` prefix). */
|
|
2134
|
-
url: string;
|
|
2135
|
-
}
|
|
2136
|
-
type McpSpec = StdioMcpSpec | SseMcpSpec | StreamableHttpMcpSpec;
|
|
2137
|
-
declare function parseMcpSpec(input: string): McpSpec;
|
|
2138
|
-
|
|
2139
2276
|
/** Unsupported list methods surface as `{supported:false}` instead of throwing — minimal servers still get a clean report. */
|
|
2140
2277
|
|
|
2141
2278
|
interface InspectionReport {
|
|
@@ -2367,4 +2504,4 @@ declare function aggregateUsage(records: UsageRecord[], opts?: AggregateOptions)
|
|
|
2367
2504
|
/** File-size helper for the stats header — "1.2 MB" etc. Returns "" if missing. */
|
|
2368
2505
|
declare function formatLogSize(path?: string): string;
|
|
2369
2506
|
|
|
2370
|
-
export { AT_MENTION_PATTERN, AT_PICKER_PREFIX, type AggregateOptions, AppendOnlyLog, type AppendUsageInput, type ApplyResult, type ApplyStatus, type AtMentionExpansion, type AtMentionOptions, type BridgeOptions, type BridgeResult, CODE_SYSTEM_PROMPT, CacheFirstLoop, type CacheFirstLoopOptions, type CallToolResult, type ChatMessage, type ChatResponse, type ChoiceOption, ChoiceRequestedError, type ChoiceToolOptions, type CodeSystemPromptOptions, DEFAULT_AT_DIR_MAX_ENTRIES, DEFAULT_AT_MENTION_MAX_BYTES, DEFAULT_MAX_RESULT_CHARS, DEFAULT_MAX_RESULT_TOKENS, DEFAULT_PICKER_IGNORE_DIRS, DeepSeekClient, type DeepSeekClientOptions, type RenderOptions as DiffRenderOptions, type DiffReport, type DiffSide, type DirEntry, type EditBlock, type EditSnapshot, type EventRole, type FileWithStats, type FilesystemToolsOptions, type FlattenDecision, type FlattenOptions, type GetLatestVersionOptions, type GetPromptResult, HOOK_EVENTS, HOOK_SETTINGS_DIRNAME, HOOK_SETTINGS_FILENAME, type HookConfig, type HookEvent, type HookOutcome, type HookPayload, type HookReport, type HookScope, type HookSettings, type HookSpawnInput, type HookSpawnResult, type HookSpawner, ImmutablePrefix, type ImmutablePrefixOptions, type InitializeResult, type InspectionReport, type InstallSource, type JSONSchema, type JsonRpcMessage, type JsonRpcRequest, type JsonRpcResponse, LATEST_CACHE_TTL_MS, LATEST_FETCH_TIMEOUT_MS, type ListDirectoryOptions, type ListFilesOptions, type ListPromptsResult, type ListResourcesResult, type ListToolsResult, type LoadHookSettingsOptions, type LoopEvent, MCP_PROTOCOL_VERSION, MEMORY_INDEX_FILE, MEMORY_INDEX_MAX_CHARS, McpClient, type McpClientOptions, type McpContentBlock, type McpProgressHandler, type McpProgressInfo, type McpPrompt, type McpPromptArgument, type McpPromptMessage, type McpPromptResourceBlock, type McpResource, type McpResourceContents, type McpResourceContentsBlob, type McpResourceContentsText, type McpSpec, type McpTool, type McpToolSchema, type McpTransport, type MemoryEntry, type MemoryScope, MemoryStore, type MemoryStoreOptions, type MemoryToolsOptions, type MemoryType, type WriteInput as MemoryWriteInput, NeedsConfirmationError, PROJECT_MEMORY_FILE, PROJECT_MEMORY_FILES, PROJECT_MEMORY_MAX_CHARS, type PageContent, type ParsedAtQuery, type PickerCandidate, PlanProposedError, PlanRevisionProposedError, type PlanStep, type PlanStepRisk, type PlanToolOptions, type ProgressNotificationParams, type ProjectMemory, type RankPickerOptions, type ReadResourceResult, type ReadTranscriptResult, type ReasonixConfig, type ReconfigurableOptions, type RepairReport, type ReplayStats, type ResolvedHook, type RetryInfo, type RetryOptions, type Role, type RunCommandResult, type RunHooksOptions, type ScavengeOptions, type ScavengeResult, type SearchResult, type SectionResult, type SessionInfo, SessionStats, type SessionSummary, type ShellToolsOptions, type SseMcpSpec, SseTransport, type SseTransportOptions, type StdioMcpSpec, StdioTransport, type StdioTransportOptions, type StepCompletion, StormBreaker, type StreamChunk, type StreamWalkOptions, type StreamableHttpMcpSpec, StreamableHttpTransport, type StreamableHttpTransportOptions, type SubagentEvent, type SubagentSink, type SubagentToolOptions, type TodoItem, type TodoStatus, type TodoToolOptions, type ToolCall, type ToolCallContext, ToolCallRepair, type ToolCallRepairOptions, type ToolDefinition, type ToolFunctionSpec, ToolRegistry, type ToolSpec, type TranscriptMeta, type TranscriptRecord, type TruncationRepairResult, type TurnPair, type TurnStats, USER_MEMORY_DIR, Usage, type UsageAggregate, type UsageBucket, type UsageRecord, VERSION, VolatileScratch, type WebFetchOptions, type WebSearchOptions, type WebToolsOptions, aggregateUsage, analyzeSchema, appendSessionMessage, appendUsage, applyEditBlock, applyEditBlocks, applyMemoryStack, applyProjectMemory, applyUserMemory, bridgeMcpTools, bucketCacheHitRatio, bucketSavingsFraction, claudeEquivalentCost, codeSystemPrompt, compareVersions, computeReplayStats, costUsd, decideOutcome, defaultConfigPath, defaultUsageLogPath, deleteSession, detectAtPicker, detectInstallSource, detectNpmInstallPrefix, detectShellOperator, diffTranscripts, expandAtMentions, fetchWithRetry, findProjectMemoryPath, fixToolCallPairing, flattenMcpResult, flattenSchema, forkRegistryExcluding, formatCommandResult, formatHookOutcomeMessage, formatLogSize, formatLoopError, formatSearchResults, getLatestVersion, globalSettingsPath, healLoadedMessages, healLoadedMessagesByTokens, htmlToText, injectPowerShellUtf8, inputCostUsd, inspectMcpServer, isAllowed, isJsonRpcError, isNpxInstall, isPlausibleKey, listDirectory, listFilesSync, listFilesWithStatsAsync, listFilesWithStatsSync, listSessions, loadApiKey, loadBaseUrl, loadDotenv, loadHooks, loadSessionMessages, matchesTool, memoryEnabled, nestArguments, openTranscriptFile, outputCostUsd, parseAtQuery, parseEditBlocks, parseMcpSpec, parseMojeekResults, parseSearxngHtmlResults, parseTranscript, prepareSpawn, projectHash, projectSettingsPath, quoteForCmdExe, rankPickerCandidates, readConfig, readProjectMemory, readTranscript, readUsageLog, recordFromLoopEvent, redactKey, registerChoiceTool, registerFilesystemTools, registerMemoryTools, registerPlanTool, registerShellTools, registerSubagentTool, registerTodoTool, registerWebTools, renderMarkdown as renderDiffMarkdown, renderSummaryTable as renderDiffSummary, repairTruncatedJson, replayFromFile, resolveExecutable, resolveProjectMemoryWritePath, restoreSnapshots, runCommand, runHooks, sanitizeMemoryName, sanitizeName as sanitizeSessionName, saveApiKey, saveBaseUrl, scavengeToolCalls, sessionPath, sessionsDir, similarity, snapshotBeforeEdits, stripHallucinatedToolMarkup, tokenizeCommand, truncateForModel, truncateForModelByTokens, walkFilesStream, webFetch, webSearch, withUtf8Codepage, writeConfig, writeMeta, writeRecord };
|
|
2507
|
+
export { AT_MENTION_PATTERN, AT_PICKER_PREFIX, type AggregateOptions, AppendOnlyLog, type AppendUsageInput, type ApplyResult, type ApplyStatus, type AtMentionExpansion, type AtMentionOptions, type BridgeOptions, type BridgeResult, CODE_SYSTEM_PROMPT, CacheFirstLoop, type CacheFirstLoopOptions, type CallToolResult, type ChatMessage, type ChatResponse, type ChoiceOption, ChoiceRequestedError, type ChoiceToolOptions, type CodeSystemPromptOptions, DEFAULT_AT_DIR_MAX_ENTRIES, DEFAULT_AT_MENTION_MAX_BYTES, DEFAULT_MAX_RESULT_CHARS, DEFAULT_MAX_RESULT_TOKENS, DEFAULT_PICKER_IGNORE_DIRS, DEFAULT_SPAWN_STORM_THRESHOLD, DeepSeekClient, type DeepSeekClientOptions, type RenderOptions as DiffRenderOptions, type DiffReport, type DiffSide, type DirEntry, type EditBlock, type EditSnapshot, type EventRole, type FileWithStats, type FilesystemToolsOptions, type FlattenDecision, type FlattenOptions, type GetLatestVersionOptions, type GetPromptResult, HOOK_EVENTS, HOOK_SETTINGS_DIRNAME, HOOK_SETTINGS_FILENAME, type HookConfig, type HookEvent, type HookOutcome, type HookPayload, type HookReport, type HookScope, type HookSettings, type HookSpawnInput, type HookSpawnResult, type HookSpawner, ImmutablePrefix, type ImmutablePrefixOptions, type InitializeResult, type InspectionReport, type InstallSource, type JSONSchema, type JsonRpcMessage, type JsonRpcRequest, type JsonRpcResponse, LATEST_CACHE_TTL_MS, LATEST_FETCH_TIMEOUT_MS, type ListDirectoryOptions, type ListFilesOptions, type ListPromptsResult, type ListResourcesResult, type ListToolsResult, type LoadHookSettingsOptions, type LoopEvent, MCP_PROTOCOL_VERSION, MEMORY_INDEX_FILE, MEMORY_INDEX_MAX_CHARS, McpClient, type McpClientOptions, type McpContentBlock, type McpProgressHandler, type McpProgressInfo, type McpPrompt, type McpPromptArgument, type McpPromptMessage, type McpPromptResourceBlock, type McpResource, type McpResourceContents, type McpResourceContentsBlob, type McpResourceContentsText, type McpSpec, type McpTool, type McpToolSchema, type McpTransport, type MemoryEntry, type MemoryScope, MemoryStore, type MemoryStoreOptions, type MemoryToolsOptions, type MemoryType, type WriteInput as MemoryWriteInput, NeedsConfirmationError, PROJECT_MEMORY_FILE, PROJECT_MEMORY_FILES, PROJECT_MEMORY_MAX_CHARS, type PageContent, type ParsedAtQuery, type PickerCandidate, PlanProposedError, PlanRevisionProposedError, type PlanStep, type PlanStepRisk, type PlanToolOptions, type ProgressNotificationParams, type ProjectMemory, type RankPickerOptions, type ReadResourceResult, type ReadTranscriptResult, type ReasonixConfig, type ReconfigurableOptions, type RepairReport, type ReplayStats, type ResolvedHook, type RetryInfo, type RetryOptions, type Role, type RunCommandResult, type RunHooksOptions, type ScavengeOptions, type ScavengeResult, type SearchResult, type SectionResult, type SessionInfo, SessionStats, type SessionSummary, type ShellToolsOptions, type SpawnDistillation, type SseMcpSpec, SseTransport, type SseTransportOptions, type StdioMcpSpec, StdioTransport, type StdioTransportOptions, type StepCompletion, StormBreaker, type StreamChunk, type StreamWalkOptions, type StreamableHttpMcpSpec, StreamableHttpTransport, type StreamableHttpTransportOptions, type SubagentEvent, type SubagentResult, type SubagentResultLike, type SubagentSessionSummary, type SubagentSink, SubagentTelemetry, type SubagentToolOptions, type TodoItem, type TodoStatus, type TodoToolOptions, type ToolCall, type ToolCallContext, ToolCallRepair, type ToolCallRepairOptions, type ToolDefinition, type ToolFunctionSpec, ToolRegistry, type ToolSpec, type TranscriptMeta, type TranscriptRecord, type TruncationRepairResult, type TurnPair, type TurnStats, USER_MEMORY_DIR, Usage, type UsageAggregate, type UsageBucket, type UsageRecord, VERSION, VolatileScratch, type WebFetchOptions, type WebSearchOptions, type WebToolsOptions, aggregateUsage, analyzeSchema, appendSessionMessage, appendUsage, applyEditBlock, applyEditBlocks, applyMemoryStack, applyProjectMemory, applyUserMemory, bridgeMcpTools, bucketCacheHitRatio, bucketSavingsFraction, claudeEquivalentCost, codeSystemPrompt, compareVersions, computeReplayStats, computeSpawnDistillation, costUsd, countSpawnStorms, decideOutcome, defaultConfigPath, defaultUsageLogPath, deleteSession, detectAtPicker, detectInstallSource, detectNpmInstallPrefix, detectShellOperator, diffTranscripts, expandAtMentions, fetchWithRetry, findProjectMemoryPath, fixToolCallPairing, flattenMcpResult, flattenSchema, forkRegistryExcluding, formatCommandResult, formatHookOutcomeMessage, formatLogSize, formatLoopError, formatSearchResults, getLatestVersion, globalSettingsPath, healLoadedMessages, healLoadedMessagesByTokens, htmlToText, injectPowerShellUtf8, inputCostUsd, inspectMcpServer, isAllowed, isJsonRpcError, isNpxInstall, isPlausibleKey, listDirectory, listFilesSync, listFilesWithStatsAsync, listFilesWithStatsSync, listSessions, loadApiKey, loadBaseUrl, loadDotenv, loadHooks, loadMetasoApiKey, loadSessionMessages, matchesTool, memoryEnabled, nestArguments, openTranscriptFile, outputCostUsd, parseAtQuery, parseEditBlocks, parseMcpSpec, parseMojeekResults, parseSearxngHtmlResults, parseTranscript, prepareSpawn, projectHash, projectSettingsPath, quoteForCmdExe, rankPickerCandidates, readConfig, readProjectMemory, readTranscript, readUsageLog, recordFromLoopEvent, redactKey, registerChoiceTool, registerFilesystemTools, registerMemoryTools, registerPlanTool, registerShellTools, registerSubagentTool, registerTodoTool, registerWebTools, renderMarkdown as renderDiffMarkdown, renderSummaryTable as renderDiffSummary, repairTruncatedJson, replayFromFile, resolveExecutable, resolveProjectMemoryWritePath, restoreSnapshots, runCommand, runHooks, sanitizeMemoryName, sanitizeName as sanitizeSessionName, saveApiKey, saveBaseUrl, scavengeToolCalls, sessionPath, sessionsDir, similarity, snapshotBeforeEdits, stripHallucinatedToolMarkup, summarizeSubagentSession, tokenizeCommand, truncateForModel, truncateForModelByTokens, walkFilesStream, webFetch, webSearch, withUtf8Codepage, writeConfig, writeMeta, writeRecord };
|