nawabari 0.9.2 → 0.10.2

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.
Files changed (75) hide show
  1. package/README.md +142 -803
  2. package/dist/cli-command-registry.js +46 -6
  3. package/dist/cli-command-registry.js.map +1 -1
  4. package/dist/cli.d.ts +5 -3
  5. package/dist/cli.js +157 -34
  6. package/dist/cli.js.map +1 -1
  7. package/dist/contract.js +11 -3
  8. package/dist/contract.js.map +1 -1
  9. package/dist/domain/compatibility-runtime-projection.d.ts +24 -0
  10. package/dist/domain/compatibility-runtime-projection.js +197 -0
  11. package/dist/domain/compatibility-runtime-projection.js.map +1 -0
  12. package/dist/domain/doctor.d.ts +2 -2
  13. package/dist/domain/doctor.js +72 -51
  14. package/dist/domain/doctor.js.map +1 -1
  15. package/dist/domain/errors.d.ts +1 -1
  16. package/dist/domain/errors.js +5 -1
  17. package/dist/domain/errors.js.map +1 -1
  18. package/dist/domain/fhs-development-runtime.d.ts +90 -0
  19. package/dist/domain/fhs-development-runtime.js +385 -0
  20. package/dist/domain/fhs-development-runtime.js.map +1 -0
  21. package/dist/domain/fhs-runtime.d.ts +36 -0
  22. package/dist/domain/fhs-runtime.js +776 -0
  23. package/dist/domain/fhs-runtime.js.map +1 -0
  24. package/dist/domain/landlock.d.ts +11 -4
  25. package/dist/domain/landlock.js +44 -21
  26. package/dist/domain/landlock.js.map +1 -1
  27. package/dist/domain/nix-runtime-closure.d.ts +70 -0
  28. package/dist/domain/nix-runtime-closure.js +449 -0
  29. package/dist/domain/nix-runtime-closure.js.map +1 -0
  30. package/dist/domain/pnpm-middleware-backend-materialization.d.ts +117 -0
  31. package/dist/domain/pnpm-middleware-backend-materialization.js +311 -0
  32. package/dist/domain/pnpm-middleware-backend-materialization.js.map +1 -0
  33. package/dist/domain/runtime-executable-projection.d.ts +33 -0
  34. package/dist/domain/runtime-executable-projection.js +204 -0
  35. package/dist/domain/runtime-executable-projection.js.map +1 -0
  36. package/dist/domain/runtime-file-identity.d.ts +37 -0
  37. package/dist/domain/runtime-file-identity.js +114 -0
  38. package/dist/domain/runtime-file-identity.js.map +1 -0
  39. package/dist/domain/runtime-profile.d.ts +66 -0
  40. package/dist/domain/runtime-profile.js +356 -0
  41. package/dist/domain/runtime-profile.js.map +1 -0
  42. package/dist/domain/runtime-projection.d.ts +101 -0
  43. package/dist/domain/runtime-projection.js +316 -0
  44. package/dist/domain/runtime-projection.js.map +1 -0
  45. package/dist/domain/runtime-provider-pnpm-middleware.d.ts +41 -0
  46. package/dist/domain/runtime-provider-pnpm-middleware.js +316 -0
  47. package/dist/domain/runtime-provider-pnpm-middleware.js.map +1 -0
  48. package/dist/domain/runtime-provider-tgrep.d.ts +60 -0
  49. package/dist/domain/runtime-provider-tgrep.js +537 -0
  50. package/dist/domain/runtime-provider-tgrep.js.map +1 -0
  51. package/dist/domain/runtime-resolution.d.ts +57 -0
  52. package/dist/domain/runtime-resolution.js +242 -0
  53. package/dist/domain/runtime-resolution.js.map +1 -0
  54. package/dist/domain/sandbox-launcher.d.ts +7 -0
  55. package/dist/domain/sandbox-launcher.js +380 -56
  56. package/dist/domain/sandbox-launcher.js.map +1 -1
  57. package/dist/domain/sandbox.d.ts +59 -4
  58. package/dist/domain/sandbox.js +100 -5
  59. package/dist/domain/sandbox.js.map +1 -1
  60. package/dist/domain/session-backend.js +20 -1
  61. package/dist/domain/session-backend.js.map +1 -1
  62. package/dist/domain/session.d.ts +3 -2
  63. package/dist/domain/session.js.map +1 -1
  64. package/dist/domain/tgrep-runtime-materialization.d.ts +61 -0
  65. package/dist/domain/tgrep-runtime-materialization.js +172 -0
  66. package/dist/domain/tgrep-runtime-materialization.js.map +1 -0
  67. package/dist/operation-authorization.d.ts +10 -0
  68. package/dist/operation-authorization.js +12 -1
  69. package/dist/operation-authorization.js.map +1 -1
  70. package/dist/presentation.js +6 -3
  71. package/dist/presentation.js.map +1 -1
  72. package/dist/session-registry.d.ts +11 -3
  73. package/dist/session-registry.js +61 -45
  74. package/dist/session-registry.js.map +1 -1
  75. package/package.json +3 -1
