@timurproko/a1 0.1.8-dev.290 → 0.1.8-dev.322

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 (112) hide show
  1. package/README.md +21 -0
  2. package/bin/guardian.js +4 -3
  3. package/bin/ui.js +4 -2
  4. package/bin/update-recovery.js +3 -1
  5. package/dist/composition/owned-ui.js +13 -1
  6. package/dist/contracts/owned-ui/index.d.ts +1 -0
  7. package/dist/contracts/owned-ui/index.js +1 -0
  8. package/dist/contracts/owned-ui/prompt-history.d.ts +37 -0
  9. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  10. package/dist/features/launch/profile-paths.d.ts +2 -0
  11. package/dist/features/launch/profile-paths.js +11 -0
  12. package/dist/features/prompt-history/index.d.ts +2 -0
  13. package/dist/features/prompt-history/index.js +2 -0
  14. package/dist/features/prompt-history/paths.d.ts +4 -0
  15. package/dist/features/prompt-history/paths.js +16 -0
  16. package/dist/features/prompt-history/service.d.ts +24 -0
  17. package/dist/features/prompt-history/service.js +260 -0
  18. package/dist/features/prompt-history/store.d.ts +15 -0
  19. package/dist/features/prompt-history/store.js +166 -0
  20. package/dist/features/prompt-history/worker.d.ts +9 -0
  21. package/dist/features/prompt-history/worker.js +42 -0
  22. package/dist/foundation/launch-context/index.d.ts +29 -0
  23. package/dist/foundation/launch-context/index.js +83 -0
  24. package/dist/foundation/launch-guardian/main.js +4 -3
  25. package/dist/foundation/release/bootstrap.d.ts +1 -1
  26. package/dist/foundation/release/bootstrap.js +18 -12
  27. package/dist/foundation/release/cohort-state.d.ts +1 -0
  28. package/dist/foundation/release/cohort-state.js +4 -0
  29. package/dist/foundation/release/release-gc.js +2 -2
  30. package/dist/foundation/release/release-store.js +10 -3
  31. package/dist/foundation/release/release.d.ts +3 -1
  32. package/dist/foundation/release/release.js +7 -3
  33. package/dist/foundation/release/restart-certification.d.ts +1 -0
  34. package/dist/foundation/release/restart-certification.js +5 -0
  35. package/dist/foundation/release/update-recovery.d.ts +2 -0
  36. package/dist/foundation/release/update-recovery.js +4 -0
  37. package/dist/foundation/release/update.js +5 -0
  38. package/dist/foundation/release/warmup.d.ts +1 -1
  39. package/dist/foundation/release/warmup.js +5 -4
  40. package/dist/foundation/startup/startup-runtime.js +13 -11
  41. package/dist/foundation/supervision/main.js +8 -7
  42. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  43. package/dist/integrations/pi/components/editor-interaction.js +1 -0
  44. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  45. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  46. package/dist/integrations/pi/components/index.d.ts +1 -0
  47. package/dist/integrations/pi/components/index.js +1 -0
  48. package/dist/integrations/pi/components/owned-editor-ux.d.ts +2 -1
  49. package/dist/integrations/pi/components/owned-editor-ux.js +95 -22
  50. package/dist/integrations/pi/components/shell-editor-autocomplete.js +12 -1
  51. package/dist/integrations/pi/components/shell-presenters-info.d.ts +9 -2
  52. package/dist/integrations/pi/components/shell-presenters-info.js +35 -4
  53. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +3 -2
  54. package/dist/integrations/pi/components/shell-selectors-dialogs.js +8 -5
  55. package/dist/integrations/pi/components/shell-shared-facade.d.ts +15 -2
  56. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  57. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +25 -2
  58. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +13 -9
  59. package/dist/integrations/pi/components/upstream/components/owned-editor.js +137 -133
  60. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +280 -0
  61. package/dist/integrations/pi/components/upstream/history/editor-core.js +2062 -0
  62. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +32 -0
  63. package/dist/integrations/pi/components/upstream/history/kill-ring.js +48 -0
  64. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  65. package/dist/integrations/pi/components/upstream/history/printable-key.js +40 -0
  66. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  67. package/dist/integrations/pi/components/upstream/history/text-helpers.js +28 -0
  68. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +22 -0
  69. package/dist/integrations/pi/components/upstream/history/undo-stack.js +36 -0
  70. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  71. package/dist/integrations/pi/components/upstream/history/word-navigation.js +100 -0
  72. package/dist/integrations/pi/engine/adapter.d.ts +13 -1
  73. package/dist/integrations/pi/engine/adapter.js +86 -25
  74. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  75. package/dist/integrations/pi/engine/changelog.js +63 -0
  76. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  77. package/dist/integrations/pi/engine/workflow-controllers.d.ts +1 -1
  78. package/dist/integrations/pi/engine/workflows.d.ts +1 -1
  79. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +4 -1
  80. package/dist/integrations/pi/session-ui/prompt-chips.js +40 -13
  81. package/dist/integrations/pi/session-ui/prompt-history-controller.d.ts +30 -0
  82. package/dist/integrations/pi/session-ui/prompt-history-controller.js +147 -0
  83. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +33 -0
  84. package/dist/integrations/pi/session-ui/session-shell-root.js +68 -74
  85. package/dist/integrations/pi/session-ui/session-shell.d.ts +1 -1
  86. package/dist/integrations/pi/session-ui/session-shell.js +98 -12
  87. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +5 -0
  88. package/dist/integrations/pi/session-ui/session-viewport-controller.js +21 -15
  89. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +7 -0
  90. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +7 -6
  91. package/dist/native/darwin-arm64/manifest.json +1 -1
  92. package/dist/native/linux-x64/manifest.json +1 -1
  93. package/dist/native/win32-x64/manifest.json +2 -2
  94. package/dist/native/win32-x64/process-guardian.exe +0 -0
  95. package/dist/product-identity.d.ts +2 -2
  96. package/dist/product-identity.js +3 -36
  97. package/dist/product-identity.json +1 -22
  98. package/dist/ui/components/transcript-viewport.d.ts +8 -0
  99. package/dist/ui/components/transcript-viewport.js +23 -2
  100. package/dist/ui/components/visible-hyperlinks.d.ts +7 -0
  101. package/dist/ui/components/visible-hyperlinks.js +1 -0
  102. package/dist/ui/settings/declarations.js +19 -0
  103. package/dist/ui/settings/sections.js +11 -1
  104. package/dist/ui/settings/session.js +13 -4
  105. package/docs/architecture/boundaries.md +2 -0
  106. package/docs/architecture/history-editor-provenance.md +96 -0
  107. package/docs/architecture/internal-naming.md +89 -0
  108. package/docs/architecture/project-structure.md +1 -0
  109. package/docs/architecture/resource-and-data-policy.md +27 -1
  110. package/docs/architecture/toolchain.md +15 -1
  111. package/docs/features/prompt-history.md +149 -0
  112. package/package.json +8 -3
