@manifesto-ai/core 0.3.0 → 1.0.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/README.md +129 -499
- package/dist/core/apply.d.ts +16 -0
- package/dist/core/apply.d.ts.map +1 -0
- package/dist/core/apply.js +52 -0
- package/dist/core/apply.js.map +1 -0
- package/dist/core/compute.d.ts +17 -0
- package/dist/core/compute.d.ts.map +1 -0
- package/dist/core/compute.js +197 -0
- package/dist/core/compute.js.map +1 -0
- package/dist/core/compute.test.d.ts +2 -0
- package/dist/core/compute.test.d.ts.map +1 -0
- package/dist/core/compute.test.js +400 -0
- package/dist/core/compute.test.js.map +1 -0
- package/dist/core/explain.d.ts +14 -0
- package/dist/core/explain.d.ts.map +1 -0
- package/dist/core/explain.js +74 -0
- package/dist/core/explain.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/validate.d.ts +15 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +143 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/core/validate.test.d.ts +2 -0
- package/dist/core/validate.test.d.ts.map +1 -0
- package/dist/core/validate.test.js +450 -0
- package/dist/core/validate.test.js.map +1 -0
- package/dist/errors.d.ts +30 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +51 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluator/computed.d.ts +14 -0
- package/dist/evaluator/computed.d.ts.map +1 -0
- package/dist/evaluator/computed.js +57 -0
- package/dist/evaluator/computed.js.map +1 -0
- package/dist/evaluator/context.d.ts +46 -0
- package/dist/evaluator/context.d.ts.map +1 -0
- package/dist/evaluator/context.js +35 -0
- package/dist/evaluator/context.js.map +1 -0
- package/dist/evaluator/dag.d.ts +30 -0
- package/dist/evaluator/dag.d.ts.map +1 -0
- package/dist/evaluator/dag.js +121 -0
- package/dist/evaluator/dag.js.map +1 -0
- package/dist/evaluator/expr.d.ts +11 -0
- package/dist/evaluator/expr.d.ts.map +1 -0
- package/dist/evaluator/expr.js +498 -0
- package/dist/evaluator/expr.js.map +1 -0
- package/dist/evaluator/expr.test.d.ts +2 -0
- package/dist/evaluator/expr.test.d.ts.map +1 -0
- package/dist/evaluator/expr.test.js +426 -0
- package/dist/evaluator/expr.test.js.map +1 -0
- package/dist/evaluator/flow.d.ts +35 -0
- package/dist/evaluator/flow.d.ts.map +1 -0
- package/dist/evaluator/flow.js +234 -0
- package/dist/evaluator/flow.js.map +1 -0
- package/dist/evaluator/flow.test.d.ts +2 -0
- package/dist/evaluator/flow.test.d.ts.map +1 -0
- package/dist/evaluator/flow.test.js +446 -0
- package/dist/evaluator/flow.test.js.map +1 -0
- package/dist/evaluator/index.d.ts +6 -0
- package/dist/evaluator/index.d.ts.map +1 -0
- package/dist/evaluator/index.js +6 -0
- package/dist/evaluator/index.js.map +1 -0
- package/dist/factories.d.ts +20 -0
- package/dist/factories.d.ts.map +1 -0
- package/dist/factories.js +43 -0
- package/dist/factories.js.map +1 -0
- package/dist/index.d.ts +46 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -45
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +13 -0
- package/dist/index.test.js.map +1 -0
- package/dist/schema/action.d.ts +14 -0
- package/dist/schema/action.d.ts.map +1 -0
- package/dist/schema/action.js +30 -0
- package/dist/schema/action.js.map +1 -0
- package/dist/schema/common.d.ts +37 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +20 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/computed.d.ts +23 -0
- package/dist/schema/computed.d.ts.map +1 -0
- package/dist/schema/computed.js +34 -0
- package/dist/schema/computed.js.map +1 -0
- package/dist/schema/domain.d.ts +46 -0
- package/dist/schema/domain.d.ts.map +1 -0
- package/dist/schema/domain.js +54 -0
- package/dist/schema/domain.js.map +1 -0
- package/dist/schema/expr.d.ts +260 -0
- package/dist/schema/expr.d.ts.map +1 -0
- package/dist/schema/expr.js +247 -0
- package/dist/schema/expr.js.map +1 -0
- package/dist/schema/field.d.ts +48 -0
- package/dist/schema/field.d.ts.map +1 -0
- package/dist/schema/field.js +31 -0
- package/dist/schema/field.js.map +1 -0
- package/dist/schema/flow.d.ts +103 -0
- package/dist/schema/flow.d.ts.map +1 -0
- package/dist/schema/flow.js +82 -0
- package/dist/schema/flow.js.map +1 -0
- package/dist/schema/index.d.ts +11 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +22 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/patch.d.ts +59 -0
- package/dist/schema/patch.d.ts.map +1 -0
- package/dist/schema/patch.js +60 -0
- package/dist/schema/patch.js.map +1 -0
- package/dist/schema/result.d.ts +130 -0
- package/dist/schema/result.d.ts.map +1 -0
- package/dist/schema/result.js +90 -0
- package/dist/schema/result.js.map +1 -0
- package/dist/schema/snapshot.d.ts +151 -0
- package/dist/schema/snapshot.d.ts.map +1 -0
- package/dist/schema/snapshot.js +156 -0
- package/dist/schema/snapshot.js.map +1 -0
- package/dist/schema/trace.d.ts +87 -0
- package/dist/schema/trace.d.ts.map +1 -0
- package/dist/schema/trace.js +79 -0
- package/dist/schema/trace.js.map +1 -0
- package/dist/utils/canonical.d.ts +29 -0
- package/dist/utils/canonical.d.ts.map +1 -0
- package/dist/utils/canonical.js +56 -0
- package/dist/utils/canonical.js.map +1 -0
- package/dist/utils/canonical.test.d.ts +2 -0
- package/dist/utils/canonical.test.d.ts.map +1 -0
- package/dist/utils/canonical.test.js +153 -0
- package/dist/utils/canonical.test.js.map +1 -0
- package/dist/utils/hash.d.ts +20 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +38 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/hash.test.d.ts +2 -0
- package/dist/utils/hash.test.d.ts.map +1 -0
- package/dist/utils/hash.test.js +146 -0
- package/dist/utils/hash.test.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/path.d.ts +40 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +132 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/path.test.d.ts +2 -0
- package/dist/utils/path.test.d.ts.map +1 -0
- package/dist/utils/path.test.js +191 -0
- package/dist/utils/path.test.js.map +1 -0
- package/package.json +25 -39
- package/LICENSE +0 -21
- package/dist/dag/graph.d.ts +0 -62
- package/dist/dag/graph.d.ts.map +0 -1
- package/dist/dag/graph.js +0 -244
- package/dist/dag/graph.js.map +0 -1
- package/dist/dag/index.d.ts +0 -4
- package/dist/dag/index.d.ts.map +0 -1
- package/dist/dag/index.js +0 -4
- package/dist/dag/index.js.map +0 -1
- package/dist/dag/propagation.d.ts +0 -58
- package/dist/dag/propagation.d.ts.map +0 -1
- package/dist/dag/propagation.js +0 -224
- package/dist/dag/propagation.js.map +0 -1
- package/dist/dag/topological.d.ts +0 -33
- package/dist/dag/topological.d.ts.map +0 -1
- package/dist/dag/topological.js +0 -173
- package/dist/dag/topological.js.map +0 -1
- package/dist/domain/define.d.ts +0 -82
- package/dist/domain/define.d.ts.map +0 -1
- package/dist/domain/define.js +0 -105
- package/dist/domain/define.js.map +0 -1
- package/dist/domain/index.d.ts +0 -4
- package/dist/domain/index.d.ts.map +0 -1
- package/dist/domain/index.js +0 -4
- package/dist/domain/index.js.map +0 -1
- package/dist/domain/types.d.ts +0 -203
- package/dist/domain/types.d.ts.map +0 -1
- package/dist/domain/types.js +0 -2
- package/dist/domain/types.js.map +0 -1
- package/dist/domain/validate.d.ts +0 -17
- package/dist/domain/validate.d.ts.map +0 -1
- package/dist/domain/validate.js +0 -204
- package/dist/domain/validate.js.map +0 -1
- package/dist/effect/index.d.ts +0 -4
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -4
- package/dist/effect/index.js.map +0 -1
- package/dist/effect/result.d.ts +0 -100
- package/dist/effect/result.d.ts.map +0 -1
- package/dist/effect/result.js +0 -163
- package/dist/effect/result.js.map +0 -1
- package/dist/effect/runner.d.ts +0 -98
- package/dist/effect/runner.d.ts.map +0 -1
- package/dist/effect/runner.js +0 -321
- package/dist/effect/runner.js.map +0 -1
- package/dist/effect/types.d.ts +0 -169
- package/dist/effect/types.d.ts.map +0 -1
- package/dist/effect/types.js +0 -28
- package/dist/effect/types.js.map +0 -1
- package/dist/expression/analyzer.d.ts +0 -42
- package/dist/expression/analyzer.d.ts.map +0 -1
- package/dist/expression/analyzer.js +0 -166
- package/dist/expression/analyzer.js.map +0 -1
- package/dist/expression/evaluator.d.ts +0 -16
- package/dist/expression/evaluator.d.ts.map +0 -1
- package/dist/expression/evaluator.js +0 -382
- package/dist/expression/evaluator.js.map +0 -1
- package/dist/expression/index.d.ts +0 -5
- package/dist/expression/index.d.ts.map +0 -1
- package/dist/expression/index.js +0 -5
- package/dist/expression/index.js.map +0 -1
- package/dist/expression/parser.d.ts +0 -37
- package/dist/expression/parser.d.ts.map +0 -1
- package/dist/expression/parser.js +0 -201
- package/dist/expression/parser.js.map +0 -1
- package/dist/expression/types.d.ts +0 -123
- package/dist/expression/types.d.ts.map +0 -1
- package/dist/expression/types.js +0 -10
- package/dist/expression/types.js.map +0 -1
- package/dist/policy/field-policy.d.ts +0 -63
- package/dist/policy/field-policy.d.ts.map +0 -1
- package/dist/policy/field-policy.js +0 -138
- package/dist/policy/field-policy.js.map +0 -1
- package/dist/policy/index.d.ts +0 -3
- package/dist/policy/index.d.ts.map +0 -1
- package/dist/policy/index.js +0 -3
- package/dist/policy/index.js.map +0 -1
- package/dist/policy/precondition.d.ts +0 -58
- package/dist/policy/precondition.d.ts.map +0 -1
- package/dist/policy/precondition.js +0 -115
- package/dist/policy/precondition.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -4
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -4
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/runtime.d.ts +0 -94
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js +0 -294
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/runtime/snapshot.d.ts +0 -39
- package/dist/runtime/snapshot.d.ts.map +0 -1
- package/dist/runtime/snapshot.js +0 -264
- package/dist/runtime/snapshot.js.map +0 -1
- package/dist/runtime/subscription.d.ts +0 -82
- package/dist/runtime/subscription.d.ts.map +0 -1
- package/dist/runtime/subscription.js +0 -222
- package/dist/runtime/subscription.js.map +0 -1
- package/dist/schema/integration.d.ts +0 -89
- package/dist/schema/integration.d.ts.map +0 -1
- package/dist/schema/integration.js +0 -171
- package/dist/schema/integration.js.map +0 -1
- package/dist/schema/validation.d.ts +0 -51
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/schema/validation.js +0 -212
- package/dist/schema/validation.js.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* ErrorValue - Errors are values in Snapshot, not exceptions.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ErrorValue: z.ZodObject<{
|
|
6
|
+
code: z.ZodString;
|
|
7
|
+
message: z.ZodString;
|
|
8
|
+
source: z.ZodObject<{
|
|
9
|
+
actionId: z.ZodString;
|
|
10
|
+
nodePath: z.ZodString;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
timestamp: z.ZodNumber;
|
|
13
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
export type ErrorValue = z.infer<typeof ErrorValue>;
|
|
16
|
+
/**
|
|
17
|
+
* FlowPosition - Position in the flow where effect was encountered
|
|
18
|
+
*/
|
|
19
|
+
export declare const FlowPosition: z.ZodObject<{
|
|
20
|
+
nodePath: z.ZodString;
|
|
21
|
+
snapshotVersion: z.ZodNumber;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type FlowPosition = z.infer<typeof FlowPosition>;
|
|
24
|
+
/**
|
|
25
|
+
* Requirement - A recorded effect declaration waiting for Host fulfillment
|
|
26
|
+
*/
|
|
27
|
+
export declare const Requirement: z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
type: z.ZodString;
|
|
30
|
+
params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
31
|
+
actionId: z.ZodString;
|
|
32
|
+
flowPosition: z.ZodObject<{
|
|
33
|
+
nodePath: z.ZodString;
|
|
34
|
+
snapshotVersion: z.ZodNumber;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
createdAt: z.ZodNumber;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type Requirement = z.infer<typeof Requirement>;
|
|
39
|
+
/**
|
|
40
|
+
* SystemState - Internal system state
|
|
41
|
+
*/
|
|
42
|
+
export declare const SystemState: z.ZodObject<{
|
|
43
|
+
status: z.ZodEnum<{
|
|
44
|
+
error: "error";
|
|
45
|
+
idle: "idle";
|
|
46
|
+
computing: "computing";
|
|
47
|
+
pending: "pending";
|
|
48
|
+
}>;
|
|
49
|
+
lastError: z.ZodNullable<z.ZodObject<{
|
|
50
|
+
code: z.ZodString;
|
|
51
|
+
message: z.ZodString;
|
|
52
|
+
source: z.ZodObject<{
|
|
53
|
+
actionId: z.ZodString;
|
|
54
|
+
nodePath: z.ZodString;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
timestamp: z.ZodNumber;
|
|
57
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
errors: z.ZodArray<z.ZodObject<{
|
|
60
|
+
code: z.ZodString;
|
|
61
|
+
message: z.ZodString;
|
|
62
|
+
source: z.ZodObject<{
|
|
63
|
+
actionId: z.ZodString;
|
|
64
|
+
nodePath: z.ZodString;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
timestamp: z.ZodNumber;
|
|
67
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
pendingRequirements: z.ZodArray<z.ZodObject<{
|
|
70
|
+
id: z.ZodString;
|
|
71
|
+
type: z.ZodString;
|
|
72
|
+
params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
73
|
+
actionId: z.ZodString;
|
|
74
|
+
flowPosition: z.ZodObject<{
|
|
75
|
+
nodePath: z.ZodString;
|
|
76
|
+
snapshotVersion: z.ZodNumber;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
createdAt: z.ZodNumber;
|
|
79
|
+
}, z.core.$strip>>;
|
|
80
|
+
currentAction: z.ZodNullable<z.ZodString>;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
export type SystemState = z.infer<typeof SystemState>;
|
|
83
|
+
/**
|
|
84
|
+
* SnapshotMeta - Snapshot metadata
|
|
85
|
+
*/
|
|
86
|
+
export declare const SnapshotMeta: z.ZodObject<{
|
|
87
|
+
version: z.ZodNumber;
|
|
88
|
+
timestamp: z.ZodNumber;
|
|
89
|
+
schemaHash: z.ZodString;
|
|
90
|
+
}, z.core.$strip>;
|
|
91
|
+
export type SnapshotMeta = z.infer<typeof SnapshotMeta>;
|
|
92
|
+
/**
|
|
93
|
+
* Snapshot - Immutable, point-in-time representation of world state.
|
|
94
|
+
* This is the ONLY medium of communication between Core and Host.
|
|
95
|
+
*/
|
|
96
|
+
export declare const Snapshot: z.ZodObject<{
|
|
97
|
+
data: z.ZodUnknown;
|
|
98
|
+
computed: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
99
|
+
system: z.ZodObject<{
|
|
100
|
+
status: z.ZodEnum<{
|
|
101
|
+
error: "error";
|
|
102
|
+
idle: "idle";
|
|
103
|
+
computing: "computing";
|
|
104
|
+
pending: "pending";
|
|
105
|
+
}>;
|
|
106
|
+
lastError: z.ZodNullable<z.ZodObject<{
|
|
107
|
+
code: z.ZodString;
|
|
108
|
+
message: z.ZodString;
|
|
109
|
+
source: z.ZodObject<{
|
|
110
|
+
actionId: z.ZodString;
|
|
111
|
+
nodePath: z.ZodString;
|
|
112
|
+
}, z.core.$strip>;
|
|
113
|
+
timestamp: z.ZodNumber;
|
|
114
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
115
|
+
}, z.core.$strip>>;
|
|
116
|
+
errors: z.ZodArray<z.ZodObject<{
|
|
117
|
+
code: z.ZodString;
|
|
118
|
+
message: z.ZodString;
|
|
119
|
+
source: z.ZodObject<{
|
|
120
|
+
actionId: z.ZodString;
|
|
121
|
+
nodePath: z.ZodString;
|
|
122
|
+
}, z.core.$strip>;
|
|
123
|
+
timestamp: z.ZodNumber;
|
|
124
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
125
|
+
}, z.core.$strip>>;
|
|
126
|
+
pendingRequirements: z.ZodArray<z.ZodObject<{
|
|
127
|
+
id: z.ZodString;
|
|
128
|
+
type: z.ZodString;
|
|
129
|
+
params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
130
|
+
actionId: z.ZodString;
|
|
131
|
+
flowPosition: z.ZodObject<{
|
|
132
|
+
nodePath: z.ZodString;
|
|
133
|
+
snapshotVersion: z.ZodNumber;
|
|
134
|
+
}, z.core.$strip>;
|
|
135
|
+
createdAt: z.ZodNumber;
|
|
136
|
+
}, z.core.$strip>>;
|
|
137
|
+
currentAction: z.ZodNullable<z.ZodString>;
|
|
138
|
+
}, z.core.$strip>;
|
|
139
|
+
input: z.ZodUnknown;
|
|
140
|
+
meta: z.ZodObject<{
|
|
141
|
+
version: z.ZodNumber;
|
|
142
|
+
timestamp: z.ZodNumber;
|
|
143
|
+
schemaHash: z.ZodString;
|
|
144
|
+
}, z.core.$strip>;
|
|
145
|
+
}, z.core.$strip>;
|
|
146
|
+
export type Snapshot = z.infer<typeof Snapshot>;
|
|
147
|
+
/**
|
|
148
|
+
* Create initial system state
|
|
149
|
+
*/
|
|
150
|
+
export declare function createInitialSystemState(): SystemState;
|
|
151
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/schema/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;iBA4BrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY;;;iBAUvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;iBA+BtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,YAAY;;;;iBAiBvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBnB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,CAQtD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SemanticPath } from "./common.js";
|
|
3
|
+
/**
|
|
4
|
+
* ErrorValue - Errors are values in Snapshot, not exceptions.
|
|
5
|
+
*/
|
|
6
|
+
export const ErrorValue = z.object({
|
|
7
|
+
/**
|
|
8
|
+
* Error code
|
|
9
|
+
*/
|
|
10
|
+
code: z.string(),
|
|
11
|
+
/**
|
|
12
|
+
* Human-readable message
|
|
13
|
+
*/
|
|
14
|
+
message: z.string(),
|
|
15
|
+
/**
|
|
16
|
+
* Where the error occurred
|
|
17
|
+
*/
|
|
18
|
+
source: z.object({
|
|
19
|
+
actionId: z.string(),
|
|
20
|
+
nodePath: z.string(),
|
|
21
|
+
}),
|
|
22
|
+
/**
|
|
23
|
+
* When the error occurred
|
|
24
|
+
*/
|
|
25
|
+
timestamp: z.number(),
|
|
26
|
+
/**
|
|
27
|
+
* Additional context
|
|
28
|
+
*/
|
|
29
|
+
context: z.record(z.string(), z.unknown()).optional(),
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* FlowPosition - Position in the flow where effect was encountered
|
|
33
|
+
*/
|
|
34
|
+
export const FlowPosition = z.object({
|
|
35
|
+
/**
|
|
36
|
+
* Path to the effect node in the flow
|
|
37
|
+
*/
|
|
38
|
+
nodePath: z.string(),
|
|
39
|
+
/**
|
|
40
|
+
* Snapshot version at time of effect
|
|
41
|
+
*/
|
|
42
|
+
snapshotVersion: z.number(),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Requirement - A recorded effect declaration waiting for Host fulfillment
|
|
46
|
+
*/
|
|
47
|
+
export const Requirement = z.object({
|
|
48
|
+
/**
|
|
49
|
+
* Unique identifier for this requirement.
|
|
50
|
+
* Should be deterministic: hash(schemaHash, intentId, actionId, flowNodePath)
|
|
51
|
+
*/
|
|
52
|
+
id: z.string(),
|
|
53
|
+
/**
|
|
54
|
+
* Effect type that generated this requirement
|
|
55
|
+
*/
|
|
56
|
+
type: z.string(),
|
|
57
|
+
/**
|
|
58
|
+
* Resolved parameters
|
|
59
|
+
*/
|
|
60
|
+
params: z.record(z.string(), z.unknown()),
|
|
61
|
+
/**
|
|
62
|
+
* The action that was being computed
|
|
63
|
+
*/
|
|
64
|
+
actionId: z.string(),
|
|
65
|
+
/**
|
|
66
|
+
* Position in the flow where effect was encountered
|
|
67
|
+
*/
|
|
68
|
+
flowPosition: FlowPosition,
|
|
69
|
+
/**
|
|
70
|
+
* Timestamp when requirement was created
|
|
71
|
+
*/
|
|
72
|
+
createdAt: z.number(),
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* SystemState - Internal system state
|
|
76
|
+
*/
|
|
77
|
+
export const SystemState = z.object({
|
|
78
|
+
/**
|
|
79
|
+
* Current status
|
|
80
|
+
*/
|
|
81
|
+
status: z.enum(["idle", "computing", "pending", "error"]),
|
|
82
|
+
/**
|
|
83
|
+
* Last error (null if none)
|
|
84
|
+
*/
|
|
85
|
+
lastError: ErrorValue.nullable(),
|
|
86
|
+
/**
|
|
87
|
+
* Error history
|
|
88
|
+
*/
|
|
89
|
+
errors: z.array(ErrorValue),
|
|
90
|
+
/**
|
|
91
|
+
* Pending requirements waiting for Host
|
|
92
|
+
*/
|
|
93
|
+
pendingRequirements: z.array(Requirement),
|
|
94
|
+
/**
|
|
95
|
+
* Current action being processed (if any)
|
|
96
|
+
*/
|
|
97
|
+
currentAction: z.string().nullable(),
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* SnapshotMeta - Snapshot metadata
|
|
101
|
+
*/
|
|
102
|
+
export const SnapshotMeta = z.object({
|
|
103
|
+
/**
|
|
104
|
+
* Monotonically increasing version.
|
|
105
|
+
* Incremented by Core on each apply().
|
|
106
|
+
*/
|
|
107
|
+
version: z.number(),
|
|
108
|
+
/**
|
|
109
|
+
* Timestamp of last modification.
|
|
110
|
+
* Set by Core on each apply().
|
|
111
|
+
*/
|
|
112
|
+
timestamp: z.number(),
|
|
113
|
+
/**
|
|
114
|
+
* Hash of the schema this snapshot conforms to.
|
|
115
|
+
*/
|
|
116
|
+
schemaHash: z.string(),
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Snapshot - Immutable, point-in-time representation of world state.
|
|
120
|
+
* This is the ONLY medium of communication between Core and Host.
|
|
121
|
+
*/
|
|
122
|
+
export const Snapshot = z.object({
|
|
123
|
+
/**
|
|
124
|
+
* Domain data (matches StateSpec)
|
|
125
|
+
*/
|
|
126
|
+
data: z.unknown(),
|
|
127
|
+
/**
|
|
128
|
+
* Computed values (matches ComputedSpec)
|
|
129
|
+
*/
|
|
130
|
+
computed: z.record(SemanticPath, z.unknown()),
|
|
131
|
+
/**
|
|
132
|
+
* System state
|
|
133
|
+
*/
|
|
134
|
+
system: SystemState,
|
|
135
|
+
/**
|
|
136
|
+
* Input for current action (if any)
|
|
137
|
+
*/
|
|
138
|
+
input: z.unknown(),
|
|
139
|
+
/**
|
|
140
|
+
* Snapshot metadata
|
|
141
|
+
*/
|
|
142
|
+
meta: SnapshotMeta,
|
|
143
|
+
});
|
|
144
|
+
/**
|
|
145
|
+
* Create initial system state
|
|
146
|
+
*/
|
|
147
|
+
export function createInitialSystemState() {
|
|
148
|
+
return {
|
|
149
|
+
status: "idle",
|
|
150
|
+
lastError: null,
|
|
151
|
+
errors: [],
|
|
152
|
+
pendingRequirements: [],
|
|
153
|
+
currentAction: null,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/schema/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* TraceNodeKind - Types of trace nodes
|
|
4
|
+
*/
|
|
5
|
+
export declare const TraceNodeKind: z.ZodEnum<{
|
|
6
|
+
error: "error";
|
|
7
|
+
computed: "computed";
|
|
8
|
+
expr: "expr";
|
|
9
|
+
patch: "patch";
|
|
10
|
+
effect: "effect";
|
|
11
|
+
call: "call";
|
|
12
|
+
flow: "flow";
|
|
13
|
+
halt: "halt";
|
|
14
|
+
branch: "branch";
|
|
15
|
+
}>;
|
|
16
|
+
export type TraceNodeKind = z.infer<typeof TraceNodeKind>;
|
|
17
|
+
/**
|
|
18
|
+
* TraceNode - A single node in the execution trace.
|
|
19
|
+
* Enables explainability - every computation produces a trace.
|
|
20
|
+
*/
|
|
21
|
+
export type TraceNode = {
|
|
22
|
+
/**
|
|
23
|
+
* Unique identifier for this trace node
|
|
24
|
+
*/
|
|
25
|
+
id: string;
|
|
26
|
+
/**
|
|
27
|
+
* Type of trace node
|
|
28
|
+
*/
|
|
29
|
+
kind: TraceNodeKind;
|
|
30
|
+
/**
|
|
31
|
+
* Path in the schema that produced this trace
|
|
32
|
+
*/
|
|
33
|
+
sourcePath: string;
|
|
34
|
+
/**
|
|
35
|
+
* Input values at this point
|
|
36
|
+
*/
|
|
37
|
+
inputs: Record<string, unknown>;
|
|
38
|
+
/**
|
|
39
|
+
* Output value produced
|
|
40
|
+
*/
|
|
41
|
+
output: unknown;
|
|
42
|
+
/**
|
|
43
|
+
* Child trace nodes
|
|
44
|
+
*/
|
|
45
|
+
children: TraceNode[];
|
|
46
|
+
/**
|
|
47
|
+
* Timestamp
|
|
48
|
+
*/
|
|
49
|
+
timestamp: number;
|
|
50
|
+
};
|
|
51
|
+
export declare const TraceNode: z.ZodType<TraceNode>;
|
|
52
|
+
/**
|
|
53
|
+
* TraceTermination - How the computation ended
|
|
54
|
+
*/
|
|
55
|
+
export declare const TraceTermination: z.ZodEnum<{
|
|
56
|
+
error: "error";
|
|
57
|
+
effect: "effect";
|
|
58
|
+
halt: "halt";
|
|
59
|
+
complete: "complete";
|
|
60
|
+
}>;
|
|
61
|
+
export type TraceTermination = z.infer<typeof TraceTermination>;
|
|
62
|
+
/**
|
|
63
|
+
* TraceGraph - Complete trace of a computation
|
|
64
|
+
*/
|
|
65
|
+
export declare const TraceGraph: z.ZodObject<{
|
|
66
|
+
root: z.ZodType<TraceNode, unknown, z.core.$ZodTypeInternals<TraceNode, unknown>>;
|
|
67
|
+
nodes: z.ZodRecord<z.ZodString, z.ZodType<TraceNode, unknown, z.core.$ZodTypeInternals<TraceNode, unknown>>>;
|
|
68
|
+
intent: z.ZodObject<{
|
|
69
|
+
type: z.ZodString;
|
|
70
|
+
input: z.ZodUnknown;
|
|
71
|
+
}, z.core.$strip>;
|
|
72
|
+
baseVersion: z.ZodNumber;
|
|
73
|
+
resultVersion: z.ZodNumber;
|
|
74
|
+
duration: z.ZodNumber;
|
|
75
|
+
terminatedBy: z.ZodEnum<{
|
|
76
|
+
error: "error";
|
|
77
|
+
effect: "effect";
|
|
78
|
+
halt: "halt";
|
|
79
|
+
complete: "complete";
|
|
80
|
+
}>;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
export type TraceGraph = z.infer<typeof TraceGraph>;
|
|
83
|
+
/**
|
|
84
|
+
* Create a trace node
|
|
85
|
+
*/
|
|
86
|
+
export declare function createTraceNode(kind: TraceNodeKind, sourcePath: string, inputs: Record<string, unknown>, output: unknown, children?: TraceNode[]): TraceNode;
|
|
87
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/schema/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;EAUxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,SAAS,EAAE,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAU1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;EAAkD,CAAC;AAChF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;iBAsCrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,OAAO,EACf,QAAQ,GAAE,SAAS,EAAO,GACzB,SAAS,CAUX"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* TraceNodeKind - Types of trace nodes
|
|
4
|
+
*/
|
|
5
|
+
export const TraceNodeKind = z.enum([
|
|
6
|
+
"expr", // Expression evaluation
|
|
7
|
+
"computed", // Computed field evaluation
|
|
8
|
+
"flow", // Flow execution
|
|
9
|
+
"patch", // State mutation
|
|
10
|
+
"effect", // Effect declaration
|
|
11
|
+
"branch", // Conditional branch taken
|
|
12
|
+
"call", // Flow call
|
|
13
|
+
"halt", // Normal termination
|
|
14
|
+
"error", // Error occurred
|
|
15
|
+
]);
|
|
16
|
+
export const TraceNode = z.lazy(() => z.object({
|
|
17
|
+
id: z.string(),
|
|
18
|
+
kind: TraceNodeKind,
|
|
19
|
+
sourcePath: z.string(),
|
|
20
|
+
inputs: z.record(z.string(), z.unknown()),
|
|
21
|
+
output: z.unknown(),
|
|
22
|
+
children: z.array(TraceNode),
|
|
23
|
+
timestamp: z.number(),
|
|
24
|
+
}));
|
|
25
|
+
/**
|
|
26
|
+
* TraceTermination - How the computation ended
|
|
27
|
+
*/
|
|
28
|
+
export const TraceTermination = z.enum(["complete", "effect", "halt", "error"]);
|
|
29
|
+
/**
|
|
30
|
+
* TraceGraph - Complete trace of a computation
|
|
31
|
+
*/
|
|
32
|
+
export const TraceGraph = z.object({
|
|
33
|
+
/**
|
|
34
|
+
* Root trace node
|
|
35
|
+
*/
|
|
36
|
+
root: TraceNode,
|
|
37
|
+
/**
|
|
38
|
+
* All nodes indexed by ID for quick lookup
|
|
39
|
+
*/
|
|
40
|
+
nodes: z.record(z.string(), TraceNode),
|
|
41
|
+
/**
|
|
42
|
+
* The intent that triggered this computation
|
|
43
|
+
*/
|
|
44
|
+
intent: z.object({
|
|
45
|
+
type: z.string(),
|
|
46
|
+
input: z.unknown(),
|
|
47
|
+
}),
|
|
48
|
+
/**
|
|
49
|
+
* Snapshot version at start
|
|
50
|
+
*/
|
|
51
|
+
baseVersion: z.number(),
|
|
52
|
+
/**
|
|
53
|
+
* Snapshot version at end
|
|
54
|
+
*/
|
|
55
|
+
resultVersion: z.number(),
|
|
56
|
+
/**
|
|
57
|
+
* Total computation time (ms)
|
|
58
|
+
*/
|
|
59
|
+
duration: z.number(),
|
|
60
|
+
/**
|
|
61
|
+
* Termination reason
|
|
62
|
+
*/
|
|
63
|
+
terminatedBy: TraceTermination,
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* Create a trace node
|
|
67
|
+
*/
|
|
68
|
+
export function createTraceNode(kind, sourcePath, inputs, output, children = []) {
|
|
69
|
+
return {
|
|
70
|
+
id: `trace-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
|
|
71
|
+
kind,
|
|
72
|
+
sourcePath,
|
|
73
|
+
inputs,
|
|
74
|
+
output,
|
|
75
|
+
children,
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/schema/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,MAAM,EAAM,wBAAwB;IACpC,UAAU,EAAE,4BAA4B;IACxC,MAAM,EAAM,iBAAiB;IAC7B,OAAO,EAAK,iBAAiB;IAC7B,QAAQ,EAAI,qBAAqB;IACjC,QAAQ,EAAI,2BAA2B;IACvC,MAAM,EAAM,YAAY;IACxB,MAAM,EAAM,qBAAqB;IACjC,OAAO,EAAK,iBAAiB;CAC9B,CAAC,CAAC;AA4CH,MAAM,CAAC,MAAM,SAAS,GAAyB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACzD,CAAC,CAAC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,aAAa;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAGhF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC;;OAEG;IACH,IAAI,EAAE,SAAS;IAEf;;OAEG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC;IAEtC;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;KACnB,CAAC;IAEF;;OAEG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IAEvB;;OAEG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IAEzB;;OAEG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAEpB;;OAEG;IACH,YAAY,EAAE,gBAAgB;CAC/B,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAmB,EACnB,UAAkB,EAClB,MAA+B,EAC/B,MAAe,EACf,WAAwB,EAAE;IAE1B,OAAO;QACL,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACnE,IAAI;QACJ,UAAU;QACV,MAAM;QACN,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical form utilities for deterministic hashing
|
|
3
|
+
*
|
|
4
|
+
* Algorithm:
|
|
5
|
+
* 1. Sort all object keys alphabetically (recursive)
|
|
6
|
+
* 2. Remove all keys with undefined value
|
|
7
|
+
* 3. Preserve keys with null value
|
|
8
|
+
* 4. Serialize using JSON with no whitespace
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Recursively sort object keys alphabetically
|
|
12
|
+
*/
|
|
13
|
+
export declare function sortKeys(obj: unknown): unknown;
|
|
14
|
+
/**
|
|
15
|
+
* Convert object to canonical JSON string
|
|
16
|
+
* - Keys are sorted alphabetically
|
|
17
|
+
* - Undefined values are removed
|
|
18
|
+
* - No whitespace
|
|
19
|
+
*/
|
|
20
|
+
export declare function toCanonical(obj: unknown): string;
|
|
21
|
+
/**
|
|
22
|
+
* Parse canonical JSON string
|
|
23
|
+
*/
|
|
24
|
+
export declare function fromCanonical<T>(canonical: string): T;
|
|
25
|
+
/**
|
|
26
|
+
* Check if two objects are equal in canonical form
|
|
27
|
+
*/
|
|
28
|
+
export declare function canonicalEqual(a: unknown, b: unknown): boolean;
|
|
29
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/utils/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAyB9C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,CAErD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical form utilities for deterministic hashing
|
|
3
|
+
*
|
|
4
|
+
* Algorithm:
|
|
5
|
+
* 1. Sort all object keys alphabetically (recursive)
|
|
6
|
+
* 2. Remove all keys with undefined value
|
|
7
|
+
* 3. Preserve keys with null value
|
|
8
|
+
* 4. Serialize using JSON with no whitespace
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Recursively sort object keys alphabetically
|
|
12
|
+
*/
|
|
13
|
+
export function sortKeys(obj) {
|
|
14
|
+
if (obj === null || obj === undefined) {
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(obj)) {
|
|
18
|
+
return obj.map(sortKeys);
|
|
19
|
+
}
|
|
20
|
+
if (typeof obj === "object") {
|
|
21
|
+
const sorted = {};
|
|
22
|
+
const keys = Object.keys(obj).sort();
|
|
23
|
+
for (const key of keys) {
|
|
24
|
+
const value = obj[key];
|
|
25
|
+
// Remove undefined values
|
|
26
|
+
if (value !== undefined) {
|
|
27
|
+
sorted[key] = sortKeys(value);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return sorted;
|
|
31
|
+
}
|
|
32
|
+
return obj;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert object to canonical JSON string
|
|
36
|
+
* - Keys are sorted alphabetically
|
|
37
|
+
* - Undefined values are removed
|
|
38
|
+
* - No whitespace
|
|
39
|
+
*/
|
|
40
|
+
export function toCanonical(obj) {
|
|
41
|
+
const sorted = sortKeys(obj);
|
|
42
|
+
return JSON.stringify(sorted);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse canonical JSON string
|
|
46
|
+
*/
|
|
47
|
+
export function fromCanonical(canonical) {
|
|
48
|
+
return JSON.parse(canonical);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if two objects are equal in canonical form
|
|
52
|
+
*/
|
|
53
|
+
export function canonicalEqual(a, b) {
|
|
54
|
+
return toCanonical(a) === toCanonical(b);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/utils/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACpD,0BAA0B;YAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,SAAiB;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAM,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,CAAU;IACnD,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.test.d.ts","sourceRoot":"","sources":["../../src/utils/canonical.test.ts"],"names":[],"mappings":""}
|