@nac3/forge-cli 0.2.0-alpha.2 → 0.2.0-alpha.21
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/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +25 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +22 -15
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +75 -22
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +102 -3
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.js +498 -32
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/audit_consumers.d.ts +66 -0
- package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
- package/dist/chat/tools/audit_consumers.js +231 -0
- package/dist/chat/tools/audit_consumers.js.map +1 -0
- package/dist/chat/tools/git.js +4 -4
- package/dist/chat/tools/github.js +3 -3
- package/dist/chat/tools/lifecycle.js +3 -3
- package/dist/chat/tools/manual.js +1 -1
- package/dist/chat/tools/reader.js +8 -8
- package/dist/chat/tools/workflow.d.ts +45 -0
- package/dist/chat/tools/workflow.d.ts.map +1 -0
- package/dist/chat/tools/workflow.js +404 -0
- package/dist/chat/tools/workflow.js.map +1 -0
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +23 -4
- package/dist/chat/tools.js.map +1 -1
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/block.d.ts +28 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +189 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +35 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +205 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +46 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/discover.d.ts +30 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +178 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.js +94 -42
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/keys_setup.d.ts +53 -0
- package/dist/commands/keys_setup.d.ts.map +1 -0
- package/dist/commands/keys_setup.js +487 -0
- package/dist/commands/keys_setup.js.map +1 -0
- package/dist/commands/legacy-audit.d.ts +34 -0
- package/dist/commands/legacy-audit.d.ts.map +1 -0
- package/dist/commands/legacy-audit.js +270 -0
- package/dist/commands/legacy-audit.js.map +1 -0
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +41 -0
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/operate.d.ts +22 -0
- package/dist/commands/operate.d.ts.map +1 -0
- package/dist/commands/operate.js +483 -0
- package/dist/commands/operate.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/triage.d.ts +34 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +228 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vault-inventory.d.ts +30 -0
- package/dist/commands/vault-inventory.d.ts.map +1 -0
- package/dist/commands/vault-inventory.js +214 -0
- package/dist/commands/vault-inventory.js.map +1 -0
- package/dist/commands/vault.d.ts.map +1 -1
- package/dist/commands/vault.js +5 -0
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/voice.js +1 -1
- package/dist/commands/voice.js.map +1 -1
- package/dist/commands/workflow-coverage.d.ts +30 -0
- package/dist/commands/workflow-coverage.d.ts.map +1 -0
- package/dist/commands/workflow-coverage.js +138 -0
- package/dist/commands/workflow-coverage.js.map +1 -0
- package/dist/core/keys_envelope.d.ts +13 -0
- package/dist/core/keys_envelope.d.ts.map +1 -1
- package/dist/core/keys_envelope.js.map +1 -1
- package/dist/deploy/adapter.d.ts +93 -0
- package/dist/deploy/adapter.d.ts.map +1 -0
- package/dist/deploy/adapter.js +42 -0
- package/dist/deploy/adapter.js.map +1 -0
- package/dist/deploy/aws_adapter.d.ts +28 -0
- package/dist/deploy/aws_adapter.d.ts.map +1 -0
- package/dist/deploy/aws_adapter.js +65 -0
- package/dist/deploy/aws_adapter.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts +24 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +169 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/license/hito4_client.d.ts +17 -1
- package/dist/license/hito4_client.d.ts.map +1 -1
- package/dist/license/hito4_client.js +71 -10
- package/dist/license/hito4_client.js.map +1 -1
- package/dist/license/index.d.ts.map +1 -1
- package/dist/license/index.js +7 -0
- package/dist/license/index.js.map +1 -1
- package/dist/license/sync.d.ts +54 -0
- package/dist/license/sync.d.ts.map +1 -0
- package/dist/license/sync.js +131 -0
- package/dist/license/sync.js.map +1 -0
- package/dist/telemetry/usage.d.ts +67 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +208 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/intents.d.ts +1 -1
- package/dist/voice/intents.js +0 -0
- package/dist/voice/providers/google.d.ts.map +1 -1
- package/dist/voice/providers/google.js +157 -27
- package/dist/voice/providers/google.js.map +1 -1
- package/dist/voice/router.d.ts +10 -0
- package/dist/voice/router.d.ts.map +1 -1
- package/dist/voice/router.js +39 -20
- package/dist/voice/router.js.map +1 -1
- package/dist/voice/types.d.ts +5 -2
- package/dist/voice/types.d.ts.map +1 -1
- package/dist/voice/types.js.map +1 -1
- package/dist/workflow/state.d.ts +190 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +119 -0
- package/dist/workflow/state.js.map +1 -0
- package/package.json +13 -15
- package/templates/nextjs-app/README.md +48 -0
- package/templates/nextjs-app/next.config.js +8 -0
- package/templates/nextjs-app/package.json +33 -0
- package/templates/nextjs-app/src/app/globals.css +43 -0
- package/templates/nextjs-app/src/app/layout.tsx +29 -0
- package/templates/nextjs-app/src/app/page.tsx +63 -0
- package/templates/nextjs-app/src/nac/manifest.ts +36 -0
- package/templates/nextjs-app/tsconfig.json +21 -0
- package/templates/nextjs-app/yujin.forge.json +11 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf bootstrap` -- Phase V step 14 of PRODUCT_WORKFLOW.md.
|
|
3
|
+
*
|
|
4
|
+
* Once Phase IV (approve) passes the three spec gates, this
|
|
5
|
+
* command initialises the project for the iterative build cycle:
|
|
6
|
+
*
|
|
7
|
+
* * Reads workflow.specs + workflow.clarification.blocks
|
|
8
|
+
* * Scaffolds the project shell (delegates to template engine
|
|
9
|
+
* if the project is brand-new; no-ops if code already exists)
|
|
10
|
+
* * Installs NAC-3 compliance baseline (5 attrs on the shell +
|
|
11
|
+
* manifest stub)
|
|
12
|
+
* * Sets CI gates (lint + typecheck + tests + visual + a11y +
|
|
13
|
+
* NAC-3 manifest check)
|
|
14
|
+
* * Sets up test scaffolding per layer (unit / integration /
|
|
15
|
+
* e2e / visual / a11y)
|
|
16
|
+
* * Sets up observability hooks (logger + optional Sentry)
|
|
17
|
+
* * Initialises blocks_progress = [{ block_id, status: pending }]
|
|
18
|
+
* for every block in workflow.clarification.blocks
|
|
19
|
+
*
|
|
20
|
+
* For alpha.15 the bootstrap is a thin shell -- it sets the
|
|
21
|
+
* workflow state + writes scaffolding markers + the actual
|
|
22
|
+
* heavy lifting (templates, CI config generation, observability
|
|
23
|
+
* wiring) lands incrementally in follow-up commits.
|
|
24
|
+
*
|
|
25
|
+
* ASCII-only.
|
|
26
|
+
*/
|
|
27
|
+
import type { Command } from 'commander';
|
|
28
|
+
export interface BootstrapOptions {
|
|
29
|
+
cwd?: string;
|
|
30
|
+
yes?: boolean;
|
|
31
|
+
stack?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function runBootstrap(opts: BootstrapOptions): Promise<void>;
|
|
34
|
+
export declare function registerBootstrapCommand(program: Command): void;
|
|
35
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IxE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc/D"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf bootstrap` -- Phase V step 14 of PRODUCT_WORKFLOW.md.
|
|
3
|
+
*
|
|
4
|
+
* Once Phase IV (approve) passes the three spec gates, this
|
|
5
|
+
* command initialises the project for the iterative build cycle:
|
|
6
|
+
*
|
|
7
|
+
* * Reads workflow.specs + workflow.clarification.blocks
|
|
8
|
+
* * Scaffolds the project shell (delegates to template engine
|
|
9
|
+
* if the project is brand-new; no-ops if code already exists)
|
|
10
|
+
* * Installs NAC-3 compliance baseline (5 attrs on the shell +
|
|
11
|
+
* manifest stub)
|
|
12
|
+
* * Sets CI gates (lint + typecheck + tests + visual + a11y +
|
|
13
|
+
* NAC-3 manifest check)
|
|
14
|
+
* * Sets up test scaffolding per layer (unit / integration /
|
|
15
|
+
* e2e / visual / a11y)
|
|
16
|
+
* * Sets up observability hooks (logger + optional Sentry)
|
|
17
|
+
* * Initialises blocks_progress = [{ block_id, status: pending }]
|
|
18
|
+
* for every block in workflow.clarification.blocks
|
|
19
|
+
*
|
|
20
|
+
* For alpha.15 the bootstrap is a thin shell -- it sets the
|
|
21
|
+
* workflow state + writes scaffolding markers + the actual
|
|
22
|
+
* heavy lifting (templates, CI config generation, observability
|
|
23
|
+
* wiring) lands incrementally in follow-up commits.
|
|
24
|
+
*
|
|
25
|
+
* ASCII-only.
|
|
26
|
+
*/
|
|
27
|
+
import path from 'node:path';
|
|
28
|
+
import { promises as fs } from 'node:fs';
|
|
29
|
+
import { c, header } from '../ui/colors.js';
|
|
30
|
+
import { readWorkflow, patchWorkflowGroup, writeWorkflow, } from '../workflow/state.js';
|
|
31
|
+
const DEFAULT_STACK = 'React + Vite + TypeScript + Vitest + Playwright + NAC-3';
|
|
32
|
+
async function ensureGitIgnoreHas(projectRoot, patterns) {
|
|
33
|
+
const giPath = path.join(projectRoot, '.gitignore');
|
|
34
|
+
let current = '';
|
|
35
|
+
try {
|
|
36
|
+
current = await fs.readFile(giPath, 'utf-8');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
current = '';
|
|
40
|
+
}
|
|
41
|
+
const lines = new Set(current.split(/\r?\n/));
|
|
42
|
+
for (const p of patterns)
|
|
43
|
+
lines.add(p);
|
|
44
|
+
await fs.writeFile(giPath, [...lines].filter(Boolean).join('\n') + '\n', 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
async function ensureFile(p, contents) {
|
|
47
|
+
try {
|
|
48
|
+
await fs.access(p);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
catch { /* not present */ }
|
|
52
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
53
|
+
await fs.writeFile(p, contents, 'utf-8');
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
export async function runBootstrap(opts) {
|
|
57
|
+
header('Yujin Forge -- bootstrap');
|
|
58
|
+
console.log('');
|
|
59
|
+
const projectRoot = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
|
|
60
|
+
const wf = await readWorkflow(projectRoot);
|
|
61
|
+
/* Gate: Phase IV must have approved all 3 docs with current
|
|
62
|
+
* sha256 matching. */
|
|
63
|
+
const docs = ['rfp', 'arch', 'design'];
|
|
64
|
+
for (const d of docs) {
|
|
65
|
+
const sp = wf.specs?.[d];
|
|
66
|
+
const ap = wf.approvals?.[d];
|
|
67
|
+
if (!sp || !ap) {
|
|
68
|
+
console.log(c.error('Phase IV gate no aprobado todavia (' + d + ' falta).'));
|
|
69
|
+
console.log(c.dim('Corre: ') + c.code('yf approve ' + d));
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (ap.version_sha256 !== sp.sha256) {
|
|
74
|
+
console.log(c.error('Approval STALE para ' + d + '. Doc cambio desde la aprobacion.'));
|
|
75
|
+
console.log(c.dim('Re-aprueba: ') + c.code('yf approve ' + d));
|
|
76
|
+
process.exitCode = 1;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (wf.bootstrap && !opts.yes) {
|
|
81
|
+
console.log(c.warn('Bootstrap previo en ' + wf.bootstrap.done_at + '.'));
|
|
82
|
+
console.log(c.dim('Para volver a correr, ') + c.code('yf bootstrap --yes'));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const stack = opts.stack || DEFAULT_STACK;
|
|
86
|
+
const blocks = wf.clarification?.blocks?.blocks ?? [];
|
|
87
|
+
if (blocks.length === 0) {
|
|
88
|
+
console.log(c.error('No hay bloques definidos en workflow.clarification.blocks.'));
|
|
89
|
+
console.log(c.dim('Corre: ') + c.code('yf clarify blocks'));
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
console.log(c.dim('Stack: ') + c.brand(stack));
|
|
94
|
+
console.log(c.dim('Blocks: ') + c.brand(String(blocks.length) + ' identificados'));
|
|
95
|
+
console.log(c.dim('Project root: ') + c.dim(projectRoot));
|
|
96
|
+
console.log('');
|
|
97
|
+
/* 1. Ensure a NAC-3 manifest stub exists. */
|
|
98
|
+
const manifestPath = path.join(projectRoot, 'src', 'nac', 'manifest.ts');
|
|
99
|
+
const wroteManifest = await ensureFile(manifestPath, [
|
|
100
|
+
'/**',
|
|
101
|
+
' * NAC-3 manifest stub generated by `yf bootstrap`.',
|
|
102
|
+
' * Forge populates this as you decorate components per block.',
|
|
103
|
+
' */',
|
|
104
|
+
"import { defineNacManifest } from '@nac3/runtime';",
|
|
105
|
+
'',
|
|
106
|
+
'export const manifest = defineNacManifest({',
|
|
107
|
+
' app_name: "' + path.basename(projectRoot) + '",',
|
|
108
|
+
' version: "0.0.1",',
|
|
109
|
+
' elements: [',
|
|
110
|
+
' /* Populated per block. See docs/project_design.md. */',
|
|
111
|
+
' ],',
|
|
112
|
+
'});',
|
|
113
|
+
'',
|
|
114
|
+
].join('\n'));
|
|
115
|
+
if (wroteManifest)
|
|
116
|
+
console.log(c.success(' +') + c.dim(' src/nac/manifest.ts'));
|
|
117
|
+
/* 2. CI workflow stub at .github/workflows/ci.yml if missing. */
|
|
118
|
+
const ciPath = path.join(projectRoot, '.github', 'workflows', 'ci.yml');
|
|
119
|
+
const wroteCi = await ensureFile(ciPath, [
|
|
120
|
+
'name: CI',
|
|
121
|
+
'on: { push: { branches: [main] }, pull_request: {} }',
|
|
122
|
+
'jobs:',
|
|
123
|
+
' test:',
|
|
124
|
+
' runs-on: ubuntu-latest',
|
|
125
|
+
' steps:',
|
|
126
|
+
' - uses: actions/checkout@v4',
|
|
127
|
+
' - uses: actions/setup-node@v4',
|
|
128
|
+
' with: { node-version: "20", cache: "npm" }',
|
|
129
|
+
' - run: npm ci',
|
|
130
|
+
' - run: npx yf doctor --json',
|
|
131
|
+
' - run: npm run lint --if-present',
|
|
132
|
+
' - run: npm run typecheck --if-present',
|
|
133
|
+
' - run: npm test --if-present',
|
|
134
|
+
' - run: npx yf coverage structural --if-failing-exit-1',
|
|
135
|
+
'',
|
|
136
|
+
].join('\n'));
|
|
137
|
+
if (wroteCi)
|
|
138
|
+
console.log(c.success(' +') + c.dim(' .github/workflows/ci.yml'));
|
|
139
|
+
/* 3. tests/fresh-user/ scaffold (per SQ Sec 14). */
|
|
140
|
+
const fuReadme = path.join(projectRoot, 'tests', 'fresh-user', 'README.md');
|
|
141
|
+
const wroteFu = await ensureFile(fuReadme, [
|
|
142
|
+
'# tests/fresh-user/',
|
|
143
|
+
'',
|
|
144
|
+
'Per Yujin Forge SQ Sec 14, every feature in this project has',
|
|
145
|
+
'a fresh-user e2e test: clean state -> exercise feature -> assert.',
|
|
146
|
+
'',
|
|
147
|
+
'Forge generates one of these per block as part of the',
|
|
148
|
+
'`yf block dev <block_id>` cycle.',
|
|
149
|
+
'',
|
|
150
|
+
].join('\n'));
|
|
151
|
+
if (wroteFu)
|
|
152
|
+
console.log(c.success(' +') + c.dim(' tests/fresh-user/README.md'));
|
|
153
|
+
/* 4. .gitignore additions. */
|
|
154
|
+
await ensureGitIgnoreHas(projectRoot, [
|
|
155
|
+
'node_modules',
|
|
156
|
+
'dist', 'build', '.next',
|
|
157
|
+
'coverage', '.cache',
|
|
158
|
+
'.env', '.env.local',
|
|
159
|
+
'.yujin-forge',
|
|
160
|
+
'yujin.forge.cache',
|
|
161
|
+
]);
|
|
162
|
+
console.log(c.success(' +') + c.dim(' .gitignore patterns'));
|
|
163
|
+
/* 5. Initialise blocks_progress for every block in workflow. */
|
|
164
|
+
const blocks_progress = blocks.map((b) => ({
|
|
165
|
+
block_id: b.id,
|
|
166
|
+
status: 'pending',
|
|
167
|
+
}));
|
|
168
|
+
await writeWorkflow(projectRoot, { blocks_progress });
|
|
169
|
+
console.log(c.success(' +') + c.dim(' blocks_progress[] initialised (' + blocks.length + ' bloques pending)'));
|
|
170
|
+
/* 6. Persist bootstrap state. */
|
|
171
|
+
await patchWorkflowGroup(projectRoot, 'bootstrap', {
|
|
172
|
+
done_at: new Date().toISOString(),
|
|
173
|
+
stack,
|
|
174
|
+
ci_set: true,
|
|
175
|
+
});
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(c.success('Bootstrap completado.'));
|
|
178
|
+
console.log('');
|
|
179
|
+
/* Suggest the first MVP block. */
|
|
180
|
+
const mvp = wf.clarification?.blocks?.mvp_path ?? [];
|
|
181
|
+
const firstBlock = mvp[0] ?? blocks[0]?.id;
|
|
182
|
+
if (firstBlock) {
|
|
183
|
+
console.log(c.dim('Primer bloque sugerido: ') + c.code('yf block dev ' + firstBlock));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(c.dim('Siguiente paso: ') + c.code('yf block dev <block_id>'));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function registerBootstrapCommand(program) {
|
|
190
|
+
program.command('bootstrap')
|
|
191
|
+
.description('Phase V step 14: initialise project (NAC-3 baseline + CI + tests + observability).')
|
|
192
|
+
.option('--cwd <path>', 'project root (default: current directory)')
|
|
193
|
+
.option('--yes', 're-run even if bootstrap already done')
|
|
194
|
+
.option('--stack <name>', 'override the default stack label')
|
|
195
|
+
.action(async (opts) => {
|
|
196
|
+
try {
|
|
197
|
+
await runBootstrap(opts);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
console.error(c.error(err instanceof Error ? err.message : String(err)));
|
|
201
|
+
process.exitCode = 1;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/chat.d.ts
CHANGED
|
@@ -11,6 +11,9 @@ export interface ChatOptions {
|
|
|
11
11
|
voice?: boolean;
|
|
12
12
|
port?: number;
|
|
13
13
|
cwd?: string;
|
|
14
|
+
/** Open the default browser at the panel URL on startup.
|
|
15
|
+
* Default true; flip with `--no-open` for CI / headless. */
|
|
16
|
+
open?: boolean;
|
|
14
17
|
/** Test mode: start + return without blocking. */
|
|
15
18
|
detach?: boolean;
|
|
16
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;iEAC6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAgCD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgF1D"}
|
package/dist/commands/chat.js
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
2
4
|
import { c, header } from '../ui/colors.js';
|
|
3
5
|
import { startChatServer } from '../chat/server.js';
|
|
4
6
|
import { loadLicense, isAuthorized } from '../license/index.js';
|
|
5
7
|
import { inspectRepoState, formatRepoStateWarning } from '../core/repo_state.js';
|
|
8
|
+
/** Best-effort cross-platform "open URL in default browser".
|
|
9
|
+
* No throw on failure -- the URL is still printed to stdout. */
|
|
10
|
+
function openInBrowser(url) {
|
|
11
|
+
const platform = os.platform();
|
|
12
|
+
let cmd;
|
|
13
|
+
let args;
|
|
14
|
+
if (platform === 'win32') {
|
|
15
|
+
/* `start ""` on Windows requires cmd /s /c so the URL stays
|
|
16
|
+
* a single token; empty-string title arg avoids quoting
|
|
17
|
+
* issues when the URL contains spaces (it does not here,
|
|
18
|
+
* but be defensive). */
|
|
19
|
+
cmd = 'cmd';
|
|
20
|
+
args = ['/s', '/c', 'start', '""', url];
|
|
21
|
+
}
|
|
22
|
+
else if (platform === 'darwin') {
|
|
23
|
+
cmd = 'open';
|
|
24
|
+
args = [url];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
/* Linux + BSD. xdg-open is the freedesktop standard. */
|
|
28
|
+
cmd = 'xdg-open';
|
|
29
|
+
args = [url];
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const child = spawn(cmd, args, { stdio: 'ignore', detached: true, shell: false });
|
|
33
|
+
child.on('error', () => { });
|
|
34
|
+
child.unref();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* swallow */
|
|
38
|
+
}
|
|
39
|
+
}
|
|
6
40
|
export function registerChatCommand(program) {
|
|
7
41
|
program
|
|
8
42
|
.command('chat')
|
|
@@ -10,6 +44,7 @@ export function registerChatCommand(program) {
|
|
|
10
44
|
.option('--no-voice', 'disable voice input (the panel ships voice as a stub today either way)')
|
|
11
45
|
.option('-p, --port <port>', 'panel server port', (v) => parseInt(v, 10), 4847)
|
|
12
46
|
.option('--cwd <path>', 'project root (default: current directory)')
|
|
47
|
+
.option('--no-open', 'do NOT auto-open the panel URL in the default browser (default: open)')
|
|
13
48
|
.action(async (opts) => {
|
|
14
49
|
header('Yujin Forge -- chat');
|
|
15
50
|
console.log('');
|
|
@@ -51,7 +86,17 @@ export function registerChatCommand(program) {
|
|
|
51
86
|
console.log(c.warn(warn));
|
|
52
87
|
}
|
|
53
88
|
console.log('');
|
|
54
|
-
|
|
89
|
+
/* Auto-open the panel URL in the user's default browser.
|
|
90
|
+
* Off-switch: `--no-open`. Commander negates `--no-open`
|
|
91
|
+
* to opts.open=false; default is true. */
|
|
92
|
+
const shouldOpen = opts.open !== false && !opts.detach;
|
|
93
|
+
if (shouldOpen) {
|
|
94
|
+
openInBrowser(started.url);
|
|
95
|
+
console.log(c.dim('Opening the panel in your default browser. Press Ctrl+C to stop.'));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(c.dim('Open the URL above in your browser. Press Ctrl+C to stop.'));
|
|
99
|
+
}
|
|
55
100
|
console.log('');
|
|
56
101
|
if (opts.detach) {
|
|
57
102
|
// Test path: don't block, let the caller close().
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AASA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf clarify <round>` -- Phase II of PRODUCT_WORKFLOW.md
|
|
3
|
+
* (steps 4 through 9).
|
|
4
|
+
*
|
|
5
|
+
* Six rounds of structured clarification:
|
|
6
|
+
*
|
|
7
|
+
* functional step 4: user stories, MVP slice, personas
|
|
8
|
+
* quantitative step 5: volumetria, paralelismo, complejidad
|
|
9
|
+
* structural step 6: persistencia, middleware, lifecycle, workers
|
|
10
|
+
* governance step 7: compliance, audit, retention, RBAC, DR
|
|
11
|
+
* operational step 8: i18n, a11y, cost, monitoring, SLA
|
|
12
|
+
* blocks step 9: descompose system + dep graph + MVP path
|
|
13
|
+
*
|
|
14
|
+
* Each round writes a markdown doc to
|
|
15
|
+
* docs/clarification/0X_<round>.md inside the user's project,
|
|
16
|
+
* and a structured summary to workflow.clarification.<round>.
|
|
17
|
+
*
|
|
18
|
+
* The 6 rounds run in order. Forge refuses to run round N+1
|
|
19
|
+
* until round N is complete. Skip is allowed only when triage
|
|
20
|
+
* tier === simple AND the round is not blocks (which everyone
|
|
21
|
+
* needs).
|
|
22
|
+
*
|
|
23
|
+
* ASCII-only.
|
|
24
|
+
*/
|
|
25
|
+
import type { Command } from 'commander';
|
|
26
|
+
type Round = 'functional' | 'quantitative' | 'structural' | 'governance' | 'operational' | 'blocks';
|
|
27
|
+
export declare function runClarify(round: Round, cwd?: string): Promise<void>;
|
|
28
|
+
export declare function registerClarifyCommand(program: Command): void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=clarify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarify.d.ts","sourceRoot":"","sources":["../../src/commands/clarify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,KAAK,KAAK,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,GAC5C,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAonBrD,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB7D"}
|