@@ -13,6 +13,7 @@ src/
13
13
  features/
14
14
  launch/ launch profiles, profile paths, and runtime selection
15
15
  owned-ui/ owned screens, settings application, diagnostics, and runtime lifecycle
16
+ prompt-history/ profile-isolated prompt retention and bounded SQLite worker lifecycle
16
17
  workspace/ multi-agent presentation, reducer state, routing, and persistence orchestration
17
18
  contracts/
18
19
  agent-engine/ dependency-free agent engine, session, package, and capability ports
@@ -31,7 +31,8 @@ Every asynchronous consumer must implement a finite queue or window. Backpressur
31
31
  | Class | Examples | Storage policy |
32
32
  |---|---|---|
33
33
  | Workspace metadata | IDs, names, lifecycle, capability versions, topology revisions, recovery references | May persist in the control store |
34
- | Structured payloads | Messages, tool calls, snapshots, attachments | Bound and process; persist only under a future typed retention policy |
34
+ | Structured payloads | Messages, tool calls, snapshots, attachments | Bound and process; arbitrary payload persistence remains unsupported |
35
+ | User-authored prompt recall | Canonical interactive input and bounded provenance | May persist only through the profile-isolated prompt-history policy below, never in the control store |
35
36
  | Terminal content | PTY bytes, scrollback, selection, rendered cells | Never persist in A1's control store or diagnostics |
