@galaxy-stack/ai-coder-core 0.3.0-alpha.8 → 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.
Files changed (149) hide show
  1. package/CHANGELOG.d/2026-09-19-advisory-guard-policy.md +1 -1
  2. package/CHANGELOG.d/2026-09-25-tail-anchored-bounding.md +5 -0
  3. package/CHANGELOG.d/2026-09-26-binary-review-pipe-guidance-finalization-test.md +14 -0
  4. package/CHANGELOG.d/2026-09-26-cache-capability-and-mcp-reconnect.md +16 -0
  5. package/CHANGELOG.d/2026-09-26-cache-hit-harness.md +13 -0
  6. package/CHANGELOG.d/2026-09-26-cache-hit-rate-and-inhistory-option.md +12 -0
  7. package/CHANGELOG.d/2026-09-26-cumulative-cache-hit.md +13 -0
  8. package/CHANGELOG.d/2026-09-26-default-model-deepseek.md +8 -0
  9. package/CHANGELOG.d/2026-09-26-finalization-prefix-and-verified-inhistory.md +12 -0
  10. package/CHANGELOG.d/2026-09-26-generated-state-and-churn-guard.md +16 -0
  11. package/CHANGELOG.d/2026-09-26-mcp-reconnect-fixture.md +11 -0
  12. package/CHANGELOG.d/2026-09-26-memory-hybrid-semantic-consolidation.md +16 -0
  13. package/CHANGELOG.d/2026-09-26-memory-recall-benchmark.md +12 -0
  14. package/CHANGELOG.d/2026-09-26-ollama-cache-usage.md +14 -0
  15. package/CHANGELOG.d/2026-09-26-ollama-embeddings-provider.md +13 -0
  16. package/CHANGELOG.d/2026-09-26-rerecord-live-fixture.md +6 -0
  17. package/CHANGELOG.d/2026-09-26-skill-index-signing.md +11 -0
  18. package/CHANGELOG.d/2026-09-26-skill-version-and-marketplace.md +14 -0
  19. package/CHANGELOG.d/2026-09-27-workspace-derived-build-output.md +16 -0
  20. package/CHANGELOG.d/2026-09-28-advisory-lenh-check-va-server.md +26 -0
  21. package/CHANGELOG.d/2026-09-28-clamp-tham-so-vuot-cap.md +20 -0
  22. package/CHANGELOG.d/2026-09-28-digest-context-item.md +16 -0
  23. package/CHANGELOG.d/2026-09-28-gate-bo-qua-path-da-xoa.md +20 -0
  24. package/CHANGELOG.d/2026-09-28-ngan-sach-luot-finalization.md +20 -0
  25. package/CHANGELOG.d/2026-09-28-scope-cua-project-validate.md +22 -0
  26. package/CHANGELOG.d/2026-09-28-staleness-theo-pham-vi.md +22 -0
  27. package/CHANGELOG.d/2026-09-28-thong-bao-guard-dependency.md +24 -0
  28. package/CHANGELOG.d/2026-09-28-thu-tu-mandatory-state-cache.md +20 -0
  29. package/CHANGELOG.md +71 -1
  30. package/README.md +10 -10
  31. package/dist/adapters/node/config/manual-provider-config.d.ts +3 -0
  32. package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -1
  33. package/dist/adapters/node/config/manual-provider-config.js +4 -0
  34. package/dist/adapters/node/config/manual-provider-config.js.map +1 -1
  35. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -1
  36. package/dist/adapters/node/host/node-workspace-evidence-verifier.js +8 -13
  37. package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -1
  38. package/dist/adapters/node/host/node-workspace-port.d.ts +1 -1
  39. package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -1
  40. package/dist/adapters/node/host/node-workspace-port.js +47 -4
  41. package/dist/adapters/node/host/node-workspace-port.js.map +1 -1
  42. package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -1
  43. package/dist/adapters/node/host/node-workspace-snapshot.js +60 -4
  44. package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -1
  45. package/dist/adapters/node/host/project-tools.d.ts.map +1 -1
  46. package/dist/adapters/node/host/project-tools.js +8 -1
  47. package/dist/adapters/node/host/project-tools.js.map +1 -1
  48. package/dist/adapters/node/host/workspace-generated-state.d.ts +8 -0
  49. package/dist/adapters/node/host/workspace-generated-state.d.ts.map +1 -0
  50. package/dist/adapters/node/host/workspace-generated-state.js +8 -0
  51. package/dist/adapters/node/host/workspace-generated-state.js.map +1 -0
  52. package/dist/adapters/node/mcp/mcp-client.d.ts +7 -2
  53. package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -1
  54. package/dist/adapters/node/mcp/mcp-client.js +41 -6
  55. package/dist/adapters/node/mcp/mcp-client.js.map +1 -1
  56. package/dist/adapters/node/memory/ollama-embeddings.d.ts +26 -0
  57. package/dist/adapters/node/memory/ollama-embeddings.d.ts.map +1 -0
  58. package/dist/adapters/node/memory/ollama-embeddings.js +98 -0
  59. package/dist/adapters/node/memory/ollama-embeddings.js.map +1 -0
  60. package/dist/adapters/node/memory/sqlite-memory.d.ts +16 -3
  61. package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -1
  62. package/dist/adapters/node/memory/sqlite-memory.js +138 -16
  63. package/dist/adapters/node/memory/sqlite-memory.js.map +1 -1
  64. package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -1
  65. package/dist/adapters/node/provider/ollama-chat-stream.js +4 -0
  66. package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -1
  67. package/dist/adapters/node/provider/ollama-coding-model.d.ts +16 -2
  68. package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -1
  69. package/dist/adapters/node/provider/ollama-coding-model.js +18 -0
  70. package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -1
  71. package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -1
  72. package/dist/adapters/node/skills/directory-skills.js +16 -1
  73. package/dist/adapters/node/skills/directory-skills.js.map +1 -1
  74. package/dist/adapters/node/skills/skill-marketplace.d.ts +71 -0
  75. package/dist/adapters/node/skills/skill-marketplace.d.ts.map +1 -0
  76. package/dist/adapters/node/skills/skill-marketplace.js +259 -0
  77. package/dist/adapters/node/skills/skill-marketplace.js.map +1 -0
  78. package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -1
  79. package/dist/adapters/node/tools/tool-executor.js +36 -15
  80. package/dist/adapters/node/tools/tool-executor.js.map +1 -1
  81. package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -1
  82. package/dist/adapters/node/tools/workspace-review.js +51 -12
  83. package/dist/adapters/node/tools/workspace-review.js.map +1 -1
  84. package/dist/agent/index.d.ts +17 -0
  85. package/dist/agent/index.d.ts.map +1 -1
  86. package/dist/agent/index.js.map +1 -1
  87. package/dist/context/checkpoint.js +1 -1
  88. package/dist/context/checkpoint.js.map +1 -1
  89. package/dist/context/context-manager.d.ts +27 -1
  90. package/dist/context/context-manager.d.ts.map +1 -1
  91. package/dist/context/context-manager.js +54 -7
  92. package/dist/context/context-manager.js.map +1 -1
  93. package/dist/context/context-profile.d.ts.map +1 -1
  94. package/dist/context/context-profile.js +6 -2
  95. package/dist/context/context-profile.js.map +1 -1
  96. package/dist/context/token-ledger.d.ts +9 -0
  97. package/dist/context/token-ledger.d.ts.map +1 -1
  98. package/dist/context/token-ledger.js +8 -0
  99. package/dist/context/token-ledger.js.map +1 -1
  100. package/dist/context/tool-output.d.ts.map +1 -1
  101. package/dist/context/tool-output.js +23 -4
  102. package/dist/context/tool-output.js.map +1 -1
  103. package/dist/ports/capability-port.d.ts +8 -0
  104. package/dist/ports/capability-port.d.ts.map +1 -1
  105. package/dist/ports/workspace-port.d.ts +2 -1
  106. package/dist/ports/workspace-port.d.ts.map +1 -1
  107. package/dist/prompt/prompt-assembler.d.ts +1 -1
  108. package/dist/prompt/prompt-assembler.d.ts.map +1 -1
  109. package/dist/prompt/prompt-assembler.js +12 -4
  110. package/dist/prompt/prompt-assembler.js.map +1 -1
  111. package/dist/runtime/completion-gate.d.ts +1 -0
  112. package/dist/runtime/completion-gate.d.ts.map +1 -1
  113. package/dist/runtime/completion-gate.js +54 -11
  114. package/dist/runtime/completion-gate.js.map +1 -1
  115. package/dist/runtime/run-controller.d.ts +6 -0
  116. package/dist/runtime/run-controller.d.ts.map +1 -1
  117. package/dist/runtime/run-controller.js +138 -13
  118. package/dist/runtime/run-controller.js.map +1 -1
  119. package/dist/runtime/runtime-error.d.ts +1 -1
  120. package/dist/runtime/runtime-error.d.ts.map +1 -1
  121. package/dist/runtime/runtime-error.js.map +1 -1
  122. package/dist/runtime/runtime-types.d.ts +10 -0
  123. package/dist/runtime/runtime-types.d.ts.map +1 -1
  124. package/dist/runtime/workspace-generated-path.d.ts +26 -0
  125. package/dist/runtime/workspace-generated-path.d.ts.map +1 -0
  126. package/dist/runtime/workspace-generated-path.js +61 -0
  127. package/dist/runtime/workspace-generated-path.js.map +1 -0
  128. package/dist/tools/command-shape.d.ts +4 -0
  129. package/dist/tools/command-shape.d.ts.map +1 -0
  130. package/dist/tools/command-shape.js +62 -0
  131. package/dist/tools/command-shape.js.map +1 -0
  132. package/dist/tools/json-schema.d.ts +13 -0
  133. package/dist/tools/json-schema.d.ts.map +1 -1
  134. package/dist/tools/json-schema.js +45 -0
  135. package/dist/tools/json-schema.js.map +1 -1
  136. package/dist/tools/settings-types.js +1 -1
  137. package/dist/tools/settings-types.js.map +1 -1
  138. package/dist/tools/tool-registry.js +2 -2
  139. package/dist/tools/tool-registry.js.map +1 -1
  140. package/dist/tools/validation-scope.d.ts +14 -0
  141. package/dist/tools/validation-scope.d.ts.map +1 -0
  142. package/dist/tools/validation-scope.js +16 -0
  143. package/dist/tools/validation-scope.js.map +1 -0
  144. package/docs/ARCHITECTURE.md +1 -1
  145. package/docs/CACHE_HIT.md +109 -0
  146. package/docs/GALAXY_AGENT_PLATFORM_PLAN.md +171 -348
  147. package/docs/GALAXY_AGENT_PLATFORM_TODO.md +13 -0
  148. package/docs/SKILL_MARKETPLACE.md +59 -0
  149. 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":"AAIA,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE9F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AACD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAQD,iGAAiG;AACjG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ3D;AAKD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE5E;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAMvF;AAUD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxE;AACD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAU3E;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBACnC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IASnG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAiBhC,MAAM,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAMvD,aAAa,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAWnD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC;IAqB7G,MAAM,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,cAAc,CAAA;KAAE,EAAE,CAAC;IAKzE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1C,OAAO,CAAC,aAAa;YAsBP,gBAAgB;YAehB,SAAS;YAOT,WAAW;CAK1B"}
@@ -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":"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"}
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
- if (target === undefined
100
- || target.beforeKind !== expectedBeforeKind
101
- || target.afterKind !== "file"
102
- || target.beforeHash !== expected.beforeHash
103
- || target.afterHash !== expected.afterHash) {
104
- throw new UnknownSideEffectOutcomeError(`${canonicalToolId} returned success, but its target mutation does not match the independent workspace snapshot.`);
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
- const argumentsValidation = validateAiCoderJsonSchema(descriptor.inputSchema, call.arguments);
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, call.arguments, context);
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, call.arguments, context);
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: dispatched.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: argumentsValue.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
- scope: "workspace",
854
+ ...validationScopeForProjectPath(projectPath),
834
855
  status: item.status === "passed" ? "passed" : item.status === "skipped" ? "not_run" : "failed",
835
856
  }))),
836
857
  }),