@elevasis/sdk 1.54.0 → 1.56.0
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/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/{chunk-ZAVFBZHM.js → chunk-72ZGICTR.js} +247 -6
- package/dist/{chunk-OT4CHFQJ.js → chunk-R3J6BEPO.js} +54 -5
- package/dist/cli.cjs +153 -15
- package/dist/index.d.ts +46 -16
- package/dist/index.js +1 -1
- package/dist/node/index.d.ts +1 -8
- package/dist/node/index.js +3 -14
- package/dist/test-utils/index.js +2 -2
- package/dist/worker/index.d.ts +9 -0
- package/dist/worker/index.js +2 -2
- package/package.json +4 -4
- package/reference/_navigation.md +3 -3
- package/reference/_reference-manifest.json +3 -3
- package/reference/packages/core/src/knowledge/README.md +1 -1
- package/reference/packages/ui/src/knowledge/README.md +32 -32
- package/reference/rules/error-handling.md +50 -1
- package/reference/rules/execution.md +63 -7
- package/reference/scaffold/core/organization-model.mdx +1 -1
- package/reference/scaffold/recipes/customize-organization-model.md +3 -1
- package/reference/scaffold/recipes/extend-lead-gen.md +2 -1
- package/reference/scaffold/reference/contracts.md +30 -21
- package/reference/sdk/framework/project-structure.mdx +1 -3
- package/reference/ui/exports.mdx +1 -1
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
# @elevasis/ui/knowledge
|
|
2
|
-
|
|
3
|
-
Read-only browser primitives for the Organization Model knowledge graph.
|
|
4
|
-
|
|
5
|
-
## Surface
|
|
6
|
-
|
|
7
|
-
| Export | Purpose
|
|
8
|
-
| ---------------------------------------------------------------------- |
|
|
9
|
-
| `KnowledgeBrowser` | Selected-node detail pane. Tree/search now live in the feature sidebar.
|
|
10
|
-
| `KnowledgeTree` | By-feature primary tree with hierarchical features and multi-governance duplication.
|
|
11
|
-
| `KnowledgeNodeList` | Legacy flat list of node summary cards; exported for compatibility.
|
|
12
|
-
| `KnowledgeNodeView` | Single knowledge-node detail view using `NodeDescribeShell` and relationship groups.
|
|
13
|
-
| `KnowledgeSearchBar` | Client-side search
|
|
1
|
+
# @elevasis/ui/knowledge
|
|
2
|
+
|
|
3
|
+
Read-only browser primitives for the Organization Model knowledge graph.
|
|
4
|
+
|
|
5
|
+
## Surface
|
|
6
|
+
|
|
7
|
+
| Export | Purpose |
|
|
8
|
+
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| `KnowledgeBrowser` | Selected-node detail pane. Tree/search now live in the feature sidebar. |
|
|
10
|
+
| `KnowledgeTree` | By-feature primary tree with hierarchical features and multi-governance duplication. |
|
|
11
|
+
| `KnowledgeNodeList` | Legacy flat list of node summary cards; exported for compatibility. |
|
|
12
|
+
| `KnowledgeNodeView` | Single knowledge-node detail view using `NodeDescribeShell` and relationship groups. |
|
|
13
|
+
| `KnowledgeSearchBar` | Client-side search built in-memory from the live `knowledgeNodes` prop. |
|
|
14
14
|
| `KnowledgeNodeDetailRouteView` | Shared `/knowledge/$nodeId` content route view; apps keep TanStack route adapters and navigation wiring local. |
|
|
15
|
-
| `KnowledgeRouteIds` helpers | Decode route ids, resolve Knowledge route targets, and derive route labels for app-local breadcrumbs.
|
|
16
|
-
| `KnowledgeSidebarMiddle` | Deprecated legacy sidebar middle section; active sidebar lives under `features/knowledge/sidebar`.
|
|
17
|
-
| `KNOWLEDGE_ITEMS` | Deprecated default sidebar nav items retained for compatibility.
|
|
18
|
-
| `KnowledgeMDXProvider`, `useKnowledgeAllowlist`, `KNOWLEDGE_ALLOWLIST` | MDX runtime allowlist (`Card`, `Cards`, `Step`, `Steps`, `Callout`, `Tab`, `Tabs`).
|
|
19
|
-
| `
|
|
20
|
-
|
|
21
|
-
## Customization tiers
|
|
22
|
-
|
|
23
|
-
1. **Default** — mount `knowledgeManifest` from `@elevasis/ui/features/knowledge`.
|
|
24
|
-
2. **Extend** — pass `extraComponents` to `KnowledgeMDXProvider` or compose around the feature sidebar primitives.
|
|
25
|
-
3. **Replace** — call `@elevasis/core/knowledge` queries directly from project-owned routes.
|
|
26
|
-
|
|
27
|
-
## Codegen
|
|
28
|
-
|
|
29
|
-
`
|
|
30
|
-
|
|
31
|
-
The Vite plugin at `@elevasis/ui/vite-plugin-knowledge` re-runs codegen on `buildStart` and watches the OM source dir for HMR.
|
|
32
|
-
|
|
33
|
-
Phase 1 is read-only. Phase 2 will move bodies into Supabase and ship via `mdx-bundler`.
|
|
15
|
+
| `KnowledgeRouteIds` helpers | Decode route ids, resolve Knowledge route targets, and derive route labels for app-local breadcrumbs. |
|
|
16
|
+
| `KnowledgeSidebarMiddle` | Deprecated legacy sidebar middle section; active sidebar lives under `features/knowledge/sidebar`. |
|
|
17
|
+
| `KNOWLEDGE_ITEMS` | Deprecated default sidebar nav items retained for compatibility. |
|
|
18
|
+
| `KnowledgeMDXProvider`, `useKnowledgeAllowlist`, `KNOWLEDGE_ALLOWLIST` | MDX runtime allowlist (`Card`, `Cards`, `Step`, `Steps`, `Callout`, `Tab`, `Tabs`). |
|
|
19
|
+
| `KnowledgeBodiesMap` | Type for the compiled MDX-component-by-node-id map. `@elevasis/ui` ships this type only, not a corpus. |
|
|
20
|
+
|
|
21
|
+
## Customization tiers
|
|
22
|
+
|
|
23
|
+
1. **Default** — mount `knowledgeManifest` from `@elevasis/ui/features/knowledge`.
|
|
24
|
+
2. **Extend** — pass `extraComponents` to `KnowledgeMDXProvider` or compose around the feature sidebar primitives.
|
|
25
|
+
3. **Replace** — call `@elevasis/core/knowledge` queries directly from project-owned routes.
|
|
26
|
+
|
|
27
|
+
## Codegen
|
|
28
|
+
|
|
29
|
+
This package ships the machinery only, not a compiled corpus. Each consumer generates its own `knowledge-bodies.tsx` (matching `KnowledgeBodiesMap`) beside its own Organization Model and hands it to `ElevasisSystemsProvider` as the required `knowledgeBodies` prop. In the monorepo that lives at `packages/elevasis/core/config/knowledge/_generated/`, sourced from `canonicalOrganizationModel.knowledge.nodes`; in an external project it lives at `<project-root>/core/config/knowledge/_generated/`. Regenerate with `pnpm scaffold:sync` (or `pnpm knowledge:generate` for only the knowledge step).
|
|
30
|
+
|
|
31
|
+
The Vite plugin at `@elevasis/ui/vite-plugin-knowledge` re-runs codegen on `buildStart` and watches the OM source dir for HMR.
|
|
32
|
+
|
|
33
|
+
Phase 1 is read-only. Phase 2 will move bodies into Supabase and ship via `mdx-bundler`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Error handling -- ExecutionError vs PlatformToolError, retry logic, no auto-retry
|
|
2
|
+
description: Error handling -- ExecutionError vs PlatformToolError, retry logic, no auto-retry, /api/external error envelope
|
|
3
3
|
paths:
|
|
4
4
|
- operations/**
|
|
5
5
|
---
|
|
@@ -41,6 +41,17 @@ try {
|
|
|
41
41
|
}
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
## What Your Handler May Throw
|
|
45
|
+
|
|
46
|
+
`ExecutionError` is the class to throw from workflow and agent code. It carries a `context` record
|
|
47
|
+
and an `isRetryable()` the engine reads, which is why it is preferable to a bare `Error` -- a plain
|
|
48
|
+
throw arrives at the platform with no classification and no structured context.
|
|
49
|
+
|
|
50
|
+
Handler code runs in a worker thread, not in an API request. A throw there becomes an **execution
|
|
51
|
+
failure** recorded against the execution -- it never becomes an HTTP response body, so there is no
|
|
52
|
+
status code to pick and no envelope to shape. The envelope below is what you _receive_ when you call
|
|
53
|
+
the platform's own API, not what your handler produces.
|
|
54
|
+
|
|
44
55
|
## No Auto-Retry
|
|
45
56
|
|
|
46
57
|
The platform does NOT automatically retry failed steps. Your handler is responsible for retry logic. Check `PlatformToolError.retryable` to decide whether retrying is safe.
|
|
@@ -60,6 +71,44 @@ The platform does NOT automatically retry failed steps. Your handler is responsi
|
|
|
60
71
|
| `credentials_invalid` | No | Credential not found or expired |
|
|
61
72
|
| `validation_error` | No | Invalid parameters passed to tool |
|
|
62
73
|
|
|
74
|
+
## Error Bodies From `/api/external/*`
|
|
75
|
+
|
|
76
|
+
Every `/api/external/*` route returns the same error envelope. Tenants are the only consumers of
|
|
77
|
+
these routes, so this is the shape your API-key client parses:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"error": "human-readable message",
|
|
82
|
+
"code": "VALIDATION_ERROR",
|
|
83
|
+
"requestId": "correlates with server logs",
|
|
84
|
+
"fields": { "newResourceId": ["must differ from oldResourceId"] }
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`error` and `code` are always present. `requestId` is present on every error response -- quote it
|
|
89
|
+
when reporting a problem. `fields` appears only when the request body itself failed schema
|
|
90
|
+
validation. `retryAfter` (seconds) accompanies `RATE_LIMIT_EXCEEDED`, and `details` carries a
|
|
91
|
+
structured payload on some conflicts.
|
|
92
|
+
|
|
93
|
+
**`POST /api/external/resources/rename` changed shape -- read `code`, not just `error`.** It used to
|
|
94
|
+
build `{ error, code }` by hand, and then briefly returned `code: "VALIDATION_ERROR"` with a 400 for
|
|
95
|
+
_every_ failure, including ones that were not your fault. It now states the real cause:
|
|
96
|
+
|
|
97
|
+
| Failure | Status | `code` |
|
|
98
|
+
| --------------------------------------------- | ------ | ---------------------------------- |
|
|
99
|
+
| Body fails schema validation | 400 | `VALIDATION_ERROR` (with `fields`) |
|
|
100
|
+
| `newResourceId` already has execution history | 409 | `CONFLICT` |
|
|
101
|
+
| A database query or update failed | 500 | `INTERNAL_SERVER_ERROR` |
|
|
102
|
+
|
|
103
|
+
A client that branched on "400 means my input was wrong" now needs to distinguish 409 (rename to a
|
|
104
|
+
different id) from 500 (retry or report). A client reading only `error` as its diagnostic silently
|
|
105
|
+
loses that distinction -- the message text is not a stable contract, and `code` is.
|
|
106
|
+
|
|
107
|
+
**On any 5xx, `error` is generic by design.** The platform suppresses server-fault messages, so a 500
|
|
108
|
+
reads `"Internal server error"` rather than what actually broke -- that sentence was written for
|
|
109
|
+
whoever fixes the server, and it stays in the server's logs. `requestId` is what joins your failure
|
|
110
|
+
to that log line, so quote it when you report a 5xx rather than the message.
|
|
111
|
+
|
|
63
112
|
## CLI Transport Failures
|
|
64
113
|
|
|
65
114
|
These are errors in the CLI you type commands into, not in your handler code. They are worth knowing because the natural reaction to one of them is the wrong reaction.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Execution model -- timeouts, memory, concurrency, org isolation
|
|
2
|
+
description: Execution model -- per-step and agent timeouts, spend ceilings, memory, concurrency, org isolation
|
|
3
3
|
paths:
|
|
4
4
|
- operations/**
|
|
5
5
|
---
|
|
@@ -15,15 +15,71 @@ Each execution runs in an isolated Node.js worker thread spawned from the deploy
|
|
|
15
15
|
|
|
16
16
|
## Constraints
|
|
17
17
|
|
|
18
|
-
| Constraint | Workflows | Agents
|
|
19
|
-
| ---------- | ------------------------------- |
|
|
20
|
-
| Timeout |
|
|
21
|
-
| Memory | 256MB hard limit | 256MB hard limit
|
|
22
|
-
| Disk | None (no persistent filesystem) | None
|
|
18
|
+
| Constraint | Workflows | Agents |
|
|
19
|
+
| ---------- | ------------------------------- | ---------------------------------------------- |
|
|
20
|
+
| Timeout | 2h execution ceiling | 2h ceiling, lower it via `constraints.timeout` |
|
|
21
|
+
| Memory | 256MB hard limit | 256MB hard limit |
|
|
22
|
+
| Disk | None (no persistent filesystem) | None |
|
|
23
23
|
|
|
24
24
|
- Platform enforces timeouts -- no handler code needed, worker terminates automatically.
|
|
25
25
|
- Memory overflow crashes the worker. Other tenants are unaffected.
|
|
26
|
-
-
|
|
26
|
+
- The ceiling is a safety net against a runaway loop, not a duration budget. Bound the work you
|
|
27
|
+
actually want bounded with a per-step `timeout` (below) or `constraints.timeout`, rather than
|
|
28
|
+
relying on the ceiling to stop it.
|
|
29
|
+
|
|
30
|
+
## Per-Step Timeouts
|
|
31
|
+
|
|
32
|
+
A workflow step may declare its own millisecond ceiling:
|
|
33
|
+
|
|
34
|
+
| Field | Applies to | Omitted |
|
|
35
|
+
| ---------------------- | ------------- | ----------------------------------------------------- |
|
|
36
|
+
| `WorkflowStep.timeout` | one step | the step is bounded only by the 2h execution ceiling |
|
|
37
|
+
| `constraints.timeout` | a whole agent | the agent is bounded only by the 2h execution ceiling |
|
|
38
|
+
|
|
39
|
+
`WorkflowConfig` has no `constraints` field on purpose. A per-workflow override would only restate
|
|
40
|
+
the execution ceiling; "this HTTP call should never take more than 5 seconds" is a property of the
|
|
41
|
+
step and has nowhere else to live.
|
|
42
|
+
|
|
43
|
+
**The two timeout failures are not the same failure, and the difference is whether a retry can
|
|
44
|
+
work.** A step that breaches its own `timeout` while the workflow still has budget left fails
|
|
45
|
+
**retryably** -- a slow third-party call is exactly what a retry exists for. A workflow that reaches
|
|
46
|
+
the 2h execution ceiling fails **non-retryably**: there is no budget left to retry inside. Neither
|
|
47
|
+
error class is exported from `@elevasis/sdk`, so branch on your own step's outcome rather than on
|
|
48
|
+
`instanceof`; the retryability distinction is what determines whether re-running is worth anything.
|
|
49
|
+
|
|
50
|
+
Declare a `timeout` on any step that calls something you do not control. Without one, a hung
|
|
51
|
+
integration call holds the whole workflow open for two hours.
|
|
52
|
+
|
|
53
|
+
## Agent Spend Guards
|
|
54
|
+
|
|
55
|
+
`maxIterations` and `timeout` bound how MANY model calls an agent makes and how LONG it runs.
|
|
56
|
+
Neither bounds how much those calls cost. An agent on a large context or an expensive model can
|
|
57
|
+
spend without limit inside a budget it is technically respecting. Three `AgentConstraints` fields
|
|
58
|
+
close that:
|
|
59
|
+
|
|
60
|
+
| Constraint | Bounds | Default |
|
|
61
|
+
| ------------------------ | ------------------------------------------------ | ------------------- |
|
|
62
|
+
| `maxCostUsd` | total USD across every AI call in the turn | unset -- no ceiling |
|
|
63
|
+
| `maxTotalTokens` | total input + output tokens across every AI call | unset -- no ceiling |
|
|
64
|
+
| `maxIdenticalIterations` | consecutive byte-identical plans before stopping | 3 |
|
|
65
|
+
|
|
66
|
+
Set at least one of the first two on any agent you are not watching. Unset is genuinely unbounded,
|
|
67
|
+
not "bounded by something sensible".
|
|
68
|
+
|
|
69
|
+
**Reaching a spend ceiling fails the execution.** The stop reason is `spend_exhausted`, and the
|
|
70
|
+
worker reports `status: 'failed'` with `AgentSpendExhaustedError` -- deliberately, because an agent
|
|
71
|
+
that stopped at its ceiling did not finish its work, and reporting that as success is what makes the
|
|
72
|
+
failure mode invisible. Whatever the agent synthesized still travels on the failed result, so a
|
|
73
|
+
partial answer is not lost.
|
|
74
|
+
|
|
75
|
+
`spend_exhausted` is kept distinct from `budget_exhausted` (the `maxIterations` stop) because the
|
|
76
|
+
right response differs: an agent out of iterations may just need a larger `maxIterations`, while one
|
|
77
|
+
out of spend is the ceiling doing its job. Read the stop reason before raising either limit.
|
|
78
|
+
|
|
79
|
+
Ceilings are enforced only where the platform injects a usage collector, which is every
|
|
80
|
+
coordinator-run execution. Note that a **synchronous nested execution shares its parent's
|
|
81
|
+
collector**, so a parent's ceiling covers the agent and everything it invokes synchronously -- and
|
|
82
|
+
can therefore be reached by a child's spend.
|
|
27
83
|
|
|
28
84
|
## Concurrency
|
|
29
85
|
|
|
@@ -51,7 +51,7 @@ Resource identity is authored inside `OrganizationModel.resources`. Runtime work
|
|
|
51
51
|
|
|
52
52
|
## System Shape
|
|
53
53
|
|
|
54
|
-
`OrganizationModel.systems` is the canonical semantic domain map. Hierarchy is authored with recursive `systems`; dotted paths such as `sales.crm` are derived from position in that tree. `subsystems` is a deprecated compatibility alias — it is still accepted
|
|
54
|
+
`OrganizationModel.systems` is the canonical semantic domain map. Hierarchy is authored with recursive `systems`; dotted paths such as `sales.crm` are derived from position in that tree. `subsystems` is a deprecated compatibility alias — it is still accepted on input, but new authoring should use `systems`. Parsing does **not** copy `systems` into it: children come back under whichever key the author wrote, so read `system.systems ?? system.subsystems` rather than assuming either key is populated. `parentSystemId` and `id` remain accepted compatibility fields during the migration.
|
|
55
55
|
|
|
56
56
|
{/* doc-snippet:skip: illustrative excerpt, not a standalone compilable file */}
|
|
57
57
|
|
|
@@ -103,7 +103,9 @@ System field reference:
|
|
|
103
103
|
- `actions` -- references to the cross-cutting actions domain.
|
|
104
104
|
- `ontology` -- System-owned object, link, action, catalog, event, surface, interface, value-type, property, or group records.
|
|
105
105
|
- `config` -- JSON-serializable settings local to this System.
|
|
106
|
-
- `systems` -- nested child Systems. Use this for new recursive authoring; `subsystems` is a
|
|
106
|
+
- `systems` -- nested child Systems. Use this for new recursive authoring; `subsystems` is a retired spelling, accepted on input only.
|
|
107
|
+
|
|
108
|
+
**A parsed model no longer carries children under both keys.** Parsing used to mirror `systems` into `subsystems`, so either spelling could be read off any parsed System. That mirror is gone: children now live under whichever key the author wrote. Anything walking the tree must read `system.systems ?? system.subsystems` -- reading `subsystems` alone looked correct only because the mirror was filling it in.
|
|
107
109
|
|
|
108
110
|
## Ontology
|
|
109
111
|
|
|
@@ -51,6 +51,7 @@ Lead gen is a layered platform surface, not one component. Shared packages own s
|
|
|
51
51
|
| `useLeadGenConfig`, `LeadGenBuildConfig`, build-state helpers | `@elevasis/ui/features/lead-gen` | Provider-backed derivation of stage catalog, build templates, default build steps, default template id, and export workflow id |
|
|
52
52
|
| `ListActionsProvider`, `useListActions`, `ListBuilderWorkflow`, `ListBuilderRegistry`, `LeadGenActionKey` | `@elevasis/ui/features/lead-gen` | List Builder workflow registry, slot-based field contracts, and project-owned action wiring |
|
|
53
53
|
| `LeadGenRouteShell` | `@elevasis/ui/features/lead-gen` | Route shell helper (contact/company detail surfaces are now `ContactDetailPage` / `CompanyDetailPage` from `@elevasis/ui/features/crm`) |
|
|
54
|
+
| `EMPLOYEE_RANGES`, `EmployeeRange` | `@elevasis/ui/features/lead-gen` | Apollo's own employee-count brackets for an Apollo import form. Wire values are Apollo's; relabel by mapping, never by redeclaring |
|
|
54
55
|
| `useLists`, `useList`, `useListsTelemetry`, `useListProgress`, `useListExecutions`, `useCreateList`, `useUpdateList`, `useUpdateListConfig`, `useDeleteList` | `@elevasis/ui/hooks` | Headless list and telemetry data access |
|
|
55
56
|
| `useWorkflowExecution`, `useExecutionSSE`, `useAddCompaniesToList`, `useRemoveCompaniesFromList`, `useAddContactsToList` | `@elevasis/ui/hooks` | List Builder workflow triggering, live execution tailing, and list membership mutations |
|
|
56
57
|
| `useCompanies`, `useCompany`, `useContacts`, `useContact` | `@elevasis/ui/hooks` | Acquisition company/contact data access |
|
|
@@ -208,7 +209,7 @@ function RootLayoutComponent() {
|
|
|
208
209
|
|
|
209
210
|
Data sourcing mode is list-wide. Read `list.pipelineConfig.dataMode` or the workflow-side `list.getConfig()` result when a workflow must choose mock versus live sourcing. Do not add per-action `mock` / `live` controls for Apollo, crawl, enrichment, or scoring steps. Export mode is separate: `preview` versus `export` controls whether a destination write happens.
|
|
210
211
|
|
|
211
|
-
Each registry entry declares a Zod `schema` and a `layout` of declarative field hints (`StepConfigLayout<Input>`). The shared `StepConfigForm` renders the layout, validates against the schema, and wires `value`/`onChange` for you
|
|
212
|
+
Each registry entry declares a Zod `schema` and a `layout` of declarative field hints (`StepConfigLayout<Input>`). The shared `StepConfigForm` renders the layout, validates against the schema, and wires `value`/`onChange` for you — no per-action React components. The List Builder right column renders the form as `Configuration | Advanced | Runs` tabs with a sticky action footer. Omit the `advanced:` section when a step has none.
|
|
212
213
|
|
|
213
214
|
Available field component variants: `textinput`, `textarea`, `numberinput`, `switch`, `segmented`, `select`, `multiselect`, `tags`, `json`. Field hints support `label`, `description`, `placeholder`, `min`/`max`/`step` (numbers), `options` (selects), and `when: (values) => boolean` for conditional visibility.
|
|
214
215
|
|
|
@@ -941,6 +941,13 @@ export interface ElevasisSystemsProviderProps {
|
|
|
941
941
|
/** Registered topbar action modules. OM node presence controls visibility; module supplies behavior. */
|
|
942
942
|
topbarActions?: TopbarActionModule[]
|
|
943
943
|
organizationModel?: ElevasisOrganizationModel
|
|
944
|
+
/**
|
|
945
|
+
* Compiled knowledge-node body components for this consumer's own corpus.
|
|
946
|
+
* Required, not defaulted: a missing corpus must fail to compile at the
|
|
947
|
+
* provider mount rather than render a blank panel at runtime. See
|
|
948
|
+
* `knowledge-corpus-injection.mdx`.
|
|
949
|
+
*/
|
|
950
|
+
knowledgeBodies: KnowledgeBodiesMap
|
|
944
951
|
timeRange?: TimeRange
|
|
945
952
|
operationsApiUrl?: string
|
|
946
953
|
operationsSSEManager?: SSEConnectionManagerLike
|
|
@@ -964,6 +971,8 @@ export interface ElevasisSystemsContextValue {
|
|
|
964
971
|
resolvedSystems: ResolvedSystemModule[]
|
|
965
972
|
organizationGraph: OrganizationGraphContextValue
|
|
966
973
|
organizationModel?: OrganizationModel
|
|
974
|
+
/** Compiled knowledge-node body components for this consumer's own corpus. See `ElevasisSystemsProviderProps.knowledgeBodies`. */
|
|
975
|
+
knowledgeBodies: KnowledgeBodiesMap
|
|
967
976
|
timeRange?: TimeRange
|
|
968
977
|
operationsApiUrl?: string
|
|
969
978
|
operationsSSEManager?: SSEConnectionManagerLike
|
|
@@ -3142,45 +3151,45 @@ export const AcqSubstrateSchemas = {
|
|
|
3142
3151
|
### `Stateful`
|
|
3143
3152
|
|
|
3144
3153
|
```typescript
|
|
3145
|
-
/**
|
|
3146
|
-
* Stateful trait — the (pipeline_key, stage_key, state_key, activity_log) quartet
|
|
3147
|
-
* applied to acq_deals (CRM HITL, shipped 2026-04-27) and being generalized to
|
|
3148
|
-
* acq_lists / acq_list_members / acq_list_companies via Track B.
|
|
3149
|
-
*/
|
|
3150
|
-
export interface Stateful {
|
|
3151
|
-
pipeline_key: string
|
|
3152
|
-
stage_key: string
|
|
3153
|
-
state_key: string
|
|
3154
|
-
activity_log: ActivityEvent[]
|
|
3154
|
+
/**
|
|
3155
|
+
* Stateful trait — the (pipeline_key, stage_key, state_key, activity_log) quartet
|
|
3156
|
+
* applied to acq_deals (CRM HITL, shipped 2026-04-27) and being generalized to
|
|
3157
|
+
* acq_lists / acq_list_members / acq_list_companies via Track B.
|
|
3158
|
+
*/
|
|
3159
|
+
export interface Stateful {
|
|
3160
|
+
pipeline_key: string
|
|
3161
|
+
stage_key: string
|
|
3162
|
+
state_key: string
|
|
3163
|
+
activity_log: ActivityEvent[]
|
|
3155
3164
|
}
|
|
3156
3165
|
```
|
|
3157
3166
|
|
|
3158
3167
|
### `TransitionItem`
|
|
3159
3168
|
|
|
3160
3169
|
```typescript
|
|
3161
|
-
/** Generic transition shape — concrete per-entity transitionItem implementations satisfy this. */
|
|
3162
|
-
export type TransitionItem<T extends Stateful, TEvent extends ActivityEvent> = (
|
|
3163
|
-
item: T,
|
|
3164
|
-
transition: { stage_key?: string; state_key?: string; event: TEvent }
|
|
3170
|
+
/** Generic transition shape — concrete per-entity transitionItem implementations satisfy this. */
|
|
3171
|
+
export type TransitionItem<T extends Stateful, TEvent extends ActivityEvent> = (
|
|
3172
|
+
item: T,
|
|
3173
|
+
transition: { stage_key?: string; state_key?: string; event: TEvent }
|
|
3165
3174
|
) => T
|
|
3166
3175
|
```
|
|
3167
3176
|
|
|
3168
3177
|
### `DeriveActions`
|
|
3169
3178
|
|
|
3170
3179
|
```typescript
|
|
3171
|
-
/** Generic action-derivation shape — concrete per-entity deriveActions implementations satisfy this. */
|
|
3180
|
+
/** Generic action-derivation shape — concrete per-entity deriveActions implementations satisfy this. */
|
|
3172
3181
|
export type DeriveActions<T extends Stateful, TAction> = (item: T) => TAction[]
|
|
3173
3182
|
```
|
|
3174
3183
|
|
|
3175
3184
|
### `StatefulSchema`
|
|
3176
3185
|
|
|
3177
3186
|
```typescript
|
|
3178
|
-
export const StatefulSchema = z.object({
|
|
3179
|
-
pipeline_key: z.string(),
|
|
3180
|
-
stage_key: z.string(),
|
|
3181
|
-
state_key: z.string(),
|
|
3182
|
-
activity_log: z.array(ActivityEventSchema)
|
|
3183
|
-
})
|
|
3187
|
+
export const StatefulSchema = z.object({
|
|
3188
|
+
pipeline_key: z.string(),
|
|
3189
|
+
stage_key: z.string(),
|
|
3190
|
+
state_key: z.string(),
|
|
3191
|
+
activity_log: z.array(ActivityEventSchema)
|
|
3192
|
+
}) satisfies z.ZodType<Stateful>
|
|
3184
3193
|
```
|
|
3185
3194
|
|
|
3186
3195
|
### `StatefulStateDefinition`
|
|
@@ -92,8 +92,6 @@ operations/
|
|
|
92
92
|
│ ├── metadata.ts # Trigger/integration/human-checkpoint metadata (starts empty)
|
|
93
93
|
│ ├── resource-registry.test.ts
|
|
94
94
|
│ ├── README.md
|
|
95
|
-
│ ├── __tests__/
|
|
96
|
-
│ │ └── sdk-test-utils.compat.ts # Shared test helpers -- assertResourceRegistry, runWorkflow
|
|
97
95
|
│ ├── example/
|
|
98
96
|
│ │ ├── echo.ts # Starter workflow
|
|
99
97
|
│ │ ├── echo.test.ts
|
|
@@ -122,7 +120,7 @@ Convention seed for deployment mechanics that are not resource identity: trigger
|
|
|
122
120
|
|
|
123
121
|
### `operations/src/example/echo.ts`
|
|
124
122
|
|
|
125
|
-
The starter workflow: one workflow per file with its own `config`, Zod `contract`, `steps` map, and `entryPoint`. Replace this domain with your own when ready. `operations/src/example/example-agent.ts` is the equivalent starter for an agent resource -- a minimal single-shot (non-session) `AgentDefinition` with no tools and no memory. Each has a matching `*.test.ts` file exercising it through the
|
|
123
|
+
The starter workflow: one workflow per file with its own `config`, Zod `contract`, `steps` map, and `entryPoint`. Replace this domain with your own when ready. `operations/src/example/example-agent.ts` is the equivalent starter for an agent resource -- a minimal single-shot (non-session) `AgentDefinition` with no tools and no memory. Each has a matching `*.test.ts` file exercising it through the published test helpers -- `runLinearWorkflow` (imported as `runWorkflow`) and `assertResourceRegistry`, both from `@elevasis/sdk/test-utils`.
|
|
126
124
|
|
|
127
125
|
### `operations/src/email-notification/index.ts`
|
|
128
126
|
|
package/reference/ui/exports.mdx
CHANGED
|
@@ -33,7 +33,7 @@ description: "Auto-generated catalog of all published @elevasis/ui subpath expor
|
|
|
33
33
|
| `@elevasis/ui/features/knowledge` | Features Knowledge | Features | Published knowledge feature manifest for downstream shells. |
|
|
34
34
|
| `@elevasis/ui/features/notes` | Features Notes | Features | Published Notes panel view and supporting note components for shared right-panel integrations. |
|
|
35
35
|
| `@elevasis/ui/features/right-panel-host` | Features Right Panel Host | Features | Published right-panel host provider, layer, trigger, keyboard shortcut, store, and view contract. |
|
|
36
|
-
| `@elevasis/ui/knowledge` | Knowledge | Visual | Published knowledge browser primitives: Browser, Tree, NodeList, NodeView, SearchBar, MDX provider, and the
|
|
36
|
+
| `@elevasis/ui/knowledge` | Knowledge | Visual | Published knowledge browser primitives: Browser, Tree, NodeList, NodeView, SearchBar, MDX provider, and the KnowledgeBodiesMap type. Machinery only -- each consumer supplies its own compiled corpus via the required knowledgeBodies prop. |
|
|
37
37
|
| `@elevasis/ui/vite` | Vite | Build | Composite Vite plugin factory (elevasisVite) that bundles all @elevasis/ui Vite plugins into a single array for consumer vite.config.ts files. |
|
|
38
38
|
| `@elevasis/ui/vite-plugin-knowledge` | Vite Plugin Knowledge | Build | Vite plugin that regenerates the build-time knowledge MDX bodies and search index, with HMR support. |
|
|
39
39
|
| `@elevasis/ui/features/settings` | Features Settings | Features | Published settings feature surface for downstream shells. |
|