@nac3/forge-cli 0.2.0-alpha.1 → 0.2.0-alpha.11

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 (74) hide show
  1. package/dist/bin/yf.d.ts.map +1 -1
  2. package/dist/bin/yf.js +9 -0
  3. package/dist/bin/yf.js.map +1 -1
  4. package/dist/chat/claude.d.ts +12 -15
  5. package/dist/chat/claude.d.ts.map +1 -1
  6. package/dist/chat/claude.js +60 -20
  7. package/dist/chat/claude.js.map +1 -1
  8. package/dist/chat/panel.d.ts.map +1 -1
  9. package/dist/chat/panel.js +90 -3
  10. package/dist/chat/panel.js.map +1 -1
  11. package/dist/chat/server.js +451 -32
  12. package/dist/chat/server.js.map +1 -1
  13. package/dist/chat/tools/audit_consumers.d.ts +66 -0
  14. package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
  15. package/dist/chat/tools/audit_consumers.js +231 -0
  16. package/dist/chat/tools/audit_consumers.js.map +1 -0
  17. package/dist/chat/tools/git.js +4 -4
  18. package/dist/chat/tools/github.js +3 -3
  19. package/dist/chat/tools/lifecycle.js +3 -3
  20. package/dist/chat/tools/manual.js +1 -1
  21. package/dist/chat/tools/reader.js +8 -8
  22. package/dist/chat/tools.d.ts.map +1 -1
  23. package/dist/chat/tools.js +11 -4
  24. package/dist/chat/tools.js.map +1 -1
  25. package/dist/commands/chat.d.ts +3 -0
  26. package/dist/commands/chat.d.ts.map +1 -1
  27. package/dist/commands/chat.js +46 -1
  28. package/dist/commands/chat.js.map +1 -1
  29. package/dist/commands/discover.d.ts +30 -0
  30. package/dist/commands/discover.d.ts.map +1 -0
  31. package/dist/commands/discover.js +178 -0
  32. package/dist/commands/discover.js.map +1 -0
  33. package/dist/commands/doctor.js +94 -42
  34. package/dist/commands/doctor.js.map +1 -1
  35. package/dist/commands/keys_setup.d.ts +53 -0
  36. package/dist/commands/keys_setup.d.ts.map +1 -0
  37. package/dist/commands/keys_setup.js +487 -0
  38. package/dist/commands/keys_setup.js.map +1 -0
  39. package/dist/commands/triage.d.ts +34 -0
  40. package/dist/commands/triage.d.ts.map +1 -0
  41. package/dist/commands/triage.js +228 -0
  42. package/dist/commands/triage.js.map +1 -0
  43. package/dist/commands/voice.d.ts.map +1 -1
  44. package/dist/commands/voice.js +3 -0
  45. package/dist/commands/voice.js.map +1 -1
  46. package/dist/commands/voice_setup.d.ts +37 -0
  47. package/dist/commands/voice_setup.d.ts.map +1 -0
  48. package/dist/commands/voice_setup.js +308 -0
  49. package/dist/commands/voice_setup.js.map +1 -0
  50. package/dist/core/keys_envelope.d.ts +54 -0
  51. package/dist/core/keys_envelope.d.ts.map +1 -0
  52. package/dist/core/keys_envelope.js +135 -0
  53. package/dist/core/keys_envelope.js.map +1 -0
  54. package/dist/license/hito4_client.d.ts +17 -1
  55. package/dist/license/hito4_client.d.ts.map +1 -1
  56. package/dist/license/hito4_client.js +71 -10
  57. package/dist/license/hito4_client.js.map +1 -1
  58. package/dist/license/index.d.ts.map +1 -1
  59. package/dist/license/index.js +7 -0
  60. package/dist/license/index.js.map +1 -1
  61. package/dist/version.d.ts +1 -1
  62. package/dist/version.d.ts.map +1 -1
  63. package/dist/version.js +1 -1
  64. package/dist/version.js.map +1 -1
  65. package/dist/voice/intents.d.ts +1 -1
  66. package/dist/voice/intents.js +0 -0
  67. package/dist/voice/providers/google.d.ts.map +1 -1
  68. package/dist/voice/providers/google.js +129 -23
  69. package/dist/voice/providers/google.js.map +1 -1
  70. package/dist/workflow/state.d.ts +190 -0
  71. package/dist/workflow/state.d.ts.map +1 -0
  72. package/dist/workflow/state.js +119 -0
  73. package/dist/workflow/state.js.map +1 -0
  74. package/package.json +3 -3
