@poppykit/client 0.1.0 → 0.1.1

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 CHANGED
@@ -1,22 +1,18 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.0 — initial development release candidate (unpublished)
3
+ ## 0.1.1
4
4
 
5
- Discovery, safe HTTPS, all three sign-in methods, partial grants/replacement,
6
- owner-aware recovery, JSON/SSE conversations, API/browser/feedback hooks, targeted
7
- SQLite adapters and optional constrained hosted-identity provider.
5
+ Documentation refresh: registry installation, runnable quickstarts, focused guides
6
+ and the tagged GitHub/OIDC release runbook. No runtime API, storage format or
7
+ third-party dependency change.
8
8
 
9
- - Select MIT licensing and ship the complete LICENSE.
10
- - Prepare public package metadata and the initial 0.1.0 version.
11
- - Preserve J8 strict TypeScript tests, real subprocess/security regressions and
12
- immutable installed-package verification on Linux, macOS and Windows.
9
+ ## 0.1.0
13
10
 
14
- No npm publication has occurred. Version 0.x APIs/storage may still change; record
15
- compatibility and migration/reset implications with future changes. This release
16
- does not promise stable 1.0 compatibility or certify external host integrations.
11
+ Initial MIT development release, published manually. Discovery, safe HTTPS, all
12
+ three sign-in methods, targeted durable storage and recovery, conversations and
13
+ API/browser/feedback hooks. The CLI uses the client SDK with trusted secure-backend
14
+ adapters. J8 established strict typed tests and exact installed-artifact checks.
17
15
 
18
- ## 0.0.0 — historical private development candidates
19
-
20
- J1–J8 established protocol capabilities, targeted storage, durable recovery,
21
- documentation, strict tests and fail-closed release verification. Their prior
22
- commits/artifact results remain historical evidence for those exact candidates.
16
+ Version 0.x may still change APIs/storage; future changes must explain compatibility,
17
+ migration/reset and security implications. No stable 1.0 or external-host certification
18
+ is promised. Older private 0.0.0 candidates retain their own historical evidence.
package/CONTRIBUTING.md CHANGED
@@ -1,50 +1,38 @@
1
1
  # Contributing
2
2
 
