ace-swarm 2.0.5 → 2.0.7

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 (112) hide show
  1. package/README.md +17 -0
  2. package/assets/.agents/skills/landing-review-watcher/SKILL.md +68 -0
  3. package/assets/.agents/skills/problem-triage/SKILL.md +57 -0
  4. package/assets/.agents/skills/problem-triage/agents/openai.yaml +3 -0
  5. package/assets/.agents/skills/skill-auditor/SKILL.md +52 -0
  6. package/assets/.github/hooks/ace-copilot.json +68 -0
  7. package/assets/agent-state/ACE_WORKFLOW.md +66 -0
  8. package/assets/agent-state/INTERFACE_REGISTRY.md +50 -0
  9. package/assets/agent-state/MODULES/gates/gate-typescript-public-surface.json +7 -0
  10. package/assets/agent-state/MODULES/registry.json +10 -2
  11. package/assets/agent-state/MODULES/schemas/ACE_RUNTIME_PROFILE.schema.json +210 -0
  12. package/assets/agent-state/MODULES/schemas/RUNTIME_EXECUTOR_SESSION_REGISTRY.schema.json +290 -0
  13. package/assets/agent-state/MODULES/schemas/RUNTIME_TOOL_SPEC_REGISTRY.schema.json +144 -0
  14. package/assets/agent-state/MODULES/schemas/TRACKER_SNAPSHOT.schema.json +134 -0
  15. package/assets/agent-state/MODULES/schemas/VERICIFY_BRIDGE_SNAPSHOT.schema.json +157 -0
  16. package/assets/agent-state/MODULES/schemas/VERICIFY_PROCESS_POST_LOG.schema.json +92 -0
  17. package/assets/agent-state/MODULES/schemas/WORKSPACE_SESSION_REGISTRY.schema.json +133 -0
  18. package/assets/agent-state/SKILL_CATALOG.md +48 -0
  19. package/assets/agent-state/runtime-executor-sessions.json +5 -0
  20. package/assets/agent-state/runtime-tool-specs.json +5 -0
  21. package/assets/agent-state/runtime-workspaces.json +5 -0
  22. package/assets/agent-state/tracker-snapshot.json +7 -0
  23. package/assets/agent-state/vericify/ace-bridge.json +60 -0
  24. package/assets/agent-state/vericify/process-posts.json +5 -0
  25. package/assets/scripts/bootstrap-workspace.sh +5 -0
  26. package/assets/scripts/copilot-hook-dispatch.mjs +267 -0
  27. package/dist/helpers.d.ts +1 -0
  28. package/dist/helpers.d.ts.map +1 -1
  29. package/dist/helpers.js +312 -2
  30. package/dist/helpers.js.map +1 -1
  31. package/dist/problem-triage.d.ts +23 -0
  32. package/dist/problem-triage.d.ts.map +1 -0
  33. package/dist/problem-triage.js +429 -0
  34. package/dist/problem-triage.js.map +1 -0
  35. package/dist/prompts.d.ts.map +1 -1
  36. package/dist/prompts.js +46 -0
  37. package/dist/prompts.js.map +1 -1
  38. package/dist/public-surface.d.ts +30 -0
  39. package/dist/public-surface.d.ts.map +1 -0
  40. package/dist/public-surface.js +310 -0
  41. package/dist/public-surface.js.map +1 -0
  42. package/dist/resources.d.ts.map +1 -1
  43. package/dist/resources.js +148 -0
  44. package/dist/resources.js.map +1 -1
  45. package/dist/runtime-command.d.ts +18 -0
  46. package/dist/runtime-command.d.ts.map +1 -0
  47. package/dist/runtime-command.js +76 -0
  48. package/dist/runtime-command.js.map +1 -0
  49. package/dist/runtime-executor.d.ts +104 -0
  50. package/dist/runtime-executor.d.ts.map +1 -0
  51. package/dist/runtime-executor.js +774 -0
  52. package/dist/runtime-executor.js.map +1 -0
  53. package/dist/runtime-profile.d.ts +98 -0
  54. package/dist/runtime-profile.d.ts.map +1 -0
  55. package/dist/runtime-profile.js +441 -0
  56. package/dist/runtime-profile.js.map +1 -0
  57. package/dist/runtime-tool-specs.d.ts +68 -0
  58. package/dist/runtime-tool-specs.d.ts.map +1 -0
  59. package/dist/runtime-tool-specs.js +424 -0
  60. package/dist/runtime-tool-specs.js.map +1 -0
  61. package/dist/schemas.d.ts +6 -0
  62. package/dist/schemas.d.ts.map +1 -1
  63. package/dist/schemas.js +305 -0
  64. package/dist/schemas.js.map +1 -1
  65. package/dist/shared.d.ts +36 -3
  66. package/dist/shared.d.ts.map +1 -1
  67. package/dist/shared.js +36 -3
  68. package/dist/shared.js.map +1 -1
  69. package/dist/skill-auditor.d.ts +26 -0
  70. package/dist/skill-auditor.d.ts.map +1 -0
  71. package/dist/skill-auditor.js +184 -0
  72. package/dist/skill-auditor.js.map +1 -0
  73. package/dist/skill-catalog.d.ts +60 -0
  74. package/dist/skill-catalog.d.ts.map +1 -0
  75. package/dist/skill-catalog.js +263 -0
  76. package/dist/skill-catalog.js.map +1 -0
  77. package/dist/status-events.d.ts.map +1 -1
  78. package/dist/status-events.js +51 -8
  79. package/dist/status-events.js.map +1 -1
  80. package/dist/tools-agent.d.ts.map +1 -1
  81. package/dist/tools-agent.js +869 -0
  82. package/dist/tools-agent.js.map +1 -1
  83. package/dist/tools-files.d.ts.map +1 -1
  84. package/dist/tools-files.js +212 -1
  85. package/dist/tools-files.js.map +1 -1
  86. package/dist/tools-framework.d.ts.map +1 -1
  87. package/dist/tools-framework.js +86 -0
  88. package/dist/tools-framework.js.map +1 -1
  89. package/dist/tools-skills.d.ts +3 -0
  90. package/dist/tools-skills.d.ts.map +1 -0
  91. package/dist/tools-skills.js +104 -0
  92. package/dist/tools-skills.js.map +1 -0
  93. package/dist/tools.d.ts.map +1 -1
  94. package/dist/tools.js +2 -0
  95. package/dist/tools.js.map +1 -1
  96. package/dist/tracker-adapters.d.ts +74 -0
  97. package/dist/tracker-adapters.d.ts.map +1 -0
  98. package/dist/tracker-adapters.js +777 -0
  99. package/dist/tracker-adapters.js.map +1 -0
  100. package/dist/tracker-sync.d.ts +10 -0
  101. package/dist/tracker-sync.d.ts.map +1 -0
  102. package/dist/tracker-sync.js +84 -0
  103. package/dist/tracker-sync.js.map +1 -0
  104. package/dist/vericify-bridge.d.ts +142 -0
  105. package/dist/vericify-bridge.d.ts.map +1 -0
  106. package/dist/vericify-bridge.js +481 -0
  107. package/dist/vericify-bridge.js.map +1 -0
  108. package/dist/workspace-manager.d.ts +103 -0
  109. package/dist/workspace-manager.d.ts.map +1 -0
  110. package/dist/workspace-manager.js +526 -0
  111. package/dist/workspace-manager.js.map +1 -0
  112. package/package.json +1 -1
