@archmax-ai/harness 0.8.0 → 0.9.0
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/agent.d.ts +4 -2
- package/dist/agent.js +4 -2
- package/dist/agent.js.map +1 -1
- package/dist/assembly/compose.js +16 -3
- package/dist/assembly/compose.js.map +1 -1
- package/dist/assembly/index.d.ts +10 -0
- package/dist/assembly/index.js +35 -10
- package/dist/assembly/index.js.map +1 -1
- package/dist/authoring-skill/archmax-harness/references/backend-integration.md +9 -6
- package/dist/authoring-skill/archmax-harness/references/cases.md +3 -2
- package/dist/authoring-skill/archmax-harness/references/hook-and-test-scripts.md +47 -3
- package/dist/authoring-skill/archmax-harness/references/hooks-and-scripts.md +2 -1
- package/dist/authoring-skill/archmax-harness/references/wiring.md +1 -1
- package/dist/authoring-skill/archmax-harness/references/workflow-schema.md +29 -0
- package/dist/authoring-skill/archmax-harness/references/workflow-yaml.md +13 -3
- package/dist/cli/turn.js +1 -2
- package/dist/cli/turn.js.map +1 -1
- package/dist/core/clock.d.ts +26 -0
- package/dist/core/clock.js +64 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/deepagents.d.ts +9 -2
- package/dist/core/deepagents.js +15 -2
- package/dist/core/deepagents.js.map +1 -1
- package/dist/core/message-readers.d.ts +21 -0
- package/dist/core/message-readers.js +36 -0
- package/dist/core/message-readers.js.map +1 -1
- package/dist/core/messages.d.ts +8 -8
- package/dist/core/messages.js +11 -13
- package/dist/core/messages.js.map +1 -1
- package/dist/kernel/kernel.js +3 -2
- package/dist/kernel/kernel.js.map +1 -1
- package/dist/lifecycle/runner.d.ts +14 -0
- package/dist/lifecycle/runner.js +50 -4
- package/dist/lifecycle/runner.js.map +1 -1
- package/dist/lifecycle/tool-calls.d.ts +9 -0
- package/dist/lifecycle/tool-calls.js +57 -0
- package/dist/lifecycle/tool-calls.js.map +1 -0
- package/dist/lifecycle/transcript.d.ts +10 -6
- package/dist/lifecycle/transcript.js +15 -10
- package/dist/lifecycle/transcript.js.map +1 -1
- package/dist/machine/allow.d.ts +17 -2
- package/dist/machine/allow.js +16 -6
- package/dist/machine/allow.js.map +1 -1
- package/dist/machine/lint-spec.js +15 -0
- package/dist/machine/lint-spec.js.map +1 -1
- package/dist/machine/machine.d.ts +5 -0
- package/dist/machine/machine.js +16 -4
- package/dist/machine/machine.js.map +1 -1
- package/dist/machine/spec-schema.d.ts +9 -6
- package/dist/machine/spec-schema.js +48 -0
- package/dist/machine/spec-schema.js.map +1 -1
- package/dist/machine/tool-names.d.ts +6 -0
- package/dist/machine/tool-names.js +6 -0
- package/dist/machine/tool-names.js.map +1 -1
- package/dist/machine/tool-paths.d.ts +6 -0
- package/dist/machine/tool-paths.js +10 -0
- package/dist/machine/tool-paths.js.map +1 -1
- package/dist/machine/types.d.ts +9 -1
- package/dist/machine/types.js +2 -0
- package/dist/machine/types.js.map +1 -1
- package/dist/machine/variables.d.ts +2 -0
- package/dist/machine/variables.js.map +1 -1
- package/dist/public/sandbox.d.ts +35 -3
- package/dist/public/sandbox.js +1 -1
- package/dist/public/sandbox.js.map +1 -1
- package/dist/public/spec.d.ts +2 -2
- package/dist/public/spec.js +1 -1
- package/dist/public/spec.js.map +1 -1
- package/dist/sandbox/executor.js +10 -0
- package/dist/sandbox/executor.js.map +1 -1
- package/dist/sessions/operations.js +4 -5
- package/dist/sessions/operations.js.map +1 -1
- package/dist/sessions/resume.d.ts +10 -5
- package/dist/sessions/resume.js +11 -8
- package/dist/sessions/resume.js.map +1 -1
- package/dist/sessions/scope.d.ts +10 -0
- package/dist/sessions/scope.js +17 -0
- package/dist/sessions/scope.js.map +1 -1
- package/dist/testing/case-document.d.ts +2 -0
- package/dist/testing/case-document.js.map +1 -1
- package/dist/testing/case-schema.d.ts +1 -1
- package/dist/testing/case-schema.js +17 -1
- package/dist/testing/case-schema.js.map +1 -1
- package/dist/testing/driver.d.ts +4 -0
- package/dist/testing/driver.js +19 -3
- package/dist/testing/driver.js.map +1 -1
- package/dist/testing/grade.js +3 -3
- package/dist/testing/grade.js.map +1 -1
- package/dist/testing/interpreter.js +1 -0
- package/dist/testing/interpreter.js.map +1 -1
- package/dist/workflow/checkpointer.d.ts +7 -0
- package/dist/workflow/checkpointer.js +28 -0
- package/dist/workflow/checkpointer.js.map +1 -1
- package/dist/workflow/control-tools.js +26 -2
- package/dist/workflow/control-tools.js.map +1 -1
- package/dist/workflow/governance.d.ts +3 -1
- package/dist/workflow/governance.js +27 -6
- package/dist/workflow/governance.js.map +1 -1
- package/dist/workflow/middleware.js +22 -4
- package/dist/workflow/middleware.js.map +1 -1
- package/dist/workflow/on-error.js +2 -0
- package/dist/workflow/on-error.js.map +1 -1
- package/dist/workflow/parks.js +2 -0
- package/dist/workflow/parks.js.map +1 -1
- package/dist/workflow/state.d.ts +41 -0
- package/dist/workflow/state.js +33 -4
- package/dist/workflow/state.js.map +1 -1
- package/dist/workflow/sub-workflow.js +7 -3
- package/dist/workflow/sub-workflow.js.map +1 -1
- package/dist/workflow/tool-service.d.ts +1 -1
- package/dist/workflow/tool-service.js +1 -1
- package/dist/workflow/tool-service.js.map +1 -1
- package/dist/workflow/turn-boundary.js +8 -0
- package/dist/workflow/turn-boundary.js.map +1 -1
- package/dist/workflow/turn-runner.js +36 -7
- package/dist/workflow/turn-runner.js.map +1 -1
- package/dist/workflow/visits.d.ts +21 -0
- package/dist/workflow/visits.js +45 -0
- package/dist/workflow/visits.js.map +1 -0
- package/package.json +1 -1
- package/skills/archmax-harness/references/backend-integration.md +9 -6
- package/skills/archmax-harness/references/cases.md +3 -2
- package/skills/archmax-harness/references/hook-and-test-scripts.md +47 -3
- package/skills/archmax-harness/references/hooks-and-scripts.md +2 -1
- package/skills/archmax-harness/references/wiring.md +1 -1
- package/skills/archmax-harness/references/workflow-schema.md +29 -0
- package/skills/archmax-harness/references/workflow-yaml.md +13 -3
|
@@ -115,6 +115,17 @@ runtime?:
|
|
|
115
115
|
engine?: string # "archmax-harness"
|
|
116
116
|
version?: string | number # target contract — use "2"
|
|
117
117
|
|
|
118
|
+
budget?:
|
|
119
|
+
maxModelCalls?: number # default 50 — model calls ONE TURN may make across EVERY
|
|
120
|
+
# state (a turn = one message, decision, reply or delivery;
|
|
121
|
+
# each counts from zero). A state's maxTurns restarts on
|
|
122
|
+
# every entry, so only this ends an agent cycling between
|
|
123
|
+
# states. Exhaustion routes once through the current
|
|
124
|
+
# state's on_error, else the turn ends rejected; the agent
|
|
125
|
+
# is warned once a fifth is left. The step limit follows
|
|
126
|
+
# it. RAISE it for turns that legitimately run long (a long
|
|
127
|
+
# state chain, a self-driven review cycle).
|
|
128
|
+
|
|
118
129
|
settings?:
|
|
119
130
|
model?: string # MODEL ID ONLY — the id every state of this workflow runs
|
|
120
131
|
# on, over the endpoint/credentials the assembly already
|
|
@@ -265,6 +276,18 @@ states:
|
|
|
265
276
|
# reference GUARANTEED rather than dependent on agent
|
|
266
277
|
# behavior. Name here anything a downstream guard
|
|
267
278
|
# reads.
|
|
279
|
+
locks?: [string] # RUN VARIABLES this state OWNS: only it may write them,
|
|
280
|
+
# on any visit, before or after they are set; a write
|
|
281
|
+
# from another state is refused naming the owner. To
|
|
282
|
+
# change one (the person meant another order), the
|
|
283
|
+
# session goes BACK to the owner, whose rules apply
|
|
284
|
+
# again, and later guards re-read it — so give the
|
|
285
|
+
# owner an edge back from the states that use it. Any
|
|
286
|
+
# variable, guarded or not. One owner per variable;
|
|
287
|
+
# never `trigger`/`title`; not on a human state.
|
|
288
|
+
# `lock: true` is refused for an owned variable, and a
|
|
289
|
+
# host-supplied value with the same name stays final.
|
|
290
|
+
# Pair with `requires` to make the owner set it.
|
|
268
291
|
title?: string # HUMAN-READABLE label. Presentational only: carried
|
|
269
292
|
# in a human state's pending-decision record and shown
|
|
270
293
|
# in host surfaces. REACHES NO MODEL CALL. Never a
|
|
@@ -1297,6 +1320,12 @@ states:
|
|
|
1297
1320
|
escalation: { instructions: "Explain the failure and hand off." } # terminal
|
|
1298
1321
|
```
|
|
1299
1322
|
|
|
1323
|
+
The workflow's root `budget: { maxModelCalls }` (default 50) bounds a whole
|
|
1324
|
+
turn across states, beside each state's own `maxTurns`; its exhaustion routes the
|
|
1325
|
+
same way. A turn that throws (model failure, cancellation, the step limit) ends
|
|
1326
|
+
the session `failed` with exit code `turn-error`, `turn-cancelled` or
|
|
1327
|
+
`recursion-limit`; the next message starts a fresh turn.
|
|
1328
|
+
|
|
1300
1329
|
Two failure classes, routed differently:
|
|
1301
1330
|
|
|
1302
1331
|
- **Recoverable rejections keep the agent in place**: an invalid edge in
|
|
@@ -23,6 +23,7 @@ tests: # case suite config (no tests.config.js exists)
|
|
|
23
23
|
maxConcurrency: 1 # only 1 accepted
|
|
24
24
|
caseTimeoutMs: 120000 # per-case wall clock, distinct from settings.timeoutMs
|
|
25
25
|
judge: {} # required for grade:; {} = env default model, or { model, modelOptions }
|
|
26
|
+
budget: { maxModelCalls: 50 } # model calls one turn may make across ALL states (default 50); raise for long turns
|
|
26
27
|
metadata: { canvas: {} } # host data, never read; accepted at root, state, rubric — leave as found
|
|
27
28
|
extensions: { hooks: [] } # host-registered hook kinds; rarely authored
|
|
28
29
|
|
|
@@ -87,6 +88,7 @@ states:
|
|
|
87
88
|
allow: [refund-policy] # adds to allow_always (bundle readable + scripts runnable, no path entries)
|
|
88
89
|
forbid: [order-data] # subtracts, even from allow_always ([] never denies)
|
|
89
90
|
requires: [case_id] # variables that must be set before this state may be left
|
|
91
|
+
locks: [case_id] # variables only this state may write (change = come back here)
|
|
90
92
|
model: claude-opus-5 # MODEL ID ONLY — this state's turns; beats settings.model
|
|
91
93
|
budget: { maxTurns: 12, timeoutMs: 60000, maxParks: 5 } # bounds the state's segment
|
|
92
94
|
on_error: closed # where a terminal failure of this segment routes
|
|
@@ -132,7 +134,10 @@ states:
|
|
|
132
134
|
- **Variables.** One flat checkpointed `name → value` store, never declared.
|
|
133
135
|
Host seeds (`--variables`, `createAgent({ variables })`, a delivery) are
|
|
134
136
|
**locked**; the agent uses `archmax_get_variables`/`archmax_set_variables`
|
|
135
|
-
(`lock: true` to freeze
|
|
137
|
+
(`lock: true` to freeze, until `archmax_reset` releases the agent's locks).
|
|
138
|
+
A value that must be decided in one place yet stay correctable belongs to a
|
|
139
|
+
state: `locks: [order_id]` lets only that state write it, so a change routes
|
|
140
|
+
back there. Reserved: `trigger` (current trigger id, always
|
|
136
141
|
locked) and `title` (the run's one-line task label, agent-owned; a
|
|
137
142
|
sub-workflow child is not asked for one). A
|
|
138
143
|
`${{name}}` / `${{a.b.-1.c}}` reference works in `tools.allow` globs
|
|
@@ -187,7 +192,8 @@ states:
|
|
|
187
192
|
bind them; `forbid_always`, safety rules and the workflow's mount grants
|
|
188
193
|
(any state's) do. Human states may not declare hooks.
|
|
189
194
|
- **Budgets and `on_error`.** `budget.maxTurns`/`timeoutMs`/`maxParks` bound
|
|
190
|
-
a state's segment
|
|
195
|
+
a state's segment; the root `budget.maxModelCalls` (default 50) bounds a whole
|
|
196
|
+
turn across states, so a cycle between states ends there. A terminal failure (hook execution error, exhausted
|
|
191
197
|
corrections, exhausted budget, exhausted parks) routes to `on_error`
|
|
192
198
|
instead of failing the run; recoverable rejections (invalid edge, veto,
|
|
193
199
|
in-budget correct) keep the agent in place. Declare `on_error` on states
|
|
@@ -277,7 +283,11 @@ Closed by default; **deny beats allow, and no narrower level widens a denial.**
|
|
|
277
283
|
state entry naming a granted tool **narrows** it there, and one naming a
|
|
278
284
|
default tool the list omits grants it there. `task` is ungrantable (error).
|
|
279
285
|
- **Entries**: bare name; `{ tool, args: { <arg>: ["glob", …] } }` (matches
|
|
280
|
-
if any glob matches; `${{var}}` allowed)
|
|
286
|
+
if any glob matches; `${{var}}` allowed). An argument the tool declares as a
|
|
287
|
+
path (else `file_path`) is canonicalized first; any other argument (a URL, an
|
|
288
|
+
address, an email) is matched **as written**, and a denial also catches its
|
|
289
|
+
path form. `""` matches only an empty value. `*` never crosses `/` (`**` does).
|
|
290
|
+
`{ tool, paths: [...] }`
|
|
281
291
|
(guards every path argument the tool declares — all must match to grant,
|
|
282
292
|
any matching denies). `"*"` as the tool is legal only in a
|
|
283
293
|
forbid list. Globs match dot-segments (`secrets/**` covers `secrets/.env`).
|
package/dist/cli/turn.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { lastAgentText } from "../core/messages.js";
|
|
2
1
|
import { formatUsage, hasUsage } from "../core/usage.js";
|
|
3
2
|
import { icons } from "./style.js";
|
|
4
3
|
import { CliError, err, out } from "./command.js";
|
|
@@ -81,7 +80,7 @@ export function printResumed(style, sessionId, verb, outcome) {
|
|
|
81
80
|
return 1;
|
|
82
81
|
}
|
|
83
82
|
err(style.green(style.bold(`${icons.check} ${verb}`)));
|
|
84
|
-
out(
|
|
83
|
+
out(outcome.reply || `Session ${sessionId} resumed (state=${outcome.workflowState ?? "?"}).`);
|
|
85
84
|
return 0;
|
|
86
85
|
}
|
|
87
86
|
export function printReply(style, sessionId, outcome) {
|
package/dist/cli/turn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../../src/cli/turn.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../../src/cli/turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A pinned clock: the instant a governed agent's prompt states as "now" in place
|
|
3
|
+
* of the real time, so a case or an evaluation reads the same date on every run.
|
|
4
|
+
* Set by the host's `clock` option or, per turn, by a case's `clock:` key, which
|
|
5
|
+
* the case driver writes into the run configuration under {@link CLOCK_CONFIG_KEY}.
|
|
6
|
+
* Only the prompt line reads it; every recorded timestamp stays real.
|
|
7
|
+
*/
|
|
8
|
+
/** The forms a pin takes, as an error message names them. */
|
|
9
|
+
export declare const CLOCK_FORMS = "an ISO 8601 date (2026-03-20) or a date-time with Z or an offset (2026-03-20T14:30:00Z)";
|
|
10
|
+
/** Where a turn's pin rides in `configurable`, beside the case's tool mocks. */
|
|
11
|
+
export declare const CLOCK_CONFIG_KEY = "__clock";
|
|
12
|
+
/**
|
|
13
|
+
* The instant `value` pins, or `undefined` for an empty string (no pin). Throws
|
|
14
|
+
* for anything else, naming the accepted forms. A date-time without a zone is
|
|
15
|
+
* refused, because JavaScript would read it in the machine's own zone and a case
|
|
16
|
+
* would render differently on each machine; so is a date or time that does not
|
|
17
|
+
* exist (`2026-02-30`, `25:00`), which `Date` would silently roll over.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseClock(value: string): Date | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* The pin a turn's run configuration carries, or `undefined`. A value that is
|
|
22
|
+
* not a string reads as unset; a string that is not a pin throws, because only a
|
|
23
|
+
* host writing the key by hand can produce one, and showing the real time
|
|
24
|
+
* instead would hide the mistake.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readClockPin(configurable: Record<string, unknown> | undefined): Date | undefined;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A pinned clock: the instant a governed agent's prompt states as "now" in place
|
|
3
|
+
* of the real time, so a case or an evaluation reads the same date on every run.
|
|
4
|
+
* Set by the host's `clock` option or, per turn, by a case's `clock:` key, which
|
|
5
|
+
* the case driver writes into the run configuration under {@link CLOCK_CONFIG_KEY}.
|
|
6
|
+
* Only the prompt line reads it; every recorded timestamp stays real.
|
|
7
|
+
*/
|
|
8
|
+
/** The forms a pin takes, as an error message names them. */
|
|
9
|
+
export const CLOCK_FORMS = "an ISO 8601 date (2026-03-20) or a date-time with Z or an offset (2026-03-20T14:30:00Z)";
|
|
10
|
+
/** Where a turn's pin rides in `configurable`, beside the case's tool mocks. */
|
|
11
|
+
export const CLOCK_CONFIG_KEY = "__clock";
|
|
12
|
+
const DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
13
|
+
const DATE_TIME = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?(Z|([+-])(\d{2}):(\d{2}))$/;
|
|
14
|
+
/**
|
|
15
|
+
* The instant `value` pins, or `undefined` for an empty string (no pin). Throws
|
|
16
|
+
* for anything else, naming the accepted forms. A date-time without a zone is
|
|
17
|
+
* refused, because JavaScript would read it in the machine's own zone and a case
|
|
18
|
+
* would render differently on each machine; so is a date or time that does not
|
|
19
|
+
* exist (`2026-02-30`, `25:00`), which `Date` would silently roll over.
|
|
20
|
+
*/
|
|
21
|
+
export function parseClock(value) {
|
|
22
|
+
if (value === "")
|
|
23
|
+
return undefined;
|
|
24
|
+
const date = DATE.exec(value);
|
|
25
|
+
const dateTime = date ? null : DATE_TIME.exec(value);
|
|
26
|
+
const m = date ?? dateTime;
|
|
27
|
+
if (!m)
|
|
28
|
+
throw new Error(`'${value}' is not ${CLOCK_FORMS}`);
|
|
29
|
+
const [y, mo, d, h, mi, s, ms] = [1, 2, 3, 4, 5, 6, 7].map((i) => Number(m[i] ?? 0));
|
|
30
|
+
const offsetMinutes = dateTime?.[9] === undefined
|
|
31
|
+
? 0
|
|
32
|
+
: (dateTime[9] === "-" ? -1 : 1) * (Number(dateTime[10]) * 60 + Number(dateTime[11]));
|
|
33
|
+
const written = new Date(Date.UTC(y, mo - 1, d, h, mi, s, ms));
|
|
34
|
+
// Date.UTC rolls an impossible field over; reading the same fields back catches it.
|
|
35
|
+
const exists = written.getUTCFullYear() === y &&
|
|
36
|
+
written.getUTCMonth() === mo - 1 &&
|
|
37
|
+
written.getUTCDate() === d &&
|
|
38
|
+
written.getUTCHours() === h &&
|
|
39
|
+
written.getUTCMinutes() === mi &&
|
|
40
|
+
written.getUTCSeconds() === s &&
|
|
41
|
+
Number(dateTime?.[11] ?? 0) < 60 &&
|
|
42
|
+
Number(dateTime?.[10] ?? 0) < 24;
|
|
43
|
+
if (!exists)
|
|
44
|
+
throw new Error(`'${value}' names a date or time that does not exist; use ${CLOCK_FORMS}`);
|
|
45
|
+
return new Date(written.getTime() - offsetMinutes * 60_000);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The pin a turn's run configuration carries, or `undefined`. A value that is
|
|
49
|
+
* not a string reads as unset; a string that is not a pin throws, because only a
|
|
50
|
+
* host writing the key by hand can produce one, and showing the real time
|
|
51
|
+
* instead would hide the mistake.
|
|
52
|
+
*/
|
|
53
|
+
export function readClockPin(configurable) {
|
|
54
|
+
const value = configurable?.[CLOCK_CONFIG_KEY];
|
|
55
|
+
if (typeof value !== "string")
|
|
56
|
+
return undefined;
|
|
57
|
+
try {
|
|
58
|
+
return parseClock(value);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw new Error(`The run configuration's '${CLOCK_CONFIG_KEY}': ${err.message}`, { cause: err });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/core/clock.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,10 +105,17 @@ export declare function asModelCallResult(result: unknown, origin: string): Mode
|
|
|
105
105
|
* The `recursionLimit` a turn runs under when the caller names none. One invoke
|
|
106
106
|
* is one whole turn across states — every hook, model call and tool batch is a
|
|
107
107
|
* super-step — so this is generous by design: the authored budgets
|
|
108
|
-
* (`budget.maxTurns`, `maxParks`) are the real bound, and
|
|
109
|
-
* run nothing else bounds.
|
|
108
|
+
* (`budget.maxModelCalls`, `maxTurns`, `maxParks`) are the real bound, and
|
|
109
|
+
* this only stops a run nothing else bounds. A governed invocation runs under
|
|
110
|
+
* {@link turnStepLimit} of its workflow's turn budget, never below this.
|
|
110
111
|
*/
|
|
111
112
|
export declare const DEFAULT_RECURSION_LIMIT = 400;
|
|
113
|
+
/**
|
|
114
|
+
* The step limit an invocation runs under when the caller names none: enough that
|
|
115
|
+
* a workflow's turn budget, and the error handler it routes to, run out first, so
|
|
116
|
+
* the governed bound ends the turn and the step limit only stops what it missed.
|
|
117
|
+
*/
|
|
118
|
+
export declare function turnStepLimit(maxModelCalls: number): number;
|
|
112
119
|
/** The input a Deep Agent graph is invoked with: messages plus any state channel. */
|
|
113
120
|
export type AgentInput = Parameters<DeepAgent["invoke"]>[0];
|
|
114
121
|
/** The settled state a Deep Agent graph resolves to. */
|
package/dist/core/deepagents.js
CHANGED
|
@@ -101,10 +101,23 @@ function describeModelResult(result) {
|
|
|
101
101
|
* The `recursionLimit` a turn runs under when the caller names none. One invoke
|
|
102
102
|
* is one whole turn across states — every hook, model call and tool batch is a
|
|
103
103
|
* super-step — so this is generous by design: the authored budgets
|
|
104
|
-
* (`budget.maxTurns`, `maxParks`) are the real bound, and
|
|
105
|
-
* run nothing else bounds.
|
|
104
|
+
* (`budget.maxModelCalls`, `maxTurns`, `maxParks`) are the real bound, and
|
|
105
|
+
* this only stops a run nothing else bounds. A governed invocation runs under
|
|
106
|
+
* {@link turnStepLimit} of its workflow's turn budget, never below this.
|
|
106
107
|
*/
|
|
107
108
|
export const DEFAULT_RECURSION_LIMIT = 400;
|
|
109
|
+
/** Graph steps one model call takes, with a step to spare (an advance cycle measures about 7). */
|
|
110
|
+
const STEPS_PER_MODEL_CALL = 8;
|
|
111
|
+
/** Model calls past the turn budget an `on_error` handler may make before the step limit stops it. */
|
|
112
|
+
const HANDLER_CALLS = 10;
|
|
113
|
+
/**
|
|
114
|
+
* The step limit an invocation runs under when the caller names none: enough that
|
|
115
|
+
* a workflow's turn budget, and the error handler it routes to, run out first, so
|
|
116
|
+
* the governed bound ends the turn and the step limit only stops what it missed.
|
|
117
|
+
*/
|
|
118
|
+
export function turnStepLimit(maxModelCalls) {
|
|
119
|
+
return Math.max(DEFAULT_RECURSION_LIMIT, (maxModelCalls + HANDLER_CALLS) * STEPS_PER_MODEL_CALL);
|
|
120
|
+
}
|
|
108
121
|
/**
|
|
109
122
|
* Narrow a compiled graph to {@link CompiledAgentGraph}. The governed and plain
|
|
110
123
|
* graphs' declared state generics differ, so neither is assignable to a shared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepagents.js","sourceRoot":"","sources":["../../src/core/deepagents.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deepagents.js","sourceRoot":"","sources":["../../src/core/deepagents.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,27 @@ export declare function isHumanMessage(message: unknown): boolean;
|
|
|
26
26
|
* answer as a person would read it.
|
|
27
27
|
*/
|
|
28
28
|
export declare function lastAgentText(messages: unknown[]): string;
|
|
29
|
+
/**
|
|
30
|
+
* Where a turn starts, recorded before it runs: the id of the transcript's last
|
|
31
|
+
* message and the transcript's length. The id outlives a rewrite of the list
|
|
32
|
+
* ahead of it (Deep Agents' tool-call patching inserts and drops tool messages
|
|
33
|
+
* but keeps every other message, id included); the length is the fallback.
|
|
34
|
+
*/
|
|
35
|
+
export interface TurnAnchor {
|
|
36
|
+
id?: string;
|
|
37
|
+
count: number;
|
|
38
|
+
}
|
|
39
|
+
/** The {@link TurnAnchor} of a transcript as it stands before a turn. */
|
|
40
|
+
export declare function turnAnchorOf(messages: unknown): TurnAnchor;
|
|
41
|
+
/** Where the messages after `anchor` begin in `messages`: after its id, else at its clamped count. */
|
|
42
|
+
export declare function anchorIndex(messages: readonly unknown[], anchor: TurnAnchor): number;
|
|
43
|
+
/**
|
|
44
|
+
* What the agent said during the turn that began at `anchor`: each assistant
|
|
45
|
+
* text, in order, joined by a blank line. A completion check's revision request
|
|
46
|
+
* (an `after` note) takes back what came before it, so a rejected draft never
|
|
47
|
+
* reaches the person; no other note does. Empty when the turn said nothing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function turnReply(messages: unknown[], anchor: TurnAnchor): string;
|
|
29
50
|
/**
|
|
30
51
|
* What the runtime wrote into a transcript, and why.
|
|
31
52
|
*
|
|
@@ -56,6 +56,42 @@ export function lastAgentText(messages) {
|
|
|
56
56
|
}
|
|
57
57
|
return "";
|
|
58
58
|
}
|
|
59
|
+
/** The {@link TurnAnchor} of a transcript as it stands before a turn. */
|
|
60
|
+
export function turnAnchorOf(messages) {
|
|
61
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
62
|
+
const id = messageIdOf(list[list.length - 1]);
|
|
63
|
+
return { ...(id ? { id } : {}), count: list.length };
|
|
64
|
+
}
|
|
65
|
+
/** Where the messages after `anchor` begin in `messages`: after its id, else at its clamped count. */
|
|
66
|
+
export function anchorIndex(messages, anchor) {
|
|
67
|
+
const at = anchor.id === undefined ? -1 : messages.findIndex((m) => messageIdOf(m) === anchor.id);
|
|
68
|
+
return at >= 0 ? at + 1 : Math.min(Math.max(0, anchor.count), messages.length);
|
|
69
|
+
}
|
|
70
|
+
function messageIdOf(message) {
|
|
71
|
+
const msg = message;
|
|
72
|
+
const id = msg?.id ?? msg?.kwargs?.id;
|
|
73
|
+
return typeof id === "string" && id !== "" ? id : undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* What the agent said during the turn that began at `anchor`: each assistant
|
|
77
|
+
* text, in order, joined by a blank line. A completion check's revision request
|
|
78
|
+
* (an `after` note) takes back what came before it, so a rejected draft never
|
|
79
|
+
* reaches the person; no other note does. Empty when the turn said nothing.
|
|
80
|
+
*/
|
|
81
|
+
export function turnReply(messages, anchor) {
|
|
82
|
+
const start = anchorIndex(messages, anchor);
|
|
83
|
+
let said = [];
|
|
84
|
+
for (const message of messages.slice(start)) {
|
|
85
|
+
if (runtimeNoteKind(message) === "after")
|
|
86
|
+
said = [];
|
|
87
|
+
if (!isAiMessage(message) || isRuntimeNote(message))
|
|
88
|
+
continue;
|
|
89
|
+
const text = contentToString(message.content).trim();
|
|
90
|
+
if (text)
|
|
91
|
+
said.push(text);
|
|
92
|
+
}
|
|
93
|
+
return said.join("\n\n");
|
|
94
|
+
}
|
|
59
95
|
/** Where the marker lives on a message: `additional_kwargs.archmax.note`. */
|
|
60
96
|
export const NOTE_KEY = "archmax";
|
|
61
97
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-readers.js","sourceRoot":"","sources":["../../src/core/message-readers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message-readers.js","sourceRoot":"","sources":["../../src/core/message-readers.ts"],"names":[],"mappings":"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"}
|
package/dist/core/messages.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HumanMessage } from "@langchain/core/messages";
|
|
2
2
|
import type { BaseMessage } from "@langchain/core/messages";
|
|
3
3
|
import { type RuntimeNoteKind } from "./message-readers.js";
|
|
4
|
-
export { contentToString, isAiMessage, isHumanMessage, isRuntimeNote, lastAgentText, lastMessageIsHuman, lastTurn, messagesSince, messageTypeOf, opensTurn, runtimeNoteKind, spokeSinceLastHumanMessage, type RuntimeNoteKind, } from "./message-readers.js";
|
|
4
|
+
export { anchorIndex, contentToString, isAiMessage, isHumanMessage, isRuntimeNote, lastAgentText, lastMessageIsHuman, lastTurn, messagesSince, messageTypeOf, opensTurn, runtimeNoteKind, spokeSinceLastHumanMessage, turnAnchorOf, turnReply, type RuntimeNoteKind, type TurnAnchor, } from "./message-readers.js";
|
|
5
5
|
/**
|
|
6
6
|
* A message the runtime wrote into a session's transcript on its own behalf, shaped
|
|
7
7
|
* as a **tool call and its result**: an assistant message carrying one
|
|
@@ -38,12 +38,12 @@ export interface RunContext {
|
|
|
38
38
|
userRequest: string;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* Build the
|
|
42
|
-
*
|
|
41
|
+
* Build the view a rubric grader reads: the messages from `visitStart` on (the
|
|
42
|
+
* visit its hook sees) plus the person's latest message.
|
|
43
43
|
*
|
|
44
|
-
* `userRequest` is
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
44
|
+
* `userRequest` is read from the **whole** list, not the visit: a grader asked
|
|
45
|
+
* whether the reply satisfies the request must see the request, which an
|
|
46
|
+
* earlier state usually received (issue #61). It is the latest user message,
|
|
47
|
+
* not the first: a later turn is answering the question asked in that turn.
|
|
48
48
|
*/
|
|
49
|
-
export declare function runContextFromMessages(messages: unknown[]): RunContext;
|
|
49
|
+
export declare function runContextFromMessages(messages: unknown[], visitStart?: number): RunContext;
|
package/dist/core/messages.js
CHANGED
|
@@ -4,7 +4,7 @@ import { NOTE_TOOL } from "../machine/tool-names.js";
|
|
|
4
4
|
import { contentToString, messageTypeOf, NOTE_KEY, ROLE_BY_TYPE } from "./message-readers.js";
|
|
5
5
|
// The readers are pure and live in `message-readers.ts` (the `@archmax-ai/harness/messages`
|
|
6
6
|
// subpath); re-exported so every runtime importer keeps one module for both halves.
|
|
7
|
-
export { contentToString, isAiMessage, isHumanMessage, isRuntimeNote, lastAgentText, lastMessageIsHuman, lastTurn, messagesSince, messageTypeOf, opensTurn, runtimeNoteKind, spokeSinceLastHumanMessage, } from "./message-readers.js";
|
|
7
|
+
export { anchorIndex, contentToString, isAiMessage, isHumanMessage, isRuntimeNote, lastAgentText, lastMessageIsHuman, lastTurn, messagesSince, messageTypeOf, opensTurn, runtimeNoteKind, spokeSinceLastHumanMessage, turnAnchorOf, turnReply, } from "./message-readers.js";
|
|
8
8
|
/** The marker every message of a runtime note carries. */
|
|
9
9
|
function marker(kind) {
|
|
10
10
|
return { [NOTE_KEY]: { note: kind } };
|
|
@@ -49,8 +49,6 @@ export function runtimeNote(kind, text) {
|
|
|
49
49
|
export function humanNote(kind, text) {
|
|
50
50
|
return new HumanMessage({ content: text, additional_kwargs: marker(kind) });
|
|
51
51
|
}
|
|
52
|
-
/** How many trailing messages a hook's compact `history` carries. */
|
|
53
|
-
const HISTORY_WINDOW = 24;
|
|
54
52
|
/** One message as a hook reads it: its role, its text, and any tool calls it made. */
|
|
55
53
|
function historyEntry(m) {
|
|
56
54
|
const msg = m;
|
|
@@ -67,19 +65,19 @@ function historyEntry(m) {
|
|
|
67
65
|
return entry;
|
|
68
66
|
}
|
|
69
67
|
/**
|
|
70
|
-
* Build the
|
|
71
|
-
*
|
|
68
|
+
* Build the view a rubric grader reads: the messages from `visitStart` on (the
|
|
69
|
+
* visit its hook sees) plus the person's latest message.
|
|
72
70
|
*
|
|
73
|
-
* `userRequest` is
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
71
|
+
* `userRequest` is read from the **whole** list, not the visit: a grader asked
|
|
72
|
+
* whether the reply satisfies the request must see the request, which an
|
|
73
|
+
* earlier state usually received (issue #61). It is the latest user message,
|
|
74
|
+
* not the first: a later turn is answering the question asked in that turn.
|
|
77
75
|
*/
|
|
78
|
-
export function runContextFromMessages(messages) {
|
|
76
|
+
export function runContextFromMessages(messages, visitStart = 0) {
|
|
79
77
|
const all = Array.isArray(messages) ? messages : [];
|
|
80
|
-
const history = all.slice(
|
|
81
|
-
const
|
|
82
|
-
const userRequest =
|
|
78
|
+
const history = all.slice(visitStart).map(historyEntry);
|
|
79
|
+
const latest = [...all].reverse().find((m) => (ROLE_BY_TYPE[messageTypeOf(m) || "?"] ?? "") === "user");
|
|
80
|
+
const userRequest = latest !== undefined ? contentToString(latest.content) : "";
|
|
83
81
|
return { history, userRequest };
|
|
84
82
|
}
|
|
85
83
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAwB,MAAM,sBAAsB,CAAC;AAEpH,4FAA4F;AAC5F,oFAAoF;AACpF,OAAO,EACL,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,0BAA0B,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/kernel/kernel.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ADVANCE_TOOL, DEFAULT_TOOLS, HARNESS_CONTROL_TOOLS, EVAL_TOOL, SET_VARIABLES_TOOL, UNGRANTABLE_TOOLS, } from "../machine/tool-names.js";
|
|
2
2
|
import { FORBID_ANY_TOOL } from "../machine/spec-schema.js";
|
|
3
3
|
import { argsSatisfy, normalizeAllowEntry, pathGuardMatches, } from "../machine/allow.js";
|
|
4
|
-
import { BUILT_IN_TOOL_PATH_TABLE, declaredPathsOf, malformedPathArgs, MUTATING_ACCESSES, OFFLOAD_ACCESSES, pathValuesOf, SCRATCHPAD_ACCESSES, } from "../machine/tool-paths.js";
|
|
4
|
+
import { BUILT_IN_TOOL_PATH_TABLE, declaredPathsOf, malformedPathArgs, MUTATING_ACCESSES, OFFLOAD_ACCESSES, pathArgNamesOf, pathValuesOf, SCRATCHPAD_ACCESSES, } from "../machine/tool-paths.js";
|
|
5
5
|
import { unmetRequirements } from "../workflow/control-tools.js";
|
|
6
6
|
import { canonicalizeRelPath } from "../core/workspace.js";
|
|
7
7
|
import { classifyWorkspacePath, mountNameOf, SESSION_INTERNAL_DIRS, SESSION_OFFLOAD_DIRS, SESSION_OPEN_DIR, } from "../core/zones.js";
|
|
@@ -818,9 +818,10 @@ function denialMatches(entry, action, api) {
|
|
|
818
818
|
return pathGuardMatches(entry, values, "any", variables) ?? true;
|
|
819
819
|
}
|
|
820
820
|
let unresolved = false;
|
|
821
|
+
const kinds = { pathArgs: pathArgNamesOf(action.tool, toolPathsOf(action.tool, api)), side: "deny" };
|
|
821
822
|
const satisfied = argsSatisfy(entry.argMatchers, action.args, variables, () => {
|
|
822
823
|
unresolved = true;
|
|
823
|
-
});
|
|
824
|
+
}, kinds);
|
|
824
825
|
return satisfied || unresolved;
|
|
825
826
|
}
|
|
826
827
|
/**
|