@lazyingart/agintiflow 0.20.203 → 0.20.205

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.
Files changed (68) hide show
  1. package/.env.example +15 -0
  2. package/README.md +1 -1
  3. package/bin/aginti-integration.js +7 -0
  4. package/docs/deep-research-engine.md +190 -24
  5. package/docs/external-skill-packs.md +30 -0
  6. package/docs/perception-and-web-research.md +11 -5
  7. package/docs/runtime-modes-and-autonomy.md +8 -0
  8. package/docs/student-committee-supervisor.md +15 -3
  9. package/docs/supervised-capability-curriculum.md +5 -0
  10. package/docs/supervision-campaign-ledger.md +55 -0
  11. package/package.json +12 -3
  12. package/scripts/eval-provider-attribution.js +155 -0
  13. package/scripts/smoke-cli-chat.js +17 -0
  14. package/scripts/smoke-coding-tools.js +297 -0
  15. package/scripts/smoke-context-budget-recovery.js +180 -0
  16. package/scripts/smoke-deep-research.js +1197 -15
  17. package/scripts/smoke-dynamic-step-budget.js +408 -0
  18. package/scripts/smoke-integration-production-mount.js +1135 -0
  19. package/scripts/smoke-model-roles.js +204 -1
  20. package/scripts/smoke-progressive-tool-selection.js +331 -1
  21. package/scripts/smoke-scs-evidence-visibility.js +720 -1
  22. package/scripts/smoke-session-runtime.js +6 -0
  23. package/scripts/smoke-skillmesh.js +5 -5
  24. package/scripts/smoke-skills.js +67 -0
  25. package/scripts/smoke-supervision-ledger.js +87 -0
  26. package/scripts/supervision-ledger.js +251 -0
  27. package/skills/deep-research/SKILL.md +51 -1
  28. package/src/agent-runner.js +1565 -84
  29. package/src/behavior-contract.js +2 -1
  30. package/src/cli.js +16 -0
  31. package/src/command-policy.js +141 -5
  32. package/src/config.js +26 -1
  33. package/src/deep-research.js +1349 -174
  34. package/src/integration-api.js +1060 -0
  35. package/src/integration-artifacts.js +241 -0
  36. package/src/integration-auth.js +425 -0
  37. package/src/integration-cli.js +210 -0
  38. package/src/integration-config.js +442 -0
  39. package/src/integration-core-event-projector.js +589 -0
  40. package/src/integration-durable-common.js +541 -0
  41. package/src/integration-event-ledger-store.js +458 -0
  42. package/src/integration-events.js +491 -0
  43. package/src/integration-idempotency-store.js +1075 -0
  44. package/src/integration-native-executor.js +600 -0
  45. package/src/integration-policy.js +700 -0
  46. package/src/integration-run-registry.js +168 -0
  47. package/src/integration-runtime-authority.js +2339 -0
  48. package/src/integration-sandbox-profile.js +1329 -0
  49. package/src/integration-server.js +796 -0
  50. package/src/integration-session-persistence.js +504 -0
  51. package/src/integration-session-service.js +486 -0
  52. package/src/json-specialist.js +10 -0
  53. package/src/model-client.js +35 -15
  54. package/src/perception-tools.js +1 -1
  55. package/src/permission-advice.js +34 -0
  56. package/src/progressive-tool-selection.js +74 -5
  57. package/src/provider-contract.js +1 -1
  58. package/src/redaction.js +1 -1
  59. package/src/research-routing.js +33 -0
  60. package/src/scs-controller.js +382 -19
  61. package/src/scs-evidence.js +1198 -8
  62. package/src/session-runtime.js +18 -0
  63. package/src/session-store.js +503 -416
  64. package/src/skill-library.js +72 -2
  65. package/src/step-budget-controller.js +102 -1
  66. package/src/tool-contract.js +29 -7
  67. package/src/web-search.js +496 -6
  68. package/src/workspace-tools.js +90 -15
package/.env.example CHANGED
@@ -13,6 +13,11 @@ AGINTI_LOCALLLM_VISION_MODEL=localllm-vision-xl
13
13
  AGINTI_LOCALLLM_CONTEXT_TOKENS=32768
14
14
  AGINTI_LOCALLLM_MAX_OUTPUT_TOKENS=8192
15
15
  AGINTI_LOCALLLM_TOOL_SCHEMA_TOKENS=4096
16
+ # Committee JSON uses the same-provider route model when possible. LocalLLM uses
17
+ # deterministic contract/evidence validation by default; hosted providers keep
18
+ # the independent model validator. Set `model` to force model validation.
19
+ AGINTI_SCS_VALIDATION_MODE=auto
20
+ AGINTI_SCS_MODEL_TIMEOUT_MS=45000
16
21
 
17
22
  # Genuine implementation work uses the code alias only after authenticated model
18
23
  # discovery confirms that exact configured alias; otherwise it remains on Deep.
@@ -33,6 +38,16 @@ AGINTI_WRITING_PROVIDER=
33
38
  AGINTI_WRITING_MODEL=
34
39
  AGINTI_ALLOW_HOSTED_WRITING_SPECIALIST=false
35
40
 
41
+ # Optional Agent Skills interoperability. Existing ~/.agents/skills,
42
+ # ~/.codex/skills, and ~/.claude/skills are discovered read-only by default.
43
+ AGINTIFLOW_DISCOVER_AGENT_SKILLS=true
44
+ # AGINTIFLOW_AGENT_SKILL_PACKS=/path/to/agent-skills:/path/to/more-skills
45
+ # AGINTIFLOW_SKILL_PACKS=/path/to/another-reviewed-pack
46
+
47
+ # Optional structured read-only roots for sibling routines/reference repos.
48
+ # Repeatable CLI equivalent: --read-root /absolute/reference/repo
49
+ # AGINTI_READ_ROOTS=/absolute/reference/repo:/another/reference/repo
50
+
36
51
  # Optional local npm publish fallback. Prefer GitHub Actions Trusted Publishing.
37
52
  NPM_TOKEN=
38
53
  NODE_AUTH_TOKEN=
package/README.md CHANGED
@@ -54,7 +54,7 @@ Most agent tools are either a chat box with hidden state or an expensive one-mod
54
54
  | Disciplined by default | `AGINTI.md` starts with a behavior contract: surface ambiguity, keep edits surgical, avoid speculative complexity, verify outcomes, and respect permission blockers. |
