toad-compiler 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/LICENSE +21 -0
  2. package/dist/analyze.d.ts +13 -0
  3. package/dist/analyze.d.ts.map +1 -0
  4. package/dist/analyze.js +20 -0
  5. package/dist/analyze.js.map +1 -0
  6. package/dist/analyze.test.d.ts +2 -0
  7. package/dist/analyze.test.d.ts.map +1 -0
  8. package/dist/analyze.test.js +45 -0
  9. package/dist/analyze.test.js.map +1 -0
  10. package/dist/ast.d.ts +63 -0
  11. package/dist/ast.d.ts.map +1 -0
  12. package/dist/ast.js +6 -0
  13. package/dist/ast.js.map +1 -0
  14. package/dist/bin.d.ts +3 -0
  15. package/dist/bin.d.ts.map +1 -0
  16. package/dist/bin.js +7 -0
  17. package/dist/bin.js.map +1 -0
  18. package/dist/cli.d.ts +11 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +93 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/cli.test.d.ts +2 -0
  23. package/dist/cli.test.d.ts.map +1 -0
  24. package/dist/cli.test.js +54 -0
  25. package/dist/cli.test.js.map +1 -0
  26. package/dist/codegen.d.ts +9 -0
  27. package/dist/codegen.d.ts.map +1 -0
  28. package/dist/codegen.js +152 -0
  29. package/dist/codegen.js.map +1 -0
  30. package/dist/codegen.test.d.ts +2 -0
  31. package/dist/codegen.test.d.ts.map +1 -0
  32. package/dist/codegen.test.js +76 -0
  33. package/dist/codegen.test.js.map +1 -0
  34. package/dist/controlflow.test.d.ts +2 -0
  35. package/dist/controlflow.test.d.ts.map +1 -0
  36. package/dist/controlflow.test.js +75 -0
  37. package/dist/controlflow.test.js.map +1 -0
  38. package/dist/diagnostics.d.ts +24 -0
  39. package/dist/diagnostics.d.ts.map +1 -0
  40. package/dist/diagnostics.js +26 -0
  41. package/dist/diagnostics.js.map +1 -0
  42. package/dist/each.test.d.ts +2 -0
  43. package/dist/each.test.d.ts.map +1 -0
  44. package/dist/each.test.js +82 -0
  45. package/dist/each.test.js.map +1 -0
  46. package/dist/env.test.d.ts +2 -0
  47. package/dist/env.test.d.ts.map +1 -0
  48. package/dist/env.test.js +27 -0
  49. package/dist/env.test.js.map +1 -0
  50. package/dist/example.test.d.ts +2 -0
  51. package/dist/example.test.d.ts.map +1 -0
  52. package/dist/example.test.js +19 -0
  53. package/dist/example.test.js.map +1 -0
  54. package/dist/if.test.d.ts +2 -0
  55. package/dist/if.test.d.ts.map +1 -0
  56. package/dist/if.test.js +72 -0
  57. package/dist/if.test.js.map +1 -0
  58. package/dist/index.d.ts +17 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +22 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/index.test.d.ts +2 -0
  63. package/dist/index.test.d.ts.map +1 -0
  64. package/dist/index.test.js +19 -0
  65. package/dist/index.test.js.map +1 -0
  66. package/dist/interpolate.d.ts +18 -0
  67. package/dist/interpolate.d.ts.map +1 -0
  68. package/dist/interpolate.js +237 -0
  69. package/dist/interpolate.js.map +1 -0
  70. package/dist/interpolate.test.d.ts +2 -0
  71. package/dist/interpolate.test.d.ts.map +1 -0
  72. package/dist/interpolate.test.js +35 -0
  73. package/dist/interpolate.test.js.map +1 -0
  74. package/dist/lifecycle.test.d.ts +2 -0
  75. package/dist/lifecycle.test.d.ts.map +1 -0
  76. package/dist/lifecycle.test.js +26 -0
  77. package/dist/lifecycle.test.js.map +1 -0
  78. package/dist/objecttypes.test.d.ts +2 -0
  79. package/dist/objecttypes.test.d.ts.map +1 -0
  80. package/dist/objecttypes.test.js +83 -0
  81. package/dist/objecttypes.test.js.map +1 -0
  82. package/dist/preprocess.d.ts +20 -0
  83. package/dist/preprocess.d.ts.map +1 -0
  84. package/dist/preprocess.js +98 -0
  85. package/dist/preprocess.js.map +1 -0
  86. package/dist/preprocess.test.d.ts +2 -0
  87. package/dist/preprocess.test.d.ts.map +1 -0
  88. package/dist/preprocess.test.js +58 -0
  89. package/dist/preprocess.test.js.map +1 -0
  90. package/dist/system.test.d.ts +2 -0
  91. package/dist/system.test.d.ts.map +1 -0
  92. package/dist/system.test.js +35 -0
  93. package/dist/system.test.js.map +1 -0
  94. package/dist/toon.d.ts +16 -0
  95. package/dist/toon.d.ts.map +1 -0
  96. package/dist/toon.js +32 -0
  97. package/dist/toon.js.map +1 -0
  98. package/dist/toon.test.d.ts +2 -0
  99. package/dist/toon.test.d.ts.map +1 -0
  100. package/dist/toon.test.js +50 -0
  101. package/dist/toon.test.js.map +1 -0
  102. package/dist/uses.test.d.ts +2 -0
  103. package/dist/uses.test.d.ts.map +1 -0
  104. package/dist/uses.test.js +32 -0
  105. package/dist/uses.test.js.map +1 -0
  106. package/dist/validate.d.ts +14 -0
  107. package/dist/validate.d.ts.map +1 -0
  108. package/dist/validate.js +351 -0
  109. package/dist/validate.js.map +1 -0
  110. package/dist/validate.test.d.ts +2 -0
  111. package/dist/validate.test.d.ts.map +1 -0
  112. package/dist/validate.test.js +64 -0
  113. package/dist/validate.test.js.map +1 -0
  114. package/package.json +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.test.d.ts","sourceRoot":"","sources":["../src/system.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { analyze } from "./analyze.js";
