@elevasis/sdk 1.45.0 → 1.47.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/dist/cli.cjs +36454 -31490
- package/dist/index.d.ts +964 -358
- package/dist/index.js +59 -59
- package/dist/node/index.d.ts +0 -84
- package/dist/node/index.js +2 -2
- package/dist/test-utils/index.d.ts +993 -301
- package/dist/test-utils/index.js +177 -134
- package/dist/worker/index.d.ts +1043 -277
- package/dist/worker/index.js +74 -35
- package/package.json +2 -2
- package/reference/_navigation.md +12 -3
- package/reference/_reference-manifest.json +42 -0
- package/reference/core/exports.mdx +2 -0
- package/reference/packages/core/src/business/README.md +4 -1
- package/reference/packages/core/src/content/README.md +24 -0
- package/reference/packages/core/src/organization-model/README.md +148 -149
- package/reference/packages/core/src/organization-model/readiness/README.md +42 -0
- package/reference/packages/ui/src/features/README.md +28 -28
- package/reference/rules/shared-types.md +21 -0
- package/reference/scaffold/core/organization-graph.mdx +2 -3
- package/reference/scaffold/core/organization-model.mdx +2 -6
- package/reference/scaffold/operations/propagation-pipeline.md +15 -16
- package/reference/scaffold/operations/scaffold-maintenance.md +3 -2
- package/reference/scaffold/operations/workflow-recipes.md +2 -2
- package/reference/scaffold/recipes/customize-crm-actions.md +5 -5
- package/reference/scaffold/recipes/extend-content.md +301 -0
- package/reference/scaffold/recipes/extend-lead-gen.md +14 -16
- package/reference/scaffold/recipes/index.md +4 -1
- package/reference/scaffold/reference/contracts.md +18 -55
- package/reference/scaffold/reference/feature-registry.md +3 -0
- package/reference/scaffold/reference/glossary.md +1 -1
- package/reference/scaffold/ui/customization.md +2 -2
- package/reference/scaffold/ui/feature-shell.mdx +1 -3
- package/reference/sdk/cli-management.mdx +199 -30
- package/reference/sdk/cli.mdx +90 -13
- package/reference/sdk/framework/agent.mdx +6 -0
- package/reference/sdk/platform-tools/adapters-platform.mdx +3 -1
- package/reference/sdk/platform-tools/index.mdx +0 -2
- package/reference/sdk/resources/patterns.mdx +14 -6
- package/reference/ui/exports.mdx +1 -0
package/dist/worker/index.js
CHANGED
|
@@ -3058,8 +3058,8 @@ function preview(text, n = 120) {
|
|
|
3058
3058
|
// ../core/src/platform/utils/token-counter.ts
|
|
3059
3059
|
var CHARS_PER_TOKEN = 3.5;
|
|
3060
3060
|
function estimateTokens(text) {
|
|
3061
|
-
const
|
|
3062
|
-
const chars =
|
|
3061
|
+
const content2 = typeof text === "string" ? text : JSON.stringify(text);
|
|
3062
|
+
const chars = content2.length;
|
|
3063
3063
|
return Math.ceil(chars / CHARS_PER_TOKEN);
|
|
3064
3064
|
}
|
|
3065
3065
|
function truncationCharBudget(maxTokens, noticeLength = 0) {
|
|
@@ -3099,7 +3099,7 @@ function buildUntrustedDataPolicy(securityLevel) {
|
|
|
3099
3099
|
}
|
|
3100
3100
|
function buildAgentMessages(systemPrompt, memory, currentInput, securityLevel, conversationHistory = []) {
|
|
3101
3101
|
const policy = buildUntrustedDataPolicy(securityLevel);
|
|
3102
|
-
const historyMessages = conversationHistory.map(({ role, content }) => ({ role, content }));
|
|
3102
|
+
const historyMessages = conversationHistory.map(({ role, content: content2 }) => ({ role, content: content2 }));
|
|
3103
3103
|
if (historyMessages.length > 0) {
|
|
3104
3104
|
historyMessages[historyMessages.length - 1].cacheBreakpoint = true;
|
|
3105
3105
|
}
|
|
@@ -3613,11 +3613,11 @@ function safeStructuralPrefix(raw, cutAt) {
|
|
|
3613
3613
|
const base = stripDanglingTail(raw.slice(0, cutPoint), stack[stack.length - 1] === "}");
|
|
3614
3614
|
return base + [...stack].reverse().join("");
|
|
3615
3615
|
}
|
|
3616
|
-
function truncateContent(
|
|
3617
|
-
const estimated = estimateTokens(
|
|
3618
|
-
if (estimated <= maxTokens) return { content };
|
|
3616
|
+
function truncateContent(content2, maxTokens) {
|
|
3617
|
+
const estimated = estimateTokens(content2);
|
|
3618
|
+
if (estimated <= maxTokens) return { content: content2 };
|
|
3619
3619
|
const cutAt = truncationCharBudget(maxTokens, CLOSING_BRACKET_RESERVE);
|
|
3620
|
-
const safeContent = safeStructuralPrefix(
|
|
3620
|
+
const safeContent = safeStructuralPrefix(content2, cutAt);
|
|
3621
3621
|
const omittedTokens = estimated - maxTokens;
|
|
3622
3622
|
return { content: safeContent, truncated: { omittedTokens } };
|
|
3623
3623
|
}
|
|
@@ -3713,9 +3713,9 @@ async function executeToolCall(iterationContext, action) {
|
|
|
3713
3713
|
const validatedResult = tool.outputSchema.parse(rawResult);
|
|
3714
3714
|
let boundedResult = validatedResult;
|
|
3715
3715
|
if (tool.maxOutputTokens !== void 0) {
|
|
3716
|
-
const { content, truncated } = truncateContent(JSON.stringify(validatedResult), tool.maxOutputTokens);
|
|
3716
|
+
const { content: content2, truncated } = truncateContent(JSON.stringify(validatedResult), tool.maxOutputTokens);
|
|
3717
3717
|
if (truncated) {
|
|
3718
|
-
boundedResult =
|
|
3718
|
+
boundedResult = content2;
|
|
3719
3719
|
}
|
|
3720
3720
|
}
|
|
3721
3721
|
const toolEndTime = Date.now();
|
|
@@ -4024,7 +4024,7 @@ async function processMemory(memoryManager, response, logger, iteration) {
|
|
|
4024
4024
|
if (!response.memoryOps) return;
|
|
4025
4025
|
const { memoryOps } = response;
|
|
4026
4026
|
if (memoryOps.set) {
|
|
4027
|
-
for (const [key,
|
|
4027
|
+
for (const [key, content2] of Object.entries(memoryOps.set)) {
|
|
4028
4028
|
if (!validateMemoryKeyOwnership(key, logger, iteration)) {
|
|
4029
4029
|
continue;
|
|
4030
4030
|
}
|
|
@@ -4032,7 +4032,7 @@ async function processMemory(memoryManager, response, logger, iteration) {
|
|
|
4032
4032
|
"memory-set",
|
|
4033
4033
|
iteration,
|
|
4034
4034
|
// Auto-stringify non-string values (arrays, objects, etc.)
|
|
4035
|
-
() => memoryManager.set(key, typeof
|
|
4035
|
+
() => memoryManager.set(key, typeof content2 === "string" ? content2 : JSON.stringify(content2)),
|
|
4036
4036
|
() => `Set: ${key}`
|
|
4037
4037
|
);
|
|
4038
4038
|
}
|
|
@@ -4152,13 +4152,13 @@ var MAX_TOOL_RESULT_TOKENS = 4e3;
|
|
|
4152
4152
|
|
|
4153
4153
|
// ../core/src/execution/engine/agent/memory/manager.ts
|
|
4154
4154
|
var ENVELOPE_FULL_RESULT_WINDOW = 3;
|
|
4155
|
-
function parseIfJson(
|
|
4156
|
-
const trimmed =
|
|
4157
|
-
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return
|
|
4155
|
+
function parseIfJson(content2) {
|
|
4156
|
+
const trimmed = content2.trim();
|
|
4157
|
+
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return content2;
|
|
4158
4158
|
try {
|
|
4159
|
-
return JSON.parse(
|
|
4159
|
+
return JSON.parse(content2);
|
|
4160
4160
|
} catch {
|
|
4161
|
-
return
|
|
4161
|
+
return content2;
|
|
4162
4162
|
}
|
|
4163
4163
|
}
|
|
4164
4164
|
function isInTurnScope(entry, currentTurn) {
|
|
@@ -4221,8 +4221,8 @@ var MemoryManager = class {
|
|
|
4221
4221
|
* @param key - Session memory key
|
|
4222
4222
|
* @param content - String content from agent
|
|
4223
4223
|
*/
|
|
4224
|
-
set(key,
|
|
4225
|
-
const entryTokens = estimateTokens(
|
|
4224
|
+
set(key, content2, source = "model") {
|
|
4225
|
+
const entryTokens = estimateTokens(content2);
|
|
4226
4226
|
let truncated;
|
|
4227
4227
|
if (entryTokens > MAX_SINGLE_ENTRY_TOKENS) {
|
|
4228
4228
|
const truncateTime = Date.now();
|
|
@@ -4234,13 +4234,13 @@ var MemoryManager = class {
|
|
|
4234
4234
|
truncateTime,
|
|
4235
4235
|
0
|
|
4236
4236
|
);
|
|
4237
|
-
const result = truncateContent(
|
|
4238
|
-
|
|
4237
|
+
const result = truncateContent(content2, MAX_SINGLE_ENTRY_TOKENS);
|
|
4238
|
+
content2 = result.content;
|
|
4239
4239
|
truncated = result.truncated;
|
|
4240
4240
|
}
|
|
4241
4241
|
this.memory.sessionMemory[key] = {
|
|
4242
4242
|
type: "context",
|
|
4243
|
-
content,
|
|
4243
|
+
content: content2,
|
|
4244
4244
|
timestamp: Date.now(),
|
|
4245
4245
|
turnNumber: null,
|
|
4246
4246
|
// Session memory entries are not turn-specific
|
|
@@ -4250,7 +4250,7 @@ var MemoryManager = class {
|
|
|
4250
4250
|
...truncated && { truncated },
|
|
4251
4251
|
// Screened once, here, instead of by re-scanning the whole envelope on every iteration this
|
|
4252
4252
|
// key gets re-sent for — see `MemoryEntry.warnings`.
|
|
4253
|
-
warnings: sanitizeUserInput(
|
|
4253
|
+
warnings: sanitizeUserInput(content2).warnings
|
|
4254
4254
|
};
|
|
4255
4255
|
}
|
|
4256
4256
|
/**
|
|
@@ -4288,14 +4288,14 @@ var MemoryManager = class {
|
|
|
4288
4288
|
iterationNumber: entry.iterationNumber
|
|
4289
4289
|
});
|
|
4290
4290
|
}
|
|
4291
|
-
let
|
|
4291
|
+
let content2 = entry.content;
|
|
4292
4292
|
let truncated;
|
|
4293
4293
|
if (entry.type === "tool-result" || entry.type === "error") {
|
|
4294
|
-
const before =
|
|
4295
|
-
const result = truncateContent(
|
|
4296
|
-
|
|
4294
|
+
const before = content2;
|
|
4295
|
+
const result = truncateContent(content2, MAX_TOOL_RESULT_TOKENS);
|
|
4296
|
+
content2 = result.content;
|
|
4297
4297
|
truncated = result.truncated;
|
|
4298
|
-
if (
|
|
4298
|
+
if (content2 !== before) {
|
|
4299
4299
|
const truncateTime = Date.now();
|
|
4300
4300
|
this.logger?.action(
|
|
4301
4301
|
"memory-tool-result-truncate",
|
|
@@ -4309,12 +4309,12 @@ var MemoryManager = class {
|
|
|
4309
4309
|
}
|
|
4310
4310
|
this.memory.history.push({
|
|
4311
4311
|
...entry,
|
|
4312
|
-
content,
|
|
4312
|
+
content: content2,
|
|
4313
4313
|
timestamp: Date.now(),
|
|
4314
4314
|
...truncated && { truncated },
|
|
4315
4315
|
// Screened once, here, instead of by re-scanning the whole accumulated envelope on every
|
|
4316
4316
|
// iteration this entry gets re-sent for — see `MemoryEntry.warnings`.
|
|
4317
|
-
warnings: sanitizeUserInput(
|
|
4317
|
+
warnings: sanitizeUserInput(content2).warnings
|
|
4318
4318
|
});
|
|
4319
4319
|
this.autoCompact();
|
|
4320
4320
|
}
|
|
@@ -6123,28 +6123,42 @@ z.object({
|
|
|
6123
6123
|
limit: z.number().int(),
|
|
6124
6124
|
offset: z.number().int()
|
|
6125
6125
|
});
|
|
6126
|
-
var AcqArtifactOwnerKindSchema = z.enum(["company", "contact", "deal", "list", "list_member"]);
|
|
6126
|
+
var AcqArtifactOwnerKindSchema = z.enum(["company", "contact", "deal", "list", "list_member", "organization"]);
|
|
6127
6127
|
z.object({
|
|
6128
6128
|
ownerKind: AcqArtifactOwnerKindSchema,
|
|
6129
|
-
ownerId: UuidSchema
|
|
6129
|
+
ownerId: UuidSchema.optional()
|
|
6130
6130
|
}).strict();
|
|
6131
|
+
var PipelineIdSchema = z.string().trim().min(1).max(255);
|
|
6131
6132
|
z.object({
|
|
6132
6133
|
ownerKind: AcqArtifactOwnerKindSchema,
|
|
6133
|
-
|
|
6134
|
+
// Nullable + optional: an org-owned artifact (ownerKind: 'organization') has no
|
|
6135
|
+
// single owning entity row. See the comment on AcqArtifactOwnerKindSchema above.
|
|
6136
|
+
ownerId: UuidSchema.nullable().optional(),
|
|
6134
6137
|
kind: z.string().trim().min(1).max(255),
|
|
6135
6138
|
content: z.record(z.string(), z.unknown()),
|
|
6136
|
-
sourceExecutionId: UuidSchema.optional()
|
|
6139
|
+
sourceExecutionId: UuidSchema.optional(),
|
|
6140
|
+
// Nullable + optional: acquisition's own artifacts (audits, proposals, ICP docs) predate the
|
|
6141
|
+
// pipeline concept and have none. `getActiveArtifact` filters on it, so any artifact meant to
|
|
6142
|
+
// be resolvable as "the active document for pipeline X" MUST supply it -- artifacts-platform-tool
|
|
6143
|
+
// .mdx Step 3 defect 1.
|
|
6144
|
+
pipelineId: PipelineIdSchema.nullable().optional()
|
|
6137
6145
|
}).strict();
|
|
6138
6146
|
var AcqArtifactResponseSchema = z.object({
|
|
6139
6147
|
id: z.string(),
|
|
6140
6148
|
organizationId: z.string(),
|
|
6141
6149
|
ownerKind: z.string(),
|
|
6142
|
-
|
|
6150
|
+
// Nullable as of content-pipeline-foundation D14: an org-owned artifact has no owning entity row.
|
|
6151
|
+
// CreateArtifactRequestSchema already accepted a null ownerId; this response schema not doing so
|
|
6152
|
+
// was Step 3 defect 2 -- an org-owned artifact inserted fine and then failed serialization.
|
|
6153
|
+
ownerId: z.string().nullable(),
|
|
6143
6154
|
kind: z.string(),
|
|
6155
|
+
pipelineId: z.string().nullable(),
|
|
6144
6156
|
content: z.record(z.string(), z.unknown()),
|
|
6145
6157
|
sourceExecutionId: z.string().nullable(),
|
|
6146
6158
|
createdBy: z.string().nullable(),
|
|
6147
6159
|
createdAt: z.string(),
|
|
6160
|
+
updatedAt: z.string(),
|
|
6161
|
+
isActive: z.boolean(),
|
|
6148
6162
|
version: z.number().int()
|
|
6149
6163
|
});
|
|
6150
6164
|
z.object({
|
|
@@ -6793,6 +6807,31 @@ var list = createAdapter("list", [
|
|
|
6793
6807
|
"listPendingContactIds"
|
|
6794
6808
|
]);
|
|
6795
6809
|
|
|
6810
|
+
// src/worker/adapters/artifacts.ts
|
|
6811
|
+
var artifacts = createAdapter("artifacts", [
|
|
6812
|
+
"listArtifacts",
|
|
6813
|
+
"createArtifact",
|
|
6814
|
+
"getActive"
|
|
6815
|
+
]);
|
|
6816
|
+
|
|
6817
|
+
// src/worker/adapters/content.ts
|
|
6818
|
+
var METHODS14 = [
|
|
6819
|
+
"createItem",
|
|
6820
|
+
"getItem",
|
|
6821
|
+
"listItems",
|
|
6822
|
+
"updateItem",
|
|
6823
|
+
"createAttempt",
|
|
6824
|
+
"listAttempts",
|
|
6825
|
+
"updateAttempt",
|
|
6826
|
+
"createSourceAsset",
|
|
6827
|
+
"getSourceAsset",
|
|
6828
|
+
"listSourceAssets",
|
|
6829
|
+
"updateSourceAsset",
|
|
6830
|
+
"createDistribution",
|
|
6831
|
+
"updateDistribution"
|
|
6832
|
+
];
|
|
6833
|
+
var content = createAdapter("content", METHODS14);
|
|
6834
|
+
|
|
6796
6835
|
// src/worker/adapters/pdf.ts
|
|
6797
6836
|
var pdf = createAdapter("pdf", ["render", "renderToBuffer"]);
|
|
6798
6837
|
|
|
@@ -7352,4 +7391,4 @@ if (workerData != null && workerData.kind === "static") {
|
|
|
7352
7391
|
})();
|
|
7353
7392
|
}
|
|
7354
7393
|
|
|
7355
|
-
export { ListBuilderResultSchema, ListBuilderResultsSchema, PlatformToolError, acqDb, approval, classifyPlatformToolError, createAdapter, createAnymailfinderAdapter, createApifyAdapter, createAttioAdapter, createClickUpAdapter, createDropboxAdapter, createGmailAdapter, createGoogleSheetsAdapter, createInstantlyAdapter, createMillionVerifierAdapter, createResendAdapter, createSignatureApiAdapter, createStripeAdapter, createTombaAdapter, crm, email, executeWorkflow, execution, generateHmacToken, list, listBuilderWorkflow, llm, notifications, pdf, platform, projects, scheduler, startWorker, storage };
|
|
7394
|
+
export { ListBuilderResultSchema, ListBuilderResultsSchema, PlatformToolError, acqDb, approval, artifacts, classifyPlatformToolError, content, createAdapter, createAnymailfinderAdapter, createApifyAdapter, createAttioAdapter, createClickUpAdapter, createDropboxAdapter, createGmailAdapter, createGoogleSheetsAdapter, createInstantlyAdapter, createMillionVerifierAdapter, createResendAdapter, createSignatureApiAdapter, createStripeAdapter, createTombaAdapter, crm, email, executeWorkflow, execution, generateHmacToken, list, listBuilderWorkflow, llm, notifications, pdf, platform, projects, scheduler, startWorker, storage };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevasis/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.47.0",
|
|
4
4
|
"description": "SDK for building Elevasis organization resources",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"tsup": "^8.0.0",
|
|
56
56
|
"typescript": "5.9.2",
|
|
57
57
|
"zod": "^4.1.0",
|
|
58
|
-
"@repo/core": "0.
|
|
58
|
+
"@repo/core": "0.62.0",
|
|
59
59
|
"@repo/eslint-config": "0.0.0",
|
|
60
60
|
"@repo/typescript-config": "0.0.0"
|
|
61
61
|
},
|
package/reference/_navigation.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Auto-generated from the package reference manifests.
|
|
6
6
|
|
|
7
|
-
Package entries indexed:
|
|
7
|
+
Package entries indexed: 64.
|
|
8
8
|
|
|
9
9
|
## @elevasis/core / Auth
|
|
10
10
|
|
|
@@ -12,6 +12,12 @@ Package entries indexed: 61.
|
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| Auth | `packages/core/src/README.md` | Published browser-safe auth contracts, AccessKeys, and Access Model primitives. | (not specified) |
|
|
14
14
|
|
|
15
|
+
## @elevasis/core / Content
|
|
16
|
+
|
|
17
|
+
| Resource | Location | Description | When to Load |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| Content | `packages/core/src/content/README.md` | Published content pipeline API schemas: content items, the payload envelope, a content-keyed processing state, attempts, review, and distributions, plus platform-content typed interfaces. | (not specified) |
|
|
20
|
+
|
|
15
21
|
## @elevasis/core / Core
|
|
16
22
|
|
|
17
23
|
| Resource | Location | Description | When to Load |
|
|
@@ -35,6 +41,7 @@ Package entries indexed: 61.
|
|
|
35
41
|
| Resource | Location | Description | When to Load |
|
|
36
42
|
| --- | --- | --- | --- |
|
|
37
43
|
| Organization Model | `packages/core/src/organization-model/README.md` | Published organization-model schema, defaults, resolver, and types. | (not specified) |
|
|
44
|
+
| System Interface Readiness | `packages/core/src/organization-model/readiness/README.md` | Generic System Interface readiness engine, plus registerBuiltInReadinessProfile — the extension point for registering a readiness profile that carries real structural validation. | (not specified) |
|
|
38
45
|
|
|
39
46
|
## @elevasis/core / Testing
|
|
40
47
|
|
|
@@ -102,6 +109,7 @@ Package entries indexed: 61.
|
|
|
102
109
|
| Features Notes | `packages/ui/src/features/README.md` | Published Notes panel view and supporting note components for shared right-panel integrations. | (not specified) |
|
|
103
110
|
| Features Right Panel Host | `packages/ui/src/features/README.md` | Published right-panel host provider, layer, trigger, keyboard shortcut, store, and view contract. | (not specified) |
|
|
104
111
|
| Features Public Agent Chat | `packages/ui/src/features/README.md` | Published public agent chat surface for downstream shells. | (not specified) |
|
|
112
|
+
| Features Content | `packages/ui/src/features/README.md` | Published, data-free content review card surface (ContentReviewCard and its sub-components) for downstream shells. | (not specified) |
|
|
105
113
|
|
|
106
114
|
## @elevasis/ui / Foundation
|
|
107
115
|
|
|
@@ -186,6 +194,7 @@ Universal scaffold documentation for all SDK projects. Source locations are co-l
|
|
|
186
194
|
| Gate by System or Admin | `scaffold/recipes/gate-by-feature-or-admin.md` | Decision table and recipes for gating routes, sidebar entries, and UI elements with AccessGuard and the unified Access Model. |
|
|
187
195
|
| Build and Extend CRM | `scaffold/recipes/extend-crm.md` | Map the CRM platform primitives available to SDK projects: shared UI pages, sidebar composition, data hooks, action definitions, workflow adapters, System Interfaces, and org-model extension boundaries. |
|
|
188
196
|
| Build and Extend Lead Gen | `scaffold/recipes/extend-lead-gen.md` | Map the lead-gen platform primitives available to SDK projects: shared UI pages, provider-injected Organization Model config, data hooks, list/member state, artifacts, workflow adapters, System Interfaces, and tenant-owned extension boundaries. |
|
|
197
|
+
| Build and Extend Content | `scaffold/recipes/extend-content.md` | Map the content platform primitives available to SDK projects: pipeline and step catalogs, shared review/pipeline/distribution pages, data hooks, the content workflow adapter, and org-model extension boundaries. |
|
|
189
198
|
| Customize CRM Actions | `scaffold/recipes/customize-crm-actions.md` | Add, hide, or replace CRM deal action buttons in a template-derived project, and override default platform action workflows with project-owned implementations. |
|
|
190
199
|
| Customize Knowledge Browser | `scaffold/recipes/customize-knowledge-browser.md` | Author knowledge nodes and customize the Knowledge Browser in a template-derived project -- from zero-config authoring through sidebar composition, custom dispatchers, and direct query access. |
|
|
191
200
|
| Query the Knowledge Graph | `scaffold/recipes/query-the-knowledge-graph.md` | Use the `knowledge:*` CLI subcommands on `elevasis-sdk` (external projects) and `elevasis` (monorepo) to browse, inspect, and traverse the OrganizationModel knowledge graph via six mount axes. |
|
|
@@ -271,7 +280,7 @@ Docs-site pages indexed: 38.
|
|
|
271
280
|
|
|
272
281
|
| Page | Location | Description |
|
|
273
282
|
| --- | --- | --- |
|
|
274
|
-
| CLI Management Commands | `sdk/cli-management.mdx` | elevasis-sdk management commands -- project, note, acquisition, client, agent, session, queue, schedule, om, ui, and
|
|
283
|
+
| CLI Management Commands | `sdk/cli-management.mdx` | elevasis-sdk management commands -- project, note, acquisition, client, agent, session, queue, schedule, om, ui, skill, and content subcommand families |
|
|
275
284
|
| CLI Reference | `sdk/cli.mdx` | Core elevasis-sdk CLI commands -- validate, deploy, execute, inspect resources, manage credentials, rename, and enumerate the command catalog |
|
|
276
285
|
| Concepts Reference | `sdk/concepts.mdx` | Plain-English explanations of Elevasis SDK concepts -- glossary, workflow analogies, Zod schemas, execution model, platform tools, and design decisions |
|
|
277
286
|
| When to Reach for the define* Builders | `sdk/define-builders.mdx` | defineWorkflow, defineStep, defineContract, defineResource, and defineTopology exist for two different reasons -- this page teaches which reason applies before you pick a builder over a plain object literal. |
|
|
@@ -287,7 +296,7 @@ Docs-site pages indexed: 38.
|
|
|
287
296
|
| Human-in-the-Loop (HITL) Workflows | `sdk/human-in-the-loop.mdx` | How a workflow step opens an approval task, how it reaches the command queue, and how selecting an action resumes work -- the story that connects the approval adapter, checkpoint metadata, and the queue CLI. |
|
|
288
297
|
| Elevasis SDK | `sdk/index.mdx` | Build and deploy workflows, agents, and resources with the Elevasis SDK |
|
|
289
298
|
| Integration Adapters | `sdk/platform-tools/adapters-integration.mdx` | Auto-generated table of all 13 integration (credential-bound) adapters exported from @elevasis/sdk/worker, derived from static analysis of the adapter source files. |
|
|
290
|
-
| Platform Adapters | `sdk/platform-tools/adapters-platform.mdx` | Auto-generated table of all
|
|
299
|
+
| Platform Adapters | `sdk/platform-tools/adapters-platform.mdx` | Auto-generated table of all 14 platform (singleton, no credential) adapters exported from @elevasis/sdk/worker, derived from static analysis of the adapter source files. |
|
|
291
300
|
| Platform Tools | `sdk/platform-tools/index.mdx` | Access 25 adapters (13 integration + 12 platform) from your SDK workflows -- typed adapters, credential security model, and working code examples |
|
|
292
301
|
| Adapter Type Safety | `sdk/platform-tools/type-safety.mdx` | SDK worker adapter type safety patterns - required fields, discriminated unions, and intentionally loose types |
|
|
293
302
|
| The Deployment Spec Pattern | `sdk/project-deployment-spec.mdx` | How projectDeploymentSpec and defineWorkflowConfig assemble the DeploymentSpec a scaffolded project actually ships, using operations/src/index.ts as the reference. |
|
|
@@ -15,6 +15,20 @@
|
|
|
15
15
|
"referencePath": "packages/core/src/README.md",
|
|
16
16
|
"publishedExportPath": "./dist/auth/index.js"
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
"packageName": "@elevasis/core",
|
|
20
|
+
"packageDir": "packages/core",
|
|
21
|
+
"subpath": "./content",
|
|
22
|
+
"kind": "subpath",
|
|
23
|
+
"title": "Content",
|
|
24
|
+
"description": "Published content pipeline API schemas: content items, the payload envelope, a content-keyed processing state, attempts, review, and distributions, plus platform-content typed interfaces.",
|
|
25
|
+
"group": "Content",
|
|
26
|
+
"order": 1,
|
|
27
|
+
"sourcePath": "packages/core/src/content/index.ts",
|
|
28
|
+
"docPath": "packages/core/src/content/README.md",
|
|
29
|
+
"referencePath": "packages/core/src/content/README.md",
|
|
30
|
+
"publishedExportPath": "./dist/content/index.js"
|
|
31
|
+
},
|
|
18
32
|
{
|
|
19
33
|
"packageName": "@elevasis/core",
|
|
20
34
|
"packageDir": "packages/core",
|
|
@@ -71,6 +85,20 @@
|
|
|
71
85
|
"referencePath": "packages/core/src/organization-model/README.md",
|
|
72
86
|
"publishedExportPath": "./dist/organization-model/index.js"
|
|
73
87
|
},
|
|
88
|
+
{
|
|
89
|
+
"packageName": "@elevasis/core",
|
|
90
|
+
"packageDir": "packages/core",
|
|
91
|
+
"subpath": "./organization-model/readiness",
|
|
92
|
+
"kind": "subpath",
|
|
93
|
+
"title": "System Interface Readiness",
|
|
94
|
+
"description": "Generic System Interface readiness engine, plus registerBuiltInReadinessProfile — the extension point for registering a readiness profile that carries real structural validation.",
|
|
95
|
+
"group": "Organization Model",
|
|
96
|
+
"order": 2,
|
|
97
|
+
"sourcePath": "packages/core/src/organization-model/readiness/index.ts",
|
|
98
|
+
"docPath": "packages/core/src/organization-model/readiness/README.md",
|
|
99
|
+
"referencePath": "packages/core/src/organization-model/readiness/README.md",
|
|
100
|
+
"publishedExportPath": "./dist/organization-model/readiness/index.js"
|
|
101
|
+
},
|
|
74
102
|
{
|
|
75
103
|
"packageName": "@elevasis/core",
|
|
76
104
|
"packageDir": "packages/core",
|
|
@@ -449,6 +477,20 @@
|
|
|
449
477
|
"referencePath": "packages/ui/src/features/README.md",
|
|
450
478
|
"publishedExportPath": "./dist/features/public-agent-chat/index.js"
|
|
451
479
|
},
|
|
480
|
+
{
|
|
481
|
+
"packageName": "@elevasis/ui",
|
|
482
|
+
"packageDir": "packages/ui",
|
|
483
|
+
"subpath": "./features/content",
|
|
484
|
+
"kind": "subpath",
|
|
485
|
+
"title": "Features Content",
|
|
486
|
+
"description": "Published, data-free content review card surface (ContentReviewCard and its sub-components) for downstream shells.",
|
|
487
|
+
"group": "Features",
|
|
488
|
+
"order": 16,
|
|
489
|
+
"sourcePath": "packages/ui/src/features/content/index.ts",
|
|
490
|
+
"docPath": "packages/ui/src/features/README.md",
|
|
491
|
+
"referencePath": "packages/ui/src/features/README.md",
|
|
492
|
+
"publishedExportPath": "./dist/features/content/index.js"
|
|
493
|
+
},
|
|
452
494
|
{
|
|
453
495
|
"packageName": "@elevasis/ui",
|
|
454
496
|
"packageDir": "packages/ui",
|
|
@@ -11,6 +11,8 @@ description: "Auto-generated catalog of all published @elevasis/core subpath exp
|
|
|
11
11
|
| `@elevasis/core` | Core | Core | Published core wrapper for the curated contract surface. |
|
|
12
12
|
| `@elevasis/core/auth` | Auth | Auth | Published browser-safe auth contracts, AccessKeys, and Access Model primitives. |
|
|
13
13
|
| `@elevasis/core/organization-model` | Organization Model | Organization Model | Published organization-model schema, defaults, resolver, and types. |
|
|
14
|
+
| `@elevasis/core/organization-model/readiness` | System Interface Readiness | Organization Model | Generic System Interface readiness engine, plus registerBuiltInReadinessProfile — the extension point for registering a readiness profile that carries real structural validation. |
|
|
14
15
|
| `@elevasis/core/knowledge` | Knowledge | Knowledge | Published knowledge query layer: bySystem/byKind/byOwner/governs/governedBy queries, parsePath, and output formatters. |
|
|
16
|
+
| `@elevasis/core/content` | Content | Content | Published content pipeline API schemas: content items, the payload envelope, a content-keyed processing state, attempts, review, and distributions, plus platform-content typed interfaces. |
|
|
15
17
|
| `@elevasis/core/entities` | Entities | Entities | Published base entity contracts (Project, Milestone, Task, Deal, Company, Contact) generic over a metadata extension slot. |
|
|
16
18
|
| `@elevasis/core/test-utils` | Test Utilities | Testing | Published test fixtures, mocks, and shared helpers for downstream automated tests. |
|
|
@@ -47,6 +47,9 @@ export type Deal = BaseDeal
|
|
|
47
47
|
|
|
48
48
|
## Recipe
|
|
49
49
|
|
|
50
|
-
The full pattern is documented in the SDK scaffold bundle
|
|
50
|
+
The full pattern is documented in the SDK scaffold bundle. Internally, read the workspace source at
|
|
51
|
+
`packages/sdk/docs/scaffold/recipes/extend-a-base-entity.md`; a tenant reads the published mirror at
|
|
52
|
+
`operations/node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-a-base-entity.md`, which does
|
|
53
|
+
not resolve from the monorepo root.
|
|
51
54
|
|
|
52
55
|
The canonical template demo lives at `external/_template/core/types/entities.ts`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @elevasis/core/content
|
|
2
|
+
|
|
3
|
+
Content pipeline API schemas, platform-content typed interfaces, and the pure placement helpers the API, the CLI, and the Command Center all share. Browser-safe (no Node APIs).
|
|
4
|
+
|
|
5
|
+
The helpers live here rather than in `@repo/ui` because they have three consumers and only one of them is a React app. `packages/sdk` has no `@repo/ui` dependency, so a CLI board would have needed its own copy of the placement rule — and two copies of a rule like this diverge. That is not hypothetical: the open-review-gate predicate was inline in the `/queue` handler, was about to be hand-copied into review validation and the review page, and had already produced a live wrong answer before it was consolidated into `review-gates.ts` on 2026-08-15. `derive-board.ts` and `item-identity.ts` moved here the same day for the same reason; `@repo/ui` re-exports both from `features/content/board/`.
|
|
6
|
+
|
|
7
|
+
## Surface
|
|
8
|
+
|
|
9
|
+
| Export | Purpose |
|
|
10
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `ContentItemResponseSchema`, `CreateContentItemRequestSchema`, `UpdateContentItemRequestSchema` | `content_items` transport shape. `processingState` is intentionally absent from create/update — factory-write-only. |
|
|
12
|
+
| `ContentProcessingStateSchema` | `{ stepKey: { status, data? } }`, keyed by `ContentStepKeySchema` — a content-specific key, not lead-gen's `LeadGenStageKeySchema`. |
|
|
13
|
+
| `ContentPayloadEnvelopeSchema` | The producer's immutable emission stored in `payload`. Never edited — `body` is the human's canonical text. |
|
|
14
|
+
| `ReviewContentItemRequestSchema` | Approve, or reject with a required `rejectReason`. Writes `reviewed_at` / `reviewed_by`. |
|
|
15
|
+
| `ContentItemAttemptResponseSchema`, `CreateContentItemAttemptRequestSchema` | `content_item_attempts` transport shape. No `attemptNumber` field on create — the API service assigns it inside the write. `stepKey` is producer-supplied and nullable. |
|
|
16
|
+
| `ContentDistributionResponseSchema`, `CreateContentDistributionRequestSchema`, `UpdateContentDistributionRequestSchema` | `content_distributions` transport shape, including the manual-publish fields (`publishMethod`, `platformPostId`, `platformUrl`). |
|
|
17
|
+
| `PlatformContent`, `YouTubeContent`, `LinkedInContent`, `InstagramContent`, `XContent`, `AnyPlatformContent`, `PlatformContentMap`, `Platform` | Typed interfaces for platform-specific content stored in `content_distributions.platform_content`. |
|
|
18
|
+
| `isOpenContentReviewGate`, `getOpenContentReviewGates` | The one predicate deciding whether a `processing_state` entry is an open, unreviewed `queued` gate. Consumed by the `/queue` handler, `reviewItem`'s `stepKey` validation, and the review page. |
|
|
19
|
+
| `deriveContentBoard`, `ContentBoard`, `ContentBoardCard`, `ContentBoardColumn`, `ContentBoardGate` | Placement: `(items, pipeline, now)` to columns, gates, waiting counts, plus the `done` and `unplaced` buckets. Pure. Consumed by the Command Center board and `elevasis-sdk content:board`. |
|
|
20
|
+
| `getContentItemIdentity` | Names an item for display when `title` cannot — first non-blank line of `body`, then the first string payload field, then `title`, then `'Untitled'`. |
|
|
21
|
+
|
|
22
|
+
## Step catalog reconciliation
|
|
23
|
+
|
|
24
|
+
`ContentStepKeySchema` is free text today — the content System's step catalog (`content:catalog/<pipeline>-steps`) is authored separately in `packages/elevasis/core/config/organization-model`. Closed-catalog membership is enforced by the caller/API layer via model-injected validators once that catalog lands, mirroring how `LeadGenStageKeySchema` and `CrmStageKeySchema` are validated today.
|