@koda-sl/baker-bridge 0.110.0-dev.6a86a7961 → 0.110.0-dev.6beff6a4b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -65
- package/dist/broker/baker-api.d.ts +23 -0
- package/dist/broker/baker-api.d.ts.map +1 -0
- package/dist/broker/baker-api.js +55 -0
- package/dist/broker/baker-api.js.map +1 -0
- package/dist/broker/broker-client.d.ts +10 -0
- package/dist/broker/broker-client.d.ts.map +1 -0
- package/dist/broker/broker-client.js +60 -0
- package/dist/broker/broker-client.js.map +1 -0
- package/dist/broker/broker-process.d.ts +10 -0
- package/dist/broker/broker-process.d.ts.map +1 -0
- package/dist/broker/broker-process.js +20 -0
- package/dist/broker/broker-process.js.map +1 -0
- package/dist/broker/broker-process.test.d.ts +2 -0
- package/dist/broker/broker-process.test.d.ts.map +1 -0
- package/dist/broker/broker-process.test.js +13 -0
- package/dist/broker/broker-process.test.js.map +1 -0
- package/dist/broker/ca.d.ts +38 -0
- package/dist/broker/ca.d.ts.map +1 -0
- package/dist/broker/ca.js +80 -0
- package/dist/broker/ca.js.map +1 -0
- package/dist/broker/ca.test.d.ts +2 -0
- package/dist/broker/ca.test.d.ts.map +1 -0
- package/dist/broker/ca.test.js +58 -0
- package/dist/broker/ca.test.js.map +1 -0
- package/dist/broker/credential-cache.d.ts +24 -0
- package/dist/broker/credential-cache.d.ts.map +1 -0
- package/dist/broker/credential-cache.js +76 -0
- package/dist/broker/credential-cache.js.map +1 -0
- package/dist/broker/credential-cache.test.d.ts +2 -0
- package/dist/broker/credential-cache.test.d.ts.map +1 -0
- package/dist/broker/credential-cache.test.js +136 -0
- package/dist/broker/credential-cache.test.js.map +1 -0
- package/dist/broker/credential-text.d.ts +45 -0
- package/dist/broker/credential-text.d.ts.map +1 -0
- package/dist/broker/credential-text.js +103 -0
- package/dist/broker/credential-text.js.map +1 -0
- package/dist/broker/credential-text.test.d.ts +2 -0
- package/dist/broker/credential-text.test.d.ts.map +1 -0
- package/dist/broker/credential-text.test.js +54 -0
- package/dist/broker/credential-text.test.js.map +1 -0
- package/dist/broker/env.d.ts +21 -0
- package/dist/broker/env.d.ts.map +1 -0
- package/dist/broker/env.js +20 -0
- package/dist/broker/env.js.map +1 -0
- package/dist/broker/main.d.ts +3 -0
- package/dist/broker/main.d.ts.map +1 -0
- package/dist/broker/main.js +57 -0
- package/dist/broker/main.js.map +1 -0
- package/dist/broker/proxy.d.ts +24 -0
- package/dist/broker/proxy.d.ts.map +1 -0
- package/dist/broker/proxy.integration.test.d.ts +2 -0
- package/dist/broker/proxy.integration.test.d.ts.map +1 -0
- package/dist/broker/proxy.integration.test.js +197 -0
- package/dist/broker/proxy.integration.test.js.map +1 -0
- package/dist/broker/proxy.js +147 -0
- package/dist/broker/proxy.js.map +1 -0
- package/dist/broker/rewrite.d.ts +44 -0
- package/dist/broker/rewrite.d.ts.map +1 -0
- package/dist/broker/rewrite.js +291 -0
- package/dist/broker/rewrite.js.map +1 -0
- package/dist/broker/rewrite.test.d.ts +2 -0
- package/dist/broker/rewrite.test.d.ts.map +1 -0
- package/dist/broker/rewrite.test.js +171 -0
- package/dist/broker/rewrite.test.js.map +1 -0
- package/dist/broker/socket-service.d.ts +18 -0
- package/dist/broker/socket-service.d.ts.map +1 -0
- package/dist/broker/socket-service.js +113 -0
- package/dist/broker/socket-service.js.map +1 -0
- package/dist/broker/socket-service.test.d.ts +2 -0
- package/dist/broker/socket-service.test.d.ts.map +1 -0
- package/dist/broker/socket-service.test.js +80 -0
- package/dist/broker/socket-service.test.js.map +1 -0
- package/dist/broker/supervisor-main.d.ts +3 -0
- package/dist/broker/supervisor-main.d.ts.map +1 -0
- package/dist/broker/supervisor-main.js +70 -0
- package/dist/broker/supervisor-main.js.map +1 -0
- package/dist/broker/supervisor.d.ts +25 -0
- package/dist/broker/supervisor.d.ts.map +1 -0
- package/dist/broker/supervisor.js +88 -0
- package/dist/broker/supervisor.js.map +1 -0
- package/dist/broker/supervisor.test.d.ts +2 -0
- package/dist/broker/supervisor.test.d.ts.map +1 -0
- package/dist/broker/supervisor.test.js +161 -0
- package/dist/broker/supervisor.test.js.map +1 -0
- package/dist/broker/token-bucket.d.ts +9 -0
- package/dist/broker/token-bucket.d.ts.map +1 -0
- package/dist/broker/token-bucket.js +18 -0
- package/dist/broker/token-bucket.js.map +1 -0
- package/dist/broker/usage-reporter.d.ts +18 -0
- package/dist/broker/usage-reporter.d.ts.map +1 -0
- package/dist/broker/usage-reporter.js +31 -0
- package/dist/broker/usage-reporter.js.map +1 -0
- package/dist/broker/usage-reporter.test.d.ts +2 -0
- package/dist/broker/usage-reporter.test.d.ts.map +1 -0
- package/dist/broker/usage-reporter.test.js +20 -0
- package/dist/broker/usage-reporter.test.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/hono/agent-session.d.ts +4 -0
- package/dist/hono/agent-session.d.ts.map +1 -1
- package/dist/hono/agent-session.js +28 -2
- package/dist/hono/agent-session.js.map +1 -1
- package/dist/hono/agent-session.test.js +37 -0
- package/dist/hono/agent-session.test.js.map +1 -1
- package/dist/hono/agent-tasks.d.ts.map +1 -1
- package/dist/hono/agent-tasks.js +11 -7
- package/dist/hono/agent-tasks.js.map +1 -1
- package/dist/hono/agent-tasks.test.js +15 -0
- package/dist/hono/agent-tasks.test.js.map +1 -1
- package/dist/hono/agent.d.ts +2 -0
- package/dist/hono/agent.d.ts.map +1 -1
- package/dist/hono/agent.js +22 -10
- package/dist/hono/agent.js.map +1 -1
- package/dist/hono/agent.test.js +8 -2
- package/dist/hono/agent.test.js.map +1 -1
- package/dist/hono/attachments.d.ts +6 -1
- package/dist/hono/attachments.d.ts.map +1 -1
- package/dist/hono/attachments.js +9 -4
- package/dist/hono/attachments.js.map +1 -1
- package/dist/hono/attachments.test.js +5 -0
- package/dist/hono/attachments.test.js.map +1 -1
- package/dist/hono/avatar-accent.d.ts +23 -5
- package/dist/hono/avatar-accent.d.ts.map +1 -1
- package/dist/hono/avatar-accent.js +54 -63
- package/dist/hono/avatar-accent.js.map +1 -1
- package/dist/hono/avatar-accent.test.js +64 -35
- package/dist/hono/avatar-accent.test.js.map +1 -1
- package/dist/hono/avatar-casting.d.ts +1 -0
- package/dist/hono/avatar-casting.d.ts.map +1 -1
- package/dist/hono/avatar-casting.js +18 -4
- package/dist/hono/avatar-casting.js.map +1 -1
- package/dist/hono/avatar-casting.test.js +5 -0
- package/dist/hono/avatar-casting.test.js.map +1 -1
- package/dist/hono/avatar-face-question.d.ts +23 -6
- package/dist/hono/avatar-face-question.d.ts.map +1 -1
- package/dist/hono/avatar-face-question.js +48 -59
- package/dist/hono/avatar-face-question.js.map +1 -1
- package/dist/hono/avatar-face-question.test.js +46 -101
- package/dist/hono/avatar-face-question.test.js.map +1 -1
- package/dist/hono/baker-ui-tool-schemas.test.js +30 -4
- package/dist/hono/baker-ui-tool-schemas.test.js.map +1 -1
- package/dist/hono/blocking-card.d.ts +12 -0
- package/dist/hono/blocking-card.d.ts.map +1 -0
- package/dist/hono/blocking-card.js +12 -0
- package/dist/hono/blocking-card.js.map +1 -0
- package/dist/hono/bridge-job.d.ts +78 -13
- package/dist/hono/bridge-job.d.ts.map +1 -1
- package/dist/hono/bridge-job.js +333 -103
- package/dist/hono/bridge-job.js.map +1 -1
- package/dist/hono/bridge-job.test.js +571 -190
- package/dist/hono/bridge-job.test.js.map +1 -1
- package/dist/hono/check-content.d.ts +49 -0
- package/dist/hono/check-content.d.ts.map +1 -0
- package/dist/hono/check-content.js +182 -0
- package/dist/hono/check-content.js.map +1 -0
- package/dist/hono/check-content.test.d.ts +2 -0
- package/dist/hono/check-content.test.d.ts.map +1 -0
- package/dist/hono/check-content.test.js +87 -0
- package/dist/hono/check-content.test.js.map +1 -0
- package/dist/hono/connection-input.d.ts +177 -12
- package/dist/hono/connection-input.d.ts.map +1 -1
- package/dist/hono/connection-input.js +167 -14
- package/dist/hono/connection-input.js.map +1 -1
- package/dist/hono/connection-input.test.js +112 -10
- package/dist/hono/connection-input.test.js.map +1 -1
- package/dist/hono/convex.d.ts +8 -0
- package/dist/hono/convex.d.ts.map +1 -1
- package/dist/hono/convex.js +8 -0
- package/dist/hono/convex.js.map +1 -1
- package/dist/hono/convex.test.js +4 -1
- package/dist/hono/convex.test.js.map +1 -1
- package/dist/hono/credential-input.d.ts +39 -0
- package/dist/hono/credential-input.d.ts.map +1 -0
- package/dist/hono/credential-input.js +78 -0
- package/dist/hono/credential-input.js.map +1 -0
- package/dist/hono/credential-scrub.d.ts +42 -0
- package/dist/hono/credential-scrub.d.ts.map +1 -0
- package/dist/hono/credential-scrub.js +173 -0
- package/dist/hono/credential-scrub.js.map +1 -0
- package/dist/hono/credential-scrub.test.d.ts +2 -0
- package/dist/hono/credential-scrub.test.d.ts.map +1 -0
- package/dist/hono/credential-scrub.test.js +130 -0
- package/dist/hono/credential-scrub.test.js.map +1 -0
- package/dist/hono/env.d.ts +1 -0
- package/dist/hono/env.d.ts.map +1 -1
- package/dist/hono/env.js +2 -0
- package/dist/hono/env.js.map +1 -1
- package/dist/hono/flow-crypto.d.ts +2 -1
- package/dist/hono/flow-crypto.d.ts.map +1 -1
- package/dist/hono/flow-crypto.js +50 -26
- package/dist/hono/flow-crypto.js.map +1 -1
- package/dist/hono/flow-crypto.test.js +32 -0
- package/dist/hono/flow-crypto.test.js.map +1 -1
- package/dist/hono/flow-input-card-fields.test.d.ts +10 -0
- package/dist/hono/flow-input-card-fields.test.d.ts.map +1 -0
- package/dist/hono/flow-input-card-fields.test.js +26 -0
- package/dist/hono/flow-input-card-fields.test.js.map +1 -0
- package/dist/hono/flow-input-fields.test.js +1 -1
- package/dist/hono/flow-input-fields.test.js.map +1 -1
- package/dist/hono/flow-input.d.ts +23 -2
- package/dist/hono/flow-input.d.ts.map +1 -1
- package/dist/hono/flow-input.js +64 -14
- package/dist/hono/flow-input.js.map +1 -1
- package/dist/hono/flow-input.test.js +86 -11
- package/dist/hono/flow-input.test.js.map +1 -1
- package/dist/hono/jev.d.ts +16 -0
- package/dist/hono/jev.d.ts.map +1 -0
- package/dist/hono/jev.js +60 -0
- package/dist/hono/jev.js.map +1 -0
- package/dist/hono/jev.test.d.ts +2 -0
- package/dist/hono/jev.test.d.ts.map +1 -0
- package/dist/hono/jev.test.js +15 -0
- package/dist/hono/jev.test.js.map +1 -0
- package/dist/hono/knowledge-content.d.ts.map +1 -1
- package/dist/hono/knowledge-content.js +4 -2
- package/dist/hono/knowledge-content.js.map +1 -1
- package/dist/hono/knowledge-content.test.js +6 -5
- package/dist/hono/knowledge-content.test.js.map +1 -1
- package/dist/hono/mcp-servers.d.ts +8 -1
- package/dist/hono/mcp-servers.d.ts.map +1 -1
- package/dist/hono/mcp-servers.js +17 -6
- package/dist/hono/mcp-servers.js.map +1 -1
- package/dist/hono/mcp-servers.test.js +25 -0
- package/dist/hono/mcp-servers.test.js.map +1 -1
- package/dist/hono/model-capabilities.d.ts.map +1 -1
- package/dist/hono/model-capabilities.js +20 -9
- package/dist/hono/model-capabilities.js.map +1 -1
- package/dist/hono/model-capabilities.test.js +16 -8
- package/dist/hono/model-capabilities.test.js.map +1 -1
- package/dist/hono/oom-priority.agent.test.d.ts +2 -0
- package/dist/hono/oom-priority.agent.test.d.ts.map +1 -0
- package/dist/hono/oom-priority.agent.test.js +138 -0
- package/dist/hono/oom-priority.agent.test.js.map +1 -0
- package/dist/hono/oom-priority.d.ts +39 -0
- package/dist/hono/oom-priority.d.ts.map +1 -0
- package/dist/hono/oom-priority.js +138 -0
- package/dist/hono/oom-priority.js.map +1 -0
- package/dist/hono/oom-priority.test.d.ts +2 -0
- package/dist/hono/oom-priority.test.d.ts.map +1 -0
- package/dist/hono/oom-priority.test.js +52 -0
- package/dist/hono/oom-priority.test.js.map +1 -0
- package/dist/hono/openrouter-session.d.ts.map +1 -1
- package/dist/hono/openrouter-session.js +12 -1
- package/dist/hono/openrouter-session.js.map +1 -1
- package/dist/hono/openrouter-session.test.js +9 -3
- package/dist/hono/openrouter-session.test.js.map +1 -1
- package/dist/hono/prompt-context.d.ts +8 -1
- package/dist/hono/prompt-context.d.ts.map +1 -1
- package/dist/hono/prompt-context.js +45 -7
- package/dist/hono/prompt-context.js.map +1 -1
- package/dist/hono/prompt-context.test.js +32 -1
- package/dist/hono/prompt-context.test.js.map +1 -1
- package/dist/hono/publish-recovery.d.ts +1 -1
- package/dist/hono/publish-recovery.d.ts.map +1 -1
- package/dist/hono/publish-recovery.js +9 -6
- package/dist/hono/publish-recovery.js.map +1 -1
- package/dist/hono/publish-recovery.test.js +11 -2
- package/dist/hono/publish-recovery.test.js.map +1 -1
- package/dist/hono/relay.d.ts +10 -1
- package/dist/hono/relay.d.ts.map +1 -1
- package/dist/hono/relay.js +6 -0
- package/dist/hono/relay.js.map +1 -1
- package/dist/hono/sandbox-content.d.ts +2 -0
- package/dist/hono/sandbox-content.d.ts.map +1 -1
- package/dist/hono/sandbox-content.js +8 -4
- package/dist/hono/sandbox-content.js.map +1 -1
- package/dist/hono/sandbox-content.test.js +20 -1
- package/dist/hono/sandbox-content.test.js.map +1 -1
- package/dist/hono/server.d.ts.map +1 -1
- package/dist/hono/server.js +32 -0
- package/dist/hono/server.js.map +1 -1
- package/dist/hono/server.test.js +21 -1
- package/dist/hono/server.test.js.map +1 -1
- package/dist/hono/session-continuity.d.ts +0 -1
- package/dist/hono/session-continuity.d.ts.map +1 -1
- package/dist/hono/session-continuity.integration.test.js +10 -1
- package/dist/hono/session-continuity.integration.test.js.map +1 -1
- package/dist/hono/session-continuity.js +2 -5
- package/dist/hono/session-continuity.js.map +1 -1
- package/dist/hono/tag-fields.d.ts.map +1 -1
- package/dist/hono/tag-fields.js +4 -0
- package/dist/hono/tag-fields.js.map +1 -1
- package/dist/hono/tag-input.d.ts +125 -3
- package/dist/hono/tag-input.d.ts.map +1 -1
- package/dist/hono/tag-input.js +27 -17
- package/dist/hono/tag-input.js.map +1 -1
- package/dist/hono/tag-input.test.js +19 -1
- package/dist/hono/tag-input.test.js.map +1 -1
- package/dist/hono/tool-mentions.d.ts.map +1 -1
- package/dist/hono/tool-mentions.js +1 -0
- package/dist/hono/tool-mentions.js.map +1 -1
- package/dist/hono/tool-mentions.test.js +6 -2
- package/dist/hono/tool-mentions.test.js.map +1 -1
- package/dist/hono/types.d.ts +15 -6
- package/dist/hono/types.d.ts.map +1 -1
- package/dist/hono/workspace-script.d.ts +10 -0
- package/dist/hono/workspace-script.d.ts.map +1 -0
- package/dist/hono/workspace-script.js +19 -0
- package/dist/hono/workspace-script.js.map +1 -0
- package/dist/hono/workspace-settle.d.ts +20 -0
- package/dist/hono/workspace-settle.d.ts.map +1 -0
- package/dist/hono/workspace-settle.js +50 -0
- package/dist/hono/workspace-settle.js.map +1 -0
- package/dist/review/digest.d.ts +15 -2
- package/dist/review/digest.d.ts.map +1 -1
- package/dist/review/digest.js +90 -59
- package/dist/review/digest.js.map +1 -1
- package/dist/review/digest.test.js +94 -6
- package/dist/review/digest.test.js.map +1 -1
- package/dist/review/evidence-block.js +1 -1
- package/dist/review/evidence-block.js.map +1 -1
- package/dist/review/evidence-block.test.js +0 -10
- package/dist/review/evidence-block.test.js.map +1 -1
- package/dist/review/shell-policy.d.ts +6 -0
- package/dist/review/shell-policy.d.ts.map +1 -1
- package/dist/review/shell-policy.js +240 -72
- package/dist/review/shell-policy.js.map +1 -1
- package/dist/review/shell-policy.test.js +114 -0
- package/dist/review/shell-policy.test.js.map +1 -1
- package/package.json +10 -5
- package/dist/hono/latitude-telemetry.d.ts +0 -17
- package/dist/hono/latitude-telemetry.d.ts.map +0 -1
- package/dist/hono/latitude-telemetry.js +0 -52
- package/dist/hono/latitude-telemetry.js.map +0 -1
- package/dist/hono/latitude-telemetry.test.d.ts +0 -2
- package/dist/hono/latitude-telemetry.test.d.ts.map +0 -1
- package/dist/hono/latitude-telemetry.test.js +0 -18
- package/dist/hono/latitude-telemetry.test.js.map +0 -1
- package/dist/hono/main-sync.d.ts +0 -46
- package/dist/hono/main-sync.d.ts.map +0 -1
- package/dist/hono/main-sync.js +0 -422
- package/dist/hono/main-sync.js.map +0 -1
- package/dist/hono/main-sync.test.d.ts +0 -2
- package/dist/hono/main-sync.test.d.ts.map +0 -1
- package/dist/hono/main-sync.test.js +0 -288
- package/dist/hono/main-sync.test.js.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The end-of-turn steps the scaffold's Stop hooks take, run by the bridge.
|
|
3
|
+
*
|
|
4
|
+
* Those hooks skip a Stop given while background work still runs and act on
|
|
5
|
+
* the turn's last Stop instead. A background task can settle without waking the
|
|
6
|
+
* model, and then the turn ends with no further Stop: the markdown edit lock
|
|
7
|
+
* stays held and a stalled background publish is never reported. So once a turn
|
|
8
|
+
* that ran tasks has really ended, the bridge runs the same scripts itself —
|
|
9
|
+
* with no background work in their input, which is now true. Each is
|
|
10
|
+
* idempotent, so a last Stop that did fire costs nothing extra.
|
|
11
|
+
*
|
|
12
|
+
* Not the autorender hook: it asks the model to re-render, and there is no
|
|
13
|
+
* model left to ask. Its marker survives to the next turn's Stop, and the
|
|
14
|
+
* workspace's verify refuses to publish a stale render.
|
|
15
|
+
*
|
|
16
|
+
* Source of truth: __tooling__/checks/base/markdown-format/flush-format-on-stop.mjs, and
|
|
17
|
+
* recover-stalled-publish.mjs through `recoverStalledPublish`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function settleWorkspaceAfterTasks(cwd?: string): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=workspace-settle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-settle.d.ts","sourceRoot":"","sources":["../../src/hono/workspace-settle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,wBAAsB,yBAAyB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The end-of-turn steps the scaffold's Stop hooks take, run by the bridge.
|
|
3
|
+
*
|
|
4
|
+
* Those hooks skip a Stop given while background work still runs and act on
|
|
5
|
+
* the turn's last Stop instead. A background task can settle without waking the
|
|
6
|
+
* model, and then the turn ends with no further Stop: the markdown edit lock
|
|
7
|
+
* stays held and a stalled background publish is never reported. So once a turn
|
|
8
|
+
* that ran tasks has really ended, the bridge runs the same scripts itself —
|
|
9
|
+
* with no background work in their input, which is now true. Each is
|
|
10
|
+
* idempotent, so a last Stop that did fire costs nothing extra.
|
|
11
|
+
*
|
|
12
|
+
* Not the autorender hook: it asks the model to re-render, and there is no
|
|
13
|
+
* model left to ask. Its marker survives to the next turn's Stop, and the
|
|
14
|
+
* workspace's verify refuses to publish a stale render.
|
|
15
|
+
*
|
|
16
|
+
* Source of truth: __tooling__/checks/base/markdown-format/flush-format-on-stop.mjs, and
|
|
17
|
+
* recover-stalled-publish.mjs through `recoverStalledPublish`.
|
|
18
|
+
*/
|
|
19
|
+
import { execFile } from "node:child_process";
|
|
20
|
+
import { recoverStalledPublish } from "./publish-recovery.js";
|
|
21
|
+
import { workspaceScript } from "./workspace-script.js";
|
|
22
|
+
// Newest layout first; the flat one is kept for company repos not yet synced.
|
|
23
|
+
const FLUSH_FORMAT_SCRIPTS = [
|
|
24
|
+
"__tooling__/checks/base/markdown-format/flush-format-on-stop.mjs",
|
|
25
|
+
"__tooling__/hooks/base/flush-format-on-stop.mjs",
|
|
26
|
+
];
|
|
27
|
+
const SCRIPT_TIMEOUT_MS = 35_000;
|
|
28
|
+
export async function settleWorkspaceAfterTasks(cwd = process.cwd()) {
|
|
29
|
+
await runStopScript(cwd, FLUSH_FORMAT_SCRIPTS);
|
|
30
|
+
await recoverStalledPublish(cwd);
|
|
31
|
+
}
|
|
32
|
+
async function runStopScript(cwd, candidates) {
|
|
33
|
+
const path = workspaceScript(cwd, candidates);
|
|
34
|
+
if (!path) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const script = path.slice(cwd.length + 1);
|
|
38
|
+
await new Promise((resolve) => {
|
|
39
|
+
const child = execFile("node", [path], { cwd, timeout: SCRIPT_TIMEOUT_MS }, (err) => {
|
|
40
|
+
if (err) {
|
|
41
|
+
console.error(`[workspace-settle] ${script} failed:`, err.message);
|
|
42
|
+
}
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
45
|
+
child.stdin?.end(JSON.stringify({ hook_event_name: "Stop", background_tasks: [] }));
|
|
46
|
+
child.stdout?.resume();
|
|
47
|
+
child.stderr?.resume();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=workspace-settle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-settle.js","sourceRoot":"","sources":["../../src/hono/workspace-settle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,8EAA8E;AAC9E,MAAM,oBAAoB,GAAG;IAC3B,kEAAkE;IAClE,iDAAiD;CAClD,CAAC;AACF,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC/C,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,UAA6B;IACrE,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,GAAiB,EAAE,EAAE;YAChG,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/review/digest.d.ts
CHANGED
|
@@ -97,7 +97,7 @@ export type ToolCall = {
|
|
|
97
97
|
/** `baker <family> <verb>` when the call was a CLI invocation. */
|
|
98
98
|
bakerVerb?: string;
|
|
99
99
|
resultBytes: number;
|
|
100
|
-
/** bytes/4,
|
|
100
|
+
/** Text at bytes/4, images at width × height / 750. Labelled an estimate wherever it is shown. */
|
|
101
101
|
resultTokens: number;
|
|
102
102
|
isError: boolean;
|
|
103
103
|
/** The thread the call was made in. */
|
|
@@ -206,6 +206,8 @@ export type VerbAggregate = {
|
|
|
206
206
|
verb: string;
|
|
207
207
|
calls: number;
|
|
208
208
|
totalBytes: number;
|
|
209
|
+
/** Summed `resultTokens`: the only total that carries an image's cost. */
|
|
210
|
+
totalTokens: number;
|
|
209
211
|
maxBytes: number;
|
|
210
212
|
meanBytes: number;
|
|
211
213
|
postFiltered: number;
|
|
@@ -214,13 +216,15 @@ export type ToolAggregate = {
|
|
|
214
216
|
tool: string;
|
|
215
217
|
calls: number;
|
|
216
218
|
totalBytes: number;
|
|
219
|
+
/** Summed `resultTokens`: the only total that carries an image's cost. */
|
|
220
|
+
totalTokens: number;
|
|
217
221
|
maxBytes: number;
|
|
218
222
|
errors: number;
|
|
219
223
|
};
|
|
220
224
|
export type UserFacingMessage = {
|
|
221
225
|
turn: number;
|
|
222
226
|
text: string;
|
|
223
|
-
/**
|
|
227
|
+
/** What is plumbing by its shape (a file path), pre-flagged. The digest points; the model judges the words. */
|
|
224
228
|
plumbing: string[];
|
|
225
229
|
};
|
|
226
230
|
export type RequestUsage = {
|
|
@@ -237,6 +241,7 @@ export type ThreadAggregate = {
|
|
|
237
241
|
turns: number;
|
|
238
242
|
toolCalls: number;
|
|
239
243
|
resultBytes: number;
|
|
244
|
+
resultTokens: number;
|
|
240
245
|
errors: number;
|
|
241
246
|
denials: number;
|
|
242
247
|
/** Time inside this thread's own turns, summed — never its spanned hours. */
|
|
@@ -275,6 +280,7 @@ export type TranscriptDigest = {
|
|
|
275
280
|
turns: number;
|
|
276
281
|
toolCalls: number;
|
|
277
282
|
resultBytes: number;
|
|
283
|
+
resultTokens: number;
|
|
278
284
|
inputTokens: number;
|
|
279
285
|
outputTokens: number;
|
|
280
286
|
cacheReadTokens: number;
|
|
@@ -331,6 +337,13 @@ export type FailureAggregate = {
|
|
|
331
337
|
/** The turns it happened on, so a reader can find the moments. */
|
|
332
338
|
turns: number[];
|
|
333
339
|
};
|
|
340
|
+
/**
|
|
341
|
+
* What in a message the marketer read is plumbing by its shape alone: a file
|
|
342
|
+
* path, which reads the same in any language. Vocabulary is not pre-flagged:
|
|
343
|
+
* the agent writes in the marketer's language, so an English word list flagged
|
|
344
|
+
* "the build failed" and passed "la compilación falló", and the reviewer reads
|
|
345
|
+
* every message against "Talking to the User" anyway.
|
|
346
|
+
*/
|
|
334
347
|
export declare function flagPlumbing(text: string): string[];
|
|
335
348
|
/**
|
|
336
349
|
* The guard a refusal names, when it names one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/review/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../src/review/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;;;;WAMG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAClC,KAAK,CAAC,EAAE,eAAe,CAAC;KACzB,CAAC;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAc9D;AA4ED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kGAAkG;IAClG,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAC1B,SAAS,EACT,OAAO,EACP,SAAS,EACT,OAAO,EACP,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,CACC,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AA4B5D,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAO7D;AAiBD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS/D;AA0BD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;OAIG;IACH,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,2EAA2E;IAC3E,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,wFAAwF;IACxF,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,mEAAmE;IACnE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,+EAA+E;IAC/E,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,0EAA0E;QAC1E,YAAY,EAAE,MAAM,CAAC;QACrB,kFAAkF;QAClF,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB;;;;;;;WAOG;QACH,SAAS,EAAE,MAAM,CAAC;QAClB,4EAA4E;QAC5E,MAAM,EAAE,MAAM,CAAC;QACf,kFAAkF;QAClF,MAAM,EAAE,MAAM,CAAC;QACf,0EAA0E;QAC1E,MAAM,EAAE,MAAM,CAAC;QACf,kEAAkE;QAClE,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAIF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAmJD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB9D;AA6OD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,gBAAgB,CA8ExF;AA0PD,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1G,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AA6CF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,aAAa,EAAE,CAY9E;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAc/C;AAMD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAerE;AAaD,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAiD5D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA+D5D;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkE/D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAiB5D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8D7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAsBjE;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAqBvE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAyBlE"}
|
package/dist/review/digest.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* it could NOT find, so missing evidence is a fact before the model starts
|
|
16
16
|
* rather than a silence it fills in.
|
|
17
17
|
*/
|
|
18
|
+
import { imageSize } from "image-size";
|
|
18
19
|
/** Parse a `.jsonl` body, dropping lines that are not JSON rather than failing. */
|
|
19
20
|
export function parseTranscript(body) {
|
|
20
21
|
const out = [];
|
|
@@ -46,15 +47,56 @@ function textOf(line) {
|
|
|
46
47
|
.map((block) => block.text ?? "")
|
|
47
48
|
.join("\n");
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
/**
|
|
51
|
+
* What one tool result cost the model, measured on the block it received.
|
|
52
|
+
*
|
|
53
|
+
* Never on the line's `toolUseResult`: that is the CLI's own record of the call
|
|
54
|
+
* and carries what the model never saw — an Edit's whole pre-edit file, a Read
|
|
55
|
+
* image at its original size. Text is counted in bytes (tokens ≈ bytes/4); an
|
|
56
|
+
* image is priced by its pixels, `width × height / 750`, the formula Anthropic
|
|
57
|
+
* documents, because its base64 length says nothing about what it costs.
|
|
58
|
+
*/
|
|
59
|
+
function measureToolResult(content) {
|
|
60
|
+
if (content === undefined || content === null) {
|
|
61
|
+
return { bytes: 0, tokens: 0 };
|
|
62
|
+
}
|
|
63
|
+
if (typeof content === "string") {
|
|
64
|
+
const bytes = Buffer.byteLength(content);
|
|
65
|
+
return { bytes, tokens: Math.round(bytes / 4) };
|
|
66
|
+
}
|
|
67
|
+
const parts = Array.isArray(content) ? content : [content];
|
|
68
|
+
let bytes = 0;
|
|
69
|
+
let imageTokens = 0;
|
|
70
|
+
for (const part of parts) {
|
|
71
|
+
const block = part;
|
|
72
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
73
|
+
bytes += Buffer.byteLength(block.text);
|
|
74
|
+
}
|
|
75
|
+
else if (block.type === "image") {
|
|
76
|
+
imageTokens += imageTokensOf(block.source?.data);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
bytes += jsonBytes(part);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { bytes, tokens: Math.round(bytes / 4) + imageTokens };
|
|
83
|
+
}
|
|
84
|
+
/** Tokens for a base64 image the model was shown, from the pixels it decodes to. */
|
|
85
|
+
function imageTokensOf(data) {
|
|
86
|
+
if (typeof data !== "string") {
|
|
51
87
|
return 0;
|
|
52
88
|
}
|
|
53
|
-
|
|
54
|
-
|
|
89
|
+
try {
|
|
90
|
+
const { width, height } = imageSize(Buffer.from(data, "base64"));
|
|
91
|
+
return Math.round((width * height) / 750);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return 0;
|
|
55
95
|
}
|
|
96
|
+
}
|
|
97
|
+
function jsonBytes(value) {
|
|
56
98
|
try {
|
|
57
|
-
return Buffer.byteLength(JSON.stringify(value));
|
|
99
|
+
return Buffer.byteLength(JSON.stringify(value) ?? "");
|
|
58
100
|
}
|
|
59
101
|
catch {
|
|
60
102
|
return 0;
|
|
@@ -161,49 +203,16 @@ function summarizeInput(tool, input) {
|
|
|
161
203
|
return tool;
|
|
162
204
|
}
|
|
163
205
|
}
|
|
206
|
+
const PATH_LIKE = /(^|\s)(?:\.{0,2}\/)?(?:src|__tooling__|\.claude|dist|node_modules)\/[\w./-]+/;
|
|
164
207
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* failed" and
|
|
169
|
-
*
|
|
208
|
+
* What in a message the marketer read is plumbing by its shape alone: a file
|
|
209
|
+
* path, which reads the same in any language. Vocabulary is not pre-flagged:
|
|
210
|
+
* the agent writes in the marketer's language, so an English word list flagged
|
|
211
|
+
* "the build failed" and passed "la compilación falló", and the reviewer reads
|
|
212
|
+
* every message against "Talking to the User" anyway.
|
|
170
213
|
*/
|
|
171
|
-
const PLUMBING_TERMS = [
|
|
172
|
-
"git",
|
|
173
|
-
"branch",
|
|
174
|
-
"commit",
|
|
175
|
-
"push",
|
|
176
|
-
"merge",
|
|
177
|
-
"build",
|
|
178
|
-
"test",
|
|
179
|
-
"typecheck",
|
|
180
|
-
"sandbox",
|
|
181
|
-
"runtime",
|
|
182
|
-
"repository",
|
|
183
|
-
"repo",
|
|
184
|
-
"astro",
|
|
185
|
-
"tailwind",
|
|
186
|
-
"vitest",
|
|
187
|
-
"biome",
|
|
188
|
-
"frontmatter",
|
|
189
|
-
"schema",
|
|
190
|
-
"json",
|
|
191
|
-
"cli",
|
|
192
|
-
"environment variable",
|
|
193
|
-
"exit code",
|
|
194
|
-
"stack trace",
|
|
195
|
-
"baker",
|
|
196
|
-
"pnpm",
|
|
197
|
-
"npm",
|
|
198
|
-
];
|
|
199
|
-
const PATH_LIKE = /(^|\s)(?:\.{0,2}\/)?(?:src|__tooling__|\.claude|dist|node_modules)\/[\w./-]+/;
|
|
200
214
|
export function flagPlumbing(text) {
|
|
201
|
-
|
|
202
|
-
const hits = PLUMBING_TERMS.filter((term) => new RegExp(`\\b${term.replace(/ /g, "\\s+")}\\b`).test(lower));
|
|
203
|
-
if (PATH_LIKE.test(text)) {
|
|
204
|
-
hits.push("file path");
|
|
205
|
-
}
|
|
206
|
-
return hits;
|
|
215
|
+
return PATH_LIKE.test(text) ? ["file path"] : [];
|
|
207
216
|
}
|
|
208
217
|
const SYSTEM_REMINDER = /<system-reminder>([\s\S]*?)<\/system-reminder>/g;
|
|
209
218
|
function reminderLabel(body) {
|
|
@@ -376,8 +385,9 @@ function absorbToolResults(acc, line) {
|
|
|
376
385
|
continue;
|
|
377
386
|
}
|
|
378
387
|
acc.pending.delete(block.tool_use_id);
|
|
379
|
-
|
|
380
|
-
call.
|
|
388
|
+
const seen = measureToolResult(block.content);
|
|
389
|
+
call.resultBytes = seen.bytes;
|
|
390
|
+
call.resultTokens = seen.tokens;
|
|
381
391
|
call.isError = block.is_error === true;
|
|
382
392
|
const took = elapsed(call.requestedAt, line.timestamp);
|
|
383
393
|
if (took !== undefined) {
|
|
@@ -613,7 +623,7 @@ export function buildTranscriptDigest(lines) {
|
|
|
613
623
|
byTool: aggregateByTool(acc.toolCalls),
|
|
614
624
|
byBakerVerb: aggregateByVerb(acc.toolCalls),
|
|
615
625
|
repeats: findRepeats(acc.toolCalls),
|
|
616
|
-
largestResults: [...acc.toolCalls].sort((a, b) => b.
|
|
626
|
+
largestResults: [...acc.toolCalls].sort((a, b) => b.resultTokens - a.resultTokens).slice(0, 10),
|
|
617
627
|
slowest: [...acc.toolCalls]
|
|
618
628
|
.filter((call) => call.durationMs !== undefined)
|
|
619
629
|
.sort((a, b) => (b.durationMs ?? 0) - (a.durationMs ?? 0))
|
|
@@ -706,7 +716,7 @@ function findFlakyCalls(calls) {
|
|
|
706
716
|
* and this is what says where in the Session to look.
|
|
707
717
|
*/
|
|
708
718
|
function emptyThread(threadId) {
|
|
709
|
-
return { threadId, turns: 0, toolCalls: 0, resultBytes: 0, errors: 0, denials: 0, workingMs: 0 };
|
|
719
|
+
return { threadId, turns: 0, toolCalls: 0, resultBytes: 0, resultTokens: 0, errors: 0, denials: 0, workingMs: 0 };
|
|
710
720
|
}
|
|
711
721
|
/** Milliseconds parsed off an ISO timestamp, or nothing. */
|
|
712
722
|
function stampOf(value) {
|
|
@@ -742,6 +752,7 @@ function aggregateByThread(turns, calls, stamps) {
|
|
|
742
752
|
const entry = ensureThread(build, call.threadId);
|
|
743
753
|
entry.toolCalls += 1;
|
|
744
754
|
entry.resultBytes += call.resultBytes;
|
|
755
|
+
entry.resultTokens += call.resultTokens;
|
|
745
756
|
entry.errors += call.isError ? 1 : 0;
|
|
746
757
|
}
|
|
747
758
|
for (const [threadId, values] of stamps) {
|
|
@@ -755,14 +766,22 @@ function aggregateByThread(turns, calls, stamps) {
|
|
|
755
766
|
function aggregateByTool(calls) {
|
|
756
767
|
const map = new Map();
|
|
757
768
|
for (const call of calls) {
|
|
758
|
-
const entry = map.get(call.tool) ?? {
|
|
769
|
+
const entry = map.get(call.tool) ?? {
|
|
770
|
+
tool: call.tool,
|
|
771
|
+
calls: 0,
|
|
772
|
+
totalBytes: 0,
|
|
773
|
+
totalTokens: 0,
|
|
774
|
+
maxBytes: 0,
|
|
775
|
+
errors: 0,
|
|
776
|
+
};
|
|
759
777
|
entry.calls += 1;
|
|
760
778
|
entry.totalBytes += call.resultBytes;
|
|
779
|
+
entry.totalTokens += call.resultTokens;
|
|
761
780
|
entry.maxBytes = Math.max(entry.maxBytes, call.resultBytes);
|
|
762
781
|
entry.errors += call.isError ? 1 : 0;
|
|
763
782
|
map.set(call.tool, entry);
|
|
764
783
|
}
|
|
765
|
-
return [...map.values()].sort((a, b) => b.
|
|
784
|
+
return [...map.values()].sort((a, b) => b.totalTokens - a.totalTokens);
|
|
766
785
|
}
|
|
767
786
|
function aggregateByVerb(calls) {
|
|
768
787
|
const map = new Map();
|
|
@@ -774,12 +793,14 @@ function aggregateByVerb(calls) {
|
|
|
774
793
|
verb: call.bakerVerb,
|
|
775
794
|
calls: 0,
|
|
776
795
|
totalBytes: 0,
|
|
796
|
+
totalTokens: 0,
|
|
777
797
|
maxBytes: 0,
|
|
778
798
|
meanBytes: 0,
|
|
779
799
|
postFiltered: 0,
|
|
780
800
|
};
|
|
781
801
|
entry.calls += 1;
|
|
782
802
|
entry.totalBytes += call.resultBytes;
|
|
803
|
+
entry.totalTokens += call.resultTokens;
|
|
783
804
|
entry.maxBytes = Math.max(entry.maxBytes, call.resultBytes);
|
|
784
805
|
entry.postFiltered += call.postFiltered ? 1 : 0;
|
|
785
806
|
map.set(call.bakerVerb, entry);
|
|
@@ -787,7 +808,7 @@ function aggregateByVerb(calls) {
|
|
|
787
808
|
for (const entry of map.values()) {
|
|
788
809
|
entry.meanBytes = entry.calls === 0 ? 0 : Math.round(entry.totalBytes / entry.calls);
|
|
789
810
|
}
|
|
790
|
-
return [...map.values()].sort((a, b) => b.
|
|
811
|
+
return [...map.values()].sort((a, b) => b.totalTokens - a.totalTokens);
|
|
791
812
|
}
|
|
792
813
|
function findRepeats(calls) {
|
|
793
814
|
const seen = new Map();
|
|
@@ -812,6 +833,7 @@ function computeTotals(turns, calls, requests, preambleBytes, clock) {
|
|
|
812
833
|
turns: turns.length,
|
|
813
834
|
toolCalls: calls.length,
|
|
814
835
|
resultBytes: calls.reduce((sum, call) => sum + call.resultBytes, 0),
|
|
836
|
+
resultTokens: calls.reduce((sum, call) => sum + call.resultTokens, 0),
|
|
815
837
|
inputTokens,
|
|
816
838
|
outputTokens: requests.reduce((sum, request) => sum + request.outputTokens, 0),
|
|
817
839
|
cacheReadTokens,
|
|
@@ -958,11 +980,12 @@ export function renderTurns(digest) {
|
|
|
958
980
|
"",
|
|
959
981
|
digest.threads.length === 0
|
|
960
982
|
? "No thread could be attributed — the transcripts carried no thread id."
|
|
961
|
-
: table(["thread", "turns", "tool calls", "result bytes", "errors", "denials", "running"], digest.threads.map((thread) => [
|
|
983
|
+
: table(["thread", "turns", "tool calls", "result bytes", "~result tokens", "errors", "denials", "running"], digest.threads.map((thread) => [
|
|
962
984
|
thread.threadId,
|
|
963
985
|
thread.turns,
|
|
964
986
|
thread.toolCalls,
|
|
965
987
|
thread.resultBytes,
|
|
988
|
+
thread.resultTokens,
|
|
966
989
|
thread.errors,
|
|
967
990
|
thread.denials,
|
|
968
991
|
`${Math.round(thread.workingMs / 1000)}s`,
|
|
@@ -992,17 +1015,25 @@ export function renderTools(digest) {
|
|
|
992
1015
|
"",
|
|
993
1016
|
"## Per tool",
|
|
994
1017
|
"",
|
|
995
|
-
table(["tool", "calls", "total bytes", "max bytes", "errors"], digest.byTool.map((entry) => [
|
|
1018
|
+
table(["tool", "calls", "total bytes", "~total tokens", "max bytes", "errors"], digest.byTool.map((entry) => [
|
|
1019
|
+
entry.tool,
|
|
1020
|
+
entry.calls,
|
|
1021
|
+
entry.totalBytes,
|
|
1022
|
+
entry.totalTokens,
|
|
1023
|
+
entry.maxBytes,
|
|
1024
|
+
entry.errors,
|
|
1025
|
+
])),
|
|
996
1026
|
"",
|
|
997
1027
|
"## Per `baker` verb",
|
|
998
1028
|
"",
|
|
999
1029
|
"`post-filtered` counts calls whose output was piped straight into jq/grep/head —",
|
|
1000
1030
|
"the agent asking for a projection the command did not offer.",
|
|
1001
1031
|
"",
|
|
1002
|
-
table(["verb", "calls", "total bytes", "mean bytes", "max bytes", "post-filtered"], digest.byBakerVerb.map((entry) => [
|
|
1032
|
+
table(["verb", "calls", "total bytes", "~total tokens", "mean bytes", "max bytes", "post-filtered"], digest.byBakerVerb.map((entry) => [
|
|
1003
1033
|
entry.verb,
|
|
1004
1034
|
entry.calls,
|
|
1005
1035
|
entry.totalBytes,
|
|
1036
|
+
entry.totalTokens,
|
|
1006
1037
|
entry.meanBytes,
|
|
1007
1038
|
entry.maxBytes,
|
|
1008
1039
|
entry.postFiltered,
|
|
@@ -1014,7 +1045,7 @@ export function renderTools(digest) {
|
|
|
1014
1045
|
? "None."
|
|
1015
1046
|
: table(["tool", "input", "extra calls"], digest.repeats.map((entry) => [entry.tool, entry.summary, entry.extra])),
|
|
1016
1047
|
"",
|
|
1017
|
-
"## Ten largest single results",
|
|
1048
|
+
"## Ten largest single results (by what the model received)",
|
|
1018
1049
|
"",
|
|
1019
1050
|
table(["turn", "tool", "input", "bytes", "~tokens"], digest.largestResults.map((call) => [call.turn, call.tool, call.summary, call.resultBytes, call.resultTokens])),
|
|
1020
1051
|
"",
|
|
@@ -1173,10 +1204,10 @@ export function renderUserFacing(digest) {
|
|
|
1173
1204
|
return [
|
|
1174
1205
|
"# What the marketer read",
|
|
1175
1206
|
"",
|
|
1176
|
-
`${digest.userFacing.length} messages, ${flagged.length}
|
|
1207
|
+
`${digest.userFacing.length} messages, ${flagged.length} showing a file path.`,
|
|
1177
1208
|
"",
|
|
1178
|
-
"
|
|
1179
|
-
'
|
|
1209
|
+
"Only file paths are pre-flagged. Read every message, in whatever language it",
|
|
1210
|
+
'is written, against the scaffold\'s "Talking to the User": "We build the page',
|
|
1180
1211
|
'around one offer" is not a leak and "the build failed" is.',
|
|
1181
1212
|
"",
|
|
1182
1213
|
digest.userFacing
|