@iowarp/clio-coder 0.3.2 → 0.3.4
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 +269 -458
- package/CONTRIBUTING.md +1 -1
- package/README.md +3 -3
- package/dist/{acp-BIYHVZIM.js → acp-S5R4RR5B.js} +7 -6
- package/dist/{agents-YT6SSRIT.js → agents-P6DMMVZY.js} +24 -21
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-5TWEIYDN.js → auth-2XCZLPKS.js} +12 -8
- package/dist/{chunk-GGXXDWE4.js → chunk-22NAGB7X.js} +2 -2
- package/dist/{chunk-WMSVI4G2.js → chunk-2LZI5CAG.js} +133 -13
- package/dist/{chunk-OAO4GE4M.js → chunk-2TZWSW76.js} +2 -2
- package/dist/{chunk-OOJYHWRB.js → chunk-34475P3I.js} +2 -2
- package/dist/{chunk-WVO7V2QY.js → chunk-35MKKU5R.js} +4 -4
- package/dist/{chunk-LBNRH5WM.js → chunk-3HZ5RWN2.js} +5 -5
- package/dist/{chunk-AGYYIBLL.js → chunk-3JLKSKD7.js} +2 -2
- package/dist/{chunk-MBS4V7ZP.js → chunk-4JUF2NNX.js} +7 -7
- package/dist/{chunk-ZDOOVTXZ.js → chunk-4OC57DA6.js} +27 -4
- package/dist/chunk-5M54SPOL.js +926 -0
- package/dist/{chunk-STBPMHSX.js → chunk-7RXG6QRZ.js} +51 -11
- package/dist/{chunk-77VKQEHF.js → chunk-A2GZF7DC.js} +5 -5
- package/dist/{chunk-A3CYT5EX.js → chunk-AD2SYQYC.js} +55 -2
- package/dist/chunk-AOCYTWAV.js +449 -0
- package/dist/chunk-BEY543CS.js +258 -0
- package/dist/{chunk-6N5PTWMY.js → chunk-BP4OYD6A.js} +32 -13
- package/dist/chunk-BPGS2WCQ.js +612 -0
- package/dist/{chunk-J5HN4RYU.js → chunk-BRXQQJFP.js} +8 -8
- package/dist/chunk-CFGTUFWB.js +67 -0
- package/dist/{chunk-CBCAPZAA.js → chunk-E25LMLRW.js} +2 -2
- package/dist/{chunk-G2DE3C7R.js → chunk-EDRHSCIE.js} +4 -4
- package/dist/{chunk-4KLWL3UC.js → chunk-EFADSJET.js} +2 -2
- package/dist/{chunk-M6SHUN7Q.js → chunk-FO5ZOVUY.js} +2 -2
- package/dist/chunk-FYYLNIL5.js +313 -0
- package/dist/{chunk-EPVUXGXG.js → chunk-HV5X7OR2.js} +14 -12
- package/dist/{chunk-TZTZS7QK.js → chunk-HXG4IURW.js} +5 -3
- package/dist/{chunk-IGLFWIYI.js → chunk-K6WL7QZT.js} +3 -3
- package/dist/chunk-K7VKOLQQ.js +15 -0
- package/dist/{chunk-BMEMKKIT.js → chunk-KOHPCX4K.js} +2 -2
- package/dist/{chunk-V4RXGQ5Q.js → chunk-KRPY7NTG.js} +10 -7
- package/dist/chunk-LL4KHSZI.js +22 -0
- package/dist/{chunk-KJ5LWLOE.js → chunk-MEQ45TQ4.js} +15 -9
- package/dist/{chunk-5UUP6MWO.js → chunk-MV3K5QF2.js} +5 -436
- package/dist/{chunk-AO4RKG4M.js → chunk-N4CZJQRK.js} +5 -5
- package/dist/{chunk-ARBGF5F7.js → chunk-NILBFAPG.js} +14 -8
- package/dist/chunk-OZNBF4L3.js +23 -0
- package/dist/{verify-G6V4D2G7.js → chunk-PCZJO5TI.js} +127 -42
- package/dist/chunk-QQK64KLB.js +1360 -0
- package/dist/{chunk-6EJV5X2W.js → chunk-QQL5RT5M.js} +979 -1619
- package/dist/{chunk-LZSJBIVT.js → chunk-QWU7ZBO7.js} +70 -720
- package/dist/{chunk-2EHAIA3X.js → chunk-RD5U66HV.js} +3 -3
- package/dist/{chunk-OKGUZO2U.js → chunk-SPULKLCF.js} +4 -3
- package/dist/{chunk-OQ33BKR3.js → chunk-TTNYS3EA.js} +3 -60
- package/dist/chunk-TW3WDMVS.js +677 -0
- package/dist/chunk-TZSKNMZG.js +434 -0
- package/dist/{chunk-7MNJORFF.js → chunk-UL3WSD3F.js} +6 -1
- package/dist/{chunk-7EYHLWU7.js → chunk-UZHIZC5S.js} +7 -7
- package/dist/{chunk-QTYWRVRA.js → chunk-VAWWTKDP.js} +8 -8
- package/dist/{chunk-X75S7HFS.js → chunk-VEZEGCGW.js} +214 -20
- package/dist/{chunk-OHHN2SO4.js → chunk-VMNQ6OZA.js} +98 -202
- package/dist/chunk-VSNATDE6.js +122 -0
- package/dist/chunk-W6GROXXM.js +69 -0
- package/dist/chunk-WPQLXFOZ.js +375 -0
- package/dist/{chunk-ORBHGJC5.js → chunk-WR67VIZY.js} +3 -3
- package/dist/{chunk-3ZXDFGR5.js → chunk-X6COSD2O.js} +5 -5
- package/dist/chunk-ZGVHUX3M.js +66 -0
- package/dist/{chunk-MAW544W2.js → chunk-ZWMF7253.js} +4 -4
- package/dist/{chunk-MQSRRFWA.js → chunk-ZYKPLLNQ.js} +563 -546
- package/dist/cli/index.js +27 -23
- package/dist/{clio-4LY5K2AC.js → clio-J5JIOIDS.js} +7 -6
- package/dist/{code-nav-7AX6FYE6.js → code-nav-AXCXSBHX.js} +5 -3
- package/dist/{config-GTLUW2PR.js → config-OEBMIN2U.js} +37 -27
- package/dist/{configure-R6A64DHX.js → configure-PUQOSIXQ.js} +16 -13
- package/dist/{context-5VKGUVJJ.js → context-EKDCKUUZ.js} +82 -7
- package/dist/{context-RW5HC47S.js → context-MGSE4Z2T.js} +33 -23
- package/dist/{context-JFZEJ7W5.js → context-URSXPBCK.js} +17 -9
- package/dist/{context-clear-6ZHBAZZT.js → context-clear-KDAJRNUK.js} +33 -23
- package/dist/context-working-set-SBKMPPI2.js +1552 -0
- package/dist/{dispatch-runner-VKBRCWQC.js → dispatch-runner-MSWN72NK.js} +43 -29
- package/dist/{doctor-KI767GSN.js → doctor-7BSE27PJ.js} +10 -10
- package/dist/{eval-XSSNATB4.js → eval-IZGDOO4H.js} +9 -8
- package/dist/{evidence-UA6AWDQQ.js → evidence-SR7WXB5B.js} +51 -23
- package/dist/{evolve-QNTFGV6Z.js → evolve-K7VE2CBX.js} +30 -20
- package/dist/{fleet-Q7UOMUSG.js → fleet-7XMJNQNF.js} +48 -38
- package/dist/{fleet-preflight-DDN536IT.js → fleet-preflight-AQNAH644.js} +3 -3
- package/dist/{init-WBB65ZHQ.js → init-JGNPAYXT.js} +41 -31
- package/dist/{memory-MD3O64RI.js → memory-4ALKDJ4Q.js} +32 -22
- package/dist/{models-BZU34YWD.js → models-ZMMLFJNN.js} +22 -19
- package/dist/{monitor-MEQA5C3I.js → monitor-2F3T5KHP.js} +55 -43
- package/dist/{orchestrator-CGFKEP27.js → orchestrator-ORHT43JB.js} +2507 -1896
- package/dist/{reset-L2FQEE3E.js → reset-NXGTYNUO.js} +4 -3
- package/dist/{run-IV4Q6RLN.js → run-RF4WJGMT.js} +51 -41
- package/dist/{share-S5BZQC5I.js → share-UT3W6E4M.js} +5 -4
- package/dist/{skills-LQEKRDTN.js → skills-PSACKC5Q.js} +2 -2
- package/dist/{skills-eval-3DC4HEWS.js → skills-eval-WJSI55RZ.js} +34 -24
- package/dist/{targets-C4SSGQOB.js → targets-PIIRAOYS.js} +23 -20
- package/dist/{terminal-lease-IT5JW2NR.js → terminal-lease-ULWXWNVY.js} +5 -4
- package/dist/{upgrade-7TT7SQ3G.js → upgrade-346TZ6AV.js} +18 -17
- package/dist/{usage-GV4PKT3M.js → usage-6KKXR32N.js} +34 -24
- package/dist/verifiers-4UUM6TEE.js +1214 -0
- package/dist/verify-X5HDROLA.js +25 -0
- package/dist/{wiki-generate-DQF6Z66B.js → wiki-generate-7STOCIFZ.js} +42 -31
- package/dist/worker/entry.js +33 -24
- package/docs/README.md +8 -7
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- 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 +53 -21
- package/docs/config-knobs-audit.md +1 -2
- package/docs/configuration-and-targets.md +15 -1
- package/docs/context-engine.md +64 -12
- package/docs/context-working-set.md +194 -0
- package/docs/development-pipeline.md +1 -1
- package/docs/documentation-coverage.md +5 -5
- package/docs/documentation-guide.md +6 -5
- package/docs/environment-variables.md +2 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +14 -1
- package/docs/evidence-and-memory.md +74 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +2 -2
- package/docs/fleet-dispatch.md +22 -7
- package/docs/glossary.md +21 -1
- package/docs/installation-and-lifecycle.md +6 -6
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +7 -9
- package/docs/observability.md +4 -4
- package/docs/performance-methodology.md +2 -2
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +4 -4
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +35 -35
- package/docs/safety-model.md +23 -4
- package/docs/scientific-validation.md +21 -3
- package/docs/session-lifecycle.md +3 -3
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +79 -12
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +2 -2
- package/docs/worker-dispatch-mechanics.md +11 -1
- package/package.json +8 -11
- package/skills/meta/clio-test/SKILL.md +20 -17
- package/skills/meta/clio-test/evals.md +3 -3
- package/skills/meta/clio-test/references/harness.md +35 -6
- package/skills/meta/clio-test/references/test-map.md +20 -10
- package/skills/registry.yaml +2 -2
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/context-working-set.ts +513 -0
- package/src/cli/context.ts +8 -0
- package/src/cli/evidence.ts +20 -2
- package/src/cli/index.ts +4 -0
- package/src/cli/verifiers.ts +325 -0
- package/src/core/bash-exec.ts +39 -14
- package/src/core/bus-events.ts +19 -4
- package/src/core/config.ts +54 -0
- package/src/core/defaults.ts +50 -3
- package/src/core/git-commit-attribution.ts +46 -21
- package/src/core/verification-scripts.ts +6 -0
- package/src/domains/agents/builtins/verifier.md +3 -0
- package/src/domains/config/classify.ts +1 -0
- package/src/domains/config/keybindings.ts +3 -3
- package/src/domains/context/working-set/contract.ts +161 -0
- package/src/domains/context/working-set/defaults.ts +28 -0
- package/src/domains/context/working-set/engine.ts +203 -0
- package/src/domains/context/working-set/fold.ts +62 -0
- package/src/domains/context/working-set/horizon.ts +38 -0
- package/src/domains/context/working-set/marker.ts +103 -0
- package/src/domains/context/working-set/path-index.ts +436 -0
- package/src/domains/context/working-set/payload.ts +152 -0
- package/src/domains/context/working-set/policies/age-horizon.ts +55 -0
- package/src/domains/context/working-set/policies/index.ts +21 -0
- package/src/domains/context/working-set/policies/structural.ts +160 -0
- package/src/domains/context/working-set/project.ts +132 -0
- package/src/domains/context/working-set/protect.ts +109 -0
- package/src/domains/context/working-set/recall.ts +177 -0
- package/src/domains/context/working-set/replay/controls.ts +112 -0
- package/src/domains/context/working-set/replay/load-clio.ts +199 -0
- package/src/domains/context/working-set/replay/metrics.ts +185 -0
- package/src/domains/context/working-set/replay/reference-graph.ts +79 -0
- package/src/domains/context/working-set/replay/report.ts +139 -0
- package/src/domains/context/working-set/replay/runner.ts +325 -0
- package/src/domains/context/working-set/replay/synthetic.ts +422 -0
- package/src/domains/context/working-set/replay/trace.ts +21 -0
- package/src/domains/context/working-set/visible.ts +54 -0
- package/src/domains/evidence/build.ts +112 -45
- package/src/domains/evidence/eval.ts +24 -7
- package/src/domains/evidence/index.ts +53 -0
- package/src/domains/evidence/ordering.ts +12 -0
- package/src/domains/evidence/run-trust.ts +221 -0
- package/src/domains/evidence/store.ts +46 -6
- package/src/domains/evidence/trust-status.ts +854 -0
- package/src/domains/evidence/types.ts +26 -0
- package/src/domains/middleware/memory-intervention.ts +3 -0
- package/src/domains/middleware/stalled-turn.ts +165 -4
- package/src/domains/safety/autonomy.ts +1 -1
- package/src/domains/safety/default-path-policy.ts +8 -0
- package/src/domains/safety/finish-contract.ts +4 -3
- package/src/domains/safety/policy-engine.ts +48 -6
- package/src/domains/session/compaction/compact.ts +23 -1
- package/src/domains/session/compaction/cut-point.ts +2 -0
- package/src/domains/session/compaction/tokens.ts +16 -1
- package/src/domains/session/context-ledger.ts +2 -0
- package/src/domains/session/entries.ts +107 -1
- package/src/domains/session/manager.ts +9 -2
- package/src/domains/session/migrations/index.ts +22 -3
- package/src/engine/acp/server.ts +3 -0
- package/src/engine/agent.ts +18 -1
- package/src/engine/session.ts +9 -3
- package/src/entry/orchestrator.ts +16 -4
- package/src/interactive/chat-loop-messages.ts +18 -6
- package/src/interactive/chat-panel.ts +571 -244
- package/src/interactive/chat-renderer.ts +79 -39
- package/src/interactive/context-meter.ts +10 -0
- package/src/interactive/context-overlay.ts +81 -6
- package/src/interactive/context-recall-command.ts +110 -0
- package/src/interactive/editor-submit.ts +26 -1
- package/src/interactive/footer/widgets.ts +22 -20
- package/src/interactive/footer-panel.ts +6 -1
- package/src/interactive/interactive-application.ts +2 -0
- package/src/interactive/interactive-event-projection.ts +12 -0
- package/src/interactive/interactive-slash-runtime.ts +49 -8
- package/src/interactive/model-session-replay.ts +21 -0
- package/src/interactive/overlay-general-openers.ts +6 -0
- package/src/interactive/overlay-session-lifecycle.ts +8 -4
- package/src/interactive/overlays/ask-user.ts +146 -24
- package/src/interactive/renderers/tool-execution.ts +167 -56
- package/src/interactive/session-transcript.ts +2 -2
- package/src/interactive/slash-commands.ts +29 -2
- 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/transcript-detail.ts +120 -0
- package/src/interactive/turn-context.ts +238 -88
- package/src/interactive/turn-middleware.ts +6 -6
- package/src/tools/agent-tools.ts +11 -4
- package/src/tools/bash.ts +144 -82
- package/src/tools/builtin-tool-catalog.ts +18 -6
- package/src/tools/context/index.ts +105 -3
- package/src/tools/context/surface.ts +3 -2
- package/src/tools/core-bootstrap.ts +21 -0
- package/src/tools/dispatch-runner.ts +9 -7
- package/src/tools/monitor.ts +28 -20
- package/src/tools/presentation.ts +107 -0
- package/src/tools/registry.ts +65 -7
- package/src/tools/result-disposition.ts +550 -0
- package/src/tools/result-shaping.ts +262 -19
- package/src/tools/safe-exec.ts +2 -0
- package/src/tools/verify/authoring.ts +1119 -0
- package/src/tools/verify/catalog.ts +346 -0
- package/src/tools/verify/index.ts +13 -3
- package/src/tools/verify/scripts.ts +135 -37
- package/src/tools/verify/surface.ts +9 -5
- package/src/tools/worker-evidence.ts +35 -12
- package/dist/chunk-MNA4JGU4.js +0 -255
- package/dist/chunk-SRF2PJNW.js +0 -184
- package/dist/chunk-T6YILFSB.js +0 -80
- package/dist/chunk-VAKQQHWR.js +0 -434
|
@@ -2,7 +2,15 @@
|
|
|
2
2
|
* Strict session-format version reader.
|
|
3
3
|
*
|
|
4
4
|
* Runs before every session resume. Earlier pre-1.0 formats are disposable
|
|
5
|
-
* local state and must not be transformed into the current format.
|
|
5
|
+
* local state and must not be transformed into the current format. A version
|
|
6
|
+
* from the future is refused for the opposite reason: the file is not
|
|
7
|
+
* disposable, it belongs to a newer Clio, and this build would silently drop
|
|
8
|
+
* whatever that build understood and this one does not. Downgrading and
|
|
9
|
+
* resuming would then write the truncated reading back over the original.
|
|
10
|
+
*
|
|
11
|
+
* Version 3 to 4 is the one additive step: 4 only adds the working-set kinds
|
|
12
|
+
* (`contextEviction`, `contextRecall`), so a version-3 ledger is read as-is
|
|
13
|
+
* and the metadata is restamped. Nothing in the file changes.
|
|
6
14
|
*/
|
|
7
15
|
|
|
8
16
|
import { CURRENT_SESSION_FORMAT_VERSION } from "../../../engine/session.js";
|
|
@@ -10,6 +18,9 @@ import type { SessionMeta } from "../contract.js";
|
|
|
10
18
|
|
|
11
19
|
export { CURRENT_SESSION_FORMAT_VERSION };
|
|
12
20
|
|
|
21
|
+
/** Oldest version this build reads without transforming the ledger. */
|
|
22
|
+
export const OLDEST_READABLE_SESSION_FORMAT_VERSION = 3;
|
|
23
|
+
|
|
13
24
|
export interface MigrationResult {
|
|
14
25
|
migrated: boolean;
|
|
15
26
|
from: number;
|
|
@@ -18,10 +29,18 @@ export interface MigrationResult {
|
|
|
18
29
|
|
|
19
30
|
export function runMigrations(meta: SessionMeta, sessionPath: string): MigrationResult {
|
|
20
31
|
const from = meta.sessionFormatVersion ?? 1;
|
|
21
|
-
if (from <
|
|
32
|
+
if (from < OLDEST_READABLE_SESSION_FORMAT_VERSION) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`session metadata has an unsupported format version (expected version ${CURRENT_SESSION_FORMAT_VERSION}, got ${from}): ${sessionPath}. Remove the session directory to start a new session.`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
if (from > CURRENT_SESSION_FORMAT_VERSION) {
|
|
22
38
|
throw new Error(
|
|
23
|
-
`session
|
|
39
|
+
`session was written by a newer Clio (format version ${from}, this build reads version ${CURRENT_SESSION_FORMAT_VERSION}): ${sessionPath}. Upgrade clio-coder to resume this session.`,
|
|
24
40
|
);
|
|
25
41
|
}
|
|
42
|
+
if (from < CURRENT_SESSION_FORMAT_VERSION) {
|
|
43
|
+
return { migrated: true, from, to: CURRENT_SESSION_FORMAT_VERSION };
|
|
44
|
+
}
|
|
26
45
|
return { migrated: false, from, to: from };
|
|
27
46
|
}
|
package/src/engine/acp/server.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { SessionContract, SessionMeta } from "../../domains/session/contrac
|
|
|
12
12
|
import type { MessageEntry, SessionEntry } from "../../domains/session/entries.js";
|
|
13
13
|
import { filterEntriesToActivePath } from "../../domains/session/tree/active-path.js";
|
|
14
14
|
import type { ToolRegistry } from "../../tools/registry.js";
|
|
15
|
+
import { toolResultPresentationText } from "../../tools/result-disposition.js";
|
|
15
16
|
import type { AgentMessage } from "../types.js";
|
|
16
17
|
import { ACP_TURN_FAILED_MESSAGE, AcpRequestError, AcpTimeoutError, acpErrorMessage } from "./errors.js";
|
|
17
18
|
import type { AcpJsonRpcPeerTransport } from "./transport.js";
|
|
@@ -537,6 +538,8 @@ function applyStopReason(active: ActivePrompt, message: unknown): void {
|
|
|
537
538
|
function outputText(value: unknown): string {
|
|
538
539
|
if (typeof value === "string") return value;
|
|
539
540
|
if (!isRecord(value)) return "";
|
|
541
|
+
const presentationText = toolResultPresentationText(value);
|
|
542
|
+
if (presentationText !== null) return presentationText;
|
|
540
543
|
if (Array.isArray(value.content)) return contentText(value.content);
|
|
541
544
|
if (typeof value.output === "string") return value.output;
|
|
542
545
|
if (typeof value.text === "string") return value.text;
|
package/src/engine/agent.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { Agent, type AgentOptions, type StreamFn } from "@earendil-works/pi-agent-core";
|
|
14
|
+
import { isDispositionedToolResultError } from "../tools/result-disposition.js";
|
|
14
15
|
import { engineStreamSimple } from "./api-registry.js";
|
|
15
16
|
|
|
16
17
|
export type EngineAgentOptions = Omit<AgentOptions, "streamFn"> & { streamFn?: StreamFn };
|
|
@@ -20,8 +21,24 @@ export interface EngineAgentHandle {
|
|
|
20
21
|
state(): Agent["state"];
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
function dispositionAwareAfterToolCall(
|
|
25
|
+
delegate: AgentOptions["afterToolCall"],
|
|
26
|
+
): NonNullable<AgentOptions["afterToolCall"]> {
|
|
27
|
+
return async (context, signal) => {
|
|
28
|
+
const override = await delegate?.(context, signal);
|
|
29
|
+
const effectiveResult =
|
|
30
|
+
override?.details === undefined ? context.result : { ...context.result, details: override.details };
|
|
31
|
+
if (isDispositionedToolResultError(effectiveResult)) return { ...override, isError: true };
|
|
32
|
+
return override;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
23
36
|
export function createEngineAgent(options: EngineAgentOptions = {}): EngineAgentHandle {
|
|
24
|
-
const agent = new Agent({
|
|
37
|
+
const agent = new Agent({
|
|
38
|
+
streamFn: engineStreamSimple,
|
|
39
|
+
...options,
|
|
40
|
+
afterToolCall: dispositionAwareAfterToolCall(options.afterToolCall),
|
|
41
|
+
});
|
|
25
42
|
return {
|
|
26
43
|
agent,
|
|
27
44
|
state: () => agent.state,
|
package/src/engine/session.ts
CHANGED
|
@@ -57,13 +57,19 @@ export interface ClioSessionMeta {
|
|
|
57
57
|
platform: string;
|
|
58
58
|
nodeVersion: string;
|
|
59
59
|
/**
|
|
60
|
-
* Version
|
|
61
|
-
*
|
|
60
|
+
* Version 4 on every new session. Readers reject earlier versions, sessions
|
|
61
|
+
* that omit this field, and versions from the future.
|
|
62
62
|
*/
|
|
63
63
|
sessionFormatVersion?: number;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Version 4 adds the working-set ledger kinds (`contextEviction`,
|
|
68
|
+
* `contextRecall`). A version-3 reader would parse those entries as unknown
|
|
69
|
+
* kinds and replay a session as if nothing had been evicted, so the bump is
|
|
70
|
+
* what makes an older Clio refuse the file instead of misreading it.
|
|
71
|
+
*/
|
|
72
|
+
export const CURRENT_SESSION_FORMAT_VERSION = 4;
|
|
67
73
|
|
|
68
74
|
export interface ClioSessionJsonlHeader {
|
|
69
75
|
type: "session";
|
|
@@ -161,8 +161,8 @@ import {
|
|
|
161
161
|
import { openSession, readSessionTailTurns, sessionCurrentPath, sessionPaths } from "../engine/session.js";
|
|
162
162
|
import type { EngineModel } from "../engine/types.js";
|
|
163
163
|
import { createChatLoop } from "../interactive/chat-loop.js";
|
|
164
|
-
import { buildReplayAgentMessagesFromTurns } from "../interactive/chat-renderer.js";
|
|
165
164
|
import { type RunIo, startInteractive } from "../interactive/index.js";
|
|
165
|
+
import { buildModelReplayAgentMessagesFromTurns } from "../interactive/model-session-replay.js";
|
|
166
166
|
import type { BootOptions } from "./boot-options.js";
|
|
167
167
|
|
|
168
168
|
export type { BootOptions, HeadlessSamplingOverrides } from "./boot-options.js";
|
|
@@ -1236,7 +1236,16 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1236
1236
|
// one object the dispatch tool and the keypress both hold.
|
|
1237
1237
|
const dispatchBackground = createDispatchBackgroundRegistry();
|
|
1238
1238
|
registerAllTools(toolRegistry, {
|
|
1239
|
-
...(session
|
|
1239
|
+
...(session
|
|
1240
|
+
? {
|
|
1241
|
+
session,
|
|
1242
|
+
readSessionEntries: () => {
|
|
1243
|
+
const meta = session.current();
|
|
1244
|
+
return meta ? readSessionEntriesForCompact(meta.id) : [];
|
|
1245
|
+
},
|
|
1246
|
+
onContextRecalled: (payload) => bus.emit(BusChannels.ContextRecalled, payload),
|
|
1247
|
+
}
|
|
1248
|
+
: {}),
|
|
1240
1249
|
taskBoard,
|
|
1241
1250
|
userTasks,
|
|
1242
1251
|
dispatch,
|
|
@@ -1612,7 +1621,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1612
1621
|
// parent onto.
|
|
1613
1622
|
chat.resetForSession(
|
|
1614
1623
|
leafTurnId,
|
|
1615
|
-
|
|
1624
|
+
buildModelReplayAgentMessagesFromTurns(
|
|
1625
|
+
readCurrentSessionEntries(),
|
|
1626
|
+
leafTurnId ? { activeLeafTurnId: leafTurnId } : {},
|
|
1627
|
+
),
|
|
1616
1628
|
);
|
|
1617
1629
|
} catch (err) {
|
|
1618
1630
|
chat.resetForSession(leafTurnId);
|
|
@@ -1664,7 +1676,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1664
1676
|
? {
|
|
1665
1677
|
readSessionEntries: readSessionEntriesForCompact,
|
|
1666
1678
|
buildReplayMessages: (entries: ReadonlyArray<SessionEntry>, leafTurnId: string | null) =>
|
|
1667
|
-
|
|
1679
|
+
buildModelReplayAgentMessagesFromTurns(entries, leafTurnId === null ? {} : { activeLeafTurnId: leafTurnId }),
|
|
1668
1680
|
}
|
|
1669
1681
|
: {}),
|
|
1670
1682
|
providers,
|
|
@@ -555,21 +555,33 @@ export function toolResultSummary(result: unknown): Record<string, unknown> {
|
|
|
555
555
|
const bytes = Buffer.byteLength(text, "utf8");
|
|
556
556
|
const details = recordValue(obj?.details);
|
|
557
557
|
const size = recordValue(details?.resultSize);
|
|
558
|
+
const disposition = recordValue(details?.resultDisposition);
|
|
558
559
|
const truncation = recordValue(details?.truncation);
|
|
559
560
|
const observation = recordValue(details?.observation);
|
|
560
561
|
const offloadPath =
|
|
561
|
-
typeof
|
|
562
|
-
?
|
|
563
|
-
: typeof
|
|
564
|
-
?
|
|
565
|
-
:
|
|
562
|
+
typeof disposition?.offloadPath === "string"
|
|
563
|
+
? disposition.offloadPath
|
|
564
|
+
: typeof observation?.offloadPath === "string"
|
|
565
|
+
? observation.offloadPath
|
|
566
|
+
: typeof size?.offloadPath === "string"
|
|
567
|
+
? size.offloadPath
|
|
568
|
+
: null;
|
|
569
|
+
const displayedBytes =
|
|
570
|
+
typeof disposition?.displayedBytes === "number" && Number.isFinite(disposition.displayedBytes)
|
|
571
|
+
? disposition.displayedBytes
|
|
572
|
+
: bytes;
|
|
566
573
|
return {
|
|
567
|
-
bytes,
|
|
574
|
+
bytes: displayedBytes,
|
|
568
575
|
truncated:
|
|
576
|
+
disposition?.presentationTruncated === true ||
|
|
569
577
|
size?.truncated === true ||
|
|
570
578
|
truncation?.truncated === true ||
|
|
571
579
|
observation?.truncated === true ||
|
|
572
580
|
text.includes("[tool result truncated]"),
|
|
581
|
+
...(typeof disposition?.capturedBytes === "number" ? { capturedBytes: disposition.capturedBytes } : {}),
|
|
582
|
+
...(typeof disposition?.displayedBytes === "number" ? { displayedBytes: disposition.displayedBytes } : {}),
|
|
583
|
+
...(typeof disposition?.contextBytes === "number" ? { contextBytes: disposition.contextBytes } : {}),
|
|
584
|
+
...(disposition?.contextTruncated === true ? { contextTruncated: true } : {}),
|
|
573
585
|
...(typeof size?.policy === "string" ? { policy: size.policy } : {}),
|
|
574
586
|
...(typeof size?.followUpHint === "string" ? { followUpHint: size.followUpHint } : {}),
|
|
575
587
|
...(offloadPath !== null ? { offloadPath } : {}),
|