acpus 0.5.2 → 0.6.0-alpha.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 (140) hide show
  1. package/README.md +19 -5
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/agent-progress-format.d.ts +7 -0
  4. package/dist/agent-progress-format.d.ts.map +1 -0
  5. package/dist/agent-progress-format.js +102 -0
  6. package/dist/agent-progress-format.js.map +1 -0
  7. package/dist/authoring/core.d.ts +2 -0
  8. package/dist/authoring/core.d.ts.map +1 -0
  9. package/dist/authoring/core.js +2 -0
  10. package/dist/authoring/core.js.map +1 -0
  11. package/dist/authoring/expression.d.ts +2 -0
  12. package/dist/authoring/expression.d.ts.map +1 -0
  13. package/dist/authoring/expression.js +2 -0
  14. package/dist/authoring/expression.js.map +1 -0
  15. package/dist/authoring/tasks/git.d.ts +2 -0
  16. package/dist/authoring/tasks/git.d.ts.map +1 -0
  17. package/dist/authoring/tasks/git.js +2 -0
  18. package/dist/authoring/tasks/git.js.map +1 -0
  19. package/dist/catalog.d.ts +18 -24
  20. package/dist/catalog.d.ts.map +1 -1
  21. package/dist/catalog.js +164 -174
  22. package/dist/catalog.js.map +1 -1
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +14 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/daemon.d.ts +14 -0
  28. package/dist/commands/daemon.d.ts.map +1 -0
  29. package/dist/commands/daemon.js +89 -0
  30. package/dist/commands/daemon.js.map +1 -0
  31. package/dist/commands/doctor.d.ts +11 -0
  32. package/dist/commands/doctor.d.ts.map +1 -0
  33. package/dist/commands/doctor.js +26 -0
  34. package/dist/commands/doctor.js.map +1 -0
  35. package/dist/commands/hooks.d.ts +11 -0
  36. package/dist/commands/hooks.d.ts.map +1 -0
  37. package/dist/commands/hooks.js +64 -0
  38. package/dist/commands/hooks.js.map +1 -0
  39. package/dist/commands/json.d.ts +7 -0
  40. package/dist/commands/json.d.ts.map +1 -0
  41. package/dist/commands/json.js +43 -0
  42. package/dist/commands/json.js.map +1 -0
  43. package/dist/commands/runs-picker.d.ts +21 -0
  44. package/dist/commands/runs-picker.d.ts.map +1 -0
  45. package/dist/commands/runs-picker.js +76 -0
  46. package/dist/commands/runs-picker.js.map +1 -0
  47. package/dist/commands/runs.d.ts +12 -0
  48. package/dist/commands/runs.d.ts.map +1 -0
  49. package/dist/commands/runs.js +285 -0
  50. package/dist/commands/runs.js.map +1 -0
  51. package/dist/commands/skill.d.ts +11 -0
  52. package/dist/commands/skill.d.ts.map +1 -0
  53. package/dist/commands/skill.js +221 -0
  54. package/dist/commands/skill.js.map +1 -0
  55. package/dist/commands/web.d.ts +24 -0
  56. package/dist/commands/web.d.ts.map +1 -0
  57. package/dist/commands/web.js +57 -0
  58. package/dist/commands/web.js.map +1 -0
  59. package/dist/commands/workflow.d.ts +11 -0
  60. package/dist/commands/workflow.d.ts.map +1 -0
  61. package/dist/commands/workflow.js +324 -0
  62. package/dist/commands/workflow.js.map +1 -0
  63. package/dist/daemon-entry.d.ts +3 -0
  64. package/dist/daemon-entry.d.ts.map +1 -0
  65. package/dist/daemon-entry.js +26 -0
  66. package/dist/daemon-entry.js.map +1 -0
  67. package/dist/errors.d.ts +19 -0
  68. package/dist/errors.d.ts.map +1 -0
  69. package/dist/errors.js +28 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/output.d.ts +91 -11
  72. package/dist/output.d.ts.map +1 -1
  73. package/dist/output.js +203 -44
  74. package/dist/output.js.map +1 -1
  75. package/dist/program.d.ts +9 -0
  76. package/dist/program.d.ts.map +1 -0
  77. package/dist/program.js +85 -0
  78. package/dist/program.js.map +1 -0
  79. package/dist/run-status-surface.d.ts +12 -0
  80. package/dist/run-status-surface.d.ts.map +1 -0
  81. package/dist/run-status-surface.js +324 -0
  82. package/dist/run-status-surface.js.map +1 -0
  83. package/dist/workflow-preparation.d.ts +3 -0
  84. package/dist/workflow-preparation.d.ts.map +1 -0
  85. package/dist/workflow-preparation.js +34 -0
  86. package/dist/workflow-preparation.js.map +1 -0
  87. package/package.json +35 -35
  88. package/skills/acpus/SKILL.md +120 -0
  89. package/skills/acpus/eval/evaluations.md +47 -0
  90. package/skills/acpus/examples/hooks.example.json +17 -0
  91. package/skills/acpus/examples/workflows/adversarial-review/workflow.ts +248 -0
  92. package/skills/acpus/examples/workflows/change-approval/workflow.ts +121 -0
  93. package/skills/acpus/examples/workflows/issue-triage/tasks.ts +14 -0
  94. package/skills/acpus/examples/workflows/issue-triage/workflow.ts +146 -0
  95. package/skills/acpus/examples/workflows/multi-aspect-brainstorm/workflow.ts +304 -0
  96. package/skills/acpus/examples/workflows/worktree-tournament/workflow.ts +194 -0
  97. package/skills/acpus/references/authoring.md +205 -0
  98. package/skills/acpus/references/cli-operations.md +94 -0
  99. package/skills/acpus/references/hooks-json.md +81 -0
  100. package/skills/acpus/references/runtime-recovery.md +97 -0
  101. package/dist/agent-activity.d.ts +0 -3
  102. package/dist/agent-activity.d.ts.map +0 -1
  103. package/dist/agent-activity.js +0 -50
  104. package/dist/agent-activity.js.map +0 -1
  105. package/dist/agent-overrides.d.ts +0 -3
  106. package/dist/agent-overrides.d.ts.map +0 -1
  107. package/dist/agent-overrides.js +0 -39
  108. package/dist/agent-overrides.js.map +0 -1
  109. package/dist/follow.d.ts +0 -23
  110. package/dist/follow.d.ts.map +0 -1
  111. package/dist/follow.js +0 -164
  112. package/dist/follow.js.map +0 -1
  113. package/dist/hooks.d.ts +0 -4
  114. package/dist/hooks.d.ts.map +0 -1
  115. package/dist/hooks.js +0 -159
  116. package/dist/hooks.js.map +0 -1
  117. package/dist/index.d.ts +0 -3
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js +0 -592
  120. package/dist/index.js.map +0 -1
  121. package/dist/io.d.ts +0 -3
  122. package/dist/io.d.ts.map +0 -1
  123. package/dist/io.js +0 -27
  124. package/dist/io.js.map +0 -1
  125. package/dist/observations.d.ts +0 -39
  126. package/dist/observations.d.ts.map +0 -1
  127. package/dist/observations.js +0 -83
  128. package/dist/observations.js.map +0 -1
  129. package/dist/runs-show.d.ts +0 -40
  130. package/dist/runs-show.d.ts.map +0 -1
  131. package/dist/runs-show.js +0 -296
  132. package/dist/runs-show.js.map +0 -1
  133. package/dist/supervisor-client.d.ts +0 -9
  134. package/dist/supervisor-client.d.ts.map +0 -1
  135. package/dist/supervisor-client.js +0 -8
  136. package/dist/supervisor-client.js.map +0 -1
  137. package/dist/supervisor.d.ts +0 -18
  138. package/dist/supervisor.d.ts.map +0 -1
  139. package/dist/supervisor.js +0 -24
  140. package/dist/supervisor.js.map +0 -1
