@synqel/sdk 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +95 -2
- package/dist/event-taxonomy.d.ts +7 -0
- package/dist/event-taxonomy.d.ts.map +1 -0
- package/dist/event-taxonomy.js +38 -0
- package/dist/event-taxonomy.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/policy.d.ts +3 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +22 -0
- package/dist/policy.js.map +1 -0
- package/dist/react.d.ts +9 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +24 -0
- package/dist/react.js.map +1 -0
- package/dist/registry.d.ts +48 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +251 -0
- package/dist/registry.js.map +1 -0
- package/dist/snapshot.d.ts +12 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +22 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/types.d.ts +171 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/package.json +65 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Synqel Protocol Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,96 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @synqel/sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Semantic runtime for the **Synqel Protocol** — describe entities, actions, workflows, and policies so agents reason about your **UX**, not raw DOM.
|
|
4
|
+
|
|
5
|
+
Synqel complements **[Model Context Protocol](https://modelcontextprotocol.io/)**: MCP connects hosts and tools; Synqel defines what your application **means** and **allows**. Use sibling package **`@synqel/mcp`** for stdio MCP servers.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun add @synqel/sdk zod
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Peers: **`zod`** required; **`react`** optional for `@synqel/sdk/react`.
|
|
14
|
+
|
|
15
|
+
Runtime deps bundled with the SDK: **`zod-to-json-schema`** (action inputs → portable JSON Schema for snapshots/agents).
|
|
16
|
+
|
|
17
|
+
## Core usage
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import {
|
|
21
|
+
registerEntity,
|
|
22
|
+
registerAction,
|
|
23
|
+
bindAction,
|
|
24
|
+
getSemanticRegistry,
|
|
25
|
+
serializeSnapshotEnvelope,
|
|
26
|
+
} from "@synqel/sdk";
|
|
27
|
+
import { z } from "zod";
|
|
28
|
+
|
|
29
|
+
registerEntity({
|
|
30
|
+
id: "sku_42",
|
|
31
|
+
type: "product",
|
|
32
|
+
metadata: { price: 99 },
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
registerAction({
|
|
36
|
+
id: "add_to_cart",
|
|
37
|
+
intent: "mutation",
|
|
38
|
+
inputSchema: z.object({ sku: z.string(), qty: z.number() }),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
bindAction("add_to_cart", async (_ctx, input) => {
|
|
42
|
+
const payload = input as { sku: string; qty: number };
|
|
43
|
+
return { lineId: `${payload.sku}:${payload.qty}` };
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
await getSemanticRegistry().executeAction(
|
|
47
|
+
"add_to_cart",
|
|
48
|
+
{ actor: "human", roles: ["customer"] },
|
|
49
|
+
{ sku: "sku_42", qty: 1 },
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
console.log(serializeSnapshotEnvelope(getSemanticRegistry()));
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## HTTP snapshot route
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { synqelSnapshotJsonResponse, getSemanticRegistry } from "@synqel/sdk";
|
|
59
|
+
|
|
60
|
+
export function GET() {
|
|
61
|
+
return synqelSnapshotJsonResponse(getSemanticRegistry());
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## React
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { useSemanticRuntime } from "@synqel/sdk/react";
|
|
69
|
+
|
|
70
|
+
function CartButton() {
|
|
71
|
+
const { executeAction } = useSemanticRuntime();
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<button
|
|
75
|
+
type="button"
|
|
76
|
+
onClick={() =>
|
|
77
|
+
void executeAction(
|
|
78
|
+
"add_to_cart",
|
|
79
|
+
{ actor: "human", roles: ["customer"] },
|
|
80
|
+
{ sku: "sku_42", qty: 1 },
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
>
|
|
84
|
+
Add
|
|
85
|
+
</button>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Docs
|
|
91
|
+
|
|
92
|
+
Spec + guides live in the main repo under `docs/` and on [synqel-protocol.vercel.app/docs](https://synqel-protocol.vercel.app/docs).
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const EVENT_CATEGORIES: readonly ["semantic.entity", "semantic.action", "semantic.workflow", "semantic.session", "semantic.intent", "semantic.policy"];
|
|
2
|
+
export type EventCategory = (typeof EVENT_CATEGORIES)[number];
|
|
3
|
+
export declare const EVENT_KINDS: readonly ["semantic.entity.registered", "semantic.entity.queried", "semantic.entity.updated", "semantic.entity.removed", "semantic.action.attempt", "semantic.action.result", "semantic.action.executed", "semantic.workflow.started", "semantic.workflow.step", "semantic.workflow.completed", "semantic.workflow.failed", "semantic.session.started", "semantic.session.ended", "semantic.session.heartbeat", "semantic.intent.expressed", "semantic.intent.resolved", "semantic.intent.abandoned", "semantic.intent.failed", "semantic.policy.evaluated", "semantic.policy.denied"];
|
|
4
|
+
export type EventKind = (typeof EVENT_KINDS)[number];
|
|
5
|
+
export declare function getCategoryFromKind(kind: EventKind): EventCategory;
|
|
6
|
+
export declare function isValidEventKind(kind: string): kind is EventKind;
|
|
7
|
+
//# sourceMappingURL=event-taxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-taxonomy.d.ts","sourceRoot":"","sources":["../src/event-taxonomy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,gIAOnB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,WAAW,wjBAqBd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,CAGlE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS,CAEhE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const EVENT_CATEGORIES = [
|
|
2
|
+
"semantic.entity",
|
|
3
|
+
"semantic.action",
|
|
4
|
+
"semantic.workflow",
|
|
5
|
+
"semantic.session",
|
|
6
|
+
"semantic.intent",
|
|
7
|
+
"semantic.policy",
|
|
8
|
+
];
|
|
9
|
+
export const EVENT_KINDS = [
|
|
10
|
+
"semantic.entity.registered",
|
|
11
|
+
"semantic.entity.queried",
|
|
12
|
+
"semantic.entity.updated",
|
|
13
|
+
"semantic.entity.removed",
|
|
14
|
+
"semantic.action.attempt",
|
|
15
|
+
"semantic.action.result",
|
|
16
|
+
"semantic.action.executed",
|
|
17
|
+
"semantic.workflow.started",
|
|
18
|
+
"semantic.workflow.step",
|
|
19
|
+
"semantic.workflow.completed",
|
|
20
|
+
"semantic.workflow.failed",
|
|
21
|
+
"semantic.session.started",
|
|
22
|
+
"semantic.session.ended",
|
|
23
|
+
"semantic.session.heartbeat",
|
|
24
|
+
"semantic.intent.expressed",
|
|
25
|
+
"semantic.intent.resolved",
|
|
26
|
+
"semantic.intent.abandoned",
|
|
27
|
+
"semantic.intent.failed",
|
|
28
|
+
"semantic.policy.evaluated",
|
|
29
|
+
"semantic.policy.denied",
|
|
30
|
+
];
|
|
31
|
+
export function getCategoryFromKind(kind) {
|
|
32
|
+
const parts = kind.split(".");
|
|
33
|
+
return `${parts[0]}.${parts[1]}`;
|
|
34
|
+
}
|
|
35
|
+
export function isValidEventKind(kind) {
|
|
36
|
+
return EVENT_KINDS.includes(kind);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=event-taxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-taxonomy.js","sourceRoot":"","sources":["../src/event-taxonomy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;CACT,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,4BAA4B;IAC5B,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,0BAA0B;IAC1B,2BAA2B;IAC3B,wBAAwB;IACxB,6BAA6B;IAC7B,0BAA0B;IAC1B,0BAA0B;IAC1B,wBAAwB;IACxB,4BAA4B;IAC5B,2BAA2B;IAC3B,0BAA0B;IAC1B,2BAA2B;IAC3B,wBAAwB;IACxB,2BAA2B;IAC3B,wBAAwB;CAChB,CAAC;AAIX,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAmB,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAQ,WAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type { SemanticEntity, SemanticAction, RegisterActionInput, CapabilityProfile, WorkflowDefinition, PolicyContext, PolicyDecision, PolicyRule, RuntimeEvent, ActionExecutionContext, SemanticActionHandler, ExecuteActionOptions, ExecuteActionResult, } from "./types.js";
|
|
2
|
+
export { entitySchema, actionSchema, capabilitySchema, workflowSchema, } from "./types.js";
|
|
3
|
+
export { SemanticEventBus, SemanticRegistry, getSemanticRegistry, resetSemanticRegistryForTests, } from "./registry.js";
|
|
4
|
+
export type { RegistrySnapshot } from "./registry.js";
|
|
5
|
+
export type { SynqelSnapshotEnvelope } from "./snapshot.js";
|
|
6
|
+
export { createSnapshotEnvelope, serializeSnapshotEnvelope, synqelSnapshotJsonResponse, } from "./snapshot.js";
|
|
7
|
+
export { evaluatePolicy } from "./policy.js";
|
|
8
|
+
export { EVENT_CATEGORIES, EVENT_KINDS, getCategoryFromKind, isValidEventKind, } from "./event-taxonomy.js";
|
|
9
|
+
export type { EventCategory, EventKind } from "./event-taxonomy.js";
|
|
10
|
+
import type { SemanticEntity, SemanticAction, CapabilityProfile, WorkflowDefinition, RegisterActionInput, PolicyContext, SemanticActionHandler, ExecuteActionOptions, ExecuteActionResult } from "./types.js";
|
|
11
|
+
export declare function registerEntity(input: Omit<SemanticEntity, "metadata"> & {
|
|
12
|
+
metadata?: Record<string, unknown>;
|
|
13
|
+
}): SemanticEntity;
|
|
14
|
+
export declare function registerAction(input: RegisterActionInput): SemanticAction;
|
|
15
|
+
export declare function registerCapability(input: CapabilityProfile): CapabilityProfile;
|
|
16
|
+
export declare function registerWorkflow(input: WorkflowDefinition): WorkflowDefinition;
|
|
17
|
+
export declare function bindAction(actionId: string, handler: SemanticActionHandler): void;
|
|
18
|
+
export declare function unbindAction(actionId: string): boolean;
|
|
19
|
+
export declare function executeAction(actionId: string, context: PolicyContext, input?: unknown, options?: ExecuteActionOptions): Promise<ExecuteActionResult>;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC/E,cAAc,CAEhB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAE9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAE9E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAEjF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAE9B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { entitySchema, actionSchema, capabilitySchema, workflowSchema, } from "./types.js";
|
|
2
|
+
export { SemanticEventBus, SemanticRegistry, getSemanticRegistry, resetSemanticRegistryForTests, } from "./registry.js";
|
|
3
|
+
export { createSnapshotEnvelope, serializeSnapshotEnvelope, synqelSnapshotJsonResponse, } from "./snapshot.js";
|
|
4
|
+
export { evaluatePolicy } from "./policy.js";
|
|
5
|
+
export { EVENT_CATEGORIES, EVENT_KINDS, getCategoryFromKind, isValidEventKind, } from "./event-taxonomy.js";
|
|
6
|
+
import { getSemanticRegistry } from "./registry.js";
|
|
7
|
+
export function registerEntity(input) {
|
|
8
|
+
return getSemanticRegistry().registerEntity(input);
|
|
9
|
+
}
|
|
10
|
+
export function registerAction(input) {
|
|
11
|
+
return getSemanticRegistry().registerAction(input);
|
|
12
|
+
}
|
|
13
|
+
export function registerCapability(input) {
|
|
14
|
+
return getSemanticRegistry().registerCapability(input);
|
|
15
|
+
}
|
|
16
|
+
export function registerWorkflow(input) {
|
|
17
|
+
return getSemanticRegistry().registerWorkflow(input);
|
|
18
|
+
}
|
|
19
|
+
export function bindAction(actionId, handler) {
|
|
20
|
+
getSemanticRegistry().bindAction(actionId, handler);
|
|
21
|
+
}
|
|
22
|
+
export function unbindAction(actionId) {
|
|
23
|
+
return getSemanticRegistry().unbindAction(actionId);
|
|
24
|
+
}
|
|
25
|
+
export function executeAction(actionId, context, input, options) {
|
|
26
|
+
return getSemanticRegistry().executeAction(actionId, context, input, options);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAapD,MAAM,UAAU,cAAc,CAC5B,KAAgF;IAEhF,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,mBAAmB,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IACzD,OAAO,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,OAAO,mBAAmB,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAA8B;IACzE,mBAAmB,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,mBAAmB,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,OAAsB,EACtB,KAAe,EACf,OAA8B;IAE9B,OAAO,mBAAmB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/policy.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgB5F,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,UAAU,EAAO,GACvB,cAAc,CAWhB"}
|
package/dist/policy.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const defaultRule = (ctx, action) => {
|
|
2
|
+
if (ctx.actor === "agent" &&
|
|
3
|
+
action.intent === "mutation" &&
|
|
4
|
+
!ctx.roles.includes("admin")) {
|
|
5
|
+
return {
|
|
6
|
+
allowed: false,
|
|
7
|
+
reason: "Agents cannot execute mutation actions without the admin role.",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
export function evaluatePolicy(ctx, action, rules = []) {
|
|
13
|
+
const allRules = [...rules, defaultRule];
|
|
14
|
+
for (const rule of allRules) {
|
|
15
|
+
const decision = rule(ctx, action);
|
|
16
|
+
if (decision && !decision.allowed) {
|
|
17
|
+
return decision;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { allowed: true };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC9C,IACE,GAAG,CAAC,KAAK,KAAK,OAAO;QACrB,MAAM,CAAC,MAAM,KAAK,UAAU;QAC5B,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC5B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,gEAAgE;SACzE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,GAAkB,EAClB,MAAsB,EACtB,QAAsB,EAAE;IAExB,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RegistrySnapshot } from "./registry.js";
|
|
2
|
+
import type { PolicyContext, RuntimeEvent, ExecuteActionOptions, ExecuteActionResult } from "./types.js";
|
|
3
|
+
export declare function useSemanticRuntime(): {
|
|
4
|
+
registry: import("./registry.js").SemanticRegistry;
|
|
5
|
+
snapshot: RegistrySnapshot;
|
|
6
|
+
executeAction: (actionId: string, context: PolicyContext, input?: unknown, options?: ExecuteActionOptions) => Promise<ExecuteActionResult>;
|
|
7
|
+
};
|
|
8
|
+
export declare function useSemanticEvents(onEvent: (event: RuntimeEvent) => void): void;
|
|
9
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,kBAAkB;;;8BAkBlB,MAAM,WACP,aAAa,UACd,OAAO,YACL,oBAAoB,KAC7B,OAAO,CAAC,mBAAmB,CAAC;EAUlC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,IAAI,CAMN"}
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useSyncExternalStore } from "react";
|
|
3
|
+
import { getSemanticRegistry } from "./registry.js";
|
|
4
|
+
export function useSemanticRuntime() {
|
|
5
|
+
const registry = getSemanticRegistry();
|
|
6
|
+
const subscribe = useCallback((onStoreChange) => {
|
|
7
|
+
return registry.bus.subscribe(onStoreChange);
|
|
8
|
+
}, [registry]);
|
|
9
|
+
const getSnapshotData = useCallback(() => {
|
|
10
|
+
return registry.getSnapshot();
|
|
11
|
+
}, [registry]);
|
|
12
|
+
const snapshot = useSyncExternalStore(subscribe, getSnapshotData, getSnapshotData);
|
|
13
|
+
const executeAction = useCallback((actionId, context, input, options) => {
|
|
14
|
+
return registry.executeAction(actionId, context, input, options);
|
|
15
|
+
}, [registry]);
|
|
16
|
+
return useMemo(() => ({ registry, snapshot, executeAction }), [registry, snapshot, executeAction]);
|
|
17
|
+
}
|
|
18
|
+
export function useSemanticEvents(onEvent) {
|
|
19
|
+
const registry = getSemanticRegistry();
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
return registry.bus.subscribe(onEvent);
|
|
22
|
+
}, [registry, onEvent]);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AASpD,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,aAAyB,EAAE,EAAE;QAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC,GAAqB,EAAE;QACzD,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;IAEnF,MAAM,aAAa,GAAG,WAAW,CAC/B,CACE,QAAgB,EAChB,OAAsB,EACtB,KAAe,EACf,OAA8B,EACA,EAAE;QAChC,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAC7C,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAsC;IAEtC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SemanticEntity, SemanticAction, CapabilityProfile, WorkflowDefinition, RuntimeEvent, PolicyContext, SemanticActionHandler, ExecuteActionOptions, ExecuteActionResult } from "./types.js";
|
|
2
|
+
type EventListener = (event: RuntimeEvent) => void;
|
|
3
|
+
export declare class SemanticEventBus {
|
|
4
|
+
private listeners;
|
|
5
|
+
subscribe(listener: EventListener): () => void;
|
|
6
|
+
emit(event: RuntimeEvent): void;
|
|
7
|
+
}
|
|
8
|
+
export type RegistrySnapshot = {
|
|
9
|
+
entities: SemanticEntity[];
|
|
10
|
+
actions: SemanticAction[];
|
|
11
|
+
capabilities: CapabilityProfile;
|
|
12
|
+
workflows: WorkflowDefinition[];
|
|
13
|
+
};
|
|
14
|
+
export declare class SemanticRegistry {
|
|
15
|
+
readonly bus: SemanticEventBus;
|
|
16
|
+
private entities;
|
|
17
|
+
private actions;
|
|
18
|
+
private capabilities;
|
|
19
|
+
private workflows;
|
|
20
|
+
private version;
|
|
21
|
+
private actionHandlers;
|
|
22
|
+
private actionInputZod;
|
|
23
|
+
registerEntity(input: unknown): SemanticEntity;
|
|
24
|
+
getEntity(id: string): SemanticEntity | undefined;
|
|
25
|
+
updateEntity(input: unknown): SemanticEntity;
|
|
26
|
+
removeEntity(id: string): boolean;
|
|
27
|
+
registerAction(input: unknown): SemanticAction;
|
|
28
|
+
getAction(id: string): SemanticAction | undefined;
|
|
29
|
+
bindAction(actionId: string, handler: SemanticActionHandler): void;
|
|
30
|
+
unbindAction(actionId: string): boolean;
|
|
31
|
+
executeAction(actionId: string, context: PolicyContext, input?: unknown, options?: ExecuteActionOptions): Promise<ExecuteActionResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Starts a logical agent/session span and emits `session:started`.
|
|
34
|
+
* Pair with {@link endSession} or pass the id into {@link executeAction}.
|
|
35
|
+
*/
|
|
36
|
+
startSession(): string;
|
|
37
|
+
endSession(sessionId: string): void;
|
|
38
|
+
registerCapability(input: unknown): CapabilityProfile;
|
|
39
|
+
registerWorkflow(input: unknown): WorkflowDefinition;
|
|
40
|
+
getWorkflow(id: string): WorkflowDefinition | undefined;
|
|
41
|
+
getSnapshot(): RegistrySnapshot;
|
|
42
|
+
getVersion(): number;
|
|
43
|
+
reset(): void;
|
|
44
|
+
}
|
|
45
|
+
export declare function getSemanticRegistry(): SemanticRegistry;
|
|
46
|
+
export declare function resetSemanticRegistryForTests(): void;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAiBpB,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA4B;IAE7C,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAO9C,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;CAKhC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC,CAAC;AAQF,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,GAAG,mBAA0B;IAEtC,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,cAAc,CAAmC;IAEzD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc;IAQ9C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQjD,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc;IAQ5C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IASjC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc;IA+B9C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIjD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIlE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIjC,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IA6F/B;;;OAGG;IACH,YAAY,IAAI,MAAM;IAMtB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAInC,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB;IAQrD,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB;IAQpD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvD,WAAW,IAAI,gBAAgB;IAS/B,UAAU,IAAI,MAAM;IAIpB,KAAK,IAAI,IAAI;CASd;AAID,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAKpD"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
2
|
+
import { entitySchema, actionSchema, capabilitySchema, workflowSchema, } from "./types.js";
|
|
3
|
+
import { evaluatePolicy } from "./policy.js";
|
|
4
|
+
function createSessionId() {
|
|
5
|
+
const c = globalThis.crypto;
|
|
6
|
+
if (c && typeof c.randomUUID === "function") {
|
|
7
|
+
return c.randomUUID();
|
|
8
|
+
}
|
|
9
|
+
return `sess_${Math.random().toString(36).slice(2)}_${Date.now().toString(36)}`;
|
|
10
|
+
}
|
|
11
|
+
export class SemanticEventBus {
|
|
12
|
+
listeners = new Set();
|
|
13
|
+
subscribe(listener) {
|
|
14
|
+
this.listeners.add(listener);
|
|
15
|
+
return () => {
|
|
16
|
+
this.listeners.delete(listener);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
emit(event) {
|
|
20
|
+
for (const listener of this.listeners) {
|
|
21
|
+
listener(event);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function stripRegisterActionExtras(input) {
|
|
26
|
+
if (!input || typeof input !== "object")
|
|
27
|
+
return input;
|
|
28
|
+
const { inputSchema: _ignored, ...rest } = input;
|
|
29
|
+
return rest;
|
|
30
|
+
}
|
|
31
|
+
export class SemanticRegistry {
|
|
32
|
+
bus = new SemanticEventBus();
|
|
33
|
+
entities = new Map();
|
|
34
|
+
actions = new Map();
|
|
35
|
+
capabilities = {};
|
|
36
|
+
workflows = new Map();
|
|
37
|
+
version = 0;
|
|
38
|
+
actionHandlers = new Map();
|
|
39
|
+
actionInputZod = new Map();
|
|
40
|
+
registerEntity(input) {
|
|
41
|
+
const entity = entitySchema.parse(input);
|
|
42
|
+
this.entities.set(entity.id, entity);
|
|
43
|
+
this.version++;
|
|
44
|
+
this.bus.emit({ type: "entity:registered", entity });
|
|
45
|
+
return entity;
|
|
46
|
+
}
|
|
47
|
+
getEntity(id) {
|
|
48
|
+
const entity = this.entities.get(id);
|
|
49
|
+
if (entity) {
|
|
50
|
+
this.bus.emit({ type: "entity:queried", entityId: id });
|
|
51
|
+
}
|
|
52
|
+
return entity;
|
|
53
|
+
}
|
|
54
|
+
updateEntity(input) {
|
|
55
|
+
const entity = entitySchema.parse(input);
|
|
56
|
+
this.entities.set(entity.id, entity);
|
|
57
|
+
this.version++;
|
|
58
|
+
this.bus.emit({ type: "entity:updated", entity });
|
|
59
|
+
return entity;
|
|
60
|
+
}
|
|
61
|
+
removeEntity(id) {
|
|
62
|
+
const removed = this.entities.delete(id);
|
|
63
|
+
if (removed) {
|
|
64
|
+
this.version++;
|
|
65
|
+
this.bus.emit({ type: "entity:removed", entityId: id });
|
|
66
|
+
}
|
|
67
|
+
return removed;
|
|
68
|
+
}
|
|
69
|
+
registerAction(input) {
|
|
70
|
+
const raw = input && typeof input === "object"
|
|
71
|
+
? input
|
|
72
|
+
: null;
|
|
73
|
+
const zodInput = raw && "inputSchema" in raw ? raw.inputSchema : undefined;
|
|
74
|
+
const baseParsed = actionSchema.parse(stripRegisterActionExtras(input));
|
|
75
|
+
let inputJsonSchema = baseParsed.inputJsonSchema;
|
|
76
|
+
if (zodInput !== undefined && zodInput !== null) {
|
|
77
|
+
inputJsonSchema = zodToJsonSchema(zodInput, {
|
|
78
|
+
target: "jsonSchema7",
|
|
79
|
+
});
|
|
80
|
+
this.actionInputZod.set(baseParsed.id, zodInput);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.actionInputZod.delete(baseParsed.id);
|
|
84
|
+
}
|
|
85
|
+
const action = {
|
|
86
|
+
...baseParsed,
|
|
87
|
+
...(inputJsonSchema !== undefined ? { inputJsonSchema } : {}),
|
|
88
|
+
};
|
|
89
|
+
this.actions.set(action.id, action);
|
|
90
|
+
this.version++;
|
|
91
|
+
this.bus.emit({ type: "action:registered", action });
|
|
92
|
+
return action;
|
|
93
|
+
}
|
|
94
|
+
getAction(id) {
|
|
95
|
+
return this.actions.get(id);
|
|
96
|
+
}
|
|
97
|
+
bindAction(actionId, handler) {
|
|
98
|
+
this.actionHandlers.set(actionId, handler);
|
|
99
|
+
}
|
|
100
|
+
unbindAction(actionId) {
|
|
101
|
+
return this.actionHandlers.delete(actionId);
|
|
102
|
+
}
|
|
103
|
+
async executeAction(actionId, context, input, options) {
|
|
104
|
+
const action = this.actions.get(actionId);
|
|
105
|
+
if (!action) {
|
|
106
|
+
const message = `Action "${actionId}" not found in registry.`;
|
|
107
|
+
this.bus.emit({
|
|
108
|
+
type: "action:result",
|
|
109
|
+
actionId,
|
|
110
|
+
ok: false,
|
|
111
|
+
message,
|
|
112
|
+
});
|
|
113
|
+
return { ok: false, message };
|
|
114
|
+
}
|
|
115
|
+
const sessionId = options?.sessionId;
|
|
116
|
+
this.bus.emit({
|
|
117
|
+
type: "action:attempt",
|
|
118
|
+
actionId,
|
|
119
|
+
context,
|
|
120
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
121
|
+
});
|
|
122
|
+
const decision = evaluatePolicy(context, action);
|
|
123
|
+
this.bus.emit({ type: "policy:evaluated", actionId, decision });
|
|
124
|
+
if (!decision.allowed) {
|
|
125
|
+
this.bus.emit({
|
|
126
|
+
type: "policy:denied",
|
|
127
|
+
actionId,
|
|
128
|
+
reason: decision.reason,
|
|
129
|
+
});
|
|
130
|
+
this.bus.emit({
|
|
131
|
+
type: "action:result",
|
|
132
|
+
actionId,
|
|
133
|
+
ok: false,
|
|
134
|
+
message: decision.reason,
|
|
135
|
+
});
|
|
136
|
+
return { ok: false, message: decision.reason };
|
|
137
|
+
}
|
|
138
|
+
const zodSchema = this.actionInputZod.get(actionId);
|
|
139
|
+
let parsedInput = input;
|
|
140
|
+
if (zodSchema) {
|
|
141
|
+
const parsed = zodSchema.safeParse(input);
|
|
142
|
+
if (!parsed.success) {
|
|
143
|
+
const message = parsed.error.message;
|
|
144
|
+
this.bus.emit({
|
|
145
|
+
type: "action:result",
|
|
146
|
+
actionId,
|
|
147
|
+
ok: false,
|
|
148
|
+
message,
|
|
149
|
+
});
|
|
150
|
+
return { ok: false, message };
|
|
151
|
+
}
|
|
152
|
+
parsedInput = parsed.data;
|
|
153
|
+
}
|
|
154
|
+
const handler = this.actionHandlers.get(actionId);
|
|
155
|
+
if (!handler) {
|
|
156
|
+
const message = `No handler bound for action "${actionId}".`;
|
|
157
|
+
this.bus.emit({
|
|
158
|
+
type: "action:result",
|
|
159
|
+
actionId,
|
|
160
|
+
ok: false,
|
|
161
|
+
message,
|
|
162
|
+
});
|
|
163
|
+
return { ok: false, message };
|
|
164
|
+
}
|
|
165
|
+
const execCtx = { ...context, ...(sessionId !== undefined ? { sessionId } : {}) };
|
|
166
|
+
try {
|
|
167
|
+
const data = await handler(execCtx, parsedInput);
|
|
168
|
+
this.bus.emit({ type: "action:executed", actionId });
|
|
169
|
+
this.bus.emit({
|
|
170
|
+
type: "action:result",
|
|
171
|
+
actionId,
|
|
172
|
+
ok: true,
|
|
173
|
+
...(data !== undefined ? { data } : {}),
|
|
174
|
+
});
|
|
175
|
+
return { ok: true, ...(data !== undefined ? { data } : {}) };
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const message = err instanceof Error ? err.message : "Action handler threw a non-Error value.";
|
|
179
|
+
this.bus.emit({
|
|
180
|
+
type: "action:result",
|
|
181
|
+
actionId,
|
|
182
|
+
ok: false,
|
|
183
|
+
message,
|
|
184
|
+
});
|
|
185
|
+
return { ok: false, message };
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Starts a logical agent/session span and emits `session:started`.
|
|
190
|
+
* Pair with {@link endSession} or pass the id into {@link executeAction}.
|
|
191
|
+
*/
|
|
192
|
+
startSession() {
|
|
193
|
+
const sessionId = createSessionId();
|
|
194
|
+
this.bus.emit({ type: "session:started", sessionId });
|
|
195
|
+
return sessionId;
|
|
196
|
+
}
|
|
197
|
+
endSession(sessionId) {
|
|
198
|
+
this.bus.emit({ type: "session:ended", sessionId });
|
|
199
|
+
}
|
|
200
|
+
registerCapability(input) {
|
|
201
|
+
const caps = capabilitySchema.parse(input);
|
|
202
|
+
this.capabilities = { ...this.capabilities, ...caps };
|
|
203
|
+
this.version++;
|
|
204
|
+
this.bus.emit({ type: "capability:registered", capabilities: this.capabilities });
|
|
205
|
+
return this.capabilities;
|
|
206
|
+
}
|
|
207
|
+
registerWorkflow(input) {
|
|
208
|
+
const workflow = workflowSchema.parse(input);
|
|
209
|
+
this.workflows.set(workflow.id, workflow);
|
|
210
|
+
this.version++;
|
|
211
|
+
this.bus.emit({ type: "workflow:registered", workflow });
|
|
212
|
+
return workflow;
|
|
213
|
+
}
|
|
214
|
+
getWorkflow(id) {
|
|
215
|
+
return this.workflows.get(id);
|
|
216
|
+
}
|
|
217
|
+
getSnapshot() {
|
|
218
|
+
return {
|
|
219
|
+
entities: Array.from(this.entities.values()),
|
|
220
|
+
actions: Array.from(this.actions.values()),
|
|
221
|
+
capabilities: { ...this.capabilities },
|
|
222
|
+
workflows: Array.from(this.workflows.values()),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
getVersion() {
|
|
226
|
+
return this.version;
|
|
227
|
+
}
|
|
228
|
+
reset() {
|
|
229
|
+
this.entities.clear();
|
|
230
|
+
this.actions.clear();
|
|
231
|
+
this.capabilities = {};
|
|
232
|
+
this.workflows.clear();
|
|
233
|
+
this.version = 0;
|
|
234
|
+
this.actionHandlers.clear();
|
|
235
|
+
this.actionInputZod.clear();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
let globalRegistry = null;
|
|
239
|
+
export function getSemanticRegistry() {
|
|
240
|
+
if (!globalRegistry) {
|
|
241
|
+
globalRegistry = new SemanticRegistry();
|
|
242
|
+
}
|
|
243
|
+
return globalRegistry;
|
|
244
|
+
}
|
|
245
|
+
export function resetSemanticRegistryForTests() {
|
|
246
|
+
if (globalRegistry) {
|
|
247
|
+
globalRegistry.reset();
|
|
248
|
+
}
|
|
249
|
+
globalRegistry = null;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SemanticRegistry, RegistrySnapshot } from "./registry.js";
|
|
2
|
+
/** Serializable envelope for HTTP, MCP, or cross-context sync. */
|
|
3
|
+
export type SynqelSnapshotEnvelope = {
|
|
4
|
+
format: "synqel.snapshot.v1";
|
|
5
|
+
registryVersion: number;
|
|
6
|
+
snapshot: RegistrySnapshot;
|
|
7
|
+
};
|
|
8
|
+
export declare function createSnapshotEnvelope(registry: SemanticRegistry): SynqelSnapshotEnvelope;
|
|
9
|
+
export declare function serializeSnapshotEnvelope(registry: SemanticRegistry): string;
|
|
10
|
+
/** Ready-made JSON `Response` for e.g. `GET /.synqel/snapshot` in Next.js or other runtimes. */
|
|
11
|
+
export declare function synqelSnapshotJsonResponse(registry: SemanticRegistry, init?: ResponseInit): Response;
|
|
12
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAExE,kEAAkE;AAClE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,CAMxB;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAE5E;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,YAAY,GAClB,QAAQ,CASV"}
|
package/dist/snapshot.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function createSnapshotEnvelope(registry) {
|
|
2
|
+
return {
|
|
3
|
+
format: "synqel.snapshot.v1",
|
|
4
|
+
registryVersion: registry.getVersion(),
|
|
5
|
+
snapshot: registry.getSnapshot(),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function serializeSnapshotEnvelope(registry) {
|
|
9
|
+
return JSON.stringify(createSnapshotEnvelope(registry));
|
|
10
|
+
}
|
|
11
|
+
/** Ready-made JSON `Response` for e.g. `GET /.synqel/snapshot` in Next.js or other runtimes. */
|
|
12
|
+
export function synqelSnapshotJsonResponse(registry, init) {
|
|
13
|
+
const body = serializeSnapshotEnvelope(registry);
|
|
14
|
+
return new Response(body, {
|
|
15
|
+
...init,
|
|
16
|
+
headers: {
|
|
17
|
+
"content-type": "application/json; charset=utf-8",
|
|
18
|
+
...(init?.headers ?? {}),
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,sBAAsB,CACpC,QAA0B;IAE1B,OAAO;QACL,MAAM,EAAE,oBAAoB;QAC5B,eAAe,EAAE,QAAQ,CAAC,UAAU,EAAE;QACtC,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAA0B;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,0BAA0B,CACxC,QAA0B,EAC1B,IAAmB;IAEnB,MAAM,IAAI,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,GAAG,IAAI;QACP,OAAO,EAAE;YACP,cAAc,EAAE,iCAAiC;YACjD,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACzB;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const entitySchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
type: z.ZodString;
|
|
5
|
+
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
id: string;
|
|
8
|
+
type: string;
|
|
9
|
+
metadata: Record<string, unknown>;
|
|
10
|
+
}, {
|
|
11
|
+
id: string;
|
|
12
|
+
type: string;
|
|
13
|
+
metadata?: Record<string, unknown> | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const actionSchema: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
intent: z.ZodEnum<["navigation", "mutation", "query", "system"]>;
|
|
18
|
+
deterministic: z.ZodDefault<z.ZodBoolean>;
|
|
19
|
+
description: z.ZodOptional<z.ZodString>;
|
|
20
|
+
/** JSON Schema for action inputs (agents/MCP); often derived from optional Zod `inputSchema` at registration. */
|
|
21
|
+
inputJsonSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
22
|
+
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
id: string;
|
|
24
|
+
intent: "navigation" | "mutation" | "query" | "system";
|
|
25
|
+
deterministic: boolean;
|
|
26
|
+
description?: string | undefined;
|
|
27
|
+
inputJsonSchema?: Record<string, unknown> | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
id: string;
|
|
30
|
+
intent: "navigation" | "mutation" | "query" | "system";
|
|
31
|
+
deterministic?: boolean | undefined;
|
|
32
|
+
description?: string | undefined;
|
|
33
|
+
inputJsonSchema?: Record<string, unknown> | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
export declare const capabilitySchema: z.ZodObject<{
|
|
36
|
+
canSearch: z.ZodOptional<z.ZodBoolean>;
|
|
37
|
+
canCheckout: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
canNavigate: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
canSearch?: boolean | undefined;
|
|
41
|
+
canCheckout?: boolean | undefined;
|
|
42
|
+
canNavigate?: boolean | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
canSearch?: boolean | undefined;
|
|
45
|
+
canCheckout?: boolean | undefined;
|
|
46
|
+
canNavigate?: boolean | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
export declare const workflowSchema: z.ZodObject<{
|
|
49
|
+
id: z.ZodString;
|
|
50
|
+
steps: z.ZodArray<z.ZodString, "many">;
|
|
51
|
+
}, "strip", z.ZodTypeAny, {
|
|
52
|
+
id: string;
|
|
53
|
+
steps: string[];
|
|
54
|
+
}, {
|
|
55
|
+
id: string;
|
|
56
|
+
steps: string[];
|
|
57
|
+
}>;
|
|
58
|
+
export type SemanticEntity = z.infer<typeof entitySchema>;
|
|
59
|
+
export type SemanticAction = z.infer<typeof actionSchema>;
|
|
60
|
+
export type CapabilityProfile = z.infer<typeof capabilitySchema>;
|
|
61
|
+
export type WorkflowDefinition = z.infer<typeof workflowSchema>;
|
|
62
|
+
/** Accepted shape for `registerAction` — optional Zod input schema is stripped before validation and drives `inputJsonSchema`. */
|
|
63
|
+
export type RegisterActionInput = Omit<SemanticAction, "deterministic"> & {
|
|
64
|
+
deterministic?: boolean;
|
|
65
|
+
inputSchema?: z.ZodTypeAny;
|
|
66
|
+
};
|
|
67
|
+
export type PolicyContext = {
|
|
68
|
+
actor: "human" | "agent" | "voice";
|
|
69
|
+
roles: string[];
|
|
70
|
+
};
|
|
71
|
+
export type PolicyDecision = {
|
|
72
|
+
allowed: true;
|
|
73
|
+
} | {
|
|
74
|
+
allowed: false;
|
|
75
|
+
reason: string;
|
|
76
|
+
};
|
|
77
|
+
export type PolicyRule = (ctx: PolicyContext, action: SemanticAction) => PolicyDecision | null;
|
|
78
|
+
/** Effective context passed to bound action handlers (extends policy context). */
|
|
79
|
+
export type ActionExecutionContext = PolicyContext & {
|
|
80
|
+
sessionId?: string;
|
|
81
|
+
};
|
|
82
|
+
export type SemanticActionHandler = (ctx: ActionExecutionContext, input: unknown) => unknown | Promise<unknown>;
|
|
83
|
+
export type ExecuteActionOptions = {
|
|
84
|
+
sessionId?: string;
|
|
85
|
+
};
|
|
86
|
+
export type ExecuteActionResult = {
|
|
87
|
+
ok: boolean;
|
|
88
|
+
message?: string;
|
|
89
|
+
data?: unknown;
|
|
90
|
+
};
|
|
91
|
+
export type RuntimeEvent = {
|
|
92
|
+
type: "entity:registered";
|
|
93
|
+
entity: SemanticEntity;
|
|
94
|
+
} | {
|
|
95
|
+
type: "entity:queried";
|
|
96
|
+
entityId: string;
|
|
97
|
+
} | {
|
|
98
|
+
type: "entity:updated";
|
|
99
|
+
entity: SemanticEntity;
|
|
100
|
+
} | {
|
|
101
|
+
type: "entity:removed";
|
|
102
|
+
entityId: string;
|
|
103
|
+
} | {
|
|
104
|
+
type: "action:registered";
|
|
105
|
+
action: SemanticAction;
|
|
106
|
+
} | {
|
|
107
|
+
type: "action:attempt";
|
|
108
|
+
actionId: string;
|
|
109
|
+
context: PolicyContext;
|
|
110
|
+
sessionId?: string;
|
|
111
|
+
} | {
|
|
112
|
+
type: "action:result";
|
|
113
|
+
actionId: string;
|
|
114
|
+
ok: boolean;
|
|
115
|
+
message?: string;
|
|
116
|
+
data?: unknown;
|
|
117
|
+
} | {
|
|
118
|
+
type: "action:executed";
|
|
119
|
+
actionId: string;
|
|
120
|
+
} | {
|
|
121
|
+
type: "capability:registered";
|
|
122
|
+
capabilities: CapabilityProfile;
|
|
123
|
+
} | {
|
|
124
|
+
type: "workflow:registered";
|
|
125
|
+
workflow: WorkflowDefinition;
|
|
126
|
+
} | {
|
|
127
|
+
type: "workflow:started";
|
|
128
|
+
workflowId: string;
|
|
129
|
+
} | {
|
|
130
|
+
type: "workflow:step";
|
|
131
|
+
workflowId: string;
|
|
132
|
+
stepIndex: number;
|
|
133
|
+
stepId: string;
|
|
134
|
+
} | {
|
|
135
|
+
type: "workflow:completed";
|
|
136
|
+
workflowId: string;
|
|
137
|
+
} | {
|
|
138
|
+
type: "workflow:failed";
|
|
139
|
+
workflowId: string;
|
|
140
|
+
error: string;
|
|
141
|
+
} | {
|
|
142
|
+
type: "session:started";
|
|
143
|
+
sessionId: string;
|
|
144
|
+
} | {
|
|
145
|
+
type: "session:ended";
|
|
146
|
+
sessionId: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: "intent:expressed";
|
|
149
|
+
intentId: string;
|
|
150
|
+
intent: string;
|
|
151
|
+
metadata?: Record<string, unknown>;
|
|
152
|
+
} | {
|
|
153
|
+
type: "intent:resolved";
|
|
154
|
+
intentId: string;
|
|
155
|
+
} | {
|
|
156
|
+
type: "intent:abandoned";
|
|
157
|
+
intentId: string;
|
|
158
|
+
} | {
|
|
159
|
+
type: "intent:failed";
|
|
160
|
+
intentId: string;
|
|
161
|
+
error: string;
|
|
162
|
+
} | {
|
|
163
|
+
type: "policy:evaluated";
|
|
164
|
+
actionId: string;
|
|
165
|
+
decision: PolicyDecision;
|
|
166
|
+
} | {
|
|
167
|
+
type: "policy:denied";
|
|
168
|
+
actionId: string;
|
|
169
|
+
reason: string;
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const entitySchema = z.object({
|
|
3
|
+
id: z.string().min(1),
|
|
4
|
+
type: z.string().min(1),
|
|
5
|
+
metadata: z.record(z.string(), z.unknown()).default({}),
|
|
6
|
+
});
|
|
7
|
+
export const actionSchema = z.object({
|
|
8
|
+
id: z.string().min(1),
|
|
9
|
+
intent: z.enum(["navigation", "mutation", "query", "system"]),
|
|
10
|
+
deterministic: z.boolean().default(true),
|
|
11
|
+
description: z.string().optional(),
|
|
12
|
+
/** JSON Schema for action inputs (agents/MCP); often derived from optional Zod `inputSchema` at registration. */
|
|
13
|
+
inputJsonSchema: z.record(z.string(), z.unknown()).optional(),
|
|
14
|
+
});
|
|
15
|
+
export const capabilitySchema = z.object({
|
|
16
|
+
canSearch: z.boolean().optional(),
|
|
17
|
+
canCheckout: z.boolean().optional(),
|
|
18
|
+
canNavigate: z.boolean().optional(),
|
|
19
|
+
});
|
|
20
|
+
export const workflowSchema = z.object({
|
|
21
|
+
id: z.string().min(1),
|
|
22
|
+
steps: z.array(z.string().min(1)).min(1),
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7D,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,iHAAiH;IACjH,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACzC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synqel/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Semantic runtime SDK — the open standard for AI-navigable web applications",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
},
|
|
12
|
+
"./react": {
|
|
13
|
+
"import": "./dist/react.js",
|
|
14
|
+
"types": "./dist/react.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": ["dist"],
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"react": ">=18",
|
|
20
|
+
"zod": "^3.25.28"
|
|
21
|
+
},
|
|
22
|
+
"peerDependenciesMeta": {
|
|
23
|
+
"react": {
|
|
24
|
+
"optional": true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"typescript": "^5.7.3",
|
|
29
|
+
"vitest": "^3.1.3",
|
|
30
|
+
"@types/react": "^19.1.2",
|
|
31
|
+
"zod": "^3.25.28",
|
|
32
|
+
"react": "^19.1.0"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/vvtitov/synqel-protocol.git",
|
|
37
|
+
"directory": "packages/sdk"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/vvtitov/synqel-protocol#readme",
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/vvtitov/synqel-protocol/issues"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"ai",
|
|
45
|
+
"semantic",
|
|
46
|
+
"protocol",
|
|
47
|
+
"agents",
|
|
48
|
+
"accessibility",
|
|
49
|
+
"registry",
|
|
50
|
+
"sdk",
|
|
51
|
+
"mcp",
|
|
52
|
+
"json-schema",
|
|
53
|
+
"zod"
|
|
54
|
+
],
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc",
|
|
57
|
+
"test": "vitest run",
|
|
58
|
+
"typecheck": "tsc --noEmit",
|
|
59
|
+
"prepublishOnly": "bun run test && bun run build"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"zod-to-json-schema": "^3.25.2"
|
|
63
|
+
},
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public"
|
|
66
|
+
}
|
|
67
|
+
}
|