@nac3/forge-cli 1.0.78 → 1.0.80

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.
@@ -11,6 +11,7 @@ export interface EmbedCliOptions {
11
11
  portProd?: string;
12
12
  portUat?: string;
13
13
  force?: boolean;
14
+ resetContent?: boolean;
14
15
  json?: boolean;
15
16
  }
16
17
  export declare function registerEmbedCommand(program: Command): void;
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC3D"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAYD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D3D"}
@@ -1,6 +1,20 @@
1
1
  import path from 'node:path';
2
+ import os from 'node:os';
3
+ import { promises as fs } from 'node:fs';
2
4
  import { c, header } from '../ui/colors.js';
3
5
  import { generateEmbedScaffold } from '../core/forge_embed.js';
6
+ /** Markers that say "this directory is a real project root". */
7
+ const PROJECT_MARKERS = ['.git', 'package.json', '.forge', 'src', 'pyproject.toml', 'requirements.txt', 'go.mod', 'Cargo.toml', 'pom.xml'];
8
+ async function looksLikeProject(root) {
9
+ for (const m of PROJECT_MARKERS) {
10
+ try {
11
+ await fs.access(path.join(root, m));
12
+ return true;
13
+ }
14
+ catch { /* keep looking */ }
15
+ }
16
+ return false;
17
+ }
4
18
  export function registerEmbedCommand(program) {
5
19
  program
6
20
  .command('embed')
@@ -9,10 +23,29 @@ export function registerEmbedCommand(program) {
9
23
  .option('--db <engine>', 'db engine for db.json.example: mariadb | mysql | sqlite (default mariadb)')
10
24
  .option('--port-prod <n>', 'PROD panel port (default 4901)')
11
25
  .option('--port-uat <n>', 'UAT panel port (default 4902)')
12
- .option('--force', 'overwrite existing .forge files')
26
+ .option('--force', 'refresh the mechanical files (units, README); KEEPS mission.md + profiles')
27
+ .option('--reset-content', 'ALSO overwrite mission.md + profiles (destructive -- only with --force)')
13
28
  .option('--json', 'emit JSON')
14
29
  .action(async (opts) => {
15
30
  const root = path.resolve(opts.root || process.cwd());
31
+ /* Guard the footgun (Pablo 2026-07-13): running `yf embed` in your HOME
32
+ * (or a non-project dir) scaffolds a stray, wrongly-named .forge/ there.
33
+ * Refuse the home dir + the filesystem root outright; warn (do not
34
+ * scaffold) when the dir has no project markers. */
35
+ const home = path.resolve(os.homedir());
36
+ if (root === home || path.dirname(root) === root) {
37
+ console.error(c.error('yf embed: "' + root + '" es tu carpeta HOME / la raiz del sistema, no un proyecto.'));
38
+ console.error(' embed escribe .forge/* en el directorio actual. Entra al proyecto (p.ej. /opt/rpa-osde)');
39
+ console.error(' o pasa --root <dir-del-proyecto>.');
40
+ process.exitCode = 1;
41
+ return;
42
+ }
43
+ if (!(await looksLikeProject(root))) {
44
+ console.error(c.error('yf embed: "' + root + '" no parece un proyecto') + ' (sin .git / package.json / src / .forge...).');
45
+ console.error(' Si es correcto, crea un marcador (p.ej. git init) o pasa --root <dir>. No se escribio nada.');
46
+ process.exitCode = 1;
47
+ return;
48
+ }
16
49
  const engine = (opts.db === 'mysql' || opts.db === 'sqlite') ? opts.db : 'mariadb';
17
50
  const files = await generateEmbedScaffold({
18
51
  root,
@@ -20,6 +53,7 @@ export function registerEmbedCommand(program) {
20
53
  portProd: opts.portProd ? parseInt(opts.portProd, 10) : undefined,
21
54
  portUat: opts.portUat ? parseInt(opts.portUat, 10) : undefined,
22
55
  force: opts.force === true,
56
+ resetContent: opts.resetContent === true,
23
57
  });
24
58
  if (opts.json) {
25
59
  process.stdout.write(JSON.stringify({ root, files }, null, 2) + '\n');
@@ -1 +1 @@
1
- {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ export interface EmbedOptions {
5
5
  portProd?: number;
6
6
  portUat?: number;
7
7
  force?: boolean;
8
+ /** Overwrite even the user-content files (mission.md, profiles). Off by
9
+ * default so a plain --force refreshes only the mechanical files and can
10
+ * NEVER eat an enriched mission.md (Pablo 2026-07-13). */
11
+ resetContent?: boolean;
8
12
  /** Seed the mission body (e.g. a spec summary) instead of the template. */
9
13
  missionSeed?: string;
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"forge_embed.d.ts","sourceRoot":"","sources":["../../src/core/forge_embed.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AA+G7E,kFAAkF;AAClF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAmBpF"}
1
+ {"version":3,"file":"forge_embed.d.ts","sourceRoot":"","sources":["../../src/core/forge_embed.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;+DAE2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAsH7E,kFAAkF;AAClF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA+BpF"}
@@ -68,6 +68,13 @@ function serviceUnit(name, env, port, deployDir) {
68
68
  '# Minimal systemd PATH does NOT include ~/.local/bin or npm-global -- add',
69
69
  '# the dir where `yf` lives so it is found (see: which yf).',
70
70
  'Environment=PATH=/usr/local/bin:/usr/bin:/bin',
71
+ '# Attachments the user drops in chat are persisted here so the office.*',
72
+ '# readers can open the real file (all sheets/pages). StateDirectory gives',
73
+ '# a service-owned, guaranteed-writable dir under /var/lib -- works even if',
74
+ '# the service user has no home or ProtectHome= is later added. This is',
75
+ '# Forge state, NOT the project tree, so it is allowed under READ-ONLY prod.',
76
+ 'StateDirectory=forge-' + name,
77
+ 'Environment=YF_INGEST_DIR=/var/lib/forge-' + name + '/ingest',
71
78
  '# BYOK: the operator configures the brain key on first boot (yf keys / panel).',
72
79
  '# Binds 127.0.0.1 by default -- reach it via SSH tunnel or the P2 relay.',
73
80
  'ExecStart=/usr/bin/env yf chat --no-open --port ' + port,
@@ -128,10 +135,22 @@ export async function generateEmbedScaffold(opts) {
128
135
  const portProd = opts.portProd ?? 4901;
129
136
  const portUat = opts.portUat ?? 4902;
130
137
  const force = opts.force === true;
138
+ /* User-content files (the human/brain fills these in): a plain --force must
139
+ * NEVER clobber them -- that ate an enriched mission.md once. They only get
140
+ * overwritten with the explicit --reset-content. The mechanical files
141
+ * (db.json.example, units, README, .gitkeep) still refresh on --force. */
142
+ const contentForce = force && opts.resetContent === true;
143
+ const protectedWrite = async (rel, content) => {
144
+ const r = await writeIfAbsent(opts.root, rel, content, contentForce);
145
+ if (!r.written && force && opts.resetContent !== true) {
146
+ r.reason = 'preserved (user content; --reset-content to overwrite)';
147
+ }
148
+ return r;
149
+ };
131
150
  const out = [];
132
- out.push(await writeIfAbsent(opts.root, '.forge/profile.prod.json', JSON.stringify(PROFILE_PROD, null, 2) + '\n', force));
133
- out.push(await writeIfAbsent(opts.root, '.forge/profile.uat.json', JSON.stringify(PROFILE_UAT, null, 2) + '\n', force));
134
- out.push(await writeIfAbsent(opts.root, '.forge/mission.md', missionTemplate(name, opts.missionSeed), force));
151
+ out.push(await protectedWrite('.forge/profile.prod.json', JSON.stringify(PROFILE_PROD, null, 2) + '\n'));
152
+ out.push(await protectedWrite('.forge/profile.uat.json', JSON.stringify(PROFILE_UAT, null, 2) + '\n'));
153
+ out.push(await protectedWrite('.forge/mission.md', missionTemplate(name, opts.missionSeed)));
135
154
  out.push(await writeIfAbsent(opts.root, '.forge/db.json.example', JSON.stringify(dbExample(engine), null, 2) + '\n', force));
136
155
  out.push(await writeIfAbsent(opts.root, '.forge/deploy/forge-' + name + '-prod.service', serviceUnit(name, 'prod', portProd, '/opt/' + name), force));
137
156
  out.push(await writeIfAbsent(opts.root, '.forge/deploy/forge-' + name + '-uat.service', serviceUnit(name, 'uat', portUat, '/opt/' + name + '-uat'), force));
@@ -1 +1 @@
1
- {"version":3,"file":"forge_embed.js","sourceRoot":"","sources":["../../src/core/forge_embed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge_embed.js","sourceRoot":"","sources":["../../src/core/forge_embed.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export declare const VERSION = "1.0.78";
5
+ export declare const VERSION = "1.0.80";
6
6
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Yujin Forge CLI version. Kept in sync with package.json by the npm
3
3
  * "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
4
4
  */
5
- export const VERSION = '1.0.78';
5
+ export const VERSION = '1.0.80';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "1.0.78",
3
+ "version": "1.0.80",
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>",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "النوع (مثل ts، png)",
238
238
  "panel.files.matches": "{n} نتيجة",
239
239
  "panel.files.noMatches": "لا نتائج",
240
+ "panel.files.sortBy": "ترتيب حسب",
241
+ "panel.files.sortName": "الاسم",
242
+ "panel.files.sortSize": "الحجم",
243
+ "panel.files.sortType": "النوع",
240
244
  "startup.tab.tasks": "المهام",
241
245
  "settings.bridge.title": "التنسيق بين النسخ",
242
246
  "settings.bridge.accept": "قبول الرسائل الموجهة من النسخ الأخرى (تُحقن كمحادثة)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Typ (z. B. ts, png)",
238
238
  "panel.files.matches": "{n} Treffer",
239
239
  "panel.files.noMatches": "Keine Treffer",
240
+ "panel.files.sortBy": "Sortieren nach",
241
+ "panel.files.sortName": "Name",
242
+ "panel.files.sortSize": "Groesse",
243
+ "panel.files.sortType": "Typ",
240
244
  "startup.tab.tasks": "Aufgaben",
241
245
  "settings.bridge.title": "Koordination zwischen Instanzen",
242
246
  "settings.bridge.accept": "Gerichtete Nachrichten anderer Instanzen akzeptieren (als Chat eingefugt)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Type (e.g. ts, png)",
238
238
  "panel.files.matches": "{n} matches",
239
239
  "panel.files.noMatches": "No matches",
240
+ "panel.files.sortBy": "Sort by",
241
+ "panel.files.sortName": "Name",
242
+ "panel.files.sortSize": "Size",
243
+ "panel.files.sortType": "Type",
240
244
  "startup.tab.tasks": "Tasks",
241
245
  "settings.bridge.title": "Coordination between instances",
242
246
  "settings.bridge.accept": "Accept directed messages from other instances (injected as chat)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Tipo (ej: ts, png)",
238
238
  "panel.files.matches": "{n} coincidencias",
239
239
  "panel.files.noMatches": "Sin coincidencias",
240
+ "panel.files.sortBy": "Ordenar por",
241
+ "panel.files.sortName": "Nombre",
242
+ "panel.files.sortSize": "Tamano",
243
+ "panel.files.sortType": "Tipo",
240
244
  "startup.tab.tasks": "Tareas",
241
245
  "settings.bridge.title": "Coordinacion entre instancias",
242
246
  "settings.bridge.accept": "Aceptar mensajes dirigidos de otras instancias (los inyecta como chat)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Type (ex : ts, png)",
238
238
  "panel.files.matches": "{n} resultats",
239
239
  "panel.files.noMatches": "Aucun resultat",
240
+ "panel.files.sortBy": "Trier par",
241
+ "panel.files.sortName": "Nom",
242
+ "panel.files.sortSize": "Taille",
243
+ "panel.files.sortType": "Type",
240
244
  "startup.tab.tasks": "Taches",
241
245
  "settings.bridge.title": "Coordination entre instances",
242
246
  "settings.bridge.accept": "Accepter les messages diriges d'autres instances (injectes comme chat)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "प्रकार (जैसे ts, png)",
238
238
  "panel.files.matches": "{n} मिलान",
239
239
  "panel.files.noMatches": "कोई मिलान नहीं",
240
+ "panel.files.sortBy": "इसके अनुसार क्रमबद्ध करें",
241
+ "panel.files.sortName": "नाम",
242
+ "panel.files.sortSize": "आकार",
243
+ "panel.files.sortType": "प्रकार",
240
244
  "startup.tab.tasks": "कार्य",
241
245
  "settings.bridge.title": "इंस्टेंस के बीच समन्वय",
242
246
  "settings.bridge.accept": "अन्य इंस्टेंस से निर्देशित संदेश स्वीकार करें (चैट के रूप में डाले जाते हैं)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Tipo (es: ts, png)",
238
238
  "panel.files.matches": "{n} risultati",
239
239
  "panel.files.noMatches": "Nessun risultato",
240
+ "panel.files.sortBy": "Ordina per",
241
+ "panel.files.sortName": "Nome",
242
+ "panel.files.sortSize": "Dimensione",
243
+ "panel.files.sortType": "Tipo",
240
244
  "startup.tab.tasks": "Attivita",
241
245
  "settings.bridge.title": "Coordinamento tra istanze",
242
246
  "settings.bridge.accept": "Accetta messaggi diretti da altre istanze (iniettati come chat)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "種類 (例: ts, png)",
238
238
  "panel.files.matches": "{n} 件",
239
239
  "panel.files.noMatches": "一致なし",
240
+ "panel.files.sortBy": "並べ替え",
241
+ "panel.files.sortName": "名前",
242
+ "panel.files.sortSize": "サイズ",
243
+ "panel.files.sortType": "種類",
240
244
  "startup.tab.tasks": "タスク",
241
245
  "settings.bridge.title": "インスタンス間の調整",
242
246
  "settings.bridge.accept": "他のインスタンスからの指定メッセージを受け入れる(チャットとして挿入)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "Tipo (ex: ts, png)",
238
238
  "panel.files.matches": "{n} correspondencias",
239
239
  "panel.files.noMatches": "Sem correspondencias",
240
+ "panel.files.sortBy": "Ordenar por",
241
+ "panel.files.sortName": "Nome",
242
+ "panel.files.sortSize": "Tamanho",
243
+ "panel.files.sortType": "Tipo",
240
244
  "startup.tab.tasks": "Tarefas",
241
245
  "settings.bridge.title": "Coordenacao entre instancias",
242
246
  "settings.bridge.accept": "Aceitar mensagens dirigidas de outras instancias (injetadas como chat)",
@@ -237,6 +237,10 @@
237
237
  "panel.files.searchType": "类型 (如 ts, png)",
238
238
  "panel.files.matches": "{n} 个匹配",
239
239
  "panel.files.noMatches": "无匹配",
240
+ "panel.files.sortBy": "排序方式",
241
+ "panel.files.sortName": "名称",
242
+ "panel.files.sortSize": "大小",
243
+ "panel.files.sortType": "类型",
240
244
  "startup.tab.tasks": "任务",
241
245
  "settings.bridge.title": "实例间协调",
242
246
  "settings.bridge.accept": "接受其他实例的定向消息(作为聊天注入)",