@@ -20,6 +20,8 @@
20
20
  *
21
21
  * ASCII-only.
22
22
  */
23
+ import path from 'node:path';
24
+ import { promises as fs } from 'node:fs';
23
25
  import { Vault } from '../../vault/store.js';
24
26
  import { configDir } from '../../license/index.js';
25
27
  const STT_ENDPOINT = 'https://speech.googleapis.com/v1/speech:recognize';
@@ -27,6 +29,60 @@ const TTS_ENDPOINT = 'https://texttospeech.googleapis.com/v1/text:synthesize';
27
29
  const DEFAULT_STT_LANGUAGE = 'en-US';
28
30
  const DEFAULT_TTS_LANGUAGE = 'en-US';
29
31
  const DEFAULT_TTS_VOICE = 'en-US-Neural2-C';
32
+ /** Per-locale voice persona for Google Cloud TTS Neural2 voices.
33
+ * Selected to sound native to the locale + warm + neutral
34
+ * gender where possible. Keys are lowercased; we lookup with
35
+ * region first (es-ar) then language alone (es) as fallback. */
36
+ const LOCALE_TO_VOICE = {
37
+ /* Spanish family. ES-AR uses the rioplatense (Spain Neural2-A
38
+ sounds neutral enough; Argentina-specific voices are limited).
39
+ Mexican Latin Spanish prefers Wavenet-A. */
40
+ 'es': 'es-ES-Neural2-A',
41
+ 'es-ar': 'es-US-Neural2-A',
42
+ 'es-es': 'es-ES-Neural2-A',
43
+ 'es-mx': 'es-US-Neural2-A',
44
+ 'es-us': 'es-US-Neural2-A',
45
+ /* English. en-US-Neural2-C is warm + neutral. */
46
+ 'en': 'en-US-Neural2-C',
47
+ 'en-us': 'en-US-Neural2-C',
48
+ 'en-gb': 'en-GB-Neural2-A',
49
+ /* Portuguese. */
50
+ 'pt': 'pt-BR-Neural2-A',
51
+ 'pt-br': 'pt-BR-Neural2-A',
52
+ 'pt-pt': 'pt-PT-Wavenet-A',
53
+ /* French. */
54
+ 'fr': 'fr-FR-Neural2-A',
55
+ 'fr-fr': 'fr-FR-Neural2-A',
56
+ 'fr-ca': 'fr-CA-Neural1-A',
57
+ /* Italian. */
58
+ 'it': 'it-IT-Neural2-A',
59
+ 'it-it': 'it-IT-Neural2-A',
60
+ /* German. */
61
+ 'de': 'de-DE-Neural2-A',
62
+ 'de-de': 'de-DE-Neural2-A',
63
+ /* Japanese. */
64
+ 'ja': 'ja-JP-Neural2-B',
65
+ 'ja-jp': 'ja-JP-Neural2-B',
66
+ /* Mandarin Chinese. */
67
+ 'zh': 'cmn-CN-Wavenet-A',
68
+ 'zh-cn': 'cmn-CN-Wavenet-A',
69
+ 'zh-tw': 'cmn-TW-Wavenet-A',
70
+ /* Hindi. */
71
+ 'hi': 'hi-IN-Neural2-A',
72
+ 'hi-in': 'hi-IN-Neural2-A',
73
+ /* Arabic. */
74
+ 'ar': 'ar-XA-Wavenet-A',
75
+ 'ar-xa': 'ar-XA-Wavenet-A',
76
+ };
77
+ function voiceForLocale(key) {
78
+ if (LOCALE_TO_VOICE[key])
79
+ return LOCALE_TO_VOICE[key];
80
+ /* Strip region: es-ar -> es. */
81
+ const base = key.split('-')[0];
82
+ if (base && LOCALE_TO_VOICE[base])
83
+ return LOCALE_TO_VOICE[base];
84
+ return undefined;
85
+ }
30
86
  const DEFAULT_TTS_FORMAT = 'mp3';
31
87
  const VAULT_SLOT = 'google_voice';
