@n8r/surface 0.0.0-stage → 0.1.0-experimental.5

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 (181) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-DOCS +395 -0
  3. package/LICENSING.md +36 -0
  4. package/README.md +207 -2
  5. package/dist/activity.d.ts +16 -0
  6. package/dist/activity.js +44 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +412 -0
  9. package/dist/codec.d.ts +6 -0
  10. package/dist/codec.js +56 -0
  11. package/dist/codex.d.ts +72 -0
  12. package/dist/codex.js +526 -0
  13. package/dist/contracts.d.ts +235 -0
  14. package/dist/contracts.js +1 -0
  15. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  16. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  17. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  18. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  19. package/dist/cyclonedx-validation.d.ts +1 -0
  20. package/dist/cyclonedx-validation.js +45 -0
  21. package/dist/html.d.ts +5 -0
  22. package/dist/html.js +74 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.js +5 -0
  25. package/dist/notes.d.ts +52 -0
  26. package/dist/notes.js +184 -0
  27. package/dist/portable.d.ts +10 -0
  28. package/dist/portable.js +71 -0
  29. package/dist/recent.d.ts +9 -0
  30. package/dist/recent.js +71 -0
  31. package/dist/revisions.d.ts +2 -0
  32. package/dist/revisions.js +60 -0
  33. package/dist/settings.d.ts +23 -0
  34. package/dist/settings.js +100 -0
  35. package/dist/setup.d.ts +9 -0
  36. package/dist/setup.js +161 -0
  37. package/dist/skill-artifacts-cli.d.ts +1 -0
  38. package/dist/skill-artifacts-cli.js +13 -0
  39. package/dist/skill-artifacts.d.ts +15 -0
  40. package/dist/skill-artifacts.js +184 -0
  41. package/dist/skill-cyclonedx.d.ts +26 -0
  42. package/dist/skill-cyclonedx.js +214 -0
  43. package/dist/skill-presentation.d.ts +10 -0
  44. package/dist/skill-presentation.js +108 -0
  45. package/dist/skill-surface-cli.d.ts +1 -0
  46. package/dist/skill-surface-cli.js +37 -0
  47. package/dist/skill-surface-store.d.ts +7 -0
  48. package/dist/skill-surface-store.js +126 -0
  49. package/dist/source-tools.d.ts +102 -0
  50. package/dist/source-tools.js +201 -0
  51. package/dist/startup.d.ts +7 -0
  52. package/dist/startup.js +74 -0
  53. package/dist/surface-bom.d.ts +73 -0
  54. package/dist/surface-bom.js +139 -0
  55. package/dist/surface-draft.d.ts +22 -0
  56. package/dist/surface-draft.js +112 -0
  57. package/dist/surface-instructions.d.ts +3 -0
  58. package/dist/surface-instructions.js +32 -0
  59. package/dist/surface-overview.d.ts +15 -0
  60. package/dist/surface-overview.js +86 -0
  61. package/dist/surface-store.d.ts +34 -0
  62. package/dist/surface-store.js +213 -0
  63. package/dist/surface-view.d.ts +3 -0
  64. package/dist/surface-view.js +50 -0
  65. package/dist/validate.d.ts +4 -0
  66. package/dist/validate.js +482 -0
  67. package/docs/n8r-surface/README.md +133 -0
  68. package/docs/n8r-surface/cli-bundles.md +72 -0
  69. package/docs/n8r-surface/codex-research-transcript.md +51 -0
  70. package/docs/n8r-surface/codex-research-verification.md +176 -0
  71. package/docs/n8r-surface/command-outcomes.md +711 -0
  72. package/docs/n8r-surface/contracts.md +220 -0
  73. package/docs/n8r-surface/critical-path.md +184 -0
  74. package/docs/n8r-surface/design.md +289 -0
  75. package/docs/n8r-surface/first-use-access.md +143 -0
  76. package/docs/n8r-surface/first-use-overview.md +262 -0
  77. package/docs/n8r-surface/getting-started.md +74 -0
  78. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  79. package/docs/n8r-surface/host-contract.md +176 -0
  80. package/docs/n8r-surface/implementation-decisions.md +96 -0
  81. package/docs/n8r-surface/instance-first-research.md +209 -0
  82. package/docs/n8r-surface/npm-distribution.md +107 -0
  83. package/docs/n8r-surface/npm-release.md +315 -0
  84. package/docs/n8r-surface/product-direction.md +327 -0
  85. package/docs/n8r-surface/recreation-handoff.md +117 -0
  86. package/docs/n8r-surface/researcher-discovery.md +157 -0
  87. package/docs/n8r-surface/researcher-prepared-check.md +117 -0
  88. package/docs/n8r-surface/researcher-reconciliation-trial.md +149 -0
  89. package/docs/n8r-surface/researcher-repository-check.md +95 -0
  90. package/docs/n8r-surface/researcher-skeleton-check.md +84 -0
  91. package/docs/n8r-surface/researcher-skill-verification.md +725 -0
  92. package/docs/n8r-surface/researcher-skill.md +309 -0
  93. package/docs/n8r-surface/researcher-vault.md +134 -0
  94. package/docs/n8r-surface/save-reopen-transcript.md +211 -0
  95. package/docs/n8r-surface/save-reopen-verification.md +152 -0
  96. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  97. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  98. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  99. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  100. package/docs/n8r-surface/skill-manual.md +129 -0
  101. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  102. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  103. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  104. package/docs/n8r-surface/startup-human-check.md +172 -0
  105. package/docs/n8r-surface/startup-verification.md +161 -0
  106. package/docs/n8r-surface/startup.md +151 -0
  107. package/docs/n8r-surface/surface-description-contract.md +224 -0
  108. package/docs/n8r-surface/surface-descriptions.md +173 -0
  109. package/docs/n8r-surface/surface-relationships.md +231 -0
  110. package/docs/n8r-surface/surface-revisions-transcript.md +552 -0
  111. package/docs/n8r-surface/surface-revisions-verification.md +161 -0
  112. package/docs/n8r-surface/tester-candidate.md +158 -0
  113. package/docs/n8r-surface/vault-setup-verification.md +210 -0
  114. package/docs/n8r-surface/verification.md +117 -0
  115. package/docs/n8r-surface/versioning.md +172 -0
  116. package/docs/n8r-surface/workspace-human-check.md +101 -0
  117. package/docs/n8r-surface/workspace-installation.md +68 -0
  118. package/docs/n8r-surface/workspace-verification.md +350 -0
  119. package/docs/n8r-surface/workspace.md +83 -0
  120. package/examples/researcher/README.md +100 -0
  121. package/examples/researcher/composed.surface.json +430 -0
  122. package/examples/researcher/composed.surface.yaml +283 -0
  123. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  124. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  125. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  126. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  127. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  128. package/examples/researcher/descriptions/README.md +29 -0
  129. package/examples/researcher/descriptions/bound-r1.json +141 -0
  130. package/examples/researcher/descriptions/bound-r2.json +153 -0
  131. package/examples/researcher/descriptions/capability.json +167 -0
  132. package/examples/researcher/descriptions/research-r1.json +153 -0
  133. package/examples/researcher/descriptions/research-r2.json +157 -0
  134. package/examples/researcher/descriptions/sources.md +24 -0
  135. package/examples/researcher/harbor-r1.research.html +193 -0
  136. package/examples/researcher/harbor-r2.research.html +226 -0
  137. package/examples/researcher/lumen-manual-edit.pending.html +271 -0
  138. package/examples/researcher/lumen-r1.research.html +271 -0
  139. package/examples/researcher/lumen-r2.research.html +280 -0
  140. package/examples/researcher/relationships/README.md +34 -0
  141. package/examples/researcher/relationships/bound-r1.json +346 -0
  142. package/examples/researcher/relationships/bound-r2.json +358 -0
  143. package/examples/researcher/relationships/capability.json +325 -0
  144. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  145. package/examples/researcher/relationships/research-r1.json +300 -0
  146. package/examples/researcher/relationships/research-r2.json +304 -0
  147. package/examples/researcher/relationships/sources.md +38 -0
  148. package/examples/researcher/sources/harbor-api.md +16 -0
  149. package/examples/researcher/sources/harbor-auth.md +8 -0
  150. package/examples/researcher/sources/lumen-guide.md +28 -0
  151. package/examples/researcher/sources/lumen-settings.md +9 -0
  152. package/examples/researcher/surface-bom/README.md +17 -0
  153. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  154. package/package.json +45 -4
  155. package/plugins/n8r-surface/.codex-plugin/plugin.json +31 -0
  156. package/plugins/n8r-surface/LICENSE +202 -0
  157. package/plugins/n8r-surface/LICENSE-DOCS +395 -0
  158. package/plugins/n8r-surface/LICENSING.md +39 -0
  159. package/plugins/n8r-surface/assets/icon.svg +5 -0
  160. package/plugins/n8r-surface/plugin.json +27 -0
  161. package/plugins/n8r-surface/skills/research/SKILL.md +163 -0
  162. package/plugins/n8r-surface/skills/research/agents/openai.yaml +4 -0
  163. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  164. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  165. package/plugins/n8r-surface/skills/research/references/discovery-map.md +178 -0
  166. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  167. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  168. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  169. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  170. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  171. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  172. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  173. package/plugins/n8r-surface/skills/research/references/model-meanings.md +55 -0
  174. package/plugins/n8r-surface/skills/research/references/skeleton-surface.md +105 -0
  175. package/plugins/n8r-surface/skills/research/references/working-notes.md +121 -0
  176. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  177. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  178. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  179. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  180. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  181. package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
