@tangle-network/cli-agent-registry 0.0.0-stage → 0.15.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.
Files changed (37) hide show
  1. package/LICENSE +11 -0
  2. package/README.md +175 -2
  3. package/dist/backend-types-CNo_Zj_K.mjs +36 -0
  4. package/dist/backend-types-DRmLR1e0.d.mts +47 -0
  5. package/dist/backend-types.d.mts +2 -0
  6. package/dist/backend-types.mjs +2 -0
  7. package/dist/cli-auth-bundle-C6DtK7GX.mjs +95 -0
  8. package/dist/cli-auth-bundle-CwAaH0Ap.d.mts +51 -0
  9. package/dist/cli-auth-bundle.d.mts +2 -0
  10. package/dist/cli-auth-bundle.mjs +2 -0
  11. package/dist/cli-auth-placeholder.d.mts +54 -0
  12. package/dist/cli-auth-placeholder.mjs +200 -0
  13. package/dist/cli-backend-auth-env.d.mts +6 -0
  14. package/dist/cli-backend-auth-env.mjs +44 -0
  15. package/dist/default-backend.d.mts +24 -0
  16. package/dist/default-backend.mjs +31 -0
  17. package/dist/harness-D1fTxnDD.mjs +199 -0
  18. package/dist/harness-contracts-BZoECCMc.mjs +1076 -0
  19. package/dist/host-contracts.d.mts +30 -0
  20. package/dist/host-contracts.json +422 -0
  21. package/dist/host-contracts.mjs +63 -0
  22. package/dist/index.d.mts +1397 -0
  23. package/dist/index.mjs +151 -0
  24. package/dist/local-cli-auth.d.mts +14 -0
  25. package/dist/local-cli-auth.mjs +31 -0
  26. package/dist/native-session-contracts.d.mts +349 -0
  27. package/dist/native-session-contracts.mjs +40 -0
  28. package/dist/servable-models.d.mts +103 -0
  29. package/dist/servable-models.mjs +131 -0
  30. package/dist/session-contract-BhzcbPRW.d.mts +97 -0
  31. package/dist/session-contract.d.mts +2 -0
  32. package/dist/session-contract.mjs +142 -0
  33. package/dist/spec-CcvTM7-j.d.mts +346 -0
  34. package/dist/specs-BBF55TnM.mjs +735 -0
  35. package/dist/specs.d.mts +72 -0
  36. package/dist/specs.mjs +3 -0
  37. package/package.json +87 -3