package/dist/catalog.js CHANGED
@@ -1,194 +1,184 @@
1
- import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
1
+ import { createHash } from "node:crypto";
2
+ import {} from "node:fs";
3
+ import { cp, mkdir, readdir, readFile, rm, stat } from "node:fs/promises";
2
4
  import { homedir } from "node:os";
3
- import { join, resolve } from "node:path";
4
- import { parse as parseYaml } from "yaml";
5
- import { globalWorkflowRoot, lintWorkflow, workflowSourceResolver } from "@acpus/core";
6
- export function projectWorkflowRoot(workspace = process.cwd()) {
7
- return resolve(workspace, ".acpus", "workflows");
8
- }
9
- export { globalWorkflowRoot };
10
- export function listWorkflowCatalog(workspace = process.cwd()) {
11
- const sourceResolver = workflowSourceResolver(workspace);
12
- const entries = [
13
- ...scanScope("project", projectWorkflowRoot(workspace), sourceResolver),
14
- ...scanScope("global", globalWorkflowRoot(), sourceResolver)
15
- ];
16
- for (const scope of ["project", "global"]) {
17
- const byName = new Map();
18
- for (const entry of entries) {
19
- if (entry.scope !== scope || !entry.name || entry.status === "invalid")
20
- continue;
21
- const group = byName.get(entry.name) ?? [];
22
- group.push(entry);
23
- byName.set(entry.name, group);
24
- }
25
- for (const [name, group] of byName) {
26
- if (group.length <= 1)
27
- continue;
28
- for (const entry of group) {
29
- entry.status = "conflict";
30
- entry.ref = undefined;
31
- entry.diagnostics = [{
32
- severity: "error",
33
- code: "CATALOG_CONFLICT",
34
- message: `Workflow name '${name}' is duplicated in ${scope} catalog.`,
35
- path: "$.name"
36
- }];
37
- }
38
- }
39
- }
40
- return entries;
5
+ import { dirname, isAbsolute, join, resolve } from "node:path";
6
+ import { CliError, usageError } from "./errors.js";
7
+ const catalogNamePattern = /^[a-z0-9][a-z0-9-]*$/;
8
+ const catalogWorkflowEntry = "workflow.ts";
9
+ export async function discoverWorkflowCatalog(cwd, options = {}) {
10
+ const scope = selectedScope(options);
11
+ const allEntries = (await Promise.all(["project", "global"].map(item => discoverScope(cwd, item)))).flat();
12
+ const counts = new Map();
13
+ for (const entry of allEntries)
14
+ counts.set(entry.name, (counts.get(entry.name) ?? 0) + 1);
15
+ return allEntries
16
+ .filter(entry => scope === undefined || entry.scope === scope)
17
+ .map(entry => ({ ...entry, requiresScope: (counts.get(entry.name) ?? 0) > 1 }))
18
+ .sort(compareCatalogEntries);
19
+ }
20
+ export async function showWorkflowCatalogEntry(cwd, name, options = {}) {
21
+ assertCatalogName(name);
22
+ return findCatalogEntry(cwd, name, options);
23
+ }
24
+ export async function resolveWorkflowReference(cwd, workflow, options = {}) {
25
+ if (!hasSelectedScope(options) && await isPathLikeWorkflowReference(cwd, workflow))
26
+ return { workflow };
27
+ assertCatalogName(workflow);
28
+ const catalog = await findCatalogEntry(cwd, workflow, options);
29
+ if (catalog.scope === "project")
30
+ return { workflow: catalog.entryPath, catalog };
31
+ return { workflow: await materializeGlobalCatalogEntry(cwd, catalog), catalog };
41
32
  }
42
- export function resolveWorkflowTarget(target, workspace = process.cwd()) {
43
- if (looksLikeWorkflowPath(target)) {
44
- const sourcePath = resolveWorkflowPath(target);
45
- return { sourcePath, source: readFileSync(sourcePath, "utf8") };
33
+ function selectedScope(options) {
34
+ if (options.project && options.global)
35
+ throw usageError("--project and --global are mutually exclusive.");
36
+ if (options.project)
37
+ return "project";
38
+ if (options.global)
39
+ return "global";
40
+ return undefined;
41
+ }
42
+ function hasSelectedScope(options) {
43
+ return Boolean(options.project || options.global);
44
+ }
45
+ async function findCatalogEntry(cwd, name, options) {
46
+ const entries = (await discoverWorkflowCatalog(cwd, options)).filter(entry => entry.name === name);
47
+ if (entries.length === 0) {
48
+ const scope = selectedScope(options);
49
+ throw inspectError(scope
50
+ ? `Workflow catalog entry '${name}' was not found in ${scope} scope.`
51
+ : `Workflow catalog entry '${name}' was not found.`);
46
52
  }
47
- const catalog = listWorkflowCatalog(workspace);
48
- const matches = catalog.filter((entry) => entry.status === "ready" && matchesCatalogTarget(entry, target));
49
- if (matches.length === 0) {
50
- const blocked = catalog.find((entry) => matchesCatalogTarget(entry, target));
51
- if (blocked) {
52
- throw new Error(`Workflow '${target}' is ${blocked.status}: ${blocked.diagnostics.map((d) => d.message).join("; ")}`);
53
- }
54
- throw new Error(`Workflow '${target}' was not found in the Workflow Catalog.`);
53
+ if (entries.length > 1)
54
+ throw usageError(`Workflow catalog entry '${name}' exists in project and global scopes. Pass --project or --global.`);
55
+ return entries[0];
56
+ }
57
+ async function discoverScope(cwd, scope) {
58
+ const root = catalogRoot(cwd, scope);
59
+ let dirents;
60
+ try {
61
+ dirents = await readdir(root, { withFileTypes: true });
55
62
  }
56
- if (matches.length > 1) {
57
- throw new Error(`Workflow short name '${target}' is ambiguous; use a full ref such as ${matches.map((m) => m.ref).join(" or ")}.`);
63
+ catch (error) {
64
+ if (isMissingPath(error))
65
+ return [];
66
+ throw inspectError(`Workflow catalog ${scope} root '${root}' could not be read: ${causeMessage(error)}`);
58
67
  }
59
- const entry = matches[0];
60
- return {
61
- sourcePath: entry.path,
62
- source: readFileSync(entry.path, "utf8"),
63
- workflowRef: entry.ref
64
- };
65
- }
66
- export function findWorkflowCatalogEntry(target, workspace = process.cwd()) {
67
- const catalog = listWorkflowCatalog(workspace);
68
- const matches = catalog.filter((entry) => matchesCatalogTarget(entry, target));
69
- if (matches.length === 0) {
70
- throw new Error(`Workflow '${target}' was not found in the Workflow Catalog.`);
68
+ const entries = [];
69
+ for (const dirent of dirents) {
70
+ const name = dirent.name;
71
+ if (!catalogNamePattern.test(name))
72
+ continue;
73
+ const packagePath = join(root, name);
74
+ if (!await isDirectory(packagePath))
75
+ continue;
76
+ const entryPath = join(packagePath, catalogWorkflowEntry);
77
+ if (!await isFile(entryPath))
78
+ continue;
79
+ entries.push({
80
+ scope,
81
+ name,
82
+ packagePath,
83
+ entryPath,
84
+ status: "available",
85
+ requiresScope: false,
86
+ });
71
87
  }
72
- if (matches.length > 1) {
73
- throw new Error(`Workflow name '${target}' is ambiguous; use a full ref when available.`);
88
+ return entries;
89
+ }
90
+ function catalogRoot(cwd, scope) {
91
+ return scope === "project"
92
+ ? join(cwd, ".acpus", "workflows")
93
+ : join(process.env.HOME || homedir(), ".acpus", "workflows");
94
+ }
95
+ function assertCatalogName(name) {
96
+ if (!catalogNamePattern.test(name))
97
+ throw usageError(`Workflow catalog name '${name}' must match ${catalogNamePattern.source}.`);
98
+ }
99
+ async function isPathLikeWorkflowReference(cwd, workflow) {
100
+ if (isAbsolute(workflow)
101
+ || workflow.startsWith("./")
102
+ || workflow.startsWith("../")
103
+ || workflow.includes("/")
104
+ || workflow.includes("\\")
105
+ || workflow.endsWith(".ts")) {
106
+ return true;
74
107
  }
75
- return matches[0];
76
- }
77
- function matchesCatalogTarget(entry, target) {
78
- return entry.ref === target || entry.name === target || (entry.name !== undefined && `${entry.scope}:${entry.name}` === target);
79
- }
80
- function scanScope(scope, root, sourceResolver) {
81
- if (!existsSync(root))
82
- return [];
83
- const files = collectCandidateFiles(root);
84
- return files.map((file) => entryFromFile(scope, file, sourceResolver));
85
- }
86
- function collectCandidateFiles(root) {
87
- const out = [];
88
- const visit = (dir) => {
89
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
90
- const path = join(dir, entry.name);
91
- if (entry.isDirectory()) {
92
- visit(path);
93
- }
94
- else if (entry.isFile() && isWorkflowCandidate(entry.name)) {
95
- out.push(path);
96
- }
97
- }
98
- };
99
- visit(root);
100
- return out.sort();
101
- }
102
- function entryFromFile(scope, path, sourceResolver) {
103
- const source = readFileSync(path, "utf8");
104
- const parsed = parseSpecSummary(source);
105
- const lint = lintCatalogEntry(source, path, sourceResolver);
106
- const name = parsed.name;
107
- const status = lint.ok && name ? "ready" : "invalid";
108
- return {
109
- scope,
110
- ref: status === "ready" ? `${scope}:${name}` : undefined,
111
- name,
112
- description: parsed.description,
113
- input: parsed.input,
114
- inputKeys: Object.keys(parsed.input ?? {}),
115
- path,
116
- status,
117
- diagnostics: lint.ok && !name
118
- ? [{ severity: "error", code: "CATALOG_NAME", message: "Workflow Spec must declare a string name.", path: "$.name" }]
119
- : lint.diagnostics
120
- };
121
- }
122
- function lintCatalogEntry(source, path, sourceResolver) {
108
+ return isFile(resolve(cwd, workflow));
109
+ }
110
+ async function materializeGlobalCatalogEntry(cwd, entry) {
123
111
  try {
124
- return lintWorkflow(source, {
125
- sourcePath: path,
126
- includeResolver: sourceResolver.createIncludeResolver(path)
127
- });
112
+ const digest = await digestDirectory(entry.packagePath);
113
+ const target = join(cwd, ".acpus", ".local", "catalog-cache", "global", entry.name, digest);
114
+ const targetEntry = join(target, catalogWorkflowEntry);
115
+ if (await isFile(targetEntry))
116
+ return targetEntry;
117
+ await rm(target, { recursive: true, force: true });
118
+ await mkdir(dirname(target), { recursive: true });
119
+ await cp(entry.packagePath, target, { recursive: true, dereference: true });
120
+ if (!await isFile(targetEntry))
121
+ throw new Error(`materialized package is missing ${catalogWorkflowEntry}`);
122
+ return targetEntry;
128
123
  }
129
124
  catch (error) {
130
- return {
131
- ok: false,
132
- diagnostics: [{
133
- severity: "error",
134
- code: "CATALOG_LINT",
135
- message: error instanceof Error ? error.message : String(error),
136
- path: "$"
137
- }]
138
- };
125
+ throw inspectError(`Workflow catalog entry '${entry.name}' could not be materialized: ${causeMessage(error)}`);
139
126
  }
140
127
  }
141
- function parseSpecSummary(source) {
128
+ async function digestDirectory(root) {
129
+ const hash = createHash("sha256");
130
+ await addToDigest(hash, root, "");
131
+ return hash.digest("hex");
132
+ }
133
+ async function addToDigest(hash, path, relativePath) {
134
+ const item = await stat(path);
135
+ const normalizedPath = relativePath.split(/[\\/]/).filter(Boolean).join("/");
136
+ if (item.isDirectory()) {
137
+ if (normalizedPath)
138
+ hash.update(`D ${normalizedPath}\n`);
139
+ const names = (await readdir(path)).sort();
140
+ for (const name of names)
141
+ await addToDigest(hash, join(path, name), join(relativePath, name));
142
+ return;
143
+ }
144
+ if (!item.isFile())
145
+ return;
146
+ hash.update(`F ${normalizedPath}\n`);
147
+ hash.update(await readFile(path));
148
+ hash.update("\n");
149
+ }
150
+ async function isDirectory(path) {
142
151
  try {
143
- const parsed = parseYaml(source);
144
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
145
- return {};
146
- const map = parsed;
147
- return {
148
- name: typeof map.name === "string" ? map.name : undefined,
149
- description: typeof map.description === "string" ? map.description : undefined,
150
- input: typeof map.input === "object" && map.input !== null && !Array.isArray(map.input)
151
- ? map.input
152
- : undefined
153
- };
152
+ return (await stat(path)).isDirectory();
154
153
  }
155
154
  catch {
156
- return {};
155
+ return false;
157
156
  }
158
157
  }
159
- function isWorkflowCandidate(filename) {
160
- const exact = new Set([
161
- "workflow.yaml",
162
- "workflow.yml",
163
- "workflow.spec.yaml",
164
- "workflow.spec.yml"
165
- ]);
166
- if (exact.has(filename))
167
- return true;
168
- return [
169
- ".workflow.yaml",
170
- ".workflow.yml",
171
- ".workflow.spec.yaml",
172
- ".workflow.spec.yml"
173
- ].some((suffix) => filename.endsWith(suffix));
174
- }
175
- export function looksLikeWorkflowPath(target) {
176
- return target.startsWith(".")
177
- || target.startsWith("/")
178
- || target.startsWith("~")
179
- || target.includes("/")
180
- || target.endsWith(".yaml")
181
- || target.endsWith(".yml");
182
- }
183
- export function resolveWorkflowPath(path) {
184
- if (path === "~")
185
- return homedir();
186
- if (path.startsWith("~/"))
187
- return resolve(homedir(), path.slice(2));
188
- const resolved = resolve(process.cwd(), path);
189
- if (!existsSync(resolved) || !statSync(resolved).isFile()) {
190
- throw new Error(`Workflow Spec path not found: ${path}`);
158
+ async function isFile(path) {
159
+ try {
160
+ return (await stat(path)).isFile();
191
161
  }
192
- return resolved;
162
+ catch {
163
+ return false;
164
+ }
165
+ }
166
+ function compareCatalogEntries(left, right) {
167
+ const name = left.name.localeCompare(right.name);
168
+ if (name !== 0)
169
+ return name;
170
+ return scopeRank(left.scope) - scopeRank(right.scope);
171
+ }
172
+ function scopeRank(scope) {
173
+ return scope === "project" ? 0 : 1;
174
+ }
175
+ function inspectError(message) {
176
+ return new CliError(1, { ok: false, phase: "inspect", message });
177
+ }
178
+ function isMissingPath(error) {
179
+ return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
180
+ }
181
+ function causeMessage(cause) {
182
+ return cause instanceof Error ? cause.message : String(cause);
193
183
  }
194
184
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAe,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAuBnD,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAClD,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAW,EAAE,UAAuC,EAAE;IAClG,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAE,CAAC,SAAS,EAAE,QAAQ,CAAmC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9I,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,UAAU;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,OAAO,UAAU;SACd,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;SAC7D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC9E,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAW,EAAE,IAAY,EAAE,UAAuC,EAAE;IACjH,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAW,EAAE,QAAgB,EAAE,UAAuC,EAAE;IACrH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,2BAA2B,CAAC,GAAG,EAAE,QAAQ,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACxG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,OAAoC;IACzD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,UAAU,CAAC,gDAAgD,CAAC,CAAC;IAC1G,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoC;IAC5D,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAY,EAAE,OAAoC;IAC7F,MAAM,OAAO,GAAG,CAAC,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,YAAY,CAAC,KAAK;YACtB,CAAC,CAAC,2BAA2B,IAAI,sBAAsB,KAAK,SAAS;YACrE,CAAC,CAAC,2BAA2B,IAAI,kBAAkB,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,UAAU,CAAC,2BAA2B,IAAI,oEAAoE,CAAC,CAAC;IAC9I,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,KAA2B;IACnE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,IAAI,OAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,YAAY,CAAC,oBAAoB,KAAK,UAAU,IAAI,wBAAwB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC;YAAE,SAAS;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC;YAAE,SAAS;QACvC,OAAO,CAAC,IAAI,CAAC;YACX,KAAK;YACL,IAAI;YACJ,WAAW;YACX,SAAS;YACT,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAA2B;IAC3D,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,UAAU,CAAC,0BAA0B,IAAI,gBAAgB,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AACnI,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,GAAW,EAAE,QAAgB;IACtE,IAAI,UAAU,CAAC,QAAQ,CAAC;WACnB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;WACzB,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;WAC1B,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;WACtB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;WACvB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,GAAW,EAAE,KAA2B;IACnF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACvD,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAC;QAClD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,oBAAoB,EAAE,CAAC,CAAC;QAC3G,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,CAAC,2BAA2B,KAAK,CAAC,IAAI,gCAAgC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAmC,EAAE,IAAY,EAAE,YAAoB;IAChG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7E,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,IAAI,cAAc;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAA0B,EAAE,KAA2B;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,KAA2B;IAC5C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./program.js";
3
+ runCli(process.argv.slice(2), {
4
+ cwd: process.cwd(),
5
+ stdin: process.stdin,
6
+ stdout: process.stdout,
7
+ stderr: process.stderr,
8
+ }).then(code => {
9
+ process.exitCode = code;
10
+ }, error => {
11
+ console.error(error instanceof Error ? error.message : String(error));
12
+ process.exitCode = 1;
13
+ });
14
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC,IAAI,CACL,IAAI,CAAC,EAAE;IACL,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,KAAK,CAAC,EAAE;IACN,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type DaemonControlIntent, type DaemonErrorCode, type RunDetails, type RuntimeAdvanceResult, type RuntimeMutationResult } from "@acpus/runtime";
2
+ export declare class DaemonControlFailure extends Error {
3
+ readonly code: DaemonErrorCode;
4
+ readonly controlType: DaemonControlIntent["type"];
5
+ readonly runId: string;
6
+ readonly run: RunDetails | undefined;
7
+ constructor(code: DaemonErrorCode, controlType: DaemonControlIntent["type"], runId: string, run: RunDetails | undefined, cause: unknown);
8
+ }
9
+ export declare function ensureDaemonRunning(cwd: string): void;
10
+ export declare function sendDaemonControl(cwd: string, intent: DaemonControlIntent): Promise<RuntimeMutationResult>;
11
+ export declare function sendDaemonStartRun(cwd: string, runId: string): Promise<RunDetails>;
12
+ export declare function sendDaemonObserveRun(cwd: string, runId: string): Promise<RuntimeAdvanceResult>;
13
+ export declare function daemonControlRequestId(): string;
14
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoG,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE1P,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,IAAI,EAAE,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS;gBAH3B,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,UAAU,GAAG,SAAS,EACpC,KAAK,EAAE,OAAO;CAIjB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOrD;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAchH;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcxF;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAGpG;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
@@ -0,0 +1,89 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { fileURLToPath } from "node:url";
4
+ import { DaemonRequestError, getRun, requestDaemonControl, requestDaemonObserveRun, requestDaemonStartRun } from "@acpus/runtime";
5
+ export class DaemonControlFailure extends Error {
6
+ code;
7
+ controlType;
8
+ runId;
9
+ run;
10
+ constructor(code, controlType, runId, run, cause) {
11
+ super(controlFailureMessage(code, controlType, runId, run, cause));
12
+ this.code = code;
13
+ this.controlType = controlType;
14
+ this.runId = runId;
15
+ this.run = run;
16
+ }
17
+ }
18
+ export function ensureDaemonRunning(cwd) {
19
+ const child = spawn(process.execPath, daemonEntryArgs(cwd), {
20
+ cwd,
21
+ detached: true,
22
+ stdio: "ignore",
23
+ });
24
+ child.unref();
25
+ }
26
+ export async function sendDaemonControl(cwd, intent) {
27
+ ensureDaemonRunning(cwd);
28
+ const deadline = Date.now() + 30_000;
29
+ let lastError;
30
+ while (Date.now() <= deadline) {
31
+ try {
32
+ return await requestDaemonControl(cwd, intent);
33
+ }
34
+ catch (error) {
35
+ if (error instanceof DaemonRequestError && error.code !== "INTERNAL_ERROR")
36
+ throw await daemonControlFailure(cwd, intent, error.code, error);
37
+ lastError = error;
38
+ await new Promise(resolve => setTimeout(resolve, 100));
39
+ }
40
+ }
41
+ throw await daemonControlFailure(cwd, intent, "EXECUTION_UNAVAILABLE", lastError);
42
+ }
43
+ export async function sendDaemonStartRun(cwd, runId) {
44
+ ensureDaemonRunning(cwd);
45
+ const deadline = Date.now() + 30_000;
46
+ let lastError;
47
+ while (Date.now() <= deadline) {
48
+ try {
49
+ return await requestDaemonStartRun(cwd, runId);
50
+ }
51
+ catch (error) {
52
+ if (error instanceof DaemonRequestError && error.code !== "INTERNAL_ERROR")
53
+ throw error;
54
+ lastError = error;
55
+ await new Promise(resolve => setTimeout(resolve, 100));
56
+ }
57
+ }
58
+ throw lastError instanceof Error ? lastError : new Error(String(lastError));
59
+ }
60
+ export async function sendDaemonObserveRun(cwd, runId) {
61
+ await sendDaemonStartRun(cwd, runId);
62
+ return requestDaemonObserveRun(cwd, runId);
63
+ }
64
+ export function daemonControlRequestId() {
65
+ return `cli:${randomUUID()}`;
66
+ }
67
+ function daemonEntryArgs(cwd) {
68
+ const isSourceMode = fileURLToPath(import.meta.url).endsWith(".ts");
69
+ const entry = fileURLToPath(new URL(`../daemon-entry.${isSourceMode ? "ts" : "js"}`, import.meta.url));
70
+ return isSourceMode
71
+ ? ["--conditions=development", "--import", import.meta.resolve("tsx"), entry, cwd]
72
+ : [entry, cwd];
73
+ }
74
+ async function daemonControlFailure(cwd, intent, code, cause) {
75
+ let run;
76
+ try {
77
+ run = await getRun(cwd, intent.runId);
78
+ }
79
+ catch {
80
+ run = undefined;
81
+ }
82
+ return new DaemonControlFailure(code, intent.type, intent.runId, run, cause);
83
+ }
84
+ function controlFailureMessage(code, controlType, runId, run, cause) {
85
+ const reason = cause instanceof Error ? cause.message : String(cause);
86
+ const current = run ? ` Current run: ${run.id} ${run.name} ${run.status} updated ${run.updatedAt}.` : " Current run: unavailable.";
87
+ return `Control '${controlType}' for run '${runId}' failed with ${code}: ${reason}.${current}`;
88
+ }
89
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Writable } from "node:stream";
2
+ import { Command } from "commander";
3
+ export type DoctorCommandContext = {
4
+ cwd: string;
5
+ stdout: Writable;
6
+ stderr: Writable;
7
+ wantsJson: boolean;
8
+ setExitCode(code: number): void;
9
+ };
10
+ export declare function createDoctorCommand(ctx: DoctorCommandContext): Command;
11
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAoBtE"}
@@ -0,0 +1,26 @@
1
+ import { Command } from "commander";
2
+ import { getRuntimeHealth } from "@acpus/runtime";
3
+ import { writeResult } from "../output.js";
4
+ export function createDoctorCommand(ctx) {
5
+ return new Command("doctor")
6
+ .exitOverride()
7
+ .configureOutput({
8
+ writeOut: text => ctx.stdout.write(text),
9
+ writeErr: text => {
10
+ if (!ctx.wantsJson)
11
+ ctx.stderr.write(text);
12
+ },
13
+ outputError: (text, write) => write(text),
14
+ })
15
+ .description("Run read-only workspace health checks.")
16
+ .action(async () => {
17
+ const report = await getRuntimeHealth(ctx.cwd);
18
+ ctx.setExitCode(writeResult({
19
+ ok: report.ok,
20
+ phase: "doctor",
21
+ message: report.ok ? "Doctor checks passed." : "Doctor checks failed.",
22
+ checks: report.checks,
23
+ }, ctx.wantsJson ? "json" : "text", ctx, report.ok ? 0 : 1));
24
+ });
25
+ }
26
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAU3C,MAAM,UAAU,mBAAmB,CAAC,GAAyB;IAC3D,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,YAAY,EAAE;SACd,eAAe,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QACxC,QAAQ,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,SAAS;gBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KAC1C,CAAC;SACD,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;YAC1B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB;YACtE,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from "commander";
2
+ import type { Writable } from "node:stream";
3
+ export type HooksCommandContext = {
4
+ cwd: string;
5
+ stdout: Writable;
6
+ stderr: Writable;
7
+ wantsJson: boolean;
8
+ setExitCode(code: number): void;
9
+ };
10
+ export declare function createHooksCommand(ctx: HooksCommandContext): Command;
11
+ //# sourceMappingURL=hooks.d.ts.map