dominus-sdk-nodejs 11.0.3 → 11.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +351 -351
  2. package/dist/contract/index.d.ts +3 -0
  3. package/dist/contract/index.d.ts.map +1 -0
  4. package/dist/contract/index.js +3 -0
  5. package/dist/contract/index.js.map +1 -0
  6. package/dist/contract/node-envelope.d.ts +12 -0
  7. package/dist/contract/node-envelope.d.ts.map +1 -0
  8. package/dist/contract/node-envelope.js +16 -0
  9. package/dist/contract/node-envelope.js.map +1 -0
  10. package/dist/contract/node-projections.d.ts +15 -0
  11. package/dist/contract/node-projections.d.ts.map +1 -0
  12. package/dist/contract/node-projections.js +4 -0
  13. package/dist/contract/node-projections.js.map +1 -0
  14. package/dist/namespaces/portal.d.ts +10 -0
  15. package/dist/namespaces/portal.d.ts.map +1 -1
  16. package/dist/namespaces/portal.js +11 -0
  17. package/dist/namespaces/portal.js.map +1 -1
  18. package/dist/namespaces/secrets.d.ts +5 -1
  19. package/dist/namespaces/secrets.d.ts.map +1 -1
  20. package/dist/namespaces/secrets.js +15 -1
  21. package/dist/namespaces/secrets.js.map +1 -1
  22. package/docs/agent-guide/2026-06-27-0849-sdk-orient/00-reading-order.md +35 -35
  23. package/docs/agent-guide/2026-06-27-0849-sdk-orient/01-purpose-and-boundaries.md +48 -48
  24. package/docs/agent-guide/2026-06-27-0849-sdk-orient/02-repo-map-and-entrypoints.md +46 -46
  25. package/docs/agent-guide/2026-06-27-0849-sdk-orient/03-api-surface.md +59 -59
  26. package/docs/agent-guide/2026-06-27-0849-sdk-orient/04-data-state-and-storage.md +36 -36
  27. package/docs/agent-guide/2026-06-27-0849-sdk-orient/05-integrations-and-runtime.md +40 -40
  28. package/docs/agent-guide/2026-06-27-0849-sdk-orient/06-workflows-commands-and-ci.md +58 -58
  29. package/docs/agent-guide/2026-06-27-0849-sdk-orient/07-operations-release-and-live-proof.md +40 -40
  30. package/docs/agent-guide/2026-06-27-0849-sdk-orient/08-security-privacy-and-secrets.md +38 -38
  31. package/docs/agent-guide/2026-06-27-0849-sdk-orient/09-known-risks-and-debt.md +34 -34
  32. package/docs/agent-guide/2026-06-27-0849-sdk-orient/10-agent-playbook.md +48 -48
  33. package/docs/agent-guide/2026-08-04-sdk-nodejs/00-reading-order.md +11 -11
  34. package/docs/agent-guide/2026-08-04-sdk-nodejs/01-purpose-and-boundaries.md +14 -14
  35. package/docs/agent-guide/2026-08-04-sdk-nodejs/03-api-surface.md +16 -16
  36. package/docs/agent-guide/2026-08-04-sdk-nodejs/10-agent-playbook.md +14 -14
  37. package/docs/agent-guide/INDEX.md +14 -14
  38. package/docs/agent-guide/current.md +22 -22
  39. package/docs/architecture.md +119 -119
  40. package/docs/atlas/2026-07-24-1231-sdk-nodejs-blockers.md +15 -15
  41. package/docs/atlas/2026-07-24-1231-sdk-nodejs-proof-ladder.md +25 -25
  42. package/docs/atlas/2026-07-24-1231-sdk-nodejs-truthmap.md +43 -43
  43. package/docs/atlas/2026-08-04-sdk-nodejs-blockers.md +12 -12
  44. package/docs/atlas/2026-08-04-sdk-nodejs-proof-ladder.md +9 -9
  45. package/docs/atlas/2026-08-04-sdk-nodejs-truthmap.md +21 -21
  46. package/docs/atlas/INDEX.md +26 -26
  47. package/docs/janitor/2026-06-27-0849-sdk-orient-cleanup-audit.md +102 -102
  48. package/docs/janitor/2026-08-04-sdk-nodejs-cleanup-audit.md +14 -14
  49. package/docs/migration-error-base.md +115 -0
  50. package/docs/plans/2026-08-04-pending-work-fruition-summary.md +46 -46
  51. package/docs/routes-services.md +80 -80
  52. package/docs/usage-reference.md +698 -698
  53. package/docs/workflow-hard-cut-release.md +24 -24
  54. package/package.json +55 -55
