behavior-contracts 0.7.3 → 0.8.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.
Files changed (63) hide show
  1. package/README.md +0 -1
  2. package/dist/authoring.d.ts +215 -3
  3. package/dist/authoring.d.ts.map +1 -1
  4. package/dist/authoring.js +269 -8
  5. package/dist/authoring.js.map +1 -1
  6. package/dist/behavior.d.ts +22 -1
  7. package/dist/behavior.d.ts.map +1 -1
  8. package/dist/behavior.js +23 -1
  9. package/dist/behavior.js.map +1 -1
  10. package/dist/bind.d.ts +64 -0
  11. package/dist/bind.d.ts.map +1 -0
  12. package/dist/bind.js +131 -0
  13. package/dist/bind.js.map +1 -0
  14. package/dist/builder.d.ts +30 -88
  15. package/dist/builder.d.ts.map +1 -1
  16. package/dist/builder.js +48 -56
  17. package/dist/builder.js.map +1 -1
  18. package/dist/expr-operator-types.d.ts +89 -0
  19. package/dist/expr-operator-types.d.ts.map +1 -0
  20. package/dist/expr-operator-types.js +134 -0
  21. package/dist/expr-operator-types.js.map +1 -0
  22. package/dist/generator/async-plan.d.ts.map +1 -1
  23. package/dist/generator/async-plan.js +4 -0
  24. package/dist/generator/async-plan.js.map +1 -1
  25. package/dist/generator/core.d.ts +15 -0
  26. package/dist/generator/core.d.ts.map +1 -1
  27. package/dist/generator/core.js +2 -0
  28. package/dist/generator/core.js.map +1 -1
  29. package/dist/generator/emit-php.d.ts.map +1 -1
  30. package/dist/generator/emit-php.js +1 -0
  31. package/dist/generator/emit-php.js.map +1 -1
  32. package/dist/generator/emit-python.d.ts.map +1 -1
  33. package/dist/generator/emit-python.js +1 -0
  34. package/dist/generator/emit-python.js.map +1 -1
  35. package/dist/generator/emit-straightline-typed-typescript.d.ts.map +1 -1
  36. package/dist/generator/emit-straightline-typed-typescript.js +1 -0
  37. package/dist/generator/emit-straightline-typed-typescript.js.map +1 -1
  38. package/dist/generator/emit-typed-native-go.d.ts.map +1 -1
  39. package/dist/generator/emit-typed-native-go.js +83 -12
  40. package/dist/generator/emit-typed-native-go.js.map +1 -1
  41. package/dist/generator/emit-typed-native-rust.d.ts.map +1 -1
  42. package/dist/generator/emit-typed-native-rust.js +83 -20
  43. package/dist/generator/emit-typed-native-rust.js.map +1 -1
  44. package/dist/generator/emit-typescript.d.ts.map +1 -1
  45. package/dist/generator/emit-typescript.js +24 -8
  46. package/dist/generator/emit-typescript.js.map +1 -1
  47. package/dist/generator/index.d.ts +1 -1
  48. package/dist/generator/index.d.ts.map +1 -1
  49. package/dist/generator/index.js +7 -5
  50. package/dist/generator/index.js.map +1 -1
  51. package/dist/index.d.ts +41 -8
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +27 -6
  54. package/dist/index.js.map +1 -1
  55. package/dist/provenance.d.ts +102 -0
  56. package/dist/provenance.d.ts.map +1 -0
  57. package/dist/provenance.js +128 -0
  58. package/dist/provenance.js.map +1 -0
  59. package/dist/type-gate.d.ts +63 -0
  60. package/dist/type-gate.d.ts.map +1 -0
  61. package/dist/type-gate.js +295 -0
  62. package/dist/type-gate.js.map +1 -0
  63. package/package.json +4 -3
