@ttfw/envoi 1.0.0

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 (283) hide show
  1. package/README.md +238 -0
  2. package/dist/commands/app.d.ts +2 -0
  3. package/dist/commands/app.d.ts.map +1 -0
  4. package/dist/commands/app.js +31 -0
  5. package/dist/commands/app.js.map +1 -0
  6. package/dist/commands/autonomy.d.ts +6 -0
  7. package/dist/commands/autonomy.d.ts.map +1 -0
  8. package/dist/commands/autonomy.js +89 -0
  9. package/dist/commands/autonomy.js.map +1 -0
  10. package/dist/commands/builder.d.ts +13 -0
  11. package/dist/commands/builder.d.ts.map +1 -0
  12. package/dist/commands/builder.js +142 -0
  13. package/dist/commands/builder.js.map +1 -0
  14. package/dist/commands/idea.d.ts +12 -0
  15. package/dist/commands/idea.d.ts.map +1 -0
  16. package/dist/commands/idea.js +79 -0
  17. package/dist/commands/idea.js.map +1 -0
  18. package/dist/commands/init.d.ts +18 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +423 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/mode.d.ts +13 -0
  23. package/dist/commands/mode.d.ts.map +1 -0
  24. package/dist/commands/mode.js +96 -0
  25. package/dist/commands/mode.js.map +1 -0
  26. package/dist/commands/onboard.d.ts +37 -0
  27. package/dist/commands/onboard.d.ts.map +1 -0
  28. package/dist/commands/onboard.js +743 -0
  29. package/dist/commands/onboard.js.map +1 -0
  30. package/dist/commands/pr-note.d.ts +8 -0
  31. package/dist/commands/pr-note.d.ts.map +1 -0
  32. package/dist/commands/pr-note.js +27 -0
  33. package/dist/commands/pr-note.js.map +1 -0
  34. package/dist/commands/undo.d.ts +7 -0
  35. package/dist/commands/undo.d.ts.map +1 -0
  36. package/dist/commands/undo.js +59 -0
  37. package/dist/commands/undo.js.map +1 -0
  38. package/dist/commands/update.d.ts +24 -0
  39. package/dist/commands/update.d.ts.map +1 -0
  40. package/dist/commands/update.js +248 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/constants/report_codes.d.ts +29 -0
  43. package/dist/constants/report_codes.d.ts.map +1 -0
  44. package/dist/constants/report_codes.js +69 -0
  45. package/dist/constants/report_codes.js.map +1 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +675 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lib/autonomy.d.ts +16 -0
  51. package/dist/lib/autonomy.d.ts.map +1 -0
  52. package/dist/lib/autonomy.js +38 -0
  53. package/dist/lib/autonomy.js.map +1 -0
  54. package/dist/lib/blocked.d.ts +87 -0
  55. package/dist/lib/blocked.d.ts.map +1 -0
  56. package/dist/lib/blocked.js +134 -0
  57. package/dist/lib/blocked.js.map +1 -0
  58. package/dist/lib/branding.d.ts +13 -0
  59. package/dist/lib/branding.d.ts.map +1 -0
  60. package/dist/lib/branding.js +19 -0
  61. package/dist/lib/branding.js.map +1 -0
  62. package/dist/lib/claude.d.ts +42 -0
  63. package/dist/lib/claude.d.ts.map +1 -0
  64. package/dist/lib/claude.js +291 -0
  65. package/dist/lib/claude.js.map +1 -0
  66. package/dist/lib/config.d.ts +71 -0
  67. package/dist/lib/config.d.ts.map +1 -0
  68. package/dist/lib/config.js +410 -0
  69. package/dist/lib/config.js.map +1 -0
  70. package/dist/lib/diff.d.ts +150 -0
  71. package/dist/lib/diff.d.ts.map +1 -0
  72. package/dist/lib/diff.js +257 -0
  73. package/dist/lib/diff.js.map +1 -0
  74. package/dist/lib/doctor.d.ts +67 -0
  75. package/dist/lib/doctor.d.ts.map +1 -0
  76. package/dist/lib/doctor.js +211 -0
  77. package/dist/lib/doctor.js.map +1 -0
  78. package/dist/lib/fingerprint.d.ts +27 -0
  79. package/dist/lib/fingerprint.d.ts.map +1 -0
  80. package/dist/lib/fingerprint.js +116 -0
  81. package/dist/lib/fingerprint.js.map +1 -0
  82. package/dist/lib/fs.d.ts +93 -0
  83. package/dist/lib/fs.d.ts.map +1 -0
  84. package/dist/lib/fs.js +179 -0
  85. package/dist/lib/fs.js.map +1 -0
  86. package/dist/lib/git.d.ts +177 -0
  87. package/dist/lib/git.d.ts.map +1 -0
  88. package/dist/lib/git.js +355 -0
  89. package/dist/lib/git.js.map +1 -0
  90. package/dist/lib/git_branching.d.ts +84 -0
  91. package/dist/lib/git_branching.d.ts.map +1 -0
  92. package/dist/lib/git_branching.js +327 -0
  93. package/dist/lib/git_branching.js.map +1 -0
  94. package/dist/lib/gitignore.d.ts +26 -0
  95. package/dist/lib/gitignore.d.ts.map +1 -0
  96. package/dist/lib/gitignore.js +119 -0
  97. package/dist/lib/gitignore.js.map +1 -0
  98. package/dist/lib/guardrails.d.ts +232 -0
  99. package/dist/lib/guardrails.d.ts.map +1 -0
  100. package/dist/lib/guardrails.js +323 -0
  101. package/dist/lib/guardrails.js.map +1 -0
  102. package/dist/lib/history.d.ts +110 -0
  103. package/dist/lib/history.d.ts.map +1 -0
  104. package/dist/lib/history.js +236 -0
  105. package/dist/lib/history.js.map +1 -0
  106. package/dist/lib/index.d.ts +29 -0
  107. package/dist/lib/index.d.ts.map +1 -0
  108. package/dist/lib/index.js +29 -0
  109. package/dist/lib/index.js.map +1 -0
  110. package/dist/lib/json-extract.d.ts +42 -0
  111. package/dist/lib/json-extract.d.ts.map +1 -0
  112. package/dist/lib/json-extract.js +201 -0
  113. package/dist/lib/json-extract.js.map +1 -0
  114. package/dist/lib/judge.d.ts +237 -0
  115. package/dist/lib/judge.d.ts.map +1 -0
  116. package/dist/lib/judge.js +501 -0
  117. package/dist/lib/judge.js.map +1 -0
  118. package/dist/lib/lock.d.ts +79 -0
  119. package/dist/lib/lock.d.ts.map +1 -0
  120. package/dist/lib/lock.js +254 -0
  121. package/dist/lib/lock.js.map +1 -0
  122. package/dist/lib/migration.d.ts +9 -0
  123. package/dist/lib/migration.d.ts.map +1 -0
  124. package/dist/lib/migration.js +74 -0
  125. package/dist/lib/migration.js.map +1 -0
  126. package/dist/lib/paths.d.ts +18 -0
  127. package/dist/lib/paths.d.ts.map +1 -0
  128. package/dist/lib/paths.js +27 -0
  129. package/dist/lib/paths.js.map +1 -0
  130. package/dist/lib/preflight.d.ts +33 -0
  131. package/dist/lib/preflight.d.ts.map +1 -0
  132. package/dist/lib/preflight.js +177 -0
  133. package/dist/lib/preflight.js.map +1 -0
  134. package/dist/lib/prompt_budget.d.ts +18 -0
  135. package/dist/lib/prompt_budget.d.ts.map +1 -0
  136. package/dist/lib/prompt_budget.js +36 -0
  137. package/dist/lib/prompt_budget.js.map +1 -0
  138. package/dist/lib/report.d.ts +102 -0
  139. package/dist/lib/report.d.ts.map +1 -0
  140. package/dist/lib/report.js +347 -0
  141. package/dist/lib/report.js.map +1 -0
  142. package/dist/lib/reviewer-flow.d.ts +80 -0
  143. package/dist/lib/reviewer-flow.d.ts.map +1 -0
  144. package/dist/lib/reviewer-flow.js +138 -0
  145. package/dist/lib/reviewer-flow.js.map +1 -0
  146. package/dist/lib/reviewer.d.ts +53 -0
  147. package/dist/lib/reviewer.d.ts.map +1 -0
  148. package/dist/lib/reviewer.js +199 -0
  149. package/dist/lib/reviewer.js.map +1 -0
  150. package/dist/lib/risk.d.ts +127 -0
  151. package/dist/lib/risk.d.ts.map +1 -0
  152. package/dist/lib/risk.js +192 -0
  153. package/dist/lib/risk.js.map +1 -0
  154. package/dist/lib/rollback.d.ts +143 -0
  155. package/dist/lib/rollback.d.ts.map +1 -0
  156. package/dist/lib/rollback.js +244 -0
  157. package/dist/lib/rollback.js.map +1 -0
  158. package/dist/lib/schema.d.ts +47 -0
  159. package/dist/lib/schema.d.ts.map +1 -0
  160. package/dist/lib/schema.js +91 -0
  161. package/dist/lib/schema.js.map +1 -0
  162. package/dist/lib/scope.d.ts +89 -0
  163. package/dist/lib/scope.d.ts.map +1 -0
  164. package/dist/lib/scope.js +135 -0
  165. package/dist/lib/scope.js.map +1 -0
  166. package/dist/lib/self_update.d.ts +13 -0
  167. package/dist/lib/self_update.d.ts.map +1 -0
  168. package/dist/lib/self_update.js +172 -0
  169. package/dist/lib/self_update.js.map +1 -0
  170. package/dist/lib/state.d.ts +143 -0
  171. package/dist/lib/state.d.ts.map +1 -0
  172. package/dist/lib/state.js +258 -0
  173. package/dist/lib/state.js.map +1 -0
  174. package/dist/lib/tick.d.ts +310 -0
  175. package/dist/lib/tick.d.ts.map +1 -0
  176. package/dist/lib/tick.js +424 -0
  177. package/dist/lib/tick.js.map +1 -0
  178. package/dist/lib/transport.d.ts +145 -0
  179. package/dist/lib/transport.d.ts.map +1 -0
  180. package/dist/lib/transport.js +237 -0
  181. package/dist/lib/transport.js.map +1 -0
  182. package/dist/lib/verdict_labels.d.ts +5 -0
  183. package/dist/lib/verdict_labels.d.ts.map +1 -0
  184. package/dist/lib/verdict_labels.js +25 -0
  185. package/dist/lib/verdict_labels.js.map +1 -0
  186. package/dist/lib/verify-safety.d.ts +63 -0
  187. package/dist/lib/verify-safety.d.ts.map +1 -0
  188. package/dist/lib/verify-safety.js +123 -0
  189. package/dist/lib/verify-safety.js.map +1 -0
  190. package/dist/lib/verify.d.ts +139 -0
  191. package/dist/lib/verify.d.ts.map +1 -0
  192. package/dist/lib/verify.js +311 -0
  193. package/dist/lib/verify.js.map +1 -0
  194. package/dist/lib/workspace_state.d.ts +79 -0
  195. package/dist/lib/workspace_state.d.ts.map +1 -0
  196. package/dist/lib/workspace_state.js +283 -0
  197. package/dist/lib/workspace_state.js.map +1 -0
  198. package/dist/runner/builder.d.ts +58 -0
  199. package/dist/runner/builder.d.ts.map +1 -0
  200. package/dist/runner/builder.js +775 -0
  201. package/dist/runner/builder.js.map +1 -0
  202. package/dist/runner/builder_parse.d.ts +37 -0
  203. package/dist/runner/builder_parse.d.ts.map +1 -0
  204. package/dist/runner/builder_parse.js +76 -0
  205. package/dist/runner/builder_parse.js.map +1 -0
  206. package/dist/runner/index.d.ts +9 -0
  207. package/dist/runner/index.d.ts.map +1 -0
  208. package/dist/runner/index.js +7 -0
  209. package/dist/runner/index.js.map +1 -0
  210. package/dist/runner/loop.d.ts +51 -0
  211. package/dist/runner/loop.d.ts.map +1 -0
  212. package/dist/runner/loop.js +221 -0
  213. package/dist/runner/loop.js.map +1 -0
  214. package/dist/runner/orchestrator.d.ts +67 -0
  215. package/dist/runner/orchestrator.d.ts.map +1 -0
  216. package/dist/runner/orchestrator.js +376 -0
  217. package/dist/runner/orchestrator.js.map +1 -0
  218. package/dist/runner/tick.d.ts +10 -0
  219. package/dist/runner/tick.d.ts.map +1 -0
  220. package/dist/runner/tick.js +1639 -0
  221. package/dist/runner/tick.js.map +1 -0
  222. package/dist/types/blocked.d.ts +52 -0
  223. package/dist/types/blocked.d.ts.map +1 -0
  224. package/dist/types/blocked.js +8 -0
  225. package/dist/types/blocked.js.map +1 -0
  226. package/dist/types/builder.d.ts +25 -0
  227. package/dist/types/builder.d.ts.map +1 -0
  228. package/dist/types/builder.js +7 -0
  229. package/dist/types/builder.js.map +1 -0
  230. package/dist/types/claude.d.ts +86 -0
  231. package/dist/types/claude.d.ts.map +1 -0
  232. package/dist/types/claude.js +48 -0
  233. package/dist/types/claude.js.map +1 -0
  234. package/dist/types/config.d.ts +384 -0
  235. package/dist/types/config.d.ts.map +1 -0
  236. package/dist/types/config.js +7 -0
  237. package/dist/types/config.js.map +1 -0
  238. package/dist/types/index.d.ts +18 -0
  239. package/dist/types/index.d.ts.map +1 -0
  240. package/dist/types/index.js +8 -0
  241. package/dist/types/index.js.map +1 -0
  242. package/dist/types/lock.d.ts +21 -0
  243. package/dist/types/lock.d.ts.map +1 -0
  244. package/dist/types/lock.js +8 -0
  245. package/dist/types/lock.js.map +1 -0
  246. package/dist/types/preflight.d.ts +49 -0
  247. package/dist/types/preflight.d.ts.map +1 -0
  248. package/dist/types/preflight.js +8 -0
  249. package/dist/types/preflight.js.map +1 -0
  250. package/dist/types/report.d.ts +161 -0
  251. package/dist/types/report.d.ts.map +1 -0
  252. package/dist/types/report.js +8 -0
  253. package/dist/types/report.js.map +1 -0
  254. package/dist/types/reviewer.d.ts +66 -0
  255. package/dist/types/reviewer.d.ts.map +1 -0
  256. package/dist/types/reviewer.js +5 -0
  257. package/dist/types/reviewer.js.map +1 -0
  258. package/dist/types/state.d.ts +124 -0
  259. package/dist/types/state.d.ts.map +1 -0
  260. package/dist/types/state.js +20 -0
  261. package/dist/types/state.js.map +1 -0
  262. package/dist/types/task.d.ts +117 -0
  263. package/dist/types/task.d.ts.map +1 -0
  264. package/dist/types/task.js +7 -0
  265. package/dist/types/task.js.map +1 -0
  266. package/dist/types/workspace_state.d.ts +125 -0
  267. package/dist/types/workspace_state.d.ts.map +1 -0
  268. package/dist/types/workspace_state.js +10 -0
  269. package/dist/types/workspace_state.js.map +1 -0
  270. package/envoi.config.json +191 -0
  271. package/package.json +52 -0
  272. package/relais/prompts/.gitkeep +0 -0
  273. package/relais/prompts/builder.system.txt +13 -0
  274. package/relais/prompts/builder.user.txt +15 -0
  275. package/relais/prompts/orchestrator.system.txt +37 -0
  276. package/relais/prompts/orchestrator.user.txt +34 -0
  277. package/relais/prompts/reviewer.system.txt +33 -0
  278. package/relais/prompts/reviewer.user.txt +35 -0
  279. package/relais/schemas/.gitkeep +0 -0
  280. package/relais/schemas/builder_result.schema.json +29 -0
  281. package/relais/schemas/report.schema.json +195 -0
  282. package/relais/schemas/reviewer_result.schema.json +70 -0
  283. package/relais/schemas/task.schema.json +155 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idea.js","sourceRoot":"","sources":["../../src/commands/idea.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Initialize Envoi workspace in the current directory.
