@consciousclouds/conductor-sdk 0.1.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/CHANGELOG.md +30 -0
- package/LICENSE +171 -0
- package/README.md +64 -0
- package/dist/capabilities.d.ts +17 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +18 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/client/conductor-client.d.ts +88 -0
- package/dist/client/conductor-client.d.ts.map +1 -0
- package/dist/client/conductor-client.js +213 -0
- package/dist/client/conductor-client.js.map +1 -0
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +3 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/types.d.ts +208 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +3 -0
- package/dist/generated/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/personalities.d.ts +12 -0
- package/dist/personalities.d.ts.map +1 -0
- package/dist/personalities.js +9 -0
- package/dist/personalities.js.map +1 -0
- package/dist/tools.d.ts +13 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +10 -0
- package/dist/tools.js.map +1 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/validate/index.d.ts +219 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +131 -0
- package/dist/validate/index.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime validation of the Conductor wire shapes (zod mirror of the JSON
|
|
3
|
+
* Schema).
|
|
4
|
+
*
|
|
5
|
+
* The JSON Schema under platform/contracts/conductor/v1/ is authoritative; this
|
|
6
|
+
* zod schema mirrors it for ergonomic in-process validation. Request envelopes
|
|
7
|
+
* and the SSE envelope are closed (`.strict()`); each event's `data` object is
|
|
8
|
+
* open (`.passthrough()`) so consumers ignore fields they don't know.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/** The frozen SSE event names, in contract order. */
|
|
14
|
+
export const EVENT_NAMES = [
|
|
15
|
+
'started',
|
|
16
|
+
'delta',
|
|
17
|
+
'tool_start',
|
|
18
|
+
'tool_done',
|
|
19
|
+
'approval_required',
|
|
20
|
+
'completed',
|
|
21
|
+
'error',
|
|
22
|
+
'routed',
|
|
23
|
+
];
|
|
24
|
+
/** The capability string pattern, mirroring capability.schema.json. */
|
|
25
|
+
export const capabilitySchema = z.string().regex(/^[a-z_]+\.[a-z_]+$/);
|
|
26
|
+
export const turnRequestSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
personality_id: z.string().min(1).optional(),
|
|
29
|
+
prompt: z.string().min(1),
|
|
30
|
+
})
|
|
31
|
+
.strict();
|
|
32
|
+
export const resolveRequestSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
decision: z.enum(['approve', 'reject']),
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
37
|
+
export const resolveResultSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
approval_id: z.string(),
|
|
40
|
+
status: z.string(),
|
|
41
|
+
tool: z.string(),
|
|
42
|
+
result: z.record(z.unknown()).nullable(),
|
|
43
|
+
outcome: z.string(),
|
|
44
|
+
})
|
|
45
|
+
.strict();
|
|
46
|
+
// --- per-event data payloads (open: passthrough) -----------------------------
|
|
47
|
+
const startedData = z
|
|
48
|
+
.object({ turn_id: z.string(), personality: z.string(), tier: z.string() })
|
|
49
|
+
.passthrough();
|
|
50
|
+
const deltaData = z.object({ text: z.string() }).passthrough();
|
|
51
|
+
const toolStartData = z
|
|
52
|
+
.object({ tool: z.string(), status: z.string().optional(), message: z.string().optional() })
|
|
53
|
+
.passthrough();
|
|
54
|
+
const toolDoneData = z
|
|
55
|
+
.object({ tool: z.string(), status: z.string().optional(), message: z.string().optional() })
|
|
56
|
+
.passthrough();
|
|
57
|
+
const approvalRequiredData = z
|
|
58
|
+
.object({
|
|
59
|
+
turn_id: z.string(),
|
|
60
|
+
approval_id: z.string(),
|
|
61
|
+
pending: z
|
|
62
|
+
.object({ tool_call_id: z.string(), tool: z.string() })
|
|
63
|
+
.passthrough(),
|
|
64
|
+
})
|
|
65
|
+
.passthrough();
|
|
66
|
+
const completedData = z
|
|
67
|
+
.object({
|
|
68
|
+
turn_id: z.string(),
|
|
69
|
+
calls: z.number(),
|
|
70
|
+
tool_calls: z.number(),
|
|
71
|
+
input_tokens: z.number(),
|
|
72
|
+
output_tokens: z.number(),
|
|
73
|
+
cost_usd: z.number(),
|
|
74
|
+
})
|
|
75
|
+
.passthrough();
|
|
76
|
+
const errorData = z.object({ code: z.string(), message: z.string() }).passthrough();
|
|
77
|
+
const routedData = z
|
|
78
|
+
.object({
|
|
79
|
+
kind: z.enum(['navigation', 'action']),
|
|
80
|
+
target: z.string(),
|
|
81
|
+
mode: z.enum(['navigate', 'open-view', 'load-source']),
|
|
82
|
+
params: z.record(z.unknown()).optional(),
|
|
83
|
+
correlation_id: z.string().optional(),
|
|
84
|
+
})
|
|
85
|
+
.passthrough();
|
|
86
|
+
/** data payload schema keyed by event name. */
|
|
87
|
+
export const EVENT_DATA_SCHEMAS = {
|
|
88
|
+
started: startedData,
|
|
89
|
+
delta: deltaData,
|
|
90
|
+
tool_start: toolStartData,
|
|
91
|
+
tool_done: toolDoneData,
|
|
92
|
+
approval_required: approvalRequiredData,
|
|
93
|
+
completed: completedData,
|
|
94
|
+
error: errorData,
|
|
95
|
+
routed: routedData,
|
|
96
|
+
};
|
|
97
|
+
/** The SSE envelope: a frozen event name plus its matching data payload. */
|
|
98
|
+
export const sseEventSchema = z
|
|
99
|
+
.object({
|
|
100
|
+
event: z.enum(EVENT_NAMES),
|
|
101
|
+
data: z.record(z.unknown()),
|
|
102
|
+
})
|
|
103
|
+
.strict();
|
|
104
|
+
function toResult(parsed) {
|
|
105
|
+
if (parsed.success)
|
|
106
|
+
return { ok: true, data: parsed.data };
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
errors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** Validate an unknown value as a TurnRequest. */
|
|
113
|
+
export function validateTurnRequest(input) {
|
|
114
|
+
return toResult(turnRequestSchema.safeParse(input));
|
|
115
|
+
}
|
|
116
|
+
/** Validate an unknown value as a ResolveRequest. */
|
|
117
|
+
export function validateResolveRequest(input) {
|
|
118
|
+
return toResult(resolveRequestSchema.safeParse(input));
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Validate an SSE event's name + data. Returns ok=false when the name is not in
|
|
122
|
+
* the frozen set or the data does not match that event's payload schema.
|
|
123
|
+
*/
|
|
124
|
+
export function validateSseEvent(name, data) {
|
|
125
|
+
if (!EVENT_NAMES.includes(name)) {
|
|
126
|
+
return { ok: false, errors: [`event: unknown event name "${name}"`] };
|
|
127
|
+
}
|
|
128
|
+
const schema = EVENT_DATA_SCHEMAS[name];
|
|
129
|
+
return toResult(schema.safeParse(data));
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validate/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@consciousclouds/conductor-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Conscious Clouds Conductor SDK — TurnRequest/SSE event/approval types, tool + personality + capability declaration types, and a thin Conductor client (streaming turn + approval resolve). Framework-agnostic, provider-agnostic. baseUrl is a configurable Conductor-compatible endpoint; the SDK never mints identity and never hard-codes a gateway URL.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./client": {
|
|
15
|
+
"types": "./dist/client/conductor-client.d.ts",
|
|
16
|
+
"import": "./dist/client/conductor-client.js"
|
|
17
|
+
},
|
|
18
|
+
"./types": {
|
|
19
|
+
"types": "./dist/types/index.d.ts",
|
|
20
|
+
"import": "./dist/types/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./tools": {
|
|
23
|
+
"types": "./dist/tools.d.ts",
|
|
24
|
+
"import": "./dist/tools.js"
|
|
25
|
+
},
|
|
26
|
+
"./personalities": {
|
|
27
|
+
"types": "./dist/personalities.d.ts",
|
|
28
|
+
"import": "./dist/personalities.js"
|
|
29
|
+
},
|
|
30
|
+
"./capabilities": {
|
|
31
|
+
"types": "./dist/capabilities.d.ts",
|
|
32
|
+
"import": "./dist/capabilities.js"
|
|
33
|
+
},
|
|
34
|
+
"./validate": {
|
|
35
|
+
"types": "./dist/validate/index.d.ts",
|
|
36
|
+
"import": "./dist/validate/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": ["dist", "README.md", "CHANGELOG.md", "LICENSE"],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc -p tsconfig.build.json",
|
|
42
|
+
"clean": "rm -rf dist",
|
|
43
|
+
"type-check": "tsc --noEmit",
|
|
44
|
+
"test": "bun test",
|
|
45
|
+
"prepublishOnly": "bun run clean && bun run build && bun run type-check"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"zod": "^3.23.8"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^22.10.5",
|
|
52
|
+
"typescript": "^5.7.2"
|
|
53
|
+
},
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"bun": ">=1.0.0",
|
|
59
|
+
"node": ">=18.0.0"
|
|
60
|
+
}
|
|
61
|
+
}
|