32
88
  /** Map our SttAudioFormat to Google's encoding enum. */
@@ -51,13 +107,66 @@ function ttsFormatToGoogleEncoding(format) {
51
107
  default: return 'MP3';
52
108
  }
53
109
  }
54
- async function readKey(opener) {
55
- const vault = await opener();
56
- if (!vault.has(VAULT_SLOT)) {
57
- throw new Error('google voice: vault slot "' + VAULT_SLOT + '" not set. '
58
- + 'Run `yf vault set ' + VAULT_SLOT + '` to configure your Google Cloud API key.');
110
+ /** Read the per-use-case key from provider_keys.json (alpha.4+
111
+ * canonical BYOK path written by `yf keys setup`). STT prefers
112
+ * google_stt_key; TTS prefers google_tts_key; if neither is
113
+ * set but the other one is, we fall back to the cross-set key
114
+ * (STT keys typically work for TTS and vice versa on Google
115
+ * Cloud projects with both APIs enabled). */
116
+ async function readProviderKey(useCase) {
117
+ try {
118
+ const p = path.join(configDir(), 'provider_keys.json');
119
+ const raw = await fs.readFile(p, 'utf-8');
120
+ const parsed = JSON.parse(raw);
121
+ const stt = typeof parsed.google_stt_key === 'string' ? parsed.google_stt_key.trim() : '';
122
+ const tts = typeof parsed.google_tts_key === 'string' ? parsed.google_tts_key.trim() : '';
123
+ const primary = useCase === 'stt' ? stt : tts;
124
+ const fallback = useCase === 'stt' ? tts : stt;
125
+ if (primary !== '')
126
+ return primary;
127
+ if (fallback !== '')
128
+ return fallback;
129
+ return null;
130
+ }
131
+ catch (err) {
132
+ if (err.code !== 'ENOENT'
133
+ && !(err instanceof SyntaxError)) {
134
+ /* swallow real IO errors -- caller falls back to vault */
135
+ }
136
+ return null;
137
+ }
138
+ }
139
+ async function readKey(opener, useCase) {
140
+ /* 1. BYOK provider_keys.json -- canonical alpha.4+ path. */
141
+ const fromBYOK = await readProviderKey(useCase);
142
+ if (fromBYOK)
143
+ return fromBYOK;
144
+ /* 2. Vault slot google_voice -- legacy / shared path. */
145
+ try {
146
+ const vault = await opener();
147
+ if (vault.has(VAULT_SLOT)) {
148
+ return vault.get(VAULT_SLOT);
149
+ }
150
+ }
151
+ catch { /* vault unavailable -- fall through to the throw */ }
152
+ const slotName = useCase === 'stt' ? 'google_stt_key' : 'google_tts_key';
153
+ throw new Error('google voice: no key found. Configure either:\n'
154
+ + ' - `yf keys setup` (writes ' + slotName + ' to provider_keys.json) (recommended)\n'
155
+ + ' - `yf vault set ' + VAULT_SLOT + ' <your Google Cloud API key>` (legacy)');
156
+ }
157
+ /** Cheap "are we configured?" check used by readyToRun. Mirrors
158
+ * the resolution order in readKey + returns boolean instead of
159
+ * throwing. */
160
+ async function hasKey(opener, useCase) {
161
+ if ((await readProviderKey(useCase)) !== null)
162
+ return true;
163
+ try {
164
+ const vault = await opener();
165
+ return vault.has(VAULT_SLOT);
166
+ }
167
+ catch {
168
+ return false;
59
169
  }
60
- return vault.get(VAULT_SLOT);
61
170
  }
62
171
  async function safeText(r) {
63
172
  try {
@@ -79,13 +188,7 @@ export class GoogleSttProvider {
79
188
  this.vaultOpener = opts.vaultOpener ?? (() => Vault.open({ configDir: configDir() }));
80
189
  }
81
190
  async readyToRun() {
82
- try {
83
- const vault = await this.vaultOpener();
84
- return vault.has(VAULT_SLOT);
85
- }
86
- catch {
87
- return false;
88
- }
191
+ return hasKey(this.vaultOpener, 'stt');
89
192
  }
90
193
  async transcribe(req) {
91
194
  if (!req.audio || req.audio.length === 0) {
@@ -93,7 +196,7 @@ export class GoogleSttProvider {
93
196
  }
94
197
  let apiKey;
95
198
  try {
96
- apiKey = await readKey(this.vaultOpener);
199
+ apiKey = await readKey(this.vaultOpener, 'stt');
97
200
  }
98
201
  catch (err) {
99
202
  throw err;
@@ -165,20 +268,23 @@ export class GoogleTtsProvider {
165
268
  this.vaultOpener = opts.vaultOpener ?? (() => Vault.open({ configDir: configDir() }));
166
269
  }
167
270
  async readyToRun() {
168
- try {
169
- const vault = await this.vaultOpener();
170
- return vault.has(VAULT_SLOT);
171
- }
172
- catch {
173
- return false;
174
- }
271
+ return hasKey(this.vaultOpener, 'tts');
175
272
  }
176
273
  async synthesize(req) {
177
274
  if (!req.text || req.text.trim() === '') {
178
275
  throw new Error('google TTS: text is empty');
179
276
  }
180
- const apiKey = await readKey(this.vaultOpener);
181
- const voice = req.voice ?? DEFAULT_TTS_VOICE;
277
+ const apiKey = await readKey(this.vaultOpener, 'tts');
278
+ /* Voice persona resolution. Priority:
279
+ * 1. explicit req.voice (caller overrides)
280
+ * 2. mapped from req.language via LOCALE_TO_VOICE
281
+ * 3. DEFAULT_TTS_VOICE (en-US-Neural2-C)
282
+ * This makes the bot sound natural per language without
283
+ * the caller having to know Google's voice catalog. */
284
+ const langKey = (req.language || '').toLowerCase();
285
+ const voice = req.voice
286
+ ?? (langKey ? voiceForLocale(langKey) : undefined)
287
+ ?? DEFAULT_TTS_VOICE;
182
288
  const language = req.language ?? this.inferLanguageFromVoice(voice) ?? DEFAULT_TTS_LANGUAGE;
183
289
  const format = req.format ?? DEFAULT_TTS_FORMAT;
184
290
  const encoding = ttsFormatToGoogleEncoding(format);
@@ -1 +1 @@
1
- {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/voice/providers/google.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/voice/providers/google.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Yujin Forge -- Product Workflow state.
3
+ *
4
+ * Shared persistence layer for the 18-step methodology defined
5
+ * in docs/PRODUCT_WORKFLOW.md. State lives in the project's
6
+ * yujin.forge.json under `workflow.*` so it survives across
7
+ * sessions + can be inspected + shared via the git repo.
8
+ *
9
+ * Every command in the workflow (yf triage, yf discover, yf
10
+ * clarify, yf spec, yf approve, yf bootstrap, yf block dev, yf
11
+ * deploy, yf manual, yf metrics, yf iterate) reads + writes
12
+ * through this module. The chat tool surface (forge_triage,
13
+ * forge_discover, etc) does the same -- the underlying state
14
+ * is identical regardless of entry point.
15
+ *
16
+ * Schema:
17
+ *
18
+ * workflow: {
19
+ * tier: 'simple' | 'medium' | 'full' | null,
20
+ * tier_reason: string,
21
+ * tier_decided_at: ISO,
22
+ *
23
+ * intent: { ... } // Phase I step 3
24
+ * legacy_audit: { ... } // Phase I step 3.5
25
+ * vault_inventory: { ... } // Phase I step 2 audit
26
+ *
27
+ * clarification: {
28
+ * functional: { done_at, summary, doc_path }, // step 4
29
+ * nfr_quantitative: { done_at, summary, doc_path }, // step 5
30
+ * nfr_structural: { done_at, summary, doc_path }, // step 6
31
+ * nfr_governance: { done_at, summary, doc_path }, // step 7
32
+ * nfr_operational: { done_at, summary, doc_path }, // step 8
33
+ * blocks: { done_at, blocks: [...] }, // step 9
34
+ * },
35
+ *
36
+ * specs: {
37
+ * rfp: { done_at, version, doc_path, sha256 }, // step 10
38
+ * arch: { done_at, version, doc_path, sha256 }, // step 11
39
+ * design: { done_at, version, doc_path, sha256 }, // step 12
40
+ * },
41
+ *
42
+ * approvals: {
43
+ * rfp: { approved_at, version_sha256 }, // step 13
44
+ * arch: { approved_at, version_sha256 }, // step 13
45
+ * design: { approved_at, version_sha256 }, // step 13
46
+ * },
47
+ *
48
+ * bootstrap: { done_at, stack, ci_set }, // step 14
49
+ *
50
+ * blocks_progress: [ // step 15
51
+ * { block_id, status, tests_green_at, deployed_at }
52
+ * ],
53
+ *
54
+ * deploy: { ... } // step 16
55
+ * postlaunch:{ ... } // step 17
56
+ * iterations:[{ at, type, summary }] // step 18
57
+ * }
58
+ *
59
+ * ASCII-only.
60
+ */
61
+ export type WorkflowTier = 'simple' | 'medium' | 'full';
62
+ export interface IntentState {
63
+ operation: 'migrate' | 'new' | 'modify' | null;
64
+ target: 'desktop' | 'mobile' | 'responsive' | 'web-and-mobile' | null;
65
+ input_channel: 'chat-text' | 'voice' | 'document-paste' | null;
66
+ project_state: 'no-code' | 'local-repo' | 'remote-repo' | 'deployed' | null;
67
+ legacy_framework: string | null;
68
+ preferred_stack: string | null;
69
+ use_case: 'hobby' | 'poc' | 'internal' | 'commercial' | null;
70
+ decided_at: string;
71
+ }
72
+ export interface LegacyAuditState {
73
+ ran_at: string;
74
+ framework: string;
75
+ framework_version: string;
76
+ total_files: number;
77
+ tsx_files: number;
78
+ has_tests: boolean;
79
+ nac3_readiness: number;
80
+ tech_debt_signals: string[];
81
+ deprecated_deps: string[];
82
+ }
83
+ export interface VaultInventoryState {
84
+ ran_at: string;
85
+ /** Per family: configured | skipped | unknown.
86
+ * Skipped families are flagged as debt for step 16 (deploy). */
87
+ families: Record<string, 'configured' | 'skipped' | 'unknown'>;
88
+ }
89
+ export interface ClarificationRoundState {
90
+ done_at: string;
91
+ summary: string;
92
+ doc_path?: string;
93
+ }
94
+ export interface BlockPlanItem {
95
+ id: string;
96
+ name: string;
97
+ effort: 'S' | 'M' | 'L' | 'XL';
98
+ dependencies: string[];
99
+ mvp: boolean;
100
+ }
101
+ export interface ClarificationState {
102
+ functional?: ClarificationRoundState;
103
+ nfr_quantitative?: ClarificationRoundState;
104
+ nfr_structural?: ClarificationRoundState;
105
+ nfr_governance?: ClarificationRoundState;
106
+ nfr_operational?: ClarificationRoundState;
107
+ blocks?: {
108
+ done_at: string;
109
+ blocks: BlockPlanItem[];
110
+ mvp_path: string[];
111
+ };
112
+ }
113
+ export interface SpecDocState {
114
+ done_at: string;
115
+ version: number;
116
+ doc_path: string;
117
+ sha256: string;
118
+ }
119
+ export interface ApprovalState {
120
+ approved_at: string;
121
+ version_sha256: string;
122
+ }
123
+ export interface BootstrapState {
124
+ done_at: string;
125
+ stack: string;
126
+ ci_set: boolean;
127
+ }
128
+ export interface BlockProgressState {
129
+ block_id: string;
130
+ status: 'pending' | 'in_progress' | 'green' | 'failed';
131
+ tests_green_at?: string;
132
+ deployed_at?: string;
133
+ }
134
+ export interface DeployState {
135
+ done_at: string;
136
+ pipeline: string;
137
+ url: string;
138
+ smoke_at: string;
139
+ }
140
+ export interface PostLaunchState {
141
+ manual_at: string;
142
+ dashboards_at: string;
143
+ feedback_channel: string;
144
+ }
145
+ export interface IterationEntry {
146
+ at: string;
147
+ type: 'bug' | 'feature_small' | 'feature_large' | 'nfr_change' | 'pivot';
148
+ summary: string;
149
+ }
150
+ export interface WorkflowState {
151
+ tier?: WorkflowTier;
152
+ tier_reason?: string;
153
+ tier_decided_at?: string;
154
+ intent?: IntentState;
155
+ legacy_audit?: LegacyAuditState;
156
+ vault_inventory?: VaultInventoryState;
157
+ clarification?: ClarificationState;
158
+ specs?: {
159
+ rfp?: SpecDocState;
160
+ arch?: SpecDocState;
161
+ design?: SpecDocState;
162
+ };
163
+ approvals?: {
164
+ rfp?: ApprovalState;
165
+ arch?: ApprovalState;
166
+ design?: ApprovalState;
167
+ };
168
+ bootstrap?: BootstrapState;
169
+ blocks_progress?: BlockProgressState[];
170
+ deploy?: DeployState;
171
+ postlaunch?: PostLaunchState;
172
+ iterations?: IterationEntry[];
173
+ }
174
+ interface ProjectConfig {
175
+ workflow?: WorkflowState;
176
+ [key: string]: unknown;
177
+ }
178
+ export declare function loadConfig(projectRoot: string): Promise<ProjectConfig>;
179
+ export declare function saveConfig(projectRoot: string, cfg: ProjectConfig): Promise<void>;
180
+ export declare function readWorkflow(projectRoot: string): Promise<WorkflowState>;
181
+ export declare function writeWorkflow(projectRoot: string, patch: Partial<WorkflowState>): Promise<WorkflowState>;
182
+ /** Update a NESTED key under workflow.<group> (clarification,
183
+ * specs, approvals, blocks_progress) without overwriting sibling
184
+ * keys at the same level. */
185
+ export declare function patchWorkflowGroup<K extends keyof WorkflowState>(projectRoot: string, group: K, patch: Partial<NonNullable<WorkflowState[K]>>): Promise<WorkflowState>;
186
+ /** Append to workflow.iterations[]. Idempotent: callers should
187
+ * generate a unique-ish `at` per call so duplicates do not stack. */
188
+ export declare function appendIteration(projectRoot: string, entry: IterationEntry): Promise<WorkflowState>;
189
+ export {};
190
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Yujin Forge -- Product Workflow state.
3
+ *
4
+ * Shared persistence layer for the 18-step methodology defined
5
+ * in docs/PRODUCT_WORKFLOW.md. State lives in the project's
6
+ * yujin.forge.json under `workflow.*` so it survives across
7
+ * sessions + can be inspected + shared via the git repo.
8
+ *
9
+ * Every command in the workflow (yf triage, yf discover, yf
10
+ * clarify, yf spec, yf approve, yf bootstrap, yf block dev, yf
11
+ * deploy, yf manual, yf metrics, yf iterate) reads + writes
12
+ * through this module. The chat tool surface (forge_triage,
13
+ * forge_discover, etc) does the same -- the underlying state
14
+ * is identical regardless of entry point.
15
+ *
16
+ * Schema:
17
+ *
18
+ * workflow: {
19
+ * tier: 'simple' | 'medium' | 'full' | null,
20
+ * tier_reason: string,
21
+ * tier_decided_at: ISO,
22
+ *
23
+ * intent: { ... } // Phase I step 3
24
+ * legacy_audit: { ... } // Phase I step 3.5
25
+ * vault_inventory: { ... } // Phase I step 2 audit
26
+ *
27
+ * clarification: {
28
+ * functional: { done_at, summary, doc_path }, // step 4
29
+ * nfr_quantitative: { done_at, summary, doc_path }, // step 5
30
+ * nfr_structural: { done_at, summary, doc_path }, // step 6
31
+ * nfr_governance: { done_at, summary, doc_path }, // step 7
32
+ * nfr_operational: { done_at, summary, doc_path }, // step 8
33
+ * blocks: { done_at, blocks: [...] }, // step 9
34
+ * },
35
+ *
36
+ * specs: {
37
+ * rfp: { done_at, version, doc_path, sha256 }, // step 10
38
+ * arch: { done_at, version, doc_path, sha256 }, // step 11
39
+ * design: { done_at, version, doc_path, sha256 }, // step 12
40
+ * },
41
+ *
42
+ * approvals: {
43
+ * rfp: { approved_at, version_sha256 }, // step 13
44
+ * arch: { approved_at, version_sha256 }, // step 13
45
+ * design: { approved_at, version_sha256 }, // step 13
46
+ * },
47
+ *
48
+ * bootstrap: { done_at, stack, ci_set }, // step 14
49
+ *
50
+ * blocks_progress: [ // step 15
51
+ * { block_id, status, tests_green_at, deployed_at }
52
+ * ],
53
+ *
54
+ * deploy: { ... } // step 16
55
+ * postlaunch:{ ... } // step 17
56
+ * iterations:[{ at, type, summary }] // step 18
57
+ * }
58
+ *
59
+ * ASCII-only.
60
+ */
61
+ import { promises as fs } from 'node:fs';
62
+ import path from 'node:path';
63
+ const CONFIG_FILE = 'yujin.forge.json';
64
+ function configPath(projectRoot) {
65
+ return path.join(projectRoot, CONFIG_FILE);
66
+ }
67
+ export async function loadConfig(projectRoot) {
68
+ try {
69
+ const raw = await fs.readFile(configPath(projectRoot), 'utf-8');
70
+ const parsed = JSON.parse(raw);
71
+ if (parsed && typeof parsed === 'object')
72
+ return parsed;
73
+ }
74
+ catch (err) {
75
+ if (err.code !== 'ENOENT'
76
+ && !(err instanceof SyntaxError)) {
77
+ throw err;
78
+ }
79
+ }
80
+ return {};
81
+ }
82
+ export async function saveConfig(projectRoot, cfg) {
83
+ const text = JSON.stringify(cfg, null, 2) + '\n';
84
+ await fs.writeFile(configPath(projectRoot), text, 'utf-8');
85
+ }
86
+ export async function readWorkflow(projectRoot) {
87
+ const cfg = await loadConfig(projectRoot);
88
+ return cfg.workflow ?? {};
89
+ }
90
+ export async function writeWorkflow(projectRoot, patch) {
91
+ const cfg = await loadConfig(projectRoot);
92
+ cfg.workflow = { ...(cfg.workflow ?? {}), ...patch };
93
+ await saveConfig(projectRoot, cfg);
94
+ return cfg.workflow;
95
+ }
96
+ /** Update a NESTED key under workflow.<group> (clarification,
97
+ * specs, approvals, blocks_progress) without overwriting sibling
98
+ * keys at the same level. */
99
+ export async function patchWorkflowGroup(projectRoot, group, patch) {
100
+ const cfg = await loadConfig(projectRoot);
101
+ const wf = cfg.workflow ?? {};
102
+ const prev = (wf[group] ?? {});
103
+ const merged = { ...prev, ...patch };
104
+ cfg.workflow = { ...wf, [group]: merged };
105
+ await saveConfig(projectRoot, cfg);
106
+ return cfg.workflow;
107
+ }
108
+ /** Append to workflow.iterations[]. Idempotent: callers should
109
+ * generate a unique-ish `at` per call so duplicates do not stack. */
110
+ export async function appendIteration(projectRoot, entry) {
111
+ const cfg = await loadConfig(projectRoot);
112
+ const wf = cfg.workflow ?? {};
113
+ const list = Array.isArray(wf.iterations) ? wf.iterations : [];
114
+ list.push(entry);
115
+ cfg.workflow = { ...wf, iterations: list };
116
+ await saveConfig(projectRoot, cfg);
117
+ return cfg.workflow;
118
+ }
119
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "0.2.0-alpha.1",
3
+ "version": "0.2.0-alpha.11",
4
4
  "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Pablo Kuschnirof <pablo@rpaforce.com>",
@@ -36,6 +36,7 @@
36
36
  "node-html-parser": "6.1.13",
37
37
  "pdfjs-dist": "^4.10.38",
38
38
  "prompts": "2.4.2",
39
+ "typescript": "5.7.2",
39
40
  "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
40
41
  },
41
42
  "devDependencies": {
@@ -45,12 +46,11 @@
45
46
  "pixelmatch": "^7.2.0",
46
47
  "pngjs": "^7.0.0",
47
48
  "tsx": "4.19.2",
48
- "typescript": "5.7.2",
49
49
  "vitest": "2.1.8"
50
50
  },
51
51
  "engines": {
52
52
  "node": ">=18.17",
53
- "pnpm": ">=10"
53
+ "pnpm": ">=9"
54
54
  },
55
55
  "packageManager": "pnpm@11.3.0",
56
56
  "files": [