ace-swarm 2.0.6 → 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 (110) 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/copilot-hook-dispatch.mjs +267 -0
  26. package/dist/helpers.d.ts.map +1 -1
  27. package/dist/helpers.js +284 -1
  28. package/dist/helpers.js.map +1 -1
  29. package/dist/problem-triage.d.ts +23 -0
  30. package/dist/problem-triage.d.ts.map +1 -0
  31. package/dist/problem-triage.js +429 -0
  32. package/dist/problem-triage.js.map +1 -0
  33. package/dist/prompts.d.ts.map +1 -1
  34. package/dist/prompts.js +46 -0
  35. package/dist/prompts.js.map +1 -1
  36. package/dist/public-surface.d.ts +30 -0
  37. package/dist/public-surface.d.ts.map +1 -0
  38. package/dist/public-surface.js +310 -0
  39. package/dist/public-surface.js.map +1 -0
  40. package/dist/resources.d.ts.map +1 -1
  41. package/dist/resources.js +148 -0
  42. package/dist/resources.js.map +1 -1
  43. package/dist/runtime-command.d.ts +18 -0
  44. package/dist/runtime-command.d.ts.map +1 -0
  45. package/dist/runtime-command.js +76 -0
  46. package/dist/runtime-command.js.map +1 -0
  47. package/dist/runtime-executor.d.ts +104 -0
  48. package/dist/runtime-executor.d.ts.map +1 -0
  49. package/dist/runtime-executor.js +774 -0
  50. package/dist/runtime-executor.js.map +1 -0
  51. package/dist/runtime-profile.d.ts +98 -0
  52. package/dist/runtime-profile.d.ts.map +1 -0
  53. package/dist/runtime-profile.js +441 -0
  54. package/dist/runtime-profile.js.map +1 -0
  55. package/dist/runtime-tool-specs.d.ts +68 -0
  56. package/dist/runtime-tool-specs.d.ts.map +1 -0
  57. package/dist/runtime-tool-specs.js +424 -0
  58. package/dist/runtime-tool-specs.js.map +1 -0
  59. package/dist/schemas.d.ts +6 -0
  60. package/dist/schemas.d.ts.map +1 -1
  61. package/dist/schemas.js +305 -0
  62. package/dist/schemas.js.map +1 -1
  63. package/dist/shared.d.ts +36 -3
  64. package/dist/shared.d.ts.map +1 -1
  65. package/dist/shared.js +36 -3
  66. package/dist/shared.js.map +1 -1
  67. package/dist/skill-auditor.d.ts +26 -0
  68. package/dist/skill-auditor.d.ts.map +1 -0
  69. package/dist/skill-auditor.js +184 -0
  70. package/dist/skill-auditor.js.map +1 -0
  71. package/dist/skill-catalog.d.ts +60 -0
  72. package/dist/skill-catalog.d.ts.map +1 -0
  73. package/dist/skill-catalog.js +263 -0
  74. package/dist/skill-catalog.js.map +1 -0
  75. package/dist/status-events.d.ts.map +1 -1
  76. package/dist/status-events.js +51 -8
  77. package/dist/status-events.js.map +1 -1
  78. package/dist/tools-agent.d.ts.map +1 -1
  79. package/dist/tools-agent.js +869 -0
  80. package/dist/tools-agent.js.map +1 -1
  81. package/dist/tools-files.d.ts.map +1 -1
  82. package/dist/tools-files.js +212 -1
  83. package/dist/tools-files.js.map +1 -1
  84. package/dist/tools-framework.d.ts.map +1 -1
  85. package/dist/tools-framework.js +86 -0
  86. package/dist/tools-framework.js.map +1 -1
  87. package/dist/tools-skills.d.ts +3 -0
  88. package/dist/tools-skills.d.ts.map +1 -0
  89. package/dist/tools-skills.js +104 -0
  90. package/dist/tools-skills.js.map +1 -0
  91. package/dist/tools.d.ts.map +1 -1
  92. package/dist/tools.js +2 -0
  93. package/dist/tools.js.map +1 -1
  94. package/dist/tracker-adapters.d.ts +74 -0
  95. package/dist/tracker-adapters.d.ts.map +1 -0
  96. package/dist/tracker-adapters.js +777 -0
  97. package/dist/tracker-adapters.js.map +1 -0
  98. package/dist/tracker-sync.d.ts +10 -0
  99. package/dist/tracker-sync.d.ts.map +1 -0
  100. package/dist/tracker-sync.js +84 -0
  101. package/dist/tracker-sync.js.map +1 -0
  102. package/dist/vericify-bridge.d.ts +142 -0
  103. package/dist/vericify-bridge.d.ts.map +1 -0
  104. package/dist/vericify-bridge.js +481 -0
  105. package/dist/vericify-bridge.js.map +1 -0
  106. package/dist/workspace-manager.d.ts +103 -0
  107. package/dist/workspace-manager.d.ts.map +1 -0
  108. package/dist/workspace-manager.js +526 -0
  109. package/dist/workspace-manager.js.map +1 -0
  110. package/package.json +1 -1