36
37
  | Host topology metadata | Window/tab/pane/session IDs, layout shape, dimensions, revision | May persist; not terminal content |
37
38
  | Native proof evidence | Artifact hashes, source revisions, workloads, latency/resource measurements, paint diagnostics | May persist in versioned evidence files without terminal content |
@@ -42,6 +43,31 @@ Every asynchronous consumer must implement a finite queue or window. Backpressur
42
43
 
43
44
  Sanitization must classify before logging or storing. Unknown or untyped values are potentially sensitive by default and must not be persisted. Terminal bytes must never be written to logs as a debugging shortcut.
44
45
 
46
+ ## Typed prompt-history retention
47
+
48
+ The `prompt-history` feature owns only reusable interactive user input, not
49
+ structured-message archives. It stores one independent profile database under
50
+ `<effective-home>/.a1/data/history`, or `<A1_DATA_DIR>/history` when explicitly
51
+ overridden, never agent resources or cache/release directories. The default home
52
+ follows launch-profile resolution, including `A1_PROFILE_HOME`; other product
53
+ data paths are unchanged. Text is unencrypted and potentially sensitive. Retain up to 100 unique entries (configured
54
+ 10-100), at most 1 MiB per entry and 8 MiB total canonical text. Background queues
55
+ are limited to 32 writes/8 MiB per instance; reads are coalesced, lock retries are
56
+ bounded to one second off-thread, and graceful shutdown drains for at most two
57
+ seconds. SQLite page/journal limits and a 64 MiB maintenance threshold bound
58
+ physical growth separately from text retention.
59
+
60
+ Only typed canonical text, submission identity, recency/timestamp, input kind,
61
+ and bounded cwd/session provenance are allowed. No image bytes, transformed
62
+ agent prompts, environment/credential copies, tool results, terminal streams, or
63
+ private input in diagnostics are permitted. Disabling persistence is next-start
64
+ and does not erase data or stop other live instances. Upgrades, ordinary npm
65
+ uninstall/reinstall, and cache/release cleanup must not touch history. The new
66
+ default starts fresh without probing, importing, or deleting the old platform
67
+ store. Any old-store removal is a separate manual operation after its users have
68
+ stopped, not startup or cleanup behavior. See [prompt history](../features/prompt-history.md) for
69
+ retention, failure semantics, profile identity, and stopped-instance removal.
70
+
45
71
  ## Required architectural outcomes
46
72
 
47
73
  - Structured/RPC semantics must not be inferred from ANSI text, terminal timing, or visual content.
@@ -82,7 +82,7 @@ These paths are A1 control and release state, not Pi profile roots. All are over
82
82
  | Purpose | Override | Windows default | Unix default |
83
83
  |---|---|---|---|
84
84
  | Config | `A1_CONFIG_DIR` | `%APPDATA%\\a1` | `$XDG_CONFIG_HOME/a1` or `~/.config/a1` |
85
- | Durable data | `A1_DATA_DIR` | `%LOCALAPPDATA%\\a1` | `$XDG_DATA_HOME/a1` or `~/.local/share/a1` |
85
+ | Control/release data | `A1_DATA_DIR` | `%LOCALAPPDATA%\\a1` | `$XDG_DATA_HOME/a1` or `~/.local/share/a1` |
86
86
  | Runtime | `A1_RUNTIME_DIR` | `%LOCALAPPDATA%\\a1\\runtime` | `$XDG_RUNTIME_DIR/a1` or `<data>/runtime` |
87
87
  | Database | `A1_DATABASE_PATH` | `<data>/control.sqlite3` | `<data>/control.sqlite3` |
88
88
  | Endpoint | `A1_ENDPOINT` | runtime-scoped `a1-*` named pipe | `<runtime>/supervisor.sock` |
@@ -96,3 +96,17 @@ Do **not** remove `~/.a1/agent`; it is A1's current Pi profile root. `~/.pi/agen
96
96
  The obsolete npm package `@timurproko/addone` is deprecated with the registry message `This package is obsolete. Use @timurproko/a1 instead.` It is not a current identity, compatibility channel, or rollback source. Whole-package unpublication was rejected by npm policy; any later removal is owner-controlled registry administration and does not change the A1 runtime contract.
97
97
 
