@inventarch/steward-hook 0.0.0-stage → 1.0.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/dist/main.js ADDED
@@ -0,0 +1,399 @@
1
+ import { lstatSync, readdirSync, readFileSync, realpathSync } from 'node:fs';
2
+ import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
3
+ import { evaluateSteward, isEntry, openDatabase } from '@inventarch/runtime';
4
+ import { pathKey, sameFile, unaliased } from '@inventarch/db';
5
+ import { decodeDistributionJson } from '@inventarch/db/distribution';
6
+ export function deny(code, message) {
7
+ return {
8
+ hookSpecificOutput: {
9
+ hookEventName: 'PreToolUse',
10
+ permissionDecision: 'deny',
11
+ permissionDecisionReason: `${code}: ${message}`,
12
+ },
13
+ };
14
+ }
15
+ function object(value) {
16
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
17
+ }
18
+ /** Rules match names as the volume does: case on win32; normalization and full case folding on darwin (#315, #323). */
19
+ const fold = pathKey;
20
+ function local(root, target) {
21
+ const rel = relative(fold(root), fold(target));
22
+ return isAbsolute(rel) || rel === '..' || rel.startsWith('..' + sep) ? undefined : rel.replaceAll('\\', '/');
23
+ }
24
+ function physical(path) {
25
+ try {
26
+ lstatSync(path);
27
+ return realpathSync.native(path);
28
+ }
29
+ catch (error) {
30
+ if (error.code !== 'ENOENT')
31
+ throw error;
32
+ const parent = dirname(path);
33
+ if (parent === path)
34
+ throw error;
35
+ return resolve(physical(parent), relative(parent, path));
36
+ }
37
+ }
38
+ /** Paths every workspace protects: the native installation state. */
39
+ function installation(path) {
40
+ return (path === '.ia/distributions.lock.json' || path === '.ia/distributions' || path.startsWith('.ia/distributions/'));
41
+ }
42
+ /** The projection list written for this repository; in a consumer workspace only its owned subset stays protected. */
43
+ function projectionCandidate(path) {
44
+ return (path === '.codex/config.toml' ||
45
+ /^\.codex\/agents\//.test(path) ||
46
+ /^\.(?:agents|claude)\/skills\//.test(path) ||
47
+ path === 'claude.md' ||
48
+ path === 'CLAUDE.md' ||
49
+ /^\.claude\/agents\/[^/]+\.md$/.test(path) ||
50
+ ['.agents/skills/ia-authoring/SKILL.md', '.claude/skills/ia-authoring/SKILL.md'].some((p) => fold(p) === path) ||
51
+ fold('.claude/rules/ia-workspace.md') === path ||
52
+ fold('AGENTS.md') === path);
53
+ }
54
+ /** `ownership` is undefined in a legacy workspace (no projection state) and is read only when a candidate path needs it. */
55
+ function protection(path, ownership) {
56
+ if (path === undefined)
57
+ return undefined;
58
+ if (installation(path))
59
+ return { projection: true };
60
+ if (projectionCandidate(path)) {
61
+ const owned = ownership();
62
+ if (owned === undefined || owned.files.has(path) || (path === '.codex/config.toml' && owned.codex))
63
+ return { projection: true };
64
+ }
65
+ if (path === '.ia/src/systems' || path.startsWith('.ia/src/systems/')) {
66
+ const system = path.split('/')[3];
67
+ return system !== undefined && /^[a-z][a-z0-9-]*$/.test(system) ? { system } : { invalid: true };
68
+ }
69
+ return undefined;
70
+ }
71
+ /** The hosts area, or undefined when absent; an aliased area is refused. */
72
+ function hostsArea(root) {
73
+ const directory = resolve(root, '.ia/distributions/hosts');
74
+ try {
75
+ if (!unaliased(directory, physical(directory)))
76
+ throw new Error('Host ownership directory is aliased');
77
+ lstatSync(directory);
78
+ }
79
+ catch (error) {
80
+ if (error.code === 'ENOENT')
81
+ return undefined;
82
+ throw error;
83
+ }
84
+ return directory;
85
+ }
86
+ /** The same projection allowlist `@inventarch/distribution` writes (projection.ts), so a state cannot claim other paths. */
87
+ const PROJECTION_OWNED = {
88
+ claude: (path) => path === '.claude/rules/ia-workspace.md' ||
89
+ path === '.claude/skills/ia-authoring/SKILL.md' ||
90
+ /^\.claude\/agents\/[a-z][a-z0-9-]*\.md$/.test(path),
91
+ codex: (path) => path === 'AGENTS.md' || path === '.agents/skills/ia-authoring/SKILL.md',
92
+ };
93
+ /**
94
+ * A bounded read of the projection ownership states, not a validation of the projected bytes. Undefined when neither
95
+ * state exists (legacy mode); a state that is not a plain, unaliased, well-formed file throws, so the caller fails closed.
96
+ */
97
+ function projectionOwnership(root) {
98
+ const directory = hostsArea(root);
99
+ if (directory === undefined)
100
+ return undefined;
101
+ const files = new Set();
102
+ let found = false;
103
+ for (const host of ['claude', 'codex']) {
104
+ const path = resolve(directory, `${host}-projection.json`);
105
+ let stat;
106
+ try {
107
+ stat = lstatSync(path);
108
+ }
109
+ catch (error) {
110
+ if (error.code === 'ENOENT')
111
+ continue;
112
+ throw error;
113
+ }
114
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size > 1024 * 1024 || !unaliased(path, physical(path)))
115
+ throw new Error('Unsafe projection ownership state');
116
+ const content = readFileSync(path);
117
+ if (content.length > 1024 * 1024)
118
+ throw new Error('Projection ownership state exceeds its bound');
119
+ const row = decodeDistributionJson(new TextDecoder('utf-8', { fatal: true }).decode(content));
120
+ if (!object(row) ||
121
+ Object.keys(row).sort().join('|') !== 'files|format|host' ||
122
+ row['format'] !== 'ia.host-projection-state.v1' ||
123
+ row['host'] !== host ||
124
+ !object(row['files']))
125
+ throw new Error('Invalid projection ownership state');
126
+ for (const [owned, value] of Object.entries(row['files'])) {
127
+ const hashes = Array.isArray(value) ? value : [value];
128
+ if (!PROJECTION_OWNED[host](owned) ||
129
+ !hashes.length ||
130
+ hashes.length > 2 ||
131
+ hashes.some((h) => typeof h !== 'string' || !/^[a-f0-9]{64}$/.test(h)) ||
132
+ new Set(hashes).size !== hashes.length)
133
+ throw new Error('Invalid projection ownership state');
134
+ files.add(fold(owned));
135
+ }
136
+ found = true;
137
+ }
138
+ if (!found)
139
+ return undefined;
140
+ let codex = true;
141
+ try {
142
+ lstatSync(resolve(directory, 'codex-workspace.json'));
143
+ }
144
+ catch (error) {
145
+ if (error.code !== 'ENOENT')
146
+ throw error;
147
+ codex = false;
148
+ }
149
+ return { files, codex };
150
+ }
151
+ /** A bounded ownership-marker check, not registration validation or a grant of host authority. */
152
+ function contextSettingsManaged(root) {
153
+ const directory = resolve(root, '.ia/distributions/hosts');
154
+ let names;
155
+ try {
156
+ if (!unaliased(directory, physical(directory)))
157
+ throw new Error('Context ownership directory is aliased');
158
+ names = readdirSync(directory);
159
+ }
160
+ catch (error) {
161
+ if (error.code === 'ENOENT')
162
+ return false;
163
+ throw error;
164
+ }
165
+ if (names.length > 4096)
166
+ throw new Error('Context ownership inventory exceeds its bound');
167
+ let managed = false;
168
+ for (const name of names) {
169
+ const match = /^claude-context-([a-z][a-z0-9-]{0,63})\.json$/.exec(fold(name)), pending = fold(name) === 'lifecycle-pending.json';
170
+ const guard = /^claude-guard-([a-z][a-z0-9-]{0,63})\.json$/.exec(fold(name)), guardPending = fold(name) === 'guard-pending.json';
171
+ if (!match && !pending && !guard && !guardPending)
172
+ continue;
173
+ const path = resolve(directory, name), stat = lstatSync(path), limit = pending || guardPending ? 8 * 1024 * 1024 : 1024 * 1024;
174
+ if (name !== name.toLowerCase() ||
175
+ !stat.isFile() ||
176
+ stat.nlink !== 1 ||
177
+ stat.size > limit ||
178
+ !unaliased(path, physical(path)))
179
+ throw new Error('Unsafe context ownership marker');
180
+ const content = readFileSync(path);
181
+ if (content.length > limit)
182
+ throw new Error('Context ownership marker exceeds its bound');
183
+ const row = decodeDistributionJson(new TextDecoder('utf-8', { fatal: true }).decode(content));
184
+ if (!object(row) || typeof row['id'] !== 'string' || !/^[a-z][a-z0-9-]{0,63}$/.test(row['id']))
185
+ throw new Error('Invalid context ownership marker');
186
+ if (pending) {
187
+ if (Object.keys(row).sort().join('|') !== 'after|before|format|id' ||
188
+ row['format'] !== 'ia.lifecycle-registration-pending.v1')
189
+ throw new Error('Invalid pending context ownership');
190
+ for (const key of ['before', 'after']) {
191
+ const side = row[key];
192
+ if (!object(side) ||
193
+ Object.keys(side).sort().join('|') !== 'binding|config|state' ||
194
+ Object.values(side).some((value) => value !== null && typeof value !== 'string'))
195
+ throw new Error('Invalid pending context bytes');
196
+ }
197
+ }
198
+ else if (guardPending) {
199
+ if (Object.keys(row).sort().join('|') !== 'after|before|format|id' ||
200
+ row['format'] !== 'ia.guard-registration-pending.v1')
201
+ throw new Error('Invalid pending guard ownership');
202
+ for (const key of ['before', 'after']) {
203
+ const side = row[key];
204
+ if (!object(side) ||
205
+ Object.keys(side).sort().join('|') !== 'config|state' ||
206
+ Object.values(side).some((value) => value !== null && typeof value !== 'string'))
207
+ throw new Error('Invalid pending guard bytes');
208
+ }
209
+ }
210
+ else if (guard) {
211
+ if (Object.keys(row)
212
+ .filter((key) => key !== 'existing')
213
+ .sort()
214
+ .join('|') !== 'cache|created|format|group|id|release' ||
215
+ (row['existing'] !== undefined && !Array.isArray(row['existing'])) ||
216
+ row['format'] !== 'ia.guard-registration-state.v1' ||
217
+ row['id'] !== guard[1] ||
218
+ typeof row['cache'] !== 'string' ||
219
+ !isAbsolute(row['cache']) ||
220
+ typeof row['created'] !== 'boolean' ||
221
+ !object(row['group']) ||
222
+ typeof row['release'] !== 'string' ||
223
+ !/^[a-f0-9]{64}$/.test(row['release']))
224
+ throw new Error('Invalid guard ownership state');
225
+ }
226
+ else if (Object.keys(row)
227
+ .filter((key) => key !== 'existing')
228
+ .sort()
229
+ .join('|') !== 'binding|cache|created|format|groups|id|release|revision' ||
230
+ (row['existing'] !== undefined && !Array.isArray(row['existing'])) ||
231
+ !['ia.lifecycle-registration-state.v1', 'ia.lifecycle-registration-state.v2'].includes(row['format']) ||
232
+ row['id'] !== match[1] ||
233
+ !Number.isSafeInteger(row['revision']) ||
234
+ row['revision'] < 1 ||
235
+ typeof row['cache'] !== 'string' ||
236
+ !isAbsolute(row['cache']) ||
237
+ typeof row['created'] !== 'boolean' ||
238
+ !object(row['groups']) ||
239
+ Object.keys(row['groups']).sort().join('|') !== 'SessionStart|UserPromptSubmit' ||
240
+ !['binding', 'release'].every((key) => typeof row[key] === 'string' && /^[a-f0-9]{64}$/.test(row[key])))
241
+ throw new Error('Invalid context ownership state');
242
+ managed = true;
243
+ }
244
+ return managed;
245
+ }
246
+ function actorMap(path, revision) {
247
+ if (!isAbsolute(path) || !unaliased(path, physical(path)))
248
+ throw new Error('Actor map must be an absolute unaliased file');
249
+ const stat = lstatSync(path);
250
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size > 1024 * 1024)
251
+ throw new Error('Invalid actor map file');
252
+ const content = readFileSync(path);
253
+ if (content.length > 1024 * 1024)
254
+ throw new Error('Actor map exceeds 1 MiB');
255
+ const value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(content));
256
+ if (!object(value) ||
257
+ Object.keys(value).sort().join('|') !== 'actors|format|revision' ||
258
+ value['format'] !== 'ia.steward-actors.v1' ||
259
+ value['revision'] !== revision ||
260
+ !Array.isArray(value['actors']) ||
261
+ value['actors'].length > 256)
262
+ throw new Error('Actor map is malformed or stale');
263
+ const entries = new Map();
264
+ for (const entry of value['actors']) {
265
+ if (!object(entry) ||
266
+ Object.keys(entry).sort().join('|') !== 'host|identity' ||
267
+ typeof entry['host'] !== 'string' ||
268
+ !/^[a-z][a-z0-9-]{0,63}(?::[a-z][a-z0-9-]{0,63})?$/.test(entry['host']) ||
269
+ typeof entry['identity'] !== 'string' ||
270
+ entry['identity'].length > 512 ||
271
+ entries.has(entry['host']))
272
+ throw new Error('Invalid or duplicate actor mapping');
273
+ entries.set(entry['host'], entry['identity']);
274
+ }
275
+ return entries;
276
+ }
277
+ /**
278
+ * `target` under `root` placed by identity rather than spelling: from the nearest ancestor that is the root's own directory
279
+ * (`sameFile`, by device and inode), the rest of the path. It places a spelling in another namespace that
280
+ * `realpathSync.native` keeps, such as the loopback admin share `\\localhost\C$\…` or a root registered in that form, which
281
+ * no string comparison puts under the root.
282
+ */
283
+ function anchored(root, target) {
284
+ for (let current = target;;) {
285
+ if (sameFile(current, root))
286
+ return local(current, target);
287
+ const parent = dirname(current);
288
+ if (parent === current)
289
+ return undefined;
290
+ current = parent;
291
+ }
292
+ }
293
+ export function evaluateHook(root, event, actorsPath) {
294
+ if (!object(event) ||
295
+ event['hook_event_name'] !== 'PreToolUse' ||
296
+ !['Write', 'Edit', 'MultiEdit'].includes(String(event['tool_name'])) ||
297
+ !object(event['tool_input']) ||
298
+ typeof event['tool_input']['file_path'] !== 'string' ||
299
+ !event['tool_input']['file_path'].trim() ||
300
+ event['tool_input']['file_path'].includes('\0') ||
301
+ (event['tool_name'] === 'MultiEdit' && !Array.isArray(event['tool_input']['edits'])))
302
+ return deny('IA-HOOK-INPUT-INVALID', 'Expected a PreToolUse file edit event');
303
+ let rule, base;
304
+ try {
305
+ if (!isAbsolute(root))
306
+ throw new Error('Binding requires an absolute fixed project root');
307
+ // The registered root as the volume stores it: another case or normalization of the same directory is the same
308
+ // project, and every rule below compares against this spelling; a link or junction anywhere in it is still refused.
309
+ base = resolve(root);
310
+ const real = realpathSync.native(base);
311
+ if (!unaliased(base, real))
312
+ throw new Error('Project root is aliased');
313
+ base = real;
314
+ const path = event['tool_input']['file_path'];
315
+ if (!isAbsolute(path) &&
316
+ (typeof event['cwd'] !== 'string' ||
317
+ !isAbsolute(event['cwd']) ||
318
+ local(base, physical(resolve(event['cwd']))) === undefined))
319
+ throw new Error('Relative input requires cwd inside the fixed root');
320
+ // A relative path lands where the kernel puts it: POSIX follows the cwd's links before `..`, Windows removes `..` first.
321
+ const target = isAbsolute(path)
322
+ ? resolve(path)
323
+ : resolve(process.platform === 'win32' ? resolve(event['cwd']) : physical(resolve(event['cwd'])), path), actual = physical(target);
324
+ // With neither spelling under the root as a string, either may still reach it through another namespace, so both are
325
+ // placed by identity too (`anchored`); a rule found that way is held to the same alias check as any other.
326
+ const lexical = local(base, target), physicalPath = local(base, actual), spellings = [lexical, physicalPath];
327
+ if (lexical === undefined && physicalPath === undefined)
328
+ spellings.push(anchored(base, target), anchored(base, actual));
329
+ let read = false, owned;
330
+ const ownership = () => {
331
+ if (!read) {
332
+ owned = projectionOwnership(base);
333
+ read = true;
334
+ }
335
+ return owned;
336
+ };
337
+ rule = spellings.reduce((found, spelling) => found ?? protection(spelling, ownership), undefined);
338
+ if (spellings.includes('.claude/settings.local.json') && contextSettingsManaged(base))
339
+ rule = { projection: true };
340
+ if (rule !== undefined && !unaliased(target, actual))
341
+ throw new Error('Protected path has an aliased ancestor or target');
342
+ if (rule?.invalid)
343
+ throw new Error('Cannot identify the owning system');
344
+ }
345
+ catch (error) {
346
+ return deny('IA-HOOK-PATH-UNSAFE', error instanceof Error ? error.message : String(error));
347
+ }
348
+ if (rule?.projection)
349
+ return deny('IA-HOOK-PROJECTION-MANAGED', 'Use the owning distribution/projection command; native installation and generated host state are managed');
350
+ if (rule?.system === undefined)
351
+ return {};
352
+ try {
353
+ const db = openDatabase(base, { cache: false });
354
+ try {
355
+ const records = db.records();
356
+ const mapping = actorsPath === undefined ? undefined : actorMap(actorsPath, db.revision);
357
+ const host = event['agent_type'], identity = typeof host === 'string' ? mapping?.get(host) : undefined;
358
+ const actors = typeof host === 'string'
359
+ ? records.filter((r) => r.discriminator === 'agent' &&
360
+ (mapping === undefined ? r.name === host : identity !== undefined && r.identity === identity))
361
+ : [];
362
+ const decision = evaluateSteward(records, rule.system, actors.length === 1 ? { kind: 'agent', identity: actors[0].identity } : undefined);
363
+ return decision.allowed ? {} : deny(decision.code, decision.message);
364
+ }
365
+ finally {
366
+ db.close();
367
+ }
368
+ }
369
+ catch (error) {
370
+ return deny('IA-HOOK-STEWARD-UNAVAILABLE', error instanceof Error ? error.message : String(error));
371
+ }
372
+ }
373
+ export function runHook(args, input) {
374
+ try {
375
+ if (!(args.length === 2 || (args.length === 4 && args[2] === '--actors' && args[3])) ||
376
+ args[0] !== '--root' ||
377
+ !args[1] ||
378
+ Buffer.byteLength(input) > 1024 * 1024)
379
+ return deny('IA-HOOK-INPUT-INVALID', 'Usage: steward-hook --root <fixed absolute root> [--actors <trusted absolute mapping>] (input limit 1 MiB)');
380
+ return evaluateHook(args[1], JSON.parse(input), args[3]);
381
+ }
382
+ catch {
383
+ return deny('IA-HOOK-INPUT-INVALID', 'Invalid JSON input');
384
+ }
385
+ }
386
+ if (isEntry(process.argv[1], import.meta.url)) {
387
+ const chunks = [];
388
+ let size = 0;
389
+ for await (const chunk of process.stdin) {
390
+ size += Buffer.byteLength(chunk);
391
+ if (size > 1024 * 1024)
392
+ break;
393
+ chunks.push(Buffer.from(chunk));
394
+ }
395
+ process.stdout.write(JSON.stringify(size > 1024 * 1024
396
+ ? deny('IA-HOOK-INPUT-INVALID', 'Input exceeds 1 MiB')
397
+ : runHook(process.argv.slice(2), Buffer.concat(chunks).toString('utf8'))) + '\n');
398
+ }
399
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,60 @@
1
1
  {
2
2
  "name": "@inventarch/steward-hook",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "main": "./dist/main.js",
6
+ "types": "./dist/main.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "SPEC.md",
11
+ "LICENSE",
12
+ "NOTICE"
13
+ ],
14
+ "dependencies": {
15
+ "@inventarch/db": "1.0.0",
16
+ "@inventarch/runtime": "1.0.0",
17
+ "@inventarch/agent-composition-system": "1.0.0"
18
+ },
19
+ "devDependencies": {
20
+ "@types/node": "^22.19.0",
21
+ "typescript": "^5.9.3",
22
+ "vitest": "^4.1.4"
23
+ },
24
+ "license": "Apache-2.0",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/main.d.ts",
28
+ "default": "./dist/main.js"
29
+ },
30
+ "./context": {
31
+ "types": "./dist/context.d.ts",
32
+ "default": "./dist/context.js"
33
+ },
34
+ "./internal/context": {
35
+ "types": "./dist/context.d.ts",
36
+ "default": "./dist/context.js"
37
+ },
38
+ "./internal/main": {
39
+ "types": "./dist/main.d.ts",
40
+ "default": "./dist/main.js"
41
+ }
42
+ },
43
+ "publishConfig": {
44
+ "access": "public",
45
+ "registry": "https://registry.npmjs.org"
46
+ },
47
+ "engines": {
48
+ "node": ">=22.22.0 <23"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/inventarch/ia.git",
53
+ "directory": "apps/steward-hook"
54
+ },
55
+ "scripts": {
56
+ "build": "tsc -p tsconfig.json",
57
+ "typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.tests.json",
58
+ "test": "vitest run --config vitest.config.mts"
59
+ }
6
60
  }