@@ -0,0 +1,131 @@
1
+ import { l as getSpec, m as harnessModelSupportFor } from "./specs-BBF55TnM.mjs";
2
+ //#region src/servable-models.ts
3
+ /**
4
+ * The models a managed (Tangle-funded) run may default to, most preferred
5
+ * first. Every managed default in the platform is the first rung a harness can
6
+ * run ({@link managedModelChain}), so this list is the one place a default
7
+ * model is chosen.
8
+ *
9
+ * A managed run sends its model id to the Tangle router, which answers only
10
+ * when BOTH of these hold:
11
+ *
12
+ * 1. the router routes the id — it appears in `GET /v1/models` with
13
+ * `routeability.routeable = true`; and
14
+ * 2. the router holds a spend-authorizing price for the id — a
15
+ * `ProviderPriceVersion` row whose `authority` is `provider_official` or
16
+ * `operator_reviewed`. Third-party price observations are recorded but
17
+ * cannot authorize spend, so they do not count.
18
+ *
19
+ * A model that fails either test answers 503 `provider_pricing_unavailable`
20
+ * to a Tangle-funded call. A CLI reads 503 as transient and retries until its
21
+ * own timeout, so the run produces no output and no error for many minutes.
22
+ * That is why an unservable default is worse than a wrong one: it does not
23
+ * fail, it hangs.
24
+ *
25
+ * Which models a harness can run is not decided here: the capability table
26
+ * ({@link harnessModelSupportFor}) drops the rungs a harness refuses (measured
27
+ * exclusions). claude-code and codex run the whole ladder: the router
28
+ * translates every non-vendor model on their Messages and Responses wires to
29
+ * chat completions, so they lead with the same cheapest rung as every other
30
+ * Router-backed harness.
31
+ */
32
+ const MANAGED_MODEL_LADDER = [
33
+ {
34
+ id: "google/gemini-2.5-flash-lite",
35
+ reason: "available, $0.10/$0.40 per Mtok; the production canary passes on it",
36
+ reviewedAt: "2026-10-14"
37
+ },
38
+ {
39
+ id: "zai/glm-5.3",
40
+ reason: "degraded but served by zai direct (200 on chat/completions)",
41
+ reviewedAt: "2026-10-14"
42
+ },
43
+ {
44
+ id: "google/gemini-2.5-flash",
45
+ reason: "available",
46
+ reviewedAt: "2026-10-14"
47
+ },
48
+ {
49
+ id: "deepseek/deepseek-chat",
50
+ reason: "routeable and priced; no recent dispatch",
51
+ reviewedAt: "2026-10-14"
52
+ },
53
+ {
54
+ id: "openai/gpt-6-luna",
55
+ reason: "the router's tangle/cheap role; no recent dispatch",
56
+ reviewedAt: "2026-10-14"
57
+ }
58
+ ];
59
+ /** The bare id a provider-prefixed model id carries. */
60
+ function bareModelId(modelId) {
61
+ const slash = modelId.lastIndexOf("/");
62
+ return slash < 0 ? modelId : modelId.slice(slash + 1);
63
+ }
64
+ /**
65
+ * Whether a managed default may use this id. Accepts the provider-prefixed
66
+ * form and the bare form, because a harness on a provider-native wire sends
67
+ * the bare id its own CLI expects.
68
+ */
69
+ function isServableManagedModel(modelId) {
70
+ const candidate = modelId.trim();
71
+ if (!candidate) return false;
72
+ const bare = bareModelId(candidate);
73
+ return MANAGED_MODEL_LADDER.some((rung) => rung.id === candidate || bareModelId(rung.id) === bare);
74
+ }
75
+ /**
76
+ * The ordered models a managed run of `harness` may use, first choice first.
77
+ * Every managed default site takes `chain[0]`; the rest is the order a later
78
+ * fallback would try.
79
+ *
80
+ * - A named model is the whole chain.
81
+ * - A harness the Router cannot serve (`CliAgentSpec.callerCredentialOnly`)
82
+ * has no managed chain: its CLI calls its vendor's own service, so it runs
83
+ * only on the caller's own credential.
84
+ * - Otherwise the operator's model, then {@link MANAGED_MODEL_LADDER}, keeping
85
+ * only the ids the capability table lets this harness run.
86
+ */
87
+ function managedModelChain(harness, options = {}) {
88
+ if (getSpec(harness)?.callerCredentialOnly) return {
89
+ ok: false,
90
+ chain: [],
91
+ skipped: [],
92
+ message: `${harness} cannot run on Tangle Router: its CLI calls its vendor's own service, so it runs only on the caller's own credential.`
93
+ };
94
+ const named = options.named?.trim();
95
+ if (named) return {
96
+ ok: true,
97
+ chain: [named],
98
+ skipped: []
99
+ };
100
+ const preferred = [options.operatorModel?.trim(), ...MANAGED_MODEL_LADDER.map((rung) => rung.id)].filter((id) => Boolean(id));
101
+ const allowed = options.allowedModels?.map((id) => id.trim()).filter(Boolean);
102
+ const candidates = allowed ? [...preferred.flatMap((id) => {
103
+ const match = allowed.find((entry) => entry === id) ?? allowed.find((entry) => bareModelId(entry) === bareModelId(id));
104
+ return match ? [match] : [];
105
+ }), ...allowed] : preferred;
106
+ const chain = [];
107
+ const skipped = [];
108
+ for (const id of new Set(candidates)) {
109
+ const support = harnessModelSupportFor(harness, id, { reasoningEffort: options.reasoningEffort });
110
+ if (support.supported) chain.push(id);
111
+ else skipped.push({
112
+ id,
113
+ reason: support.message
114
+ });
115
+ }
116
+ if (chain.length > 0) return {
117
+ ok: true,
118
+ chain,
119
+ skipped
120
+ };
121
+ return {
122
+ ok: false,
123
+ chain: [],
124
+ skipped,
125
+ message: `No managed model can run on ${harness}: ` + skipped.map((entry) => `${entry.id} (${entry.reason})`).join("; ")
126
+ };
127
+ }
128
+ //#endregion
129
+ export { MANAGED_MODEL_LADDER, bareModelId, isServableManagedModel, managedModelChain };
130
+
131
+ //# sourceMappingURL=servable-models.mjs.map
@@ -0,0 +1,97 @@
1
+ //#region src/session-contract.d.ts
2
+ /** One session contract. Stores sit under the private runtime HOME. No Node built-ins. */
3
+ declare const SESSION_FORMAT_IDS: readonly ["claude-code.projects-jsonl", "codex.rollout-jsonl", "opencode.sqlite", "pi.session-jsonl", "kimi.session-dir", "factory.session-jsonl", "gemini.chat-json", "amp.thread-json", "hermes.state-sqlite", "prime.session-jsonl", "openclaw.session-jsonl", "grok.acp-session-dir", "nanoclaw.session-sqlite", "sidecar.message-json", "sidecar.session-json"];
4
+ type SessionFormatId = (typeof SESSION_FORMAT_IDS)[number];
5
+ interface NativeSessionStore {
6
+ /**
7
+ * Relative to the execution's private runtime HOME. Normalized, with no
8
+ * `..`; never absolute and never in the workspace.
9
+ */
10
+ root: string;
11
+ /** Globs under root that hold one session. `{id}` is the native session id. */
12
+ files: readonly string[];
13
+ /** How the harness writes. This decides how a copy is taken while it runs. */
14
+ write: "jsonl-append" | "json-rewrite" | "sqlite-wal";
15
+ /** True when one store holds every session in the HOME (opencode.db). Readers select by id. */
16
+ shared: boolean;
17
+ format: SessionFormatId;
18
+ }
19
+ type NativeSessionIdentity = /** The sidecar mints the id and records it before it spawns the CLI. */{
20
+ kind: "pre-minted";
21
+ args: readonly string[];
22
+ } /** The id comes from an API call that precedes the first prompt. */ | {
23
+ kind: "api-created";
24
+ call: "opencode POST /session" | "acp session/new" | "codex thread/start" | "amp threads new";
25
+ }
26
+ /**
27
+ * Only for a CLI that cannot accept an id: the id is the first event's.
28
+ * Past the deadline the attempt fails with `native_session_id_unobserved`.
29
+ */
30
+ | {
31
+ kind: "first-event";
32
+ event: string;
33
+ deadlineMs: number;
34
+ };
35
+ interface HarnessSessionEvidence {
36
+ servedModel: "provider-response" | "session-record" | "turn-context" | "none";
37
+ usage: "per-response" | "cumulative" | "session-total" | "none";
38
+ endingError: "session-record" | "none";
39
+ }
40
+ interface HarnessSessionContract {
41
+ version: 1;
42
+ stores: readonly [NativeSessionStore, ...NativeSessionStore[]];
43
+ identity: NativeSessionIdentity;
44
+ resume: {
45
+ kind: "args";
46
+ args: readonly string[];
47
+ } | {
48
+ kind: "api";
49
+ };
50
+ /**
51
+ * Argv tokens that disable or redirect persistence. Refused in config
52
+ * extraFlags, in profile flags and in the built argv. A token also matches
53
+ * its `--flag=value` form.
54
+ */
55
+ forbiddenArgs: readonly string[];
56
+ /**
57
+ * Env names, and flags such as `--session-dir`, that move the store, each
58
+ * mapped to the only path it may take, relative to the runtime HOME.
59
+ */
60
+ storeEnv: Readonly<Record<string, string>>;
61
+ evidence: HarnessSessionEvidence;
62
+ /** The pinned CLI version (infra/nix) that the conformance receipt covers. */
63
+ cliVersion: string;
64
+ }
65
+ type HarnessSessionContractErrorCode = "harness_session_contract_missing" | "harness_session_persistence_disabled" | "harness_conformance_missing" | "native_session_id_unobserved";
66
+ declare class HarnessSessionContractError extends Error {
67
+ readonly code: HarnessSessionContractErrorCode;
68
+ constructor(code: HarnessSessionContractErrorCode, message: string);
69
+ }
70
+ /** Replace `{id}` in each token. */
71
+ declare function substituteNativeSessionId(tokens: readonly string[], nativeSessionId: string): string[];
72
+ /** The forbidden tokens present in `argv`, in argv order. */
73
+ declare function forbiddenArgViolations(contract: Pick<HarnessSessionContract, "forbiddenArgs">, argv: readonly string[]): string[];
74
+ /** Refuse flags that disable persistence, on configured flags and on the built argv. */
75
+ declare function assertFlagsHonourSessionContract(harness: string, contract: Pick<HarnessSessionContract, "forbiddenArgs">, flags: readonly string[], source: string): void;
76
+ /** No forbidden argv token, and a pre-minted new session carries its minted id. */
77
+ declare function assertArgvHonoursSessionContract(harness: string, contract: HarnessSessionContract, argv: readonly string[], session: {
78
+ mintedId?: string;
79
+ }): void;
80
+ /** Normalize a POSIX path; `..` that escapes the start is kept as a leading `..`. */
81
+ declare function normalizePosixPath(path: string): string;
82
+ /** Each store env or `--flag` value must resolve to exactly HOME/<declared path>. */
83
+ declare function assertStoreLocationHonoursSessionContract(harness: string, contract: Pick<HarnessSessionContract, "storeEnv">, input: {
84
+ runtimeHome: string;
85
+ cwd: string;
86
+ env?: Readonly<Record<string, string | undefined>>;
87
+ argv?: readonly string[];
88
+ }): void;
89
+ /** `**` is any number of segments, `*` is one segment, `{id}` is the session id. */
90
+ declare function compileSessionStoreGlob(glob: string, nativeSessionId?: string): RegExp;
91
+ /** The store that holds `pathFromHome`, or undefined. A shared store matches every session. */
92
+ declare function sessionStoreForPath(contract: Pick<HarnessSessionContract, "stores">, pathFromHome: string, nativeSessionId: string): NativeSessionStore | undefined;
93
+ /** Structural checks every declared contract must pass. */
94
+ declare function sessionContractProblems(contract: HarnessSessionContract): string[];
95
+ //#endregion
96
+ export { substituteNativeSessionId as _, NativeSessionIdentity as a, SessionFormatId as c, assertStoreLocationHonoursSessionContract as d, compileSessionStoreGlob as f, sessionStoreForPath as g, sessionContractProblems as h, HarnessSessionEvidence as i, assertArgvHonoursSessionContract as l, normalizePosixPath as m, HarnessSessionContractError as n, NativeSessionStore as o, forbiddenArgViolations as p, HarnessSessionContractErrorCode as r, SESSION_FORMAT_IDS as s, HarnessSessionContract as t, assertFlagsHonourSessionContract as u };
97
+ //# sourceMappingURL=session-contract-BhzcbPRW.d.mts.map
@@ -0,0 +1,2 @@
1
+ import { _ as substituteNativeSessionId, a as NativeSessionIdentity, c as SessionFormatId, d as assertStoreLocationHonoursSessionContract, f as compileSessionStoreGlob, g as sessionStoreForPath, h as sessionContractProblems, i as HarnessSessionEvidence, l as assertArgvHonoursSessionContract, m as normalizePosixPath, n as HarnessSessionContractError, o as NativeSessionStore, p as forbiddenArgViolations, r as HarnessSessionContractErrorCode, s as SESSION_FORMAT_IDS, t as HarnessSessionContract, u as assertFlagsHonourSessionContract } from "./session-contract-BhzcbPRW.mjs";
2
+ export { HarnessSessionContract, HarnessSessionContractError, HarnessSessionContractErrorCode, HarnessSessionEvidence, NativeSessionIdentity, NativeSessionStore, SESSION_FORMAT_IDS, SessionFormatId, assertArgvHonoursSessionContract, assertFlagsHonourSessionContract, assertStoreLocationHonoursSessionContract, compileSessionStoreGlob, forbiddenArgViolations, normalizePosixPath, sessionContractProblems, sessionStoreForPath, substituteNativeSessionId };
@@ -0,0 +1,142 @@
1
+ //#region src/session-contract.ts
2
+ /** One session contract. Stores sit under the private runtime HOME. No Node built-ins. */
3
+ const SESSION_FORMAT_IDS = [
4
+ "claude-code.projects-jsonl",
5
+ "codex.rollout-jsonl",
6
+ "opencode.sqlite",
7
+ "pi.session-jsonl",
8
+ "kimi.session-dir",
9
+ "factory.session-jsonl",
10
+ "gemini.chat-json",
11
+ "amp.thread-json",
12
+ "hermes.state-sqlite",
13
+ "prime.session-jsonl",
14
+ "openclaw.session-jsonl",
15
+ "grok.acp-session-dir",
16
+ "nanoclaw.session-sqlite",
17
+ "sidecar.message-json",
18
+ "sidecar.session-json"
19
+ ];
20
+ var HarnessSessionContractError = class extends Error {
21
+ code;
22
+ constructor(code, message) {
23
+ super(`${code}: ${message}`);
24
+ this.name = "HarnessSessionContractError";
25
+ this.code = code;
26
+ }
27
+ };
28
+ /** Replace `{id}` in each token. */
29
+ function substituteNativeSessionId(tokens, nativeSessionId) {
30
+ return tokens.map((token) => token.split("{id}").join(nativeSessionId));
31
+ }
32
+ /** The forbidden tokens present in `argv`, in argv order. */
33
+ function forbiddenArgViolations(contract, argv) {
34
+ return argv.filter((token) => contract.forbiddenArgs.some((forbidden) => token === forbidden || token.startsWith(`${forbidden}=`)));
35
+ }
36
+ function indexOfSequence(haystack, needle) {
37
+ if (needle.length === 0) return 0;
38
+ for (let index = 0; index + needle.length <= haystack.length; index++) if (needle.every((token, offset) => haystack[index + offset] === token)) return index;
39
+ return -1;
40
+ }
41
+ /** Refuse flags that disable persistence, on configured flags and on the built argv. */
42
+ function assertFlagsHonourSessionContract(harness, contract, flags, source) {
43
+ const violations = forbiddenArgViolations(contract, flags);
44
+ if (violations.length > 0) throw new HarnessSessionContractError("harness_session_persistence_disabled", `${harness} ${source} carries ${violations.join(", ")}, which disables or redirects its native session`);
45
+ }
46
+ /** No forbidden argv token, and a pre-minted new session carries its minted id. */
47
+ function assertArgvHonoursSessionContract(harness, contract, argv, session) {
48
+ assertFlagsHonourSessionContract(harness, contract, argv, "argv");
49
+ if (session.mintedId === void 0) return;
50
+ if (contract.identity.kind !== "pre-minted") throw new HarnessSessionContractError("harness_session_persistence_disabled", `${harness} was given a minted session id but its identity is ${contract.identity.kind}`);
51
+ if (indexOfSequence(argv, substituteNativeSessionId(contract.identity.args, session.mintedId)) < 0) throw new HarnessSessionContractError("harness_session_persistence_disabled", `${harness} argv does not carry its pre-minted session id (${contract.identity.args.join(" ")})`);
52
+ }
53
+ /** Normalize a POSIX path; `..` that escapes the start is kept as a leading `..`. */
54
+ function normalizePosixPath(path) {
55
+ const absolute = path.startsWith("/");
56
+ const parts = [];
57
+ for (const part of path.split("/")) {
58
+ if (part === "" || part === ".") continue;
59
+ if (part === "..") {
60
+ if (parts.length > 0 && parts[parts.length - 1] !== "..") parts.pop();
61
+ else if (!absolute) parts.push("..");
62
+ continue;
63
+ }
64
+ parts.push(part);
65
+ }
66
+ const joined = parts.join("/");
67
+ return absolute ? `/${joined}` : joined || ".";
68
+ }
69
+ function resolvePosix(base, value) {
70
+ return normalizePosixPath(value.startsWith("/") ? value : `${base.replace(/\/+$/u, "")}/${value}`);
71
+ }
72
+ /** Each store env or `--flag` value must resolve to exactly HOME/<declared path>. */
73
+ function assertStoreLocationHonoursSessionContract(harness, contract, input) {
74
+ const home = normalizePosixPath(input.runtimeHome);
75
+ const violations = [];
76
+ for (const [name, declared] of Object.entries(contract.storeEnv)) {
77
+ const expected = resolvePosix(home, declared);
78
+ const values = [];
79
+ if (name.startsWith("--")) {
80
+ const argv = input.argv ?? [];
81
+ for (let index = 0; index < argv.length; index++) {
82
+ const token = argv[index];
83
+ if (token === name && index + 1 < argv.length) values.push(argv[index + 1]);
84
+ else if (token.startsWith(`${name}=`)) values.push(token.slice(name.length + 1));
85
+ }
86
+ } else {
87
+ const value = input.env?.[name];
88
+ if (value !== void 0 && value !== "") values.push(value);
89
+ }
90
+ for (const value of values) if (resolvePosix(input.cwd, value) !== expected) violations.push(`${name}=${value} (declared ${expected})`);
91
+ }
92
+ if (violations.length > 0) throw new HarnessSessionContractError("harness_session_persistence_disabled", `${harness} moves its native session store outside the declared location: ${violations.join("; ")}`);
93
+ }
94
+ function escapeRegExp(text) {
95
+ return text.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
96
+ }
97
+ /** `**` is any number of segments, `*` is one segment, `{id}` is the session id. */
98
+ function compileSessionStoreGlob(glob, nativeSessionId) {
99
+ const pattern = glob.replace(/\*\*\/|\*\*|\{id\}|\*|[\s\S]/gu, (token) => {
100
+ if (token === "{id}") return nativeSessionId === void 0 ? "[^/]+" : escapeRegExp(nativeSessionId);
101
+ if (token.startsWith("**")) return token === "**/" ? "(?:[^/]+/)*" : ".*";
102
+ return token === "*" ? "[^/]*" : escapeRegExp(token);
103
+ });
104
+ return new RegExp(`^${pattern}$`, "u");
105
+ }
106
+ /** The store that holds `pathFromHome`, or undefined. A shared store matches every session. */
107
+ function sessionStoreForPath(contract, pathFromHome, nativeSessionId) {
108
+ const path = normalizePosixPath(pathFromHome);
109
+ for (const store of contract.stores) {
110
+ const root = normalizePosixPath(store.root);
111
+ if (!path.startsWith(`${root}/`)) continue;
112
+ const rest = path.slice(root.length + 1);
113
+ const id = store.shared ? void 0 : nativeSessionId;
114
+ if (store.files.some((glob) => compileSessionStoreGlob(glob, id).test(rest))) return store;
115
+ }
116
+ }
117
+ /** Structural checks every declared contract must pass. */
118
+ function sessionContractProblems(contract) {
119
+ const problems = [];
120
+ if (contract.version !== 1) problems.push("version must be 1");
121
+ if (!contract.cliVersion.trim()) problems.push("cliVersion is empty");
122
+ for (const store of contract.stores) {
123
+ const root = normalizePosixPath(store.root);
124
+ if (store.root.startsWith("/") || root.startsWith("..") || root === ".") problems.push(`store root ${store.root} is not a relative path under HOME`);
125
+ if (root !== store.root) problems.push(`store root ${store.root} is not normalized`);
126
+ if (!SESSION_FORMAT_IDS.includes(store.format)) problems.push(`store format ${store.format} is unknown`);
127
+ if (store.files.length === 0) problems.push(`store ${store.root} declares no files`);
128
+ if (!store.shared && !store.files.every((glob) => glob.includes("{id}"))) problems.push(`store ${store.root} is per-session but a glob lacks {id}`);
129
+ }
130
+ if (contract.identity.kind === "pre-minted" && !contract.identity.args.some((token) => token.includes("{id}"))) problems.push("pre-minted identity args lack {id}");
131
+ if (contract.resume.kind === "args" && !contract.resume.args.some((token) => token.includes("{id}"))) problems.push("resume args lack {id}");
132
+ if (contract.identity.kind === "first-event" && !(contract.identity.deadlineMs > 0)) problems.push("first-event identity needs a positive deadline");
133
+ for (const [name, declared] of Object.entries(contract.storeEnv)) {
134
+ const normalized = normalizePosixPath(declared);
135
+ if (declared.startsWith("/") || normalized.startsWith("..")) problems.push(`storeEnv ${name} must name a path under HOME`);
136
+ }
137
+ return problems;
138
+ }
139
+ //#endregion
140
+ export { HarnessSessionContractError, SESSION_FORMAT_IDS, assertArgvHonoursSessionContract, assertFlagsHonourSessionContract, assertStoreLocationHonoursSessionContract, compileSessionStoreGlob, forbiddenArgViolations, normalizePosixPath, sessionContractProblems, sessionStoreForPath, substituteNativeSessionId };
141
+
142
+ //# sourceMappingURL=session-contract.mjs.map