@agenteer/stdlib 1.0.0-rc.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.
Files changed (118) hide show
  1. package/README.md +98 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/context/context_curator.d.ts +115 -0
  4. package/dist/context/context_curator.d.ts.map +1 -0
  5. package/dist/context/context_curator.js +132 -0
  6. package/dist/context/context_curator.js.map +1 -0
  7. package/dist/humans/approval_gate.d.ts +82 -0
  8. package/dist/humans/approval_gate.d.ts.map +1 -0
  9. package/dist/humans/approval_gate.js +76 -0
  10. package/dist/humans/approval_gate.js.map +1 -0
  11. package/dist/humans/ask_user.d.ts +79 -0
  12. package/dist/humans/ask_user.d.ts.map +1 -0
  13. package/dist/humans/ask_user.js +101 -0
  14. package/dist/humans/ask_user.js.map +1 -0
  15. package/dist/index.d.ts +49 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +93 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/meta/cross_check.d.ts +96 -0
  20. package/dist/meta/cross_check.d.ts.map +1 -0
  21. package/dist/meta/cross_check.js +165 -0
  22. package/dist/meta/cross_check.js.map +1 -0
  23. package/dist/meta/judge_with_stripped_ctx.d.ts +75 -0
  24. package/dist/meta/judge_with_stripped_ctx.d.ts.map +1 -0
  25. package/dist/meta/judge_with_stripped_ctx.js +151 -0
  26. package/dist/meta/judge_with_stripped_ctx.js.map +1 -0
  27. package/dist/meta/parallel_fanout.d.ts +83 -0
  28. package/dist/meta/parallel_fanout.d.ts.map +1 -0
  29. package/dist/meta/parallel_fanout.js +120 -0
  30. package/dist/meta/parallel_fanout.js.map +1 -0
  31. package/dist/meta/repair_loop.d.ts +90 -0
  32. package/dist/meta/repair_loop.d.ts.map +1 -0
  33. package/dist/meta/repair_loop.js +230 -0
  34. package/dist/meta/repair_loop.js.map +1 -0
  35. package/dist/planner/default_planner.d.ts +88 -0
  36. package/dist/planner/default_planner.d.ts.map +1 -0
  37. package/dist/planner/default_planner.js +156 -0
  38. package/dist/planner/default_planner.js.map +1 -0
  39. package/dist/primitives/file_read.d.ts +60 -0
  40. package/dist/primitives/file_read.d.ts.map +1 -0
  41. package/dist/primitives/file_read.js +68 -0
  42. package/dist/primitives/file_read.js.map +1 -0
  43. package/dist/primitives/file_write.d.ts +60 -0
  44. package/dist/primitives/file_write.d.ts.map +1 -0
  45. package/dist/primitives/file_write.js +66 -0
  46. package/dist/primitives/file_write.js.map +1 -0
  47. package/dist/primitives/llm_call.d.ts +85 -0
  48. package/dist/primitives/llm_call.d.ts.map +1 -0
  49. package/dist/primitives/llm_call.js +99 -0
  50. package/dist/primitives/llm_call.js.map +1 -0
  51. package/dist/primitives/shell_exec.d.ts +66 -0
  52. package/dist/primitives/shell_exec.d.ts.map +1 -0
  53. package/dist/primitives/shell_exec.js +106 -0
  54. package/dist/primitives/shell_exec.js.map +1 -0
  55. package/dist/primitives/tool_call.d.ts +62 -0
  56. package/dist/primitives/tool_call.d.ts.map +1 -0
  57. package/dist/primitives/tool_call.js +69 -0
  58. package/dist/primitives/tool_call.js.map +1 -0
  59. package/dist/shared/capture.d.ts +34 -0
  60. package/dist/shared/capture.d.ts.map +1 -0
  61. package/dist/shared/capture.js +124 -0
  62. package/dist/shared/capture.js.map +1 -0
  63. package/dist/shared/ctx.d.ts +14 -0
  64. package/dist/shared/ctx.d.ts.map +1 -0
  65. package/dist/shared/ctx.js +48 -0
  66. package/dist/shared/ctx.js.map +1 -0
  67. package/dist/shared/index.d.ts +4 -0
  68. package/dist/shared/index.d.ts.map +1 -0
  69. package/dist/shared/index.js +4 -0
  70. package/dist/shared/index.js.map +1 -0
  71. package/dist/shared/validator.d.ts +47 -0
  72. package/dist/shared/validator.d.ts.map +1 -0
  73. package/dist/shared/validator.js +41 -0
  74. package/dist/shared/validator.js.map +1 -0
  75. package/dist/validators/compile.d.ts +83 -0
  76. package/dist/validators/compile.d.ts.map +1 -0
  77. package/dist/validators/compile.js +126 -0
  78. package/dist/validators/compile.js.map +1 -0
  79. package/dist/validators/json_schema_validate.d.ts +72 -0
  80. package/dist/validators/json_schema_validate.d.ts.map +1 -0
  81. package/dist/validators/json_schema_validate.js +85 -0
  82. package/dist/validators/json_schema_validate.js.map +1 -0
  83. package/dist/validators/regex_check.d.ts +64 -0
  84. package/dist/validators/regex_check.d.ts.map +1 -0
  85. package/dist/validators/regex_check.js +85 -0
  86. package/dist/validators/regex_check.js.map +1 -0
  87. package/dist/validators/test_run.d.ts +74 -0
  88. package/dist/validators/test_run.d.ts.map +1 -0
  89. package/dist/validators/test_run.js +149 -0
  90. package/dist/validators/test_run.js.map +1 -0
  91. package/dist/validators/typecheck.d.ts +61 -0
  92. package/dist/validators/typecheck.d.ts.map +1 -0
  93. package/dist/validators/typecheck.js +89 -0
  94. package/dist/validators/typecheck.js.map +1 -0
  95. package/package.json +61 -0
  96. package/src/context/context_curator.ts +154 -0
  97. package/src/humans/approval_gate.ts +101 -0
  98. package/src/humans/ask_user.ts +137 -0
  99. package/src/index.ts +149 -0
  100. package/src/meta/cross_check.ts +219 -0
  101. package/src/meta/judge_with_stripped_ctx.ts +171 -0
  102. package/src/meta/parallel_fanout.ts +142 -0
  103. package/src/meta/repair_loop.ts +267 -0
  104. package/src/planner/default_planner.ts +182 -0
  105. package/src/primitives/file_read.ts +82 -0
  106. package/src/primitives/file_write.ts +80 -0
  107. package/src/primitives/llm_call.ts +113 -0
  108. package/src/primitives/shell_exec.ts +122 -0
  109. package/src/primitives/tool_call.ts +84 -0
  110. package/src/shared/capture.ts +155 -0
  111. package/src/shared/ctx.ts +45 -0
  112. package/src/shared/index.ts +17 -0
  113. package/src/shared/validator.ts +51 -0
  114. package/src/validators/compile.ts +175 -0
  115. package/src/validators/json_schema_validate.ts +103 -0
  116. package/src/validators/regex_check.ts +107 -0
  117. package/src/validators/test_run.ts +199 -0
  118. package/src/validators/typecheck.ts +121 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * `@agenteer/node-tool-call` — primitive for invoking a registered tool