3
- This package targets Personal Agent Protocol draft 0.2. Check the current
4
- [specification](https://personalagentprotocol.org/docs/0.2/spec) and
5
- [guides](https://personalagentprotocol.org/docs/0.2/guides); retained snapshots and
6
- tests are supporting evidence. Distinguish MUST requirements, SHOULD recommendations
7
- and product choices. Individual extensions and demo/business workflows are excluded.
3
+ Follow the live draft 0.2 [specification](https://personalagentprotocol.org/docs/0.2/spec)
4
+ and [guides](https://personalagentprotocol.org/docs/0.2/guides). Tests/snapshots are
5
+ supporting evidence. Demo/business workflows and individual extensions are excluded.
6
+ Code is [MIT](LICENSE); confirm rights for third-party contributions.
8
7
 
9
8
  Use Node 24.12.0, TypeScript 5.9.3 and @types/node 24.10.0.
10
- Install with the pinned pnpm version in package.json and `pnpm install --frozen-lockfile`.
11
- Run `npm run typecheck`, `npm run build`, `npm test` and `npm run check:docs`.
12
- CI partitions tests without omitting any test file; full `npm test` remains useful
13
- locally. Read [RELEASING.md](RELEASING.md) before changing workflow/release behavior.
9
+ Install the packageManager-pinned pnpm and run pnpm install --frozen-lockfile.
14
10
 
15
- Keep changes small and complete: include callers, declarations, regression checks
16
- and documentation. Do not log credentials, weaken destination validation or silently
17
- reset persisted data. Pull requests must explain checks actually run and limitations.
18
- Use the repository's Issues for non-sensitive defects and feature discussions.
19
- Code is licensed under [MIT](LICENSE). No separate contribution agreement is
20
- configured; confirm permission for third-party contributions and obtain owner
21
- authorization before publishing.
11
+ ```sh
12
+ npm run typecheck
13
+ npm run build
14
+ npm run typecheck:tests
15
+ npm test
16
+ npm run check:docs
17
+ ```
22
18
 
23
- ## TypeScript test harness and coverage
19
+ First-party tests/workers/verification helpers are canonical `.mts`. The existing
20
+ compiler checks the whole strict program before emitting ignored adjacent `.mjs`.
21
+ Failed builds remove stale outputs; no loader/type stripping substitutes for checking.
22
+ Run `npm run build:tests` before `node scripts/run-checks.mjs GROUP` (unit, contracts,
23
+ integration, validation). Groups are exhaustive/disjoint. LF source bytes are enforced
24
+ by Git attributes. Generated test code is outside the npm allowlist; production tests
25
+ import built/installed JavaScript. Release/build tools and examples may remain JS.
24
26
 
25
- First-party tests, executable fixtures, process workers and packaged verification
26
- scripts are canonical `.mts` files. Run `npm run typecheck:tests` for the complete
27
- strict program and `npm run build:tests` before individual
28
- `node scripts/run-checks.mjs GROUP` commands (unit, contracts, integration or
29
- validation). `npm test` performs that checked harness build and runs all groups.
30
- Build production first with `npm run build`; tests import compiled `dist/*.js`,
31
- not TypeScript source. No loader or native type stripping replaces the compiler.
27
+ `npm run coverage` builds production and checked tests, then writes native Node
28
+ line/branch/function reports under `coverage/` (summary.txt, lcov.info, report.json,
29
+ raw/). Metrics cover loaded first-party dist JS: no production source maps or TS
30
+ remapping; node_modules excluded, unloaded modules listed. Raw subprocess reports
31
+ are retained, but arbitrary children may not merge and killed workers may not flush.
32
+ Installed/OS/host checks are separate evidence; no percentage proves conformance.
32
33
 
33
- The existing TypeScript compiler emits ignored adjacent `.mjs` files only after
34
- all strict diagnostics pass. Failed builds remove stale canonical outputs.
35
- `scripts/build-tests.mjs` is compiler/bootstrap tooling, not an unchecked test
36
- runner. Canonical test sources use LF, enforced by `.gitattributes`, so Linux and
37
- Windows validate the same exact source bytes. Test output stays outside the npm
38
- package allowlist. Retained JavaScript release/build tools and packaged examples
39
- are genuine production tooling/examples; retained protocol captures are references.
40
-
41
- Run `npm run coverage` for a production build, checked harness and native Node
42
- 24.12.0 line/branch/function report. `coverage/summary.txt`, `coverage/lcov.info`,
43
- `coverage/report.json` and `coverage/raw/` are generated local reports. Metrics
44
- refer to first-party compiled `dist` JavaScript; production emits no source maps
45
- and no TypeScript remapping is claimed. Third-party `node_modules` is excluded;
46
- unloaded modules are listed explicitly. Raw child-process reports are retained,
47
- but arbitrary subprocess execution is not guaranteed to be merged into the native
48
- runner summary, and killed/crashed workers may not flush counters. Actual installed
49
- package/OS checks remain separate evidence. No percentage threshold substitutes
50
- for protocol, negative/security, process and platform assertions.
34
+ Include callers, meaningful regression evidence and docs with behavior changes.
35
+ Preserve credential/destination validation, private errors and persisted data.
36
+ Report checks actually run and limits. Use Issues for non-sensitive defects and
37
+ [SECURITY.md](SECURITY.md) for vulnerabilities. Follow [RELEASING.md](RELEASING.md)
38
+ before tagging/publishing; obtain explicit owner authorization.
package/DELIVERY.md CHANGED
@@ -67,33 +67,14 @@ the durable cursor and fresh authorization.
67
67
  Metadata caching remains bounded and honors freshness, Age, validators, no-cache
68
68
  and no-store, with a 300-second upper bound. Expired entries revalidate; 304s retain
69
69
  prior caching directives. `resolver.invalidate(target?)` fences old pending cache
70
- writes without bypassing fetch concurrency/rate limits. J2 rejects changed saved
70
+ writes without bypassing fetch concurrency/rate limits. The auth lifecycle rejects changed saved
71
71
  issuer/endpoint/resource bindings rather than rerouting persisted work.
72
72
 
73
- ## Company service and retention
74
-
75
- The server accepts `supportedScopes`, the union offered by its actual sign-in
76
- methods. `directScopes` remains a compatibility alias. One coordinator must still
77
- cover authority checks and durable conversation reads/mutations.
78
-
79
- Default JSON/request/frame budget is 1 MiB; the maximum encoded event is
80
- 1 MiB minus 1025 bytes. Page sizing reserves 1024 bytes for worst-case IDs, cursors
81
- and envelopes and counts UTF-8 bytes. Company events and client messages that
82
- cannot fit are rejected before commit; no receipt/work survives a rejected write.
83
- Do not reduce configured budgets below those used for retained accepted events.
84
-
85
- Notifications are post-commit hints. Subscribe before reading; reconcile durable
86
- state on wake or every 1000 ms by default. `createConversationNotifications` is
87
- local acceleration only. Multiple processes work without a broker through targeted
88
- SQLite reconciliation; deployments can implement the same notification contract
89
- with their own distributed adapter. Lost/duplicate hints cannot erase a commit.
90
- SQLite event windows and append operations do not reload complete event histories.
91
-
92
- Server streams default to 30 seconds and apply pull backpressure, rechecking
93
- current authority before further pages. This bounded-connection policy omits
94
- periodic idle comments; proxies may close an idle stream sooner, and the client
95
- reconnects. Longer-lived deployments should supply heartbeat handling at their
96
- HTTP adapter. Hosts must propagate disconnect/AbortSignal and body cancellation.
73
+ ## Peer retention
74
+
75
+ The [server delivery guide](https://github.com/LMol-4/poppykit-server/blob/main/DELIVERY.md)
76
+ describes service configuration, byte budgets, notifications and bounded streams.
77
+ Keep the following distinct lifetimes when choosing an operator retention policy:
97
78
 
98
79
  | Record | Lifetime / deletion rule |
99
80
  | --- | --- |
package/README.md CHANGED
@@ -1,30 +1,22 @@
1
1
  # PoppyKit client
2
2
 
3
- TypeScript SDK for personal-agent providers integrating [Personal Agent Protocol
4
- draft 0.2](https://personalagentprotocol.org/docs/0.2/spec). Discover companies,
5
- start sessions, use Direct/Device/Mediated sign-in, exchange JSON/SSE conversations,
6
- authorize API requests, join an agent browser and send feedback. Your application
7
- supplies the agent and trusted infrastructure.
3
+ TypeScript SDK for [Personal Agent Protocol draft 0.2](https://personalagentprotocol.org/docs/0.2/spec):
4
+ discovery, authentication, conversations and API/browser/feedback hooks. Your
5
+ application supplies the agent and trusted infrastructure. [MIT](LICENSE).
8
6
 
9
- ## Installation
7
+ ## Install
10
8
 
11
- Requires Node **24.12.0 or later**, ESM and HTTPS. CI certifies Node 24.12.0;
12
- later majors are not separately certified. Optional SQLite uses experimental
13
- `node:sqlite` and local filesystem locking.
14
-
15
- Version **0.1.0** is an initial development release candidate under the [MIT license](LICENSE).
16
- It has not been published. Install a verified tarball:
9
+ Requires Node **24.12.0+**, ESM and HTTPS. CI tests Node 24.12.0 on Linux, macOS and
10
+ Windows; later majors are not separately certified.
17
11
 
18
12
  ```sh
19
- npm install ./poppykit-client-0.1.0.tgz
13
+ npm install @poppykit/client@0.1.1
20
14
  ```
21
15
 
22
- The only production dependency is `jose@6.2.12`. No server SDK or CLI is required.
23
- Registry installation instructions will accompany the first public release.
24
-
25
- ## Quickstart
16
+ ## Discover a company
26
17
 
27
- Discovery needs no signing key, account token or database:
18
+ No credentials or database are needed. Replace `company.example` with a company
19
+ publishing draft 0.2 discovery:
28
20
 
29
21
  ```js
30
22
  import { createMetadataResolver, createNodeTransport } from '@poppykit/client';
@@ -38,87 +30,21 @@ try {
38
30
  }
39
31
  ```
40
32
 
41
- Replace `company.example` with a company publishing draft 0.2 discovery.
42
- Run the complete [quickstart](examples/quickstart.mjs) with a real domain, or
43
- `node examples/quickstart.mjs --self-check` for a deterministic offline example.
44
-
45
- ## Configuration and authentication
46
-
47
- `createClientAuth(options)` owns sessions, all three sign-in methods, renewal,
48
- scope replacement, sign-out and recovery. Supply `namespace`, `localUserId`,
49
- `clientId`, registered `redirectUris`, an `AuthStore`, `SecretStore`, safe transport
50
- and metadata resolver. Run `recover()` at startup. Publish HTTPS client metadata
51
- and public JWKS; private signing keys stay in your signer or provider.
52
-
53
- Choose an `IdentitySigner`, or authenticated `AssertionProvider` and
54
- `ProviderIdentity` adapters. The optional `/provider` reference is documented in
55
- [PROVIDER.md](PROVIDER.md). Operators supply HTTPS hosting, enrollment authentication,
56
- company policy and signing/KMS. Anonymous sessions require a separate local signer
57
- with a published key; provider-only custody reports `anonymous_unavailable`.
58
-
59
- Call `start(domain)`, then `authorization(connectionId, scopes)` to inspect grants,
60
- missing scopes and advertised methods. `beginSignIn(connectionId, { method, scopes })`
61
- selects `direct`, `device` or `mediated`. Direct requires an authenticated browser
62
- binding and HTTPS callback. Device displays a verified human link/code and resumes
63
- with `continueSignIn`. Mediated invokes your `TrustedInput.collect` UI. Keep that UI,
64
- passwords, codes and credential adapters outside model tools. See [AUTH.md](AUTH.md)
65
- for partial consent, scope upgrades, cancellation and revocation.
66
-
67
- ## Examples and common operations
68
-
69
- Configure conversations using the verified target and the same auth lifecycle:
70
-
71
- ```js
72
- import { createConversationClient } from '@poppykit/client';
73
- const target = await auth.target(connectionId);
74
- const conversations = createConversationClient({
75
- ...target, connectionId, store: conversationStore, clock: { now: Date.now },
76
- authorizedRequest: request => auth.authorizedFetch(connectionId, request, target),
77
- authorization: (id, scopes) => auth.authorization(id, scopes),
78
- });
79
- ```
80
-
81
- `auth`, `connectionId` and `conversationStore` are your configured instances.
82
- `start`, `send`, `read`, `watch`, `ack`, `handoff` and `close` manage the lifecycle.
83
- Retain message IDs for retries; acknowledge durable deliveries after processing.
84
- [DELIVERY.md](DELIVERY.md) explains cursors, streaming, pagination and retention.
85
-
86
- Use `apiTarget`/`apiFetch` with an existing OpenAPI or MCP client. The final URL
87
- must be independently authorized; an OpenAPI `servers` entry grants no authority.
88
- `joinBrowser` accepts a trusted agent-controlled controller separate from human
89
- consent. `feedback` sends a single `missing` report expecting empty HTTP 202.
90
- [INTEGRATIONS.md](INTEGRATIONS.md) documents the adapter contracts and examples.
91
-
92
- ## Errors, cancellation, retries and limits
93
-
94
- Handle `AuthFailure.code` and `ConversationError.code`; do not parse messages or
95
- log credential headers/private adapter errors. Pending operations are resumable;
96
- an uncertain remote exchange requires reconciliation and is never silently replayed.
97
- Declined upgrades preserve old access; sign-out never automatically reconnects.
98
-
99
- Conversation operations accept `AbortSignal`. Cancellation cannot undo bytes sent.
100
- Conversation retries retain message IDs/payloads with bounded backoff and Retry-After.
101
- Auth deadlines persist across restarts. Feedback has no automatic POST retry or
102
- deduplication promise. Pools, bodies, event/page sizes and reconnects are bounded;
103
- see [DELIVERY.md](DELIVERY.md). External effects need application idempotency.
104
-
105
- ## Storage and production responsibilities
33
+ The packaged [quickstart](examples/quickstart.mjs) also supports `--self-check`
34
+ without a network service.
106
35
 
107
- Optional `/sqlite` exports `SqliteAuthStore` and `SqliteConversationStore`;
108
- `/memory` exports non-durable `MemoryConversationStore`. Consumers can implement
109
- the targeted contracts using their own databases. Store Account Tokens, DPoP keys
110
- and PKCE in a secure `SecretStore`; Session Tokens stay in memory. SQLite stores
111
- secret references and private message data, not vault encryption. Database, vault
112
- and remote exchange are separate boundaries; implement orphan-secret reconciliation
113
- and deployment ownership checks. [STORAGE.md](STORAGE.md) defines atomicity,
114
- recovery and explicit development reset.
36
+ ## Guides
115
37
 
116
- ## Reference and support
38
+ - [Authentication](AUTH.md): sessions, Direct/Device/Mediated, consent, renewal and revocation.
39
+ - [Storage](STORAGE.md): targeted adapters, secret references, recovery and explicit resets.
40
+ - [Delivery](DELIVERY.md): messages, streaming, cancellation, retries and retention.
41
+ - [Integrations](INTEGRATIONS.md): verified API targets, agent browser and feedback.
42
+ - [Optional provider](PROVIDER.md): operator-hosted signing and callback custody.
43
+ - [API exports](API.md), [contributing](CONTRIBUTING.md), [security](SECURITY.md),
44
+ [changelog](CHANGELOG.md) and [releasing](RELEASING.md).
117
45
 
118
- [API.md](API.md) maps public exports and TypeScript declarations to deeper guides.
119
- This independent draft implementation has deterministic and packaged tests;
120
- production vaults, browsers, external issuers and hosting need operator validation.
121
- Individual protocol extensions and application business logic are outside the SDK.
122
- See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md),
123
- [CHANGELOG.md](CHANGELOG.md) and [RELEASING.md](RELEASING.md). No public license grant
124
- has been selected; publication remains blocked pending the owner's license decision.
46
+ Keep Account Tokens, DPoP keys and PKCE in a secure SecretStore; never expose them
47
+ to model tools. An uncertain remote result must not be silently replayed. SQLite
48
+ is optional/experimental and is not vault encryption. Production issuers, vaults,
49
+ browsers and hosting require operator validation; individual extensions and
50
+ application business workflows are outside this SDK.
package/RELEASING.md CHANGED
@@ -1,193 +1,91 @@
1
- # Release preparation and owner runbook
2
-
3
- The owner selected the **MIT** license and initial development version **0.1.0**.
4
- `private: false`, `publishConfig.access: public` and the shipped [LICENSE](LICENSE)
5
- prepare these candidates for a public release; they do not publish anything.
6
- No package has been published. Tags, npm publication and external settings remain
7
- separate owner-authorized actions. This is an initial 0.x release, not a stable 1.0
8
- compatibility promise.
9
-
10
- ## Verification graph
11
-
12
- Every push, pull request and manual CI run calls the same repository-local
13
- `.github/workflows/verify.yml`. Documentation-only changes run the graph too;
14
- there are no path filters. A clean GitHub-hosted Linux job builds and packs once.
15
- The release manifest binds full source SHAs, package/version, filenames, byte
16
- counts, SHA256 and npm SHA512 integrity to those unchanged tarballs.
17
-
18
- | Job | Responsibility |
19
- | --- | --- |
20
- | candidate | Typecheck/build from exact source, pack once, record/upload identity |
21
- | fast | Documentation links/fences and small unit checks |
22
- | contracts | Storage, authentication, network and conversation contracts |
23
- | integration | API/browser/feedback and independent peers; CLI installs all pinned candidates |
24
- | packaged-linux/windows/macos | Install unchanged tarballs; startup, exports, SQLite and representative platform behavior |
25
- | validation | Release failure simulations, registry/toolchain guards and actual workflow wiring assertions |
26
- | gate | Always report; require each allowlisted job result to equal success and recheck artifact identity |
27
-
28
- The candidate job strictly typechecks and compiles the complete TypeScript test
29
- harness once before packing. It uploads a separate same-run `test-harness`
30
- artifact, never inside an npm candidate. Each unprivileged test/OS job checks the
31
- full source commit, complete canonical source inventory, exact LF source hashes
32
- and exact emitted-output hashes before using that harness. Runtime/packaged checks
33
- still import the unchanged candidate's installed JavaScript and execute real npm
34
- shims. The publisher consumes only tested npm tarballs and never the harness.
35
-
36
- All deterministic source tests run once on Linux, partitioned by
37
- `.github/test-groups.json`. Its runner rejects unassigned/duplicate test files.
38
- The CLI does not rerun complete SDK suites. It checks out the exact full client
39
- and server SHAs in its candidate JSON files, builds/installs their tarballs, and
40
- tests the combined package boundary. The SDKs have no dependency on one another;
41
- the server candidate is a CLI integration peer, not a production CLI dependency.
42
- Private cross-repository checkouts require owner-provided read access; no local
43
- untracked sibling directory is assumed.
44
-
45
- Node 24.12.0 is the supported CI baseline on GitHub-hosted ubuntu-latest,
46
- windows-latest and macos-latest. Later Node majors are not separately certified.
47
- The CLI checks unsupported Node 22.17.1 once on Linux. Most JavaScript/type checks
48
- do not need an OS-by-runtime matrix. Packaged OS checks exercise installed shims,
49
- paths/SQLite and the CLI's generic encrypted-backend/lifecycle fixture. They do
50
- not certify a production OS keyring, physical terminal, browser engine or KMS.
51
-
52
- SDK ordinary CI may restore a pnpm cache keyed by its frozen lockfile; installed
53
- dependencies are never shared across OSes. Release-context verification restores
54
- no dependency cache. The unpublished CLI dependency is supplied explicitly as a
55
- tarball; SDK lockfiles and full commit/version pins govern inputs, with exact
56
- TypeScript 5.9.3/@types-node 24.10.0/undici-types 7.16.0 tooling. No privileged
57
- release consumes a pull-request cache, artifact or check-name lookup. Artifacts
58
- are downloaded from this run only, and their manifest digest comes from the
59
- candidate job output. Failure logs retain seven days; candidates retain fourteen.
60
- Expired/missing artifacts require a new complete verification run.
61
-
62
- ## Release workflow and fail-closed gate
63
-
64
- `release.yml` is manual dispatch only. Dispatch an existing owner-approved
65
- `vVERSION` tag, supply the full tagged commit, matching version/tag, and
66
- leave `publish=false` for verification only. A branch dispatch, wrong SHA,
67
- version/tag mismatch, moved tag or missing/changed artifact is rejected. Do not
68
- push a tag merely to test workflow syntax. All actions are pinned to immutable
69
- commits; reusable verification is the same commit as its caller.
70
-
71
- The allowlist is candidate, fast, contracts, integration, packaged-linux,
72
- packaged-windows, packaged-macos and validation. Missing, empty, failed, canceled
73
- and skipped results all fail. The always-running gate has no permission to
74
- publish. The publisher needs the reusable verification workflow to succeed AND
75
- its ready output to be exactly true AND explicit publish selection. It then
76
- rechecks source/commit/ref/version, manifest digest, every tarball, unchanged
77
- packed metadata, private/license policy, npm/toolchain and registry state.
78
-
79
- Only the publishing job requests `id-token: write`. It runs on GitHub-hosted
80
- Linux in protected environment `npm`. There is no publish credential in PR CI,
81
- no workflow_run artifact promotion, no checkout of PR code in a privileged job,
82
- no build/install/pack in the publisher, and no automatic publication on push/tag.
83
- Publication uses `npm publish TESTED_TARBALL --access public --provenance --ignore-scripts`.
84
- It publishes the unchanged bytes downloaded and checked in that job. Publication
85
- is serialized per repository and is never canceled by a newer release run.
86
-
87
- Safe local tests execute the gate with failed/canceled/missing/skipped checks,
88
- wrong commit/version/tag/ref, missing artifact, tampered tarball/manifest and an
89
- absent trusted digest. Registry tests reject an existing version, unauthorized or
90
- uncertain registry responses, unsupported tools and mismatched dependency bytes.
91
- These simulations and actionlint validate code/wiring. They do not prove GitHub
92
- environment settings, npm ownership or OIDC exchange work.
93
-
94
- Any documentation/package-metadata/source change after J6 creates a new candidate.
95
- J6 evidence applies only to J6's recorded commits/digests. Re-run this complete
96
- graph on final commits/tarballs and retain the new manifests/platform results.
97
- Never label changed bytes publishable using old evidence. A passing Windows
98
- local run does not substitute for actual hosted Linux/macOS jobs.
99
-
100
- ## Owner configuration — external, not performed by this repository
101
-
102
- Rechecked against [npm trusted publishers](https://docs.npmjs.com/trusted-publishers/),
103
- [GitHub secure use](https://docs.github.com/en/actions/reference/security/secure-use),
104
- [OIDC](https://docs.github.com/en/actions/concepts/security/openid-connect), and
105
- [deployment environments](https://docs.github.com/en/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)
106
- on **2026-10-23**. Recheck those live requirements before first publication:
107
-
108
- 1. The owner confirmed the `@poppykit` scope and selected MIT/version 0.1.0.
109
- Confirm the actual publishing account has package-name/maintainer rights and
110
- the chosen version is unused. The complete LICENSE is in the package allowlist
111
- and release notes describe this initial development candidate.
112
- Confirm repository.url exactly matches the actual GitHub repository.
113
- 2. Protect main, release tags, Actions files/scripts and candidate pins with
114
- repository rules and review/CODEOWNERS appropriate to the actual team. Require
115
- the complete verification result for the exact commit. Prevent unreviewed
116
- workflow changes or tag replacement. Read-only PR permissions and trusted
117
- publishing cannot enforce these owner settings themselves.
118
- 3. Create environment `npm` in each package repository with required reviewers,
119
- self-approval restrictions, protected release-tag rules and no admin bypass
120
- where the repository plan supports them. Confirm feature availability; an
121
- unprotected environment name alone provides no approval barrier. Add environment
122
- variable `NPM_PUBLISH_ENABLED=true` only after setup/authorization. Missing
123
- or false configuration fails the publisher's check.
124
- 4. Configure each npm package's trusted publisher for GitHub owner `LMol-4`,
125
- the corresponding `poppykit-client`, `poppykit-server` or `poppykit-cli`
126
- repository, workflow filename **release.yml**, and environment **npm**.
127
- Match spelling/case and the initiating workflow identity. verify.yml is a
128
- reusable verifier, not the publishing workflow. Reassess identity if introducing
129
- a reusable publisher or changing callers; workflow_call/dispatch identity has
130
- documented caller nuances. This setup authorizes a workflow identity, not its
131
- test results. The gate supplies the independent verification condition.
132
- 5. npm currently requires npm >=11.5.1 and Node >=22.14.0 for trusted publishing;
133
- this workflow uses Node24.12.0 and checks npm's version without upgrading it.
134
- GitHub-hosted runners are supported; self-hosted runners are not supported for
135
- this npm path. GitHub permissions must permit OIDC. No NODE_AUTH_TOKEN is set.
136
- Do not silently fall back to a long-lived publish token when OIDC fails.
137
- 6. Verify provenance requirements, repository visibility and package visibility
138
- in the current npm documentation. Trusted publishing generates provenance
139
- automatically for supported public packages/public repositories; explicit
140
- --provenance must not be treated as proof without checking the registry record.
141
- A private-source repository may need an owner-approved alternative or visibility
142
- decision; do not claim provenance supported where it is not.
143
- 7. Current npm publisher configurations require first successful use within two
144
- days or expire; configure near the authorized release. npm supports up to ten
145
- configurations, with separate direct-publish/staging/dist-tag permissions.
146
- Grant only this workflow's required direct publication capability, review other
147
- publishers/tokens and restrict alternative access according to owner policy.
148
- Keep recovery access separate from the normal workflow.
149
-
150
- ## First publication and bootstrap
151
-
152
- A new package may need first publication using authorized npm-owner authentication
153
- before package settings/trusted publishing are available. npm name availability
154
- has not been established by creating a GitHub repository. The owner must confirm
155
- the current bootstrap flow and explicitly authorize it. Do not place bootstrap
156
- tokens in PR workflows or temporarily make publication unconditional.
157
-
158
- Prepare a license/version-ready candidate, run the exact full verification graph,
159
- retain/download the unchanged manifest/tarball and verify its digest. If the first
160
- publication must be manual, an authorized owner uses their own current npm login/
161
- 2FA or narrowly scoped supported bootstrap credential to publish those exact bytes,
162
- then removes temporary credentials and configures the trusted publisher. Record
163
- the resulting version/integrity/provenance. A dry run is not proof of bootstrap
164
- permissions or production OIDC authentication. Current 0.1.0 candidates have public-ready metadata, but publication still
165
- requires all exact-byte checks, owner settings and separate authorization.
166
-
167
- ## Package order, existing versions and partial recovery
168
-
169
- Release by actual production dependencies: client and server are independent;
170
- either SDK can publish first. Publish the client before a CLI version requiring
171
- that exact client version. The CLI registry guard requires the published client's
172
- dist.integrity to match its tested candidate tarball. If it differs, stop and
173
- reconcile/retest the actual dependency; do not silently replace tested bytes.
174
-
175
- Before publishing, npm view must confirm that this package version is absent.
176
- Only a structured E404 is considered absent; auth/network/registry failures stop.
177
- An existing version stops publication even after an uncertain earlier response.
178
- Inspect npm's published version, integrity, provenance and intended dist-tag using
179
- read-only registry commands. Never overwrite or blindly republish. If the exact
180
- bytes already published, record that success and resume the remaining package's
181
- separate verified release. Multi-repository releases are not atomic. Do not unpublish
182
- a successful dependency as rollback. If correction is required, choose a new
183
- version, update dependent pins/lockfiles/release notes and verify a new candidate.
184
-
185
- This runbook does not authorize publication, tag pushes, package ownership changes,
186
- external settings, deployment or demo implementation.
187
-
188
- Candidate metadata is inspected with the archive basename and its directory as
189
- `cwd`. This avoids GNU tar interpreting a Windows drive colon as a remote archive;
190
- stderr is preserved in failure diagnostics. Negative checks exercise GNU tar on
191
- Windows with space/Unicode candidate paths and retain wrong/missing/changed bytes
192
- and fail-closed gate cases. Local success does not certify a future hosted run or
193
- any newly packed bytes.
1
+ # Releasing
2
+
3
+ Use the tagged GitHub Actions workflow, not a local rebuild. Packages are MIT;
4
+ 0.1.0 was manually bootstrapped. Version 0.1.1 refreshes documentation without
5
+ changing runtime APIs. Each new version needs its own source/artifact evidence.
6
+
7
+ ## Before tagging
8
+
9
+ - Confirm npm ownership, unused versions, supported Node 24.12.0 and npm>=11.5.1.
10
+ Keep the pinned compiler/dependencies; do not upgrade tooling during a release.
11
+ - Update version, changelog and shipped docs. CLI's client dependency and both
12
+ candidate JSON files must match exact final SDK versions/full source SHAs.
13
+ - Review the full diff and run typecheck, build, tests and documentation checks.
14
+ Preserve the existing API/storage/security contracts and historical evidence.
15
+ - Protect source, workflow files, pins and release tags with repository review/rules.
16
+ All actions are commit-pinned; release verification never restores a PR cache.
17
+ - Verify GitHub environment **npm**: variable **NPM_PUBLISH_ENABLED=true**,
18
+ intended required reviewer, no admin bypass, and allowed deployment tags **v***.
19
+ Reviewers approve the real pending deployment; automation must not approve for them.
20
+ - Configure the npm package's GitHub trusted publisher: owner **LMol-4**, this
21
+ package repository, workflow **release.yml**, environment **npm**. Match case.
22
+ Enable **direct npm publish** permission; this workflow does not stage a publish.
23
+ Configure near the release: unused configurations expire after two days. Public
24
+ source/package visibility and supported GitHub-hosted runners are required for
25
+ this provenance path. Do not supply NODE_AUTH_TOKEN or fall back to a long-lived
26
+ token if OIDC fails. Confirm current [npm requirements](https://docs.npmjs.com/trusted-publishers/).
27
+
28
+ ## Publish exact tagged source
29
+
30
+ Client and server are independent. Publish client before CLI: the CLI registry
31
+ guard requires its tested client tarball integrity to equal the published one.
32
+
33
+ 1. Merge reviewed source to main. Record the full SHA and create/push an approved
34
+ immutable **vVERSION** tag at that exact commit. Never move or replace a tag.
35
+
36
+ ```sh
37
+ git tag vVERSION FULL_SHA
38
+ git push origin refs/tags/vVERSION
39
+ ```
40
+ 2. Dispatch **Release** from that tag, with matching version, tag and full commit.
41
+ Optional `publish=false` rehearses verification only. A later publishing dispatch
42
+ is a new run with newly identified artifacts; it does not reuse a rehearsal's bytes.
43
+ 3. Dispatch with `publish=true` when authorized. Example (replace all placeholders):
44
+
45
+ ```sh
46
+ gh workflow run release.yml --repo LMol-4/PACKAGE --ref vVERSION -f version=VERSION -f tag=vVERSION -f commit=FULL_SHA -f publish=true
47
+ ```
48
+
49
+ 4. Wait for candidate, fast, contracts, integration, packaged-linux/windows/macos,
50
+ validation and gate to succeed. Missing, failed, canceled or skipped prerequisites
51
+ fail closed. Then follow the Actions environment-approval link. Do not bypass it.
52
+ 5. The publisher rechecks source/tag/ref/version, trusted manifest digest, unchanged
53
+ tarball metadata/bytes, owner enablement, registry absence and dependency integrity.
54
+ It publishes the same-run tested tarball with `--access public --provenance
55
+ --ignore-scripts`; it never installs, builds or packs again.
56
+ 6. Save run URL, full source SHAs, manifest SHA256, filenames, versions, byte counts,
57
+ tarball SHA256/npm SHA512 and registry integrity/provenance. Download before the
58
+ 14-day candidate retention expires. Verify registry bytes, a clean exact-version
59
+ registry install, exported modules and the real npm CLI shim.
60
+
61
+ Ordinary main/tag CI is useful evidence but is not a tagged Release/OIDC publishing
62
+ run. A dry run or green tests alone do not prove npm authentication or provenance.
63
+ The separate checked test-harness artifact is source/output-hash bound, used only
64
+ by unprivileged verification jobs, and never published in an npm package.
65
+
66
+ ## Failure and partial release
67
+
68
+ Stop on tag/source/version/digest mismatch, unknown registry responses or changed
69
+ client integrity. Do not weaken gates, repack approved bytes, change pins silently,
70
+ force an overwrite or use a token fallback. Inspect the failed job and preserve logs.
71
+ For OIDC/auth failure check publisher spelling/case, workflow/environment identity,
72
+ expiry, reviewer approval, permissions and npm/toolchain support before a new run.
73
+
74
+ If a version already exists, compare its registry integrity and provenance with the
75
+ saved receipt. Matching successful publication is recorded, never republished.
76
+ For partial publication, finish only absent packages; verify the published client's
77
+ exact bytes before CLI. If bytes differ or a fix is needed, use a reviewed new
78
+ version and complete verification. A source checkout rollback cannot undo an npm
79
+ publication or external side effect. Deprecation, dist-tag changes, unpublish and
80
+ replacement versions need separate owner authorization; never delete evidence.
81
+
82
+ ## Verification limits
83
+
84
+ Deterministic source suites run once per verification graph on Linux; exhaustive
85
+ file groups reject omissions/duplicates. Packaged jobs test actual installed JS,
86
+ exports/declarations/content/SQLite and representative platform behavior; CLI also
87
+ tests real shims, auth/retry processes and API/browser/feedback wiring. They do not
88
+ certify a production keyring, physical terminal, browser engine, KMS or TLS deployment.
89
+ Windows GNU tar is given archive basename plus directory cwd to avoid drive-colon
90
+ remote parsing. Failure logs retain seven days. Expired/missing artifacts require a
91
+ new full run, not relabeling old results. See [CONTRIBUTING.md](CONTRIBUTING.md).
package/SECURITY.md CHANGED
@@ -4,10 +4,10 @@ Do not put credentials, tokens, private keys, personal records or exploit detail
4
4
  in a public issue. Use this repository's GitHub **Security → Report a vulnerability**
5
5
  when private reporting is enabled. If it is unavailable, request a private contact
6
6
  from the repository owner without disclosing the vulnerability publicly. The owner
7
- must enable/confirm that route before public release; no response SLA is promised.
7
+ must enable/confirm that route; no response SLA is promised.
8
8
 
9
9
  Include affected commit/version, a minimal reproduction using synthetic data,
10
- impact and the trust boundary involved. These unpublished draft packages have no
11
- released-version support window yet. Custom vaults, issuers, browser controllers,
10
+ impact and the trust boundary involved. These draft packages have no promised
11
+ support window or response SLA. Custom vaults, issuers, browser controllers,
12
12
  proxy routing and deployment policy remain operator responsibilities. Redaction
13
13
  and scoped authority do not isolate an unrestricted same-user program.
package/STORAGE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Persistence and recovery
2
2
 
3
- This unpublished package uses targeted storage contracts. Node 24.12.0
3
+ Use targeted storage contracts. Node 24.12.0
4
4
  or later is required. The optional `@poppykit/client/sqlite` entry point exports
5
5
  `SqliteAuthStore` and `SqliteConversationStore`; importing the client core does not
6
6
  load SQLite. `node:sqlite` is experimental in the tested Node 24.12.0 runtime.
@@ -44,8 +44,8 @@ records its endpoint. Retry rejects an endpoint change before sending. Preparati
44
44
  returns the existing record instead of replacing content; terminal outcomes cannot
45
45
  be overwritten by a late sender. Checkpoints include endpoint, conversation and
46
46
  consumer. Receipts remain available for retries: the old `keepCompleted` deletion
47
- behavior is removed. J3 owns retention with preserved message identity and bounded
48
- payload cleanup; no automatic age-based deletion is currently performed.
47
+ behavior is removed. Retention preserves message identity and bounds payload cleanup; no automatic
48
+ age-based deletion is performed.
49
49
 
50
50
  `MemoryConversationStore` from `@poppykit/client/memory` is non-durable and confined
51
51
  to one process. The SQLite adapters also accept `:memory:` for non-durable tests;
@@ -84,11 +84,8 @@ aside its database and WAL/SHM files and the matching host-managed secret namesp
84
84
  before creating a fresh store. Never reset live credentials by deleting a database
85
85
  behind a running process. Old stores are not silently deleted or reinterpreted.
86
86
 
87
- `tests/storage.test.mts` uses actual child processes, SQLite contention and forced
88
- termination. It covers rollback, durable prepare, live-owner recovery and an external
89
- synthetic effect followed by owner death. The latter becomes uncertain, not an
90
- exactly-once execution claim. Auth unit tests also retain staged-secret, generation,
91
- revocation-race and vault-failure coverage.
87
+ Contract tests cover real child-process contention, crash recovery, uncertain
88
+ external effects, staged secrets and revocation races; see [contributing](CONTRIBUTING.md).
92
89
 
93
90
  ## Conversation delivery lifetime
94
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poppykit/client",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
5
  "description": "Personal Agent Protocol client SDK",
6
6
  "repository": {