@acidicsoil/portable-capabilities 0.1.8 → 0.1.9
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.md +6 -0
- package/dist-release/cli.js +321 -200
- package/dist-release/cli.js.map +4 -4
- package/dist-release/index.js +326 -205
- package/dist-release/index.js.map +4 -4
- package/package.json +33 -25
- package/schemas/runtime-descriptor.schema.json +6 -0
package/dist-release/index.js
CHANGED
|
@@ -3541,9 +3541,9 @@ function normalizeDigestValue(value) {
|
|
|
3541
3541
|
function stableManifestDigest(value) {
|
|
3542
3542
|
return digestBytes(new TextEncoder().encode(JSON.stringify(normalizeDigestValue(value))));
|
|
3543
3543
|
}
|
|
3544
|
-
function packageEntriesDigest(
|
|
3544
|
+
function packageEntriesDigest(entries, packageIdentities = []) {
|
|
3545
3545
|
return stableManifestDigest({
|
|
3546
|
-
entries: [...
|
|
3546
|
+
entries: [...entries].sort((left, right) => left.path.localeCompare(right.path)).map((entry) => ({ path: entry.path, digest: entry.digest, mode: entry.mode })),
|
|
3547
3547
|
packageIdentities: [...packageIdentities].sort(
|
|
3548
3548
|
(left, right) => left.lockPath.localeCompare(right.lockPath)
|
|
3549
3549
|
)
|
|
@@ -3792,9 +3792,9 @@ async function copyAtomically(source3, target, mode) {
|
|
|
3792
3792
|
await rename2(temporary, target);
|
|
3793
3793
|
}
|
|
3794
3794
|
async function desiredEntries(sourceRoot, files) {
|
|
3795
|
-
const
|
|
3796
|
-
for (const file of files)
|
|
3797
|
-
return
|
|
3795
|
+
const entries = [];
|
|
3796
|
+
for (const file of files) entries.push(await entryFor(join3(sourceRoot, file), file));
|
|
3797
|
+
return entries;
|
|
3798
3798
|
}
|
|
3799
3799
|
async function selectedPackageFiles(options) {
|
|
3800
3800
|
const files = await listPackageFiles(options.sourceRoot);
|
|
@@ -3860,9 +3860,9 @@ async function unselectedPackageRoots(options) {
|
|
|
3860
3860
|
}
|
|
3861
3861
|
return Object.freeze(roots);
|
|
3862
3862
|
}
|
|
3863
|
-
async function installedPackageIdentities(sourceRoot,
|
|
3863
|
+
async function installedPackageIdentities(sourceRoot, entries) {
|
|
3864
3864
|
const identities = [];
|
|
3865
|
-
for (const entry of
|
|
3865
|
+
for (const entry of entries.filter((item) => item.path.endsWith("/capability.lock.json"))) {
|
|
3866
3866
|
const lock = JSON.parse(await readFile2(join3(sourceRoot, entry.path), "utf8"));
|
|
3867
3867
|
if (lock.schemaVersion !== "2.0.0" || !lock.integrity?.package?.digest || lock.generatedDigest !== lock.integrity.package.digest) {
|
|
3868
3868
|
throw new Error(`Invalid capability package identity: ${entry.path}`);
|
|
@@ -4338,12 +4338,12 @@ async function removeInstallation(targetRoot, faultInjector, capabilityIds) {
|
|
|
4338
4338
|
const removes = manifest.entries.filter((entry) => unchanged.has(entry.path)).map((entry) => entry.path);
|
|
4339
4339
|
const preserved = manifest.entries.filter((entry) => !unchanged.has(entry.path));
|
|
4340
4340
|
const nextManifest = preserved.length ? (() => {
|
|
4341
|
-
const
|
|
4342
|
-
const preservedPaths = new Set(
|
|
4341
|
+
const entries = Object.freeze(preserved);
|
|
4342
|
+
const preservedPaths = new Set(entries.map((entry) => entry.path));
|
|
4343
4343
|
const packageIdentities = Object.freeze(
|
|
4344
4344
|
manifest.packageIdentities.filter((identity3) => preservedPaths.has(identity3.lockPath))
|
|
4345
4345
|
);
|
|
4346
|
-
const packageDigest = packageEntriesDigest(
|
|
4346
|
+
const packageDigest = packageEntriesDigest(entries, packageIdentities);
|
|
4347
4347
|
const base = {
|
|
4348
4348
|
runtimeId: manifest.runtimeId,
|
|
4349
4349
|
packageVersion: manifest.packageVersion,
|
|
@@ -4351,7 +4351,7 @@ async function removeInstallation(targetRoot, faultInjector, capabilityIds) {
|
|
|
4351
4351
|
journalVersion: manifest.journalVersion,
|
|
4352
4352
|
lifecycleState: "modified",
|
|
4353
4353
|
packageIdentities,
|
|
4354
|
-
entries
|
|
4354
|
+
entries
|
|
4355
4355
|
};
|
|
4356
4356
|
return {
|
|
4357
4357
|
...manifest,
|
|
@@ -11762,8 +11762,8 @@ async function assertNoSymlinks(current) {
|
|
|
11762
11762
|
async function treeDigest(root) {
|
|
11763
11763
|
const hash = createHash3("sha256");
|
|
11764
11764
|
async function visit(current, relative5 = "") {
|
|
11765
|
-
const
|
|
11766
|
-
for (const entry of
|
|
11765
|
+
const entries = await readdir2(current, { withFileTypes: true });
|
|
11766
|
+
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
11767
11767
|
if ([".git", "node_modules", ".turbo"].includes(entry.name)) continue;
|
|
11768
11768
|
const path9 = join4(current, entry.name);
|
|
11769
11769
|
const child = relative5 ? `${relative5}/${entry.name}` : entry.name;
|
|
@@ -12051,10 +12051,81 @@ import { parse } from "yaml";
|
|
|
12051
12051
|
import { parseDocument } from "yaml";
|
|
12052
12052
|
|
|
12053
12053
|
// packages/compiler/src/evidence/runtime-claims.ts
|
|
12054
|
+
function parseVersion(value) {
|
|
12055
|
+
const match = value.match(/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/u);
|
|
12056
|
+
if (!match) return void 0;
|
|
12057
|
+
return {
|
|
12058
|
+
major: Number(match[1]),
|
|
12059
|
+
minor: Number(match[2]),
|
|
12060
|
+
patch: Number(match[3]),
|
|
12061
|
+
prerelease: match[4] ? match[4].split(".").map((part) => /^\d+$/u.test(part) ? Number(part) : part) : []
|
|
12062
|
+
};
|
|
12063
|
+
}
|
|
12064
|
+
function compareVersions(left, right) {
|
|
12065
|
+
for (const key of ["major", "minor", "patch"]) {
|
|
12066
|
+
if (left[key] !== right[key]) return left[key] > right[key] ? 1 : -1;
|
|
12067
|
+
}
|
|
12068
|
+
if (left.prerelease.length === 0 && right.prerelease.length === 0) return 0;
|
|
12069
|
+
if (left.prerelease.length === 0) return 1;
|
|
12070
|
+
if (right.prerelease.length === 0) return -1;
|
|
12071
|
+
for (let index = 0; index < Math.max(left.prerelease.length, right.prerelease.length); index += 1) {
|
|
12072
|
+
const leftPart = left.prerelease[index];
|
|
12073
|
+
const rightPart = right.prerelease[index];
|
|
12074
|
+
if (leftPart === void 0) return -1;
|
|
12075
|
+
if (rightPart === void 0) return 1;
|
|
12076
|
+
if (leftPart === rightPart) continue;
|
|
12077
|
+
if (typeof leftPart === "number" && typeof rightPart === "string") return -1;
|
|
12078
|
+
if (typeof leftPart === "string" && typeof rightPart === "number") return 1;
|
|
12079
|
+
return leftPart > rightPart ? 1 : -1;
|
|
12080
|
+
}
|
|
12081
|
+
return 0;
|
|
12082
|
+
}
|
|
12083
|
+
function caretUpperBound(version) {
|
|
12084
|
+
if (version.major > 0) return { major: version.major + 1, minor: 0, patch: 0, prerelease: [] };
|
|
12085
|
+
if (version.minor > 0) return { major: 0, minor: version.minor + 1, patch: 0, prerelease: [] };
|
|
12086
|
+
return { major: 0, minor: 0, patch: version.patch + 1, prerelease: [] };
|
|
12087
|
+
}
|
|
12088
|
+
function tildeUpperBound(version) {
|
|
12089
|
+
return { major: version.major, minor: version.minor + 1, patch: 0, prerelease: [] };
|
|
12090
|
+
}
|
|
12091
|
+
function matchesConstraint(actual, operator, expected) {
|
|
12092
|
+
if (actual.prerelease.length > 0 && expected.prerelease.length === 0) return false;
|
|
12093
|
+
const comparison = compareVersions(actual, expected);
|
|
12094
|
+
switch (operator ?? "=") {
|
|
12095
|
+
case ">=":
|
|
12096
|
+
return comparison >= 0;
|
|
12097
|
+
case "<=":
|
|
12098
|
+
return comparison <= 0;
|
|
12099
|
+
case ">":
|
|
12100
|
+
return comparison > 0;
|
|
12101
|
+
case "<":
|
|
12102
|
+
return comparison < 0;
|
|
12103
|
+
case "^":
|
|
12104
|
+
return comparison >= 0 && compareVersions(actual, caretUpperBound(expected)) < 0;
|
|
12105
|
+
case "~":
|
|
12106
|
+
return comparison >= 0 && compareVersions(actual, tildeUpperBound(expected)) < 0;
|
|
12107
|
+
default:
|
|
12108
|
+
return comparison === 0;
|
|
12109
|
+
}
|
|
12110
|
+
}
|
|
12111
|
+
function isRuntimeVersionInRange(range, runtimeVersion) {
|
|
12112
|
+
const normalizedRange = range.trim();
|
|
12113
|
+
if (normalizedRange === "*") return true;
|
|
12114
|
+
const actual = parseVersion(runtimeVersion);
|
|
12115
|
+
if (!actual) return false;
|
|
12116
|
+
const expression = normalizedRange.includes(";") ? normalizedRange.slice(normalizedRange.lastIndexOf(";") + 1).trim() : normalizedRange;
|
|
12117
|
+
const constraints = expression.split(/\s+/u).map((token) => {
|
|
12118
|
+
const match = token.match(/^(>=|<=|>|<|=|\^|~)?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/u);
|
|
12119
|
+
if (!match || !match[2]) return void 0;
|
|
12120
|
+
const version = parseVersion(match[2]);
|
|
12121
|
+
return version ? { operator: match[1], version } : void 0;
|
|
12122
|
+
});
|
|
12123
|
+
return constraints.length > 0 && constraints.every(
|
|
12124
|
+
(constraint) => constraint?.version && matchesConstraint(actual, constraint.operator, constraint.version)
|
|
12125
|
+
);
|
|
12126
|
+
}
|
|
12054
12127
|
function resolveRuntimeEvidence(claim4, runtimeVersion) {
|
|
12055
|
-
const
|
|
12056
|
-
const runtimeMajor = runtimeVersion.match(/^\d+/)?.[0];
|
|
12057
|
-
const applicable = claim4.versionRange === "*" || rangeMajor !== void 0 && rangeMajor === runtimeMajor;
|
|
12128
|
+
const applicable = isRuntimeVersionInRange(claim4.versionRange, runtimeVersion);
|
|
12058
12129
|
const sufficientState = ["documented", "source-observed", "runtime-observed"].includes(
|
|
12059
12130
|
claim4.state
|
|
12060
12131
|
);
|
|
@@ -12072,85 +12143,26 @@ function resolveRuntimeEvidence(claim4, runtimeVersion) {
|
|
|
12072
12143
|
}
|
|
12073
12144
|
|
|
12074
12145
|
// packages/compiler/src/negotiation/adapter-registry.ts
|
|
12075
|
-
var
|
|
12076
|
-
|
|
12077
|
-
|
|
12078
|
-
|
|
12079
|
-
|
|
12080
|
-
|
|
12081
|
-
|
|
12082
|
-
|
|
12083
|
-
|
|
12084
|
-
|
|
12085
|
-
|
|
12086
|
-
purityClass: "planned-effect",
|
|
12087
|
-
effectClass: "configuration",
|
|
12088
|
-
requiredEvidenceCategories: ["configuration"]
|
|
12089
|
-
},
|
|
12090
|
-
{
|
|
12091
|
-
id: "pi-extension-registration",
|
|
12092
|
-
operationKinds: ["InstallExtension"],
|
|
12093
|
-
purityClass: "planned-effect",
|
|
12094
|
-
effectClass: "registration",
|
|
12095
|
-
requiredEvidenceCategories: ["configuration"]
|
|
12096
|
-
},
|
|
12097
|
-
{
|
|
12098
|
-
id: "oh-my-pi-code-as-hooks",
|
|
12099
|
-
operationKinds: ["InstallExtension"],
|
|
12100
|
-
purityClass: "planned-effect",
|
|
12101
|
-
effectClass: "registration",
|
|
12102
|
-
requiredEvidenceCategories: ["hooks", "configuration"]
|
|
12103
|
-
},
|
|
12104
|
-
{
|
|
12105
|
-
id: "antigravity-plugin-registration",
|
|
12106
|
-
operationKinds: ["RegisterPlugin"],
|
|
12107
|
-
purityClass: "planned-effect",
|
|
12108
|
-
effectClass: "registration",
|
|
12109
|
-
requiredEvidenceCategories: ["plugin", "location"]
|
|
12110
|
-
},
|
|
12111
|
-
{
|
|
12112
|
-
id: "antigravity-hook-registration",
|
|
12113
|
-
operationKinds: ["RegisterHook"],
|
|
12114
|
-
purityClass: "planned-effect",
|
|
12115
|
-
effectClass: "registration",
|
|
12116
|
-
requiredEvidenceCategories: ["hooks", "location"]
|
|
12117
|
-
},
|
|
12118
|
-
{
|
|
12119
|
-
id: "antigravity-mcp-registration",
|
|
12120
|
-
operationKinds: ["RegisterMcpServer"],
|
|
12121
|
-
purityClass: "planned-effect",
|
|
12122
|
-
effectClass: "registration",
|
|
12123
|
-
requiredEvidenceCategories: ["mcp", "location"]
|
|
12124
|
-
},
|
|
12125
|
-
{
|
|
12126
|
-
id: "opencode-custom-tool",
|
|
12127
|
-
operationKinds: ["InstallExtension"],
|
|
12128
|
-
purityClass: "planned-effect",
|
|
12129
|
-
effectClass: "registration",
|
|
12130
|
-
requiredEvidenceCategories: ["location", "discovery"]
|
|
12131
|
-
},
|
|
12132
|
-
{
|
|
12133
|
-
id: "opencode-plugin",
|
|
12134
|
-
operationKinds: ["RegisterPlugin"],
|
|
12135
|
-
purityClass: "planned-effect",
|
|
12136
|
-
effectClass: "registration",
|
|
12137
|
-
requiredEvidenceCategories: ["plugin", "discovery"]
|
|
12138
|
-
}
|
|
12139
|
-
];
|
|
12140
|
-
var adapterRegistry = new Map(
|
|
12141
|
-
entries.map((x) => [x.id, x])
|
|
12142
|
-
);
|
|
12146
|
+
var adapterIds = Object.freeze([
|
|
12147
|
+
"materialize-markdown",
|
|
12148
|
+
"patch-structured-config",
|
|
12149
|
+
"pi-extension-registration",
|
|
12150
|
+
"oh-my-pi-code-as-hooks",
|
|
12151
|
+
"antigravity-plugin-registration",
|
|
12152
|
+
"antigravity-hook-registration",
|
|
12153
|
+
"antigravity-mcp-registration",
|
|
12154
|
+
"opencode-custom-tool",
|
|
12155
|
+
"opencode-plugin"
|
|
12156
|
+
]);
|
|
12143
12157
|
function requireAdapter(id) {
|
|
12144
|
-
|
|
12145
|
-
if (!item) throw new Error(`Unknown adapter ID: ${id}`);
|
|
12146
|
-
return item;
|
|
12158
|
+
if (!adapterIds.includes(id)) throw new Error(`Unknown adapter ID: ${id}`);
|
|
12147
12159
|
}
|
|
12148
12160
|
|
|
12149
12161
|
// packages/compiler/src/negotiation/negotiate-capability.ts
|
|
12150
12162
|
function negotiateCapability(artifact, descriptor, claims, version) {
|
|
12151
12163
|
return artifact.invocationIntents.map((intent) => {
|
|
12152
12164
|
const surface = descriptor.surfaces.find(
|
|
12153
|
-
(x) => x.semanticKind === intent && x.evidenceClaimIds.some((claimId) => {
|
|
12165
|
+
(x) => x.semanticKind === intent && (x.versionRange === void 0 || isRuntimeVersionInRange(x.versionRange, version)) && x.evidenceClaimIds.some((claimId) => {
|
|
12154
12166
|
const claim4 = claims.find((candidate) => candidate.id === claimId);
|
|
12155
12167
|
return claim4 !== void 0 && resolveRuntimeEvidence(claim4, version).reason !== "version-inapplicable";
|
|
12156
12168
|
})
|
|
@@ -12206,8 +12218,8 @@ var operationalSectionNames = Object.freeze([
|
|
|
12206
12218
|
]);
|
|
12207
12219
|
function validateOperationalSkillContract(contract) {
|
|
12208
12220
|
for (const section of operationalSectionNames) {
|
|
12209
|
-
const
|
|
12210
|
-
if (!Array.isArray(
|
|
12221
|
+
const entries = contract[section];
|
|
12222
|
+
if (!Array.isArray(entries) || entries.length === 0 || entries.some((entry) => !entry.trim())) {
|
|
12211
12223
|
throw new Error(`Missing operational section: ${section}`);
|
|
12212
12224
|
}
|
|
12213
12225
|
}
|
|
@@ -12227,13 +12239,26 @@ var headings = {
|
|
|
12227
12239
|
function renderOperationalSkillContract(contract) {
|
|
12228
12240
|
validateOperationalSkillContract(contract);
|
|
12229
12241
|
return operationalSectionNames.map((section) => {
|
|
12230
|
-
const
|
|
12242
|
+
const entries = contract[section].map((entry, index) => `${index + 1}. ${entry}`).join("\n");
|
|
12231
12243
|
return `## ${headings[section]}
|
|
12232
12244
|
|
|
12233
|
-
${
|
|
12245
|
+
${entries}`;
|
|
12234
12246
|
}).join("\n\n");
|
|
12235
12247
|
}
|
|
12236
12248
|
|
|
12249
|
+
// packages/contracts/src/skill-document.ts
|
|
12250
|
+
function renderSkillDocument(input) {
|
|
12251
|
+
const description = input.description.replace(/[\r\n\t]+/gu, " ").replace(/\s{2,}/gu, " ").trim();
|
|
12252
|
+
if (!description) throw new Error(`Skill ${input.name} requires a non-empty description`);
|
|
12253
|
+
return `---
|
|
12254
|
+
name: ${JSON.stringify(input.name)}
|
|
12255
|
+
description: ${JSON.stringify(description)}
|
|
12256
|
+
---
|
|
12257
|
+
${input.marker}
|
|
12258
|
+
${input.content}
|
|
12259
|
+
`;
|
|
12260
|
+
}
|
|
12261
|
+
|
|
12237
12262
|
// packages/contracts/src/structured-config.ts
|
|
12238
12263
|
import { existsSync, readFileSync as readFileSync4 } from "node:fs";
|
|
12239
12264
|
import { parse as parse2, stringify } from "yaml";
|
|
@@ -12266,6 +12291,7 @@ function planProjection(artifact, runtimeId, scope, negotiations) {
|
|
|
12266
12291
|
id: `materialize:${n4.intent}`,
|
|
12267
12292
|
artifactId: artifact.id,
|
|
12268
12293
|
logicalDestination: `${n4.intent}/${artifact.id}`,
|
|
12294
|
+
description: artifact.title,
|
|
12269
12295
|
content: artifact.operationalContract ? renderOperationalSkillContract(artifact.operationalContract) : artifact.title
|
|
12270
12296
|
});
|
|
12271
12297
|
for (const resource2 of artifact.resourceFiles ?? [])
|
|
@@ -12301,14 +12327,14 @@ function planProjection(artifact, runtimeId, scope, negotiations) {
|
|
|
12301
12327
|
|
|
12302
12328
|
// packages/compiler/src/planning/plan-installation.ts
|
|
12303
12329
|
import { createHash as createHash6 } from "node:crypto";
|
|
12304
|
-
function planInstallation(plan, descriptor) {
|
|
12330
|
+
function planInstallation(plan, descriptor, runtimeVersion) {
|
|
12305
12331
|
const operations = [];
|
|
12306
12332
|
for (const op of plan.operations) {
|
|
12307
12333
|
if (op.kind === "MaterializeArtifact") {
|
|
12308
12334
|
const location = descriptor.locations.find(
|
|
12309
|
-
(x) => x.scope === plan.scope && (x.artifactKind === "skill" || x.artifactKind === op.logicalDestination.split("/")[0])
|
|
12335
|
+
(x) => x.scope === plan.scope && (x.artifactKind === "skill" || x.artifactKind === op.logicalDestination.split("/")[0]) && (!x.versionRange || isRuntimeVersionInRange(x.versionRange, runtimeVersion))
|
|
12310
12336
|
);
|
|
12311
|
-
if (!location
|
|
12337
|
+
if (!location?.pathTemplate || location.installation === "manual") {
|
|
12312
12338
|
operations.push({
|
|
12313
12339
|
kind: "EmitManualStep",
|
|
12314
12340
|
id: `manual:${op.id}`,
|
|
@@ -12336,14 +12362,15 @@ function planInstallation(plan, descriptor) {
|
|
|
12336
12362
|
uninstall: "remove-owned-only",
|
|
12337
12363
|
ownershipIntent: "own",
|
|
12338
12364
|
destination: `${location.pathTemplate}/${op.logicalDestination}`,
|
|
12365
|
+
description: op.description,
|
|
12339
12366
|
content: op.content
|
|
12340
12367
|
});
|
|
12341
12368
|
}
|
|
12342
12369
|
if (op.kind === "IncludeResource") {
|
|
12343
12370
|
const location = descriptor.locations.find(
|
|
12344
|
-
(candidate) => candidate.scope === plan.scope && candidate.artifactKind === "skill"
|
|
12371
|
+
(candidate) => candidate.scope === plan.scope && candidate.artifactKind === "skill" && (!candidate.versionRange || isRuntimeVersionInRange(candidate.versionRange, runtimeVersion))
|
|
12345
12372
|
);
|
|
12346
|
-
if (!location
|
|
12373
|
+
if (!location?.pathTemplate || location.installation === "manual") {
|
|
12347
12374
|
operations.push({
|
|
12348
12375
|
kind: "EmitManualStep",
|
|
12349
12376
|
id: `manual:${op.id}`,
|
|
@@ -12415,7 +12442,7 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
|
|
|
12415
12442
|
request.runtimeVersion
|
|
12416
12443
|
);
|
|
12417
12444
|
const projectionPlan = planProjection(artifact, descriptor.id, request.scope, negotiations);
|
|
12418
|
-
const baseInstallationPlan = planInstallation(projectionPlan, descriptor);
|
|
12445
|
+
const baseInstallationPlan = planInstallation(projectionPlan, descriptor, request.runtimeVersion);
|
|
12419
12446
|
const mutatingIntent = request.intent === "setup" || request.intent === "update";
|
|
12420
12447
|
let installationPlan = mutatingIntent ? baseInstallationPlan : { ...baseInstallationPlan, operations: [] };
|
|
12421
12448
|
if (request.intent === "remove") {
|
|
@@ -12486,7 +12513,7 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
|
|
|
12486
12513
|
approvals: request.approvalPolicy === "preapproved" ? [] : approvals,
|
|
12487
12514
|
manualSteps: installationPlan.operations.filter((operation) => operation.kind === "EmitManualStep").map((operation) => operation.id),
|
|
12488
12515
|
verificationExpectations: projectionPlan.operations.filter((operation) => operation.kind === "ExpectVerification").map((operation) => operation.expectation),
|
|
12489
|
-
nativeUsageInputs: negotiations.
|
|
12516
|
+
nativeUsageInputs: negotiations.flatMap(({ surfaceId }) => surfaceId ? [surfaceId] : [])
|
|
12490
12517
|
};
|
|
12491
12518
|
}
|
|
12492
12519
|
|
|
@@ -12601,9 +12628,9 @@ async function resolveVerifiedCapabilityEntrypoint(options) {
|
|
|
12601
12628
|
}
|
|
12602
12629
|
|
|
12603
12630
|
// packages/cli/src/release.ts
|
|
12604
|
-
var cliVersion = true ? "0.1.
|
|
12631
|
+
var cliVersion = true ? "0.1.9" : createRequire(import.meta.url)("../../../package.json").version;
|
|
12605
12632
|
|
|
12606
|
-
// packages/adapters/antigravity/
|
|
12633
|
+
// packages/adapters/src/antigravity/materialize.ts
|
|
12607
12634
|
import { resolve as resolve4 } from "node:path";
|
|
12608
12635
|
var marker = "<!-- portable-capabilities:owned antigravity -->";
|
|
12609
12636
|
function destination(value) {
|
|
@@ -12634,15 +12661,15 @@ function diagnostic(operation, kind, message) {
|
|
|
12634
12661
|
}
|
|
12635
12662
|
function render(operation) {
|
|
12636
12663
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
12637
|
-
|
|
12664
|
+
const name = skill?.[1];
|
|
12665
|
+
if (!name) return `${marker}
|
|
12638
12666
|
${operation.content}`;
|
|
12639
|
-
return
|
|
12640
|
-
name
|
|
12641
|
-
description:
|
|
12642
|
-
|
|
12643
|
-
|
|
12644
|
-
|
|
12645
|
-
`;
|
|
12667
|
+
return renderSkillDocument({
|
|
12668
|
+
name,
|
|
12669
|
+
description: operation.description,
|
|
12670
|
+
marker,
|
|
12671
|
+
content: operation.content
|
|
12672
|
+
});
|
|
12646
12673
|
}
|
|
12647
12674
|
function registration(operation) {
|
|
12648
12675
|
return `${JSON.stringify({ adapterId: operation.adapterId, kind: operation.kind, target: operation.target }, null, 2)}
|
|
@@ -12751,7 +12778,7 @@ function prepareAntigravityMaterialization(plan, root) {
|
|
|
12751
12778
|
});
|
|
12752
12779
|
}
|
|
12753
12780
|
|
|
12754
|
-
// packages/adapters/antigravity/
|
|
12781
|
+
// packages/adapters/src/antigravity/runtime-descriptor.ts
|
|
12755
12782
|
var markdown = "materialize-markdown";
|
|
12756
12783
|
var plugin = "antigravity-plugin-registration";
|
|
12757
12784
|
var hook = "antigravity-hook-registration";
|
|
@@ -12944,7 +12971,7 @@ var antigravityRuntimeDescriptor = {
|
|
|
12944
12971
|
]
|
|
12945
12972
|
};
|
|
12946
12973
|
|
|
12947
|
-
// packages/adapters/antigravity/
|
|
12974
|
+
// packages/adapters/src/antigravity/runtime-evidence.ts
|
|
12948
12975
|
import { createHash as createHash9 } from "node:crypto";
|
|
12949
12976
|
var digest2 = (value) => createHash9("sha256").update(value).digest("hex");
|
|
12950
12977
|
var retrievedAt = "2026-08-10T00:00:00.000Z";
|
|
@@ -13092,7 +13119,7 @@ var antigravityRuntimeEvidence = [
|
|
|
13092
13119
|
)
|
|
13093
13120
|
];
|
|
13094
13121
|
|
|
13095
|
-
// packages/adapters/claude-code/
|
|
13122
|
+
// packages/adapters/src/claude-code/materialize.ts
|
|
13096
13123
|
import { resolve as resolve5 } from "node:path";
|
|
13097
13124
|
var marker2 = "<!-- portable-capabilities:owned claude-code -->";
|
|
13098
13125
|
function destination2(value) {
|
|
@@ -13127,15 +13154,15 @@ function diagnostic2(operation, kind, message) {
|
|
|
13127
13154
|
}
|
|
13128
13155
|
function render2(operation) {
|
|
13129
13156
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
13130
|
-
|
|
13157
|
+
const name = skill?.[1];
|
|
13158
|
+
if (!name) return `${marker2}
|
|
13131
13159
|
${operation.content}`;
|
|
13132
|
-
return
|
|
13133
|
-
name
|
|
13134
|
-
description:
|
|
13135
|
-
|
|
13136
|
-
|
|
13137
|
-
|
|
13138
|
-
`;
|
|
13160
|
+
return renderSkillDocument({
|
|
13161
|
+
name,
|
|
13162
|
+
description: operation.description,
|
|
13163
|
+
marker: marker2,
|
|
13164
|
+
content: operation.content
|
|
13165
|
+
});
|
|
13139
13166
|
}
|
|
13140
13167
|
function config(operation, root, path9) {
|
|
13141
13168
|
if (operation.format !== "json")
|
|
@@ -13249,7 +13276,7 @@ function prepareClaudeCodeMaterialization(plan, root) {
|
|
|
13249
13276
|
});
|
|
13250
13277
|
}
|
|
13251
13278
|
|
|
13252
|
-
// packages/adapters/claude-code/
|
|
13279
|
+
// packages/adapters/src/claude-code/runtime-descriptor.ts
|
|
13253
13280
|
var markdown2 = "materialize-markdown";
|
|
13254
13281
|
var claudeCodeRuntimeDescriptor = {
|
|
13255
13282
|
schemaVersion: "1.0",
|
|
@@ -13451,7 +13478,7 @@ var claudeCodeRuntimeDescriptor = {
|
|
|
13451
13478
|
]
|
|
13452
13479
|
};
|
|
13453
13480
|
|
|
13454
|
-
// packages/adapters/claude-code/
|
|
13481
|
+
// packages/adapters/src/claude-code/runtime-evidence.ts
|
|
13455
13482
|
import { createHash as createHash10 } from "node:crypto";
|
|
13456
13483
|
var digest3 = (value) => createHash10("sha256").update(value).digest("hex");
|
|
13457
13484
|
var retrievedAt2 = "2026-08-10T00:00:00.000Z";
|
|
@@ -13622,18 +13649,20 @@ var claudeCodeRuntimeEvidence = Object.freeze([
|
|
|
13622
13649
|
}))
|
|
13623
13650
|
]);
|
|
13624
13651
|
|
|
13625
|
-
// packages/adapters/codex/
|
|
13652
|
+
// packages/adapters/src/codex/materialize.ts
|
|
13626
13653
|
import { resolve as resolve6 } from "node:path";
|
|
13627
13654
|
var marker3 = "<!-- portable-capabilities:owned codex -->";
|
|
13628
13655
|
function destination3(value) {
|
|
13629
13656
|
const project = value.match(/^\.codex\/skills\/skill\/(.+)$/);
|
|
13630
13657
|
if (project) return `.codex/skills/${project[1]}/SKILL.md`;
|
|
13658
|
+
const currentProject = value.match(/^\.agents\/skills\/skill\/(.+)$/);
|
|
13659
|
+
if (currentProject) return `.agents/skills/${currentProject[1]}/SKILL.md`;
|
|
13631
13660
|
const user = value.match(/^\$CODEX_HOME\/skills\/skill\/(.+)$/);
|
|
13632
13661
|
if (user) return `.codex-user/skills/${user[1]}/SKILL.md`;
|
|
13633
13662
|
return value.replace(/^\$CODEX_HOME\//, ".codex-user/");
|
|
13634
13663
|
}
|
|
13635
13664
|
function resourceDestination3(value) {
|
|
13636
|
-
return value.replace(/^\.codex\/skills\/skill\//u, ".codex/skills/").replace(/^\$CODEX_HOME\/skills\/skill\//u, ".codex-user/skills/");
|
|
13665
|
+
return value.replace(/^\.codex\/skills\/skill\//u, ".codex/skills/").replace(/^\.agents\/skills\/skill\//u, ".agents/skills/").replace(/^\$CODEX_HOME\/skills\/skill\//u, ".codex-user/skills/");
|
|
13637
13666
|
}
|
|
13638
13667
|
function confined3(root, path9) {
|
|
13639
13668
|
const target = resolve6(root, path9);
|
|
@@ -13643,15 +13672,15 @@ function confined3(root, path9) {
|
|
|
13643
13672
|
}
|
|
13644
13673
|
function render3(operation) {
|
|
13645
13674
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
13646
|
-
|
|
13675
|
+
const name = skill?.[1];
|
|
13676
|
+
if (!name) return `${marker3}
|
|
13647
13677
|
${operation.content}`;
|
|
13648
|
-
return
|
|
13649
|
-
name
|
|
13650
|
-
description:
|
|
13651
|
-
|
|
13652
|
-
|
|
13653
|
-
|
|
13654
|
-
`;
|
|
13678
|
+
return renderSkillDocument({
|
|
13679
|
+
name,
|
|
13680
|
+
description: operation.description,
|
|
13681
|
+
marker: marker3,
|
|
13682
|
+
content: operation.content
|
|
13683
|
+
});
|
|
13655
13684
|
}
|
|
13656
13685
|
function transform(operation) {
|
|
13657
13686
|
if (operation.format !== "json")
|
|
@@ -13715,25 +13744,48 @@ function prepareCodexMaterialization(plan, root, ..._options) {
|
|
|
13715
13744
|
});
|
|
13716
13745
|
}
|
|
13717
13746
|
|
|
13718
|
-
// packages/adapters/codex/
|
|
13747
|
+
// packages/adapters/src/codex/runtime-descriptor.ts
|
|
13719
13748
|
var codexRuntimeDescriptor = {
|
|
13720
13749
|
schemaVersion: "1.0",
|
|
13721
13750
|
id: "codex",
|
|
13722
13751
|
aliases: ["codex-cli"],
|
|
13723
|
-
supportedVersions: ["
|
|
13752
|
+
supportedVersions: ["=0.146.0", ">=0.147.0 <0.148.0"],
|
|
13724
13753
|
locations: [
|
|
13725
13754
|
{
|
|
13726
|
-
id: "codex-project-skills",
|
|
13755
|
+
id: "codex-project-skills-0146",
|
|
13727
13756
|
artifactKind: "skill",
|
|
13728
13757
|
scope: "project",
|
|
13729
13758
|
pathTemplate: ".codex/skills",
|
|
13730
13759
|
evidenceClaimIds: ["codex.location.project-skills"],
|
|
13760
|
+
versionRange: "=0.146.0",
|
|
13731
13761
|
installation: "automatic",
|
|
13732
13762
|
registration: "discovery",
|
|
13733
13763
|
uninstall: "automatic"
|
|
13734
13764
|
},
|
|
13735
13765
|
{
|
|
13736
|
-
id: "codex-
|
|
13766
|
+
id: "codex-project-skills-0147",
|
|
13767
|
+
artifactKind: "skill",
|
|
13768
|
+
scope: "project",
|
|
13769
|
+
pathTemplate: ".agents/skills",
|
|
13770
|
+
evidenceClaimIds: ["codex.location.project-skills-agents"],
|
|
13771
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
13772
|
+
installation: "automatic",
|
|
13773
|
+
registration: "discovery",
|
|
13774
|
+
uninstall: "automatic"
|
|
13775
|
+
},
|
|
13776
|
+
{
|
|
13777
|
+
id: "codex-user-skills-0147",
|
|
13778
|
+
artifactKind: "skill",
|
|
13779
|
+
scope: "user",
|
|
13780
|
+
pathTemplate: ".agents/skills",
|
|
13781
|
+
evidenceClaimIds: ["codex.location.user-skills-agents"],
|
|
13782
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
13783
|
+
installation: "automatic",
|
|
13784
|
+
registration: "discovery",
|
|
13785
|
+
uninstall: "automatic"
|
|
13786
|
+
},
|
|
13787
|
+
{
|
|
13788
|
+
id: "codex-user-skills-0146",
|
|
13737
13789
|
artifactKind: "skill",
|
|
13738
13790
|
scope: "user",
|
|
13739
13791
|
pathTemplate: "$CODEX_HOME/skills",
|
|
@@ -13746,16 +13798,30 @@ var codexRuntimeDescriptor = {
|
|
|
13746
13798
|
],
|
|
13747
13799
|
surfaces: [
|
|
13748
13800
|
{
|
|
13749
|
-
id: "codex-direct-skill",
|
|
13801
|
+
id: "codex-direct-skill-0146",
|
|
13750
13802
|
semanticKind: "skill",
|
|
13751
13803
|
integrationMode: "declarative",
|
|
13752
13804
|
adapterId: "materialize-markdown",
|
|
13753
|
-
discovery: "Codex discovers project
|
|
13754
|
-
invocation: "Invoke the installed skill through Codex
|
|
13805
|
+
discovery: "Codex 0.146.x discovers project skills from .codex/skills.",
|
|
13806
|
+
invocation: "Invoke the installed skill through Codex 0.146.x native skill selection.",
|
|
13755
13807
|
precedence: ["project", "user"],
|
|
13756
13808
|
evidenceClaimIds: ["codex.discovery.skills", "codex.invocation.skills"],
|
|
13757
|
-
|
|
13809
|
+
versionRange: "=0.146.0",
|
|
13810
|
+
stability: "version-gated",
|
|
13758
13811
|
evidenceState: "runtime-observed"
|
|
13812
|
+
},
|
|
13813
|
+
{
|
|
13814
|
+
id: "codex-direct-skill-0147",
|
|
13815
|
+
semanticKind: "skill",
|
|
13816
|
+
integrationMode: "declarative",
|
|
13817
|
+
adapterId: "materialize-markdown",
|
|
13818
|
+
discovery: "Codex 0.147.x discovers project skills from .agents/skills.",
|
|
13819
|
+
invocation: "Invoke the installed skill through Codex 0.147.x native skill selection.",
|
|
13820
|
+
precedence: ["project", "user"],
|
|
13821
|
+
evidenceClaimIds: ["codex.discovery.skills-0147", "codex.invocation.skills-0147"],
|
|
13822
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
13823
|
+
stability: "version-gated",
|
|
13824
|
+
evidenceState: "source-observed"
|
|
13759
13825
|
}
|
|
13760
13826
|
],
|
|
13761
13827
|
configuration: [],
|
|
@@ -13765,10 +13831,37 @@ var codexRuntimeDescriptor = {
|
|
|
13765
13831
|
degradation: []
|
|
13766
13832
|
};
|
|
13767
13833
|
|
|
13768
|
-
// packages/adapters/codex/
|
|
13834
|
+
// packages/adapters/src/codex/runtime-evidence.ts
|
|
13769
13835
|
import { createHash as createHash11 } from "node:crypto";
|
|
13770
13836
|
var digest4 = (value) => createHash11("sha256").update(value).digest("hex");
|
|
13771
13837
|
var observedAt = "2026-08-08T00:00:00.000Z";
|
|
13838
|
+
var sourceObservedAt = "2026-08-15T00:00:00.000Z";
|
|
13839
|
+
var codexSource = "https://github.com/openai/codex";
|
|
13840
|
+
var codexSkillRootsSource = "https://github.com/openai/codex/blob/53f3fa749659498fa24c81da8fde5440fa7bba7f/codex-rs/ext/skills/src/host_roots.rs";
|
|
13841
|
+
var codexCurrentRange = ">=0.147.0 <0.148.0";
|
|
13842
|
+
var projectSkillRootExcerpt = 'const AGENTS_DIR_NAME: &str = ".agents";\nconst SKILLS_DIR_NAME: &str = "skills";';
|
|
13843
|
+
var userSkillRootExcerpt = "home_dir.join(AGENTS_DIR_NAME).join(SKILLS_DIR_NAME), SkillScope::User";
|
|
13844
|
+
var discoveryExcerpt = "let agents_skills = directory.join(AGENTS_DIR_NAME).join(SKILLS_DIR_NAME);";
|
|
13845
|
+
var invocationExcerpt = 'UserInput::Skill {\n name: "demo".to_string(),';
|
|
13846
|
+
var sourceClaim2 = (id, subject, assertion, sourceLocator, sourceExcerpt) => ({
|
|
13847
|
+
schemaVersion: "1.0",
|
|
13848
|
+
id,
|
|
13849
|
+
runtimeId: "codex",
|
|
13850
|
+
category: id.includes("location") ? "location" : id.includes("discovery") ? "discovery" : "invocation",
|
|
13851
|
+
subject,
|
|
13852
|
+
assertion,
|
|
13853
|
+
versionRange: codexCurrentRange,
|
|
13854
|
+
sourceType: "official-source",
|
|
13855
|
+
source: codexSource,
|
|
13856
|
+
sourceLocator,
|
|
13857
|
+
sourceExcerpt,
|
|
13858
|
+
sourceDigest: digest4(sourceExcerpt),
|
|
13859
|
+
state: "source-observed",
|
|
13860
|
+
confidence: "high",
|
|
13861
|
+
verificationStatus: "verified",
|
|
13862
|
+
stability: "version-gated",
|
|
13863
|
+
verifiedAt: sourceObservedAt
|
|
13864
|
+
});
|
|
13772
13865
|
var codexRuntimeEvidence = Object.freeze([
|
|
13773
13866
|
{
|
|
13774
13867
|
schemaVersion: "1.0",
|
|
@@ -13776,54 +13869,82 @@ var codexRuntimeEvidence = Object.freeze([
|
|
|
13776
13869
|
runtimeId: "codex",
|
|
13777
13870
|
category: "location",
|
|
13778
13871
|
subject: "project skill root",
|
|
13779
|
-
assertion: "Codex project skills are materialized beneath .codex/skills.",
|
|
13780
|
-
versionRange: "
|
|
13872
|
+
assertion: "Codex 0.146.x project skills are materialized beneath .codex/skills.",
|
|
13873
|
+
versionRange: "=0.146.0",
|
|
13781
13874
|
sourceType: "runtime-probe",
|
|
13782
13875
|
source: "codex-cli",
|
|
13783
|
-
sourceLocator: "native
|
|
13876
|
+
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
13784
13877
|
sourceExcerpt: ".codex/skills",
|
|
13785
|
-
sourceDigest: digest4("codex project skills .codex/skills"),
|
|
13878
|
+
sourceDigest: digest4("codex 0.146 project skills .codex/skills"),
|
|
13786
13879
|
state: "runtime-observed",
|
|
13787
13880
|
confidence: "high",
|
|
13788
13881
|
verificationStatus: "verified",
|
|
13789
|
-
stability: "
|
|
13882
|
+
stability: "version-gated",
|
|
13790
13883
|
verifiedAt: observedAt
|
|
13791
13884
|
},
|
|
13885
|
+
sourceClaim2(
|
|
13886
|
+
"codex.location.project-skills-agents",
|
|
13887
|
+
"project skill root",
|
|
13888
|
+
"Codex 0.147.x project skills are discovered beneath .agents/skills.",
|
|
13889
|
+
`${codexSkillRootsSource}#L92-L101`,
|
|
13890
|
+
projectSkillRootExcerpt
|
|
13891
|
+
),
|
|
13892
|
+
sourceClaim2(
|
|
13893
|
+
"codex.location.user-skills-agents",
|
|
13894
|
+
"user skill root",
|
|
13895
|
+
"Codex 0.147.x user skills are discovered beneath ~/.agents/skills.",
|
|
13896
|
+
`${codexSkillRootsSource}#L107-L119`,
|
|
13897
|
+
userSkillRootExcerpt
|
|
13898
|
+
),
|
|
13792
13899
|
{
|
|
13793
13900
|
schemaVersion: "1.0",
|
|
13794
13901
|
id: "codex.location.user-skills",
|
|
13795
13902
|
runtimeId: "codex",
|
|
13796
13903
|
category: "location",
|
|
13797
13904
|
subject: "user skill root",
|
|
13798
|
-
assertion: "Codex user skills are materialized beneath CODEX_HOME/skills.",
|
|
13799
|
-
versionRange: "
|
|
13905
|
+
assertion: "Codex 0.146.x user skills are materialized beneath CODEX_HOME/skills.",
|
|
13906
|
+
versionRange: "=0.146.0",
|
|
13800
13907
|
sourceType: "runtime-probe",
|
|
13801
13908
|
source: "codex-cli",
|
|
13802
13909
|
sourceLocator: "native vertical tracer",
|
|
13803
13910
|
sourceExcerpt: "CODEX_HOME/skills",
|
|
13804
|
-
sourceDigest: digest4("codex user skills CODEX_HOME/skills"),
|
|
13911
|
+
sourceDigest: digest4("codex 0.146 user skills CODEX_HOME/skills"),
|
|
13805
13912
|
state: "runtime-observed",
|
|
13806
13913
|
confidence: "high",
|
|
13807
13914
|
verificationStatus: "verified",
|
|
13808
|
-
stability: "
|
|
13915
|
+
stability: "version-gated",
|
|
13809
13916
|
verifiedAt: observedAt
|
|
13810
13917
|
},
|
|
13918
|
+
sourceClaim2(
|
|
13919
|
+
"codex.discovery.skills-0147",
|
|
13920
|
+
"native skill discovery",
|
|
13921
|
+
"Codex 0.147.x discovers Agent Skills from .agents/skills.",
|
|
13922
|
+
`${codexSkillRootsSource}#L139-L161`,
|
|
13923
|
+
discoveryExcerpt
|
|
13924
|
+
),
|
|
13925
|
+
sourceClaim2(
|
|
13926
|
+
"codex.invocation.skills-0147",
|
|
13927
|
+
"native skill invocation",
|
|
13928
|
+
"Codex 0.147.x invokes a discovered Agent Skill through its native skill selection.",
|
|
13929
|
+
"https://github.com/openai/codex/blob/53f3fa749659498fa24c81da8fde5440fa7bba7f/codex-rs/core/tests/suite/skills.rs",
|
|
13930
|
+
invocationExcerpt
|
|
13931
|
+
),
|
|
13811
13932
|
{
|
|
13812
13933
|
schemaVersion: "1.0",
|
|
13813
13934
|
id: "codex.discovery.skills",
|
|
13814
13935
|
runtimeId: "codex",
|
|
13815
13936
|
category: "discovery",
|
|
13816
13937
|
subject: "native skill discovery",
|
|
13817
|
-
assertion: "Codex natively discovers a skill installed in its project skill root.",
|
|
13818
|
-
versionRange: "
|
|
13938
|
+
assertion: "Codex 0.146.x natively discovers a skill installed in its project skill root.",
|
|
13939
|
+
versionRange: "=0.146.0",
|
|
13819
13940
|
sourceType: "runtime-probe",
|
|
13820
13941
|
source: "codex-cli",
|
|
13821
13942
|
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
13822
|
-
sourceDigest: digest4("codex native discovery"),
|
|
13943
|
+
sourceDigest: digest4("codex 0.146 native discovery"),
|
|
13823
13944
|
state: "runtime-observed",
|
|
13824
13945
|
confidence: "high",
|
|
13825
13946
|
verificationStatus: "verified",
|
|
13826
|
-
stability: "
|
|
13947
|
+
stability: "version-gated",
|
|
13827
13948
|
verifiedAt: observedAt
|
|
13828
13949
|
},
|
|
13829
13950
|
{
|
|
@@ -13832,21 +13953,21 @@ var codexRuntimeEvidence = Object.freeze([
|
|
|
13832
13953
|
runtimeId: "codex",
|
|
13833
13954
|
category: "invocation",
|
|
13834
13955
|
subject: "native skill invocation",
|
|
13835
|
-
assertion: "Codex can invoke an installed skill through the native client.",
|
|
13836
|
-
versionRange: "
|
|
13956
|
+
assertion: "Codex 0.146.x can invoke an installed skill through the native client.",
|
|
13957
|
+
versionRange: "=0.146.0",
|
|
13837
13958
|
sourceType: "runtime-probe",
|
|
13838
13959
|
source: "codex-cli",
|
|
13839
13960
|
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
13840
|
-
sourceDigest: digest4("codex native invocation"),
|
|
13961
|
+
sourceDigest: digest4("codex 0.146 native invocation"),
|
|
13841
13962
|
state: "runtime-observed",
|
|
13842
13963
|
confidence: "high",
|
|
13843
13964
|
verificationStatus: "verified",
|
|
13844
|
-
stability: "
|
|
13965
|
+
stability: "version-gated",
|
|
13845
13966
|
verifiedAt: observedAt
|
|
13846
13967
|
}
|
|
13847
13968
|
]);
|
|
13848
13969
|
|
|
13849
|
-
// packages/adapters/dcode/
|
|
13970
|
+
// packages/adapters/src/dcode/materialize.ts
|
|
13850
13971
|
import { resolve as resolve7 } from "node:path";
|
|
13851
13972
|
var marker4 = "<!-- portable-capabilities:owned dcode -->";
|
|
13852
13973
|
function destination4(value) {
|
|
@@ -13878,15 +13999,15 @@ function diagnostic3(operation, kind, message) {
|
|
|
13878
13999
|
}
|
|
13879
14000
|
function render4(operation) {
|
|
13880
14001
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
13881
|
-
|
|
14002
|
+
const name = skill?.[1];
|
|
14003
|
+
if (!name) return `${marker4}
|
|
13882
14004
|
${operation.content}`;
|
|
13883
|
-
return
|
|
13884
|
-
name
|
|
13885
|
-
description:
|
|
13886
|
-
|
|
13887
|
-
|
|
13888
|
-
|
|
13889
|
-
`;
|
|
14005
|
+
return renderSkillDocument({
|
|
14006
|
+
name,
|
|
14007
|
+
description: operation.description,
|
|
14008
|
+
marker: marker4,
|
|
14009
|
+
content: operation.content
|
|
14010
|
+
});
|
|
13890
14011
|
}
|
|
13891
14012
|
function registration3(operation) {
|
|
13892
14013
|
return `${JSON.stringify({ adapterId: operation.adapterId, kind: operation.kind, target: operation.target }, null, 2)}
|
|
@@ -14025,7 +14146,7 @@ ${content}
|
|
|
14025
14146
|
});
|
|
14026
14147
|
}
|
|
14027
14148
|
|
|
14028
|
-
// packages/adapters/dcode/
|
|
14149
|
+
// packages/adapters/src/dcode/runtime-descriptor.ts
|
|
14029
14150
|
var markdown3 = "materialize-markdown";
|
|
14030
14151
|
var source2 = "source-observed";
|
|
14031
14152
|
var dcodeRuntimeDescriptor = {
|
|
@@ -14230,7 +14351,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
14230
14351
|
]
|
|
14231
14352
|
};
|
|
14232
14353
|
|
|
14233
|
-
// packages/adapters/dcode/
|
|
14354
|
+
// packages/adapters/src/dcode/runtime-evidence.ts
|
|
14234
14355
|
import { createHash as createHash12 } from "node:crypto";
|
|
14235
14356
|
var digest5 = (value) => createHash12("sha256").update(value).digest("hex");
|
|
14236
14357
|
var verifiedAt = "2026-08-10T00:00:00.000Z";
|
|
@@ -14413,7 +14534,7 @@ var dcodeRuntimeEvidence = Object.freeze([
|
|
|
14413
14534
|
})
|
|
14414
14535
|
]);
|
|
14415
14536
|
|
|
14416
|
-
// packages/adapters/oh-my-pi/
|
|
14537
|
+
// packages/adapters/src/oh-my-pi/materialize.ts
|
|
14417
14538
|
import { resolve as resolve8 } from "node:path";
|
|
14418
14539
|
var marker5 = "<!-- portable-capabilities:owned oh-my-pi -->";
|
|
14419
14540
|
function resolveOhMyPiProfile(input) {
|
|
@@ -14471,13 +14592,13 @@ function diagnostic4(operation, kind, message) {
|
|
|
14471
14592
|
}
|
|
14472
14593
|
function render5(operation) {
|
|
14473
14594
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
14474
|
-
|
|
14475
|
-
name
|
|
14476
|
-
|
|
14477
|
-
|
|
14478
|
-
|
|
14479
|
-
|
|
14480
|
-
|
|
14595
|
+
const name = skill?.[1];
|
|
14596
|
+
return name ? renderSkillDocument({
|
|
14597
|
+
name,
|
|
14598
|
+
description: operation.description,
|
|
14599
|
+
marker: marker5,
|
|
14600
|
+
content: operation.content
|
|
14601
|
+
}) : `${marker5}
|
|
14481
14602
|
${operation.content}`;
|
|
14482
14603
|
}
|
|
14483
14604
|
function registration4(operation) {
|
|
@@ -14586,7 +14707,7 @@ async function prepareOhMyPiMaterialization(plan, root, profile = { home: root }
|
|
|
14586
14707
|
});
|
|
14587
14708
|
}
|
|
14588
14709
|
|
|
14589
|
-
// packages/adapters/oh-my-pi/
|
|
14710
|
+
// packages/adapters/src/oh-my-pi/runtime-descriptor.ts
|
|
14590
14711
|
var markdown4 = "materialize-markdown";
|
|
14591
14712
|
var hooks = "oh-my-pi-code-as-hooks";
|
|
14592
14713
|
var config2 = "patch-structured-config";
|
|
@@ -14834,7 +14955,7 @@ var ohMyPiRuntimeDescriptor = {
|
|
|
14834
14955
|
]
|
|
14835
14956
|
};
|
|
14836
14957
|
|
|
14837
|
-
// packages/adapters/oh-my-pi/
|
|
14958
|
+
// packages/adapters/src/oh-my-pi/runtime-evidence.ts
|
|
14838
14959
|
import { createHash as createHash13 } from "node:crypto";
|
|
14839
14960
|
var digest6 = (value) => createHash13("sha256").update(value).digest("hex");
|
|
14840
14961
|
var verifiedAt2 = "2026-08-10T00:00:00.000Z";
|
|
@@ -14984,7 +15105,7 @@ var ohMyPiRuntimeEvidence = [
|
|
|
14984
15105
|
}
|
|
14985
15106
|
];
|
|
14986
15107
|
|
|
14987
|
-
// packages/adapters/opencode/
|
|
15108
|
+
// packages/adapters/src/opencode/materialize.ts
|
|
14988
15109
|
import { resolve as resolve9 } from "node:path";
|
|
14989
15110
|
var marker6 = "<!-- portable-capabilities:owned opencode -->";
|
|
14990
15111
|
function destination5(value) {
|
|
@@ -15021,15 +15142,15 @@ function diagnostic5(operation, kind, message) {
|
|
|
15021
15142
|
}
|
|
15022
15143
|
function render6(operation) {
|
|
15023
15144
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
15024
|
-
|
|
15145
|
+
const name = skill?.[1];
|
|
15146
|
+
if (!name) return `${marker6}
|
|
15025
15147
|
${operation.content}`;
|
|
15026
|
-
return
|
|
15027
|
-
name
|
|
15028
|
-
description:
|
|
15029
|
-
|
|
15030
|
-
|
|
15031
|
-
|
|
15032
|
-
`;
|
|
15148
|
+
return renderSkillDocument({
|
|
15149
|
+
name,
|
|
15150
|
+
description: operation.description,
|
|
15151
|
+
marker: marker6,
|
|
15152
|
+
content: operation.content
|
|
15153
|
+
});
|
|
15033
15154
|
}
|
|
15034
15155
|
function config3(operation, root, path9) {
|
|
15035
15156
|
if (operation.format !== "json")
|
|
@@ -15137,7 +15258,7 @@ async function prepareOpencodeMaterialization(plan, root) {
|
|
|
15137
15258
|
});
|
|
15138
15259
|
}
|
|
15139
15260
|
|
|
15140
|
-
// packages/adapters/opencode/
|
|
15261
|
+
// packages/adapters/src/opencode/runtime-descriptor.ts
|
|
15141
15262
|
var native = "opencode.stable";
|
|
15142
15263
|
var beta = "opencode.v2-beta";
|
|
15143
15264
|
var opencodeRuntimeDescriptor = {
|
|
@@ -15419,7 +15540,7 @@ var opencodeRuntimeDescriptor = {
|
|
|
15419
15540
|
]
|
|
15420
15541
|
};
|
|
15421
15542
|
|
|
15422
|
-
// packages/adapters/opencode/
|
|
15543
|
+
// packages/adapters/src/opencode/runtime-evidence.ts
|
|
15423
15544
|
import { createHash as createHash14 } from "node:crypto";
|
|
15424
15545
|
var retrievedAt3 = "2026-08-10T00:00:00.000Z";
|
|
15425
15546
|
var docs2 = "docs/RFC/runtime-capability-profiles-revised.md";
|
|
@@ -15503,14 +15624,14 @@ var sourceClaims = [
|
|
|
15503
15624
|
"discovery",
|
|
15504
15625
|
"stable skill discovery",
|
|
15505
15626
|
"OpenCode discovers native project and user skills.",
|
|
15506
|
-
"
|
|
15627
|
+
"source-observed"
|
|
15507
15628
|
],
|
|
15508
15629
|
[
|
|
15509
15630
|
"invocation.skills",
|
|
15510
15631
|
"invocation",
|
|
15511
15632
|
"stable skill invocation",
|
|
15512
15633
|
"OpenCode invokes a discovered skill through its native skill tool.",
|
|
15513
|
-
"
|
|
15634
|
+
"source-observed"
|
|
15514
15635
|
],
|
|
15515
15636
|
[
|
|
15516
15637
|
"discovery.agents",
|
|
@@ -15648,7 +15769,7 @@ var opencodeRuntimeEvidence = Object.freeze([
|
|
|
15648
15769
|
...betaClaims
|
|
15649
15770
|
]);
|
|
15650
15771
|
|
|
15651
|
-
// packages/adapters/pi/
|
|
15772
|
+
// packages/adapters/src/pi/materialize.ts
|
|
15652
15773
|
import { resolve as resolve10 } from "node:path";
|
|
15653
15774
|
var marker7 = "<!-- portable-capabilities:owned pi -->";
|
|
15654
15775
|
function destination6(value) {
|
|
@@ -15669,15 +15790,15 @@ function confined7(root, path9) {
|
|
|
15669
15790
|
}
|
|
15670
15791
|
function render7(operation) {
|
|
15671
15792
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
15672
|
-
|
|
15793
|
+
const name = skill?.[1];
|
|
15794
|
+
if (!name) return `${marker7}
|
|
15673
15795
|
${operation.content}`;
|
|
15674
|
-
return
|
|
15675
|
-
name
|
|
15676
|
-
description:
|
|
15677
|
-
|
|
15678
|
-
|
|
15679
|
-
|
|
15680
|
-
`;
|
|
15796
|
+
return renderSkillDocument({
|
|
15797
|
+
name,
|
|
15798
|
+
description: operation.description,
|
|
15799
|
+
marker: marker7,
|
|
15800
|
+
content: operation.content
|
|
15801
|
+
});
|
|
15681
15802
|
}
|
|
15682
15803
|
function transform2(operation) {
|
|
15683
15804
|
if (operation.format !== "json")
|
|
@@ -15741,7 +15862,7 @@ function preparePiMaterialization(plan, root, ..._options) {
|
|
|
15741
15862
|
});
|
|
15742
15863
|
}
|
|
15743
15864
|
|
|
15744
|
-
// packages/adapters/pi/
|
|
15865
|
+
// packages/adapters/src/pi/runtime-descriptor.ts
|
|
15745
15866
|
var piRuntimeDescriptor = {
|
|
15746
15867
|
schemaVersion: "1.0",
|
|
15747
15868
|
id: "pi",
|
|
@@ -15819,7 +15940,7 @@ var piRuntimeDescriptor = {
|
|
|
15819
15940
|
]
|
|
15820
15941
|
};
|
|
15821
15942
|
|
|
15822
|
-
// packages/adapters/pi/
|
|
15943
|
+
// packages/adapters/src/pi/runtime-evidence.ts
|
|
15823
15944
|
import { createHash as createHash15 } from "node:crypto";
|
|
15824
15945
|
var digest8 = (value) => createHash15("sha256").update(value).digest("hex");
|
|
15825
15946
|
var observedAt2 = "2026-08-08T04:24:00-05:00";
|
|
@@ -15885,7 +16006,7 @@ var piRuntimeEvidence = [
|
|
|
15885
16006
|
category: "discovery",
|
|
15886
16007
|
subject: "native skill discovery",
|
|
15887
16008
|
assertion: "Pi natively discovers a project skill with extensions disabled.",
|
|
15888
|
-
versionRange: "
|
|
16009
|
+
versionRange: "=0.64.0",
|
|
15889
16010
|
sourceType: "runtime-probe",
|
|
15890
16011
|
source: "pi",
|
|
15891
16012
|
sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
|
|
@@ -15903,7 +16024,7 @@ var piRuntimeEvidence = [
|
|
|
15903
16024
|
category: "invocation",
|
|
15904
16025
|
subject: "native skill invocation",
|
|
15905
16026
|
assertion: "Pi invokes a discovered project skill with extensions disabled.",
|
|
15906
|
-
versionRange: "
|
|
16027
|
+
versionRange: "=0.64.0",
|
|
15907
16028
|
sourceType: "runtime-probe",
|
|
15908
16029
|
source: "pi",
|
|
15909
16030
|
sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
|