55
55
  | Role-based models | Route, main, spare, wrapper, and auxiliary image roles are separate. LocalLLM supplies the default fast/deep lanes; DeepSeek, OpenAI, OpenRouter, Qwen, and Venice are optional explicit routes. |
56
56
  | Writing without agent noise | `writing_specialist` drafts novels, books, scripts, essays, and paper prose in an isolated writing-only context on the active provider. Cross-provider writing requires explicit permission; ambient keys and model arguments cannot silently switch a LocalLLM session to a hosted model. The main agent then handles files, formatting, citations, checks, and artifacts. |
57
- | Visual and web evidence | `read_image` keeps local pixels local. Fast search has provider fallback; exact page reads preserve hashes and metadata; `deep_research` adds resumable planning, parallel retrieval, exact-quote evidence, gap filling, synthesis, and citation auditing on the active provider. |
57
+ | Visual and web evidence | `read_image` keeps local pixels local. Fast search has provider fallback; standard/deep research merges independent indexes; exact HTML/PDF reads preserve hashes and metadata; `deep_research` adds resumable planning, parallel retrieval, exact-quote evidence IDs, gap filling, synthesis, and claim-level citation auditing on the active provider. |
58
58
  | Scouts before big work | Parallel scouts can cheaply map architecture, tests, risks, symbols, and integration points before the main executor edits anything. |
59
59
  | SCS by default | Student-Committee-Supervisor mode adds a typed gate: committee drafts, student approves/monitors, supervisor executes. Use `/scs off` or `--no-scs` only when speed matters more than validation. |
60
60
  | AAPS for large workflows | AAPS describes top-down agentic pipeline scripts; AgInTiFlow can act as the interactive backend that validates, compiles, and executes those workflows. |
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { main, safeIntegrationCliError } from "../src/integration-cli.js";
3
+
4
+ main().catch((error) => {
5
+ process.stderr.write(`aginti-integration: ${safeIntegrationCliError(error)}\n`);
6
+ process.exitCode = 1;
7
+ });
@@ -15,36 +15,100 @@ real value.
15
15
  The implementation follows the strongest production patterns without making
16
16
  every query an unbounded agent swarm:
17
17
 
18
- 1. **Plan**: the active provider decomposes the question into non-overlapping
19
- subquestions, search queries, preferred source types, and exclusions.
20
- 2. **Search**: queries run with bounded concurrency. The no-key default falls
21
- back from DuckDuckGo HTML to Bing RSS. An explicitly configured Brave Search
22
- route is optional. Multi-domain corpora receive separate bounded `site:`
18
+ 1. **Plan**: a fast routing model on the active provider decomposes the question
19
+ into non-overlapping subquestions, search queries, preferred source types,
20
+ and exclusions. If that structured call fails, the main model gets one
21
+ bounded retry; the workflow never switches providers implicitly.
22
+ 2. **Search**: queries run with bounded concurrency. Quick lookup uses the
23
+ no-key DuckDuckGo-to-Bing fallback. Standard/deep research uses a bounded
24
+ ensemble that merges DuckDuckGo and Bing indexes, plus Brave only when it is
25
+ explicitly configured. A paper-oriented request receives one initial bounded
26
+ scholarly discovery pass against Crossref and arXiv, attached to the most
27
+ paper-like planned query. If the independently verified source minimum is
28
+ still open, the single gap pass may retry that lane once with a different
29
+ planner-derived query. This improves paper recall and metadata identity
30
+ without multiplying every query or creating bursty arXiv traffic.
31
+ When the request explicitly asks for official engineering or first-party
32
+ implementation evidence, one separate bounded query targets engineering,
33
+ documentation, system-card, and whitepaper surfaces. The selector reserves
34
+ one relevant first-party candidate when available instead of letting a large
35
+ paper set erase the requested source class. Search snippets can guide
36
+ discovery, but they cannot satisfy verified first-party coverage or enter
37
+ synthesis as cited evidence.
38
+ Canonical duplicates found by multiple providers are promoted and retain
39
+ per-provider rank evidence. Multi-domain corpora receive separate bounded `site:`
23
40
  queries matched to entity-specific subquestions instead of one fragile OR
24
- expression.
25
- 3. **Rank, diversify, and deduplicate**: canonical URLs remove tracking state;
26
- primary, official, scholarly, and high-relevance results rank ahead of
27
- summaries, while a bounded diversity penalty prevents one domain from
28
- crowding every selected source.
41
+ expression. If an exact `site:` query returns no candidates, the engine
42
+ retries the same planner query once without the search-operator hint while
43
+ retaining the domain allowlist. This recovery stays inside the original
44
+ research run and is recorded in its checkpoint.
45
+ 3. **Rank, diversify, and deduplicate**: canonical URLs remove tracking state.
46
+ Scholarly records additionally carry DOI, arXiv ID, normalized title,
47
+ provider, venue, author, PDF, and alternate-URL provenance. DOI publisher,
48
+ arXiv abstract, and arXiv PDF variants of one work collapse before source
49
+ budgeting, while the audit records how many variants were merged. A title
50
+ match is only a fallback and never merges records with conflicting DOI or
51
+ arXiv identities. A source
52
+ repository is useful implementation evidence but is not automatically an
53
+ official or scholarly paper merely because it is hosted on GitHub or has
54
+ `paper` in its path.
55
+ Topical overlap, independent provider rediscovery, discovery by multiple
56
+ planned queries, and domain-constrained intent rank candidates. Official or
57
+ scholarly status is a quality signal, not a substitute for relevance, so a
58
+ generic university citation guide cannot crowd out a paper merely because it
59
+ is hosted on an academic domain. Dictionary, translation, and citation-generator
60
+ pages are excluded when stronger policy-compliant evidence exists. Under a
61
+ strict `primary`, `official`, or `scholarly` policy, four relevant compliant
62
+ candidates are enough to exclude generic supplementary commentary entirely.
63
+ When at least four strongly topical compliant candidates exist, marginally
64
+ related academic pages are excluded as well;
65
+ a sparse set may add only enough relevant supplementary context to reach
66
+ that small floor, but a strict policy with zero compliant candidates fails
67
+ closed instead of accepting generic filler. Source budgets are ceilings rather than targets, and a
68
+ bounded diversity penalty prevents one domain from crowding every selected
69
+ source.
29
70
  4. **Read exact sources**: `read_web_page` validates every redirect before the
