izanagi-ai 3.4.0 → 3.5.0
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/.manifest +2 -2
- package/CHANGELOG.md +13 -0
- package/dist/runtime/contracts/artifacts.d.ts.map +1 -1
- package/dist/runtime/contracts/artifacts.js +4 -1
- package/dist/runtime/contracts/artifacts.js.map +1 -1
- package/dist/runtime/tests/tools.test.js +12 -0
- package/dist/runtime/tests/tools.test.js.map +1 -1
- package/dist/runtime/tests/unicode-hygiene.test.d.ts +2 -0
- package/dist/runtime/tests/unicode-hygiene.test.d.ts.map +1 -0
- package/dist/runtime/tests/unicode-hygiene.test.js +43 -0
- package/dist/runtime/tests/unicode-hygiene.test.js.map +1 -0
- package/dist/runtime/text/unicode-hygiene.d.ts +32 -0
- package/dist/runtime/text/unicode-hygiene.d.ts.map +1 -0
- package/dist/runtime/text/unicode-hygiene.js +66 -0
- package/dist/runtime/text/unicode-hygiene.js.map +1 -0
- package/dist/runtime/tools/registry.d.ts.map +1 -1
- package/dist/runtime/tools/registry.js +6 -1
- package/dist/runtime/tools/registry.js.map +1 -1
- package/package.json +1 -1
package/.manifest
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "izanagi-ai",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Izanagi AI - Modular Skill-Oriented AI Prompt & Agent Framework for Autonomous Software Engineering",
|
|
5
5
|
"author": "Pedro Henrique Sanches Leal",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/pedrohenriquesanchesleal4-debug/izanagi-ai#readme",
|
|
8
|
-
"generatedAt": "2026-08-17T02:
|
|
8
|
+
"generatedAt": "2026-08-17T02:55:24.878Z",
|
|
9
9
|
"agents": [
|
|
10
10
|
{
|
|
11
11
|
"id": "adversarial-critic",
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [3.4.0] — 2026-08-17
|
|
8
|
+
|
|
9
|
+
### Fixed (CRITICAL)
|
|
10
|
+
- **The 3 commits after the 3.3.0 release (crash-safe MemoryStore/Tracer persistence, dashboard live SSE updates, dashboard visual polish) were pushed to GitHub but never published to npm** — `izanagi-ai@3.3.0` on the registry was missing all of it. Caught because the version number hadn't changed, so nothing signaled a re-publish was needed. This release ships everything below.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Crash-safe persistence**: `MemoryStore` now calls `save()` from every mutator (`recordAgentRun`/`recordSkillRun`/`recordModelRun`/`recordFailure`/`invalidateFailure`/`archiveFailure`/`addLearning`) instead of relying on one explicit `.save()` at the end of a run. `Tracer.flush()` persists a partial `RunTrace` snapshot after every span closes. Closing the CLI mid-run (Ctrl+C, crash, closed terminal) no longer loses that run's progress.
|
|
14
|
+
- **`izanagi dashboard` live updates**: new `/api/events` Server-Sent Events endpoint backed by `fs.watch` on the state directories (the dashboard and `izanagi run` are separate processes, so this is the channel that actually works across them — the in-memory Event System isn't reachable from a different process). The page now has a "● live" indicator and refreshes the visible run/benchmark list automatically.
|
|
15
|
+
- **Dashboard Execution Graph** now renders `trace.graph.parallelBatches` as real side-by-side lanes instead of a flat span list (falls back to spans for older traces without a graph). Runs without an `evaluation` field render a "running" badge instead of breaking. Memory panel gained a Models table (`recordModelRun` stats existed but were never surfaced anywhere).
|
|
16
|
+
- **Dashboard visual polish**: refined palette, pill badges, animated live-dot, and a real stats bar (total runs, pass rate, avg score, in-progress count, runs needing healing) computed client-side from the same data already fetched — no invented numbers.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
7
20
|
## [3.3.0] — 2026-08-16
|
|
8
21
|
|
|
9
22
|
### Added
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/runtime/contracts/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/runtime/contracts/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAa7E;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CA2EjE,CAAC;AAYF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CA6CvF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAc3G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAOzH"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* devolve issues estruturadas.
|
|
7
7
|
*/
|
|
8
8
|
import crypto from 'crypto';
|
|
9
|
+
import { sanitizeText } from '../text/unicode-hygiene.js';
|
|
9
10
|
const STUB_PATTERNS = [
|
|
10
11
|
/TODO/i,
|
|
11
12
|
/FIXME/i,
|
|
@@ -162,7 +163,9 @@ export function validateArtifact(kind, content) {
|
|
|
162
163
|
* Cria um ArtifactRef validado a partir de conteúdo.
|
|
163
164
|
*/
|
|
164
165
|
export function makeArtifact(kind, name, content, path) {
|
|
165
|
-
|
|
166
|
+
// Unicode Hygiene (sempre ativa): hash/validação refletem o mesmo texto que
|
|
167
|
+
// de fato seria gravado em disco via fs.write, não o texto bruto do modelo.
|
|
168
|
+
const text = sanitizeText(toText(content)).text;
|
|
166
169
|
const report = validateArtifact(kind, text);
|
|
167
170
|
return {
|
|
168
171
|
kind,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/runtime/contracts/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/runtime/contracts/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,18 @@ test('tools: discover só expõe tools compatíveis com permissões', () => {
|
|
|
14
14
|
assert.ok(!readOnly.some((t) => t.id === 'fs.write'), 'fs.write negado por permissão');
|
|
15
15
|
assert.ok(readOnly.some((t) => t.id === 'fs.ls'), 'fs.ls disponível (requer fs:read)');
|
|
16
16
|
});
|
|
17
|
+
test('tools: fs.write aplica Unicode Hygiene — remove invisíveis e normaliza espaços homóglifos', () => {
|
|
18
|
+
const registry = new ToolRegistry();
|
|
19
|
+
const ctx = tmpCtx();
|
|
20
|
+
const file = path.join(ctx.baseDir, 'code.ts');
|
|
21
|
+
// U+200B (zero-width space) no meio de um identificador + U+00A0 (non-breaking space) como separador
|
|
22
|
+
const dirty = `const foo${'\u200B'}bar${'\u00A0'}=${'\u00A0'}1;`;
|
|
23
|
+
registry.execute('fs.write', { file, content: dirty }, ctx);
|
|
24
|
+
const written = fs.readFileSync(file, 'utf-8');
|
|
25
|
+
assert.equal(written, 'const foobar = 1;');
|
|
26
|
+
assert.ok(!written.includes('\u200B'), 'zero-width space removido');
|
|
27
|
+
assert.ok(!written.includes('\u00A0'), 'non-breaking space normalizado para espaço comum');
|
|
28
|
+
});
|
|
17
29
|
test('tools: fs.write + fs.read em ciclo completo', () => {
|
|
18
30
|
const registry = new ToolRegistry();
|
|
19
31
|
const ctx = tmpCtx();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../../src/runtime/tests/tools.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,SAAS,MAAM;IACb,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;AACrH,CAAC;AAED,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,+BAA+B,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,mCAAmC,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAElD,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,MAA8B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../../src/runtime/tests/tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unicode-hygiene.test.d.ts","sourceRoot":"","sources":["../../../src/runtime/tests/unicode-hygiene.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { sanitizeText } from '../text/unicode-hygiene.js';
|
|
4
|
+
test('unicode-hygiene: remove zero-width space no meio de um identificador', () => {
|
|
5
|
+
const dirty = `const foo${''}bar = 1;`;
|
|
6
|
+
const result = sanitizeText(dirty);
|
|
7
|
+
assert.equal(result.text, 'const foobar = 1;');
|
|
8
|
+
assert.equal(result.removed, 1);
|
|
9
|
+
assert.equal(result.changed, true);
|
|
10
|
+
});
|
|
11
|
+
test('unicode-hygiene: normaliza non-breaking space e outros espaços homóglifos para espaço comum', () => {
|
|
12
|
+
const dirty = `const${' '}x${' '}=${' '}1;`; // NBSP, em space, ideographic space
|
|
13
|
+
const result = sanitizeText(dirty);
|
|
14
|
+
assert.equal(result.text, 'const x = 1;');
|
|
15
|
+
assert.equal(result.normalizedSpaces, 3);
|
|
16
|
+
});
|
|
17
|
+
test('unicode-hygiene: remove marcas bidi/de formatação invisíveis (BOM, word joiner, RLO)', () => {
|
|
18
|
+
const dirty = `${''}function f()${''} { return${''}1; }`;
|
|
19
|
+
const result = sanitizeText(dirty);
|
|
20
|
+
assert.equal(result.text, 'function f() { return1; }');
|
|
21
|
+
assert.equal(result.removed, 3);
|
|
22
|
+
});
|
|
23
|
+
test('unicode-hygiene: texto limpo não é alterado (changed=false, removed=0)', () => {
|
|
24
|
+
const clean = 'function add(a, b) {\n return a + b;\n}';
|
|
25
|
+
const result = sanitizeText(clean);
|
|
26
|
+
assert.equal(result.text, clean);
|
|
27
|
+
assert.equal(result.removed, 0);
|
|
28
|
+
assert.equal(result.normalizedSpaces, 0);
|
|
29
|
+
assert.equal(result.changed, false);
|
|
30
|
+
});
|
|
31
|
+
test('unicode-hygiene: preserva emoji e texto em outros idiomas (não é uma denylist de tudo não-ASCII)', () => {
|
|
32
|
+
const text = 'função calcular_média() # 中文注释 🚀';
|
|
33
|
+
const result = sanitizeText(text);
|
|
34
|
+
assert.equal(result.text, text);
|
|
35
|
+
assert.equal(result.changed, false);
|
|
36
|
+
});
|
|
37
|
+
test('unicode-hygiene: lida com múltiplos caracteres invisíveis seguidos sem quebrar surrogate pairs', () => {
|
|
38
|
+
const dirty = `a${''}${''}${''}b 🚀${''}c`;
|
|
39
|
+
const result = sanitizeText(dirty);
|
|
40
|
+
assert.equal(result.text, 'ab 🚀c');
|
|
41
|
+
assert.equal(result.removed, 4);
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=unicode-hygiene.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unicode-hygiene.test.js","sourceRoot":"","sources":["../../../src/runtime/tests/unicode-hygiene.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;IAChF,MAAM,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6FAA6F,EAAE,GAAG,EAAE;IACvG,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,oCAAoC;IACjF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,GAAG,EAAE;IAChG,MAAM,KAAK,GAAG,GAAG,GAAG,eAAe,GAAG,YAAY,GAAG,MAAM,CAAC;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,KAAK,GAAG,0CAA0C,CAAC;IACzD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kGAAkG,EAAE,GAAG,EAAE;IAC5G,MAAM,IAAI,GAAG,mCAAmC,CAAC;IACjD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gGAAgG,EAAE,GAAG,EAAE;IAC1G,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC;IAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unicode Hygiene — remove caracteres invisíveis/homóglifos que modelos de
|
|
3
|
+
* linguagem às vezes inserem no meio de código gerado (zero-width space no
|
|
4
|
+
* meio de um identificador, non-breaking space no lugar de espaço normal
|
|
5
|
+
* quebrando indentação sensível). Determinístico, sem chamada de rede/LLM —
|
|
6
|
+
* uma passada de regex sobre a string, custo desprezível mesmo em arquivos
|
|
7
|
+
* grandes.
|
|
8
|
+
*
|
|
9
|
+
* Escopo deliberadamente limitado: isto NÃO tenta reverter watermarking
|
|
10
|
+
* estatístico (padrões de amostragem de token tipo SynthID/Kirchenbauer).
|
|
11
|
+
* Fazer isso de verdade exigiria ou modelos de ML pesados (dependência
|
|
12
|
+
* gigante, contra a filosofia zero-dep do framework) ou reescrever o texto
|
|
13
|
+
* via outra chamada de LLM (custo de token real, e efeito colateral de
|
|
14
|
+
* remover um sinal de proveniência que existe por razão legítima de
|
|
15
|
+
* confiança/segurança — não é o mesmo problema que "esse espaço invisível
|
|
16
|
+
* quebrou meu código"). Ver CHANGELOG para a decisão completa.
|
|
17
|
+
*/
|
|
18
|
+
export interface SanitizeResult {
|
|
19
|
+
text: string;
|
|
20
|
+
/** Quantos caracteres invisíveis foram removidos. */
|
|
21
|
+
removed: number;
|
|
22
|
+
/** Quantos espaços homóglifos foram normalizados para espaço comum. */
|
|
23
|
+
normalizedSpaces: number;
|
|
24
|
+
/** Verdadeiro se algo mudou (útil pra log/telemetria sem comparar strings de novo). */
|
|
25
|
+
changed: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Remove caracteres de controle invisíveis e normaliza espaços homóglifos.
|
|
29
|
+
* Sempre determinístico e local — nenhuma chamada de rede/LLM.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sanitizeText(input: string): SanitizeResult;
|
|
32
|
+
//# sourceMappingURL=unicode-hygiene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unicode-hygiene.d.ts","sourceRoot":"","sources":["../../../src/runtime/text/unicode-hygiene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoCH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAe1D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unicode Hygiene — remove caracteres invisíveis/homóglifos que modelos de
|
|
3
|
+
* linguagem às vezes inserem no meio de código gerado (zero-width space no
|
|
4
|
+
* meio de um identificador, non-breaking space no lugar de espaço normal
|
|
5
|
+
* quebrando indentação sensível). Determinístico, sem chamada de rede/LLM —
|
|
6
|
+
* uma passada de regex sobre a string, custo desprezível mesmo em arquivos
|
|
7
|
+
* grandes.
|
|
8
|
+
*
|
|
9
|
+
* Escopo deliberadamente limitado: isto NÃO tenta reverter watermarking
|
|
10
|
+
* estatístico (padrões de amostragem de token tipo SynthID/Kirchenbauer).
|
|
11
|
+
* Fazer isso de verdade exigiria ou modelos de ML pesados (dependência
|
|
12
|
+
* gigante, contra a filosofia zero-dep do framework) ou reescrever o texto
|
|
13
|
+
* via outra chamada de LLM (custo de token real, e efeito colateral de
|
|
14
|
+
* remover um sinal de proveniência que existe por razão legítima de
|
|
15
|
+
* confiança/segurança — não é o mesmo problema que "esse espaço invisível
|
|
16
|
+
* quebrou meu código"). Ver CHANGELOG para a decisão completa.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Codepoints de controle/formatação invisíveis comuns em saída de LLM ou
|
|
20
|
+
* paste quebrado. Listados como números hex (nunca como caractere literal
|
|
21
|
+
* no fonte — seria irônico um arquivo sobre "detectar invisíveis" escondê-los
|
|
22
|
+
* na própria regex) e compilados numa regex: uma versão anterior iterava
|
|
23
|
+
* `for...of` (grapheme-aware, lento — ~260ms num arquivo de 1.5MB a cada
|
|
24
|
+
* `fs.write`); regex nativa do V8 faz o mesmo em <10ms, que é o que "não pode
|
|
25
|
+
* impactar em nada" exige de verdade.
|
|
26
|
+
*/
|
|
27
|
+
const INVISIBLE_CODEPOINTS = [
|
|
28
|
+
0x00ad, 0x034f, 0x061c,
|
|
29
|
+
0x180b, 0x180c, 0x180d, 0x180e,
|
|
30
|
+
0x200b, 0x200c, 0x200d, 0x200e, 0x200f,
|
|
31
|
+
0x202a, 0x202b, 0x202c, 0x202d, 0x202e,
|
|
32
|
+
0x2060, 0x2061, 0x2062, 0x2063, 0x2064,
|
|
33
|
+
0x2066, 0x2067, 0x2068, 0x2069,
|
|
34
|
+
0xfeff, 0xfff9, 0xfffa, 0xfffb,
|
|
35
|
+
];
|
|
36
|
+
/** Espaços "exóticos" que se parecem com U+0020 mas não são — normalizados para espaço comum. */
|
|
37
|
+
const SPACE_HOMOGLYPH_CODEPOINTS = [
|
|
38
|
+
0x00a0, 0x1680,
|
|
39
|
+
0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200a,
|
|
40
|
+
0x202f, 0x205f, 0x3000,
|
|
41
|
+
];
|
|
42
|
+
function codepointsToClassRegex(codepoints) {
|
|
43
|
+
const chars = codepoints.map((c) => String.fromCodePoint(c)).join('');
|
|
44
|
+
return new RegExp(`[${chars}]`, 'gu');
|
|
45
|
+
}
|
|
46
|
+
const INVISIBLE_RE = codepointsToClassRegex(INVISIBLE_CODEPOINTS);
|
|
47
|
+
const SPACE_HOMOGLYPH_RE = codepointsToClassRegex(SPACE_HOMOGLYPH_CODEPOINTS);
|
|
48
|
+
/**
|
|
49
|
+
* Remove caracteres de controle invisíveis e normaliza espaços homóglifos.
|
|
50
|
+
* Sempre determinístico e local — nenhuma chamada de rede/LLM.
|
|
51
|
+
*/
|
|
52
|
+
export function sanitizeText(input) {
|
|
53
|
+
let removed = 0;
|
|
54
|
+
let normalizedSpaces = 0;
|
|
55
|
+
const text = input
|
|
56
|
+
.replace(INVISIBLE_RE, () => {
|
|
57
|
+
removed++;
|
|
58
|
+
return '';
|
|
59
|
+
})
|
|
60
|
+
.replace(SPACE_HOMOGLYPH_RE, () => {
|
|
61
|
+
normalizedSpaces++;
|
|
62
|
+
return ' ';
|
|
63
|
+
});
|
|
64
|
+
return { text, removed, normalizedSpaces, changed: removed > 0 || normalizedSpaces > 0 };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=unicode-hygiene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unicode-hygiene.js","sourceRoot":"","sources":["../../../src/runtime/text/unicode-hygiene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG;IAC3B,MAAM,EAAE,MAAM,EAAE,MAAM;IACtB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAC/B,CAAC;AAEF,iGAAiG;AACjG,MAAM,0BAA0B,GAAG;IACjC,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IACtF,MAAM,EAAE,MAAM,EAAE,MAAM;CACvB,CAAC;AAEF,SAAS,sBAAsB,CAAC,UAAoB;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,0BAA0B,CAAC,CAAC;AAY9E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,MAAM,IAAI,GAAG,KAAK;SACf,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,OAAO,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,gBAAgB,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/runtime/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/runtime/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG7F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,cAAc,CAAC;IACnC,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC;CACpD;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAyED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,GAAE,YAAiC;IAKrD,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAKnC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,CAAA;KAAE,CAAC;IAUlG,mEAAmE;IACnE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,UAAU;CAmCtE"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import fs from 'fs';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { PolicyEngine } from '../security/policy.js';
|
|
11
|
+
import { sanitizeText } from '../text/unicode-hygiene.js';
|
|
11
12
|
function ensureInside(baseDir, target, allowedDirs) {
|
|
12
13
|
const abs = path.resolve(target);
|
|
13
14
|
const safeZones = [path.resolve(baseDir), ...(allowedDirs ?? []).map((d) => path.resolve(d))];
|
|
@@ -56,7 +57,11 @@ const BUILTIN_TOOLS = {
|
|
|
56
57
|
const { file, content } = input;
|
|
57
58
|
const abs = ensureInside(ctx.baseDir, file, ctx.allowedDirs);
|
|
58
59
|
fs.mkdirSync(path.dirname(abs), { recursive: true });
|
|
59
|
-
|
|
60
|
+
// Unicode Hygiene (sempre ativa, zero custo de token): remove caracteres
|
|
61
|
+
// invisíveis e normaliza espaços homóglifos antes de gravar — ver
|
|
62
|
+
// runtime/text/unicode-hygiene.ts para o porquê do escopo limitado.
|
|
63
|
+
const { text: clean } = sanitizeText(content);
|
|
64
|
+
fs.writeFileSync(abs, clean, 'utf-8');
|
|
60
65
|
return { written: abs };
|
|
61
66
|
},
|
|
62
67
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/runtime/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAA0C,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/runtime/tools/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED