@lazyingart/agintiflow 0.20.255 → 0.20.257-integration.4

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 (130) hide show
  1. package/bin/aginti-document-worker-runtime-check.js +12 -0
  2. package/bin/aginti-document-worker.js +10 -0
  3. package/bin/aginti-execution-worker.js +26 -0
  4. package/bin/aginti-integration-analysis.js +7 -0
  5. package/docs/deep-research-engine.md +1 -31
  6. package/docs/model-selection.md +0 -2
  7. package/docs/runtime-modes-and-autonomy.md +0 -2
  8. package/docs/supervision-campaign-ledger.md +0 -123
  9. package/examples/document-worker/README.md +69 -0
  10. package/examples/document-worker/aginti-document-worker.service +67 -0
  11. package/examples/document-worker/document-worker.json +12 -0
  12. package/examples/document-worker/runtime-manifest.json +28 -0
  13. package/package.json +62 -14
  14. package/scripts/fixtures/integration-document-worker-smoke-fixture.js +155 -0
  15. package/scripts/github-hosted-release-environment.js +22 -0
  16. package/scripts/live-production-planner-smoke.js +70 -0
  17. package/scripts/smoke-capabilities.js +3 -28
  18. package/scripts/smoke-coding-tools.js +1 -698
  19. package/scripts/smoke-context-budget-recovery.js +42 -561
  20. package/scripts/smoke-deep-research.js +2 -216
  21. package/scripts/smoke-docker-command.js +0 -40
  22. package/scripts/smoke-dynamic-step-budget.js +3 -1010
  23. package/scripts/smoke-execution-policy.js +0 -40
  24. package/scripts/smoke-execution-runtime-bundle.js +248 -0
  25. package/scripts/smoke-execution-worker-server.js +138 -0
  26. package/scripts/smoke-execution-worker-systemd-boundary.js +545 -0
  27. package/scripts/smoke-execution-worker.js +733 -0
  28. package/scripts/smoke-integration-analysis-api-server.js +721 -0
  29. package/scripts/smoke-integration-analysis-coordinator.js +539 -0
  30. package/scripts/smoke-integration-analysis-planner.js +2336 -0
  31. package/scripts/smoke-integration-analysis-session-service.js +1741 -0
  32. package/scripts/smoke-integration-api.js +1607 -0
  33. package/scripts/smoke-integration-document-artifacts.js +303 -0
  34. package/scripts/smoke-integration-document-content.js +243 -0
  35. package/scripts/smoke-integration-document-revision.js +909 -0
  36. package/scripts/smoke-integration-document-session-broker.js +985 -0
  37. package/scripts/smoke-integration-document-worker-contract.js +197 -0
  38. package/scripts/smoke-integration-document-worker-cross-boundary.js +177 -0
  39. package/scripts/smoke-integration-document-worker-real-compile.js +125 -0
  40. package/scripts/smoke-integration-document-worker-server.js +261 -0
  41. package/scripts/smoke-integration-document-worker-service.js +175 -0
  42. package/scripts/smoke-integration-document-worker-store.js +327 -0
  43. package/scripts/smoke-integration-document-worker-systemd-boundary.js +335 -0
  44. package/scripts/smoke-integration-grounded-search.js +375 -0
  45. package/scripts/smoke-integration-production-mount.js +0 -33
  46. package/scripts/smoke-integration-retained-event-ledger-bundle.js +1 -6
  47. package/scripts/smoke-integration-retained-native-session-repository-state.js +0 -13
  48. package/scripts/smoke-integration-retained-session-state-store.js +3 -21
  49. package/scripts/smoke-integration-sandbox-profile.js +982 -0
  50. package/scripts/smoke-local-failure-recovery.js +1 -677
  51. package/scripts/smoke-model-roles.js +1 -161
  52. package/scripts/smoke-progressive-tool-selection.js +7 -970
  53. package/scripts/smoke-run-stdin.js +1 -7
  54. package/scripts/smoke-scs-evidence-visibility.js +0 -51
  55. package/scripts/smoke-tmux-tools.js +0 -20
  56. package/scripts/smoke-toolchain-docker.js +0 -10
  57. package/scripts/smoke-truthful-completion.js +0 -81
  58. package/scripts/smoke-web-api.js +0 -1
  59. package/scripts/smoke-web-port-fallback.js +3 -11
  60. package/scripts/smoke-web-ui.js +3 -8
  61. package/scripts/smoke-webapp-command.js +0 -1
  62. package/scripts/test-document-worker-fixture.js +323 -0
  63. package/skills/deep-research/SKILL.md +1 -13
  64. package/skills/word-documents/SKILL.md +0 -13
  65. package/src/agent-runner.js +278 -3517
  66. package/src/cli.js +1 -8
  67. package/src/command-policy.js +24 -1067
  68. package/src/config.js +0 -2
  69. package/src/deep-research.js +17 -153
  70. package/src/docker-sandbox.js +1 -78
  71. package/src/execution-policy.js +0 -8
  72. package/src/execution-runtime-bundle.js +639 -0
  73. package/src/execution-worker-api.js +245 -0
  74. package/src/execution-worker-client.js +960 -0
  75. package/src/execution-worker-jobs.js +399 -0
  76. package/src/execution-worker-server.js +239 -0
  77. package/src/execution-worker-systemd-boundary.js +654 -0
  78. package/src/execution-worker.js +1437 -0
  79. package/src/guardrails.js +1 -52
  80. package/src/integration-analysis-cli.js +216 -0
  81. package/src/integration-analysis-config.js +566 -0
  82. package/src/integration-analysis-coordinator.js +406 -0
  83. package/src/integration-analysis-planner.js +1957 -0
  84. package/src/integration-analysis-server.js +534 -0
  85. package/src/integration-analysis-session-service.js +4671 -0
  86. package/src/integration-analysis-state-persistence.js +17 -0
  87. package/src/integration-api.js +762 -19
  88. package/src/integration-artifacts.js +242 -7
  89. package/src/integration-auth.js +1 -1
  90. package/src/integration-cli.js +3 -15
  91. package/src/integration-core-event-projector.js +10 -0
  92. package/src/integration-document-artifacts.js +394 -0
  93. package/src/integration-document-blob-store.js +226 -0
  94. package/src/integration-document-worker-cli.js +168 -0
  95. package/src/integration-document-worker-client.js +1469 -0
  96. package/src/integration-document-worker-config.js +284 -0
  97. package/src/integration-document-worker-contract.js +663 -0
  98. package/src/integration-document-worker-requirements.js +119 -0
  99. package/src/integration-document-worker-runtime.js +199 -0
  100. package/src/integration-document-worker-server.js +493 -0
  101. package/src/integration-document-worker-service.js +346 -0
  102. package/src/integration-document-worker-store.js +1389 -0
  103. package/src/integration-event-ledger-store.js +2 -2
  104. package/src/integration-events.js +12 -2
  105. package/src/integration-explicit-python.js +225 -0
  106. package/src/integration-expression-plot.js +361 -0
  107. package/src/integration-grounded-search.js +677 -0
  108. package/src/integration-idempotency-store.js +87 -6
  109. package/src/integration-policy.js +71 -5
  110. package/src/integration-tex-compiler.js +654 -0
  111. package/src/local-failure-recovery.js +18 -71
  112. package/src/model-client.js +10 -218
  113. package/src/permission-advice.js +1 -232
  114. package/src/progressive-tool-selection.js +14 -234
  115. package/src/redaction.js +2 -23
  116. package/src/research-routing.js +9 -100
  117. package/src/scs-controller.js +1 -2
  118. package/src/scs-evidence.js +20 -158
  119. package/src/step-budget-controller.js +2 -20
  120. package/src/task-profiles.js +1 -1
  121. package/src/tool-contract.js +5 -84
  122. package/scripts/smoke-document-artifact-quality.js +0 -144
  123. package/scripts/smoke-integration-production-runtime-bundle.js +0 -435
  124. package/scripts/smoke-integration-retained-idempotency-store.js +0 -938
  125. package/scripts/smoke-planning-timeout-recovery.js +0 -572
  126. package/scripts/smoke-workspace-secret-false-positive.js +0 -91
  127. package/src/document-artifact-quality.js +0 -606
  128. package/src/integration-production-runtime-bundle.js +0 -996
  129. package/src/integration-retained-idempotency-store.js +0 -2029
  130. package/src/provider-handoff.js +0 -126
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { verifyIntegrationDocumentWorkerNodeRuntime } from "../src/integration-document-worker-runtime.js";
3
+
4
+ if (process.argv.length !== 2) {
5
+ process.stderr.write("aginti-document-worker-runtime-check: RUNTIME_IDENTITY_INVALID\n");
6
+ process.exitCode = 1;
7
+ } else {
8
+ verifyIntegrationDocumentWorkerNodeRuntime().catch(() => {
9
+ process.stderr.write("aginti-document-worker-runtime-check: RUNTIME_IDENTITY_INVALID\n");
10
+ process.exitCode = 1;
11
+ });
12
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ main,
4
+ safeIntegrationDocumentWorkerCliError,
5
+ } from "../src/integration-document-worker-cli.js";
6
+
7
+ main().catch((error) => {
8
+ process.stderr.write(`aginti-document-worker: ${safeIntegrationDocumentWorkerCliError(error)}\n`);
9
+ process.exitCode = 1;
10
+ });
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ createProductionExecutionWorkerServer,
4
+ installExecutionWorkerShutdownHandlers,
5
+ loadExecutionWorkerServerConfig,
6
+ } from "../src/execution-worker-server.js";
7
+
8
+ try {
9
+ const config = await loadExecutionWorkerServerConfig();
10
+ const runtime = await createProductionExecutionWorkerServer({ config });
11
+ installExecutionWorkerShutdownHandlers(runtime.server);
12
+ console.log(JSON.stringify({
13
+ ok: true,
14
+ service: "aginti-execution-worker",
15
+ workerId: config.workerId,
16
+ runtimeBundleRootDigest: config.runtimeBundleRootDigest,
17
+ listener: runtime.address,
18
+ }));
19
+ } catch (error) {
20
+ console.error(JSON.stringify({
21
+ ok: false,
22
+ service: "aginti-execution-worker",
23
+ code: typeof error?.code === "string" ? error.code : "EXECUTION_WORKER_START_FAILED",
24
+ }));
25
+ process.exitCode = 1;
26
+ }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { main, safeIntegrationAnalysisCliError } from "../src/integration-analysis-cli.js";
3
+
4
+ main().catch((error) => {
5
+ process.stderr.write(`aginti-integration-analysis: ${safeIntegrationAnalysisCliError(error)}\n`);
6
+ process.exitCode = 1;
7
+ });
@@ -10,15 +10,6 @@ Simple questions should stay on the fast path. A deep-research run spends more
10
10
  queries and model calls only when breadth, verification, and traceability add
11
11
  real value.
12
12
 
13
- For a request that combines local workspace evidence with web research, the
14
- outer agent first receives normal inspection tools. After it has read two
15
- relevant files, or read one file plus inspected/searched the project, the next
16
- research turn is constrained to `deep_research` and `finish`. This keeps local
17
- notes authoritative without letting an agent silently replace a requested
18
- multi-source review with ad hoc browsing. Tool history is scoped to the newest
19
- genuine user request, so a completed research call from an older task does not
20
- suppress a later correction or refresh.
21
-
22
13
  ## Architecture
23
14
 
24
15
  The implementation follows the strongest production patterns without making
@@ -44,11 +35,6 @@ every query an unbounded agent swarm:
44
35
  paper set erase the requested source class. Search snippets can guide
45
36
  discovery, but they cannot satisfy verified first-party coverage or enter
46
37
  synthesis as cited evidence.
47
- Phrases such as “official Temporal docs” retain this requirement even when a
48
- product name occurs between `official` and `docs`. Product-owned root pages
49
- and vendor blogs are classified using the named discovery route; unrelated
50
- third-party pages are not promoted merely because their URL repeats one
51
- query word.
52
38
  Canonical duplicates found by multiple providers are promoted and retain
53
39
  per-provider rank evidence. Multi-domain corpora receive separate bounded `site:`
54
40
  queries matched to entity-specific subquestions instead of one fragile OR
@@ -113,10 +99,6 @@ every query an unbounded agent swarm:
113
99
  rather than arbitrary page text. Every substantive paragraph and finding
114
100
  cites exact evidence IDs instead of merely naming a source. A failed main
115
101
  synthesis gets one same-provider fast-model fallback.