30
71
  next request, rejects private DNS resolutions, streams bounded bytes, strips
31
72
  scripts/navigation, extracts article/main text and metadata, records hashes,
32
- and marks all retrieved text as untrusted evidence.
73
+ and marks all retrieved text as untrusted evidence. Verified PDF response
74
+ bytes are passed to a bounded local `pdftotext` process when available, so
75
+ papers can contribute exact passages without sending the PDF to another
76
+ provider. If one exact scholarly landing page is inaccessible, the reader
77
+ tries only the same work's verified alternate landing/PDF URLs before giving
78
+ up; it never substitutes a nearby paper. When the original request requires
79
+ a paper, selected provider-supplied PDFs and arXiv, ACL Anthology,
80
+ OpenReview, and Nature landing pages are resolved to bounded PDF candidates
81
+ before evidence extraction. Direct PDF candidates receive the bounded 5 MiB
82
+ document allowance rather than the generic 2 MiB HTML-page allowance; larger
83
+ files still fail closed with the exact size error. Browser-verification,
84
+ CAPTCHA, and access-challenge HTML is marked unreadable instead of counting
85
+ its warning text as source evidence.
33
86
  5. **Extract evidence**: isolated structured-output calls identify relevant
34
- subquestions, claims, exact quotations, confidence, and limitations.
87
+ subquestions, claims, exact quotations, confidence, and limitations. The
88
+ active provider's fast routing model handles the parallel first pass. Only
89
+ failed sources are retried, at lower concurrency and a larger output budget,
90
+ with that provider's stronger main model. Every extracted claim receives a
91
+ stable evidence ID such as `S2-C3`.
35
92
  6. **Verify**: deterministic code checks that quoted passages occur in the
36
93
  exact retrieved source. Unverified quotations do not enter synthesis.
37
94
  7. **Fill gaps**: standard/deep runs may issue one bounded follow-up pass for
38
- uncovered subquestions when query and source budgets remain.
39
- 8. **Synthesize**: the active provider receives verified evidence rather than
40
- arbitrary page text. Every substantive paragraph and finding carries source
41
- IDs.
42
- 9. **Audit**: deterministic code removes invented source IDs and unsupported
43
- synthesis statements whose cited sources produced no verified evidence,
44
- then reports claim, quotation, citation, question, domain, and
45
- primary-source coverage.
95
+ uncovered subquestions, insufficient independent readable primary evidence,
96
+ or a requested first-party class that has not produced readable,
97
+ quote-verified evidence, when query and source budgets remain.
98
+ 8. **Synthesize**: the active provider's main model receives verified evidence
99
+ rather than arbitrary page text. Every substantive paragraph and finding
100
+ cites exact evidence IDs instead of merely naming a source. A failed main
101
+ synthesis gets one same-provider fast-model fallback.
102
+ 9. **Audit**: deterministic code removes unknown or unverified evidence IDs,
103
+ derives visible source citations from accepted evidence records, removes
104
+ unsupported synthesis statements, then reports claim, quotation, citation,
105
+ question, domain, PDF, and independent primary-source coverage. A second
106
+ audit checks the cleaned synthesis; rejected provider IDs remain diagnostic
107
+ warnings but do not make the delivered report's final audit look dirty.
46
108
  10. **Persist**: every stage checkpoints one JSON state file. The final cited
47
- Markdown report is saved beside it and sent to the canvas.
109
+ Markdown report is saved beside it by default, or written directly to a
110
+ guarded workspace-relative `outputPath` when the caller requests a durable
111
+ filename, then sent to the canvas.
48
112
 
49
113
  This combines the orchestrator/worker and separate citation-pass lessons
50
114
  described by [Anthropic's production research
@@ -67,6 +131,33 @@ The caller may reduce these budgets, but hard caps remain 12 queries and 24
67
131
  sources. Search/page concurrency is bounded to six and defaults to three or
68
132
  four.
69
133
 
134
+ Explicit evidence requirements are derived from both the tool arguments and
135
+ the authoritative original user goal. A planner may shorten the research
136
+ question, but cannot silently drop requirements such as “compare at least three
137
+ independent primary sources,” “read a paper/PDF when available,” or “include
138
+ negative evidence.” These requirements are fingerprinted and checkpointed.
139
+
140
+ Planning and evidence extraction deliberately use the configured routing model
141
+ when it belongs to a hosted active provider. Synthesis uses the configured main
142
+ model. For LocalLLM, when the outer agent has already selected and loaded its
143
+ main model, every research stage reuses that resident model unless a dedicated
144
+ extraction model was explicitly configured. This avoids a costly GPU residency
145
+ swap; local evidence extraction is bounded to two concurrent calls by default.
146
+ Failed evidence calls are retried selectively rather than repeating every
147
+ successful source.
148
+
149
+ The same residency rule applies to the outer SCS committee plan for a LocalLLM
150
+ research task. It reuses the selected executor model instead of waiting on a
151
+ second local route-model queue before the bounded research workflow can start.
152
+
153
+ Planner-produced concise queries take precedence over the original user brief.
154
+ The raw brief is retained as a search query only when it is already concise;
155
+ long conversational instructions are research context, not a literal search
156
+ engine query. For DeepSeek, bounded JSON transformations explicitly use
157
+ non-thinking mode. The multi-stage workflow supplies the reasoning structure,
158
+ while disabling hidden reasoning prevents a small extraction object from
159
+ spending its entire output budget before emitting JSON.
160
+
70
161
  ## Usage
71
162
 
72
163
  Interactive:
@@ -83,7 +174,11 @@ An agent can call:
83
174
  "query": "What evidence supports the current design choices?",
84
175
  "depth": "standard",
85
176
  "sourcePolicy": "primary",
86
- "domains": ["docs.example.org", "arxiv.org"]
177
+ "requirePdf": true,
178
+ "minIndependentSources": 3,
179
+ "includeNegativeEvidence": true,
180
+ "domains": ["docs.example.org", "arxiv.org"],
181
+ "outputPath": "reports/design-evidence.md"
87
182
  }
