@nac3/forge-cli 1.0.85 → 1.0.87

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.
@@ -26,4 +26,27 @@ export interface ListOptions {
26
26
  * secrets (.env) and VCS noise stay out.
27
27
  */
28
28
  export declare function listProjectFiles(projectRoot: string, opts?: ListOptions): Promise<FileTree>;
29
+ export interface ListDirResult {
30
+ ok: boolean;
31
+ children?: FileNode[];
32
+ truncated?: boolean;
33
+ error?: string;
34
+ }
35
+ /** List the IMMEDIATE children of one directory (non-recursive). Backs the
36
+ * lazy files-tab: each folder scans on expand, so the tree stays fresh and
37
+ * needs no global node cap. Skips dotfiles + the usual noise dirs. */
38
+ export declare function listDirectory(projectRoot: string, relPath: string, maxEntries?: number): Promise<ListDirResult>;
39
+ export interface FileSearchResult {
40
+ matches: FileNode[];
41
+ truncated: boolean;
42
+ }
43
+ /** Recursively find FILES whose project-relative path contains `name` and
44
+ * whose extension contains `type`. Bounded by a match limit + a scan budget
45
+ * so a pathological tree can't hang. Skips dotfiles + noise dirs. */
46
+ export declare function searchProjectFiles(projectRoot: string, q: {
47
+ name?: string;
48
+ type?: string;
49
+ limit?: number;
50
+ maxScan?: number;
51
+ }): Promise<FileSearchResult>;
29
52
  //# sourceMappingURL=file_tree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file_tree.d.ts","sourceRoot":"","sources":["../../src/core/file_tree.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAuDnB"}
1
+ {"version":3,"file":"file_tree.d.ts","sourceRoot":"","sources":["../../src/core/file_tree.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAuDnB;AAmBD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;uEAEuE;AACvE,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,SAAO,GACtD,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;sEAEsE;AACtE,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,gBAAgB,CAAC,CAqC3B"}
@@ -92,4 +92,118 @@ function sortNodes(a, b) {
92
92
  return a.kind === 'dir' ? -1 : 1;
93
93
  return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
94
94
  }
95
+ /* ---- PND-156b: lazy, per-directory listing + server-side search ---- */
96
+ function safeAbs(projectRoot, relPath) {
97
+ const rootAbs = path.resolve(projectRoot);
98
+ const clean = String(relPath || '.').replace(/\\/g, '/').replace(/^\/+/, '');
99
+ const abs = clean === '.' || clean === '' ? rootAbs : path.resolve(rootAbs, clean);
100
+ const rel = path.relative(rootAbs, abs);
101
+ if (rel.startsWith('..') || path.isAbsolute(rel))
102
+ return null; /* escapes root */
103
+ return abs;
104
+ }
105
+ /** List the IMMEDIATE children of one directory (non-recursive). Backs the
106
+ * lazy files-tab: each folder scans on expand, so the tree stays fresh and
107
+ * needs no global node cap. Skips dotfiles + the usual noise dirs. */
108
+ export async function listDirectory(projectRoot, relPath, maxEntries = 4000) {
109
+ const abs = safeAbs(projectRoot, relPath);
110
+ if (!abs)
111
+ return { ok: false, error: 'path escapes project root' };
112
+ const clean = String(relPath || '.').replace(/\\/g, '/').replace(/^\/+/, '');
113
+ const prefix = clean === '.' || clean === '' ? '' : clean;
114
+ let entries;
115
+ try {
116
+ entries = await fs.readdir(abs, { withFileTypes: true });
117
+ }
118
+ catch {
119
+ return { ok: false, error: 'cannot read directory' };
120
+ }
121
+ const children = [];
122
+ let truncated = false;
123
+ for (const e of entries) {
124
+ if (e.name.startsWith('.'))
125
+ continue;
126
+ if (e.isDirectory() && SKIP_DIRS.has(e.name))
127
+ continue;
128
+ if (children.length >= maxEntries) {
129
+ truncated = true;
130
+ break;
131
+ }
132
+ const rel = prefix ? prefix + '/' + e.name : e.name;
133
+ if (e.isDirectory()) {
134
+ children.push({ name: e.name, path: rel, kind: 'dir' });
135
+ }
136
+ else if (e.isFile()) {
137
+ const node = { name: e.name, path: rel, kind: 'file' };
138
+ try {
139
+ const st = await fs.stat(path.join(abs, e.name));
140
+ node.size = st.size;
141
+ node.mtime = Math.round(st.mtimeMs);
142
+ }
143
+ catch { /* size/mtime best-effort */ }
144
+ children.push(node);
145
+ }
146
+ }
147
+ children.sort(sortNodes);
148
+ return { ok: true, children, truncated };
149
+ }
150
+ /** Recursively find FILES whose project-relative path contains `name` and
151
+ * whose extension contains `type`. Bounded by a match limit + a scan budget
152
+ * so a pathological tree can't hang. Skips dotfiles + noise dirs. */
153
+ export async function searchProjectFiles(projectRoot, q) {
154
+ const name = String(q.name || '').toLowerCase();
155
+ const type = String(q.type || '').toLowerCase().replace(/^[.*]+/, '');
156
+ const limit = Math.max(1, Math.min(5000, q.limit ?? 2000));
157
+ const maxScan = Math.max(1000, Math.min(1_000_000, q.maxScan ?? 300_000));
158
+ const rootAbs = path.resolve(projectRoot);
159
+ const matches = [];
160
+ let scanned = 0;
161
+ let truncated = false;
162
+ const queue = [{ abs: rootAbs, rel: '' }];
163
+ while (queue.length > 0) {
164
+ if (matches.length >= limit || scanned >= maxScan) {
165
+ truncated = true;
166
+ break;
167
+ }
168
+ const { abs, rel } = queue.shift();
169
+ let entries;
170
+ try {
171
+ entries = await fs.readdir(abs, { withFileTypes: true });
172
+ }
173
+ catch {
174
+ continue;
175
+ }
176
+ for (const e of entries) {
177
+ if (matches.length >= limit || scanned >= maxScan) {
178
+ truncated = true;
179
+ break;
180
+ }
181
+ if (e.name.startsWith('.'))
182
+ continue;
183
+ if (e.isDirectory() && SKIP_DIRS.has(e.name))
184
+ continue;
185
+ scanned += 1;
186
+ const childRel = rel ? rel + '/' + e.name : e.name;
187
+ if (e.isDirectory()) {
188
+ queue.push({ abs: path.join(abs, e.name), rel: childRel });
189
+ }
190
+ else if (e.isFile()) {
191
+ const ext = path.extname(e.name).slice(1).toLowerCase();
192
+ const nameOk = !name || childRel.toLowerCase().indexOf(name) !== -1;
193
+ const typeOk = !type || ext.indexOf(type) !== -1;
194
+ if (nameOk && typeOk) {
195
+ const node = { name: e.name, path: childRel, kind: 'file' };
196
+ try {
197
+ const st = await fs.stat(path.join(abs, e.name));
198
+ node.size = st.size;
199
+ node.mtime = Math.round(st.mtimeMs);
200
+ }
201
+ catch { /* best-effort */ }
202
+ matches.push(node);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ return { matches, truncated };
208
+ }
95
209
  //# sourceMappingURL=file_tree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file_tree.js","sourceRoot":"","sources":["../../src/core/file_tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file_tree.js","sourceRoot":"","sources":["../../src/core/file_tree.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@ export interface ForgeProfile {
3
3
  name?: string;
4
4
  read_only?: boolean;
5
5
  mission_file?: string;
6
+ /** PND-157 -- durable system map. When the embed boots, this file (default
7
+ * .forge/diagnostics/system-map.md) is injected into the prompt as GROUND
8
+ * TRUTH so the assistant does not re-discover the whole system every
9
+ * session. Missing -> the prompt tells the brain to BUILD it first. */
10
+ system_map_file?: string;
6
11
  /** Single report dir (legacy form; kept for back-compat). */
7
12
  allow_report_dir?: string;
8
13
  /** Report dirs (preferred form). Writing REPORTS is part of the embedded
@@ -1 +1 @@
1
- {"version":3,"file":"forge_profile.d.ts","sourceRoot":"","sources":["../../src/core/forge_profile.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;4EAEwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,yCAA0C,CAAC;AAE3E,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CAQpD;AAYD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAgBpE;AAED;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAapE;AAED,iBAAiB;AACjB,wBAAgB,oBAAoB,IAAI,IAAI,CAAuD;AAEnG,wBAAgB,aAAa,IAAI,YAAY,GAAG,IAAI,CAA2B;AAE/E;;qEAEqE;AACrE,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAqD7C;AAyBD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,mBAAmB,CA2BrB;AAED,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAIxC"}
1
+ {"version":3,"file":"forge_profile.d.ts","sourceRoot":"","sources":["../../src/core/forge_profile.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;4EAGwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;4EAEwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,yCAA0C,CAAC;AAE3E,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CAQpD;AAmBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAgBpE;AAED;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAuBpE;AAED,iBAAiB;AACjB,wBAAgB,oBAAoB,IAAI,IAAI,CAAyF;AAErI,wBAAgB,aAAa,IAAI,YAAY,GAAG,IAAI,CAA2B;AAE/E;;qEAEqE;AACrE,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CA0F7C;AAyBD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,mBAAmB,CA2BrB;AAED,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAIxC"}
@@ -50,7 +50,12 @@ export function reportDirs(p) {
50
50
  return dirs;
51
51
  }
52
52
  const MISSION_MAX_CHARS = 8000;
53
- let ACTIVE = { profile: null, mission: '', root: '' };
53
+ /** The durable system map is the assistant's ground truth -- worth a bigger
54
+ * budget than the mission (it carries DB schemas, file inventory, playbooks).
55
+ * Anything past this is read on demand from the file. */
56
+ const SYSTEM_MAP_MAX_CHARS = 18000;
57
+ const DEFAULT_SYSTEM_MAP_FILE = '.forge/diagnostics/system-map.md';
58
+ let ACTIVE = { profile: null, mission: '', systemMap: '', systemMapPath: '', root: '' };
54
59
  /**
55
60
  * Load the profile for a project root. Resolution order (Pablo 2026-07-09):
56
61
  *
@@ -106,11 +111,24 @@ export function initProfile(projectRoot) {
106
111
  mission = '';
107
112
  }
108
113
  }
109
- ACTIVE = { profile, mission, root: projectRoot };
114
+ /* PND-157 -- durable system map (default path when a profile is active, so
115
+ * existing profiles get it for free). Injected as ground truth if present. */
116
+ let systemMap = '', systemMapPath = '';
117
+ if (profile) {
118
+ systemMapPath = profile.system_map_file || DEFAULT_SYSTEM_MAP_FILE;
119
+ const smf = isAbsolute(systemMapPath) ? systemMapPath : join(projectRoot, systemMapPath);
120
+ try {
121
+ systemMap = readFileSync(smf, 'utf8').slice(0, SYSTEM_MAP_MAX_CHARS).trim();
122
+ }
123
+ catch {
124
+ systemMap = '';
125
+ }
126
+ }
127
+ ACTIVE = { profile, mission, systemMap, systemMapPath, root: projectRoot };
110
128
  return profile;
111
129
  }
112
130
  /** For tests. */
113
- export function _resetProfileForTest() { ACTIVE = { profile: null, mission: '', root: '' }; }
131
+ export function _resetProfileForTest() { ACTIVE = { profile: null, mission: '', systemMap: '', systemMapPath: '', root: '' }; }
114
132
  export function activeProfile() { return ACTIVE.profile; }
115
133
  /** System-prompt lines for the active profile (empty array when none).
116
134
  * Mission text first (operator voice), then -- when read_only -- the
@@ -123,6 +141,17 @@ export function profilePromptLines() {
123
141
  if (ACTIVE.mission) {
124
142
  lines.push('=================================================================', 'MISSION (operator-configured -- .forge profile "' + (p.name || 'default') + '")', '=================================================================', '', ACTIVE.mission, '');
125
143
  }
144
+ /* PND-157 -- durable system map. Present => inject it as ground truth (so the
145
+ * assistant does not re-discover the system every session). Missing (read_only)
146
+ * => tell it to BUILD the map first. The detailed 14-section template lives in
147
+ * the diagnostic-mode doctrine. */
148
+ const smPath = ACTIVE.systemMapPath || DEFAULT_SYSTEM_MAP_FILE;
149
+ if (ACTIVE.systemMap) {
150
+ lines.push('=================================================================', 'SYSTEM MAP -- durable ground truth (' + smPath + ')', '=================================================================', '', 'This is the persistent map of THIS system. USE IT as your baseline instead', 'of re-discovering the whole system before every analysis. If a section looks', 'truncated, read the full file with yujin.fs.read-file. If you find it STALE', '(schema/config/files changed), refresh it (write ' + smPath + ' -- a report', 'dir, so allowed).', '', ACTIVE.systemMap, '');
151
+ }
152
+ else if (p.read_only) {
153
+ lines.push('=================================================================', 'SYSTEM MAP -- MISSING: build it before you diagnose', '=================================================================', '', 'There is no durable system map yet at ' + smPath + '. As soon as you have', 'context, BUILD IT (that path is a report dir -- you have write access there)', 'so future sessions do NOT re-discover the system from scratch. Follow the', 'diagnostic-mode doctrine for the section template (identity, environments,', 'components, lifecycle/flows, integrations, auth/tokens, DB schemas + live', 'counts, data loads/mappings, key files, background jobs, dependencies/secrets,', 'diagnostic playbook, operative rules, + a reference to the semantic graph).', 'Write it in Markdown at ' + smPath + ', THEN diagnose.', '');
154
+ }
126
155
  if (p.read_only) {
127
156
  lines.push('=================================================================', 'READ-ONLY DIAGNOSTIC POSTURE (mechanically enforced)', '=================================================================', '', 'This deployment is a DIAGNOSTIC assistant for THIS system. WRITE verbs', 'that change the system (file writes outside the report dirs, git', 'commit/push/pull, lifecycle, office writes) are BLOCKED at the', 'dispatcher -- do not attempt them.', '', 'For DATABASE queries use the native verb yujin.db.query (SELECT-only,', 'connection from .forge/db.json) -- do NOT shell out to mysql and do NOT', 'invent an HTTP query endpoint.', '', 'READ-ONLY shell IS ALLOWED and is how you diagnose -- USE IT, do not', 'ask the operator to run queries for you. Permitted via yujin.shell.exec:', ' - SELECT-only DB queries (only if yujin.db.query is not configured);', ' - curl/wget GET to LOCALHOST (the app\'s own read endpoints);', ' - read commands (ls, cat, grep, tail, head, ...).', 'Blocked: writes, INSERT/UPDATE/DELETE/DROP, POST/PUT/DELETE, remote', 'network, sudo (except sudo -u <user> for a SELECT), destructive ops.', 'For those, emit the precise instruction for the operator.', 'Your job:', ' 1. DIAGNOSE with evidence: read code/config/logs, query the graph,', ' cite file:line for every claim.', ' 2. Emit PRECISE instructions the operator can apply by hand:', ' "set field <X> to value <V> in <file/table>, then verify with', ' <command/check>". One instruction per change, in order.', ' 3. Record findings as pendings (yujin.pending.add) so nothing is', ' lost between sessions.', ' 4. WRITE REPORTS -- part of your PRIMARY function. You MAY write', ' reports of any type (HTML/md/csv/...) under: '
128
157
  + reportDirs(p).map((d) => '"' + d + '/"').join(', ') + '.', ' Everything else on disk stays read-only.', '');
@@ -1 +1 @@
1
- {"version":3,"file":"forge_profile.js","sourceRoot":"","sources":["../../src/core/forge_profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge_profile.js","sourceRoot":"","sources":["../../src/core/forge_profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBjE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAU,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,CAAe;IACxC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,iBAAiB;YAAE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,IAAI,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAChG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B;;0DAE0D;AAC1D,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAUnE,IAAI,MAAM,GAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAErG;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,IAAY,CAAC;IACjB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,GAAG,GAAG;YACR,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;QACnE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;QAAC,CAAC;IAC3B,CAAC;IACD;kFAC8E;IAC9E,IAAI,SAAS,GAAG,EAAE,EAAE,aAAa,GAAG,EAAE,CAAC;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,aAAa,GAAG,OAAO,CAAC,eAAe,IAAI,uBAAuB,CAAC;QACnE,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS,GAAG,EAAE,CAAC;QAAC,CAAC;IAC7B,CAAC;IACD,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC3E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,oBAAoB,KAAW,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAErI,MAAM,UAAU,aAAa,KAA0B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/E;;qEAEqE;AACrE,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CACR,mEAAmE,EACnE,kDAAkD,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,EACjF,mEAAmE,EACnE,EAAE,EACF,MAAM,CAAC,OAAO,EACd,EAAE,CACH,CAAC;IACJ,CAAC;IACD;;;uCAGmC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAC/D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,mEAAmE,EACnE,sCAAsC,GAAG,MAAM,GAAG,GAAG,EACrD,mEAAmE,EACnE,EAAE,EACF,4EAA4E,EAC5E,8EAA8E,EAC9E,6EAA6E,EAC7E,mDAAmD,GAAG,MAAM,GAAG,cAAc,EAC7E,mBAAmB,EACnB,EAAE,EACF,MAAM,CAAC,SAAS,EAChB,EAAE,CACH,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACR,mEAAmE,EACnE,qDAAqD,EACrD,mEAAmE,EACnE,EAAE,EACF,wCAAwC,GAAG,MAAM,GAAG,uBAAuB,EAC3E,8EAA8E,EAC9E,2EAA2E,EAC3E,4EAA4E,EAC5E,2EAA2E,EAC3E,gFAAgF,EAChF,6EAA6E,EAC7E,0BAA0B,GAAG,MAAM,GAAG,kBAAkB,EACxD,EAAE,CACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CACR,mEAAmE,EACnE,sDAAsD,EACtD,mEAAmE,EACnE,EAAE,EACF,wEAAwE,EACxE,kEAAkE,EAClE,gEAAgE,EAChE,oCAAoC,EACpC,EAAE,EACF,uEAAuE,EACvE,yEAAyE,EACzE,gCAAgC,EAChC,EAAE,EACF,sEAAsE,EACtE,0EAA0E,EAC1E,wEAAwE,EACxE,iEAAiE,EACjE,qDAAqD,EACrD,qEAAqE,EACrE,sEAAsE,EACtE,2DAA2D,EAC3D,WAAW,EACX,sEAAsE,EACtE,sCAAsC,EACtC,gEAAgE,EAChE,oEAAoE,EACpE,8DAA8D,EAC9D,oEAAoE,EACpE,6BAA6B,EAC7B,oEAAoE,EACpE,oDAAoD;cAChD,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAC7D,+CAA+C,EAC/C,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAE7E;;uEAEuE;AACvE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS;IACjC,6BAA6B,EAAE,gBAAgB,EAAE,eAAe;IAChE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB;IACtD,0BAA0B,EAAE,yBAAyB;IACrD,oBAAoB,EAAE,wBAAwB;IAC9C,yBAAyB,EAAE,0BAA0B,EAAE,6BAA6B;IACpF,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB;IAC1E,sBAAsB,EAAE,yBAAyB,EAAE,0BAA0B;IAC7E,uBAAuB,EAAE,6BAA6B;IACtD,kBAAkB,EAAE,qBAAqB,EAAE,uBAAuB;IAClE,0BAA0B,EAAE,4BAA4B;IACxD,qBAAqB,EAAE,oBAAoB;IAC3C,sBAAsB;IACtB,gBAAgB;IAChB,oBAAoB,EAAE,0BAA0B,EAAE,2BAA2B;IAC7E,mBAAmB;CACpB,CAAC,CAAC;AASH,4EAA4E;AAC5E,SAAS,cAAc,CAAC,CAAe,EAAE,OAAe;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/E,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,IAA8B;IAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClC;kDAC8C;IAC9C,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI;WACnB,CAAC,MAAM,KAAK,wBAAwB,IAAI,MAAM,KAAK,oBAAoB,CAAC,EAAE,CAAC;QAChF,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,gGAAgG;SACzG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACpD,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACvE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACvD,6DAA6D;IAC7D,IAAI,CAAC,MAAM,KAAK,6BAA6B,IAAI,MAAM,KAAK,gBAAgB,CAAC,IAAI,IAAI,EAAE,CAAC;QACtF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,sCAAsC,GAAG,MAAM,GAAG,wBAAwB;cAC9E,oEAAoE;cACpE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,iCAAiC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;KAClH,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -46,3 +46,34 @@ The profile prompt already states the posture; the essence:
46
46
 
47
47
  UAT is permissive: apply the change, verify it, THEN tell the operator the
48
48
  exact steps to replicate it in PROD.
49
+
50
+ ## 3. The durable SYSTEM MAP (build once, read always)
51
+
52
+ Re-discovering the whole system before every analysis is wasteful. Keep a
53
+ durable map at `.forge/diagnostics/system-map.md` (a report dir -- you may
54
+ write it even under read_only). The server injects it into your prompt as
55
+ ground truth when it exists; when it does NOT, the prompt tells you to build
56
+ it first. So:
57
+
58
+ - **First session (map missing): BUILD it before diagnosing.** Investigate the
59
+ real system (read code/config, `yujin.db.query`, the semantic graph) and
60
+ write a thorough Markdown map. Suggested sections -- adapt to the project,
61
+ drop what does not apply, add what does:
62
+ 1. Identity -- stack, entrypoint, external integrations, secrets/vault.
63
+ 2. Environments -- PROD vs UAT/others: paths, ports, services, credentials.
64
+ 3. Components -- each process / bot / worker / service and what it does.
65
+ 4. Lifecycle / main flows -- step by step, with an ASCII flow.
66
+ 5. Integrations -- external APIs / queues / messaging and their circuits.
67
+ 6. Auth / tokens -- validity, hashing, transport.
68
+ 7. Database -- schema of the main tables + LIVE counts/distributions.
69
+ 8. Data loads / mappings -- ETL / Excel / mappings / confidence levels, live.
70
+ 9. Key files -- each relevant source and its function.
71
+ 10. Background jobs -- what starts with the server.
72
+ 11. Dependencies / secrets -- vault, external keys.
73
+ 12. Diagnostic playbook -- systemctl / journalctl / SQL ready to copy-paste.
74
+ 13. Operative rules -- read-only, PHI/regulatory, toggles, deploy windows.
75
+ 14. Semantic graph -- reference the full graph (nodes + edges).
76
+ - **Every session: READ the map first** (it is injected; read the full file if
77
+ a section is truncated) and diagnose FROM it -- do not re-derive from scratch.
78
+ - **Keep it fresh:** when you notice the map is stale (schema/config/files
79
+ changed), update `.forge/diagnostics/system-map.md` in the same session.
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.85";
5
+ export declare const VERSION = "1.0.87";
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.85';
5
+ export const VERSION = '1.0.87';
6
6
  //# sourceMappingURL=version.js.map
@@ -46,3 +46,34 @@ The profile prompt already states the posture; the essence:
46
46
 
47
47
  UAT is permissive: apply the change, verify it, THEN tell the operator the
48
48
  exact steps to replicate it in PROD.
49
+
50
+ ## 3. The durable SYSTEM MAP (build once, read always)
51
+
52
+ Re-discovering the whole system before every analysis is wasteful. Keep a
53
+ durable map at `.forge/diagnostics/system-map.md` (a report dir -- you may
54
+ write it even under read_only). The server injects it into your prompt as
55
+ ground truth when it exists; when it does NOT, the prompt tells you to build
56
+ it first. So:
57
+
58
+ - **First session (map missing): BUILD it before diagnosing.** Investigate the
59
+ real system (read code/config, `yujin.db.query`, the semantic graph) and
60
+ write a thorough Markdown map. Suggested sections -- adapt to the project,
61
+ drop what does not apply, add what does:
62
+ 1. Identity -- stack, entrypoint, external integrations, secrets/vault.
63
+ 2. Environments -- PROD vs UAT/others: paths, ports, services, credentials.
64
+ 3. Components -- each process / bot / worker / service and what it does.
65
+ 4. Lifecycle / main flows -- step by step, with an ASCII flow.
66
+ 5. Integrations -- external APIs / queues / messaging and their circuits.
67
+ 6. Auth / tokens -- validity, hashing, transport.
68
+ 7. Database -- schema of the main tables + LIVE counts/distributions.
69
+ 8. Data loads / mappings -- ETL / Excel / mappings / confidence levels, live.
70
+ 9. Key files -- each relevant source and its function.
71
+ 10. Background jobs -- what starts with the server.
72
+ 11. Dependencies / secrets -- vault, external keys.
73
+ 12. Diagnostic playbook -- systemctl / journalctl / SQL ready to copy-paste.
74
+ 13. Operative rules -- read-only, PHI/regulatory, toggles, deploy windows.
75
+ 14. Semantic graph -- reference the full graph (nodes + edges).
76
+ - **Every session: READ the map first** (it is injected; read the full file if
77
+ a section is truncated) and diagnose FROM it -- do not re-derive from scratch.
78
+ - **Keep it fresh:** when you notice the map is stale (schema/config/files
79
+ changed), update `.forge/diagnostics/system-map.md` in the same session.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "1.0.85",
3
+ "version": "1.0.87",
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>",