@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.
- package/README.md +238 -0
- package/dist/commands/app.d.ts +2 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +31 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/autonomy.d.ts +6 -0
- package/dist/commands/autonomy.d.ts.map +1 -0
- package/dist/commands/autonomy.js +89 -0
- package/dist/commands/autonomy.js.map +1 -0
- package/dist/commands/builder.d.ts +13 -0
- package/dist/commands/builder.d.ts.map +1 -0
- package/dist/commands/builder.js +142 -0
- package/dist/commands/builder.js.map +1 -0
- package/dist/commands/idea.d.ts +12 -0
- package/dist/commands/idea.d.ts.map +1 -0
- package/dist/commands/idea.js +79 -0
- package/dist/commands/idea.js.map +1 -0
- package/dist/commands/init.d.ts +18 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +423 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mode.d.ts +13 -0
- package/dist/commands/mode.d.ts.map +1 -0
- package/dist/commands/mode.js +96 -0
- package/dist/commands/mode.js.map +1 -0
- package/dist/commands/onboard.d.ts +37 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +743 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/pr-note.d.ts +8 -0
- package/dist/commands/pr-note.d.ts.map +1 -0
- package/dist/commands/pr-note.js +27 -0
- package/dist/commands/pr-note.js.map +1 -0
- package/dist/commands/undo.d.ts +7 -0
- package/dist/commands/undo.d.ts.map +1 -0
- package/dist/commands/undo.js +59 -0
- package/dist/commands/undo.js.map +1 -0
- package/dist/commands/update.d.ts +24 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +248 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/constants/report_codes.d.ts +29 -0
- package/dist/constants/report_codes.d.ts.map +1 -0
- package/dist/constants/report_codes.js +69 -0
- package/dist/constants/report_codes.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +675 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/autonomy.d.ts +16 -0
- package/dist/lib/autonomy.d.ts.map +1 -0
- package/dist/lib/autonomy.js +38 -0
- package/dist/lib/autonomy.js.map +1 -0
- package/dist/lib/blocked.d.ts +87 -0
- package/dist/lib/blocked.d.ts.map +1 -0
- package/dist/lib/blocked.js +134 -0
- package/dist/lib/blocked.js.map +1 -0
- package/dist/lib/branding.d.ts +13 -0
- package/dist/lib/branding.d.ts.map +1 -0
- package/dist/lib/branding.js +19 -0
- package/dist/lib/branding.js.map +1 -0
- package/dist/lib/claude.d.ts +42 -0
- package/dist/lib/claude.d.ts.map +1 -0
- package/dist/lib/claude.js +291 -0
- package/dist/lib/claude.js.map +1 -0
- package/dist/lib/config.d.ts +71 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +410 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/diff.d.ts +150 -0
- package/dist/lib/diff.d.ts.map +1 -0
- package/dist/lib/diff.js +257 -0
- package/dist/lib/diff.js.map +1 -0
- package/dist/lib/doctor.d.ts +67 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +211 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/fingerprint.d.ts +27 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/lib/fingerprint.js +116 -0
- package/dist/lib/fingerprint.js.map +1 -0
- package/dist/lib/fs.d.ts +93 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +179 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/git.d.ts +177 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +355 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/git_branching.d.ts +84 -0
- package/dist/lib/git_branching.d.ts.map +1 -0
- package/dist/lib/git_branching.js +327 -0
- package/dist/lib/git_branching.js.map +1 -0
- package/dist/lib/gitignore.d.ts +26 -0
- package/dist/lib/gitignore.d.ts.map +1 -0
- package/dist/lib/gitignore.js +119 -0
- package/dist/lib/gitignore.js.map +1 -0
- package/dist/lib/guardrails.d.ts +232 -0
- package/dist/lib/guardrails.d.ts.map +1 -0
- package/dist/lib/guardrails.js +323 -0
- package/dist/lib/guardrails.js.map +1 -0
- package/dist/lib/history.d.ts +110 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +236 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/index.d.ts +29 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +29 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/json-extract.d.ts +42 -0
- package/dist/lib/json-extract.d.ts.map +1 -0
- package/dist/lib/json-extract.js +201 -0
- package/dist/lib/json-extract.js.map +1 -0
- package/dist/lib/judge.d.ts +237 -0
- package/dist/lib/judge.d.ts.map +1 -0
- package/dist/lib/judge.js +501 -0
- package/dist/lib/judge.js.map +1 -0
- package/dist/lib/lock.d.ts +79 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +254 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/migration.d.ts +9 -0
- package/dist/lib/migration.d.ts.map +1 -0
- package/dist/lib/migration.js +74 -0
- package/dist/lib/migration.js.map +1 -0
- package/dist/lib/paths.d.ts +18 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +27 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/preflight.d.ts +33 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +177 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/prompt_budget.d.ts +18 -0
- package/dist/lib/prompt_budget.d.ts.map +1 -0
- package/dist/lib/prompt_budget.js +36 -0
- package/dist/lib/prompt_budget.js.map +1 -0
- package/dist/lib/report.d.ts +102 -0
- package/dist/lib/report.d.ts.map +1 -0
- package/dist/lib/report.js +347 -0
- package/dist/lib/report.js.map +1 -0
- package/dist/lib/reviewer-flow.d.ts +80 -0
- package/dist/lib/reviewer-flow.d.ts.map +1 -0
- package/dist/lib/reviewer-flow.js +138 -0
- package/dist/lib/reviewer-flow.js.map +1 -0
- package/dist/lib/reviewer.d.ts +53 -0
- package/dist/lib/reviewer.d.ts.map +1 -0
- package/dist/lib/reviewer.js +199 -0
- package/dist/lib/reviewer.js.map +1 -0
- package/dist/lib/risk.d.ts +127 -0
- package/dist/lib/risk.d.ts.map +1 -0
- package/dist/lib/risk.js +192 -0
- package/dist/lib/risk.js.map +1 -0
- package/dist/lib/rollback.d.ts +143 -0
- package/dist/lib/rollback.d.ts.map +1 -0
- package/dist/lib/rollback.js +244 -0
- package/dist/lib/rollback.js.map +1 -0
- package/dist/lib/schema.d.ts +47 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +91 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/scope.d.ts +89 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +135 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/self_update.d.ts +13 -0
- package/dist/lib/self_update.d.ts.map +1 -0
- package/dist/lib/self_update.js +172 -0
- package/dist/lib/self_update.js.map +1 -0
- package/dist/lib/state.d.ts +143 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +258 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/tick.d.ts +310 -0
- package/dist/lib/tick.d.ts.map +1 -0
- package/dist/lib/tick.js +424 -0
- package/dist/lib/tick.js.map +1 -0
- package/dist/lib/transport.d.ts +145 -0
- package/dist/lib/transport.d.ts.map +1 -0
- package/dist/lib/transport.js +237 -0
- package/dist/lib/transport.js.map +1 -0
- package/dist/lib/verdict_labels.d.ts +5 -0
- package/dist/lib/verdict_labels.d.ts.map +1 -0
- package/dist/lib/verdict_labels.js +25 -0
- package/dist/lib/verdict_labels.js.map +1 -0
- package/dist/lib/verify-safety.d.ts +63 -0
- package/dist/lib/verify-safety.d.ts.map +1 -0
- package/dist/lib/verify-safety.js +123 -0
- package/dist/lib/verify-safety.js.map +1 -0
- package/dist/lib/verify.d.ts +139 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +311 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/lib/workspace_state.d.ts +79 -0
- package/dist/lib/workspace_state.d.ts.map +1 -0
- package/dist/lib/workspace_state.js +283 -0
- package/dist/lib/workspace_state.js.map +1 -0
- package/dist/runner/builder.d.ts +58 -0
- package/dist/runner/builder.d.ts.map +1 -0
- package/dist/runner/builder.js +775 -0
- package/dist/runner/builder.js.map +1 -0
- package/dist/runner/builder_parse.d.ts +37 -0
- package/dist/runner/builder_parse.d.ts.map +1 -0
- package/dist/runner/builder_parse.js +76 -0
- package/dist/runner/builder_parse.js.map +1 -0
- package/dist/runner/index.d.ts +9 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +7 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/loop.d.ts +51 -0
- package/dist/runner/loop.d.ts.map +1 -0
- package/dist/runner/loop.js +221 -0
- package/dist/runner/loop.js.map +1 -0
- package/dist/runner/orchestrator.d.ts +67 -0
- package/dist/runner/orchestrator.d.ts.map +1 -0
- package/dist/runner/orchestrator.js +376 -0
- package/dist/runner/orchestrator.js.map +1 -0
- package/dist/runner/tick.d.ts +10 -0
- package/dist/runner/tick.d.ts.map +1 -0
- package/dist/runner/tick.js +1639 -0
- package/dist/runner/tick.js.map +1 -0
- package/dist/types/blocked.d.ts +52 -0
- package/dist/types/blocked.d.ts.map +1 -0
- package/dist/types/blocked.js +8 -0
- package/dist/types/blocked.js.map +1 -0
- package/dist/types/builder.d.ts +25 -0
- package/dist/types/builder.d.ts.map +1 -0
- package/dist/types/builder.js +7 -0
- package/dist/types/builder.js.map +1 -0
- package/dist/types/claude.d.ts +86 -0
- package/dist/types/claude.d.ts.map +1 -0
- package/dist/types/claude.js +48 -0
- package/dist/types/claude.js.map +1 -0
- package/dist/types/config.d.ts +384 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lock.d.ts +21 -0
- package/dist/types/lock.d.ts.map +1 -0
- package/dist/types/lock.js +8 -0
- package/dist/types/lock.js.map +1 -0
- package/dist/types/preflight.d.ts +49 -0
- package/dist/types/preflight.d.ts.map +1 -0
- package/dist/types/preflight.js +8 -0
- package/dist/types/preflight.js.map +1 -0
- package/dist/types/report.d.ts +161 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +8 -0
- package/dist/types/report.js.map +1 -0
- package/dist/types/reviewer.d.ts +66 -0
- package/dist/types/reviewer.d.ts.map +1 -0
- package/dist/types/reviewer.js +5 -0
- package/dist/types/reviewer.js.map +1 -0
- package/dist/types/state.d.ts +124 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +20 -0
- package/dist/types/state.js.map +1 -0
- package/dist/types/task.d.ts +117 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +7 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/workspace_state.d.ts +125 -0
- package/dist/types/workspace_state.d.ts.map +1 -0
- package/dist/types/workspace_state.js +10 -0
- package/dist/types/workspace_state.js.map +1 -0
- package/envoi.config.json +191 -0
- package/package.json +52 -0
- package/relais/prompts/.gitkeep +0 -0
- package/relais/prompts/builder.system.txt +13 -0
- package/relais/prompts/builder.user.txt +15 -0
- package/relais/prompts/orchestrator.system.txt +37 -0
- package/relais/prompts/orchestrator.user.txt +34 -0
- package/relais/prompts/reviewer.system.txt +33 -0
- package/relais/prompts/reviewer.user.txt +35 -0
- package/relais/schemas/.gitkeep +0 -0
- package/relais/schemas/builder_result.schema.json +29 -0
- package/relais/schemas/report.schema.json +195 -0
- package/relais/schemas/reviewer_result.schema.json +70 -0
- 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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAElG,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,eAAe,GAAG;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAG;IACtB,kBAAkB;IAClB,4BAA4B;IAC5B,oBAAoB;IACpB,6BAA6B;CAC9B,CAAC;AAEF;;GAEG;AACH,SAAS,kBAAkB;IAqBzB,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE;YACP,KAAK,EAAE,CAAC;YACR,kBAAkB,EAAE,CAAC;YACrB,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;SACf;QACD,cAAc,EAAE,KAAK;QACrB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,IAAI;QACrB,sBAAsB,EAAE,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAY,EACZ,QAAgB,EAChB,KAAc;IAEd,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,IAAI,6BAA6B,EAAE,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IAClD,2EAA2E;IAC3E,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,uCAAuC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,UAA2C,EAAE,WAAoB;IAC5F,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,CAAC;IACD,gEAAgE;IAChE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,UAA2C;IAC3E,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,MAAc,EACd,IAAY,EACZ,KAAc;IAEd,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,MAAM,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,IAAI,6BAA6B,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,YAAoB,EACpB,KAAc,EACd,QAAgB,EAChB,UAA2C,EAC3C,WAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEpD,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,UAAU,6BAA6B,EAAE,CAAC;IAC5G,CAAC;IAED,gFAAgF;IAChF,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,gBAAgB,EAAE,CAAC,CAAC;IAC/E,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACpG,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAClC,oCAAoC;QACpC,MAAM,aAAa,GAAG;YACpB,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,YAAY,CAAC,WAAW,EAAE;YACxC,aAAa,EAAE,YAAY;YAC3B,MAAM,EAAE;gBACN,WAAW,EAAE,IAAI;gBACjB,gBAAgB,EAAE,GAAG;gBACrB,QAAQ,EAAE,GAAG,YAAY,YAAY;gBACrC,kBAAkB,EAAE;oBACpB,GAAG,YAAY,aAAa;oBAC5B,GAAG,YAAY,YAAY;oBAC3B,GAAG,YAAY,cAAc;oBAC7B,GAAG,YAAY,YAAY;oBAC3B,GAAG,YAAY,eAAe;oBAC9B,GAAG,YAAY,WAAW;oBAC1B,GAAG,YAAY,aAAa;oBAC5B,GAAG,YAAY,YAAY;oBAC3B,GAAG,YAAY,aAAa;oBAC5B,GAAG,YAAY,aAAa;iBAC7B;aACA;YACD,eAAe,EAAE;gBACf,OAAO,EAAE,QAAQ;gBACjB,aAAa,EAAE,MAAM;gBACrB,sBAAsB,EAAE,IAAI;aAC7B;YACD,MAAM,EAAE;gBACN,kBAAkB,EAAE,MAAM;gBAC1B,2BAA2B,EAAE,QAAQ;gBACrC,aAAa,EAAE,QAAQ;gBACvB,sBAAsB,EAAE,OAAO;aAChC;SACF,CAAC;QACF,MAAM,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,aAAa,GAAG,YAAY,CAAC;IAEtC,qCAAqC;IACrC,IAAI,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACxC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAC3F,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,YAAY,GAAG,CAAC,CACxD,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC;IACzG,CAAC;IAED,iCAAiC;IACjC,IAAI,QAAQ,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC;QAC9C,QAAQ,CAAC,YAAY,CAAC,kBAAkB,GAAG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CACzF,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAC5C,QAAQ,CAAC,YAAY,CAAC,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CACrF,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAC5C,QAAQ,CAAC,YAAY,CAAC,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CACrF,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QACtD,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CACvG,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACpD,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CACnG,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;QAC9D,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,OAAO,CACvH,qBAAqB,EACrB,GAAG,YAAY,GAAG,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC;IACjG,CAAC;IAED,gFAAgF;IAChF,IAAI,QAAQ,CAAC,YAAY,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,MAAM,GAAG,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAE9D,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC3D,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;gBACrB,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,+CAA+C;gBAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;gBAC7B,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;oBACpC,6DAA6D;oBAC7D,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjC,SAAS;oBACX,CAAC;oBACD,0EAA0E;oBAC1E,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;wBACvE,uCAAuC;wBACvC,SAAS;oBACX,CAAC;oBACD,8CAA8C;oBAC9C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBACD,+CAA+C;gBAC/C,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAA+E,EAAE;IACjH,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,YAAY,GAAG,kBAAkB,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3F,0FAA0F;IAC1F,IAAI,QAAgB,CAAC;IACrB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,GAAG,WAAW,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,qDAAqD;IACrD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEpD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,gCAAgC;IAChC,MAAM,WAAW,GAAG;QAClB,aAAa;QACb,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;KAC/B,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC9C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC9C,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtC,eAAe,CAAC,IAAI,CAAC,8BAA8B,SAAS,6BAA6B,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACzC,SAAS,EACT,qEAAqE,EACrE,KAAK,CACN,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3E,kEAAkE;IACpE,CAAC;SAAM,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CACvC,OAAO,EACP,oEAAoE,EACpE,KAAK,CACN,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,WAAW;IACb,CAAC;SAAM,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACpG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACjD,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnD,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,iCAAiC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED,2BAA2B;IAC3B,MAAM,qBAAqB,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,wDAAwD,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,0BAA0B,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,GAAG,8BAA8B,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,QAAQ,GAAG,4BAA4B,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
|
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,SAAS,YAAY,CAAC,IAAc;IAClC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO;gBACL,KAAK,EAAE,0BAA0B;gBACjC,IAAI,EAAE,mEAAmE;aAC1E,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,KAAK,EAAE,iCAAiC;gBACxC,IAAI,EAAE,iEAAiE;aACxE,CAAC;QACJ,KAAK,YAAY;YACf,OAAO;gBACL,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,qEAAqE;aAC5E,CAAC;IACN,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAkB;IAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,OAAO,GAAe,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAChE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnG,IAAI,MAAM,KAAK,EAAE,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,YAAY;YAAE,OAAO,MAAM,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAmB;IAClD,IAAI,UAAU;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,WAAW,CACnB,0CAA0C,gBAAgB,8CAA8C,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA8D;IAC9F,oFAAoF;IACpF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAyC,CAAC;IACxE,IAAI,IAA0B,CAAC;IAE/B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YAC1F,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,GAAG,iDAAiD,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC;SAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAc,UAAU,CAAC,CAAC;IAC1D,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,OAAO,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -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"}
|