3
+ *
4
+ * Creates the directory structure, copies templates, and sets up configuration.
5
+ */
6
+ /**
7
+ * Initializes an Envoi workspace in the current directory.
8
+ *
9
+ * @param options - Command options
10
+ * @param options.force - Overwrite existing files
11
+ * @param options.workspaceDir - Workspace directory name (default: 'envoi')
12
+ */
13
+ export declare function initCommand(options?: {
14
+ force?: boolean;
15
+ workspaceDir?: string;
16
+ showNextSteps?: boolean;
17
+ }): Promise<void>;
18
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoWH;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IlI"}
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Initialize Envoi workspace in the current directory.
3
+ *
4
+ * Creates the directory structure, copies templates, and sets up configuration.
5
+ */
6
+ import { mkdir, copyFile, access, readFile, writeFile } from 'node:fs/promises';
7
+ import { join, dirname } from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { addEnvoiIgnores, getEnvoiGitignoreEntries } from '../lib/gitignore.js';
10
+ import { atomicWriteJson } from '../lib/fs.js';
11
+ import { getGitTopLevel, isGitRepo } from '../lib/git.js';
12
+ import { CLI_NAME, CONFIG_FILE_NAME, PRODUCT_NAME, WORKSPACE_DIR_NAME } from '../lib/branding.js';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = dirname(__filename);
15
+ /**
16
+ * Path to package assets (prompts/schemas templates)
17
+ */
18
+ const ASSET_PACKAGE_ROOT = join(__dirname, '../../relais');
19
+ /**
20
+ * Prompts to copy from package prompts to workspace
21
+ */
22
+ const PROMPTS_TO_COPY = [
23
+ 'orchestrator.system.txt',
24
+ 'orchestrator.user.txt',
25
+ 'builder.system.txt',
26
+ 'builder.user.txt',
27
+ 'reviewer.system.txt',
28
+ 'reviewer.user.txt',
29
+ ];
30
+ /**
31
+ * Schemas to copy from package schemas to workspace
32
+ */
33
+ const SCHEMAS_TO_COPY = [
34
+ 'task.schema.json',
35
+ 'builder_result.schema.json',
36
+ 'report.schema.json',
37
+ 'reviewer_result.schema.json',
38
+ ];
39
+ /**
40
+ * Default STATE.json content for new workspace
41
+ */
42
+ function createInitialState() {
43
+ return {
44
+ v: 3,
45
+ phase: 'IDLE',
46
+ mode: 'single',
47
+ task: null,
48
+ milestone: null,
49
+ branch: 'main',
50
+ batch_tasks: [],
51
+ attempt: 0,
52
+ blockers: [],
53
+ next: null,
54
+ ts: new Date().toISOString(),
55
+ milestone_id: null,
56
+ budgets: {
57
+ ticks: 0,
58
+ orchestrator_calls: 0,
59
+ builder_calls: 0,
60
+ verify_runs: 0,
61
+ },
62
+ budget_warning: false,
63
+ last_run_id: null,
64
+ last_verdict: null,
65
+ idea_inbox: [],
66
+ planning_digest: null,
67
+ open_product_questions: [],
68
+ };
69
+ }
70
+ /**
71
+ * Checks if a file or directory exists
72
+ */
73
+ async function exists(path) {
74
+ try {
75
+ await access(path);
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ async function writeTextFileSafe(dest, contents, force) {
83
+ if (await exists(dest)) {
84
+ if (!force) {
85
+ return { written: false, reason: `File already exists: ${dest} (use --force to overwrite)` };
86
+ }
87
+ }
88
+ await mkdir(dirname(dest), { recursive: true });
89
+ await writeFile(dest, contents, 'utf-8');
90
+ return { written: true };
91
+ }
92
+ /**
93
+ * Detects the package manager based on lockfiles present in the directory.
94
+ *
95
+ * @param repoRoot - The repository root directory to check
96
+ * @returns The detected package manager: 'pnpm', 'npm', 'yarn', 'bun', or 'pnpm' as default
97
+ */
98
+ async function detectPackageManager(repoRoot) {
99
+ // Check in order of preference (pnpm-workspace.yaml first, then lockfiles)
100
+ if (await exists(join(repoRoot, 'pnpm-workspace.yaml'))) {
101
+ return 'pnpm';
102
+ }
103
+ if (await exists(join(repoRoot, 'pnpm-lock.yaml'))) {
104
+ return 'pnpm';
105
+ }
106
+ if (await exists(join(repoRoot, 'package-lock.json'))) {
107
+ return 'npm';
108
+ }
109
+ if (await exists(join(repoRoot, 'yarn.lock'))) {
110
+ return 'yarn';
111
+ }
112
+ if (await exists(join(repoRoot, 'bun.lockb'))) {
113
+ return 'bun';
114
+ }
115
+ // Default to pnpm if no lockfile found
116
+ return 'pnpm';
117
+ }
118
+ /**
119
+ * Checks if pnpm workspace is configured (pnpm-workspace.yaml exists).
120
+ *
121
+ * @param repoRoot - The repository root directory to check
122
+ * @returns true if pnpm-workspace.yaml exists
123
+ */
124
+ async function isPnpmWorkspace(repoRoot) {
125
+ return await exists(join(repoRoot, 'pnpm-workspace.yaml'));
126
+ }
127
+ /**
128
+ * Generates verification template args based on package manager and workspace detection.
129
+ *
130
+ * @param pkgManager - The detected package manager
131
+ * @param isWorkspace - Whether this is a pnpm workspace
132
+ * @returns Array of args for the verification command
133
+ */
134
+ function getVerificationArgs(pkgManager, isWorkspace) {
135
+ if (pkgManager === 'pnpm') {
136
+ return isWorkspace ? ['-w'] : [];
137
+ }
138
+ // npm, yarn, and bun don't have workspace flags in the same way
139
+ return [];
140
+ }
141
+ /**
142
+ * Gets the command name for the package manager.
143
+ *
144
+ * @param pkgManager - The detected package manager
145
+ * @returns The command name (e.g., 'pnpm', 'npm', 'yarn', 'bun')
146
+ */
147
+ function getPackageManagerCommand(pkgManager) {
148
+ return pkgManager;
149
+ }
150
+ /**
151
+ * Copies a file from source to destination, optionally overwriting
152
+ */
153
+ async function copyFileSafe(source, dest, force) {
154
+ if (!(await exists(source))) {
155
+ return { copied: false, reason: `Source file does not exist: ${source}` };
156
+ }
157
+ if (await exists(dest)) {
158
+ if (!force) {
159
+ return { copied: false, reason: `File already exists: ${dest} (use --force to overwrite)` };
160
+ }
161
+ }
162
+ // Ensure destination directory exists
163
+ await mkdir(dirname(dest), { recursive: true });
164
+ await copyFile(source, dest);
165
+ return { copied: true };
166
+ }
167
+ /**
168
+ * Reads the default config template and adjusts workspace_dir and verification templates
169
+ */
170
+ async function createConfigFile(workspaceDir, force, repoRoot, pkgManager, isWorkspace) {
171
+ const configPath = join(repoRoot, CONFIG_FILE_NAME);
172
+ if (await exists(configPath) && !force) {
173
+ return { created: false, reason: `Config file already exists: ${configPath} (use --force to overwrite)` };
174
+ }
175
+ // Read the template from package root (prefer envoi config, fallback to legacy)
176
+ const primaryTemplatePath = join(ASSET_PACKAGE_ROOT, `../${CONFIG_FILE_NAME}`);
177
+ const legacyTemplatePath = join(ASSET_PACKAGE_ROOT, '../relais.config.json');
178
+ const templatePath = (await exists(primaryTemplatePath)) ? primaryTemplatePath : legacyTemplatePath;
179
+ if (!(await exists(templatePath))) {
180
+ // Fallback: create a minimal config
181
+ const minimalConfig = {
182
+ version: '1.0',
183
+ product_name: PRODUCT_NAME.toLowerCase(),
184
+ workspace_dir: workspaceDir,
185
+ runner: {
186
+ require_git: true,
187
+ max_tick_seconds: 900,
188
+ lockfile: `${workspaceDir}/lock.json`,
189
+ runner_owned_globs: [
190
+ `${workspaceDir}/STATE.json`,
191
+ `${workspaceDir}/TASK.json`,
192
+ `${workspaceDir}/REPORT.json`,
193
+ `${workspaceDir}/REPORT.md`,
194
+ `${workspaceDir}/BLOCKED.json`,
195
+ `${workspaceDir}/FACTS.md`,
196
+ `${workspaceDir}/history/**`,
197
+ `${workspaceDir}/lock.json`,
198
+ `${workspaceDir}/schemas/**`,
199
+ `${workspaceDir}/prompts/**`,
200
+ ],
201
+ },
202
+ claude_code_cli: {
203
+ command: 'claude',
204
+ output_format: 'json',
205
+ no_session_persistence: true,
206
+ },
207
+ models: {
208
+ orchestrator_model: 'opus',
209
+ orchestrator_fallback_model: 'sonnet',
210
+ builder_model: 'sonnet',
211
+ builder_fallback_model: 'haiku',
212
+ },
213
+ };
214
+ await atomicWriteJson(configPath, minimalConfig);
215
+ return { created: true };
216
+ }
217
+ // Read and adjust the template
218
+ const template = JSON.parse(await readFile(templatePath, 'utf-8'));
219
+ template.workspace_dir = workspaceDir;
220
+ // Adjust paths in runner_owned_globs
221
+ if (template.runner?.runner_owned_globs) {
222
+ template.runner.runner_owned_globs = template.runner.runner_owned_globs.map((glob) => glob.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`));
223
+ }
224
+ // Adjust lockfile path
225
+ if (template.runner?.lockfile) {
226
+ template.runner.lockfile = template.runner.lockfile.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
227
+ }
228
+ // Adjust prompt and schema paths
229
+ if (template.orchestrator?.system_prompt_file) {
230
+ template.orchestrator.system_prompt_file = template.orchestrator.system_prompt_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
231
+ }
232
+ if (template.orchestrator?.user_prompt_file) {
233
+ template.orchestrator.user_prompt_file = template.orchestrator.user_prompt_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
234
+ }
235
+ if (template.orchestrator?.task_schema_file) {
236
+ template.orchestrator.task_schema_file = template.orchestrator.task_schema_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
237
+ }
238
+ if (template.builder?.claude_code?.system_prompt_file) {
239
+ template.builder.claude_code.system_prompt_file = template.builder.claude_code.system_prompt_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
240
+ }
241
+ if (template.builder?.claude_code?.user_prompt_file) {
242
+ template.builder.claude_code.user_prompt_file = template.builder.claude_code.user_prompt_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
243
+ }
244
+ if (template.builder?.claude_code?.builder_result_schema_file) {
245
+ template.builder.claude_code.builder_result_schema_file = template.builder.claude_code.builder_result_schema_file.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
246
+ }
247
+ if (template.history?.dir) {
248
+ template.history.dir = template.history.dir.replace(/^(?:relais|envoi)\//, `${workspaceDir}/`);
249
+ }
250
+ // Adjust verification templates based on detected package manager and workspace
251
+ if (template.verification?.templates && Array.isArray(template.verification.templates)) {
252
+ const cmd = getPackageManagerCommand(pkgManager);
253
+ const baseArgs = getVerificationArgs(pkgManager, isWorkspace);
254
+ for (const templateItem of template.verification.templates) {
255
+ if (templateItem.cmd) {
256
+ templateItem.cmd = cmd;
257
+ }
258
+ if (Array.isArray(templateItem.args)) {
259
+ // Replace args, preserving any template params
260
+ const newArgs = [];
261
+ for (const arg of templateItem.args) {
262
+ // If it's a workspace flag (-w), only include if isWorkspace
263
+ if (arg === '-w' && !isWorkspace) {
264
+ continue;
265
+ }
266
+ // If it's the command name, replace with detected package manager command
267
+ if (arg === 'pnpm' || arg === 'npm' || arg === 'yarn' || arg === 'bun') {
268
+ // Skip, we'll add base args separately
269
+ continue;
270
+ }
271
+ // Keep other args (like 'lint', 'test', etc.)
272
+ newArgs.push(arg);
273
+ }
274
+ // Prepend base args (workspace flag if needed)
275
+ templateItem.args = [...baseArgs, ...newArgs];
276
+ }
277
+ }
278
+ }
279
+ await atomicWriteJson(configPath, template);
280
+ return { created: true };
281
+ }
282
+ /**
283
+ * Initializes an Envoi workspace in the current directory.
284
+ *
285
+ * @param options - Command options
286
+ * @param options.force - Overwrite existing files
287
+ * @param options.workspaceDir - Workspace directory name (default: 'envoi')
288
+ */
289
+ export async function initCommand(options = {}) {
290
+ const { force = false, workspaceDir = WORKSPACE_DIR_NAME, showNextSteps = true } = options;
291
+ // Determine repository root: use git top-level if in git, otherwise use current directory
292
+ let repoRoot;
293
+ if (isGitRepo()) {
294
+ const gitTopLevel = getGitTopLevel();
295
+ if (gitTopLevel) {
296
+ repoRoot = gitTopLevel;
297
+ }
298
+ else {
299
+ repoRoot = process.cwd();
300
+ }
301
+ }
302
+ else {
303
+ repoRoot = process.cwd();
304
+ }
305
+ // Detect package manager and workspace configuration
306
+ const pkgManager = await detectPackageManager(repoRoot);
307
+ const isWorkspace = await isPnpmWorkspace(repoRoot);
308
+ const workspacePath = join(repoRoot, workspaceDir);
309
+ const errors = [];
310
+ const skippedExisting = [];
311
+ // 1. Create directory structure
312
+ const directories = [
313
+ workspacePath,
314
+ join(workspacePath, 'prompts'),
315
+ join(workspacePath, 'schemas'),
316
+ join(workspacePath, 'history'),
317
+ ];
318
+ for (const dir of directories) {
319
+ try {
320
+ await mkdir(dir, { recursive: true });
321
+ }
322
+ catch (error) {
323
+ errors.push(`Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`);
324
+ }
325
+ }
326
+ // 2. Copy prompt templates
327
+ for (const prompt of PROMPTS_TO_COPY) {
328
+ const source = join(ASSET_PACKAGE_ROOT, 'prompts', prompt);
329
+ const dest = join(workspacePath, 'prompts', prompt);
330
+ const result = await copyFileSafe(source, dest, force);
331
+ if (!result.copied) {
332
+ if (result.reason?.includes('already exists')) {
333
+ skippedExisting.push(result.reason);
334
+ }
335
+ else {
336
+ errors.push(`Failed to copy ${prompt}: ${result.reason || 'Unknown error'}`);
337
+ }
338
+ }
339
+ }
340
+ // 3. Copy schema files
341
+ for (const schema of SCHEMAS_TO_COPY) {
342
+ const source = join(ASSET_PACKAGE_ROOT, 'schemas', schema);
343
+ const dest = join(workspacePath, 'schemas', schema);
344
+ const result = await copyFileSafe(source, dest, force);
345
+ if (!result.copied) {
346
+ if (result.reason?.includes('already exists')) {
347
+ skippedExisting.push(result.reason);
348
+ }
349
+ else {
350
+ errors.push(`Failed to copy ${schema}: ${result.reason || 'Unknown error'}`);
351
+ }
352
+ }
353
+ }
354
+ // 4. Initialize STATE.json
355
+ const statePath = join(workspacePath, 'STATE.json');
356
+ if (await exists(statePath) && !force) {
357
+ skippedExisting.push(`STATE.json already exists: ${statePath} (use --force to overwrite)`);
358
+ }
359
+ else {
360
+ try {
361
+ await atomicWriteJson(statePath, createInitialState());
362
+ }
363
+ catch (error) {
364
+ errors.push(`Failed to create STATE.json: ${error instanceof Error ? error.message : String(error)}`);
365
+ }
366
+ }
367
+ // 4b. Create FACTS.md + PRD.md placeholders (user-authored, runner-owned)
368
+ const factsPath = join(workspacePath, 'FACTS.md');
369
+ const prdPath = join(workspacePath, 'PRD.md');
370
+ const factsResult = await writeTextFileSafe(factsPath, `# FACTS\n\n(Short, curated facts about this repo. Keep it tight.)\n`, force);
371
+ if (!factsResult.written && factsResult.reason?.includes('already exists')) {
372
+ // Do not treat as fatal; it's expected on re-init without --force
373
+ }
374
+ else if (!factsResult.written && factsResult.reason) {
375
+ errors.push(factsResult.reason);
376
+ }
377
+ const prdResult = await writeTextFileSafe(prdPath, `# PRD\n\n(Paste the user PRD here. This is the source of truth.)\n`, force);
378
+ if (!prdResult.written && prdResult.reason?.includes('already exists')) {
379
+ // expected
380
+ }
381
+ else if (!prdResult.written && prdResult.reason) {
382
+ errors.push(prdResult.reason);
383
+ }
384
+ // 5. Create config file
385
+ const configResult = await createConfigFile(workspaceDir, force, repoRoot, pkgManager, isWorkspace);
386
+ if (!configResult.created && configResult.reason) {
387
+ if (configResult.reason.includes('already exists')) {
388
+ skippedExisting.push(configResult.reason);
389
+ }
390
+ else {
391
+ errors.push(`Failed to create config file: ${configResult.reason}`);
392
+ }
393
+ }
394
+ // 6. Add .gitignore entries
395
+ try {
396
+ await addEnvoiIgnores(repoRoot, getEnvoiGitignoreEntries(workspaceDir));
397
+ }
398
+ catch (error) {
399
+ errors.push(`Failed to update .gitignore: ${error instanceof Error ? error.message : String(error)}`);
400
+ }
401
+ // Report errors
402
+ if (errors.length > 0) {
403
+ console.error('Errors during initialization:');
404
+ for (const error of errors) {
405
+ console.error(` - ${error}`);
406
+ }
407
+ throw new Error(`Initialization failed with ${errors.length} error(s)`);
408
+ }
409
+ // 7. Print success message
410
+ const wasAlreadyInitialized = !force && skippedExisting.length > 0;
411
+ if (wasAlreadyInitialized) {
412
+ console.log(`${PRODUCT_NAME} workspace already initialized (kept existing files)\n`);
413
+ }
414
+ else {
415
+ console.log(`${PRODUCT_NAME} workspace initialized\n`);
416
+ }
417
+ if (showNextSteps) {
418
+ console.log('Next steps:');
419
+ console.log(' 1. Run ' + CLI_NAME + ' start for guided onboarding');
420
+ console.log(' 2. Or run ' + CLI_NAME + ' brief for PRD intake only');
421
+ }
422
+ }
423
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Interactive (or flag-based) loop mode selection.
3
+ *
4
+ * Persists the default loop mode into envoi.config.json so users can re-run
5
+ * `envoi loop` without remembering flags.
6
+ */
7
+ export type LoopMode = 'task' | 'milestone' | 'autonomous';
8
+ export declare function modeCommand(options: {
9
+ configPath?: string;
10
+ set?: string;
11
+ json?: boolean;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/commands/mode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;AAuD3D,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/G"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Interactive (or flag-based) loop mode selection.
3
+ *
4
+ * Persists the default loop mode into envoi.config.json so users can re-run
5
+ * `envoi loop` without remembering flags.
6
+ */
7
+ import { resolve } from 'node:path';
8
+ import readline from 'node:readline/promises';
9
+ import { stdin as input, stdout as output } from 'node:process';
10
+ import { atomicReadJson, atomicWriteJson } from '../lib/fs.js';
11
+ import { CONFIG_FILE_NAME, ConfigError, findConfigFile, loadConfig } from '../lib/config.js';
12
+ import { CLI_NAME } from '../lib/branding.js';
13
+ function describeMode(mode) {
14
+ switch (mode) {
15
+ case 'task':
16
+ return {
17
+ title: 'Task (small, controlled)',
18
+ desc: 'Stops when the orchestrator signals stop (good for short bursts).',
19
+ };
20
+ case 'milestone':
21
+ return {
22
+ title: 'Milestone (recommended default)',
23
+ desc: 'Stops when the milestone changes (good for iterative progress).',
24
+ };
25
+ case 'autonomous':
26
+ return {
27
+ title: 'Autonomous (hands-off)',
28
+ desc: 'Allows milestone changes (good for longer runs, higher drift risk).',
29
+ };
30
+ }
31
+ }
32
+ async function promptForMode(current) {
33
+ const rl = readline.createInterface({ input, output });
34
+ try {
35
+ console.log('\nChoose loop mode:');
36
+ const options = ['task', 'milestone', 'autonomous'];
37
+ options.forEach((m, i) => {
38
+ const meta = describeMode(m);
39
+ const suffix = current === m ? ' (current)' : '';
40
+ console.log(` ${i + 1}. ${m} — ${meta.title}${suffix}`);
41
+ console.log(` ${meta.desc}`);
42
+ });
43
+ const answer = (await rl.question(`Mode [1-3]${current ? ` (default ${current})` : ''}: `)).trim();
44
+ if (answer === '' && current)
45
+ return current;
46
+ const idx = Number.parseInt(answer, 10);
47
+ if (idx >= 1 && idx <= 3)
48
+ return options[idx - 1];
49
+ if (answer === 'task' || answer === 'milestone' || answer === 'autonomous')
50
+ return answer;
51
+ throw new Error('Invalid selection');
52
+ }
53
+ finally {
54
+ rl.close();
55
+ }
56
+ }
57
+ async function resolveConfigPath(configPath) {
58
+ if (configPath)
59
+ return resolve(configPath);
60
+ const found = await findConfigFile();
61
+ if (!found) {
62
+ throw new ConfigError(`Configuration file not found. Expected ${CONFIG_FILE_NAME} in current directory or parent directories.`);
63
+ }
64
+ return found;
65
+ }
66
+ export async function modeCommand(options) {
67
+ // Ensure config exists and is valid (also confirms we are in repo root via caller).
68
+ const config = await loadConfig(options.configPath);
69
+ const current = config.runner.default_loop_mode;
70
+ let next;
71
+ if (options.set) {
72
+ if (options.set !== 'task' && options.set !== 'milestone' && options.set !== 'autonomous') {
73
+ throw new Error(`Invalid mode: ${options.set}. Must be 'task', 'milestone', or 'autonomous'.`);
74
+ }
75
+ next = options.set;
76
+ }
77
+ else if (input.isTTY) {
78
+ next = await promptForMode(current);
79
+ }
80
+ else {
81
+ throw new Error('No --set provided and stdin is not a TTY (cannot prompt).');
82
+ }
83
+ const configPath = await resolveConfigPath(options.configPath);
84
+ const raw = await atomicReadJson(configPath);
85
+ raw.runner = { ...raw.runner, default_loop_mode: next };
86
+ await atomicWriteJson(configPath, raw);
87
+ if (options.json) {
88
+ console.log(JSON.stringify({ default_loop_mode: next }, null, 2));
89
+ return;
90
+ }
91
+ const meta = describeMode(next);
92
+ console.log(`\nDefault loop mode set to: ${next} — ${meta.title}`);
93
+ console.log(`Next: ${CLI_NAME} loop --mode ${next}`);
94
+ console.log(`Change again anytime: ${CLI_NAME} mode`);
95
+ }
96
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/commands/mode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Guided onboarding flow for Envoi.
3
+ *
4
+ * Goals:
5
+ * - Ensure workspace is initialized
6
+ * - Capture project brief (PRD)
7
+ * - Configure execution mode + builder + optional reviewer
8
+ * - Validate role connectivity
9
+ * - Generate initial roadmap snapshot
10
+ * - Optionally start execution immediately
11
+ */
12
+ type PrdSource = 'file' | 'stdin' | 'existing' | 'paste' | 'editor' | 'skip';
13
+ export declare function validateNonInteractiveOptions(options: {
14
+ mode?: string;
15
+ builder?: string;
16
+ }): void;
17
+ export declare function validateNonInteractivePrdCapture(prdCapture: {
18
+ text: string;
19
+ source: PrdSource;
20
+ }): void;
21
+ export declare function isMeaningfulPrdText(value: string): boolean;
22
+ export declare const PRD_DISCOVERY_CANDIDATES: readonly ["PRD.md", "prd.md", "docs/PRD.md", "docs/prd.md", "specs/PRD.md", "product/PRD.md"];
23
+ export declare function discoverLocalPrdCandidates(repoRoot: string): Promise<string[]>;
24
+ export declare function extractRoadmapMilestones(prompt: string): string[];
25
+ export declare function extractRoadmapQuestions(prompt: string): string[];
26
+ export declare function onboardCommand(options: {
27
+ configPath?: string;
28
+ forceInit?: boolean;
29
+ prdFile?: string;
30
+ mode?: string;
31
+ builder?: string;
32
+ reviewer?: string;
33
+ showTourPrompt?: boolean;
34
+ autoRun?: boolean;
35
+ }): Promise<void>;
36
+ export {};
37
+ //# sourceMappingURL=onboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwBH,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAyB7E,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBhG;AAED,wBAAgB,gCAAgC,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAWtG;AA+CD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAU1D;AAsED,eAAO,MAAM,wBAAwB,+FAO3B,CAAC;AAEX,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBpF;AA0ND,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BjE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBhE;AAuJD,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgNhB"}