88
183
  ```
89
184
 
@@ -94,6 +189,12 @@ is marked failed, preserves its attempts, and retries retrieval on resume
94
189
  instead of caching an empty report as success. Checkpoint schema changes
95
190
  invalidate old cached runs automatically.
96
191
 
192
+ `outputPath` is optional and must name a Markdown file inside the active
193
+ workspace. Repository internals such as `.git`, dependency trees such as
194
+ `node_modules`, path escapes, and symlink escapes are rejected. This lets the
195
+ bounded engine satisfy an exact report filename without granting the outer
196
+ agent access to private session artifacts.
197
+
97
198
  ## Artifacts
98
199
 
99
200
  Each session stores:
@@ -103,6 +204,9 @@ artifacts/deep-research-RESEARCH_ID.json
103
204
  artifacts/deep-research-RESEARCH_ID.md
104
205
  ```
105
206
 
207
+ When `outputPath` is supplied, the JSON checkpoint remains private to the
208
+ session while the report is also written to that exact guarded workspace path.
209
+
106
210
  The JSON includes:
107
211
 
108
212
  - objective, plan, query/source budgets, and source policy;
@@ -111,6 +215,12 @@ The JSON includes:
111
215
  - readable source text and ranked passages;
112
216
  - extracted claims, exact quotations, limitations, and question mappings;
113
217
  - missing questions, source diversity, and quote-verification rates;
218
+ - explicit evidence requirements, parsed-PDF attempts, and independent verified
219
+ primary/scholarly source counts;
220
+ - DOI/arXiv work identities, alternate read attempts, and merged-variant counts;
221
+ - requested and verified first-party engineering source coverage;
222
+ - evidence that came only from search excerpts, kept distinct from readable
223
+ source verification;
114
224
  - final synthesis and citation audit;
115
225
  - stage/status fields used for crash-safe resume.
116
226
 
@@ -122,6 +232,35 @@ The default `auto` policy uses public no-key providers:
122
232
  DuckDuckGo HTML -> Bing RSS
123
233
  ```
124
234
 
235
+ The `multi` policy used by standard/deep research queries all available
236
+ no-key indexes and merges their canonical results:
237
+
238
+ ```text
239
+ DuckDuckGo HTML + Bing RSS (+ Brave when explicitly configured)
240
+ ```
241
+
242
+ Paper-oriented `deep_research` requests keep that broad lane and add one
243
+ bounded scholarly lane initially; an unresolved independent-source contract
244
+ may trigger one additional scholarly call in the single gap pass:
245
+
246
+ ```text
247
+ Crossref metadata + arXiv metadata/preprint links
248
+ ```
249
+
250
+ For direct `web_search` use, `provider=scholarly` selects only Crossref and
251
+ arXiv, while `provider=research` combines the general and scholarly lanes.
252
+ `provider=crossref` and `provider=arxiv` remain available for a deliberately
253
+ index-specific lookup. These public endpoints require no API key; provider
254
+ failures remain visible in `providersTried` rather than being hidden.
255
+
256
+ An explicit request for official engineering writeups adds one source-class
257
+ query such as an engineering architecture or system-card lookup. This is not a
258
+ hardcoded vendor list: the planner names relevant first-party organizations
259
+ when it knows them, while deterministic routing preserves the requested source
260
+ class and records whether a readable first-party source actually supported a
261
+ quote-verified claim. A result-page excerpt alone is reported separately and
262
+ does not close that requirement.
263
+
125
264
  For an explicitly configured Brave Search account:
126
265
 
127
266
  ```bash
@@ -140,17 +279,38 @@ through configuration or a tool argument.
140
279
  - Domain allowlists and blocklists apply to search results, direct reads, and
141
280
  redirect targets.
142
281
  - Tracking parameters and fragments are removed before deduplication.
282
+ - arXiv abstract, HTML, versioned, and PDF URLs for the same paper collapse to
283
+ one canonical paper identity before source budgeting.
284
+ - DOI and arXiv variants are merged at the work level when identifiers or a
285
+ sufficiently specific normalized scholarly title agree. Conflicting DOI or
286
+ arXiv identities always remain separate even when titles match. Distinct
287
+ variant URLs remain in the audit and exact-source fallback ledger.
288
+ - Strict source policies do not fill unused capacity with blogs or social posts
289
+ once at least four relevant policy-compliant sources are available. This is a
290
+ quality floor, not a requirement to consume the configured source ceiling.
291
+ - When a PDF is explicitly required, evidence extraction does not begin until a
292
+ discovered PDF has yielded readable text. A hard requirement fails closed;
293
+ “when available” is allowed to proceed only when no bounded PDF candidate was
294
+ discoverable.
143
295
  - Page bytes are bounded while streaming; extracted characters are bounded too.
296
+ - Direct PDF candidates use a bounded 5 MiB read allowance; ordinary pages keep
297
+ the lower 2 MiB allowance.
144
298
  - HTML scripts, forms, navigation, footers, and similar noise are removed.
299
+ - Access-challenge pages are explicitly rejected as unreadable evidence.
145
300
  - Retrieved text is always labeled untrusted and never treated as tool or agent
146
301
  instructions.
147
- - PDFs are hash-verified but not misrepresented as parsed by the dependency-free
148
- page reader. A document/PDF tool remains responsible for full PDF extraction.
302
+ - PDFs are always hash-verified. When local `pdftotext` is available, bounded
303
+ text and relevant passages are extracted from those exact bytes; otherwise
304
+ the result stays explicitly unreadable and preserves the extraction error.
149
305
  - Synthesis sees only verified evidence records. Unknown citation IDs and
150
306
  citations to sources without verified evidence are removed and reported.
151
307
  - Provider selection remains explicit. Deep research uses the active provider;
152
308
  it does not silently escape LocalLLM or DeepSeek because another API key is
153
309
  present.
310
+ - Structured-output mode follows the active provider contract. DeepSeek and
311
+ LocalLLM use JSON-object output with a prompt fallback; providers that truly
312
+ support JSON Schema may use it. Unsupported response formats are not probed
313
+ on every research call.
154
314
 
155
315
  ## Quality Signals
156
316
 
@@ -160,6 +320,12 @@ prose:
160
320
  - question coverage;
161
321
  - readable source count;
162
322
  - primary/scholarly source count;
323
+ - independent verified primary/scholarly source count;
324
+ - duplicate scholarly variants merged before source budgeting;
325
+ - verified first-party engineering/official source count when requested;
326
+ - search-excerpt-only source-match count, which is diagnostic and never enters
327
+ synthesis or satisfies readable first-party or independent-primary verification;
328
+ - parsed-PDF count and PDF requirement status;
163
329
  - independent-domain count;
164
330
  - exact-quote verification rate;
165
331
  - statement-level citation coverage;
