@nac3/forge-cli 1.0.75 → 1.0.76
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/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +72 -3
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +126 -0
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/fs_editor.d.ts.map +1 -1
- package/dist/chat/tools/fs_editor.js +16 -14
- package/dist/chat/tools/fs_editor.js.map +1 -1
- package/dist/core/file_open_kind.d.ts +7 -0
- package/dist/core/file_open_kind.d.ts.map +1 -0
- package/dist/core/file_open_kind.js +82 -0
- package/dist/core/file_open_kind.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs_editor.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/fs_editor.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fs_editor.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/fs_editor.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoB3D,wBAAsB,oBAAoB,CACxC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0ErB;AAyBD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EAChE,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
|
|
@@ -25,22 +25,18 @@
|
|
|
25
25
|
import { promises as fs } from 'node:fs';
|
|
26
26
|
import path from 'node:path';
|
|
27
27
|
import { runReadFile } from '../tools.js';
|
|
28
|
+
import { classifyForOpen } from '../../core/file_open_kind.js';
|
|
28
29
|
/* ============================================================
|
|
29
30
|
* forge_open_file_for_editor
|
|
30
31
|
* ============================================================ */
|
|
31
|
-
/* PND-102 -- formatos que NO se deben volcar crudos a una
|
|
32
|
-
* editor: son binarios; renderizarlos como texto congela
|
|
33
|
-
*
|
|
34
|
-
* (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
'.png': 'media', '.jpg': 'media', '.jpeg': 'media', '.gif': 'media', '.webp': 'media',
|
|
40
|
-
'.zip': 'binary', '.gz': 'binary', '.tar': 'binary', '.7z': 'binary', '.rar': 'binary',
|
|
41
|
-
'.exe': 'binary', '.dll': 'binary', '.bin': 'binary', '.so': 'binary', '.dylib': 'binary',
|
|
42
|
-
'.mp4': 'media', '.mp3': 'media', '.wav': 'media', '.mov': 'media',
|
|
43
|
-
};
|
|
32
|
+
/* PND-102/150 -- formatos que NO se deben volcar crudos a una
|
|
33
|
+
* pestana de editor: son binarios; renderizarlos como texto congela
|
|
34
|
+
* el panel. La clasificacion vive ahora en el core compartido
|
|
35
|
+
* (classifyForOpen) para que el doble-click del usuario y este verbo
|
|
36
|
+
* del modelo coincidan; office docs steereamos a desktop.open /
|
|
37
|
+
* office.*.read, el resto un mensaje claro. SVG es la excepcion: es
|
|
38
|
+
* texto editable, asi que el modelo SI lo puede abrir aca (el router
|
|
39
|
+
* del doble-click lo trata como imagen). */
|
|
44
40
|
/* Cap del contenido que va a una pestana (el panel renderiza en el
|
|
45
41
|
* main thread; megabytes de texto lo cuelgan igual que un binario). */
|
|
46
42
|
const MAX_TAB_CHARS = 600_000;
|
|
@@ -57,7 +53,13 @@ export async function runOpenFileForEditor(args, ctx) {
|
|
|
57
53
|
/* Guarda por extension ANTES de leer: nunca volcar un binario/office
|
|
58
54
|
* a una pestana de texto (eso congelo el panel -- PND-102). */
|
|
59
55
|
const ext = path.extname(rel).toLowerCase();
|
|
60
|
-
const
|
|
56
|
+
const openKind = classifyForOpen(rel);
|
|
57
|
+
/* 'image' includes SVG, but SVG is editable text -- let the model
|
|
58
|
+
* open it in the editor; only refuse true binaries/office/media. */
|
|
59
|
+
const cls = openKind === 'office' ? 'office'
|
|
60
|
+
: (openKind === 'media' || openKind === 'binary' || (openKind === 'image' && ext !== '.svg'))
|
|
61
|
+
? 'binary'
|
|
62
|
+
: '';
|
|
61
63
|
if (cls) {
|
|
62
64
|
const hint = cls === 'office'
|
|
63
65
|
? ('Es un documento de oficina (binario). Para VERLO usa desktop.open({target:"' + rel + '"}) '
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs_editor.js","sourceRoot":"","sources":["../../../src/chat/tools/fs_editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fs_editor.js","sourceRoot":"","sources":["../../../src/chat/tools/fs_editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type OpenKind = 'editor' | 'image' | 'office' | 'media' | 'binary';
|
|
2
|
+
/** Route a file path to the IDE surface that should open it. */
|
|
3
|
+
export declare function classifyForOpen(filePath: string): OpenKind;
|
|
4
|
+
/** Content-Type for the raw-image endpoint. Returns null for any
|
|
5
|
+
* non-image extension so the caller refuses to serve it raw. */
|
|
6
|
+
export declare function imageContentType(filePath: string): string | null;
|
|
7
|
+
//# sourceMappingURL=file_open_kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_open_kind.d.ts","sourceRoot":"","sources":["../../src/core/file_open_kind.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAkC1E,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAU1D;AAED;iEACiE;AACjE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBhE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared file-open classifier -- IDE open routing (PND-150).
|
|
3
|
+
*
|
|
4
|
+
* ONE source of truth for "what surface opens this file" so the
|
|
5
|
+
* user's double-click (files tab / graph node detail) and the
|
|
6
|
+
* model's open-file verb agree, instead of the two divergent
|
|
7
|
+
* extension lists that used to live independently in
|
|
8
|
+
* desktop_open.ts (DANGEROUS_EXT) and fs_editor.ts (BINARY_OPEN_EXT).
|
|
9
|
+
*
|
|
10
|
+
* The axis here is IDE ROUTING, not execution safety: a shell
|
|
11
|
+
* script (.sh/.ps1/.bat) classifies as 'editor' -- in an IDE you
|
|
12
|
+
* EDIT it, you do not run it -- even though desktop_open still
|
|
13
|
+
* refuses to hand it to the OS `start`, which WOULD execute it.
|
|
14
|
+
* Those are different concerns and stay separate.
|
|
15
|
+
*
|
|
16
|
+
* ASCII-only.
|
|
17
|
+
*/
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
/* Raster/vector images -> inline image viewer tab (kind=image). */
|
|
20
|
+
const IMAGE_EXT = new Set([
|
|
21
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.ico', '.avif', '.svg',
|
|
22
|
+
]);
|
|
23
|
+
/* Office / print documents -> their native app (Excel/Word/viewer);
|
|
24
|
+
* editing them as text is wrong. .csv and .txt are deliberately NOT
|
|
25
|
+
* here -- they are plain text and open in the editor. */
|
|
26
|
+
const OFFICE_EXT = new Set([
|
|
27
|
+
'.xlsx', '.xls', '.xlsm', '.ods',
|
|
28
|
+
'.docx', '.doc', '.odt', '.rtf',
|
|
29
|
+
'.pptx', '.ppt', '.odp', '.pdf',
|
|
30
|
+
]);
|
|
31
|
+
/* Audio / video -> native player. */
|
|
32
|
+
const MEDIA_EXT = new Set([
|
|
33
|
+
'.mp4', '.mov', '.avi', '.mkv', '.webm',
|
|
34
|
+
'.mp3', '.wav', '.ogg', '.flac', '.m4a', '.aac',
|
|
35
|
+
]);
|
|
36
|
+
/* Compiled binaries + archives + fonts + db files -> not openable in
|
|
37
|
+
* an IDE at all. NOTE: scripts (.sh/.ps1/.bat/.cmd/.vbs) are
|
|
38
|
+
* deliberately NOT here -- they are editable text. */
|
|
39
|
+
const BINARY_EXT = new Set([
|
|
40
|
+
'.exe', '.dll', '.so', '.dylib', '.bin', '.o', '.a', '.lib',
|
|
41
|
+
'.class', '.jar', '.wasm', '.node', '.pyc', '.pyd',
|
|
42
|
+
'.msi', '.dmg', '.pkg', '.deb', '.rpm', '.appimage',
|
|
43
|
+
'.zip', '.gz', '.tgz', '.tar', '.7z', '.rar', '.bz2', '.xz', '.zst',
|
|
44
|
+
'.woff', '.woff2', '.ttf', '.otf', '.eot',
|
|
45
|
+
'.db', '.sqlite', '.sqlite3', '.mdb', '.dat',
|
|
46
|
+
]);
|
|
47
|
+
/** Route a file path to the IDE surface that should open it. */
|
|
48
|
+
export function classifyForOpen(filePath) {
|
|
49
|
+
const ext = path.extname(String(filePath || '')).toLowerCase();
|
|
50
|
+
if (IMAGE_EXT.has(ext))
|
|
51
|
+
return 'image';
|
|
52
|
+
if (OFFICE_EXT.has(ext))
|
|
53
|
+
return 'office';
|
|
54
|
+
if (MEDIA_EXT.has(ext))
|
|
55
|
+
return 'media';
|
|
56
|
+
if (BINARY_EXT.has(ext))
|
|
57
|
+
return 'binary';
|
|
58
|
+
/* Default: editable text/source (config, scripts, code, csv,
|
|
59
|
+
* unknown). The editor path's own NUL-byte + size guard is the
|
|
60
|
+
* final backstop for a mislabeled binary. */
|
|
61
|
+
return 'editor';
|
|
62
|
+
}
|
|
63
|
+
/** Content-Type for the raw-image endpoint. Returns null for any
|
|
64
|
+
* non-image extension so the caller refuses to serve it raw. */
|
|
65
|
+
export function imageContentType(filePath) {
|
|
66
|
+
const ext = path.extname(String(filePath || '')).toLowerCase();
|
|
67
|
+
switch (ext) {
|
|
68
|
+
case '.png': return 'image/png';
|
|
69
|
+
case '.jpg':
|
|
70
|
+
case '.jpeg': return 'image/jpeg';
|
|
71
|
+
case '.gif': return 'image/gif';
|
|
72
|
+
case '.webp': return 'image/webp';
|
|
73
|
+
case '.bmp': return 'image/bmp';
|
|
74
|
+
case '.ico': return 'image/x-icon';
|
|
75
|
+
case '.avif': return 'image/avif';
|
|
76
|
+
/* SVG is served for <img src> only (same-origin loopback); an
|
|
77
|
+
* <img>-loaded SVG cannot run scripts, so this is safe here. */
|
|
78
|
+
case '.svg': return 'image/svg+xml';
|
|
79
|
+
default: return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=file_open_kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_open_kind.js","sourceRoot":"","sources":["../../src/core/file_open_kind.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.
|
|
5
|
+
export declare const VERSION = "1.0.76";
|
|
6
6
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nac3/forge-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.76",
|
|
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>",
|