@@ -0,0 +1,385 @@
1
+ import fs from "node:fs";
2
+ import { posix } from "node:path";
3
+ import process from "node:process";
4
+ import { DomainError, failure, success } from "./errors.js";
5
+ import { materializeFhsRuntime } from "./fhs-runtime.js";
6
+ import { compileRuntimeExecutableProjection, } from "./runtime-executable-projection.js";
7
+ import { CANONICAL_RUNTIME_PROFILES, RUNTIME_PROFILE_CONTRACT_ID, RUNTIME_PROFILE_SCHEMA_VERSION, resolveRuntimeProfile, } from "./runtime-profile.js";
8
+ import { projectSessionRuntimeProjection, runtimeMaterializationMissingError, STRICT_RUNTIME_POLICY, validateRuntimePolicy, } from "./runtime-projection.js";
9
+ /** The canonical standalone Linux development baseline. */
10
+ export const FHS_DEVELOPMENT_RUNTIME_REQUIREMENT_IDS = Object.freeze([
11
+ "node-runtime",
12
+ "git-package",
13
+ "pnpm-package",
14
+ ]);
15
+ /**
16
+ * Explicit host/runtime evidence keys. These are exact executable sources,
17
+ * not search roots or package-manager configuration; absence is meaningful and
18
+ * leaves the strict baseline unavailable.
19
+ */
20
+ export const FHS_DEVELOPMENT_EXECUTABLE_ENVIRONMENT_KEYS = Object.freeze({
21
+ "node-runtime": "NAWABARI_FHS_NODE_EXECUTABLE",
22
+ "git-package": "NAWABARI_FHS_GIT_EXECUTABLE",
23
+ "pnpm-package": "NAWABARI_FHS_PNPM_EXECUTABLE",
24
+ });
25
+ /** Stable provider identities consumed by #293's executable projection. */
26
+ export const FHS_DEVELOPMENT_RUNTIME_PROVIDER_IDS = Object.freeze({
27
+ "node-runtime": "fhs-node-runtime-provider",
28
+ "git-package": "fhs-git-package-provider",
29
+ "pnpm-package": "fhs-pnpm-package-provider",
30
+ });
31
+ /**
32
+ * Read only the three explicit executable-source declarations exposed by the
33
+ * host/runtime boundary. In particular, this function never consults PATH,
34
+ * HOME, profile directories, or Corepack state.
35
+ */
36
+ export function readExplicitFhsDevelopmentExecutableCandidates(environment = process.env) {
37
+ const candidates = FHS_DEVELOPMENT_RUNTIME_REQUIREMENT_IDS.flatMap((requirementId) => {
38
+ const candidate = environment[FHS_DEVELOPMENT_EXECUTABLE_ENVIRONMENT_KEYS[requirementId]];
39
+ return typeof candidate === "string" && candidate.length > 0
40
+ ? [{ requirement_id: requirementId, path: candidate }]
41
+ : [];
42
+ });
43
+ candidates.sort((left, right) => compareText(left.requirement_id, right.requirement_id));
44
+ return Object.freeze(candidates.map((candidate) => Object.freeze(candidate)));
45
+ }
46
+ /** Stable executable file name backing each canonical development requirement. */
47
+ const FHS_DEVELOPMENT_EXECUTABLE_NAMES = Object.freeze({
48
+ "node-runtime": "node",
49
+ "git-package": "git",
50
+ "pnpm-package": "pnpm",
51
+ });
52
+ /**
53
+ * Fixed, bounded FHS binary directories consulted when no explicit host
54
+ * evidence env var is supplied. This is a small deterministic allowlist, not a
55
+ * PATH search: it never reflects process PATH, HOME, profile files, or
56
+ * Corepack state, so it cannot be redirected by an attacker-controlled PATH.
57
+ */
58
+ export const FHS_DEVELOPMENT_DEFAULT_EXECUTABLE_ROOTS = Object.freeze(["/usr/bin", "/usr/local/bin", "/bin"]);
59
+ /**
60
+ * Accept a fixed-root candidate only if it already satisfies the same
61
+ * symlink-rejecting contract `validateCandidatePath` enforces for explicit
62
+ * candidates: the leaf itself must not be a symlink, and no path component
63
+ * may resolve elsewhere. The leaf is lstat'd *before* any realpath
64
+ * resolution so a symlinked `node`/`git`/`pnpm` at a fixed root is rejected
65
+ * outright rather than silently followed to its target. Returns null when
66
+ * the root has no usable candidate (the caller tries the next root).
67
+ */
68
+ function canonicalDefaultExecutable(candidatePath) {
69
+ if (!canonicalAbsolutePath(candidatePath))
70
+ return null;
71
+ try {
72
+ const stat = fs.lstatSync(candidatePath);
73
+ if (stat.isSymbolicLink() || !stat.isFile())
74
+ return null;
75
+ if ((stat.mode & 0o111) === 0)
76
+ return null;
77
+ const resolved = fs.realpathSync.native(candidatePath);
78
+ if (resolved !== candidatePath || !canonicalAbsolutePath(resolved))
79
+ return null;
80
+ return resolved;
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /**
87
+ * Discover a default candidate for each canonical development requirement
88
+ * from a small fixed set of FHS binary directories (default:
89
+ * `FHS_DEVELOPMENT_DEFAULT_EXECUTABLE_ROOTS`). This is the fallback used only
90
+ * when no explicit `NAWABARI_FHS_*_EXECUTABLE` evidence is supplied; every
91
+ * discovered candidate is still re-validated by the same strict pipeline that
92
+ * validates explicit candidates.
93
+ */
94
+ export function discoverDefaultFhsDevelopmentExecutableCandidates(roots = FHS_DEVELOPMENT_DEFAULT_EXECUTABLE_ROOTS) {
95
+ const candidates = FHS_DEVELOPMENT_RUNTIME_REQUIREMENT_IDS.flatMap((requirementId) => {
96
+ const name = FHS_DEVELOPMENT_EXECUTABLE_NAMES[requirementId];
97
+ for (const root of roots) {
98
+ const resolved = canonicalDefaultExecutable(posix.join(root, name));
99
+ if (resolved !== null)
100
+ return [{ requirement_id: requirementId, path: resolved }];
101
+ }
102
+ return [];
103
+ });
104
+ candidates.sort((left, right) => compareText(left.requirement_id, right.requirement_id));
105
+ return Object.freeze(candidates.map((candidate) => Object.freeze(candidate)));
106
+ }
107
+ /**
108
+ * The canonical host/runtime evidence source for standalone FHS development
109
+ * materialization: explicit `NAWABARI_FHS_*_EXECUTABLE` evidence always wins
110
+ * per requirement; a fixed-root default candidate (see
111
+ * `discoverDefaultFhsDevelopmentExecutableCandidates`) fills any requirement
112
+ * left unset so strict execution succeeds out of the box on a supported
113
+ * host. A requirement with neither source still fails closed.
114
+ */
115
+ export function readFhsDevelopmentExecutableCandidates(environment = process.env, roots = FHS_DEVELOPMENT_DEFAULT_EXECUTABLE_ROOTS) {
116
+ const explicit = new Map(readExplicitFhsDevelopmentExecutableCandidates(environment).map((candidate) => [
117
+ candidate.requirement_id,
118
+ candidate,
119
+ ]));
120
+ const discovered = new Map(discoverDefaultFhsDevelopmentExecutableCandidates(roots).map((candidate) => [candidate.requirement_id, candidate]));
121
+ const candidates = FHS_DEVELOPMENT_RUNTIME_REQUIREMENT_IDS.flatMap((requirementId) => {
122
+ const candidate = explicit.get(requirementId) ?? discovered.get(requirementId);
123
+ return candidate === undefined ? [] : [candidate];
124
+ });
125
+ candidates.sort((left, right) => compareText(left.requirement_id, right.requirement_id));
126
+ return Object.freeze(candidates.map((candidate) => Object.freeze(candidate)));
127
+ }
128
+ function isRecord(value) {
129
+ return typeof value === "object" && value !== null && !Array.isArray(value);
130
+ }
131
+ function isNonEmptyText(value) {
132
+ return typeof value === "string" && value.length > 0 && !value.includes("\u0000");
133
+ }
134
+ function compareText(left, right) {
135
+ return left < right ? -1 : left > right ? 1 : 0;
136
+ }
137
+ /** Strip a reason's own trailing period so it nests into a sentence exactly once. */
138
+ function reasonSentence(reason) {
139
+ return reason.endsWith(".") ? reason.slice(0, -1) : reason;
140
+ }
141
+ function missing(requirement, reason, details = {}) {
142
+ const fallback = requirement ?? { id: "development-runtime", kind: "runtime" };
143
+ const canonical = runtimeMaterializationMissingError(fallback.id, fallback.kind);
144
+ return failure(new DomainError(canonical.code, `${canonical.message.slice(0, -1)}: ${reasonSentence(reason)}.`, { ...(canonical.details ?? {}), reason, ...details }, canonical.exitCode));
145
+ }
146
+ function ambiguous(field, value, reason) {
147
+ return failure(new DomainError("RUNTIME_PROJECTION_AMBIGUOUS", `FHS development field '${field}' is ambiguous: ${reason}.`, {
148
+ field,
149
+ value,
150
+ }));
151
+ }
152
+ function invalid(field, reason, value) {
153
+ return failure(new DomainError("RUNTIME_PROJECTION_INVALID", `FHS development field '${field}' is invalid: ${reason}.`, {
154
+ field,
155
+ ...(value === undefined ? {} : { value }),
156
+ }));
157
+ }
158
+ function canonicalAbsolutePath(candidate) {
159
+ return posix.isAbsolute(candidate) && posix.normalize(candidate) === candidate && candidate !== "/";
160
+ }
161
+ function validateCandidatePath(candidate, requirement, field) {
162
+ if (!isNonEmptyText(candidate) || !canonicalAbsolutePath(candidate)) {
163
+ return invalid(field, "expected a normalized absolute path supplied by bounded host/runtime evidence", typeof candidate === "string" ? candidate : undefined);
164
+ }
165
+ try {
166
+ const stat = fs.lstatSync(candidate);
167
+ if (stat.isSymbolicLink())
168
+ return missing(requirement, "the candidate executable must not be a symlink", { field, source: candidate });
169
+ if (!stat.isFile())
170
+ return missing(requirement, "the candidate executable is not a regular file", { field, source: candidate });
171
+ if ((stat.mode & 0o111) === 0)
172
+ return missing(requirement, "the candidate executable is not executable", { field, source: candidate });
173
+ const resolved = fs.realpathSync.native(candidate);
174
+ if (resolved !== candidate)
175
+ return missing(requirement, "the candidate executable resolves through a symlink", {
176
+ field,
177
+ source: candidate,
178
+ resolved_source: resolved,
179
+ });
180
+ if (!canonicalAbsolutePath(resolved))
181
+ return missing(requirement, "the candidate executable resolves to a non-canonical path", {
182
+ field,
183
+ source: candidate,
184
+ resolved_source: resolved,
185
+ });
186
+ return success(resolved);
187
+ }
188
+ catch (error) {
189
+ return missing(requirement, "the candidate executable is missing or cannot be canonicalized", {
190
+ field,
191
+ source: candidate,
192
+ reason_detail: error instanceof Error ? error.message.slice(0, 120) : "unknown",
193
+ });
194
+ }
195
+ }
196
+ function resolvedProfile(input) {
197
+ const profile = input.profile === undefined
198
+ ? resolveRuntimeProfile({ profiles: ["development"] }, CANONICAL_RUNTIME_PROFILES)
199
+ : !isRecord(input.profile)
200
+ ? invalid("profile", "expected a resolved runtime profile")
201
+ : success(input.profile);
202
+ if (!profile.ok)
203
+ return profile;
204
+ if (!isRecord(profile.value) ||
205
+ profile.value.contract_id !== RUNTIME_PROFILE_CONTRACT_ID ||
206
+ profile.value.schema_version !== RUNTIME_PROFILE_SCHEMA_VERSION ||
207
+ !isRecord(profile.value.profile) ||
208
+ !isStableRequirement(profile.value.profile.id) ||
209
+ !isNonEmptyText(profile.value.profile.version) ||
210
+ !Array.isArray(profile.value.requirements)) {
211
+ return invalid("profile", "expected a validated runtime profile");
212
+ }
213
+ const requirementIds = new Set();
214
+ for (const [index, candidate] of profile.value.requirements.entries()) {
215
+ if (!isRecord(candidate) ||
216
+ !isStableRequirement(candidate.id) ||
217
+ (candidate.kind !== "runtime" && candidate.kind !== "package") ||
218
+ !isNonEmptyText(candidate.name) ||
219
+ !isNonEmptyText(candidate.version)) {
220
+ return invalid(`profile.requirements[${index}]`, "expected a stable requirement descriptor");
221
+ }
222
+ if (requirementIds.has(candidate.id)) {
223
+ return ambiguous("profile.requirements", candidate.id, "duplicate requirement id");
224
+ }
225
+ requirementIds.add(candidate.id);
226
+ }
227
+ for (const requirementId of FHS_DEVELOPMENT_RUNTIME_REQUIREMENT_IDS) {
228
+ const requirement = profile.value.requirements.find((candidate) => isRecord(candidate) &&
229
+ isStableRequirement(candidate.id) &&
230
+ (candidate.kind === "runtime" || candidate.kind === "package") &&
231
+ isNonEmptyText(candidate.name) &&
232
+ isNonEmptyText(candidate.version) &&
233
+ candidate.id === requirementId);
234
+ if (requirement === undefined) {
235
+ const kind = requirementId === "node-runtime" ? "runtime" : "package";
236
+ return missing({ id: requirementId, kind }, "the canonical development baseline requirement is absent", {
237
+ requirement_id: requirementId,
238
+ });
239
+ }
240
+ }
241
+ return profile;
242
+ }
243
+ function isStableRequirement(value) {
244
+ return typeof value === "string" && /^[a-z0-9][a-z0-9._-]*$/u.test(value);
245
+ }
246
+ function validatedCandidates(value, profile) {
247
+ if (!Array.isArray(value))
248
+ return invalid("executable_candidates", "expected an array");
249
+ const requirements = new Map(profile.requirements.map((requirement) => [requirement.id, requirement]));
250
+ const seen = new Set();
251
+ const sources = new Map();
252
+ const validated = [];
253
+ for (const [index, item] of value.entries()) {
254
+ if (!isRecord(item) || !isNonEmptyText(item.requirement_id) || !isNonEmptyText(item.path)) {
255
+ return invalid(`executable_candidates[${index}]`, "expected requirement_id and path");
256
+ }
257
+ const requirement = requirements.get(item.requirement_id);
258
+ if (requirement === undefined)
259
+ return missing(null, "the candidate references an unknown profile requirement", {
260
+ requirement_id: item.requirement_id,
261
+ });
262
+ if (seen.has(item.requirement_id))
263
+ return ambiguous("executable_candidates.requirement_id", item.requirement_id, "multiple candidates satisfy one requirement");
264
+ seen.add(item.requirement_id);
265
+ const checked = validateCandidatePath(item.path, requirement, `executable_candidates[${index}].path`);
266
+ if (!checked.ok)
267
+ return checked;
268
+ const previousRequirement = sources.get(checked.value);
269
+ if (previousRequirement !== undefined) {
270
+ return ambiguous("executable_candidates.path", checked.value, `one source cannot satisfy both ${previousRequirement} and ${item.requirement_id}`);
271
+ }
272
+ sources.set(checked.value, item.requirement_id);
273
+ validated.push(Object.freeze({
274
+ requirement_id: item.requirement_id,
275
+ path: checked.value,
276
+ target: `/usr/local/bin/${requirement.name}`,
277
+ }));
278
+ }
279
+ for (const requirement of profile.requirements) {
280
+ if (!seen.has(requirement.id))
281
+ return missing(requirement, "no explicit candidate was supplied");
282
+ }
283
+ validated.sort((left, right) => compareText(left.requirement_id, right.requirement_id));
284
+ return success(Object.freeze(validated));
285
+ }
286
+ function developmentEntrypoints(profile, policy, candidates) {
287
+ const paths = new Map(candidates.map((candidate) => [candidate.requirement_id, candidate.target ?? candidate.path]));
288
+ const entrypoints = profile.requirements.map((requirement) => {
289
+ const path = paths.get(requirement.id);
290
+ const providerId = FHS_DEVELOPMENT_RUNTIME_PROVIDER_IDS[requirement.id] ?? `fhs-${requirement.id}-provider`;
291
+ return Object.freeze({
292
+ name: requirement.name,
293
+ target: path,
294
+ provider: Object.freeze({ id: providerId, requirement_id: requirement.id }),
295
+ provenance: (policy.mode === "strict" && requirement.kind === "runtime" ? "runtime-profile" : "package"),
296
+ });
297
+ });
298
+ return success(Object.freeze(entrypoints));
299
+ }
300
+ /**
301
+ * Resolve the canonical standalone Linux development baseline from explicit
302
+ * candidates, materialize its bounded ELF/shebang closure, and compile the
303
+ * exact result through #293's executable projection.
304
+ */
305
+ export function resolveFhsDevelopmentRuntime(input) {
306
+ if (!isRecord(input))
307
+ return invalid("materialization", "expected an object");
308
+ const policy = validateRuntimePolicy(input.policy ?? STRICT_RUNTIME_POLICY);
309
+ if (!policy.ok)
310
+ return failure(policy.error);
311
+ if (policy.value.mode !== "strict")
312
+ return invalid("policy", "the FHS development resolver only supports strict policy");
313
+ const profile = resolvedProfile(input);
314
+ if (!profile.ok)
315
+ return profile;
316
+ const candidates = validatedCandidates(input.executable_candidates, profile.value);
317
+ if (!candidates.ok)
318
+ return candidates;
319
+ const materialized = materializeFhsRuntime({
320
+ profile: profile.value,
321
+ policy: policy.value,
322
+ executables: candidates.value,
323
+ ...(input.library_search_paths === undefined ? {} : { library_search_paths: input.library_search_paths }),
324
+ });
325
+ if (!materialized.ok)
326
+ return failure(materialized.error);
327
+ const entrypoints = developmentEntrypoints(profile.value, policy.value, candidates.value);
328
+ if (!entrypoints.ok)
329
+ return entrypoints;
330
+ const projection = projectSessionRuntimeProjection({
331
+ policy: policy.value,
332
+ profile: profile.value.profile,
333
+ requirements: profile.value.requirements,
334
+ filesystem: materialized.value.filesystem,
335
+ executables: entrypoints.value,
336
+ });
337
+ if (!projection.ok)
338
+ return failure(projection.error);
339
+ const executableProjection = compileRuntimeExecutableProjection(projection.value);
340
+ if (!executableProjection.ok)
341
+ return failure(executableProjection.error);
342
+ if (executableProjection.value.length !== profile.value.requirements.length) {
343
+ return missing(null, "the executable projection did not preserve the complete development baseline");
344
+ }
345
+ return success(Object.freeze({
346
+ policy: projection.value.policy,
347
+ profile: projection.value.profile,
348
+ materializer: "fhs",
349
+ projection: projection.value,
350
+ executable_projection: executableProjection.value,
351
+ }));
352
+ }
353
+ /** Alias emphasizing that this result is the FHS materialization authority. */
354
+ export const materializeFhsDevelopmentRuntime = resolveFhsDevelopmentRuntime;
355
+ /**
356
+ * Doctor/readiness authority. It calls the same resolver used by execution;
357
+ * it never reports readiness from directory existence or layout heuristics.
358
+ */
359
+ export function fhsDevelopmentRuntimeReadiness(platform, runtimeLayout) {
360
+ if (platform !== "linux") {
361
+ return Object.freeze({
362
+ strict_ready: false,
363
+ reason: "standalone FHS development materialization is supported only on Linux",
364
+ code: "SANDBOX_UNSUPPORTED_PLATFORM",
365
+ details: { platform },
366
+ });
367
+ }
368
+ const resolved = resolveFhsDevelopmentRuntime({
369
+ executable_candidates: runtimeLayout.fhs_executable_candidates ?? [],
370
+ ...(runtimeLayout.fhs_library_search_paths === undefined
371
+ ? {}
372
+ : { library_search_paths: runtimeLayout.fhs_library_search_paths }),
373
+ });
374
+ if (resolved.ok) {
375
+ return Object.freeze({ strict_ready: true, reason: null, code: null, details: {} });
376
+ }
377
+ return Object.freeze({
378
+ strict_ready: false,
379
+ reason: resolved.error.message,
380
+ code: resolved.error.code,
381
+ details: resolved.error.details ?? {},
382
+ });
383
+ }
384
+ export const doctorFhsDevelopmentRuntime = fhsDevelopmentRuntimeReadiness;
385
+ //# sourceMappingURL=fhs-development-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhs-development-runtime.js","sourceRoot":"","sources":["../../src/domain/fhs-development-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type DomainResult } from "./errors.js";
2
+ import { type ResolvedRuntimeProfile } from "./runtime-profile.js";
3
+ import { type RuntimePolicy, type SessionRuntimeProjection } from "./runtime-projection.js";
4
+ /** Versioned identity for bounded standalone/FHS runtime materialization. */
5
+ export declare const FHS_RUNTIME_MATERIALIZATION_CONTRACT_ID: "nawabari.fhs-runtime-materialization.v1";
6
+ export declare const FHS_RUNTIME_MATERIALIZATION_SCHEMA_VERSION: 1;
7
+ /** The only host roots accepted as FHS materialization destinations. */
8
+ export declare const FHS_RUNTIME_ROOTS: readonly ["/usr", "/bin", "/lib", "/lib64"];
9
+ /** Fixed, distro-independent lookup order for the common FHS library layouts. */
10
+ export declare const FHS_RUNTIME_LIBRARY_SEARCH_PATHS: readonly ["/lib", "/lib64", "/usr/lib", "/usr/lib64", "/lib/aarch64-linux-gnu", "/lib/arm-linux-gnueabi", "/lib/arm-linux-gnueabihf", "/lib/i386-linux-gnu", "/lib/powerpc64le-linux-gnu", "/lib/riscv64-linux-gnu", "/lib/s390x-linux-gnu", "/lib/x86_64-linux-gnu", "/usr/lib/aarch64-linux-gnu", "/usr/lib/arm-linux-gnueabi", "/usr/lib/arm-linux-gnueabihf", "/usr/lib/i386-linux-gnu", "/usr/lib/powerpc64le-linux-gnu", "/usr/lib/riscv64-linux-gnu", "/usr/lib/s390x-linux-gnu", "/usr/lib/x86_64-linux-gnu"];
11
+ export type FhsRuntimeExecutableDeclaration = Readonly<{
12
+ /** Profile requirement satisfied by this explicitly declared host artifact. */
13
+ readonly requirement_id: string;
14
+ /** Absolute canonical host path. */
15
+ readonly path: string;
16
+ /** Optional bounded namespace target; omitted for legacy same-path declarations. */
17
+ readonly target?: string;
18
+ }>;
19
+ export type FhsRuntimeMaterializationInput = Readonly<{
20
+ /** Output of the #290 logical runtime-profile resolver. */
21
+ readonly profile: ResolvedRuntimeProfile;
22
+ /** One explicitly declared executable artifact for every selected requirement. */
23
+ readonly executables: readonly FhsRuntimeExecutableDeclaration[];
24
+ /** Omitted means strict default-deny. Compatibility is never inferred. */
25
+ readonly policy?: RuntimePolicy;
26
+ /** Optional fixed FHS directories, useful for a controlled host layout. */
27
+ readonly library_search_paths?: readonly string[];
28
+ }>;
29
+ /**
30
+ * Resolve declared FHS executables and their ELF loader/library closure into
31
+ * file-level read-only projections. No directory or host-root projection is
32
+ * ever generated by this function.
33
+ */
34
+ export declare function materializeFhsRuntime(input: unknown): DomainResult<SessionRuntimeProjection>;
35
+ /** Descriptive alias for callers that emphasize the resulting projection. */
36
+ export declare const materializeFhsRuntimeProjection: typeof materializeFhsRuntime;