@galaxy-stack/ai-coder-core 0.3.0-alpha.9 → 0.3.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/CHANGELOG.d/2026-09-19-advisory-guard-policy.md +1 -1
- package/CHANGELOG.d/2026-09-26-binary-review-pipe-guidance-finalization-test.md +14 -0
- package/CHANGELOG.d/2026-09-26-cache-capability-and-mcp-reconnect.md +16 -0
- package/CHANGELOG.d/2026-09-26-cache-hit-harness.md +13 -0
- package/CHANGELOG.d/2026-09-26-cache-hit-rate-and-inhistory-option.md +12 -0
- package/CHANGELOG.d/2026-09-26-cumulative-cache-hit.md +13 -0
- package/CHANGELOG.d/2026-09-26-finalization-prefix-and-verified-inhistory.md +12 -0
- package/CHANGELOG.d/2026-09-26-generated-state-and-churn-guard.md +16 -0
- package/CHANGELOG.d/2026-09-26-mcp-reconnect-fixture.md +11 -0
- package/CHANGELOG.d/2026-09-26-memory-hybrid-semantic-consolidation.md +16 -0
- package/CHANGELOG.d/2026-09-26-memory-recall-benchmark.md +12 -0
- package/CHANGELOG.d/2026-09-26-ollama-cache-usage.md +14 -0
- package/CHANGELOG.d/2026-09-26-ollama-embeddings-provider.md +13 -0
- package/CHANGELOG.d/2026-09-26-rerecord-live-fixture.md +6 -0
- package/CHANGELOG.d/2026-09-26-skill-index-signing.md +11 -0
- package/CHANGELOG.d/2026-09-26-skill-version-and-marketplace.md +14 -0
- package/CHANGELOG.d/2026-09-27-workspace-derived-build-output.md +16 -0
- package/CHANGELOG.d/2026-09-28-advisory-lenh-check-va-server.md +26 -0
- package/CHANGELOG.d/2026-09-28-clamp-tham-so-vuot-cap.md +20 -0
- package/CHANGELOG.d/2026-09-28-digest-context-item.md +16 -0
- package/CHANGELOG.d/2026-09-28-gate-bo-qua-path-da-xoa.md +20 -0
- package/CHANGELOG.d/2026-09-28-ngan-sach-luot-finalization.md +20 -0
- package/CHANGELOG.d/2026-09-28-scope-cua-project-validate.md +22 -0
- package/CHANGELOG.d/2026-09-28-staleness-theo-pham-vi.md +22 -0
- package/CHANGELOG.d/2026-09-28-thong-bao-guard-dependency.md +24 -0
- package/CHANGELOG.d/2026-09-28-thu-tu-mandatory-state-cache.md +20 -0
- package/CHANGELOG.md +71 -1
- package/README.md +10 -10
- package/dist/adapters/node/config/manual-provider-config.d.ts +3 -0
- package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -1
- package/dist/adapters/node/config/manual-provider-config.js +4 -0
- package/dist/adapters/node/config/manual-provider-config.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-evidence-verifier.js +8 -13
- package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-port.d.ts +1 -1
- package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-port.js +47 -4
- package/dist/adapters/node/host/node-workspace-port.js.map +1 -1
- package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -1
- package/dist/adapters/node/host/node-workspace-snapshot.js +60 -4
- package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -1
- package/dist/adapters/node/host/project-tools.d.ts.map +1 -1
- package/dist/adapters/node/host/project-tools.js +8 -1
- package/dist/adapters/node/host/project-tools.js.map +1 -1
- package/dist/adapters/node/host/workspace-generated-state.d.ts +8 -0
- package/dist/adapters/node/host/workspace-generated-state.d.ts.map +1 -0
- package/dist/adapters/node/host/workspace-generated-state.js +8 -0
- package/dist/adapters/node/host/workspace-generated-state.js.map +1 -0
- package/dist/adapters/node/mcp/mcp-client.d.ts +7 -2
- package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -1
- package/dist/adapters/node/mcp/mcp-client.js +41 -6
- package/dist/adapters/node/mcp/mcp-client.js.map +1 -1
- package/dist/adapters/node/memory/ollama-embeddings.d.ts +26 -0
- package/dist/adapters/node/memory/ollama-embeddings.d.ts.map +1 -0
- package/dist/adapters/node/memory/ollama-embeddings.js +98 -0
- package/dist/adapters/node/memory/ollama-embeddings.js.map +1 -0
- package/dist/adapters/node/memory/sqlite-memory.d.ts +16 -3
- package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -1
- package/dist/adapters/node/memory/sqlite-memory.js +138 -16
- package/dist/adapters/node/memory/sqlite-memory.js.map +1 -1
- package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -1
- package/dist/adapters/node/provider/ollama-chat-stream.js +4 -0
- package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -1
- package/dist/adapters/node/provider/ollama-coding-model.d.ts +16 -2
- package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -1
- package/dist/adapters/node/provider/ollama-coding-model.js +18 -0
- package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -1
- package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -1
- package/dist/adapters/node/skills/directory-skills.js +16 -1
- package/dist/adapters/node/skills/directory-skills.js.map +1 -1
- package/dist/adapters/node/skills/skill-marketplace.d.ts +71 -0
- package/dist/adapters/node/skills/skill-marketplace.d.ts.map +1 -0
- package/dist/adapters/node/skills/skill-marketplace.js +259 -0
- package/dist/adapters/node/skills/skill-marketplace.js.map +1 -0
- package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
- package/dist/adapters/node/tools/tool-executor.js +36 -15
- package/dist/adapters/node/tools/tool-executor.js.map +1 -1
- package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
- package/dist/adapters/node/tools/workspace-review.js +51 -12
- package/dist/adapters/node/tools/workspace-review.js.map +1 -1
- package/dist/agent/index.d.ts +17 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/context/checkpoint.js +1 -1
- package/dist/context/checkpoint.js.map +1 -1
- package/dist/context/context-manager.d.ts +27 -1
- package/dist/context/context-manager.d.ts.map +1 -1
- package/dist/context/context-manager.js +54 -7
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/context-profile.d.ts.map +1 -1
- package/dist/context/context-profile.js +6 -2
- package/dist/context/context-profile.js.map +1 -1
- package/dist/context/token-ledger.d.ts +9 -0
- package/dist/context/token-ledger.d.ts.map +1 -1
- package/dist/context/token-ledger.js +8 -0
- package/dist/context/token-ledger.js.map +1 -1
- package/dist/ports/capability-port.d.ts +8 -0
- package/dist/ports/capability-port.d.ts.map +1 -1
- package/dist/ports/workspace-port.d.ts +2 -1
- package/dist/ports/workspace-port.d.ts.map +1 -1
- package/dist/prompt/prompt-assembler.d.ts +1 -1
- package/dist/prompt/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt/prompt-assembler.js +12 -4
- package/dist/prompt/prompt-assembler.js.map +1 -1
- package/dist/runtime/completion-gate.d.ts +1 -0
- package/dist/runtime/completion-gate.d.ts.map +1 -1
- package/dist/runtime/completion-gate.js +54 -11
- package/dist/runtime/completion-gate.js.map +1 -1
- package/dist/runtime/run-controller.d.ts +6 -0
- package/dist/runtime/run-controller.d.ts.map +1 -1
- package/dist/runtime/run-controller.js +138 -13
- package/dist/runtime/run-controller.js.map +1 -1
- package/dist/runtime/runtime-error.d.ts +1 -1
- package/dist/runtime/runtime-error.d.ts.map +1 -1
- package/dist/runtime/runtime-error.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +10 -0
- package/dist/runtime/runtime-types.d.ts.map +1 -1
- package/dist/runtime/workspace-generated-path.d.ts +26 -0
- package/dist/runtime/workspace-generated-path.d.ts.map +1 -0
- package/dist/runtime/workspace-generated-path.js +61 -0
- package/dist/runtime/workspace-generated-path.js.map +1 -0
- package/dist/tools/command-shape.d.ts +4 -0
- package/dist/tools/command-shape.d.ts.map +1 -0
- package/dist/tools/command-shape.js +62 -0
- package/dist/tools/command-shape.js.map +1 -0
- package/dist/tools/json-schema.d.ts +13 -0
- package/dist/tools/json-schema.d.ts.map +1 -1
- package/dist/tools/json-schema.js +45 -0
- package/dist/tools/json-schema.js.map +1 -1
- package/dist/tools/tool-registry.js +2 -2
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/tools/validation-scope.d.ts +14 -0
- package/dist/tools/validation-scope.d.ts.map +1 -0
- package/dist/tools/validation-scope.js +16 -0
- package/dist/tools/validation-scope.js.map +1 -0
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/CACHE_HIT.md +109 -0
- package/docs/GALAXY_AGENT_PLATFORM_TODO.md +11 -2
- package/docs/SKILL_MARKETPLACE.md +59 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-marketplace.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/skills/skill-marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { createHash, sign as cryptoSign, verify as cryptoVerify } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
const MAX_INDEX_BYTES = 2 * 1024 * 1024;
|
|
5
|
+
const MAX_SKILL_BYTES = 65536;
|
|
6
|
+
const SKILL_ID = /^[a-z0-9][a-z0-9._-]{0,63}$/;
|
|
7
|
+
const VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
|
|
8
|
+
const SHA256 = /^[a-f0-9]{64}$/;
|
|
9
|
+
/** Deterministic JSON with sorted object keys, so publisher and verifier agree byte-for-byte. */
|
|
10
|
+
export function stableSkillIndexJson(value) {
|
|
11
|
+
if (value === null || typeof value !== "object")
|
|
12
|
+
return value === undefined ? "null" : JSON.stringify(value);
|
|
13
|
+
if (Array.isArray(value))
|
|
14
|
+
return `[${value.map(stableSkillIndexJson).join(",")}]`;
|
|
15
|
+
return `{${Object.entries(value)
|
|
16
|
+
.filter(([, item]) => item !== undefined)
|
|
17
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
18
|
+
.map(([key, item]) => `${JSON.stringify(key)}:${stableSkillIndexJson(item)}`)
|
|
19
|
+
.join(",")}}`;
|
|
20
|
+
}
|
|
21
|
+
function indexSignaturePayload(index) {
|
|
22
|
+
const { signature: _signature, ...rest } = (index ?? {});
|
|
23
|
+
return Buffer.from(stableSkillIndexJson(rest), "utf8");
|
|
24
|
+
}
|
|
25
|
+
/** Produce the base64 signature a publisher stores in the index `signature` field. */
|
|
26
|
+
export function signSkillIndex(index, privateKeyPem) {
|
|
27
|
+
return cryptoSign(null, indexSignaturePayload(index), privateKeyPem).toString("base64");
|
|
28
|
+
}
|
|
29
|
+
export function verifySkillIndexSignature(index, publicKeyPem) {
|
|
30
|
+
const signature = index?.signature;
|
|
31
|
+
if (typeof signature !== "string" || signature.trim().length === 0)
|
|
32
|
+
return false;
|
|
33
|
+
try {
|
|
34
|
+
return cryptoVerify(null, indexSignaturePayload(index), publicKeyPem, Buffer.from(signature, "base64"));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function isRemote(source) {
|
|
41
|
+
try {
|
|
42
|
+
const url = new URL(source);
|
|
43
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function parseVersion(version) {
|
|
50
|
+
const [core = "", pre = ""] = version.split("-", 2);
|
|
51
|
+
const [major = 0, minor = 0, patch = 0] = core.split(".").map(part => Number(part));
|
|
52
|
+
return [major, minor, patch, pre];
|
|
53
|
+
}
|
|
54
|
+
export function compareSkillVersions(left, right) {
|
|
55
|
+
const a = parseVersion(left);
|
|
56
|
+
const b = parseVersion(right);
|
|
57
|
+
for (let index = 0; index < 3; index += 1)
|
|
58
|
+
if (a[index] !== b[index])
|
|
59
|
+
return a[index] - b[index];
|
|
60
|
+
// A release outranks its prereleases; compare prerelease strings lexically otherwise.
|
|
61
|
+
if (a[3] === b[3])
|
|
62
|
+
return 0;
|
|
63
|
+
if (a[3] === "")
|
|
64
|
+
return 1;
|
|
65
|
+
if (b[3] === "")
|
|
66
|
+
return -1;
|
|
67
|
+
return a[3] < b[3] ? -1 : 1;
|
|
68
|
+
}
|
|
69
|
+
export function satisfiesSkillRange(version, range) {
|
|
70
|
+
const wanted = range.trim();
|
|
71
|
+
if (wanted === "" || wanted === "*" || wanted === "latest")
|
|
72
|
+
return true;
|
|
73
|
+
const target = wanted.replace(/^[\^~]/, "");
|
|
74
|
+
if (!VERSION.test(target))
|
|
75
|
+
throw new Error(`Invalid skill version range: ${range}`);
|
|
76
|
+
if (compareSkillVersions(version, target) < 0)
|
|
77
|
+
return false;
|
|
78
|
+
const [major, minor] = parseVersion(target);
|
|
79
|
+
if (wanted.startsWith("^"))
|
|
80
|
+
return major > 0 ? parseVersion(version)[0] === major : minor > 0 ? parseVersion(version)[1] === minor : parseVersion(version)[2] === parseVersion(target)[2];
|
|
81
|
+
if (wanted.startsWith("~"))
|
|
82
|
+
return parseVersion(version)[0] === major && parseVersion(version)[1] === minor;
|
|
83
|
+
return compareSkillVersions(version, target) === 0;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Local-first skill marketplace. The index and skill bodies may be a filesystem
|
|
87
|
+
* path or an HTTP(S) URL; every installed body is verified against the index
|
|
88
|
+
* sha256 and written atomically outside the model-writable workspace.
|
|
89
|
+
*/
|
|
90
|
+
export class SkillMarketplace {
|
|
91
|
+
fetchImpl;
|
|
92
|
+
installRoot;
|
|
93
|
+
indexSource;
|
|
94
|
+
publicKey;
|
|
95
|
+
constructor(options) {
|
|
96
|
+
if (!options.index.trim())
|
|
97
|
+
throw new Error("A skill index path or URL is required.");
|
|
98
|
+
if (!isAbsolute(options.installRoot))
|
|
99
|
+
throw new Error("The skill install root must be an absolute path.");
|
|
100
|
+
if (options.publicKey !== undefined && !options.publicKey.includes("PUBLIC KEY"))
|
|
101
|
+
throw new Error("The trusted skill index public key must be a PEM public key.");
|
|
102
|
+
this.indexSource = options.index.trim();
|
|
103
|
+
this.installRoot = options.installRoot;
|
|
104
|
+
this.publicKey = options.publicKey;
|
|
105
|
+
this.fetchImpl = options.fetch ?? globalThis.fetch;
|
|
106
|
+
}
|
|
107
|
+
async loadIndex() {
|
|
108
|
+
const raw = isRemote(this.indexSource)
|
|
109
|
+
? await this.fetchText(this.indexSource, MAX_INDEX_BYTES)
|
|
110
|
+
: await readFile(this.indexSource, "utf8");
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = JSON.parse(raw);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
throw new Error("Skill index is not valid JSON.");
|
|
117
|
+
}
|
|
118
|
+
if (!parsed || typeof parsed !== "object" || parsed.schemaVersion !== 1 || !Array.isArray(parsed.skills))
|
|
119
|
+
throw new Error("Unsupported skill index schema.");
|
|
120
|
+
if (this.publicKey !== undefined && !verifySkillIndexSignature(parsed, this.publicKey)) {
|
|
121
|
+
throw new Error("Skill index signature is missing or does not match the trusted public key.");
|
|
122
|
+
}
|
|
123
|
+
const skills = parsed.skills.map((entry) => this.validateEntry(entry));
|
|
124
|
+
return Object.freeze({
|
|
125
|
+
schemaVersion: 1,
|
|
126
|
+
skills: Object.freeze(skills),
|
|
127
|
+
...(typeof parsed.signature === "string" ? { signature: parsed.signature } : {}),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
async search(query = "") {
|
|
131
|
+
const index = await this.loadIndex();
|
|
132
|
+
const needle = query.trim().toLowerCase();
|
|
133
|
+
if (!needle)
|
|
134
|
+
return index.skills;
|
|
135
|
+
return index.skills.filter(entry => [entry.id, entry.name, entry.description, ...(entry.tags ?? [])].some(value => value.toLowerCase().includes(needle)));
|
|
136
|
+
}
|
|
137
|
+
async listInstalled() {
|
|
138
|
+
const installed = [];
|
|
139
|
+
for (const entry of await readdir(this.installRoot, { withFileTypes: true }).catch(() => [])) {
|
|
140
|
+
if (!entry.isDirectory())
|
|
141
|
+
continue;
|
|
142
|
+
try {
|
|
143
|
+
const meta = JSON.parse(await readFile(join(this.installRoot, entry.name, ".galaxy-skill.json"), "utf8"));
|
|
144
|
+
if (meta && typeof meta.id === "string" && typeof meta.version === "string")
|
|
145
|
+
installed.push(Object.freeze(meta));
|
|
146
|
+
}
|
|
147
|
+
catch { /* A directory without managed metadata is not a marketplace skill. */ }
|
|
148
|
+
}
|
|
149
|
+
return Object.freeze(installed.sort((left, right) => left.id.localeCompare(right.id)));
|
|
150
|
+
}
|
|
151
|
+
async install(id, options = {}) {
|
|
152
|
+
const index = await this.loadIndex();
|
|
153
|
+
const entry = index.skills.find(candidate => candidate.id === id);
|
|
154
|
+
if (!entry)
|
|
155
|
+
throw new Error(`Unknown skill: ${id}.`);
|
|
156
|
+
const range = options.version ?? "*";
|
|
157
|
+
const candidates = entry.versions.filter(candidate => satisfiesSkillRange(candidate.version, range)).sort((left, right) => compareSkillVersions(right.version, left.version));
|
|
158
|
+
const chosen = candidates[0];
|
|
159
|
+
if (!chosen)
|
|
160
|
+
throw new Error(`No version of ${id} satisfies ${range}.`);
|
|
161
|
+
const content = await this.loadSkillContent(chosen);
|
|
162
|
+
const digest = createHash("sha256").update(content).digest("hex");
|
|
163
|
+
if (digest !== chosen.sha256.toLowerCase())
|
|
164
|
+
throw new Error(`Skill ${id}@${chosen.version} failed integrity verification.`);
|
|
165
|
+
const existing = (await this.listInstalled()).find(skill => skill.id === id);
|
|
166
|
+
if (existing && existing.sha256 === digest)
|
|
167
|
+
return { changed: false, skill: existing };
|
|
168
|
+
if (existing && compareSkillVersions(existing.version, chosen.version) > 0)
|
|
169
|
+
throw new Error(`Installed ${id}@${existing.version} is newer than ${chosen.version}; pass an explicit version to downgrade.`);
|
|
170
|
+
const skillDir = join(this.installRoot, id);
|
|
171
|
+
await mkdir(skillDir, { recursive: true, mode: 0o700 });
|
|
172
|
+
await this.atomicWrite(join(skillDir, "SKILL.md"), content);
|
|
173
|
+
const skill = Object.freeze({ id, name: entry.name, version: chosen.version, sha256: digest, installedAt: new Date().toISOString(), source: chosen.url ?? chosen.path ?? this.indexSource });
|
|
174
|
+
await this.atomicWrite(join(skillDir, ".galaxy-skill.json"), JSON.stringify(skill, null, 2));
|
|
175
|
+
return { changed: true, skill };
|
|
176
|
+
}
|
|
177
|
+
async update() {
|
|
178
|
+
const results = [];
|
|
179
|
+
for (const installed of await this.listInstalled())
|
|
180
|
+
results.push(await this.install(installed.id, { version: "*" }).catch(() => ({ changed: false, skill: installed })));
|
|
181
|
+
return Object.freeze(results);
|
|
182
|
+
}
|
|
183
|
+
async remove(id) {
|
|
184
|
+
if (!SKILL_ID.test(id))
|
|
185
|
+
throw new Error("Invalid skill id.");
|
|
186
|
+
const target = resolve(this.installRoot, id);
|
|
187
|
+
if (dirname(target) !== resolve(this.installRoot))
|
|
188
|
+
throw new Error("Skill id escapes the install root.");
|
|
189
|
+
try {
|
|
190
|
+
await stat(target);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
await rm(target, { recursive: true, force: true });
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
validateEntry(value) {
|
|
199
|
+
if (!value || typeof value !== "object")
|
|
200
|
+
throw new Error("Invalid skill index entry.");
|
|
201
|
+
const entry = value;
|
|
202
|
+
if (typeof entry.id !== "string" || !SKILL_ID.test(entry.id) || typeof entry.name !== "string" || typeof entry.description !== "string" || !Array.isArray(entry.versions) || entry.versions.length === 0)
|
|
203
|
+
throw new Error("Invalid skill index entry.");
|
|
204
|
+
const tags = Array.isArray(entry.tags) && entry.tags.every(tag => typeof tag === "string") ? Object.freeze(entry.tags) : undefined;
|
|
205
|
+
const seen = new Set();
|
|
206
|
+
const versions = entry.versions.map((raw) => {
|
|
207
|
+
if (!raw || typeof raw !== "object")
|
|
208
|
+
throw new Error(`Invalid version entry for ${entry.id}.`);
|
|
209
|
+
const candidate = raw;
|
|
210
|
+
if (typeof candidate.version !== "string" || !VERSION.test(candidate.version) || typeof candidate.sha256 !== "string" || !SHA256.test(candidate.sha256.toLowerCase()))
|
|
211
|
+
throw new Error(`Invalid version entry for ${entry.id}.`);
|
|
212
|
+
if ((typeof candidate.url !== "string" || !candidate.url) && (typeof candidate.path !== "string" || !candidate.path))
|
|
213
|
+
throw new Error(`Version ${candidate.version} of ${entry.id} needs a url or path.`);
|
|
214
|
+
if (seen.has(candidate.version))
|
|
215
|
+
throw new Error(`Duplicate version ${candidate.version} for ${entry.id}.`);
|
|
216
|
+
seen.add(candidate.version);
|
|
217
|
+
return Object.freeze({
|
|
218
|
+
version: candidate.version,
|
|
219
|
+
sha256: candidate.sha256.toLowerCase(),
|
|
220
|
+
...(typeof candidate.url === "string" && candidate.url ? { url: candidate.url } : {}),
|
|
221
|
+
...(typeof candidate.path === "string" && candidate.path ? { path: candidate.path } : {}),
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
return Object.freeze({ id: entry.id, name: entry.name, description: entry.description, versions: Object.freeze(versions), ...(tags === undefined ? {} : { tags }) });
|
|
225
|
+
}
|
|
226
|
+
async loadSkillContent(version) {
|
|
227
|
+
if (version.url) {
|
|
228
|
+
if (!isRemote(version.url))
|
|
229
|
+
throw new Error("A remote skill index must use absolute HTTP(S) URLs.");
|
|
230
|
+
return (await this.fetchText(version.url, MAX_SKILL_BYTES));
|
|
231
|
+
}
|
|
232
|
+
if (isRemote(this.indexSource)) {
|
|
233
|
+
const base = new URL(this.indexSource);
|
|
234
|
+
return await this.fetchText(new URL(version.path, base).href, MAX_SKILL_BYTES);
|
|
235
|
+
}
|
|
236
|
+
if (isAbsolute(version.path))
|
|
237
|
+
throw new Error("Local skill paths must be relative to the index.");
|
|
238
|
+
const base = dirname(resolve(this.indexSource));
|
|
239
|
+
const target = resolve(base, version.path);
|
|
240
|
+
if (target !== base && !target.startsWith(base + "/"))
|
|
241
|
+
throw new Error("Skill path escapes the index directory.");
|
|
242
|
+
return (await readFile(target, "utf8"));
|
|
243
|
+
}
|
|
244
|
+
async fetchText(url, limit) {
|
|
245
|
+
const response = await this.fetchImpl(url, { redirect: "follow" });
|
|
246
|
+
if (!response.ok)
|
|
247
|
+
throw new Error(`Skill fetch failed (${response.status}) for ${url}.`);
|
|
248
|
+
const text = await response.text();
|
|
249
|
+
if (Buffer.byteLength(text, "utf8") > limit)
|
|
250
|
+
throw new Error(`Skill payload exceeds ${limit} bytes.`);
|
|
251
|
+
return text;
|
|
252
|
+
}
|
|
253
|
+
async atomicWrite(target, content) {
|
|
254
|
+
const temporary = `${target}.tmp-${process.pid}`;
|
|
255
|
+
await writeFile(temporary, content, { encoding: "utf8", mode: 0o600 });
|
|
256
|
+
await rename(temporary, target);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=skill-marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-marketplace.js","sourceRoot":"","sources":["../../../../src/adapters/node/skills/skill-marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/tools/tool-executor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/tools/tool-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { AiCoderTokenEstimator, AiCoderToolRegistry, createAiCoderCoreToolEffectMetadata, createAiCoderApprovalPolicy, createAiCoderToolRegistrySnapshot, validateAiCoderJsonSchema, } from "../../../index.js";
|
|
1
|
+
import { AiCoderTokenEstimator, AiCoderToolRegistry, createAiCoderCoreToolEffectMetadata, createAiCoderApprovalPolicy, createAiCoderToolRegistrySnapshot, clampAiCoderJsonSchemaNumbers, validateAiCoderJsonSchema, } from "../../../index.js";
|
|
2
2
|
import { posix } from "node:path";
|
|
3
3
|
import { sha256Text } from "../host/content-hash.js";
|
|
4
4
|
import { DEPENDENCY_AWARE_WORKSPACE_SNAPSHOT_OPTIONS, diffNodeWorkspaceSnapshots, NodeWorkspaceSnapshotter, } from "../host/node-workspace-snapshot.js";
|
|
5
5
|
import { detectProject, validateProject } from "../host/project-tools.js";
|
|
6
|
+
import { serverCommandAdvisory, validationCommandAdvisory } from "../../../tools/command-shape.js";
|
|
7
|
+
import { validationScopeForProjectPath } from "../../../tools/validation-scope.js";
|
|
6
8
|
export class ContractToolError extends Error {
|
|
7
9
|
code;
|
|
8
10
|
retryable;
|
|
@@ -94,15 +96,25 @@ class UnknownSideEffectOutcomeError extends Error {
|
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
function assertTargetMutation(canonicalToolId, mutations, expected) {
|
|
97
|
-
const target = mutations.writes.find((write) => write.path === expected.path);
|
|
98
99
|
const expectedBeforeKind = expected.beforeHash === null ? "missing" : "file";
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
const durable = mutations.writes.find((write) => write.path === expected.path);
|
|
101
|
+
if (durable !== undefined
|
|
102
|
+
&& durable.beforeKind === expectedBeforeKind
|
|
103
|
+
&& durable.afterKind === "file"
|
|
104
|
+
&& durable.beforeHash === expected.beforeHash
|
|
105
|
+
&& durable.afterHash === expected.afterHash) {
|
|
106
|
+
return;
|
|
105
107
|
}
|
|
108
|
+
// A write into generated state (for example .galaxy/workspace.json) is observed
|
|
109
|
+
// as a derived mutation: the snapshot keeps metadata fingerprints instead of a
|
|
110
|
+
// content hash, so attest the observed change rather than a durable write.
|
|
111
|
+
const derived = mutations.observedMutations.find((mutation) => mutation.path === expected.path && mutation.evidenceClass === "derived");
|
|
112
|
+
if (derived !== undefined
|
|
113
|
+
&& derived.afterKind === "file"
|
|
114
|
+
&& derived.beforeFingerprint !== derived.afterFingerprint) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
throw new UnknownSideEffectOutcomeError(`${canonicalToolId} returned success, but its target mutation does not match the independent workspace snapshot.`);
|
|
106
118
|
}
|
|
107
119
|
function structuredMutationFailure(canonicalToolId, mutations, error) {
|
|
108
120
|
if (mutations.observedMutations.length > 0) {
|
|
@@ -312,14 +324,18 @@ export class NodeToolExecutor {
|
|
|
312
324
|
if (descriptor === null) {
|
|
313
325
|
return errorResult(call, call.name, "UNKNOWN_TOOL", `Tool '${call.name}' is not active in this turn.`);
|
|
314
326
|
}
|
|
315
|
-
|
|
327
|
+
// Host caps are clamped, not rejected: the work is bounded either way and a
|
|
328
|
+
// rejection costs the model a full round trip.
|
|
329
|
+
const clampedArguments = clampAiCoderJsonSchemaNumbers(descriptor.inputSchema, call.arguments);
|
|
330
|
+
const effectiveArguments = clampedArguments.value;
|
|
331
|
+
const argumentsValidation = validateAiCoderJsonSchema(descriptor.inputSchema, effectiveArguments);
|
|
316
332
|
if (!argumentsValidation.valid) {
|
|
317
333
|
return errorResult(call, descriptor.id, "INVALID_TOOL_ARGUMENTS", argumentsValidation.errors.join(" "));
|
|
318
334
|
}
|
|
319
335
|
const cached = descriptor.idempotency === "with_key" ? this.idempotencyCache.get(context.idempotencyKey) : undefined;
|
|
320
336
|
if (cached !== undefined)
|
|
321
337
|
return cached;
|
|
322
|
-
const policy = await this.approvalPolicy(descriptor,
|
|
338
|
+
const policy = await this.approvalPolicy(descriptor, effectiveArguments, context);
|
|
323
339
|
const approvalEffect = policy.allowed
|
|
324
340
|
? policy.decision === "approved_by_host" ? "granted" : "not_required"
|
|
325
341
|
: "denied";
|
|
@@ -328,7 +344,7 @@ export class NodeToolExecutor {
|
|
|
328
344
|
}
|
|
329
345
|
let dispatched;
|
|
330
346
|
try {
|
|
331
|
-
dispatched = await this.dispatch(descriptor,
|
|
347
|
+
dispatched = await this.dispatch(descriptor, effectiveArguments, context);
|
|
332
348
|
}
|
|
333
349
|
catch (error) {
|
|
334
350
|
if (error instanceof UnknownSideEffectOutcomeError)
|
|
@@ -361,7 +377,9 @@ export class NodeToolExecutor {
|
|
|
361
377
|
maxTokens: descriptor.maxOutputTokens,
|
|
362
378
|
tailFraction: 0.25,
|
|
363
379
|
}),
|
|
364
|
-
summary:
|
|
380
|
+
summary: clampedArguments.adjustments.length === 0
|
|
381
|
+
? dispatched.summary
|
|
382
|
+
: `${dispatched.summary} Arguments clamped to host limits: ${clampedArguments.adjustments.join(", ")}.`.trim(),
|
|
365
383
|
trust: dispatched.trust,
|
|
366
384
|
});
|
|
367
385
|
if (descriptor.idempotency === "with_key")
|
|
@@ -650,12 +668,13 @@ export class NodeToolExecutor {
|
|
|
650
668
|
case "workspace.edit": {
|
|
651
669
|
const replaceAll = optionalBoolean(argumentsValue, "replaceAll");
|
|
652
670
|
const { before, snapshotter } = await this.mutationBaseline(context);
|
|
671
|
+
const editPrecondition = argumentsValue.precondition;
|
|
653
672
|
const result = await this.options.workspace.applyPatch({
|
|
654
673
|
path: stringArgument(argumentsValue, "path"),
|
|
655
674
|
oldText: stringArgument(argumentsValue, "oldText"),
|
|
656
675
|
newText: stringArgument(argumentsValue, "newText"),
|
|
657
676
|
...(replaceAll === undefined ? {} : { replaceAll }),
|
|
658
|
-
precondition:
|
|
677
|
+
...(editPrecondition === undefined ? {} : { precondition: editPrecondition }),
|
|
659
678
|
}, context);
|
|
660
679
|
const after = await snapshotter.capture(context);
|
|
661
680
|
const mutations = diffNodeWorkspaceSnapshots(before, after);
|
|
@@ -771,7 +790,9 @@ export class NodeToolExecutor {
|
|
|
771
790
|
truncated: data.stdoutTruncated || data.stderrTruncated,
|
|
772
791
|
...(derivedMutations === undefined ? {} : { derivedMutations }),
|
|
773
792
|
}),
|
|
774
|
-
summary: `Command ${data.status} with exit code ${String(data.exitCode)}.`,
|
|
793
|
+
summary: [`Command ${data.status} with exit code ${String(data.exitCode)}.`, serverCommandAdvisory(command), validationCommandAdvisory(command, cwd)]
|
|
794
|
+
.filter((part) => part !== undefined && part.length > 0)
|
|
795
|
+
.join(" "),
|
|
775
796
|
trust: "external",
|
|
776
797
|
...(observedEffects === undefined ? {} : { effects: observedEffects }),
|
|
777
798
|
});
|
|
@@ -830,7 +851,7 @@ export class NodeToolExecutor {
|
|
|
830
851
|
validations: Object.freeze(result.results.map((item) => Object.freeze({
|
|
831
852
|
id: `project.validate:${item.check}:${projectPath}`,
|
|
832
853
|
detail: `${item.check}: ${item.summary}`,
|
|
833
|
-
|
|
854
|
+
...validationScopeForProjectPath(projectPath),
|
|
834
855
|
status: item.status === "passed" ? "passed" : item.status === "skipped" ? "not_run" : "failed",
|
|
835
856
|
}))),
|
|
836
857
|
}),
|