@iowarp/clio-coder 0.3.1 → 0.3.2
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 +90 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/chunk-4VP4KH3K.js +962 -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-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
- 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-AO4RKG4M.js +277 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/chunk-ARBGF5F7.js +174 -0
- 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-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -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-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- 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-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
- package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -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/cli/index.js +62 -54
- package/dist/clio-4LY5K2AC.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-GTLUW2PR.js} +92 -55
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
- package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
- package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
- 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-IV4Q6RLN.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
- package/dist/terminal-lease-IT5JW2NR.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-7TT7SQ3G.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.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 +362 -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 +42 -6
- 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 +173 -47
- package/src/interactive/chat-renderer.ts +262 -72
- 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 +228 -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 +20 -2
- package/src/interactive/footer-panel.ts +2 -2
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +201 -17
- package/src/interactive/interactive-event-projection.ts +6 -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 +176 -114
- 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/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 +386 -133
- 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/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/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 +265 -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/registry.ts +39 -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,619 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
ceilChars
|
|
4
|
+
} from "./chunk-LZSJBIVT.js";
|
|
5
|
+
import {
|
|
6
|
+
clioStateDir
|
|
7
|
+
} from "./chunk-BNAZZHFG.js";
|
|
8
|
+
import {
|
|
9
|
+
init_esm_shims
|
|
10
|
+
} from "./chunk-3R73A4XB.js";
|
|
11
|
+
|
|
12
|
+
// src/domains/memory/task-bank.ts
|
|
13
|
+
init_esm_shims();
|
|
14
|
+
var TASK_MEMORY_VERSION = 1;
|
|
15
|
+
var TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP = 20;
|
|
16
|
+
var TASK_MEMORY_DEFAULT_PROCEDURAL_CAP = 30;
|
|
17
|
+
var TASK_MEMORY_CONTENT_MAX_CHARS = 1200;
|
|
18
|
+
var TaskMemoryBank = class {
|
|
19
|
+
#knowledgeCap;
|
|
20
|
+
#proceduralCap;
|
|
21
|
+
#now;
|
|
22
|
+
#knowledge = /* @__PURE__ */ new Map();
|
|
23
|
+
#procedural = /* @__PURE__ */ new Map();
|
|
24
|
+
#status = null;
|
|
25
|
+
#nextId = 1;
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
this.#knowledgeCap = positiveInteger(options.knowledgeCap, TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP);
|
|
28
|
+
this.#proceduralCap = positiveInteger(options.proceduralCap, TASK_MEMORY_DEFAULT_PROCEDURAL_CAP);
|
|
29
|
+
this.#now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
30
|
+
}
|
|
31
|
+
updateStatus(content) {
|
|
32
|
+
const timestamp = this.#timestamp();
|
|
33
|
+
const normalized = normalizeContent(content);
|
|
34
|
+
this.#status = this.#status === null ? this.#newEntry("status", normalized, timestamp) : { ...this.#status, content: normalized, lastTouchedAt: timestamp };
|
|
35
|
+
return cloneEntry(this.#status);
|
|
36
|
+
}
|
|
37
|
+
saveKnowledge(content, options = {}) {
|
|
38
|
+
return this.#save("knowledge", content, options.id);
|
|
39
|
+
}
|
|
40
|
+
saveProcedural(content, options = {}) {
|
|
41
|
+
return this.#save("procedural", content, options.id);
|
|
42
|
+
}
|
|
43
|
+
deleteEntry(id) {
|
|
44
|
+
if (this.#status?.id === id) {
|
|
45
|
+
this.#status = null;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return this.#knowledge.delete(id) || this.#procedural.delete(id);
|
|
49
|
+
}
|
|
50
|
+
/** Reset execution state when the composition root switches sessions. */
|
|
51
|
+
clear() {
|
|
52
|
+
this.#status = null;
|
|
53
|
+
this.#knowledge.clear();
|
|
54
|
+
this.#procedural.clear();
|
|
55
|
+
this.#nextId = 1;
|
|
56
|
+
}
|
|
57
|
+
/** Record attribution after an entry has contributed to a visible reminder. */
|
|
58
|
+
recordInjection(ids) {
|
|
59
|
+
for (const id of new Set(ids)) {
|
|
60
|
+
const entries = this.#knowledge.has(id) ? this.#knowledge : this.#procedural;
|
|
61
|
+
const entry = entries.get(id);
|
|
62
|
+
if (entry === void 0) continue;
|
|
63
|
+
const updated = { ...entry, injectionCount: entry.injectionCount + 1, lastTouchedAt: this.#timestamp() };
|
|
64
|
+
entries.set(id, updated);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Render only action-agent-visible classes under a conservative character
|
|
69
|
+
* token estimate. Status remains private even if a caller requests it.
|
|
70
|
+
*/
|
|
71
|
+
render(budgetTokens, kinds = ["knowledge", "procedural"]) {
|
|
72
|
+
if (!Number.isFinite(budgetTokens) || budgetTokens <= 0) return "";
|
|
73
|
+
const allowed = new Set(kinds);
|
|
74
|
+
const entries = [...this.#knowledge.values(), ...this.#procedural.values()].filter((entry) => allowed.has(entry.kind)).sort(compareForRender);
|
|
75
|
+
let rendered = "";
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
const line = `- [${entry.id}] ${entry.kind}: ${entry.content}`;
|
|
78
|
+
const candidate = rendered.length === 0 ? line : `${rendered}
|
|
79
|
+
${line}`;
|
|
80
|
+
if (ceilChars(candidate.length) > budgetTokens) continue;
|
|
81
|
+
rendered = candidate;
|
|
82
|
+
}
|
|
83
|
+
return rendered;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Render the block handed back to the action agent after compaction, which is
|
|
87
|
+
* the one place status is visible.
|
|
88
|
+
*
|
|
89
|
+
* `render` refuses status because a mid-turn reminder must never expose the
|
|
90
|
+
* policy's private progress model as if the action agent had said it. That
|
|
91
|
+
* boundary is different: compaction destroyed the agent's own working state
|
|
92
|
+
* and this hands it back. Restoring knowledge alone restored nothing in the
|
|
93
|
+
* common case, because across ten live LLM steps the model wrote status in all
|
|
94
|
+
* ten and knowledge in two. Status leads for the same reason, and knowledge
|
|
95
|
+
* takes the remaining budget. Procedural stays out, unchanged.
|
|
96
|
+
*/
|
|
97
|
+
renderRestoredState(budgetTokens) {
|
|
98
|
+
if (!Number.isFinite(budgetTokens) || budgetTokens <= 0) return "";
|
|
99
|
+
const status = this.#status;
|
|
100
|
+
const statusLine = status === null ? "" : `- [${status.id}] status: ${status.content}`;
|
|
101
|
+
if (statusLine.length > 0 && ceilChars(statusLine.length) > budgetTokens)
|
|
102
|
+
return this.render(budgetTokens, ["knowledge"]);
|
|
103
|
+
const remaining = statusLine.length === 0 ? budgetTokens : budgetTokens - ceilChars(statusLine.length);
|
|
104
|
+
const knowledge = this.render(remaining, ["knowledge"]);
|
|
105
|
+
if (statusLine.length === 0) return knowledge;
|
|
106
|
+
return knowledge.length === 0 ? statusLine : `${statusLine}
|
|
107
|
+
${knowledge}`;
|
|
108
|
+
}
|
|
109
|
+
snapshot() {
|
|
110
|
+
return {
|
|
111
|
+
version: TASK_MEMORY_VERSION,
|
|
112
|
+
status: this.#status === null ? null : cloneEntry(this.#status),
|
|
113
|
+
knowledge: [...this.#knowledge.values()].sort(compareForSnapshot).map(cloneEntry),
|
|
114
|
+
procedural: [...this.#procedural.values()].sort(compareForSnapshot).map(cloneEntry)
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
#save(kind, content, id) {
|
|
118
|
+
const entries = this.#mapFor(kind);
|
|
119
|
+
const normalized = normalizeContent(content);
|
|
120
|
+
const timestamp = this.#timestamp();
|
|
121
|
+
let saved;
|
|
122
|
+
if (id === void 0) {
|
|
123
|
+
saved = this.#newEntry(kind, normalized, timestamp);
|
|
124
|
+
} else {
|
|
125
|
+
const existing = entries.get(id);
|
|
126
|
+
if (existing === void 0) throw new Error(`task memory entry not found: ${id}`);
|
|
127
|
+
saved = { ...existing, content: normalized, lastTouchedAt: timestamp };
|
|
128
|
+
}
|
|
129
|
+
entries.set(saved.id, saved);
|
|
130
|
+
this.#evictOldest(entries, kind === "knowledge" ? this.#knowledgeCap : this.#proceduralCap);
|
|
131
|
+
return cloneEntry(saved);
|
|
132
|
+
}
|
|
133
|
+
#newEntry(kind, content, timestamp) {
|
|
134
|
+
const prefix = kind === "status" ? "s" : kind === "knowledge" ? "k" : "p";
|
|
135
|
+
const id = `tm-${prefix}-${this.#nextId.toString(36)}`;
|
|
136
|
+
this.#nextId += 1;
|
|
137
|
+
return { id, kind, content, createdAt: timestamp, lastTouchedAt: timestamp, injectionCount: 0 };
|
|
138
|
+
}
|
|
139
|
+
#mapFor(kind) {
|
|
140
|
+
return kind === "knowledge" ? this.#knowledge : this.#procedural;
|
|
141
|
+
}
|
|
142
|
+
#evictOldest(entries, cap) {
|
|
143
|
+
while (entries.size > cap) {
|
|
144
|
+
const oldest = [...entries.values()].sort(compareForEviction)[0];
|
|
145
|
+
if (oldest === void 0) return;
|
|
146
|
+
entries.delete(oldest.id);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
#timestamp() {
|
|
150
|
+
return this.#now().toISOString();
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
function normalizeContent(content) {
|
|
154
|
+
const normalized = content.replace(/\s+/gu, " ").trim();
|
|
155
|
+
if (normalized.length === 0) throw new Error("task memory content must not be empty");
|
|
156
|
+
return normalized.slice(0, TASK_MEMORY_CONTENT_MAX_CHARS).trimEnd();
|
|
157
|
+
}
|
|
158
|
+
function positiveInteger(value, fallback) {
|
|
159
|
+
return value !== void 0 && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
160
|
+
}
|
|
161
|
+
function cloneEntry(entry) {
|
|
162
|
+
return { ...entry };
|
|
163
|
+
}
|
|
164
|
+
function compareForEviction(left, right) {
|
|
165
|
+
const byTouched = left.lastTouchedAt.localeCompare(right.lastTouchedAt);
|
|
166
|
+
if (byTouched !== 0) return byTouched;
|
|
167
|
+
const byCreated = left.createdAt.localeCompare(right.createdAt);
|
|
168
|
+
if (byCreated !== 0) return byCreated;
|
|
169
|
+
return left.id.localeCompare(right.id);
|
|
170
|
+
}
|
|
171
|
+
function compareForRender(left, right) {
|
|
172
|
+
const byTouched = right.lastTouchedAt.localeCompare(left.lastTouchedAt);
|
|
173
|
+
if (byTouched !== 0) return byTouched;
|
|
174
|
+
if (left.kind !== right.kind) return left.kind === "knowledge" ? -1 : 1;
|
|
175
|
+
return left.id.localeCompare(right.id);
|
|
176
|
+
}
|
|
177
|
+
function compareForSnapshot(left, right) {
|
|
178
|
+
const byCreated = left.createdAt.localeCompare(right.createdAt);
|
|
179
|
+
return byCreated !== 0 ? byCreated : left.id.localeCompare(right.id);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// src/domains/memory/task-memory-telemetry.ts
|
|
183
|
+
init_esm_shims();
|
|
184
|
+
import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
|
|
185
|
+
import { join } from "node:path";
|
|
186
|
+
var TASK_MEMORY_TELEMETRY_VERSION = 2;
|
|
187
|
+
var TASK_MEMORY_TELEMETRY_MAX_BYTES = 1024 * 1024;
|
|
188
|
+
var TASK_MEMORY_TELEMETRY_FILE = "steps.jsonl";
|
|
189
|
+
function createTaskMemoryTelemetrySink(options = {}) {
|
|
190
|
+
const now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
191
|
+
return {
|
|
192
|
+
record(step) {
|
|
193
|
+
try {
|
|
194
|
+
const logDir = options.logDir ?? join(clioStateDir(), "memory");
|
|
195
|
+
const record = taskMemoryTelemetryRecord(step, now());
|
|
196
|
+
mkdirSync(logDir, { recursive: true });
|
|
197
|
+
const path = join(logDir, TASK_MEMORY_TELEMETRY_FILE);
|
|
198
|
+
try {
|
|
199
|
+
if (statSync(path).size > TASK_MEMORY_TELEMETRY_MAX_BYTES) renameSync(path, `${path}.1`);
|
|
200
|
+
} catch {
|
|
201
|
+
}
|
|
202
|
+
appendFileSync(path, `${JSON.stringify(record)}
|
|
203
|
+
`);
|
|
204
|
+
} catch {
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
function taskMemoryTelemetryRecord(step, at) {
|
|
210
|
+
const input = nonNegativeInteger(step.inputTokens);
|
|
211
|
+
const output = nonNegativeInteger(step.outputTokens);
|
|
212
|
+
return {
|
|
213
|
+
version: TASK_MEMORY_TELEMETRY_VERSION,
|
|
214
|
+
at: at.toISOString(),
|
|
215
|
+
triggerReasons: [...new Set(step.triggerReasons)],
|
|
216
|
+
tier: step.tier,
|
|
217
|
+
bankDelta: step.bankDelta,
|
|
218
|
+
decision: step.decision,
|
|
219
|
+
reason: step.reason,
|
|
220
|
+
bankOperations: nonNegativeInteger(step.bankOperations),
|
|
221
|
+
droppedOperations: nonNegativeInteger(step.droppedOperations),
|
|
222
|
+
citedEntries: nonNegativeInteger(step.citedEntries),
|
|
223
|
+
tokenCost: { input, output, total: input + output },
|
|
224
|
+
latencyMs: nonNegativeFinite(step.latencyMs)
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function taskMemoryBankDelta(before, after) {
|
|
228
|
+
return {
|
|
229
|
+
status: entryDelta(before.status === null ? [] : [before.status], after.status === null ? [] : [after.status]),
|
|
230
|
+
knowledge: entryDelta(before.knowledge, after.knowledge),
|
|
231
|
+
procedural: entryDelta(before.procedural, after.procedural)
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function entryDelta(before, after) {
|
|
235
|
+
const old = new Map(before.map((entry) => [entry.id, entry]));
|
|
236
|
+
const next = new Map(after.map((entry) => [entry.id, entry]));
|
|
237
|
+
let added = 0;
|
|
238
|
+
let updated = 0;
|
|
239
|
+
let deleted = 0;
|
|
240
|
+
for (const [id, entry] of next) {
|
|
241
|
+
const previous = old.get(id);
|
|
242
|
+
if (previous === void 0) added += 1;
|
|
243
|
+
else if (!sameEntry(previous, entry)) updated += 1;
|
|
244
|
+
}
|
|
245
|
+
for (const id of old.keys()) {
|
|
246
|
+
if (!next.has(id)) deleted += 1;
|
|
247
|
+
}
|
|
248
|
+
return { added, updated, deleted };
|
|
249
|
+
}
|
|
250
|
+
function sameEntry(left, right) {
|
|
251
|
+
return left.content === right.content && left.createdAt === right.createdAt;
|
|
252
|
+
}
|
|
253
|
+
function nonNegativeInteger(value) {
|
|
254
|
+
return Number.isSafeInteger(value) && value >= 0 ? value : 0;
|
|
255
|
+
}
|
|
256
|
+
function nonNegativeFinite(value) {
|
|
257
|
+
return Number.isFinite(value) && value >= 0 ? value : 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// src/domains/memory/task-memory-policy.ts
|
|
261
|
+
init_esm_shims();
|
|
262
|
+
|
|
263
|
+
// src/domains/prompts/memory-intervention.ts
|
|
264
|
+
init_esm_shims();
|
|
265
|
+
var MEMORY_INTERVENTION_SYSTEM_PROMPT = `You maintain task execution memory for a separate action agent. You never act on the task yourself and you never call tools. You write notes into a memory bank and, rarely, pass one reminder back.
|
|
266
|
+
|
|
267
|
+
Return exactly two lines and no markdown fences:
|
|
268
|
+
<operations>[JSON operations]</operations>
|
|
269
|
+
<no_intervention/>
|
|
270
|
+
|
|
271
|
+
Or replace the second line with:
|
|
272
|
+
<context_for_action>one concise reminder</context_for_action>
|
|
273
|
+
|
|
274
|
+
The operations list holds memory writes only. It is never a list of tool calls, commands, files to read, or next steps. "op" must be exactly one of these four strings and no others:
|
|
275
|
+
- {"op":"update_status","content":"one paragraph"}
|
|
276
|
+
- {"op":"save_knowledge","content":"one stable task fact"}
|
|
277
|
+
- {"op":"save_procedural","content":"one attempt, outcome, diagnosis, or fix"}
|
|
278
|
+
- {"op":"delete","id":"existing entry id"}
|
|
279
|
+
|
|
280
|
+
Any other "op" value discards that operation. Add "id" to a save only to overwrite an entry already listed in the task bank; omit "id" to record something new. Use at most eight operations, and use <operations>[]</operations> when nothing is worth recording.
|
|
281
|
+
|
|
282
|
+
Worked example. Given a trajectory where the agent read three routing files and one build command failed twice, a correct response is:
|
|
283
|
+
<operations>[{"op":"update_status","content":"Mapping the routing call chain; the build is still failing."},{"op":"save_knowledge","content":"Target selection runs through placement.ts before runtime-resolution.ts."},{"op":"save_procedural","content":"npm run build failed twice with the same TS2345; the edit did not address it."}]</operations>
|
|
284
|
+
<no_intervention/>
|
|
285
|
+
|
|
286
|
+
Second worked example. Given a trajectory where the same command failed twice and the bank already holds [tm-p-1] describing that failure, a correct response is:
|
|
287
|
+
<operations>[{"op":"update_status","content":"The same build command has now failed twice with the same error."}]</operations>
|
|
288
|
+
<context_for_action>[tm-p-1] this exact command already failed with this error; change the approach rather than running it again.</context_for_action>
|
|
289
|
+
|
|
290
|
+
Status is your private progress model and must never appear in context_for_action. Default to <no_intervention/>. Intervene only to restore a relevant bank fact or prevent a repeated known failure. Cite supporting visible entries as [entry-id]. Never restate the latest observation, take over planning, give broad strategy, block a tool, or request continuation.`;
|
|
291
|
+
function buildMemoryInterventionUserPrompt(input) {
|
|
292
|
+
return [
|
|
293
|
+
"Task:",
|
|
294
|
+
input.task.trim() || "(unknown)",
|
|
295
|
+
"",
|
|
296
|
+
"Task bank (status is intentionally omitted):",
|
|
297
|
+
input.bank.trim() || "(empty)",
|
|
298
|
+
"",
|
|
299
|
+
"Recent completed tool trajectory:",
|
|
300
|
+
input.trajectory.trim() || "[]"
|
|
301
|
+
].join("\n");
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// src/domains/memory/task-memory-policy.ts
|
|
305
|
+
var TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
|
|
306
|
+
var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 18e4;
|
|
307
|
+
var TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS = 4e3;
|
|
308
|
+
var TASK_PROMPT_MAX_CHARS = 2e3;
|
|
309
|
+
var TRAJECTORY_PROMPT_MAX_CHARS = 4e3;
|
|
310
|
+
function renderTrajectory(trajectory) {
|
|
311
|
+
let steps = [...trajectory];
|
|
312
|
+
let rendered = JSON.stringify(steps);
|
|
313
|
+
while (rendered.length > TRAJECTORY_PROMPT_MAX_CHARS && steps.length > 1) {
|
|
314
|
+
steps = steps.slice(1);
|
|
315
|
+
rendered = JSON.stringify(steps);
|
|
316
|
+
}
|
|
317
|
+
if (rendered.length > TRAJECTORY_PROMPT_MAX_CHARS && steps.length === 1) {
|
|
318
|
+
const only = steps[0];
|
|
319
|
+
if (only !== void 0) {
|
|
320
|
+
const room = Math.max(0, TRAJECTORY_PROMPT_MAX_CHARS - JSON.stringify([{ ...only, resultDigest: "" }]).length);
|
|
321
|
+
rendered = JSON.stringify([{ ...only, resultDigest: only.resultDigest.slice(0, room) }]);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return rendered;
|
|
325
|
+
}
|
|
326
|
+
async function runTaskMemoryPolicy(bank, client, input) {
|
|
327
|
+
const controller = new AbortController();
|
|
328
|
+
const timeoutMs = positiveInteger2(input.timeoutMs, TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS);
|
|
329
|
+
const timeoutMarker = /* @__PURE__ */ Symbol("task-memory-timeout");
|
|
330
|
+
let timer;
|
|
331
|
+
let userPrompt = "";
|
|
332
|
+
let rawResponse = "";
|
|
333
|
+
let clientError = null;
|
|
334
|
+
const settle = (decision, reason, parts = {}) => {
|
|
335
|
+
const result = {
|
|
336
|
+
decision,
|
|
337
|
+
reason,
|
|
338
|
+
bankOperations: parts.bankOperations ?? 0,
|
|
339
|
+
droppedOperations: parts.droppedOperations ?? 0,
|
|
340
|
+
reminder: parts.reminder ?? null,
|
|
341
|
+
inputTokens: parts.inputTokens ?? 0,
|
|
342
|
+
outputTokens: parts.outputTokens ?? 0
|
|
343
|
+
};
|
|
344
|
+
try {
|
|
345
|
+
input.onEnvelope?.({
|
|
346
|
+
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
347
|
+
userPrompt,
|
|
348
|
+
response: rawResponse,
|
|
349
|
+
decision,
|
|
350
|
+
reason,
|
|
351
|
+
bankOperations: result.bankOperations,
|
|
352
|
+
droppedOperations: result.droppedOperations,
|
|
353
|
+
reminder: result.reminder,
|
|
354
|
+
error: clientError
|
|
355
|
+
});
|
|
356
|
+
} catch {
|
|
357
|
+
}
|
|
358
|
+
return result;
|
|
359
|
+
};
|
|
360
|
+
try {
|
|
361
|
+
userPrompt = buildMemoryInterventionUserPrompt({
|
|
362
|
+
task: input.task.slice(0, TASK_PROMPT_MAX_CHARS),
|
|
363
|
+
bank: bank.render(input.maxTokens),
|
|
364
|
+
trajectory: renderTrajectory(input.trajectory)
|
|
365
|
+
});
|
|
366
|
+
const completion = client.complete({
|
|
367
|
+
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
368
|
+
userPrompt,
|
|
369
|
+
maxTokens: TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS,
|
|
370
|
+
signal: controller.signal
|
|
371
|
+
});
|
|
372
|
+
const timeout = new Promise((resolve) => {
|
|
373
|
+
timer = setTimeout(() => resolve(timeoutMarker), timeoutMs);
|
|
374
|
+
});
|
|
375
|
+
const response = await Promise.race([completion, timeout]);
|
|
376
|
+
if (response === timeoutMarker) {
|
|
377
|
+
controller.abort();
|
|
378
|
+
void completion.catch(() => void 0);
|
|
379
|
+
return settle("timeout", "deadline");
|
|
380
|
+
}
|
|
381
|
+
rawResponse = typeof response.text === "string" ? response.text : "";
|
|
382
|
+
const usage = {
|
|
383
|
+
inputTokens: nonNegativeInteger2(response.inputTokens),
|
|
384
|
+
outputTokens: nonNegativeInteger2(response.outputTokens)
|
|
385
|
+
};
|
|
386
|
+
const read = readPolicyStep(rawResponse);
|
|
387
|
+
if (!read.ok) return settle("malformed", read.reason, { ...usage, droppedOperations: read.dropped });
|
|
388
|
+
const operations = resolveOperations(bank, read.step.operations);
|
|
389
|
+
applyOperations(bank, operations);
|
|
390
|
+
const counts = {
|
|
391
|
+
...usage,
|
|
392
|
+
bankOperations: operations.length,
|
|
393
|
+
droppedOperations: read.dropped + (read.step.operations.length - operations.length)
|
|
394
|
+
};
|
|
395
|
+
if (read.step.context === null) return settle("silent", "model_silent", counts);
|
|
396
|
+
const reminder = withMemoryPrefix(read.step.context, input.maxTokens);
|
|
397
|
+
if (reminder.length === 0) return settle("gated", "over_budget", counts);
|
|
398
|
+
if (input.suppressIntervention === true) return settle("silent", "suppressed", counts);
|
|
399
|
+
if (reminder === input.previousReminder) return settle("silent", "duplicate_reminder", counts);
|
|
400
|
+
const citedIds = citedRenderableEntryIds(bank, reminder);
|
|
401
|
+
if (!input.deterministicTrigger && citedIds.length === 0) return settle("gated", "uncited", counts);
|
|
402
|
+
bank.recordInjection(citedIds);
|
|
403
|
+
return settle("injected", "intervened", { ...counts, reminder });
|
|
404
|
+
} catch (error) {
|
|
405
|
+
clientError = errorMessage(error);
|
|
406
|
+
return settle("silent", "client_error");
|
|
407
|
+
} finally {
|
|
408
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
var OPERATIONS_OPEN = "<operations>";
|
|
412
|
+
var OPERATIONS_CLOSE = "</operations>";
|
|
413
|
+
var CONTEXT_OPEN = "<context_for_action>";
|
|
414
|
+
var CONTEXT_CLOSE = "</context_for_action>";
|
|
415
|
+
function cleanPolicyResponse(raw) {
|
|
416
|
+
return raw.replace(/<(think|thinking|reasoning|scratchpad)\b[^>]*>[\s\S]*?<\/\1\s*>/giu, " ").replace(/<(think|thinking|reasoning|scratchpad)\b[^>]*>[\s\S]*$/iu, " ").replace(/^[^\S\n]*```[^\n]*$/gmu, " ").trim();
|
|
417
|
+
}
|
|
418
|
+
function stripTagShapes(value) {
|
|
419
|
+
return value.replace(/<\/?[a-zA-Z][^>]*>/gu, " ");
|
|
420
|
+
}
|
|
421
|
+
function operationsEndIndex(text, from) {
|
|
422
|
+
let depth = 0;
|
|
423
|
+
let inString = false;
|
|
424
|
+
let escaped = false;
|
|
425
|
+
let started = false;
|
|
426
|
+
for (let index = from; index < text.length; index += 1) {
|
|
427
|
+
const char = text[index];
|
|
428
|
+
if (inString) {
|
|
429
|
+
if (escaped) escaped = false;
|
|
430
|
+
else if (char === "\\") escaped = true;
|
|
431
|
+
else if (char === '"') inString = false;
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
if (char === '"') {
|
|
435
|
+
inString = true;
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
if (char === "[" || char === "{") {
|
|
439
|
+
depth += 1;
|
|
440
|
+
started = true;
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
if (char === "]" || char === "}") {
|
|
444
|
+
depth -= 1;
|
|
445
|
+
if (depth < 0) return -1;
|
|
446
|
+
if (depth === 0 && started) return index + 1;
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
if (!started && char !== void 0 && char.trim().length > 0) return -1;
|
|
450
|
+
}
|
|
451
|
+
return -1;
|
|
452
|
+
}
|
|
453
|
+
function readPolicyStep(response) {
|
|
454
|
+
const unparseable = { ok: false, reason: "unparseable", dropped: 0 };
|
|
455
|
+
if (typeof response !== "string" || response.length === 0) return unparseable;
|
|
456
|
+
const text = cleanPolicyResponse(response);
|
|
457
|
+
const opensAt = text.indexOf(OPERATIONS_OPEN);
|
|
458
|
+
if (opensAt === -1) return unparseable;
|
|
459
|
+
const listAt = opensAt + OPERATIONS_OPEN.length;
|
|
460
|
+
const listEndsAt = operationsEndIndex(text, listAt);
|
|
461
|
+
if (listEndsAt === -1) return unparseable;
|
|
462
|
+
const closesAt = text.indexOf(OPERATIONS_CLOSE, listEndsAt);
|
|
463
|
+
if (closesAt === -1) return unparseable;
|
|
464
|
+
let rawOperations;
|
|
465
|
+
try {
|
|
466
|
+
rawOperations = JSON.parse(text.slice(listAt, listEndsAt));
|
|
467
|
+
} catch {
|
|
468
|
+
return unparseable;
|
|
469
|
+
}
|
|
470
|
+
const read = readOperations(rawOperations);
|
|
471
|
+
if (read === null) return unparseable;
|
|
472
|
+
if (read.operations.length === 0 && read.dropped > 0) {
|
|
473
|
+
return { ok: false, reason: "all_operations_invalid", dropped: read.dropped };
|
|
474
|
+
}
|
|
475
|
+
return {
|
|
476
|
+
ok: true,
|
|
477
|
+
step: { operations: read.operations, context: readContext(text.slice(closesAt + OPERATIONS_CLOSE.length)) },
|
|
478
|
+
dropped: read.dropped
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
function readContext(tail) {
|
|
482
|
+
const contextAt = tail.indexOf(CONTEXT_OPEN);
|
|
483
|
+
const silenceAt = tail.search(/<no_intervention\s*\/?>/u);
|
|
484
|
+
if (contextAt === -1) return null;
|
|
485
|
+
if (silenceAt !== -1 && silenceAt < contextAt) return null;
|
|
486
|
+
const body = tail.slice(contextAt + CONTEXT_OPEN.length);
|
|
487
|
+
const closesAt = body.lastIndexOf(CONTEXT_CLOSE);
|
|
488
|
+
const context = stripTagShapes(closesAt === -1 ? body : body.slice(0, closesAt)).replace(/\s+/gu, " ").trim();
|
|
489
|
+
return context.length === 0 ? null : context;
|
|
490
|
+
}
|
|
491
|
+
function readOperations(value) {
|
|
492
|
+
if (!Array.isArray(value) || value.length > TASK_MEMORY_POLICY_MAX_OPERATIONS) return null;
|
|
493
|
+
const operations = [];
|
|
494
|
+
let dropped = 0;
|
|
495
|
+
for (const raw of value) {
|
|
496
|
+
if (!isRecord(raw) || typeof raw.op !== "string") return null;
|
|
497
|
+
switch (raw.op) {
|
|
498
|
+
case "update_status": {
|
|
499
|
+
if (!hasExactKeys(raw, ["op", "content"])) return null;
|
|
500
|
+
const content = boundedContent(raw.content);
|
|
501
|
+
if (content === null) return null;
|
|
502
|
+
operations.push({ op: raw.op, content });
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
case "save_knowledge":
|
|
506
|
+
case "save_procedural": {
|
|
507
|
+
if (!hasExactKeys(raw, raw.id === void 0 ? ["op", "content"] : ["op", "content", "id"])) return null;
|
|
508
|
+
const content = boundedContent(raw.content);
|
|
509
|
+
if (content === null) return null;
|
|
510
|
+
if (raw.id !== void 0 && !nonEmptyString(raw.id)) return null;
|
|
511
|
+
const operation = { op: raw.op, content };
|
|
512
|
+
if (typeof raw.id === "string") operation.id = raw.id;
|
|
513
|
+
operations.push(operation);
|
|
514
|
+
break;
|
|
515
|
+
}
|
|
516
|
+
case "delete":
|
|
517
|
+
if (!hasExactKeys(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
|
|
518
|
+
operations.push({ op: raw.op, id: raw.id });
|
|
519
|
+
break;
|
|
520
|
+
default:
|
|
521
|
+
dropped += 1;
|
|
522
|
+
break;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
return { operations, dropped };
|
|
526
|
+
}
|
|
527
|
+
function resolveOperations(bank, operations) {
|
|
528
|
+
const snapshot = bank.snapshot();
|
|
529
|
+
const classes = /* @__PURE__ */ new Map();
|
|
530
|
+
if (snapshot.status !== null) classes.set(snapshot.status.id, "status");
|
|
531
|
+
for (const entry of snapshot.knowledge) classes.set(entry.id, "knowledge");
|
|
532
|
+
for (const entry of snapshot.procedural) classes.set(entry.id, "procedural");
|
|
533
|
+
const resolved = [];
|
|
534
|
+
for (const operation of operations) {
|
|
535
|
+
switch (operation.op) {
|
|
536
|
+
case "update_status":
|
|
537
|
+
resolved.push(operation);
|
|
538
|
+
break;
|
|
539
|
+
case "save_knowledge":
|
|
540
|
+
case "save_procedural": {
|
|
541
|
+
const expected = operation.op === "save_knowledge" ? "knowledge" : "procedural";
|
|
542
|
+
if (operation.id !== void 0 && classes.get(operation.id) === expected) {
|
|
543
|
+
resolved.push(operation);
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
resolved.push({ op: operation.op, content: operation.content });
|
|
547
|
+
break;
|
|
548
|
+
}
|
|
549
|
+
case "delete":
|
|
550
|
+
if (classes.delete(operation.id)) resolved.push(operation);
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
return resolved;
|
|
555
|
+
}
|
|
556
|
+
function applyOperations(bank, operations) {
|
|
557
|
+
for (const operation of operations) {
|
|
558
|
+
switch (operation.op) {
|
|
559
|
+
case "update_status":
|
|
560
|
+
bank.updateStatus(operation.content);
|
|
561
|
+
break;
|
|
562
|
+
case "save_knowledge":
|
|
563
|
+
bank.saveKnowledge(operation.content, operation.id === void 0 ? {} : { id: operation.id });
|
|
564
|
+
break;
|
|
565
|
+
case "save_procedural":
|
|
566
|
+
bank.saveProcedural(operation.content, operation.id === void 0 ? {} : { id: operation.id });
|
|
567
|
+
break;
|
|
568
|
+
case "delete":
|
|
569
|
+
bank.deleteEntry(operation.id);
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
function citedRenderableEntryIds(bank, reminder) {
|
|
575
|
+
const snapshot = bank.snapshot();
|
|
576
|
+
return [...snapshot.knowledge, ...snapshot.procedural].map((entry) => entry.id).filter((id) => reminder.includes(`[${id}]`));
|
|
577
|
+
}
|
|
578
|
+
function withMemoryPrefix(content, maxTokens) {
|
|
579
|
+
const prefixed = content.startsWith("Memory:") ? content : `Memory: ${content}`;
|
|
580
|
+
const maxChars = Math.max(0, maxTokens) * 4;
|
|
581
|
+
return prefixed.length <= maxChars ? prefixed : "";
|
|
582
|
+
}
|
|
583
|
+
function boundedContent(value) {
|
|
584
|
+
if (typeof value !== "string") return null;
|
|
585
|
+
const normalized = value.replace(/\s+/gu, " ").trim();
|
|
586
|
+
return normalized.length > 0 && normalized.length <= TASK_MEMORY_CONTENT_MAX_CHARS ? normalized : null;
|
|
587
|
+
}
|
|
588
|
+
function isRecord(value) {
|
|
589
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
590
|
+
}
|
|
591
|
+
function hasExactKeys(record, expected) {
|
|
592
|
+
const keys = Object.keys(record).sort();
|
|
593
|
+
return keys.length === expected.length && [...expected].sort().every((key, index) => keys[index] === key);
|
|
594
|
+
}
|
|
595
|
+
function nonEmptyString(value) {
|
|
596
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
597
|
+
}
|
|
598
|
+
function positiveInteger2(value, fallback) {
|
|
599
|
+
return value !== void 0 && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
600
|
+
}
|
|
601
|
+
function nonNegativeInteger2(value) {
|
|
602
|
+
return value !== void 0 && Number.isInteger(value) && value >= 0 ? value : 0;
|
|
603
|
+
}
|
|
604
|
+
function errorMessage(error) {
|
|
605
|
+
if (error instanceof Error) return error.message.length > 0 ? error.message : error.name;
|
|
606
|
+
return typeof error === "string" && error.length > 0 ? error : "an unknown client failure";
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
export {
|
|
610
|
+
TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP,
|
|
611
|
+
TASK_MEMORY_DEFAULT_PROCEDURAL_CAP,
|
|
612
|
+
TASK_MEMORY_CONTENT_MAX_CHARS,
|
|
613
|
+
TaskMemoryBank,
|
|
614
|
+
TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
|
|
615
|
+
runTaskMemoryPolicy,
|
|
616
|
+
createTaskMemoryTelemetrySink,
|
|
617
|
+
taskMemoryBankDelta
|
|
618
|
+
};
|
|
619
|
+
//# sourceMappingURL=chunk-OAO4GE4M.js.map
|