@nac3/forge-cli 1.21.1 → 1.21.3

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 (115) hide show
  1. package/dist/agents/bridge.d.ts.map +1 -1
  2. package/dist/agents/bridge.js +2 -1
  3. package/dist/agents/bridge.js.map +1 -1
  4. package/dist/agents/runtime.d.ts.map +1 -1
  5. package/dist/agents/runtime.js +2 -1
  6. package/dist/agents/runtime.js.map +1 -1
  7. package/dist/agents/store.d.ts.map +1 -1
  8. package/dist/agents/store.js +3 -2
  9. package/dist/agents/store.js.map +1 -1
  10. package/dist/chat/graph_auto_ingest.d.ts +2 -0
  11. package/dist/chat/graph_auto_ingest.d.ts.map +1 -1
  12. package/dist/chat/graph_auto_ingest.js +98 -23
  13. package/dist/chat/graph_auto_ingest.js.map +1 -1
  14. package/dist/chat/server.d.ts.map +1 -1
  15. package/dist/chat/server.js +15 -1
  16. package/dist/chat/server.js.map +1 -1
  17. package/dist/chat/tools/fs_editor.d.ts.map +1 -1
  18. package/dist/chat/tools/fs_editor.js +2 -1
  19. package/dist/chat/tools/fs_editor.js.map +1 -1
  20. package/dist/chat/tools/project_lifecycle.d.ts.map +1 -1
  21. package/dist/chat/tools/project_lifecycle.js +3 -2
  22. package/dist/chat/tools/project_lifecycle.js.map +1 -1
  23. package/dist/chat/tools/reader.d.ts.map +1 -1
  24. package/dist/chat/tools/reader.js +2 -1
  25. package/dist/chat/tools/reader.js.map +1 -1
  26. package/dist/commands/keys_setup.d.ts.map +1 -1
  27. package/dist/commands/keys_setup.js +2 -1
  28. package/dist/commands/keys_setup.js.map +1 -1
  29. package/dist/core/atomic_write.d.ts.map +1 -1
  30. package/dist/core/atomic_write.js +7 -0
  31. package/dist/core/atomic_write.js.map +1 -1
  32. package/dist/core/brain_config.d.ts.map +1 -1
  33. package/dist/core/brain_config.js +2 -1
  34. package/dist/core/brain_config.js.map +1 -1
  35. package/dist/core/budget.d.ts.map +1 -1
  36. package/dist/core/budget.js +3 -2
  37. package/dist/core/budget.js.map +1 -1
  38. package/dist/core/cost_meter.d.ts.map +1 -1
  39. package/dist/core/cost_meter.js +2 -1
  40. package/dist/core/cost_meter.js.map +1 -1
  41. package/dist/core/limits_config.d.ts.map +1 -1
  42. package/dist/core/limits_config.js +2 -1
  43. package/dist/core/limits_config.js.map +1 -1
  44. package/dist/core/polar.d.ts.map +1 -1
  45. package/dist/core/polar.js +2 -1
  46. package/dist/core/polar.js.map +1 -1
  47. package/dist/core/projects.d.ts.map +1 -1
  48. package/dist/core/projects.js +2 -1
  49. package/dist/core/projects.js.map +1 -1
  50. package/dist/core/provider_keys.d.ts.map +1 -1
  51. package/dist/core/provider_keys.js +2 -1
  52. package/dist/core/provider_keys.js.map +1 -1
  53. package/dist/core/whats_new.d.ts.map +1 -1
  54. package/dist/core/whats_new.js +24 -1
  55. package/dist/core/whats_new.js.map +1 -1
  56. package/dist/mcp/config.d.ts.map +1 -1
  57. package/dist/mcp/config.js +2 -1
  58. package/dist/mcp/config.js.map +1 -1
  59. package/dist/mcp/plan_bridges.d.ts.map +1 -1
  60. package/dist/mcp/plan_bridges.js +15 -5
  61. package/dist/mcp/plan_bridges.js.map +1 -1
  62. package/dist/mcp/state.d.ts.map +1 -1
  63. package/dist/mcp/state.js +3 -2
  64. package/dist/mcp/state.js.map +1 -1
  65. package/dist/nac3/dispatch_log.d.ts.map +1 -1
  66. package/dist/nac3/dispatch_log.js +2 -1
  67. package/dist/nac3/dispatch_log.js.map +1 -1
  68. package/dist/pending/store.d.ts.map +1 -1
  69. package/dist/pending/store.js +2 -1
  70. package/dist/pending/store.js.map +1 -1
  71. package/dist/sizing/store.d.ts.map +1 -1
  72. package/dist/sizing/store.js +2 -1
  73. package/dist/sizing/store.js.map +1 -1
  74. package/dist/support/github_dispatcher.d.ts.map +1 -1
  75. package/dist/support/github_dispatcher.js +2 -1
  76. package/dist/support/github_dispatcher.js.map +1 -1
  77. package/dist/support/reports.d.ts.map +1 -1
  78. package/dist/support/reports.js +2 -1
  79. package/dist/support/reports.js.map +1 -1
  80. package/dist/urazuke/gates_data.d.ts.map +1 -1
  81. package/dist/urazuke/gates_data.js +2 -1
  82. package/dist/urazuke/gates_data.js.map +1 -1
  83. package/dist/urazuke/prompts_client.d.ts.map +1 -1
  84. package/dist/urazuke/prompts_client.js +2 -1
  85. package/dist/urazuke/prompts_client.js.map +1 -1
  86. package/dist/urazuke/receipts.d.ts.map +1 -1
  87. package/dist/urazuke/receipts.js +2 -1
  88. package/dist/urazuke/receipts.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/dist/voice/router.d.ts.map +1 -1
  92. package/dist/voice/router.js +2 -1
  93. package/dist/voice/router.js.map +1 -1
  94. package/dist/voice/voiceprint/store.d.ts.map +1 -1
  95. package/dist/voice/voiceprint/store.js +2 -1
  96. package/dist/voice/voiceprint/store.js.map +1 -1
  97. package/dist/workflow/config.d.ts.map +1 -1
  98. package/dist/workflow/config.js +2 -1
  99. package/dist/workflow/config.js.map +1 -1
  100. package/dist/workflow/instances.d.ts.map +1 -1
  101. package/dist/workflow/instances.js +2 -1
  102. package/dist/workflow/instances.js.map +1 -1
  103. package/package.json +2 -2
  104. package/dist/chat/flow_layout.d.ts +0 -76
  105. package/dist/chat/flow_layout.d.ts.map +0 -1
  106. package/dist/chat/flow_layout.js +0 -247
  107. package/dist/chat/flow_layout.js.map +0 -1
  108. package/dist/commands/director.d.ts +0 -37
  109. package/dist/commands/director.d.ts.map +0 -1
  110. package/dist/commands/director.js +0 -290
  111. package/dist/commands/director.js.map +0 -1
  112. package/dist/commands/voice_setup.d.ts +0 -37
  113. package/dist/commands/voice_setup.d.ts.map +0 -1
  114. package/dist/commands/voice_setup.js +0 -308
  115. package/dist/commands/voice_setup.js.map +0 -1