3
+ * (sub-plan 03 §2). §R4 honest dynamic-action disclosure:
4
+ * dynamic_actions: true
5
+ * dynamic_action_spec: "tool:${input.tool_name}"
6
+ *
7
+ * The permission kernel synthesizes `tool:<concrete_name>` at spawn time
8
+ * and checks against the parent's granted set. Tools themselves are
9
+ * adapters injected via `Runtime({ toolRegistry })`.
10
+ */
11
+ import { z } from "zod";
12
+ import { makeManifest, } from "@agenteer/core";
13
+ const MANIFEST = makeManifest({
14
+ id: "@agenteer/node-tool-call",
15
+ name: "tool_call",
16
+ description: "Invoke a registered tool by name. §R4-compliant: declared tool capability is synthesized from input at dispatch.",
17
+ determinism: "stochastic",
18
+ required_actions: [],
19
+ dynamic_actions: true,
20
+ dynamic_action_spec: "tool:${input.tool_name}",
21
+ tags: ["primitive"],
22
+ side_effects: {
23
+ writes_fs: false,
24
+ network: true,
25
+ mutates_ctx: false,
26
+ },
27
+ });
28
+ const InputSchema = z.object({
29
+ tool_name: z.string().min(1),
30
+ args: z.unknown(),
31
+ });
32
+ const OutputSchema = z.object({
33
+ tool_name: z.string(),
34
+ value: z.unknown(),
35
+ });
36
+ export function toolCallFactory() {
37
+ return {
38
+ manifest: MANIFEST,
39
+ inputSchema: InputSchema,
40
+ outputSchema: OutputSchema,
41
+ ctx: [],
42
+ model: null,
43
+ async execute(input, handle) {
44
+ const { tool_name, args } = input.original;
45
+ try {
46
+ const value = await handle.callAction("tool.invoke", {
47
+ tool_name,
48
+ args,
49
+ });
50
+ return {
51
+ kind: "output",
52
+ value: { tool_name, value },
53
+ evidence: { verdict: "pass", tool_output: { command: `tool:${tool_name}` } },
54
+ };
55
+ }
56
+ catch (err) {
57
+ const reason = err instanceof Error ? err.message : String(err);
58
+ return {
59
+ kind: "failed",
60
+ reason,
61
+ retryable: /rate.?limit|timeout|5\d\d/i.test(reason),
62
+ evidence: { verdict: "fail" },
63
+ };
64
+ }
65
+ },
66
+ };
67
+ }
68
+ export const toolCallManifest = MANIFEST;
69
+ //# sourceMappingURL=tool_call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool_call.js","sourceRoot":"","sources":["../../src/primitives/tool_call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,GAMb,MAAM,gBAAgB,CAAC;AAExB,MAAM,QAAQ,GAAiB,YAAY,CAAC;IAC1C,EAAE,EAAE,0BAA0B;IAC9B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,kHAAkH;IACpH,WAAW,EAAE,YAAY;IACzB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,IAAI;IACrB,mBAAmB,EAAE,yBAAyB;IAC9C,IAAI,EAAE,CAAC,WAAW,CAAC;IACnB,YAAY,EAAE;QACZ,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,KAAK;KACnB;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;CACnB,CAAC,CAAC;AAKH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,YAAY;QAC1B,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,IAAI;QACX,KAAK,CAAC,OAAO,CAAC,KAAuB,EAAE,MAAyB;YAC9D,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAU,aAAa,EAAE;oBAC5D,SAAS;oBACT,IAAI;iBACL,CAAC,CAAC;gBACH,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC3B,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,SAAS,EAAE,EAAE,EAAE;iBAC7E,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChE,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,MAAM;oBACN,SAAS,EAAE,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC;oBACpD,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC9B,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Streaming stdout/stderr capture with ring-buffer truncation — sub-plan
3
+ * 03 §S.2. Shared by `shell_exec`, `compile`, `test_run`. One module,
4
+ * not three, so truncation + timeout + binary-detection behavior stays
5
+ * consistent across validators.
6
+ */
7
+ export interface RunCommandOptions {
8
+ readonly cwd?: string;
9
+ readonly timeout_ms: number;
10
+ readonly stdin?: string;
11
+ readonly signal: AbortSignal;
12
+ readonly env?: NodeJS.ProcessEnv;
13
+ /** Per-stream ring buffer cap (default 256 KiB). */
14
+ readonly capture_limit?: number;
15
+ /** SIGTERM → SIGKILL grace (default 5s). */
16
+ readonly kill_grace_ms?: number;
17
+ readonly onStdoutLine?: (line: string) => void;
18
+ readonly onStderrLine?: (line: string) => void;
19
+ }
20
+ export interface RunCommandResult {
21
+ exit_code: number;
22
+ stdout: string;
23
+ stderr: string;
24
+ duration_ms: number;
25
+ timed_out: boolean;
26
+ truncated: {
27
+ stdout: boolean;
28
+ stderr: boolean;
29
+ };
30
+ }
31
+ export declare function runCommand(command: string, opts: RunCommandOptions): Promise<RunCommandResult>;
32
+ /** Convenience: tail of a stream for evidence `stdout_tail` / summary. */
33
+ export declare function tailOf(text: string, maxChars?: number): string;
34
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/shared/capture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CACjD;AAKD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA8G3B;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,MAAM,CAG5D"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Streaming stdout/stderr capture with ring-buffer truncation — sub-plan
3
+ * 03 §S.2. Shared by `shell_exec`, `compile`, `test_run`. One module,
4
+ * not three, so truncation + timeout + binary-detection behavior stays
5
+ * consistent across validators.
6
+ */
7
+ import { spawn } from "node:child_process";
8
+ const DEFAULT_CAPTURE_LIMIT = 256 * 1024;
9
+ const DEFAULT_KILL_GRACE_MS = 5_000;
10
+ export async function runCommand(command, opts) {
11
+ const startedAt = Date.now();
12
+ return await new Promise((resolve, reject) => {
13
+ const child = spawn(command, {
14
+ shell: true,
15
+ ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
16
+ ...(opts.env ? { env: opts.env } : {}),
17
+ });
18
+ const limit = opts.capture_limit ?? DEFAULT_CAPTURE_LIMIT;
19
+ let stdout = "";
20
+ let stderr = "";
21
+ let stdoutTruncated = false;
22
+ let stderrTruncated = false;
23
+ let timedOut = false;
24
+ let settled = false;
25
+ let stdoutTail = "";
26
+ let stderrTail = "";
27
+ const feed = (chunk, which) => {
28
+ const s = chunk.toString();
29
+ const appendTo = (buf, truncated) => {
30
+ if (truncated)
31
+ return [buf, true];
32
+ if (buf.length + s.length > limit) {
33
+ const room = Math.max(0, limit - buf.length);
34
+ return [buf + s.slice(0, room), true];
35
+ }
36
+ return [buf + s, false];
37
+ };
38
+ if (which === "stdout") {
39
+ [stdout, stdoutTruncated] = appendTo(stdout, stdoutTruncated);
40
+ if (opts.onStdoutLine) {
41
+ stdoutTail += s;
42
+ const idx = stdoutTail.lastIndexOf("\n");
43
+ if (idx >= 0) {
44
+ for (const line of stdoutTail.slice(0, idx).split("\n")) {
45
+ if (line.length)
46
+ opts.onStdoutLine(line);
47
+ }
48
+ stdoutTail = stdoutTail.slice(idx + 1);
49
+ }
50
+ }
51
+ }
52
+ else {
53
+ [stderr, stderrTruncated] = appendTo(stderr, stderrTruncated);
54
+ if (opts.onStderrLine) {
55
+ stderrTail += s;
56
+ const idx = stderrTail.lastIndexOf("\n");
57
+ if (idx >= 0) {
58
+ for (const line of stderrTail.slice(0, idx).split("\n")) {
59
+ if (line.length)
60
+ opts.onStderrLine(line);
61
+ }
62
+ stderrTail = stderrTail.slice(idx + 1);
63
+ }
64
+ }
65
+ }
66
+ };
67
+ child.stdout.on("data", (c) => feed(c, "stdout"));
68
+ child.stderr.on("data", (c) => feed(c, "stderr"));
69
+ const grace = opts.kill_grace_ms ?? DEFAULT_KILL_GRACE_MS;
70
+ const timeoutTimer = setTimeout(() => {
71
+ timedOut = true;
72
+ child.kill("SIGTERM");
73
+ const hard = setTimeout(() => child.kill("SIGKILL"), grace);
74
+ hard.unref();
75
+ }, opts.timeout_ms);
76
+ const onAbort = () => {
77
+ child.kill("SIGTERM");
78
+ };
79
+ opts.signal.addEventListener("abort", onAbort, { once: true });
80
+ child.on("error", (err) => {
81
+ if (settled)
82
+ return;
83
+ settled = true;
84
+ clearTimeout(timeoutTimer);
85
+ opts.signal.removeEventListener("abort", onAbort);
86
+ reject(err);
87
+ });
88
+ child.on("close", (code) => {
89
+ if (settled)
90
+ return;
91
+ settled = true;
92
+ clearTimeout(timeoutTimer);
93
+ opts.signal.removeEventListener("abort", onAbort);
94
+ // Flush any remaining partial lines.
95
+ if (stdoutTail.length && opts.onStdoutLine)
96
+ opts.onStdoutLine(stdoutTail);
97
+ if (stderrTail.length && opts.onStderrLine)
98
+ opts.onStderrLine(stderrTail);
99
+ resolve({
100
+ exit_code: code ?? -1,
101
+ stdout: stdoutTruncated
102
+ ? `${stdout}\n[...stdout truncated at ${limit} bytes...]`
103
+ : stdout,
104
+ stderr: stderrTruncated
105
+ ? `${stderr}\n[...stderr truncated at ${limit} bytes...]`
106
+ : stderr,
107
+ duration_ms: Date.now() - startedAt,
108
+ timed_out: timedOut,
109
+ truncated: { stdout: stdoutTruncated, stderr: stderrTruncated },
110
+ });
111
+ });
112
+ if (opts.stdin !== undefined) {
113
+ child.stdin.write(opts.stdin);
114
+ }
115
+ child.stdin.end();
116
+ });
117
+ }
118
+ /** Convenience: tail of a stream for evidence `stdout_tail` / summary. */
119
+ export function tailOf(text, maxChars = 4096) {
120
+ if (text.length <= maxChars)
121
+ return text;
122
+ return `[...]${text.slice(-maxChars)}`;
123
+ }
124
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/shared/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ctx_patch builders for stdlib authors (sub-plan 03 §S.4).
3
+ *
4
+ * Keeps stdlib code terse: `mergeSetArtifacts({ "plan.head": plan })`
5
+ * instead of spelling out the `asArtifact` wrapper per entry.
6
+ */
7
+ import { type CtxPatch } from "@agenteer/core";
8
+ export declare function setArtifacts(entries: Record<string, {
9
+ body: unknown;
10
+ media_type?: string;
11
+ schema_ref?: string;
12
+ }>): Pick<CtxPatch, "set">;
13
+ export declare function mergePatches(...patches: (CtxPatch | undefined)[]): CtxPatch | undefined;
14
+ //# sourceMappingURL=ctx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx.d.ts","sourceRoot":"","sources":["../../src/shared/ctx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEnF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACnF,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CASvB;AAED,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,QAAQ,GAAG,SAAS,CAsBvF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * ctx_patch builders for stdlib authors (sub-plan 03 §S.4).
3
+ *
4
+ * Keeps stdlib code terse: `mergeSetArtifacts({ "plan.head": plan })`
5
+ * instead of spelling out the `asArtifact` wrapper per entry.
6
+ */
7
+ import { asArtifact } from "@agenteer/core";
8
+ export function setArtifacts(entries) {
9
+ const set = {};
10
+ for (const [key, spec] of Object.entries(entries)) {
11
+ set[key] = asArtifact(spec.body, {
12
+ ...(spec.media_type !== undefined ? { media_type: spec.media_type } : {}),
13
+ ...(spec.schema_ref !== undefined ? { schema_ref: spec.schema_ref } : {}),
14
+ });
15
+ }
16
+ return { set };
17
+ }
18
+ export function mergePatches(...patches) {
19
+ const set = {};
20
+ const del = [];
21
+ const append = {};
22
+ let any = false;
23
+ for (const p of patches) {
24
+ if (!p)
25
+ continue;
26
+ any = true;
27
+ if (p.set)
28
+ Object.assign(set, p.set);
29
+ if (p.delete)
30
+ del.push(...p.delete);
31
+ if (p.append) {
32
+ for (const [k, vs] of Object.entries(p.append)) {
33
+ append[k] = [...(append[k] ?? []), ...vs];
34
+ }
35
+ }
36
+ }
37
+ if (!any)
38
+ return undefined;
39
+ const out = {};
40
+ if (Object.keys(set).length)
41
+ out.set = set;
42
+ if (del.length)
43
+ out.delete = del;
44
+ if (Object.keys(append).length)
45
+ out.append = append;
46
+ return out;
47
+ }
48
+ //# sourceMappingURL=ctx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../src/shared/ctx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAyC,MAAM,gBAAgB,CAAC;AAEnF,MAAM,UAAU,YAAY,CAC1B,OAAoF;IAEpF,MAAM,GAAG,GAAsC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,OAAiC;IAC/D,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,GAAG,GAAG,IAAI,CAAC;QACX,IAAI,CAAC,CAAC,GAAG;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { runCommand, tailOf, type RunCommandOptions, type RunCommandResult, } from "./capture.js";
2
+ export { ValidatorIssueSchema, ValidatorOutputSchema, type ValidatorIssue, type ValidatorOutput, passOutput, failOutput, } from "./validator.js";
3
+ export { setArtifacts, mergePatches } from "./ctx.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,UAAU,EACV,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { runCommand, tailOf, } from "./capture.js";
2
+ export { ValidatorIssueSchema, ValidatorOutputSchema, passOutput, failOutput, } from "./validator.js";
3
+ export { setArtifacts, mergePatches } from "./ctx.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,GAGP,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAGrB,UAAU,EACV,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Validator shape (sub-plan 03 §Part B; master plan ratified resolution).
3
+ *
4
+ * Validators emit `verdict: "fail"` as DATA on `Output`, not via `Failed`.
5
+ * `Failed` is reserved for "couldn't run at all" (binary missing,
6
+ * unreadable input, capability denied). This helper normalizes the
7
+ * output shape so downstream meta-nodes (repair_loop, judge) can switch
8
+ * on a single field.
9
+ */
10
+ import { z } from "zod";
11
+ export declare const ValidatorIssueSchema: z.ZodObject<{
12
+ path: z.ZodOptional<z.ZodString>;
13
+ message: z.ZodString;
14
+ code: z.ZodOptional<z.ZodString>;
15
+ severity: z.ZodDefault<z.ZodEnum<{
16
+ error: "error";
17
+ warning: "warning";
18
+ }>>;
19
+ }, z.core.$strip>;
20
+ export type ValidatorIssue = z.infer<typeof ValidatorIssueSchema>;
21
+ export declare const ValidatorOutputSchema: z.ZodObject<{
22
+ verdict: z.ZodEnum<{
23
+ pass: "pass";
24
+ fail: "fail";
25
+ }>;
26
+ issues: z.ZodArray<z.ZodObject<{
27
+ path: z.ZodOptional<z.ZodString>;
28
+ message: z.ZodString;
29
+ code: z.ZodOptional<z.ZodString>;
30
+ severity: z.ZodDefault<z.ZodEnum<{
31
+ error: "error";
32
+ warning: "warning";
33
+ }>>;
34
+ }, z.core.$strip>>;
35
+ summary: z.ZodString;
36
+ exit_code: z.ZodOptional<z.ZodNumber>;
37
+ stdout_tail: z.ZodOptional<z.ZodString>;
38
+ stderr_tail: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export type ValidatorOutput = z.infer<typeof ValidatorOutputSchema>;
41
+ export declare function passOutput(summary: string): ValidatorOutput;
42
+ export declare function failOutput(issues: ValidatorIssue[], summary: string, extra?: {
43
+ exit_code?: number;
44
+ stdout_tail?: string;
45
+ stderr_tail?: string;
46
+ }): ValidatorOutput;
47
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/shared/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;iBAUhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAE3D;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,eAAe,CASjB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Validator shape (sub-plan 03 §Part B; master plan ratified resolution).
3
+ *
4
+ * Validators emit `verdict: "fail"` as DATA on `Output`, not via `Failed`.
5
+ * `Failed` is reserved for "couldn't run at all" (binary missing,
6
+ * unreadable input, capability denied). This helper normalizes the
7
+ * output shape so downstream meta-nodes (repair_loop, judge) can switch
8
+ * on a single field.
9
+ */
10
+ import { z } from "zod";
11
+ export const ValidatorIssueSchema = z.object({
12
+ path: z.string().optional(),
13
+ message: z.string(),
14
+ code: z.string().optional(),
15
+ severity: z.enum(["error", "warning"]).default("error"),
16
+ });
17
+ export const ValidatorOutputSchema = z.object({
18
+ verdict: z.enum(["pass", "fail"]),
19
+ issues: z.array(ValidatorIssueSchema),
20
+ /** Short human-readable summary for logs / evidence. */
21
+ summary: z.string(),
22
+ /** Tool-level exit code if applicable; 0 for pass, non-zero for fail. */
23
+ exit_code: z.number().int().optional(),
24
+ /** Tail of raw tool output, bounded. */
25
+ stdout_tail: z.string().optional(),
26
+ stderr_tail: z.string().optional(),
27
+ });
28
+ export function passOutput(summary) {
29
+ return { verdict: "pass", issues: [], summary, exit_code: 0 };
30
+ }
31
+ export function failOutput(issues, summary, extra) {
32
+ return {
33
+ verdict: "fail",
34
+ issues,
35
+ summary,
36
+ ...(extra?.exit_code !== undefined ? { exit_code: extra.exit_code } : {}),
37
+ ...(extra?.stdout_tail ? { stdout_tail: extra.stdout_tail } : {}),
38
+ ...(extra?.stderr_tail ? { stderr_tail: extra.stderr_tail } : {}),
39
+ };
40
+ }
41
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/shared/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACxD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACrC,wDAAwD;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,yEAAyE;IACzE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACtC,wCAAwC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAAwB,EACxB,OAAe,EACf,KAA0E;IAE1E,OAAO;QACL,OAAO,EAAE,MAAM;QACf,MAAM;QACN,OAAO;QACP,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `@agenteer/node-compile` — deterministic compile validator (sub-plan 03 §6).
3
+ *
4
+ * M4 ships a TypeScript (`tsc`) adapter only; the adapter interface below
5
+ * is what community packages (pyright/clippy/go-build) plug into. Choosing
6
+ * TS-only keeps the surface small and dogfoods from day one.
7
+ *
8
+ * Deterministic given identical project state + invoking flags; results
9
+ * are cacheable on `(manifest, input, ctx_slice)` per sub-plan 00 §11.
10
+ *
11
+ * `shell.exec` is declared statically. The caller-supplied `cwd` decides
12
+ * where tsc runs; capability scope for fs.read is declared dynamically
13
+ * from input.cwd so workflows only hand over the directory that matters.
14
+ */
15
+ import { z } from "zod";
16
+ import { type Node } from "@agenteer/core";
17
+ import { type ValidatorIssue, type ValidatorOutput } from "../shared/index.js";
18
+ declare const InputSchema: z.ZodObject<{
19
+ language: z.ZodEnum<{
20
+ typescript: "typescript";
21
+ }>;
22
+ cwd: z.ZodString;
23
+ tsconfig: z.ZodOptional<z.ZodString>;
24
+ flags: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ timeout_ms: z.ZodDefault<z.ZodNumber>;
26
+ }, z.core.$strip>;
27
+ type Input = z.input<typeof InputSchema>;
28
+ export declare function compileFactory(): Node<Input, ValidatorOutput>;
29
+ export declare const compileManifest: {
30
+ manifest_version: 1;
31
+ id: string;
32
+ version: string;
33
+ name: string;
34
+ description: string;
35
+ required_actions: string[];
36
+ required_capabilities: {
37
+ tool_use: boolean;
38
+ vision: boolean;
39
+ structured_output: "any" | "native" | "text_parse";
40
+ min_context_tokens?: number | undefined;
41
+ };
42
+ dynamic_actions: boolean;
43
+ side_effects: {
44
+ writes_fs: boolean;
45
+ network: boolean;
46
+ mutates_ctx: boolean;
47
+ emits_ctx_variants: string[];
48
+ reads_ctx_variants: string[];
49
+ };
50
+ determinism: "deterministic" | "stochastic";
51
+ tags: string[];
52
+ author: string;
53
+ license: string;
54
+ input_schema?: unknown;
55
+ output_schema?: unknown;
56
+ dynamic_action_spec?: string | undefined;
57
+ homepage?: string | undefined;
58
+ repository?: string | undefined;
59
+ planner_hints?: {
60
+ cost_tier?: "cheap" | "medium" | "expensive" | undefined;
61
+ latency_tier?: "medium" | "fast" | "slow" | undefined;
62
+ typical_use?: string | undefined;
63
+ } | undefined;
64
+ sha256?: string | undefined;
65
+ };
66
+ /**
67
+ * Compile adapter interface — community-extensible.
68
+ *
69
+ * A compile adapter maps an opaque `language` id to (a) a shell command
70
+ * and (b) a stdout/stderr parser that extracts structured issues. The
71
+ * parser must be best-effort: when tool output cannot be parsed, return
72
+ * an empty list and let the exit code carry the verdict.
73
+ */
74
+ export interface CompileAdapter {
75
+ readonly language: string;
76
+ command(opts: {
77
+ tsconfig?: string;
78
+ flags: readonly string[];
79
+ }): string;
80
+ parseIssues(combinedOutput: string): ValidatorIssue[];
81
+ }
82
+ export {};
83
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/validators/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,IAAI,EAMV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAc5B,QAAA,MAAM,WAAW;;;;;;;;iBASf,CAAC;AAEH,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEzC,wBAAgB,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAqE7D;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAW,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM,CAAC;IACvE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;CACvD"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * `@agenteer/node-compile` — deterministic compile validator (sub-plan 03 §6).
3
+ *
4
+ * M4 ships a TypeScript (`tsc`) adapter only; the adapter interface below
5
+ * is what community packages (pyright/clippy/go-build) plug into. Choosing
6
+ * TS-only keeps the surface small and dogfoods from day one.
7
+ *
8
+ * Deterministic given identical project state + invoking flags; results
9
+ * are cacheable on `(manifest, input, ctx_slice)` per sub-plan 00 §11.
10
+ *
11
+ * `shell.exec` is declared statically. The caller-supplied `cwd` decides
12
+ * where tsc runs; capability scope for fs.read is declared dynamically
13
+ * from input.cwd so workflows only hand over the directory that matters.
14
+ */
15
+ import { z } from "zod";
16
+ import { makeManifest, authorizeOperation, } from "@agenteer/core";
17
+ import { failOutput, passOutput, runCommand, tailOf, ValidatorOutputSchema, } from "../shared/index.js";
18
+ const MANIFEST = makeManifest({
19
+ id: "@agenteer/node-compile",
20
+ name: "compile",
21
+ description: "Run a compile step (v1: TypeScript `tsc`). Returns structured issue list; verdict is DATA.",
22
+ determinism: "deterministic",
23
+ required_actions: ["shell.exec:"],
24
+ dynamic_actions: true,
25
+ dynamic_action_spec: "fs.read:${input.cwd}",
26
+ tags: ["validator"],
27
+ });
28
+ const InputSchema = z.object({
29
+ /** Which language toolchain. v1 ships `typescript` only; `x-*` reserved for community. */
30
+ language: z.enum(["typescript"]),
31
+ cwd: z.string().min(1),
32
+ /** Explicit tsconfig path relative to cwd (default: `tsconfig.json`). */
33
+ tsconfig: z.string().optional(),
34
+ /** Additional flags (e.g. `--incremental false`). */
35
+ flags: z.array(z.string()).default([]),
36
+ timeout_ms: z.number().int().min(1).max(600_000).default(300_000),
37
+ });
38
+ export function compileFactory() {
39
+ return {
40
+ manifest: MANIFEST,
41
+ inputSchema: InputSchema,
42
+ outputSchema: ValidatorOutputSchema,
43
+ ctx: [],
44
+ model: null,
45
+ async execute(input, handle) {
46
+ const { language, cwd, tsconfig, flags } = input.original;
47
+ const timeout_ms = input.original.timeout_ms ?? 300_000;
48
+ try {
49
+ authorizeOperation(handle.granted, { kind: "shell.exec" });
50
+ }
51
+ catch (err) {
52
+ return {
53
+ kind: "failed",
54
+ reason: `permission_denied: ${err instanceof Error ? err.message : String(err)}`,
55
+ retryable: false,
56
+ evidence: { verdict: "fail" },
57
+ };
58
+ }
59
+ const adapter = ADAPTERS[language];
60
+ const command = adapter.command({ tsconfig, flags: flags ?? [] });
61
+ try {
62
+ const r = await runCommand(command, {
63
+ cwd,
64
+ timeout_ms,
65
+ signal: handle.signal,
66
+ });
67
+ const issues = adapter.parseIssues(r.stdout + "\n" + r.stderr);
68
+ const verdict = r.exit_code === 0 && issues.length === 0 ? "pass" : "fail";
69
+ const out = verdict === "pass"
70
+ ? {
71
+ ...passOutput(`${language} compile clean (${r.duration_ms}ms)`),
72
+ exit_code: r.exit_code,
73
+ }
74
+ : failOutput(issues.length
75
+ ? issues
76
+ : [
77
+ {
78
+ message: `${language} exited ${r.exit_code}${r.timed_out ? " (timed out)" : ""}`,
79
+ severity: "error",
80
+ },
81
+ ], `${language} compile failed: ${issues.length} issue(s)`, {
82
+ exit_code: r.exit_code,
83
+ stdout_tail: tailOf(r.stdout),
84
+ stderr_tail: tailOf(r.stderr),
85
+ });
86
+ return { kind: "output", value: out, evidence: { verdict } };
87
+ }
88
+ catch (err) {
89
+ return {
90
+ kind: "failed",
91
+ reason: err instanceof Error ? err.message : String(err),
92
+ retryable: true,
93
+ evidence: { verdict: "fail" },
94
+ };
95
+ }
96
+ },
97
+ };
98
+ }
99
+ export const compileManifest = MANIFEST;
100
+ /** tsc issue regex — `path(line,col): error TSxxxx: message`. */
101
+ const TSC_ISSUE_RE = /^(.+?)\((\d+),(\d+)\):\s+(error|warning)\s+TS\d+:\s+(.*)$/gm;
102
+ const TYPESCRIPT_ADAPTER = {
103
+ language: "typescript",
104
+ command(opts) {
105
+ const tsconfigArg = opts.tsconfig ? `--project ${JSON.stringify(opts.tsconfig)}` : "";
106
+ const extra = opts.flags.join(" ");
107
+ return `npx -y tsc --noEmit ${tsconfigArg} ${extra}`.replace(/\s+/g, " ").trim();
108
+ },
109
+ parseIssues(output) {
110
+ const issues = [];
111
+ for (const m of output.matchAll(TSC_ISSUE_RE)) {
112
+ const [, file, line, col, sev, msg] = m;
113
+ issues.push({
114
+ path: `${file}:${line}:${col}`,
115
+ message: msg.trim(),
116
+ code: "TS",
117
+ severity: sev === "warning" ? "warning" : "error",
118
+ });
119
+ }
120
+ return issues;
121
+ },
122
+ };
123
+ const ADAPTERS = {
124
+ typescript: TYPESCRIPT_ADAPTER,
125
+ };
126
+ //# sourceMappingURL=compile.js.map