wicked-crew 0.7.46 → 0.7.48
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/api/capture.d.ts +2 -2
- package/dist/api/chat-citations.d.ts +10 -1
- package/dist/api/chat-citations.d.ts.map +1 -1
- package/dist/api/chat-citations.js +28 -0
- package/dist/api/chat-citations.js.map +1 -1
- package/dist/api/chat-scope.d.ts +4 -2
- package/dist/api/chat-scope.d.ts.map +1 -1
- package/dist/api/chat-scope.js +35 -3
- package/dist/api/chat-scope.js.map +1 -1
- package/dist/api/chat-transcripts.d.ts +23 -1
- package/dist/api/chat-transcripts.d.ts.map +1 -1
- package/dist/api/chat-transcripts.js +61 -6
- package/dist/api/chat-transcripts.js.map +1 -1
- package/dist/api/delivery-index.d.ts +21 -0
- package/dist/api/delivery-index.d.ts.map +1 -1
- package/dist/api/delivery-index.js +36 -0
- package/dist/api/delivery-index.js.map +1 -1
- package/dist/api/elicitation-cache.d.ts +12 -0
- package/dist/api/elicitation-cache.d.ts.map +1 -1
- package/dist/api/elicitation-cache.js +17 -1
- package/dist/api/elicitation-cache.js.map +1 -1
- package/dist/api/eval-sample.d.ts +12 -12
- package/dist/api/governance-steering.d.ts.map +1 -1
- package/dist/api/governance-steering.js +1 -0
- package/dist/api/governance-steering.js.map +1 -1
- package/dist/api/mcp.d.ts +4 -4
- package/dist/api/policy-landing.d.ts +55 -0
- package/dist/api/policy-landing.d.ts.map +1 -0
- package/dist/api/policy-landing.js +174 -0
- package/dist/api/policy-landing.js.map +1 -0
- package/dist/api/recording.d.ts +228 -0
- package/dist/api/recording.d.ts.map +1 -0
- package/dist/api/recording.js +1140 -0
- package/dist/api/recording.js.map +1 -0
- package/dist/api/routes.d.ts +42 -39
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +362 -107
- package/dist/api/routes.js.map +1 -1
- package/dist/api/run-timing-index.d.ts +17 -0
- package/dist/api/run-timing-index.d.ts.map +1 -1
- package/dist/api/run-timing-index.js +43 -1
- package/dist/api/run-timing-index.js.map +1 -1
- package/dist/api/server.d.ts +27 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +168 -4
- package/dist/api/server.js.map +1 -1
- package/dist/api/testing.d.ts +4 -4
- package/dist/api/testing.d.ts.map +1 -1
- package/dist/api/testing.js +3 -0
- package/dist/api/testing.js.map +1 -1
- package/dist/api/watch-routes.d.ts +30 -0
- package/dist/api/watch-routes.d.ts.map +1 -0
- package/dist/api/watch-routes.js +104 -0
- package/dist/api/watch-routes.js.map +1 -0
- package/dist/campaigns/routes.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +20 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapter.d.ts +52 -1
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +193 -5
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/run-identity.js +1 -1
- package/dist/core/run-identity.js.map +1 -1
- package/dist/core/walkthrough-root.d.ts +21 -0
- package/dist/core/walkthrough-root.d.ts.map +1 -0
- package/dist/core/walkthrough-root.js +66 -0
- package/dist/core/walkthrough-root.js.map +1 -0
- package/dist/decisions/chat-recorder.d.ts +129 -0
- package/dist/decisions/chat-recorder.d.ts.map +1 -0
- package/dist/decisions/chat-recorder.js +367 -0
- package/dist/decisions/chat-recorder.js.map +1 -0
- package/dist/decisions/consider.d.ts +102 -0
- package/dist/decisions/consider.d.ts.map +1 -0
- package/dist/decisions/consider.js +207 -0
- package/dist/decisions/consider.js.map +1 -0
- package/dist/decisions/derive.d.ts +79 -0
- package/dist/decisions/derive.d.ts.map +1 -0
- package/dist/decisions/derive.js +282 -0
- package/dist/decisions/derive.js.map +1 -0
- package/dist/decisions/events.d.ts +25 -0
- package/dist/decisions/events.d.ts.map +1 -0
- package/dist/decisions/events.js +24 -0
- package/dist/decisions/events.js.map +1 -0
- package/dist/decisions/ingest.d.ts +51 -0
- package/dist/decisions/ingest.d.ts.map +1 -0
- package/dist/decisions/ingest.js +100 -0
- package/dist/decisions/ingest.js.map +1 -0
- package/dist/decisions/land.d.ts +100 -0
- package/dist/decisions/land.d.ts.map +1 -0
- package/dist/decisions/land.js +466 -0
- package/dist/decisions/land.js.map +1 -0
- package/dist/decisions/ledger.d.ts +60 -0
- package/dist/decisions/ledger.d.ts.map +1 -0
- package/dist/decisions/ledger.js +246 -0
- package/dist/decisions/ledger.js.map +1 -0
- package/dist/decisions/routes.d.ts +10 -0
- package/dist/decisions/routes.d.ts.map +1 -0
- package/dist/decisions/routes.js +141 -0
- package/dist/decisions/routes.js.map +1 -0
- package/dist/decisions/rules-text.d.ts +21 -0
- package/dist/decisions/rules-text.d.ts.map +1 -0
- package/dist/decisions/rules-text.js +50 -0
- package/dist/decisions/rules-text.js.map +1 -0
- package/dist/decisions/types.d.ts +120 -0
- package/dist/decisions/types.d.ts.map +1 -0
- package/dist/decisions/types.js +19 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/editors/csp.d.ts +31 -0
- package/dist/editors/csp.d.ts.map +1 -0
- package/dist/editors/csp.js +46 -0
- package/dist/editors/csp.js.map +1 -0
- package/dist/editors/pack-install.d.ts +28 -0
- package/dist/editors/pack-install.d.ts.map +1 -0
- package/dist/editors/pack-install.js +153 -0
- package/dist/editors/pack-install.js.map +1 -0
- package/dist/editors/registry.d.ts +142 -0
- package/dist/editors/registry.d.ts.map +1 -0
- package/dist/editors/registry.js +255 -0
- package/dist/editors/registry.js.map +1 -0
- package/dist/editors/routes.d.ts +46 -0
- package/dist/editors/routes.d.ts.map +1 -0
- package/dist/editors/routes.js +166 -0
- package/dist/editors/routes.js.map +1 -0
- package/dist/interactive/bridge-pool.d.ts +7 -2
- package/dist/interactive/bridge-pool.d.ts.map +1 -1
- package/dist/interactive/bridge-pool.js +6 -1
- package/dist/interactive/bridge-pool.js.map +1 -1
- package/dist/interactive/draft-events.d.ts.map +1 -1
- package/dist/interactive/draft-events.js +1 -0
- package/dist/interactive/draft-events.js.map +1 -1
- package/dist/interactive/theme-events.d.ts +119 -0
- package/dist/interactive/theme-events.d.ts.map +1 -0
- package/dist/interactive/theme-events.js +606 -0
- package/dist/interactive/theme-events.js.map +1 -0
- package/dist/projects/events.d.ts.map +1 -1
- package/dist/projects/events.js +2 -1
- package/dist/projects/events.js.map +1 -1
- package/dist/projects/routes.d.ts +2 -2
- package/dist/projects/state-home-preflight.d.ts.map +1 -1
- package/dist/projects/state-home-preflight.js +3 -0
- package/dist/projects/state-home-preflight.js.map +1 -1
- package/dist/projects/state-home-registry.d.ts.map +1 -1
- package/dist/projects/state-home-registry.js +2 -0
- package/dist/projects/state-home-registry.js.map +1 -1
- package/dist/projects/state-home.d.ts +6 -0
- package/dist/projects/state-home.d.ts.map +1 -1
- package/dist/projects/state-home.js +28 -1
- package/dist/projects/state-home.js.map +1 -1
- package/dist/qe/acceptance.d.ts +45 -4
- package/dist/qe/acceptance.d.ts.map +1 -1
- package/dist/qe/acceptance.js +93 -4
- package/dist/qe/acceptance.js.map +1 -1
- package/dist/qe/ledger.d.ts +20 -0
- package/dist/qe/ledger.d.ts.map +1 -1
- package/dist/qe/ledger.js +34 -0
- package/dist/qe/ledger.js.map +1 -1
- package/dist/qe/walkthrough-acceptance.d.ts +82 -0
- package/dist/qe/walkthrough-acceptance.d.ts.map +1 -0
- package/dist/qe/walkthrough-acceptance.js +248 -0
- package/dist/qe/walkthrough-acceptance.js.map +1 -0
- package/dist/skills/base-skill.d.ts.map +1 -1
- package/dist/skills/base-skill.js +3 -2
- package/dist/skills/base-skill.js.map +1 -1
- package/dist/skills/plugin-source.d.ts +19 -1
- package/dist/skills/plugin-source.d.ts.map +1 -1
- package/dist/skills/plugin-source.js +31 -2
- package/dist/skills/plugin-source.js.map +1 -1
- package/dist/skills/runtime.d.ts +11 -2
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +29 -1
- package/dist/skills/runtime.js.map +1 -1
- package/dist/skills/store.d.ts +14 -1
- package/dist/skills/store.d.ts.map +1 -1
- package/dist/skills/store.js +19 -5
- package/dist/skills/store.js.map +1 -1
- package/dist/standing-orders/routes.d.ts +22 -22
- package/dist/standing-orders/store.d.ts +10 -10
- package/dist/watch/checks/check-failed.d.ts +24 -0
- package/dist/watch/checks/check-failed.d.ts.map +1 -0
- package/dist/watch/checks/check-failed.js +56 -0
- package/dist/watch/checks/check-failed.js.map +1 -0
- package/dist/watch/checks/claim-vs-evidence.d.ts +30 -0
- package/dist/watch/checks/claim-vs-evidence.d.ts.map +1 -0
- package/dist/watch/checks/claim-vs-evidence.js +152 -0
- package/dist/watch/checks/claim-vs-evidence.js.map +1 -0
- package/dist/watch/checks/deliver-audit.d.ts +19 -0
- package/dist/watch/checks/deliver-audit.d.ts.map +1 -0
- package/dist/watch/checks/deliver-audit.js +129 -0
- package/dist/watch/checks/deliver-audit.js.map +1 -0
- package/dist/watch/checks/index.d.ts +8 -0
- package/dist/watch/checks/index.d.ts.map +1 -0
- package/dist/watch/checks/index.js +24 -0
- package/dist/watch/checks/index.js.map +1 -0
- package/dist/watch/checks/lag.d.ts +24 -0
- package/dist/watch/checks/lag.d.ts.map +1 -0
- package/dist/watch/checks/lag.js +55 -0
- package/dist/watch/checks/lag.js.map +1 -0
- package/dist/watch/checks/quiet-after-claim.d.ts +17 -0
- package/dist/watch/checks/quiet-after-claim.d.ts.map +1 -0
- package/dist/watch/checks/quiet-after-claim.js +89 -0
- package/dist/watch/checks/quiet-after-claim.js.map +1 -0
- package/dist/watch/checks/ungated.d.ts +12 -0
- package/dist/watch/checks/ungated.d.ts.map +1 -0
- package/dist/watch/checks/ungated.js +64 -0
- package/dist/watch/checks/ungated.js.map +1 -0
- package/dist/watch/checks/warned-rule.d.ts +26 -0
- package/dist/watch/checks/warned-rule.d.ts.map +1 -0
- package/dist/watch/checks/warned-rule.js +126 -0
- package/dist/watch/checks/warned-rule.js.map +1 -0
- package/dist/watch/emit.d.ts +122 -0
- package/dist/watch/emit.d.ts.map +1 -0
- package/dist/watch/emit.js +443 -0
- package/dist/watch/emit.js.map +1 -0
- package/dist/watch/events.d.ts +21 -0
- package/dist/watch/events.d.ts.map +1 -0
- package/dist/watch/events.js +21 -0
- package/dist/watch/events.js.map +1 -0
- package/dist/watch/keys.d.ts +15 -0
- package/dist/watch/keys.d.ts.map +1 -0
- package/dist/watch/keys.js +23 -0
- package/dist/watch/keys.js.map +1 -0
- package/dist/watch/lanes.d.ts +41 -0
- package/dist/watch/lanes.d.ts.map +1 -0
- package/dist/watch/lanes.js +73 -0
- package/dist/watch/lanes.js.map +1 -0
- package/dist/watch/loader.d.ts +47 -0
- package/dist/watch/loader.d.ts.map +1 -0
- package/dist/watch/loader.js +178 -0
- package/dist/watch/loader.js.map +1 -0
- package/dist/watch/registry.d.ts +166 -0
- package/dist/watch/registry.d.ts.map +1 -0
- package/dist/watch/registry.js +589 -0
- package/dist/watch/registry.js.map +1 -0
- package/dist/watch/ring.d.ts +32 -0
- package/dist/watch/ring.d.ts.map +1 -0
- package/dist/watch/ring.js +90 -0
- package/dist/watch/ring.js.map +1 -0
- package/dist/watch/router.d.ts +25 -0
- package/dist/watch/router.d.ts.map +1 -0
- package/dist/watch/router.js +87 -0
- package/dist/watch/router.js.map +1 -0
- package/dist/watch/sources.d.ts +42 -0
- package/dist/watch/sources.d.ts.map +1 -0
- package/dist/watch/sources.js +104 -0
- package/dist/watch/sources.js.map +1 -0
- package/dist/watch/types.d.ts +129 -0
- package/dist/watch/types.d.ts.map +1 -0
- package/dist/watch/types.js +6 -0
- package/dist/watch/types.js.map +1 -0
- package/endpoint-manifest.json +272 -1
- package/package.json +3 -2
- package/watch/entries/claim-vs-evidence.json +13 -0
- package/watch/entries/deliver-audit.json +17 -0
- package/watch/entries/quiet-after-claim.json +16 -0
- package/watch/entries/registry-check-failed.json +12 -0
- package/watch/entries/registry-lagging.json +12 -0
- package/watch/entries/risky-call.json +12 -0
- package/watch/entries/ungated.json +13 -0
- package/dist/api/demo.d.ts +0 -90
- package/dist/api/demo.d.ts.map +0 -1
- package/dist/api/demo.js +0 -492
- package/dist/api/demo.js.map +0 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The artifact-editor registry (DES-artifact-editor-plugins §5.2, §8.6, §9.1; EP-C1).
|
|
3
|
+
*
|
|
4
|
+
* Two kinds of editor exist in the design; one exists today:
|
|
5
|
+
*
|
|
6
|
+
* - **First-party** editors ship INSIDE studio's bundle (§8.6): `<studio dist>/editors/<id>/editor.json`
|
|
7
|
+
* beside the ONE self-contained `index.html` entry. Crew discovers them at boot, pins each entry's
|
|
8
|
+
* sha256 and byte size, and serves the entry through the hashed bundle route (`routes.ts`) with
|
|
9
|
+
* the §8.2 headers. Their ids are `wicked-*` — the reserved first-party namespace every pack is
|
|
10
|
+
* refused (garden `wicked-pack.schema.json`).
|
|
11
|
+
* - **Third-party** editors arrive as garden packs (spec 2 `editors[]`). Their install is REFUSED
|
|
12
|
+
* until the install-time conformance run ships (EP-C8, LATER): `pack-install.ts` still runs
|
|
13
|
+
* garden's fail-closed `pack check` and lists what the operator would be asked to approve, then
|
|
14
|
+
* answers 501. Nothing of a pack is ever written by this registry.
|
|
15
|
+
*
|
|
16
|
+
* Persisted state is ONE file, `<state home>/daemon-editors.json` — the enable/disable flags the
|
|
17
|
+
* operator sets in Settings → Editors (§6.4, human-only). It sits under the `daemon-` prefix both
|
|
18
|
+
* crew's state-home registry and the engine's worker fence already classify (crew#756), so no new
|
|
19
|
+
* top-level entry is introduced; a pack install (EP-C8) will need a registered `editors/` subtree in
|
|
20
|
+
* both repos first.
|
|
21
|
+
*/
|
|
22
|
+
import { createHash } from 'node:crypto';
|
|
23
|
+
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
24
|
+
import { join } from 'node:path';
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
import { crewStateHome } from '../projects/state-home.js';
|
|
27
|
+
/** The persisted flags file, under the registered `daemon-` prefix. */
|
|
28
|
+
export const EDITORS_STATE_FILENAME = 'daemon-editors.json';
|
|
29
|
+
/** Where first-party manifests live inside the studio bundle. */
|
|
30
|
+
export const STUDIO_EDITORS_DIRNAME = 'editors';
|
|
31
|
+
/** The host's bundle cap (§8.5); a pack's `limits.bundleBytes` may only be lower. */
|
|
32
|
+
export const HOST_BUNDLE_CAP_BYTES = 5 * 1024 * 1024;
|
|
33
|
+
export const EDITOR_PERMISSIONS = [
|
|
34
|
+
'artifact.read',
|
|
35
|
+
'artifact.write',
|
|
36
|
+
'selection.chip',
|
|
37
|
+
'composer.draft',
|
|
38
|
+
'checks.read',
|
|
39
|
+
'checks.contribute',
|
|
40
|
+
'sources.read',
|
|
41
|
+
'media.read',
|
|
42
|
+
'artifact.export',
|
|
43
|
+
'ui.fullscreen',
|
|
44
|
+
'network.media',
|
|
45
|
+
];
|
|
46
|
+
/** Editor ids: lowercase dash-words, ≤ 64 (garden's shape); first-party ones start with `wicked-`. */
|
|
47
|
+
export const EDITOR_ID = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
|
|
48
|
+
export const FIRST_PARTY_ID = /^wicked-[a-z0-9]+(?:-[a-z0-9]+)*$/u;
|
|
49
|
+
/** Anchored SemVer (garden's shape). */
|
|
50
|
+
export const EDITOR_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u;
|
|
51
|
+
const KIND = /^[a-z][a-z0-9-]{1,40}$/u;
|
|
52
|
+
export const EditorManifestSchema = z.object({
|
|
53
|
+
id: z.string().max(64).regex(EDITOR_ID),
|
|
54
|
+
title: z.string().min(1).regex(/\S/u),
|
|
55
|
+
version: z.string().regex(EDITOR_VERSION),
|
|
56
|
+
protocol: z.array(z.number().int().min(1)).min(1),
|
|
57
|
+
kinds: z.array(z.string().regex(KIND)).min(1),
|
|
58
|
+
entry: z.string().regex(/\.html$/u).default('index.html'),
|
|
59
|
+
sizes: z.array(z.enum(['inline', 'pane', 'full'])).refine((s) => s.includes('inline'), { message: "'inline' is required" }),
|
|
60
|
+
panels: z.array(z.enum(['checks'])).optional(),
|
|
61
|
+
permissions: z.array(z.object({ id: z.enum(EDITOR_PERMISSIONS), why: z.string().min(1) })),
|
|
62
|
+
limits: z.object({ bundleBytes: z.number().int().min(1).max(HOST_BUNDLE_CAP_BYTES) }).optional(),
|
|
63
|
+
});
|
|
64
|
+
export function sha256Of(buf) {
|
|
65
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A path is served from the bundle only if it IS what it looks like: a real directory or a real
|
|
69
|
+
* file, never a link (codex r1 — a link under `editors/` could point outside the bundle and be
|
|
70
|
+
* served as first-party). `null` = fine; else the reason.
|
|
71
|
+
*/
|
|
72
|
+
export function notRealEntry(path, want) {
|
|
73
|
+
let meta;
|
|
74
|
+
try {
|
|
75
|
+
meta = lstatSync(path);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return 'missing';
|
|
79
|
+
}
|
|
80
|
+
if (meta.isSymbolicLink())
|
|
81
|
+
return 'a symlink (not followed)';
|
|
82
|
+
if (want === 'dir' && !meta.isDirectory())
|
|
83
|
+
return 'not a directory';
|
|
84
|
+
if (want === 'file' && !meta.isFile())
|
|
85
|
+
return 'not a file';
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/** The entry must be ONE self-contained file: nothing loaded from outside it (§5.2; the CSP would block it anyway). */
|
|
89
|
+
export function externalReferences(html) {
|
|
90
|
+
const out = [];
|
|
91
|
+
for (const m of html.matchAll(/<(script|link|iframe)\b[^>]*\b(?:src|href)\s*=\s*["']([^"']+)["']/giu)) {
|
|
92
|
+
const tag = m[1].toLowerCase();
|
|
93
|
+
const url = m[2].trim();
|
|
94
|
+
if (tag === 'link' && !/\brel\s*=\s*["']?stylesheet/iu.test(m[0]))
|
|
95
|
+
continue;
|
|
96
|
+
if (/^(?:https?:)?\/\//iu.test(url) || /^[a-z][a-z0-9+.-]*:/iu.test(url) && !/^(?:data|blob|about):/iu.test(url)) {
|
|
97
|
+
out.push(`${tag} ${url}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Read the first-party editors a studio bundle ships. A malformed manifest, a missing or oversized
|
|
104
|
+
* entry, an entry with outside references, or a non-`wicked-*` id is skipped with a reason — never
|
|
105
|
+
* served half-right.
|
|
106
|
+
*/
|
|
107
|
+
export function discoverStudioEditors(studioRoot, log) {
|
|
108
|
+
const dir = join(studioRoot, STUDIO_EDITORS_DIRNAME);
|
|
109
|
+
if (!existsSync(dir))
|
|
110
|
+
return [];
|
|
111
|
+
const out = [];
|
|
112
|
+
for (const name of readdirSync(dir).sort()) {
|
|
113
|
+
const dirProblem = notRealEntry(join(dir, name), 'dir');
|
|
114
|
+
if (dirProblem !== null) {
|
|
115
|
+
if (dirProblem !== 'not a directory')
|
|
116
|
+
log?.(`[editors] ${name}: editor directory is ${dirProblem}; skipped`);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const manifestPath = join(dir, name, 'editor.json');
|
|
120
|
+
if (!existsSync(manifestPath))
|
|
121
|
+
continue;
|
|
122
|
+
const manifestProblem = notRealEntry(manifestPath, 'file');
|
|
123
|
+
if (manifestProblem !== null) {
|
|
124
|
+
log?.(`[editors] ${name}: editor.json is ${manifestProblem}; skipped`);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
let manifest;
|
|
128
|
+
try {
|
|
129
|
+
const parsed = EditorManifestSchema.safeParse(JSON.parse(readFileSync(manifestPath, 'utf8')));
|
|
130
|
+
if (!parsed.success) {
|
|
131
|
+
log?.(`[editors] ${name}: manifest refused (${parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ')})`);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
manifest = parsed.data;
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
log?.(`[editors] ${name}: manifest unreadable (${err instanceof Error ? err.message : String(err)})`);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (manifest.id !== name || !FIRST_PARTY_ID.test(manifest.id)) {
|
|
141
|
+
log?.(`[editors] ${name}: a studio-bundle editor must be named wicked-* and live in a directory of its id (got ${manifest.id})`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (manifest.entry.includes('/') || manifest.entry.includes('\\') || manifest.entry.startsWith('.')) {
|
|
145
|
+
log?.(`[editors] ${manifest.id}: entry must be a file beside the manifest (got ${manifest.entry})`);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const entryPath = join(dir, name, manifest.entry);
|
|
149
|
+
const entryProblem = notRealEntry(entryPath, 'file');
|
|
150
|
+
if (entryProblem !== null) {
|
|
151
|
+
log?.(`[editors] ${manifest.id}: entry ${manifest.entry} is ${entryProblem}; skipped`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
let buf;
|
|
155
|
+
try {
|
|
156
|
+
buf = readFileSync(entryPath);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
log?.(`[editors] ${manifest.id}: entry unreadable (${err instanceof Error ? err.message : String(err)})`);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const cap = manifest.limits?.bundleBytes ?? HOST_BUNDLE_CAP_BYTES;
|
|
163
|
+
if (buf.byteLength > cap) {
|
|
164
|
+
log?.(`[editors] ${manifest.id}: entry is ${buf.byteLength} bytes, over its ${cap}-byte cap`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const outside = externalReferences(buf.toString('utf8'));
|
|
168
|
+
if (outside.length > 0) {
|
|
169
|
+
log?.(`[editors] ${manifest.id}: entry loads from outside itself (${outside.slice(0, 3).join(', ')})`);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
out.push({ manifest, sha256: sha256Of(buf), bytes: buf.byteLength, entryPath, firstParty: true, source: 'studio-bundle' });
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
export class EditorRegistry {
|
|
177
|
+
records = new Map();
|
|
178
|
+
stateFile;
|
|
179
|
+
log;
|
|
180
|
+
constructor(opts = {}) {
|
|
181
|
+
this.stateFile = join(opts.stateHome ?? crewStateHome(), EDITORS_STATE_FILENAME);
|
|
182
|
+
this.log = opts.log ?? (() => undefined);
|
|
183
|
+
const state = this.readState();
|
|
184
|
+
if (opts.studioRoot !== undefined) {
|
|
185
|
+
for (const r of discoverStudioEditors(opts.studioRoot, this.log)) {
|
|
186
|
+
this.records.set(r.manifest.id, { ...r, enabled: state.enabled[r.manifest.id] ?? true });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
readState() {
|
|
191
|
+
try {
|
|
192
|
+
const raw = JSON.parse(readFileSync(this.stateFile, 'utf8'));
|
|
193
|
+
const enabled = {};
|
|
194
|
+
for (const [k, v] of Object.entries(raw.enabled ?? {}))
|
|
195
|
+
if (typeof v === 'boolean' && EDITOR_ID.test(k))
|
|
196
|
+
enabled[k] = v;
|
|
197
|
+
return { v: 1, enabled };
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return { v: 1, enabled: {} };
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
writeState() {
|
|
204
|
+
const enabled = {};
|
|
205
|
+
for (const r of this.records.values())
|
|
206
|
+
if (!r.enabled)
|
|
207
|
+
enabled[r.manifest.id] = false;
|
|
208
|
+
const state = { v: 1, enabled };
|
|
209
|
+
mkdirSync(join(this.stateFile, '..'), { recursive: true });
|
|
210
|
+
const tmp = `${this.stateFile}.${process.pid}.tmp`;
|
|
211
|
+
writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
|
|
212
|
+
renameSync(tmp, this.stateFile);
|
|
213
|
+
}
|
|
214
|
+
/** Where the flags live (diagnostics / tests). */
|
|
215
|
+
get stateFilePath() {
|
|
216
|
+
return this.stateFile;
|
|
217
|
+
}
|
|
218
|
+
list() {
|
|
219
|
+
return [...this.records.values()].sort((a, b) => Number(b.firstParty) - Number(a.firstParty) || a.manifest.id.localeCompare(b.manifest.id));
|
|
220
|
+
}
|
|
221
|
+
get(id) {
|
|
222
|
+
return this.records.get(id) ?? null;
|
|
223
|
+
}
|
|
224
|
+
/** Enable or disable (§6.4: the operator's click). Returns the record, or `null` for an unknown id. */
|
|
225
|
+
setEnabled(id, enabled) {
|
|
226
|
+
const r = this.records.get(id);
|
|
227
|
+
if (r === undefined)
|
|
228
|
+
return null;
|
|
229
|
+
const next = { ...r, enabled };
|
|
230
|
+
this.records.set(id, next);
|
|
231
|
+
this.writeState();
|
|
232
|
+
return next;
|
|
233
|
+
}
|
|
234
|
+
/** The wire view: no paths, the hashed entry URL instead. */
|
|
235
|
+
static view(r) {
|
|
236
|
+
const m = r.manifest;
|
|
237
|
+
return {
|
|
238
|
+
id: m.id,
|
|
239
|
+
title: m.title,
|
|
240
|
+
version: m.version,
|
|
241
|
+
protocol: [...m.protocol],
|
|
242
|
+
kinds: [...m.kinds],
|
|
243
|
+
sizes: [...m.sizes],
|
|
244
|
+
...(m.panels !== undefined ? { panels: [...m.panels] } : {}),
|
|
245
|
+
permissions: m.permissions.map((p) => ({ id: p.id, why: p.why })),
|
|
246
|
+
sha256: r.sha256,
|
|
247
|
+
bytes: r.bytes,
|
|
248
|
+
first_party: r.firstParty,
|
|
249
|
+
enabled: r.enabled,
|
|
250
|
+
source: r.source,
|
|
251
|
+
entry_url: `/api/v1/editors/${encodeURIComponent(m.id)}/${encodeURIComponent(m.version)}/entry`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/editors/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/api/v1/editors` (DES-artifact-editor-plugins §6, §8.2, §9.1; EP-C1).
|
|
3
|
+
*
|
|
4
|
+
* - `GET /editors` (operator+): the registry, as Settings → Editors renders it.
|
|
5
|
+
* - `POST /editors {packRoot}` (HUMAN-only): garden's fail-closed gate, the approval list, then 501
|
|
6
|
+
* `third_party_editors_not_available` — every pack editor is third-party and EP-C8 has not shipped.
|
|
7
|
+
* - `DELETE /editors/:id` (HUMAN-only): a first-party editor ships with studio and cannot be removed
|
|
8
|
+
* (409; disable it instead); no other editor can exist before EP-C8 (404).
|
|
9
|
+
* - `POST /editors/:id/enabled {enabled}` (HUMAN-only): the operator's switch.
|
|
10
|
+
* - `GET /editors/:id/grants?project=` (operator+): the engine's decided set
|
|
11
|
+
* (`evaluate_editor_grants`: EDITOR-GRANTS ledger + EDITOR-BUILTIN posture, deny dominates), with
|
|
12
|
+
* the token an "allow" would add. The host fetches it before `host.hello` and enforces it.
|
|
13
|
+
* - `GET /editors/:id/:version/entry`: the bundle, with exactly the §8.2 headers. The file path comes
|
|
14
|
+
* from the registry record — never from the URL — and the bytes are re-hashed on every serve: a
|
|
15
|
+
* changed file answers 409 `bundle_hash_mismatch`, never the changed bundle.
|
|
16
|
+
*
|
|
17
|
+
* Human-only means `actor.kind === 'human'` (the DC `remember()` check). Under `auth=off` every
|
|
18
|
+
* same-uid caller is the local human actor — the honest limit §6.4 states; refusing a worker token
|
|
19
|
+
* is a tripwire, not a control.
|
|
20
|
+
*/
|
|
21
|
+
import type { FastifyInstance, FastifyReply } from 'fastify';
|
|
22
|
+
import type { EditorGrantsResponse } from '../core/types.js';
|
|
23
|
+
import { type PackCheckRunner } from './pack-install.js';
|
|
24
|
+
import { EditorRegistry, type EditorRecord } from './registry.js';
|
|
25
|
+
/** The slice of the adapter the grants route needs; every method optional so a stub never throws. */
|
|
26
|
+
export interface EditorGrantsAdapter {
|
|
27
|
+
editorGrantsSupported?(): boolean;
|
|
28
|
+
evaluateEditorGrants?(request: {
|
|
29
|
+
editorId: string;
|
|
30
|
+
version: string;
|
|
31
|
+
sha256: string;
|
|
32
|
+
permissions: string[];
|
|
33
|
+
project?: string;
|
|
34
|
+
firstParty: boolean;
|
|
35
|
+
}): Promise<EditorGrantsResponse>;
|
|
36
|
+
}
|
|
37
|
+
export interface EditorRoutesDeps {
|
|
38
|
+
registry: EditorRegistry;
|
|
39
|
+
adapter: EditorGrantsAdapter;
|
|
40
|
+
packCheck: PackCheckRunner;
|
|
41
|
+
log?: (msg: string) => void;
|
|
42
|
+
}
|
|
43
|
+
export declare function registerEditorRoutes(app: FastifyInstance, deps: EditorRoutesDeps): void;
|
|
44
|
+
/** Re-hash on every serve: a bundle that changed on disk is refused, never served. */
|
|
45
|
+
export declare function serveBundle(record: EditorRecord, reply: FastifyReply, log?: (msg: string) => void): FastifyReply;
|
|
46
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/editors/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAI7E,OAAO,KAAK,EAAS,oBAAoB,EAAuB,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAA6B,cAAc,EAAgB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAI3G,qGAAqG;AACrG,MAAM,WAAW,mBAAmB;IAClC,qBAAqB,CAAC,IAAI,OAAO,CAAC;IAClC,oBAAoB,CAAC,CAAC,OAAO,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,eAAe,CAAC;IAC3B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA2HvF;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,YAAY,CAsBhH"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/api/v1/editors` (DES-artifact-editor-plugins §6, §8.2, §9.1; EP-C1).
|
|
3
|
+
*
|
|
4
|
+
* - `GET /editors` (operator+): the registry, as Settings → Editors renders it.
|
|
5
|
+
* - `POST /editors {packRoot}` (HUMAN-only): garden's fail-closed gate, the approval list, then 501
|
|
6
|
+
* `third_party_editors_not_available` — every pack editor is third-party and EP-C8 has not shipped.
|
|
7
|
+
* - `DELETE /editors/:id` (HUMAN-only): a first-party editor ships with studio and cannot be removed
|
|
8
|
+
* (409; disable it instead); no other editor can exist before EP-C8 (404).
|
|
9
|
+
* - `POST /editors/:id/enabled {enabled}` (HUMAN-only): the operator's switch.
|
|
10
|
+
* - `GET /editors/:id/grants?project=` (operator+): the engine's decided set
|
|
11
|
+
* (`evaluate_editor_grants`: EDITOR-GRANTS ledger + EDITOR-BUILTIN posture, deny dominates), with
|
|
12
|
+
* the token an "allow" would add. The host fetches it before `host.hello` and enforces it.
|
|
13
|
+
* - `GET /editors/:id/:version/entry`: the bundle, with exactly the §8.2 headers. The file path comes
|
|
14
|
+
* from the registry record — never from the URL — and the bytes are re-hashed on every serve: a
|
|
15
|
+
* changed file answers 409 `bundle_hash_mismatch`, never the changed bundle.
|
|
16
|
+
*
|
|
17
|
+
* Human-only means `actor.kind === 'human'` (the DC `remember()` check). Under `auth=off` every
|
|
18
|
+
* same-uid caller is the local human actor — the honest limit §6.4 states; refusing a worker token
|
|
19
|
+
* is a tripwire, not a control.
|
|
20
|
+
*/
|
|
21
|
+
import { createHash } from 'node:crypto';
|
|
22
|
+
import { readFileSync } from 'node:fs';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
import { LOCAL_ACTOR, trustAtLeast } from '../api/auth.js';
|
|
25
|
+
import { bundleHeaders } from './csp.js';
|
|
26
|
+
import { PackInstallError, previewPackInstall } from './pack-install.js';
|
|
27
|
+
import { EDITOR_ID, EDITOR_VERSION, EditorRegistry, notRealEntry } from './registry.js';
|
|
28
|
+
const V = '/api/v1';
|
|
29
|
+
export function registerEditorRoutes(app, deps) {
|
|
30
|
+
const { registry } = deps;
|
|
31
|
+
const actorOf = (req) => req.actor ?? LOCAL_ACTOR;
|
|
32
|
+
const operatorOnly = (req, reply) => {
|
|
33
|
+
const actor = actorOf(req);
|
|
34
|
+
if (trustAtLeast(actor, 'operator'))
|
|
35
|
+
return true;
|
|
36
|
+
void reply.code(403).send({ error: `Insufficient trust: editors require 'operator' (you are '${actor.trust}')` });
|
|
37
|
+
return false;
|
|
38
|
+
};
|
|
39
|
+
const humanOnly = (req, reply) => {
|
|
40
|
+
const actor = actorOf(req);
|
|
41
|
+
if (actor.kind === 'human' && trustAtLeast(actor, 'operator'))
|
|
42
|
+
return true;
|
|
43
|
+
void reply
|
|
44
|
+
.code(403)
|
|
45
|
+
.send({ error: `only a human operator can install, remove, enable or disable an editor (you are ${actor.kind}/${actor.trust})` });
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
const idOf = (req) => req.params.id;
|
|
49
|
+
app.get(`${V}/editors`, { config: { manifest: { responseType: 'ListEditorsResponse', statusCodes: [200, 403] } } }, async (req, reply) => {
|
|
50
|
+
if (!operatorOnly(req, reply))
|
|
51
|
+
return reply;
|
|
52
|
+
const body = { editors: registry.list().map((r) => EditorRegistry.view(r)), installs: 'refused_until_conformance' };
|
|
53
|
+
return body;
|
|
54
|
+
});
|
|
55
|
+
const InstallSchema = z.object({ packRoot: z.string().min(1) }).strict();
|
|
56
|
+
app.post(`${V}/editors`, { config: { manifest: { responseType: 'InstallEditorRefusal', statusCodes: [400, 403, 404, 422, 501] } } }, async (req, reply) => {
|
|
57
|
+
if (!humanOnly(req, reply))
|
|
58
|
+
return reply;
|
|
59
|
+
const parsed = InstallSchema.safeParse(req.body);
|
|
60
|
+
if (!parsed.success)
|
|
61
|
+
return reply.code(400).send({ error: 'body must be { packRoot: <absolute path> }' });
|
|
62
|
+
try {
|
|
63
|
+
const refusal = await previewPackInstall(parsed.data.packRoot, deps.packCheck);
|
|
64
|
+
return reply.code(501).send(refusal);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err instanceof PackInstallError) {
|
|
68
|
+
return reply.code(err.status).send({ error: err.message, ...(err.check !== undefined ? { check: err.check } : {}) });
|
|
69
|
+
}
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
app.delete(`${V}/editors/:id`, { config: { manifest: { statusCodes: [403, 404, 409] } } }, async (req, reply) => {
|
|
74
|
+
if (!humanOnly(req, reply))
|
|
75
|
+
return reply;
|
|
76
|
+
const id = idOf(req);
|
|
77
|
+
const record = EDITOR_ID.test(id) ? registry.get(id) : null;
|
|
78
|
+
if (record === null)
|
|
79
|
+
return reply.code(404).send({ error: `no editor '${id}' is installed` });
|
|
80
|
+
// The only editors that can exist before EP-C8 ship inside studio's bundle.
|
|
81
|
+
return reply.code(409).send({ error: `${id} ships with studio and cannot be removed — disable it instead (POST /editors/${id}/enabled)` });
|
|
82
|
+
});
|
|
83
|
+
const EnabledSchema = z.object({ enabled: z.boolean() }).strict();
|
|
84
|
+
app.post(`${V}/editors/:id/enabled`, { config: { manifest: { responseType: 'EditorView', statusCodes: [200, 400, 403, 404] } } }, async (req, reply) => {
|
|
85
|
+
if (!humanOnly(req, reply))
|
|
86
|
+
return reply;
|
|
87
|
+
const parsed = EnabledSchema.safeParse(req.body);
|
|
88
|
+
if (!parsed.success)
|
|
89
|
+
return reply.code(400).send({ error: 'body must be { enabled: boolean }' });
|
|
90
|
+
const id = idOf(req);
|
|
91
|
+
const next = EDITOR_ID.test(id) ? registry.setEnabled(id, parsed.data.enabled) : null;
|
|
92
|
+
if (next === null)
|
|
93
|
+
return reply.code(404).send({ error: `no editor '${id}' is installed` });
|
|
94
|
+
return EditorRegistry.view(next);
|
|
95
|
+
});
|
|
96
|
+
app.get(`${V}/editors/:id/grants`, { config: { manifest: { responseType: 'EditorGrantsResponse', statusCodes: [200, 400, 403, 404, 501, 502] } } }, async (req, reply) => {
|
|
97
|
+
if (!operatorOnly(req, reply))
|
|
98
|
+
return reply;
|
|
99
|
+
const id = idOf(req);
|
|
100
|
+
const record = EDITOR_ID.test(id) ? registry.get(id) : null;
|
|
101
|
+
if (record === null)
|
|
102
|
+
return reply.code(404).send({ error: `no editor '${id}' is installed` });
|
|
103
|
+
const q = req.query;
|
|
104
|
+
const projectRaw = Array.isArray(q.project) ? q.project[0] : q.project;
|
|
105
|
+
const project = typeof projectRaw === 'string' && projectRaw.trim() !== '' ? projectRaw.trim() : undefined;
|
|
106
|
+
const { adapter } = deps;
|
|
107
|
+
if (typeof adapter.editorGrantsSupported !== 'function' || !adapter.editorGrantsSupported() || typeof adapter.evaluateEditorGrants !== 'function') {
|
|
108
|
+
return reply.code(501).send({
|
|
109
|
+
error: 'the installed wicked-core-ts has no editor grants (needs wicked-core-ts >= 0.7.35 with the editor-defaults pack)',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
return await adapter.evaluateEditorGrants({
|
|
114
|
+
editorId: record.manifest.id,
|
|
115
|
+
version: record.manifest.version,
|
|
116
|
+
sha256: record.sha256,
|
|
117
|
+
permissions: record.manifest.permissions.map((p) => p.id),
|
|
118
|
+
...(project !== undefined ? { project } : {}),
|
|
119
|
+
firstParty: record.firstParty,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
124
|
+
return reply.code(/bad_request/u.test(msg) ? 400 : 502).send({ error: msg });
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
app.get(`${V}/editors/:id/:version/entry`, { config: { manifest: { statusCodes: [200, 404, 409] } } }, async (req, reply) => {
|
|
128
|
+
const { id, version } = req.params;
|
|
129
|
+
// The URL only SELECTS a record; it never builds a path.
|
|
130
|
+
if (!EDITOR_ID.test(id) || !EDITOR_VERSION.test(version))
|
|
131
|
+
return reply.code(404).send({ error: 'no such editor bundle' });
|
|
132
|
+
const record = registry.get(id);
|
|
133
|
+
if (record === null || record.manifest.version !== version)
|
|
134
|
+
return reply.code(404).send({ error: 'no such editor bundle' });
|
|
135
|
+
if (!record.enabled)
|
|
136
|
+
return reply.code(404).send({ error: `${id} is disabled` });
|
|
137
|
+
return serveBundle(record, reply, deps.log);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/** Re-hash on every serve: a bundle that changed on disk is refused, never served. */
|
|
141
|
+
export function serveBundle(record, reply, log) {
|
|
142
|
+
// The same fence as discovery, re-applied per serve (codex r1): an entry swapped for a link after
|
|
143
|
+
// boot is refused before a byte is read.
|
|
144
|
+
const problem = notRealEntry(record.entryPath, 'file');
|
|
145
|
+
if (problem !== null) {
|
|
146
|
+
log?.(`[editors] ${record.manifest.id}: entry is ${problem} at serve time; refused`);
|
|
147
|
+
return reply.code(404).send({ error: 'no such editor bundle' });
|
|
148
|
+
}
|
|
149
|
+
let buf;
|
|
150
|
+
try {
|
|
151
|
+
buf = readFileSync(record.entryPath);
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
log?.(`[editors] ${record.manifest.id}: entry unreadable at serve time (${err instanceof Error ? err.message : String(err)})`);
|
|
155
|
+
return reply.code(404).send({ error: 'no such editor bundle' });
|
|
156
|
+
}
|
|
157
|
+
const actual = createHash('sha256').update(buf).digest('hex');
|
|
158
|
+
if (actual !== record.sha256) {
|
|
159
|
+
log?.(`[editors] ${record.manifest.id}@${record.manifest.version}: bundle hash changed on disk (pinned ${record.sha256.slice(0, 12)}…, found ${actual.slice(0, 12)}…); refused`);
|
|
160
|
+
return reply.code(409).send({ code: 'bundle_hash_mismatch', error: `the ${record.manifest.id} bundle on disk no longer matches its pinned hash; restart the daemon to re-pin it` });
|
|
161
|
+
}
|
|
162
|
+
for (const [k, v] of Object.entries(bundleHeaders(record)))
|
|
163
|
+
reply.header(k, v);
|
|
164
|
+
return reply.type('text/html; charset=utf-8').send(buf);
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/editors/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,11 +72,16 @@ export declare const RECYCLE_HARD_MS = 1000;
|
|
|
72
72
|
/** Parent hops walked when proving a lockfile pid descends from the child this daemon spawned. */
|
|
73
73
|
export declare const LINEAGE_MAX_HOPS = 16;
|
|
74
74
|
/** The range crew needs when nothing overrides it (see F-081 above). */
|
|
75
|
-
|
|
75
|
+
/**
|
|
76
|
+
* 0.10.0 (EP-I1 + EP-I2, R-I): CREW may emit `review.completed`, and `PUT /d/:doc/api/theme/learned`
|
|
77
|
+
* exists — the route crew's theme seam (EP-C4) writes through. A 0.9.x bridge has no such route, so
|
|
78
|
+
* a validated theme would fail at the bridge (codex r1 on EP-C4): the floor follows.
|
|
79
|
+
*/
|
|
80
|
+
export declare const INTERACTIVE_DEFAULT_RANGE = "^0.10.0";
|
|
76
81
|
/** The env override of the RANGE (not the package). */
|
|
77
82
|
export declare const INTERACTIVE_SPEC_ENV = "WICKED_INTERACTIVE_SPEC";
|
|
78
83
|
/** The default spec — what the daemon spawns with no override. */
|
|
79
|
-
export declare const INTERACTIVE_SPEC = "wicked-interactive@^0.
|
|
84
|
+
export declare const INTERACTIVE_SPEC = "wicked-interactive@^0.10.0";
|
|
80
85
|
/** A semver RANGE this daemon will resolve: one comparator, or a space-separated intersection of
|
|
81
86
|
* them (`>=0.9.1 <1.0.0`). Tags (`latest`), `x`-ranges, `||` unions, paths and `pkg@range` spellings
|
|
82
87
|
* are refused — the override names a floor within the package, nothing else. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-pool.d.ts","sourceRoot":"","sources":["../../src/interactive/bridge-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAEH,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AACvD,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,oGAAoG;AACpG,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAsEnC,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"bridge-pool.d.ts","sourceRoot":"","sources":["../../src/interactive/bridge-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,7 +143,12 @@ export const LINEAGE_MAX_HOPS = 16;
|
|
|
143
143
|
/** The package crew starts as the interactive bridge — named in CODE exactly once. */
|
|
144
144
|
const INTERACTIVE_PACKAGE = 'wicked-interactive';
|
|
145
145
|
/** The range crew needs when nothing overrides it (see F-081 above). */
|
|
146
|
-
|
|
146
|
+
/**
|
|
147
|
+
* 0.10.0 (EP-I1 + EP-I2, R-I): CREW may emit `review.completed`, and `PUT /d/:doc/api/theme/learned`
|
|
148
|
+
* exists — the route crew's theme seam (EP-C4) writes through. A 0.9.x bridge has no such route, so
|
|
149
|
+
* a validated theme would fail at the bridge (codex r1 on EP-C4): the floor follows.
|
|
150
|
+
*/
|
|
151
|
+
export const INTERACTIVE_DEFAULT_RANGE = '^0.10.0';
|
|
147
152
|
/** The env override of the RANGE (not the package). */
|
|
148
153
|
export const INTERACTIVE_SPEC_ENV = 'WICKED_INTERACTIVE_SPEC';
|
|
149
154
|
/** The default spec — what the daemon spawns with no override. */
|