@iowarp/clio-coder 0.3.1 → 0.3.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/CHANGELOG.md +233 -373
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/chunk-2DJ2KNFG.js +2095 -0
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4XUGQOHA.js +797 -0
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
- package/dist/{chunk-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
- package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6SGHMWE3.js +277 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-COU2UHX6.js +400 -0
- package/dist/chunk-DSELYM6W.js +1077 -0
- package/dist/chunk-DUYJ5IO6.js +644 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
- package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/chunk-J7CWMCQD.js +255 -0
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KZWTDYJF.js +217 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
- package/dist/chunk-LW6DSM3M.js +5135 -0
- package/dist/chunk-LWLEKMDQ.js +3482 -0
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
- package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
- package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
- package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/chunk-SRDMMSEP.js +16405 -0
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZK7PACC.js +174 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
- package/dist/chunk-XBXAASKX.js +18 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
- package/dist/chunk-ZWMF7253.js +1882 -0
- package/dist/cli/index.js +62 -54
- package/dist/clio-JOU4FXVA.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
- package/dist/{config-IRUQ7SE4.js → config-XCDVKR23.js} +92 -55
- package/dist/configure-4GAP54ZW.js +42 -0
- package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
- package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
- package/dist/monitor-GE4ID3IA.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
- package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
- package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
- package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
- package/dist/{run-YTPEYQOH.js → run-ZU3QMZPZ.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
- package/dist/terminal-lease-BNAHVHBS.js +395 -0
- package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
- package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
- package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
- package/dist/{upgrade-33G2LMM5.js → upgrade-JQHHPQ4K.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
- package/dist/verify-375KUB3Y.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.js} +74 -34
- package/dist/worker/entry.js +221 -36
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +22 -17
- package/docs/acp.md +168 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +136 -7
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +114 -71
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +174 -46
- package/docs/context-engine.md +29 -6
- package/docs/development-pipeline.md +26 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +13 -5
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +9 -9
- package/docs/fleet-dispatch.md +7 -5
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +34 -27
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +45 -14
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +3 -3
- package/docs/prompt-envelope-and-tools.md +24 -3
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -115
- package/docs/safety-model.md +9 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +1 -1
- package/docs/tool-usage.md +3 -3
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +47 -10
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +19 -22
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +31 -4
- package/src/cli/clio.ts +68 -6
- package/src/cli/config-inspect.ts +28 -22
- package/src/cli/configure.ts +47 -9
- package/src/cli/context-clear.ts +2 -2
- package/src/cli/context-index.ts +21 -23
- package/src/cli/context.ts +13 -8
- package/src/cli/default-target.ts +9 -17
- package/src/cli/docs.ts +11 -5
- package/src/cli/evidence.ts +4 -1
- package/src/cli/extensions.ts +10 -1
- package/src/cli/fleet.ts +47 -6
- package/src/cli/index.ts +55 -26
- package/src/cli/memory.ts +3 -1
- package/src/cli/models.ts +1 -1
- package/src/cli/modes/json-stream.ts +37 -1
- package/src/cli/modes/print.ts +24 -9
- package/src/cli/run.ts +2 -2
- package/src/cli/skills-eval.ts +23 -8
- package/src/cli/skills.ts +19 -4
- package/src/cli/targets.ts +4 -0
- package/src/cli/text-layout.ts +15 -5
- package/src/cli/trace.ts +62 -14
- package/src/cli/upgrade.ts +18 -2
- package/src/cli/usage.ts +10 -3
- package/src/cli/wiki-generate.ts +2 -1
- package/src/core/agent-environment.ts +7 -0
- package/src/core/bash-exec.ts +72 -1
- package/src/core/boot-trace.ts +9 -4
- package/src/core/bus-events.ts +20 -4
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +131 -2
- package/src/core/defaults.ts +39 -5
- package/src/core/domain-loader.ts +12 -5
- package/src/core/git-commit-attribution.ts +387 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/response-schema.ts +1 -1
- package/src/core/safe-exec.ts +13 -1
- package/src/core/settings-layers.ts +155 -21
- package/src/core/skill-activation.ts +1 -1
- package/src/core/startup-timer.ts +3 -3
- package/src/core/state-file-lock.ts +13 -1
- package/src/core/termination.ts +78 -5
- package/src/domains/config/classify.ts +15 -3
- package/src/domains/config/extension.ts +19 -13
- package/src/domains/config/index.ts +10 -0
- package/src/domains/config/keybindings.ts +45 -9
- package/src/domains/context/bootstrap-prompt.ts +1 -1
- package/src/domains/context/bootstrap.ts +111 -18
- package/src/domains/context/clear.ts +16 -11
- package/src/domains/context/clio-md.ts +111 -9
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/indexer.ts +59 -144
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +1 -1
- package/src/domains/context/contract.ts +11 -5
- package/src/domains/context/extension.ts +94 -143
- package/src/domains/context/fingerprint.ts +3 -1
- package/src/domains/context/index.ts +12 -22
- package/src/domains/context/project-metadata.ts +19 -0
- package/src/domains/context/prompt-context.ts +9 -10
- package/src/domains/context/refresh.ts +29 -21
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/wiki/generate.ts +39 -34
- package/src/domains/context/wiki/plan.ts +1 -1
- package/src/domains/context/wiki/prompts.ts +21 -8
- package/src/domains/dispatch/code-step.ts +20 -1
- package/src/domains/dispatch/extension.ts +158 -21
- package/src/domains/dispatch/failure-classification.ts +6 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/orphan-recovery.ts +50 -8
- package/src/domains/dispatch/receipt-integrity.ts +5 -0
- package/src/domains/dispatch/state.ts +31 -6
- package/src/domains/dispatch/transport.ts +2 -1
- package/src/domains/dispatch/types.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +21 -2
- package/src/domains/eval/metrics/context.ts +1 -1
- package/src/domains/eval/types.ts +0 -1
- package/src/domains/evidence/build.ts +41 -1
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +24 -4
- package/src/domains/middleware/hooks-io.ts +12 -0
- package/src/domains/middleware/skills-reminder.ts +30 -15
- package/src/domains/prompts/compiler.ts +142 -84
- package/src/domains/prompts/contract.ts +18 -2
- package/src/domains/prompts/extension.ts +39 -7
- package/src/domains/prompts/fragment-loader.ts +0 -1
- package/src/domains/prompts/fragments/identity/clio.md +2 -4
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
- package/src/domains/prompts/fragments/operating/contract.md +4 -50
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/preload.ts +3 -3
- package/src/domains/providers/auth/api-key.ts +1 -1
- package/src/domains/providers/auth/backend-file.ts +20 -10
- package/src/domains/providers/auth/backend-memory.ts +59 -4
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/oauth.ts +2 -1
- package/src/domains/providers/auth/storage.ts +97 -38
- package/src/domains/providers/capabilities.ts +12 -4
- package/src/domains/providers/contract.ts +15 -4
- package/src/domains/providers/extension.ts +18 -6
- package/src/domains/providers/model-runtime-capabilities.ts +15 -4
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
- package/src/domains/providers/plugins.ts +5 -3
- package/src/domains/providers/probe/fingerprint.ts +25 -5
- package/src/domains/providers/registry.ts +31 -10
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/support.ts +6 -3
- package/src/domains/providers/types/local-model-quirks.ts +7 -9
- package/src/domains/providers/types/runtime-descriptor.ts +12 -1
- package/src/domains/providers/types/target-descriptor.ts +22 -0
- package/src/domains/resources/contract.ts +0 -1
- package/src/domains/resources/extension.ts +1 -3
- package/src/domains/resources/loader.ts +3 -4
- package/src/domains/resources/prompts/loader.ts +16 -2
- package/src/domains/resources/prompts/substitute.ts +1 -65
- package/src/domains/resources/skills/content-hash.ts +2 -0
- package/src/domains/resources/skills/install.ts +17 -0
- package/src/domains/resources/skills/loader.ts +17 -10
- package/src/domains/resources/skills/marketplace.ts +55 -9
- package/src/domains/safety/action-classifier.ts +4 -2
- package/src/domains/safety/audit.ts +8 -2
- package/src/domains/safety/extension.ts +1 -1
- package/src/domains/session/compaction/branch-summary.ts +3 -2
- package/src/domains/session/compaction/cut-point.ts +2 -1
- package/src/domains/session/compaction/tokens.ts +2 -1
- package/src/domains/session/context-ledger.ts +14 -0
- package/src/domains/session/contract.ts +15 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +66 -3
- package/src/domains/session/extension.ts +93 -12
- package/src/domains/session/retry.ts +10 -18
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +207 -13
- package/src/domains/session/tree/active-path.ts +44 -5
- package/src/domains/session/tree/fork.ts +26 -27
- package/src/domains/session/tree/preview.ts +2 -2
- package/src/domains/session/workspace/git-probe.ts +17 -11
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/errors.ts +96 -0
- package/src/engine/acp/server.ts +1728 -146
- package/src/engine/acp/transport.ts +135 -14
- package/src/engine/acp/types.ts +26 -0
- package/src/engine/agent.ts +3 -3
- package/src/engine/ai.ts +32 -27
- package/src/engine/alcf-oauth.ts +26 -19
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/index.ts +3 -7
- package/src/engine/apis/llamacpp-residency.ts +49 -9
- package/src/engine/apis/lmstudio-residency.ts +5 -21
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +24 -3
- package/src/engine/apis/openai-completions.ts +170 -91
- package/src/engine/apis/residency.ts +139 -3
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +16 -12
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +16 -59
- package/src/engine/strip-tokenizer-sentinels.ts +1 -1
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +17 -9
- package/src/engine/types.ts +3 -6
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1 -1
- package/src/engine/worker-tools.ts +9 -4
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +288 -150
- package/src/interactive/application-controller.ts +89 -2
- package/src/interactive/chat-loop.ts +266 -41
- package/src/interactive/chat-panel.ts +715 -278
- package/src/interactive/chat-renderer.ts +306 -85
- package/src/interactive/clio-editor.ts +3 -8
- package/src/interactive/command-fallbacks.ts +2 -2
- package/src/interactive/context-overlay.ts +27 -1
- package/src/interactive/editor-submit.ts +253 -24
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/footer/dashboard.ts +4 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/widgets.ts +42 -22
- package/src/interactive/footer-panel.ts +8 -3
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +203 -17
- package/src/interactive/interactive-event-projection.ts +18 -1
- package/src/interactive/interactive-input-runtime.ts +50 -4
- package/src/interactive/interactive-presentation.ts +151 -19
- package/src/interactive/interactive-shell.ts +268 -14
- package/src/interactive/interactive-slash-runtime.ts +184 -117
- package/src/interactive/interactive-tickers.ts +38 -7
- package/src/interactive/keybinding-manager.ts +1 -1
- package/src/interactive/layout.ts +40 -3
- package/src/interactive/overlay-frame.ts +1 -1
- package/src/interactive/overlay-general-openers.ts +58 -1
- package/src/interactive/overlay-key-routing.ts +3 -0
- package/src/interactive/overlay-lifecycle.ts +13 -0
- package/src/interactive/overlay-permission-lifecycle.ts +2 -1
- package/src/interactive/overlay-session-lifecycle.ts +69 -12
- package/src/interactive/overlays/ask-user.ts +146 -24
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/help-reference.ts +15 -10
- package/src/interactive/overlays/model-selector.ts +34 -16
- package/src/interactive/overlays/session-selector.ts +18 -0
- package/src/interactive/overlays/settings.ts +105 -17
- package/src/interactive/overlays/skills-hub.ts +4 -4
- package/src/interactive/overlays/tree-selector.ts +41 -6
- package/src/interactive/render-trace.ts +499 -90
- package/src/interactive/renderers/compaction-summary.ts +2 -2
- package/src/interactive/renderers/diff.ts +115 -104
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/tool-execution.ts +516 -168
- package/src/interactive/renderers/worker-entry.ts +20 -4
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/slash-autocomplete.ts +6 -114
- package/src/interactive/slash-commands.ts +135 -47
- package/src/interactive/slash-spec.ts +9 -38
- package/src/interactive/status/controller.ts +5 -1
- package/src/interactive/status/index.ts +12 -1
- package/src/interactive/status/reasoning.ts +87 -0
- package/src/interactive/status/summary.ts +13 -2
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +368 -14
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/tokens.ts +1 -1
- package/src/interactive/transcript-detail.ts +120 -0
- package/src/interactive/turn-context.ts +4 -3
- package/src/interactive/turn-persistence.ts +30 -13
- package/src/interactive/turn-queues.ts +12 -0
- package/src/interactive/turn-recovery.ts +25 -8
- package/src/interactive/turn-runtime.ts +79 -12
- package/src/interactive/turn-state.ts +10 -0
- package/src/interactive/view/artifacts.ts +114 -4
- package/src/interactive/view/view-overlay.ts +3 -0
- package/src/interactive/welcome-dashboard.ts +17 -16
- package/src/interactive/worker-receipts.ts +52 -3
- package/src/interactive/worker-stream.ts +5 -1
- package/src/tools/agent-tools.ts +23 -3
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +23 -13
- package/src/tools/bash.ts +30 -2
- package/src/tools/bootstrap.ts +34 -431
- package/src/tools/builtin-tool-catalog.ts +271 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +8 -22
- package/src/tools/codewiki/shared.ts +41 -38
- package/src/tools/context/docs-engine.ts +14 -3
- package/src/tools/context/index.ts +107 -28
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +5 -5
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +9 -4
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +67 -3161
- package/src/tools/find.ts +4 -2
- package/src/tools/grep.ts +2 -2
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +3 -3
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +2 -32
- package/src/tools/observers.ts +2 -2
- package/src/tools/presentation.ts +107 -0
- package/src/tools/registry.ts +45 -27
- package/src/tools/safe-exec.ts +2 -2
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +2 -13
- package/src/tools/tasks.ts +108 -11
- package/src/tools/truncate.ts +25 -184
- package/src/tools/verify/frontend.ts +3 -1
- package/src/tools/verify/index.ts +3 -38
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +2 -20
- package/src/tools/write.ts +7 -2
- package/src/worker/entry.ts +39 -2
- package/src/worker/spec-contract.ts +26 -5
- package/dist/chunk-7SS2CTV2.js +0 -61361
- package/dist/chunk-DKGKUHFA.js +0 -924
- package/dist/chunk-GEP36Y4X.js +0 -12796
- package/dist/chunk-XYWBQRDM.js +0 -137
- package/dist/clio-BZVGEUFJ.js +0 -58
- package/dist/configure-S7S6F6CL.js +0 -32
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -939
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -374
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/src/core/release.ts +0 -2
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
- package/src/engine/apis/lmstudio-native.ts +0 -1438
- package/src/engine/apis/thinking-replay.ts +0 -11
- package/src/tools/string-enum.ts +0 -15
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-3R73A4XB.js";
|
|
5
|
+
|
|
6
|
+
// src/core/skill-activation.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
var SKILL_SUGGESTION_ANCHOR = "Suggested skill: /skill <name>";
|
|
9
|
+
var SKILL_SUGGESTION_PREFIX = SKILL_SUGGESTION_ANCHOR.slice(0, SKILL_SUGGESTION_ANCHOR.indexOf("<name>"));
|
|
10
|
+
var SKILL_SURFACE_EXEMPT_TOOLS = /* @__PURE__ */ new Set(["context", "ask_user"]);
|
|
11
|
+
function evaluateSkillToolSurface(policy, tool) {
|
|
12
|
+
if (!policy || policy.loadedSkillPolicies.size === 0) return null;
|
|
13
|
+
if (SKILL_SURFACE_EXEMPT_TOOLS.has(tool)) return null;
|
|
14
|
+
const entries = [...policy.loadedSkillPolicies.entries()];
|
|
15
|
+
const skills = entries.map(([name]) => name);
|
|
16
|
+
const disallowedBy = entries.filter(([, declared]) => declared.disallowedTools?.includes(tool) === true).map(([name]) => name);
|
|
17
|
+
if (disallowedBy.length > 0) return { skills, mergedAllowedTools: null, disallowedBy };
|
|
18
|
+
const allowLists = entries.map(([, declared]) => declared.allowedTools);
|
|
19
|
+
if (allowLists.some((list) => list === void 0 || list.length === 0)) return null;
|
|
20
|
+
const merged = [...new Set(allowLists.flatMap((list) => [...list ?? []]))];
|
|
21
|
+
if (merged.includes(tool)) return null;
|
|
22
|
+
return { skills, mergedAllowedTools: merged, disallowedBy: [] };
|
|
23
|
+
}
|
|
24
|
+
function agentSkillToolPolicy(skillNames) {
|
|
25
|
+
const allowedSkillNames = [...new Set(skillNames.map((name) => name.trim()).filter((name) => name.length > 0))];
|
|
26
|
+
if (allowedSkillNames.length === 0) return void 0;
|
|
27
|
+
return {
|
|
28
|
+
allowedSkillNames,
|
|
29
|
+
requests: allowedSkillNames.map((name) => ({ name, args: "", source: "recipe", installed: true })),
|
|
30
|
+
loadedSkillNames: /* @__PURE__ */ new Set(),
|
|
31
|
+
loadedSkillPolicies: /* @__PURE__ */ new Map()
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function trimmedString(value) {
|
|
35
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
36
|
+
}
|
|
37
|
+
function skillActivationFromSource(source, triggeredBy, turnId) {
|
|
38
|
+
const sourceOrigin = trimmedString(source.sourceOrigin) ?? trimmedString(source.sourceInfo?.source);
|
|
39
|
+
return {
|
|
40
|
+
name: source.name,
|
|
41
|
+
filePath: source.filePath,
|
|
42
|
+
hash: source.hash,
|
|
43
|
+
source: source.source,
|
|
44
|
+
...sourceOrigin ? { sourceOrigin } : {},
|
|
45
|
+
triggeredBy,
|
|
46
|
+
...turnId ? { turnId } : {}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function skillActivationFromToolDetails(details, turnId) {
|
|
50
|
+
if (!details || typeof details !== "object" || Array.isArray(details)) return null;
|
|
51
|
+
const record = details;
|
|
52
|
+
const name = trimmedString(record.name);
|
|
53
|
+
const filePath = trimmedString(record.filePath) ?? trimmedString(record.path);
|
|
54
|
+
const hash = trimmedString(record.hash);
|
|
55
|
+
const source = trimmedString(record.source);
|
|
56
|
+
const sourceOrigin = trimmedString(record.sourceOrigin) ?? trimmedString(record.origin);
|
|
57
|
+
if (!name || !filePath || !hash || !source) return null;
|
|
58
|
+
const activation = skillActivationFromSource(
|
|
59
|
+
{ name, filePath, hash, source, ...sourceOrigin ? { sourceOrigin } : {} },
|
|
60
|
+
"tool",
|
|
61
|
+
turnId
|
|
62
|
+
);
|
|
63
|
+
if (record.drift === "match" || record.drift === "mismatch") activation.drift = record.drift;
|
|
64
|
+
return activation;
|
|
65
|
+
}
|
|
66
|
+
function isSkillActivation(value) {
|
|
67
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
68
|
+
const record = value;
|
|
69
|
+
return typeof record.name === "string" && typeof record.filePath === "string" && typeof record.hash === "string" && typeof record.source === "string" && (record.sourceOrigin === void 0 || typeof record.sourceOrigin === "string") && (record.triggeredBy === "slash-command" || record.triggeredBy === "tool") && (record.turnId === void 0 || typeof record.turnId === "string") && (record.runId === void 0 || typeof record.runId === "string");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
SKILL_SUGGESTION_ANCHOR,
|
|
74
|
+
SKILL_SUGGESTION_PREFIX,
|
|
75
|
+
evaluateSkillToolSurface,
|
|
76
|
+
agentSkillToolPolicy,
|
|
77
|
+
skillActivationFromToolDetails,
|
|
78
|
+
isSkillActivation
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=chunk-T6YILFSB.js.map
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
VERIFICATION_SCRIPT_FAMILY_HINT
|
|
4
|
+
} from "./chunk-7MNJORFF.js";
|
|
5
|
+
import {
|
|
6
|
+
truncateUtf8
|
|
7
|
+
} from "./chunk-6XLNIQDB.js";
|
|
8
|
+
import {
|
|
9
|
+
typebox_exports
|
|
10
|
+
} from "./chunk-5B2AEOW5.js";
|
|
11
|
+
import {
|
|
12
|
+
ToolNames
|
|
13
|
+
} from "./chunk-CGKSTWHD.js";
|
|
14
|
+
import {
|
|
15
|
+
SAFE_EXEC_DEFAULT_MAX_OUTPUT_BYTES,
|
|
16
|
+
SAFE_EXEC_DEFAULT_TIMEOUT_MS,
|
|
17
|
+
combineSafeOutput,
|
|
18
|
+
runCommandVector
|
|
19
|
+
} from "./chunk-VPAYEGVX.js";
|
|
20
|
+
import {
|
|
21
|
+
StringEnum
|
|
22
|
+
} from "./chunk-FCSXB6T2.js";
|
|
23
|
+
import {
|
|
24
|
+
init_esm_shims
|
|
25
|
+
} from "./chunk-3R73A4XB.js";
|
|
26
|
+
|
|
27
|
+
// src/tools/verify/surface.ts
|
|
28
|
+
init_esm_shims();
|
|
29
|
+
var BROWSER_MODES = ["auto", "required", "off"];
|
|
30
|
+
function prepareVerifyArguments(args) {
|
|
31
|
+
if (!args || typeof args !== "object" || Array.isArray(args)) return args;
|
|
32
|
+
const next = { ...args };
|
|
33
|
+
if (typeof next.args === "string") {
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(next.args);
|
|
36
|
+
if (Array.isArray(parsed)) next.args = parsed;
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return next;
|
|
41
|
+
}
|
|
42
|
+
var verifyToolSurface = {
|
|
43
|
+
name: ToolNames.Verify,
|
|
44
|
+
description: 'Run a declared verification check: no arguments lists checks, check=<package.json script> runs it, check="frontend" with path validates an HTML/CSS/JS artifact.',
|
|
45
|
+
parameters: typebox_exports.Object({
|
|
46
|
+
check: typebox_exports.Optional(
|
|
47
|
+
typebox_exports.String({
|
|
48
|
+
description: `Declared script name (${VERIFICATION_SCRIPT_FAMILY_HINT}) or "frontend". Omit to list available checks.`
|
|
49
|
+
})
|
|
50
|
+
),
|
|
51
|
+
path: typebox_exports.Optional(typebox_exports.String({ description: "check=frontend: artifact file under the workspace root." })),
|
|
52
|
+
args: typebox_exports.Optional(typebox_exports.Array(typebox_exports.String(), { description: "Extra arguments passed after --." })),
|
|
53
|
+
browser: typebox_exports.Optional(
|
|
54
|
+
StringEnum(BROWSER_MODES, { description: "check=frontend: headless browser mode (default auto)." })
|
|
55
|
+
),
|
|
56
|
+
cwd: typebox_exports.Optional(typebox_exports.String({ description: "Working directory." })),
|
|
57
|
+
timeout_ms: typebox_exports.Optional(typebox_exports.Number({ description: "Timeout in ms (default 120000)." })),
|
|
58
|
+
max_output_bytes: typebox_exports.Optional(typebox_exports.Number({ description: "Output cap in bytes (default 600000)." }))
|
|
59
|
+
}),
|
|
60
|
+
baseActionClass: "execute",
|
|
61
|
+
executionMode: "sequential",
|
|
62
|
+
prepareArguments: prepareVerifyArguments
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// src/tools/safe-exec.ts
|
|
66
|
+
init_esm_shims();
|
|
67
|
+
var TRUNCATION_MARKER = "\n[output truncated]\n";
|
|
68
|
+
function timeoutArg(args, fallback = SAFE_EXEC_DEFAULT_TIMEOUT_MS) {
|
|
69
|
+
return typeof args.timeout_ms === "number" && args.timeout_ms > 0 ? Math.floor(args.timeout_ms) : fallback;
|
|
70
|
+
}
|
|
71
|
+
function cwdArg(args) {
|
|
72
|
+
return typeof args.cwd === "string" && args.cwd.length > 0 ? args.cwd : void 0;
|
|
73
|
+
}
|
|
74
|
+
function maxOutputArg(args) {
|
|
75
|
+
return typeof args.max_output_bytes === "number" && args.max_output_bytes > 0 ? Math.floor(args.max_output_bytes) : SAFE_EXEC_DEFAULT_MAX_OUTPUT_BYTES;
|
|
76
|
+
}
|
|
77
|
+
function resultDetails(result) {
|
|
78
|
+
return {
|
|
79
|
+
command: [result.file, ...result.args].join(" "),
|
|
80
|
+
cwd: result.cwd,
|
|
81
|
+
exitCode: result.exitCode,
|
|
82
|
+
durationMs: result.durationMs,
|
|
83
|
+
timedOut: result.timedOut,
|
|
84
|
+
outputCapped: result.outputCapped
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function runVectorTool(action, file, vectorArgs, args, options) {
|
|
88
|
+
const timeoutMs = timeoutArg(args);
|
|
89
|
+
const maxOutputBytes = maxOutputArg(args);
|
|
90
|
+
try {
|
|
91
|
+
const runOptions = { timeoutMs, maxOutputBytes };
|
|
92
|
+
const cwd = cwdArg(args);
|
|
93
|
+
if (cwd !== void 0) runOptions.cwd = cwd;
|
|
94
|
+
if (options?.signal !== void 0) runOptions.signal = options.signal;
|
|
95
|
+
const result = await runCommandVector(file, vectorArgs, runOptions);
|
|
96
|
+
const output = truncateUtf8(combineSafeOutput(result), maxOutputBytes, TRUNCATION_MARKER);
|
|
97
|
+
const details = resultDetails(result);
|
|
98
|
+
if (result.aborted) return { kind: "error", message: `${action}: aborted`, details };
|
|
99
|
+
if (result.timedOut) {
|
|
100
|
+
const status = `${action}: timed out after ${timeoutMs}ms`;
|
|
101
|
+
return { kind: "error", message: output.trim().length > 0 ? `${status}
|
|
102
|
+
|
|
103
|
+
${output.trim()}` : status, details };
|
|
104
|
+
}
|
|
105
|
+
if (result.outputCapped)
|
|
106
|
+
return {
|
|
107
|
+
kind: "error",
|
|
108
|
+
message: output.trim().length > 0 ? `${action}: output exceeded ${maxOutputBytes} bytes
|
|
109
|
+
|
|
110
|
+
${output.trim()}` : `${action}: output exceeded ${maxOutputBytes} bytes`,
|
|
111
|
+
details
|
|
112
|
+
};
|
|
113
|
+
if (result.exitCode !== 0) {
|
|
114
|
+
return {
|
|
115
|
+
kind: "error",
|
|
116
|
+
message: `${action}: exited with code ${result.exitCode ?? "?"}: ${output.trim()}`,
|
|
117
|
+
details
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return { kind: "ok", output, details };
|
|
121
|
+
} catch (err) {
|
|
122
|
+
return { kind: "error", message: `${action}: ${err instanceof Error ? err.message : String(err)}` };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
var gitTool = {
|
|
126
|
+
name: ToolNames.Git,
|
|
127
|
+
description: "Read-only git inspection: op=status (short status), diff, or log (oneline).",
|
|
128
|
+
parameters: typebox_exports.Object({
|
|
129
|
+
op: StringEnum(["status", "diff", "log"], { description: "Inspection to run." }),
|
|
130
|
+
path: typebox_exports.Optional(typebox_exports.String({ description: "Limit diff/log to one path." })),
|
|
131
|
+
cached: typebox_exports.Optional(typebox_exports.Boolean({ description: "diff: staged changes (--cached)." })),
|
|
132
|
+
stat: typebox_exports.Optional(typebox_exports.Boolean({ description: "diff: summary only (--stat)." })),
|
|
133
|
+
name_only: typebox_exports.Optional(typebox_exports.Boolean({ description: "diff: file names only." })),
|
|
134
|
+
limit: typebox_exports.Optional(typebox_exports.Number({ description: "log: commits to show (default 20, max 200)." })),
|
|
135
|
+
cwd: typebox_exports.Optional(typebox_exports.String({ description: "Working directory." })),
|
|
136
|
+
timeout_ms: typebox_exports.Optional(typebox_exports.Number({ description: "Timeout in ms (default 120000)." })),
|
|
137
|
+
max_output_bytes: typebox_exports.Optional(typebox_exports.Number({ description: "Output cap in bytes (default 600000)." }))
|
|
138
|
+
}),
|
|
139
|
+
baseActionClass: "read",
|
|
140
|
+
executionMode: "parallel",
|
|
141
|
+
async run(args, options) {
|
|
142
|
+
const op = typeof args.op === "string" ? args.op : "";
|
|
143
|
+
const pathArg = typeof args.path === "string" && args.path.length > 0 ? args.path : null;
|
|
144
|
+
if (op === "status") {
|
|
145
|
+
return runVectorTool("git", "git", ["status", "--short", "--branch"], args, options);
|
|
146
|
+
}
|
|
147
|
+
if (op === "diff") {
|
|
148
|
+
const vector = ["diff"];
|
|
149
|
+
if (args.cached === true) vector.push("--cached");
|
|
150
|
+
if (args.stat === true) vector.push("--stat");
|
|
151
|
+
if (args.name_only === true) vector.push("--name-only");
|
|
152
|
+
if (pathArg) vector.push("--", pathArg);
|
|
153
|
+
return runVectorTool("git", "git", vector, args, options);
|
|
154
|
+
}
|
|
155
|
+
if (op === "log") {
|
|
156
|
+
const limit = typeof args.limit === "number" && args.limit > 0 ? Math.min(200, Math.floor(args.limit)) : 20;
|
|
157
|
+
const vector = ["log", "--oneline", "-n", String(limit)];
|
|
158
|
+
if (pathArg) vector.push("--", pathArg);
|
|
159
|
+
return runVectorTool("git", "git", vector, args, options);
|
|
160
|
+
}
|
|
161
|
+
return { kind: "error", message: `git: op must be status, diff, or log; got '${op}'` };
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export {
|
|
166
|
+
timeoutArg,
|
|
167
|
+
maxOutputArg,
|
|
168
|
+
runVectorTool,
|
|
169
|
+
gitTool,
|
|
170
|
+
BROWSER_MODES,
|
|
171
|
+
prepareVerifyArguments,
|
|
172
|
+
verifyToolSurface
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=chunk-TZK7PACC.js.map
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
BusChannels,
|
|
4
|
+
getSharedBus
|
|
5
|
+
} from "./chunk-OQ33BKR3.js";
|
|
6
|
+
import {
|
|
7
|
+
init_esm_shims
|
|
8
|
+
} from "./chunk-3R73A4XB.js";
|
|
9
|
+
|
|
10
|
+
// src/core/termination.ts
|
|
11
|
+
init_esm_shims();
|
|
12
|
+
var DEFAULT_SHUTDOWN_HOOK_MS = 500;
|
|
13
|
+
var SIGNAL_EXIT_CODES = {
|
|
14
|
+
SIGHUP: 129,
|
|
15
|
+
SIGINT: 130,
|
|
16
|
+
SIGTERM: 143
|
|
17
|
+
};
|
|
18
|
+
function wrapToWidth(text, width) {
|
|
19
|
+
if (!Number.isFinite(width) || width < 1) return [text];
|
|
20
|
+
const lines = [];
|
|
21
|
+
let current = "";
|
|
22
|
+
for (const word of text.split(/\s+/).filter((w) => w.length > 0)) {
|
|
23
|
+
let token = word;
|
|
24
|
+
while (token.length > width) {
|
|
25
|
+
if (current) {
|
|
26
|
+
lines.push(current);
|
|
27
|
+
current = "";
|
|
28
|
+
}
|
|
29
|
+
lines.push(token.slice(0, width));
|
|
30
|
+
token = token.slice(width);
|
|
31
|
+
}
|
|
32
|
+
if (!current) current = token;
|
|
33
|
+
else if (current.length + 1 + token.length <= width) current = `${current} ${token}`;
|
|
34
|
+
else {
|
|
35
|
+
lines.push(current);
|
|
36
|
+
current = token;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (current) lines.push(current);
|
|
40
|
+
return lines.length > 0 ? lines : [""];
|
|
41
|
+
}
|
|
42
|
+
function writeShutdownNotice(text) {
|
|
43
|
+
const width = process.stderr.columns ?? process.stdout.columns;
|
|
44
|
+
const lines = width === void 0 ? [text] : wrapToWidth(text, width);
|
|
45
|
+
process.stderr.write(`${lines.join("\n")}
|
|
46
|
+
`);
|
|
47
|
+
}
|
|
48
|
+
function resolveShutdownHookBudgetMs() {
|
|
49
|
+
const raw = process.env.CLIO_CODER_SHUTDOWN_HOOK_MS;
|
|
50
|
+
if (raw === void 0) return DEFAULT_SHUTDOWN_HOOK_MS;
|
|
51
|
+
const parsed = Number.parseInt(raw, 10);
|
|
52
|
+
if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_SHUTDOWN_HOOK_MS;
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
async function runWithBudget(op, budgetMs, onError) {
|
|
56
|
+
let timer;
|
|
57
|
+
const timeout = new Promise((resolve) => {
|
|
58
|
+
timer = setTimeout(() => resolve("timeout"), budgetMs);
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
const done = Promise.resolve().then(() => op()).then(() => "done").catch((err) => {
|
|
62
|
+
onError?.(err);
|
|
63
|
+
return "done";
|
|
64
|
+
});
|
|
65
|
+
const outcome = await Promise.race([done, timeout]);
|
|
66
|
+
return outcome === "done";
|
|
67
|
+
} finally {
|
|
68
|
+
if (timer) clearTimeout(timer);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
var TerminationCoordinator = class {
|
|
72
|
+
phase = "idle";
|
|
73
|
+
drainHooks = [];
|
|
74
|
+
terminateHooks = [];
|
|
75
|
+
persistHooks = [];
|
|
76
|
+
exitCode = 0;
|
|
77
|
+
started = false;
|
|
78
|
+
drained = false;
|
|
79
|
+
pendingNotices = [];
|
|
80
|
+
signalHandler = null;
|
|
81
|
+
getPhase() {
|
|
82
|
+
return this.phase;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The process exit code this shutdown will use. Set before any hook runs,
|
|
86
|
+
* so a hook sealing terminal accounting records the same status the process
|
|
87
|
+
* reports (130 for SIGINT, 143 for SIGTERM).
|
|
88
|
+
*/
|
|
89
|
+
getExitCode() {
|
|
90
|
+
return this.exitCode;
|
|
91
|
+
}
|
|
92
|
+
onDrain(hook) {
|
|
93
|
+
this.drainHooks.push(hook);
|
|
94
|
+
}
|
|
95
|
+
onTerminate(hook) {
|
|
96
|
+
this.terminateHooks.push(hook);
|
|
97
|
+
}
|
|
98
|
+
onPersist(hook) {
|
|
99
|
+
this.persistHooks.push(hook);
|
|
100
|
+
}
|
|
101
|
+
async shutdown(code = 0) {
|
|
102
|
+
if (this.started) return;
|
|
103
|
+
this.started = true;
|
|
104
|
+
this.exitCode = code;
|
|
105
|
+
const bus = getSharedBus();
|
|
106
|
+
const debug = process.env.CLIO_CODER_DEBUG_SHUTDOWN === "1";
|
|
107
|
+
const budgetMs = resolveShutdownHookBudgetMs();
|
|
108
|
+
const mark = debug ? process.hrtime.bigint() : 0n;
|
|
109
|
+
const log = (msg) => {
|
|
110
|
+
if (!debug) return;
|
|
111
|
+
const ms = Number(process.hrtime.bigint() - mark) / 1e6;
|
|
112
|
+
process.stderr.write(`[clio:shutdown] +${ms.toFixed(1)}ms ${msg}
|
|
113
|
+
`);
|
|
114
|
+
};
|
|
115
|
+
this.phase = "draining";
|
|
116
|
+
bus.emit(BusChannels.ShutdownRequested, { phase: this.phase });
|
|
117
|
+
log("drain:start");
|
|
118
|
+
await this.runHooks(this.drainHooks, "drain", budgetMs, log);
|
|
119
|
+
log("drain:end");
|
|
120
|
+
this.drained = true;
|
|
121
|
+
this.flushNotices();
|
|
122
|
+
bus.emit(BusChannels.ShutdownDrained, {});
|
|
123
|
+
this.phase = "terminating";
|
|
124
|
+
log("terminate:start");
|
|
125
|
+
await this.runHooks(this.terminateHooks, "terminate", budgetMs, log);
|
|
126
|
+
log("terminate:end");
|
|
127
|
+
bus.emit(BusChannels.ShutdownTerminated, {});
|
|
128
|
+
this.phase = "persisting";
|
|
129
|
+
log("persist:start");
|
|
130
|
+
await this.runHooks(this.persistHooks, "persist", budgetMs, log);
|
|
131
|
+
log("persist:end");
|
|
132
|
+
bus.emit(BusChannels.ShutdownPersisted, {});
|
|
133
|
+
this.phase = "exiting";
|
|
134
|
+
bus.emit(BusChannels.SessionEnd, { exitCode: this.exitCode });
|
|
135
|
+
log("process.exit");
|
|
136
|
+
process.exit(this.exitCode);
|
|
137
|
+
}
|
|
138
|
+
async runHooks(hooks, phase, budgetMs, log) {
|
|
139
|
+
for (let i = 0; i < hooks.length; i++) {
|
|
140
|
+
const hook = hooks[i];
|
|
141
|
+
if (!hook) continue;
|
|
142
|
+
const t0 = process.hrtime.bigint();
|
|
143
|
+
const completed = await runWithBudget(hook, budgetMs, (err) => {
|
|
144
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
145
|
+
writeShutdownNotice(`[clio:termination] ${phase}[${i}] failed: ${message}`);
|
|
146
|
+
if (err instanceof Error && err.stack) log(err.stack);
|
|
147
|
+
});
|
|
148
|
+
const dt = Number(process.hrtime.bigint() - t0) / 1e6;
|
|
149
|
+
if (!completed) {
|
|
150
|
+
writeShutdownNotice(`[clio:termination] ${phase}[${i}] exceeded ${budgetMs}ms budget; shutdown continues`);
|
|
151
|
+
}
|
|
152
|
+
log(` ${phase}[${i}] ${dt.toFixed(1)}ms${completed ? "" : " (timed out)"}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* SIGHUP is here for the same reason as SIGTERM. Without a listener Node
|
|
157
|
+
* takes its default action and the process dies with no shutdown at all,
|
|
158
|
+
* which on a TUI session means the terminal is never given back. Exit codes
|
|
159
|
+
* follow the 128+signal convention.
|
|
160
|
+
*/
|
|
161
|
+
installSignalHandlers() {
|
|
162
|
+
if (this.signalHandler) return;
|
|
163
|
+
const handler = (signal) => {
|
|
164
|
+
this.notice(`Clio Coder: received ${signal}, shutting down...`);
|
|
165
|
+
void this.shutdown(SIGNAL_EXIT_CODES[signal] ?? 143);
|
|
166
|
+
};
|
|
167
|
+
this.signalHandler = handler;
|
|
168
|
+
process.once("SIGINT", handler);
|
|
169
|
+
process.once("SIGTERM", handler);
|
|
170
|
+
process.once("SIGHUP", handler);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Report something the operator should read after the process is gone,
|
|
174
|
+
* such as which signal ended it. Nothing here knows whether a TUI is on
|
|
175
|
+
* screen, but it does know that the terminal teardown is a drain hook: so
|
|
176
|
+
* until drain has finished the notice is held, and the moment it has, the
|
|
177
|
+
* notice goes to the terminal the TUI just handed back. Written straight
|
|
178
|
+
* away once drain is over, which is the case for a re-armed SIGINT arriving
|
|
179
|
+
* mid-shutdown. A second SIGTERM or SIGHUP inside the drain window takes
|
|
180
|
+
* Node's default action and the held notice dies with the process; that
|
|
181
|
+
* window is bounded by the per-hook budget and the shell reports the kill.
|
|
182
|
+
*/
|
|
183
|
+
notice(text) {
|
|
184
|
+
if (this.drained) {
|
|
185
|
+
writeShutdownNotice(text);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.pendingNotices.push(text);
|
|
189
|
+
}
|
|
190
|
+
flushNotices() {
|
|
191
|
+
for (const text of this.pendingNotices.splice(0)) writeShutdownNotice(text);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Hand SIGINT to a foreground owner and return the call that takes it back.
|
|
195
|
+
*
|
|
196
|
+
* Boot arms this coordinator before any interactive surface exists, and Node
|
|
197
|
+
* runs signal listeners in registration order, so a TUI that merely added its
|
|
198
|
+
* own listener would lose every first press to a shutdown already underway.
|
|
199
|
+
* One owner holds the interrupt at a time and the transfer is explicit.
|
|
200
|
+
* SIGTERM is not part of the handover; it is never an interactive gesture.
|
|
201
|
+
*/
|
|
202
|
+
releaseInterruptOwnership() {
|
|
203
|
+
const handler = this.signalHandler;
|
|
204
|
+
if (!handler) return () => {
|
|
205
|
+
};
|
|
206
|
+
process.off("SIGINT", handler);
|
|
207
|
+
let restored = false;
|
|
208
|
+
return () => {
|
|
209
|
+
if (restored) return;
|
|
210
|
+
restored = true;
|
|
211
|
+
process.once("SIGINT", handler);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
var coordinator = null;
|
|
216
|
+
function getTerminationCoordinator() {
|
|
217
|
+
if (!coordinator) coordinator = new TerminationCoordinator();
|
|
218
|
+
return coordinator;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export {
|
|
222
|
+
writeShutdownNotice,
|
|
223
|
+
resolveShutdownHookBudgetMs,
|
|
224
|
+
runWithBudget,
|
|
225
|
+
getTerminationCoordinator
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=chunk-TZTZS7QK.js.map
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
loadSkills
|
|
4
|
+
} from "./chunk-4BPJXDWC.js";
|
|
2
5
|
import {
|
|
3
6
|
getVersionInfo
|
|
4
7
|
} from "./chunk-XPLRXC72.js";
|
|
5
|
-
import {
|
|
6
|
-
loadSkills
|
|
7
|
-
} from "./chunk-474KN5II.js";
|
|
8
8
|
import {
|
|
9
9
|
detectInteropAgents,
|
|
10
10
|
fingerprintNativeRuntime,
|
|
11
11
|
resolveOnPath
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-2TLUCQVG.js";
|
|
13
13
|
import {
|
|
14
14
|
initializeClioHome
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import {
|
|
17
|
-
interopAgentKind
|
|
18
|
-
} from "./chunk-IHXBNWMM.js";
|
|
15
|
+
} from "./chunk-BMEMKKIT.js";
|
|
19
16
|
import {
|
|
20
17
|
formatSettingsIssues,
|
|
21
18
|
readSettings,
|
|
22
19
|
validateSettingsFile
|
|
23
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-A3CYT5EX.js";
|
|
24
21
|
import {
|
|
25
22
|
openAuthStorage
|
|
26
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-4VP4KH3K.js";
|
|
27
24
|
import {
|
|
28
25
|
readSessionFileEntries
|
|
29
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-M6SHUN7Q.js";
|
|
27
|
+
import {
|
|
28
|
+
interopAgentKind
|
|
29
|
+
} from "./chunk-IHXBNWMM.js";
|
|
30
30
|
import {
|
|
31
31
|
clioStatePath,
|
|
32
32
|
resolveClioDirs
|
|
@@ -337,7 +337,7 @@ async function runDoctorFleetChecks(projectRoot = process.cwd()) {
|
|
|
337
337
|
}
|
|
338
338
|
const nodes = settings.fleet?.nodes ?? [];
|
|
339
339
|
if (nodes.length === 0) return [];
|
|
340
|
-
const { recordFleetPreflight, runFleetNodePreflight } = await import("./fleet-preflight-
|
|
340
|
+
const { recordFleetPreflight, runFleetNodePreflight } = await import("./fleet-preflight-DDN536IT.js");
|
|
341
341
|
const targets = (settings.targets ?? []).map((target) => ({
|
|
342
342
|
id: target.id,
|
|
343
343
|
runtimeId: target.runtime,
|
|
@@ -437,4 +437,4 @@ export {
|
|
|
437
437
|
runDoctorInteropChecks,
|
|
438
438
|
runDoctorRuntimeChecks
|
|
439
439
|
};
|
|
440
|
-
//# sourceMappingURL=chunk-
|
|
440
|
+
//# sourceMappingURL=chunk-UFIIWP2H.js.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-3R73A4XB.js";
|
|
5
|
+
|
|
6
|
+
// src/domains/safety/loop-detector.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
var DEFAULT_WINDOW_MS = 3e4;
|
|
9
|
+
var DEFAULT_MAX_REPEATS = 3;
|
|
10
|
+
var DEFAULT_KEEP_LAST_ATTEMPTS = 4;
|
|
11
|
+
function createLoopState(opts) {
|
|
12
|
+
const windowMs = opts?.windowMs ?? DEFAULT_WINDOW_MS;
|
|
13
|
+
const maxRepeats = opts?.maxRepeats ?? DEFAULT_MAX_REPEATS;
|
|
14
|
+
const keepLastAttempts = opts?.keepLastAttempts ?? DEFAULT_KEEP_LAST_ATTEMPTS;
|
|
15
|
+
return { recent: [], windowMs, maxRepeats, keepLastAttempts };
|
|
16
|
+
}
|
|
17
|
+
function hashToolCall(tool, args) {
|
|
18
|
+
let argPart;
|
|
19
|
+
try {
|
|
20
|
+
argPart = canonicalSerialize(args ?? {}, /* @__PURE__ */ new WeakSet());
|
|
21
|
+
} catch {
|
|
22
|
+
argPart = "<unrepresentable>";
|
|
23
|
+
}
|
|
24
|
+
return `${tool}${argPart}`;
|
|
25
|
+
}
|
|
26
|
+
function canonicalSerialize(value, seen) {
|
|
27
|
+
if (value === null) return "null";
|
|
28
|
+
if (typeof value === "number") {
|
|
29
|
+
if (!Number.isFinite(value)) {
|
|
30
|
+
throw new Error(`canonicalSerialize: non-finite number ${String(value)} is not representable`);
|
|
31
|
+
}
|
|
32
|
+
return JSON.stringify(value);
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === "string" || typeof value === "boolean") {
|
|
35
|
+
return JSON.stringify(value);
|
|
36
|
+
}
|
|
37
|
+
if (typeof value === "bigint") {
|
|
38
|
+
throw new Error("canonicalSerialize: bigint is not representable");
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === "symbol" || typeof value === "function" || value === void 0) {
|
|
41
|
+
throw new Error(`canonicalSerialize: ${typeof value} is not representable`);
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
if (seen.has(value)) throw new Error("canonicalSerialize: circular reference is not representable");
|
|
45
|
+
seen.add(value);
|
|
46
|
+
try {
|
|
47
|
+
const parts = [];
|
|
48
|
+
for (let i = 0; i < value.length; i++) {
|
|
49
|
+
if (!(i in value) || value[i] === void 0) {
|
|
50
|
+
parts.push("null");
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
parts.push(canonicalSerialize(value[i], seen));
|
|
54
|
+
}
|
|
55
|
+
return `[${parts.join(",")}]`;
|
|
56
|
+
} finally {
|
|
57
|
+
seen.delete(value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === "object") {
|
|
61
|
+
if (value instanceof Date) {
|
|
62
|
+
const jsonValue = value.toJSON();
|
|
63
|
+
return jsonValue === null ? "null" : JSON.stringify(jsonValue);
|
|
64
|
+
}
|
|
65
|
+
if (seen.has(value)) throw new Error("canonicalSerialize: circular reference is not representable");
|
|
66
|
+
seen.add(value);
|
|
67
|
+
const obj = value;
|
|
68
|
+
try {
|
|
69
|
+
const keys = Object.keys(obj).sort();
|
|
70
|
+
const parts = [];
|
|
71
|
+
for (const key of keys) {
|
|
72
|
+
const child = obj[key];
|
|
73
|
+
if (child === void 0) continue;
|
|
74
|
+
parts.push(`${JSON.stringify(key)}:${canonicalSerialize(child, seen)}`);
|
|
75
|
+
}
|
|
76
|
+
return `{${parts.join(",")}}`;
|
|
77
|
+
} finally {
|
|
78
|
+
seen.delete(value);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw new Error(`canonicalSerialize: unsupported value of type ${typeof value}`);
|
|
82
|
+
}
|
|
83
|
+
function observe(state, key, now) {
|
|
84
|
+
const cutoff = now - state.windowMs;
|
|
85
|
+
const keepLast = state.keepLastAttempts ?? DEFAULT_KEEP_LAST_ATTEMPTS;
|
|
86
|
+
const appended = [...state.recent, { key, at: now }];
|
|
87
|
+
const floorStart = Math.max(0, appended.length - keepLast);
|
|
88
|
+
const next = appended.filter((entry, index) => index >= floorStart || entry.at >= cutoff);
|
|
89
|
+
let count = 0;
|
|
90
|
+
for (const entry of next) {
|
|
91
|
+
if (entry.key === key) count += 1;
|
|
92
|
+
}
|
|
93
|
+
const looping = count >= state.maxRepeats;
|
|
94
|
+
const newState = {
|
|
95
|
+
recent: next,
|
|
96
|
+
windowMs: state.windowMs,
|
|
97
|
+
maxRepeats: state.maxRepeats
|
|
98
|
+
};
|
|
99
|
+
return [newState, { looping, key, count }];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export {
|
|
103
|
+
createLoopState,
|
|
104
|
+
hashToolCall,
|
|
105
|
+
observe
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=chunk-UOV2BYIW.js.map
|