@elevasis/sdk 1.5.2 → 1.5.3
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/dist/cli.cjs +1 -1
- package/package.json +2 -2
- package/reference/cli.mdx +16 -16
- package/reference/deployment/index.mdx +6 -5
- package/reference/deployment/provided-features.mdx +38 -38
- package/reference/deployment/ui-execution.mdx +1 -2
- package/reference/framework/agent.mdx +44 -52
- package/reference/framework/index.mdx +13 -10
- package/reference/framework/project-structure.mdx +68 -68
- package/reference/packages/core/src/README.md +24 -17
- package/reference/packages/ui/src/provider/README.md +8 -7
- package/reference/roadmap.mdx +6 -4
- package/reference/scaffold/index.mdx +13 -9
- package/reference/scaffold/operations/propagation-pipeline.md +129 -0
- package/reference/scaffold/operations/scaffold-maintenance.md +125 -0
- package/reference/scaffold/recipes/add-a-resource.md +12 -10
- package/reference/scaffold/ui/feature-shell.mdx +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -43990,7 +43990,7 @@ function wrapAction(commandName, fn) {
|
|
|
43990
43990
|
// package.json
|
|
43991
43991
|
var package_default = {
|
|
43992
43992
|
name: "@elevasis/sdk",
|
|
43993
|
-
version: "1.5.
|
|
43993
|
+
version: "1.5.3",
|
|
43994
43994
|
description: "SDK for building Elevasis organization resources",
|
|
43995
43995
|
type: "module",
|
|
43996
43996
|
bin: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevasis/sdk",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"description": "SDK for building Elevasis organization resources",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"tsup": "^8.0.0",
|
|
45
45
|
"typescript": "5.9.2",
|
|
46
46
|
"zod": "^4.1.0",
|
|
47
|
-
"@repo/core": "0.2.
|
|
47
|
+
"@repo/core": "0.2.1",
|
|
48
48
|
"@repo/typescript-config": "0.0.0"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
package/reference/cli.mdx
CHANGED
|
@@ -402,23 +402,23 @@ elevasis-sdk describe onboard-client
|
|
|
402
402
|
|
|
403
403
|
---
|
|
404
404
|
|
|
405
|
-
## elevasis-sdk
|
|
405
|
+
## elevasis-sdk creds
|
|
406
406
|
|
|
407
|
-
Manage
|
|
407
|
+
Manage credentials for your project.
|
|
408
408
|
|
|
409
409
|
**Synopsis:**
|
|
410
410
|
|
|
411
411
|
```
|
|
412
|
-
elevasis-sdk
|
|
413
|
-
elevasis-sdk
|
|
414
|
-
elevasis-sdk
|
|
412
|
+
elevasis-sdk creds list
|
|
413
|
+
elevasis-sdk creds set <key> <value>
|
|
414
|
+
elevasis-sdk creds remove <key>
|
|
415
415
|
```
|
|
416
416
|
|
|
417
417
|
**Behavior:**
|
|
418
418
|
|
|
419
|
-
- `list` -- display all
|
|
420
|
-
- `set` -- add or update
|
|
421
|
-
- `remove` -- delete
|
|
419
|
+
- `list` -- display all credentials configured for the project
|
|
420
|
+
- `set` -- add or update a credential
|
|
421
|
+
- `remove` -- delete a credential
|
|
422
422
|
|
|
423
423
|
**Flags:**
|
|
424
424
|
|
|
@@ -429,9 +429,9 @@ elevasis-sdk env remove <key>
|
|
|
429
429
|
**Examples:**
|
|
430
430
|
|
|
431
431
|
```bash
|
|
432
|
-
elevasis-sdk
|
|
433
|
-
elevasis-sdk
|
|
434
|
-
elevasis-sdk
|
|
432
|
+
elevasis-sdk creds list
|
|
433
|
+
elevasis-sdk creds set OPENAI_API_KEY sk-proj-***
|
|
434
|
+
elevasis-sdk creds remove OPENAI_API_KEY
|
|
435
435
|
```
|
|
436
436
|
|
|
437
437
|
---
|
|
@@ -503,7 +503,7 @@ elevasis-sdk rename ist-upload-workflow --to ist-upload-contacts-workflow --exec
|
|
|
503
503
|
|
|
504
504
|
---
|
|
505
505
|
|
|
506
|
-
## elevasis-sdk project
|
|
506
|
+
## elevasis-sdk project:\*
|
|
507
507
|
|
|
508
508
|
Project-management commands operate on the shared delivery system used by packaged Projects pages and task-oriented agent workflows.
|
|
509
509
|
|
|
@@ -566,10 +566,10 @@ elevasis-sdk project:note:delete <id>
|
|
|
566
566
|
|
|
567
567
|
Most `project:*` commands support:
|
|
568
568
|
|
|
569
|
-
| Flag
|
|
570
|
-
|
|
|
571
|
-
| `--pretty`
|
|
572
|
-
| `--api-url <url>` | Override the API base URL
|
|
569
|
+
| Flag | Description |
|
|
570
|
+
| ----------------- | -------------------------------------------------- |
|
|
571
|
+
| `--pretty` | Human-readable terminal output instead of raw JSON |
|
|
572
|
+
| `--api-url <url>` | Override the API base URL |
|
|
573
573
|
|
|
574
574
|
For exact required flags and accepted enum values, see the command source under `packages/sdk/src/cli/commands/project/`.
|
|
575
575
|
|
|
@@ -37,7 +37,8 @@ elevasis-sdk deploy
|
|
|
37
37
|
Uploading... done
|
|
38
38
|
|
|
39
39
|
Deployed! 4 resources live.
|
|
40
|
-
|
|
40
|
+
Version: v1.0.0
|
|
41
|
+
Duration: 4.2s
|
|
41
42
|
```
|
|
42
43
|
|
|
43
44
|
Each deploy creates a new deployment record. The previous active deployment is automatically stopped. You can view all deployments with `elevasis-sdk deployments`.
|
|
@@ -62,9 +63,8 @@ The CLI validates your resources before bundling. Validation uses the same `Reso
|
|
|
62
63
|
Authenticating... done (acme-corp)
|
|
63
64
|
Validating...
|
|
64
65
|
ERROR Duplicate resource ID 'onboard-client' in organization 'Acme Corp'
|
|
65
|
-
ERROR Workflow step 'send-email' references non-existent next step 'notify'
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
Deploy aborted.
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Run `elevasis-sdk check` at any time to validate without deploying.
|
|
@@ -98,8 +98,9 @@ The CLI also accepts a `--api-url` flag on every command, which takes priority o
|
|
|
98
98
|
**API URL resolution order:**
|
|
99
99
|
|
|
100
100
|
1. `--api-url` flag (highest priority)
|
|
101
|
-
2. `
|
|
102
|
-
3. `
|
|
101
|
+
2. `--prod` flag (forces production URL, overrides `NODE_ENV=development`)
|
|
102
|
+
3. `ELEVASIS_API_URL` environment variable
|
|
103
|
+
4. `NODE_ENV`-based default (production: `https://api.elevasis.io`, development: localhost)
|
|
103
104
|
|
|
104
105
|
**Setting `ELEVASIS_PLATFORM_KEY` via `.env` file:**
|
|
105
106
|
|
|
@@ -4,7 +4,7 @@ description: Shared UI and API surfaces for packaged business systems like Lead
|
|
|
4
4
|
loadWhen: "Building against packaged app features, list-oriented lead gen, CRM, or project-management surfaces"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The SDK now covers more than raw workflow execution. The published `@elevasis/ui@2.
|
|
7
|
+
The SDK now covers more than raw workflow execution. The published `@elevasis/ui@2.9.0` package includes:
|
|
8
8
|
|
|
9
9
|
- manifest-backed shared features under `@elevasis/ui/features/<name>`
|
|
10
10
|
- headless shell/provider exports under `@elevasis/ui/provider`
|
|
@@ -16,7 +16,7 @@ Use this page to understand what the shared shell actually owns, which surfaces
|
|
|
16
16
|
|
|
17
17
|
## Shared Shell Contract
|
|
18
18
|
|
|
19
|
-
`ElevasisFeaturesProvider` and `FeatureShell` give you a shared manifest-driven shell layer, not a full application shell. In `2.
|
|
19
|
+
`ElevasisFeaturesProvider` and `FeatureShell` give you a shared manifest-driven shell layer, not a full application shell. In `2.9.0` they handle:
|
|
20
20
|
|
|
21
21
|
- feature registration
|
|
22
22
|
- feature-gated nav contribution
|
|
@@ -79,27 +79,27 @@ Dashboard is not part of that shared manifest shell by default. `@elevasis/ui/fe
|
|
|
79
79
|
|
|
80
80
|
## Contract Matrix
|
|
81
81
|
|
|
82
|
-
This is the published contract split in `@elevasis/ui@2.
|
|
82
|
+
This is the published contract split in `@elevasis/ui@2.9.0`:
|
|
83
83
|
|
|
84
|
-
| Contract type
|
|
85
|
-
|
|
|
86
|
-
| Manifest-backed shared subshell features | Feature manifest plus shared sidebar/pages, mounted through `@elevasis/ui/provider`
|
|
87
|
-
| Manifest-backed nav/app sections
|
|
88
|
-
| Exported compatibility components
|
|
89
|
-
| Compatibility barrel
|
|
84
|
+
| Contract type | What is published | Current examples |
|
|
85
|
+
| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
86
|
+
| Manifest-backed shared subshell features | Feature manifest plus shared sidebar/pages, mounted through `@elevasis/ui/provider` | Lead Gen, CRM, Projects, Operations, SEO |
|
|
87
|
+
| Manifest-backed nav/app sections | Feature manifest contributes gated nav and route metadata, but the host still owns the route pages or shell chrome | Monitoring, Settings |
|
|
88
|
+
| Exported compatibility components | Reusable components exported without a manifest-backed shell contract | Dashboard components such as `Dashboard`, `OperationsOverview`, `ResourceOverview`, `RecentExecutionsByResource`, `UnresolvedErrorsTeaser` |
|
|
89
|
+
| Compatibility barrel | Existing imports remain available from `@elevasis/ui/components`, but new host integrations should prefer feature/provider subpaths | Manifests, sidebars, and page components re-exported for compatibility |
|
|
90
90
|
|
|
91
91
|
Projects is currently the only packaged system with a first-class `elevasis-sdk project:*` CLI family. Lead Gen and CRM are still primarily UI + API + workflow/runtime surfaces, and browser-facing interactions remain REST-driven even when runtime tools exist.
|
|
92
92
|
|
|
93
93
|
## System Map
|
|
94
94
|
|
|
95
|
-
| System
|
|
96
|
-
|
|
|
97
|
-
| Lead Gen
|
|
98
|
-
| CRM
|
|
99
|
-
| Projects
|
|
100
|
-
| Dashboard
|
|
101
|
-
| Monitoring | `/monitoring/*`
|
|
102
|
-
| Settings
|
|
95
|
+
| System | Primary route space | Shared UI surface | Main data surface | Best SDK entry point |
|
|
96
|
+
| ---------- | ------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
97
|
+
| Lead Gen | `/lead-gen/*` | Lead Gen pages, sidebars, list detail page, run dialogs | Acquisition list APIs + list/acqDb platform tools | `@elevasis/ui/features/lead-gen`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
|
|
98
|
+
| CRM | `/crm/*` | CRM sidebar, overview widgets, deal/detail pages, workbench panels | Deal APIs, recent-activity API, acquisition-backed hooks, and the `crm` runtime adapter | `@elevasis/ui/features/crm`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
|
|
99
|
+
| Projects | `/projects/*` | Projects list page, milestones/tasks/notes sidebars and pages | Project, milestone, task, note REST endpoints + CLI | `@elevasis/ui/features/delivery`, `@elevasis/ui/hooks/delivery`, `elevasis-sdk project:*` |
|
|
100
|
+
| Dashboard | host-owned | Dashboard and overview components only; no shared manifest-backed nav contract | Host-chosen API composition | `@elevasis/ui/features/dashboard` |
|
|
101
|
+
| Monitoring | `/monitoring/*` | Monitoring nav metadata plus exported pages/components; no shared `FeatureShell` sidebar today | Monitoring REST APIs | `@elevasis/ui/features/monitoring` |
|
|
102
|
+
| Settings | `/settings/*` | Settings nav metadata plus exported settings components; no shared `FeatureShell` sidebar today | Settings/account/org REST APIs | `@elevasis/ui/features/settings` |
|
|
103
103
|
|
|
104
104
|
---
|
|
105
105
|
|
|
@@ -131,17 +131,17 @@ The most important page for downstream agents is `LeadGenListDetailPage`. It com
|
|
|
131
131
|
|
|
132
132
|
`@elevasis/ui/hooks` exposes list-aware hooks backed by the acquisition API:
|
|
133
133
|
|
|
134
|
-
| Hook
|
|
135
|
-
|
|
|
136
|
-
| `useLists()`
|
|
137
|
-
| `useList(listId)`
|
|
138
|
-
| `useListsTelemetry()`
|
|
139
|
-
| `useListProgress(listId)`
|
|
140
|
-
| `useListExecutions(listId)`
|
|
141
|
-
| `useCreateList()`
|
|
142
|
-
| `useUpdateList(listId)`
|
|
143
|
-
| `useUpdateListConfig(listId)` | `PATCH /acquisition/lists/:listId/config`
|
|
144
|
-
| `useDeleteList()`
|
|
134
|
+
| Hook | HTTP path |
|
|
135
|
+
| ----------------------------- | ------------------------------------------- |
|
|
136
|
+
| `useLists()` | `GET /acquisition/lists` |
|
|
137
|
+
| `useList(listId)` | `GET /acquisition/lists/:listId` |
|
|
138
|
+
| `useListsTelemetry()` | `GET /acquisition/lists/telemetry` |
|
|
139
|
+
| `useListProgress(listId)` | `GET /acquisition/lists/:listId/progress` |
|
|
140
|
+
| `useListExecutions(listId)` | `GET /acquisition/lists/:listId/executions` |
|
|
141
|
+
| `useCreateList()` | `POST /acquisition/lists` |
|
|
142
|
+
| `useUpdateList(listId)` | `PATCH /acquisition/lists/:listId` |
|
|
143
|
+
| `useUpdateListConfig(listId)` | `PATCH /acquisition/lists/:listId/config` |
|
|
144
|
+
| `useDeleteList()` | `DELETE /acquisition/lists/:listId` |
|
|
145
145
|
|
|
146
146
|
Lead Gen also sits on broader acquisition endpoints for companies and contacts:
|
|
147
147
|
|
|
@@ -247,16 +247,16 @@ Projects is the packaged delivery/project-management system. It has both a share
|
|
|
247
247
|
|
|
248
248
|
`@elevasis/ui/hooks/delivery` talks to the project-management API:
|
|
249
249
|
|
|
250
|
-
| Hook
|
|
251
|
-
|
|
|
252
|
-
| `useProjects()`
|
|
253
|
-
| `useProject(id)`
|
|
254
|
-
| `useTasks({ projectId })`
|
|
255
|
-
| `useMilestones({ projectId })`
|
|
256
|
-
| `useProjectNotes({ projectId })` | `GET /projects/:projectId/notes`
|
|
257
|
-
| `useCreateTask()`
|
|
258
|
-
| `useUpdateTask()`
|
|
259
|
-
| `useCreateNote()`
|
|
250
|
+
| Hook | HTTP path |
|
|
251
|
+
| -------------------------------- | ------------------------------------- |
|
|
252
|
+
| `useProjects()` | `GET /projects` |
|
|
253
|
+
| `useProject(id)` | `GET /projects/:id` |
|
|
254
|
+
| `useTasks({ projectId })` | `GET /projects/:projectId/tasks` |
|
|
255
|
+
| `useMilestones({ projectId })` | `GET /projects/:projectId/milestones` |
|
|
256
|
+
| `useProjectNotes({ projectId })` | `GET /projects/:projectId/notes` |
|
|
257
|
+
| `useCreateTask()` | `POST /project-tasks` |
|
|
258
|
+
| `useUpdateTask()` | `PATCH /project-tasks/:id` |
|
|
259
|
+
| `useCreateNote()` | `POST /project-notes` |
|
|
260
260
|
|
|
261
261
|
### CLI Surface
|
|
262
262
|
|
|
@@ -88,9 +88,8 @@ import { useState } from 'react'
|
|
|
88
88
|
import { Modal, Button, Text } from '@mantine/core'
|
|
89
89
|
import { ResourceExecuteForm } from '@elevasis/ui/features/operations'
|
|
90
90
|
import { useExecuteAsync } from '@elevasis/ui/hooks'
|
|
91
|
-
import type { SerializedExecutionFormSchema } from '@elevasis/ui/hooks'
|
|
92
91
|
|
|
93
|
-
const formSchema
|
|
92
|
+
const formSchema = {
|
|
94
93
|
fields: [
|
|
95
94
|
{ name: 'topic', label: 'Topic', type: 'text', required: true },
|
|
96
95
|
],
|
|
@@ -40,67 +40,47 @@ At the start of every session the agent runs these steps silently before respond
|
|
|
40
40
|
|
|
41
41
|
## Slash Commands
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Skills are Markdown instruction files in `.claude/skills/`. When you type `/skill-name` in a Claude Code session, the agent reads the corresponding `SKILL.md` and follows its instructions.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
The following skills are scaffolded by `elevasis-sdk init` and committed to version control so collaborators get the same experience:
|
|
46
46
|
|
|
47
|
-
|
|
|
48
|
-
| ----------- |
|
|
49
|
-
| `/
|
|
50
|
-
| `/
|
|
51
|
-
| `/
|
|
52
|
-
| `/
|
|
47
|
+
| Skill | File | Purpose |
|
|
48
|
+
| ----------- | -------------------------- | -------------------------------------------------------- |
|
|
49
|
+
| `/work` | `skills/work/SKILL.md` | Task tracking -- list, create, save, resume, complete |
|
|
50
|
+
| `/elevasis` | `skills/elevasis/SKILL.md` | SDK operations -- check, deploy, exec |
|
|
51
|
+
| `/deploy` | `skills/deploy/skill.md` | Full deploy pipeline (test, build, commit, push) |
|
|
52
|
+
| `/setup` | `skills/setup/SKILL.md` | First-time project setup (placeholder replacement, deps) |
|
|
53
|
+
| `/status` | `skills/status/SKILL.md` | Quick project health check |
|
|
54
|
+
| `/continue` | `skills/continue/SKILL.md` | Resume in-progress work from docs |
|
|
55
|
+
| `/project` | `skills/project/SKILL.md` | Client project management via elevasis-sdk |
|
|
56
|
+
| `/sync` | `skills/sync/SKILL.md` | Pull latest, wipe caches, fresh reinstall |
|
|
57
|
+
| `/explore` | `skills/explore/SKILL.md` | Codebase exploration anchored to docs |
|
|
58
|
+
| `/save` | `skills/save/SKILL.md` | Auto-manage docs from conversation context |
|
|
59
|
+
| `/dsp` | `skills/dsp/SKILL.md` | Parallel agent dispatch for implementation tasks |
|
|
53
60
|
|
|
54
|
-
|
|
61
|
+
### Key Skills
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
**`/setup`** -- First-time project setup. Replaces template placeholders, installs dependencies, configures `.env`, verifies the project, and optionally runs a first deploy.
|
|
57
64
|
|
|
58
|
-
|
|
65
|
+
**`/deploy`** -- Full deploy pipeline: type-check, validate resources, commit, deploy (auto-regenerates `docs/index.md` and `docs/resources.md`), verify platform, and optionally push.
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
- **`/meta`** (no arguments) -- Project health status. Shows current template version, SDK version, profile summary, a quick drift check, and last deployment status.
|
|
62
|
-
- **`/meta fix`** -- SDK upgrade check and drift repair. Step 0 offers to run `pnpm update @elevasis/sdk` and merge template changes. Steps 1-8 repair drift: missing managed files, gitignore entries, CLAUDE.md sections, memory structure, doc cross-references, settings, rules health, and project map freshness.
|
|
63
|
-
- **`/meta deploy`** -- Full 9-step deploy pipeline: validate, type-check, verify docs, commit, deploy (auto-regenerates `docs/project-map.mdx`), verify platform, update deployment state, and optionally push.
|
|
64
|
-
- **`/meta health`** -- Execution debugging and resource status; shows recent executions, analyzes failures, and checks environment connectivity.
|
|
67
|
+
**`/elevasis`** -- SDK operations entry point: `check` validates resource definitions, `deploy` bundles and uploads, `exec` runs a resource with input.
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
**`/work`** -- File-based task lifecycle. Creates, resumes, saves, and completes task docs in `docs/in-progress/`. Intent-driven: the agent detects what to do from context.
|
|
67
70
|
|
|
68
|
-
|
|
71
|
+
**`/status`** -- Quick project health check: shows SDK version, deployed resources, last deploy date, and environment status.
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
- **`/docs create [description]`** -- Interview-driven reference doc creation. If the doc is about a specific resource, the agent scans `src/` and pre-populates from code (config, schemas, step names, platform tools). Scaffolds sections appropriate to the doc type (resource guide, integration guide, architecture notes, process doc, or general reference).
|
|
72
|
-
- **`/docs verify [file?]`** -- Interactive standalone version of `/meta fix` step 5. Cross-references resource IDs, schema fields, and platform tools in docs against `src/`. Shows a summary, then guides fixes interactively. Can be scoped to a single file.
|
|
73
|
+
**`/save`** -- Auto-manages docs from conversation context: writes or updates docs based on what was discussed in the session.
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
**`/explore`** -- Codebase exploration anchored to `docs/`. Reads the doc map first, then drills into source as needed.
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
**`/continue`** -- Resumes in-progress work by reading `docs/in-progress/` and picking up where the last session left off.
|
|
77
78
|
|
|
78
|
-
|
|
79
|
+
**`/project`** -- Client project management: milestones, tasks, and notes via `elevasis-sdk project` commands.
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
- **Auto-create** -- When the user describes work that doesn't match an existing task, the agent creates a task doc automatically. If intent is clear, it skips the interview; if ambiguous, it asks 1-2 focused questions.
|
|
82
|
-
- **Auto-save** -- The agent saves progress silently when the conversation context is getting heavy, the user is wrapping up, or 2+ steps have been completed without saving. Updates progress markers, files modified, and resume context.
|
|
83
|
-
- **Auto-resume** -- When the user picks an existing task (by number, name, or keyword), the agent loads context and resumes automatically.
|
|
84
|
-
- **Suggest complete** -- When all plan steps are marked COMPLETE, the agent suggests finalizing: "All steps for '`{task}`' look done. Want me to finalize it?" It never auto-invokes completion. The complete flow validates readiness, cleans the doc (strips resume context, removes progress markers, targets 200-400 lines), determines destination in `docs/`, confirms with user, moves, and verifies.
|
|
81
|
+
**`/dsp`** -- Dispatches subagents in parallel for implementation tasks that can run concurrently.
|
|
85
82
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
docs/in-progress/
|
|
90
|
-
├── crm-integration/
|
|
91
|
-
│ ├── index.mdx # Main task doc
|
|
92
|
-
│ └── attio-schema.mdx # Supporting analysis
|
|
93
|
-
├── email-templates.mdx # Small standalone task
|
|
94
|
-
└── ui-dashboard/
|
|
95
|
-
├── index.mdx # Main task doc
|
|
96
|
-
└── component-list.mdx # Supporting analysis
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
The numbered list is derived from scanning this directory. `index.mdx` is treated as the primary task doc for a directory. On complete, destination in `docs/` is determined by scanning for related existing directories.
|
|
100
|
-
|
|
101
|
-
### `/tutorial` Command
|
|
102
|
-
|
|
103
|
-
The `/tutorial` command shows a track menu on every invocation and runs a progressive learning path adapted to the user's skill profile. Three tracks: Orchestration Concepts (7 lessons), Examples & Advanced Modules (9 standalone modules), and Meta-Framework (5 lessons). Two skill dimensions tracked: `automation` (none / low-code / custom) and `platformNavigation` (none / oriented / comfortable).
|
|
83
|
+
**`/sync`** -- Pulls latest changes, wipes all `node_modules` and caches, and runs a fresh reinstall.
|
|
104
84
|
|
|
105
85
|
## Developer Profile
|
|
106
86
|
|
|
@@ -138,14 +118,26 @@ The agent does not prompt for confirmation on minor updates. Major changes (leve
|
|
|
138
118
|
|
|
139
119
|
## Rules System
|
|
140
120
|
|
|
141
|
-
|
|
121
|
+
Ten rule files are scaffolded in `.claude/rules/`. Rule files are auto-injected by Claude Code when their path patterns match the current file being edited -- no manual loading needed.
|
|
122
|
+
|
|
123
|
+
Rules injected for operations source files (`operations/src/`):
|
|
124
|
+
|
|
125
|
+
- **`platform.md`** -- SDK adapter patterns, typed adapters, platform tool usage.
|
|
126
|
+
- **`error-handling.md`** -- Error types (`ExecutionError`, `PlatformToolError`), retry behavior.
|
|
127
|
+
- **`execution.md`** -- Worker thread model, timeouts, concurrency, org isolation.
|
|
128
|
+
- **`observability.md`** -- Logging with `context.logger`, step-level auto-logging, debugging.
|
|
129
|
+
- **`deployment.md`** -- Deploy commands, dev vs prod, version bumping, common errors.
|
|
130
|
+
|
|
131
|
+
Rules injected for docs files (`docs/`):
|
|
142
132
|
|
|
143
|
-
|
|
133
|
+
- **`docs.md`** -- Documentation structure, frontmatter conventions, auto-generated files.
|
|
134
|
+
- **`task-tracking.md`** -- Task doc conventions, injected for in-progress files.
|
|
144
135
|
|
|
145
|
-
|
|
146
|
-
- **`workspace-patterns.md`** (INIT_ONLY) -- Injected project-wide. Starts empty; grows via error promotion (3+ recurrences of the same error become a rule). Never overwritten by updates.
|
|
136
|
+
Additional contextual rules:
|
|
147
137
|
|
|
148
|
-
|
|
138
|
+
- **`frontend.md`** -- React/Mantine patterns, injected for UI source files.
|
|
139
|
+
- **`shared-types.md`** -- Cross-runtime type conventions, injected for foundations files.
|
|
140
|
+
- **`organization-os.md`** -- Organization model and feature shell conventions.
|
|
149
141
|
|
|
150
142
|
## Interaction Guidance
|
|
151
143
|
|
|
@@ -14,22 +14,25 @@ Running `elevasis-sdk init my-project` produces the following agent infrastructu
|
|
|
14
14
|
|
|
15
15
|
```
|
|
16
16
|
.claude/
|
|
17
|
-
├── settings.json #
|
|
18
|
-
├── commands/
|
|
19
|
-
│ ├── meta.md # Project lifecycle (init, fix, deploy, health)
|
|
20
|
-
│ ├── docs.md # Browse, create, and verify permanent docs
|
|
21
|
-
│ ├── tutorial.md # Progressive learning path (3 tracks)
|
|
22
|
-
│ └── work.md # Task tracking
|
|
17
|
+
├── settings.json # Hook registrations (PostToolUse, PostToolUseFailure)
|
|
23
18
|
├── hooks/
|
|
24
|
-
│
|
|
19
|
+
│ ├── post-edit-validate.mjs # Formatting/type-check hook (after Write/Edit/MultiEdit)
|
|
20
|
+
│ └── tool-failure-recovery.mjs # Error recovery hook (after Bash failures)
|
|
25
21
|
├── skills/
|
|
26
|
-
│
|
|
22
|
+
│ ├── work/SKILL.md # Task tracking across sessions
|
|
23
|
+
│ ├── elevasis/SKILL.md # SDK operations (check, deploy, exec)
|
|
24
|
+
│ ├── deploy/skill.md # Deploy pipeline
|
|
25
|
+
│ ├── setup/SKILL.md # First-time project setup
|
|
26
|
+
│ ├── status/SKILL.md # Project health check
|
|
27
|
+
│ └── ... # Additional skills (dsp, continue, project, sync, explore, save)
|
|
28
|
+
├── scripts/
|
|
29
|
+
│ └── statusline-command.js # Status line command
|
|
27
30
|
└── rules/
|
|
28
31
|
├── sdk-patterns.md # SDK patterns (auto-loaded for src/ files)
|
|
29
32
|
├── docs-authoring.md # MDX conventions (auto-loaded for docs/ files)
|
|
30
|
-
├── memory-conventions.md # Memory conventions (auto-loaded)
|
|
31
|
-
├── project-map.md # Project map conventions (auto-loaded)
|
|
32
33
|
├── task-tracking.md # Task tracking conventions (auto-loaded)
|
|
34
|
+
├── platform.md # Platform tool patterns
|
|
35
|
+
├── error-handling.md # Error handling patterns
|
|
33
36
|
└── workspace-patterns.md # Project-specific patterns (grows over time)
|
|
34
37
|
```
|
|
35
38
|
|
|
@@ -12,35 +12,30 @@ The current full-stack scaffold uses a workspace layout with `ui/`, `operations/
|
|
|
12
12
|
|
|
13
13
|
## Source Files
|
|
14
14
|
|
|
15
|
-
### `src/index.ts`
|
|
15
|
+
### `operations/src/index.ts`
|
|
16
16
|
|
|
17
17
|
The registry entry point for your workspace. This file aggregates resources from domain barrel files and re-exports them as a `DeploymentSpec` default export. It does not contain workflow logic itself -- its sole job is aggregation:
|
|
18
18
|
|
|
19
19
|
```ts
|
|
20
20
|
import type { DeploymentSpec } from '@elevasis/sdk'
|
|
21
|
-
import * as operations from './operations/index.js'
|
|
22
21
|
import * as example from './example/index.js'
|
|
22
|
+
import * as emailNotification from './email-notification/exports.js'
|
|
23
23
|
|
|
24
24
|
const org: DeploymentSpec = {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
],
|
|
29
|
-
agents: [
|
|
30
|
-
...operations.agents,
|
|
31
|
-
...example.agents,
|
|
32
|
-
],
|
|
25
|
+
version: '0.1.0',
|
|
26
|
+
workflows: [...example.workflows, ...emailNotification.workflows],
|
|
27
|
+
agents: [...example.agents, ...emailNotification.agents]
|
|
33
28
|
}
|
|
34
29
|
export default org
|
|
35
30
|
```
|
|
36
31
|
|
|
37
|
-
Each domain directory exports `workflows` and `agents` arrays via an `index.ts` barrel. When you add a new domain, import it here and spread its arrays.
|
|
32
|
+
Each domain directory exports `workflows` and `agents` arrays via an `index.ts` barrel. When you add a new domain, import it here and spread its arrays.
|
|
38
33
|
|
|
39
|
-
### `src/
|
|
34
|
+
### `operations/src/email-notification/index.ts`
|
|
40
35
|
|
|
41
|
-
A multi-step workflow demonstrating real platform API usage.
|
|
36
|
+
A multi-step workflow demonstrating real platform API usage. Sends an email notification using the `notifications` adapter and chains steps with `StepType.LINEAR`. Shows the pattern for workflows that use platform tool adapters and pass data between steps.
|
|
42
37
|
|
|
43
|
-
### `src/example/echo.ts`
|
|
38
|
+
### `operations/src/example/echo.ts`
|
|
44
39
|
|
|
45
40
|
The starter workflow, scaffolded to demonstrate the per-file pattern: one workflow per file with its own Zod input/output schemas, config object, contract, and step handler. Replace this domain with your own when you're ready.
|
|
46
41
|
|
|
@@ -48,9 +43,9 @@ The starter workflow, scaffolded to demonstrate the per-file pattern: one workfl
|
|
|
48
43
|
|
|
49
44
|
Cross-runtime types, schemas, constants, and organization-model configuration shared between the UI and operations packages. Put contracts here when both runtimes need the same validation or labels without depending on app-specific code.
|
|
50
45
|
|
|
51
|
-
### `elevasis.config.ts`
|
|
46
|
+
### `operations/elevasis.config.ts`
|
|
52
47
|
|
|
53
|
-
Project-level configuration. The scaffolded file includes commented-out options (`defaultStatus`, `dev.port`)
|
|
48
|
+
Project-level configuration. The scaffolded file includes commented-out options (`defaultStatus`, `dev.port`) and sets `docsDir` to point at the workspace-level `docs/` directory:
|
|
54
49
|
|
|
55
50
|
```ts
|
|
56
51
|
import type { ElevasConfig } from '@elevasis/sdk'
|
|
@@ -58,10 +53,12 @@ import type { ElevasConfig } from '@elevasis/sdk'
|
|
|
58
53
|
export default {
|
|
59
54
|
// defaultStatus: 'dev', // Default status for new resources ('dev' | 'prod')
|
|
60
55
|
// dev: { port: 5170 }, // Local API port (internal development only)
|
|
56
|
+
|
|
57
|
+
docsDir: '../docs' // Scan the template's top-level docs/ directory
|
|
61
58
|
} satisfies ElevasConfig
|
|
62
59
|
```
|
|
63
60
|
|
|
64
|
-
|
|
61
|
+
The `docsDir` option (relative to CWD) overrides where the CLI scans for documentation files. Use `false` to disable documentation scanning entirely.
|
|
65
62
|
|
|
66
63
|
---
|
|
67
64
|
|
|
@@ -105,26 +102,26 @@ This directory is NOT deployed -- it is filtered out during the doc scan in `ele
|
|
|
105
102
|
|
|
106
103
|
## Progressive Disclosure Directories
|
|
107
104
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
| Directory
|
|
111
|
-
|
|
|
112
|
-
| `src/
|
|
113
|
-
| `src/
|
|
114
|
-
| `foundations/`
|
|
115
|
-
| `
|
|
116
|
-
| `docs
|
|
117
|
-
| `docs/
|
|
118
|
-
| `docs/
|
|
119
|
-
| `data/`
|
|
120
|
-
| `scripts/`
|
|
121
|
-
| `src/lib/`
|
|
105
|
+
The following directories are included in the scaffold:
|
|
106
|
+
|
|
107
|
+
| Directory | Created by | When |
|
|
108
|
+
| ------------------------------------ | --------------- | ------------------------------------------------------------------ |
|
|
109
|
+
| `operations/src/example/` | Scaffold | Always -- echo starter workflow lives here (replace with your own) |
|
|
110
|
+
| `operations/src/email-notification/` | Scaffold | Always -- multi-step notification workflow example |
|
|
111
|
+
| `foundations/` | Scaffold | Always -- cross-runtime contracts, schemas, and organization model |
|
|
112
|
+
| `ui/` | Scaffold | Always -- React frontend application |
|
|
113
|
+
| `docs/` | Scaffold | Always |
|
|
114
|
+
| `docs/in-progress/` | Agent | When you create a task doc for in-progress work |
|
|
115
|
+
| `docs/resources.md` | `/deploy` skill | Auto-generated on every deploy |
|
|
116
|
+
| `data/` | Agent | When you connect a database |
|
|
117
|
+
| `scripts/` | Agent | When you need local scripts not deployed to the platform |
|
|
118
|
+
| `operations/src/lib/` | Agent | When shared code exists between two or more workflows |
|
|
122
119
|
|
|
123
120
|
This structure keeps the initial workspace minimal and adds directories only when they earn their place.
|
|
124
121
|
|
|
125
|
-
### `src/lib/`
|
|
122
|
+
### `operations/src/lib/`
|
|
126
123
|
|
|
127
|
-
|
|
124
|
+
Shared code directory for utilities used by multiple workflows within the operations package. In the current workspace scaffold, prefer the top-level `foundations/` package for cross-runtime contracts. Included in the esbuild bundle alongside workflow code.
|
|
128
125
|
|
|
129
126
|
### `data/`
|
|
130
127
|
|
|
@@ -140,14 +137,15 @@ Local utility scripts for tasks that do not run on the platform: database seeds,
|
|
|
140
137
|
|
|
141
138
|
`elevasis-sdk deploy` touches only two directories:
|
|
142
139
|
|
|
143
|
-
| Directory | Action
|
|
144
|
-
| ------------------- |
|
|
145
|
-
| `src/`
|
|
146
|
-
| `docs/` | Scan `.mdx` files, upload as documentation
|
|
147
|
-
| `docs/in-progress/` | Ignored -- work-in-progress, not deployed
|
|
148
|
-
| `data/` | Ignored -- local documentation for the agent
|
|
149
|
-
| `scripts/` | Ignored -- local scripts, not deployed
|
|
150
|
-
| `.claude/` | Ignored -- local development only
|
|
140
|
+
| Directory | Action | Deployed? |
|
|
141
|
+
| ------------------- | ------------------------------------------------------------------------------------ | --------- |
|
|
142
|
+
| `operations/src/` | Bundle into `dist/bundle.js` via esbuild (includes `operations/src/lib/` if present) | Yes |
|
|
143
|
+
| `docs/` | Scan `.md` and `.mdx` files, upload as documentation | Yes |
|
|
144
|
+
| `docs/in-progress/` | Ignored -- work-in-progress, not deployed | No |
|
|
145
|
+
| `data/` | Ignored -- local documentation for the agent | No |
|
|
146
|
+
| `scripts/` | Ignored -- local scripts, not deployed | No |
|
|
147
|
+
| `.claude/` | Ignored -- local development only | No |
|
|
148
|
+
| `ui/` | Ignored -- frontend application, deployed separately | No |
|
|
151
149
|
|
|
152
150
|
---
|
|
153
151
|
|
|
@@ -196,7 +194,7 @@ Do not remove or heavily edit `CLAUDE.md`. It is the primary context source that
|
|
|
196
194
|
|
|
197
195
|
### `.claude/settings.json`
|
|
198
196
|
|
|
199
|
-
Configures Claude Code for the workspace:
|
|
197
|
+
Configures Claude Code for the workspace: registers a PostToolUse formatting/type-check hook (runs after Write, Edit, and MultiEdit) and a PostToolUseFailure error recovery hook (runs after Bash failures).
|
|
200
198
|
|
|
201
199
|
### `.claude/memory/`
|
|
202
200
|
|
|
@@ -221,12 +219,19 @@ This directory is gitignored -- it is personal to you and not shared with collab
|
|
|
221
219
|
|
|
222
220
|
## Slash Commands
|
|
223
221
|
|
|
224
|
-
The `.claude/
|
|
222
|
+
The `.claude/skills/` directory contains skills covering the core development loop:
|
|
225
223
|
|
|
226
|
-
- **`/
|
|
227
|
-
- **`/
|
|
224
|
+
- **`/setup`** -- First-time project setup: placeholder replacement, deps, verification
|
|
225
|
+
- **`/deploy`** -- Full deploy pipeline: test, build, commit, push
|
|
226
|
+
- **`/elevasis`** -- SDK operations: check, deploy, exec
|
|
228
227
|
- **`/work`** -- Task tracking across sessions: auto-detects intent (create, save, resume); suggests complete
|
|
229
|
-
- **`/
|
|
228
|
+
- **`/status`** -- Quick project health check
|
|
229
|
+
- **`/save`** -- Auto-manage docs from conversation context
|
|
230
|
+
- **`/explore`** -- Codebase exploration anchored to docs
|
|
231
|
+
- **`/continue`** -- Resume in-progress work from docs
|
|
232
|
+
- **`/project`** -- Client project management via elevasis-sdk
|
|
233
|
+
- **`/dsp`** -- Parallel agent dispatch for implementation tasks
|
|
234
|
+
- **`/sync`** -- Pull latest, wipe caches, fresh reinstall
|
|
230
235
|
|
|
231
236
|
For detailed command documentation, see [Agent System](agent).
|
|
232
237
|
|
|
@@ -238,40 +243,35 @@ Not all scaffolded files participate in template updates. Files fall into two ca
|
|
|
238
243
|
|
|
239
244
|
**SCAFFOLD_FILES total: 32**
|
|
240
245
|
|
|
241
|
-
**INIT_ONLY**
|
|
246
|
+
**INIT_ONLY** -- Written once during initial scaffold, never overwritten by updates:
|
|
242
247
|
|
|
243
248
|
- `package.json`, `pnpm-workspace.yaml`, `tsconfig.json`
|
|
244
249
|
- `.env`, `.npmrc`
|
|
245
|
-
- `src/index.ts`, `src/
|
|
250
|
+
- `operations/src/index.ts`, `operations/src/email-notification/index.ts`, `operations/src/email-notification/exports.ts`, `operations/src/example/echo.ts`, `operations/src/example/index.ts`, `foundations/`
|
|
246
251
|
- `docs/index.md`, `docs/in-progress/.gitkeep`
|
|
247
|
-
- `.claude/rules/workspace-patterns.md`
|
|
248
252
|
|
|
249
|
-
**MANAGED**
|
|
253
|
+
**MANAGED** -- Written during initial scaffold and updated when the template evolves:
|
|
250
254
|
|
|
251
|
-
- `elevasis.config.ts`, `.gitignore`, `CLAUDE.md`, `.claude/settings.json`
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
-
|
|
255
|
-
- Five rule files: `.claude/rules/sdk-patterns.md`, `.claude/rules/docs-authoring.md`, `.claude/rules/memory-conventions.md`, `.claude/rules/project-map.md`, `.claude/rules/task-tracking.md`
|
|
255
|
+
- `operations/elevasis.config.ts`, `.gitignore`, `CLAUDE.md`, `.claude/settings.json`
|
|
256
|
+
- Two hooks: `.claude/hooks/post-edit-validate.mjs`, `.claude/hooks/tool-failure-recovery.mjs`
|
|
257
|
+
- Skills: `.claude/skills/work/SKILL.md`, `.claude/skills/elevasis/SKILL.md`, `.claude/skills/deploy/skill.md`, `.claude/skills/setup/SKILL.md`
|
|
258
|
+
- Rule files: `.claude/rules/task-tracking.md`, `.claude/rules/platform.md`, `.claude/rules/error-handling.md`, `.claude/rules/docs.md`, `.claude/rules/execution.md`, `.claude/rules/observability.md`
|
|
256
259
|
- One script: `.claude/scripts/statusline-command.js`
|
|
257
260
|
|
|
258
|
-
Run `elevasis-sdk update` after installing a new SDK version to bring managed files up to date. The command adds missing files directly and flags files that differ from the new template for agent-assisted review via `/meta fix`.
|
|
259
|
-
|
|
260
261
|
---
|
|
261
262
|
|
|
262
263
|
## File Reference
|
|
263
264
|
|
|
264
|
-
| File
|
|
265
|
-
|
|
|
266
|
-
| `src/index.ts`
|
|
267
|
-
| `src/<domain>/*.ts`
|
|
268
|
-
| `docs/index.md`
|
|
269
|
-
| `docs/
|
|
270
|
-
| `
|
|
271
|
-
| `
|
|
272
|
-
|
|
|
273
|
-
|
|
|
274
|
-
| `.claude/commands/*.md` | Rarely -- commands work well as scaffolded |
|
|
265
|
+
| File | When You Edit It |
|
|
266
|
+
| ------------------------------- | ------------------------------------------------------------------- |
|
|
267
|
+
| `operations/src/index.ts` | Adding or removing resources |
|
|
268
|
+
| `operations/src/<domain>/*.ts` | Writing and modifying workflow logic (organized by business domain) |
|
|
269
|
+
| `docs/index.md` | Updating project documentation |
|
|
270
|
+
| `docs/resources.md` | Never -- auto-generated by `/deploy` and `/elevasis deploy` |
|
|
271
|
+
| `operations/elevasis.config.ts` | Changing project-level settings |
|
|
272
|
+
| `.env` | Adding environment variables |
|
|
273
|
+
| `CLAUDE.md` | Rarely -- only to add project-specific context |
|
|
274
|
+
| `.claude/skills/*/SKILL.md` | Rarely -- skills work well as scaffolded |
|
|
275
275
|
|
|
276
276
|
---
|
|
277
277
|
|
|
@@ -6,26 +6,33 @@ This package is the source of truth for shared types, schemas, and contract help
|
|
|
6
6
|
|
|
7
7
|
## Import Rules
|
|
8
8
|
|
|
9
|
-
- Use `@elevasis/core` for browser-safe shared types and schemas.
|
|
10
|
-
- Use `@elevasis/core/
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- Use `@elevasis/core` (root export) for browser-safe shared types and schemas.
|
|
10
|
+
- Use `@elevasis/core/organization-model` for the semantic contract layer.
|
|
11
|
+
- These are the only two subpaths available to external consumers of the published npm package.
|
|
12
|
+
- Paths like `@elevasis/core/server`, `@elevasis/core/test-utils`, `@elevasis/core/platform`, etc. are internal monorepo paths (`@repo/core/...`) and are NOT available to external consumers.
|
|
13
13
|
|
|
14
14
|
## Published Surface Groups
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- `
|
|
19
|
-
- `
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- `
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `
|
|
28
|
-
- `
|
|
16
|
+
The published `@elevasis/core` npm package exposes exactly two subpaths:
|
|
17
|
+
|
|
18
|
+
- `.` (`@elevasis/core`) - browser-safe shared types, schemas, and constants.
|
|
19
|
+
- `./organization-model` (`@elevasis/core/organization-model`) - the semantic contract layer for CRM, lead gen, delivery, features, branding, and navigation.
|
|
20
|
+
|
|
21
|
+
Within the monorepo, the internal `@repo/core` package exposes additional subpaths for use by `apps/` and other packages:
|
|
22
|
+
|
|
23
|
+
- `@repo/core/server` - Node.js-only helpers and services.
|
|
24
|
+
- `@repo/core/platform` - shared constants, utilities, registry, SSE, and API types.
|
|
25
|
+
- `@repo/core/auth` - multi-tenancy types for organizations, users, memberships, invitations, and credentials.
|
|
26
|
+
- `@repo/core/execution` - workflow, agent, scheduler, calibration, and execution-interface contracts.
|
|
27
|
+
- `@repo/core/commands` - command queue types and schemas.
|
|
28
|
+
- `@repo/core/operations` - sessions, notifications, observability, activities, triggers, and debug logs.
|
|
29
|
+
- `@repo/core/supabase` - generated database types and helpers.
|
|
30
|
+
- `@repo/core/integrations/...` - OAuth and credential contracts.
|
|
31
|
+
- `@repo/core/projects/api-schemas` - project management request and response schemas.
|
|
32
|
+
- `@repo/core/content` - published content metadata types.
|
|
33
|
+
- `@repo/core/test-utils` - test fixtures and mocks (internal use only).
|
|
34
|
+
|
|
35
|
+
These `@repo/core/*` subpaths are NOT available in the published `@elevasis/core` package.
|
|
29
36
|
|
|
30
37
|
## When To Read Deeper
|
|
31
38
|
|
|
@@ -4,6 +4,8 @@ The provider surface composes the shared Elevasis service, feature, appearance,
|
|
|
4
4
|
|
|
5
5
|
## Exports
|
|
6
6
|
|
|
7
|
+
The following are exported from `published.ts`, which is the external consumer surface for `@elevasis/ui/provider`:
|
|
8
|
+
|
|
7
9
|
- `ElevasisCoreProvider`
|
|
8
10
|
- `ElevasisFeaturesProvider`
|
|
9
11
|
- `useElevasisFeatures`
|
|
@@ -15,17 +17,16 @@ The provider surface composes the shared Elevasis service, feature, appearance,
|
|
|
15
17
|
- `useElevasisServices`
|
|
16
18
|
- `NotificationProvider`
|
|
17
19
|
- `useNotificationAdapter`
|
|
18
|
-
- `ElevasisUIProvider`
|
|
19
20
|
- Related provider and service types
|
|
20
21
|
|
|
22
|
+
Note: `ElevasisUIProvider` (the Mantine-facing visual layer) is available internally via `@repo/ui` but is NOT exported from the published `@elevasis/ui/provider` subpath. It is only available via the internal `./provider/ui` monorepo subpath.
|
|
23
|
+
|
|
21
24
|
## Related Published Subpaths
|
|
22
25
|
|
|
23
|
-
- `./provider`
|
|
24
|
-
- `./provider/ui`
|
|
25
|
-
- `./provider/ElevasisServiceContext`
|
|
26
|
+
- `./provider` - headless providers (points to `published.ts`; no Mantine dependency)
|
|
27
|
+
- `./provider/ui` - full provider including Mantine-dependent `ElevasisUIProvider` (internal monorepo use; also published for consumers that opt in)
|
|
26
28
|
|
|
27
29
|
## Notes
|
|
28
30
|
|
|
29
|
-
- `published.ts` is the external consumer surface
|
|
30
|
-
- `ElevasisUIProvider` is
|
|
31
|
-
|
|
31
|
+
- `published.ts` is the external consumer surface for `@elevasis/ui/provider`.
|
|
32
|
+
- `ElevasisUIProvider` is Mantine-dependent and available only via `@repo/ui` internally or `@elevasis/ui/provider/ui`; it is not included in the headless `./provider` published export.
|
package/reference/roadmap.mdx
CHANGED
|
@@ -44,7 +44,7 @@ Retries are platform-side only -- workers are ephemeral and never retry internal
|
|
|
44
44
|
|
|
45
45
|
## Workflow Step Failure
|
|
46
46
|
|
|
47
|
-
**Status: Planned.** The current runtime uses fail-fast behavior
|
|
47
|
+
**Status: Planned.** The current runtime uses fail-fast behavior: when a step handler throws, the worker logs a `step-failed` context entry and re-throws the original error unchanged. The `onError` callback, `completedSteps`, and `partialOutput` features described below are not yet implemented.
|
|
48
48
|
|
|
49
49
|
Default behavior is fail-fast: when a step throws, the workflow fails immediately.
|
|
50
50
|
|
|
@@ -71,11 +71,13 @@ Default behavior is fail-fast: when a step throws, the workflow fails immediatel
|
|
|
71
71
|
|
|
72
72
|
## Agent Failure Modes
|
|
73
73
|
|
|
74
|
-
**Status:
|
|
74
|
+
**Status: Planned.** Agent execution runs in ephemeral worker threads with full tool calling support via `PostMessageLLMAdapter`. The current runtime uses fail-fast behavior for all agent error paths; the richer failure handling described below is not yet implemented.
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
**Current behavior:** Any unhandled error from the agent (including `AgentMaxIterationsError` thrown by `@repo/core` when the iteration limit is reached) propagates out of the worker and is reported as a failed execution. The worker sends: `{ type: 'result', status: 'failed', error: 'ErrorName: message', logs, metrics: { durationMs } }`. There is no graceful termination, partial output, or retry logic in the worker itself.
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
**Planned improvements:**
|
|
79
|
+
|
|
80
|
+
- **Max iterations reached:** Instead of throwing, the agent returns the best output produced so far, plus a warning flag (`maxIterationsReached: true`). This becomes a graceful termination rather than a failure.
|
|
79
81
|
- **Tool crash:** Tool errors are caught by the SDK runtime, formatted as a tool result, and sent back to the LLM. The LLM decides whether to retry, try a different approach, or give up.
|
|
80
82
|
- **Model refusal:** If the model refuses the prompt, the SDK retries once with an adjusted system prompt. If the retry also refuses, the agent fails with `code: 'MODEL_REFUSAL'`.
|
|
81
83
|
- **Model API error:** Network errors, rate limits, or server errors from the model provider. The SDK retries with exponential backoff (3 attempts, 1s/2s/4s), then fails with `code: 'MODEL_ERROR'`.
|
|
@@ -37,6 +37,8 @@ This scaffold reference contains universal documentation that applies to all Ele
|
|
|
37
37
|
### Operations
|
|
38
38
|
|
|
39
39
|
- [Workflow Recipes](./operations/workflow-recipes.md) -- workflow anatomy, adapter patterns, trigger patterns
|
|
40
|
+
- [Propagation Pipeline](./operations/propagation-pipeline.md) -- three-layer sync pipeline, verification checks, integration points
|
|
41
|
+
- [Scaffold Maintenance](./operations/scaffold-maintenance.md) -- content placement, auto-generation, adding new scaffold docs
|
|
40
42
|
|
|
41
43
|
### Reference
|
|
42
44
|
|
|
@@ -48,12 +50,14 @@ This scaffold reference contains universal documentation that applies to all Ele
|
|
|
48
50
|
|
|
49
51
|
Content is co-located with its owning package and copied here during SDK build:
|
|
50
52
|
|
|
51
|
-
| Bundle Path
|
|
52
|
-
|
|
|
53
|
-
| `scaffold/recipes/`
|
|
54
|
-
| `scaffold/operations/`
|
|
55
|
-
| `scaffold/
|
|
56
|
-
| `scaffold/
|
|
57
|
-
| `scaffold/
|
|
58
|
-
| `scaffold/
|
|
59
|
-
| `scaffold/reference/
|
|
53
|
+
| Bundle Path | Source Location | Owner |
|
|
54
|
+
| --------------------------------------------- | --------------------------------------------------------- | --------------- |
|
|
55
|
+
| `scaffold/recipes/` | `packages/sdk/docs/scaffold/recipes/` | SDK |
|
|
56
|
+
| `scaffold/operations/` | `packages/sdk/docs/scaffold/operations/` | SDK |
|
|
57
|
+
| `scaffold/operations/propagation-pipeline.md` | `packages/sdk/docs/scaffold/operations/` | SDK |
|
|
58
|
+
| `scaffold/operations/scaffold-maintenance.md` | `packages/sdk/docs/scaffold/operations/` | SDK |
|
|
59
|
+
| `scaffold/ui/` | `packages/ui/src/scaffold/` | UI |
|
|
60
|
+
| `scaffold/core/` | `packages/core/src/organization-model/` | Core |
|
|
61
|
+
| `scaffold/reference/glossary.md` | `packages/core/src/reference/glossary.md` | Core |
|
|
62
|
+
| `scaffold/reference/contracts.md` | `packages/core/src/reference/_generated/contracts.md` | Core (auto-gen) |
|
|
63
|
+
| `scaffold/reference/feature-registry.md` | `packages/ui/src/scaffold/_generated/feature-registry.md` | UI (auto-gen) |
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Propagation Pipeline
|
|
3
|
+
description: Three-layer pipeline that keeps Organization OS artifacts current across the monorepo and all template-derived external projects -- source generation, template sync, and verification.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Propagation Pipeline
|
|
7
|
+
|
|
8
|
+
`🟢 Stable` -- These pipelines run automatically. Understand them when debugging sync issues or extending the scaffold.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Architecture
|
|
13
|
+
|
|
14
|
+
The Organization OS propagation pipeline has three layers. Each has its own scripts, triggers, and failure modes.
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Layer 1: Source Generation (pnpm scaffold:sync)
|
|
18
|
+
Regenerates derived docs from TypeScript types and manifests
|
|
19
|
+
↓
|
|
20
|
+
Layer 2: Template Sync (/external sync)
|
|
21
|
+
Propagates template to downstream external projects
|
|
22
|
+
↓
|
|
23
|
+
Layer 3: Sync Verification (pnpm sync:verify)
|
|
24
|
+
Asserts correctness across all template-derived projects
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Layer 1: Source Generation
|
|
30
|
+
|
|
31
|
+
`pnpm scaffold:sync` is the meta-script that regenerates all derived documentation and validates the output. It chains three sub-scripts:
|
|
32
|
+
|
|
33
|
+
| Script | Input | Output |
|
|
34
|
+
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
35
|
+
| `generate-scaffold-contracts.js` | `packages/core/src/organization-model/types.ts`, `packages/ui/src/features/registry/types.ts`, `packages/core/src/platform/registry/types.ts` | `packages/core/src/reference/_generated/contracts.md` |
|
|
36
|
+
| `generate-scaffold-feature-registry.js` | `packages/ui/src/features/*/manifest.ts`, `packages/core/src/organization-model/domains/features.ts` | `packages/ui/src/scaffold/_generated/feature-registry.md` |
|
|
37
|
+
| `generate-reference-artifacts.js` | SDK manifest, navigation sources | `packages/sdk/reference/_reference-manifest.json`, `_navigation.md`, `external/_template/docs/platform-navigation-map.md` |
|
|
38
|
+
|
|
39
|
+
After generation, `validate-reference-artifacts.js` checks that the outputs are consistent. Exit 1 if drifted.
|
|
40
|
+
|
|
41
|
+
### Trigger Points
|
|
42
|
+
|
|
43
|
+
- **`/external sync` Phase 0 (Scaffold Sync Preflight):** Runs before any writes. Generated file changes fold into the sync scope so they propagate naturally to `_template` and downstream projects.
|
|
44
|
+
- **`/sdk release` Step 1 (Shared Reference Preflight):** Runs before publish. Generated changes must be committed; validator failure is a hard blocker.
|
|
45
|
+
- **Manual:** `pnpm scaffold:sync` is idempotent and safe to run anytime.
|
|
46
|
+
- **Opt-out:** `--skip-scaffold-sync` on `/external sync` (rare).
|
|
47
|
+
|
|
48
|
+
### Design: Regenerate-on-Propagation
|
|
49
|
+
|
|
50
|
+
Drift is healed at the moment it would otherwise leak downstream. This is cheaper and more reliable than CI-only checks. The single meta-script gives one command to reason about, while the chained sub-scripts remain individually callable for debugging.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Layer 2: Template Sync
|
|
55
|
+
|
|
56
|
+
`/external sync` propagates the `external/_template` to downstream projects. It uses a three-tier model:
|
|
57
|
+
|
|
58
|
+
| Tier | Policy | Examples |
|
|
59
|
+
| ------------------------------ | ----------------------------------------- | ------------------------------------------------------------------- |
|
|
60
|
+
| **Tier 1 (Infrastructure)** | Always replaced from template | Configs, `shared/`, `lib/`, `test-utils/`, `.claude/`, entry points |
|
|
61
|
+
| **Tier 2 (Standard Features)** | Synced unless project has customized them | Standard UI features, common patterns |
|
|
62
|
+
| **Tier 3 (Project-Specific)** | Never touched | `nav-items.ts`, `operations/src/`, `docs/`, `CLAUDE.md` |
|
|
63
|
+
|
|
64
|
+
The sync skill doc (`.claude/skills/external/SKILL.md`) defines the full tier model and phase sequence.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Layer 3: Sync Verification
|
|
69
|
+
|
|
70
|
+
`pnpm sync:verify` runs 86+ automated checks to assert propagation correctness. The script lives at `scripts/external/verify-sync.js`.
|
|
71
|
+
|
|
72
|
+
### Per-Project Checks (auto-discovered)
|
|
73
|
+
|
|
74
|
+
| Category | What It Checks |
|
|
75
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
76
|
+
| `deps` | `@elevasis/ui`, `@elevasis/sdk`, `@elevasis/core` versions match template |
|
|
77
|
+
| `tier1` | 9 config files match template (with placeholder resolution for project slug/name) |
|
|
78
|
+
| `org-os` | Organization model exists, exports canonical symbols, imports from `@elevasis/core/organization-model`, calls `defineOrganizationModel` + `resolveOrganizationModel`, app-config references org model, `__root.tsx` uses `ElevasisFeaturesProvider` + `canonicalOrganizationModel`, `main.tsx` uses `ElevasisUIProvider`, all 3 CSS subpath imports present |
|
|
79
|
+
| `placeholders` | No unresolved `__PROJECT_SLUG__`, `__PROJECT_NAME__`, `__PROJECT_DESCRIPTION__` in key config files |
|
|
80
|
+
| `scripts` | `ui` and `operations` `package.json` have required npm scripts |
|
|
81
|
+
| `claude` | `.claude/skills/`, `hooks/`, `rules/` exist; `settings.json` is valid JSON |
|
|
82
|
+
| `shared` | `ui/src/shared/`, `lib/`, `test-utils/` exist with minimum file counts |
|
|
83
|
+
| `tier3` | `nav-items.ts` has project-specific customization (not overwritten by template) |
|
|
84
|
+
| `conflicts` | No merge conflict markers in source files |
|
|
85
|
+
| `git` | Working tree is clean |
|
|
86
|
+
| `lockfile` | `pnpm-lock.yaml` and `node_modules` exist |
|
|
87
|
+
|
|
88
|
+
### Monorepo-Level Checks
|
|
89
|
+
|
|
90
|
+
| Category | What It Checks |
|
|
91
|
+
| ----------- | ----------------------------------------------- |
|
|
92
|
+
| `scaffold` | `pnpm scaffold:sync` passes (artifacts current) |
|
|
93
|
+
| `artifacts` | 5 generated artifacts exist and have content |
|
|
94
|
+
|
|
95
|
+
### Usage
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm sync:verify # Post-sync assertion (exit 1 on failures)
|
|
99
|
+
pnpm sync:verify --pre # Pre-sync drift report (always exit 0)
|
|
100
|
+
pnpm sync:verify -- ZentaraHQ # Single project
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Integration Points
|
|
104
|
+
|
|
105
|
+
- **`/external sync` Phase 0:** Runs `pnpm sync:verify --pre` to show drift before writes
|
|
106
|
+
- **`/external sync` Phase 5/7:** Runs `pnpm sync:verify` to assert correctness after sync
|
|
107
|
+
- **Vitest suite:** Tests at `scripts/external/__tests__/verify-sync.test.js` (project: `scripts-external`)
|
|
108
|
+
|
|
109
|
+
### Known Acceptable Drifts
|
|
110
|
+
|
|
111
|
+
Some failures are expected and intentional:
|
|
112
|
+
|
|
113
|
+
- **`style.css` in nirvana-marketing:** Project-specific sidebar logo rounding customization
|
|
114
|
+
- **`.gitignore` in ZentaraHQ:** Minor project-specific additions
|
|
115
|
+
- **SDK patch versions:** Template may bump to a patch ahead of downstream projects between syncs
|
|
116
|
+
|
|
117
|
+
These do not indicate sync failures.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Remaining Gaps (Future Work)
|
|
122
|
+
|
|
123
|
+
| Gap | Priority |
|
|
124
|
+
| ------------------------------------------------------------------------- | -------- |
|
|
125
|
+
| Feature manifest validation (all manifests imported in `__root.tsx`) | Medium |
|
|
126
|
+
| TypeScript verification (`check-types` per project) | Medium |
|
|
127
|
+
| Template docs surface validation (`docs/index.md`, `agent-start-here.md`) | Medium |
|
|
128
|
+
| Environment variable template validation (`.env.example` completeness) | Low |
|
|
129
|
+
| CI drift check (fail if worktree dirty after `scaffold:sync`) | Low |
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Scaffold Maintenance
|
|
3
|
+
description: How scaffold documentation is organized, generated, and bundled into the SDK -- content placement map, auto-generation pipeline, and instructions for adding new scaffold docs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Scaffold Maintenance
|
|
7
|
+
|
|
8
|
+
`🟢 Stable` -- Use this when adding or modifying scaffold documentation.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Content Placement Model
|
|
13
|
+
|
|
14
|
+
Scaffold docs are co-located with their owning package and copied into the SDK reference at build time. This makes each package owner responsible for their docs and avoids a single monolithic directory.
|
|
15
|
+
|
|
16
|
+
### Placement Rules
|
|
17
|
+
|
|
18
|
+
- If a doc explains a single abstraction boundary, **co-locate it** with the owning package.
|
|
19
|
+
- If a doc explains relationships between multiple abstractions, **centralize it** in `packages/sdk/docs/scaffold/`.
|
|
20
|
+
- If a doc can be derived from code or manifests, **generate it**.
|
|
21
|
+
- Hand-authored docs should point to generated maps rather than restating them.
|
|
22
|
+
|
|
23
|
+
### Source-to-Destination Map
|
|
24
|
+
|
|
25
|
+
| Content | Source | SDK Reference Destination |
|
|
26
|
+
| --------------------------- | --------------------------------------------------------------- | --------------------------------------------- |
|
|
27
|
+
| Organization Model | `packages/core/src/organization-model/organization-model.mdx` | `scaffold/core/organization-model.mdx` |
|
|
28
|
+
| Organization Graph | `packages/core/src/organization-model/organization-graph.mdx` | `scaffold/core/organization-graph.mdx` |
|
|
29
|
+
| Glossary | `packages/core/src/reference/glossary.md` | `scaffold/reference/glossary.md` |
|
|
30
|
+
| Contracts (auto-gen) | `packages/core/src/reference/_generated/contracts.md` | `scaffold/reference/contracts.md` |
|
|
31
|
+
| UI Recipes | `packages/ui/src/scaffold/recipes.md` | `scaffold/ui/recipes.md` |
|
|
32
|
+
| Feature Flags & Gating | `packages/ui/src/scaffold/feature-flags-and-gating.md` | `scaffold/ui/feature-flags-and-gating.md` |
|
|
33
|
+
| Customization | `packages/ui/src/scaffold/customization.md` | `scaffold/ui/customization.md` |
|
|
34
|
+
| Feature Shell | `packages/ui/src/scaffold/feature-shell.mdx` | `scaffold/ui/feature-shell.mdx` |
|
|
35
|
+
| Composition & Extensibility | `packages/ui/src/scaffold/composition-extensibility.mdx` | `scaffold/ui/composition-extensibility.mdx` |
|
|
36
|
+
| Feature Registry (auto-gen) | `packages/ui/src/scaffold/_generated/feature-registry.md` | `scaffold/reference/feature-registry.md` |
|
|
37
|
+
| Scaffold Index | `packages/sdk/docs/scaffold/index.mdx` | `scaffold/index.mdx` |
|
|
38
|
+
| Pathway Recipes (3) | `packages/sdk/docs/scaffold/recipes/` | `scaffold/recipes/` |
|
|
39
|
+
| Workflow Recipes | `packages/sdk/docs/scaffold/operations/workflow-recipes.md` | `scaffold/operations/workflow-recipes.md` |
|
|
40
|
+
| Propagation Pipeline | `packages/sdk/docs/scaffold/operations/propagation-pipeline.md` | `scaffold/operations/propagation-pipeline.md` |
|
|
41
|
+
| This doc | `packages/sdk/docs/scaffold/operations/scaffold-maintenance.md` | `scaffold/operations/scaffold-maintenance.md` |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Auto-Generation Pipeline
|
|
46
|
+
|
|
47
|
+
Two types of docs are auto-generated from source:
|
|
48
|
+
|
|
49
|
+
### Contracts (`contracts.md`)
|
|
50
|
+
|
|
51
|
+
Generated by `scripts/monorepo/generate-scaffold-contracts.js` from TypeScript source types:
|
|
52
|
+
|
|
53
|
+
- `packages/core/src/organization-model/types.ts` -- Organization Model, Feature System
|
|
54
|
+
- `packages/ui/src/features/registry/types.ts` -- Feature Registry
|
|
55
|
+
- `packages/core/src/platform/registry/types.ts` -- Resource Registry, Deployment Spec
|
|
56
|
+
|
|
57
|
+
Output: `packages/core/src/reference/_generated/contracts.md`
|
|
58
|
+
|
|
59
|
+
### Feature Registry (`feature-registry.md`)
|
|
60
|
+
|
|
61
|
+
Generated by `scripts/monorepo/generate-scaffold-feature-registry.js` from feature manifests:
|
|
62
|
+
|
|
63
|
+
- `packages/ui/src/features/*/manifest.ts` -- individual feature manifests
|
|
64
|
+
- `packages/core/src/organization-model/domains/features.ts` -- feature key definitions
|
|
65
|
+
|
|
66
|
+
Output: `packages/ui/src/scaffold/_generated/feature-registry.md`
|
|
67
|
+
|
|
68
|
+
### Reference Artifacts
|
|
69
|
+
|
|
70
|
+
Generated by `scripts/monorepo/generate-reference-artifacts.js`:
|
|
71
|
+
|
|
72
|
+
- `packages/sdk/reference/_reference-manifest.json` -- machine-readable catalog of all reference entries
|
|
73
|
+
- `packages/sdk/reference/_navigation.md` -- navigation table
|
|
74
|
+
- `external/_template/docs/platform-navigation-map.md` -- cross-package reference map for external projects
|
|
75
|
+
|
|
76
|
+
### Running Generators
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pnpm scaffold:generate # Run both generators
|
|
80
|
+
pnpm scaffold:sync # Generate + validate (the full loop)
|
|
81
|
+
pnpm sdk-ref:generate # Reference artifacts only
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Generated files should never be edited manually. If the output is wrong, fix the source types or the generator script.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## SDK Build Pipeline (Reference Copy)
|
|
89
|
+
|
|
90
|
+
`packages/sdk/scripts/copy-reference-docs.mjs` runs during `pnpm --filter @elevasis/sdk build` and has three phases:
|
|
91
|
+
|
|
92
|
+
1. **Phase 1:** Copies SDK public docs from `apps/docs/content/docs/sdk/` with link rewriting and MDX escape stripping
|
|
93
|
+
2. **Phase 2:** Copies package-owned reference docs declared in reference manifests
|
|
94
|
+
3. **Phase 3:** Copies scaffold docs from co-located package sources using the `SCAFFOLD_COPIES` map
|
|
95
|
+
|
|
96
|
+
The output lands in `packages/sdk/reference/` which is included in the npm package's `files` array. External projects access it via `node_modules/@elevasis/sdk/reference/`.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Adding New Scaffold Docs
|
|
101
|
+
|
|
102
|
+
1. **Create the source doc** in the appropriate package:
|
|
103
|
+
- Core concepts: `packages/core/src/...`
|
|
104
|
+
- UI patterns: `packages/ui/src/scaffold/...`
|
|
105
|
+
- Cross-package or SDK-owned: `packages/sdk/docs/scaffold/...`
|
|
106
|
+
|
|
107
|
+
2. **Add to `SCAFFOLD_COPIES`** in `packages/sdk/scripts/copy-reference-docs.mjs`:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
{ source: 'packages/sdk/docs/scaffold/operations/my-doc.md', target: 'scaffold/operations/my-doc.md' }
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
3. **Update the scaffold index** in `packages/sdk/docs/scaffold/index.mdx` with a link and description.
|
|
114
|
+
|
|
115
|
+
4. **Rebuild the SDK** to verify: `pnpm --filter @elevasis/sdk build`
|
|
116
|
+
|
|
117
|
+
5. **Update the permanent architecture docs** if the new doc covers a concept already referenced in `apps/docs/content/docs/technical/architecture/scaffold-reference.mdx`.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Freshness Validation
|
|
122
|
+
|
|
123
|
+
External projects have a local freshness validator: `scripts/validate-autogenerated-docs.mjs` (invoked via `pnpm check:autogenerated-docs`). This checks that generated docs in the project match what their generators would produce.
|
|
124
|
+
|
|
125
|
+
At the monorepo level, `pnpm scaffold:sync` followed by `pnpm sync:verify` confirms that all artifacts are current and all downstream projects are consistent.
|
|
@@ -89,18 +89,19 @@ If the resource triggers another resource, uses a human checkpoint, or depends o
|
|
|
89
89
|
```ts
|
|
90
90
|
const org: DeploymentSpec = {
|
|
91
91
|
// ...
|
|
92
|
-
relationships:
|
|
93
|
-
{
|
|
94
|
-
|
|
95
|
-
target: 'email-notification',
|
|
96
|
-
type: 'triggers'
|
|
92
|
+
relationships: {
|
|
93
|
+
'my-workflow': {
|
|
94
|
+
triggers: { workflows: ['email-notification'] }
|
|
97
95
|
}
|
|
98
|
-
|
|
96
|
+
},
|
|
99
97
|
humanCheckpoints: [
|
|
100
98
|
{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
resourceId: 'approval-gate',
|
|
100
|
+
name: 'Approve before sending',
|
|
101
|
+
type: 'human',
|
|
102
|
+
version: '1.0.0',
|
|
103
|
+
status: 'prod',
|
|
104
|
+
routesTo: { workflows: ['my-workflow'] }
|
|
104
105
|
}
|
|
105
106
|
]
|
|
106
107
|
}
|
|
@@ -117,9 +118,10 @@ To make the resource referenceable from the org model (so the Operations graph a
|
|
|
117
118
|
```ts
|
|
118
119
|
resourceMappings: [
|
|
119
120
|
{
|
|
121
|
+
id: 'my-workflow',
|
|
120
122
|
resourceId: 'my-workflow',
|
|
121
123
|
resourceType: 'workflow',
|
|
122
|
-
|
|
124
|
+
domainIds: ['operations'],
|
|
123
125
|
label: 'My Workflow'
|
|
124
126
|
}
|
|
125
127
|
]
|
|
@@ -213,7 +213,7 @@ See [Composition & Extensibility](./composition-extensibility.mdx) for the sideb
|
|
|
213
213
|
|
|
214
214
|
### CRM Sidebar
|
|
215
215
|
|
|
216
|
-
The CRM sidebar (`packages/ui/src/features/crm/sidebar/`) exports `CrmSidebar`, `CrmSidebarTop`, and `CrmSidebarMiddle`. `SavedViewsPanel` lives in `packages/ui/src/features/crm/workbench/SavedViewsPanel.tsx` and is exported from the CRM workbench barrel; it provides the saved contact views panel
|
|
216
|
+
The CRM sidebar (`packages/ui/src/features/crm/sidebar/`) exports `CrmSidebar`, `CrmSidebarTop`, and `CrmSidebarMiddle`. `SavedViewsPanel` lives in `packages/ui/src/features/crm/workbench/SavedViewsPanel.tsx` and is exported from the CRM workbench barrel; it provides the saved contact views panel. It is currently commented out of the default `CrmSidebarMiddle` layout while the CRM sidebar section model is being reworked, but can be re-included explicitly when composing a custom sidebar.
|
|
217
217
|
|
|
218
218
|
### Operations Sidebar
|
|
219
219
|
|