98
98
  The launch-profile feature separately owns A1's `~/.a1/agent` root and preserves ordinary Pi resolution through `~/.pi/agent`.
99
+
100
+ ## Internal naming validation
101
+
102
+ The required PR naming job inspects complete new and changed source files. `npm run check:names` performs the full tracked audit, also required by nightly full-release validation. See [internal naming and clean cutover](internal-naming.md) for public/private environment ownership, required checks, and protected user data.
103
+
104
+ ### Prompt history
105
+
106
+ Prompt history has a separate default: `<effective-home>/.a1/data/history/<profile-id>.sqlite3`
107
+ on Windows, Linux, and macOS. The effective home follows launch-profile resolution
108
+ (`A1_PROFILE_HOME` or the OS home), not `XDG_DATA_HOME`. An explicit `A1_DATA_DIR`
109
+ continues to select `<A1_DATA_DIR>/history` as well as the control/release data root.
110
+ The home-based history default does not relocate the paths above or the compile
111
+ cache at `<data>/cache/compile`. See [prompt history](../features/prompt-history.md)
112
+ for the deliberate fresh start without migration, privacy, and manual removal.
@@ -0,0 +1,149 @@
1
+ # Persistent prompt history
2
+
3
+ Bare A1 recalls recent prompts across sessions and projects within the same A1
4
+ profile. It is input recall, not conversation recovery or agent memory. The Pi
5
+ comparison (`a1 pi`) retains its ordinary current-session history.
6
+
7
+ ## Recall
8
+
9
+ Use Up/Down at the editor's normal history boundaries. Up enters older prompts
10
+ with the caret at the end; Down enters newer prompts at the beginning. Moving
11
+ past the newest restores your draft, including its cursor and live pasted text.
12
+ Multiline cursor movement and autocomplete keep their existing priority.
13
+
14
+ The existing editor border shows `History 100/100` for the newest of 100 entries
15
+ and `History 1/100` for the oldest. The label uses the status bar's neutral grey
16
+ (`dim` theme role), independently of the thinking/bash colors on the input bars. Repeated prompts move forward instead of
17
+ creating duplicates. Other instances refresh in the background; the selected
18
+ history and its count stay fixed until you leave that browse cycle. An
19
+ extension-provided custom editor keeps its own behavior; the default editor is
20
+ resynchronized when restored.
21
+
22
+ Ordinary prompts, steering, follow-ups, queued inputs, nonempty bash commands,
23
+ and user-entered skill/template/extension prompt routes are eligible. Opening
24
+ settings or session/workflow screens does not add history. Loading a transcript,
25
+ retrying a dispatch internally, draining a queue, or displaying a suggestion does
26
+ not create another entry. An explicit user submission is retained even if the
27
+ provider later rejects it or the turn is interrupted.
28
+
29
+ Text pastes, URL targets, and file paths remain reusable after restart. History
30
+ keeps the user invocation before template/extension expansion, not the expanded
31
+ request. Image-bearing prompts retain only their text; images are not reattached.
32
+ Image-only prompts do not create saved entries. No v2, Pi, or Claude history is
33
+ imported automatically.
34
+
35
+ ## Storage and privacy
36
+
37
+ | Platform | Default durable location |
38
+ |---|---|
39
+ | Windows | `%USERPROFILE%/.a1/data/history/<profile-id>.sqlite3` |
40
+ | Linux and macOS | `~/.a1/data/history/<profile-id>.sqlite3` |
41
+ | Explicit override | `<A1_DATA_DIR>/history/<profile-id>.sqlite3` |
42
+
43
+ The default uses A1's effective profile home: `A1_PROFILE_HOME` when set, otherwise
44
+ the operating-system home. A custom agent-profile directory changes the history
45
+ identity, not this default root. `A1_DATA_DIR` takes precedence for storage;
46
+ `XDG_DATA_HOME` does not redirect default history. Control metadata, settings,
47
+ agent resources, releases, logs, runtime files, and caches keep their existing
48
+ locations.
49
+
50
+ **The home-based default starts fresh.** Previous versions used
51
+ `%LOCALAPPDATA%/a1/history` on Windows, or `$XDG_DATA_HOME/a1/history` /
52
+ `~/.local/share/a1/history` on Unix. A1 does not probe, import, merge, delete, or
53
+ fall back to those stores. Explicit `A1_DATA_DIR` selections still work normally.
54
+ Old and new releases using different roots do not synchronize history.
55
+
56
+ The profile filename is `a1-` followed by a SHA-256 digest of a versioned tuple
57
+ containing the launch kind and normalized effective agent-profile path. It is
58
+ independent of project, session, checkout, and release. Windows ordinary case and
59
+ separator variants normalize together. Different profile roots use different
60
+ files. Moving a profile, unresolved symlink aliases, or selecting a different
61
+ data root can select a different history; A1 never silently merges or imports it.
62
+
63
+ The database is separate from `control.sqlite3`, agent resources, and disposable
64
+ caches. Upgrades, ordinary npm uninstall/reinstall, release rollback, cache cleanup,
65
+ and conversation deletion do not clear it. Reusing saved history requires the
66
+ same profile and history root; explicitly deleting user data still removes it.
67
+ SQLite may keep `-wal` and `-shm` sidecars beside the database.
68
+
69
+ **History is unencrypted potentially sensitive user text.** Owner permissions
70
+ are restricted where supported; Windows uses inherited ACLs at the selected
71
+ history directory. Review parent-directory permissions if you customize your home
72
+ or override root. These protections do not make it safe to submit secrets.
73
+ Credential files, image data, arbitrary environment values, assistant/tool output, and terminal
74
+ streams are not copied into this store. Prompt content and private provenance
75
+ must not appear in history diagnostics or test evidence.
76
+
77
+ ## Settings and limits
78
+
79
+ The History section in `/settings` provides:
80
+
81
+ - **Persistent history:** on by default; applies on the next start. Off disables
82
+ storage and cross-session recall for subsequent launches, not current-session
83
+ recovery. Existing enabled instances keep running until closed.
84
+ - **History limit:** 10-100 in increments of 10, default 100; applies when a new
85
+ enabled instance starts. All writers then use that profile store's updated
86
+ retention limit. Raising the limit cannot restore pruned entries.
87
+
88
+ The settings use A1's existing settings document, not Pi's settings or a separate
89
+ history configuration file. Disabling persistence does not delete saved data;
90
+ re-enabling makes compatible retained entries available again.
91
+
92
+ Additional bounds protect memory and disk:
93
+
94
+ - At most 1 MiB UTF-8 per persisted prompt, never silently truncated.
95
+ - At most 8 MiB retained canonical text, evicting oldest entries even below the
96
+ configured count.
97
+ - At most 32 queued/in-flight writes and 8 MiB queued text per instance.
98
+ - Provenance: up to 8 KiB cwd and 256 bytes session identity; oversized optional
99
+ provenance is omitted.
100
+ - Short off-thread transactions, a one-second lock retry window, and coalesced
101
+ refresh with at most one read in flight.
102
+ - SQLite page/journal limits and a 64 MiB database/sidecar maintenance threshold;
103
+ text limits exclude transient SQLite overhead.
104
+
105
+ Persistence failure leaves prompt execution and local recall usable. A corrupt,
106
+ wrong-profile, or newer-schema database is preserved, not silently recreated.
107
+ A committed entry survives restart. A hard kill before asynchronous commit can
108
+ lose the newest queued entries. Graceful exit attempts to drain writes within
109
+ two seconds and reports an incomplete flush without preventing exit.
110
+
111
+ ## Remove saved history
112
+
113
+ First close **every instance using the selected profile**. Then remove only that
114
+ profile's `.sqlite3` file and its matching `-wal` and `-shm` sidecars, if present.
115
+ Do not delete an open database, the whole `.a1` directory, or the whole
116
+ application-data root. Disabling the setting alone is not an erase operation.
117
+ There is no interactive clear/export command in this release.
118
+
119
+ Removing a former default store is likewise a one-time manual cleanup, not an
120
+ application feature. Wait until you have switched to the new version and closed
121
+ all instances using the old store; an older running version can otherwise keep
122
+ using or recreate it. Remove only the identified old profile database and matching
123
+ sidecars, not other profiles or either application's caches.
124
+
125
+ ## Manual acceptance
126
+
127
+ Build the checkout, then launch it through `./scripts/dev`. Use an isolated
128
+ `A1_DATA_DIR` for disposable history checks; keep that same directory on each
129
+ restart and in both concurrent terminals. The development launcher always sets
130
+ an isolated `A1_DATA_DIR`; to try the home-based location in that launcher,
131
+ explicitly select `A1_DATA_DIR=<effective-home>/.a1/data` and keep
132
+ `A1_DATABASE_PATH` in a separate disposable directory so control metadata is not
133
+ placed beside history. For a history-only review, `NODE_DISABLE_COMPILE_CACHE=1`
134
+ also avoids creating compile-cache files under that explicitly overridden root.
135
+ The focused path/composition tests cover normal no-override selection. Test:
136
+
137
+ 1. Submit two text prompts and one repeated prompt; start `/new`, then restart.
138
+ The latest unique prompts remain recallable.
139
+ 2. Browse multiline input with a draft present. Check v2 caret placement,
140
+ newest/oldest numbering, and draft restoration.
141
+ 3. Submit from a second instance while the first browses. The first selection
142
+ stays fixed; the update appears on a later safe browse cycle.
143
+ 4. Recall pasted text after restart; image tokens must not promise reattachment.
144
+ 5. Save both History settings, restart, and verify effective values and opt-out.
145
+ 6. Use a second isolated effective profile and verify no sharing. Run
146
+ `./scripts/dev pi` and verify its ordinary history/editor remain unchanged.
147
+
148
+ Source ownership and differential editor evidence are described in
149
+ [history-editor-provenance.md](../architecture/history-editor-provenance.md).
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@timurproko/a1",
3
- "version": "0.1.8-dev.290",
3
+ "version": "0.1.8-dev.322",
4
4
  "description": "Standalone terminal workspace for supervised native and managed agents",