@@ -47,6 +47,36 @@ AgInTiFlow supports both its native frontmatter (`id`, `label`, `description`,
47
47
  `triggers`, `tools`) and the broader Agent Skills dialect used by K-Dense
48
48
  (`name`, `description`, `allowed-tools`, nested `metadata`).
49
49
 
50
+ ## Standard Local Agent Skills
51
+
52
+ AgInTiFlow also discovers user-owned Agent Skills from these standard local
53
+ locations when they exist:
54
+
55
+ - `~/.agents/skills`
56
+ - `~/.codex/skills`
57
+ - `~/.claude/skills`
58
+
59
+ This is read-only interoperability. AgInTiFlow loads only `SKILL.md`, treats its
60
+ contents as guidance rather than executable authority, and still applies the
61
+ normal tool, command, permission, and irreversible-action policies. Built-in,
62
+ project-local, and reviewed SkillMesh skills continue to win on ID collisions.
63
+
64
+ Override the standard roots with a path-delimited list:
65
+
66
+ ```bash
67
+ AGINTIFLOW_AGENT_SKILL_PACKS=/path/to/agent-skills:/path/to/more-skills aginti skills
68
+ ```
69
+
70
+ Disable ambient discovery for a hardened or fully isolated runtime:
71
+
72
+ ```bash
73
+ AGINTIFLOW_DISCOVER_AGENT_SKILLS=false aginti skills
74
+ ```
75
+
76
+ Selected skill context includes a bounded excerpt, section index, and the
77
+ read-only `SKILL.md` source path. This lets a tool-capable agent inspect the full
78
+ routine before a multi-stage task without bloating every ordinary chat turn.
79
+
50
80
  ## Design Rules
51
81
 
52
82
  - External packs are optional. Missing packs do not block startup.
@@ -7,10 +7,10 @@ AgInTiFlow separates visual understanding, web search, and wrapper advice so eac
7
7
  | Tool | Purpose | Evidence |
8
8
  | --- | --- | --- |
9
9
  | `read_image` | Read workspace screenshots, plots, scanned text, diagrams, or allowed remote image URLs. | Saves JSON and Markdown reports under `artifacts/perception/`, records image hashes, and sends the Markdown report to the canvas when used by an agent run. |
10
- | `web_search` | Cheap raw search snippets. | Returns compact titles, URLs, snippets, and fallback search URL. |
11
- | `read_web_page` | Read one exact public source instead of relying on a snippet. | Returns bounded article text, metadata, canonical URL, relevant passages, retrieval time, and content hash. |
10
+ | `web_search` | Cheap raw search snippets or a bounded multi-provider ensemble. | Returns compact titles, canonical URLs, snippets, provider attempts, and per-provider discovery evidence. |
11
+ | `read_web_page` | Read one exact public source instead of relying on a snippet. | Returns bounded article/PDF text, metadata, canonical URL, relevant passages, retrieval time, and content hash. |
12
12
  | `web_research` | Sourced research unit for current or external information. | Saves `artifacts/research/*-web-research.json` with query, mode, source list, and answer. |
13
- | `deep_research` | Plan, retrieve, verify, synthesize, and audit a genuinely multi-source question. | Saves resumable JSON state and a cited Markdown report with coverage metrics. |
13
+ | `deep_research` | Plan, retrieve, verify, synthesize, and audit a genuinely multi-source question. | Saves resumable JSON state and a cited Markdown report with exact claim-evidence IDs, coverage metrics, and an optional guarded workspace `outputPath`. |
14
14
  | `research_wrapper` | Read-only strict-JSON second opinion from the selected wrapper. | Saves `artifacts/wrappers/*-research-wrapper.json` with wrapper, model, reasoning, metadata, result, and raw fallback output. |
15
15
 
16
16
  ## Defaults
@@ -20,8 +20,14 @@ AgInTiFlow separates visual understanding, web search, and wrapper advice so eac
20
20
  - Codex image reading requires both `provider=codex` and explicitly enabled wrapper tools. It is not an automatic fallback.
21
21
  - OpenAI image reading defaults to `AGINTI_PERCEPTION_MODEL=gpt-5.4-mini` and `AGINTI_PERCEPTION_REASONING=medium`, with fallback models remaining inside the same explicitly selected OpenAI provider.
22
22
  - `web_research` defaults to lightweight snippet mode. The active LocalLLM can synthesize those returned snippets and sources during the next agent step without a second provider call.
23
- - `web_search` automatically falls back from DuckDuckGo HTML to Bing RSS. Brave Search is available only when explicitly selected and configured.
24
- - `deep_research` uses the active provider for planning, evidence extraction, and synthesis. It never treats another provider's ambient credentials as permission.
23
+ - `web_search provider=auto` falls back from DuckDuckGo HTML to Bing RSS. `provider=multi` merges both indexes and adds Brave only when explicitly configured. Standard/deep research defaults to this ensemble; quick research stays on auto.
24
+ - Exact PDF responses are hashed first, then parsed locally with bounded `pdftotext` when available. Direct PDF candidates receive a bounded 5 MiB document allowance instead of the generic 2 MiB HTML-page allowance. An explicit original-goal PDF requirement resolves selected arXiv, ACL Anthology, OpenReview, or Nature landing pages before claim extraction; extraction failure remains visible rather than silently treating a snippet as full-paper evidence.
25
+ - `deep_research` stays on the active provider: its fast routing model plans and extracts sources in parallel, only failed extractions retry on the stronger main model, and the main model synthesizes the verified evidence. DeepSeek JSON transformations explicitly disable thinking mode and use its supported JSON-object contract; the bounded workflow, not hidden chain-of-thought, owns decomposition and verification. A failed synthesis may fall back once to the same-provider routing model. It never treats another provider's ambient credentials as permission. Visible source citations are derived from verified claim-level evidence IDs rather than trusted directly from model output.
26
+ - LocalLLM research reuses an already-selected resident main model for planning, extraction, and synthesis unless `deepResearchExtractionModel` is explicit. It limits extraction to two concurrent local calls by default, avoiding multi-model GPU thrash and four-way local inference contention.
27
+ - Candidate ranking requires topical evidence, provider/query rediscovery, or an explicit domain constraint. Academic or official hosting improves source quality but does not make an irrelevant page relevant. When a strict-policy run finds at least four strongly topical sources, marginally related academic pages cannot consume the remaining source budget.
28
+ - A domain-specific `site:` query that returns no candidates is retried once as the same plain planner query while the domain allowlist remains enforced. This bounded recovery is part of one research run, not an outer-agent manual search detour.
29
+ - Concise planner queries are searched before the raw request, and long conversational briefs are not sent verbatim to search engines. Explicit source-count, PDF, first-party, and negative-evidence requirements remain authoritative from the original goal. Paper-oriented runs add one bounded Crossref/arXiv discovery pass and may retry it once during the single gap pass when the independently verified source minimum remains open; DOI, arXiv HTML/abstract/PDF, and version URLs are merged as one scholarly work while conflicting identifiers remain separate and exact variants remain auditable fallback paths. First-party requirements close only on readable, quote-verified content. Search excerpts and access-challenge pages remain discovery diagnostics and never enter synthesis as cited evidence. Source budgets are ceilings: once a strict source policy has at least four relevant compliant candidates, blogs, social commentary, dictionaries, citation generators, and third-party paper utilities cannot pad the set; with zero compliant candidates, strict policy fails closed.
30
+ - A requested `deep_research outputPath` must be a Markdown file inside the active workspace. Path escapes, symlink escapes, `.git`, and `node_modules` are rejected, so an agent can deliver the requested report without reading private session artifacts.
25
31
  - `web_research mode=openai` is accepted only for an active OpenAI session or when `allowHostedWebResearch=true`. A denied or failed hosted synthesis is returned with `ok=false`; any preserved snippets are labeled fallback evidence rather than hosted success.
