@tinyviber/a2h 0.1.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/README.md +229 -0
- package/bin/a2h.js +7 -0
- package/dist/actions/engine.d.ts +40 -0
- package/dist/actions/engine.d.ts.map +1 -0
- package/dist/actions/engine.js +227 -0
- package/dist/actions/engine.js.map +1 -0
- package/dist/actions/policy.d.ts +8 -0
- package/dist/actions/policy.d.ts.map +1 -0
- package/dist/actions/policy.js +55 -0
- package/dist/actions/policy.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +258 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +8 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +69 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/build.d.ts +8 -0
- package/dist/ir/build.d.ts.map +1 -0
- package/dist/ir/build.js +397 -0
- package/dist/ir/build.js.map +1 -0
- package/dist/ir/enrich.d.ts +21 -0
- package/dist/ir/enrich.d.ts.map +1 -0
- package/dist/ir/enrich.js +177 -0
- package/dist/ir/enrich.js.map +1 -0
- package/dist/ir/identity.d.ts +3 -0
- package/dist/ir/identity.d.ts.map +1 -0
- package/dist/ir/identity.js +91 -0
- package/dist/ir/identity.js.map +1 -0
- package/dist/ir/scoring.d.ts +7 -0
- package/dist/ir/scoring.d.ts.map +1 -0
- package/dist/ir/scoring.js +88 -0
- package/dist/ir/scoring.js.map +1 -0
- package/dist/parsers/code.d.ts +3 -0
- package/dist/parsers/code.d.ts.map +1 -0
- package/dist/parsers/code.js +17 -0
- package/dist/parsers/code.js.map +1 -0
- package/dist/parsers/diff.d.ts +11 -0
- package/dist/parsers/diff.d.ts.map +1 -0
- package/dist/parsers/diff.js +125 -0
- package/dist/parsers/diff.js.map +1 -0
- package/dist/parsers/json.d.ts +3 -0
- package/dist/parsers/json.d.ts.map +1 -0
- package/dist/parsers/json.js +16 -0
- package/dist/parsers/json.js.map +1 -0
- package/dist/parsers/log.d.ts +3 -0
- package/dist/parsers/log.d.ts.map +1 -0
- package/dist/parsers/log.js +105 -0
- package/dist/parsers/log.js.map +1 -0
- package/dist/parsers/markdown.d.ts +15 -0
- package/dist/parsers/markdown.d.ts.map +1 -0
- package/dist/parsers/markdown.js +89 -0
- package/dist/parsers/markdown.js.map +1 -0
- package/dist/parsers/text.d.ts +24 -0
- package/dist/parsers/text.d.ts.map +1 -0
- package/dist/parsers/text.js +98 -0
- package/dist/parsers/text.js.map +1 -0
- package/dist/presentation/blocks.d.ts +14 -0
- package/dist/presentation/blocks.d.ts.map +1 -0
- package/dist/presentation/blocks.js +87 -0
- package/dist/presentation/blocks.js.map +1 -0
- package/dist/presentation/present.d.ts +12 -0
- package/dist/presentation/present.d.ts.map +1 -0
- package/dist/presentation/present.js +115 -0
- package/dist/presentation/present.js.map +1 -0
- package/dist/providers/mock.d.ts +3 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +171 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/providers/registry.d.ts +12 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +20 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +64 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +40 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/renderer/assets/index.html +41 -0
- package/dist/renderer/assets/js/actions.js +205 -0
- package/dist/renderer/assets/js/api.js +75 -0
- package/dist/renderer/assets/js/artifacts.js +422 -0
- package/dist/renderer/assets/js/blocks.js +301 -0
- package/dist/renderer/assets/js/bus.js +21 -0
- package/dist/renderer/assets/js/cards.js +137 -0
- package/dist/renderer/assets/js/dom.js +61 -0
- package/dist/renderer/assets/js/format.js +118 -0
- package/dist/renderer/assets/js/main.js +125 -0
- package/dist/renderer/assets/js/nav.js +80 -0
- package/dist/renderer/assets/js/router.js +64 -0
- package/dist/renderer/assets/js/store.js +69 -0
- package/dist/renderer/assets/js/views.js +356 -0
- package/dist/renderer/assets/styles.css +856 -0
- package/dist/renderer/content.d.ts +11 -0
- package/dist/renderer/content.d.ts.map +1 -0
- package/dist/renderer/content.js +114 -0
- package/dist/renderer/content.js.map +1 -0
- package/dist/scanner/classify.d.ts +17 -0
- package/dist/scanner/classify.d.ts.map +1 -0
- package/dist/scanner/classify.js +117 -0
- package/dist/scanner/classify.js.map +1 -0
- package/dist/scanner/git.d.ts +3 -0
- package/dist/scanner/git.d.ts.map +1 -0
- package/dist/scanner/git.js +43 -0
- package/dist/scanner/git.js.map +1 -0
- package/dist/scanner/ignore.d.ts +22 -0
- package/dist/scanner/ignore.d.ts.map +1 -0
- package/dist/scanner/ignore.js +57 -0
- package/dist/scanner/ignore.js.map +1 -0
- package/dist/scanner/scan.d.ts +8 -0
- package/dist/scanner/scan.d.ts.map +1 -0
- package/dist/scanner/scan.js +108 -0
- package/dist/scanner/scan.js.map +1 -0
- package/dist/security/boundary.d.ts +19 -0
- package/dist/security/boundary.d.ts.map +1 -0
- package/dist/security/boundary.js +59 -0
- package/dist/security/boundary.js.map +1 -0
- package/dist/security/urlPolicy.d.ts +4 -0
- package/dist/security/urlPolicy.d.ts.map +1 -0
- package/dist/security/urlPolicy.js +56 -0
- package/dist/security/urlPolicy.js.map +1 -0
- package/dist/security/workspaceRead.d.ts +25 -0
- package/dist/security/workspaceRead.d.ts.map +1 -0
- package/dist/security/workspaceRead.js +103 -0
- package/dist/security/workspaceRead.js.map +1 -0
- package/dist/semantics/load.d.ts +11 -0
- package/dist/semantics/load.d.ts.map +1 -0
- package/dist/semantics/load.js +537 -0
- package/dist/semantics/load.js.map +1 -0
- package/dist/semantics/resolve.d.ts +37 -0
- package/dist/semantics/resolve.d.ts.map +1 -0
- package/dist/semantics/resolve.js +211 -0
- package/dist/semantics/resolve.js.map +1 -0
- package/dist/semantics/types.d.ts +158 -0
- package/dist/semantics/types.d.ts.map +1 -0
- package/dist/semantics/types.js +3 -0
- package/dist/semantics/types.js.map +1 -0
- package/dist/server/server.d.ts +17 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +510 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/workspace.d.ts +53 -0
- package/dist/server/workspace.d.ts.map +1 -0
- package/dist/server/workspace.js +211 -0
- package/dist/server/workspace.js.map +1 -0
- package/dist/types.d.ts +570 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/util/path.d.ts +11 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +35 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/safeRead.d.ts +38 -0
- package/dist/util/safeRead.d.ts.map +1 -0
- package/dist/util/safeRead.js +117 -0
- package/dist/util/safeRead.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveIdentity = deriveIdentity;
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const safeRead_1 = require("../util/safeRead");
|
|
6
|
+
// Derives a human-facing identity for the workspace without requiring a
|
|
7
|
+
// strict schema: name and one-line summary are sourced from whatever is
|
|
8
|
+
// actually present (README heading, package.json, directory name).
|
|
9
|
+
const README_NAMES = new Set([
|
|
10
|
+
'readme.md', 'readme.markdown', 'readme.mdown', 'readme.txt',
|
|
11
|
+
'readme.mdx', 'readme.rst', 'readme',
|
|
12
|
+
]);
|
|
13
|
+
const MAX_READ_BYTES = 64 * 1024;
|
|
14
|
+
function findReadme(files) {
|
|
15
|
+
const candidates = files
|
|
16
|
+
.filter((f) => f.kind === 'markdown' || f.kind === 'other')
|
|
17
|
+
.filter((f) => README_NAMES.has(f.path.split('/').pop().toLowerCase()))
|
|
18
|
+
.sort((a, b) => a.depth - b.depth || a.path.length - b.path.length);
|
|
19
|
+
return candidates[0];
|
|
20
|
+
}
|
|
21
|
+
function readHead(absPath) {
|
|
22
|
+
return (0, safeRead_1.readHeadNoFollow)(absPath, MAX_READ_BYTES) ?? '';
|
|
23
|
+
}
|
|
24
|
+
function extractHeading(md) {
|
|
25
|
+
const lines = md.split(/\r?\n/);
|
|
26
|
+
let title;
|
|
27
|
+
let summary;
|
|
28
|
+
let inTitle = false;
|
|
29
|
+
for (const raw of lines) {
|
|
30
|
+
const line = raw.trim();
|
|
31
|
+
if (!title) {
|
|
32
|
+
const h1 = line.match(/^#\s+(.+)$/);
|
|
33
|
+
if (h1) {
|
|
34
|
+
title = h1[1].replace(/[`*_~]/g, '').trim();
|
|
35
|
+
inTitle = true;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Skip frontmatter delimiters and html comments before a title.
|
|
39
|
+
if (line === '---' || line === '+++' || line.startsWith('<!--') || line === '')
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
else if (inTitle) {
|
|
43
|
+
// Find the first prose paragraph after the title.
|
|
44
|
+
if (line.startsWith('#') || line.startsWith('```') || line.startsWith('>') || line.startsWith('|')) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (line === '')
|
|
48
|
+
continue;
|
|
49
|
+
if (line.startsWith('- ') || line.startsWith('* ') || line.startsWith('1. '))
|
|
50
|
+
break;
|
|
51
|
+
summary = line.replace(/[`*_]/g, '').trim();
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (summary && summary.length > 200)
|
|
56
|
+
summary = summary.slice(0, 197) + '…';
|
|
57
|
+
return { title, summary };
|
|
58
|
+
}
|
|
59
|
+
/** Enough for any real package.json; enough to stop a pathological one. */
|
|
60
|
+
const MAX_PACKAGE_JSON_BYTES = 256 * 1024;
|
|
61
|
+
function readPackageJson(rootDir) {
|
|
62
|
+
// A workspace file like any other: read through the no-follow primitive, so
|
|
63
|
+
// a `package.json` that is a link to something outside contributes nothing,
|
|
64
|
+
// and a huge one cannot be used to make startup expensive.
|
|
65
|
+
const read = (0, safeRead_1.readFileNoFollow)(`${rootDir}/package.json`, MAX_PACKAGE_JSON_BYTES);
|
|
66
|
+
if (!read)
|
|
67
|
+
return {};
|
|
68
|
+
try {
|
|
69
|
+
const pkg = JSON.parse(read.text);
|
|
70
|
+
return {
|
|
71
|
+
name: typeof pkg.name === 'string' ? pkg.name : undefined,
|
|
72
|
+
description: typeof pkg.description === 'string' ? pkg.description : undefined,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return {};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function deriveIdentity(rootDir, files) {
|
|
80
|
+
const readme = findReadme(files);
|
|
81
|
+
const heading = readme ? extractHeading(readHead(readme.absolutePath)) : {};
|
|
82
|
+
const pkg = readPackageJson(rootDir);
|
|
83
|
+
const name = heading.title || pkg.name || prettifyDirName((0, node_path_1.basename)(rootDir));
|
|
84
|
+
const summary = heading.summary || pkg.description;
|
|
85
|
+
return { name, summary };
|
|
86
|
+
}
|
|
87
|
+
function prettifyDirName(dirName) {
|
|
88
|
+
// "my-cool-repo" -> "my cool repo"
|
|
89
|
+
return dirName.replace(/[-_]+/g, ' ').trim();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/ir/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/ir/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAiD9D,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAoChF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scoreArtifact = scoreArtifact;
|
|
4
|
+
// Heuristic scoring: turns a file into a presentation priority plus a few
|
|
5
|
+
// human tags. Deterministic — no model involved. The idea is to surface what
|
|
6
|
+
// a human should read *first* in a messy agent workspace.
|
|
7
|
+
//
|
|
8
|
+
// This is the *fallback* path: a producer-declared priority always wins.
|
|
9
|
+
const KIND_BASE = {
|
|
10
|
+
readme: 1000,
|
|
11
|
+
report: 500,
|
|
12
|
+
diff: 450,
|
|
13
|
+
markdown: 320,
|
|
14
|
+
image: 260,
|
|
15
|
+
log: 210,
|
|
16
|
+
json: 190,
|
|
17
|
+
code: 110,
|
|
18
|
+
file: 60,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Producer-defined roles have no built-in base score. They are treated as
|
|
22
|
+
* "worth reading" — slightly above a plain note, well below an explicit
|
|
23
|
+
* report — and producers can always override with an explicit priority.
|
|
24
|
+
*/
|
|
25
|
+
const UNKNOWN_ROLE_BASE = 300;
|
|
26
|
+
const HIGH_SIGNAL = [
|
|
27
|
+
{ re: /final/i, delta: 80 },
|
|
28
|
+
{ re: /latest/i, delta: 60 },
|
|
29
|
+
{ re: /summary/i, delta: 50 },
|
|
30
|
+
{ re: /report/i, delta: 40 },
|
|
31
|
+
{ re: /result/i, delta: 30 },
|
|
32
|
+
{ re: /conclusion/i, delta: 30 },
|
|
33
|
+
{ re: /decision/i, delta: 30 },
|
|
34
|
+
{ re: /answer/i, delta: 20 },
|
|
35
|
+
];
|
|
36
|
+
const LOW_SIGNAL = [
|
|
37
|
+
{ re: /(^|\/|[-_])tmp($|\/|[-_])/i, delta: -120 },
|
|
38
|
+
{ re: /(^|\/|[-_])scratch($|\/|[-_])/i, delta: -100 },
|
|
39
|
+
{ re: /draft/i, delta: -80 },
|
|
40
|
+
{ re: /wip/i, delta: -80 },
|
|
41
|
+
{ re: /backup/i, delta: -70 },
|
|
42
|
+
{ re: /\.bak/i, delta: -70 },
|
|
43
|
+
{ re: /old/i, delta: -50 },
|
|
44
|
+
{ re: /deprecated/i, delta: -50 },
|
|
45
|
+
];
|
|
46
|
+
function scoreArtifact(kind, entry, nowMs) {
|
|
47
|
+
let priority = KIND_BASE[kind] ?? UNKNOWN_ROLE_BASE;
|
|
48
|
+
const tags = [];
|
|
49
|
+
const name = entry.path.split('/').pop() ?? entry.path;
|
|
50
|
+
const dirPath = entry.path.includes('/') ? entry.path.slice(0, entry.path.lastIndexOf('/')) : '';
|
|
51
|
+
for (const { re, delta } of HIGH_SIGNAL) {
|
|
52
|
+
if (re.test(name))
|
|
53
|
+
priority += delta;
|
|
54
|
+
}
|
|
55
|
+
for (const { re, delta } of LOW_SIGNAL) {
|
|
56
|
+
if (re.test(entry.path))
|
|
57
|
+
priority += delta;
|
|
58
|
+
}
|
|
59
|
+
// Directory conventions.
|
|
60
|
+
if (/(^|\/)(outputs|reports|results|artifacts|deliverables|docs)(\/|$)/i.test(dirPath))
|
|
61
|
+
priority += 30;
|
|
62
|
+
if (/(^|\/)(notes|radar|daily|summaries)(\/|$)/i.test(dirPath))
|
|
63
|
+
priority += 15;
|
|
64
|
+
// Recency: what's new deserves a small lift.
|
|
65
|
+
const ageMs = nowMs - entry.mtimeMs;
|
|
66
|
+
if (ageMs >= 0) {
|
|
67
|
+
if (ageMs < 24 * 3600 * 1000)
|
|
68
|
+
priority += 25;
|
|
69
|
+
else if (ageMs < 7 * 24 * 3600 * 1000)
|
|
70
|
+
priority += 12;
|
|
71
|
+
}
|
|
72
|
+
// Tiny files are usually trivial.
|
|
73
|
+
if (entry.size < 24)
|
|
74
|
+
priority -= 8;
|
|
75
|
+
// Tags.
|
|
76
|
+
if (/final/i.test(name))
|
|
77
|
+
tags.push('final');
|
|
78
|
+
if (/latest/i.test(name) || /-new/i.test(name))
|
|
79
|
+
tags.push('latest');
|
|
80
|
+
if (/(backup|\.bak|old)/i.test(name))
|
|
81
|
+
tags.push('stale');
|
|
82
|
+
if (/(draft|wip)/i.test(name))
|
|
83
|
+
tags.push('draft');
|
|
84
|
+
if (/(^|\/|[-_])tmp($|\/|[-_])/i.test(entry.path))
|
|
85
|
+
tags.push('tmp');
|
|
86
|
+
return { priority, tags };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/ir/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/parsers/code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAUrE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseCode = parseCode;
|
|
4
|
+
const text_1 = require("./text");
|
|
5
|
+
const MAX_CODE_BYTES = 512 * 1024;
|
|
6
|
+
function parseCode(path, language) {
|
|
7
|
+
const { text, truncated } = (0, text_1.readFileText)(path, MAX_CODE_BYTES);
|
|
8
|
+
const lines = (0, text_1.splitLines)(text);
|
|
9
|
+
return {
|
|
10
|
+
type: 'code',
|
|
11
|
+
language: language || 'text',
|
|
12
|
+
raw: text,
|
|
13
|
+
totalLines: lines.length,
|
|
14
|
+
truncated,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/parsers/code.ts"],"names":[],"mappings":";;AAKA,8BAUC;AAdD,iCAAkD;AAElD,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;AAElC,SAAgB,SAAS,CAAC,IAAY,EAAE,QAAgB;IACtD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAA,mBAAY,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAA,iBAAU,EAAC,IAAI,CAAC,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,QAAQ,IAAI,MAAM;QAC5B,GAAG,EAAE,IAAI;QACT,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DiffContent } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a unified diff into structured hunks.
|
|
4
|
+
*
|
|
5
|
+
* Robustness matters more than fidelity here: agent-produced patches are
|
|
6
|
+
* frequently malformed (wrong hunk counts, truncated output, pasted fragments).
|
|
7
|
+
* Anything the parser rejects degrades to a plain line listing rather than
|
|
8
|
+
* failing the request.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseDiff(text: string): DiffContent;
|
|
11
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/parsers/diff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,UAAU,CAAC;AAQ1E;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAqBnD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDiff = parseDiff;
|
|
4
|
+
const diff_1 = require("diff");
|
|
5
|
+
// Converts a unified diff / patch into a structured form the renderer can lay
|
|
6
|
+
// out for review. Uses the `diff` package's battle-tested patch parser, then
|
|
7
|
+
// reshapes it into our own IR (so renderers never depend on `diff` types).
|
|
8
|
+
const MAX_DIFF_LINES = 6000;
|
|
9
|
+
/**
|
|
10
|
+
* Parses a unified diff into structured hunks.
|
|
11
|
+
*
|
|
12
|
+
* Robustness matters more than fidelity here: agent-produced patches are
|
|
13
|
+
* frequently malformed (wrong hunk counts, truncated output, pasted fragments).
|
|
14
|
+
* Anything the parser rejects degrades to a plain line listing rather than
|
|
15
|
+
* failing the request.
|
|
16
|
+
*/
|
|
17
|
+
function parseDiff(text) {
|
|
18
|
+
let files;
|
|
19
|
+
try {
|
|
20
|
+
const parsed = (0, diff_1.parsePatch)(text);
|
|
21
|
+
files = parsed.length === 0 ? [rawFallback(text)] : parsed.map(convertFile);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
files = [rawFallback(text)];
|
|
25
|
+
}
|
|
26
|
+
let totalLines = 0;
|
|
27
|
+
let truncated = false;
|
|
28
|
+
for (const f of files) {
|
|
29
|
+
for (const h of f.hunks)
|
|
30
|
+
totalLines += h.lines.length;
|
|
31
|
+
}
|
|
32
|
+
if (totalLines > MAX_DIFF_LINES) {
|
|
33
|
+
truncated = true;
|
|
34
|
+
files = truncateFiles(files, MAX_DIFF_LINES);
|
|
35
|
+
totalLines = MAX_DIFF_LINES;
|
|
36
|
+
}
|
|
37
|
+
return { type: 'diff', files, totalLines, truncated };
|
|
38
|
+
}
|
|
39
|
+
function convertFile(p) {
|
|
40
|
+
const oldName = stripGitPrefix(p.oldFileName ?? '');
|
|
41
|
+
const newName = stripGitPrefix(p.newFileName ?? '');
|
|
42
|
+
const path = newName || oldName || '(unknown)';
|
|
43
|
+
let status = 'modified';
|
|
44
|
+
if (!p.oldFileName || p.oldFileName === '/dev/null')
|
|
45
|
+
status = 'added';
|
|
46
|
+
else if (!p.newFileName || p.newFileName === '/dev/null')
|
|
47
|
+
status = 'removed';
|
|
48
|
+
else if (oldName !== newName)
|
|
49
|
+
status = 'renamed';
|
|
50
|
+
let added = 0;
|
|
51
|
+
let removed = 0;
|
|
52
|
+
const hunks = p.hunks.map((h) => {
|
|
53
|
+
const lines = [];
|
|
54
|
+
let oldNo = h.oldStart;
|
|
55
|
+
let newNo = h.newStart;
|
|
56
|
+
for (const raw of h.lines) {
|
|
57
|
+
const text = raw.replace(/\n$/, '');
|
|
58
|
+
if (text === '\') {
|
|
59
|
+
lines.push({ type: 'context', text });
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const ch = raw[0];
|
|
63
|
+
if (ch === '+') {
|
|
64
|
+
added++;
|
|
65
|
+
lines.push({ type: 'add', text: raw.slice(1), newNo });
|
|
66
|
+
newNo++;
|
|
67
|
+
}
|
|
68
|
+
else if (ch === '-') {
|
|
69
|
+
removed++;
|
|
70
|
+
lines.push({ type: 'del', text: raw.slice(1), oldNo });
|
|
71
|
+
oldNo++;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const body = ch === ' ' ? raw.slice(1) : raw;
|
|
75
|
+
lines.push({ type: 'context', text: body, oldNo, newNo });
|
|
76
|
+
oldNo++;
|
|
77
|
+
newNo++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return { header: `@@ -${h.oldStart},${h.oldLines} +${h.newStart},${h.newLines} @@`, lines };
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
path,
|
|
84
|
+
from: p.oldFileName ? stripGitPrefix(p.oldFileName) : undefined,
|
|
85
|
+
to: p.newFileName ? stripGitPrefix(p.newFileName) : undefined,
|
|
86
|
+
status,
|
|
87
|
+
added,
|
|
88
|
+
removed,
|
|
89
|
+
hunks,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function stripGitPrefix(name) {
|
|
93
|
+
return name.replace(/^[ab]\//, '');
|
|
94
|
+
}
|
|
95
|
+
function rawFallback(text) {
|
|
96
|
+
const lines = text
|
|
97
|
+
.split(/\r?\n/)
|
|
98
|
+
.map((line) => ({ type: 'context', text: line }));
|
|
99
|
+
return {
|
|
100
|
+
path: '(patch)',
|
|
101
|
+
status: 'modified',
|
|
102
|
+
added: 0,
|
|
103
|
+
removed: 0,
|
|
104
|
+
hunks: [{ header: '', lines }],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function truncateFiles(files, maxLines) {
|
|
108
|
+
const out = [];
|
|
109
|
+
let budget = maxLines;
|
|
110
|
+
for (const f of files) {
|
|
111
|
+
if (budget <= 0)
|
|
112
|
+
break;
|
|
113
|
+
const copy = { ...f, hunks: [] };
|
|
114
|
+
for (const h of f.hunks) {
|
|
115
|
+
if (budget <= 0)
|
|
116
|
+
break;
|
|
117
|
+
const take = h.lines.slice(0, budget);
|
|
118
|
+
copy.hunks.push({ header: h.header, lines: take });
|
|
119
|
+
budget -= take.length;
|
|
120
|
+
}
|
|
121
|
+
out.push(copy);
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/parsers/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/parsers/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAQnD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseJson = parseJson;
|
|
4
|
+
const text_1 = require("./text");
|
|
5
|
+
const MAX_JSON_BYTES = 2 * 1024 * 1024;
|
|
6
|
+
function parseJson(path) {
|
|
7
|
+
const { text, truncated } = (0, text_1.readFileText)(path, MAX_JSON_BYTES);
|
|
8
|
+
try {
|
|
9
|
+
const data = JSON.parse(text);
|
|
10
|
+
return { type: 'json', data, valid: true, raw: text, truncated };
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return { type: 'json', data: undefined, valid: false, raw: text, truncated };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/parsers/json.ts"],"names":[],"mappings":";;AAKA,8BAQC;AAZD,iCAAsC;AAEtC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvC,SAAgB,SAAS,CAAC,IAAY;IACpC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAA,mBAAY,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/parsers/log.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU3C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,UAAU,CAG/D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseLog = parseLog;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const safeRead_1 = require("../util/safeRead");
|
|
6
|
+
const text_1 = require("./text");
|
|
7
|
+
const ignore_1 = require("../scanner/ignore");
|
|
8
|
+
const ERROR_RE = /\b(error|fatal|exception|panic|traceback|crashed|failed)\b/i;
|
|
9
|
+
const WARN_RE = /\b(warn|warning|deprecated)\b/i;
|
|
10
|
+
const MAX_FULL_BYTES = 512 * 1024;
|
|
11
|
+
const MAX_SCAN_BYTES = 8 * 1024 * 1024;
|
|
12
|
+
function parseLog(path, full = false) {
|
|
13
|
+
if (full)
|
|
14
|
+
return parseFull(path);
|
|
15
|
+
return parseTail(path);
|
|
16
|
+
}
|
|
17
|
+
function parseTail(path) {
|
|
18
|
+
const { lines: tail, truncated } = (0, text_1.readTailLines)(path, ignore_1.LOG_TAIL_LINES);
|
|
19
|
+
const counted = (0, text_1.countLinesFull)(path, MAX_SCAN_BYTES);
|
|
20
|
+
const totalLines = counted.lines[0] ? Number(counted.lines[0]) : tail.length;
|
|
21
|
+
// Error/warning detection scans the whole file (capped), so errors buried
|
|
22
|
+
// far from the tail are still surfaced as flags with their line numbers.
|
|
23
|
+
const { hasErrors, hasWarnings, errorLines } = scanErrors(path, MAX_SCAN_BYTES);
|
|
24
|
+
return { type: 'log', tail, totalLines, truncated, hasErrors, hasWarnings, errorLines };
|
|
25
|
+
}
|
|
26
|
+
function parseFull(path) {
|
|
27
|
+
const { text, truncated } = (0, text_1.readFileText)(path, MAX_FULL_BYTES);
|
|
28
|
+
const lines = (0, text_1.splitLines)(text);
|
|
29
|
+
const totalLines = lines.length;
|
|
30
|
+
const { hasErrors, hasWarnings, errorLines } = scanLines(lines, 0);
|
|
31
|
+
return { type: 'log', tail: lines, totalLines, truncated, hasErrors, hasWarnings, errorLines };
|
|
32
|
+
}
|
|
33
|
+
function scanLines(lines, offset) {
|
|
34
|
+
let hasErrors = false;
|
|
35
|
+
let hasWarnings = false;
|
|
36
|
+
const errorLines = [];
|
|
37
|
+
lines.forEach((line, i) => {
|
|
38
|
+
if (ERROR_RE.test(line)) {
|
|
39
|
+
hasErrors = true;
|
|
40
|
+
errorLines.push(offset + i);
|
|
41
|
+
}
|
|
42
|
+
else if (WARN_RE.test(line)) {
|
|
43
|
+
hasWarnings = true;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return { hasErrors, hasWarnings, errorLines };
|
|
47
|
+
}
|
|
48
|
+
/** Streams the file (capped at maxBytes) and reports error/warning lines. */
|
|
49
|
+
function scanErrors(path, maxBytes) {
|
|
50
|
+
let fd;
|
|
51
|
+
try {
|
|
52
|
+
fd = (0, safeRead_1.openNoFollow)(path);
|
|
53
|
+
const stat = (0, node_fs_1.fstatSync)(fd);
|
|
54
|
+
const toScan = Math.min(stat.size, maxBytes);
|
|
55
|
+
const chunk = 256 * 1024;
|
|
56
|
+
const buf = Buffer.alloc(chunk);
|
|
57
|
+
let offset = 0;
|
|
58
|
+
let lineNo = 0;
|
|
59
|
+
let line = '';
|
|
60
|
+
let hasErrors = false;
|
|
61
|
+
let hasWarnings = false;
|
|
62
|
+
const errorLines = [];
|
|
63
|
+
while (offset < toScan) {
|
|
64
|
+
const want = Math.min(chunk, toScan - offset);
|
|
65
|
+
const n = (0, node_fs_1.readSync)(fd, buf, 0, want, offset);
|
|
66
|
+
if (n <= 0)
|
|
67
|
+
break;
|
|
68
|
+
const s = buf.slice(0, n).toString('utf8');
|
|
69
|
+
for (let i = 0; i < s.length; i++) {
|
|
70
|
+
const ch = s[i];
|
|
71
|
+
if (ch === '\n') {
|
|
72
|
+
if (ERROR_RE.test(line)) {
|
|
73
|
+
hasErrors = true;
|
|
74
|
+
errorLines.push(lineNo);
|
|
75
|
+
}
|
|
76
|
+
else if (WARN_RE.test(line))
|
|
77
|
+
hasWarnings = true;
|
|
78
|
+
line = '';
|
|
79
|
+
lineNo++;
|
|
80
|
+
}
|
|
81
|
+
else if (ch !== '\r') {
|
|
82
|
+
line += ch;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
offset += n;
|
|
86
|
+
}
|
|
87
|
+
if (line.length > 0) {
|
|
88
|
+
if (ERROR_RE.test(line)) {
|
|
89
|
+
hasErrors = true;
|
|
90
|
+
errorLines.push(lineNo);
|
|
91
|
+
}
|
|
92
|
+
else if (WARN_RE.test(line))
|
|
93
|
+
hasWarnings = true;
|
|
94
|
+
}
|
|
95
|
+
return { hasErrors, hasWarnings, errorLines };
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return { hasErrors: false, hasWarnings: false, errorLines: [] };
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
if (fd !== undefined)
|
|
102
|
+
(0, node_fs_1.closeSync)(fd);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/parsers/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isSafeLinkHref } from '../security/urlPolicy';
|
|
2
|
+
/**
|
|
3
|
+
* The workspace's single URL policy, shared with the block renderer so a
|
|
4
|
+
* producer cannot get a laxer answer out of one path than the other.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isSafeUrl: typeof isSafeLinkHref;
|
|
7
|
+
export type ImageResolver = (src: string) => string | undefined;
|
|
8
|
+
export declare function renderMarkdown(mdText: string, resolveImage?: ImageResolver): string;
|
|
9
|
+
export interface FrontmatterResult {
|
|
10
|
+
frontmatter?: Record<string, unknown>;
|
|
11
|
+
body: string;
|
|
12
|
+
}
|
|
13
|
+
/** Extracts simple YAML-style frontmatter (key: value) from the top of a doc. */
|
|
14
|
+
export declare function splitFrontmatter(text: string): FrontmatterResult;
|
|
15
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/parsers/markdown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AAS5E;;;GAGG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEhE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,MAAM,CAoCnF;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA0BhE"}
|