@@ -1,48 +1,48 @@
1
- # 10 Agent Playbook
2
-
3
- ## If You Are Changing X, Read Y First
4
-
5
- - **A namespace command** → `src/namespaces/<name>.ts` + the relevant rows in
6
- `docs/routes-services.md`. Follow the Public API Change Checklist in
7
- `CLAUDE.md` (update namespace, wire in `src/index.ts` if new, export types,
8
- update `docs/usage-reference.md` and `routes-services.md`).
9
- - **Transport / auth / retries / streaming / binary** → `src/lib/client.ts` and
10
- `docs/architecture.md` §3,§5,§6,§7. The 55-min JWT cache TTL is load-bearing;
11
- do not regress it without raising the jwt-worker `JWT_EXPIRY_SECONDS` first.
12
- - **A new public type or root shortcut** → `src/index.ts` (constructor + export).
13
- - **Errors** → `src/lib/errors.ts`; pass `endpoint` on service-auth throws so
14
- callers can classify by `DominusError.endpoint`.
15
- - **Env/gateway config** → `src/lib/config.ts`.
16
-
17
- ## If Validation Fails
18
-
19
- - Build/type errors → `npm run typecheck`; the repo's lint IS tsc.
20
- - Type-contract failures → `npm run test:types` (the `*.typecheck.ts` files).
21
- - Unit/contract failures → `npm test` runs an explicit file list; run a single
22
- file with `node --test tests/<file>.test.js` after `npm run build`.
23
-
24
- ## Common Traps
25
-
26
- - Importing from a subpath — there is only one export entry; import from
27
- `'dominus-sdk-nodejs'`.
28
- - Treating `dist/` as source — it is generated; edit `src/`.
29
- - Forgetting the version bump — publish-production no-ops if the version already
30
- exists on npm.
31
- - Using `dominus-production` as this repo's branch — it is `production` here.
32
- - Pointing `browser` methods at worker-local `/runs/*` — use `/api/browser/*`
33
- with `useGateway: true`.
34
-
35
- ## Which Kyle Skill For Common Work
36
-
37
- - Behavior change / bug fix → `kyle-fix` (test-first via `kyle-tdd`).
38
- - Root-cause unknown → `kyle-diagnose`.
39
- - Plan a larger change → `kyle-plan`.
40
- - Review a diff → `kyle-review`.
41
- - Contract-sensitive change (wire protocol, JWT, routing) → route to
42
- `dominus-expert` before shipping.
43
- - Docs/cleanup drift → `kyle-janitor` (this pack).
44
-
45
- ## Handoff Expectations
46
-
47
- This is a Dominus platform repo: cross-contract or wire-protocol changes need
48
- `dominus-expert` review. Releases are npm publishes gated on a version bump.
1
+ # 10 Agent Playbook
2
+
3
+ ## If You Are Changing X, Read Y First
4
+
5
+ - **A namespace command** → `src/namespaces/<name>.ts` + the relevant rows in
6
+ `docs/routes-services.md`. Follow the Public API Change Checklist in
7
+ `CLAUDE.md` (update namespace, wire in `src/index.ts` if new, export types,
8
+ update `docs/usage-reference.md` and `routes-services.md`).
9
+ - **Transport / auth / retries / streaming / binary** → `src/lib/client.ts` and
10
+ `docs/architecture.md` §3,§5,§6,§7. The 55-min JWT cache TTL is load-bearing;
11
+ do not regress it without raising the jwt-worker `JWT_EXPIRY_SECONDS` first.
12
+ - **A new public type or root shortcut** → `src/index.ts` (constructor + export).
13
+ - **Errors** → `src/lib/errors.ts`; pass `endpoint` on service-auth throws so
14
+ callers can classify by `DominusError.endpoint`.
15
+ - **Env/gateway config** → `src/lib/config.ts`.
16
+
17
+ ## If Validation Fails
18
+
19
+ - Build/type errors → `npm run typecheck`; the repo's lint IS tsc.
20
+ - Type-contract failures → `npm run test:types` (the `*.typecheck.ts` files).
21
+ - Unit/contract failures → `npm test` runs an explicit file list; run a single
22
+ file with `node --test tests/<file>.test.js` after `npm run build`.
23
+
24
+ ## Common Traps
25
+
26
+ - Importing from a subpath — there is only one export entry; import from
27
+ `'dominus-sdk-nodejs'`.
28
+ - Treating `dist/` as source — it is generated; edit `src/`.
29
+ - Forgetting the version bump — publish-production no-ops if the version already
30
+ exists on npm.
31
+ - Using `dominus-production` as this repo's branch — it is `production` here.
32
+ - Pointing `browser` methods at worker-local `/runs/*` — use `/api/browser/*`
33
+ with `useGateway: true`.
34
+
35
+ ## Which Kyle Skill For Common Work
36
+
37
+ - Behavior change / bug fix → `kyle-fix` (test-first via `kyle-tdd`).
38
+ - Root-cause unknown → `kyle-diagnose`.
39
+ - Plan a larger change → `kyle-plan`.
40
+ - Review a diff → `kyle-review`.
41
+ - Contract-sensitive change (wire protocol, JWT, routing) → route to
42
+ `dominus-expert` before shipping.
43
+ - Docs/cleanup drift → `kyle-janitor` (this pack).
44
+
45
+ ## Handoff Expectations
46
+
47
+ This is a Dominus platform repo: cross-contract or wire-protocol changes need
48
+ `dominus-expert` review. Releases are npm publishes gated on a version bump.
@@ -1,11 +1,11 @@
1
- # Dominus SDK for Node.js — reading order
2
-
3
- Snapshot: 2026-08-04, production source commit `0e68c79`.
4
-
5
- 1. `README.md` for package usage, namespace coverage, and lifecycle guidance.
6
- 2. `package.json` for the single export entry and release scripts.
7
- 3. `src/index.ts` and namespace modules for the public surface.
8
- 4. `src/client.ts`/transport and typed error helpers for gateway behavior.
9
- 5. `tests/` plus `tsconfig.type-tests.json` for runtime and compile contracts.
10
- 6. `.github/workflows/publish-production.yml` for registry publication.
11
- 7. `docs/atlas/2026-08-04-sdk-nodejs-truthmap.md` and the pending-work summary.
1
+ # Dominus SDK for Node.js — reading order
2
+
3
+ Snapshot: 2026-08-04, production source commit `0e68c79`.
4
+
5
+ 1. `README.md` for package usage, namespace coverage, and lifecycle guidance.
6
+ 2. `package.json` for the single export entry and release scripts.
7
+ 3. `src/index.ts` and namespace modules for the public surface.
8
+ 4. `src/client.ts`/transport and typed error helpers for gateway behavior.
9
+ 5. `tests/` plus `tsconfig.type-tests.json` for runtime and compile contracts.
10
+ 6. `.github/workflows/publish-production.yml` for registry publication.
11
+ 7. `docs/atlas/2026-08-04-sdk-nodejs-truthmap.md` and the pending-work summary.
@@ -1,14 +1,14 @@
1
- # Purpose and boundaries
2
-
3
- The Node SDK is the typed ESM facade for Dominus gateway-first services. It
4
- packages namespace APIs for application auth, data/DDL, storage and Artifact
5
- V2, AI/runtime, browser automation, jobs, workflows, Authority, logs,
6
- platform/coder, Publisher, admin, and control-plane operations.
7
-
8
- The package owns client-side request shaping, gateway route transforms,
9
- service error decoding, and public type contracts. Server-side authorization,
10
- scope truth, lifecycle truth, and durable records remain owned by the relevant
11
- Dominus services.
12
-
13
- The supported package surface is the single root export. Internal source files
14
- are not stable subpath imports.
1
+ # Purpose and boundaries
2
+
3
+ The Node SDK is the typed ESM facade for Dominus gateway-first services. It
4
+ packages namespace APIs for application auth, data/DDL, storage and Artifact
5
+ V2, AI/runtime, browser automation, jobs, workflows, Authority, logs,
6
+ platform/coder, Publisher, admin, and control-plane operations.
7
+
8
+ The package owns client-side request shaping, gateway route transforms,
9
+ service error decoding, and public type contracts. Server-side authorization,
10
+ scope truth, lifecycle truth, and durable records remain owned by the relevant
11
+ Dominus services.
12
+
13
+ The supported package surface is the single root export. Internal source files
14
+ are not stable subpath imports.
@@ -1,16 +1,16 @@
1
- # API surface
2
-
3
- Import from the root package:
4
-
5
- ```ts
6
- import { dominus } from 'dominus-sdk-nodejs';
7
- ```
8
-
9
- The singleton exposes namespace groups including `auth`, `db`, `ddl`, `files`,
10
- `stash`, `ai`, `browser`, `jobs`, `workflow`, `authority`, `logs`, `platform`,
11
- `coder`, `publisher`, `admin`, and control-plane helpers. The exact exported
12
- types are generated by `npm run build` from `src/`.
13
-
14
- `workflow.ensure` is the preferred Authority-backed lifecycle entry. Use the
15
- Authority namespace for run timeline truth and the explicit archive/repair
16
- helpers for proof-first maintenance.
1
+ # API surface
2
+
3
+ Import from the root package:
4
+
5
+ ```ts
6
+ import { dominus } from 'dominus-sdk-nodejs';
7
+ ```
8
+
9
+ The singleton exposes namespace groups including `auth`, `db`, `ddl`, `files`,
10
+ `stash`, `ai`, `browser`, `jobs`, `workflow`, `authority`, `logs`, `platform`,
11
+ `coder`, `publisher`, `admin`, and control-plane helpers. The exact exported
12
+ types are generated by `npm run build` from `src/`.
13
+
14
+ `workflow.ensure` is the preferred Authority-backed lifecycle entry. Use the
15
+ Authority namespace for run timeline truth and the explicit archive/repair
16
+ helpers for proof-first maintenance.
@@ -1,14 +1,14 @@
1
- # Agent playbook
2
-
3
- Before changing an SDK method, trace its route transform, request body, typed
4
- error contract, and corresponding worker/service endpoint. Run:
5
-
6
- ```text
7
- npm run build
8
- npm run test:types
9
- npm test
10
- ```
11
-
12
- For a package release, update the version intentionally and verify the new
13
- version is not already published before pushing the `production` lane. A
14
- local SDK test pass does not prove server or registry state.
1
+ # Agent playbook
2
+
3
+ Before changing an SDK method, trace its route transform, request body, typed
4
+ error contract, and corresponding worker/service endpoint. Run:
5
+
6
+ ```text
7
+ npm run build
8
+ npm run test:types
9
+ npm test
10
+ ```
11
+
12
+ For a package release, update the version intentionally and verify the new
13
+ version is not already published before pushing the `production` lane. A
14
+ local SDK test pass does not prove server or registry state.
@@ -1,14 +1,14 @@
1
- # Agent Guide Index
2
-
3
- Last updated: 2026-08-04 local
4
- Current snapshot: `2026-08-04-sdk-nodejs/00-reading-order.md`
5
-
6
- ## Read Order
7
-
8
- 1. `2026-08-04-sdk-nodejs/00-reading-order.md`
9
- 2. `2026-08-04-sdk-nodejs/01-purpose-and-boundaries.md`
10
- 3. `2026-08-04-sdk-nodejs/03-api-surface.md`
11
- 4. `2026-08-04-sdk-nodejs/10-agent-playbook.md`
12
-
13
- The published package entry point and `src/` remain authoritative. Historical
14
- guide packs are retained for prior release context.
1
+ # Agent Guide Index
2
+
3
+ Last updated: 2026-08-04 local
4
+ Current snapshot: `2026-08-04-sdk-nodejs/00-reading-order.md`
5
+
6
+ ## Read Order
7
+
8
+ 1. `2026-08-04-sdk-nodejs/00-reading-order.md`
9
+ 2. `2026-08-04-sdk-nodejs/01-purpose-and-boundaries.md`
10
+ 3. `2026-08-04-sdk-nodejs/03-api-surface.md`
11
+ 4. `2026-08-04-sdk-nodejs/10-agent-playbook.md`
12
+
13
+ The published package entry point and `src/` remain authoritative. Historical
14
+ guide packs are retained for prior release context.
@@ -1,22 +1,22 @@
1
- # Current Agent-Guide Snapshot
2
-
3
- Latest snapshot: `2026-06-27-0849-sdk-orient/00-reading-order.md`
4
-
5
- Generated 2026-06-27 from SDK v6.6.0 (`package.json`) on branch `production`.
6
-
7
- ## Top Five Facts To Refresh Before Editing
8
-
9
- 1. **Version + changelog.** Confirm `package.json` `version` and the top of
10
- `CHANGELOG.md`; this pack was written at `6.6.0`.
11
- 2. **Namespace count.** `src/namespaces/` had 27 files, each wired as a
12
- `public readonly` property in `src/index.ts`. Re-count before claiming a
13
- surface is missing.
14
- 3. **Tests exist.** `tests/` has 24 test files run by `npm test`. The older
15
- claim in `docs/architecture.md` §10 / `CLAUDE.md` ("no committed tests") was
16
- stale and is corrected in this pass.
17
- 4. **Storage rule.** `dominus.stash.*` is the primary storage surface;
18
- `redis`/`db`/`files`/`artifacts` are building blocks (see
19
- `docs/architecture.md` §2a).
20
- 5. **Release lane.** Push to `production` triggers
21
- `.github/workflows/publish-production.yml` (npm publish). Do not commit/push
22
- from janitor work.
1
+ # Current Agent-Guide Snapshot
2
+
3
+ Latest snapshot: `2026-06-27-0849-sdk-orient/00-reading-order.md`
4
+
5
+ Generated 2026-06-27 from SDK v6.6.0 (`package.json`) on branch `production`.
6
+
7
+ ## Top Five Facts To Refresh Before Editing
8
+
9
+ 1. **Version + changelog.** Confirm `package.json` `version` and the top of
10
+ `CHANGELOG.md`; this pack was written at `6.6.0`.
11
+ 2. **Namespace count.** `src/namespaces/` had 27 files, each wired as a
12
+ `public readonly` property in `src/index.ts`. Re-count before claiming a
13
+ surface is missing.
14
+ 3. **Tests exist.** `tests/` has 24 test files run by `npm test`. The older
15
+ claim in `docs/architecture.md` §10 / `CLAUDE.md` ("no committed tests") was
16
+ stale and is corrected in this pass.
17
+ 4. **Storage rule.** `dominus.stash.*` is the primary storage surface;
18
+ `redis`/`db`/`files`/`artifacts` are building blocks (see
19
+ `docs/architecture.md` §2a).
20
+ 5. **Release lane.** Push to `production` triggers
21
+ `.github/workflows/publish-production.yml` (npm publish). Do not commit/push
22
+ from janitor work.
@@ -1,119 +1,119 @@
1
- # SDK Architecture
2
-
3
- This document describes how `dominus-sdk-nodejs` is structured and how requests flow from namespace methods to backend services.
4
-
5
- ## 1. Public Surface
6
-
7
- - Entry point: `src/index.ts`
8
- - Singleton export: `dominus`
9
- - Public API composition:
10
- - Namespace properties (`dominus.auth`, `dominus.db`, `dominus.ai`, ...)
11
- - Root shortcuts for common operations (`get`, `upsert`, `listTables`, `queryTable`, `addTable`, etc.)
12
- - Utility exports (errors, crypto helpers, cache utilities, JWT helpers)
13
-
14
- ## 2. Layering
15
-
16
- - Namespace layer (`src/namespaces/*`)
17
- - Maps method calls to concrete API routes
18
- - Translates ergonomic SDK params to backend payload shape
19
- - Minimal orchestration and convenience wrappers
20
- - Transport layer (`src/lib/client.ts`)
21
- - Auth token selection (service JWT vs user JWT)
22
- - Request encoding/decoding protocol
23
- - Retries, timeout handling, circuit breaker checks
24
- - SSE streaming and binary upload/download support
25
- - Support libraries (`src/lib/*`)
26
- - `cache.ts`: encrypted in-memory cache + circuit breaker primitives
27
- - `errors.ts`: typed SDK errors
28
- - `config.ts`: env/config resolution
29
- - `console-capture.ts`: optional console forwarding to logs
30
- - `page-rules.ts`, `user-session.ts`: local portal/session acceleration
31
-
32
- ## 2a. Storage layer positioning
33
-
34
- `dominus.stash.*` is the **primary storage surface**. Applications store named-kind data through Stash and the kind registry routes each kind to the right backend; callers address data by what it *is* (`kind` + `scope` + `key`), not by which primitive holds it. The primitive namespaces (`redis`, `db`, `files`) and the addressed `artifacts` helpers remain as building blocks — they are not deprecated and are never removed — but they are rarely targeted directly for application data.
35
-
36
- This is the **Two-Layer Storage Rule**: applications store named-kind data via Stash; primitives are used directly only for ephemera (locks, queues, cache) or when building a kernel backend.
37
-
38
- | Your data | Use | Why |
39
- |---|---|---|
40
- | Named, durable data of a registered kind (artifacts, conversations, configs, recipes, secrets) | `dominus.stash.*` | Primary surface; the kind registry routes to the right backend and policy. |
41
- | A direct `ar://`-addressed artifact workflow (you already hold a canonical ref) | `dominus.artifacts.*` | Escape hatch for explicit Artifact V2 addressing; prefer a Stash `artifact-v2`-backed kind for new code. |
42
- | Locks, queues, rate counters, short-lived cache — ephemera | `dominus.redis.*` | Building block for ephemeral state; named data belongs in Stash. |
43
- | Building a new kernel backend or a documented migration fallback | primitives (`redis`, `db`, `files`) | The lowest layer; not the place for ordinary application data. |
44
-
45
- ## 3. Request Lifecycle
46
-
47
- 1. Caller invokes namespace method.
48
- 2. Namespace builds request options (`endpoint`, `method`, `body`, `useGateway`, optional `userToken`).
49
- 3. `DominusClient` resolves auth context:
50
- - if `userToken` provided: uses caller token
51
- - otherwise: ensures service JWT exists (PSK -> `/jwt/mint`, cached)
52
- 4. Request payload is serialized to JSON, then base64-encoded for Dominus wire protocol.
53
- 5. HTTP request is sent.
54
- 6. Response body is decoded from base64 and parsed.
55
- 7. Errors are mapped to SDK error types.
56
-
57
- ## 4. Routing Model
58
-
59
- - Namespace code generally targets `/api/*` endpoints.
60
- - For methods with `useGateway: true`, client route transform maps `/api/*` to gateway `/svc/*` dispatch paths.
61
- - Some methods intentionally use direct fetch paths (for example health checks/JWKS fetch).
62
-
63
- See [routes-services.md](./routes-services.md) for full route/service assessment.
64
-
65
- ## 5. Auth and Token Handling
66
-
67
- ### Service token flow
68
-
69
- - Input: `DOMINUS_TOKEN` (PSK)
70
- - Client exchanges PSK for short-lived JWT via gateway auth route.
71
- - JWT is cached with refresh buffer and refresh mutex to avoid thundering herd under concurrency.
72
-
73
- ### User token flow
74
-
75
- - Methods that accept `userToken` pass caller JWT through unchanged.
76
- - Backend performs authorization checks for the user context.
77
-
78
- ### Local JWT utilities
79
-
80
- - `verifyJwtLocally`, `isJwtValid`, and `mintSelectedScopeJwt` are exported from `src/lib/client.ts`. Selected-scope targeting is now the only supported SDK helper vocabulary.
81
- - `mintSelectedScopeJwt(targetOrgId, targetEnv)` is the canonical selected-scope mint helper; the live `/jwt/mint` contract keys selected scope off org plus environment, not a shared-routing flag.
82
- - `auth.getJwks` fetches public keys and caches them.
83
- - `auth.validateJwt` performs local payload checks/expiry validation.
84
-
85
- ## 6. Caching and Resilience
86
-
87
- - Encrypted in-memory cache used for selected short-lived values (JWT, portal/session-related caches).
88
- - Circuit breaker support exists in transport/cache layer.
89
- - Retry with backoff is applied for transient request failures and mint flow.
90
-
91
- ## 7. Streaming and Binary Paths
92
-
93
- - SSE: `streamRequest()` in client, used by AI streaming methods.
94
- - Multipart binary upload: `binaryUpload()`.
95
- - Binary download to `Buffer`: `binaryDownload()`.
96
-
97
- ## 8. Speech APIs
98
-
99
- Speech routes are owned by agent-runtime through the `dominus.ai` namespace:
100
-
101
- - `dominus.ai.stt(audio, options?)` -> `POST /api/agent/stt`
102
- - `dominus.ai.tts(text, options?)` -> `POST /api/agent/tts`
103
-
104
- The legacy streaming STT namespace (`dominus.stt`) is retired in hard cutover.
105
-
106
- ## 9. Documentation Topology
107
-
108
- Canonical documentation set for this repository:
109
-
110
- - [README.md](../README.md): overview and usage entry
111
- - [CLAUDE.md](../CLAUDE.md): agent conventions for this repo
112
- - [usage-reference.md](./usage-reference.md): exhaustive namespaced command reference
113
- - [routes-services.md](./routes-services.md): service and endpoint assessment
114
-
115
- ## 10. Known Gaps
116
-
117
- - The hand-maintained command/namespace counts in `routes-services.md` and
118
- `usage-reference.md` can drift from source; re-derive from `src/namespaces/*.ts`
119
- and `src/index.ts` before quoting them.
1
+ # SDK Architecture
2
+
3
+ This document describes how `dominus-sdk-nodejs` is structured and how requests flow from namespace methods to backend services.
4
+
5
+ ## 1. Public Surface
6
+
7
+ - Entry point: `src/index.ts`
8
+ - Singleton export: `dominus`
9
+ - Public API composition:
10
+ - Namespace properties (`dominus.auth`, `dominus.db`, `dominus.ai`, ...)
11
+ - Root shortcuts for common operations (`get`, `upsert`, `listTables`, `queryTable`, `addTable`, etc.)
12
+ - Utility exports (errors, crypto helpers, cache utilities, JWT helpers)
13
+
14
+ ## 2. Layering
15
+
16
+ - Namespace layer (`src/namespaces/*`)
17
+ - Maps method calls to concrete API routes
18
+ - Translates ergonomic SDK params to backend payload shape
19
+ - Minimal orchestration and convenience wrappers
20
+ - Transport layer (`src/lib/client.ts`)
21
+ - Auth token selection (service JWT vs user JWT)
22
+ - Request encoding/decoding protocol
23
+ - Retries, timeout handling, circuit breaker checks
24
+ - SSE streaming and binary upload/download support
25
+ - Support libraries (`src/lib/*`)
26
+ - `cache.ts`: encrypted in-memory cache + circuit breaker primitives
27
+ - `errors.ts`: typed SDK errors
28
+ - `config.ts`: env/config resolution
29
+ - `console-capture.ts`: optional console forwarding to logs
30
+ - `page-rules.ts`, `user-session.ts`: local portal/session acceleration
31
+
32
+ ## 2a. Storage layer positioning
33
+
34
+ `dominus.stash.*` is the **primary storage surface**. Applications store named-kind data through Stash and the kind registry routes each kind to the right backend; callers address data by what it *is* (`kind` + `scope` + `key`), not by which primitive holds it. The primitive namespaces (`redis`, `db`, `files`) and the addressed `artifacts` helpers remain as building blocks — they are not deprecated and are never removed — but they are rarely targeted directly for application data.
35
+
36
+ This is the **Two-Layer Storage Rule**: applications store named-kind data via Stash; primitives are used directly only for ephemera (locks, queues, cache) or when building a kernel backend.
37
+
38
+ | Your data | Use | Why |
39
+ |---|---|---|
40
+ | Named, durable data of a registered kind (artifacts, conversations, configs, recipes, secrets) | `dominus.stash.*` | Primary surface; the kind registry routes to the right backend and policy. |
41
+ | A direct `ar://`-addressed artifact workflow (you already hold a canonical ref) | `dominus.artifacts.*` | Escape hatch for explicit Artifact V2 addressing; prefer a Stash `artifact-v2`-backed kind for new code. |
42
+ | Locks, queues, rate counters, short-lived cache — ephemera | `dominus.redis.*` | Building block for ephemeral state; named data belongs in Stash. |
43
+ | Building a new kernel backend or a documented migration fallback | primitives (`redis`, `db`, `files`) | The lowest layer; not the place for ordinary application data. |
44
+
45
+ ## 3. Request Lifecycle
46
+
47
+ 1. Caller invokes namespace method.
48
+ 2. Namespace builds request options (`endpoint`, `method`, `body`, `useGateway`, optional `userToken`).
49
+ 3. `DominusClient` resolves auth context:
50
+ - if `userToken` provided: uses caller token
51
+ - otherwise: ensures service JWT exists (PSK -> `/jwt/mint`, cached)
52
+ 4. Request payload is serialized to JSON, then base64-encoded for Dominus wire protocol.
53
+ 5. HTTP request is sent.
54
+ 6. Response body is decoded from base64 and parsed.
55
+ 7. Errors are mapped to SDK error types.
56
+
57
+ ## 4. Routing Model
58
+
59
+ - Namespace code generally targets `/api/*` endpoints.
60
+ - For methods with `useGateway: true`, client route transform maps `/api/*` to gateway `/svc/*` dispatch paths.
61
+ - Some methods intentionally use direct fetch paths (for example health checks/JWKS fetch).
62
+
63
+ See [routes-services.md](./routes-services.md) for full route/service assessment.
64
+
65
+ ## 5. Auth and Token Handling
66
+
67
+ ### Service token flow
68
+
69
+ - Input: `DOMINUS_TOKEN` (PSK)
70
+ - Client exchanges PSK for short-lived JWT via gateway auth route.
71
+ - JWT is cached with refresh buffer and refresh mutex to avoid thundering herd under concurrency.
72
+
73
+ ### User token flow
74
+
75
+ - Methods that accept `userToken` pass caller JWT through unchanged.
76
+ - Backend performs authorization checks for the user context.
77
+
78
+ ### Local JWT utilities
79
+
80
+ - `verifyJwtLocally`, `isJwtValid`, and `mintSelectedScopeJwt` are exported from `src/lib/client.ts`. Selected-scope targeting is now the only supported SDK helper vocabulary.
81
+ - `mintSelectedScopeJwt(targetOrgId, targetEnv)` is the canonical selected-scope mint helper; the live `/jwt/mint` contract keys selected scope off org plus environment, not a shared-routing flag.
82
+ - `auth.getJwks` fetches public keys and caches them.
83
+ - `auth.validateJwt` performs local payload checks/expiry validation.
84
+
85
+ ## 6. Caching and Resilience
86
+
87
+ - Encrypted in-memory cache used for selected short-lived values (JWT, portal/session-related caches).
88
+ - Circuit breaker support exists in transport/cache layer.
89
+ - Retry with backoff is applied for transient request failures and mint flow.
90
+
91
+ ## 7. Streaming and Binary Paths
92
+
93
+ - SSE: `streamRequest()` in client, used by AI streaming methods.
94
+ - Multipart binary upload: `binaryUpload()`.
95
+ - Binary download to `Buffer`: `binaryDownload()`.
96
+
97
+ ## 8. Speech APIs
98
+
99
+ Speech routes are owned by agent-runtime through the `dominus.ai` namespace:
100
+
101
+ - `dominus.ai.stt(audio, options?)` -> `POST /api/agent/stt`
102
+ - `dominus.ai.tts(text, options?)` -> `POST /api/agent/tts`
103
+
104
+ The legacy streaming STT namespace (`dominus.stt`) is retired in hard cutover.
105
+
106
+ ## 9. Documentation Topology
107
+
108
+ Canonical documentation set for this repository:
109
+
110
+ - [README.md](../README.md): overview and usage entry
111
+ - [CLAUDE.md](../CLAUDE.md): agent conventions for this repo
112
+ - [usage-reference.md](./usage-reference.md): exhaustive namespaced command reference
113
+ - [routes-services.md](./routes-services.md): service and endpoint assessment
114
+
115
+ ## 10. Known Gaps
116
+
117
+ - The hand-maintained command/namespace counts in `routes-services.md` and
118
+ `usage-reference.md` can drift from source; re-derive from `src/namespaces/*.ts`
119
+ and `src/index.ts` before quoting them.
@@ -1,15 +1,15 @@
1
- # Atlas Blockers: dominus-sdk-nodejs
2
-
3
- Generated: 2026-07-24 12:31 EDT
4
-
5
- ## Blockers
6
-
7
- | ID | Blocker | Evidence | Likely owner | Workaround | Attack with |
8
- |---|---|---|---|---|---|
9
- | B1 | Docs/agent-guide may lag HEAD | Agent-guide snapshot(s) 2026-06-27-0849 — verify vs HEAD commits.; HEAD `8f41170` | `kyle-janitor` | Prefer code + CLAUDE | `kyle-janitor` |
10
- | B2 | Local tests not executed this pass | Docs-only atlas | CI | Run before behavior changes | Local/CI |
11
-
12
- ## Recommended next skill
13
-
14
- 1. `kyle-janitor` — refresh agent-guide if stale vs HEAD.
15
- 2. Behavior defects → `kyle-diagnose` / owning expert skill.
1
+ # Atlas Blockers: dominus-sdk-nodejs
2
+
3
+ Generated: 2026-07-24 12:31 EDT
4
+
5
+ ## Blockers
6
+
7
+ | ID | Blocker | Evidence | Likely owner | Workaround | Attack with |
8
+ |---|---|---|---|---|---|
9
+ | B1 | Docs/agent-guide may lag HEAD | Agent-guide snapshot(s) 2026-06-27-0849 — verify vs HEAD commits.; HEAD `8f41170` | `kyle-janitor` | Prefer code + CLAUDE | `kyle-janitor` |
10
+ | B2 | Local tests not executed this pass | Docs-only atlas | CI | Run before behavior changes | Local/CI |
11
+
12
+ ## Recommended next skill
13
+
14
+ 1. `kyle-janitor` — refresh agent-guide if stale vs HEAD.
15
+ 2. Behavior defects → `kyle-diagnose` / owning expert skill.
@@ -1,25 +1,25 @@
1
- # Atlas Proof Ladder: dominus-sdk-nodejs
2
-
3
- ## Local Proof
4
-
5
- | Command | Expected signal | Status |
6
- |---|---|---|
7
- | `git status -sb` | Clean production branch @ `8f41170` | Observed via gather |
8
- | Test / typecheck | Pass | NOT RUN this pass |
9
-
10
- ## CI / Release Proof
11
-
12
- | Surface | Expected signal | Status |
13
- |---|---|---|
14
- | Repo deploy workflows | Green on production branch pushes | Not re-run this pass |
15
-
16
- ## Deploy / Live Proof
17
-
18
- | Surface | Expected signal | Status |
19
- |---|---|---|
20
- | Service health / package publish | Live or published artifact | Not probed this pass |
21
-
22
- ## Positive vs No-Regression
23
-
24
- - **Positive:** Atlas pack exists at HEAD `8f41170` with dated proof pointers.
25
- - **No-regression:** Do not “fix” docs by reverting recent behavioral commits listed in the truthmap log.
1
+ # Atlas Proof Ladder: dominus-sdk-nodejs
2
+
3
+ ## Local Proof
4
+
5
+ | Command | Expected signal | Status |
6
+ |---|---|---|
7
+ | `git status -sb` | Clean production branch @ `8f41170` | Observed via gather |
8
+ | Test / typecheck | Pass | NOT RUN this pass |
9
+
10
+ ## CI / Release Proof
11
+
12
+ | Surface | Expected signal | Status |
13
+ |---|---|---|
14
+ | Repo deploy workflows | Green on production branch pushes | Not re-run this pass |
15
+
16
+ ## Deploy / Live Proof
17
+
18
+ | Surface | Expected signal | Status |
19
+ |---|---|---|
20
+ | Service health / package publish | Live or published artifact | Not probed this pass |
21
+
22
+ ## Positive vs No-Regression
23
+
24
+ - **Positive:** Atlas pack exists at HEAD `8f41170` with dated proof pointers.
25
+ - **No-regression:** Do not “fix” docs by reverting recent behavioral commits listed in the truthmap log.