@@ -0,0 +1,267 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync } from "node:fs";
4
+ import { resolve } from "node:path";
5
+
6
+ const DESTRUCTIVE_COMMAND_PATTERNS = [
7
+ /\brm\s+-rf\b/i,
8
+ /\bgit\s+reset\s+--hard\b/i,
9
+ /\bgit\s+checkout\s+--\b/i,
10
+ /\bgit\s+clean\s+-fdx\b/i,
11
+ /\bdel\s+\/s\s+\/q\b/i,
12
+ /\bdrop\s+table\b/i,
13
+ /\btruncate\s+table\b/i,
14
+ /\bmkfs\b/i,
15
+ ];
16
+
17
+ const PROTECTED_PATH_FRAGMENTS = [
18
+ ".github/hooks/",
19
+ ".github\\hooks\\",
20
+ "scripts/ace/copilot-hook-dispatch.mjs",
21
+ "scripts\\ace\\copilot-hook-dispatch.mjs",
22
+ ".vscode/settings.json",
23
+ ".vscode\\settings.json",
24
+ ];
25
+
26
+ function readStdin() {
27
+ return new Promise((resolveStdin, reject) => {
28
+ let input = "";
29
+ process.stdin.setEncoding("utf8");
30
+ process.stdin.on("data", (chunk) => {
31
+ input += chunk;
32
+ });
33
+ process.stdin.on("end", () => resolveStdin(input));
34
+ process.stdin.on("error", reject);
35
+ });
36
+ }
37
+
38
+ function writeJson(payload) {
39
+ process.stdout.write(JSON.stringify(payload));
40
+ }
41
+
42
+ function toLowerText(value) {
43
+ return typeof value === "string" ? value.trim().toLowerCase() : "";
44
+ }
45
+
46
+ function safeJson(value) {
47
+ try {
48
+ return JSON.stringify(value ?? {});
49
+ } catch {
50
+ return "";
51
+ }
52
+ }
53
+
54
+ function resolveWorkspaceRoot(payload) {
55
+ const cwd = typeof payload.cwd === "string" && payload.cwd.trim() ? payload.cwd.trim() : process.cwd();
56
+ return resolve(cwd);
57
+ }
58
+
59
+ function aceContext(workspaceRoot) {
60
+ const stateDirs = [
61
+ "agent-state",
62
+ "global-state",
63
+ "venture-state",
64
+ "brand-state",
65
+ "engineering-state",
66
+ ].filter((relPath) => existsSync(resolve(workspaceRoot, relPath)));
67
+ const coreFiles = [
68
+ "agent-state/TASK.md",
69
+ "agent-state/STATUS.md",
70
+ "agent-state/SCOPE.md",
71
+ "agent-state/EVIDENCE_LOG.md",
72
+ ].filter((relPath) => existsSync(resolve(workspaceRoot, relPath)));
73
+
74
+ const hasSkills = existsSync(resolve(workspaceRoot, ".agents", "skills"));
75
+ const hasAgentState = existsSync(resolve(workspaceRoot, "agent-state"));
76
+
77
+ return {
78
+ coreFiles,
79
+ stateDirs,
80
+ hasSkills,
81
+ hasAgentState,
82
+ };
83
+ }
84
+
85
+ function buildAceMessage(workspaceRoot) {
86
+ const context = aceContext(workspaceRoot);
87
+ if (!context.hasAgentState && !context.hasSkills) return "";
88
+
89
+ const parts = [];
90
+ if (context.coreFiles.length > 0) {
91
+ parts.push(`ACE workspace detected. Ground truth lives in ${context.coreFiles.join(", ")}.`);
92
+ } else if (context.hasAgentState) {
93
+ parts.push("ACE workspace detected. Ground truth lives in agent-state/*.");
94
+ }
95
+ if (context.stateDirs.length > 0) {
96
+ parts.push(
97
+ `Persist durable artifacts under ${context.stateDirs.map((dir) => `${dir}/`).join(", ")} rather than editor session caches such as workspaceStorage/.../chat-session-resources/.`
98
+ );
99
+ }
100
+ parts.push(
101
+ "Before major edits, read task, scope, and status artifacts rather than relying on chat history."
102
+ );
103
+ if (context.hasSkills) {
104
+ parts.push("Workspace skills are available under .agents/skills/.");
105
+ }
106
+ parts.push(
107
+ "Copilot hook policy protects .github/hooks, .vscode/settings.json, and scripts/ace/copilot-hook-dispatch.mjs from silent self-modification."
108
+ );
109
+ return parts.join(" ");
110
+ }
111
+
112
+ function isCommandTool(toolName) {
113
+ return ["terminal", "shell", "bash", "command", "execute"].some((token) =>
114
+ toolName.includes(token)
115
+ );
116
+ }
117
+
118
+ function isMutationTool(toolName) {
119
+ return [
120
+ "edit",
121
+ "write",
122
+ "create",
123
+ "replace",
124
+ "delete",
125
+ "rename",
126
+ "move",
127
+ "file",
128
+ ].some((token) => toolName.includes(token));
129
+ }
130
+
131
+ function containsProtectedPath(text) {
132
+ const normalized = toLowerText(text);
133
+ return PROTECTED_PATH_FRAGMENTS.some((fragment) => normalized.includes(fragment.toLowerCase()));
134
+ }
135
+
136
+ function containsDestructiveCommand(text) {
137
+ return DESTRUCTIVE_COMMAND_PATTERNS.some((pattern) => pattern.test(text));
138
+ }
139
+
140
+ function resolvePreToolUse(payload, workspaceRoot) {
141
+ const toolName = toLowerText(payload.tool_name);
142
+ const serializedInput = safeJson(payload.tool_input);
143
+
144
+ if (isCommandTool(toolName) && containsDestructiveCommand(serializedInput)) {
145
+ return {
146
+ continue: true,
147
+ hookSpecificOutput: {
148
+ hookEventName: "PreToolUse",
149
+ permissionDecision: "deny",
150
+ permissionDecisionReason:
151
+ "Blocked by ACE Copilot hook policy: destructive shell command detected.",
152
+ additionalContext:
153
+ "Use a non-destructive alternative or ask for explicit confirmation before destructive terminal actions.",
154
+ },
155
+ };
156
+ }
157
+
158
+ if (isMutationTool(toolName) && containsProtectedPath(serializedInput)) {
159
+ return {
160
+ continue: true,
161
+ hookSpecificOutput: {
162
+ hookEventName: "PreToolUse",
163
+ permissionDecision: "ask",
164
+ permissionDecisionReason:
165
+ "Editing Copilot hook/config files requires confirmation.",
166
+ additionalContext:
167
+ "This workspace treats hook files and VS Code settings as protected control-plane artifacts.",
168
+ },
169
+ };
170
+ }
171
+
172
+ const message = buildAceMessage(workspaceRoot);
173
+ if (isMutationTool(toolName) && message) {
174
+ return {
175
+ continue: true,
176
+ hookSpecificOutput: {
177
+ hookEventName: "PreToolUse",
178
+ permissionDecision: "allow",
179
+ additionalContext: `${message} After mutating files, reconcile evidence and verification where relevant.`,
180
+ },
181
+ };
182
+ }
183
+
184
+ return { continue: true };
185
+ }
186
+
187
+ function resolvePostToolUse(payload, workspaceRoot) {
188
+ const toolName = toLowerText(payload.tool_name);
189
+ if (!isMutationTool(toolName)) {
190
+ return { continue: true };
191
+ }
192
+
193
+ const message = buildAceMessage(workspaceRoot);
194
+ return {
195
+ continue: true,
196
+ hookSpecificOutput: {
197
+ hookEventName: "PostToolUse",
198
+ additionalContext: message
199
+ ? `${message} If project files changed, run the smallest relevant verification before concluding.`
200
+ : "If project files changed, run the smallest relevant verification before concluding.",
201
+ },
202
+ };
203
+ }
204
+
205
+ function resolveSessionStart(payload, workspaceRoot, eventName) {
206
+ const message = buildAceMessage(workspaceRoot);
207
+ if (!message) return { continue: true };
208
+
209
+ return {
210
+ continue: true,
211
+ hookSpecificOutput: {
212
+ hookEventName: eventName,
213
+ additionalContext: message,
214
+ },
215
+ };
216
+ }
217
+
218
+ function resolveHook(payload) {
219
+ const eventName = toLowerText(payload.hookEventName);
220
+ const workspaceRoot = resolveWorkspaceRoot(payload);
221
+
222
+ if (eventName === "sessionstart") {
223
+ return resolveSessionStart(payload, workspaceRoot, "SessionStart");
224
+ }
225
+
226
+ if (eventName === "subagentstart") {
227
+ return resolveSessionStart(payload, workspaceRoot, "SubagentStart");
228
+ }
229
+
230
+ if (eventName === "pretooluse") {
231
+ return resolvePreToolUse(payload, workspaceRoot);
232
+ }
233
+
234
+ if (eventName === "posttooluse") {
235
+ return resolvePostToolUse(payload, workspaceRoot);
236
+ }
237
+
238
+ if (eventName === "precompact") {
239
+ return { continue: true };
240
+ }
241
+
242
+ if (eventName === "userpromptsubmit") {
243
+ return { continue: true };
244
+ }
245
+
246
+ if (eventName === "subagentstop" || eventName === "stop") {
247
+ return { continue: true };
248
+ }
249
+
250
+ return { continue: true };
251
+ }
252
+
253
+ async function main() {
254
+ try {
255
+ const raw = await readStdin();
256
+ const payload = raw.trim() ? JSON.parse(raw) : {};
257
+ writeJson(resolveHook(payload));
258
+ } catch (error) {
259
+ const message = error instanceof Error ? error.message : String(error);
260
+ writeJson({
261
+ continue: true,
262
+ systemMessage: `ACE Copilot hook warning: ${message}`,
263
+ });
264
+ }
265
+ }
266
+
267
+ main();
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/dist/helpers.js CHANGED
@@ -45,6 +45,7 @@ const DEFAULTS_TASKS_ROOT = resolve(DEFAULTS_ROOT, "tasks");
45
45
  const DEFAULTS_SKILLS_ROOT = resolve(DEFAULTS_ROOT, ".agents", "skills");
