@aexol/spectral 0.9.220 → 0.9.222

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 (153) hide show
  1. package/dist/agent/index.d.ts +7 -3
  2. package/dist/agent/index.d.ts.map +1 -1
  3. package/dist/agent/index.js +35 -8
  4. package/dist/extensions/aexol-backend-client.d.ts +85 -0
  5. package/dist/extensions/aexol-backend-client.d.ts.map +1 -0
  6. package/dist/extensions/aexol-backend-client.js +159 -0
  7. package/dist/extensions/aexol-mcp.d.ts +10 -6
  8. package/dist/extensions/aexol-mcp.d.ts.map +1 -1
  9. package/dist/extensions/aexol-mcp.js +21 -106
  10. package/dist/extensions/logic-trace-backend-draft.d.ts +68 -0
  11. package/dist/extensions/logic-trace-backend-draft.d.ts.map +1 -0
  12. package/dist/extensions/logic-trace-backend-draft.js +171 -0
  13. package/dist/extensions/logic-trace-validate.d.ts +33 -0
  14. package/dist/extensions/logic-trace-validate.d.ts.map +1 -0
  15. package/dist/extensions/logic-trace-validate.js +73 -0
  16. package/dist/extensions/logic-trace.d.ts +213 -0
  17. package/dist/extensions/logic-trace.d.ts.map +1 -0
  18. package/dist/extensions/logic-trace.js +1098 -0
  19. package/dist/generated/parser/lexer.d.ts +148 -0
  20. package/dist/generated/parser/lexer.d.ts.map +1 -0
  21. package/dist/generated/parser/lexer.js +877 -0
  22. package/dist/generated/parser/mod.d.ts +26 -0
  23. package/dist/generated/parser/mod.d.ts.map +1 -0
  24. package/dist/generated/parser/mod.js +30 -0
  25. package/dist/generated/parser/parser.d.ts +161 -0
  26. package/dist/generated/parser/parser.d.ts.map +1 -0
  27. package/dist/generated/parser/parser.js +754 -0
  28. package/dist/generated/parser/tokenizer.d.ts +107 -0
  29. package/dist/generated/parser/tokenizer.d.ts.map +1 -0
  30. package/dist/generated/parser/tokenizer.js +202 -0
  31. package/dist/generated/parser/validator.d.ts +45 -0
  32. package/dist/generated/parser/validator.d.ts.map +1 -0
  33. package/dist/generated/parser/validator.js +202 -0
  34. package/dist/generated/zeus/const.d.ts.map +1 -1
  35. package/dist/generated/zeus/const.js +4 -170
  36. package/dist/generated/zeus/index.d.ts +8 -873
  37. package/dist/generated/zeus/index.d.ts.map +1 -1
  38. package/dist/generated/zeus/index.js +0 -7
  39. package/dist/mcp/ui-stream-types.d.ts +2 -2
  40. package/dist/memory/tools/share-project-observation.js +1 -1
  41. package/dist/memory/tools/write-project-observation.d.ts.map +1 -1
  42. package/dist/memory/tools/write-project-observation.js +4 -3
  43. package/dist/sdk/agent-core/harness/types.d.ts +0 -1
  44. package/dist/sdk/agent-core/harness/types.d.ts.map +1 -1
  45. package/dist/sdk/agent-core/index.d.ts +0 -8
  46. package/dist/sdk/agent-core/index.d.ts.map +1 -1
  47. package/dist/sdk/agent-core/index.js +0 -9
  48. package/dist/sdk/coding-agent/core/extensions/index.d.ts +1 -1
  49. package/dist/sdk/coding-agent/core/extensions/index.d.ts.map +1 -1
  50. package/dist/sdk/coding-agent/core/extensions/native-extensions.js +2 -2
  51. package/dist/sdk/coding-agent/core/extensions/types.d.ts +20 -1
  52. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  53. package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts +9 -4
  54. package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  55. package/dist/sdk/coding-agent/core/tools/tool-definition-wrapper.js +15 -2
  56. package/dist/sdk/coding-agent/index.d.ts +1 -1
  57. package/dist/sdk/coding-agent/index.d.ts.map +1 -1
  58. package/dist/server/agent-bridge/headless-ui.d.ts +20 -0
  59. package/dist/server/agent-bridge/headless-ui.d.ts.map +1 -0
  60. package/dist/server/agent-bridge/headless-ui.js +85 -0
  61. package/dist/server/agent-bridge/pricing.d.ts +37 -0
  62. package/dist/server/agent-bridge/pricing.d.ts.map +1 -0
  63. package/dist/server/agent-bridge/pricing.js +202 -0
  64. package/dist/server/agent-bridge/rehydrate.d.ts +35 -0
  65. package/dist/server/agent-bridge/rehydrate.d.ts.map +1 -0
  66. package/dist/server/agent-bridge/rehydrate.js +122 -0
  67. package/dist/server/agent-bridge/synthetic-model.d.ts +27 -0
  68. package/dist/server/agent-bridge/synthetic-model.d.ts.map +1 -0
  69. package/dist/server/agent-bridge/synthetic-model.js +92 -0
  70. package/dist/server/agent-bridge.d.ts +11 -1
  71. package/dist/server/agent-bridge.d.ts.map +1 -1
  72. package/dist/server/agent-bridge.js +42 -481
  73. package/dist/server/session-stream/compaction-events.d.ts +13 -0
  74. package/dist/server/session-stream/compaction-events.d.ts.map +1 -0
  75. package/dist/server/session-stream/compaction-events.js +32 -0
  76. package/dist/server/session-stream/history-prune.d.ts +35 -0
  77. package/dist/server/session-stream/history-prune.d.ts.map +1 -0
  78. package/dist/server/session-stream/history-prune.js +182 -0
  79. package/dist/server/session-stream/memory.d.ts +48 -0
  80. package/dist/server/session-stream/memory.d.ts.map +1 -0
  81. package/dist/server/session-stream/memory.js +136 -0
  82. package/dist/server/session-stream/replay-tail.d.ts +4 -0
  83. package/dist/server/session-stream/replay-tail.d.ts.map +1 -0
  84. package/dist/server/session-stream/replay-tail.js +39 -0
  85. package/dist/server/session-stream/turn-events.d.ts +33 -0
  86. package/dist/server/session-stream/turn-events.d.ts.map +1 -0
  87. package/dist/server/session-stream/turn-events.js +65 -0
  88. package/dist/server/session-stream/turn-silence.d.ts +8 -0
  89. package/dist/server/session-stream/turn-silence.d.ts.map +1 -0
  90. package/dist/server/session-stream/turn-silence.js +72 -0
  91. package/dist/server/session-stream.d.ts +137 -36
  92. package/dist/server/session-stream.d.ts.map +1 -1
  93. package/dist/server/session-stream.js +18 -509
  94. package/dist/server/storage/observation-ranking.d.ts +14 -0
  95. package/dist/server/storage/observation-ranking.d.ts.map +1 -0
  96. package/dist/server/storage/observation-ranking.js +37 -0
  97. package/dist/server/storage/preflight.d.ts +20 -0
  98. package/dist/server/storage/preflight.d.ts.map +1 -0
  99. package/dist/server/storage/preflight.js +22 -0
  100. package/dist/server/storage/project-binding.d.ts +5 -0
  101. package/dist/server/storage/project-binding.d.ts.map +1 -0
  102. package/dist/server/storage/project-binding.js +32 -0
  103. package/dist/server/storage/rows.d.ts +104 -0
  104. package/dist/server/storage/rows.d.ts.map +1 -0
  105. package/dist/server/storage/rows.js +2 -0
  106. package/dist/server/storage/schema.d.ts +20 -0
  107. package/dist/server/storage/schema.d.ts.map +1 -0
  108. package/dist/server/storage/schema.js +134 -0
  109. package/dist/server/storage/types.d.ts +66 -0
  110. package/dist/server/storage/types.d.ts.map +1 -0
  111. package/dist/server/storage/types.js +1 -0
  112. package/dist/server/storage.d.ts +7 -94
  113. package/dist/server/storage.d.ts.map +1 -1
  114. package/dist/server/storage.js +6 -224
  115. package/dist/server/wire.d.ts +6 -0
  116. package/dist/server/wire.d.ts.map +1 -1
  117. package/package.json +2 -1
  118. package/dist/sdk/agent-core/harness/agent-harness.d.ts +0 -92
  119. package/dist/sdk/agent-core/harness/agent-harness.d.ts.map +0 -1
  120. package/dist/sdk/agent-core/harness/agent-harness.js +0 -899
  121. package/dist/sdk/agent-core/harness/env/nodejs.d.ts +0 -51
  122. package/dist/sdk/agent-core/harness/env/nodejs.d.ts.map +0 -1
  123. package/dist/sdk/agent-core/harness/env/nodejs.js +0 -485
  124. package/dist/sdk/agent-core/harness/prompt-templates.d.ts +0 -48
  125. package/dist/sdk/agent-core/harness/prompt-templates.d.ts.map +0 -1
  126. package/dist/sdk/agent-core/harness/prompt-templates.js +0 -229
  127. package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts +0 -26
  128. package/dist/sdk/agent-core/harness/session/jsonl-repo.d.ts.map +0 -1
  129. package/dist/sdk/agent-core/harness/session/jsonl-repo.js +0 -100
  130. package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts +0 -33
  131. package/dist/sdk/agent-core/harness/session/jsonl-storage.d.ts.map +0 -1
  132. package/dist/sdk/agent-core/harness/session/jsonl-storage.js +0 -230
  133. package/dist/sdk/agent-core/harness/session/memory-repo.d.ts +0 -18
  134. package/dist/sdk/agent-core/harness/session/memory-repo.d.ts.map +0 -1
  135. package/dist/sdk/agent-core/harness/session/memory-repo.js +0 -41
  136. package/dist/sdk/agent-core/harness/session/memory-storage.d.ts +0 -25
  137. package/dist/sdk/agent-core/harness/session/memory-storage.d.ts.map +0 -1
  138. package/dist/sdk/agent-core/harness/session/memory-storage.js +0 -113
  139. package/dist/sdk/agent-core/harness/session/repo-utils.d.ts +0 -11
  140. package/dist/sdk/agent-core/harness/session/repo-utils.d.ts.map +0 -1
  141. package/dist/sdk/agent-core/harness/session/repo-utils.js +0 -38
  142. package/dist/sdk/agent-core/harness/skills.d.ts +0 -44
  143. package/dist/sdk/agent-core/harness/skills.d.ts.map +0 -1
  144. package/dist/sdk/agent-core/harness/skills.js +0 -310
  145. package/dist/sdk/agent-core/harness/utils/shell-output.d.ts +0 -14
  146. package/dist/sdk/agent-core/harness/utils/shell-output.d.ts.map +0 -1
  147. package/dist/sdk/agent-core/harness/utils/shell-output.js +0 -125
  148. package/dist/sdk/agent-core/node.d.ts +0 -3
  149. package/dist/sdk/agent-core/node.d.ts.map +0 -1
  150. package/dist/sdk/agent-core/node.js +0 -2
  151. package/dist/sdk/agent-core/proxy.d.ts +0 -69
  152. package/dist/sdk/agent-core/proxy.d.ts.map +0 -1
  153. package/dist/sdk/agent-core/proxy.js +0 -297
