@cursor/july 0.1.25 → 0.1.27
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 +31 -9
- 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/cursor-account.d.ts +2 -1
- package/dist/channels/slack/cursor-account.d.ts.map +1 -1
- package/dist/channels/slack/cursor-account.js +1 -1
- package/dist/channels/slack/dispatch.d.ts +4 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +3 -3
- package/dist/channels/slack/interactive.d.ts +2 -1
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +1 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +4 -3
- package/dist/channels/slack/types.d.ts +6 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +1 -1
- package/dist/docs/ab.html +2 -2
- package/dist/docs/assets/{app.DYcC9FY-.js → app.BICLoJYF.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CQJytDwU.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.o4N_knTV.js → VPLocalSearchBox.wN4Ko9dT.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DQ-njyo0.js → theme.dnnTE-Co.js} +2 -2
- package/dist/docs/building-with-agents.html +2 -2
- package/dist/docs/concepts.html +2 -2
- package/dist/docs/deployment.html +2 -2
- package/dist/docs/evals.html +2 -2
- package/dist/docs/example-agents/approval-buddy.html +2 -2
- package/dist/docs/example-agents/benny.html +2 -2
- package/dist/docs/example-agents/bugbot.html +2 -2
- package/dist/docs/example-agents/codebase-wiki.html +2 -2
- package/dist/docs/example-agents/codeowners-review.html +2 -2
- package/dist/docs/example-agents/concierge.html +2 -2
- package/dist/docs/example-agents/fsd.html +2 -2
- package/dist/docs/example-agents/index.html +2 -2
- package/dist/docs/example-agents/knowledge-base.html +2 -2
- package/dist/docs/example-agents/oncall.html +2 -2
- package/dist/docs/example-agents/security-reviewer.html +2 -2
- package/dist/docs/example-agents/slack-agent.html +2 -2
- package/dist/docs/example-agents/weather-agent.html +2 -2
- package/dist/docs/guides/agent-to-agent.html +2 -2
- package/dist/docs/guides/cloud-runtime.html +2 -2
- package/dist/docs/guides/github.html +2 -2
- package/dist/docs/guides/human-in-the-loop.html +2 -2
- package/dist/docs/guides/mcp-oauth.html +2 -2
- package/dist/docs/guides/slack.html +2 -2
- package/dist/docs/guides/webhooks.html +2 -2
- package/dist/docs/hillclimbing.html +2 -2
- package/dist/docs/index.html +2 -2
- package/dist/docs/quickstart.html +2 -2
- package/dist/docs/reference/agent-config.html +2 -2
- package/dist/docs/reference/channels.html +2 -2
- package/dist/docs/reference/cli.html +2 -2
- package/dist/docs/reference/connections.html +2 -2
- package/dist/docs/reference/hooks.html +2 -2
- package/dist/docs/reference/http-api.html +2 -2
- package/dist/docs/reference/instructions.html +2 -2
- package/dist/docs/reference/playground.html +2 -2
- package/dist/docs/reference/project-layout.html +2 -2
- package/dist/docs/reference/prompt.html +2 -2
- package/dist/docs/reference/schedules.html +2 -2
- package/dist/docs/reference/sessions.html +2 -2
- package/dist/docs/reference/skills.html +2 -2
- package/dist/docs/reference/subagents.html +2 -2
- package/dist/docs/reference/tools.html +2 -2
- package/dist/docs/scaffolding-agents.html +2 -2
- package/dist/docs/storage.html +2 -2
- package/dist/docs/troubleshooting.html +2 -2
- 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 +11 -0
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +80 -0
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +14 -6
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +83 -2
- 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 +39 -0
- 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-BDCeW4uc.js +86 -0
- package/dist/playground/assets/index-Bul1WfrB.css +1 -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/package.json +26 -26
- package/src/ab.ts +7 -0
- package/src/bin/agent-serve.ts +30 -2
- package/src/channels/github/github-channel.ts +19 -2
- package/src/channels/github/types.ts +6 -0
- package/src/channels/slack/api.ts +3 -1
- package/src/channels/slack/cursor-account.ts +3 -1
- package/src/channels/slack/dispatch.ts +12 -1
- package/src/channels/slack/interactive.ts +3 -0
- package/src/channels/slack/slack-channel.ts +6 -0
- package/src/channels/slack/types.ts +6 -0
- package/src/internal/ab-fold.ts +4 -0
- package/src/internal/ab-snapshot.ts +1 -0
- package/src/internal/cli-ax.ts +95 -0
- package/src/internal/model-pricing.ts +426 -0
- package/src/internal/reminder-runner.ts +1 -0
- package/src/internal/schedule-runner.ts +1 -0
- package/src/internal/sdk-runner.ts +10 -2
- package/src/internal/server.ts +2 -0
- package/src/internal/session-cost.ts +231 -0
- package/src/internal/session-engine.ts +32 -1
- package/src/internal/trajectory.ts +45 -3
- package/src/types.ts +42 -2
- 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/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 -943
- 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 -452
- 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 -253
- package/src/channels/slack/defaults.final-post.test.ts +0 -182
- package/src/channels/slack/dispatch.test.ts +0 -795
- 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 -390
- 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 -303
- package/src/internal/session-engine.artifacts.test.ts +0 -243
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ab-fold.d.ts","sourceRoot":"","sources":["../../src/internal/ab-fold.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,oDAAoD;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAClC;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,UAAU,CAWZ;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA0B7E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,eAAe,CAM7E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAC3C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC,CAWf;AAiBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,WAAW,EAAE,SAAS,YAAY,EAAE,EACpC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,
|
|
1
|
+
{"version":3,"file":"ab-fold.d.ts","sourceRoot":"","sources":["../../src/internal/ab-fold.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,oDAAoD;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAClC;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,UAAU,CAWZ;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CA0B7E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,eAAe,CAM7E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAC3C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC,CAWf;AAiBD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,WAAW,EAAE,SAAS,YAAY,EAAE,EACpC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,CAoCN;AAcD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,SAAS,GAAG,SAAS,CAKvB"}
|
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,
|
|
@@ -187,6 +187,17 @@ export declare function cmdSessions(options: AxCliOptions): Promise<number>;
|
|
|
187
187
|
* Interactive reattach: `resume [id]` / `chat --resume` (or `chat --session`).
|
|
188
188
|
*/
|
|
189
189
|
export declare function cmdSession(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
|
|
190
|
+
/**
|
|
191
|
+
* `cost [sessionId]` — pull per-session cost metrics.
|
|
192
|
+
*
|
|
193
|
+
* With a session id: per-turn token usage + estimated cost for that session.
|
|
194
|
+
* Without one: one row per session (all sessions on the target) plus a
|
|
195
|
+
* total row. `--json` prints the underlying report(s); text is the default.
|
|
196
|
+
* Costs are the engine's recorded estimates on `turn.completed` events
|
|
197
|
+
* (see `model-pricing.ts`); turns persisted before cost tracking simply
|
|
198
|
+
* count as unpriced.
|
|
199
|
+
*/
|
|
200
|
+
export declare function cmdCost(sessionId: string | undefined, options: AxCliOptions): Promise<number>;
|
|
190
201
|
/**
|
|
191
202
|
* `playground` — open the web UI against local / `--url` / `--prod`.
|
|
192
203
|
*
|
|
@@ -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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"}
|
package/dist/internal/cli-ax.js
CHANGED
|
@@ -30,10 +30,12 @@ import { cancelRemoteEvalRun, getRemoteEvalRun, listRemoteEvalRuns, listRemoteEv
|
|
|
30
30
|
import { formatInitNextSteps, formatInitScaffoldSummary, initNextCommands, initProject, installScaffoldDependencies, printInitGuide, } from "./init-project.js";
|
|
31
31
|
import { offerInstallCursorSkills } from "./install-cursor-skills.js";
|
|
32
32
|
import { runLogsTail, sanitizeCustomerError } from "./logs-client.js";
|
|
33
|
+
import { mapPool } from "./map-pool.js";
|
|
33
34
|
import { openBrowser } from "./open-browser.js";
|
|
34
35
|
import { startPlaygroundProxy } from "./playground-proxy.js";
|
|
35
36
|
import { ProdTargetError, resolveProdAliasPlaygroundUrl, resolveProdSlug, resolveProdTarget, } from "./resolve-prod-target.js";
|
|
36
37
|
import { runSession } from "./run-client.js";
|
|
38
|
+
import { buildSessionCostReport, formatSessionCostText, formatSessionsCostText, } from "./session-cost.js";
|
|
37
39
|
import { fetchSessionEvents, formatSessionsTable, listSessionsWithSource, resolvePreviousSessionId, } from "./sessions-client.js";
|
|
38
40
|
import { createStreamProgress } from "./stream-progress.js";
|
|
39
41
|
import { buildTrajectory, formatTrajectoryText, loadTrajectoryFromEventsFile, } from "./trajectory.js";
|
|
@@ -1351,6 +1353,84 @@ export function cmdSession(sessionId, options) {
|
|
|
1351
1353
|
}
|
|
1352
1354
|
});
|
|
1353
1355
|
}
|
|
1356
|
+
/** Sessions fetched concurrently when `cost` aggregates every session. */
|
|
1357
|
+
const COST_FETCH_CONCURRENCY = 4;
|
|
1358
|
+
/**
|
|
1359
|
+
* `cost [sessionId]` — pull per-session cost metrics.
|
|
1360
|
+
*
|
|
1361
|
+
* With a session id: per-turn token usage + estimated cost for that session.
|
|
1362
|
+
* Without one: one row per session (all sessions on the target) plus a
|
|
1363
|
+
* total row. `--json` prints the underlying report(s); text is the default.
|
|
1364
|
+
* Costs are the engine's recorded estimates on `turn.completed` events
|
|
1365
|
+
* (see `model-pricing.ts`); turns persisted before cost tracking simply
|
|
1366
|
+
* count as unpriced.
|
|
1367
|
+
*/
|
|
1368
|
+
export function cmdCost(sessionId, options) {
|
|
1369
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1370
|
+
const target = yield resolveSessionTarget(options);
|
|
1371
|
+
if (typeof target === "number") {
|
|
1372
|
+
return target;
|
|
1373
|
+
}
|
|
1374
|
+
const auth = {
|
|
1375
|
+
bearerToken: options.bearerToken,
|
|
1376
|
+
headers: target.headers,
|
|
1377
|
+
};
|
|
1378
|
+
try {
|
|
1379
|
+
const resolved = trimNonEmpty(sessionId);
|
|
1380
|
+
if (resolved !== undefined) {
|
|
1381
|
+
const events = yield fetchSessionEvents({
|
|
1382
|
+
baseUrl: target.agentUrl,
|
|
1383
|
+
sessionId: resolved,
|
|
1384
|
+
auth,
|
|
1385
|
+
fetchImpl: options.fetchImpl,
|
|
1386
|
+
});
|
|
1387
|
+
const report = buildSessionCostReport(events);
|
|
1388
|
+
if (report.sessionId === "") {
|
|
1389
|
+
report.sessionId = resolved;
|
|
1390
|
+
}
|
|
1391
|
+
if (options.json === true) {
|
|
1392
|
+
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
1393
|
+
}
|
|
1394
|
+
else {
|
|
1395
|
+
process.stdout.write(formatSessionCostText(report));
|
|
1396
|
+
}
|
|
1397
|
+
return 0;
|
|
1398
|
+
}
|
|
1399
|
+
const listed = yield listSessionsWithSource({
|
|
1400
|
+
baseUrl: target.agentUrl,
|
|
1401
|
+
auth,
|
|
1402
|
+
fetchImpl: options.fetchImpl,
|
|
1403
|
+
});
|
|
1404
|
+
const rows = yield mapPool(listed.sessions, COST_FETCH_CONCURRENCY, (session) => __awaiter(this, void 0, void 0, function* () {
|
|
1405
|
+
const events = yield fetchSessionEvents({
|
|
1406
|
+
baseUrl: target.agentUrl,
|
|
1407
|
+
sessionId: session.sessionId,
|
|
1408
|
+
auth,
|
|
1409
|
+
fetchImpl: options.fetchImpl,
|
|
1410
|
+
});
|
|
1411
|
+
const report = buildSessionCostReport(events);
|
|
1412
|
+
return {
|
|
1413
|
+
sessionId: session.sessionId,
|
|
1414
|
+
channelId: session.channelId,
|
|
1415
|
+
title: session.title,
|
|
1416
|
+
updatedAt: session.updatedAt,
|
|
1417
|
+
totals: report.totals,
|
|
1418
|
+
};
|
|
1419
|
+
}));
|
|
1420
|
+
if (options.json === true) {
|
|
1421
|
+
process.stdout.write(`${JSON.stringify({ sessions: rows }, null, 2)}\n`);
|
|
1422
|
+
}
|
|
1423
|
+
else {
|
|
1424
|
+
process.stdout.write(formatSessionsCostText(rows));
|
|
1425
|
+
}
|
|
1426
|
+
return 0;
|
|
1427
|
+
}
|
|
1428
|
+
catch (error) {
|
|
1429
|
+
process.stderr.write(`${sanitizeCustomerError(error instanceof Error ? error.message : String(error))}\n`);
|
|
1430
|
+
return 1;
|
|
1431
|
+
}
|
|
1432
|
+
});
|
|
1433
|
+
}
|
|
1354
1434
|
/**
|
|
1355
1435
|
* `playground` — open the web UI against local / `--url` / `--prod`.
|
|
1356
1436
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAML,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA6CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;
|
|
1
|
+
{"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAML,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA6CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AA6bD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAkOjB;AAiDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5E"}
|