@arnilo/prism 0.0.19 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/dist/agents.js +17 -2
- package/dist/context-budget.d.ts +5 -1
- package/dist/context-budget.js +55 -9
- package/dist/contracts.d.ts +16 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +4 -1
- package/dist/input.d.ts +6 -0
- package/dist/input.js +42 -8
- package/dist/skill-disclosure.d.ts +35 -0
- package/dist/skill-disclosure.js +101 -0
- package/dist/skill-load.d.ts +25 -0
- package/dist/skill-load.js +112 -0
- package/dist/tool-result-fold.d.ts +40 -0
- package/dist/tool-result-fold.js +164 -0
- package/docs/0.1.0-readiness.md +5 -5
- package/docs/agent-session-runtime.md +2 -0
- package/docs/caveman.md +129 -0
- package/docs/coding-agent-tools.md +123 -21
- package/docs/coding-security.md +3 -3
- package/docs/context-and-skills.md +94 -7
- package/docs/extensions.md +2 -0
- package/docs/index.md +10 -6
- package/docs/migration.md +71 -0
- package/docs/ponytail.md +127 -0
- package/docs/release-and-install.md +78 -15
- package/package.json +1 -1
package/docs/ponytail.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Ponytail behavior integration
|
|
2
|
+
|
|
3
|
+
## What it does
|
|
4
|
+
|
|
5
|
+
`@arnilo/prism-ponytail` is an optional package that wires [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) into Prism contribution contracts.
|
|
6
|
+
|
|
7
|
+
It registers upstream skills and commands, injects active mode instructions via upstream `getPonytailInstructions` / `filterSkillBodyForMode`, and persists mode as session custom `ponytail-mode` entries. Import is inert; missing upstream fails closed at `setup` with a bounded redacted error.
|
|
8
|
+
|
|
9
|
+
## When to use it
|
|
10
|
+
|
|
11
|
+
Use it when a host wants lazy-minimalism coding behavior (`lite`, `full`, `ultra`) with upstream Ponytail skills (`ponytail-audit`, `ponytail-debt`, `ponytail-gain`, `ponytail-help`, `ponytail-review`) in a Prism extension kernel.
|
|
12
|
+
|
|
13
|
+
Install optional peer `@dietrichgebert/ponytail@^4.8.4` **or** pass `upstreamPath` to a checkout with `skills/` and `hooks/`.
|
|
14
|
+
|
|
15
|
+
Pair with progressive disclosure: mode slices on the `ponytail-mode` injector; full skill bodies via `load_skill` only.
|
|
16
|
+
|
|
17
|
+
## Inputs / request
|
|
18
|
+
|
|
19
|
+
`createPonytailExtension(options)`:
|
|
20
|
+
|
|
21
|
+
| Field | Type | Required | Purpose |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| `upstreamPath` | `string` | no | Override path to Ponytail root; default resolves optional peer package. |
|
|
24
|
+
| `defaultMode` | `PonytailMode` | no | Initial mode when no session entry exists (default `full`). |
|
|
25
|
+
| `quietStartup` | `boolean` | no | Suppress startup status events. |
|
|
26
|
+
| `appendEntry` | `(entry, opts?) => Promise<void>` | yes | Host session append (OM `attach` pattern). |
|
|
27
|
+
| `getEntries` | `() => readonly SessionEntry[] \| Promise<...>` | yes | Current branch entries for mode restore. |
|
|
28
|
+
| `configPath` | `string` | no | Bounded local config for `defaultMode` / `quietStartup` / `hideStatus`. |
|
|
29
|
+
|
|
30
|
+
`PonytailMode`: `off` \| `lite` \| `full` \| `ultra`.
|
|
31
|
+
|
|
32
|
+
Session custom entry shape:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{ "kind": "custom", "data": { "type": "ponytail-mode", "mode": "full" } }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Registered skills: `ponytail`, `ponytail-audit`, `ponytail-debt`, `ponytail-gain`, `ponytail-help`, `ponytail-review`.
|
|
39
|
+
|
|
40
|
+
Registered commands: `ponytail`, `ponytail-review`, `ponytail-audit`, `ponytail-gain`, `ponytail-debt`, `ponytail-help`.
|
|
41
|
+
|
|
42
|
+
`ponytail` command actions: `lite|full|ultra|off`, `status`, `default <mode>`.
|
|
43
|
+
|
|
44
|
+
## Outputs / response / events
|
|
45
|
+
|
|
46
|
+
| Export | Purpose |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `createPonytailExtension(options)` | Returns an inert `Extension` until `kernel.load([...])`. |
|
|
49
|
+
| `ponytail-mode` injector | `InstructionInjector` calling upstream `getPonytailInstructions(mode)`. |
|
|
50
|
+
| `ponytail` command | Set mode, report status, or persist default mode to config file. |
|
|
51
|
+
| Alias commands | Dispatch `{ skill, dispatch: "load_skill" }` for companion skills. |
|
|
52
|
+
| `ponytail:status` / `ponytail:loaded` events | Optional host metadata (no statusline shell scripts). |
|
|
53
|
+
|
|
54
|
+
Deactivation: exact phrases `stop ponytail` and `normal mode`.
|
|
55
|
+
|
|
56
|
+
## Request/response example
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{ "command": "ponytail", "args": { "mode": "lite" }, "sessionId": "s1" }
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{ "kind": "custom", "data": { "type": "ponytail-mode", "mode": "lite" } }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Implementation example
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { createPonytailExtension } from "@arnilo/prism-ponytail";
|
|
70
|
+
import {
|
|
71
|
+
createExtensionKernel,
|
|
72
|
+
createLoadSkillTool,
|
|
73
|
+
createLoadedSkillSet,
|
|
74
|
+
createMemorySessionStore,
|
|
75
|
+
createSkillRegistry,
|
|
76
|
+
} from "@arnilo/prism";
|
|
77
|
+
|
|
78
|
+
const store = createMemorySessionStore();
|
|
79
|
+
const callbacks = {
|
|
80
|
+
appendEntry: async (entry, options) => store.append(entry, options),
|
|
81
|
+
getEntries: async () => store.list("s1"),
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const kernel = createExtensionKernel({ errorPolicy: "throw" });
|
|
85
|
+
await kernel.load([
|
|
86
|
+
createPonytailExtension({
|
|
87
|
+
upstreamPath: undefined, // optional peer @dietrichgebert/ponytail
|
|
88
|
+
defaultMode: "full",
|
|
89
|
+
quietStartup: true,
|
|
90
|
+
...callbacks,
|
|
91
|
+
}),
|
|
92
|
+
]);
|
|
93
|
+
|
|
94
|
+
const registry = createSkillRegistry(kernel.registries.skills.list());
|
|
95
|
+
const loaded = createLoadedSkillSet();
|
|
96
|
+
const loadSkill = createLoadSkillTool({ registry, loaded });
|
|
97
|
+
|
|
98
|
+
await kernel.registries.commands.get("ponytail")!.execute({ mode: "lite" }, { sessionId: "s1" });
|
|
99
|
+
// Select instructionInjectors: ["ponytail-mode"] on runs that should receive mode slices.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
See `examples/caveman-ponytail.ts` for combined Caveman + Ponytail progressive disclosure demo (network-free fixtures).
|
|
103
|
+
|
|
104
|
+
## Extension and configuration notes
|
|
105
|
+
|
|
106
|
+
- Import alone registers nothing (`sideEffects: false`); no timers, watchers, network, or shell scripts.
|
|
107
|
+
- Upstream hook modules load via `createRequire` from resolved root — instruction strings are not forked in Prism.
|
|
108
|
+
- Mode restore scans `getEntries()` for latest `data.type === "ponytail-mode"` (OM attach pattern).
|
|
109
|
+
- `ponytail-subagent` hook is not wired; nested-agent behavior is host responsibility.
|
|
110
|
+
- No TUI statusline scripts; use `ponytail status` command or extension events.
|
|
111
|
+
- Not included in `@arnilo/prism-code` or `@arnilo/prism-sdk` profiles — opt-in install only.
|
|
112
|
+
|
|
113
|
+
## Security and performance notes
|
|
114
|
+
|
|
115
|
+
- Upstream text is untrusted; reads bounded (`MAX_SKILL_FILE_BYTES` 256 KiB, `MAX_INJECTED_INSTRUCTION_BYTES` 32 KiB).
|
|
116
|
+
- Config writes only to host `configPath` with size cap (`MAX_CONFIG_FILE_BYTES` 16 KiB).
|
|
117
|
+
- Errors redact absolute paths and home directories.
|
|
118
|
+
- O(skills) setup scan; O(1) mode tracking per turn; no background workers.
|
|
119
|
+
|
|
120
|
+
## Related APIs
|
|
121
|
+
|
|
122
|
+
- [Caveman behavior integration](caveman.md): complementary terse-communication mode package.
|
|
123
|
+
- [Extension kernel and event bus](extensions.md): explicit `kernel.load`.
|
|
124
|
+
- [Context and skills](context-and-skills.md): progressive catalog + `load_skill`.
|
|
125
|
+
- [Instruction injection](instruction-injection.md): `ponytail-mode` injector.
|
|
126
|
+
- [Observational memory compaction package](compaction-observational-memory.md): session callback attach pattern.
|
|
127
|
+
- [Migration guide](migration.md): `0.0.21 → 0.0.22` notes.
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## What it does
|
|
4
4
|
|
|
5
|
-
Prism is published as one core package, thirty-
|
|
5
|
+
Prism is published as one core package, thirty-nine first-party capability packages, and six pure-manifest family/profile packages (**46** publishable manifests total). This page describes how they are packed, what each tarball contains, how to install them, the required `@arnilo/prism` peer dependency, the release workflow, and the offline test budget. The measurable 1.0 readiness gates (command-per-gate) live in [`0.1.0-readiness.md`](./0.1.0-readiness.md).
|
|
6
6
|
|
|
7
7
|
Core package:
|
|
8
8
|
|
|
9
9
|
- `@arnilo/prism` — the runtime, contracts, registries, streaming events, CLI (including `prism init`), and the `/docs` hub. `files`: `dist` (with `!dist/__tests__` and `!dist/**/*.map` negations), `docs`, `templates`, `CHANGELOG.md`. `bin`: `prism` -> `dist/cli.js`. `sideEffects`: `["dist/cli.js"]`.
|
|
10
10
|
|
|
11
|
-
First-party workspace packages (each has non-optional `@arnilo/prism@0.0.
|
|
11
|
+
First-party workspace packages (each has non-optional `@arnilo/prism@0.0.22` peer and `sideEffects: false`; RAG also peers on memory, and server also peers on workflows):
|
|
12
12
|
|
|
13
13
|
- `@arnilo/prism-provider-anthropic`, `@arnilo/prism-provider-google`, `@arnilo/prism-provider-openai`, `@arnilo/prism-provider-openrouter`, `@arnilo/prism-provider-kimi`, `@arnilo/prism-provider-zai`, `@arnilo/prism-provider-opencode-go`, `@arnilo/prism-provider-neuralwatt` — provider adapters.
|
|
14
14
|
- `@arnilo/prism-provider-azure`, `@arnilo/prism-provider-bedrock`, `@arnilo/prism-provider-vertex` — optional enterprise-cloud adapters (Entra/IAM/ADC; separate from consumer Anthropic/Google).
|
|
@@ -33,10 +33,12 @@ First-party workspace packages (each has non-optional `@arnilo/prism@0.0.19` pee
|
|
|
33
33
|
- `@arnilo/prism-web-tools` — optional bounded host-selected Brave/Exa search and Firecrawl Markdown/schema extraction; native fetch, no vendor SDK/browser.
|
|
34
34
|
- `@arnilo/prism-browser` — optional host-supplied Playwright browser tools (`browser_open`/`browser_snapshot`/`browser_act`/`browser_close`); import launches nothing; `playwright-core@1.61.0` optional peer.
|
|
35
35
|
- `@arnilo/prism-ag-ui` — optional bounded AG-UI mapper/authorized Web handler/replay plus stable `./acp` sibling; root and ACP imports are inert.
|
|
36
|
+
- `@arnilo/prism-caveman` — optional upstream Caveman behavior integration (`upstreamPath` required; not in code/sdk/all profiles).
|
|
37
|
+
- `@arnilo/prism-ponytail` — optional upstream Ponytail behavior integration (peer `@dietrichgebert/ponytail` or `upstreamPath`; not in code/sdk/all profiles).
|
|
36
38
|
|
|
37
39
|
### 0.0.12 AG-UI package boundary
|
|
38
40
|
|
|
39
|
-
`@arnilo/prism-ag-ui` is a publishable optional code package with root AG-UI exports and stable `./acp` sibling, peer `@arnilo/prism@0.0.
|
|
41
|
+
`@arnilo/prism-ag-ui` is a publishable optional code package with root AG-UI exports and stable `./acp` sibling, peer `@arnilo/prism@0.0.22`, pinned `@ag-ui/core@0.0.57` / `@agentclientprotocol/sdk@1.3.0`, and no import-time network/listener/run. It is included by `@arnilo/prism-all` only—not `@arnilo/prism-code` or `@arnilo/prism-sdk`—so coding and SDK profiles stay free of UI protocol dependencies.
|
|
40
42
|
|
|
41
43
|
Family/profile packages (pure manifests, no code or `dist`; ship `README.md` and `CHANGELOG.md`; use exact hard `dependencies`):
|
|
42
44
|
|
|
@@ -78,9 +80,9 @@ Consumers install the core package for the runtime and add first-party packages
|
|
|
78
80
|
| Run the default (network-free) test suite | `npm test` |
|
|
79
81
|
| Dry-run pack core + every package | `npm run pack:dry-run` |
|
|
80
82
|
| Local mirror of the release verify gate | `npm run release:dry-run` |
|
|
81
|
-
| Validate clean tag/version/ranges and reject registry collisions | `npm run release:check -- --version 0.0.
|
|
82
|
-
| Preview deterministic publish order | `npm run release:publish -- --version 0.0.
|
|
83
|
-
| Resume interrupted tagged publication | `npm run release:publish -- --version 0.0.
|
|
83
|
+
| Validate clean tag/version/ranges and reject registry collisions | `npm run release:check -- --version 0.0.22` |
|
|
84
|
+
| Preview deterministic publish order | `npm run release:publish -- --version 0.0.22 --dry-run --allow-dirty --allow-untagged` |
|
|
85
|
+
| Resume interrupted tagged publication | `npm run release:publish -- --version 0.0.22 --resume --report release-artifacts/publish-report.json` |
|
|
84
86
|
| Full SDK readiness gate (typecheck + offline tests + pack) | `npm run sdk:ready` |
|
|
85
87
|
|
|
86
88
|
Public core import specifiers (from the root `exports` map):
|
|
@@ -117,7 +119,7 @@ A packed tarball contains only public compiled output and release files:
|
|
|
117
119
|
- Code packages ship `README.md`, `LICENSE`, and `CHANGELOG.md`; family/profile packages ship `README.md` and `CHANGELOG.md`.
|
|
118
120
|
- The core tarball additionally ships the full `docs/` directory (the docs hub) and `templates/init/` used by `prism init`.
|
|
119
121
|
- `dist/cli.js` and the `bin` link in core.
|
|
120
|
-
- **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.0.
|
|
122
|
+
- **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.0.22.tgz`; first-party packages produce `arnilo-prism-provider-<name>-0.0.22.tgz` / `arnilo-prism-compaction-<name>-0.0.22.tgz` / `arnilo-prism-coding-agent-0.0.22.tgz`; family/profile packages produce `arnilo-prism-{providers,compaction,base,code,sdk,all}-0.0.22.tgz`. The CLI bin name `prism` is unaffected by the package name (`npx prism` still works; npm allows the bin field to differ from the package name).
|
|
121
123
|
|
|
122
124
|
Excluded from every tarball by `files` negation:
|
|
123
125
|
|
|
@@ -136,9 +138,9 @@ Excluded from every tarball by `files` negation:
|
|
|
136
138
|
"name": "host-app",
|
|
137
139
|
"type": "module",
|
|
138
140
|
"dependencies": {
|
|
139
|
-
"@arnilo/prism": "0.0.
|
|
140
|
-
"@arnilo/prism-provider-openai": "0.0.
|
|
141
|
-
"@arnilo/prism-compaction-observational-memory": "0.0.
|
|
141
|
+
"@arnilo/prism": "0.0.22",
|
|
142
|
+
"@arnilo/prism-provider-openai": "0.0.22",
|
|
143
|
+
"@arnilo/prism-compaction-observational-memory": "0.0.22"
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
```
|
|
@@ -181,11 +183,11 @@ For SDK readiness, run the same one-command gate directly. It composes existing
|
|
|
181
183
|
npm run sdk:ready
|
|
182
184
|
```
|
|
183
185
|
|
|
184
|
-
Release publication derives all **
|
|
186
|
+
Release publication derives all **46** manifests from the workspace once, validates exact `0.0.22` manifest/lockfile/internal ranges, then uses deterministic dependency order. `release:check` requires a clean commit tagged `v0.0.22` and rejects any existing registry version. `release:publish --resume` skips only registry versions whose internal dependency fingerprint matches the local manifest; conflicting versions fail closed. Each attempted package is written immediately to the JSON report, so a failed job can rerun safely. `--dry-run` performs registry availability checks and invokes `npm publish --dry-run` with explicit public access, provenance, and `latest` tag, but does not publish.
|
|
185
187
|
|
|
186
188
|
```bash
|
|
187
|
-
npm run release:check -- --version 0.0.
|
|
188
|
-
npm run release:publish -- --version 0.0.
|
|
189
|
+
npm run release:check -- --version 0.0.22
|
|
190
|
+
npm run release:publish -- --version 0.0.22 --dry-run --allow-dirty --allow-untagged
|
|
189
191
|
```
|
|
190
192
|
|
|
191
193
|
`--allow-dirty` and `--allow-untagged` exist only for local preview; real publication and CI never pass them. npm registry calls occur only in these release preflight/publication commands, never build/test/package discovery.
|
|
@@ -196,6 +198,67 @@ Optional live smoke tests stay separate from SDK readiness because they require
|
|
|
196
198
|
PRISM_LIVE_PROVIDER_TESTS=1 npm run test --workspaces --if-present
|
|
197
199
|
```
|
|
198
200
|
|
|
201
|
+
### 0.0.22 publish handoff
|
|
202
|
+
|
|
203
|
+
**Decision: GO after protected operator prerequisites below.** Release **0.0.22** (Phase 5 third-party behavior integrations, plan 005) ships `@arnilo/prism-caveman` and `@arnilo/prism-ponytail` as opt-in behavior packages (upstream Caveman/Ponytail wiring, session mode persistence, progressive disclosure + injector split). Core `@arnilo/prism` runtime is unchanged. The publish graph is **46 manifests** (+2). No intentional pre-1.0 breaks for hosts that do not install the new packages — see [migration](migration.md) under `0.0.21 → 0.0.22 third-party behavior integrations`.
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
git diff --check
|
|
207
|
+
npm ci
|
|
208
|
+
npm run sdk:ready
|
|
209
|
+
node --test scripts/budget-gate.test.mjs
|
|
210
|
+
node scripts/scan-secrets.mjs && node scripts/verify-sbom.mjs
|
|
211
|
+
npm audit --audit-level=moderate
|
|
212
|
+
npm run release:gate
|
|
213
|
+
npm run release:check -- --version 0.0.22 --allow-dirty --allow-untagged --report /tmp/prism-0.0.22-preflight.json
|
|
214
|
+
npm run release:publish -- --version 0.0.22 --dry-run --allow-dirty --allow-untagged --report /tmp/prism-0.0.22-dry-run.json
|
|
215
|
+
git tag -s v0.0.22 -m "Prism 0.0.22"
|
|
216
|
+
git verify-tag v0.0.22
|
|
217
|
+
git push origin v0.0.22
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 0.0.21 publish handoff
|
|
221
|
+
|
|
222
|
+
**Decision: GO after protected operator prerequisites below.** Release **0.0.21** (Phase 4 coding-tool capability gaps, plan 004) ships `repo_search` `outputMode`, bounded `glob`, optional session-scoped read-before-write, bounded `delete`/`move`, and coding-security approval/sandbox wiring. The exact graph stays **44 publishable manifests**; no package added or retired. Intentional pre-1.0 breaks are documented in [migration](migration.md) under `0.0.20 → 0.0.21 coding-tool capability gaps`.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
git diff --check
|
|
226
|
+
npm ci
|
|
227
|
+
npm run sdk:ready
|
|
228
|
+
node --test scripts/budget-gate.test.mjs
|
|
229
|
+
node scripts/scan-secrets.mjs && node scripts/verify-sbom.mjs
|
|
230
|
+
npm audit --audit-level=moderate
|
|
231
|
+
npm run release:gate
|
|
232
|
+
npm run release:check -- --version 0.0.21 --allow-dirty --allow-untagged --report /tmp/prism-0.0.21-preflight.json
|
|
233
|
+
npm run release:publish -- --version 0.0.21 --dry-run --allow-dirty --allow-untagged --report /tmp/prism-0.0.21-dry-run.json
|
|
234
|
+
git tag -s v0.0.21 -m "Prism 0.0.21"
|
|
235
|
+
git verify-tag v0.0.21
|
|
236
|
+
git push origin v0.0.21
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
The dry-run checks every registry collision and executes npm's non-publishing tarball validation for each dependency-ordered manifest. The protected tag workflow alone publishes through `npm run release:publish -- --version "${GITHUB_REF_NAME#v}" --resume --report release-artifacts/publish-report.json`; re-run a failed job for the same tag. `npm audit signatures --json --include-attestations` and artifact checksums remain post-publish checks.
|
|
240
|
+
|
|
241
|
+
### 0.0.20 publish handoff
|
|
242
|
+
|
|
243
|
+
**Decision: GO after protected operator prerequisites below.** Release **0.0.20** (Phase 3 skills and context progressive disclosure, plan 003) ships progressive skill catalog assembly (`skillsDisclosure`), session `load_skill`, empty `SkillRegistry` default with `activateAllSkills` migration opt-in, priority-aware context budget demotion, and optional `toolResultFold`. The exact graph stays **44 publishable manifests**; no package added or retired. Intentional pre-1.0 breaks are documented in [migration](migration.md) under `0.0.19 → 0.0.20 skills and context progressive disclosure`.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
git diff --check
|
|
247
|
+
npm ci
|
|
248
|
+
npm run sdk:ready
|
|
249
|
+
node --test scripts/budget-gate.test.mjs
|
|
250
|
+
node scripts/scan-secrets.mjs && node scripts/verify-sbom.mjs
|
|
251
|
+
npm audit --audit-level=moderate
|
|
252
|
+
npm run release:gate
|
|
253
|
+
npm run release:check -- --version 0.0.20 --allow-dirty --allow-untagged --report /tmp/prism-0.0.20-preflight.json
|
|
254
|
+
npm run release:publish -- --version 0.0.20 --dry-run --allow-dirty --allow-untagged --report /tmp/prism-0.0.20-dry-run.json
|
|
255
|
+
git tag -s v0.0.20 -m "Prism 0.0.20"
|
|
256
|
+
git verify-tag v0.0.20
|
|
257
|
+
git push origin v0.0.20
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
The dry-run checks every registry collision and executes npm's non-publishing tarball validation for each dependency-ordered manifest. The protected tag workflow alone publishes through `npm run release:publish -- --version "${GITHUB_REF_NAME#v}" --resume --report release-artifacts/publish-report.json`; re-run a failed job for the same tag. `npm audit signatures --json --include-attestations` and artifact checksums remain post-publish checks.
|
|
261
|
+
|
|
199
262
|
### 0.0.19 publish handoff
|
|
200
263
|
|
|
201
264
|
**Decision: GO after protected operator prerequisites below.** Release **0.0.19** (Phase 2 observational memory lifecycle, plan 002) ships `@arnilo/prism-compaction-observational-memory` attach lifecycle, four-layer provider context, nested settings with legacy map, source-faithful recall/paging, and hard fold/render caps. Core `@arnilo/prism` runtime is unchanged. The exact graph stays **44 publishable manifests**; no package added or retired. Intentional pre-1.0 breaks are documented in [migration](migration.md) under `0.0.18 → 0.0.19 observational memory lifecycle`.
|
|
@@ -814,8 +877,8 @@ npm publication is not transactional and published versions are immutable. Parti
|
|
|
814
877
|
|
|
815
878
|
## Extension and configuration notes
|
|
816
879
|
|
|
817
|
-
- **Required `@arnilo/prism` peer.** Every first-party code package declares a non-optional `@arnilo/prism@0.0.
|
|
818
|
-
- **Public access.** All
|
|
880
|
+
- **Required `@arnilo/prism` peer.** Every first-party code package declares a non-optional `@arnilo/prism@0.0.22` peer (`peerDependenciesMeta` must not mark `@arnilo/prism` optional; other peers such as `playwright-core` may be optional). The range stays pinned to `0.0.22` for the current 0.x release and will widen to `^1.0.0` at the 1.x stable release. Inside the workspace each package also declares `"@arnilo/prism": "file:../.."` in `devDependencies` so `npm install` resolves the peer locally; that devDependency is stripped from consumer installs and is not a runtime dependency.
|
|
881
|
+
- **Public access.** All 46 manifests (40 code packages + 6 family/profile packages) declare `"publishConfig": { "access": "public" }`; the publisher also passes `--access public` explicitly because scoped packages otherwise default to restricted on first publish.
|
|
819
882
|
- **Map retention knob.** Source maps are emitted locally but stripped from tarballs by `!dist/**/*.map`. Removing that `files` negation ships maps in releases (larger tarballs, better consumer stack traces).
|
|
820
883
|
- **Release workflow.** `.github/workflows/release.yml` has six jobs. `verify` runs network-free SDK readiness on Node 24; `node20-compat` builds/imports every public root `exports` default target on Node 20 for declared `engines.node >=20` (docs examples need Node >=22.6 native TypeScript stripping); `postgres-integration` uses `pgvector/pgvector:pg16`; `supply-chain` runs high-severity audit, SPDX/license policy, and tracked-source secret scanning; and tag-only `codeql-release` runs SAST. Tag-only `publish` needs all five gates, preserves clean exact-tag/version/topological publication, and alone receives `NPM_TOKEN`, `id-token: write`, and `attestations: write`. Before npm publish it packs all current tarballs, generates checksums plus SPDX, scans unpacked public artifacts, creates GitHub attestations for tarballs and SBOM, then retains artifacts for 30 days. Registry state remains the resumable journal. Local `npm run release:dry-run` remains network-free SDK readiness; local PostgreSQL coverage is `PRISM_TEST_POSTGRES_URL=... npm run test:postgres`.
|
|
821
884
|
- **Adding a package.** New workspace packages are picked up automatically by `npm run build --workspaces`, `npm test --workspaces`, `npm run pack:dry-run`, the packaging guard (`src/__tests__/packaging.test.ts`), and the install-smoke test (`src/__tests__/install-smoke.test.ts`) via the workspace glob; add the package to both tests' config arrays for explicit per-package assertions.
|