@@ -1,51 +0,0 @@
1
- import { type ExecutionEnv, ExecutionError, FileError, type FileInfo, type Result } from "../types.js";
2
- export declare class NodeExecutionEnv implements ExecutionEnv {
3
- cwd: string;
4
- private shellPath?;
5
- private shellEnv?;
6
- constructor(options: {
7
- cwd: string;
8
- shellPath?: string;
9
- shellEnv?: NodeJS.ProcessEnv;
10
- });
11
- absolutePath(path: string): Promise<Result<string, FileError>>;
12
- joinPath(parts: string[]): Promise<Result<string, FileError>>;
13
- exec(command: string, options?: {
14
- cwd?: string;
15
- env?: Record<string, string>;
16
- timeout?: number;
17
- abortSignal?: AbortSignal;
18
- onStdout?: (chunk: string) => void;
19
- onStderr?: (chunk: string) => void;
20
- }): Promise<Result<{
21
- stdout: string;
22
- stderr: string;
23
- exitCode: number;
24
- }, ExecutionError>>;
25
- readTextFile(path: string, abortSignal?: AbortSignal): Promise<Result<string, FileError>>;
26
- readTextLines(path: string, options?: {
27
- maxLines?: number;
28
- abortSignal?: AbortSignal;
29
- }): Promise<Result<string[], FileError>>;
30
- readBinaryFile(path: string, abortSignal?: AbortSignal): Promise<Result<Uint8Array, FileError>>;
31
- writeFile(path: string, content: string | Uint8Array, abortSignal?: AbortSignal): Promise<Result<void, FileError>>;
32
- appendFile(path: string, content: string | Uint8Array): Promise<Result<void, FileError>>;
33
- fileInfo(path: string): Promise<Result<FileInfo, FileError>>;
34
- listDir(path: string, abortSignal?: AbortSignal): Promise<Result<FileInfo[], FileError>>;
35
- canonicalPath(path: string): Promise<Result<string, FileError>>;
36
- exists(path: string): Promise<Result<boolean, FileError>>;
37
- createDir(path: string, options?: {
38
- recursive?: boolean;
39
- }): Promise<Result<void, FileError>>;
40
- remove(path: string, options?: {
41
- recursive?: boolean;
42
- force?: boolean;
43
- }): Promise<Result<void, FileError>>;
44
- createTempDir(prefix?: string): Promise<Result<string, FileError>>;
45
- createTempFile(options?: {
46
- prefix?: string;
47
- suffix?: string;
48
- }): Promise<Result<string, FileError>>;
49
- cleanup(): Promise<void>;
50
- }
51
- //# sourceMappingURL=nodejs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nodejs.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/agent-core/harness/env/nodejs.ts"],"names":[],"mappings":"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"}
@@ -1,485 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { randomUUID } from "node:crypto";
3
- import { constants, createReadStream } from "node:fs";
4
- import { access, appendFile, lstat, mkdir, mkdtemp, readdir, readFile, realpath, rm, writeFile, } from "node:fs/promises";
5
- import { tmpdir } from "node:os";
6
- import { isAbsolute, join, resolve } from "node:path";
7
- import { createInterface } from "node:readline";
8
- import { ExecutionError, err, FileError, ok, toError, } from "../types.js";
9
- function resolvePath(cwd, path) {
10
- return isAbsolute(path) ? path : resolve(cwd, path);
11
- }
12
- function fileKindFromStats(stats) {
13
- if (stats.isFile())
14
- return "file";
15
- if (stats.isDirectory())
16
- return "directory";
17
- if (stats.isSymbolicLink())
18
- return "symlink";
19
- return undefined;
20
- }
21
- function fileInfoFromStats(path, stats) {
22
- const kind = fileKindFromStats(stats);
23
- if (!kind)
24
- return err(new FileError("invalid", "Unsupported file type", path));
25
- return ok({
26
- name: path.replace(/\/+$/, "").split("/").pop() ?? path,
27
- path,
28
- kind,
29
- size: stats.size,
30
- mtimeMs: stats.mtimeMs,
31
- });
32
- }
33
- function isNodeError(error) {
34
- return error instanceof Error && "code" in error;
35
- }
36
- function toFileError(error, path) {
37
- if (error instanceof FileError)
38
- return error;
39
- const cause = toError(error);
40
- if (isNodeError(error)) {
41
- const message = error.message;
42
- switch (error.code) {
43
- case "ABORT_ERR":
44
- return new FileError("aborted", message, path, cause);
45
- case "ENOENT":
46
- return new FileError("not_found", message, path, cause);
47
- case "EACCES":
48
- case "EPERM":
49
- return new FileError("permission_denied", message, path, cause);
50
- case "ENOTDIR":
51
- return new FileError("not_directory", message, path, cause);
52
- case "EISDIR":
53
- return new FileError("is_directory", message, path, cause);
54
- case "EINVAL":
55
- return new FileError("invalid", message, path, cause);
56
- }
57
- }
58
- return new FileError("unknown", cause.message, path, cause);
59
- }
60
- function abortResult(signal, path) {
61
- return signal?.aborted ? err(new FileError("aborted", "aborted", path)) : undefined;
62
- }
63
- async function pathExists(path) {
64
- try {
65
- await access(path, constants.F_OK);
66
- return true;
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- async function runCommand(command, args, timeoutMs) {
73
- return await new Promise((resolve) => {
74
- let stdout = "";
75
- let child;
76
- try {
77
- child = spawn(command, args, {
78
- stdio: ["ignore", "pipe", "ignore"],
79
- windowsHide: true,
80
- });
81
- }
82
- catch {
83
- resolve({ stdout: "", status: null });
84
- return;
85
- }
86
- const timeout = setTimeout(() => {
87
- if (child.pid)
88
- killProcessTree(child.pid);
89
- }, timeoutMs);
90
- child.stdout?.setEncoding("utf8");
91
- child.stdout?.on("data", (chunk) => {
92
- stdout += chunk;
93
- });
94
- child.on("error", () => {
95
- clearTimeout(timeout);
96
- resolve({ stdout: "", status: null });
97
- });
98
- child.on("close", (status) => {
99
- clearTimeout(timeout);
100
- resolve({ stdout, status });
101
- });
102
- });
103
- }
104
- async function findBashOnPath() {
105
- const result = process.platform === "win32"
106
- ? await runCommand("where", ["bash.exe"], 5000)
107
- : await runCommand("which", ["bash"], 5000);
108
- if (result.status !== 0 || !result.stdout)
109
- return null;
110
- const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
111
- return firstMatch && (await pathExists(firstMatch)) ? firstMatch : null;
112
- }
113
- async function getShellConfig(customShellPath) {
114
- if (customShellPath) {
115
- if (await pathExists(customShellPath)) {
116
- return ok({ shell: customShellPath, args: ["-c"] });
117
- }
118
- return err(new ExecutionError("shell_unavailable", `Custom shell path not found: ${customShellPath}`));
119
- }
120
- if (process.platform === "win32") {
121
- const candidates = [];
122
- const programFiles = process.env.ProgramFiles;
123
- if (programFiles)
124
- candidates.push(`${programFiles}\\Git\\bin\\bash.exe`);
125
- const programFilesX86 = process.env["ProgramFiles(x86)"];
126
- if (programFilesX86)
127
- candidates.push(`${programFilesX86}\\Git\\bin\\bash.exe`);
128
- for (const candidate of candidates) {
129
- if (await pathExists(candidate)) {
130
- return ok({ shell: candidate, args: ["-c"] });
131
- }
132
- }
133
- const bashOnPath = await findBashOnPath();
134
- if (bashOnPath) {
135
- return ok({ shell: bashOnPath, args: ["-c"] });
136
- }
137
- return err(new ExecutionError("shell_unavailable", "No bash shell found"));
138
- }
139
- if (await pathExists("/bin/bash")) {
140
- return ok({ shell: "/bin/bash", args: ["-c"] });
141
- }
142
- const bashOnPath = await findBashOnPath();
143
- if (bashOnPath) {
144
- return ok({ shell: bashOnPath, args: ["-c"] });
145
- }
146
- return ok({ shell: "sh", args: ["-c"] });
147
- }
148
- function getShellEnv(baseEnv, extraEnv) {
149
- return {
150
- ...process.env,
151
- ...baseEnv,
152
- ...extraEnv,
153
- };
154
- }
155
- function killProcessTree(pid) {
156
- if (process.platform === "win32") {
157
- try {
158
- spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
159
- stdio: "ignore",
160
- detached: true,
161
- windowsHide: true,
162
- });
163
- }
164
- catch {
165
- // Ignore errors.
166
- }
167
- return;
168
- }
169
- try {
170
- process.kill(-pid, "SIGKILL");
171
- }
172
- catch {
173
- try {
174
- process.kill(pid, "SIGKILL");
175
- }
176
- catch {
177
- // Process already dead.
178
- }
179
- }
180
- }
181
- export class NodeExecutionEnv {
182
- cwd;
183
- shellPath;
184
- shellEnv;
185
- constructor(options) {
186
- this.cwd = options.cwd;
187
- this.shellPath = options.shellPath;
188
- this.shellEnv = options.shellEnv;
189
- }
190
- async absolutePath(path) {
191
- return ok(resolvePath(this.cwd, path));
192
- }
193
- async joinPath(parts) {
194
- return ok(join(...parts));
195
- }
196
- async exec(command, options) {
197
- if (options?.abortSignal?.aborted)
198
- return err(new ExecutionError("aborted", "aborted"));
199
- const cwd = options?.cwd ? resolvePath(this.cwd, options.cwd) : this.cwd;
200
- const shellConfig = await getShellConfig(this.shellPath);
201
- if (!shellConfig.ok)
202
- return shellConfig;
203
- return await new Promise((resolvePromise) => {
204
- let stdout = "";
205
- let stderr = "";
206
- let settled = false;
207
- let timedOut = false;
208
- let callbackError;
209
- let child;
210
- let timeoutId;
211
- const onAbort = () => {
212
- if (child?.pid) {
213
- killProcessTree(child.pid);
214
- }
215
- };
216
- const settle = (result) => {
217
- if (timeoutId)
218
- clearTimeout(timeoutId);
219
- if (options?.abortSignal)
220
- options.abortSignal.removeEventListener("abort", onAbort);
221
- if (settled)
222
- return;
223
- settled = true;
224
- resolvePromise(result);
225
- };
226
- try {
227
- child = spawn(shellConfig.value.shell, [...shellConfig.value.args, command], {
228
- cwd,
229
- detached: process.platform !== "win32",
230
- env: getShellEnv(this.shellEnv, options?.env),
231
- stdio: ["ignore", "pipe", "pipe"],
232
- windowsHide: true,
233
- });
234
- }
235
- catch (error) {
236
- const cause = toError(error);
237
- settle(err(new ExecutionError("spawn_error", cause.message, cause)));
238
- return;
239
- }
240
- timeoutId =
241
- typeof options?.timeout === "number"
242
- ? setTimeout(() => {
243
- timedOut = true;
244
- if (child?.pid) {
245
- killProcessTree(child.pid);
246
- }
247
- }, options.timeout * 1000)
248
- : undefined;
249
- if (options?.abortSignal) {
250
- if (options.abortSignal.aborted) {
251
- onAbort();
252
- }
253
- else {
254
- options.abortSignal.addEventListener("abort", onAbort, { once: true });
255
- }
256
- }
257
- child.stdout?.setEncoding("utf8");
258
- child.stderr?.setEncoding("utf8");
259
- child.stdout?.on("data", (chunk) => {
260
- stdout += chunk;
261
- try {
262
- options?.onStdout?.(chunk);
263
- }
264
- catch (error) {
265
- const cause = toError(error);
266
- callbackError = new ExecutionError("callback_error", cause.message, cause);
267
- onAbort();
268
- }
269
- });
270
- child.stderr?.on("data", (chunk) => {
271
- stderr += chunk;
272
- try {
273
- options?.onStderr?.(chunk);
274
- }
275
- catch (error) {
276
- const cause = toError(error);
277
- callbackError = new ExecutionError("callback_error", cause.message, cause);
278
- onAbort();
279
- }
280
- });
281
- child.on("error", (error) => {
282
- settle(err(new ExecutionError("spawn_error", error.message, error)));
283
- });
284
- child.on("close", (code) => {
285
- if (callbackError) {
286
- settle(err(callbackError));
287
- return;
288
- }
289
- if (timedOut) {
290
- settle(err(new ExecutionError("timeout", `timeout:${options?.timeout}`)));
291
- return;
292
- }
293
- if (options?.abortSignal?.aborted) {
294
- settle(err(new ExecutionError("aborted", "aborted")));
295
- return;
296
- }
297
- settle(ok({ stdout, stderr, exitCode: code ?? 0 }));
298
- });
299
- });
300
- }
301
- async readTextFile(path, abortSignal) {
302
- const resolved = resolvePath(this.cwd, path);
303
- const aborted = abortResult(abortSignal, resolved);
304
- if (aborted)
305
- return aborted;
306
- try {
307
- return ok(await readFile(resolved, { encoding: "utf8", signal: abortSignal }));
308
- }
309
- catch (error) {
310
- return err(toFileError(error, resolved));
311
- }
312
- }
313
- async readTextLines(path, options) {
314
- const resolved = resolvePath(this.cwd, path);
315
- const aborted = abortResult(options?.abortSignal, resolved);
316
- if (aborted)
317
- return aborted;
318
- if (options?.maxLines !== undefined && options.maxLines <= 0)
319
- return ok([]);
320
- let stream;
321
- let lineReader;
322
- try {
323
- stream = createReadStream(resolved, { encoding: "utf8", signal: options?.abortSignal });
324
- lineReader = createInterface({ input: stream, crlfDelay: Infinity });
325
- const lines = [];
326
- for await (const line of lineReader) {
327
- const loopAbort = abortResult(options?.abortSignal, resolved);
328
- if (loopAbort)
329
- return loopAbort;
330
- lines.push(line);
331
- if (options?.maxLines !== undefined && lines.length >= options.maxLines)
332
- break;
333
- }
334
- const afterReadAbort = abortResult(options?.abortSignal, resolved);
335
- if (afterReadAbort)
336
- return afterReadAbort;
337
- return ok(lines);
338
- }
339
- catch (error) {
340
- return err(toFileError(error, resolved));
341
- }
342
- finally {
343
- lineReader?.close();
344
- stream?.destroy();
345
- }
346
- }
347
- async readBinaryFile(path, abortSignal) {
348
- const resolved = resolvePath(this.cwd, path);
349
- const aborted = abortResult(abortSignal, resolved);
350
- if (aborted)
351
- return aborted;
352
- try {
353
- return ok(await readFile(resolved, { signal: abortSignal }));
354
- }
355
- catch (error) {
356
- return err(toFileError(error, resolved));
357
- }
358
- }
359
- async writeFile(path, content, abortSignal) {
360
- const resolved = resolvePath(this.cwd, path);
361
- const aborted = abortResult(abortSignal, resolved);
362
- if (aborted)
363
- return aborted;
364
- try {
365
- await mkdir(resolve(resolved, ".."), { recursive: true });
366
- const afterMkdirAbort = abortResult(abortSignal, resolved);
367
- if (afterMkdirAbort)
368
- return afterMkdirAbort;
369
- await writeFile(resolved, content, { signal: abortSignal });
370
- return ok(undefined);
371
- }
372
- catch (error) {
373
- return err(toFileError(error, resolved));
374
- }
375
- }
376
- async appendFile(path, content) {
377
- const resolved = resolvePath(this.cwd, path);
378
- try {
379
- await mkdir(resolve(resolved, ".."), { recursive: true });
380
- await appendFile(resolved, content);
381
- return ok(undefined);
382
- }
383
- catch (error) {
384
- return err(toFileError(error, resolved));
385
- }
386
- }
387
- async fileInfo(path) {
388
- const resolved = resolvePath(this.cwd, path);
389
- try {
390
- return fileInfoFromStats(resolved, await lstat(resolved));
391
- }
392
- catch (error) {
393
- return err(toFileError(error, resolved));
394
- }
395
- }
396
- async listDir(path, abortSignal) {
397
- const resolved = resolvePath(this.cwd, path);
398
- const aborted = abortResult(abortSignal, resolved);
399
- if (aborted)
400
- return aborted;
401
- try {
402
- const entries = await readdir(resolved, { withFileTypes: true });
403
- const infos = [];
404
- for (const entry of entries) {
405
- const loopAbort = abortResult(abortSignal, resolved);
406
- if (loopAbort)
407
- return loopAbort;
408
- const entryPath = resolve(resolved, entry.name);
409
- try {
410
- const info = fileInfoFromStats(entryPath, await lstat(entryPath));
411
- if (info.ok)
412
- infos.push(info.value);
413
- }
414
- catch (error) {
415
- return err(toFileError(error, entryPath));
416
- }
417
- }
418
- return ok(infos);
419
- }
420
- catch (error) {
421
- return err(toFileError(error, resolved));
422
- }
423
- }
424
- async canonicalPath(path) {
425
- const resolved = resolvePath(this.cwd, path);
426
- try {
427
- return ok(await realpath(resolved));
428
- }
429
- catch (error) {
430
- return err(toFileError(error, resolved));
431
- }
432
- }
433
- async exists(path) {
434
- const result = await this.fileInfo(path);
435
- if (result.ok)
436
- return ok(true);
437
- if (result.error.code === "not_found")
438
- return ok(false);
439
- return err(result.error);
440
- }
441
- async createDir(path, options) {
442
- const resolved = resolvePath(this.cwd, path);
443
- try {
444
- await mkdir(resolved, { recursive: options?.recursive ?? true });
445
- return ok(undefined);
446
- }
447
- catch (error) {
448
- return err(toFileError(error, resolved));
449
- }
450
- }
451
- async remove(path, options) {
452
- const resolved = resolvePath(this.cwd, path);
453
- try {
454
- await rm(resolved, { recursive: options?.recursive ?? false, force: options?.force ?? false });
455
- return ok(undefined);
456
- }
457
- catch (error) {
458
- return err(toFileError(error, resolved));
459
- }
460
- }
461
- async createTempDir(prefix = "tmp-") {
462
- try {
463
- return ok(await mkdtemp(join(tmpdir(), prefix)));
464
- }
465
- catch (error) {
466
- return err(toFileError(error));
467
- }
468
- }
469
- async createTempFile(options) {
470
- const dir = await this.createTempDir("tmp-");
471
- if (!dir.ok)
472
- return dir;
473
- const filePath = join(dir.value, `${options?.prefix ?? ""}${randomUUID()}${options?.suffix ?? ""}`);
474
- try {
475
- await writeFile(filePath, "");
476
- return ok(filePath);
477
- }
478
- catch (error) {
479
- return err(toFileError(error, filePath));
480
- }
481
- }
482
- async cleanup() {
483
- // nothing to clean up for the local node implementation
484
- }
485
- }
@@ -1,48 +0,0 @@
1
- import { type ExecutionEnv, type PromptTemplate } from "./types.js";
2
- export type PromptTemplateDiagnosticCode = "file_info_failed" | "list_failed" | "read_failed" | "parse_failed";
3
- /** Warning produced while loading prompt templates. */
4
- export interface PromptTemplateDiagnostic {
5
- /** Diagnostic severity. Currently only warnings are emitted. */
6
- type: "warning";
7
- /** Stable diagnostic code. */
8
- code: PromptTemplateDiagnosticCode;
9
- /** Human-readable diagnostic message. */
10
- message: string;
11
- /** Path associated with the diagnostic. */
12
- path: string;
13
- }
14
- /**
15
- * Load prompt templates from one or more paths.
16
- *
17
- * Directory inputs load direct `.md` children non-recursively. File inputs load explicit `.md` files. Missing paths and
18
- * non-markdown files are skipped. Read and parse failures are returned as diagnostics.
19
- */
20
- export declare function loadPromptTemplates(env: ExecutionEnv, paths: string | string[]): Promise<{
21
- promptTemplates: PromptTemplate[];
22
- diagnostics: PromptTemplateDiagnostic[];
23
- }>;
24
- /**
25
- * Load prompt templates from source-tagged paths.
26
- *
27
- * Source values are preserved exactly and attached to every loaded prompt template and diagnostic. The agent package does
28
- * not interpret source values; applications define their own provenance shape.
29
- */
30
- export declare function loadSourcedPromptTemplates<TSource, TPromptTemplate extends PromptTemplate = PromptTemplate>(env: ExecutionEnv, inputs: Array<{
31
- path: string;
32
- source: TSource;
33
- }>, mapPromptTemplate?: (promptTemplate: PromptTemplate, source: TSource) => TPromptTemplate): Promise<{
34
- promptTemplates: Array<{
35
- promptTemplate: TPromptTemplate;
36
- source: TSource;
37
- }>;
38
- diagnostics: Array<PromptTemplateDiagnostic & {
39
- source: TSource;
40
- }>;
41
- }>;
42
- /** Parse an argument string using simple shell-style single and double quotes. */
43
- export declare function parseCommandArgs(argsString: string): string[];
44
- /** Substitute prompt template placeholders (`$1`, `$@`, `$ARGUMENTS`, `${@:N}`, `${@:N:L}`) with command arguments. */
45
- export declare function substituteArgs(content: string, args: string[]): string;
46
- /** Format a prompt template invocation with positional arguments. */
47
- export declare function formatPromptTemplateInvocation(template: PromptTemplate, args?: string[]): string;
48
- //# sourceMappingURL=prompt-templates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../../../src/sdk/agent-core/harness/prompt-templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAiB,KAAK,cAAc,EAAwB,MAAM,YAAY,CAAC;AAEzG,MAAM,MAAM,4BAA4B,GAAG,kBAAkB,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/G,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACxC,gEAAgE;IAChE,IAAI,EAAE,SAAS,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,4BAA4B,CAAC;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACb;AAQD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACxC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,eAAe,EAAE,cAAc,EAAE,CAAC;IAAC,WAAW,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAAC,CA6BzF;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,eAAe,SAAS,cAAc,GAAG,cAAc,EAChH,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,EAChD,iBAAiB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,KAAK,eAAe,GACtF,OAAO,CAAC;IACV,eAAe,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,WAAW,EAAE,KAAK,CAAC,wBAAwB,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnE,CAAC,CAgBD;AAiID,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAuB7D;AAED,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAatE;AAED,qEAAqE;AACrE,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,MAAM,CAEpG"}