3
+ import { generate } from "./codegen.js";
4
+ describe("system prompt", () => {
5
+ it("emits a system function with interpolation", () => {
6
+ const src = [
7
+ "agent: a",
8
+ "model: m",
9
+ "inputs[1]{name,type}:",
10
+ " role,string",
11
+ "system: |",
12
+ " You are a {inputs.role}.",
13
+ "prompt: |",
14
+ " Help the user.",
15
+ ].join("\n");
16
+ const { ast, diagnostics } = analyze(src, "a.agent");
17
+ expect(diagnostics).toEqual([]);
18
+ const code = generate(ast);
19
+ expect(code).toContain("system: (inputs: AInput) =>");
20
+ expect(code).toContain("You are a ${inputs.role}.");
21
+ });
22
+ it("validates system interpolations (TOA301)", () => {
23
+ const src = [
24
+ "agent: a",
25
+ "model: m",
26
+ "system: |",
27
+ " You are {inputs.missing}.",
28
+ "prompt: |",
29
+ " hi",
30
+ ].join("\n");
31
+ const { diagnostics } = analyze(src, "a.agent");
32
+ expect(diagnostics.map((d) => d.code)).toContain("TOA301");
33
+ });
34
+ });
35
+ //# sourceMappingURL=system.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.test.js","sourceRoot":"","sources":["../src/system.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG;YACV,UAAU;YACV,UAAU;YACV,uBAAuB;YACvB,eAAe;YACf,WAAW;YACX,4BAA4B;YAC5B,WAAW;YACX,kBAAkB;SACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG;YACV,UAAU;YACV,UAAU;YACV,WAAW;YACX,6BAA6B;YAC7B,WAAW;YACX,MAAM;SACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/toon.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { JsonValue } from "@toon-format/toon";
2
+ import { type Diagnostic } from "./diagnostics.js";
3
+ export interface DecodeToonResult {
4
+ /** Present only when decoding succeeds. */
5
+ value?: JsonValue;
6
+ diagnostics: Diagnostic[];
7
+ }
8
+ /**
9
+ * Decode TOON source into a JSON value using the reference `@toon-format/toon`
10
+ * decoder — the structural data layer of every `.agent` file. Decode failures
11
+ * become located diagnostics rather than thrown errors (architecture.md §3,
12
+ * NFR4). This wrapper assumes the source is already valid TOON; the Toa
13
+ * superset (block scalars) is lowered upstream in the preprocessor (S1.2).
14
+ */
15
+ export declare function decodeToon(source: string, file: string): DecodeToonResult;
16
+ //# sourceMappingURL=toon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon.d.ts","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBzE"}
package/dist/toon.js ADDED
@@ -0,0 +1,32 @@
1
+ import { decode, ToonDecodeError } from "@toon-format/toon";
2
+ import { errorDiagnostic } from "./diagnostics.js";
3
+ /**
4
+ * Decode TOON source into a JSON value using the reference `@toon-format/toon`
5
+ * decoder — the structural data layer of every `.agent` file. Decode failures
6
+ * become located diagnostics rather than thrown errors (architecture.md §3,
7
+ * NFR4). This wrapper assumes the source is already valid TOON; the Toa
8
+ * superset (block scalars) is lowered upstream in the preprocessor (S1.2).
9
+ */
10
+ export function decodeToon(source, file) {
11
+ try {
12
+ return { value: decode(source), diagnostics: [] };
13
+ }
14
+ catch (err) {
15
+ if (err instanceof ToonDecodeError) {
16
+ return {
17
+ diagnostics: [
18
+ errorDiagnostic("TOA101", stripLinePrefix(err.message), file, {
19
+ line: err.line,
20
+ }),
21
+ ],
22
+ };
23
+ }
24
+ const message = err instanceof Error ? err.message : String(err);
25
+ return { diagnostics: [errorDiagnostic("TOA101", message, file)] };
26
+ }
27
+ }
28
+ // The decoder prefixes messages with "Line N: "; we carry the line separately.
29
+ function stripLinePrefix(message) {
30
+ return message.replace(/^Line \d+:\s*/, "");
31
+ }
32
+ //# sourceMappingURL=toon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon.js","sourceRoot":"","sources":["../src/toon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AAQpE;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,IAAY;IACrD,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,OAAO;gBACL,WAAW,EAAE;oBACX,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;wBAC5D,IAAI,EAAE,GAAG,CAAC,IAAI;qBACf,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,WAAW,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS,eAAe,CAAC,OAAe;IACtC,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=toon.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon.test.d.ts","sourceRoot":"","sources":["../src/toon.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { decodeToon } from "./toon.js";
3
+ describe("decodeToon — TOON conformance (the subset .agent uses)", () => {
4
+ const cases = [
5
+ {
6
+ name: "flat object",
7
+ toon: "id: 1\nname: Ada",
8
+ json: { id: 1, name: "Ada" },
9
+ },
10
+ {
11
+ name: "nested object",
12
+ toon: "user:\n id: 1\n name: Ada",
13
+ json: { user: { id: 1, name: "Ada" } },
14
+ },
15
+ {
16
+ name: "inline primitive array",
17
+ toon: "tags[3]: a,b,c",
18
+ json: { tags: ["a", "b", "c"] },
19
+ },
20
+ {
21
+ name: "tabular array",
22
+ toon: "rows[2]{id,name}:\n 1,Ada\n 2,Linus",
23
+ json: {
24
+ rows: [
25
+ { id: 1, name: "Ada" },
26
+ { id: 2, name: "Linus" },
27
+ ],
28
+ },
29
+ },
30
+ {
31
+ name: "quoted string keeps braces + colon (interpolation survives decode)",
32
+ toon: 'prompt: "Hi {inputs.name}: go"',
33
+ json: { prompt: "Hi {inputs.name}: go" },
34
+ },
35
+ ];
36
+ for (const c of cases) {
37
+ it(c.name, () => {
38
+ const result = decodeToon(c.toon, "test.agent");
39
+ expect(result.diagnostics).toEqual([]);
40
+ expect(result.value).toEqual(c.json);
41
+ });
42
+ }
43
+ it("malformed input → located TOA101 diagnostic, no value", () => {
44
+ const result = decodeToon('name: "unterminated', "bad.agent");
45
+ expect(result.value).toBeUndefined();
46
+ expect(result.diagnostics).toHaveLength(1);
47
+ expect(result.diagnostics[0]?.code).toBe("TOA101");
48
+ });
49
+ });
50
+ //# sourceMappingURL=toon.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toon.test.js","sourceRoot":"","sources":["../src/toon.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,MAAM,KAAK,GAAiE;QAC1E;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;SAC7B;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,6BAA6B;YACnC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;SACvC;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;SAChC;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,uCAAuC;YAC7C,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;oBACtB,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;iBACzB;aACF;SACF;QACD;YACE,IAAI,EAAE,oEAAoE;YAC1E,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE;SACzC;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;YACd,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=uses.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uses.test.d.ts","sourceRoot":"","sources":["../src/uses.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { analyze } from "./analyze.js";
3
+ import { generate } from "./codegen.js";
4
+ describe("declarative sub-agents (uses)", () => {
5
+ it("imports the sub-agent and wires it via asTool()", () => {
6
+ const src = [
7
+ "agent: planner",
8
+ "model: claude-opus-4-7",
9
+ "uses[1]: researcher",
10
+ "prompt: |",
11
+ " Use the researcher tool to gather sources, then outline.",
12
+ ].join("\n");
13
+ const { ast, diagnostics } = analyze(src, "planner.agent");
14
+ expect(diagnostics).toEqual([]);
15
+ expect(ast?.uses).toEqual(["researcher"]);
16
+ const code = generate(ast);
17
+ expect(code).toContain('import { researcher } from "./researcher";');
18
+ expect(code).toContain("tools: { researcher: researcher.asTool() }");
19
+ });
20
+ it("rejects a non-identifier uses entry (TOA231)", () => {
21
+ const src = [
22
+ "agent: p",
23
+ "model: m",
24
+ 'uses[1]: "not an ident"',
25
+ "prompt: |",
26
+ " hi",
27
+ ].join("\n");
28
+ const { diagnostics } = analyze(src, "p.agent");
29
+ expect(diagnostics.map((d) => d.code)).toContain("TOA231");
30
+ });
31
+ });
32
+ //# sourceMappingURL=uses.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uses.test.js","sourceRoot":"","sources":["../src/uses.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG;YACV,gBAAgB;YAChB,wBAAwB;YACxB,qBAAqB;YACrB,WAAW;YACX,4DAA4D;SAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG;YACV,UAAU;YACV,UAAU;YACV,yBAAyB;YACzB,WAAW;YACX,MAAM;SACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { JsonValue } from "@toon-format/toon";
2
+ import type { AgentAst } from "./ast.js";
3
+ import { type Diagnostic } from "./diagnostics.js";
4
+ export interface ValidateResult {
5
+ ast?: AgentAst;
6
+ diagnostics: Diagnostic[];
7
+ }
8
+ /**
9
+ * Validate a decoded `.agent` object and lift it into a typed `AgentAst`. All
10
+ * user errors are collected as diagnostics; the AST is returned only when there
11
+ * are none. See `_bmad-output/architecture.md` §3.③–④.
12
+ */
13
+ export declare function validate(value: JsonValue, file: string, keyLines: Map<string, number>): ValidateResult;
14
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAqC,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAmBD;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,cAAc,CAqGhB"}
@@ -0,0 +1,351 @@
1
+ import { errorDiagnostic } from "./diagnostics.js";
2
+ import { parsePromptTemplate } from "./interpolate.js";
3
+ const ALLOWED_KEYS = new Set([
4
+ "agent",
5
+ "model",
6
+ "description",
7
+ "inputs",
8
+ "tools",
9
+ "prompt",
10
+ "outputs",
11
+ "system",
12
+ "maxTurns",
13
+ "retries",
14
+ "uses",
15
+ ]);
16
+ const IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
17
+ /**
18
+ * Validate a decoded `.agent` object and lift it into a typed `AgentAst`. All
19
+ * user errors are collected as diagnostics; the AST is returned only when there
20
+ * are none. See `_bmad-output/architecture.md` §3.③–④.
21
+ */
22
+ export function validate(value, file, keyLines) {
23
+ const diagnostics = [];
24
+ const at = (key) => ({ line: keyLines.get(key) });
25
+ if (!isObject(value)) {
26
+ diagnostics.push(errorDiagnostic("TOA201", "an .agent file must be a TOON object", file));
27
+ return { diagnostics };
28
+ }
29
+ for (const key of Object.keys(value)) {
30
+ if (!ALLOWED_KEYS.has(key)) {
31
+ diagnostics.push(errorDiagnostic("TOA202", `unknown key "${key}"`, file, at(key)));
32
+ }
33
+ }
34
+ const name = requireString(value, "agent", file, diagnostics, at);
35
+ if (name !== undefined && !IDENT.test(name)) {
36
+ diagnostics.push(errorDiagnostic("TOA205", `"agent" must be an identifier, got "${name}"`, file, at("agent")));
37
+ }
38
+ const model = requireString(value, "model", file, diagnostics, at);
39
+ const promptText = requireString(value, "prompt", file, diagnostics, at);
40
+ let description;
41
+ if (value.description !== undefined) {
42
+ if (typeof value.description === "string") {
43
+ description = value.description;
44
+ }
45
+ else {
46
+ diagnostics.push(errorDiagnostic("TOA204", `"description" must be a string`, file, at("description")));
47
+ }
48
+ }
49
+ const inputs = parseFields(value, "inputs", file, diagnostics, at);
50
+ const outputs = parseFields(value, "outputs", file, diagnostics, at);
51
+ const tools = parseTools(value, file, diagnostics, at);
52
+ const uses = parseUses(value, file, diagnostics, at);
53
+ const maxTurns = parseIntKey(value, "maxTurns", file, diagnostics, at);
54
+ const retries = parseIntKey(value, "retries", file, diagnostics, at);
55
+ const prompt = typeof promptText === "string"
56
+ ? parsePrompt(promptText, inputs, file, diagnostics, at)
57
+ : [];
58
+ let system;
59
+ if (value.system !== undefined) {
60
+ if (typeof value.system === "string") {
61
+ system = parsePrompt(value.system, inputs, file, diagnostics, at);
62
+ }
63
+ else {
64
+ diagnostics.push(errorDiagnostic("TOA204", `"system" must be a string`, file, at("system")));
65
+ }
66
+ }
67
+ if (diagnostics.some((d) => d.severity === "error")) {
68
+ return { diagnostics };
69
+ }
70
+ const ast = {
71
+ name: name,
72
+ model: model,
73
+ inputs,
74
+ outputs,
75
+ tools,
76
+ uses,
77
+ prompt,
78
+ };
79
+ if (description !== undefined) {
80
+ ast.description = description;
81
+ }
82
+ if (system !== undefined) {
83
+ ast.system = system;
84
+ }
85
+ if (maxTurns !== undefined) {
86
+ ast.maxTurns = maxTurns;
87
+ }
88
+ if (retries !== undefined) {
89
+ ast.retries = retries;
90
+ }
91
+ return { ast, diagnostics };
92
+ }
93
+ function parseUses(obj, file, diagnostics, at) {
94
+ const arr = obj.uses;
95
+ if (arr === undefined) {
96
+ return [];
97
+ }
98
+ if (!Array.isArray(arr)) {
99
+ diagnostics.push(errorDiagnostic("TOA230", `"uses" must be an array of agent names`, file, at("uses")));
100
+ return [];
101
+ }
102
+ const names = [];
103
+ for (const u of arr) {
104
+ if (typeof u !== "string" || !IDENT.test(u)) {
105
+ diagnostics.push(errorDiagnostic("TOA231", `"uses" entries must be identifiers, got ${JSON.stringify(u)}`, file, at("uses")));
106
+ continue;
107
+ }
108
+ names.push(u);
109
+ }
110
+ return names;
111
+ }
112
+ function parseIntKey(obj, key, file, diagnostics, at) {
113
+ const v = obj[key];
114
+ if (v === undefined) {
115
+ return undefined;
116
+ }
117
+ if (typeof v !== "number" || !Number.isInteger(v) || v < 0) {
118
+ diagnostics.push(errorDiagnostic("TOA206", `"${key}" must be a non-negative integer`, file, at(key)));
119
+ return undefined;
120
+ }
121
+ return v;
122
+ }
123
+ function requireString(obj, key, file, diagnostics, at) {
124
+ const v = obj[key];
125
+ if (v === undefined) {
126
+ diagnostics.push(errorDiagnostic("TOA203", `missing required key "${key}"`, file));
127
+ return undefined;
128
+ }
129
+ if (typeof v !== "string") {
130
+ diagnostics.push(errorDiagnostic("TOA204", `"${key}" must be a string`, file, at(key)));
131
+ return undefined;
132
+ }
133
+ return v;
134
+ }
135
+ function parseFields(obj, key, file, diagnostics, at) {
136
+ const arr = obj[key];
137
+ if (arr === undefined) {
138
+ return [];
139
+ }
140
+ if (!Array.isArray(arr)) {
141
+ diagnostics.push(errorDiagnostic("TOA210", `"${key}" must be a tabular array of {name,type}`, file, at(key)));
142
+ return [];
143
+ }
144
+ const fields = [];
145
+ for (const item of arr) {
146
+ if (!isObject(item) ||
147
+ typeof item.name !== "string" ||
148
+ typeof item.type !== "string") {
149
+ diagnostics.push(errorDiagnostic("TOA210", `each "${key}" row needs a string name and type`, file, at(key)));
150
+ continue;
151
+ }
152
+ if (!IDENT.test(item.name)) {
153
+ diagnostics.push(errorDiagnostic("TOA211", `"${key}" name "${item.name}" must be an identifier`, file, at(key)));
154
+ continue;
155
+ }
156
+ const type = parseType(item.type);
157
+ if (type === undefined) {
158
+ diagnostics.push(errorDiagnostic("TOA212", `"${key}" has unsupported type "${item.type}" (use string | number | boolean, optional "[]")`, file, at(key)));
159
+ continue;
160
+ }
161
+ fields.push({ name: item.name, type });
162
+ }
163
+ return fields;
164
+ }
165
+ function parseTools(obj, file, diagnostics, at) {
166
+ const arr = obj.tools;
167
+ if (arr === undefined) {
168
+ return [];
169
+ }
170
+ if (!Array.isArray(arr)) {
171
+ diagnostics.push(errorDiagnostic("TOA220", `"tools" must be an array of names`, file, at("tools")));
172
+ return [];
173
+ }
174
+ const names = [];
175
+ for (const t of arr) {
176
+ if (typeof t !== "string" || !IDENT.test(t)) {
177
+ diagnostics.push(errorDiagnostic("TOA221", `tool name must be an identifier, got ${JSON.stringify(t)}`, file, at("tools")));
178
+ continue;
179
+ }
180
+ names.push(t);
181
+ }
182
+ return names;
183
+ }
184
+ function parsePrompt(text, inputs, file, diagnostics, at) {
185
+ const ctx = {
186
+ inputTypes: new Map(inputs.map((f) => [f.name, f.type])),
187
+ file,
188
+ diagnostics,
189
+ at,
190
+ };
191
+ const { segments, errors } = parsePromptTemplate(text);
192
+ for (const message of errors) {
193
+ diagnostics.push(errorDiagnostic("TOA302", message, file, at("prompt")));
194
+ }
195
+ validatePromptSegments(segments, new Map(), ctx);
196
+ return segments;
197
+ }
198
+ const NUMBER_TYPE = { base: "number", array: false };
199
+ /** Walk a dotted path through object fields; returns the resolved type or null. */
200
+ function resolveFieldPath(type, rest) {
201
+ let cur = type;
202
+ for (const seg of rest) {
203
+ if (cur.array || cur.base !== "object" || cur.fields === undefined) {
204
+ return null;
205
+ }
206
+ const field = cur.fields.find((f) => f.name === seg);
207
+ if (field === undefined) {
208
+ return null;
209
+ }
210
+ cur = field.type;
211
+ }
212
+ return cur;
213
+ }
214
+ function badInterp(path, ctx) {
215
+ ctx.diagnostics.push(errorDiagnostic("TOA301", `invalid interpolation {${path.join(".")}} (unknown name or field)`, ctx.file, ctx.at("prompt")));
216
+ }
217
+ function validatePromptSegments(segments, vars, ctx) {
218
+ for (const seg of segments) {
219
+ if (seg.kind === "interp") {
220
+ const root = seg.path[0];
221
+ if (root !== undefined && vars.has(root)) {
222
+ if (resolveFieldPath(vars.get(root), seg.path.slice(1)) === null) {
223
+ badInterp(seg.path, ctx);
224
+ }
225
+ }
226
+ else if (root === "inputs" &&
227
+ seg.path.length >= 2 &&
228
+ ctx.inputTypes.has(seg.path[1])) {
229
+ if (resolveFieldPath(ctx.inputTypes.get(seg.path[1]), seg.path.slice(2)) === null) {
230
+ badInterp(seg.path, ctx);
231
+ }
232
+ }
233
+ else if (root === "env" && seg.path.length === 2) {
234
+ // ok — an environment variable, resolved at runtime
235
+ }
236
+ else {
237
+ badInterp(seg.path, ctx);
238
+ }
239
+ }
240
+ else if (seg.kind === "each") {
241
+ const sourceType = seg.source.length === 2 && seg.source[0] === "inputs"
242
+ ? ctx.inputTypes.get(seg.source[1])
243
+ : undefined;
244
+ if (sourceType === undefined || !sourceType.array) {
245
+ ctx.diagnostics.push(errorDiagnostic("TOA303", `{#each ${seg.source.join(".")}} must iterate a declared array input (a "[]" type)`, ctx.file, ctx.at("prompt")));
246
+ continue;
247
+ }
248
+ const elementType = sourceType.fields
249
+ ? { base: sourceType.base, array: false, fields: sourceType.fields }
250
+ : { base: sourceType.base, array: false };
251
+ const inner = new Map(vars);
252
+ if (seg.item.kind === "name") {
253
+ inner.set(seg.item.name, elementType);
254
+ }
255
+ else if (elementType.base !== "object" ||
256
+ elementType.fields === undefined) {
257
+ ctx.diagnostics.push(errorDiagnostic("TOA306", `cannot destructure {#each ${seg.source.join(".")}}: its elements are not objects`, ctx.file, ctx.at("prompt")));
258
+ }
259
+ else {
260
+ for (const field of seg.item.fields) {
261
+ const decl = elementType.fields.find((f) => f.name === field);
262
+ if (decl === undefined) {
263
+ ctx.diagnostics.push(errorDiagnostic("TOA306", `{#each … as { ${field} }} — the element has no field "${field}"`, ctx.file, ctx.at("prompt")));
264
+ }
265
+ else {
266
+ inner.set(field, decl.type);
267
+ }
268
+ }
269
+ }
270
+ if (seg.index !== undefined) {
271
+ inner.set(seg.index, NUMBER_TYPE);
272
+ }
273
+ validatePromptSegments(seg.body, inner, ctx);
274
+ if (seg.else !== undefined) {
275
+ validatePromptSegments(seg.else, vars, ctx);
276
+ }
277
+ }
278
+ else if (seg.kind === "if") {
279
+ const condType = seg.cond.length === 2 && seg.cond[0] === "inputs"
280
+ ? ctx.inputTypes.get(seg.cond[1])
281
+ : undefined;
282
+ if (condType === undefined ||
283
+ condType.base !== "boolean" ||
284
+ condType.array) {
285
+ ctx.diagnostics.push(errorDiagnostic("TOA305", `{#if ${seg.cond.join(".")}} must test a boolean input (a "boolean" type)`, ctx.file, ctx.at("prompt")));
286
+ }
287
+ validatePromptSegments(seg.then, vars, ctx);
288
+ validatePromptSegments(seg.else, vars, ctx);
289
+ }
290
+ }
291
+ }
292
+ function parseType(raw) {
293
+ let rest = raw.trim();
294
+ let array = false;
295
+ if (rest.endsWith("[]")) {
296
+ array = true;
297
+ rest = rest.slice(0, -2).trim();
298
+ }
299
+ if (rest === "string" || rest === "number" || rest === "boolean") {
300
+ return { base: rest, array };
301
+ }
302
+ if (rest.startsWith("{") && rest.endsWith("}")) {
303
+ const fields = [];
304
+ for (const part of splitFields(rest.slice(1, -1))) {
305
+ const idx = part.indexOf(":");
306
+ if (idx === -1) {
307
+ return undefined;
308
+ }
309
+ const name = part.slice(0, idx).trim();
310
+ const fieldType = parseType(part.slice(idx + 1));
311
+ if (!IDENT.test(name) || fieldType === undefined) {
312
+ return undefined;
313
+ }
314
+ fields.push({ name, type: fieldType });
315
+ }
316
+ if (fields.length === 0) {
317
+ return undefined;
318
+ }
319
+ return { base: "object", array, fields };
320
+ }
321
+ return undefined;
322
+ }
323
+ /** Split object-field declarations on top-level `;` (brace-aware). */
324
+ function splitFields(s) {
325
+ const parts = [];
326
+ let depth = 0;
327
+ let cur = "";
328
+ for (const ch of s) {
329
+ if (ch === "{") {
330
+ depth += 1;
331
+ }
332
+ else if (ch === "}") {
333
+ depth -= 1;
334
+ }
335
+ if (ch === ";" && depth === 0) {
336
+ parts.push(cur);
337
+ cur = "";
338
+ }
339
+ else {
340
+ cur += ch;
341
+ }
342
+ }
343
+ if (cur.trim().length > 0) {
344
+ parts.push(cur);
345
+ }
346
+ return parts;
347
+ }
348
+ function isObject(v) {
349
+ return typeof v === "object" && v !== null && !Array.isArray(v);
350
+ }
351
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../src/validate.test.ts"],"names":[],"mappings":""}