@elevasis/sdk 1.33.1 → 1.34.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.
@@ -0,0 +1,86 @@
1
+ # Ontology `surface` → `endpoint` rename + Knowledge Browser UI upgrades
2
+
3
+ ## Why this note exists
4
+
5
+ This release bumps **both** `@elevasis/core` and `@elevasis/ui`. Two distinct changes ride it:
6
+
7
+ 1. **Breaking OM contract rename (`@elevasis/core`).** The ontology kind `surface` was renamed to
8
+ `endpoint` to stop colliding with **navigation surfaces** (shell sidebar routes). The published
9
+ contract changed: the `OntologyKind` enum member `'surface'` is now `'endpoint'`, the ontology ID
10
+ namespace `…:surface/…` is now `…:endpoint/…`, `ontology.surfaces` is now `ontology.endpoints`,
11
+ and the exported `OntologySurfaceType` / `OntologySurfaceTypeSchema` are now
12
+ `OntologyEndpointType` / `OntologyEndpointTypeSchema`. **There is no back-compat alias** (hard
13
+ rename — the kind was near-dormant). Any tenant OM that still declares a `:surface/` **ontology**
14
+ ID will fail validation once it installs the new `@elevasis/core`.
15
+
16
+ 2. **Knowledge Browser UI upgrades (`@elevasis/ui`).** Three additive, platform-substrate
17
+ enhancements that tenants get purely on the `@elevasis/ui` bump — no authoring change required:
18
+ full `ClientProfile` detail rendering in the Clients panel, clickable group child cards
19
+ (Profile → Identity/Branding navigate like the tree), and explanatory hover tooltips on
20
+ platform-vocabulary badges/edge labels. The ontology tree row + its tooltip now read
21
+ **"Endpoints"** instead of "Surfaces", consistent with change #1.
22
+
23
+ ## Applies to
24
+
25
+ - **Change #1 (ontology rename):** every tenant whose `core/config/organization-model/` declares any
26
+ ontology ID with a `:surface/` segment (i.e. an entry under a System's `ontology.surfaces`).
27
+ **Confirmed in this train: ZERO live tenants carry any `:surface/` ontology ID** (verified by a
28
+ repo-wide grep across all of `external/` — only `_template` carried one, migrated in this train).
29
+ The 3 live derived projects (ZentaraHQ, nirvana-marketing, contemplative-records) inherit
30
+ `endpoint/` cleanly. Run the verification below anyway before installing the new `@elevasis/core`.
31
+ - **Change #2 (UI upgrades):** every template-derived project — they render on the `@elevasis/ui`
32
+ bump with no further action.
33
+
34
+ ## Required actions
35
+
36
+ `/git-sync` / `/external sync` delivers the new `@elevasis/core` + `@elevasis/ui` dependency
37
+ baselines and this note. The dependency bumps install automatically; the ontology-ID rewrite (only if
38
+ your project authored any) is project-owned OM content and is **not** auto-applied.
39
+
40
+ 1. **Install the baselines together.** Bump `@elevasis/core` and `@elevasis/ui` in the same change
41
+ (the baseline write from sync covers `core/package.json`, `operations/package.json`, and
42
+ `ui/package.json`). Do not install the new `@elevasis/core` while your OM still has any `:surface/`
43
+ **ontology** ID.
44
+ 2. **Rename any ontology `surface/` IDs (only if present).** In `core/config/organization-model/`,
45
+ change every ontology ID `…:surface/<name>` to `…:endpoint/<name>`, and the containing
46
+ `ontology: { surfaces: { … } }` key to `ontology: { endpoints: { … } }`. Update every
47
+ cross-reference (`ownerSystemId`, `route`, links, etc.). Most tenants have nothing to change here.
48
+ 3. **Do NOT touch navigation surfaces.** This is the critical disambiguation. The rename is
49
+ ontology-only. Leave `system.surfaces`, `ui.surfaces`, sidebar `SidebarSurfaceNode`s, the
50
+ `surfaceType` route field, the graph node kind `surface`, and `SurfaceDescribeView` **unchanged** —
51
+ those legitimately own the word "surface" for shell routing and are orthogonal to the ontology kind.
52
+ 4. **Update tests.** If your `core/config/organization-model.test.ts` or contract tests assert
53
+ `compiled.ontology.surfaces` or a `:surface/` ontology ID, rename them to `.endpoints` /
54
+ `:endpoint/`. Leave any `ui.surfaces` / navigation-surface assertions alone.
55
+ 5. **Verify, then boot.** Run the verification block, then `pnpm -C core test` and
56
+ `pnpm -C ui check-types` before booting the app.
57
+
58
+ ## Verification
59
+
60
+ ```bash
61
+ # 1. Find any remaining ontology surface/ IDs (navigation surfaces are fine — see discriminator)
62
+ grep -rn ":surface/\|ontology.surfaces\|OntologySurfaceType" core/config/organization-model
63
+
64
+ # Discriminator while reading hits:
65
+ # ontology (RENAME) -> a ":surface/" ID segment, "ontology: { surfaces: ... }", OntologySurface*
66
+ # navigation (KEEP) -> bare system.surfaces / ui.surfaces, SidebarSurface*, surfaceType
67
+
68
+ # 2. Template-family coherence
69
+ pnpm -C core test
70
+ pnpm -C ui check-types
71
+ pnpm -C ui test:contracts
72
+
73
+ # 3. Boot must not throw OM validation (no unknown OntologyKind)
74
+ ```
75
+
76
+ `OntologyKindSchema` must accept `endpoint` and reject `surface`; no `:surface/` ontology ID may
77
+ remain. Navigation surfaces must still resolve and render in the sidebar.
78
+
79
+ ## Not handled by /git-sync
80
+
81
+ - `/git-sync` and `/external sync` deliver the `@elevasis/core` + `@elevasis/ui` dependency baselines
82
+ and this note, but they do **not** edit your `core/config/organization-model/` — tenant OM content
83
+ is project-owned (`sync-preservation`). The `surface/` → `endpoint/` ontology-ID rewrite in steps
84
+ 2–4 is manual per tenant (a no-op for every current live tenant, which carries none).
85
+ - The Knowledge Browser UI upgrades (change #2) require **no** action — they are entirely inside
86
+ `@elevasis/ui` and appear on the bump.
@@ -0,0 +1,47 @@
1
+ # /om build system scaffold added to tenant template
2
+
3
+ ## Why this note exists
4
+
5
+ The monorepo added a guided `/om build` operation (Steps 2-3 of the Building-Systems Scaffold
6
+ task) that sequences the full platform runbook for authoring an Organization Model System end
7
+ to end. This train mirrors a thinner, Codify-ceremony-framed variant of that operation into the
8
+ tenant template. Tenant projects author OM via the Codify ceremony (not the platform PR-review
9
+ runbook), so the tenant variant is scoped accordingly.
10
+
11
+ Changes in this train:
12
+
13
+ - New operation file `.claude/skills/om/operations/build.md` (Codify-framed, 8 phases).
14
+ - `metadata.promptSignals` in `.claude/skills/om/SKILL.md` extended with four build-intent
15
+ phrases: `build a system`, `design a system`, `create a system that`, `system architecture`.
16
+ - `## Operations` table added to `.claude/skills/om/SKILL.md` with the `build` EXECUTE row.
17
+ - Build-intent routing branch added to the Decision Tree section of `SKILL.md` so free-text
18
+ build intent routes to `/om build` before the 5-bucket read/write buckets.
19
+
20
+ ## Applies to
21
+
22
+ - All template-derived projects that ship the `om` skill (`.claude/skills/om/SKILL.md`).
23
+ - Any project where an agent might express intent to build or design a new System.
24
+
25
+ ## Required actions
26
+
27
+ 1. Pull template changes so the new `build.md` operation file and the updated `SKILL.md` are
28
+ present in `.claude/skills/om/`.
29
+ 2. No package baseline bumps required -- this is a pure agent-scaffold change (no published
30
+ package version involved).
31
+ 3. No `pnpm install` needed unless the `/git-sync` pull also brings unrelated baseline changes.
32
+
33
+ ## Verification
34
+
35
+ - `.claude/skills/om/operations/build.md` is present.
36
+ - `.claude/skills/om/SKILL.md` contains the `build` row in the `## Operations` table.
37
+ - `.claude/skills/om/SKILL.md` `metadata.promptSignals.phrases` includes `build a system`,
38
+ `design a system`, `create a system that`, and `system architecture`.
39
+ - Saying "build a system for lead gen" in chat triggers `/om` and routes to `/om build` without
40
+ requiring the explicit `/om build` subcommand.
41
+
42
+ ## Not handled by /git-sync
43
+
44
+ - No dependency bumps or `pnpm install` required for this change alone.
45
+ - Any project-local documentation that references how to add a new System should be updated by
46
+ the maintainer to point at `/om build` as the guided entry point rather than manual Codify
47
+ Level-A alone.
@@ -0,0 +1,50 @@
1
+ # Knowledge Browser item copy-references now resolve via `om:describe item:<domain>:<id>`
2
+
3
+ ## Why this note exists
4
+
5
+ The Knowledge Browser used to copy an unresolvable `graph:<kind>:<uuid>` shorthand for
6
+ domain items (clients, roles, policies, customers, offerings, goals). Pasting that to an
7
+ agent led to dead ends — the OM resolver had no mount for it and `om:describe` rejected the
8
+ id. This train (published `@elevasis/core`, `@elevasis/sdk`, `@elevasis/ui` + the bundled
9
+ `om` skill) standardizes domain-item copy references on `item:<domain>:<id>`, which resolves
10
+ to the rich profile plus its location and governing knowledge. The `om` skill's read-folder
11
+ table and CLI invocation guidance changed, so derived projects must pick up the new skill
12
+ text and package baselines.
13
+
14
+ ## Applies to
15
+
16
+ - All template-derived projects that ship the `om` skill (`.claude/skills/om/SKILL.md`).
17
+ - Any project whose Knowledge Browser surfaces domain items (clients, roles, policies,
18
+ customers, offerings, goals).
19
+ - Agents that consume copied Knowledge Browser references.
20
+
21
+ ## Required actions
22
+
23
+ 1. Pull template changes and bump the published package baselines to the versions shipped by
24
+ this train: `@elevasis/core`, `@elevasis/sdk`, `@elevasis/ui` (run `pnpm install` after the
25
+ baseline bump so the new SDK CLI and UI copy behavior are present).
26
+ 2. Adopt the refreshed `.claude/skills/om/SKILL.md` read-folder table. It now documents
27
+ `item:<domain>:<id>` (resolves via `om:describe item:<domain>:<id>`), the `/by-domain/<domain>`
28
+ and `/by-item/<domain>/<id>` `om:ls` mounts, `group:` / `domain:` / `folder:` as
29
+ browser-overview references, and a legacy `graph:client:<uuid>` bridge note pointing to
30
+ `om:describe item:clients:<uuid>`.
31
+ 3. Use the corrected SDK CLI invocation at a project root: `pnpm elevasis-sdk om:describe …`
32
+ (root script alias) or `pnpm -C operations exec elevasis-sdk om:describe …`. The old
33
+ `pnpm exec elevasis-sdk …` at the project root fails in a multi-package tenant — replace it.
34
+
35
+ ## Verification
36
+
37
+ - `pnpm elevasis-sdk om:describe item:clients:<id>` returns the client profile, its location
38
+ (domain + graph id + `contains` parentage), and any governing knowledge — no dead ends.
39
+ - A bare/legacy `om:describe client:<uuid>` still resolves (back-compat for already-copied
40
+ references).
41
+ - `pnpm sync:verify -- <project>` shows the `.claude/skills/om/SKILL.md` write applied and no
42
+ remaining `om`-skill drift.
43
+
44
+ ## Not handled by /git-sync
45
+
46
+ - The published-package baseline bumps (`@elevasis/core` / `@elevasis/sdk` / `@elevasis/ui`)
47
+ and the subsequent `pnpm install` are manual — `/git-sync` does not bump dependencies.
48
+ - Any project-local documentation that hand-copied the old `pnpm exec elevasis-sdk` root
49
+ invocation or the old `graph:<kind>:<uuid>` copy vocabulary must be corrected by the
50
+ maintainer; `/git-sync` stops before touching project-owned surfaces.
@@ -0,0 +1,76 @@
1
+ # Knowledge Base "Page Not Found" hardening (KB `$nodeId` route)
2
+
3
+ ## Why this note exists
4
+
5
+ The Knowledge Base detail route (`ui/src/routes/knowledge/$nodeId.tsx`) could render a
6
+ terminal full-pane **"Page Not Found"** screen for node ids it could not resolve. Two
7
+ distinct gaps caused it:
8
+
9
+ 1. **No `folder:` branch.** Selecting a KB **folder** node (e.g. the `KNOWLEDGE > All`
10
+ folder) navigates to `/knowledge/folder:knowledge:all`. The route matched none of the
11
+ `domain:` / `group:` / `item:` prefixes, resolved to no graph node, and fell through to
12
+ a bare `<PageNotFound />`. The folder routing (`folder:` → `FolderDetailView`) was
13
+ missing from the template route entirely.
14
+ 2. **Two hard-404 landmines.** The `!group` and `!node` fall-through branches returned
15
+ `<PageNotFound />`, so any stale bookmark, renamed ontology id, or snapshot drift
16
+ dead-ended the whole content pane.
17
+
18
+ This train delivers the hardened route that **always renders browsable content** for any
19
+ node id. There is **no package bump** — the fix consumes only `@elevasis/ui` exports your
20
+ project already has at `@2.49.0+` (`KnowledgeBrowser`, `buildKnowledgeOmTreeData`,
21
+ `findKnowledgeTreeNodeByValue`, `KnowledgeTreeNodeData`).
22
+
23
+ ## Applies to
24
+
25
+ - Every template-derived project whose `ui/src/routes/knowledge/$nodeId.tsx` is still the
26
+ pre-fix version (no `folder:` branch, bare `PageNotFound` returns). If your KB renders
27
+ "Page Not Found" when the `All` (or any) folder node is selected, you are affected.
28
+ - No action is required for projects that have already customized this route to handle
29
+ folders and avoid hard 404s — the sync is a `merge-baseline` that **preserves your local
30
+ route edits** (`external-sync-feature-route-baseline`, `sync_lane_severity:
31
+ optional-feature-selection`).
32
+
33
+ ## Required actions
34
+
35
+ `/git-sync` / `/external sync` delivers the hardened route as a baseline merge and surfaces
36
+ this note. The route is project-owned baseline content under the route-preservation lane,
37
+ so it is **merged, not force-overwritten** — review the merge if you carry local
38
+ customizations.
39
+
40
+ 1. **Pull and review.** Run `/git-sync` (or `/external sync`) and review the merge into
41
+ `ui/src/routes/knowledge/$nodeId.tsx`. Accept the two changes: the new `folder:` →
42
+ `FolderDetailView` branch, and the replacement of both `<PageNotFound />` returns with a
43
+ `KnowledgeNodeFallback` (a subtle "not available" `Alert` plus the full
44
+ `KnowledgeBrowser`).
45
+ 2. **No dependency change.** `@elevasis/ui` does **not** need bumping for this fix; the
46
+ required exports are already published. Do not add a package bump to this sync.
47
+ 3. **Type-check, then boot.** Run `pnpm -C ui lint` (`tsc --noEmit`), then start the UI.
48
+
49
+ ## Verification
50
+
51
+ ```bash
52
+ # 1. The route must no longer return a bare PageNotFound
53
+ grep -n "PageNotFound" ui/src/routes/knowledge/$nodeId.tsx
54
+ # Expect: no terminal `return <PageNotFound />` in the content branches
55
+ # (a folder: branch + KnowledgeNodeFallback should be present instead)
56
+
57
+ # 2. Required @elevasis/ui exports are present at your installed version
58
+ grep -n "KnowledgeBrowser\|buildKnowledgeOmTreeData\|findKnowledgeTreeNodeByValue" \
59
+ ui/src/routes/knowledge/$nodeId.tsx
60
+
61
+ # 3. Template-family coherence
62
+ pnpm -C ui lint
63
+ ```
64
+
65
+ In the running app, select the `KNOWLEDGE > All` folder node (and any other folder/group
66
+ node): the content pane must render browsable Knowledge content, never a full-pane
67
+ "Page Not Found".
68
+
69
+ ## Not handled by /git-sync
70
+
71
+ - `/git-sync` / `/external sync` deliver and merge the route baseline plus this note, but
72
+ they do **not** redeploy your UI. Reaching your live app requires your own UI **redeploy**
73
+ after the sync merge is accepted.
74
+ - Local customizations to `ui/src/routes/knowledge/$nodeId.tsx` are preserved by the
75
+ `merge-baseline` lane — if you maintain a forked KB route, reconcile the `folder:` branch
76
+ and the `KnowledgeNodeFallback` into your version by hand rather than discarding your edits.
@@ -0,0 +1,75 @@
1
+ # Agent Sessions and public agent chat route
2
+
3
+ ## Why this note exists
4
+
5
+ This train makes `Agent Sessions` the canonical internal full-page chat surface and
6
+ introduces the browser-safe public agent chat substrate. Public browser clients use
7
+ platform-issued access grants and short-lived capability tokens; they must not call
8
+ server-to-server session APIs with platform API keys.
9
+
10
+ The shared public chat UI is published from `@elevasis/ui/features/public-agent-chat`.
11
+ The tenant route is authored after the UI package publish, then propagated through the
12
+ strict manifest sync.
13
+
14
+ The template Organization Model now also declares the `operations-sessions` navigation
15
+ surface (`/operations/sessions`). That lets template-derived tenants inherit the
16
+ standard Agent Sessions page or opt into the same surface from their own OM navigation
17
+ without hand-authoring a route.
18
+
19
+ ## Applies to
20
+
21
+ - Template-derived projects that want public or code-gated agent chat links.
22
+ - Projects syncing the template route baseline after the `@elevasis/ui` package baseline
23
+ is bumped.
24
+ - Projects that want the internal Agent Sessions page exposed through OM-authored
25
+ navigation.
26
+
27
+ ## Required actions
28
+
29
+ 1. Accept the package baseline updates for `@elevasis/core` and `@elevasis/ui`.
30
+ 2. Accept the new public chat route baseline once it appears in
31
+ `ui/src/routes/chat.$slug.tsx` and any root-shell adjustment needed to keep that route
32
+ outside the authenticated app shell.
33
+ 3. If your project customizes `core/config/organization-model/navigation.ts`, merge the
34
+ `operations-sessions` surface into the Operations group:
35
+
36
+ ```ts
37
+ 'operations-sessions': {
38
+ type: 'surface',
39
+ label: 'Agent Sessions',
40
+ path: '/operations/sessions',
41
+ surfaceType: 'list',
42
+ order: 30
43
+ }
44
+ ```
45
+
46
+ 4. Run the project UI install and typecheck/build after sync:
47
+
48
+ ```bash
49
+ pnpm -C ui install
50
+ pnpm -C ui check-types
51
+ pnpm -C ui build
52
+ ```
53
+
54
+ 5. Configure platform-side public agent access grants before sharing a public chat URL.
55
+
56
+ ## Verification
57
+
58
+ After sync, verify the OM exposes the Agent Sessions navigation surface:
59
+
60
+ ```bash
61
+ grep -n "operations-sessions\\|Agent Sessions\\|/operations/sessions" core/config/organization-model/navigation.ts
62
+ pnpm -C core test
63
+ ```
64
+
65
+ ## Security notes
66
+
67
+ - Browser code must use the public grant/capability-token flow.
68
+ - Do not expose `ELEVASIS_PLATFORM_KEY` or operations API keys in browser code.
69
+ - Public turns use the public WebSocket route backed by a capability token.
70
+
71
+ ## Not handled by /git-sync
72
+
73
+ `/git-sync` does not create production access grants, choose which agents are public,
74
+ merge project-owned OM customizations automatically, or redeploy tenant UIs. Those are
75
+ project/operator decisions after the code and package baselines are accepted.
@@ -0,0 +1,42 @@
1
+ # SDK CLI `om:*` tenant Organization Model loader fix
2
+
3
+ ## Why this note exists
4
+
5
+ The `@elevasis/sdk` CLI `om:*` read commands could return an empty model in standard
6
+ template-derived pnpm-workspace projects even when `core/config/organization-model.ts`
7
+ contained real systems and resources. The loader resolved `esbuild` and external
8
+ package imports from the project root, but template projects install SDK runtime
9
+ dependencies under `operations/`.
10
+
11
+ This train publishes an SDK loader fix. Tenant source does not need to change, but
12
+ `operations/package.json` must pick up the new `@elevasis/sdk` baseline.
13
+
14
+ ## Applies to
15
+
16
+ - Template-derived projects that run `elevasis-sdk om:ls`, `om:search`, `om:describe`,
17
+ `om:cat`, `om:graph`, or `om:skills` from `operations/`.
18
+ - Projects whose `om:*` output is unexpectedly empty despite a valid
19
+ `core/config/organization-model.ts`.
20
+
21
+ ## Required actions
22
+
23
+ 1. Accept the `operations/package.json` `@elevasis/sdk` baseline bump delivered by
24
+ `/external sync`.
25
+ 2. Run the operations install after the sync so the published CLI binary is updated.
26
+
27
+ ## Verification
28
+
29
+ Verify the tenant model loads from the published CLI:
30
+
31
+ ```bash
32
+ pnpm -C operations exec elevasis-sdk om:ls /all-systems
33
+ ```
34
+
35
+ The command should list the tenant's authored systems instead of returning an empty
36
+ result.
37
+
38
+ ## Not handled by /git-sync
39
+
40
+ `/git-sync` pulls template guidance into a derived project. It does not publish the SDK,
41
+ install dependencies inside every standalone project, or redeploy any project. Run the
42
+ project-local install and deployment steps after accepting the sync.
@@ -1,12 +1,48 @@
1
1
  ---
2
2
  title: CLI Management Commands
3
- description: elevasis-sdk management commands -- project, note, acquisition, client, agent, session, queue, schedule, om, and ui subcommand families
3
+ description: elevasis-sdk management commands -- project, note, acquisition, client, agent, session, queue, schedule, om, ui, and skill subcommand families
4
4
  ---
5
5
 
6
6
  This page covers the domain management commands for `elevasis-sdk`. For core SDK commands (check, deploy, exec, resources, executions, describe, creds, rename), see [CLI Reference](cli.mdx).
7
7
 
8
8
  ---
9
9
 
10
+ ## JSON-valued options
11
+
12
+ Any option that expects JSON can take inline JSON or a file reference:
13
+
14
+ ```bash
15
+ elevasis-sdk queue:select <id> --action-id approve --payload @json:tmp/queue-payload.json
16
+ elevasis-sdk schedule:create --name "Weekly report" --target-resource-type workflow --target-resource-id weekly-report --schedule-config @json:tmp/schedule-config.json
17
+ elevasis-sdk project:task:save <id> --current-state "Updated" --files-modified @json:tmp/files-modified.json
18
+ ```
19
+
20
+ `@json:<path>` is expanded before command parsing, so existing command handlers receive the same JSON string they would receive from an inline argument. Relative paths resolve against the Elevasis project root when the current directory is inside a project; otherwise they resolve against the current working directory. The referenced file must contain valid JSON.
21
+
22
+ Use `@json:<path>` for generated payloads, nested objects, arrays, or Windows shells. Inline JSON remains supported for small values.
23
+
24
+ ### Passing JSON arguments across shells
25
+
26
+ Agents launch `elevasis-sdk` from either bash or PowerShell, so JSON quoting guidance must hold for both. A JSON argument crosses two parsers before the CLI sees it:
27
+
28
+ 1. **The outer shell** (bash or PowerShell) -- decides whether embedded `"` survive.
29
+ 2. **The pnpm run-script layer** -- `pnpm elevasis-sdk ...` is an npm run-script. On Windows, pnpm runs scripts through `cmd.exe /c`, which re-parses arguments. `pnpm exec elevasis-sdk` and direct bin calls do not add this layer.
30
+
31
+ Each shell fails at a different layer, so a single inline-quoting fix does not cover both.
32
+
33
+ - **bash** preserves embedded double quotes, so inline JSON survives the shell itself. The failure is the `pnpm <run-script>` wrapper's `cmd.exe` re-parse: `cmd` treats `( ) & < > | ^ %` as metacharacters, and a value containing them aborts with `<X> was unexpected at this time.` before the CLI runs. Keep inline JSON ASCII and metacharacter-free, or bypass the run-script layer with the direct exec form (`pnpm -C operations exec elevasis-sdk ...`).
34
+ - **Windows PowerShell 5.1** strips embedded double quotes when calling a native exe (`node`, `pnpm`), with or without pnpm. The stop-parsing token `--%` and backslash-escaped quotes both fail. There is no reliable inline-JSON route. PowerShell 7+ fixes this class via `$PSNativeCommandArgumentPassing = 'Standard'`.
35
+
36
+ **Cross-shell rule:** file-based input is shell-agnostic -- only a path crosses the shell boundary. Prefer `@json:<path>` (or `-f` / `--input-file` for `exec` and `request:submit`) for any non-trivial JSON, and write the file with an editor rather than a shell heredoc.
37
+
38
+ | Shell | Inline JSON | Why | Use instead |
39
+ | -------------- | --------------------------------------- | --------------------------------------------- | ------------------------------------ |
40
+ | bash | OK if values avoid `( ) & < > | ^ %` | run-script `cmd.exe` re-parses metacharacters | direct exec form, or `@json:<path>` |
41
+ | PowerShell 5.1 | Never reliable | strips embedded `"`; `--%` and `\"` both fail | `@json:<path>` |
42
+ | either | n/a | path arguments avoid all JSON shell escaping | `@json:<path>` + editor-written file |
43
+
44
+ ---
45
+
10
46
  ## elevasis-sdk project:\*
11
47
 
12
48
  `elevasis-sdk project:*` is the canonical project-management surface. Use it for project, milestone, task, and note operations whether the caller is a human, a scripted workflow, or a slash-command router like `/project`.
@@ -42,18 +78,23 @@ elevasis-sdk project:milestone:list --project <id>
42
78
  elevasis-sdk project:milestone:create --project <id> --name "Phase 1"
43
79
  elevasis-sdk project:milestone:update <id> --status completed
44
80
  elevasis-sdk project:milestone:update <id> --description "Updated scope description"
81
+ elevasis-sdk project:milestone:update <id> --checklist @json:tmp/milestone-checklist.json
45
82
  elevasis-sdk project:milestone:delete <id>
46
83
  ```
47
84
 
48
85
  `project:milestone:update` accepts `--description` to set or clear the milestone description. Passing an empty string clears the field, matching `project:task:update --description` semantics.
49
86
 
87
+ Checklist updates are full replacements. Use `--checklist <json>` for small inline arrays, or `--checklist @json:<path>` for generated JSON. `--checklist-file <path>` is also supported for checklist-specific file input.
88
+
50
89
  ### Tasks
51
90
 
52
91
  ```bash
53
92
  elevasis-sdk project:task:list --project <id>
54
93
  elevasis-sdk project:task:get <id>
55
94
  elevasis-sdk project:task:create --project <id> --title "Implement API"
95
+ elevasis-sdk project:task:create --project <id> --title "Implement API" --checklist @json:tmp/task-checklist.json
56
96
  elevasis-sdk project:task:update <id> --status in_progress
97
+ elevasis-sdk project:task:update <id> --checklist @json:tmp/task-checklist.json
57
98
  elevasis-sdk project:task:delete <id>
58
99
  ```
59
100
 
@@ -68,6 +109,8 @@ elevasis-sdk project:task:save <id> --current-state <text> [--files-modified <js
68
109
  - `project:task:save <id>` -- merges fields into `resume_context`; `--current-state` is required; all other flags are optional JSON arrays or plain text
69
110
  - these commands are the CLI counterpart to `/work resume` and `/work save` style flows
70
111
 
112
+ Task checklist flags are also full replacements. `project:task:create`, `project:task:update`, and `project:milestone:update` support `--checklist <json>`, `--checklist @json:<path>`, and `--checklist-file <path>`. Prefer `@json:<path>` for non-trivial JSON and Windows shells because it works across JSON-valued options, not only checklist commands.
113
+
71
114
  **`project:task:save` flags:**
72
115
 
73
116
  | Flag | Description |
@@ -373,7 +416,7 @@ JWT-gated routes at the original unprefixed paths remain for the Command Center.
373
416
 
374
417
  Full CRUD management for client records. The `client:*` family covers create, read, update, and delete operations at `/api/external/clients`.
375
418
 
376
- For complete field definitions, filter options, and relationship semantics, see the [Clients feature documentation](/technical/features/clients).
419
+ For complete field definitions, filter options, and relationship semantics, see the [Clients feature documentation](/technical/features/operations/clients).
377
420
 
378
421
  **Quick reference:**
379
422
 
@@ -423,21 +466,65 @@ elevasis-sdk agent:get <id>
423
466
 
424
467
  ## elevasis-sdk session:\*
425
468
 
426
- Inspect and manage agent sessions.
469
+ Create, operate, inspect, and export multi-turn agent sessions. Use `elevasis-sdk exec`
470
+ for one-off workflow or agent execution; use `elevasis-sdk session:*` when the deployed
471
+ agent is `sessionCapable` and needs transcript persistence across turns.
427
472
 
428
473
  ```bash
474
+ elevasis-sdk session:create <resourceId>
475
+ elevasis-sdk session:turn <id> -f tmp/turn-1.json
476
+ elevasis-sdk session:messages <id>
429
477
  elevasis-sdk session:list
430
478
  elevasis-sdk session:get <id>
431
479
  elevasis-sdk session:end <id>
432
480
  ```
433
481
 
482
+ - `session:create <resourceId>` -- create a session for a session-capable deployed agent
483
+ - `session:turn <id>` -- execute a turn in an active session; pass input with `--input`
484
+ or `--input-file`
485
+ - `session:messages <id>` -- export the full transcript by default; use `--page` for a
486
+ single paginated API read
434
487
  - `session:list` -- list sessions for the organization; supports filtering by resource ID, user ID, and limit
435
- - `session:get <id>` -- get full session detail including messages and events
488
+ - `session:get <id>` -- get session state and metadata
436
489
  - `session:end <id>` -- gracefully end an active session
437
490
 
438
- **API routes:** `GET /api/external/sessions`, `/api/external/sessions/:id`, `DELETE /api/external/sessions/:id`
491
+ **API routes:** `POST /api/external/sessions`, `GET /api/external/sessions`,
492
+ `GET /api/external/sessions/:id`, `POST /api/external/sessions/:id/turns`,
493
+ `GET /api/external/sessions/:id/messages`, `POST /api/external/sessions/:id/end`
439
494
 
440
- **`session:list` filter flags:**
495
+ Hard deletion is intentionally not part of `session:end`; any destructive delete surface
496
+ must be exposed as a separate explicit command.
497
+
498
+ **`session:create` flags:**
499
+
500
+ | Flag | Description |
501
+ | --------------------- | ------------------------------ |
502
+ | `--user-id <id>` | Optional user ID for session |
503
+ | `--metadata <json>` | Optional session metadata JSON |
504
+ | `--json` | Output as JSON |
505
+ | `--api-url <url>` | Override the API base URL |
506
+
507
+ **`session:turn` flags:**
508
+
509
+ | Flag | Description |
510
+ | --------------------------- | -------------------------------------------- |
511
+ | `-i, --input <json>` | Turn input as JSON |
512
+ | `-f, --input-file <path>` | Read turn input from a JSON file |
513
+ | `--json` | Output as JSON |
514
+ | `--api-url <url>` | Override the API base URL |
515
+
516
+ **`session:messages` flags:**
517
+
518
+ | Flag | Description |
519
+ | --------------------- | ----------------------------------------------------------- |
520
+ | `--limit <limit>` | Messages per API page; default comes from the API |
521
+ | `--cursor <cursor>` | Message index cursor to start after |
522
+ | `--page` | Fetch one API page for debugging instead of all pages |
523
+ | `--all` | Fetch all pages; this is the default transcript export mode |
524
+ | `--json` | Output as JSON |
525
+ | `--api-url <url>` | Override the API base URL |
526
+
527
+ **`session:list` flags:**
441
528
 
442
529
  | Flag | Description |
443
530
  | ---------------------- | ------------------------------------ |
@@ -650,28 +737,47 @@ Both commands install after rewriting `package.json`. The `external/_template` r
650
737
 
651
738
  ---
652
739
 
740
+ ## elevasis-sdk skill:\*
741
+
742
+ Developer-facing skill tooling keeps the template `.claude/skills/` surface aligned with the live CLI catalog.
743
+
744
+ ```bash
745
+ elevasis-sdk skill:scaffold <domain>
746
+ elevasis-sdk skill:check-coverage
747
+ ```
748
+
749
+ - `skill:scaffold <domain>` prints a `SKILL.md` stub built from `elevasis-sdk cli --format json` for that domain. Author the curated skill at `external/_template/.claude/skills/<domain>/SKILL.md`; do not edit generated SDK reference copies directly.
750
+ - `skill:check-coverage` compares live CLI domains against `.claude/registries/skill-coverage.json`. Domains must be owned by a skill or explicitly waived.
751
+
752
+ The same coverage gate runs inside `elevasis-sdk check` when the coverage registry exists in the project root.
753
+
754
+ **Implementation:** `packages/sdk/src/cli/commands/skill/`
755
+
756
+ ---
757
+
653
758
  ## Appendix: Domain Status
654
759
 
655
760
  Current status of all SDK CLI domains. Domains marked `deferred` have no CLI commands yet.
656
761
 
657
- | Domain | CLI surface | API surface | Status |
658
- | ----------- | ------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------- |
659
- | platform | top-level SDK commands | mixed platform APIs | implemented |
660
- | project | `project:*` | `apps/api/src/projects/` | implemented |
661
- | knowledge | `knowledge:*` | file/generated knowledge data | implemented |
662
- | creds | `creds *` nested Commander group | credentials API | implemented |
663
- | ui | `ui:*` | local project file edits | implemented |
664
- | request | `request:submit`, `request:list`, `request:get` | requests API | implemented read/write scope |
665
- | error | `error resolve`, `error resolve-execution` | execution error APIs | partial |
666
- | acquisition | `acquisition:list:*`, `acquisition:deal:*` | `/api/external/acquisition/lists*`, `/api/external/deals*` | implemented read-only scope |
667
- | client | `client:*` | `/api/external/clients` | implemented read/write scope |
668
- | agent | `agent:list`, `agent:get` | `/api/external/agents*` | implemented read-only scope |
669
- | session | `session:list`, `session:get`, `session:end` | `/api/external/sessions*` | implemented management scope |
670
- | queue | `queue:list`, `queue:get`, `queue:select`, `queue:expire`, `queue:status` | `/api/external/command-queue*` | implemented |
671
- | schedule | `schedule:list`, `schedule:get`, `schedule:create`, `schedule:update` | `/api/external/task-scheduler/schedules*` | implemented |
672
- | content | none | not scoped here | deferred |
673
- | seo | none | not scoped here | deferred |
674
- | monitoring | none | not scoped here | deferred |
762
+ | Domain | CLI surface | API surface | Status |
763
+ | ----------- | ------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------- |
764
+ | platform | top-level SDK commands | mixed platform APIs | implemented |
765
+ | project | `project:*` | `apps/api/src/projects/` | implemented |
766
+ | knowledge | `knowledge:*` | file/generated knowledge data | implemented |
767
+ | creds | `creds *` nested Commander group | credentials API | implemented |
768
+ | ui | `ui:*` | local project file edits | implemented |
769
+ | request | `request:submit`, `request:list`, `request:get` | requests API | implemented read/write scope |
770
+ | error | `error resolve`, `error resolve-execution` | execution error APIs | partial |
771
+ | acquisition | `acquisition:list:*`, `acquisition:deal:*` | `/api/external/acquisition/lists*`, `/api/external/deals*` | implemented read-only scope |
772
+ | client | `client:*` | `/api/external/clients` | implemented read/write scope |
773
+ | agent | `agent:list`, `agent:get` | `/api/external/agents*` | implemented read-only scope |
774
+ | session | `session:create`, `session:turn`, `session:messages`, `session:list`, `session:get`, `session:end` | `/api/external/sessions*` | implemented multi-turn scope |
775
+ | queue | `queue:list`, `queue:get`, `queue:select`, `queue:expire`, `queue:status` | `/api/external/command-queue*` | implemented |
776
+ | schedule | `schedule:list`, `schedule:get`, `schedule:create`, `schedule:update` | `/api/external/task-scheduler/schedules*` | implemented |
777
+ | skill | `skill:scaffold`, `skill:check-coverage` | local CLI catalog and `.claude/registries/skill-coverage.json` | implemented developer tooling |
778
+ | content | none | not scoped here | deferred |
779
+ | seo | none | not scoped here | deferred |
780
+ | monitoring | none | not scoped here | deferred |
675
781
 
676
782
  ### Promotion Criteria
677
783
 
@@ -13,7 +13,7 @@ pnpm add @elevasis/sdk
13
13
 
14
14
  After installation, the `elevasis-sdk` binary is available in your project's `node_modules/.bin/`. Most commands require `ELEVASIS_PLATFORM_KEY` to be set in your environment or a `.env` file.
15
15
 
16
- For management commands (project:\*, note:\*, acquisition:\*, client:\*, agent:\*, session:\*, queue:\*, schedule:\*, om:\*, ui:\*), see [CLI Management](cli-management.mdx).
16
+ For management commands (project:\*, note:\*, acquisition:\*, client:\*, agent:\*, session:\*, queue:\*, schedule:\*, om:\*, ui:\*, skill:\*), see [CLI Management](cli-management.mdx).
17
17
 
18
18
  ---
19
19
 
@@ -30,6 +30,7 @@ elevasis-sdk check
30
30
  **Behavior:**
31
31
 
32
32
  - Imports your `src/index.ts` and runs it through `ResourceRegistry` validation
33
+ - Runs the skill coverage gate when `.claude/registries/skill-coverage.json` is present, ensuring every live CLI domain is covered by a template skill or explicitly waived
33
34
  - Catches the same errors that the platform catches at deploy time:
34
35
  - Duplicate `resourceId` within the organization
35
36
  - Invalid model configuration (temperature and token bounds)
@@ -25,6 +25,7 @@ description: "Auto-generated catalog of all published @elevasis/ui subpath expor
25
25
  | `@elevasis/ui/features/delivery` | Features Delivery | Features | Published delivery feature surface for downstream shells. |
26
26
  | `@elevasis/ui/features/lead-gen` | Features Lead Gen | Features | Published lead generation feature surface for downstream shells. |
27
27
  | `@elevasis/ui/features/operations` | Features Operations | Features | Published operations feature surface for downstream shells. |
28
+ | `@elevasis/ui/features/public-agent-chat` | Features Public Agent Chat | Features | Published public agent chat surface for downstream shells. |
28
29
  | `@elevasis/ui/features/monitoring` | Features Monitoring | Features | Published monitoring feature surface for downstream shells. |
29
30
  | `@elevasis/ui/features/monitoring/requests` | Features Monitoring Requests | Features | Published submitted-requests list, detail, and triage surface for downstream shells. |
30
31
  | `@elevasis/ui/features/seo` | Features SEO | Features | Published SEO feature surface for downstream shells. |