@@ -0,0 +1,295 @@
1
+ import { cmpCodePoints } from "./expr-eval.js";
2
+ // operator I/O 型の唯一の宣言源(SSoT)。resolveExprType は value-operator の結果型をここから**読む**
3
+ // (ad-hoc な per-operator 分岐を持たない — consumer-interface.md §2.1 C3・#125/A3)。
4
+ import { operatorSignature, resolveOperatorResult, sameType } from "./expr-operator-types.js";
5
+ // ── Failure ─────────────────────────────────────────────────────────────────
6
+ /**
7
+ * UntypedNodeError — 型未確定ノード/フィールドを検出したときの fail-closed 失敗(SA5・0.8.0 end-state)。
8
+ * offending なノード id / メソッド / フィールドを message で名指す。
9
+ */
10
+ export class UntypedNodeError extends Error {
11
+ code;
12
+ constructor(message) {
13
+ super(message);
14
+ this.code = "UNTYPED_NODE";
15
+ this.name = "UntypedNodeError";
16
+ }
17
+ }
18
+ function untyped(message) {
19
+ throw new UntypedNodeError(message);
20
+ }
21
+ // ── input port 型 → PortableType(確定しているものだけ)───────────────────────────────
22
+ /**
23
+ * portableTypeOfInputPort — input port schema から PortableType を得る(確定しているときのみ)。
24
+ * `type:"array"` は `elemType`(A1/#108 の要素型)が付いているときだけ `{arr: elemType}` に確定。
25
+ * `type:"unknown"`(`In<>` 型がランタイムに残らず opts.inputPorts 未指定のケース)や、
26
+ * `PortableType` 閉集合外の type 文字列(`"number"` / `"string[]"` / `"object"` 等)は **未確定**として
27
+ * `undefined` を返す(=その port を output で直接参照すると `UNTYPED_NODE`)。
28
+ */
29
+ function portableTypeOfInputPort(schema) {
30
+ const base = (() => {
31
+ switch (schema.type) {
32
+ case "string":
33
+ case "int":
34
+ case "float":
35
+ case "bool":
36
+ case "null":
37
+ return schema.type;
38
+ case "array":
39
+ return schema.elemType !== undefined ? { arr: schema.elemType } : undefined;
40
+ default:
41
+ return undefined; // "unknown" / "number" / "string[]" / "object" 等は確定していない
42
+ }
43
+ })();
44
+ if (base === undefined)
45
+ return undefined;
46
+ return schema.required === false ? { opt: base } : base;
47
+ }
48
+ // ── PortableType の path 降下(確定型を辿る・構造伝播)───────────────────────────────
49
+ /**
50
+ * descend — 確定型 `t` に `field` を 1 段降りた型を返す(解決不能なら undefined)。
51
+ * - `{obj:{…}}`: 当該 field の型。無い field は解決不能。
52
+ * - `{opt:U}`: 内側 U を降りて `{opt: …}` で包み直す(optional chain 相当)。
53
+ * scalar / arr へのフィールドアクセスは解決不能(arr は index でなく field 参照されない)。
54
+ */
55
+ function descend(t, field) {
56
+ if (typeof t === "string")
57
+ return undefined;
58
+ if ("obj" in t)
59
+ return t.obj[field];
60
+ if ("opt" in t) {
61
+ const inner = descend(t.opt, field);
62
+ return inner === undefined ? undefined : { opt: inner };
63
+ }
64
+ return undefined; // arr
65
+ }
66
+ // ── Expression IR → 確定 PortableType(解決できなければ undefined)─────────────────────
67
+ /**
68
+ * resolveExprType — `output`(Φ 合成)に現れる Expression IR ノードの確定型を、確定済みノード型
69
+ * (`nodeTypes`)と input port 型から**構造的に解決**する。BC は推論しない — ここで解決するのは
70
+ * すべて「consumer が既に確定させた型」の配線どおりの伝播(ref 参照先の `outType` を path で辿る、
71
+ * object 合成を field ごとに組む、等)である。解決できない位置は `undefined` を返し、呼び側が
72
+ * `UNTYPED_NODE` にする。
73
+ */
74
+ function resolveExprType(node, nodeTypes, inputPorts) {
75
+ // リテラル: そのまま確定スカラ。
76
+ if (node === null)
77
+ return "null";
78
+ if (typeof node === "boolean")
79
+ return "bool";
80
+ if (typeof node === "string")
81
+ return "string";
82
+ if (typeof node === "number")
83
+ return Number.isInteger(node) ? "int" : "float";
84
+ if (typeof node !== "object")
85
+ return undefined;
86
+ const rec = node;
87
+ const keys = Object.keys(rec);
88
+ if (keys.length !== 1)
89
+ return undefined; // 式ノードは単一 operator キー
90
+ const op = keys[0];
91
+ const arg = rec[op];
92
+ switch (op) {
93
+ case "int":
94
+ return "int";
95
+ case "float":
96
+ return "float";
97
+ case "ref":
98
+ case "refOpt": {
99
+ // {ref:[head, …path]} — head はノード id / input port。確定済み型を path で辿る。
100
+ const path = arg;
101
+ if (!Array.isArray(path) || path.length === 0)
102
+ return undefined;
103
+ const [head, ...rest] = path;
104
+ let cur = nodeTypes.get(head);
105
+ if (cur === undefined) {
106
+ const schema = inputPorts[head];
107
+ cur = schema !== undefined ? portableTypeOfInputPort(schema) : undefined;
108
+ }
109
+ if (cur === undefined)
110
+ return undefined;
111
+ for (const f of rest) {
112
+ const next = descend(cur, f);
113
+ if (next === undefined)
114
+ return undefined;
115
+ cur = next;
116
+ }
117
+ // refOpt は途中 null で null を返し得るため nullable。
118
+ return op === "refOpt" ? { opt: cur } : cur;
119
+ }
120
+ case "obj": {
121
+ // object 合成: 全フィールドが解決できて初めて確定(1 つでも未確定なら undefined)。
122
+ if (arg === null || typeof arg !== "object" || Array.isArray(arg))
123
+ return undefined;
124
+ const obj = {};
125
+ for (const [k, v] of Object.entries(arg)) {
126
+ const ft = resolveExprType(v, nodeTypes, inputPorts);
127
+ if (ft === undefined)
128
+ return undefined;
129
+ obj[k] = ft;
130
+ }
131
+ return { obj };
132
+ }
133
+ case "arr": {
134
+ // 同種配列: 全要素が同じ確定型に解決できること(空配列は要素型が定まらず未確定)。
135
+ if (!Array.isArray(arg) || arg.length === 0)
136
+ return undefined;
137
+ let elem;
138
+ for (const e of arg) {
139
+ const et = resolveExprType(e, nodeTypes, inputPorts);
140
+ if (et === undefined)
141
+ return undefined;
142
+ if (elem === undefined)
143
+ elem = et;
144
+ else if (!sameType(elem, et))
145
+ return undefined;
146
+ }
147
+ return { arr: elem };
148
+ }
149
+ case "cond": {
150
+ // {cond:[if, then, else]} — 制御ノード(value-operator ではない)。採用側の型は then/else の join。
151
+ // join 規則の意味論は SSoT(resolveOperatorResult の "cond-join")に集約する(分岐を散らさない)。
152
+ const triple = arg;
153
+ if (!Array.isArray(triple) || triple.length !== 3)
154
+ return undefined;
155
+ const thenT = resolveExprType(triple[1], nodeTypes, inputPorts);
156
+ const elseT = resolveExprType(triple[2], nodeTypes, inputPorts);
157
+ if (thenT === undefined || elseT === undefined)
158
+ return undefined;
159
+ return resolveOperatorResult({ arity: "ternary", operands: "any", result: "cond-join" }, [thenT, elseT]);
160
+ }
161
+ default: {
162
+ // value-operator(concat/len/比較/論理/算術/coalesce)は型シグネチャ SSoT を **読む**
163
+ // (consumer-interface.md §2.1 C3: BC は明示宣言を読むだけ・ad-hoc 推論をしない — #125/A3)。
164
+ // 各オペランドを構造規則で解決し、宣言 result ルールを適用して結果型を得る。
165
+ const sig = operatorSignature(op);
166
+ if (sig === undefined)
167
+ return undefined; // 未知 operator(guard が別途弾く)は型解決の対象外
168
+ const operands = Array.isArray(arg) ? arg : [arg]; // 単項は素の値、多項は配列
169
+ const operandTypes = [];
170
+ for (const o of operands) {
171
+ const ot = resolveExprType(o, nodeTypes, inputPorts);
172
+ if (ot === undefined)
173
+ return undefined; // 未確定オペランドがあれば結果も未確定
174
+ operandTypes.push(ot);
175
+ }
176
+ return resolveOperatorResult(sig, operandTypes);
177
+ }
178
+ }
179
+ }
180
+ /**
181
+ * canonicalizeType — 導出 PortableType の obj field キーを code-point 順に再構築する
182
+ * (builder.ts の canonicalizeDeep と同じ規律。golden/fingerprint の決定性のため component の
183
+ * 他フィールドと同じ正準形に揃える)。
184
+ */
185
+ export function canonicalizeType(t) {
186
+ if (typeof t === "string")
187
+ return t;
188
+ if ("opt" in t)
189
+ return { opt: canonicalizeType(t.opt) };
190
+ if ("arr" in t)
191
+ return { arr: canonicalizeType(t.arr) };
192
+ const obj = {};
193
+ for (const k of Object.keys(t.obj).sort(cmpCodePoints))
194
+ obj[k] = canonicalizeType(t.obj[k]);
195
+ return { obj };
196
+ }
197
+ // ── ゲート本体 ────────────────────────────────────────────────────────────────────
198
+ /**
199
+ * assertAllNodeTypesDetermined — component の全ノード型確定を網羅検査し(未確定は `UNTYPED_NODE`)、
200
+ * 確定済みノード型から `output`(Φ 合成)を辿って `outputType` を導出して返す(構造伝播・非推論)。
201
+ *
202
+ * @param comp canonical 化済み `Component`(body ノードは `outType` 注記を持ち得る)。
203
+ * @param method 名指し用のメソッド名(= component 名)。
204
+ * @returns 導出した `outputType`(PortableType)。全フィールドが確定したときのみ返る。
205
+ * @throws {UntypedNodeError} 型未確定のノード/フィールドがあるとき(offending を名指す)。
206
+ */
207
+ export function assertAllNodeTypesDetermined(comp) {
208
+ const method = comp.name;
209
+ const nodeTypes = new Map();
210
+ // (1) 全 body ノードが resolvable な outType を持つ(無ければ UNTYPED_NODE で名指し)。
211
+ for (const n of comp.body) {
212
+ const ot = n.outType;
213
+ // cond gate ノード(`{obj:{ok:true}}` を返す制御専用ノード)は出力型注記を持たないが、
214
+ // これは when(...) guard の内部制御構造であって consumer の出力ノードではない。gate は
215
+ // 常に `{ok:bool}` を返す既知形なので確定扱いにし、nodeTypes には載せない(Φ から直接
216
+ // 参照されることはない — 参照されるのは guard された子ノード/Φ 合流ノード側)。
217
+ if (ot === undefined) {
218
+ if (isControlGate(n))
219
+ continue;
220
+ untyped(`method '${method}': node '${n.id}' (${nodeKindLabel(n)}) has no determined output type — annotate it with .as<T>() at the projection/composition point, or define the leaf via defineLeaf so its catalog carries an elemType (SA5, fail-closed UNTYPED_NODE)`);
221
+ }
222
+ // ノード結果参照(output の `{ref:[id,…]}`)が読む型へ正規化する:
223
+ // - map ノードの `outType` は**要素型**で持つ既存規約(define-leaf.test / native emitter)ゆえ、
224
+ // 結果参照が読む配列型は `{arr: 要素型}`。
225
+ // - fanout / cond / componentRef の `outType` は結果そのものの型(fanout は connection 型を既に持つ)。
226
+ nodeTypes.set(n.id, "map" in n ? { arr: ot } : ot);
227
+ }
228
+ // (2) output(Φ 合成)の全フィールド型が確定型へ resolvable であること。
229
+ const outputType = resolveOutputType(comp.output, nodeTypes, comp.inputPorts, method);
230
+ return outputType;
231
+ }
232
+ /**
233
+ * resolveOutputType — `output` 式全体を解決して `outputType` を返す。トップが object 合成のとき、
234
+ * 未確定フィールドを個別に名指して `UNTYPED_NODE` を投げる(AC1 の「naming the field」)。
235
+ */
236
+ function resolveOutputType(output, nodeTypes, inputPorts, method) {
237
+ // object 合成: フィールドごとに解決し、未確定フィールドを名指す。
238
+ if (output !== null && typeof output === "object" && !Array.isArray(output)) {
239
+ const rec = output;
240
+ const keys = Object.keys(rec);
241
+ if (keys.length === 1 && keys[0] === "obj") {
242
+ const fields = rec.obj;
243
+ const obj = {};
244
+ for (const [k, v] of Object.entries(fields)) {
245
+ const ft = resolveExprType(v, nodeTypes, inputPorts);
246
+ if (ft === undefined)
247
+ untyped(`method '${method}': output composition field '${k}' has no determined type — the value it wires is not resolvable to a portable type (annotate the referenced node with .as<T>() so its type is determined; SA5, fail-closed UNTYPED_NODE)`);
248
+ obj[k] = ft;
249
+ }
250
+ return { obj };
251
+ }
252
+ }
253
+ // 非 object 合成(単一 ref / 演算式 / スカラ等): 全体を解決。
254
+ const t = resolveExprType(output, nodeTypes, inputPorts);
255
+ if (t === undefined)
256
+ untyped(`method '${method}': the output has no determined type — its value is not resolvable to a portable type (annotate the terminal node with .as<T>(); SA5, fail-closed UNTYPED_NODE)`);
257
+ return t;
258
+ }
259
+ /** body ノード種のラベル(診断メッセージ用)。 */
260
+ function nodeKindLabel(n) {
261
+ if (n !== null && typeof n === "object") {
262
+ if ("fanout" in n)
263
+ return "fanout";
264
+ if ("map" in n)
265
+ return "map";
266
+ if ("cond" in n)
267
+ return "cond";
268
+ if ("component" in n)
269
+ return `componentRef '${n.component}'`;
270
+ }
271
+ return "node";
272
+ }
273
+ /**
274
+ * isControlGate — when(...) guard の gate CondNode(`{if:…, then:{obj:{ok:true}}, else:null}`)か。
275
+ * これは制御フロー専用ノードで出力データ型を持たない(consumer が参照する出力ではない)。
276
+ * gate は authoring.ts の `ensureGate` が生成する固定形。この形にだけ outType 不要を許す
277
+ * (Φ 合流 CondNode は outType を要求する — それは consumer の出力値だから)。
278
+ */
279
+ function isControlGate(n) {
280
+ if (n === null || typeof n !== "object" || !("cond" in n))
281
+ return false;
282
+ const c = n.cond;
283
+ if (c === null || typeof c !== "object")
284
+ return false;
285
+ const then = c.then;
286
+ const els = c.else;
287
+ // gate: then が `{obj:{ok:true}}`、else が null。
288
+ const isOkObj = then !== null &&
289
+ typeof then === "object" &&
290
+ !Array.isArray(then) &&
291
+ "obj" in then &&
292
+ JSON.stringify(then.obj) === JSON.stringify({ ok: true });
293
+ return isOkObj && els === null;
294
+ }
295
+ //# sourceMappingURL=type-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-gate.js","sourceRoot":"","sources":["../src/type-gate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "behavior-contracts",
3
- "version": "0.7.3",
3
+ "version": "0.8.0",
4
4
  "description": "Language-agnostic runtime core for behavior contracts (dsl-contracts): validateEnvelope / evaluateExpression / renderTemplate / runPlan / canonical serialization. Single source of truth for the shared DSL runtime primitives.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,9 +28,10 @@
28
28
  "template": 1,
29
29
  "plan": 1,
30
30
  "canonical": 2,
31
- "behavior": 3,
32
- "guard": 1,
31
+ "behavior": 4,
32
+ "guard": 2,
33
33
  "c2": 1,
34
+ "provenance": 1,
34
35
  "envelope": "1.1"
35
36
  },
36
37
  "keywords": [