@@ -1,308 +0,0 @@
1
- import { promises as fs } from 'node:fs';
2
- import path from 'node:path';
3
- import os from 'node:os';
4
- import prompts from 'prompts';
5
- import { c, header } from '../ui/colors.js';
6
- import { Vault } from '../vault/store.js';
7
- import { configDir } from '../license/index.js';
8
- import { readLicense } from '../core/polar.js';
9
- import { signBearer, HITO4_BASE_URL } from '../license/hito4_client.js';
10
- import { encryptUserKeys, decryptUserKeys, envelopeToBlob, envelopeFromBlob, } from '../core/keys_envelope.js';
11
- const VAULT_SECRET_SLOT = 'yf_server_api_key';
12
- const LOCAL_KEYS_FILE = 'provider_keys.json';
13
- function localKeysPath() {
14
- const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
15
- return path.join(home, '.yujin-forge', LOCAL_KEYS_FILE);
16
- }
17
- async function readLocalKeys() {
18
- try {
19
- const raw = await fs.readFile(localKeysPath(), 'utf-8');
20
- const parsed = JSON.parse(raw);
21
- if (parsed && parsed.v === 1)
22
- return parsed;
23
- }
24
- catch { /* missing or malformed -- treat as empty */ }
25
- return { v: 1, updated_at: '1970-01-01T00:00:00Z' };
26
- }
27
- async function writeLocalKeys(payload) {
28
- const p = localKeysPath();
29
- await fs.mkdir(path.dirname(p), { recursive: true });
30
- const tmp = p + '.tmp';
31
- await fs.writeFile(tmp, JSON.stringify(payload, null, 2), 'utf-8');
32
- await fs.rename(tmp, p);
33
- }
34
- function maskKey(k) {
35
- if (!k)
36
- return '(none)';
37
- if (k.length <= 8)
38
- return '****';
39
- return k.slice(0, 4) + '...' + k.slice(-4);
40
- }
41
- async function loadServerSecret() {
42
- const vault = await Vault.open({ configDir: configDir() });
43
- if (!vault.has(VAULT_SECRET_SLOT)) {
44
- throw new Error('voice setup: vault slot "' + VAULT_SECRET_SLOT + '" is empty. '
45
- + 'Run `yf vault set ' + VAULT_SECRET_SLOT + '` with the value '
46
- + 'provided at signup (or your tenant admin) before configuring '
47
- + 'voice providers.');
48
- }
49
- return vault.get(VAULT_SECRET_SLOT);
50
- }
51
- async function loadUserHandle() {
52
- const lic = await readLicense();
53
- if (!lic.user_handle) {
54
- throw new Error('voice setup: no user_handle on the local license cache. '
55
- + 'Run `yf license activate --user-handle <you@example.com>` first.');
56
- }
57
- return lic.user_handle;
58
- }
59
- async function pushToServer(payload) {
60
- const secret = await loadServerSecret();
61
- const handle = await loadUserHandle();
62
- const env = await encryptUserKeys(payload, secret);
63
- const blob = envelopeToBlob(env);
64
- const bearer = signBearer(secret, handle);
65
- const url = HITO4_BASE_URL.replace(/\/+$/, '') + '/v1/keys-sync/' + encodeURIComponent(handle);
66
- const r = await fetch(url, {
67
- method: 'POST',
68
- headers: {
69
- Authorization: 'Bearer ' + bearer,
70
- 'content-type': 'application/json',
71
- },
72
- body: JSON.stringify({ blob, ts: payload.updated_at }),
73
- });
74
- if (!r.ok) {
75
- let detail = '';
76
- try {
77
- detail = await r.text();
78
- }
79
- catch { /* */ }
80
- throw new Error('voice setup: server push failed (HTTP ' + r.status + '): ' + detail.slice(0, 200));
81
- }
82
- }
83
- async function pullFromServer() {
84
- const secret = await loadServerSecret();
85
- const handle = await loadUserHandle();
86
- const bearer = signBearer(secret, handle);
87
- const url = HITO4_BASE_URL.replace(/\/+$/, '') + '/v1/keys-sync/' + encodeURIComponent(handle);
88
- const r = await fetch(url, {
89
- method: 'GET',
90
- headers: { Authorization: 'Bearer ' + bearer },
91
- });
92
- if (!r.ok) {
93
- let detail = '';
94
- try {
95
- detail = await r.text();
96
- }
97
- catch { /* */ }
98
- throw new Error('voice setup: server pull failed (HTTP ' + r.status + '): ' + detail.slice(0, 200));
99
- }
100
- const body = await r.json();
101
- if (!body.blob)
102
- return null;
103
- const env = envelopeFromBlob(body.blob);
104
- return decryptUserKeys(env, secret);
105
- }
106
- function printCurrent(p) {
107
- header('Yujin Forge -- voice setup (current local)');
108
- console.log('');
109
- console.log(' OpenAI API key: ' + c.dim(maskKey(p.openai_api_key)));
110
- console.log(' Google STT key: ' + c.dim(maskKey(p.google_stt_key)));
111
- console.log(' Google TTS key: ' + c.dim(maskKey(p.google_tts_key)));
112
- console.log(' ElevenLabs API key: ' + c.dim(maskKey(p.elevenlabs_api_key)));
113
- console.log('');
114
- console.log(' STT preference: ' + c.brand(p.stt_provider_preference ?? '(not set)'));
115
- console.log(' TTS preference: ' + c.brand(p.tts_provider_preference ?? '(not set)'));
116
- console.log(' STT language: ' + (p.stt_language ?? c.dim('(default)')));
117
- console.log(' TTS voice: ' + (p.tts_voice ?? c.dim('(default)')));
118
- console.log(' Last updated: ' + c.dim(p.updated_at));
119
- }
120
- export function registerVoiceSetupCommand(parent) {
121
- parent
122
- .command('setup')
123
- .description('Configure voice provider API keys (OpenAI / Google / ElevenLabs). '
124
- + 'Encrypts + syncs to your other devices automatically.')
125
- .option('--show', 'print current local config (keys masked)')
126
- .option('--pull', 'pull the server copy + overwrite local')
127
- .option('--provider <name>', 'non-interactive: set this provider')
128
- .option('--key <value>', 'non-interactive: the API key value for --provider')
129
- .action(async (opts) => { await runVoiceSetup(opts); });
130
- }
131
- export async function runVoiceSetup(opts) {
132
- /* --show: print current + exit. */
133
- if (opts.show) {
134
- const current = await readLocalKeys();
135
- printCurrent(current);
136
- return;
137
- }
138
- /* --pull: server -> local. */
139
- if (opts.pull) {
140
- let pulled;
141
- try {
142
- pulled = await pullFromServer();
143
- }
144
- catch (err) {
145
- console.error(c.error(err instanceof Error ? err.message : String(err)));
146
- process.exitCode = 1;
147
- return;
148
- }
149
- if (!pulled) {
150
- console.log(c.dim('Server has no provider keys for this user yet.'));
151
- return;
152
- }
153
- await writeLocalKeys(pulled);
154
- header('Yujin Forge -- voice setup (pulled from server)');
155
- console.log('');
156
- printCurrent(pulled);
157
- return;
158
- }
159
- /* --provider / --key: non-interactive single set. */
160
- if (opts.provider || opts.key) {
161
- if (!opts.provider || !opts.key) {
162
- console.error(c.error('--provider and --key must be used together.'));
163
- process.exitCode = 1;
164
- return;
165
- }
166
- const merged = await readLocalKeys();
167
- const ts = new Date().toISOString();
168
- const p = opts.provider.toLowerCase();
169
- if (p === 'openai')
170
- merged.openai_api_key = opts.key;
171
- else if (p === 'google-stt')
172
- merged.google_stt_key = opts.key;
173
- else if (p === 'google-tts')
174
- merged.google_tts_key = opts.key;
175
- else if (p === 'elevenlabs')
176
- merged.elevenlabs_api_key = opts.key;
177
- else {
178
- console.error(c.error('--provider must be one of: openai, google-stt, google-tts, elevenlabs'));
179
- process.exitCode = 1;
180
- return;
181
- }
182
- merged.updated_at = ts;
183
- try {
184
- await pushToServer(merged);
185
- await writeLocalKeys(merged);
186
- header('Yujin Forge -- voice setup (saved)');
187
- console.log('');
188
- printCurrent(merged);
189
- }
190
- catch (err) {
191
- console.error(c.error(err instanceof Error ? err.message : String(err)));
192
- process.exitCode = 1;
193
- }
194
- return;
195
- }
196
- /* Interactive flow. */
197
- const current = await readLocalKeys();
198
- header('Yujin Forge -- voice setup');
199
- console.log('');
200
- console.log(c.dim('Configure the API keys for your chosen voice providers. The keys are'));
201
- console.log(c.dim('encrypted with your account secret + synced to your mobile + other'));
202
- console.log(c.dim('paired devices automatically. The server never sees plaintext.'));
203
- console.log('');
204
- console.log(c.dim('Press Enter on any field to keep its current value.'));
205
- console.log('');
206
- const answers = await prompts([
207
- {
208
- type: 'multiselect',
209
- name: 'providers',
210
- message: 'Which providers do you want to configure?',
211
- choices: [
212
- { title: 'OpenAI (Whisper for STT + tts-1 for TTS)', value: 'openai' },
213
- { title: 'Google Cloud (Speech-to-Text + Text-to-Speech)', value: 'google' },
214
- { title: 'ElevenLabs (TTS only -- higher quality voice)', value: 'elevenlabs' },
215
- ],
216
- min: 1,
217
- hint: 'Space to select, Enter to confirm.',
218
- },
219
- ]);
220
- if (!answers.providers || answers.providers.length === 0) {
221
- console.log(c.dim('No providers selected. Aborting.'));
222
- return;
223
- }
224
- const merged = { ...current };
225
- if (answers.providers.includes('openai')) {
226
- const r = await prompts({
227
- type: 'password',
228
- name: 'k',
229
- message: 'OpenAI API key (sk-...). Current: ' + maskKey(current.openai_api_key),
230
- });
231
- if (r.k)
232
- merged.openai_api_key = r.k;
233
- }
234
- if (answers.providers.includes('google')) {
235
- const sttR = await prompts({
236
- type: 'password',
237
- name: 'k',
238
- message: 'Google Cloud Speech-to-Text API key. Current: ' + maskKey(current.google_stt_key),
239
- });
240
- if (sttR.k)
241
- merged.google_stt_key = sttR.k;
242
- const ttsR = await prompts({
243
- type: 'password',
244
- name: 'k',
245
- message: 'Google Cloud Text-to-Speech API key (can be same as STT). Current: ' + maskKey(current.google_tts_key),
246
- });
247
- if (ttsR.k)
248
- merged.google_tts_key = ttsR.k;
249
- }
250
- if (answers.providers.includes('elevenlabs')) {
251
- const r = await prompts({
252
- type: 'password',
253
- name: 'k',
254
- message: 'ElevenLabs API key. Current: ' + maskKey(current.elevenlabs_api_key),
255
- });
256
- if (r.k)
257
- merged.elevenlabs_api_key = r.k;
258
- }
259
- /* Preferences (which provider to USE for each direction). */
260
- const sttCandidates = [];
261
- if (merged.openai_api_key)
262
- sttCandidates.push({ title: 'OpenAI (Whisper)', value: 'openai' });
263
- if (merged.google_stt_key)
264
- sttCandidates.push({ title: 'Google', value: 'google' });
265
- if (sttCandidates.length > 0) {
266
- const pref = await prompts({
267
- type: 'select',
268
- name: 'p',
269
- message: 'Preferred STT provider',
270
- choices: sttCandidates,
271
- initial: 0,
272
- });
273
- if (pref.p)
274
- merged.stt_provider_preference = pref.p;
275
- }
276
- const ttsCandidates = [];
277
- if (merged.openai_api_key)
278
- ttsCandidates.push({ title: 'OpenAI (tts-1)', value: 'openai' });
279
- if (merged.google_tts_key)
280
- ttsCandidates.push({ title: 'Google', value: 'google' });
281
- if (merged.elevenlabs_api_key)
282
- ttsCandidates.push({ title: 'ElevenLabs', value: 'elevenlabs' });
283
- if (ttsCandidates.length > 0) {
284
- const pref = await prompts({
285
- type: 'select',
286
- name: 'p',
287
- message: 'Preferred TTS provider',
288
- choices: ttsCandidates,
289
- initial: 0,
290
- });
291
- if (pref.p)
292
- merged.tts_provider_preference = pref.p;
293
- }
294
- merged.updated_at = new Date().toISOString();
295
- try {
296
- await pushToServer(merged);
297
- await writeLocalKeys(merged);
298
- console.log('');
299
- console.log(c.success('Voice config saved + synced.'));
300
- console.log('');
301
- printCurrent(merged);
302
- }
303
- catch (err) {
304
- console.error(c.error(err instanceof Error ? err.message : String(err)));
305
- process.exitCode = 1;
306
- }
307
- }
308
- //# sourceMappingURL=voice_setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voice_setup.js","sourceRoot":"","sources":["../../src/commands/voice_setup.ts"],"names":[],"mappings":"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"}