26
32
  - `json_specialist` stays on the active provider. A different provider requires `allowHostedJsonSpecialist=true`; ambient hosted keys and model-generated provider arguments cannot escalate a LocalLLM session.
27
33
  - `research_wrapper` defaults to `AGINTI_RESEARCH_WRAPPER_MODEL=gpt-5.4-mini` and `AGINTI_RESEARCH_WRAPPER_REASONING=medium`.
@@ -29,10 +29,18 @@ Codex exposes these concerns as `--sandbox read-only|workspace-write|danger-full
29
29
 
30
30
  - `-s safe|normal|danger` and `/safe`, `/normal`, `/danger`
31
31
  - `--sandbox-mode host|docker-readonly|docker-workspace`
32
+ - repeatable `--read-root /absolute/reference/repository` for structured read-only cross-repository inspection
32
33
  - `--package-install-policy block|prompt|allow`
33
34
  - `--allow-shell|--no-shell`
34
35
  - `--allow-destructive`
35
36
 
37
+ Read roots are narrower than danger mode. `inspect_project`, `list_files`,
38
+ `search_files`, `read_file`, and `read_image` may inspect an explicitly named
39
+ root, while every write still remains inside `--cwd`. Use read roots for
40
+ established sibling routines and reference repositories. Do not replace them
41
+ with recursive `grep`; use bounded workspace search or targeted `rg` with an
42
+ explicit path, relevant globs, and a result limit.
43
+
36
44
  ## Docker Package Installs
37
45
 
38
46
  Docker package installs are safe when they match the sandbox contract.
@@ -26,12 +26,15 @@ Inside interactive chat:
26
26
 
27
27
  ## Role Contract
28
28
 
29
- SCS uses the selected main model for every internal role.
29
+ SCS uses the selected main model for execution. Hosted providers use a model
30
+ student by default. LocalLLM uses the same typed student contract with
31
+ deterministic runtime validation so periodic checks do not repeatedly occupy
32
+ the local inference queue.
30
33
 
31
34
  | Role | Right | Boundary |
32
35
  | --- | --- | --- |
33
36
  | Committee | Draft one next-phase plan with acceptance criteria and stop conditions. | Cannot approve plans or call tools. |
34
- | Student | Act as the independent validator: approve/veto the phase plan, review failure evidence, and approve/reject finish. | Cannot call tools, approve its own work, or override runtime safety. |
37
+ | Student | Act as the independent validator: approve/veto the phase plan, review failure evidence, and approve/reject finish. The implementation may be a model or the deterministic contract/evidence engine. | Cannot call tools, approve its own work, or override runtime safety. |
35
38
  | Supervisor | Execute the approved phase with the existing browser, shell, file, canvas, and wrapper tools. | Cannot replace the strategic plan without student review. |
36
39
 
37
40
  The runtime remains the real authority for command policy, filesystem guardrails, secret redaction, session persistence, and user interruption.
@@ -45,10 +48,12 @@ When SCS is active:
45
48
  - The normal `createPlan()` path is replaced by a committee draft plus student approval.
46
49
  - An approved supervisor instruction is injected into the execution loop.
47
50
  - Failed, blocked, suspicious, or mismatched tools trigger a bounded student validator review.
48
- - Every fourth execution step triggers a bounded progress review for long runs.
51
+ - Every fourth execution step triggers a bounded progress review for long runs. LocalLLM evaluates this directly from the runtime ledger without another inference call.
49
52
  - `finish` and assistant-content completion pass through a final student gate.
50
53
  - A deterministic task contract and evidence ledger are built under the student gate. The contract records required evidence categories such as file, command, artifact, browser, visual, git, or publish evidence. The ledger classifies recent tool and event evidence into those categories.
51
54
  - The final gate compares the contract, approved plan, executor finish claim, and evidence ledger. A model approval cannot override missing deterministic evidence for evidence-bearing tasks unless the run is reporting a real external blocker.
55
+ - Audit, handoff, and readiness reports that publish command examples are source-grounded. Nonstandard command signatures must appear in an inspected Markdown code block, successful runtime command, or authoritative help output; prose that merely mentions a product or workflow cannot validate invented CLI syntax.
56
+ - Recoverable runtime controls such as malformed-tool retries, bounded discovery caps, and repeated-read guards remain execution feedback rather than external blockers. They cannot be used to justify a false "blocked but complete" finish.
52
57
  - If the student validator rejects progress or finish, the runtime asks the committee for a new phase plan and sends that plan back through the student gate before the supervisor continues.
53
58
  - Decisions are persisted as `scs.*` events and the phase pack is saved as a session artifact.
54
59
 
@@ -59,6 +64,13 @@ The current implementation is deliberately bounded:
59
64
  - Finish rejections are capped to avoid deadlock.
60
65
  - If the monitor cannot produce strict JSON, AgInTiFlow uses a conservative fallback decision and records the parser warning.
61
66
 
67
+ `AGINTI_SCS_VALIDATION_MODE=auto` is the default. `auto` selects deterministic
68
+ validation for LocalLLM and model validation for hosted providers. Use `model`
69
+ or `deterministic` only when explicitly testing one implementation. LocalLLM
70
+ committee planning has one bounded attempt and a deterministic hard-contract
71
+ fallback, so an unavailable or slow route model cannot turn validation into a
72
+ multi-minute retry loop.
73
+
62
74
  ## Auto Mode
63
75
 
64
76
  `/scs auto` and `--scs auto` are the default for users who want cheap simple turns without losing strict validation on risky work. Auto mode activates SCS for high-risk, evidence-heavy, or long-running work. Signals include:
@@ -2,6 +2,11 @@
2
2
 
3
3
  AgInTiFlow should be trained and verified by supervising real tasks, not by trusting the agent's final summary. Each curriculum run uses a clean project under `~/ProjectsLFS/Aginti-Test/`, runs AgInTiFlow through a persistent tmux session, and verifies artifacts from outside the agent.
4
4
 
5
+ Use `scripts/supervision-ledger.js` and
6
+ `docs/supervision-campaign-ledger.md` for the machine-readable campaign record.
7
+ The Markdown homework ledger remains the compact human handoff; it does not
8
+ replace the SQLite evidence record.
9
+
5
10
  ## Verification Contract
6
11
 
7
12
  Every supervised task must end with independent checks:
@@ -0,0 +1,55 @@
1
+ # Supervision Campaign Ledger
2
+
3
+ Continuous AgInTiFlow validation uses a SQLite ledger instead of relying on a
4
+ chat transcript. The ledger records capability coverage, realistic scenarios,
5
+ individual test runs, runtime events, reusable fixes, versions, session IDs,
6
+ tmux ownership, and external evidence.
7
+
8
+ Initialize a campaign:
9
+
10
+ ```bash
11
+ node scripts/supervision-ledger.js init \
12
+ --db /path/to/campaign.sqlite \
13
+ --campaign general-capability \
14
+ --objective "Make AgInTiFlow fast, robust, and generally capable" \
15
+ --aginti-version "$(node -p \"require('./package.json').version\")"
16
+ ```
17
+
18
+ Register coverage before testing:
19
+
20
+ ```bash
21
+ node scripts/supervision-ledger.js capability \
22
+ --db /path/to/campaign.sqlite --campaign general-capability \
23
+ --id media-chain --domain media --subdomain music-video-publish \
24
+ --description "Reuse Musia, LALACHAN, and LazyEdit without rebuilding them" \
25
+ --priority 90
26
+
27
+ node scripts/supervision-ledger.js scenario \
28
+ --db /path/to/campaign.sqlite --campaign general-capability \
29
+ --id media-chain-readiness --domain media --profile auto \
30
+ --prompt-quality normal \
31
+ --prompt "Inspect the established media chain without generating or publishing." \
32
+ --expected-outputs '["media-routine-readiness.md"]' \
33
+ --validation "Verify exact routine paths, command help, artifact bytes, and zero external writes."
34
+ ```
35
+
36
+ Create, start, and finish a concrete run with `test`, `start`, `event`, and
37
+ `finish`. Record a reusable product change with `fix`. Every command is an
38
+ idempotent or append-only SQLite operation suitable for a persistent tmux
39
+ campaign.
40
+
41
+ Test registration validates that any named capability and scenario belong to
42
+ the same campaign. Finishing a test updates the test, capability, and scenario
43
+ status in one SQLite transaction, so a typo cannot silently leave the campaign
44
+ matrix stale or split across contradictory states.
45
+
46
+ Inspect current coverage:
47
+
48
+ ```bash
49
+ node scripts/supervision-ledger.js status \
50
+ --db /path/to/campaign.sqlite --campaign general-capability
51
+ ```
52
+
53
+ Do not mark a test passed from the agent's prose. Verify session events, files,
54
+ checks, external state, and side-effect boundaries first, then store those paths
55
+ in `evidence_json` and `events`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.20.203",
3
+ "version": "0.20.205",
4
4
  "type": "module",
5
5
  "description": "AgInTiFlow is a project-aware agent workspace for hybrid wet-dry R&D, hardware-aware intelligence, software automation, and industrial workflows.",
6
6
  "license": "Apache-2.0",
@@ -62,6 +62,9 @@
62
62
  "scripts/real-deepseek-capabilities.js",
63
63
  "scripts/postinstall-webapp.js",
64
64
  "scripts/seed-supervised-homework.js",
65
+ "scripts/supervision-ledger.js",
66
+ "scripts/smoke-supervision-ledger.js",
67
+ "scripts/smoke-integration-production-mount.js",
65
68
  "scripts/smoke-auxiliary-tools.js",
66
69
  "scripts/smoke-agentlink.js",
67
70
  "scripts/smoke-auth.js",
@@ -71,6 +74,7 @@
71
74
  "scripts/smoke-coding-tools.js",
72
75
  "scripts/smoke-docker-command.js",
73
76
  "scripts/smoke-dynamic-step-budget.js",
77
+ "scripts/smoke-context-budget-recovery.js",
74
78
  "scripts/smoke-execution-policy.js",
75
79
  "scripts/smoke-capabilities.js",
76
80
  "scripts/smoke-auto-update.js",
@@ -84,6 +88,7 @@
84
88
  "scripts/smoke-progressive-tool-selection.js",
85
89
  "scripts/smoke-truthful-completion.js",
86
90
  "scripts/smoke-writing-specialist-routing.js",
91
+ "scripts/eval-provider-attribution.js",
87
92
  "scripts/local-first-agent-eval.mjs",
88
93
  "scripts/fixtures/local-first-agent-eval-fixtures.mjs",
89
94
  "scripts/smoke-run-stdin.js",
@@ -118,13 +123,14 @@
118
123
  "bin": {
119
124
  "aginti": "bin/aginti-cli.js",
120
125
  "aginti-cli": "bin/aginti-cli.js",
126
+ "aginti-integration": "bin/aginti-integration.js",
121
127
  "aginti-public-research": "bin/aginti-public-research.js",
122
128
  "aginti-safe-chat": "bin/aginti-safe-chat.js"
123
129
  },
124
130
  "scripts": {
125
131
  "start": "node run.js",
126
132
  "web": "node web.js",
127
- "check": "node --check run.js && node --check web.js && node --check bin/aginti-cli.js && node --check bin/aginti-public-research.js && node --check bin/aginti-safe-chat.js && node --check src/*.js && node --check src/mcp/*.js && node --check public/*.js && node --check scripts/postinstall-webapp.js && node --check scripts/seed-supervised-homework.js && node --check scripts/eval-provider-attribution.js && node --check scripts/smoke-agentlink.js && node --check scripts/smoke-execution-policy.js && node --check scripts/smoke-math-rendering.js && node --check scripts/smoke-mcp.js && node --check scripts/smoke-public-research-wrapper.js && node --check scripts/smoke-runtime-core.js && node --check scripts/smoke-safe-chat.js && node --check scripts/smoke-web-ui.js && node --check scripts/smoke-scs-evidence-visibility.js && node --check scripts/fixtures/mcp-stdio-smoke-server.mjs",
133
+ "check": "node --check run.js && node --check web.js && node --check bin/aginti-cli.js && node --check bin/aginti-integration.js && node --check bin/aginti-public-research.js && node --check bin/aginti-safe-chat.js && node --check src/*.js && node --check src/mcp/*.js && node --check public/*.js && node --check scripts/postinstall-webapp.js && node --check scripts/seed-supervised-homework.js && node --check scripts/supervision-ledger.js && node --check scripts/smoke-supervision-ledger.js && node --check scripts/smoke-integration-production-mount.js && node --check scripts/eval-provider-attribution.js && node --check scripts/smoke-agentlink.js && node --check scripts/smoke-execution-policy.js && node --check scripts/smoke-math-rendering.js && node --check scripts/smoke-mcp.js && node --check scripts/smoke-public-research-wrapper.js && node --check scripts/smoke-runtime-core.js && node --check scripts/smoke-safe-chat.js && node --check scripts/smoke-web-ui.js && node --check scripts/smoke-scs-evidence-visibility.js && node --check scripts/fixtures/mcp-stdio-smoke-server.mjs",
128
134
  "setup:toolchain-docker": "scripts/setup-agent-toolchain-docker.sh",
129
135
  "smoke:coding-tools": "node scripts/smoke-coding-tools.js",
130
136
  "smoke:dynamic-step-budget": "node scripts/smoke-dynamic-step-budget.js",
@@ -176,10 +182,13 @@
176
182
  "real:deepseek": "node scripts/real-deepseek-capabilities.js",
177
183
  "postinstall": "node scripts/postinstall-webapp.js",
178
184
  "supervision:seed": "node scripts/seed-supervised-homework.js",
185
+ "supervision:ledger": "node scripts/supervision-ledger.js",
186
+ "smoke:supervision-ledger": "node scripts/smoke-supervision-ledger.js",
187
+ "smoke:integration-production-mount": "node scripts/smoke-integration-production-mount.js",
179
188
  "storage:migrate": "node bin/aginti-cli.js storage migrate",
180
189
  "publish:env": "node scripts/npm-publish-from-env.js publish --access public",
181
190
  "publish:env:whoami": "node scripts/npm-publish-from-env.js whoami",
182
- "test": "npm run check && npm run smoke:localllm-provider && npm run smoke:localllm-model-tiers && npm run smoke:localllm-code-routing && npm run smoke:localllm-auto-max && npm run smoke:local-resource-policy && npm run smoke:context-budget-recovery && npm run smoke:session-runtime && npm run smoke:runtime-core && npm run smoke:progressive-tools && npm run smoke:truthful-completion && npm run smoke:writing-specialist-routing && npm run eval:local-first-agent && npm run eval:provider-attribution && npm run smoke:runtime-compat && npm run smoke:autoupdate && npm run smoke:web-api && npm run smoke:math-rendering && npm run smoke:web-ui && npm run smoke:web-autostart && npm run smoke:webapp-command && npm run smoke:web-port-fallback && npm run smoke:docker-command && npm run smoke:coding-tools && npm run smoke:dynamic-step-budget && npm run smoke:execution-policy && npm run smoke:aaps-adapter && npm run smoke:auxiliary-tools && npm run smoke:perception-research && npm run smoke:deep-research && npm run smoke:public-research && npm run smoke:safe-chat && npm run smoke:auth && npm run smoke:agentlink && npm run smoke:canvas-artifacts && npm run smoke:capabilities && npm run smoke:mcp && npm run smoke:model-roles && npm run smoke:platform && npm run smoke:permission-modes && npm run smoke:skills && npm run smoke:skillmesh && npm run smoke:tmux-tools && npm run smoke:long-jobs && npm run smoke:run-stdin && npm run smoke:cli-chat && npm run smoke:inbox",
191
+ "test": "npm run check && npm run smoke:integration-production-mount && npm run smoke:localllm-provider && npm run smoke:localllm-model-tiers && npm run smoke:localllm-code-routing && npm run smoke:localllm-auto-max && npm run smoke:local-resource-policy && npm run smoke:context-budget-recovery && npm run smoke:session-runtime && npm run smoke:runtime-core && npm run smoke:progressive-tools && npm run smoke:truthful-completion && npm run smoke:writing-specialist-routing && npm run eval:local-first-agent && npm run eval:provider-attribution && npm run smoke:runtime-compat && npm run smoke:autoupdate && npm run smoke:web-api && npm run smoke:math-rendering && npm run smoke:web-ui && npm run smoke:web-autostart && npm run smoke:webapp-command && npm run smoke:web-port-fallback && npm run smoke:docker-command && npm run smoke:coding-tools && npm run smoke:dynamic-step-budget && npm run smoke:execution-policy && npm run smoke:aaps-adapter && npm run smoke:auxiliary-tools && npm run smoke:perception-research && npm run smoke:deep-research && npm run smoke:public-research && npm run smoke:safe-chat && npm run smoke:auth && npm run smoke:agentlink && npm run smoke:canvas-artifacts && npm run smoke:capabilities && npm run smoke:mcp && npm run smoke:model-roles && npm run smoke:platform && npm run smoke:permission-modes && npm run smoke:skills && npm run smoke:skillmesh && npm run smoke:supervision-ledger && npm run smoke:tmux-tools && npm run smoke:long-jobs && npm run smoke:run-stdin && npm run smoke:cli-chat && npm run smoke:inbox",
183
192
  "pack:dry-run": "npm pack --dry-run",
184
193
  "smoke:capabilities": "node scripts/smoke-capabilities.js"
185
194
  },