@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,537 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MANIFEST_DIR = void 0;
|
|
4
|
+
exports.loadSemantics = loadSemantics;
|
|
5
|
+
exports.hasExplicitSemantics = hasExplicitSemantics;
|
|
6
|
+
exports.readFrontmatterSemantics = readFrontmatterSemantics;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const safeRead_1 = require("../util/safeRead");
|
|
10
|
+
const boundary_1 = require("../security/boundary");
|
|
11
|
+
// Reads the producer-authored semantics from disk. Everything here is
|
|
12
|
+
// best-effort: a malformed manifest produces a warning, never a crash, so a
|
|
13
|
+
// broken producer can never make `a2h render` unusable.
|
|
14
|
+
//
|
|
15
|
+
// "Best-effort" is not "trusting". The manifest and its run records are the
|
|
16
|
+
// most attractive files in a workspace for an attacker — they are the ones a
|
|
17
|
+
// producer is invited to write, and their contents steer the UI. So they are
|
|
18
|
+
// read with the same primitives as everything else:
|
|
19
|
+
//
|
|
20
|
+
// * `statNoFollow` — never follows a link, so a manifest that is a symlink
|
|
21
|
+
// to `/etc/passwd` is a link, not a document;
|
|
22
|
+
// * `resolveRealPath` — the protocol directory must resolve inside the
|
|
23
|
+
// workspace, so `.a2h -> /somewhere/else` is refused;
|
|
24
|
+
// * `readFileNoFollow` + a byte cap — bounded, and never a symlink.
|
|
25
|
+
//
|
|
26
|
+
// The paths here are fixed by the protocol rather than chosen by a producer,
|
|
27
|
+
// which is why this does not go through `createWorkspaceReader`: the scanner
|
|
28
|
+
// deliberately ignores `.a2h`, so it is not in that allowlist and should not
|
|
29
|
+
// be. The read primitives are shared; only the allowlist differs.
|
|
30
|
+
exports.MANIFEST_DIR = '.a2h';
|
|
31
|
+
const MANIFEST_CANDIDATES = [`${exports.MANIFEST_DIR}/manifest.json`, 'a2h.json'];
|
|
32
|
+
const MAX_MANIFEST_BYTES = 2 * 1024 * 1024;
|
|
33
|
+
const MAX_RUN_FILE_BYTES = 512 * 1024;
|
|
34
|
+
const MAX_RUN_FILES = 200;
|
|
35
|
+
const MAX_FRONTMATTER_FILES = 500;
|
|
36
|
+
const FRONTMATTER_HEAD_BYTES = 8 * 1024;
|
|
37
|
+
const MAX_LIST = 500;
|
|
38
|
+
function loadSemantics(rootDir, options = {}) {
|
|
39
|
+
const warnings = [];
|
|
40
|
+
const out = {
|
|
41
|
+
taskSpecs: [],
|
|
42
|
+
runSpecs: [],
|
|
43
|
+
actionSpecs: [],
|
|
44
|
+
itemSpecs: [],
|
|
45
|
+
groupSpecs: [],
|
|
46
|
+
frontmatter: new Map(),
|
|
47
|
+
warnings,
|
|
48
|
+
};
|
|
49
|
+
const manifest = readManifest(rootDir, warnings);
|
|
50
|
+
if (manifest) {
|
|
51
|
+
out.manifest = manifest.doc;
|
|
52
|
+
out.manifestPath = manifest.path;
|
|
53
|
+
const doc = manifest.doc;
|
|
54
|
+
out.name = asString(doc.name);
|
|
55
|
+
out.summary = asString(doc.summary);
|
|
56
|
+
out.taskSpecs = readArray(doc.tasks, 'tasks', warnings).map((t) => sanitizeTask(t, warnings)).filter(isPresent);
|
|
57
|
+
out.actionSpecs = readArray(doc.actions, 'actions', warnings).map((a) => sanitizeAction(a, warnings)).filter(isPresent);
|
|
58
|
+
out.itemSpecs = readArray(doc.items, 'items', warnings).map((i) => sanitizeItem(i, warnings)).filter(isPresent);
|
|
59
|
+
out.groupSpecs = readArray(doc.groups, 'groups', warnings).map((g) => sanitizeGroup(g, warnings)).filter(isPresent);
|
|
60
|
+
out.runSpecs = readArray(doc.runs, 'runs', warnings).map((r) => sanitizeRun(r, warnings)).filter(isPresent);
|
|
61
|
+
out.panels = sanitizeBlocks(doc.panels, warnings, 'panels');
|
|
62
|
+
}
|
|
63
|
+
// Run records may also live as one file per run, so a producer can append
|
|
64
|
+
// without rewriting the manifest.
|
|
65
|
+
const fileRuns = readRunFiles(rootDir, warnings);
|
|
66
|
+
out.runSpecs.push(...fileRuns);
|
|
67
|
+
// Producer metadata embedded in markdown frontmatter (lower precedence).
|
|
68
|
+
for (const rel of options.markdownPaths ?? []) {
|
|
69
|
+
const fm = readFrontmatterSemantics((0, node_path_1.join)(rootDir, rel));
|
|
70
|
+
if (fm)
|
|
71
|
+
out.frontmatter.set(rel, fm);
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
function hasExplicitSemantics(loaded) {
|
|
76
|
+
return Boolean(loaded.manifest) || loaded.runSpecs.length > 0 || loaded.frontmatter.size > 0;
|
|
77
|
+
}
|
|
78
|
+
function readManifest(rootDir, warnings) {
|
|
79
|
+
for (const rel of MANIFEST_CANDIDATES) {
|
|
80
|
+
const abs = (0, node_path_1.join)(rootDir, rel);
|
|
81
|
+
const stat = (0, safeRead_1.statNoFollow)(abs);
|
|
82
|
+
if (!stat)
|
|
83
|
+
continue; // absent — try the next candidate
|
|
84
|
+
if (stat.isSymbolicLink) {
|
|
85
|
+
warnings.push(`${rel} is a symlink and was not read`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (!stat.isFile)
|
|
89
|
+
continue;
|
|
90
|
+
if (stat.size > MAX_MANIFEST_BYTES) {
|
|
91
|
+
warnings.push(`${rel} is too large to read (${stat.size} bytes)`);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if ((0, boundary_1.resolveRealPath)(rootDir, rel) === null) {
|
|
95
|
+
warnings.push(`${rel} does not resolve inside the workspace`);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const read = (0, safeRead_1.readFileNoFollow)(abs, MAX_MANIFEST_BYTES);
|
|
99
|
+
if (!read) {
|
|
100
|
+
warnings.push(`could not read ${rel}`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
let parsed;
|
|
104
|
+
try {
|
|
105
|
+
parsed = JSON.parse(stripBom(read.text));
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
warnings.push(`could not parse ${rel}: ${err.message}`);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (!isRecord(parsed)) {
|
|
112
|
+
warnings.push(`${rel} must contain a JSON object`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (parsed.a2h !== undefined && parsed.a2h !== 1) {
|
|
116
|
+
warnings.push(`${rel} declares protocol version ${String(parsed.a2h)}; reading as version 1`);
|
|
117
|
+
}
|
|
118
|
+
return { doc: parsed, path: rel };
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
function readRunFiles(rootDir, warnings) {
|
|
123
|
+
const relDir = `${exports.MANIFEST_DIR}/runs`;
|
|
124
|
+
const dir = (0, node_path_1.join)(rootDir, exports.MANIFEST_DIR, 'runs');
|
|
125
|
+
const dirStat = (0, safeRead_1.statNoFollow)(dir);
|
|
126
|
+
if (!dirStat)
|
|
127
|
+
return [];
|
|
128
|
+
if (dirStat.isSymbolicLink) {
|
|
129
|
+
warnings.push(`${relDir} is a symlink and was not read`);
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
if (!dirStat.isDirectory)
|
|
133
|
+
return [];
|
|
134
|
+
let names;
|
|
135
|
+
try {
|
|
136
|
+
names = (0, node_fs_1.readdirSync)(dir).filter((n) => n.endsWith('.json'));
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
// Newest first. Run files are named so that lexical order is chronological
|
|
142
|
+
// (`2026-09-10-ingest.json`), which means the interesting end of the list is
|
|
143
|
+
// the *high* end. Sorting ascending and slicing would pin the window to the
|
|
144
|
+
// oldest runs forever, and a long-lived producer would never see its latest
|
|
145
|
+
// work rendered.
|
|
146
|
+
names.sort().reverse();
|
|
147
|
+
if (names.length > MAX_RUN_FILES) {
|
|
148
|
+
warnings.push(`${relDir} has ${names.length} files; reading the newest ${MAX_RUN_FILES}`);
|
|
149
|
+
names = names.slice(0, MAX_RUN_FILES);
|
|
150
|
+
}
|
|
151
|
+
const runs = [];
|
|
152
|
+
for (const name of names) {
|
|
153
|
+
const abs = (0, node_path_1.join)(dir, name);
|
|
154
|
+
const stat = (0, safeRead_1.statNoFollow)(abs);
|
|
155
|
+
if (!stat || stat.isSymbolicLink || !stat.isFile) {
|
|
156
|
+
warnings.push(`${relDir}/${name} is a symlink or not a file; skipped`);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (stat.size > MAX_RUN_FILE_BYTES) {
|
|
160
|
+
warnings.push(`${relDir}/${name} is too large to read (${stat.size} bytes)`);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if ((0, boundary_1.resolveRealPath)(rootDir, `${relDir}/${name}`) === null) {
|
|
164
|
+
warnings.push(`${relDir}/${name} does not resolve inside the workspace`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const read = (0, safeRead_1.readFileNoFollow)(abs, MAX_RUN_FILE_BYTES);
|
|
168
|
+
if (!read) {
|
|
169
|
+
warnings.push(`could not read ${relDir}/${name}`);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
const parsed = JSON.parse(stripBom(read.text));
|
|
174
|
+
if (Array.isArray(parsed)) {
|
|
175
|
+
for (const item of parsed) {
|
|
176
|
+
const r = sanitizeRun(item, warnings);
|
|
177
|
+
if (r)
|
|
178
|
+
runs.push(r);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (isRecord(parsed) && Array.isArray(parsed.runs)) {
|
|
182
|
+
for (const item of parsed.runs) {
|
|
183
|
+
const r = sanitizeRun(item, warnings);
|
|
184
|
+
if (r)
|
|
185
|
+
runs.push(r);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const r = sanitizeRun(parsed, warnings);
|
|
190
|
+
if (r)
|
|
191
|
+
runs.push(r);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
warnings.push(`could not parse ${relDir}/${name}: ${err.message}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return runs;
|
|
199
|
+
}
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Frontmatter producer metadata
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
/** Recognised frontmatter keys, all prefixed to avoid clashing with prose. */
|
|
204
|
+
function readFrontmatterSemantics(absPath) {
|
|
205
|
+
const head = readHead(absPath, FRONTMATTER_HEAD_BYTES);
|
|
206
|
+
if (!head.startsWith('---'))
|
|
207
|
+
return undefined;
|
|
208
|
+
const lines = head.split(/\r?\n/);
|
|
209
|
+
const closeIdx = lines.findIndex((l, i) => i > 0 && l.trim() === '---');
|
|
210
|
+
if (closeIdx === -1)
|
|
211
|
+
return undefined;
|
|
212
|
+
const out = {};
|
|
213
|
+
let any = false;
|
|
214
|
+
for (let i = 1; i < closeIdx; i++) {
|
|
215
|
+
const m = lines[i].match(/^([A-Za-z0-9_-]+)\s*:\s*(.*)$/);
|
|
216
|
+
if (!m)
|
|
217
|
+
continue;
|
|
218
|
+
const key = m[1].toLowerCase();
|
|
219
|
+
const value = unquote(m[2].trim());
|
|
220
|
+
switch (key) {
|
|
221
|
+
case 'a2h_role':
|
|
222
|
+
out.role = value;
|
|
223
|
+
any = true;
|
|
224
|
+
break;
|
|
225
|
+
case 'a2h_title':
|
|
226
|
+
out.title = value;
|
|
227
|
+
any = true;
|
|
228
|
+
break;
|
|
229
|
+
case 'a2h_summary':
|
|
230
|
+
out.summary = value;
|
|
231
|
+
any = true;
|
|
232
|
+
break;
|
|
233
|
+
case 'a2h_group':
|
|
234
|
+
out.group = value;
|
|
235
|
+
any = true;
|
|
236
|
+
break;
|
|
237
|
+
case 'a2h_task':
|
|
238
|
+
out.taskId = value;
|
|
239
|
+
any = true;
|
|
240
|
+
break;
|
|
241
|
+
case 'a2h_status':
|
|
242
|
+
out.status = value;
|
|
243
|
+
any = true;
|
|
244
|
+
break;
|
|
245
|
+
case 'a2h_priority': {
|
|
246
|
+
const n = Number(value);
|
|
247
|
+
if (Number.isFinite(n)) {
|
|
248
|
+
out.priority = n;
|
|
249
|
+
any = true;
|
|
250
|
+
}
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 'a2h_tags': {
|
|
254
|
+
const tags = value.split(',').map((t) => t.trim()).filter(Boolean);
|
|
255
|
+
if (tags.length) {
|
|
256
|
+
out.tags = tags;
|
|
257
|
+
any = true;
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case 'a2h_hidden':
|
|
262
|
+
out.hidden = value === 'true' || value === 'yes';
|
|
263
|
+
any = true;
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return any ? out : undefined;
|
|
270
|
+
}
|
|
271
|
+
function readHead(absPath, maxBytes) {
|
|
272
|
+
return (0, safeRead_1.readHeadNoFollow)(absPath, maxBytes) ?? '';
|
|
273
|
+
}
|
|
274
|
+
// ---------------------------------------------------------------------------
|
|
275
|
+
// Validation helpers — lenient by design
|
|
276
|
+
// ---------------------------------------------------------------------------
|
|
277
|
+
function sanitizeTask(input, warnings) {
|
|
278
|
+
if (!isRecord(input))
|
|
279
|
+
return undefined;
|
|
280
|
+
const id = asString(input.id);
|
|
281
|
+
if (!id) {
|
|
282
|
+
warnings.push('manifest: a task is missing "id" and was skipped');
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
id,
|
|
287
|
+
title: asString(input.title),
|
|
288
|
+
status: asString(input.status),
|
|
289
|
+
summary: asString(input.summary),
|
|
290
|
+
group: asString(input.group),
|
|
291
|
+
owner: asString(input.owner),
|
|
292
|
+
updatedAt: asString(input.updatedAt),
|
|
293
|
+
progress: sanitizeProgress(input.progress),
|
|
294
|
+
metrics: sanitizeMetrics(input.metrics),
|
|
295
|
+
blocks: sanitizeBlocks(input.blocks, warnings, `task "${id}"`),
|
|
296
|
+
actions: asStringArray(input.actions),
|
|
297
|
+
artifacts: asStringArray(input.artifacts),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function sanitizeRun(input, warnings) {
|
|
301
|
+
if (!isRecord(input))
|
|
302
|
+
return undefined;
|
|
303
|
+
const id = asString(input.id);
|
|
304
|
+
if (!id) {
|
|
305
|
+
warnings.push('manifest: a run is missing "id" and was skipped');
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
const steps = readArray(input.steps, `run "${id}" steps`, warnings)
|
|
309
|
+
.filter(isRecord)
|
|
310
|
+
.slice(0, MAX_LIST)
|
|
311
|
+
.map((s, i) => ({
|
|
312
|
+
id: asString(s.id) ?? `step-${i + 1}`,
|
|
313
|
+
title: asString(s.title) ?? `Step ${i + 1}`,
|
|
314
|
+
status: asString(s.status),
|
|
315
|
+
detail: asString(s.detail),
|
|
316
|
+
at: asString(s.at),
|
|
317
|
+
}));
|
|
318
|
+
return {
|
|
319
|
+
id,
|
|
320
|
+
taskId: asString(input.taskId),
|
|
321
|
+
title: asString(input.title),
|
|
322
|
+
status: asString(input.status),
|
|
323
|
+
startedAt: asString(input.startedAt),
|
|
324
|
+
endedAt: asString(input.endedAt),
|
|
325
|
+
durationMs: asNumber(input.durationMs),
|
|
326
|
+
summary: asString(input.summary),
|
|
327
|
+
artifacts: asStringArray(input.artifacts),
|
|
328
|
+
steps: steps.length ? steps : undefined,
|
|
329
|
+
blocks: sanitizeBlocks(input.blocks, warnings, `run "${id}"`),
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
function sanitizeAction(input, warnings) {
|
|
333
|
+
if (!isRecord(input))
|
|
334
|
+
return undefined;
|
|
335
|
+
const id = asString(input.id);
|
|
336
|
+
const label = asString(input.label);
|
|
337
|
+
if (!id || !label) {
|
|
338
|
+
warnings.push('manifest: an action needs both "id" and "label" and was skipped');
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
const sideEffectRaw = asString(input.sideEffect);
|
|
342
|
+
const sideEffect = sideEffectRaw === 'none' || sideEffectRaw === 'external' ? sideEffectRaw : 'state';
|
|
343
|
+
const params = readArray(input.params, `action "${id}" params`, warnings)
|
|
344
|
+
.filter(isRecord)
|
|
345
|
+
.slice(0, 20)
|
|
346
|
+
.map((p) => {
|
|
347
|
+
const rawType = asString(p.type);
|
|
348
|
+
const type = rawType === 'textarea' || rawType === 'select' || rawType === 'boolean' ? rawType : 'text';
|
|
349
|
+
return {
|
|
350
|
+
name: asString(p.name) ?? 'value',
|
|
351
|
+
label: asString(p.label),
|
|
352
|
+
type,
|
|
353
|
+
required: asBool(p.required),
|
|
354
|
+
options: asStringArray(p.options),
|
|
355
|
+
placeholder: asString(p.placeholder),
|
|
356
|
+
default: typeof p.default === 'string' || typeof p.default === 'boolean' ? p.default : undefined,
|
|
357
|
+
};
|
|
358
|
+
});
|
|
359
|
+
return {
|
|
360
|
+
id,
|
|
361
|
+
label,
|
|
362
|
+
kind: asString(input.kind) ?? 'custom',
|
|
363
|
+
taskId: asString(input.taskId),
|
|
364
|
+
target: asString(input.target),
|
|
365
|
+
description: asString(input.description),
|
|
366
|
+
sideEffect,
|
|
367
|
+
// A manifest may raise protection, never lower it. `external` means the
|
|
368
|
+
// effect leaves this machine, so confirmation is not the producer's to
|
|
369
|
+
// waive — `confirm: false` on an external action is ignored rather than
|
|
370
|
+
// honoured. (The engine enforces the same rule independently, because an
|
|
371
|
+
// untrusted workspace should not be able to set the security policy even
|
|
372
|
+
// if this loader is ever bypassed.)
|
|
373
|
+
confirm: sideEffect === 'external' ? true : (asBool(input.confirm) ?? false),
|
|
374
|
+
params: params.length ? params : undefined,
|
|
375
|
+
enabled: asBool(input.enabled) ?? true,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
function sanitizeItem(input, warnings) {
|
|
379
|
+
if (!isRecord(input))
|
|
380
|
+
return undefined;
|
|
381
|
+
const path = asString(input.path);
|
|
382
|
+
if (!path) {
|
|
383
|
+
warnings.push('manifest: an item is missing "path" and was skipped');
|
|
384
|
+
return undefined;
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
path: path.replace(/^\.\//, ''),
|
|
388
|
+
role: asString(input.role),
|
|
389
|
+
title: asString(input.title),
|
|
390
|
+
summary: asString(input.summary),
|
|
391
|
+
group: asString(input.group),
|
|
392
|
+
taskId: asString(input.taskId),
|
|
393
|
+
priority: asNumber(input.priority),
|
|
394
|
+
tags: asStringArray(input.tags),
|
|
395
|
+
hidden: asBool(input.hidden),
|
|
396
|
+
relations: sanitizeRelations(input.relations),
|
|
397
|
+
metrics: sanitizeMetrics(input.metrics),
|
|
398
|
+
blocks: sanitizeBlocks(input.blocks, warnings, `item "${path}"`),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
function sanitizeGroup(input, warnings) {
|
|
402
|
+
if (!isRecord(input))
|
|
403
|
+
return undefined;
|
|
404
|
+
const id = asString(input.id);
|
|
405
|
+
if (!id) {
|
|
406
|
+
warnings.push('manifest: a group is missing "id" and was skipped');
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
id,
|
|
411
|
+
title: asString(input.title),
|
|
412
|
+
description: asString(input.description),
|
|
413
|
+
order: asNumber(input.order),
|
|
414
|
+
taskId: asString(input.taskId),
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
function sanitizeProgress(input) {
|
|
418
|
+
if (!isRecord(input))
|
|
419
|
+
return undefined;
|
|
420
|
+
const done = asNumber(input.done);
|
|
421
|
+
const total = asNumber(input.total);
|
|
422
|
+
if (done === undefined || total === undefined)
|
|
423
|
+
return undefined;
|
|
424
|
+
return { done, total, label: asString(input.label) };
|
|
425
|
+
}
|
|
426
|
+
function sanitizeMetrics(input) {
|
|
427
|
+
if (!Array.isArray(input))
|
|
428
|
+
return undefined;
|
|
429
|
+
const items = input.filter(isRecord).slice(0, 24).map((m) => {
|
|
430
|
+
const value = m.value;
|
|
431
|
+
return {
|
|
432
|
+
label: asString(m.label) ?? 'metric',
|
|
433
|
+
value: typeof value === 'number' ? value : asString(value) ?? '',
|
|
434
|
+
unit: asString(m.unit),
|
|
435
|
+
delta: asString(m.delta),
|
|
436
|
+
tone: sanitizeTone(m.tone),
|
|
437
|
+
};
|
|
438
|
+
});
|
|
439
|
+
return items.length ? items : undefined;
|
|
440
|
+
}
|
|
441
|
+
function sanitizeRelations(input) {
|
|
442
|
+
if (!Array.isArray(input))
|
|
443
|
+
return undefined;
|
|
444
|
+
const out = [];
|
|
445
|
+
for (const r of input.slice(0, 50)) {
|
|
446
|
+
if (typeof r === 'string') {
|
|
447
|
+
out.push({ kind: 'related', target: r });
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
if (!isRecord(r))
|
|
451
|
+
continue;
|
|
452
|
+
const target = asString(r.target) ?? asString(r.path);
|
|
453
|
+
if (!target)
|
|
454
|
+
continue;
|
|
455
|
+
out.push({ kind: asString(r.kind) ?? 'related', target, note: asString(r.note) });
|
|
456
|
+
}
|
|
457
|
+
return out.length ? out : undefined;
|
|
458
|
+
}
|
|
459
|
+
const TONES = new Set(['neutral', 'good', 'warn', 'bad', 'info']);
|
|
460
|
+
function sanitizeTone(input) {
|
|
461
|
+
const s = asString(input);
|
|
462
|
+
return s && TONES.has(s) ? s : undefined;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Blocks are passed through as opaque data — the client renderer registry
|
|
466
|
+
* decides what it can draw and shows a fallback otherwise. We only guarantee
|
|
467
|
+
* the shape is an object with a string `type`, which keeps the protocol
|
|
468
|
+
* forward-compatible without a version bump per block kind.
|
|
469
|
+
*/
|
|
470
|
+
function sanitizeBlocks(input, warnings, where) {
|
|
471
|
+
if (!Array.isArray(input))
|
|
472
|
+
return undefined;
|
|
473
|
+
const out = [];
|
|
474
|
+
for (const b of input.slice(0, MAX_LIST)) {
|
|
475
|
+
if (!isRecord(b) || typeof b.type !== 'string' || !b.type) {
|
|
476
|
+
warnings.push(`${where}: a block was skipped (missing a string "type")`);
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
out.push(b);
|
|
480
|
+
}
|
|
481
|
+
return out.length ? out : undefined;
|
|
482
|
+
}
|
|
483
|
+
// ---------------------------------------------------------------------------
|
|
484
|
+
function isRecord(v) {
|
|
485
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
486
|
+
}
|
|
487
|
+
function isPresent(v) {
|
|
488
|
+
return v !== undefined;
|
|
489
|
+
}
|
|
490
|
+
function asString(v) {
|
|
491
|
+
if (typeof v === 'string')
|
|
492
|
+
return v.trim() || undefined;
|
|
493
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
494
|
+
return String(v);
|
|
495
|
+
return undefined;
|
|
496
|
+
}
|
|
497
|
+
function asNumber(v) {
|
|
498
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
499
|
+
return v;
|
|
500
|
+
if (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v)))
|
|
501
|
+
return Number(v);
|
|
502
|
+
return undefined;
|
|
503
|
+
}
|
|
504
|
+
function asBool(v) {
|
|
505
|
+
if (typeof v === 'boolean')
|
|
506
|
+
return v;
|
|
507
|
+
if (v === 'true')
|
|
508
|
+
return true;
|
|
509
|
+
if (v === 'false')
|
|
510
|
+
return false;
|
|
511
|
+
return undefined;
|
|
512
|
+
}
|
|
513
|
+
function asStringArray(v) {
|
|
514
|
+
if (!Array.isArray(v))
|
|
515
|
+
return undefined;
|
|
516
|
+
const out = v.filter((x) => typeof x === 'string' && x.trim() !== '').slice(0, MAX_LIST);
|
|
517
|
+
return out.length ? out : undefined;
|
|
518
|
+
}
|
|
519
|
+
function readArray(v, where, warnings) {
|
|
520
|
+
if (v === undefined || v === null)
|
|
521
|
+
return [];
|
|
522
|
+
if (!Array.isArray(v)) {
|
|
523
|
+
warnings.push(`manifest: "${where}" must be an array`);
|
|
524
|
+
return [];
|
|
525
|
+
}
|
|
526
|
+
return v;
|
|
527
|
+
}
|
|
528
|
+
function unquote(s) {
|
|
529
|
+
if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
|
|
530
|
+
return s.slice(1, -1);
|
|
531
|
+
}
|
|
532
|
+
return s;
|
|
533
|
+
}
|
|
534
|
+
function stripBom(s) {
|
|
535
|
+
return s.charCodeAt(0) === 0xfeff ? s.slice(1) : s;
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/semantics/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ActionView, Block, EffectPolicy, RunView, SemanticsOrigin, TaskView } from '../types';
|
|
2
|
+
import type { GroupSpec, LoadedSemantics, ResolvedItem } from './types';
|
|
3
|
+
export interface ResolvedSemantics {
|
|
4
|
+
origin: SemanticsOrigin;
|
|
5
|
+
name?: string;
|
|
6
|
+
summary?: string;
|
|
7
|
+
items: Map<string, ResolvedItem>;
|
|
8
|
+
groups: GroupSpec[];
|
|
9
|
+
tasks: TaskView[];
|
|
10
|
+
runs: RunView[];
|
|
11
|
+
actions: ActionView[];
|
|
12
|
+
panels?: Block[];
|
|
13
|
+
warnings: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The provider layer's answer for one action. Structurally satisfied by
|
|
17
|
+
* `ActionResolution`, but stated without the executor so this module does not
|
|
18
|
+
* have to know what a provider is.
|
|
19
|
+
*/
|
|
20
|
+
export interface ActionProvenance {
|
|
21
|
+
simulated: boolean;
|
|
22
|
+
policy: EffectPolicy;
|
|
23
|
+
}
|
|
24
|
+
export type ActionResolver = (action: ActionView) => ActionProvenance | undefined;
|
|
25
|
+
export interface ResolveOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Who will run each declared action, and what their executor says it will
|
|
28
|
+
* do. Supplied by the assembler, which is the only layer that knows the
|
|
29
|
+
* registered providers.
|
|
30
|
+
*
|
|
31
|
+
* Absent means "no provider can be named", and the safe reading of that is
|
|
32
|
+
* `simulated: true` — claiming a real effect is the claim that can mislead.
|
|
33
|
+
*/
|
|
34
|
+
resolveAction?: ActionResolver;
|
|
35
|
+
}
|
|
36
|
+
export declare function resolveSemantics(loaded: LoadedSemantics, options: ResolveOptions): ResolvedSemantics;
|
|
37
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/semantics/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,KAAK,EACL,YAAY,EACZ,OAAO,EACP,eAAe,EACf,QAAQ,EAET,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUxE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,cAAc,GACtB,iBAAiB,CA2GnB"}
|