116
- A request for practical recommendations becomes a completion obligation:
117
- every recommendation must cite verified evidence, and the run fails closed
118
- rather than delivering an unsupported advice section. The renderer uses the
119
- compact research objective instead of dumping the raw task prompt.
120
102
  9. **Audit**: deterministic code removes unknown or unverified evidence IDs,
121
103
  derives visible source citations from accepted evidence records, removes
122
104
  unsupported synthesis statements, then reports claim, quotation, citation,
@@ -128,13 +110,6 @@ every query an unbounded agent swarm:
128
110
  guarded workspace-relative `outputPath` when the caller requests a durable
129
111
  filename, then sent to the canvas.
130
112
 
131
- The reader-facing report always includes an explicit limitations section and
132
- separates quote-verified sources from inspected-but-uncited pages. When the
133
- original request asks for reproducibility or exact quotations, deterministic
134
- rendering adds a verification procedure, retrieval timestamps and SHA-256
135
- digests, and a verified-evidence appendix. These sections come from the
136
- retrieval/evidence ledger, not model memory.
137
-
138
113
  This combines the orchestrator/worker and separate citation-pass lessons
139
114
  described by [Anthropic's production research
140
115
  system](https://www.anthropic.com/engineering/multi-agent-research-system)
@@ -161,8 +136,6 @@ the authoritative original user goal. A planner may shorten the research
161
136
  question, but cannot silently drop requirements such as “compare at least three
162
137
  independent primary sources,” “read a paper/PDF when available,” or “include
163
138
  negative evidence.” These requirements are fingerprinted and checkpointed.
164
- The same contract covers practical recommendations, reproducible verification
165
- methods, and exact-quote evidence appendices.
166
139
 
167
140
  Planning and evidence extraction deliberately use the configured routing model
168
141
  when it belongs to a hosted active provider. Synthesis uses the configured main
@@ -214,10 +187,7 @@ To resume a partial or completed same-query run, pass the returned
214
187
  `refresh=true` is explicit. A transient run that retrieved zero allowed sources
215
188
  is marked failed, preserves its attempts, and retries retrieval on resume
216
189
  instead of caching an empty report as success. Checkpoint schema changes
217
- invalidate old cached runs automatically. The public tool result also carries
218
- the research schema version; the outer session reuses a completed result only
219
- when that version matches the installed engine. Versionless or older retained
220
- results are refreshed instead of being presented as current evidence.
190
+ invalidate old cached runs automatically.
221
191
 
222
192
  `outputPath` is optional and must name a Markdown file inside the active
223
193
  workspace. Repository internals such as `.git`, dependency trees such as
@@ -26,8 +26,6 @@ The local tier policy uses the workstation's installed aliases without treating
26
26
 
27
27
  Installed aliases are not loaded during routing. A genuine coding/implementation request starts on Deep, checks the authenticated model inventory, and selects the exact `AGINTI_LOCALLLM_CODE_MODEL` value only when present. Missing or unverified capability stays on Deep; the decision and effective model are recorded so fallback sessions can re-evaluate and selected sessions resume on the same model. Explanation-only code questions and non-code writing/research/documentation/design keep their existing route. Automatic Max is off by default; set `AGINTI_LOCALLLM_ALLOW_AUTO_MAX=true` to opt in. An opted-in high-complexity non-code run starts on Deep, confirms the Max alias through authenticated `/v1/models`, and only then samples current resources. Unknown or pressured resource state stays on Deep. Explicit Max also cannot bypass the live gate: immediately before client creation, each new or resumed run rechecks at least 24 GiB available RAM, swap use at or below 75%, and 40 GiB aggregate free NVIDIA memory. A blocked explicit gate creates no model client and performs no inference.
28
28
 
29
- Smart hosted routes fail over only toward the local trust boundary. If a hosted provider returns an authentication, quota, rate-limit, model-availability, capacity, or network failure, AgInTiFlow records `provider.handoff_requested`, patches the same durable session to `localllm-deep`, verifies LocalLLM readiness, records `provider.handoff_activated`, and continues without replaying the user request or prior side effects. Manual routing remains exact and never changes provider automatically. Retained integration profiles also keep their pinned provider identity. Set `AGINTI_PROVIDER_HANDOFF=false` to disable the smart hosted-to-local handoff or `AGINTI_PROVIDER_HANDOFF_MODEL` to select another verified local fallback model.
30
-
31
29
  Long writing tasks use an additional tool boundary: `writing_specialist`. The main model still plans the run, manages files, formats Markdown/LaTeX/Final Draft output, compiles/checks artifacts, and finishes. The specialist gets only the writing brief, canon, style guide, prior draft, target, audience, constraints, and format intent, then returns prose plus a formatter handoff. It follows the active LocalLLM provider by default even when hosted keys exist. Cross-provider writing requires both an explicit target (`AGINTI_WRITING_PROVIDER` or a per-run provider override) and `AGINTI_ALLOW_HOSTED_WRITING_SPECIALIST=true` (or the equivalent per-run permission flag); language detection and ambient credentials never grant that permission.
32
30
 
33
31
  ## CLI Commands
@@ -73,8 +73,6 @@ Current contract:
73
73
  - `danger` is trusted host/full-access mode: host shell, destructive actions, host installs, password typing, and outside-workspace file paths are enabled. Use it only for tasks you trust; obvious secret/publish exfiltration guards remain hard stops.
74
74
  - Workspace file tools may read and write inside the configured project folder when file tools are enabled.
75
75
  - Narrow workspace-local shell actions such as safe probes, Gradle/TeX builds, and `chmod +x` on a project script may run when the command policy can classify them precisely.
76
- - Finite literal read-only audits may bind a small literal path, inspect/hash it, count matches through a bounded read-only pipeline, summarize stdin with `sort | uniq -c`, and display numeric results with `echo` or `printf` without asking for destructive permission. Shell line continuations are accepted for finite literal item lists. Every producer, consumer, and surrounding command must still classify as bounded read-only work; network access, redirects, output-file operands, secret/dynamic expansion, shell-state `printf -v`, mutation, dynamic item lists, and computed values used as executable arguments remain blocked.
77
- - Completion checks distinguish a resolved historical state such as "previously paused" from work that is currently pending or incomplete. A resolved past blocker therefore does not force another verification loop, while any explicit current unfinished state still does.
78
76
  - Android/JVM toolchain commands may include safe local env assignments such as `ANDROID_HOME`, `ANDROID_SDK_ROOT`, `JAVA_HOME`, or `GRADLE_USER_HOME`, plus small workspace-local status-log redirects. Secret-like env vars and redirects outside the workspace remain blocked.
79
77
  - Workspace writes outside that folder, secret paths, `.git` internals, and dependency folders such as `node_modules` are blocked.
80
78
  - `git clone`, `git fetch`, `git pull --ff-only`, `git push`, `curl`, and `wget` are classified as network operations.
@@ -285,126 +285,3 @@ external semantic and repository-state contract passed at target commit
285
285
  `f19ff4b`. No AgInTiFlow source change or task-specific prompt branch was
286
286
  needed; the run validates the generic inbox, context, evidence, and completion
287
287
  contracts in the published package.
288
-
289
- ### LabCanvas least-privilege worker integration
290
-
291
- `labcanvas-worker-permission-018` validated the installed AgInTiFlow `0.20.217`
292
- through LabCanvas after a real WeCom research task paused at
293
- `permission_required`. The defect was in the integration boundary: LabCanvas
294
- unconditionally selected AgInTi's blocked package-install tier, which also
295
- blocked ordinary workspace shell execution. LabCanvas now keeps response-only
296
- roles blocked while granting genuine worker roles reversible package setup
297
- inside the Docker workspace. Host access, credentials, payment, publication,
298
- destructive operations, and other irreversible actions remain separately
299
- guarded.
300
-
301
- A direct DeepSeek-backed worker smoke created and validated a bounded workspace
302
- artifact without a permission prompt. Focused backend regressions, all WeChat
303
- self-checks, the complete 1,442-test LabCanvas suite, and GitHub Actions passed.
304
- The originally blocked exact-chat task was then resumed without duplicate model
305
- work, produced a visually inspected nine-page XeLaTeX research report, and
306
- delivered one concise message plus the PDF through the verified WeCom transport.
307
- The follow-up message was preserved in the same chat session. The reusable fix
308
- is AgenticApp commit `e705bb0`; no AgInTiFlow release change was required.
309
-
310
- ### Durable background-job recovery after foreground interruption
311
-
312
- `long-job-recovery-019` exercised installed AgInTiFlow `0.20.217` with a normal
313
- laboratory-export request whose terminal could disconnect. The DeepSeek-backed
314
- agent inspected the checked-in resumable scripts, rejected duplicate execution,
315
- and selected the generic `start_long_job` routine. The campaign interrupted only
316
- the foreground AgInTi pane after durable admission; the independent job tmux
317
- continued, completed eight delayed batches, ran deferred verification, and
318
- cleaned up its own tmux session.
319
-
320
- The same AgInTi session then resumed from retained state. It recovered the exact
321
- job ID through `long_job_status`, independently reran the project verifier,
322
- confirmed the artifact and checksum, and finished without calling
323
- `start_long_job` again. Proactive context compaction reduced the resumed history
324
- from 190,805 to 30,680 characters while preserving the job identity and original
325
- task boundary.
326
-
327
- The independent acceptance contract verified one process invocation, one durable
328
- job directory, attempt `1`, command and verifier exit `0`, the required durable
329
- event sequence, a project handoff with exact status and verification commands,
330
- and no lingering job tmux session. No source patch or npm release was needed;
331
- this run validates the published package's general long-job, resume, context,
332
- deduplication, and cleanup contracts without task-specific routing.
333
-
334
- ### Host-managed response roles and permission integrity
335
-
336
- `permission-resilient-synthesis-030` traced a real LabCanvas career-report
337
- failure to the integration boundary rather than weakening AgInTiFlow's
338
- permission guard. LabCanvas invoked the host-managed report under the role
339
- `career_research`, while its response-only classifier recognized only the older
340
- `career_daily` alias. The model was consequently offered file tools in a safe,
341
- read-only run; when it tried to save its already synthesized report,
342
- AgInTiFlow correctly persisted a `permission_required` pause.
343
-
344
- LabCanvas now classifies the full `career-research-*` and
345
- `daily-organizer-*` role families as host-managed response turns. Those turns
346
- use AgInTi's `chatops` profile with shell, file, and auxiliary tools disabled;
347
- the host owns persistence, compilation, quality validation, and delivery.
348
- General worker roles retain their existing writable Docker contract, and safe
349
- mode still blocks genuine unapproved writes.
350
-
351
- A fresh installed `0.20.248` DeepSeek run completed the imperfect synthesis
352
- prompt in one model turn. Independent event inspection found zero tool calls,
353
- zero permission events, one normal `session.finished`, a complete 1,893-byte
354
- answer, and no task artifact mutation. This was an AgenticApp integration fix;
355
- no AgInTiFlow runtime or npm release change was required.
356
-
357
- ### Reader-facing report quality and local editorial routing
358
-
359
- `research-pdf-quality-034` exercised a normal scheduled-research packet through
360
- the AgInTi-backed LabCanvas worker. DeepSeek revised an existing local report
361
- into a 17,557-byte Chinese scientific review with nine traceable sources,
362
- source-level methods/results/limitations, cross-source synthesis and tensions,
363
- explicit evidence boundaries, actionable experiments, and references. The
364
- first host compile exposed a nearly empty final page, and the prior agent repair
365
- claimed success without changing the source.
366
-
367
- LabCanvas now treats the PDF as a different deliverable from the concise chat
368
- brief. It audits every configured content dimension, keeps orchestration
369
- provenance out of the reader document, extracts text per page, renders private
370
- page previews, rejects orphan pages, retries one conservative compact layout,
371
- rebuilds stale sibling PDFs, and can deterministically adopt a corrected
372
- host-built PDF during stored-result repair. The accepted four-page PDF has
373
- embedded CJK fonts, page body counts `1584, 1988, 1416, 2058`, and no visual or
374
- layout issues. Stored replay covered every task item with no model rerun or
375
- external write.
376
-
377
- The scenario also exposed two general AgInTi routing false positives. Explicit
378
- local report paths and existing-document revision language now count as local
379
- workspace intent, so surrounding research policy does not force a new deep
380
- research route. The phrase `page-safe` no longer creates a browser-evidence
381
- requirement. Focused routing/evidence smokes and the full npm suite pass.
382
-
383
- ### Fresh current-turn command evidence on retained sessions
384
-
385
- `security-labshare-035` exercised a long-lived LocalLLM security-repair
386
- session after the target repository was already fixed, committed, and clean.
387
- The follow-up prompt deliberately asked the agent not to edit or recommit. It
388
- required only the exact hidden verifier and `git status --short`, while allowing
389
- all other passing implementation and unit-test evidence to remain reusable.
390
-
391
- Installed AgInTiFlow `0.20.250` incorrectly finished after `inspect_project`.
392
- It reused the old verifier/status evidence and never executed either command in
393
- the current turn. The defect was not model quality: the runtime had failed to
394
- turn explicit commands in a concrete same-task interruption into a fresh,
395
- revision-bound evidence obligation.
396
-
397
- The runtime now records explicit current-turn commands in the active execution
398
- contract and creates a fresh command batch for only that subset. Unrelated
399
- passing evidence from the unchanged mutation revision remains valid, while old
400
- runs of the newly requested commands cannot pre-complete the batch. Inline
401
- command extraction also recognizes natural `verify`, `validate`, `check`,
402
- `confirm`, and rerun wording in English and Chinese.
403
-
404
- The same real session was replayed against the patched source at goal revision
405
- `34`. Its event ledger records both commands under
406
- `required-command-batch-3`: the exact external security contract returned
407
- `security_labshare_contract: PASS`, and `git status --short` returned empty.
408
- The target stayed at commit `2b35928` with no mutation. Focused planning,
409
- truthful-completion, and dynamic-budget regressions pass, as does the complete
410
- AgInTiFlow npm suite. The fix is released in AgInTiFlow `0.20.251`.
@@ -0,0 +1,69 @@
1
+ # Workstation document worker example
2
+
3
+ This example is deployment input, not an installed service. It deliberately
4
+ starts in the read/delete rollback floor with `creation.enabled=false`.
5
+ Readiness, staged-receipt commit, content reads, and two-phase delete remain
6
+ available; only new compile requests return `WORKER_CREATION_DISABLED` (503).
7
+
8
+ The fixed application listener is `127.0.0.1:18102`. LazyEdge is the only
9
+ intended caller and injects the distinct upstream application bearer. Store the
10
+ same bare upstream capability in a protected LazyEdge worker binding file and
11
+ in the root-owned, mode `0400`, non-symlink systemd credential source:
12
+
13
+ `/etc/agintiflow/credentials/document-worker-upstream-token`
14
+
15
+ The service receives it only through systemd at:
16
+
17
+ `/run/credentials/aginti-document-worker.service/document-worker-upstream-token`
18
+
19
+ Do not put that value in the JSON config, an environment variable, an argument,
20
+ logs, documentation, or Git. The dedicated `aginti-document-worker` user/group,
21
+ selected release path, config, and credential must be created by a reviewed
22
+ deployment step; this example does not create them. Before installing the unit,
23
+ deployment must replace `RELEASE_SHA256` with the exact lowercase SHA-256 release
24
+ identifier. No mutable `current` entry is permitted beside `releases` and
25
+ `runtimes` under `/opt/agintiflow-document-worker`.
26
+ The root-only installer creates the mode `0755` `releases` child and performs
27
+ each no-replace release rename inside that child; the application root itself
28
+ can remain frozen at mode `0555` throughout staging.
29
+
30
+ The unit never executes the workstation's `/usr/bin/node` or a user-owned Node
31
+ path. A reviewed root bootstrap first verifies the versioned Node 22.21.0
32
+ source, then installs the exact binary at the immutable `/opt` path recorded in
33
+ `runtime-manifest.json`. The binary and its four application runtime
34
+ directories are all `root:root` mode `0555`; `/` and `/opt` remain `root:root`
35
+ mode `0755`. `ProtectHome=tmpfs` therefore needs no home-directory exception.
36
+ Before enable, deployment must verify the version, SHA-256, ownership, mode,
37
+ size, ancestry, and exact runtime inventories, then run both the CLI check and
38
+ real bwrap/latexmk/qpdf activation canary under the installed unit.
39
+ Both `ExecStartPre` checks and `ExecStart` use that same immutable Node. The
40
+ worker repeats the no-follow identity, hash, stable-ancestry, and inventory
41
+ checks after exec and fails unless it is running from that exact path as the
42
+ non-root service user/group. Thus a later automatic restart does not trust
43
+ deployment-time evidence alone.
44
+ The second `ExecStartPre` is the exact in-unit `check`: it runs one bounded,
45
+ network-isolated LaTeX/qpdf canary even while `creation.enabled=false`. Its
46
+ success is deployment evidence only; live readiness still advertises
47
+ `compiler:null`, and the compile endpoint remains disabled. The probe never
48
+ stages or commits worker-store objects, removes its private temporary tree, and
49
+ zeroes its process-local artifact buffers before returning.
50
+ The exact installed candidate unit must complete `aginti-document-worker check`
51
+ successfully before LazyEdge route activation, AgInTi broker activation, or Web
52
+ exposure is allowed; static unit verification is not a substitute for that
53
+ namespace and compiler activation proof.
54
+
55
+ LazyEdge permits two concurrent requests and the worker admits at most two
56
+ compiler processes; at most four additional compiles remain in a bounded
57
+ in-process queue and excess admission fails retryably.
58
+ The private ledger also enforces fixed group/directory bounds, per-source and
59
+ per-PDF limits, and an 8 GiB aggregate live-object ceiling; quota exhaustion
60
+ does not disable existing reads or two-phase deletion.
61
+ Each compiler process has a 30-second wall limit. The 120-second private-route
62
+ timeout is intentionally longer so queueing, forced cleanup, and a structured
63
+ failure response retain transport headroom.
64
+
65
+ The TeX compiler uses bubblewrap namespaces. Therefore the unit intentionally
66
+ does not use `RestrictNamespaces=true`; it denies only time namespaces. Every
67
+ candidate unit must run the real bwrap/latexmk/qpdf activation canary under the
68
+ installed unit before creation is enabled. A hash-only executable check is not
69
+ an activation proof.
@@ -0,0 +1,67 @@
1
+ [Unit]
2
+ Description=AgInTi workstation document artifact worker
3
+ Documentation=https://flow.lazying.art
4
+ After=local-fs.target
5
+
6
+ [Service]
7
+ Type=simple
8
+ User=aginti-document-worker
9
+ Group=aginti-document-worker
10
+ UMask=0077
11
+ Environment=PATH=/usr/sbin:/usr/bin:/sbin:/bin
12
+ WorkingDirectory=/var/lib/aginti-document-worker
13
+ ExecStartPre=/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85/bin/node /opt/agintiflow-document-worker/releases/RELEASE_SHA256/bin/aginti-document-worker-runtime-check.js
14
+ ExecStartPre=/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85/bin/node /opt/agintiflow-document-worker/releases/RELEASE_SHA256/bin/aginti-document-worker.js check --config /etc/agintiflow/document-worker.json
15
+ ExecStart=/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85/bin/node /opt/agintiflow-document-worker/releases/RELEASE_SHA256/bin/aginti-document-worker.js serve --config /etc/agintiflow/document-worker.json
16
+ LoadCredential=document-worker-upstream-token:/etc/agintiflow/credentials/document-worker-upstream-token
17
+ StateDirectory=aginti-document-worker
18
+ StateDirectoryMode=0700
19
+ RuntimeDirectory=aginti-document-worker
20
+ RuntimeDirectoryMode=0700
21
+ Restart=on-failure
22
+ RestartSec=2s
23
+ TimeoutStartSec=60s
24
+ TimeoutStopSec=15s
25
+ KillMode=mixed
26
+ KillSignal=SIGTERM
27
+ NoNewPrivileges=yes
28
+ PrivateTmp=yes
29
+ PrivateDevices=yes
30
+ PrivateIPC=yes
31
+ ProtectSystem=strict
32
+ ProtectHome=tmpfs
33
+ ProtectKernelTunables=yes
34
+ ProtectKernelModules=yes
35
+ ProtectKernelLogs=yes
36
+ ProtectClock=yes
37
+ ProtectControlGroups=yes
38
+ ProtectHostname=yes
39
+ ProtectProc=invisible
40
+ ProcSubset=pid
41
+ RestrictAddressFamilies=AF_UNIX AF_INET AF_NETLINK
42
+ RestrictNamespaces=~time
43
+ RestrictRealtime=yes
44
+ RestrictSUIDSGID=yes
45
+ LockPersonality=yes
46
+ SystemCallArchitectures=native
47
+ CapabilityBoundingSet=
48
+ AmbientCapabilities=
49
+ IPAddressDeny=any
50
+ IPAddressAllow=localhost
51
+ SocketBindDeny=any
52
+ SocketBindAllow=tcp:18102
53
+ ReadOnlyPaths=/etc/agintiflow/document-worker.json
54
+ InaccessiblePaths=/etc/agintiflow/credentials
55
+ InaccessiblePaths=/var/lib/lazyedge
56
+ InaccessiblePaths=/var/lib/agintiflow-integration
57
+ MemoryMax=1610612736
58
+ MemorySwapMax=0
59
+ TasksMax=64
60
+ CPUQuota=200%
61
+ CPUQuotaPeriodSec=100ms
62
+ LimitNOFILE=512
63
+ LimitCORE=0
64
+ OOMPolicy=kill
65
+
66
+ [Install]
67
+ WantedBy=multi-user.target
@@ -0,0 +1,12 @@
1
+ {
2
+ "schemaVersion": "aginti-document-worker-service-config-v1",
3
+ "listen": {
4
+ "host": "127.0.0.1",
5
+ "port": 18102
6
+ },
7
+ "stateRoot": "/var/lib/aginti-document-worker",
8
+ "creation": {
9
+ "enabled": false,
10
+ "maximumConcurrentCompiles": 2
11
+ }
12
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "schemaVersion": "aginti-document-worker-runtime-manifest-v1",
3
+ "node": {
4
+ "path": "/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85/bin/node",
5
+ "version": "v22.21.0",
6
+ "sha256": "29e9c28204d89d85cc426b518b4a7c6e32aafecd5e447d65301ffb2c1c15335a",
7
+ "owner": "root",
8
+ "group": "root",
9
+ "mode": "0555",
10
+ "size": 123351032,
11
+ "unitMount": "none"
12
+ },
13
+ "immutableAncestry": {
14
+ "owner": "root",
15
+ "group": "root",
16
+ "mode": "0555",
17
+ "applicationRootEntries": [
18
+ "releases",
19
+ "runtimes"
20
+ ],
21
+ "paths": [
22
+ "/opt/agintiflow-document-worker",
23
+ "/opt/agintiflow-document-worker/runtimes",
24
+ "/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85",
25
+ "/opt/agintiflow-document-worker/runtimes/node-v22.21.0-29e9c28204d89d85/bin"
26
+ ]
27
+ }
28
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.20.255",
3
+ "version": "0.20.257-integration.4",
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",
@@ -31,6 +31,12 @@
31
31
  "access": "public"
32
32
  },
33
33
  "exports": {
34
+ "./document-worker": "./src/integration-document-worker-service.js",
35
+ "./document-worker/config": "./src/integration-document-worker-config.js",
36
+ "./document-worker/contract": "./src/integration-document-worker-contract.js",
37
+ "./document-worker/server": "./src/integration-document-worker-server.js",
38
+ "./document-worker/store": "./src/integration-document-worker-store.js",
39
+ "./document-worker/runtime": "./src/integration-document-worker-runtime.js",
34
40
  "./public-research": "./src/public-research-wrapper.js",
35
41
  "./public-research/server": "./src/public-research-server.js",
36
42
  "./safe-chat": "./src/safe-chat-wrapper.js",
@@ -46,6 +52,7 @@
46
52
  "bin/",
47
53
  "docs/",
48
54
  "docker/",
55
+ "examples/document-worker/",
49
56
  "demos/agintiflow-cli-launch.jpg",
50
57
  "demos/agintiflow-web-console-run-output.jpg",
51
58
  "i18n/",
@@ -66,8 +73,6 @@
66
73
  "scripts/supervision-ledger.js",
67
74
  "scripts/smoke-supervision-ledger.js",
68
75
  "scripts/smoke-integration-production-mount.js",
69
- "scripts/smoke-integration-production-runtime-bundle.js",
70
- "scripts/smoke-integration-retained-idempotency-store.js",
71
76
  "scripts/smoke-integration-storage-authority.js",
72
77
  "scripts/smoke-integration-retained-durable-common.js",
73
78
  "scripts/smoke-integration-retained-file-lock.js",
@@ -81,6 +86,32 @@
81
86
  "scripts/smoke-integration-retained-runtime-repository-phase-b.js",
82
87
  "scripts/smoke-integration-runtime-repository-contract.js",
83
88
  "scripts/smoke-integration-runtime-authority.js",
89
+ "scripts/smoke-integration-api.js",
90
+ "scripts/smoke-integration-sandbox-profile.js",
91
+ "scripts/smoke-execution-worker.js",
92
+ "scripts/smoke-execution-runtime-bundle.js",
93
+ "scripts/smoke-execution-worker-server.js",
94
+ "scripts/smoke-execution-worker-systemd-boundary.js",
95
+ "scripts/smoke-integration-analysis-coordinator.js",
96
+ "scripts/smoke-integration-document-artifacts.js",
97
+ "scripts/smoke-integration-document-content.js",
98
+ "scripts/smoke-integration-document-revision.js",
99
+ "scripts/smoke-integration-document-session-broker.js",
100
+ "scripts/smoke-integration-document-worker-contract.js",
101
+ "scripts/smoke-integration-document-worker-store.js",
102
+ "scripts/smoke-integration-document-worker-service.js",
103
+ "scripts/smoke-integration-document-worker-server.js",
104
+ "scripts/github-hosted-release-environment.js",
105
+ "scripts/smoke-integration-document-worker-systemd-boundary.js",
106
+ "scripts/smoke-integration-document-worker-real-compile.js",
107
+ "scripts/smoke-integration-document-worker-cross-boundary.js",
108
+ "scripts/test-document-worker-fixture.js",
109
+ "scripts/fixtures/integration-document-worker-smoke-fixture.js",
110
+ "scripts/smoke-integration-grounded-search.js",
111
+ "scripts/smoke-integration-analysis-planner.js",
112
+ "scripts/smoke-integration-analysis-session-service.js",
113
+ "scripts/smoke-integration-analysis-api-server.js",
114
+ "scripts/live-production-planner-smoke.js",
84
115
  "scripts/smoke-auxiliary-tools.js",
85
116
  "scripts/smoke-agentlink.js",
86
117
  "scripts/smoke-auth.js",
@@ -99,15 +130,12 @@
99
130
  "scripts/smoke-localllm-auto-max.js",
100
131
  "scripts/smoke-localllm-code-routing.js",
101
132
  "scripts/smoke-local-failure-recovery.js",
102
- "scripts/smoke-planning-timeout-recovery.js",
103
133
  "scripts/smoke-local-resource-policy.js",
104
134
  "scripts/smoke-localllm-model-tiers.js",
105
135
  "scripts/smoke-localllm-provider.js",
106
136
  "scripts/smoke-progressive-tool-selection.js",
107
137
  "scripts/smoke-truthful-completion.js",
108
- "scripts/smoke-document-artifact-quality.js",
109
138
  "scripts/smoke-writing-specialist-routing.js",
110
- "scripts/smoke-workspace-secret-false-positive.js",
111
139
  "scripts/eval-provider-attribution.js",
112
140
  "scripts/local-first-agent-eval.mjs",
113
141
  "scripts/fixtures/local-first-agent-eval-fixtures.mjs",
@@ -143,7 +171,10 @@
143
171
  "bin": {
144
172
  "aginti": "bin/aginti-cli.js",
145
173
  "aginti-cli": "bin/aginti-cli.js",
174
+ "aginti-execution-worker": "bin/aginti-execution-worker.js",
175
+ "aginti-document-worker": "bin/aginti-document-worker.js",
146
176
  "aginti-integration": "bin/aginti-integration.js",
177
+ "aginti-integration-analysis": "bin/aginti-integration-analysis.js",
147
178
  "aginti-public-research": "bin/aginti-public-research.js",
148
179
  "aginti-safe-chat": "bin/aginti-safe-chat.js"
149
180
  },
@@ -173,17 +204,13 @@
173
204
  "smoke:localllm-auto-max": "node scripts/smoke-localllm-auto-max.js",
174
205
  "smoke:localllm-code-routing": "node scripts/smoke-localllm-code-routing.js",
175
206
  "smoke:local-failure-recovery": "node scripts/smoke-local-failure-recovery.js",
176
- "smoke:planning-timeout-recovery": "node scripts/smoke-planning-timeout-recovery.js",
177
- "smoke:provider-handoff": "node scripts/smoke-provider-handoff.js",
178
207
  "smoke:local-resource-policy": "node scripts/smoke-local-resource-policy.js",
179
208
  "smoke:context-budget-recovery": "node scripts/smoke-context-budget-recovery.js",
180
209
  "smoke:localllm-model-tiers": "node scripts/smoke-localllm-model-tiers.js",
181
210
  "smoke:localllm-provider": "node scripts/smoke-localllm-provider.js",
182
211
  "smoke:progressive-tools": "node scripts/smoke-progressive-tool-selection.js",
183
212
  "smoke:truthful-completion": "node scripts/smoke-truthful-completion.js",
184
- "smoke:document-artifact-quality": "node scripts/smoke-document-artifact-quality.js",
185
213
  "smoke:writing-specialist-routing": "node scripts/smoke-writing-specialist-routing.js",
186
- "smoke:workspace-secret-false-positive": "node scripts/smoke-workspace-secret-false-positive.js",
187
214
  "smoke:mcp": "node scripts/smoke-mcp.js",
188
215
  "smoke:model-roles": "node scripts/smoke-model-roles.js",
189
216
  "smoke:platform": "node scripts/smoke-platform.js",
@@ -210,8 +237,6 @@
210
237
  "supervision:ledger": "node scripts/supervision-ledger.js",
211
238
  "smoke:supervision-ledger": "node scripts/smoke-supervision-ledger.js",
212
239
  "smoke:integration-production-mount": "node scripts/smoke-integration-production-mount.js",
213
- "smoke:integration-production-runtime-bundle": "node scripts/smoke-integration-production-runtime-bundle.js",
214
- "smoke:integration-retained-idempotency-store": "node scripts/smoke-integration-retained-idempotency-store.js",
215
240
  "smoke:integration-storage-authority": "node scripts/smoke-integration-storage-authority.js",
216
241
  "smoke:integration-retained-durable-common": "node scripts/smoke-integration-retained-durable-common.js",
217
242
  "smoke:integration-retained-file-lock": "node scripts/smoke-integration-retained-file-lock.js",
@@ -225,11 +250,34 @@
225
250
  "smoke:integration-retained-runtime-repository-phase-b": "node scripts/smoke-integration-retained-runtime-repository-phase-b.js",
226
251
  "smoke:integration-runtime-repository-contract": "node scripts/smoke-integration-runtime-repository-contract.js",
227
252
  "smoke:integration-runtime-authority": "node scripts/smoke-integration-runtime-authority.js",
253
+ "smoke:integration-api": "node scripts/smoke-integration-api.js",
254
+ "smoke:integration-sandbox-profile": "node scripts/smoke-integration-sandbox-profile.js",
255
+ "smoke:execution-worker": "node scripts/smoke-execution-worker.js",
256
+ "smoke:execution-runtime-bundle": "node scripts/smoke-execution-runtime-bundle.js",
257
+ "smoke:execution-worker-server": "node scripts/smoke-execution-worker-server.js",
258
+ "smoke:execution-worker-systemd-boundary": "node scripts/smoke-execution-worker-systemd-boundary.js",
259
+ "smoke:integration-analysis-coordinator": "node scripts/smoke-integration-analysis-coordinator.js",
260
+ "smoke:integration-document-artifacts": "node scripts/smoke-integration-document-artifacts.js",
261
+ "smoke:integration-document-content": "node scripts/smoke-integration-document-content.js",
262
+ "smoke:integration-document-revision": "node scripts/smoke-integration-document-revision.js",
263
+ "smoke:integration-document-session-broker": "node scripts/smoke-integration-document-session-broker.js",
264
+ "smoke:integration-document-worker-contract": "node scripts/smoke-integration-document-worker-contract.js",
265
+ "smoke:integration-document-worker-store": "node scripts/smoke-integration-document-worker-store.js",
266
+ "smoke:integration-document-worker-service": "node scripts/smoke-integration-document-worker-service.js",
267
+ "smoke:integration-document-worker-server": "node scripts/smoke-integration-document-worker-server.js",
268
+ "smoke:integration-document-worker-systemd-boundary": "node scripts/smoke-integration-document-worker-systemd-boundary.js",
269
+ "smoke:integration-document-worker-real-compile": "node scripts/smoke-integration-document-worker-real-compile.js",
270
+ "smoke:integration-document-worker-cross-boundary": "node scripts/smoke-integration-document-worker-cross-boundary.js .",
271
+ "test:document-worker": "npm run smoke:integration-document-worker-contract && npm run smoke:integration-document-worker-store && npm run smoke:integration-document-worker-service && npm run smoke:integration-document-worker-server && npm run smoke:integration-document-worker-systemd-boundary && npm run smoke:integration-document-worker-real-compile",
272
+ "smoke:integration-grounded-search": "node scripts/smoke-integration-grounded-search.js",
273
+ "smoke:integration-analysis-planner": "node scripts/smoke-integration-analysis-planner.js",
274
+ "smoke:integration-analysis-session-service": "node scripts/smoke-integration-analysis-session-service.js",
275
+ "smoke:integration-analysis-api-server": "node scripts/smoke-integration-analysis-api-server.js",
276
+ "smoke:integration-analysis-live": "node scripts/live-production-planner-smoke.js",
228
277
  "storage:migrate": "node bin/aginti-cli.js storage migrate",
229
278
  "publish:env": "node scripts/npm-publish-from-env.js publish --access public",
230
279
  "publish:env:whoami": "node scripts/npm-publish-from-env.js whoami",
231
- "pretest": "npm run smoke:planning-timeout-recovery",
232
- "test": "npm run check && npm run smoke:integration-production-mount && npm run smoke:integration-production-runtime-bundle && npm run smoke:integration-retained-idempotency-store && npm run smoke:integration-storage-authority && npm run smoke:integration-retained-durable-common && npm run smoke:integration-retained-file-lock && npm run smoke:integration-retained-event-ledger && npm run smoke:integration-retained-event-ledger-bundle && npm run smoke:integration-retained-repository-kernel && npm run smoke:integration-retained-session-state-store && npm run smoke:integration-retained-native-session-repository-state && npm run smoke:integration-retained-native-execution-evidence && npm run smoke:integration-retained-runtime-repository-surface && npm run smoke:integration-retained-runtime-repository-phase-b && npm run smoke:integration-runtime-repository-contract && npm run smoke:integration-runtime-authority && npm run smoke:localllm-provider && npm run smoke:localllm-model-tiers && npm run smoke:localllm-code-routing && npm run smoke:local-failure-recovery && 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:document-artifact-quality && npm run smoke:writing-specialist-routing && npm run smoke:workspace-secret-false-positive && npm run smoke:provider-handoff && 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",
280
+ "test": "npm run check && npm run smoke:integration-production-mount && npm run smoke:integration-storage-authority && npm run smoke:integration-retained-durable-common && npm run smoke:integration-retained-file-lock && npm run smoke:integration-retained-event-ledger && npm run smoke:integration-retained-event-ledger-bundle && npm run smoke:integration-retained-repository-kernel && npm run smoke:integration-retained-session-state-store && npm run smoke:integration-retained-native-session-repository-state && npm run smoke:integration-retained-native-execution-evidence && npm run smoke:integration-retained-runtime-repository-surface && npm run smoke:integration-retained-runtime-repository-phase-b && npm run smoke:integration-runtime-repository-contract && npm run smoke:integration-runtime-authority && npm run smoke:integration-api && npm run smoke:integration-sandbox-profile && npm run smoke:execution-worker && npm run smoke:execution-runtime-bundle && npm run smoke:execution-worker-server && npm run smoke:execution-worker-systemd-boundary && npm run smoke:integration-analysis-coordinator && npm run smoke:integration-document-artifacts && npm run smoke:integration-document-content && npm run test:document-worker && npm run smoke:integration-document-worker-cross-boundary && npm run smoke:integration-document-session-broker && npm run smoke:integration-document-revision && npm run smoke:integration-grounded-search && npm run smoke:integration-analysis-planner && npm run smoke:integration-analysis-session-service && npm run smoke:integration-analysis-api-server && npm run smoke:localllm-provider && npm run smoke:localllm-model-tiers && npm run smoke:localllm-code-routing && npm run smoke:local-failure-recovery && 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",
233
281
  "pack:dry-run": "npm pack --dry-run",
234
282
  "smoke:capabilities": "node scripts/smoke-capabilities.js"
235
283
  },