46
46
  const DEFAULTS_AGENT_STATE_ROOT = resolve(DEFAULTS_ROOT, "agent-state");
47
47
  const DEFAULTS_SCRIPTS_ROOT = resolve(DEFAULTS_ROOT, "scripts");
48
+ const DEFAULTS_GITHUB_ROOT = resolve(DEFAULTS_ROOT, ".github");
48
49
  export const ALL_MCP_CLIENTS = [
49
50
  "codex",
50
51
  "vscode",
@@ -499,6 +500,281 @@ function normalizeOllamaBaseUrl(url) {
499
500
  return "http://127.0.0.1:11434";
500
501
  return trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
501
502
  }
503
+ function buildWorkspaceStateSeedFiles(projectName, generatedAt) {
504
+ const swarmHandoffTemplate = readText(DEFAULT_TASK_FILES.handoff_template);
505
+ return [
506
+ {
507
+ path: wsPath("global-state", "GLOBAL_RISKS.md"),
508
+ content: [
509
+ "# GLOBAL_RISKS",
510
+ "",
511
+ `Generated: ${generatedAt}`,
512
+ "",
513
+ "## Systemic Risks",
514
+ "- None logged yet. Record cross-swarm blockers, runway constraints, and release risks here.",
515
+ "",
516
+ "## Update Rule",
517
+ "- Keep local implementation risks in the owning swarm folder or `agent-state/RISKS.md`.",
518
+ ].join("\n"),
519
+ },
520
+ {
521
+ path: wsPath("global-state", "DECISION_LOG.md"),
522
+ content: [
523
+ "# DECISION_LOG",
524
+ "",
525
+ `Generated: ${generatedAt}`,
526
+ "",
527
+ "Append-only record for orchestrator-level tradeoffs that affect multiple swarms.",
528
+ "",
529
+ "## Entry Template",
530
+ `- ${generatedAt} — Decision: <what changed>`,
531
+ " - Reason: <why>",
532
+ " - Impact: <which swarm/state folders are affected>",
533
+ ].join("\n"),
534
+ },
535
+ {
536
+ path: wsPath("global-state", "ENGINEERING_SNAPSHOT.md"),
537
+ content: [
538
+ "# ENGINEERING_SNAPSHOT.md",
539
+ "",
540
+ `Generated: ${generatedAt}`,
541
+ "",
542
+ "## Profile",
543
+ "- Status: pending initial orchestrator discovery scan",
544
+ "- Project: " + projectName,
545
+ "- Durable location: `global-state/ENGINEERING_SNAPSHOT.md`",
546
+ "",
547
+ "## Quality Signals",
548
+ "- Tests: pending scan",
549
+ "- Public surface: pending scan",
550
+ "- Delivery risk: pending scan",
551
+ "",
552
+ "## Routing Recommendation",
553
+ "- Run the orchestrator discovery pass before first coder handoff.",
554
+ ].join("\n"),
555
+ },
556
+ {
557
+ path: wsPath("global-state", "SWARM_HANDOFF.json"),
558
+ content: swarmHandoffTemplate,
559
+ },
560
+ {
561
+ path: wsPath("venture-state", "STATUS.md"),
562
+ content: [
563
+ "# VENTURE STATUS",
564
+ "",
565
+ "- Mode: bootstrap",
566
+ "- Focus: clarify thesis and MVP",
567
+ "- Current phase: discovery",
568
+ "- Next handoff: ACE-VOS -> ACE-Orchestrator",
569
+ `- Last update: ${generatedAt}`,
570
+ ].join("\n"),
571
+ },
572
+ {
573
+ path: wsPath("venture-state", "TEAL_CONFIG.md"),
574
+ content: [
575
+ "# TEAL_CONFIG",
576
+ "",
577
+ "## Venture Pipeline",
578
+ "- discovery -> thesis -> blueprint -> MVP spec -> handoff",
579
+ "",
580
+ "## Durable Outputs",
581
+ "- `venture-state/THESIS.md`",
582
+ "- `venture-state/BLUEPRINT.md`",
583
+ "- `venture-state/GROWTH_LOOPS.md`",
584
+ "- `venture-state/RISKS.md`",
585
+ "- `venture-state/PROTOTYPE/MVP_SPEC.md`",
586
+ ].join("\n"),
587
+ },
588
+ {
589
+ path: wsPath("venture-state", "THESIS.md"),
590
+ content: [
591
+ "# THESIS",
592
+ "",
593
+ "## Problem",
594
+ "- TBD",
595
+ "",
596
+ "## Users",
597
+ "- TBD",
598
+ "",
599
+ "## Why Now",
600
+ "- TBD",
601
+ "",
602
+ "## Wedge",
603
+ "- TBD",
604
+ ].join("\n"),
605
+ },
606
+ {
607
+ path: wsPath("venture-state", "INTERROGATION.log"),
608
+ content: [
609
+ "# INTERROGATION LOG",
610
+ "",
611
+ `- ${generatedAt} bootstrap: venture interrogation started.`,
612
+ ].join("\n"),
613
+ },
614
+ {
615
+ path: wsPath("venture-state", "BLUEPRINT.md"),
616
+ content: [
617
+ "# BLUEPRINT",
618
+ "",
619
+ "## System Outline",
620
+ "- TBD",
621
+ "",
622
+ "## Critical Flows",
623
+ "- TBD",
624
+ ].join("\n"),
625
+ },
626
+ {
627
+ path: wsPath("venture-state", "GROWTH_LOOPS.md"),
628
+ content: [
629
+ "# GROWTH_LOOPS",
630
+ "",
631
+ "## Acquisition",
632
+ "- TBD",
633
+ "",
634
+ "## Retention",
635
+ "- TBD",
636
+ "",
637
+ "## Monetization",
638
+ "- TBD",
639
+ ].join("\n"),
640
+ },
641
+ {
642
+ path: wsPath("venture-state", "RISKS.md"),
643
+ content: [
644
+ "# VENTURE RISKS",
645
+ "",
646
+ "## Active Risks",
647
+ "- None logged yet.",
648
+ ].join("\n"),
649
+ },
650
+ {
651
+ path: wsPath("venture-state", "PROTOTYPE", "MVP_SPEC.md"),
652
+ content: [
653
+ "# MVP_SPEC",
654
+ "",
655
+ "## Objective",
656
+ "- TBD",
657
+ "",
658
+ "## Must-Have Behaviors",
659
+ "- TBD",
660
+ "",
661
+ "## Proof Requirement",
662
+ "- Define the smallest working slice that demonstrates value.",
663
+ ].join("\n"),
664
+ },
665
+ {
666
+ path: wsPath("venture-state", "PROTOTYPE", "src", "README.md"),
667
+ content: [
668
+ "# Venture Prototype Source",
669
+ "",
670
+ "Use this directory when the venture swarm needs a lightweight proof-of-concept separate from `engineering-state/src/`.",
671
+ ].join("\n"),
672
+ },
673
+ {
674
+ path: wsPath("brand-state", "BRAND_VOICE.md"),
675
+ content: [
676
+ "# BRAND_VOICE",
677
+ "",
678
+ "## Positioning",
679
+ "- TBD",
680
+ "",
681
+ "## Tone",
682
+ "- Clear",
683
+ "- Specific",
684
+ "- Trust-building",
685
+ "",
686
+ "## Messaging Guardrails",
687
+ "- Avoid generic claims.",
688
+ "- Tie every headline to a concrete user outcome.",
689
+ ].join("\n"),
690
+ },
691
+ {
692
+ path: wsPath("brand-state", "AUDIT_LOG.md"),
693
+ content: [
694
+ "# AUDIT_LOG",
695
+ "",
696
+ `- ${generatedAt} bootstrap: brand audit log initialized.`,
697
+ ].join("\n"),
698
+ },
699
+ {
700
+ path: wsPath("brand-state", "COPY_DECK.md"),
701
+ content: [
702
+ "# COPY_DECK",
703
+ "",
704
+ "## Primary Headline",
705
+ "- TBD",
706
+ "",
707
+ "## Supporting Copy",
708
+ "- TBD",
709
+ "",
710
+ "## CTA",
711
+ "- TBD",
712
+ ].join("\n"),
713
+ },
714
+ {
715
+ path: wsPath("brand-state", "ASSETS", "strings.json"),
716
+ content: JSON.stringify({
717
+ app_name: projectName,
718
+ headline: "",
719
+ subheadline: "",
720
+ primary_cta: "",
721
+ }, null, 2),
722
+ },
723
+ {
724
+ path: wsPath("engineering-state", "BUILD_STATUS.md"),
725
+ content: [
726
+ "# BUILD_STATUS",
727
+ "",
728
+ "- Status: not started",
729
+ "- Active owner: ACE-Coders",
730
+ "- Blockers: none recorded",
731
+ `- Last update: ${generatedAt}`,
732
+ ].join("\n"),
733
+ },
734
+ {
735
+ path: wsPath("engineering-state", "SPEC_CONTRACT.json"),
736
+ content: JSON.stringify({
737
+ version: "0.1.0",
738
+ project: projectName,
739
+ status: "draft",
740
+ requirements: [],
741
+ acceptance_tests: [],
742
+ deliverables: [],
743
+ }, null, 2),
744
+ },
745
+ {
746
+ path: wsPath("engineering-state", "ARCHITECTURE.md"),
747
+ content: [
748
+ "# ARCHITECTURE",
749
+ "",
750
+ "## Stack",
751
+ "- TBD",
752
+ "",
753
+ "## Interfaces",
754
+ "- TBD",
755
+ "",
756
+ "## Constraints",
757
+ "- TBD",
758
+ ].join("\n"),
759
+ },
760
+ {
761
+ path: wsPath("engineering-state", "TEST_LOG.md"),
762
+ content: [
763
+ "# TEST_LOG",
764
+ "",
765
+ `- ${generatedAt} bootstrap: no tests executed yet.`,
766
+ ].join("\n"),
767
+ },
768
+ {
769
+ path: wsPath("engineering-state", "src", "README.md"),
770
+ content: [
771
+ "# Engineering Source",
772
+ "",
773
+ "Place the main implementation here. Keep test evidence in `engineering-state/TEST_LOG.md`.",
774
+ ].join("\n"),
775
+ },
776
+ ];
777
+ }
502
778
  export function getMcpClientBundlePath(client) {
503
779
  if (client === "codex")
504
780
  return wsPath(".mcp-config", "codex.config.toml");
@@ -575,6 +851,7 @@ export function bootstrapAceWorkspace(options = {}) {
575
851
  throw new Error(`Unsupported llmProvider: ${llmProvider}`);
576
852
  }
577
853
  const result = { created: [], updated: [], skipped: [] };
854
+ const generatedAt = new Date().toISOString();
578
855
  const dirSeeds = [
579
856
  wsPath("global-state"),
580
857
  wsPath("venture-state"),
@@ -587,6 +864,8 @@ export function bootstrapAceWorkspace(options = {}) {
587
864
  wsPath("agent-state", "MODULES", "roles"),
588
865
  wsPath("agent-state", "MODULES", "gates"),
589
866
  wsPath("tasks"),
867
+ wsPath(".github"),
868
+ wsPath(".github", "hooks"),
590
869
  wsPath(".agents"),
591
870
  wsPath(".vscode"),
592
871
  wsPath(".mcp-config"),
@@ -601,6 +880,7 @@ export function bootstrapAceWorkspace(options = {}) {
601
880
  // Copy packaged defaults for tasks, instructions, skills, and agent-state.
602
881
  copyTree(DEFAULTS_TASKS_ROOT, wsPath("tasks"), result, force);
603
882
  copyTree(DEFAULTS_AGENT_STATE_ROOT, wsPath("agent-state"), result, force);
883
+ copyTree(DEFAULTS_GITHUB_ROOT, wsPath(".github"), result, force);
604
884
  copyTree(resolve(DEFAULTS_ROOT, ".agents"), wsPath(".agents"), result, force);
605
885
  copyTree(DEFAULTS_SCRIPTS_ROOT, wsPath("scripts", "ace"), result, force);
606
886
  // Canonical root-level instruction aliases.
@@ -633,7 +913,7 @@ export function bootstrapAceWorkspace(options = {}) {
633
913
  writeIfMissingOrForced(masterPlanPath, [
634
914
  `# ${projectName} — Master Plan`,
635
915
  "",
636
- `Created: ${new Date().toISOString()}`,
916
+ `Created: ${generatedAt}`,
637
917
  "",
638
918
  "## Status",
639
919
  "",
@@ -655,6 +935,9 @@ export function bootstrapAceWorkspace(options = {}) {
655
935
  "| ACE-UI | idle | — |",
656
936
  "| ACE-Coders | idle | — |",
657
937
  ].join("\n"), result, force);
938
+ for (const file of buildWorkspaceStateSeedFiles(projectName, generatedAt)) {
939
+ writeIfMissingOrForced(file.path, file.content, result, force);
940
+ }
658
941
  // SWARM_REGISTRY is a derived artifact from code topology — always refresh.
659
942
  const registryPath = wsPath("global-state", "SWARM_REGISTRY.json");
660
943
  const swarmSubagents = [...COMPOSABLE_AGENTS];