@@ -0,0 +1,526 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
4
+ import { basename, dirname, resolve } from "node:path";
5
+ import { resolveWorkspaceRoot, } from "./helpers.js";
6
+ import { readRuntimeProfile } from "./runtime-profile.js";
7
+ import { validateWorkspaceSessionRegistryPayload } from "./schemas.js";
8
+ import { isInside, isReadError, slugify } from "./shared.js";
9
+ import { appendStatusEvent } from "./status-events.js";
10
+ export const WORKSPACE_SESSION_REGISTRY_REL_PATH = "agent-state/runtime-workspaces.json";
11
+ const DEFAULT_MANAGED_WORKSPACE_ROOT = ".ace/workspaces";
12
+ const DEFAULT_HOOK_TIMEOUT_MS = 15_000;
13
+ const MAX_HOOK_TIMEOUT_MS = 60_000;
14
+ const MIN_HOOK_TIMEOUT_MS = 1_000;
15
+ function defaultHookState() {
16
+ return { status: "not_run" };
17
+ }
18
+ function defaultHookSummary() {
19
+ return {
20
+ after_create: defaultHookState(),
21
+ before_run: defaultHookState(),
22
+ after_run: defaultHookState(),
23
+ before_remove: defaultHookState(),
24
+ };
25
+ }
26
+ function defaultRegistry() {
27
+ return {
28
+ version: 1,
29
+ updated_at: "1970-01-01T00:00:00.000Z",
30
+ sessions: [],
31
+ };
32
+ }
33
+ function clampHookTimeout(input) {
34
+ if (!Number.isFinite(input))
35
+ return DEFAULT_HOOK_TIMEOUT_MS;
36
+ return Math.max(MIN_HOOK_TIMEOUT_MS, Math.min(MAX_HOOK_TIMEOUT_MS, Math.trunc(input)));
37
+ }
38
+ function emitWorkspaceEvent(eventType, summary, payload) {
39
+ try {
40
+ appendStatusEvent({
41
+ source_module: "capability-framework",
42
+ event_type: eventType,
43
+ status: eventType === "WORKSPACE_SESSION_CREATED" ||
44
+ eventType === "WORKSPACE_SESSION_REMOVED"
45
+ ? "done"
46
+ : "fail",
47
+ summary,
48
+ payload,
49
+ });
50
+ }
51
+ catch {
52
+ // Workspace lifecycle must not fail because status logging failed.
53
+ }
54
+ }
55
+ export function resolveRuntimeWorkspaceRoot(rootOverride) {
56
+ const workspaceRoot = resolveWorkspaceRoot();
57
+ const configured = rootOverride?.trim() ||
58
+ readRuntimeProfile().workspace.root ||
59
+ DEFAULT_MANAGED_WORKSPACE_ROOT;
60
+ return resolve(configured.startsWith("/") ? configured : resolve(workspaceRoot, configured));
61
+ }
62
+ function resolveTargetPath(rootPath, target) {
63
+ return resolve(target.startsWith("/") ? target : resolve(rootPath, target));
64
+ }
65
+ function canonicalizeCandidatePath(targetPath) {
66
+ const remainder = [];
67
+ let cursor = resolve(targetPath);
68
+ while (!existsSync(cursor)) {
69
+ const parent = dirname(cursor);
70
+ if (parent === cursor)
71
+ break;
72
+ remainder.unshift(basename(cursor));
73
+ cursor = parent;
74
+ }
75
+ const existing = existsSync(cursor) ? realpathSync(cursor) : cursor;
76
+ return resolve(existing, ...remainder);
77
+ }
78
+ function parseWorkspaceRegistry(raw) {
79
+ if (isReadError(raw))
80
+ return defaultRegistry();
81
+ let parsed;
82
+ try {
83
+ parsed = JSON.parse(raw);
84
+ }
85
+ catch (error) {
86
+ throw new Error(`Workspace session registry contains invalid JSON: ${error instanceof Error ? error.message : String(error)}`);
87
+ }
88
+ const validation = validateWorkspaceSessionRegistryPayload(parsed);
89
+ if (!validation.ok) {
90
+ throw new Error(`Workspace session registry failed validation (${validation.schema}): ${validation.errors.join("; ")}`);
91
+ }
92
+ return parsed;
93
+ }
94
+ function resolveWorkspaceArtifactPath(filePath) {
95
+ return resolve(resolveWorkspaceRoot(), filePath);
96
+ }
97
+ function safeReadWorkspaceFile(filePath) {
98
+ try {
99
+ const abs = resolveWorkspaceArtifactPath(filePath);
100
+ if (!existsSync(abs))
101
+ return `[FILE NOT FOUND] ${abs}`;
102
+ return readFileSync(abs, "utf-8");
103
+ }
104
+ catch (error) {
105
+ return `[ACCESS DENIED] ${String(error)}`;
106
+ }
107
+ }
108
+ function safeWriteWorkspaceFile(filePath, content) {
109
+ const abs = resolveWorkspaceArtifactPath(filePath);
110
+ mkdirSync(dirname(abs), { recursive: true });
111
+ const tmpPath = `${abs}.${process.pid}.${Date.now()}.tmp`;
112
+ writeFileSync(tmpPath, content, "utf-8");
113
+ renameSync(tmpPath, abs);
114
+ return abs;
115
+ }
116
+ function writeWorkspaceRegistry(registry) {
117
+ const validation = validateWorkspaceSessionRegistryPayload(registry);
118
+ if (!validation.ok) {
119
+ throw new Error(`Workspace session registry failed validation (${validation.schema}): ${validation.errors.join("; ")}`);
120
+ }
121
+ return safeWriteWorkspaceFile(WORKSPACE_SESSION_REGISTRY_REL_PATH, JSON.stringify(registry, null, 2));
122
+ }
123
+ function findSessionIndex(registry, input) {
124
+ if (input.session_id) {
125
+ return registry.sessions.findIndex((session) => session.session_id === input.session_id);
126
+ }
127
+ if (input.workspace_path) {
128
+ const expected = resolve(input.workspace_path);
129
+ return registry.sessions.findIndex((session) => resolve(session.workspace_path) === expected);
130
+ }
131
+ return -1;
132
+ }
133
+ function deriveWorkspacePath(rootPath, input, sessionId) {
134
+ if (input.workspace_path) {
135
+ return resolveTargetPath(rootPath, input.workspace_path);
136
+ }
137
+ const fallback = `session-${sessionId.slice(0, 8)}`;
138
+ const slug = slugify(input.workspace_name ?? input.objective_id ?? fallback) || fallback;
139
+ return resolve(rootPath, slug);
140
+ }
141
+ function workspaceHookStateFromResult(result) {
142
+ return result.detail ? { status: result.status, detail: result.detail } : { status: result.status };
143
+ }
144
+ function readWorkspaceRegistry() {
145
+ return parseWorkspaceRegistry(safeReadWorkspaceFile(WORKSPACE_SESSION_REGISTRY_REL_PATH));
146
+ }
147
+ export function getWorkspaceSessionRegistryPath() {
148
+ return resolveWorkspaceArtifactPath(WORKSPACE_SESSION_REGISTRY_REL_PATH);
149
+ }
150
+ export function listWorkspaceSessions() {
151
+ return readWorkspaceRegistry();
152
+ }
153
+ export function validateManagedWorkspacePath(root, target) {
154
+ const workspaceRoot = resolveWorkspaceRoot();
155
+ const canonicalWorkspaceRoot = canonicalizeCandidatePath(workspaceRoot);
156
+ const rootPath = resolve(root.startsWith("/") ? root : resolve(workspaceRoot, root));
157
+ const targetPath = resolveTargetPath(rootPath, target);
158
+ if (rootPath === targetPath) {
159
+ return {
160
+ ok: false,
161
+ code: "root_path_not_session",
162
+ reason: "The configured root itself is never a valid managed workspace path.",
163
+ root_path: rootPath,
164
+ target_path: targetPath,
165
+ };
166
+ }
167
+ if (!isInside(rootPath, targetPath)) {
168
+ return {
169
+ ok: false,
170
+ code: "outside_root",
171
+ reason: "Target path escapes the configured managed workspace root.",
172
+ root_path: rootPath,
173
+ target_path: targetPath,
174
+ };
175
+ }
176
+ const canonicalRootPath = canonicalizeCandidatePath(rootPath);
177
+ if (!isInside(canonicalWorkspaceRoot, canonicalRootPath)) {
178
+ return {
179
+ ok: false,
180
+ code: "root_outside_workspace",
181
+ reason: "Managed workspace root must resolve inside the ACE workspace root.",
182
+ root_path: rootPath,
183
+ target_path: targetPath,
184
+ canonical_root_path: canonicalRootPath,
185
+ };
186
+ }
187
+ const canonicalTargetPath = canonicalizeCandidatePath(targetPath);
188
+ if (!isInside(canonicalWorkspaceRoot, canonicalTargetPath)) {
189
+ return {
190
+ ok: false,
191
+ code: "path_outside_workspace",
192
+ reason: "Managed workspace target must resolve inside the ACE workspace root.",
193
+ root_path: rootPath,
194
+ target_path: targetPath,
195
+ canonical_root_path: canonicalRootPath,
196
+ canonical_target_path: canonicalTargetPath,
197
+ };
198
+ }
199
+ if (canonicalRootPath === canonicalTargetPath ||
200
+ !isInside(canonicalRootPath, canonicalTargetPath)) {
201
+ return {
202
+ ok: false,
203
+ code: "symlink_escape",
204
+ reason: "Target path escapes the managed root after canonicalization (likely via symlink traversal).",
205
+ root_path: rootPath,
206
+ target_path: targetPath,
207
+ canonical_root_path: canonicalRootPath,
208
+ canonical_target_path: canonicalTargetPath,
209
+ };
210
+ }
211
+ return {
212
+ ok: true,
213
+ code: "ok",
214
+ root_path: rootPath,
215
+ target_path: targetPath,
216
+ canonical_root_path: canonicalRootPath,
217
+ canonical_target_path: canonicalTargetPath,
218
+ };
219
+ }
220
+ export function runWorkspaceHook(kind, session, timeoutMs) {
221
+ const command = readRuntimeProfile().workspace.hooks[kind];
222
+ if (!command) {
223
+ return {
224
+ ok: true,
225
+ kind,
226
+ status: "not_run",
227
+ command: null,
228
+ detail: "Hook not configured.",
229
+ };
230
+ }
231
+ const timeout = clampHookTimeout(timeoutMs);
232
+ const hookCwd = existsSync(session.workspace_path)
233
+ ? session.workspace_path
234
+ : session.root_path;
235
+ const result = spawnSync("sh", ["-c", command], {
236
+ cwd: hookCwd,
237
+ encoding: "utf-8",
238
+ timeout,
239
+ maxBuffer: 4 * 1024 * 1024,
240
+ });
241
+ const output = ((result.stdout ?? "") + (result.stderr ?? "")).trim().slice(0, 4000);
242
+ const timedOut = result.signal === "SIGTERM" && result.status === null;
243
+ if (result.error || timedOut || result.status !== 0) {
244
+ return {
245
+ ok: false,
246
+ kind,
247
+ status: "failed",
248
+ command,
249
+ exit_code: result.status,
250
+ timed_out: timedOut,
251
+ detail: output ||
252
+ result.error?.message ||
253
+ `Hook exited with status ${result.status ?? "unknown"}`,
254
+ };
255
+ }
256
+ return {
257
+ ok: true,
258
+ kind,
259
+ status: "ok",
260
+ command,
261
+ exit_code: result.status,
262
+ detail: output || "Hook completed successfully.",
263
+ };
264
+ }
265
+ export function createWorkspaceSession(input) {
266
+ const registryPath = getWorkspaceSessionRegistryPath();
267
+ const sessionId = input.session_id?.trim() || randomUUID();
268
+ const now = new Date().toISOString();
269
+ let registry;
270
+ try {
271
+ registry = readWorkspaceRegistry();
272
+ }
273
+ catch (error) {
274
+ const message = error instanceof Error ? error.message : String(error);
275
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", "Workspace session create failed because the registry could not be read.", { error: message });
276
+ return { ok: false, registry_path: registryPath, error: message };
277
+ }
278
+ const rootPath = resolveRuntimeWorkspaceRoot(input.root);
279
+ const workspacePath = deriveWorkspacePath(rootPath, input, sessionId);
280
+ const validation = validateManagedWorkspacePath(rootPath, workspacePath);
281
+ if (!validation.ok) {
282
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Workspace session create rejected for ${workspacePath}`, { validation });
283
+ return {
284
+ ok: false,
285
+ registry_path: registryPath,
286
+ error: validation.reason,
287
+ validation,
288
+ };
289
+ }
290
+ const duplicate = registry.sessions.find((session) => resolve(session.workspace_path) === validation.target_path &&
291
+ session.status !== "archived" &&
292
+ session.status !== "removed");
293
+ if (duplicate) {
294
+ const error = `Workspace path is already managed by session ${duplicate.session_id}.`;
295
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", error, { session_id: duplicate.session_id, workspace_path: duplicate.workspace_path });
296
+ return { ok: false, registry_path: registryPath, error, validation };
297
+ }
298
+ if (existsSync(validation.target_path)) {
299
+ const error = `Workspace path already exists and cannot be claimed: ${validation.target_path}`;
300
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", error, {
301
+ workspace_path: validation.target_path,
302
+ });
303
+ return { ok: false, registry_path: registryPath, error, validation };
304
+ }
305
+ mkdirSync(validation.root_path, { recursive: true });
306
+ mkdirSync(validation.target_path, { recursive: true });
307
+ const session = {
308
+ session_id: sessionId,
309
+ workspace_path: validation.target_path,
310
+ root_path: validation.root_path,
311
+ status: "active",
312
+ source: input.source,
313
+ objective_id: input.objective_id,
314
+ tracker_item_id: input.tracker_item_id,
315
+ created_at: now,
316
+ updated_at: now,
317
+ hooks: defaultHookSummary(),
318
+ };
319
+ const hookResult = runWorkspaceHook("after_create", session, input.hooks_timeout_ms);
320
+ session.hooks.after_create = workspaceHookStateFromResult(hookResult);
321
+ if (!hookResult.ok) {
322
+ session.status = "failed";
323
+ session.last_error = hookResult.detail;
324
+ }
325
+ registry.sessions.push(session);
326
+ registry.updated_at = now;
327
+ writeWorkspaceRegistry(registry);
328
+ if (!hookResult.ok) {
329
+ emitWorkspaceEvent("WORKSPACE_HOOK_FAILED", `Workspace hook after_create failed for ${session.session_id}`, {
330
+ session_id: session.session_id,
331
+ workspace_path: session.workspace_path,
332
+ detail: hookResult.detail,
333
+ });
334
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Workspace session ${session.session_id} created with failed after_create hook.`, {
335
+ session_id: session.session_id,
336
+ workspace_path: session.workspace_path,
337
+ detail: hookResult.detail,
338
+ });
339
+ return {
340
+ ok: false,
341
+ registry_path: registryPath,
342
+ session,
343
+ error: hookResult.detail ?? "after_create hook failed",
344
+ validation,
345
+ };
346
+ }
347
+ emitWorkspaceEvent("WORKSPACE_SESSION_CREATED", `Workspace session ${session.session_id} created.`, {
348
+ session_id: session.session_id,
349
+ workspace_path: session.workspace_path,
350
+ root_path: session.root_path,
351
+ source: session.source,
352
+ });
353
+ return { ok: true, registry_path: registryPath, session, validation };
354
+ }
355
+ export function removeWorkspaceSession(input) {
356
+ const registryPath = getWorkspaceSessionRegistryPath();
357
+ const now = new Date().toISOString();
358
+ let registry;
359
+ try {
360
+ registry = readWorkspaceRegistry();
361
+ }
362
+ catch (error) {
363
+ const message = error instanceof Error ? error.message : String(error);
364
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", "Workspace session removal failed because the registry could not be read.", { error: message });
365
+ return { ok: false, registry_path: registryPath, error: message };
366
+ }
367
+ const sessionIndex = findSessionIndex(registry, input);
368
+ if (sessionIndex === -1) {
369
+ const error = "Removal only applies to managed workspace sessions already present in the registry.";
370
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", error, {
371
+ session_id: input.session_id,
372
+ workspace_path: input.workspace_path,
373
+ });
374
+ return { ok: false, registry_path: registryPath, error };
375
+ }
376
+ const session = registry.sessions[sessionIndex];
377
+ const expectedRootPath = resolveRuntimeWorkspaceRoot(input.root ?? session.root_path);
378
+ const validation = validateManagedWorkspacePath(expectedRootPath, session.workspace_path);
379
+ if (!validation.ok) {
380
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Workspace session removal rejected for ${session.session_id}`, { session_id: session.session_id, validation });
381
+ return {
382
+ ok: false,
383
+ registry_path: registryPath,
384
+ session,
385
+ error: validation.reason,
386
+ validation,
387
+ };
388
+ }
389
+ const hookResult = runWorkspaceHook("before_remove", session, input.hooks_timeout_ms);
390
+ session.hooks.before_remove = workspaceHookStateFromResult(hookResult);
391
+ session.updated_at = now;
392
+ if (!hookResult.ok) {
393
+ session.status = "failed";
394
+ session.last_error = hookResult.detail;
395
+ registry.updated_at = now;
396
+ writeWorkspaceRegistry(registry);
397
+ emitWorkspaceEvent("WORKSPACE_HOOK_FAILED", `Workspace hook before_remove failed for ${session.session_id}`, {
398
+ session_id: session.session_id,
399
+ workspace_path: session.workspace_path,
400
+ detail: hookResult.detail,
401
+ });
402
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Workspace session ${session.session_id} removal aborted by hook failure.`, {
403
+ session_id: session.session_id,
404
+ workspace_path: session.workspace_path,
405
+ detail: hookResult.detail,
406
+ });
407
+ return {
408
+ ok: false,
409
+ registry_path: registryPath,
410
+ session,
411
+ error: hookResult.detail ?? "before_remove hook failed",
412
+ validation,
413
+ };
414
+ }
415
+ const retention = readRuntimeProfile().workspace.retention;
416
+ if (retention === "archive") {
417
+ const archivePath = resolve(validation.root_path, ".archive", session.session_id);
418
+ const archiveValidation = validateManagedWorkspacePath(validation.root_path, archivePath);
419
+ if (!archiveValidation.ok) {
420
+ session.status = "failed";
421
+ session.last_error = archiveValidation.reason;
422
+ registry.updated_at = now;
423
+ writeWorkspaceRegistry(registry);
424
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Archive target rejected for workspace session ${session.session_id}`, { session_id: session.session_id, validation: archiveValidation });
425
+ return {
426
+ ok: false,
427
+ registry_path: registryPath,
428
+ session,
429
+ error: archiveValidation.reason,
430
+ validation: archiveValidation,
431
+ };
432
+ }
433
+ if (existsSync(validation.target_path)) {
434
+ mkdirSync(dirname(archiveValidation.target_path), { recursive: true });
435
+ renameSync(validation.target_path, archiveValidation.target_path);
436
+ }
437
+ session.workspace_path = archiveValidation.target_path;
438
+ session.status = "archived";
439
+ }
440
+ else {
441
+ if (existsSync(validation.target_path)) {
442
+ rmSync(validation.target_path, { recursive: true, force: false });
443
+ }
444
+ session.status = "removed";
445
+ }
446
+ session.updated_at = now;
447
+ delete session.last_error;
448
+ registry.updated_at = now;
449
+ writeWorkspaceRegistry(registry);
450
+ emitWorkspaceEvent("WORKSPACE_SESSION_REMOVED", `Workspace session ${session.session_id} ${session.status}.`, {
451
+ session_id: session.session_id,
452
+ workspace_path: session.workspace_path,
453
+ status: session.status,
454
+ });
455
+ return { ok: true, registry_path: registryPath, session, validation };
456
+ }
457
+ export function runWorkspaceSessionHook(input) {
458
+ const registryPath = getWorkspaceSessionRegistryPath();
459
+ const now = new Date().toISOString();
460
+ let registry;
461
+ try {
462
+ registry = readWorkspaceRegistry();
463
+ }
464
+ catch (error) {
465
+ const message = error instanceof Error ? error.message : String(error);
466
+ return {
467
+ ok: false,
468
+ registry_path: registryPath,
469
+ hook: {
470
+ ok: false,
471
+ kind: input.kind,
472
+ status: "failed",
473
+ detail: message,
474
+ },
475
+ error: message,
476
+ };
477
+ }
478
+ const sessionIndex = findSessionIndex(registry, input);
479
+ if (sessionIndex === -1) {
480
+ const error = "Hook execution only applies to managed workspace sessions already present in the registry.";
481
+ return {
482
+ ok: false,
483
+ registry_path: registryPath,
484
+ hook: {
485
+ ok: false,
486
+ kind: input.kind,
487
+ status: "failed",
488
+ detail: error,
489
+ },
490
+ error,
491
+ };
492
+ }
493
+ const session = registry.sessions[sessionIndex];
494
+ const hookResult = runWorkspaceHook(input.kind, session, input.hooks_timeout_ms);
495
+ session.hooks[input.kind] = workspaceHookStateFromResult(hookResult);
496
+ session.updated_at = now;
497
+ if (!hookResult.ok) {
498
+ session.status = "failed";
499
+ session.last_error = hookResult.detail;
500
+ }
501
+ else if (session.status === "failed" && session.last_error === hookResult.detail) {
502
+ delete session.last_error;
503
+ }
504
+ registry.updated_at = now;
505
+ writeWorkspaceRegistry(registry);
506
+ if (!hookResult.ok) {
507
+ emitWorkspaceEvent("WORKSPACE_HOOK_FAILED", `Workspace hook ${input.kind} failed for ${session.session_id}`, {
508
+ session_id: session.session_id,
509
+ workspace_path: session.workspace_path,
510
+ detail: hookResult.detail,
511
+ });
512
+ emitWorkspaceEvent("WORKSPACE_SESSION_FAILED", `Workspace session ${session.session_id} recorded failed hook ${input.kind}.`, {
513
+ session_id: session.session_id,
514
+ workspace_path: session.workspace_path,
515
+ detail: hookResult.detail,
516
+ });
517
+ }
518
+ return {
519
+ ok: hookResult.ok,
520
+ registry_path: registryPath,
521
+ session,
522
+ hook: hookResult,
523
+ error: hookResult.ok ? undefined : hookResult.detail,
524
+ };
525
+ }
526
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../src/workspace-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ace-swarm",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "description": "ACE Framework MCP server and CLI bootstrap for prompts, skills, handoffs, and stateful swarm orchestration.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",