5
5
  "type": "module",
6
+ "privateLaunchContract": "neutral-launch-v1",
6
7
  "packageManager": "npm@11.13.0",
7
8
  "bin": {
8
9
  "a1": "bin/cli.js"
@@ -26,7 +27,9 @@
26
27
  "build": "npm run clean && tsc -p tsconfig.build.json && node scripts/development/build-process-guardian.mjs && node scripts/release/generate-runtime-payload-inventory.mjs",
27
28
  "build:process-guardian": "node scripts/development/build-process-guardian.mjs",
28
29
  "typecheck": "tsgo -p tsconfig.json --noEmit",
29
- "check:architecture": "node scripts/governance/check-architecture.mjs && node scripts/governance/product-identifier-policy.mjs --check && node scripts/governance/check-product-identity-boundaries.mjs && node scripts/governance/check-package-identity.mjs && node scripts/governance/check-pinned-pi-source-ledger.mjs && node scripts/governance/check-terminal-host-provenance.mjs",
30
+ "check:architecture": "node scripts/governance/check-architecture.mjs && node scripts/governance/check-product-identity-boundaries.mjs && node scripts/governance/check-package-identity.mjs && node scripts/governance/check-pinned-pi-source-ledger.mjs && node scripts/governance/check-terminal-host-provenance.mjs",
31
+ "check:names": "node scripts/governance/product-identifier-policy.mjs --check",
32
+ "check:names:changed": "node scripts/governance/product-identifier-policy.mjs --check --selection .artifacts/validation/impact.json",
30
33
  "check:code-documentation": "node scripts/governance/check-code-documentation.mjs --mode full",
31
34
  "check:code-documentation:changed": "node scripts/release/run-changed-documentation.mjs",
32
35
  "select:validation-impact": "node scripts/release/select-validation-impact.mjs",
@@ -70,6 +73,7 @@
70
73
  "undici": "8.9.0"
71
74
  },
72
75
  "devDependencies": {
76
+ "@lezer/python": "1.1.19",
73
77
  "@types/cross-spawn": "6.0.6",
74
78
  "@types/node": "24.2.1",
75
79
  "@types/semver": "7.8.0",
@@ -78,7 +82,8 @@
78
82
  "node-pty": "1.1.0",
79
83
  "tsx": "4.20.3",
80
84
  "typescript": "5.9.2",
81
- "vitest": "3.2.7"
85
+ "vitest": "3.2.7",
86
+ "yaml": "2.9.1"
82
87
  },
83
88
  "keywords": [
84
89
  "cli",