@squadrules/mcp 5.15.1 → 5.17.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/.tsbuildinfo +1 -1
- package/dist/embed-docs/mem/adapter-migration.md +1 -1
- package/dist/embed-docs/mem/author-adapter.md +1 -1
- package/dist/embed-docs/mem/bulk-insert-adapters-via-cli.md +1 -1
- package/dist/embed-docs/mem/challenge-type-guide.md +8 -7
- package/dist/embed-docs/mem/critic-loop-guide.md +1 -1
- package/dist/embed-docs/mem/critic-loop.md +1 -1
- package/dist/embed-docs/mem/protocol-linking-guide.md +1 -1
- package/dist/embed-docs/mem/refine-search.md +1 -1
- package/dist/resources/embedded-mcp-resources.js +11 -11
- package/dist/resources/embedded-mcp-resources.js.map +1 -1
- package/dist/runtime-lock.json +2 -2
- package/dist/tools/activate-artifacts.d.ts +7 -0
- package/dist/tools/activate-artifacts.d.ts.map +1 -1
- package/dist/tools/activate-artifacts.js +97 -28
- package/dist/tools/activate-artifacts.js.map +1 -1
- package/dist/tools/activate_schema.d.ts +4 -12
- package/dist/tools/activate_schema.d.ts.map +1 -1
- package/dist/tools/activate_schema.js +9 -16
- package/dist/tools/activate_schema.js.map +1 -1
- package/dist/tools/artifact-local-cache-support.d.ts +62 -0
- package/dist/tools/artifact-local-cache-support.d.ts.map +1 -0
- package/dist/tools/artifact-local-cache-support.js +61 -0
- package/dist/tools/artifact-local-cache-support.js.map +1 -0
- package/dist/tools/artifact-local-cache.d.ts +55 -0
- package/dist/tools/artifact-local-cache.d.ts.map +1 -0
- package/dist/tools/artifact-local-cache.js +315 -0
- package/dist/tools/artifact-local-cache.js.map +1 -0
- package/dist/tools/artifact-materialize-command.d.ts +27 -21
- package/dist/tools/artifact-materialize-command.d.ts.map +1 -1
- package/dist/tools/artifact-materialize-command.js +72 -21
- package/dist/tools/artifact-materialize-command.js.map +1 -1
- package/dist/tools/artifact-relative-path.d.ts +16 -0
- package/dist/tools/artifact-relative-path.d.ts.map +1 -1
- package/dist/tools/artifact-relative-path.js +51 -0
- package/dist/tools/artifact-relative-path.js.map +1 -1
- package/dist/tools/export_schema.d.ts +5 -5
- package/dist/tools/shell-failure-diagnostics.d.ts.map +1 -1
- package/dist/tools/shell-failure-diagnostics.js +3 -2
- package/dist/tools/shell-failure-diagnostics.js.map +1 -1
- package/dist/tools/tool-registry.d.ts +7 -15
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/ui/assets/{AccountPage-BZHN4fr7.js → AccountPage-DiHQo_GL.js} +1 -1
- package/dist/ui/assets/{index-Cqev6gXs.js → index-DplB4svU.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-mcp-resources.js","sourceRoot":"","sources":["../../src/resources/embedded-mcp-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,EAAE;IACf,OAAO,EAAE;QACP,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"embedded-mcp-resources.js","sourceRoot":"","sources":["../../src/resources/embedded-mcp-resources.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squadrules/mcp",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.17.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@squadrules/mcp",
|
|
9
|
-
"version": "5.
|
|
9
|
+
"version": "5.17.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@exodus/bytes": "^1.16.0",
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
* A choice that ships scripts must tell the agent how to obtain them, and a
|
|
5
5
|
* failed lookup must never look like "this adapter has no artifacts" — the
|
|
6
6
|
* caller would then run a script path it can never obtain (SquadRules/mcp#216).
|
|
7
|
+
*
|
|
8
|
+
* Materialization is transport-neutral (ADR 0040): every artifact is fetched by a
|
|
9
|
+
* `curl`-to-staging command from a source URL. On stdio the running server writes
|
|
10
|
+
* the verified bytes to its private local cache and hands back a `file://` URL; on
|
|
11
|
+
* HTTP it mints a short-lived capability URL. Destination paths are validated and
|
|
12
|
+
* checked for collisions *before* any cache write or capability mint, so an unsafe
|
|
13
|
+
* path or a collision fails the whole load without leaving side effects behind.
|
|
7
14
|
*/
|
|
8
15
|
import type { MemoryQdrantStore } from '../services/memory/store.js';
|
|
9
16
|
import type { QdrantService } from '../services/qdrant/service.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate-artifacts.d.ts","sourceRoot":"","sources":["../../src/tools/activate-artifacts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"activate-artifacts.d.ts","sourceRoot":"","sources":["../../src/tools/activate-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AASnE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,mCAAmC,EAAE,sBAAsB,CAAC;CACjF;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gGAAgG;IAChG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAyGD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,qBAAqB,CAAC,CA0ChC"}
|
|
@@ -2,51 +2,120 @@ import { structuredLogger } from '../utils/structured-logger.js';
|
|
|
2
2
|
import { listAdapterArtifacts } from './artifact-catalog.js';
|
|
3
3
|
import { mintExportArtifactDownloadCapability } from '../services/export-artifact-download-capability.js';
|
|
4
4
|
import { resolveExportAdapter } from './export-resolve-adapter.js';
|
|
5
|
-
import {
|
|
5
|
+
import { normalizeMaterializeRelativePath, sanitizeArtifactFileName } from './artifact-relative-path.js';
|
|
6
6
|
import { buildArtifactMaterializeInstruction } from './artifact-materialize-command.js';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { getArtifactLocalCache } from './artifact-local-cache.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the destination path for one artifact. An explicit `relative_path` that
|
|
10
|
+
* fails validation fails the load — it is never silently replaced with a default.
|
|
11
|
+
* Only an absent path is synthesized as `artifacts/<safe filename>`, and the
|
|
12
|
+
* synthesized value passes through the same validator before it is used.
|
|
13
|
+
*/
|
|
14
|
+
function resolveMaterializePath(artifact) {
|
|
15
|
+
const stored = artifact.relative_path?.trim() ?? '';
|
|
16
|
+
if (stored.length > 0) {
|
|
17
|
+
const normalized = normalizeMaterializeRelativePath(stored);
|
|
18
|
+
if (normalized === null) {
|
|
19
|
+
throw new Error(`artifact ${artifact.artifact_uuid} ("${artifact.name}") has an unsafe relative_path ` +
|
|
20
|
+
`${JSON.stringify(artifact.relative_path)}; refusing to materialize it — ` +
|
|
21
|
+
're-train the artifact with a safe skill-root-relative path');
|
|
22
|
+
}
|
|
23
|
+
return normalized;
|
|
24
|
+
}
|
|
25
|
+
const safeName = sanitizeArtifactFileName(artifact.name);
|
|
26
|
+
if (safeName === null) {
|
|
27
|
+
throw new Error(`artifact ${artifact.artifact_uuid} has no relative_path and its name ${JSON.stringify(artifact.name)} ` +
|
|
28
|
+
'cannot be reduced to a safe filename; refusing to materialize it');
|
|
29
|
+
}
|
|
30
|
+
const synthesized = normalizeMaterializeRelativePath(`artifacts/${safeName}`);
|
|
31
|
+
if (synthesized === null) {
|
|
32
|
+
throw new Error(`artifact ${artifact.artifact_uuid} synthesized an unsafe destination path from its name; refusing to materialize it`);
|
|
33
|
+
}
|
|
34
|
+
return synthesized;
|
|
35
|
+
}
|
|
36
|
+
/** Case-folded, Unicode-normalized key so filesystem aliases count as one destination. */
|
|
37
|
+
function collisionKey(relativePath) {
|
|
38
|
+
return relativePath.normalize('NFC').toLowerCase();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Fail the whole load when two distinct artifact UUIDs target the same canonical
|
|
42
|
+
* destination. UUID + SHA source identity does not resolve a destination collision
|
|
43
|
+
* and there is no safe last writer, so this rejects rather than picks one — even
|
|
44
|
+
* when the two digests match, and even for Unicode/case aliases of the same path.
|
|
45
|
+
*/
|
|
46
|
+
function assertNoDestinationCollisions(resolved) {
|
|
47
|
+
const seen = new Map();
|
|
48
|
+
for (const { artifact, relativePath } of resolved) {
|
|
49
|
+
const key = collisionKey(relativePath);
|
|
50
|
+
const priorUuid = seen.get(key);
|
|
51
|
+
if (priorUuid !== undefined && priorUuid !== artifact.artifact_uuid) {
|
|
52
|
+
throw new Error(`two linked artifacts target the same destination path ${JSON.stringify(relativePath)}: ` +
|
|
53
|
+
`${priorUuid} and ${artifact.artifact_uuid}; refusing to pick a last writer ` +
|
|
54
|
+
'(give them distinct relative_path values and re-train)');
|
|
55
|
+
}
|
|
56
|
+
seen.set(key, artifact.artifact_uuid);
|
|
57
|
+
}
|
|
9
58
|
}
|
|
10
|
-
|
|
11
|
-
|
|
59
|
+
/** stdio: publish the whole verified batch to this process's local cache; return `file://` URLs by UUID. */
|
|
60
|
+
async function publishStdioCacheUrls(resolved) {
|
|
61
|
+
const published = await getArtifactLocalCache().publishBatch(resolved.map(({ artifact, relativePath }) => ({
|
|
62
|
+
artifactUuid: artifact.artifact_uuid,
|
|
63
|
+
sha256: artifact.sha256,
|
|
64
|
+
text: artifact.text,
|
|
65
|
+
relativePath,
|
|
66
|
+
contentType: artifact.content_type
|
|
67
|
+
})));
|
|
68
|
+
const urls = new Map();
|
|
69
|
+
for (const [uuid, cached] of published) {
|
|
70
|
+
urls.set(uuid, cached.url);
|
|
71
|
+
}
|
|
72
|
+
return urls;
|
|
73
|
+
}
|
|
74
|
+
/** HTTP: mint a short-lived capability URL per artifact; return the URLs by UUID. */
|
|
75
|
+
async function mintHttpCapabilityUrls(resolved) {
|
|
76
|
+
const minted = await Promise.all(resolved.map(async ({ artifact, relativePath }) => {
|
|
77
|
+
const capability = await mintExportArtifactDownloadCapability({
|
|
78
|
+
artifactUuid: artifact.artifact_uuid,
|
|
79
|
+
filename: artifact.name,
|
|
80
|
+
contentType: artifact.content_type,
|
|
81
|
+
sha256: artifact.sha256,
|
|
82
|
+
relativePath
|
|
83
|
+
});
|
|
84
|
+
return [artifact.artifact_uuid, capability.url];
|
|
85
|
+
}));
|
|
86
|
+
return new Map(minted);
|
|
12
87
|
}
|
|
13
88
|
export async function loadLinkedArtifacts(memoryStore, qdrantService, adapterUri, isStdio) {
|
|
14
89
|
try {
|
|
15
90
|
const { adapterId } = await resolveExportAdapter(memoryStore, qdrantService, adapterUri);
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// stdio transport: no HTTP listener available, so there is nothing to
|
|
31
|
-
// download and `download_url` carries the artifact URI instead. The bytes
|
|
32
|
-
// then arrive through the `export` tool as base64.
|
|
33
|
-
const downloadUrl = isStdio ? artifactUri : capability.url;
|
|
91
|
+
const artifacts = await listAdapterArtifacts(memoryStore, adapterId);
|
|
92
|
+
// Preflight before any side effect: resolve + validate every destination and
|
|
93
|
+
// reject collisions, so a bad path or a clash leaves no cache write or mint.
|
|
94
|
+
const resolved = artifacts.map((artifact) => ({
|
|
95
|
+
artifact,
|
|
96
|
+
relativePath: resolveMaterializePath(artifact)
|
|
97
|
+
}));
|
|
98
|
+
assertNoDestinationCollisions(resolved);
|
|
99
|
+
const urlByUuid = isStdio ? await publishStdioCacheUrls(resolved) : await mintHttpCapabilityUrls(resolved);
|
|
100
|
+
const linkedArtifacts = resolved.map(({ artifact, relativePath }) => {
|
|
101
|
+
const url = urlByUuid.get(artifact.artifact_uuid);
|
|
102
|
+
if (url === undefined) {
|
|
103
|
+
throw new Error(`no materialize URL was prepared for artifact ${artifact.artifact_uuid}`);
|
|
104
|
+
}
|
|
34
105
|
return {
|
|
35
106
|
slug: artifact.slug,
|
|
36
107
|
filename: artifact.name,
|
|
37
108
|
relative_path: relativePath,
|
|
38
|
-
download_url:
|
|
109
|
+
download_url: url,
|
|
39
110
|
sha256: artifact.sha256,
|
|
40
111
|
content_type: artifact.content_type,
|
|
41
112
|
materialize: buildArtifactMaterializeInstruction({
|
|
42
|
-
|
|
43
|
-
artifactUri,
|
|
44
|
-
downloadUrl,
|
|
113
|
+
url,
|
|
45
114
|
relativePath,
|
|
46
115
|
sha256: artifact.sha256
|
|
47
116
|
})
|
|
48
117
|
};
|
|
49
|
-
})
|
|
118
|
+
});
|
|
50
119
|
return { linkedArtifacts, artifactLoadError: null };
|
|
51
120
|
}
|
|
52
121
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate-artifacts.js","sourceRoot":"","sources":["../../src/tools/activate-artifacts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activate-artifacts.js","sourceRoot":"","sources":["../../src/tools/activate-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,12 +53,8 @@ export declare const activateOutputSchema: z.ZodObject<{
|
|
|
53
53
|
sha256: z.ZodString;
|
|
54
54
|
content_type: z.ZodString;
|
|
55
55
|
materialize: z.ZodObject<{
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
uri: z.ZodString;
|
|
59
|
-
format: z.ZodLiteral<"source">;
|
|
60
|
-
delivery: z.ZodOptional<z.ZodLiteral<"inline_base64">>;
|
|
61
|
-
}, z.core.$strict>;
|
|
56
|
+
method: z.ZodLiteral<"url">;
|
|
57
|
+
url: z.ZodString;
|
|
62
58
|
out: z.ZodString;
|
|
63
59
|
sha256: z.ZodString;
|
|
64
60
|
chmod: z.ZodLiteral<"700">;
|
|
@@ -97,12 +93,8 @@ export declare const activateOutputSchema: z.ZodObject<{
|
|
|
97
93
|
sha256: z.ZodString;
|
|
98
94
|
content_type: z.ZodString;
|
|
99
95
|
materialize: z.ZodObject<{
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
uri: z.ZodString;
|
|
103
|
-
format: z.ZodLiteral<"source">;
|
|
104
|
-
delivery: z.ZodOptional<z.ZodLiteral<"inline_base64">>;
|
|
105
|
-
}, z.core.$strict>;
|
|
96
|
+
method: z.ZodLiteral<"url">;
|
|
97
|
+
url: z.ZodString;
|
|
106
98
|
out: z.ZodString;
|
|
107
99
|
sha256: z.ZodString;
|
|
108
100
|
chmod: z.ZodLiteral<"700">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate_schema.d.ts","sourceRoot":"","sources":["../../src/tools/activate_schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"activate_schema.d.ts","sourceRoot":"","sources":["../../src/tools/activate_schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoFxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;iBAoB9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2BtB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -18,23 +18,16 @@ const executionIdSchema = z
|
|
|
18
18
|
.regex(/^[0-9a-f-]{36}$/i, 'must be a UUID');
|
|
19
19
|
const materializeInstructionSchema = z
|
|
20
20
|
.object({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
format: z.literal('source').describe('Export format for artifact content'),
|
|
26
|
-
delivery: z
|
|
27
|
-
.literal('inline_base64')
|
|
28
|
-
.optional()
|
|
29
|
-
.describe('Set on stdio transport: base64 so the bytes survive the write')
|
|
30
|
-
})
|
|
31
|
-
.strict(),
|
|
21
|
+
method: z.literal('url').describe('Always `url`: `cmd` downloads the bytes from `url` on every transport'),
|
|
22
|
+
url: z
|
|
23
|
+
.string()
|
|
24
|
+
.describe('Source URL `cmd` downloads: a file:// cache path on stdio, an http(s) capability URL on HTTP'),
|
|
32
25
|
out: z.string().describe('Path where the bytes land (uses $SQUADRULES_LOCAL_ARTIFACT_DIR)'),
|
|
33
26
|
sha256: z.string().describe('SHA-256 hex of the artifact bytes; `cmd` verifies it'),
|
|
34
|
-
chmod: z.literal('700').describe('File permissions the
|
|
27
|
+
chmod: z.literal('700').describe('File permissions `cmd` sets on the verified bytes before publishing'),
|
|
35
28
|
cmd: z
|
|
36
29
|
.string()
|
|
37
|
-
.describe('Exact POSIX shell line that
|
|
30
|
+
.describe('Exact POSIX shell line that downloads, verifies the digest, chmods, and atomically publishes. Run it verbatim.')
|
|
38
31
|
})
|
|
39
32
|
.strict();
|
|
40
33
|
const linkedArtifactSchema = z
|
|
@@ -42,10 +35,10 @@ const linkedArtifactSchema = z
|
|
|
42
35
|
slug: z.string(),
|
|
43
36
|
filename: z.string(),
|
|
44
37
|
relative_path: z.string().nullable(),
|
|
45
|
-
download_url: z.string(),
|
|
38
|
+
download_url: z.string().describe('Source URL for the artifact bytes: a file:// cache path on stdio, a short-lived capability URL on HTTP. Prefer running materialize.cmd over fetching it yourself.'),
|
|
46
39
|
sha256: z.string(),
|
|
47
40
|
content_type: z.string(),
|
|
48
|
-
materialize: materializeInstructionSchema.describe('Run `cmd` verbatim to materialize the artifact
|
|
41
|
+
materialize: materializeInstructionSchema.describe('Run `cmd` verbatim to materialize the artifact: it curls `url`, verifies the sha256 digest, and publishes atomically — no export call and no $B64')
|
|
49
42
|
})
|
|
50
43
|
.strict();
|
|
51
44
|
const activateChoiceCommonSchema = z.object({
|
|
@@ -121,6 +114,6 @@ export const activateOutputSchema = z.object({
|
|
|
121
114
|
* challenges. The server never resolves these to a path on its own filesystem.
|
|
122
115
|
*/
|
|
123
116
|
squadrules_local_artifact_dir: z.array(z.string()).optional(),
|
|
124
|
-
transport: z.enum(['stdio', 'http']).optional().describe('MCP transport mode. When "stdio", no HTTP listener is available;
|
|
117
|
+
transport: z.enum(['stdio', 'http']).optional().describe('MCP transport mode. When "stdio", no HTTP listener is available; linked-artifact materialize URLs are file:// paths from the server\'s local cache, and materialize.cmd curls them like any other URL.')
|
|
125
118
|
}).strict();
|
|
126
119
|
//# sourceMappingURL=activate_schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activate_schema.js","sourceRoot":"","sources":["../../src/tools/activate_schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAExF,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,KAAK,CACJ,4EAA4E,EAC5E,wCAAwC,CACzC,CAAC;AACJ,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CACJ,4EAA4E,EAC5E,wCAAwC,CACzC,CAAC;AACJ,MAAM,sBAAsB,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,GAAG,EAAE,oBAAoB;IACzB,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,KAAK,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAC/C,MAAM,4BAA4B,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,
|
|
1
|
+
{"version":3,"file":"activate_schema.js","sourceRoot":"","sources":["../../src/tools/activate_schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare const UUID_RE: RegExp;
|
|
2
|
+
export declare const SHA256_RE: RegExp;
|
|
3
|
+
export declare const NAMESPACE_PREFIX = "sqns-";
|
|
4
|
+
export declare const LEASE_SUFFIX = ".lease";
|
|
5
|
+
export declare const DEFAULT_MAX_ENTRIES = 256;
|
|
6
|
+
export declare const DEFAULT_MAX_BYTES: number;
|
|
7
|
+
export declare const DEFAULT_ORPHAN_GRACE_SEC = 3600;
|
|
8
|
+
export declare const MAINTENANCE_INTERVAL_MS = 60000;
|
|
9
|
+
export declare function envInt(key: string, fallback: number): number;
|
|
10
|
+
export declare function ownerUid(): number | undefined;
|
|
11
|
+
export declare function defaultRootDir(): string;
|
|
12
|
+
/** A shell-safe, path-safe file extension derived from the artifact path or type. */
|
|
13
|
+
export declare function extensionFor(relativePath: string | null, contentType: string): string;
|
|
14
|
+
/** A PID is treated as live unless the OS reports it definitively gone (ESRCH). */
|
|
15
|
+
export declare function processMayBeAlive(pid: number): boolean;
|
|
16
|
+
export declare class ArtifactCacheError extends Error {
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
19
|
+
/** The stored bytes do not hash to the stored digest; the load must fail closed. */
|
|
20
|
+
export declare class ArtifactCacheDigestError extends ArtifactCacheError {
|
|
21
|
+
}
|
|
22
|
+
/** The batch cannot be admitted without evicting a still-leased entry. */
|
|
23
|
+
export declare class ArtifactCacheQuotaError extends ArtifactCacheError {
|
|
24
|
+
}
|
|
25
|
+
export interface CacheArtifactInput {
|
|
26
|
+
artifactUuid: string;
|
|
27
|
+
sha256: string;
|
|
28
|
+
/** Authoritative UTF-8 bytes; `sha256` is the digest over exactly these. */
|
|
29
|
+
text: string;
|
|
30
|
+
relativePath: string | null;
|
|
31
|
+
contentType: string;
|
|
32
|
+
}
|
|
33
|
+
export interface CachedArtifact {
|
|
34
|
+
/** Absolute `file://` URL the materialize command curls. */
|
|
35
|
+
url: string;
|
|
36
|
+
/** Absolute path of the published file inside this process's namespace. */
|
|
37
|
+
path: string;
|
|
38
|
+
bytes: number;
|
|
39
|
+
}
|
|
40
|
+
export interface ArtifactLocalCacheOptions {
|
|
41
|
+
rootDir?: string;
|
|
42
|
+
ttlSec?: number;
|
|
43
|
+
maxEntries?: number;
|
|
44
|
+
maxBytes?: number;
|
|
45
|
+
orphanGraceSec?: number;
|
|
46
|
+
now?: () => number;
|
|
47
|
+
}
|
|
48
|
+
export interface PreparedArtifact {
|
|
49
|
+
uuid: string;
|
|
50
|
+
name: string;
|
|
51
|
+
buf: Buffer;
|
|
52
|
+
bytes: number;
|
|
53
|
+
}
|
|
54
|
+
export interface LeaseRecord {
|
|
55
|
+
v: 1;
|
|
56
|
+
name: string;
|
|
57
|
+
bytes: number;
|
|
58
|
+
createdSec: number;
|
|
59
|
+
lastIssuedSec: number;
|
|
60
|
+
expiresSec: number;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=artifact-local-cache-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-local-cache-support.d.ts","sourceRoot":"","sources":["../../src/tools/artifact-local-cache-support.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,QAAoE,CAAC;AACzF,eAAO,MAAM,SAAS,QAAoB,CAAC;AAC3C,eAAO,MAAM,gBAAgB,UAAU,CAAC;AACxC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAClD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,oFAAoF;AACpF,qBAAa,wBAAyB,SAAQ,kBAAkB;CAAG;AAEnE,0EAA0E;AAC1E,qBAAa,uBAAwB,SAAQ,kBAAkB;CAAG;AAElE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Support for the STDIO local artifact cache (ADR 0040): identity and path
|
|
3
|
+
* helpers, tunable quotas, lease records, and the fail-closed error types. Kept
|
|
4
|
+
* separate from `artifact-local-cache.ts` so the cache class stays within the
|
|
5
|
+
* file-size gate. Nothing here touches the filesystem.
|
|
6
|
+
*/
|
|
7
|
+
import os from 'node:os';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
export const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
10
|
+
export const SHA256_RE = /^[a-f0-9]{64}$/i;
|
|
11
|
+
export const NAMESPACE_PREFIX = 'sqns-';
|
|
12
|
+
export const LEASE_SUFFIX = '.lease';
|
|
13
|
+
export const DEFAULT_MAX_ENTRIES = 256;
|
|
14
|
+
export const DEFAULT_MAX_BYTES = 64 * 1024 * 1024;
|
|
15
|
+
export const DEFAULT_ORPHAN_GRACE_SEC = 3600;
|
|
16
|
+
export const MAINTENANCE_INTERVAL_MS = 60_000;
|
|
17
|
+
export function envInt(key, fallback) {
|
|
18
|
+
const raw = process.env[key];
|
|
19
|
+
if (raw === undefined || raw.trim() === '')
|
|
20
|
+
return fallback;
|
|
21
|
+
const parsed = Number.parseInt(raw.trim(), 10);
|
|
22
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
23
|
+
}
|
|
24
|
+
export function ownerUid() {
|
|
25
|
+
return typeof process.getuid === 'function' ? process.getuid() : undefined;
|
|
26
|
+
}
|
|
27
|
+
export function defaultRootDir() {
|
|
28
|
+
const uid = ownerUid();
|
|
29
|
+
return path.join(os.tmpdir(), `squadrules-artifact-cache-${uid === undefined ? 'na' : String(uid)}`);
|
|
30
|
+
}
|
|
31
|
+
/** A shell-safe, path-safe file extension derived from the artifact path or type. */
|
|
32
|
+
export function extensionFor(relativePath, contentType) {
|
|
33
|
+
const fromPath = relativePath ? path.extname(relativePath).replace(/^\./, '') : '';
|
|
34
|
+
const subtype = contentType.split('/')[1] ?? '';
|
|
35
|
+
const candidate = fromPath || subtype.replace(/^x-/, '');
|
|
36
|
+
const sanitized = candidate.replace(/[^A-Za-z0-9]/g, '').slice(0, 8);
|
|
37
|
+
return sanitized.length > 0 ? sanitized : 'bin';
|
|
38
|
+
}
|
|
39
|
+
/** A PID is treated as live unless the OS reports it definitively gone (ESRCH). */
|
|
40
|
+
export function processMayBeAlive(pid) {
|
|
41
|
+
try {
|
|
42
|
+
process.kill(pid, 0);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return err.code !== 'ESRCH';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class ArtifactCacheError extends Error {
|
|
50
|
+
constructor(message) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'ArtifactCacheError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** The stored bytes do not hash to the stored digest; the load must fail closed. */
|
|
56
|
+
export class ArtifactCacheDigestError extends ArtifactCacheError {
|
|
57
|
+
}
|
|
58
|
+
/** The batch cannot be admitted without evicting a still-leased entry. */
|
|
59
|
+
export class ArtifactCacheQuotaError extends ArtifactCacheError {
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=artifact-local-cache-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-local-cache-support.js","sourceRoot":"","sources":["../../src/tools/artifact-local-cache-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ArtifactCacheDigestError, ArtifactCacheError, ArtifactCacheQuotaError, type ArtifactLocalCacheOptions, type CacheArtifactInput, type CachedArtifact } from './artifact-local-cache-support.js';
|
|
2
|
+
export { ArtifactCacheDigestError, ArtifactCacheError, ArtifactCacheQuotaError };
|
|
3
|
+
export type { ArtifactLocalCacheOptions, CacheArtifactInput, CachedArtifact };
|
|
4
|
+
export declare class ArtifactLocalCache {
|
|
5
|
+
private readonly rootDir;
|
|
6
|
+
private readonly ttlSec;
|
|
7
|
+
private readonly maxEntries;
|
|
8
|
+
private readonly maxBytes;
|
|
9
|
+
private readonly orphanGraceSec;
|
|
10
|
+
private readonly now;
|
|
11
|
+
private namespace;
|
|
12
|
+
private lock;
|
|
13
|
+
private maintenance;
|
|
14
|
+
constructor(options?: ArtifactLocalCacheOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Verify and publish a whole activation batch, or fail it entirely. Digest
|
|
17
|
+
* verification and quota preflight run before any write, so a bad artifact or
|
|
18
|
+
* an over-quota batch never leaves a partially usable cache behind.
|
|
19
|
+
*/
|
|
20
|
+
publishBatch(entries: readonly CacheArtifactInput[]): Promise<Map<string, CachedArtifact>>;
|
|
21
|
+
/** Remove entries whose lease has expired. Returns the number pruned. */
|
|
22
|
+
pruneExpired(): Promise<number>;
|
|
23
|
+
/**
|
|
24
|
+
* Scavenge namespaces whose owner PID is dead, whose newest lease has expired,
|
|
25
|
+
* and whose grace period has passed. Never touches a live process's namespace,
|
|
26
|
+
* including this one; ambiguous liveness is treated as live.
|
|
27
|
+
*/
|
|
28
|
+
scavengeOrphans(): Promise<number>;
|
|
29
|
+
startPeriodicMaintenance(intervalMs?: number): void;
|
|
30
|
+
stopPeriodicMaintenance(): void;
|
|
31
|
+
private runMaintenance;
|
|
32
|
+
private prepare;
|
|
33
|
+
private preflightQuota;
|
|
34
|
+
private publishOne;
|
|
35
|
+
/**
|
|
36
|
+
* True only when `finalPath` is an existing regular file whose bytes match the
|
|
37
|
+
* digest. The path is resolved exactly once: it is opened read-only with
|
|
38
|
+
* `O_NOFOLLOW` (so a symlink fails the open with `ELOOP` instead of being
|
|
39
|
+
* followed), and both the type check and the read run through that single
|
|
40
|
+
* descriptor. Operating on the opened fd instead of re-resolving the path after
|
|
41
|
+
* a stat removes the check-then-read race on `finalPath`.
|
|
42
|
+
*/
|
|
43
|
+
private matchesDigest;
|
|
44
|
+
private ensureNamespace;
|
|
45
|
+
private ensureRoot;
|
|
46
|
+
private writeFileAtomic;
|
|
47
|
+
private readLease;
|
|
48
|
+
private listLeases;
|
|
49
|
+
private pruneExpiredIn;
|
|
50
|
+
private newestLeaseExpiry;
|
|
51
|
+
private withLock;
|
|
52
|
+
}
|
|
53
|
+
/** The process-wide stdio cache; created on first use with periodic maintenance. */
|
|
54
|
+
export declare function getArtifactLocalCache(): ArtifactLocalCache;
|
|
55
|
+
//# sourceMappingURL=artifact-local-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-local-cache.d.ts","sourceRoot":"","sources":["../../src/tools/artifact-local-cache.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EAcvB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAGpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;AACjF,YAAY,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC;AAU9E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,WAAW,CAA+C;gBAEtD,OAAO,GAAE,yBAA8B;IAUnD;;;;OAIG;IACG,YAAY,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAehG,yEAAyE;IACnE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAOrC;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAqBxC,wBAAwB,CAAC,UAAU,SAA0B,GAAG,IAAI;IASpE,uBAAuB,IAAI,IAAI;YAOjB,cAAc;IAS5B,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,cAAc;YAuBR,UAAU;IAkBxB;;;;;;;OAOG;YACW,aAAa;YAiBb,eAAe;YAUf,UAAU;YAYV,eAAe;YAaf,SAAS;YAST,UAAU;YAgBV,cAAc;YAYd,iBAAiB;YAQjB,QAAQ;CAQvB;AAID,oFAAoF;AACpF,wBAAgB,qBAAqB,IAAI,kBAAkB,CAM1D"}
|