imprint-mcp 0.6.6 → 0.7.1
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/CHANGELOG.md +22 -0
- package/README.md +340 -16
- package/package.json +2 -2
- package/prompts/audit-agent.md +25 -4
- package/prompts/auth-compile-agent.md +195 -34
- package/prompts/build-planning.md +3 -3
- package/prompts/compile-agent.md +932 -180
- package/prompts/component-recovery.md +40 -0
- package/prompts/live-verifier-agent.md +10 -3
- package/prompts/master-teach-api-researcher.md +813 -0
- package/prompts/master-teach-baseline-mvp-review.md +217 -0
- package/prompts/master-teach-completion-review.md +188 -0
- package/prompts/master-teach-decision.md +910 -0
- package/prompts/master-teach-focused-planner.md +777 -0
- package/prompts/master-teach-parameter-advisor.md +58 -0
- package/prompts/master-teach-recording-evidence.md +19 -0
- package/prompts/master-teach-refine-plan.md +7 -0
- package/prompts/master-teach-tool-advisor.md +130 -0
- package/prompts/playbook-compilation.md +45 -54
- package/prompts/prereq-builder.md +28 -6
- package/prompts/prereq-planner.md +2 -2
- package/prompts/tool-candidate-detection.md +70 -39
- package/prompts/tool-planning.md +3 -3
- package/src/cli.ts +212 -164
- package/src/imprint/agent-tool.ts +15 -0
- package/src/imprint/agent.ts +49 -44
- package/src/imprint/api-research-agent.ts +933 -0
- package/src/imprint/audit.ts +84 -15
- package/src/imprint/auth-browser-discovery.ts +276 -0
- package/src/imprint/auth-compile-agent.ts +610 -251
- package/src/imprint/auth-compile-tools.ts +233 -73
- package/src/imprint/auth-discovery-evidence.ts +81 -0
- package/src/imprint/auth-plan.ts +28 -0
- package/src/imprint/auth-verifier.ts +239 -36
- package/src/imprint/authentication-interaction.ts +137 -0
- package/src/imprint/backend-ladder.ts +711 -395
- package/src/imprint/body-structure.ts +656 -0
- package/src/imprint/build-plan.ts +35 -345
- package/src/imprint/cdp-browser-fetch.ts +926 -82
- package/src/imprint/cdp-jar-cache.ts +7 -12
- package/src/imprint/chromium.ts +93 -29
- package/src/imprint/claude-cli-compile.ts +278 -320
- package/src/imprint/codex-cli-compile.ts +529 -350
- package/src/imprint/codex-sdk-turn.ts +102 -0
- package/src/imprint/compile-agent-types.ts +58 -15
- package/src/imprint/compile-agent.ts +222 -274
- package/src/imprint/compile-done-sentinel.ts +211 -0
- package/src/imprint/compile-provider-control.ts +401 -0
- package/src/imprint/compile-provider-recovery.ts +142 -0
- package/src/imprint/compile-strategy.ts +5 -0
- package/src/imprint/compile-tool-executor.ts +783 -0
- package/src/imprint/compile-tools.ts +1727 -3096
- package/src/imprint/compile-verification.ts +11 -1
- package/src/imprint/compile.ts +110 -29
- package/src/imprint/compiler-log.ts +28 -0
- package/src/imprint/compiler-process.ts +440 -0
- package/src/imprint/component-recovery.ts +120 -0
- package/src/imprint/concurrency.ts +43 -58
- package/src/imprint/cookie-jar.ts +117 -7
- package/src/imprint/credential-extract.ts +10 -90
- package/src/imprint/credential-lock.ts +146 -0
- package/src/imprint/credential-observation.ts +261 -0
- package/src/imprint/credential-store.ts +247 -44
- package/src/imprint/emit.ts +18 -2
- package/src/imprint/evidence-inspection.ts +55 -0
- package/src/imprint/freeform-redact.ts +34 -234
- package/src/imprint/import-module-fresh.ts +30 -0
- package/src/imprint/live-component-recovery.ts +73 -0
- package/src/imprint/live-finesse-runner.ts +299 -0
- package/src/imprint/live-verifier.ts +299 -358
- package/src/imprint/llm.ts +467 -422
- package/src/imprint/log.ts +15 -8
- package/src/imprint/login.ts +9 -0
- package/src/imprint/master-teach-agent-contracts.ts +912 -0
- package/src/imprint/master-teach-agents.ts +3065 -0
- package/src/imprint/master-teach-checks.ts +348 -0
- package/src/imprint/master-teach-controller.ts +7702 -0
- package/src/imprint/master-teach-plan.ts +1410 -0
- package/src/imprint/master-teach-prompt-projections.ts +349 -0
- package/src/imprint/master-teach-store.ts +961 -0
- package/src/imprint/mcp-cdp-sessions.ts +60 -0
- package/src/imprint/mcp-compile-server.ts +64 -1001
- package/src/imprint/mcp-live-verifier-server.ts +246 -190
- package/src/imprint/mcp-server.ts +46 -57
- package/src/imprint/native-agent-pass.ts +260 -0
- package/src/imprint/native-agent-usage.ts +141 -0
- package/src/imprint/native-teach-agents.ts +619 -0
- package/src/imprint/param-grounding.ts +488 -347
- package/src/imprint/playbook-runner.ts +254 -63
- package/src/imprint/prereq-builder.ts +55 -543
- package/src/imprint/private-file.ts +18 -0
- package/src/imprint/probe-backends.ts +129 -33
- package/src/imprint/provider-retry.ts +501 -0
- package/src/imprint/provider-terminal.ts +214 -0
- package/src/imprint/recording-request.ts +290 -1
- package/src/imprint/recording-verification.ts +444 -0
- package/src/imprint/redact.ts +33 -749
- package/src/imprint/refine-worker.ts +326 -0
- package/src/imprint/refine.ts +241 -0
- package/src/imprint/replay-capture.ts +41 -12
- package/src/imprint/replay-evidence.ts +1007 -0
- package/src/imprint/research-response-evidence.ts +45 -0
- package/src/imprint/runtime.ts +867 -138
- package/src/imprint/sensitive-keys.ts +0 -6
- package/src/imprint/session-merge.ts +103 -7
- package/src/imprint/stealth-chromium.ts +67 -7
- package/src/imprint/stealth-fetch.ts +25 -8
- package/src/imprint/stealth-token-cache.ts +16 -16
- package/src/imprint/teach-browser-resources.ts +88 -0
- package/src/imprint/teach-plan.ts +0 -242
- package/src/imprint/teach-research-memory.ts +229 -0
- package/src/imprint/teach-stage-progress.ts +38 -0
- package/src/imprint/teach-state.ts +47 -625
- package/src/imprint/teach.ts +12 -3699
- package/src/imprint/terminal-user-prompt.ts +42 -0
- package/src/imprint/tool-candidates.ts +58 -210
- package/src/imprint/tool-loader.ts +3 -0
- package/src/imprint/tool-plan.ts +1 -134
- package/src/imprint/tracing.ts +24 -7
- package/src/imprint/types.ts +113 -21
- package/src/imprint/user-interaction.ts +836 -0
- package/src/imprint/endpoint-key.ts +0 -23
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Imprint. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) (Added / Changed / Deprecated / Removed / Fixed / Security).
|
|
4
4
|
|
|
5
|
+
## [0.7.0] — 2026-10-14
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Master-led teaching with editable operation plans, focused agent passes, and dependency-aware tool compilation.
|
|
9
|
+
- Independent verification receipts and retained evidence for generated tool and producer-to-consumer checks.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Partial teaches keep ready tools but exit nonzero when planned work remains unresolved.
|
|
13
|
+
- `imprint teach` emits the MCP server; `imprint install` connects it to an AI platform.
|
|
14
|
+
- CI runs the network-isolated verifier suite on macOS and static checks on Linux.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Cancelled teaching work no longer starts a late tool invocation.
|
|
18
|
+
- Completed native assignments release their prompt and response data from the active queue.
|
|
19
|
+
- `.redacted.json` is atomically replaced with private file permissions.
|
|
20
|
+
- A whole-playbook deadline governs a hanging step even when its step timeout is nearby.
|
|
21
|
+
|
|
22
|
+
### Validation
|
|
23
|
+
- The Flights58 run completed with 14/14 tools and passed 30/30 independently graded cases, including fresh booking chains. Flights59–62 ended partial, so repeatability and Hotels destination/date validation remain outstanding. See [the validation timeline](timeline.md).
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
5
27
|
## [0.2.0] — 2026-05-14
|
|
6
28
|
|
|
7
29
|
v0.2 overhauls the teach-to-tool pipeline, adds full observability tracing, and introduces state-aware API replay. 12 new features, 7 bug fixes across 24 commits.
|
package/README.md
CHANGED
|
@@ -20,6 +20,21 @@ The recording *is* the executable.
|
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
Authentication work stays visible through operation handles and reusable context
|
|
24
|
+
references. Agents choose whether to continue a retained context or start another;
|
|
25
|
+
native verification and browser checkpoints return within the same assignment.
|
|
26
|
+
Native compiler tools share the host executor; failed calls retain their duration
|
|
27
|
+
and error code so a live process cannot hide a broken compiler connection.
|
|
28
|
+
Plan/research differences are advisory construction facts. Changed artifacts still
|
|
29
|
+
need their own live checks. See [authentication and repair](docs/architecture.md#agent-questions-and-authentication).
|
|
30
|
+
|
|
31
|
+
Timed-out questions release the terminal input queue; declared nonsecret choices
|
|
32
|
+
remain readable by the agent. Successful browser-backed data calls can preserve
|
|
33
|
+
renewed cookies for later calls without overwriting newer saved authentication.
|
|
34
|
+
Same-name host-only and domain cookies keep their distinct scopes across replay
|
|
35
|
+
and browser restoration.
|
|
36
|
+
That continuity still needs verification against the requested data operation.
|
|
37
|
+
|
|
23
38
|
## Quick Start
|
|
24
39
|
|
|
25
40
|
```bash
|
|
@@ -27,7 +42,7 @@ bun install -g imprint-mcp
|
|
|
27
42
|
imprint teach southwest --url https://www.southwest.com
|
|
28
43
|
```
|
|
29
44
|
|
|
30
|
-
A browser opens. You drive the
|
|
45
|
+
A browser opens. You drive the workflows and narrate what you're doing. Imprint records every request and interaction, then compiles the complete discovered set of deterministic **MCP tools** your agent can call later.
|
|
31
46
|
|
|
32
47
|
Want to try a finished MCP before recording anything?
|
|
33
48
|
|
|
@@ -81,7 +96,7 @@ regenerate/record it with `bun scripts/demo-teach.ts`.)*
|
|
|
81
96
|
</td>
|
|
82
97
|
<td align="center" width="33%">
|
|
83
98
|
<h3>2. Compile</h3>
|
|
84
|
-
<p>
|
|
99
|
+
<p>Builds an API workflow when the recording supports one. A DOM playbook is the final fallback, used only when the agent finds the faster replay paths incompatible.<br><br>Known login credentials are replaced with credential placeholders; other recorded data remains available to the agents.</p>
|
|
85
100
|
</td>
|
|
86
101
|
<td align="center" width="34%">
|
|
87
102
|
<h3>3. Use</h3>
|
|
@@ -91,12 +106,305 @@ regenerate/record it with `bun scripts/demo-teach.ts`.)*
|
|
|
91
106
|
</table>
|
|
92
107
|
|
|
93
108
|
> [!TIP]
|
|
94
|
-
>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
109
|
+
> Recording and compilation happen in one foreground `imprint teach` command. Install the completed tools in your MCP client with `imprint install`. Only known user-supplied login credentials are replaced before teaching; cookies, API tokens, responses, and personal data remain visible to the agents.
|
|
110
|
+
|
|
111
|
+
Existing `${credential.NAME}` references in an already-redacted recording reuse
|
|
112
|
+
values from your local credential backend. They do not replace saved passwords
|
|
113
|
+
with placeholder text. MFA may still require your input.
|
|
114
|
+
|
|
115
|
+
Request-building errors return to the compile agent as verification feedback,
|
|
116
|
+
including errors from asynchronous transforms, so it can repair the request
|
|
117
|
+
and retry.
|
|
118
|
+
|
|
119
|
+
Recordings and logs, including files named `.redacted.json`, are not safe to share publicly. Automatic PII and token redaction is disabled; review any file before sharing it.
|
|
120
|
+
Imprint writes `.redacted.json` with private file permissions. A teach that leaves
|
|
121
|
+
planned tools unresolved reports a partial result and exits nonzero, even if some
|
|
122
|
+
ready tools were published.
|
|
123
|
+
|
|
124
|
+
Teaching agents and standalone compilers can ask questions in the foreground
|
|
125
|
+
terminal, including login approvals, MFA/OTP codes, and missing information.
|
|
126
|
+
Questions from concurrent agents appear one at a time; secret input is masked
|
|
127
|
+
and returned to agents as temporary references. Authentication uses the existing
|
|
128
|
+
auth compiler to continue the same browser and challenge. Later recovery requests
|
|
129
|
+
retain that auth work within the teach. Agents first check or restore existing
|
|
130
|
+
access before starting another login. Compiled actions can branch on current
|
|
131
|
+
responses to reuse authenticated access or continue an observed challenge;
|
|
132
|
+
retaining a browser alone does not guarantee MFA is avoided.
|
|
133
|
+
Identical concurrent requests share the active
|
|
134
|
+
attempt; a previous success never substitutes for the caller's own data check.
|
|
135
|
+
Failed teach checks reach a focused component recovery agent before broader
|
|
136
|
+
plan repair. It can renew authentication, repair the caller's artifact or a
|
|
137
|
+
declared prerequisite through its retained compiler, or dispatch a registered
|
|
138
|
+
shared runtime component owner. State recovery immediately retries the built
|
|
139
|
+
caller; prerequisite repair rebuilds the selected owner and binds fresh outputs
|
|
140
|
+
into consumer checks. Accepted contracts and unrelated builds remain intact.
|
|
141
|
+
Every actual failed and retried call stays in the check history. Unknown owners
|
|
142
|
+
or changes to contracts, strategy, or dependencies return to the master.
|
|
143
|
+
When the live login offers a flow missing from the recording, the auth agent can
|
|
144
|
+
operate its verification browser and capture additional request/response evidence.
|
|
145
|
+
It can learn the offered flow before requesting the actual OTP or approval, then
|
|
146
|
+
compile and verify its replay. Original recordings remain unchanged; discovering
|
|
147
|
+
or manually completing a flow alone does not prove reusable authentication.
|
|
148
|
+
Run without
|
|
149
|
+
`--no-interactive` when answers may be needed. Detached runs and piped terminals
|
|
150
|
+
report input as unavailable. Browser closure during stealth user-agent setup
|
|
151
|
+
returns through the existing setup-error handling instead of terminating teach.
|
|
152
|
+
On hosts with limited RAM or disk for swap, set `IMPRINT_TEACH_LOW_MEMORY=1`
|
|
153
|
+
to run live data checks one at a time. Successive checks in the same research
|
|
154
|
+
pass reuse its browser; a competing pass evicts that browser before using its
|
|
155
|
+
own isolated context. Authentication keeps its persistent browser across MFA prompts.
|
|
156
|
+
Closing an Imprint-owned browser removes its temporary Chrome profile. Explicit
|
|
157
|
+
profiles, including `record --persist-profile`, are retained; recordings and run
|
|
158
|
+
evidence are stored separately.
|
|
159
|
+
|
|
160
|
+
For every teach, a master agent accounts for the complete discovered operation
|
|
161
|
+
set. Focused advisors review tool boundaries and parameters, focused planners
|
|
162
|
+
map one tool at a time, and focused compilers build one tool at a time. The
|
|
163
|
+
master chooses the build waves: independent tools can run together, while a
|
|
164
|
+
producer runs before its consumers. Failed checks return factual evidence to
|
|
165
|
+
the master, which can revise the affected tool and its dependants without
|
|
166
|
+
rebuilding unrelated tools. Recorded response availability is supplied before
|
|
167
|
+
MVP selection. The boundary advisor and master receive the same human scope.
|
|
168
|
+
Agents choose separate tools for distinct recorded purposes before narrowing each
|
|
169
|
+
tool's inputs; unsupported purposes remain explicit coverage limits. Invalid focused-planner reports return exact diagnostics to the
|
|
170
|
+
master for repair while preserving successful sibling proposals; they never
|
|
171
|
+
become accepted execution plans. The retained master receives changed research
|
|
172
|
+
handoffs without repeatedly resending unchanged history; host validation still
|
|
173
|
+
uses the full evidence. Codex teaches use one native agent family, with up to ten
|
|
174
|
+
concurrent children. Agents can delegate further and continue the same conversations
|
|
175
|
+
through repairs. Each research pass stays in one native assignment: test and
|
|
176
|
+
inspection results return directly to that researcher, with the same host validation.
|
|
177
|
+
Master, planner and reviewer repairs and shared-memory queries use that same channel,
|
|
178
|
+
without routing every intermediate response through the parent.
|
|
179
|
+
Inspected alternative requests carry their nearest recorded action, and agents
|
|
180
|
+
explain how any substituted request compares with the selected purpose. Shared
|
|
181
|
+
research delivers a short index; detailed methods and failed approaches are
|
|
182
|
+
stored as immutable assets that agents read only when relevant.
|
|
183
|
+
Independent research calls keep separate browser state and reserve paced start times
|
|
184
|
+
without holding a shared site lock through slow responses.
|
|
185
|
+
Master-directed follow-ups resume the same child. Codex owns child lifecycle and concurrency; Imprint retains
|
|
186
|
+
provider retries, deadlines, execution tools and strict evidence checks. Other
|
|
187
|
+
providers retain their existing execution paths with four focused workers.
|
|
188
|
+
Independent research repairs share the master’s parallel waves; dependent repairs,
|
|
189
|
+
compilation and execution follow the accepted producer ordering. Compiler conversations
|
|
190
|
+
survive revision-directory changes, and finished tools enter verification immediately
|
|
191
|
+
while independent siblings continue compiling. Consumers still wait for verified producers.
|
|
192
|
+
Capture timeouts group repeated endpoint facts so telemetry does not crowd out
|
|
193
|
+
distinct responses, while keeping matching and readiness rules unchanged.
|
|
194
|
+
Research request diagnostics also show bounded decoded body differences, helping
|
|
195
|
+
agents distinguish changed inputs from accidental nesting or encoding changes.
|
|
196
|
+
Agents judge those differences; they are not an automatic pass/fail rule.
|
|
197
|
+
|
|
198
|
+
Before that tool's planning, one retained researcher conversation first proves the
|
|
199
|
+
smallest useful API call. If part of the selected MVP contract or a required
|
|
200
|
+
downstream value is still unproven, the researcher returns that working partial
|
|
201
|
+
result instead of pretending it is complete or discarding it. Optional breadth
|
|
202
|
+
waits for the later best-effort pass. Once all first passes finish, the master
|
|
203
|
+
can send the exact missing question back to that same conversation with only
|
|
204
|
+
the relevant sibling results and recorded requests.
|
|
205
|
+
An independent proven tool can prepare its plan and compile a draft while
|
|
206
|
+
other research continues, when no queued research needs that attention. The master still
|
|
207
|
+
reviews the complete plan before normal verification and publication; only an
|
|
208
|
+
exactly matching draft is reused. With native delegation, completed research reaches
|
|
209
|
+
the master while unrelated drafts finish. Those drafts settle before final planning
|
|
210
|
+
can reuse or replace them. Declared consumers retain producer-first ordering.
|
|
211
|
+
The terminal names each tool entering detailed planning and each master review,
|
|
212
|
+
reports elapsed waiting time every 30 seconds, and reports when that stage
|
|
213
|
+
finishes or stops. A waiting update means the stage has not returned yet.
|
|
214
|
+
Researchers can call proven sibling requests with fresh inputs before testing a
|
|
215
|
+
consumer; recorded continuation values are not a substitute for fresh output.
|
|
216
|
+
Compilers can inspect full retained responses from that tool's earlier research
|
|
217
|
+
through a local index, then choose relevant repeat and contrast cases for offline
|
|
218
|
+
checks. Each observation keeps its own inputs, outcome and response chain. Researchers can
|
|
219
|
+
query an entire retained response with a bounded, offline data projection; failed
|
|
220
|
+
queries return for repair, and projected output is labelled separately from raw text.
|
|
221
|
+
Teaching now selects a fixed set of recording-backed examples and matches live calls to those examples, changing only expired dates or state. A separate evidence reader establishes expected facts from raw recorded/live responses before seeing parser output, then judges the parser against those facts. Citations can quote the original response bytes or their displayed JSON representation. Each selected live case is reviewed against its matched recorded response chain; unrelated fixtures are left for their own case reviews. Every selected live case and declared dependency chain must pass before publication. Missing coverage is unverified, and raw failures stay with the draft for repair. Fixture bodies are checked before compilation, and research history and inspected recording evidence survive same-run contract revisions. Grounded input mappings are kept separate from the limits of the recorded test cases; missing contrasts alone should not freeze a tool to recorded constants. Research can batch selected calls sequentially and retain isolated browsers during agent thinking. Bootstrap snapshots are cached separately by the requested URL, and capture failures show which matcher conditions failed; cold-start setup remains unchanged. Readiness failures state when no actions have started, and schema repair errors name the exact required fields. These checks need fresh repeated validation before a reliability claim.
|
|
222
|
+
|
|
223
|
+
Repair or extend an installed data tool with `imprint refine <site> --tool <name> --issue "<change>" --from-session <recording.json>`. Refinement works in an isolated staging home, preserves existing parameter contracts, and requires recording/live verification plus a strict audit before replacement. Failed refinements preserve installed tools and local evidence. Use `imprint audit <site> --strict` to reject known broken calls even when the aggregate score exceeds 95%. See [targeted refinement](docs/refinement.md). Audits forward explicitly set browser settings (`CHROMIUM_PATH`, `IMPRINT_CDP_HEADED`, `IMPRINT_JAR_MAX_AGE_SECONDS`, `IMPRINT_PROXY`, and `DISPLAY`) into their isolated MCP server for either audit provider. See [audit troubleshooting](docs/troubleshooting.md#imprint-audit--scoring-a-sites-generated-tools).
|
|
224
|
+
|
|
225
|
+
MVP reviewers see the checked request and parser code alongside live results.
|
|
226
|
+
Publication retains the backend from that exact reviewed passing call in
|
|
227
|
+
`backends.json`, so a fresh MCP process starts on the tested path. This records
|
|
228
|
+
one execution choice, not a cold/warm benchmark or proof of repeatability.
|
|
229
|
+
They also receive actual research comparisons and inspected response excerpts,
|
|
230
|
+
not just the researcher's explanation of what those tests proved.
|
|
231
|
+
Agents are instructed to distinguish competing meanings of ambiguous fields
|
|
232
|
+
with focused evidence, rather than treating a coincidentally matching number
|
|
233
|
+
as proof. Uncertain mappings go back to the master for research or a narrower MVP.
|
|
234
|
+
Invalid research handoffs also return to the master with their actual test
|
|
235
|
+
history, rather than ending the whole teach or counting as an API failure.
|
|
236
|
+
Browser snapshots are reused by tool and rung without cookie-name requirements.
|
|
237
|
+
An explicit bootstrap URL runs before resolving request URLs that need its
|
|
238
|
+
captured state. MCP closes an idle or timed-out tool's CDP sessions without
|
|
239
|
+
closing another tool's browser, and a cancelled call does not start another rung.
|
|
240
|
+
Fetch-bootstrap tries the API request before deciding whether to escalate; a
|
|
241
|
+
missing cookie marker is not reported as an HTTP failure.
|
|
242
|
+
Rewording auth or token notes reuses that proof; the master explicitly requests
|
|
243
|
+
new research when the actual strategy changes.
|
|
244
|
+
The final reviewer receives the same human scope and checks requested tool
|
|
245
|
+
connections rather than requiring explicitly excluded operations.
|
|
246
|
+
If an agent mistypes run metadata, repair feedback supplies the exact current values.
|
|
247
|
+
Recorded page references support generated API-navigation URLs; the final URL
|
|
248
|
+
need not appear literally in the recording, but must be grounded and live-tested.
|
|
249
|
+
Tool handoffs use agent-selected concrete result paths, not array wildcards.
|
|
250
|
+
Binding failures explain the path problem and distinguish it from an API call failure.
|
|
251
|
+
Result reviewers see the actual invocation inputs; an unrelated planned test's
|
|
252
|
+
expected answer is never substituted for the research baseline or a chain call.
|
|
253
|
+
A successful chain result can be reviewed even if a standalone test failed;
|
|
254
|
+
that failed test remains visible and still prevents completion until repaired.
|
|
255
|
+
Compiler guidance separates a returned value's location from its meaning and
|
|
256
|
+
omits uncertain optional metadata instead of filling it from unrelated matching
|
|
257
|
+
shapes. Extra responses used to corroborate research stay in the evidence;
|
|
258
|
+
required execution requests must contribute necessary state or core output.
|
|
259
|
+
Agents ground rendered-result completion checks in core content and inspect
|
|
260
|
+
observed layout variations before treating an incidental element as required.
|
|
261
|
+
Agents can scope a background response capture to a specific navigation click.
|
|
262
|
+
Requests started before that action cannot satisfy the capture, including ones
|
|
263
|
+
that finish later. Without an action boundary, capture starts with navigation.
|
|
264
|
+
Navigation clicks wait for the selected target to become clickable within the
|
|
265
|
+
existing navigation deadline, then dispatch once. Failed clicks report bounded
|
|
266
|
+
match, geometry, computed-style and center-hit facts so agents can repair their
|
|
267
|
+
chosen interaction from actual page evidence.
|
|
268
|
+
Before accepting a navigation capture as reusable, researchers repeat a valid
|
|
269
|
+
input and compare a small core-input variation with the same candidate. They
|
|
270
|
+
reuse existing decisive observations and distinguish session reuse from setup.
|
|
271
|
+
When a background capture fails despite current page results, agents inspect
|
|
272
|
+
their delivery source, including structured document data. Changing the baseline
|
|
273
|
+
input does not repair the failed valid case. Reviewers trace ambiguous metadata
|
|
274
|
+
to its context; matching keywords or units alone cannot justify a named field.
|
|
275
|
+
Compilers test the complete current research response before live validation,
|
|
276
|
+
including result frames beyond initial metadata, alongside recording examples.
|
|
277
|
+
For a request chain, they receive its actual ordered response bodies as a local
|
|
278
|
+
offline fixture. They test associations using current response identities and
|
|
279
|
+
unmatched records, rather than copying one example's values into parser logic.
|
|
280
|
+
For framed protocols, a small parser test checks that an earlier empty or metadata
|
|
281
|
+
frame does not hide later records; agents derive the expected result from evidence.
|
|
282
|
+
Failed browser calls can include bounded page evidence from browser inspection,
|
|
283
|
+
including through fallback and MCP audit errors. Agents use it to investigate missing
|
|
284
|
+
captures without treating a timeout as automatic infrastructure failure or rendered
|
|
285
|
+
text as API success. Network-capture timeouts also include a bounded list of
|
|
286
|
+
observed response endpoints, methods, resource types, statuses and navigation
|
|
287
|
+
scope facts, with omitted counts. These facts help agents compare a failed
|
|
288
|
+
matcher with actual traffic; they do not change response selection.
|
|
289
|
+
Parser checks distinguish unsupported missing fields from evidenced protocol defaults.
|
|
290
|
+
Auditors receive exact report tool names.
|
|
291
|
+
Planning and final review also check how callers obtain required inputs,
|
|
292
|
+
without relying on identifiers hidden in the recording.
|
|
293
|
+
Research uses a small contrasting core-input check before claiming parameter
|
|
294
|
+
mappings are proven; optional parameter breadth remains deferred.
|
|
295
|
+
Agents check the advertised meaning, not just whether results change; a range
|
|
296
|
+
contrast distinguishes its bounds from a fixed result region that merely moves.
|
|
297
|
+
Handoffs identify the response evidence that establishes the core records' scope
|
|
298
|
+
for the compiler to preserve. Demonstrated ignored inputs return for contract
|
|
299
|
+
revision; they are not deferred as optional minimization. Audits distinguish a
|
|
300
|
+
bound pair's combined behavior from proof of each input's individual effect.
|
|
301
|
+
For rendered results after navigation or actions, agents verify that the current
|
|
302
|
+
collection finished rendering; document load, a page shell, or an updated control
|
|
303
|
+
alone cannot establish readiness. When timing is uncertain, agents compare
|
|
304
|
+
initial setup with changed-input calls in the same tool's warm session.
|
|
305
|
+
Selection handling respects structured field boundaries and complete identities.
|
|
306
|
+
Checking an input does not prove that it selects the corresponding result.
|
|
307
|
+
That contrast must distinguish claimed mappings from defaults; changing one
|
|
308
|
+
input does not prove the others, and unproven mappings return for follow-up.
|
|
309
|
+
The master reviews that evidence even when research labels itself proven;
|
|
310
|
+
missing proof within one tool can return to its retained researcher.
|
|
311
|
+
Live verification uses the planner's selected test inputs, not a replacement
|
|
312
|
+
with the research baseline; the proven backend remains reusable.
|
|
313
|
+
The planner chooses that first live case to challenge weak core evidence;
|
|
314
|
+
additional unexecuted cases are not claimed as coverage.
|
|
315
|
+
Research handoff repair reports independent missing fields together, so one
|
|
316
|
+
repair turn can correct the candidate, test reference, and remaining proof gaps.
|
|
317
|
+
If a repair exposes further schema errors, the same conversation can correct
|
|
318
|
+
them within the shared deadline. Identical rejected outputs stop the repair loop;
|
|
319
|
+
invalid decisions never execute.
|
|
320
|
+
Blocked terminal counts include unresolved discoveries even when no tool was planned.
|
|
321
|
+
Researchers can inspect or search bounded portions of retained live results,
|
|
322
|
+
including HTML attributes and embedded state, without repeating the API call.
|
|
323
|
+
Compilers receive the selected research call's full saved response and inputs
|
|
324
|
+
for offline parser tests, not just a written summary. This evidence stays out of
|
|
325
|
+
published runtime artifacts.
|
|
326
|
+
After live failures, the master can return an unchanged tool to its retained
|
|
327
|
+
researcher with the actual failure evidence, then replan only the affected tool.
|
|
328
|
+
MVP reviewers receive the checked build's parser to distinguish observed values
|
|
329
|
+
from input echoes; audits require an attributable effect, not merely changed ordering.
|
|
330
|
+
Server-returned query text is also an echo, not proof of applied settings.
|
|
331
|
+
Final review also sees prior semantic rejections and their actual inputs, so a
|
|
332
|
+
later passing baseline does not silently erase an unresolved core failure.
|
|
333
|
+
MVP reviewers check returned values against their claimed meaning: optional
|
|
334
|
+
breadth can wait, but mislabeled data is a repair, not polish.
|
|
335
|
+
If the Codex child reports missing stdin despite a non-empty prompt, Imprint
|
|
336
|
+
retries that exact delivery once on the same conversation and deadline.
|
|
337
|
+
|
|
338
|
+
Researchers can return a concrete input or dependency gap for a master decision
|
|
339
|
+
without exhausting transport permutations. The master coordinates affected
|
|
340
|
+
producer outputs and consumer inputs together; fresh live proof is still required.
|
|
341
|
+
Agents can plan repeated calls to the same tool and bind each call to an exact
|
|
342
|
+
prior result. The runtime checks a finite invocation order and invalidates dependent
|
|
343
|
+
proof when that source result changes; a continuation does not require a separate
|
|
344
|
+
public tool. Existing single-call plans retain their behavior.
|
|
345
|
+
Chain checks and audits compare actual producer record structures with the
|
|
346
|
+
consumer's public contract. One selected record can contain several members;
|
|
347
|
+
unless explicitly excluded, an available fresh multi-member record is checked
|
|
348
|
+
and compared with the complete consumer result.
|
|
349
|
+
A passing singleton check does not establish that every selected member survives.
|
|
350
|
+
Validation, request construction, and parsing keep group properties separate
|
|
351
|
+
from member properties; a valid group need not repeat its overall fields on every
|
|
352
|
+
member. Parsers preserve the distinction between alternatives and required
|
|
353
|
+
components, including when action links exist only on components. Verification
|
|
354
|
+
compares eligible source records with the output and checks each attribute against
|
|
355
|
+
its own evidence; a plausible subset or matching sibling value is insufficient.
|
|
356
|
+
Missing optional details must not erase required members, and constructed
|
|
357
|
+
selections must preserve the complete selected record through the consumer result.
|
|
358
|
+
Reviewers also report
|
|
359
|
+
explicit parser or request guards that reject inputs allowed by the public contract;
|
|
360
|
+
a fixture's shape must not silently become a restriction on callers.
|
|
361
|
+
|
|
362
|
+
Generated modules reload from their resolved filesystem paths, so repeated
|
|
363
|
+
research tests also work when the teach directory is reached through a symlink.
|
|
364
|
+
Generated wrappers forward caller cancellation and request/response observation
|
|
365
|
+
callbacks. Cancellation reaches active fetch requests and response reads; a
|
|
366
|
+
cancelled call is reported separately from a request timeout. Raw prepared-request
|
|
367
|
+
observations stay inside host diagnostics. Parsers distinguish a valid empty
|
|
368
|
+
result from a missing or unsupported result envelope.
|
|
369
|
+
|
|
370
|
+
Semantic agents receive the current shared deadline and remaining time on each
|
|
371
|
+
turn, including output repairs, so they can budget for compilation and live
|
|
372
|
+
checks. Repair feedback identifies missing fields by path and expected type,
|
|
373
|
+
including whether a list or scalar is expected. Invalid output remains rejected.
|
|
374
|
+
Baseline and dependency API calls are cancelled when that budget expires,
|
|
375
|
+
with a short bounded cleanup period; late results cannot become successful checks.
|
|
376
|
+
Exhausting the run deadline is reported as a failed run; provider
|
|
377
|
+
unavailability is reserved for an actual provider interruption.
|
|
378
|
+
|
|
379
|
+
Every teach is fresh and stays in the foreground until it reaches a terminal
|
|
380
|
+
result. There are no resume, phase-window, primary-tool, or partial-selection
|
|
381
|
+
modes. A run succeeds only when every planned tool is verified; otherwise the
|
|
382
|
+
terminal reports the failure honestly and exits non-zero.
|
|
383
|
+
|
|
384
|
+
For an API operation that only the page can construct, a workflow navigation
|
|
385
|
+
may explicitly select one matching live background response and return its body
|
|
386
|
+
to the parser. The teaching agent derives that matcher from recording evidence;
|
|
387
|
+
the runtime does not guess which request matters or turn the capability into a
|
|
388
|
+
site rule. The recorded response used for offline checks is separate from the
|
|
389
|
+
response order in a fresh live call. Playbooks remain the final fallback.
|
|
390
|
+
|
|
391
|
+
During research and compilation, request transforms can compute navigation
|
|
392
|
+
targets and click actions from current inputs or earlier responses. The declared
|
|
393
|
+
API response matcher stays fixed so live and offline checks select the same data.
|
|
394
|
+
Dependent selections preserve the machine values required by the next tool.
|
|
395
|
+
Producer compilers receive the current tested consumer construction for declared
|
|
396
|
+
links, so they can check the required representation instead of guessing from names.
|
|
397
|
+
Adding contextual recording references preserves request proof when the tested
|
|
398
|
+
request and public inputs remain covered; executable request changes still need
|
|
399
|
+
matching proof. Parser tests compare contrasting fixture records and check that
|
|
400
|
+
reported summaries agree with their underlying data. They retain records with
|
|
401
|
+
absent optional fields and distinguish requested context from observed attributes.
|
|
402
|
+
Provider capacity failures retry the same conversation within the existing
|
|
403
|
+
deadline; deterministic request and access errors remain terminal.
|
|
404
|
+
Compile-time browser cleanup waits for concurrent calls to finish; one completed
|
|
405
|
+
request cannot idle-close another request's active browser.
|
|
406
|
+
MCP failures include the completed backend attempts and timings, so a final
|
|
407
|
+
fallback error does not hide an earlier navigation timeout.
|
|
100
408
|
|
|
101
409
|
The recorder also has a bounded fallback for Next.js React Server Component
|
|
102
410
|
responses that Chromium evicts before `Network.getResponseBody` can read them.
|
|
@@ -166,6 +474,9 @@ bunx playwright install chromium
|
|
|
166
474
|
| 4 | Cursor | `cursor` on PATH |
|
|
167
475
|
|
|
168
476
|
Override with `--provider <name>` and `--model <name>`.
|
|
477
|
+
Codex teaching defaults to `gpt-6.1-sol`. Keep the Codex CLI current when using
|
|
478
|
+
that model for audits or standalone compilation; older installations may reject
|
|
479
|
+
it even when the Codex app offers it.
|
|
169
480
|
|
|
170
481
|
</details>
|
|
171
482
|
|
|
@@ -196,21 +507,28 @@ The full order is `fetch → fetch-bootstrap → cdp-replay → stealth-fetch
|
|
|
196
507
|
|
|
197
508
|
For bot-protected sites, `imprint probe-backends <site> --tool <toolName>` writes a `backends.json` preference cache so cron and MCP start from the known-good backend instead of rediscovering blocked rungs. Use `imprint probe-backends <site> --all` to refresh every tool in a multi-tool site; `imprint mcp status` reports stale or invalid backend caches before they quietly fall back to the default ladder. CDP replay records both cold and warm timings when it succeeds: a timeout-safe cold start may rank by its fast warm runtime, but a cold start above the preferred threshold stays behind cold-safe backends in durable cache order.
|
|
198
509
|
|
|
199
|
-
During `imprint teach`,
|
|
510
|
+
During `imprint teach`, each tool goes through contract, replay, live, and
|
|
511
|
+
producer-consumer checks as applicable. The checks leave factual receipts. A
|
|
512
|
+
failure goes back to the master for a focused repair, and an independent final
|
|
513
|
+
reviewer sees both the current plan and the check history before the run can
|
|
514
|
+
complete.
|
|
200
515
|
|
|
201
|
-
|
|
516
|
+
The agent prefers an API `workflow.json`. It adds `playbook.yaml` only as the
|
|
517
|
+
last fallback when the higher replay rungs are not compatible with the
|
|
518
|
+
recorded operation.
|
|
202
519
|
|
|
203
520
|
---
|
|
204
521
|
|
|
205
522
|
## Platform Support
|
|
206
523
|
|
|
207
|
-
|
|
524
|
+
After `imprint teach` completes, register the generated site with
|
|
525
|
+
`imprint install <site> --platform <platform>`:
|
|
208
526
|
|
|
209
527
|
| Platform | Integration |
|
|
210
528
|
|:--|:--|
|
|
211
|
-
| **Claude Code** |
|
|
212
|
-
| **Codex CLI** |
|
|
213
|
-
| **Claude Desktop** |
|
|
529
|
+
| **Claude Code** | Runs `claude mcp add` |
|
|
530
|
+
| **Codex CLI** | Runs `codex mcp add` |
|
|
531
|
+
| **Claude Desktop** | Writes or prints the MCP config |
|
|
214
532
|
| **OpenClaw** | MCP config + SKILL.md export |
|
|
215
533
|
| **Hermes** | MCP config + SKILL.md + cron mapping |
|
|
216
534
|
|
|
@@ -269,16 +587,20 @@ imprint <command> --help # per-command options
|
|
|
269
587
|
|
|
270
588
|
| Category | Commands |
|
|
271
589
|
|:--|:--|
|
|
272
|
-
| **
|
|
590
|
+
| **Teaching** | `teach` (the single fresh foreground flow) |
|
|
591
|
+
| **Artifact utilities** | `record` · `redact` · `generate` · `compile-playbook` · `emit` |
|
|
273
592
|
| **Runtime** | `cron` · `mcp-server` · `playbook` · `probe-backends` · `audit` |
|
|
274
593
|
| **Credentials** | `credential set` · `credential list` · `credential export` · `credential import` · `credential migrate` |
|
|
275
594
|
| **Utilities** | `mcp` · `login` · `assemble` · `check` · `doctor` · `install` · `uninstall` |
|
|
276
595
|
|
|
596
|
+
The artifact utilities are useful on individual files, but they are not
|
|
597
|
+
resumable phases of `imprint teach`.
|
|
598
|
+
|
|
277
599
|
---
|
|
278
600
|
|
|
279
601
|
## Sharing Skills
|
|
280
602
|
|
|
281
|
-
Teach on your laptop, ship to a remote agent. Generated MCP folders contain the portable tool artifacts: `workflow.json
|
|
603
|
+
Teach on your laptop, ship to a remote agent. Generated MCP folders contain the portable tool artifacts: `workflow.json` or the fallback `playbook.yaml`, `index.ts`, optional parser/request-transform modules, and cron/backend metadata. Copy `~/.imprint/<site>` into the receiver's `~/.imprint/<site>` or commit it to a private repo, install Imprint there, then register it:
|
|
282
604
|
|
|
283
605
|
```bash
|
|
284
606
|
bun install -g imprint-mcp
|
|
@@ -342,3 +664,5 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.
|
|
|
342
664
|
**[MIT License](LICENSE)**
|
|
343
665
|
|
|
344
666
|
</div>
|
|
667
|
+
|
|
668
|
+
Teach research retains each received response before later requests, extraction, or parsing can fail. Agents can inspect bounded excerpts of failed calls without repeating them; those responses remain failed evidence.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "imprint-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Teach an AI agent how to use any website. Once. Records a real browser session + narration; generates a deterministic MCP tool plus a DOM-replay playbook fallback.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
57
57
|
"@napi-rs/keyring": "^1.3.0",
|
|
58
58
|
"@noble/hashes": "^2.2.0",
|
|
59
|
+
"@openai/codex-sdk": "^0.159.2",
|
|
59
60
|
"@opentelemetry/api": "^1.9.1",
|
|
60
61
|
"chrome-remote-interface": "^0.33.0",
|
|
61
62
|
"env-paths": "^3.0.0",
|
|
@@ -64,7 +65,6 @@
|
|
|
64
65
|
"playwright": "^1.49.0",
|
|
65
66
|
"playwright-extra": "^4.3.6",
|
|
66
67
|
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
|
67
|
-
"redactum": "^1.1.0",
|
|
68
68
|
"semver": "^7.8.4",
|
|
69
69
|
"tldts": "^7.4.8",
|
|
70
70
|
"yaml": "^2.8.4",
|
package/prompts/audit-agent.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
When the initial task supplies recording-backed fixed cases, use that list instead of creating additional challenges or sweeping unrelated parameter combinations. Preserve the recorded operation and coupled inputs, updating only expired dates/state and using fresh producer outputs. Report each supplied caseId on its corresponding invocation. Missing coverage is unverified. This fixed-case policy takes precedence over general differential-sweep instructions below.
|
|
2
|
+
|
|
1
3
|
# Imprint Audit Agent
|
|
2
4
|
|
|
3
5
|
You are an automated QA auditor. A set of eligible MCP tools is connected to you. Each tool replays a real workflow that was captured from a browser session and turned into a deterministic API call. Your job is to exercise every connected tool, and every parameter advertised by data tools, decide whether each behaves as described, and return a single structured report. Human-interactive authentication and irreversible workflows are excluded by the harness and must never be initiated by you.
|
|
@@ -19,18 +21,19 @@ Your priority is **functional coverage, not edge cases.** A tool that returns da
|
|
|
19
21
|
**Verify the result is actually FOR what you asked.** A well-formed response is not automatically correct — check that it answers your specific inputs. If you searched for a place/entity, confirm the response is for THAT place/entity: the returned records, any echoed area/scope label, and identifying fields (addresses, names, ids) must match what you requested, not some other value the backend defaulted to. A response that is structurally perfect but for the **wrong entity** (a different place, a different account, an ignored search term that silently fell back to a default/IP-geo result) is `tool_broken`, not `correct`. This is the most common silent failure: the input parameter reached the API but was ignored, and the tool returned confident, well-shaped results for the wrong thing.
|
|
20
22
|
|
|
21
23
|
3. **Differentially test EACH advertised data-tool parameter.** This is the core of the audit. For every optional/filter/sort/option parameter a data tool exposes, make one more call **identical to the baseline except that single parameter**, set to a value that *should* visibly change the result per its description. Do not apply this procedure to authentication tools. Compare the new result to the baseline and classify the parameter with exactly one `verdict`:
|
|
22
|
-
- `works` — the result changed the way the description promises (a filter
|
|
24
|
+
- `works` — the result changed the way the description promises, with evidence attributable to that parameter (a filter changed matching records; a sort obeyed its requested ordering; a mode/basis changed the relevant field). Name that evidence, not merely that two responses differed.
|
|
23
25
|
- `no_op` — there is positive evidence that the parameter is inert: use a meaningfully discriminating value and show that the response still reflects the baseline value or otherwise ignores the requested change. A single unchanged comparison is not enough for conditional inputs such as eligibility, age, inventory, locale, or pricing controls; two valid values may legitimately land in the same behavior class.
|
|
24
26
|
- `broken` — there is positive evidence that the parameter produces a wrong result: it errors because of a valid value, contradicts the requested value, or corrupts the response. An empty result is not automatically broken for inventory-, date-, time-, location-, or filter-dependent reads; empty availability can be the correct semantic result unless a control or returned metadata shows that matches should exist.
|
|
25
|
-
- `untestable` — reserve this for genuine impossibility, NOT inconvenience. Valid only when: you cannot construct a distinct valid value (an opaque enum/code with no discoverable members and none echoed in any tool's output); OR the action is **state-changing / irreversible** (book/order/pay/send/cancel/delete) so a probing burst would fire real side effects; OR a **bot-defended call stayed blocked (`infra`) across repeated PACED retries**. State which in the reason. **Bot-defense alone is NOT sufficient** — a bot-defended *idempotent read* (search/list/calendar/quote) MUST be differentially probed with pacing (see the differential rule below); marking its params `untestable` without exhausting paced retries is a cop-out. Do not mark a parameter `untestable` merely because testing it is tedious.
|
|
26
|
-
To isolate the parameter, change only that one field between the two calls. When two parameters
|
|
27
|
+
- `untestable` — reserve this for genuine impossibility, NOT inconvenience. Valid only when: you cannot construct a distinct valid value (an opaque enum/code with no discoverable members and none echoed in any tool's output); OR valid bound inputs cannot be varied independently and the result cannot attribute an effect to the individual member; OR the action is **state-changing / irreversible** (book/order/pay/send/cancel/delete) so a probing burst would fire real side effects; OR a **bot-defended call stayed blocked (`infra`) across repeated PACED retries**. State which in the reason. **Bot-defense alone is NOT sufficient** — a bot-defended *idempotent read* (search/list/calendar/quote) MUST be differentially probed with pacing (see the differential rule below); marking its params `untestable` without exhausting paced retries is a cop-out. Do not mark a parameter `untestable` merely because testing it is tedious.
|
|
28
|
+
To isolate the parameter, change only that one field between the two calls. When validity requires two parameters to change together (e.g. a bound producer-returned pair), keep the pair coherent and say so in the reason. That comparison proves the pair's combined behavior, not each member's individual effect or necessity. Grade an individual member `works` only when the evidence supports its own advertised claim; otherwise record the successful invocations and mark that member `untestable` with the attribution limit. Do not mix incompatible values merely to force an isolated test.
|
|
29
|
+
Echoed inputs, including fields labeled `applied` or `effective`, prove only that the tool repeated the request, not that the website honored it. Inventory, prices and ordering can change between identical requests. If that variability is the only apparent signal, repeat the baseline as a control when useful and look for an attributable effect or independently observed state. A changed list by itself is not proof of an unrelated parameter. If the available tool output cannot distinguish the claim, preserve that lack of proof as `untestable` with the actual attempts; do not manufacture either a pass or a defect.
|
|
27
30
|
For conditional parameters, choose a boundary value likely to cross a behavior class and inspect echoed request metadata as well as result data. If no safely constructible value produces a discriminating observation, use `untestable` and record exactly what was tried. Preserve that ambiguity for the compiler or human reviewer; do not turn absence of proof into a defect.
|
|
28
31
|
Promo/coupon/voucher/discount-code parameters need a **known valid code** to produce a visible discount. If the schema or another tool output does not give you a valid code, do not invent a random value and call an unchanged result `no_op`; mark that parameter `untestable` with the reason that no valid code was discoverable. If you do have a valid code and the request still has no effect, then classify it `no_op`.
|
|
29
32
|
|
|
30
33
|
4. **Judge the baseline invocation** against what the description and schema promise, with exactly one `verdict`:
|
|
31
34
|
- `correct` — sensible, well-formed, on-topic data matching the description (or a legitimately empty result for inputs that should yield none). Read the payload — do not judge solely on "it returned without throwing."
|
|
32
35
|
- `tool_broken` — the tool ran but the result is wrong: malformed or empty when data was expected, fields missing or mis-mapped, an internal error, the wrong kind of data, or a shape that contradicts the schema/description.
|
|
33
|
-
- `infra` — environmental,
|
|
36
|
+
- `infra` — evidence supports an environmental failure, such as rate limiting, bot-defense challenge, HTTP 403/429, connectivity loss, or an upstream 5xx. A timeout while waiting for a selected response or page element does not by itself establish an environmental cause; a workflow can wait for something its actions never produce.
|
|
34
37
|
- `bad_params` — your own mistake: a value the schema/description should have told you was invalid. Use this so the tool isn't penalized for your error.
|
|
35
38
|
Set `ok` to `true` only for `correct`; otherwise `false`. Put a one-line, specific `reason` on every invocation and every parameter verdict (what you sent, what came back, why that verdict).
|
|
36
39
|
|
|
@@ -44,10 +47,28 @@ Your priority is **functional coverage, not edge cases.** A tool that returns da
|
|
|
44
47
|
- Derive parameters **only** from each tool's schema and description. Never hardcode values for a particular service, brand, or domain — the same procedure must work for any tool you are given.
|
|
45
48
|
- Audit **every eligible connected** tool, and within each data tool, test **every** advertised parameter (subject to the read-type rule above). Do not skip a tool because another failed. Authentication tools are limited to one baseline as described above.
|
|
46
49
|
- Prefer `infra` over `tool_broken`/`broken` when the evidence points to anti-bot, rate-limiting, or network/upstream failure — a blocked request is not a code bug.
|
|
50
|
+
- Inspect supplied failure details and rendered-page evidence before attributing a timeout. A loaded results page alongside a missing expected capture is evidence to investigate the workflow's trigger or response selection, not proof that the requested API tool succeeded. Compare a supported contrasting input when useful. Cite concrete contradictions for `tool_broken`; if the cause remains unresolved, use `infra` with that uncertainty stated rather than inventing bot defense. Keep unsuccessful core tools and their dependent coverage gaps explicit even when the graded score passes.
|
|
47
51
|
- Prefer `bad_params` over `tool_broken` when re-reading the schema shows your own inputs were invalid.
|
|
52
|
+
- Check source coverage when the result or available evidence makes it testable. A bounded collection may legitimately be sparse, but a plausible non-empty subset alone does not prove completeness. Investigate missing eligible records and distinguish observed absence from extraction loss. For related returned attributes that can differ, use an available contrasting record to verify each attribute rather than treating baseline equality as proof. If source coverage cannot be established, report that limit without inventing a failure.
|
|
48
53
|
- Require affirmative evidence before assigning `no_op` or `broken`. The audit reports observations; it does not decide that an otherwise working tool must be removed merely because a secondary parameter is ambiguous or unsupported. Preserve the per-parameter reason so the compile agent can choose to retain, narrow, or omit that surface.
|
|
49
54
|
- **Chain producer-sourced values.** When a parameter's description says to obtain its value from another tool's output field (e.g. "Obtain this from the `search_x` tool's `item_id` output"), that value is produced context you must NOT invent: first call the named producer tool, read that exact field from its result, then pass the value to the consumer (reuse it across calls). Judge the consumer on that real value. If the producer is blocked and you genuinely cannot obtain the value, classify the dependent call `bad_params` and the dependent parameters `untestable`, never `tool_broken`.
|
|
50
55
|
|
|
56
|
+
Compare the consumer's public contract with the actual producer record shapes.
|
|
57
|
+
One selected record can contain several members even when the description uses
|
|
58
|
+
a singular noun. Unless the public contract explicitly excludes that structure,
|
|
59
|
+
use an available fresh multi-member producer record for a representative chain
|
|
60
|
+
call. Compare all selected members and their order with the consumer result;
|
|
61
|
+
a plausible result for only the first member is not a correct grouped result.
|
|
62
|
+
The consumer may legitimately return components that together cover the selected
|
|
63
|
+
record; each component need not cover every member. Check that their relationship
|
|
64
|
+
and value scopes are explicit instead of assuming component records are complete
|
|
65
|
+
alternatives. Cite a concrete missing or contradictory relationship, not merely
|
|
66
|
+
a component containing fewer members than the overall selection.
|
|
67
|
+
A runtime rejection does not retroactively make a contract-compatible producer
|
|
68
|
+
value bad input. Changing labels between two singleton records does not cover
|
|
69
|
+
this distinction. If no suitable record is available, report the coverage gap
|
|
70
|
+
without inventing a selection or declaring an unobserved failure.
|
|
71
|
+
|
|
51
72
|
## Output
|
|
52
73
|
|
|
53
74
|
End your final message with **exactly one** fenced `json` block and nothing after it. It must parse as this object:
|