@cursor/july 0.1.26 → 0.1.28
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/dist/ab.d.ts +6 -0
- package/dist/ab.d.ts.map +1 -1
- package/dist/ab.js +1 -0
- package/dist/artifacts.d.ts +34 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +57 -0
- package/dist/bin/agent-serve.js +43 -12
- package/dist/channels/github/github-channel.d.ts +1 -1
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +14 -1
- package/dist/channels/github/types.d.ts +6 -1
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/api.d.ts +2 -1
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +1 -0
- package/dist/channels/slack/auth.d.ts +13 -13
- package/dist/channels/slack/auth.d.ts.map +1 -1
- package/dist/channels/slack/auth.js +19 -10
- package/dist/channels/slack/cursor-account.d.ts +2 -1
- package/dist/channels/slack/cursor-account.d.ts.map +1 -1
- package/dist/channels/slack/cursor-account.js +3 -1
- package/dist/channels/slack/defaults.d.ts +7 -4
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +14 -4
- package/dist/channels/slack/dispatch.d.ts +10 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +59 -21
- package/dist/channels/slack/external-policy.d.ts +27 -0
- package/dist/channels/slack/external-policy.d.ts.map +1 -0
- package/dist/channels/slack/external-policy.js +53 -0
- package/dist/channels/slack/index.d.ts +1 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +1 -0
- package/dist/channels/slack/interactive.d.ts +8 -1
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +43 -15
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +22 -8
- package/dist/channels/slack/types.d.ts +16 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.DYcC9FY-.js → app.CqjrYaT2.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.VWQoPFJ1.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.o4N_knTV.js → VPLocalSearchBox.ag-MwUel.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DQ-njyo0.js → theme.BS-DJWat.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.D_xFKlnF.js → guides_slack.md.CjmJSvZS.js} +8 -4
- package/dist/docs/assets/guides_slack.md.CjmJSvZS.lean.js +1 -0
- package/dist/docs/assets/guides_webhooks.md.wSOYas3X.js +183 -0
- package/dist/docs/assets/{guides_webhooks.md.B1EswtUu.lean.js → guides_webhooks.md.wSOYas3X.lean.js} +1 -1
- package/dist/docs/assets/{index.md.Dfv5ic9t.js → index.md.CH_s5uZe.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.DdmiKgqf.js → reference_channels.md.CDhTRfUz.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.DdmiKgqf.lean.js → reference_channels.md.CDhTRfUz.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +3 -3
- package/dist/docs/deployment.html +3 -3
- package/dist/docs/evals.html +3 -3
- package/dist/docs/example-agents/approval-buddy.html +3 -3
- package/dist/docs/example-agents/benny.html +3 -3
- package/dist/docs/example-agents/bugbot.html +3 -3
- package/dist/docs/example-agents/codebase-wiki.html +3 -3
- package/dist/docs/example-agents/codeowners-review.html +3 -3
- package/dist/docs/example-agents/concierge.html +3 -3
- package/dist/docs/example-agents/fsd.html +3 -3
- package/dist/docs/example-agents/index.html +3 -3
- package/dist/docs/example-agents/knowledge-base.html +3 -3
- package/dist/docs/example-agents/oncall.html +3 -3
- package/dist/docs/example-agents/security-reviewer.html +3 -3
- package/dist/docs/example-agents/slack-agent.html +3 -3
- package/dist/docs/example-agents/weather-agent.html +3 -3
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +3 -3
- package/dist/docs/guides/github.html +3 -3
- package/dist/docs/guides/human-in-the-loop.html +3 -3
- package/dist/docs/guides/mcp-oauth.html +3 -3
- package/dist/docs/guides/slack.html +11 -7
- package/dist/docs/guides/webhooks.html +138 -5
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +3 -3
- package/dist/docs/index.html +5 -5
- package/dist/docs/quickstart.html +3 -3
- package/dist/docs/reference/agent-config.html +3 -3
- package/dist/docs/reference/channels.html +5 -5
- package/dist/docs/reference/cli.html +3 -3
- package/dist/docs/reference/connections.html +3 -3
- package/dist/docs/reference/hooks.html +3 -3
- package/dist/docs/reference/http-api.html +3 -3
- package/dist/docs/reference/instructions.html +3 -3
- package/dist/docs/reference/playground.html +3 -3
- package/dist/docs/reference/project-layout.html +3 -3
- package/dist/docs/reference/prompt.html +3 -3
- package/dist/docs/reference/schedules.html +3 -3
- package/dist/docs/reference/sessions.html +3 -3
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +3 -3
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/evals/assertions.d.ts +10 -1
- package/dist/evals/assertions.d.ts.map +1 -1
- package/dist/evals/assertions.js +12 -0
- package/dist/evals.d.ts +1 -1
- package/dist/evals.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/internal/ab-fold.d.ts.map +1 -1
- package/dist/internal/ab-fold.js +4 -0
- package/dist/internal/ab-snapshot.d.ts.map +1 -1
- package/dist/internal/ab-snapshot.js +1 -0
- package/dist/internal/artifacts-store.d.ts +45 -0
- package/dist/internal/artifacts-store.d.ts.map +1 -0
- package/dist/internal/artifacts-store.js +250 -0
- package/dist/internal/builtin-tools/artifacts.d.ts +10 -0
- package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -0
- package/dist/internal/builtin-tools/artifacts.js +73 -0
- package/dist/internal/builtin-tools/index.d.ts +8 -1
- package/dist/internal/builtin-tools/index.d.ts.map +1 -1
- package/dist/internal/builtin-tools/index.js +15 -0
- package/dist/internal/cli-ax.d.ts +19 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +196 -57
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +14 -6
- package/dist/internal/cursor-slack-relay.d.ts +2 -0
- package/dist/internal/cursor-slack-relay.d.ts.map +1 -1
- package/dist/internal/cursor-slack-relay.js +1 -0
- package/dist/internal/deploy-client.d.ts +2 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +1 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +91 -3
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +1 -0
- package/dist/internal/model-pricing.d.ts +49 -0
- package/dist/internal/model-pricing.d.ts.map +1 -0
- package/dist/internal/model-pricing.js +377 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +1 -0
- package/dist/internal/schedule-runner.d.ts.map +1 -1
- package/dist/internal/schedule-runner.js +1 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +9 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +49 -5
- package/dist/internal/session-cost.d.ts +49 -0
- package/dist/internal/session-cost.d.ts.map +1 -0
- package/dist/internal/session-cost.js +175 -0
- package/dist/internal/session-engine.d.ts +35 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +128 -7
- package/dist/internal/storage-coordinator.d.ts +15 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +52 -0
- package/dist/internal/trajectory.d.ts +9 -1
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +32 -5
- package/dist/playground/assets/index-Bul1WfrB.css +1 -0
- package/dist/playground/assets/index-CkN74U_L.js +87 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage.d.ts +4 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +4 -0
- package/dist/types.d.ts +164 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +1 -0
- package/docs/guides/slack.md +32 -7
- package/docs/guides/webhooks.md +183 -0
- package/docs/reference/channels.md +2 -1
- package/package.json +26 -26
- package/skills/setup-slack/SKILL.md +3 -0
- package/src/ab.ts +7 -0
- package/src/bin/agent-serve.ts +42 -5
- package/src/channels/slack/auth.ts +29 -22
- package/src/channels/slack/cursor-account.ts +2 -0
- package/src/channels/slack/defaults.ts +24 -4
- package/src/channels/slack/dispatch.ts +42 -1
- package/src/channels/slack/external-policy.ts +62 -0
- package/src/channels/slack/index.ts +1 -0
- package/src/channels/slack/interactive.ts +42 -10
- package/src/channels/slack/slack-channel.ts +20 -3
- package/src/channels/slack/types.ts +12 -0
- package/src/internal/ab-fold.ts +4 -0
- package/src/internal/ab-snapshot.ts +1 -0
- package/src/internal/cli-ax.ts +205 -34
- package/src/internal/cursor-slack-relay.ts +3 -0
- package/src/internal/deploy-client.ts +3 -0
- package/src/internal/discovery.ts +8 -1
- package/src/internal/model-pricing.ts +426 -0
- package/src/internal/sdk-runner.ts +10 -2
- package/src/internal/server.ts +9 -5
- package/src/internal/session-cost.ts +231 -0
- package/src/internal/session-engine.ts +28 -0
- package/src/internal/trajectory.ts +45 -3
- package/src/types.ts +24 -1
- package/dist/channels/github/instrument.d.ts +0 -20
- package/dist/channels/github/instrument.d.ts.map +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.BQTzJjR_.js +0 -1
- package/dist/docs/assets/guides_slack.md.D_xFKlnF.lean.js +0 -1
- package/dist/docs/assets/guides_webhooks.md.B1EswtUu.js +0 -50
- package/dist/internal/json-dir-store.d.ts +0 -32
- package/dist/internal/json-dir-store.d.ts.map +0 -1
- package/dist/internal/json-dir-store.js +0 -100
- package/dist/playground/assets/index-CjOQ4hN9.css +0 -1
- package/dist/playground/assets/index-DqXdAFGa.js +0 -85
- package/src/bin/agent-serve.version.test.ts +0 -64
- package/src/channels/github/api.test.ts +0 -64
- package/src/channels/github/auth.test.ts +0 -105
- package/src/channels/github/cursor-account.test.ts +0 -204
- package/src/channels/github/forward.test.ts +0 -457
- package/src/channels/github/github.test.ts +0 -985
- package/src/channels/github/replay.test.ts +0 -179
- package/src/channels/slack/api.post-message.test.ts +0 -148
- package/src/channels/slack/approvals.test.ts +0 -328
- package/src/channels/slack/block-actions.test.ts +0 -469
- package/src/channels/slack/bot-mentions.test.ts +0 -267
- package/src/channels/slack/channel-watch.test.ts +0 -363
- package/src/channels/slack/cursor-account.test.ts +0 -301
- package/src/channels/slack/defaults.final-post.test.ts +0 -182
- package/src/channels/slack/dispatch.test.ts +0 -875
- package/src/channels/slack/eval-directive.test.ts +0 -273
- package/src/channels/slack/message-body.test.ts +0 -54
- package/src/channels/slack/nudge-store.test.ts +0 -143
- package/src/channels/slack/slack.test.ts +0 -391
- package/src/channels/slack/stop.test.ts +0 -23
- package/src/channels/slack/thread-context.test.ts +0 -202
- package/src/evals/assertions.test.ts +0 -617
- package/src/evals/expect.test.ts +0 -144
- package/src/evals/judge.test.ts +0 -181
- package/src/evals/loaders.test.ts +0 -132
- package/src/evals/matchers.test.ts +0 -95
- package/src/evals/reporters.test.ts +0 -303
- package/src/evals/run-facts.test.ts +0 -259
- package/src/internal/ab-snapshot.test.ts +0 -325
- package/src/internal/approval-gate.test.ts +0 -49
- package/src/internal/approvals.integration.test.ts +0 -383
- package/src/internal/artifacts-store.test.ts +0 -283
- package/src/internal/authored-loaders.test.ts +0 -31
- package/src/internal/builtin-tools/artifacts.test.ts +0 -247
- package/src/internal/builtin-tools/reminders.test.ts +0 -201
- package/src/internal/channel-route-schema.test.ts +0 -294
- package/src/internal/chat-attach.test.ts +0 -262
- package/src/internal/cli-deploy.test.ts +0 -1991
- package/src/internal/cli-docs.test.ts +0 -161
- package/src/internal/cli-mcp.test.ts +0 -789
- package/src/internal/cli-skills.test.ts +0 -133
- package/src/internal/cli-slack.test.ts +0 -1654
- package/src/internal/cloud-merge.test.ts +0 -74
- package/src/internal/cron.test.ts +0 -22
- package/src/internal/cursor/account-mcp.test.ts +0 -807
- package/src/internal/cursor/backend-client.test.ts +0 -591
- package/src/internal/cursor/credentials.test.ts +0 -351
- package/src/internal/cursor/github-credentials.test.ts +0 -136
- package/src/internal/cursor-account-mcp-auth.test.ts +0 -310
- package/src/internal/cursor-account.integration.test.ts +0 -441
- package/src/internal/cursor-event-relay.test.ts +0 -746
- package/src/internal/cursor-github-credentials.integration.test.ts +0 -271
- package/src/internal/cursor-slack-relay.test.ts +0 -525
- package/src/internal/deploy-source.test.ts +0 -111
- package/src/internal/discovery.artifact-tool.test.ts +0 -136
- package/src/internal/discovery.artifacts.test.ts +0 -119
- package/src/internal/discovery.builtin-tools.test.ts +0 -94
- package/src/internal/discovery.concurrency.test.ts +0 -60
- package/src/internal/discovery.cursor-account.test.ts +0 -133
- package/src/internal/discovery.cwd.test.ts +0 -83
- package/src/internal/discovery.hosting.test.ts +0 -80
- package/src/internal/discovery.identity.test.ts +0 -44
- package/src/internal/docs-site.test.ts +0 -66
- package/src/internal/duration.test.ts +0 -29
- package/src/internal/eval-judge-model.test.ts +0 -187
- package/src/internal/eval-run-store.cancel.test.ts +0 -142
- package/src/internal/eval-run-store.storage.test.ts +0 -211
- package/src/internal/eval-runner.http.test.ts +0 -403
- package/src/internal/eval-runner.run.test.ts +0 -928
- package/src/internal/evals-client.test.ts +0 -307
- package/src/internal/event-mapper.test.ts +0 -243
- package/src/internal/github-fanout.test.ts +0 -213
- package/src/internal/handleAgentServeTrigger.test.ts +0 -185
- package/src/internal/host-kv.test.ts +0 -82
- package/src/internal/host-platforms.test.ts +0 -126
- package/src/internal/http-channel.test.ts +0 -402
- package/src/internal/init-project.test.ts +0 -270
- package/src/internal/install-cursor-skills.test.ts +0 -262
- package/src/internal/local-env.test.ts +0 -120
- package/src/internal/log-ring.test.ts +0 -31
- package/src/internal/logs-client.test.ts +0 -350
- package/src/internal/mcp-endpoint.test.ts +0 -436
- package/src/internal/mcp-host.test.ts +0 -298
- package/src/internal/mcp-oauth.test.ts +0 -148
- package/src/internal/net.test.ts +0 -17
- package/src/internal/peer-connections.test.ts +0 -128
- package/src/internal/peer-mcp.integration.test.ts +0 -289
- package/src/internal/playground/toolchain.test.ts +0 -53
- package/src/internal/playground-cli.test.ts +0 -187
- package/src/internal/playground-proxy.test.ts +0 -376
- package/src/internal/prompt-context.integration.test.ts +0 -232
- package/src/internal/prompt-context.test.ts +0 -127
- package/src/internal/reminder-runner.test.ts +0 -432
- package/src/internal/reminder-store.test.ts +0 -53
- package/src/internal/request-headers.test.ts +0 -27
- package/src/internal/resolve-prod-target.test.ts +0 -787
- package/src/internal/resolved-connections.test.ts +0 -295
- package/src/internal/router.test.ts +0 -57
- package/src/internal/sdk-runner.test.ts +0 -290
- package/src/internal/server.artifacts.test.ts +0 -334
- package/src/internal/session-engine.artifacts.test.ts +0 -293
- package/src/internal/session-engine.coalesce.test.ts +0 -169
- package/src/internal/session-engine.concurrency.test.ts +0 -250
- package/src/internal/session-engine.host-oauth-mcp.test.ts +0 -110
- package/src/internal/session-engine.interrupt.test.ts +0 -577
- package/src/internal/session-engine.storage.test.ts +0 -547
- package/src/internal/session-urls.test.ts +0 -28
- package/src/internal/sessions-client.test.ts +0 -518
- package/src/internal/storage-coordinator.test.ts +0 -517
- package/src/internal/tool-call.test.ts +0 -458
- package/src/internal/tool-result.test.ts +0 -52
- package/src/internal/trajectory.approvals.test.ts +0 -83
- package/src/internal/trajectory.subagents.test.ts +0 -198
- package/src/internal/turn-governor.test.ts +0 -137
- package/src/internal/update-check.test.ts +0 -485
- package/src/internal/workspace.test.ts +0 -207
- package/src/storage-backends/cursor-hosted.test.ts +0 -121
- /package/dist/docs/assets/{index.md.Dfv5ic9t.lean.js → index.md.CH_s5uZe.lean.js} +0 -0
package/dist/internal/ab-fold.js
CHANGED
|
@@ -134,6 +134,10 @@ export function applyBuiltinMetrics(accum, event) {
|
|
|
134
134
|
m.cacheReadTokens += usage.cacheReadTokens;
|
|
135
135
|
m.cacheWriteTokens += usage.cacheWriteTokens;
|
|
136
136
|
}
|
|
137
|
+
const cost = event.data.cost;
|
|
138
|
+
if (cost !== undefined) {
|
|
139
|
+
m.costUsd += cost.totalUsd;
|
|
140
|
+
}
|
|
137
141
|
addWallTime(accum, event.at);
|
|
138
142
|
break;
|
|
139
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ab-snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/ab-snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAiOrB;
|
|
1
|
+
{"version":3,"file":"ab-snapshot.d.ts","sourceRoot":"","sources":["../../src/internal/ab-snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACtE,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,WAAW,CAAC;IACpD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAiOrB;AAkBD,gFAAgF;AAChF,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -201,6 +201,7 @@ function addMetrics(target, delta) {
|
|
|
201
201
|
target.outputTokens += delta.outputTokens;
|
|
202
202
|
target.cacheReadTokens += delta.cacheReadTokens;
|
|
203
203
|
target.cacheWriteTokens += delta.cacheWriteTokens;
|
|
204
|
+
target.costUsd += delta.costUsd;
|
|
204
205
|
target.wallTimeMs += delta.wallTimeMs;
|
|
205
206
|
for (const [key, value] of Object.entries(delta.custom)) {
|
|
206
207
|
target.custom[key] = ((_a = target.custom[key]) !== null && _a !== void 0 ? _a : 0) + value;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable artifact rows behind `ctx.artifacts` ({@link ArtifactsApi}).
|
|
3
|
+
*
|
|
4
|
+
* Mirror of host-kv: when `defineStorage` is authored with `get` + `list`,
|
|
5
|
+
* rows live in that sink under `storageKeys.artifact`; otherwise one
|
|
6
|
+
* JSON file per row under `--state-root/artifacts`.
|
|
7
|
+
*/
|
|
8
|
+
import type { ArtifactListFilter, ArtifactRecord, ArtifactsConfig, ArtifactTagInput } from "../types.js";
|
|
9
|
+
import type { StorageCoordinator } from "./storage-coordinator.js";
|
|
10
|
+
export interface CreateArtifactsStoreOptions {
|
|
11
|
+
stateRoot: string;
|
|
12
|
+
storage?: StorageCoordinator;
|
|
13
|
+
/** `agent/artifacts.ts` config, when authored. */
|
|
14
|
+
config?: ArtifactsConfig;
|
|
15
|
+
}
|
|
16
|
+
/** Kind used by freeform tags when no kinds are declared. */
|
|
17
|
+
export declare const ARTIFACT_DEFAULT_KIND = "artifact";
|
|
18
|
+
/**
|
|
19
|
+
* Upsert + list semantics over one {@link ArtifactRowStore}: kind/schema
|
|
20
|
+
* validation, deterministic ids for keyed tags, and `max` eviction. The
|
|
21
|
+
* engine wraps this into the per-context {@link ArtifactsApi} facades and
|
|
22
|
+
* owns the `artifact.tagged` event append.
|
|
23
|
+
*/
|
|
24
|
+
export declare class ArtifactsStore {
|
|
25
|
+
private readonly rows;
|
|
26
|
+
private readonly config;
|
|
27
|
+
private readonly max;
|
|
28
|
+
/** Serializes tags so read-modify-write upserts and eviction don't race. */
|
|
29
|
+
private tagChain;
|
|
30
|
+
constructor(options: CreateArtifactsStoreOptions);
|
|
31
|
+
tag(input: ArtifactTagInput): Promise<ArtifactRecord>;
|
|
32
|
+
private tagSerialized;
|
|
33
|
+
list(filter?: ArtifactListFilter): Promise<ArtifactRecord[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the effective kind (freeform when no kinds are declared) and
|
|
36
|
+
* the payload to persist. Like tool input schemas
|
|
37
|
+
* (`validateToolInput`), zod schemas validate *and* transform: the
|
|
38
|
+
* parsed output — defaults and coercions applied — is what gets stored.
|
|
39
|
+
*/
|
|
40
|
+
private resolveKindAndData;
|
|
41
|
+
private evictPastCap;
|
|
42
|
+
}
|
|
43
|
+
/** Deterministic id for a keyed tag (same key ⇒ same id ⇒ upsert). */
|
|
44
|
+
export declare function artifactIdForKey(key: string): string;
|
|
45
|
+
//# sourceMappingURL=artifacts-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts-store.d.ts","sourceRoot":"","sources":["../../src/internal/artifacts-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAYnE,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAuC;IAEvD,YAAY,OAAO,EAAE,2BAA2B,EAO/C;IAED,GAAG,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAIpD;YAEa,aAAa;IA6BrB,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAUjE;IAED;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;YA8BZ,YAAY;CAU3B;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable artifact rows behind `ctx.artifacts` ({@link ArtifactsApi}).
|
|
3
|
+
*
|
|
4
|
+
* Mirror of host-kv: when `defineStorage` is authored with `get` + `list`,
|
|
5
|
+
* rows live in that sink under `storageKeys.artifact`; otherwise one
|
|
6
|
+
* JSON file per row under `--state-root/artifacts`.
|
|
7
|
+
*/
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
18
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { resolveArtifactsMax } from "../artifacts.js";
|
|
21
|
+
/** Kind used by freeform tags when no kinds are declared. */
|
|
22
|
+
export const ARTIFACT_DEFAULT_KIND = "artifact";
|
|
23
|
+
/**
|
|
24
|
+
* Upsert + list semantics over one {@link ArtifactRowStore}: kind/schema
|
|
25
|
+
* validation, deterministic ids for keyed tags, and `max` eviction. The
|
|
26
|
+
* engine wraps this into the per-context {@link ArtifactsApi} facades and
|
|
27
|
+
* owns the `artifact.tagged` event append.
|
|
28
|
+
*/
|
|
29
|
+
export class ArtifactsStore {
|
|
30
|
+
constructor(options) {
|
|
31
|
+
var _a;
|
|
32
|
+
/** Serializes tags so read-modify-write upserts and eviction don't race. */
|
|
33
|
+
this.tagChain = Promise.resolve();
|
|
34
|
+
this.rows =
|
|
35
|
+
((_a = options.storage) === null || _a === void 0 ? void 0 : _a.supportsArtifacts) === true
|
|
36
|
+
? createCoordinatorRowStore(options.storage)
|
|
37
|
+
: createFilesystemRowStore(options.stateRoot);
|
|
38
|
+
this.config = options.config;
|
|
39
|
+
this.max = resolveArtifactsMax(options.config);
|
|
40
|
+
}
|
|
41
|
+
tag(input) {
|
|
42
|
+
const result = this.tagChain.then(() => this.tagSerialized(input));
|
|
43
|
+
this.tagChain = result.catch(() => { });
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
tagSerialized(input) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
const { kind, data } = this.resolveKindAndData(input);
|
|
50
|
+
const id = input.key === undefined
|
|
51
|
+
? `art_${randomUUID()}`
|
|
52
|
+
: artifactIdForKey(input.key);
|
|
53
|
+
const existing = yield this.rows.get(id);
|
|
54
|
+
const now = new Date().toISOString();
|
|
55
|
+
const record = {
|
|
56
|
+
id,
|
|
57
|
+
kind,
|
|
58
|
+
key: input.key,
|
|
59
|
+
title: input.title,
|
|
60
|
+
data,
|
|
61
|
+
sessionId: input.sessionId,
|
|
62
|
+
turnId: input.turnId,
|
|
63
|
+
source: (_a = input.source) !== null && _a !== void 0 ? _a : "host",
|
|
64
|
+
createdAt: (_b = existing === null || existing === void 0 ? void 0 : existing.createdAt) !== null && _b !== void 0 ? _b : now,
|
|
65
|
+
updatedAt: now,
|
|
66
|
+
};
|
|
67
|
+
yield this.rows.put(record);
|
|
68
|
+
if (existing === undefined) {
|
|
69
|
+
yield this.evictPastCap();
|
|
70
|
+
}
|
|
71
|
+
return record;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
list(filter) {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const records = yield this.rows.list();
|
|
77
|
+
return records
|
|
78
|
+
.filter((record) => ((filter === null || filter === void 0 ? void 0 : filter.kind) === undefined || record.kind === filter.kind) &&
|
|
79
|
+
((filter === null || filter === void 0 ? void 0 : filter.sessionId) === undefined ||
|
|
80
|
+
record.sessionId === filter.sessionId))
|
|
81
|
+
.sort(byNewestUpdated);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the effective kind (freeform when no kinds are declared) and
|
|
86
|
+
* the payload to persist. Like tool input schemas
|
|
87
|
+
* (`validateToolInput`), zod schemas validate *and* transform: the
|
|
88
|
+
* parsed output — defaults and coercions applied — is what gets stored.
|
|
89
|
+
*/
|
|
90
|
+
resolveKindAndData(input) {
|
|
91
|
+
var _a;
|
|
92
|
+
var _b;
|
|
93
|
+
const kind = (_b = input.kind) !== null && _b !== void 0 ? _b : ARTIFACT_DEFAULT_KIND;
|
|
94
|
+
if (kind.trim() === "") {
|
|
95
|
+
throw new Error("artifacts.tag: kind must be a non-empty string");
|
|
96
|
+
}
|
|
97
|
+
const kinds = (_a = this.config) === null || _a === void 0 ? void 0 : _a.kinds;
|
|
98
|
+
if (kinds === undefined || Object.keys(kinds).length === 0) {
|
|
99
|
+
return { kind, data: input.data };
|
|
100
|
+
}
|
|
101
|
+
const kindConfig = kinds[kind];
|
|
102
|
+
if (kindConfig === undefined) {
|
|
103
|
+
throw new Error(`artifacts.tag: unknown kind ${JSON.stringify(kind)} (declared: ${Object.keys(kinds).join(", ")})`);
|
|
104
|
+
}
|
|
105
|
+
if (kindConfig.schema !== undefined) {
|
|
106
|
+
const parsed = kindConfig.schema.safeParse(input.data);
|
|
107
|
+
if (!parsed.success) {
|
|
108
|
+
throw new Error(`artifacts.tag: data does not match the ${JSON.stringify(kind)} schema: ${parsed.error.message}`);
|
|
109
|
+
}
|
|
110
|
+
return { kind, data: parsed.data };
|
|
111
|
+
}
|
|
112
|
+
return { kind, data: input.data };
|
|
113
|
+
}
|
|
114
|
+
evictPastCap() {
|
|
115
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
const records = yield this.rows.list();
|
|
117
|
+
if (records.length <= this.max) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const oldestFirst = records.sort((a, b) => byNewestUpdated(b, a));
|
|
121
|
+
for (const record of oldestFirst.slice(0, records.length - this.max)) {
|
|
122
|
+
yield this.rows.delete(record.id);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** Deterministic id for a keyed tag (same key ⇒ same id ⇒ upsert). */
|
|
128
|
+
export function artifactIdForKey(key) {
|
|
129
|
+
if (key.trim() === "") {
|
|
130
|
+
throw new Error("artifacts.tag: key must be a non-empty string");
|
|
131
|
+
}
|
|
132
|
+
return `art_${createHash("sha256").update(key, "utf8").digest("hex").slice(0, 32)}`;
|
|
133
|
+
}
|
|
134
|
+
function byNewestUpdated(a, b) {
|
|
135
|
+
if (a.updatedAt !== b.updatedAt) {
|
|
136
|
+
return a.updatedAt < b.updatedAt ? 1 : -1;
|
|
137
|
+
}
|
|
138
|
+
// Tie-break so eviction and listing stay deterministic.
|
|
139
|
+
if (a.createdAt !== b.createdAt) {
|
|
140
|
+
return a.createdAt < b.createdAt ? 1 : -1;
|
|
141
|
+
}
|
|
142
|
+
return a.id < b.id ? 1 : a.id > b.id ? -1 : 0;
|
|
143
|
+
}
|
|
144
|
+
function isArtifactRecord(value) {
|
|
145
|
+
if (typeof value !== "object" ||
|
|
146
|
+
value === null ||
|
|
147
|
+
Array.isArray(value) ||
|
|
148
|
+
typeof value.id !== "string" ||
|
|
149
|
+
typeof value.kind !== "string" ||
|
|
150
|
+
(value.source !== "host" && value.source !== "model") ||
|
|
151
|
+
typeof value.createdAt !== "string" ||
|
|
152
|
+
typeof value.updatedAt !== "string" ||
|
|
153
|
+
!("data" in value)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
for (const field of ["key", "title", "sessionId", "turnId"]) {
|
|
157
|
+
if (value[field] !== undefined && typeof value[field] !== "string") {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
function createCoordinatorRowStore(storage) {
|
|
164
|
+
return {
|
|
165
|
+
get(id) {
|
|
166
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
+
const value = yield storage.artifactGet(id);
|
|
168
|
+
return isArtifactRecord(value) ? value : undefined;
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
put(record) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
yield storage.artifactPut(record.id, record);
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
delete(id) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
yield storage.artifactDelete(id);
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
list() {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const values = yield storage.artifactList();
|
|
184
|
+
return values.filter(isArtifactRecord);
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function createFilesystemRowStore(stateRoot) {
|
|
190
|
+
const dir = join(stateRoot, "artifacts");
|
|
191
|
+
const filePath = (id) => join(dir, `${encodeURIComponent(id)}.json`);
|
|
192
|
+
// Missing and corrupt rows both read as absent — a truncated/garbled
|
|
193
|
+
// file must not poison list() (and with it every insert's eviction).
|
|
194
|
+
const readRecord = (path) => __awaiter(this, void 0, void 0, function* () {
|
|
195
|
+
try {
|
|
196
|
+
const value = JSON.parse(yield readFile(path, "utf8"));
|
|
197
|
+
return isArtifactRecord(value) ? value : undefined;
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (error.code === "ENOENT" ||
|
|
201
|
+
error instanceof SyntaxError) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return {
|
|
208
|
+
get(id) {
|
|
209
|
+
return readRecord(filePath(id));
|
|
210
|
+
},
|
|
211
|
+
put(record) {
|
|
212
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
213
|
+
yield mkdir(dir, { recursive: true });
|
|
214
|
+
const tmp = join(dir, `.tmp-${randomUUID()}`);
|
|
215
|
+
yield writeFile(tmp, JSON.stringify(record), "utf8");
|
|
216
|
+
yield rename(tmp, filePath(record.id));
|
|
217
|
+
});
|
|
218
|
+
},
|
|
219
|
+
delete(id) {
|
|
220
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
221
|
+
yield rm(filePath(id), { force: true });
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
list() {
|
|
225
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
226
|
+
let names;
|
|
227
|
+
try {
|
|
228
|
+
names = yield readdir(dir);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
if (error.code === "ENOENT") {
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
throw error;
|
|
235
|
+
}
|
|
236
|
+
const records = [];
|
|
237
|
+
for (const name of names.sort()) {
|
|
238
|
+
if (name.startsWith(".") || !name.endsWith(".json")) {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
const record = yield readRecord(join(dir, name));
|
|
242
|
+
if (record !== undefined) {
|
|
243
|
+
records.push(record);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return records;
|
|
247
|
+
});
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tag_artifact` built-in tool, enabled by
|
|
3
|
+
* `defineArtifacts({ agentTool: true })` rather than
|
|
4
|
+
* `AgentConfig.builtinTools`: its input schema and description are
|
|
5
|
+
* generated from the declared kinds registry.
|
|
6
|
+
*/
|
|
7
|
+
import type { ArtifactsConfig, ToolDefinition } from "../../types.js";
|
|
8
|
+
export declare const TAG_ARTIFACT_TOOL_NAME = "tag_artifact";
|
|
9
|
+
export declare function tagArtifactTool(config: ArtifactsConfig): ToolDefinition;
|
|
10
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AA0BrD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,CAoCvE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tag_artifact` built-in tool, enabled by
|
|
3
|
+
* `defineArtifacts({ agentTool: true })` rather than
|
|
4
|
+
* `AgentConfig.builtinTools`: its input schema and description are
|
|
5
|
+
* generated from the declared kinds registry.
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { defineTool } from "../../tools.js";
|
|
18
|
+
export const TAG_ARTIFACT_TOOL_NAME = "tag_artifact";
|
|
19
|
+
function kindVariant(name, schema) {
|
|
20
|
+
return z.object({
|
|
21
|
+
kind: z.literal(name),
|
|
22
|
+
data: schema !== null && schema !== void 0 ? schema : z
|
|
23
|
+
.object({})
|
|
24
|
+
.passthrough()
|
|
25
|
+
.describe("Freeform JSON object payload for this kind."),
|
|
26
|
+
title: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Short human-readable label shown in artifact lists."),
|
|
30
|
+
key: z
|
|
31
|
+
.string()
|
|
32
|
+
.trim()
|
|
33
|
+
.min(1)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Stable upsert key: tagging the same key again updates the existing record instead of creating a new one."),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export function tagArtifactTool(config) {
|
|
39
|
+
var _a;
|
|
40
|
+
const kinds = Object.entries((_a = config.kinds) !== null && _a !== void 0 ? _a : {});
|
|
41
|
+
const [first, ...rest] = kinds.map(([name, kind]) => kindVariant(name, kind.schema));
|
|
42
|
+
if (first === undefined) {
|
|
43
|
+
// Discovery already errors on agentTool without kinds.
|
|
44
|
+
throw new Error("tag_artifact requires at least one declared artifact kind");
|
|
45
|
+
}
|
|
46
|
+
const description = [
|
|
47
|
+
"Tag a durable artifact: a record of a notable output you produced, kept across sessions and listed for the people supervising this agent. Tag one whenever you finish something worth surfacing durably.",
|
|
48
|
+
"Kinds:",
|
|
49
|
+
...kinds.map(([name, kind]) => `- ${name}: ${kind.description}`),
|
|
50
|
+
"Same `key` upserts: tagging it again updates that record — use a stable key when re-tagging the same underlying thing (e.g. the same PR URL).",
|
|
51
|
+
].join("\n");
|
|
52
|
+
return defineTool({
|
|
53
|
+
description,
|
|
54
|
+
inputSchema: z.discriminatedUnion("kind", [first, ...rest]),
|
|
55
|
+
execute(input, ctx) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
const record = yield ctx.artifacts.tag({
|
|
58
|
+
kind: input.kind,
|
|
59
|
+
data: input.data,
|
|
60
|
+
title: input.title,
|
|
61
|
+
key: input.key,
|
|
62
|
+
source: "model",
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
tagged: true,
|
|
66
|
+
id: record.id,
|
|
67
|
+
kind: record.kind,
|
|
68
|
+
key: record.key,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
* time so turns, direct calls, `info`, and the playground treat them
|
|
5
5
|
* exactly like authored tools.
|
|
6
6
|
*/
|
|
7
|
-
import type { BuiltinToolsConfig, DiscoveredTool } from "../../types.js";
|
|
7
|
+
import type { ArtifactsConfig, BuiltinToolsConfig, DiscoveredTool } from "../../types.js";
|
|
8
|
+
export { TAG_ARTIFACT_TOOL_NAME } from "./artifacts.js";
|
|
8
9
|
/** Resolve the enabled built-in tools, in stable catalog order. */
|
|
9
10
|
export declare function builtinTools(config: BuiltinToolsConfig | undefined): DiscoveredTool[];
|
|
11
|
+
/**
|
|
12
|
+
* The `tag_artifact` built-in, enabled by `defineArtifacts({ agentTool:
|
|
13
|
+
* true })` (not `AgentConfig.builtinTools` — the tool is generated from
|
|
14
|
+
* the kinds registry). Undefined without kinds: discovery already errors.
|
|
15
|
+
*/
|
|
16
|
+
export declare function artifactBuiltinTool(config: ArtifactsConfig | undefined): DiscoveredTool | undefined;
|
|
10
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EAEf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/builtin-tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EAEf,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,mEAAmE;AACnE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,cAAc,EAAE,CAMlB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC,cAAc,GAAG,SAAS,CAQ5B"}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* exactly like authored tools.
|
|
6
6
|
*/
|
|
7
7
|
import { toolInputJsonSchema } from "../json-schema.js";
|
|
8
|
+
import { TAG_ARTIFACT_TOOL_NAME, tagArtifactTool } from "./artifacts.js";
|
|
8
9
|
import { reminderTools } from "./reminders.js";
|
|
10
|
+
export { TAG_ARTIFACT_TOOL_NAME } from "./artifacts.js";
|
|
9
11
|
/** Resolve the enabled built-in tools, in stable catalog order. */
|
|
10
12
|
export function builtinTools(config) {
|
|
11
13
|
const tools = [];
|
|
@@ -14,6 +16,19 @@ export function builtinTools(config) {
|
|
|
14
16
|
}
|
|
15
17
|
return tools;
|
|
16
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* The `tag_artifact` built-in, enabled by `defineArtifacts({ agentTool:
|
|
21
|
+
* true })` (not `AgentConfig.builtinTools` — the tool is generated from
|
|
22
|
+
* the kinds registry). Undefined without kinds: discovery already errors.
|
|
23
|
+
*/
|
|
24
|
+
export function artifactBuiltinTool(config) {
|
|
25
|
+
var _a;
|
|
26
|
+
if ((config === null || config === void 0 ? void 0 : config.agentTool) !== true ||
|
|
27
|
+
Object.keys((_a = config.kinds) !== null && _a !== void 0 ? _a : {}).length === 0) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return toDiscovered({ [TAG_ARTIFACT_TOOL_NAME]: tagArtifactTool(config) })[0];
|
|
31
|
+
}
|
|
17
32
|
function toDiscovered(byName) {
|
|
18
33
|
return Object.entries(byName).map(([name, definition]) => ({
|
|
19
34
|
name,
|
|
@@ -50,6 +50,12 @@ export interface AxCliOptions {
|
|
|
50
50
|
skipReport?: boolean;
|
|
51
51
|
/** `eval`: override `evals.config.ts` `maxConcurrency`. */
|
|
52
52
|
maxConcurrency?: number;
|
|
53
|
+
/**
|
|
54
|
+
* `eval` / `eval status <runId>`: also write the full results JSON to this
|
|
55
|
+
* path. `session`: write the raw NDJSON trace (same format as `run
|
|
56
|
+
* --events` and the playground download) to this path instead of printing.
|
|
57
|
+
*/
|
|
58
|
+
out?: string;
|
|
53
59
|
/** Scaffold target directory for `init`. */
|
|
54
60
|
initTarget?: string;
|
|
55
61
|
/** Tool name for `call`. */
|
|
@@ -184,9 +190,22 @@ export declare function cmdSessions(options: AxCliOptions): Promise<number>;
|
|
|
184
190
|
/**
|
|
185
191
|
* `session <id>` — view a full session (trajectory text by default).
|
|
186
192
|
* `--json` → trajectory JSON; `--events` (`rawEvents`) → raw event list.
|
|
193
|
+
* `--out <path>` → write the raw NDJSON trace to a file instead of printing
|
|
194
|
+
* (same format as `run --events` and the playground download).
|
|
187
195
|
* Interactive reattach: `resume [id]` / `chat --resume` (or `chat --session`).
|
|
188
196
|
*/
|
|
189
197
|
export declare function cmdSession(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
|
|
198
|
+
/**
|
|
199
|
+
* `cost [sessionId]` — pull per-session cost metrics.
|
|
200
|
+
*
|
|
201
|
+
* With a session id: per-turn token usage + estimated cost for that session.
|
|
202
|
+
* Without one: one row per session (all sessions on the target) plus a
|
|
203
|
+
* total row. `--json` prints the underlying report(s); text is the default.
|
|
204
|
+
* Costs are the engine's recorded estimates on `turn.completed` events
|
|
205
|
+
* (see `model-pricing.ts`); turns persisted before cost tracking simply
|
|
206
|
+
* count as unpriced.
|
|
207
|
+
*/
|
|
208
|
+
export declare function cmdCost(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
|
|
190
209
|
/**
|
|
191
210
|
* `playground` — open the web UI against local / `--url` / `--prod`.
|
|
192
211
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,mBAAmB,EAIpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-ax.d.ts","sourceRoot":"","sources":["../../src/internal/cli-ax.ts"],"names":[],"mappings":"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"}
|