@@ -0,0 +1,72 @@
1
+ # CLI Capability and Bound bundles
2
+
3
+ The CLI candidate uses the same checked artifact machinery as Researcher skill
4
+ 0.1.11. New research can stage `n8r.surface/0.3` Capability or Bound bundles.
5
+ `/save surface` saves the preview's brief, research HTML, Surface JSON, pinned
6
+ dependencies and manifest in the next numbered directory. Reopening either
7
+ `research.html` or `surface.json` reads and checks the complete bundle.
8
+
9
+ Existing `n8r.surface/0.1` pairs remain readable and can be revised in their
10
+ original format. There is no automatic migration. A Capability and a Bound
11
+ Surface are separate identities; continue a saved description in its original
12
+ kind. Start a new discovery for a different kind. The CLI can also reopen a
13
+ standalone skill bundle. Such a bundle has no CLI runner receipt; historical
14
+ source references are rechecked rather than assigned invented runner provenance.
15
+
16
+ The runner receives bundled schema examples as synthetic shapes, not findings.
17
+ It computes canonical artifact hashes through a read-only host tool, then stages
18
+ a complete bundle. The host checks current and dependency research sources
19
+ against actual reads or saved evidence. Validation does not establish research
20
+ accuracy, complete secret detection, runtime use or consumer compatibility.
21
+ Use permitted sources or sanitized configuration summaries; do not supply secrets.
22
+
23
+ ## Human verification
24
+
25
+ Maintainer preparation: install the candidate in the tester's active Node
26
+ installation, confirm Codex sign-in/model access and vault setup, and open the
27
+ terminal in the existing prepared Lumen source directory. Do not ask the tester
28
+ to build packages or find paths. The checks below send that source to OpenAI
29
+ after confirmation. See [using the command](getting-started.md).
30
+
31
+ - [ ] Run `n8r-surface`. At `You>`, enter: “Research the AI connections in this
32
+ guide. Keep unknown configuration and runtime use explicit. My decision is to
33
+ defer runtime verification.” Confirm research. Expect findings based on the
34
+ guide and the recorded decision. Ask a follow-up question in your own words;
35
+ the conversation should let you explore freely.
36
+ - [ ] Type `save`. Open the brief or HTML at the returned path. Expect a useful
37
+ explanation of the connections, source evidence, unknowns and your decision.
38
+ Type `exit` when you want to leave. No separate Surface-preparation command is
39
+ required; saving does not end the conversation.
40
+ - [ ] Run `n8r-surface` again and select the saved title by its number. Expect
41
+ the previous research and decision to return without copying a file path.
42
+ Say: “Keep my runtime-verification deferral. Add my decision to defer external
43
+ OIDC investigation because model-service configuration is the priority.”
44
+ Then type `save`. Expect a new saved result with both decisions; the previous
45
+ result remains available and unchanged. Type `exit` to leave (exit 0).
46
+ - [ ] Report **Pass / Fail / Blocked** and any point where the experience was
47
+ confusing or the result was wrong, with the saved links. Wording and filenames
48
+ can vary. Missing saves, lost decisions or overwritten files fail. Missing
49
+ installation or sign-in is blocked. Keep the saved work; no cleanup is needed.
50
+
51
+ Maintainer evidence checks cover exact parent digests, preserved source/settings
52
+ bytes, dependency validation and the local recent-work index. They do not replace
53
+ the user's judgment of the conversation and result.
54
+
55
+ ## Maintainer evidence
56
+
57
+ At baseline `5eed2ac`, the installed CLI completed the first interaction but
58
+ saved `n8r.surface/0.1`. Candidate regression checks cover shared-helper readback,
59
+ fresh-store successors, dependency corruption, lost decisions, standalone skill
60
+ reopening and legacy pairs. Real-run evidence is recorded with the implementing
61
+ PR; automated checks are not human acceptance or publication evidence.
62
+
63
+ On 8 November 2026 an installed development tarball based on `5eed2ac` (dirty)
64
+ completed the exact two-session task above with Node 26.13.0, Codex 0.166.0 and
65
+ `gpt-6-astra` using ChatGPT sign-in. Both processes exited 0. Independent helper
66
+ readback verified Capability kind, exact research/Surface parents, retained
67
+ component IDs and runtime deferral, added OIDC deferral and pinned dependencies.
68
+ Source, settings and every predecessor file remained unchanged. Tarball SHA-256:
69
+ `0a4cc51d39327dfab67e186516f9eef1a01efcb1369c7ae35a9cb843e62c458f`.
70
+ This is an agent rehearsal, not a new human acceptance or registry release.
71
+ Subsequent changes broadened dependency-source checks and preserved optional
72
+ runner/note receipts; final candidate verification must identify its own bytes.
@@ -0,0 +1,51 @@
1
+ # Installed Codex conversation transcript
2
+
3
+ Agent rehearsal, 5 November 2026. Synthetic source only; the displayed absolute
4
+ source path is replaced with `<selected-source>`. Other conversation text is
5
+ retained. This is not human acceptance. See [environment and readback](codex-research-verification.md).
6
+
7
+ ```text
8
+ Research source: <selected-source>/lumen-guide.md (one file)
9
+ Inspected source text and your messages will be sent to OpenAI through Codex using ChatGPT sign-in.
10
+ Source access is read-only. Saving and reopening are not available yet.
11
+ Start research with OpenAI using Codex ChatGPT sign-in? [y/N] y
12
+
13
+ Connecting to Codex…
14
+ Connected: ChatGPT sign-in; model gpt-6-astra.
15
+ Researcher 0.1.8; sha256:8af29c3073df9b8210a7dd94ced9700379b0a98f76bd3a2902f9430b93c98a2a
16
+ Ask about your source. /exit ends the chat; Ctrl-C cancels.
17
+ You> Describe the AI-relevant components and connections in the supplied source, citing file lines and distinguishing selected connections from options. Keep it concise.
18
+
19
+ I’m using `n8r-surface:research 0.1.8` to map the supplied source, separating selected connections from documented options.
20
+ [source_list] .
21
+ [source_read] lumen-guide.md sha256:98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693
22
+ ## Partial AI Surface
23
+
24
+ Scope: fictional **Lumen Desk**, guide revision `fixture-1`; not a real installation (`lumen-guide.md:1–4`).
25
+
26
+ | Connection | Status and purpose | Evidence |
27
+ |---|---|---|
28
+ | Lumen Desk → inference endpoint | **Declared configured:** generates summaries. Model and version unspecified. | `lumen-guide.md:8–9` |
29
+ | Lumen Desk → external OIDC service | **Supported option**, not an established selection: identity service. | `lumen-guide.md:9` |
30
+ | Lumen Desk → archive service | **Delivery option:** summary documents and audit events use separate HTTP routes on one service. Schema/authentication require agreement; no tested Harbor Archive integration. Document batches capped at 10. | `lumen-guide.md:13–16` |
31
+ | Archive → callback receiver | **Optional, disabled until selected and configured:** receives archive notifications. Validation, retries and tested protocol unspecified. | `lumen-guide.md:20–22` |
32
+
33
+ **Limits:** Input sources and processing steps before inference are unknown. No deployment or runtime observations establish selected installation connections or exercised behavior (`lumen-guide.md:26–28`).
34
+
35
+ Entire supplied file inspected, without truncation. SHA-256: `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693`.
36
+
37
+ Research stays in this conversation; no save capability is available.
38
+ You> For this investigation I choose not to use external OIDC. Retain that as my decision, not a change to the guide. Which authentication facts remain unknown?
39
+
40
+ **Human decision — 2026-11-05:** External OIDC is not selected for this investigation. The guide still describes it as a supported option (`lumen-guide.md:9`).
41
+
42
+ **Authentication facts still unknown:**
43
+ - **Lumen user access:** whether authentication is required and what, if anything, replaces external OIDC.
44
+ - **Inference endpoint:** authentication mechanism and caller identity; the guide only declares a configured endpoint (`lumen-guide.md:8–9`).
45
+ - **Archive delivery, if selected:** authentication configuration and service identity remain unspecified and require agreement (`lumen-guide.md:13–15`).
46
+ - **Callbacks, if enabled:** sender authentication and notification validation are unspecified; callbacks remain optional (`lumen-guide.md:20–22`).
47
+ - **Effective runtime configuration:** no deployment or runtime observations are supplied (`lumen-guide.md:26–28`).
48
+
49
+ Not selecting OIDC does **not** establish that access is unauthenticated. Your decision is retained here separately from source facts.
50
+ You> /exit
51
+ ```
@@ -0,0 +1,176 @@
1
+ # Standalone Codex conversation: evidence and limits
2
+
3
+ Use [Install → run → check](getting-started.md) to try this increment. This record
4
+ is for maintainers; it is not a prerequisite for the human walkthrough.
5
+
6
+ ## Scope and status
7
+
8
+ Related to [#17](https://github.com/injectionator/n8r-surface/issues/17).
9
+ RESEARCH-01 implements a source conversation and follow-up. It does not complete
10
+ E2E-01, save/reopen/continue, structured output, Lab integration or distribution.
11
+ The user prioritized standalone AI, then saved continuation, then npm distribution.
12
+
13
+ **Final candidate rehearsal: Pass (agent), 5 November 2026. Human acceptance: user-reported Pass on 5 November 2026; PR #33 is confirmed
14
+ merged at `b186050`. This is the user’s report, not another agent observation.** The installed command completed both interactions from the
15
+ short guide with real `gpt-6-astra` execution: source list/read, cited findings,
16
+ and the supplied OIDC correction retained separately from guide claims.
17
+
18
+ - Code revision: [`ba6f95d`](https://github.com/injectionator/n8r-surface/commit/ba6f95dc62947c53e9ab7276e60f5b7cb4d3e17e).
19
+ - Environment: macOS arm64, Node 26.13.0, npm tarball installed into an isolated
20
+ prefix, Codex CLI 0.166.0, existing ChatGPT sign-in, explicit `gpt-6-astra`.
21
+ A separate test HOME held n8r settings; CODEX_HOME pointed to the existing Codex
22
+ installation without copying credentials. No account tier claim is inferred.
23
+ - Executed tarball SHA-256:
24
+ `c996b4085eaab0324c0f514b41d5440256ad27845675e1912aaffbd74e8179ec`.
25
+ - Starting state: one copied synthetic `lumen-guide.md`, complete configured vault,
26
+ unchanged version-1 n8r settings, no existing research output.
27
+ - Interaction: installed `n8r-surface discover <selected-source>/lumen-guide.md --model gpt-6-astra`,
28
+ accepted transmission, pasted the two prompts in the guide, then `/exit`.
29
+ The relative path in the human guide and this explicit file selection resolve
30
+ the same bytes. Exit **0**.
31
+ - [Sanitized full terminal transcript](codex-research-transcript.md) retains actual
32
+ model messages and source-call lines. The developing agent did not prewrite
33
+ findings or replace the model's investigation.
34
+ - Independent readback: source SHA-256 before and after was
35
+ `98d3374c79c166b37f0debb4ffb5e457eda1385dd7847b042cbad674cac98693`;
36
+ settings bytes were unchanged; the vault contained no research files. The
37
+ stated inference, OIDC, archive and callback facts match guide lines 8–22.
38
+ The follow-up retained non-selection of OIDC without inventing anonymous access.
39
+
40
+ The earlier directory-source rehearsal also passed before the root-identity and
41
+ turn-correlation fixes; it remains local historical evidence. The final file-scope
42
+ rehearsal above includes both fixes. Later documentation-only evidence commits do
43
+ not change the exercised implementation. Local transcripts/readback are retained
44
+ under the selected vault's `runs/` convention; no local vault path is published.
45
+
46
+ ## Architecture
47
+
48
+ The TypeScript terminal client launches the installed Codex app-server over local
49
+ stdio. It uses the existing ChatGPT sign-in, checks account type, and requires the
50
+ configured model or explicit `--model` choice. It rejects custom providers/endpoints
51
+ and never falls back to API keys or another model. No credential bytes are read,
52
+ copied into settings or printed by this adapter. Codex retains ownership of its
53
+ authentication, caches and diagnostics.
54
+
55
+ The adapter is pinned to **Codex CLI 0.166.0**. Protocol interfaces were generated
56
+ from that exact installed executable with:
57
+
58
+ ```sh
59
+ codex app-server generate-ts --experimental --out /tmp/n8r-protocol
60
+ ```
61
+
62
+ It uses `initialize`/`initialized`, `account/read`, `config/read`, `thread/start`,
63
+ `turn/start`, `item/tool/call`, turn/item notifications and `turn/interrupt`.
64
+ Experimental dynamic tools and permissions require the initialization capability.
65
+ See the official [app-server protocol](https://developers.openai.com/codex/app-server)
66
+ and [permission profiles](https://learn.chatgpt.com/docs/permissions).
67
+ Future CLI versions must be checked deliberately before broadening the pin.
68
+
69
+ One ephemeral thread holds successive turns. The CLI has no reopen interface and
70
+ produces no research artefact. It prints completed agent messages as they arrive,
71
+ not token-by-token deltas. Requests have a 45-second response deadline; a turn has
72
+ a ten-minute limit. Ctrl-C requests interruption, closes the owned process and
73
+ exits 130; EOF during an answer exits 1 and marks it incomplete. EOF at the prompt
74
+ or `/exit` exits 0. Failed turns exit 2, including failure after partial output.
75
+ A stale event/callback cannot complete or read for a newer turn.
76
+
77
+ ### Shared instructions
78
+
79
+ The npm tarball contains the canonical plugin manifest, Researcher `SKILL.md` and
80
+ all four reference documents without rewriting them. Version **0.1.8**, combined
81
+ SHA-256 **`8af29c3073df9b8210a7dd94ced9700379b0a98f76bd3a2902f9430b93c98a2a`**.
82
+ The digest hashes, in fixed order, each relative path, NUL, original bytes, NUL.
83
+ The adapter appends host limits: source inspection only, evidence citations,
84
+ human corrections separate from source claims, and no save capability.
85
+ Installed-package checks independently load the bundle outside the checkout and
86
+ compare this digest. This is instruction loading evidence, not universal proof
87
+ that a model follows every instruction.
88
+
89
+ ### Source capability and permissions
90
+
91
+ The model chooses `source_list`, `source_search` and `source_read` calls. The host
92
+ returns real evidence, not developer-authored findings. A directory or single file
93
+ is explicitly selected and displayed before authorization. File-only access cannot
94
+ read siblings. Paths are relative; traversal, absolute paths, control characters,
95
+ backslashes, descendant symlinks and special files are rejected. The host checks
96
+ canonical root identity and ancestry on every operation, including between turns.
97
+ Directory topology must remain stable during each operation: these Node filesystem
98
+ checks are not an adversarial concurrent-filesystem transaction.
99
+
100
+ Hidden entries, `node_modules`, `vendor`, `dist`, and key/certificate containers
101
+ are excluded. This is not a general secret detector; choose sources permitted for
102
+ transmission. UTF-8 files are bounded to 256 KiB. Reads return up to 200 lines and
103
+ 32 Ki characters, with full-file byte digest, timestamp and truncation status.
104
+ Search is literal and case-sensitive, bounded to 100 files, roughly 8 MiB of
105
+ source bytes (one final file may cross the threshold), 1,000 entries, depth 32 and
106
+ 100 matching lines. Listings expose exclusions and truncation. Missing coverage
107
+ never proves absence. No source code is executed.
108
+
109
+ Codex receives an empty execution-environment list, no runtime workspace roots,
110
+ a read-only/no-network permission profile, and no approval escalation. The
111
+ adapter disables configured MCP servers, apps, plugins, hooks, shell, browser and
112
+ other unrelated facilities, suppresses automatic source instructions and memories,
113
+ and does not inherit API keys or desktop-internal task channels. A pre-existing
114
+ profile with the adapter's reserved name is rejected instead of merged. Unknown
115
+ server requests fail closed; source callbacks require the active thread and turn.
116
+
117
+ Codex can still describe generic native tool names in its model-visible catalogue.
118
+ A separate synthetic PNG boundary probe on 0.166.0 attempted native `view_image`
119
+ and reported **“No usable execution environment is available.”** No image read
120
+ was established. This supports the empty-environment boundary for that attempt;
121
+ it is not comprehensive OS sandbox certification or proof for every future tool.
122
+ The host source-path checks have separate deterministic regression tests.
123
+
124
+ ## Baseline and prerequisite investigation
125
+
126
+ The original installed `discover` invocation exited 2 with the bare-startup-only
127
+ message. Codex 0.139.0 reported ChatGPT sign-in but rejected `gpt-6-astra` as needing
128
+ a newer client. Its model list offered `gpt-5.5`; the user explicitly selected it,
129
+ but inference rejected it for ChatGPT sign-in. Neither result proves inference.
130
+
131
+ The user then authorized a CLI update and retry of `gpt-6-astra`. `codex update`
132
+ installed 0.166.0 in the active Node 26 global prefix. The original standalone
133
+ installation in the other prefix was then explicitly updated to the same 0.166.0;
134
+ both reported that version and retained ChatGPT sign-in. The command checks
135
+ whichever `codex` is on its PATH.
136
+ Existing sign-in was reused; the saved model setting was not changed.
137
+
138
+ `codex exec` and then app-server both completed real `gpt-6-astra` responses.
139
+ During protocol exploration, defining a named permission profile without its
140
+ required `default_permissions` caused a late workspace-requirements error.
141
+ Supplying both resolved it; the regression checks require the complete profile.
142
+ No managed requirement was disabled or bypassed.
143
+
144
+ ## Automated verification
145
+
146
+ Final implementation: 89 Node tests passed on each of Node 22.23.2, 24.22.2 and
147
+ 26.13.0, including offline terminal cases
148
+ for confirmation refusal (no Codex launch), API-key rejection, same-thread turns,
149
+ out-of-scope tool calls, failed answers, stale events/callbacks, malformed identity,
150
+ authentication changes, EOF, and cancellation during connection and an active turn.
151
+ The terminal fixture is explicitly scripted and is **not real AI evidence**.
152
+ It verifies process behavior, source/settings bytes and child cleanup.
153
+
154
+ Additional checks passed:
155
+
156
+ - Installed-package check on all three Node majors: library exports, all bundled
157
+ Researcher references/digest, startup terminal/readback and 13 offline discovery
158
+ terminal cases. Runtime dependency metadata was cached with `npm cache add yaml@2.9.1`.
159
+ - `bash -n scripts/flow`; Python unittest discovery: 24 tests, including JSON
160
+ syntax and applicable synthetic identifier/reference checks.
161
+ - Markdownlint 0.24.0: 57 files, zero issues after transcript addition.
162
+ - Lychee 0.24.2 offline with fragments: 410 links, zero errors after transcript addition.
163
+ - cffconvert 2.0.0: citation metadata valid; `git diff --check`: clean.
164
+
165
+ Documentation checks were repeated after recording the transcript. External link
166
+ requests and registry publication were not part of these checks. Fixture integrity
167
+ is not model conformance. Automated rehearsal does not replace human acceptance.
168
+
169
+ ## Remaining acceptance
170
+
171
+ - Conversation-only human check: user reported Pass; saved continuation has its
172
+ own [verification record](save-reopen-verification.md).
173
+ - Save/readback, fresh-session continuation, preserved decisions and identities.
174
+ - Validated HTML/JSON/YAML, broader products and the complete E2E-01/E2E-02 cases.
175
+ - Live UI/API observations and later named Lab consumer verification.
176
+ - Registry distribution under #27, separately authorized.