anchor-ai-sdk 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -4
- package/dist/agents/coding/index.d.ts +1 -0
- package/dist/agents/coding/index.d.ts.map +1 -1
- package/dist/agents/coding/index.js +3 -0
- package/dist/agents/coding/index.js.map +1 -1
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/terminal/index.d.ts +10 -0
- package/dist/agents/terminal/index.d.ts.map +1 -0
- package/dist/agents/terminal/index.js +20 -0
- package/dist/agents/terminal/index.js.map +1 -0
- package/dist/agents/terminal/phases.d.ts +4 -0
- package/dist/agents/terminal/phases.d.ts.map +1 -0
- package/dist/agents/terminal/phases.js +29 -0
- package/dist/agents/terminal/phases.js.map +1 -0
- package/dist/agents/terminal/prompt.d.ts +13 -0
- package/dist/agents/terminal/prompt.d.ts.map +1 -0
- package/dist/agents/terminal/prompt.js +33 -0
- package/dist/agents/terminal/prompt.js.map +1 -0
- package/dist/agents/terminal/strategy.d.ts +3 -0
- package/dist/agents/terminal/strategy.d.ts.map +1 -0
- package/dist/agents/terminal/strategy.js +12 -0
- package/dist/agents/terminal/strategy.js.map +1 -0
- package/dist/agents/types.d.ts +6 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +188 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine/budgets.d.ts +1 -0
- package/dist/engine/budgets.d.ts.map +1 -1
- package/dist/engine/budgets.js +3 -0
- package/dist/engine/budgets.js.map +1 -1
- package/dist/engine/dispatch.d.ts +35 -0
- package/dist/engine/dispatch.d.ts.map +1 -1
- package/dist/engine/dispatch.js +87 -10
- package/dist/engine/dispatch.js.map +1 -1
- package/dist/engine/events.d.ts +26 -2
- package/dist/engine/events.d.ts.map +1 -1
- package/dist/engine/intent.d.ts +8 -0
- package/dist/engine/intent.d.ts.map +1 -0
- package/dist/engine/intent.js +22 -0
- package/dist/engine/intent.js.map +1 -0
- package/dist/engine/loop.d.ts.map +1 -1
- package/dist/engine/loop.js +480 -8
- package/dist/engine/loop.js.map +1 -1
- package/dist/engine/operations.d.ts +82 -0
- package/dist/engine/operations.d.ts.map +1 -0
- package/dist/engine/operations.js +143 -0
- package/dist/engine/operations.js.map +1 -0
- package/dist/engine/thread.d.ts +3 -0
- package/dist/engine/thread.d.ts.map +1 -1
- package/dist/engine/thread.js.map +1 -1
- package/dist/engine/types.d.ts +54 -2
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ledger/alignment.d.ts +30 -0
- package/dist/ledger/alignment.d.ts.map +1 -0
- package/dist/ledger/alignment.js +116 -0
- package/dist/ledger/alignment.js.map +1 -0
- package/dist/ledger/compiler.d.ts +23 -0
- package/dist/ledger/compiler.d.ts.map +1 -0
- package/dist/ledger/compiler.js +134 -0
- package/dist/ledger/compiler.js.map +1 -0
- package/dist/ledger/config.d.ts +15 -0
- package/dist/ledger/config.d.ts.map +1 -0
- package/dist/ledger/config.js +2 -0
- package/dist/ledger/config.js.map +1 -0
- package/dist/ledger/index.d.ts +6 -0
- package/dist/ledger/index.d.ts.map +1 -0
- package/dist/ledger/index.js +6 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/ledger/ledger.d.ts +45 -0
- package/dist/ledger/ledger.d.ts.map +1 -0
- package/dist/ledger/ledger.js +181 -0
- package/dist/ledger/ledger.js.map +1 -0
- package/dist/ledger/types.d.ts +97 -0
- package/dist/ledger/types.d.ts.map +1 -0
- package/dist/ledger/types.js +12 -0
- package/dist/ledger/types.js.map +1 -0
- package/dist/llm/index.d.ts +13 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +4 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/openai-compatible.d.ts +15 -1
- package/dist/llm/openai-compatible.d.ts.map +1 -1
- package/dist/llm/openai-compatible.js +25 -0
- package/dist/llm/openai-compatible.js.map +1 -1
- package/dist/llm/structured.d.ts +36 -0
- package/dist/llm/structured.d.ts.map +1 -0
- package/dist/llm/structured.js +44 -0
- package/dist/llm/structured.js.map +1 -0
- package/dist/llm/types.d.ts +24 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/lsp/client.d.ts +33 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +137 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +15 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +13 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/protocol.d.ts +25 -0
- package/dist/lsp/protocol.d.ts.map +1 -0
- package/dist/lsp/protocol.js +45 -0
- package/dist/lsp/protocol.js.map +1 -0
- package/dist/lsp/tools.d.ts +6 -0
- package/dist/lsp/tools.d.ts.map +1 -0
- package/dist/lsp/tools.js +198 -0
- package/dist/lsp/tools.js.map +1 -0
- package/dist/lsp/typescript.d.ts +67 -0
- package/dist/lsp/typescript.d.ts.map +1 -0
- package/dist/lsp/typescript.js +266 -0
- package/dist/lsp/typescript.js.map +1 -0
- package/dist/sandbox/command.d.ts +7 -0
- package/dist/sandbox/command.d.ts.map +1 -0
- package/dist/sandbox/command.js +60 -0
- package/dist/sandbox/command.js.map +1 -0
- package/dist/sandbox/docker/image.d.ts +12 -0
- package/dist/sandbox/docker/image.d.ts.map +1 -0
- package/dist/sandbox/docker/image.js +52 -0
- package/dist/sandbox/docker/image.js.map +1 -0
- package/dist/sandbox/docker/index.d.ts +14 -1
- package/dist/sandbox/docker/index.d.ts.map +1 -1
- package/dist/sandbox/docker/index.js +211 -24
- package/dist/sandbox/docker/index.js.map +1 -1
- package/dist/sandbox/e2b/image.d.ts +13 -0
- package/dist/sandbox/e2b/image.d.ts.map +1 -0
- package/dist/sandbox/e2b/image.js +57 -0
- package/dist/sandbox/e2b/image.js.map +1 -0
- package/dist/sandbox/e2b/index.d.ts +3 -1
- package/dist/sandbox/e2b/index.d.ts.map +1 -1
- package/dist/sandbox/e2b/index.js +100 -0
- package/dist/sandbox/e2b/index.js.map +1 -1
- package/dist/sandbox/heyo/exec.d.ts +2 -0
- package/dist/sandbox/heyo/exec.d.ts.map +1 -1
- package/dist/sandbox/heyo/exec.js +11 -0
- package/dist/sandbox/heyo/exec.js.map +1 -1
- package/dist/sandbox/heyo/image.d.ts +15 -0
- package/dist/sandbox/heyo/image.d.ts.map +1 -0
- package/dist/sandbox/heyo/image.js +74 -0
- package/dist/sandbox/heyo/image.js.map +1 -0
- package/dist/sandbox/heyo/index.d.ts +21 -3
- package/dist/sandbox/heyo/index.d.ts.map +1 -1
- package/dist/sandbox/heyo/index.js +190 -16
- package/dist/sandbox/heyo/index.js.map +1 -1
- package/dist/sandbox/image.d.ts +62 -0
- package/dist/sandbox/image.d.ts.map +1 -0
- package/dist/sandbox/image.js +23 -0
- package/dist/sandbox/image.js.map +1 -0
- package/dist/sandbox/index.d.ts +1 -0
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +1 -0
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/local/index.d.ts +3 -1
- package/dist/sandbox/local/index.d.ts.map +1 -1
- package/dist/sandbox/local/index.js +31 -0
- package/dist/sandbox/local/index.js.map +1 -1
- package/dist/sandbox/process.d.ts +55 -0
- package/dist/sandbox/process.d.ts.map +1 -0
- package/dist/sandbox/process.js +165 -0
- package/dist/sandbox/process.js.map +1 -0
- package/dist/sandbox/provider.d.ts +12 -0
- package/dist/sandbox/provider.d.ts.map +1 -1
- package/dist/sandbox/types.d.ts +46 -3
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +108 -3
- package/dist/testing.js.map +1 -1
- package/dist/tools/finish.d.ts +14 -0
- package/dist/tools/finish.d.ts.map +1 -1
- package/dist/tools/finish.js +13 -3
- package/dist/tools/finish.js.map +1 -1
- package/dist/tools/index.d.ts +3 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/truncate.d.ts +7 -0
- package/dist/tools/truncate.d.ts.map +1 -1
- package/dist/tools/truncate.js +12 -0
- package/dist/tools/truncate.js.map +1 -1
- package/dist/tools/types.d.ts +57 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/package.json +8 -1
package/README.md
CHANGED
|
@@ -77,11 +77,47 @@ No sandbox is needed for this chat example. Model calls may incur cost.
|
|
|
77
77
|
pass its returned `compaction` settings to the engine as shown. Catalog lookup is
|
|
78
78
|
best-effort; configure overrides and fallbacks for endpoints without this metadata.
|
|
79
79
|
|
|
80
|
+
## Task verification
|
|
81
|
+
|
|
82
|
+
For tasks that need evidence before completion, enable the opt-in verifier:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
const result = await runAgent(
|
|
86
|
+
{ task: "Investigate where auth is refreshed" },
|
|
87
|
+
{
|
|
88
|
+
llm,
|
|
89
|
+
sandbox,
|
|
90
|
+
thread: { store, id: threadId },
|
|
91
|
+
verifier: true,
|
|
92
|
+
},
|
|
93
|
+
);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The SDK owns the ledger, intent routing, evidence capture, and phase/finish
|
|
97
|
+
checks. The consumer supplies only the normal `ThreadStore` (the ledger is an
|
|
98
|
+
optional field on `StoredThread`) and the model. Greetings and other chat turns
|
|
99
|
+
create no ledger and make no verifier call. A separate cheap verifier model is
|
|
100
|
+
optional:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
verifier: {
|
|
104
|
+
llm: cheapLlm,
|
|
105
|
+
gates: ["phase", "finish"],
|
|
106
|
+
allowWaived: true,
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`finish` is rejected while a required ledger item is open or lacks linked
|
|
111
|
+
evidence; the agent loops with the missing-evidence feedback. Compiler and
|
|
112
|
+
verifier token usage is counted against the run budget.
|
|
113
|
+
|
|
80
114
|
## One sandbox interface
|
|
81
115
|
|
|
82
116
|
**Configure the provider once. Keep the agent-facing machine interface the same.**
|
|
83
117
|
The same layer works with the built-in coding tools, custom agents, or direct
|
|
84
|
-
`sandbox.exec()` calls without an agent.
|
|
118
|
+
`sandbox.exec()` calls without an agent. For long-lived consumers — LSPs, REPLs,
|
|
119
|
+
dev servers, watchers — `sandbox.openProcess()` is the optional persistent
|
|
120
|
+
stdin/stdout primitive; check `provider.capabilities.processStream` first.
|
|
85
121
|
|
|
86
122
|
| Provider | Import | Boot configuration |
|
|
87
123
|
| --- | --- | --- |
|
|
@@ -193,16 +229,26 @@ try {
|
|
|
193
229
|
}
|
|
194
230
|
```
|
|
195
231
|
|
|
196
|
-
Provider boot settings and optional capabilities differ.
|
|
197
|
-
|
|
232
|
+
Provider boot settings and optional capabilities differ. Per-sandbox
|
|
233
|
+
`spec.image` is supported by Docker and E2B (as a template name), and by Heyo
|
|
234
|
+
for artifact refs; Local rejects it. Providers that can build/publish expose
|
|
235
|
+
`imagePublisher`, also available as `anchor image publish`.
|
|
236
|
+
Retention needs a cleanup policy; remote machines and model calls can cost money. Private HTTPS repositories
|
|
198
237
|
can use `spec.git.token`, a caller-supplied credential callback.
|
|
199
238
|
|
|
200
239
|
The latest Docker adapter also supports `spec.egress: "none"`: it disconnects
|
|
201
240
|
container networks after `start()` setup. Other adapters reject that setting.
|
|
202
241
|
This is not a claim that all providers offer equivalent isolation.
|
|
203
242
|
|
|
243
|
+
Providers that can build images expose the common `imagePublisher` contract and
|
|
244
|
+
the `anchor image publish` command, so Docker, E2B, and Heyo each use their own
|
|
245
|
+
native registry while the caller keeps one shape. `anchor image publish --help`
|
|
246
|
+
shows the flags. Per-provider instructions are in
|
|
247
|
+
[docs/sandbox-image-publishing.md](docs/sandbox-image-publishing.md).
|
|
248
|
+
|
|
204
249
|
**[Configuration examples](https://anchor-sdk.dev/docs.html#machine)** ·
|
|
205
|
-
**[Provider contract and image guide](https://github.com/hrithikkoduri/anchor-ai-sdk/blob/main/src/sandbox/README.md)**
|
|
250
|
+
**[Provider contract and image guide](https://github.com/hrithikkoduri/anchor-ai-sdk/blob/main/src/sandbox/README.md)** ·
|
|
251
|
+
**[Optional LSP tools](docs/lsp.md)**
|
|
206
252
|
|
|
207
253
|
## Make the agent yours
|
|
208
254
|
|
|
@@ -278,11 +324,13 @@ Validate inputs and enforce permissions in your implementation.
|
|
|
278
324
|
| Capability | Your controls |
|
|
279
325
|
| --- | --- |
|
|
280
326
|
| **Budgets and correction** | Step/token/known-dollar budgets, repeated-call detection, silent-tool and visible-verbosity nudges, prose checkpoints, and per-call output requests. |
|
|
327
|
+
| **Reasoning budget** | Per-run `reasoningEffort` (`minimal`–`xhigh`) or an agent-bundle default, sent in the provider's native shape (`reasoning.effort` on OpenRouter, `reasoning_effort` on OpenAI). |
|
|
281
328
|
| **Context and memory** | Catalog-derived or explicit compaction, supplied thread stores, agent-authored notes, and best-effort output spill. |
|
|
282
329
|
| **Revival and resume** | Opt-in budget warnings, `request_revival`, `planRevival`, and `ThreadBudget`. Your app persists state and decides whether to fund or enqueue another run. |
|
|
283
330
|
| **Snapshots and lifecycle** | Git-backed or custom snapshot hooks, optional push, phase-boundary pauses, heartbeats, and cancellation. |
|
|
284
331
|
| **Streaming and traces** | Raw `onEvent` updates; sequenced, pattern-redacted `traceSinks`; NDJSON files, custom sinks, live projection, and replay. |
|
|
285
332
|
| **Execution evidence** | Tool names/status/metadata plus recorded test-command outcomes and optional post-run Git freshness checks. Your app defines verification and release gates. |
|
|
333
|
+
| **External effects** | Declared effects, a write-ahead operation journal, stable operation ids, reconciliation on resume, and a stop on unknown outcomes. |
|
|
286
334
|
|
|
287
335
|
<details>
|
|
288
336
|
<summary><strong>Example: limits, nudges, compaction, and a recorded trace</strong></summary>
|
|
@@ -331,6 +379,45 @@ are not redacted. Use distinct trace files/IDs per run in your application.
|
|
|
331
379
|
> `latestEvidenceForTree` can compare it with the current tree, but does not prove
|
|
332
380
|
> an immutable tested snapshot, require a full suite, or inspect assertions.
|
|
333
381
|
|
|
382
|
+
## Recovering external writes
|
|
383
|
+
|
|
384
|
+
A crash between "the target accepted the write" and "the thread saved the
|
|
385
|
+
result" must not become a duplicate write. A tool that changes something outside
|
|
386
|
+
the workspace declares an effect; the engine then records the intent before the
|
|
387
|
+
call and settles it after:
|
|
388
|
+
|
|
389
|
+
```js
|
|
390
|
+
const createIssue = defineTool({ name: "create_issue", /* ... */ }, async (input, ctx) => {
|
|
391
|
+
const issue = await github.createIssue(input, {
|
|
392
|
+
idempotencyKey: ctx.operationId, // stable across retries
|
|
393
|
+
});
|
|
394
|
+
await ctx.acknowledge?.({ issue: issue.number });
|
|
395
|
+
return { ok: true, content: `Created #${issue.number}` };
|
|
396
|
+
}, {
|
|
397
|
+
effect: {
|
|
398
|
+
async reconcile({ operationId }) {
|
|
399
|
+
const found = await github.findByKey(operationId);
|
|
400
|
+
return found
|
|
401
|
+
? { status: "applied", result: { ok: true, content: found.url } }
|
|
402
|
+
: { status: "unknown" };
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
await runAgent(task, {
|
|
408
|
+
llm, agent, sandbox,
|
|
409
|
+
operations: { store }, // a durable table in production
|
|
410
|
+
});
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
On resume, a pending operation is reconciled, never replayed. An unknowable
|
|
414
|
+
outcome ends the run with `reason: "recovery_required"` and
|
|
415
|
+
`AgentResult.pendingOperations`. `MemoryOperationStore` is for tests; production
|
|
416
|
+
needs a durable table with a unique `operation_id`. The target's participation
|
|
417
|
+
(an idempotency key or a status lookup) is what turns this into
|
|
418
|
+
effectively-once; without it, the harness surfaces the ambiguity instead of
|
|
419
|
+
guessing.
|
|
420
|
+
|
|
334
421
|
## Test the machine contract
|
|
335
422
|
|
|
336
423
|
`runSandboxConformance(provider)` from `anchor-ai-sdk/testing` exercises the
|
|
@@ -16,6 +16,7 @@ export { codingPhases } from "./phases.js";
|
|
|
16
16
|
export declare function createCodingAgent(opts?: {
|
|
17
17
|
testCommand?: string;
|
|
18
18
|
maxOutputTokens?: number | false;
|
|
19
|
+
reasoningEffort?: Agent["reasoningEffort"];
|
|
19
20
|
}): Agent;
|
|
20
21
|
/** The zero-config coding agent — detection instead of a configured suite. */
|
|
21
22
|
export declare const codingAgent: Agent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/coding/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,GAAE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/coding/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,GAAE;IACJ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,eAAe,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CACvC,GACL,KAAK,CAYP;AAED,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,KAA2B,CAAC"}
|
|
@@ -21,6 +21,9 @@ export function createCodingAgent(opts = {}) {
|
|
|
21
21
|
...(opts.maxOutputTokens !== undefined
|
|
22
22
|
? { maxOutputTokens: opts.maxOutputTokens }
|
|
23
23
|
: {}),
|
|
24
|
+
...(opts.reasoningEffort !== undefined
|
|
25
|
+
? { reasoningEffort: opts.reasoningEffort }
|
|
26
|
+
: {}),
|
|
24
27
|
};
|
|
25
28
|
}
|
|
26
29
|
/** The zero-config coding agent — detection instead of a configured suite. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/coding/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAe,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/coding/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAe,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAI,GAIA,EAAE;IAEN,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,cAAc;QACxB,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAU,iBAAiB,EAAE,CAAC"}
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
package/dist/agents/index.js
CHANGED
package/dist/agents/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Agent } from "../types.js";
|
|
2
|
+
export { terminalStrategy } from "./strategy.js";
|
|
3
|
+
export { terminalPhases } from "./phases.js";
|
|
4
|
+
export { buildTerminalPrompt } from "./prompt.js";
|
|
5
|
+
export declare function createTerminalAgent(opts?: {
|
|
6
|
+
maxOutputTokens?: number | false;
|
|
7
|
+
reasoningEffort?: Agent["reasoningEffort"];
|
|
8
|
+
}): Agent;
|
|
9
|
+
export declare const terminalAgent: Agent;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/terminal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,mBAAmB,CAAC,IAAI,GAAE;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,eAAe,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CACvC,GAAG,KAAK,CAYb;AAED,eAAO,MAAM,aAAa,EAAE,KAA6B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createCodingTools } from "../coding/tools.js";
|
|
2
|
+
import { terminalStrategy } from "./strategy.js";
|
|
3
|
+
export { terminalStrategy } from "./strategy.js";
|
|
4
|
+
export { terminalPhases } from "./phases.js";
|
|
5
|
+
export { buildTerminalPrompt } from "./prompt.js";
|
|
6
|
+
export function createTerminalAgent(opts = {}) {
|
|
7
|
+
return {
|
|
8
|
+
name: "terminal",
|
|
9
|
+
strategy: terminalStrategy,
|
|
10
|
+
tools: createCodingTools(),
|
|
11
|
+
...(opts.maxOutputTokens !== undefined
|
|
12
|
+
? { maxOutputTokens: opts.maxOutputTokens }
|
|
13
|
+
: {}),
|
|
14
|
+
...(opts.reasoningEffort !== undefined
|
|
15
|
+
? { reasoningEffort: opts.reasoningEffort }
|
|
16
|
+
: {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export const terminalAgent = createTerminalAgent();
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/terminal/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAGpC,EAAE;IACJ,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,iBAAiB,EAAE;QAC1B,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAU,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../../src/agents/terminal/phases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,aAAa,EA+BzC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Terminal work: inspect the machine, act, prove, report. No repo assumption. */
|
|
2
|
+
export const terminalPhases = [
|
|
3
|
+
{
|
|
4
|
+
id: "inspect",
|
|
5
|
+
goal: "Establish the machine state, task artifacts, and available tooling.",
|
|
6
|
+
guidance: "Use the shell. Check the working directory, installed runtimes, task files, and any verifier/tests. Do not assume a git repository, /testbed, or a project test command.",
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
id: "plan",
|
|
10
|
+
goal: "Choose the shortest reliable path to the task's own success condition.",
|
|
11
|
+
guidance: "Name the concrete commands, installs, edits, and checks. Prefer the task's own verifier over generic repo tests.",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: "act",
|
|
15
|
+
goal: "Execute the task with terminal-native steps.",
|
|
16
|
+
guidance: "Run commands, install missing tools, modify files, and adjust when output changes the picture. Keep the workspace clean of scratch artifacts.",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "verify",
|
|
20
|
+
goal: "Run the task's verifier and inspect its actual output.",
|
|
21
|
+
guidance: "The task's test/verifier is the source of truth. Re-run after the final change. Report missing or flaky checks honestly.",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "respond",
|
|
25
|
+
goal: "Deliver the outcome with the commands and evidence that prove it.",
|
|
26
|
+
guidance: "State what changed and what was actually verified. Do not claim a pass you did not observe.",
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=phases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../src/agents/terminal/phases.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,qEAAqE;QAC3E,QAAQ,EACN,0KAA0K;KAC7K;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,wEAAwE;QAC9E,QAAQ,EACN,kHAAkH;KACrH;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,8CAA8C;QACpD,QAAQ,EACN,+IAA+I;KAClJ;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,wDAAwD;QAC9D,QAAQ,EACN,0HAA0H;KAC7H;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,mEAAmE;QACzE,QAAQ,EACN,6FAA6F;KAChG;CACF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { StrategyPhase } from "../../engine/strategy.js";
|
|
2
|
+
export interface TerminalPromptOptions {
|
|
3
|
+
phases?: StrategyPhase[];
|
|
4
|
+
context?: string;
|
|
5
|
+
summary?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Terminal-native prompt. Deliberately does not tell the model to inspect a
|
|
9
|
+
* git diff, run a repository test suite, or trust a provisioned conda env.
|
|
10
|
+
* Terminal-Bench tasks are stateful shell problems with their own verifier.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildTerminalPrompt(options?: TerminalPromptOptions): string;
|
|
13
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/terminal/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA4B/E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { terminalPhases } from "./phases.js";
|
|
2
|
+
/**
|
|
3
|
+
* Terminal-native prompt. Deliberately does not tell the model to inspect a
|
|
4
|
+
* git diff, run a repository test suite, or trust a provisioned conda env.
|
|
5
|
+
* Terminal-Bench tasks are stateful shell problems with their own verifier.
|
|
6
|
+
*/
|
|
7
|
+
export function buildTerminalPrompt(options = {}) {
|
|
8
|
+
const phases = options.phases ?? terminalPhases;
|
|
9
|
+
return [
|
|
10
|
+
"# Character",
|
|
11
|
+
"You are a capable terminal operator. You work directly on the machine: inspect it, install what is missing, change what is needed, and prove the result with the task's own verifier.",
|
|
12
|
+
"# Operating rules",
|
|
13
|
+
[
|
|
14
|
+
"- The shell is your primary tool. Use it to inspect the real state; do not assume a repository layout, a git diff, or a pre-provisioned Python environment.",
|
|
15
|
+
"- The task instruction and its verifier are the contract. If the task supplies tests, run them and read the actual output.",
|
|
16
|
+
"- Install missing tools only when needed, with the system package manager or the language's package manager.",
|
|
17
|
+
"- Keep the final state focused: no unrelated edits, no scratch files left behind unless the task requires them.",
|
|
18
|
+
"- Never claim a command or test passed unless you observed its exit code/output. Report flaky or unavailable checks honestly.",
|
|
19
|
+
].join("\n"),
|
|
20
|
+
"# Approach phases",
|
|
21
|
+
[
|
|
22
|
+
"These describe an approach, not a prerequisite itinerary. Skip or revisit phases as the actual environment requires.",
|
|
23
|
+
...phases.map((phase) => `- ${phase.id}: ${phase.goal}${phase.guidance ? ` ${phase.guidance}` : ""}`),
|
|
24
|
+
].join("\n"),
|
|
25
|
+
options.context ? `# Environment observations\n${options.context}` : "",
|
|
26
|
+
options.summary
|
|
27
|
+
? `# Earlier thread context (may describe obsolete plans)\n${options.summary}`
|
|
28
|
+
: "",
|
|
29
|
+
]
|
|
30
|
+
.filter((part) => part.trim())
|
|
31
|
+
.join("\n\n");
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/agents/terminal/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAA0B,EAAE;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,OAAO;QACL,aAAa;QACb,uLAAuL;QACvL,mBAAmB;QACnB;YACE,6JAA6J;YAC7J,4HAA4H;YAC5H,8GAA8G;YAC9G,iHAAiH;YACjH,+HAA+H;SAChI,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,mBAAmB;QACnB;YACE,sHAAsH;YACtH,GAAG,MAAM,CAAC,GAAG,CACX,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9E;SACF,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;QACvE,OAAO,CAAC,OAAO;YACb,CAAC,CAAC,2DAA2D,OAAO,CAAC,OAAO,EAAE;YAC9E,CAAC,CAAC,EAAE;KACP;SACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/agents/terminal/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,eAAO,MAAM,gBAAgB,EAAE,aAQ9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { terminalPhases } from "./phases.js";
|
|
2
|
+
import { buildTerminalPrompt } from "./prompt.js";
|
|
3
|
+
export const terminalStrategy = {
|
|
4
|
+
name: "terminal",
|
|
5
|
+
phases: terminalPhases,
|
|
6
|
+
requiresSandbox: true,
|
|
7
|
+
requiredTools: ["bash", "read_file", "edit_file"],
|
|
8
|
+
systemPrompt({ context, summary }) {
|
|
9
|
+
return buildTerminalPrompt({ context, summary });
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/agents/terminal/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,cAAc;IACtB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC;IACjD,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;QAC/B,OAAO,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
|
package/dist/agents/types.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* per-field. Custom agents are just objects built from the same primitives.
|
|
12
12
|
*/
|
|
13
13
|
import type { AgentStrategy } from "../engine/strategy.js";
|
|
14
|
+
import type { ReasoningEffort } from "../llm/types.js";
|
|
14
15
|
import type { Tool } from "../tools/types.js";
|
|
15
16
|
export interface Agent {
|
|
16
17
|
/** Short display name ("coding", "chat") — logs, dashboards, traces. */
|
|
@@ -24,5 +25,10 @@ export interface Agent {
|
|
|
24
25
|
* An explicit engine option wins; absent, the engine default applies.
|
|
25
26
|
*/
|
|
26
27
|
maxOutputTokens?: number | false;
|
|
28
|
+
/**
|
|
29
|
+
* Reasoning budget this bundle suggests. An explicit
|
|
30
|
+
* `EngineOptions.reasoningEffort` wins; absent, the provider default applies.
|
|
31
|
+
*/
|
|
32
|
+
reasoningEffort?: ReasoningEffort;
|
|
27
33
|
}
|
|
28
34
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,KAAK;IACpB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,QAAQ,EAAE,aAAa,CAAC;IACxB,6EAA6E;IAC7E,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,KAAK;IACpB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,QAAQ,EAAE,aAAa,CAAC;IACxB,6EAA6E;IAC7E,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const PUBLISHERS = ["docker", "e2b", "heyo"];
|
|
3
|
+
const PROVIDERS = ["docker", "e2b", "heyo", "daytona", "local"];
|
|
4
|
+
function usage() {
|
|
5
|
+
return `usage:
|
|
6
|
+
anchor image publish --provider <docker|e2b|heyo> --name <tag>
|
|
7
|
+
(--dockerfile <path> [--context <dir>] | --from-image <image> | --rootfs <path>)
|
|
8
|
+
[--build-arg KEY=VALUE]... [--no-push] [--public] [--json]
|
|
9
|
+
|
|
10
|
+
anchor <provider> image publish ... # provider-first alias
|
|
11
|
+
|
|
12
|
+
Providers:
|
|
13
|
+
docker build/tag and push a container image
|
|
14
|
+
e2b build/publish an E2B template (from a Dockerfile or image)
|
|
15
|
+
heyo push a rootfs or Dockerfile manifest with heyctl
|
|
16
|
+
|
|
17
|
+
Credentials:
|
|
18
|
+
Docker uses the Docker CLI's existing login
|
|
19
|
+
E2B E2B_API_KEY (and optional E2B_DOMAIN)
|
|
20
|
+
Heyo heyctl's saved login (optional HEYCTL_BIN, HEYO_IMAGE_STORE)
|
|
21
|
+
`;
|
|
22
|
+
}
|
|
23
|
+
function isProvider(value) {
|
|
24
|
+
return !!value && PROVIDERS.includes(value);
|
|
25
|
+
}
|
|
26
|
+
function parse(argv) {
|
|
27
|
+
const out = {
|
|
28
|
+
buildArgs: {},
|
|
29
|
+
push: true,
|
|
30
|
+
public: false,
|
|
31
|
+
json: false,
|
|
32
|
+
help: false,
|
|
33
|
+
};
|
|
34
|
+
let args = [...argv];
|
|
35
|
+
if (args[0] === "image" && args[1] === "publish") {
|
|
36
|
+
args = args.slice(2);
|
|
37
|
+
}
|
|
38
|
+
else if (isProvider(args[0]) && args[1] === "image" && args[2] === "publish") {
|
|
39
|
+
out.provider = args[0];
|
|
40
|
+
args = args.slice(3);
|
|
41
|
+
}
|
|
42
|
+
else if (isProvider(args[0]) && args[1] === "publish" && args[2] === "image") {
|
|
43
|
+
out.provider = args[0];
|
|
44
|
+
args = args.slice(3);
|
|
45
|
+
}
|
|
46
|
+
else if (args[0] === "--help" || args[0] === "-h" || args[0] === "help") {
|
|
47
|
+
out.help = true;
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
throw new Error(`unknown command\n\n${usage()}`);
|
|
52
|
+
}
|
|
53
|
+
let fromImage;
|
|
54
|
+
let rootfs;
|
|
55
|
+
let dockerfile;
|
|
56
|
+
let context;
|
|
57
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
58
|
+
const arg = args[i];
|
|
59
|
+
const value = () => {
|
|
60
|
+
const v = args[i + 1];
|
|
61
|
+
if (!v)
|
|
62
|
+
throw new Error(`missing value for ${arg}`);
|
|
63
|
+
i += 1;
|
|
64
|
+
return v;
|
|
65
|
+
};
|
|
66
|
+
if (arg === "--help" || arg === "-h")
|
|
67
|
+
out.help = true;
|
|
68
|
+
else if (arg === "--json")
|
|
69
|
+
out.json = true;
|
|
70
|
+
else if (arg === "--no-push")
|
|
71
|
+
out.push = false;
|
|
72
|
+
else if (arg === "--public")
|
|
73
|
+
out.public = true;
|
|
74
|
+
else if (arg === "--provider")
|
|
75
|
+
out.provider = value();
|
|
76
|
+
else if (arg === "--name")
|
|
77
|
+
out.name = value();
|
|
78
|
+
else if (arg === "--from-image")
|
|
79
|
+
fromImage = value();
|
|
80
|
+
else if (arg === "--rootfs")
|
|
81
|
+
rootfs = value();
|
|
82
|
+
else if (arg === "--dockerfile")
|
|
83
|
+
dockerfile = value();
|
|
84
|
+
else if (arg === "--context")
|
|
85
|
+
context = value();
|
|
86
|
+
else if (arg === "--build-arg") {
|
|
87
|
+
const pair = value();
|
|
88
|
+
const equals = pair.indexOf("=");
|
|
89
|
+
if (equals <= 0)
|
|
90
|
+
throw new Error(`--build-arg needs KEY=VALUE, got ${pair}`);
|
|
91
|
+
out.buildArgs[pair.slice(0, equals)] = pair.slice(equals + 1);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
throw new Error(`unknown option ${arg}\n\n${usage()}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (out.help)
|
|
98
|
+
return out;
|
|
99
|
+
const sources = [
|
|
100
|
+
fromImage ? { kind: "image", image: fromImage } : undefined,
|
|
101
|
+
rootfs ? { kind: "rootfs", path: rootfs } : undefined,
|
|
102
|
+
dockerfile ? { kind: "dockerfile", path: dockerfile } : undefined,
|
|
103
|
+
].filter((source) => source !== undefined);
|
|
104
|
+
if (sources.length !== 1) {
|
|
105
|
+
throw new Error(`choose exactly one of --dockerfile, --from-image, or --rootfs\n\n${usage()}`);
|
|
106
|
+
}
|
|
107
|
+
if (context && !dockerfile) {
|
|
108
|
+
throw new Error("--context requires --dockerfile");
|
|
109
|
+
}
|
|
110
|
+
if (dockerfile)
|
|
111
|
+
out.source = { kind: "dockerfile", path: dockerfile, ...(context ? { context } : {}) };
|
|
112
|
+
else if (rootfs)
|
|
113
|
+
out.source = { kind: "rootfs", path: rootfs };
|
|
114
|
+
else
|
|
115
|
+
out.source = { kind: "image", image: fromImage };
|
|
116
|
+
return out;
|
|
117
|
+
}
|
|
118
|
+
async function loadPublisher(provider) {
|
|
119
|
+
if (provider === "docker") {
|
|
120
|
+
const { dockerImagePublisher } = await import("./sandbox/docker/image.js");
|
|
121
|
+
return dockerImagePublisher({
|
|
122
|
+
dockerBin: process.env.ANCHOR_DOCKER_BIN ?? process.env.DOCKER_BIN,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (provider === "e2b") {
|
|
126
|
+
const { e2bImagePublisher } = await import("./sandbox/e2b/image.js");
|
|
127
|
+
const cpu = process.env.E2B_CPU_COUNT;
|
|
128
|
+
const memory = process.env.E2B_MEMORY_MB;
|
|
129
|
+
return e2bImagePublisher({
|
|
130
|
+
apiKey: process.env.E2B_API_KEY,
|
|
131
|
+
domain: process.env.E2B_DOMAIN,
|
|
132
|
+
...(cpu ? { cpuCount: Number(cpu) } : {}),
|
|
133
|
+
...(memory ? { memoryMB: Number(memory) } : {}),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (provider === "heyo") {
|
|
137
|
+
const { heyoImagePublisher } = await import("./sandbox/heyo/image.js");
|
|
138
|
+
return heyoImagePublisher({
|
|
139
|
+
heyctlBin: process.env.HEYCTL_BIN,
|
|
140
|
+
imageStore: process.env.HEYO_IMAGE_STORE,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`provider "${provider}" has no image publisher (supported: ${PUBLISHERS.join(", ")})`);
|
|
144
|
+
}
|
|
145
|
+
function printResult(result) {
|
|
146
|
+
console.log(`published ${result.kind} via ${result.provider}: ${result.ref}`);
|
|
147
|
+
if (result.target === "sandbox-spec") {
|
|
148
|
+
console.log(`use at sandbox init: { image: ${JSON.stringify(result.ref)} }`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.log(`use in provider config: ${JSON.stringify(result.providerConfig, null, 2)}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function main() {
|
|
155
|
+
const parsed = parse(process.argv.slice(2));
|
|
156
|
+
if (parsed.help) {
|
|
157
|
+
process.stdout.write(usage());
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (!parsed.provider)
|
|
161
|
+
throw new Error(`--provider is required\n\n${usage()}`);
|
|
162
|
+
if (!parsed.name)
|
|
163
|
+
throw new Error(`--name is required\n\n${usage()}`);
|
|
164
|
+
if (!parsed.source) {
|
|
165
|
+
throw new Error(`one of --dockerfile, --from-image, or --rootfs is required\n\n${usage()}`);
|
|
166
|
+
}
|
|
167
|
+
const publisher = await loadPublisher(parsed.provider);
|
|
168
|
+
const request = {
|
|
169
|
+
name: parsed.name,
|
|
170
|
+
source: parsed.source,
|
|
171
|
+
buildArgs: parsed.buildArgs,
|
|
172
|
+
push: parsed.push,
|
|
173
|
+
public: parsed.public,
|
|
174
|
+
};
|
|
175
|
+
const result = await publisher.publish(request, {
|
|
176
|
+
log: (line) => process.stderr.write(line),
|
|
177
|
+
});
|
|
178
|
+
if (parsed.json)
|
|
179
|
+
console.log(JSON.stringify(result, null, 2));
|
|
180
|
+
else
|
|
181
|
+
printResult(result);
|
|
182
|
+
}
|
|
183
|
+
main().catch((error) => {
|
|
184
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
185
|
+
process.exitCode = 1;
|
|
186
|
+
});
|
|
187
|
+
export {};
|
|
188
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAmBA,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AACtD,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAczE,SAAS,KAAK;IACZ,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,CAAC,CAAC,KAAK,IAAK,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,KAAK,CAAC,IAAc;IAC3B,MAAM,GAAG,GAAW;QAClB,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACjD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/E,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC/E,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC1E,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,SAA6B,CAAC;IAClC,IAAI,MAA0B,CAAC;IAC/B,IAAI,UAA8B,CAAC;IACnC,IAAI,OAA2B,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAW,EAAE;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;aACjD,IAAI,GAAG,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;aACtC,IAAI,GAAG,KAAK,WAAW;YAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;aAC1C,IAAI,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;aAC1C,IAAI,GAAG,KAAK,YAAY;YAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;aACjD,IAAI,GAAG,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;aACzC,IAAI,GAAG,KAAK,cAAc;YAAE,SAAS,GAAG,KAAK,EAAE,CAAC;aAChD,IAAI,GAAG,KAAK,UAAU;YAAE,MAAM,GAAG,KAAK,EAAE,CAAC;aACzC,IAAI,GAAG,KAAK,cAAc;YAAE,UAAU,GAAG,KAAK,EAAE,CAAC;aACjD,IAAI,GAAG,KAAK,WAAW;YAAE,OAAO,GAAG,KAAK,EAAE,CAAC;aAC3C,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;YAC7E,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,OAAO,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACzB,MAAM,OAAO,GAAG;QACd,SAAS,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAY,CAAC,CAAC,CAAC,SAAS;QACtE,MAAM,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAY,CAAC,CAAC,CAAC,SAAS;QAChE,UAAU,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAY,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,oEAAoE,KAAK,EAAE,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,UAAU;QAAE,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;SAClG,IAAI,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;QAC1D,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAU,EAAE,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC3E,OAAO,oBAAoB,CAAC;YAC1B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;SACnE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,OAAO,iBAAiB,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACvE,OAAO,kBAAkB,CAAC;YACxB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YACjC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;SACzC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,wCAAwC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAsB;IACzC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,iEAAiE,KAAK,EAAE,EAAE,CAC3E,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,OAAO,GAAwB;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE;QAC9C,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;KAC1C,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;QACzD,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/engine/budgets.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/engine/budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,YAAY,SAAK;IACjB,gBAAgB,SAAK;IACrB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,SAAK;IACZ,UAAU,UAAQ;IAElB,YAAY,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,EAE7C;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/engine/budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAInC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,YAAY,SAAK;IACjB,gBAAgB,SAAK;IACrB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,SAAK;IACjB,OAAO,SAAK;IACZ,UAAU,UAAQ;IAElB,YAAY,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,EAE7C;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAU5B;IAED,WAAW,IAAI,MAAM,CAEpB;IAED,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAc7C;CACF"}
|
package/dist/engine/budgets.js
CHANGED
|
@@ -18,6 +18,7 @@ export class BudgetTracker {
|
|
|
18
18
|
promptTokens = 0;
|
|
19
19
|
completionTokens = 0;
|
|
20
20
|
reasoningTokens;
|
|
21
|
+
cachedTokens = 0;
|
|
21
22
|
costUsd = 0;
|
|
22
23
|
costsKnown = true;
|
|
23
24
|
constructor(limits = {}) {
|
|
@@ -28,6 +29,8 @@ export class BudgetTracker {
|
|
|
28
29
|
this.completionTokens += usage.completionTokens;
|
|
29
30
|
if (usage.reasoningTokens !== undefined)
|
|
30
31
|
this.reasoningTokens = (this.reasoningTokens ?? 0) + usage.reasoningTokens;
|
|
32
|
+
if (usage.cachedTokens !== undefined)
|
|
33
|
+
this.cachedTokens += usage.cachedTokens;
|
|
31
34
|
if (usage.costUsd !== undefined) {
|
|
32
35
|
this.costUsd += usage.costUsd;
|
|
33
36
|
}
|