@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/cli.js
CHANGED
|
@@ -3594,10 +3594,81 @@ import { parse } from "yaml";
|
|
|
3594
3594
|
import { parseDocument } from "yaml";
|
|
3595
3595
|
|
|
3596
3596
|
// packages/compiler/src/evidence/runtime-claims.ts
|
|
3597
|
+
function parseVersion(value) {
|
|
3598
|
+
const match = value.match(/(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/u);
|
|
3599
|
+
if (!match) return void 0;
|
|
3600
|
+
return {
|
|
3601
|
+
major: Number(match[1]),
|
|
3602
|
+
minor: Number(match[2]),
|
|
3603
|
+
patch: Number(match[3]),
|
|
3604
|
+
prerelease: match[4] ? match[4].split(".").map((part) => /^\d+$/u.test(part) ? Number(part) : part) : []
|
|
3605
|
+
};
|
|
3606
|
+
}
|
|
3607
|
+
function compareVersions(left, right) {
|
|
3608
|
+
for (const key of ["major", "minor", "patch"]) {
|
|
3609
|
+
if (left[key] !== right[key]) return left[key] > right[key] ? 1 : -1;
|
|
3610
|
+
}
|
|
3611
|
+
if (left.prerelease.length === 0 && right.prerelease.length === 0) return 0;
|
|
3612
|
+
if (left.prerelease.length === 0) return 1;
|
|
3613
|
+
if (right.prerelease.length === 0) return -1;
|
|
3614
|
+
for (let index = 0; index < Math.max(left.prerelease.length, right.prerelease.length); index += 1) {
|
|
3615
|
+
const leftPart = left.prerelease[index];
|
|
3616
|
+
const rightPart = right.prerelease[index];
|
|
3617
|
+
if (leftPart === void 0) return -1;
|
|
3618
|
+
if (rightPart === void 0) return 1;
|
|
3619
|
+
if (leftPart === rightPart) continue;
|
|
3620
|
+
if (typeof leftPart === "number" && typeof rightPart === "string") return -1;
|
|
3621
|
+
if (typeof leftPart === "string" && typeof rightPart === "number") return 1;
|
|
3622
|
+
return leftPart > rightPart ? 1 : -1;
|
|
3623
|
+
}
|
|
3624
|
+
return 0;
|
|
3625
|
+
}
|
|
3626
|
+
function caretUpperBound(version) {
|
|
3627
|
+
if (version.major > 0) return { major: version.major + 1, minor: 0, patch: 0, prerelease: [] };
|
|
3628
|
+
if (version.minor > 0) return { major: 0, minor: version.minor + 1, patch: 0, prerelease: [] };
|
|
3629
|
+
return { major: 0, minor: 0, patch: version.patch + 1, prerelease: [] };
|
|
3630
|
+
}
|
|
3631
|
+
function tildeUpperBound(version) {
|
|
3632
|
+
return { major: version.major, minor: version.minor + 1, patch: 0, prerelease: [] };
|
|
3633
|
+
}
|
|
3634
|
+
function matchesConstraint(actual, operator, expected) {
|
|
3635
|
+
if (actual.prerelease.length > 0 && expected.prerelease.length === 0) return false;
|
|
3636
|
+
const comparison = compareVersions(actual, expected);
|
|
3637
|
+
switch (operator ?? "=") {
|
|
3638
|
+
case ">=":
|
|
3639
|
+
return comparison >= 0;
|
|
3640
|
+
case "<=":
|
|
3641
|
+
return comparison <= 0;
|
|
3642
|
+
case ">":
|
|
3643
|
+
return comparison > 0;
|
|
3644
|
+
case "<":
|
|
3645
|
+
return comparison < 0;
|
|
3646
|
+
case "^":
|
|
3647
|
+
return comparison >= 0 && compareVersions(actual, caretUpperBound(expected)) < 0;
|
|
3648
|
+
case "~":
|
|
3649
|
+
return comparison >= 0 && compareVersions(actual, tildeUpperBound(expected)) < 0;
|
|
3650
|
+
default:
|
|
3651
|
+
return comparison === 0;
|
|
3652
|
+
}
|
|
3653
|
+
}
|
|
3654
|
+
function isRuntimeVersionInRange(range, runtimeVersion) {
|
|
3655
|
+
const normalizedRange = range.trim();
|
|
3656
|
+
if (normalizedRange === "*") return true;
|
|
3657
|
+
const actual = parseVersion(runtimeVersion);
|
|
3658
|
+
if (!actual) return false;
|
|
3659
|
+
const expression = normalizedRange.includes(";") ? normalizedRange.slice(normalizedRange.lastIndexOf(";") + 1).trim() : normalizedRange;
|
|
3660
|
+
const constraints = expression.split(/\s+/u).map((token) => {
|
|
3661
|
+
const match = token.match(/^(>=|<=|>|<|=|\^|~)?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/u);
|
|
3662
|
+
if (!match || !match[2]) return void 0;
|
|
3663
|
+
const version = parseVersion(match[2]);
|
|
3664
|
+
return version ? { operator: match[1], version } : void 0;
|
|
3665
|
+
});
|
|
3666
|
+
return constraints.length > 0 && constraints.every(
|
|
3667
|
+
(constraint) => constraint?.version && matchesConstraint(actual, constraint.operator, constraint.version)
|
|
3668
|
+
);
|
|
3669
|
+
}
|
|
3597
3670
|
function resolveRuntimeEvidence(claim4, runtimeVersion) {
|
|
3598
|
-
const
|
|
3599
|
-
const runtimeMajor = runtimeVersion.match(/^\d+/)?.[0];
|
|
3600
|
-
const applicable = claim4.versionRange === "*" || rangeMajor !== void 0 && rangeMajor === runtimeMajor;
|
|
3671
|
+
const applicable = isRuntimeVersionInRange(claim4.versionRange, runtimeVersion);
|
|
3601
3672
|
const sufficientState = ["documented", "source-observed", "runtime-observed"].includes(
|
|
3602
3673
|
claim4.state
|
|
3603
3674
|
);
|
|
@@ -3615,85 +3686,26 @@ function resolveRuntimeEvidence(claim4, runtimeVersion) {
|
|
|
3615
3686
|
}
|
|
3616
3687
|
|
|
3617
3688
|
// packages/compiler/src/negotiation/adapter-registry.ts
|
|
3618
|
-
var
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
purityClass: "planned-effect",
|
|
3630
|
-
effectClass: "configuration",
|
|
3631
|
-
requiredEvidenceCategories: ["configuration"]
|
|
3632
|
-
},
|
|
3633
|
-
{
|
|
3634
|
-
id: "pi-extension-registration",
|
|
3635
|
-
operationKinds: ["InstallExtension"],
|
|
3636
|
-
purityClass: "planned-effect",
|
|
3637
|
-
effectClass: "registration",
|
|
3638
|
-
requiredEvidenceCategories: ["configuration"]
|
|
3639
|
-
},
|
|
3640
|
-
{
|
|
3641
|
-
id: "oh-my-pi-code-as-hooks",
|
|
3642
|
-
operationKinds: ["InstallExtension"],
|
|
3643
|
-
purityClass: "planned-effect",
|
|
3644
|
-
effectClass: "registration",
|
|
3645
|
-
requiredEvidenceCategories: ["hooks", "configuration"]
|
|
3646
|
-
},
|
|
3647
|
-
{
|
|
3648
|
-
id: "antigravity-plugin-registration",
|
|
3649
|
-
operationKinds: ["RegisterPlugin"],
|
|
3650
|
-
purityClass: "planned-effect",
|
|
3651
|
-
effectClass: "registration",
|
|
3652
|
-
requiredEvidenceCategories: ["plugin", "location"]
|
|
3653
|
-
},
|
|
3654
|
-
{
|
|
3655
|
-
id: "antigravity-hook-registration",
|
|
3656
|
-
operationKinds: ["RegisterHook"],
|
|
3657
|
-
purityClass: "planned-effect",
|
|
3658
|
-
effectClass: "registration",
|
|
3659
|
-
requiredEvidenceCategories: ["hooks", "location"]
|
|
3660
|
-
},
|
|
3661
|
-
{
|
|
3662
|
-
id: "antigravity-mcp-registration",
|
|
3663
|
-
operationKinds: ["RegisterMcpServer"],
|
|
3664
|
-
purityClass: "planned-effect",
|
|
3665
|
-
effectClass: "registration",
|
|
3666
|
-
requiredEvidenceCategories: ["mcp", "location"]
|
|
3667
|
-
},
|
|
3668
|
-
{
|
|
3669
|
-
id: "opencode-custom-tool",
|
|
3670
|
-
operationKinds: ["InstallExtension"],
|
|
3671
|
-
purityClass: "planned-effect",
|
|
3672
|
-
effectClass: "registration",
|
|
3673
|
-
requiredEvidenceCategories: ["location", "discovery"]
|
|
3674
|
-
},
|
|
3675
|
-
{
|
|
3676
|
-
id: "opencode-plugin",
|
|
3677
|
-
operationKinds: ["RegisterPlugin"],
|
|
3678
|
-
purityClass: "planned-effect",
|
|
3679
|
-
effectClass: "registration",
|
|
3680
|
-
requiredEvidenceCategories: ["plugin", "discovery"]
|
|
3681
|
-
}
|
|
3682
|
-
];
|
|
3683
|
-
var adapterRegistry = new Map(
|
|
3684
|
-
entries.map((x) => [x.id, x])
|
|
3685
|
-
);
|
|
3689
|
+
var adapterIds = Object.freeze([
|
|
3690
|
+
"materialize-markdown",
|
|
3691
|
+
"patch-structured-config",
|
|
3692
|
+
"pi-extension-registration",
|
|
3693
|
+
"oh-my-pi-code-as-hooks",
|
|
3694
|
+
"antigravity-plugin-registration",
|
|
3695
|
+
"antigravity-hook-registration",
|
|
3696
|
+
"antigravity-mcp-registration",
|
|
3697
|
+
"opencode-custom-tool",
|
|
3698
|
+
"opencode-plugin"
|
|
3699
|
+
]);
|
|
3686
3700
|
function requireAdapter(id) {
|
|
3687
|
-
|
|
3688
|
-
if (!item) throw new Error(`Unknown adapter ID: ${id}`);
|
|
3689
|
-
return item;
|
|
3701
|
+
if (!adapterIds.includes(id)) throw new Error(`Unknown adapter ID: ${id}`);
|
|
3690
3702
|
}
|
|
3691
3703
|
|
|
3692
3704
|
// packages/compiler/src/negotiation/negotiate-capability.ts
|
|
3693
3705
|
function negotiateCapability(artifact, descriptor, claims, version) {
|
|
3694
3706
|
return artifact.invocationIntents.map((intent) => {
|
|
3695
3707
|
const surface = descriptor.surfaces.find(
|
|
3696
|
-
(x) => x.semanticKind === intent && x.evidenceClaimIds.some((claimId) => {
|
|
3708
|
+
(x) => x.semanticKind === intent && (x.versionRange === void 0 || isRuntimeVersionInRange(x.versionRange, version)) && x.evidenceClaimIds.some((claimId) => {
|
|
3697
3709
|
const claim4 = claims.find((candidate) => candidate.id === claimId);
|
|
3698
3710
|
return claim4 !== void 0 && resolveRuntimeEvidence(claim4, version).reason !== "version-inapplicable";
|
|
3699
3711
|
})
|
|
@@ -3749,8 +3761,8 @@ var operationalSectionNames = Object.freeze([
|
|
|
3749
3761
|
]);
|
|
3750
3762
|
function validateOperationalSkillContract(contract) {
|
|
3751
3763
|
for (const section of operationalSectionNames) {
|
|
3752
|
-
const
|
|
3753
|
-
if (!Array.isArray(
|
|
3764
|
+
const entries = contract[section];
|
|
3765
|
+
if (!Array.isArray(entries) || entries.length === 0 || entries.some((entry) => !entry.trim())) {
|
|
3754
3766
|
throw new Error(`Missing operational section: ${section}`);
|
|
3755
3767
|
}
|
|
3756
3768
|
}
|
|
@@ -3770,13 +3782,26 @@ var headings = {
|
|
|
3770
3782
|
function renderOperationalSkillContract(contract) {
|
|
3771
3783
|
validateOperationalSkillContract(contract);
|
|
3772
3784
|
return operationalSectionNames.map((section) => {
|
|
3773
|
-
const
|
|
3785
|
+
const entries = contract[section].map((entry, index) => `${index + 1}. ${entry}`).join("\n");
|
|
3774
3786
|
return `## ${headings[section]}
|
|
3775
3787
|
|
|
3776
|
-
${
|
|
3788
|
+
${entries}`;
|
|
3777
3789
|
}).join("\n\n");
|
|
3778
3790
|
}
|
|
3779
3791
|
|
|
3792
|
+
// packages/contracts/src/skill-document.ts
|
|
3793
|
+
function renderSkillDocument(input) {
|
|
3794
|
+
const description = input.description.replace(/[\r\n\t]+/gu, " ").replace(/\s{2,}/gu, " ").trim();
|
|
3795
|
+
if (!description) throw new Error(`Skill ${input.name} requires a non-empty description`);
|
|
3796
|
+
return `---
|
|
3797
|
+
name: ${JSON.stringify(input.name)}
|
|
3798
|
+
description: ${JSON.stringify(description)}
|
|
3799
|
+
---
|
|
3800
|
+
${input.marker}
|
|
3801
|
+
${input.content}
|
|
3802
|
+
`;
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3780
3805
|
// packages/contracts/src/structured-config.ts
|
|
3781
3806
|
import { existsSync, readFileSync as readFileSync2 } from "node:fs";
|
|
3782
3807
|
import { parse as parse2, stringify } from "yaml";
|
|
@@ -3809,6 +3834,7 @@ function planProjection(artifact, runtimeId, scope, negotiations) {
|
|
|
3809
3834
|
id: `materialize:${n4.intent}`,
|
|
3810
3835
|
artifactId: artifact.id,
|
|
3811
3836
|
logicalDestination: `${n4.intent}/${artifact.id}`,
|
|
3837
|
+
description: artifact.title,
|
|
3812
3838
|
content: artifact.operationalContract ? renderOperationalSkillContract(artifact.operationalContract) : artifact.title
|
|
3813
3839
|
});
|
|
3814
3840
|
for (const resource2 of artifact.resourceFiles ?? [])
|
|
@@ -3844,14 +3870,14 @@ function planProjection(artifact, runtimeId, scope, negotiations) {
|
|
|
3844
3870
|
|
|
3845
3871
|
// packages/compiler/src/planning/plan-installation.ts
|
|
3846
3872
|
import { createHash as createHash3 } from "node:crypto";
|
|
3847
|
-
function planInstallation(plan, descriptor) {
|
|
3873
|
+
function planInstallation(plan, descriptor, runtimeVersion) {
|
|
3848
3874
|
const operations = [];
|
|
3849
3875
|
for (const op of plan.operations) {
|
|
3850
3876
|
if (op.kind === "MaterializeArtifact") {
|
|
3851
3877
|
const location = descriptor.locations.find(
|
|
3852
|
-
(x) => x.scope === plan.scope && (x.artifactKind === "skill" || x.artifactKind === op.logicalDestination.split("/")[0])
|
|
3878
|
+
(x) => x.scope === plan.scope && (x.artifactKind === "skill" || x.artifactKind === op.logicalDestination.split("/")[0]) && (!x.versionRange || isRuntimeVersionInRange(x.versionRange, runtimeVersion))
|
|
3853
3879
|
);
|
|
3854
|
-
if (!location
|
|
3880
|
+
if (!location?.pathTemplate || location.installation === "manual") {
|
|
3855
3881
|
operations.push({
|
|
3856
3882
|
kind: "EmitManualStep",
|
|
3857
3883
|
id: `manual:${op.id}`,
|
|
@@ -3879,14 +3905,15 @@ function planInstallation(plan, descriptor) {
|
|
|
3879
3905
|
uninstall: "remove-owned-only",
|
|
3880
3906
|
ownershipIntent: "own",
|
|
3881
3907
|
destination: `${location.pathTemplate}/${op.logicalDestination}`,
|
|
3908
|
+
description: op.description,
|
|
3882
3909
|
content: op.content
|
|
3883
3910
|
});
|
|
3884
3911
|
}
|
|
3885
3912
|
if (op.kind === "IncludeResource") {
|
|
3886
3913
|
const location = descriptor.locations.find(
|
|
3887
|
-
(candidate) => candidate.scope === plan.scope && candidate.artifactKind === "skill"
|
|
3914
|
+
(candidate) => candidate.scope === plan.scope && candidate.artifactKind === "skill" && (!candidate.versionRange || isRuntimeVersionInRange(candidate.versionRange, runtimeVersion))
|
|
3888
3915
|
);
|
|
3889
|
-
if (!location
|
|
3916
|
+
if (!location?.pathTemplate || location.installation === "manual") {
|
|
3890
3917
|
operations.push({
|
|
3891
3918
|
kind: "EmitManualStep",
|
|
3892
3919
|
id: `manual:${op.id}`,
|
|
@@ -3958,7 +3985,7 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
|
|
|
3958
3985
|
request.runtimeVersion
|
|
3959
3986
|
);
|
|
3960
3987
|
const projectionPlan = planProjection(artifact, descriptor.id, request.scope, negotiations);
|
|
3961
|
-
const baseInstallationPlan = planInstallation(projectionPlan, descriptor);
|
|
3988
|
+
const baseInstallationPlan = planInstallation(projectionPlan, descriptor, request.runtimeVersion);
|
|
3962
3989
|
const mutatingIntent = request.intent === "setup" || request.intent === "update";
|
|
3963
3990
|
let installationPlan = mutatingIntent ? baseInstallationPlan : { ...baseInstallationPlan, operations: [] };
|
|
3964
3991
|
if (request.intent === "remove") {
|
|
@@ -4029,7 +4056,7 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
|
|
|
4029
4056
|
approvals: request.approvalPolicy === "preapproved" ? [] : approvals,
|
|
4030
4057
|
manualSteps: installationPlan.operations.filter((operation) => operation.kind === "EmitManualStep").map((operation) => operation.id),
|
|
4031
4058
|
verificationExpectations: projectionPlan.operations.filter((operation) => operation.kind === "ExpectVerification").map((operation) => operation.expectation),
|
|
4032
|
-
nativeUsageInputs: negotiations.
|
|
4059
|
+
nativeUsageInputs: negotiations.flatMap(({ surfaceId }) => surfaceId ? [surfaceId] : [])
|
|
4033
4060
|
};
|
|
4034
4061
|
}
|
|
4035
4062
|
|
|
@@ -11406,8 +11433,8 @@ async function assertNoSymlinks(current) {
|
|
|
11406
11433
|
async function treeDigest(root) {
|
|
11407
11434
|
const hash = createHash5("sha256");
|
|
11408
11435
|
async function visit(current, relative4 = "") {
|
|
11409
|
-
const
|
|
11410
|
-
for (const entry of
|
|
11436
|
+
const entries = await readdir(current, { withFileTypes: true });
|
|
11437
|
+
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
11411
11438
|
if ([".git", "node_modules", ".turbo"].includes(entry.name)) continue;
|
|
11412
11439
|
const path9 = join(current, entry.name);
|
|
11413
11440
|
const child = relative4 ? `${relative4}/${entry.name}` : entry.name;
|
|
@@ -11706,9 +11733,9 @@ function writeEnvelope(envelope, format2) {
|
|
|
11706
11733
|
}
|
|
11707
11734
|
|
|
11708
11735
|
// packages/cli/src/release.ts
|
|
11709
|
-
var cliVersion = true ? "0.1.
|
|
11736
|
+
var cliVersion = true ? "0.1.9" : createRequire(import.meta.url)("../../../package.json").version;
|
|
11710
11737
|
|
|
11711
|
-
// packages/adapters/antigravity/
|
|
11738
|
+
// packages/adapters/src/antigravity/materialize.ts
|
|
11712
11739
|
import { resolve as resolve2 } from "node:path";
|
|
11713
11740
|
var marker = "<!-- portable-capabilities:owned antigravity -->";
|
|
11714
11741
|
function destination(value) {
|
|
@@ -11739,15 +11766,15 @@ function diagnostic(operation, kind, message) {
|
|
|
11739
11766
|
}
|
|
11740
11767
|
function render(operation) {
|
|
11741
11768
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
11742
|
-
|
|
11769
|
+
const name = skill?.[1];
|
|
11770
|
+
if (!name) return `${marker}
|
|
11743
11771
|
${operation.content}`;
|
|
11744
|
-
return
|
|
11745
|
-
name
|
|
11746
|
-
description:
|
|
11747
|
-
|
|
11748
|
-
|
|
11749
|
-
|
|
11750
|
-
`;
|
|
11772
|
+
return renderSkillDocument({
|
|
11773
|
+
name,
|
|
11774
|
+
description: operation.description,
|
|
11775
|
+
marker,
|
|
11776
|
+
content: operation.content
|
|
11777
|
+
});
|
|
11751
11778
|
}
|
|
11752
11779
|
function registration(operation) {
|
|
11753
11780
|
return `${JSON.stringify({ adapterId: operation.adapterId, kind: operation.kind, target: operation.target }, null, 2)}
|
|
@@ -11856,7 +11883,7 @@ function prepareAntigravityMaterialization(plan, root) {
|
|
|
11856
11883
|
});
|
|
11857
11884
|
}
|
|
11858
11885
|
|
|
11859
|
-
// packages/adapters/antigravity/
|
|
11886
|
+
// packages/adapters/src/antigravity/runtime-descriptor.ts
|
|
11860
11887
|
var markdown = "materialize-markdown";
|
|
11861
11888
|
var plugin = "antigravity-plugin-registration";
|
|
11862
11889
|
var hook = "antigravity-hook-registration";
|
|
@@ -12049,7 +12076,7 @@ var antigravityRuntimeDescriptor = {
|
|
|
12049
12076
|
]
|
|
12050
12077
|
};
|
|
12051
12078
|
|
|
12052
|
-
// packages/adapters/antigravity/
|
|
12079
|
+
// packages/adapters/src/antigravity/runtime-evidence.ts
|
|
12053
12080
|
import { createHash as createHash7 } from "node:crypto";
|
|
12054
12081
|
var digest2 = (value) => createHash7("sha256").update(value).digest("hex");
|
|
12055
12082
|
var retrievedAt = "2026-08-10T00:00:00.000Z";
|
|
@@ -12197,7 +12224,7 @@ var antigravityRuntimeEvidence = [
|
|
|
12197
12224
|
)
|
|
12198
12225
|
];
|
|
12199
12226
|
|
|
12200
|
-
// packages/adapters/claude-code/
|
|
12227
|
+
// packages/adapters/src/claude-code/materialize.ts
|
|
12201
12228
|
import { resolve as resolve3 } from "node:path";
|
|
12202
12229
|
var marker2 = "<!-- portable-capabilities:owned claude-code -->";
|
|
12203
12230
|
function destination2(value) {
|
|
@@ -12232,15 +12259,15 @@ function diagnostic2(operation, kind, message) {
|
|
|
12232
12259
|
}
|
|
12233
12260
|
function render2(operation) {
|
|
12234
12261
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
12235
|
-
|
|
12262
|
+
const name = skill?.[1];
|
|
12263
|
+
if (!name) return `${marker2}
|
|
12236
12264
|
${operation.content}`;
|
|
12237
|
-
return
|
|
12238
|
-
name
|
|
12239
|
-
description:
|
|
12240
|
-
|
|
12241
|
-
|
|
12242
|
-
|
|
12243
|
-
`;
|
|
12265
|
+
return renderSkillDocument({
|
|
12266
|
+
name,
|
|
12267
|
+
description: operation.description,
|
|
12268
|
+
marker: marker2,
|
|
12269
|
+
content: operation.content
|
|
12270
|
+
});
|
|
12244
12271
|
}
|
|
12245
12272
|
function config(operation, root, path9) {
|
|
12246
12273
|
if (operation.format !== "json")
|
|
@@ -12354,7 +12381,7 @@ function prepareClaudeCodeMaterialization(plan, root) {
|
|
|
12354
12381
|
});
|
|
12355
12382
|
}
|
|
12356
12383
|
|
|
12357
|
-
// packages/adapters/claude-code/
|
|
12384
|
+
// packages/adapters/src/claude-code/runtime-descriptor.ts
|
|
12358
12385
|
var markdown2 = "materialize-markdown";
|
|
12359
12386
|
var claudeCodeRuntimeDescriptor = {
|
|
12360
12387
|
schemaVersion: "1.0",
|
|
@@ -12556,7 +12583,7 @@ var claudeCodeRuntimeDescriptor = {
|
|
|
12556
12583
|
]
|
|
12557
12584
|
};
|
|
12558
12585
|
|
|
12559
|
-
// packages/adapters/claude-code/
|
|
12586
|
+
// packages/adapters/src/claude-code/runtime-evidence.ts
|
|
12560
12587
|
import { createHash as createHash8 } from "node:crypto";
|
|
12561
12588
|
var digest3 = (value) => createHash8("sha256").update(value).digest("hex");
|
|
12562
12589
|
var retrievedAt2 = "2026-08-10T00:00:00.000Z";
|
|
@@ -12727,18 +12754,20 @@ var claudeCodeRuntimeEvidence = Object.freeze([
|
|
|
12727
12754
|
}))
|
|
12728
12755
|
]);
|
|
12729
12756
|
|
|
12730
|
-
// packages/adapters/codex/
|
|
12757
|
+
// packages/adapters/src/codex/materialize.ts
|
|
12731
12758
|
import { resolve as resolve4 } from "node:path";
|
|
12732
12759
|
var marker3 = "<!-- portable-capabilities:owned codex -->";
|
|
12733
12760
|
function destination3(value) {
|
|
12734
12761
|
const project = value.match(/^\.codex\/skills\/skill\/(.+)$/);
|
|
12735
12762
|
if (project) return `.codex/skills/${project[1]}/SKILL.md`;
|
|
12763
|
+
const currentProject = value.match(/^\.agents\/skills\/skill\/(.+)$/);
|
|
12764
|
+
if (currentProject) return `.agents/skills/${currentProject[1]}/SKILL.md`;
|
|
12736
12765
|
const user = value.match(/^\$CODEX_HOME\/skills\/skill\/(.+)$/);
|
|
12737
12766
|
if (user) return `.codex-user/skills/${user[1]}/SKILL.md`;
|
|
12738
12767
|
return value.replace(/^\$CODEX_HOME\//, ".codex-user/");
|
|
12739
12768
|
}
|
|
12740
12769
|
function resourceDestination3(value) {
|
|
12741
|
-
return value.replace(/^\.codex\/skills\/skill\//u, ".codex/skills/").replace(/^\$CODEX_HOME\/skills\/skill\//u, ".codex-user/skills/");
|
|
12770
|
+
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/");
|
|
12742
12771
|
}
|
|
12743
12772
|
function confined3(root, path9) {
|
|
12744
12773
|
const target = resolve4(root, path9);
|
|
@@ -12748,15 +12777,15 @@ function confined3(root, path9) {
|
|
|
12748
12777
|
}
|
|
12749
12778
|
function render3(operation) {
|
|
12750
12779
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
12751
|
-
|
|
12780
|
+
const name = skill?.[1];
|
|
12781
|
+
if (!name) return `${marker3}
|
|
12752
12782
|
${operation.content}`;
|
|
12753
|
-
return
|
|
12754
|
-
name
|
|
12755
|
-
description:
|
|
12756
|
-
|
|
12757
|
-
|
|
12758
|
-
|
|
12759
|
-
`;
|
|
12783
|
+
return renderSkillDocument({
|
|
12784
|
+
name,
|
|
12785
|
+
description: operation.description,
|
|
12786
|
+
marker: marker3,
|
|
12787
|
+
content: operation.content
|
|
12788
|
+
});
|
|
12760
12789
|
}
|
|
12761
12790
|
function transform(operation) {
|
|
12762
12791
|
if (operation.format !== "json")
|
|
@@ -12820,25 +12849,48 @@ function prepareCodexMaterialization(plan, root, ..._options) {
|
|
|
12820
12849
|
});
|
|
12821
12850
|
}
|
|
12822
12851
|
|
|
12823
|
-
// packages/adapters/codex/
|
|
12852
|
+
// packages/adapters/src/codex/runtime-descriptor.ts
|
|
12824
12853
|
var codexRuntimeDescriptor = {
|
|
12825
12854
|
schemaVersion: "1.0",
|
|
12826
12855
|
id: "codex",
|
|
12827
12856
|
aliases: ["codex-cli"],
|
|
12828
|
-
supportedVersions: ["
|
|
12857
|
+
supportedVersions: ["=0.146.0", ">=0.147.0 <0.148.0"],
|
|
12829
12858
|
locations: [
|
|
12830
12859
|
{
|
|
12831
|
-
id: "codex-project-skills",
|
|
12860
|
+
id: "codex-project-skills-0146",
|
|
12832
12861
|
artifactKind: "skill",
|
|
12833
12862
|
scope: "project",
|
|
12834
12863
|
pathTemplate: ".codex/skills",
|
|
12835
12864
|
evidenceClaimIds: ["codex.location.project-skills"],
|
|
12865
|
+
versionRange: "=0.146.0",
|
|
12836
12866
|
installation: "automatic",
|
|
12837
12867
|
registration: "discovery",
|
|
12838
12868
|
uninstall: "automatic"
|
|
12839
12869
|
},
|
|
12840
12870
|
{
|
|
12841
|
-
id: "codex-
|
|
12871
|
+
id: "codex-project-skills-0147",
|
|
12872
|
+
artifactKind: "skill",
|
|
12873
|
+
scope: "project",
|
|
12874
|
+
pathTemplate: ".agents/skills",
|
|
12875
|
+
evidenceClaimIds: ["codex.location.project-skills-agents"],
|
|
12876
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
12877
|
+
installation: "automatic",
|
|
12878
|
+
registration: "discovery",
|
|
12879
|
+
uninstall: "automatic"
|
|
12880
|
+
},
|
|
12881
|
+
{
|
|
12882
|
+
id: "codex-user-skills-0147",
|
|
12883
|
+
artifactKind: "skill",
|
|
12884
|
+
scope: "user",
|
|
12885
|
+
pathTemplate: ".agents/skills",
|
|
12886
|
+
evidenceClaimIds: ["codex.location.user-skills-agents"],
|
|
12887
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
12888
|
+
installation: "automatic",
|
|
12889
|
+
registration: "discovery",
|
|
12890
|
+
uninstall: "automatic"
|
|
12891
|
+
},
|
|
12892
|
+
{
|
|
12893
|
+
id: "codex-user-skills-0146",
|
|
12842
12894
|
artifactKind: "skill",
|
|
12843
12895
|
scope: "user",
|
|
12844
12896
|
pathTemplate: "$CODEX_HOME/skills",
|
|
@@ -12851,16 +12903,30 @@ var codexRuntimeDescriptor = {
|
|
|
12851
12903
|
],
|
|
12852
12904
|
surfaces: [
|
|
12853
12905
|
{
|
|
12854
|
-
id: "codex-direct-skill",
|
|
12906
|
+
id: "codex-direct-skill-0146",
|
|
12855
12907
|
semanticKind: "skill",
|
|
12856
12908
|
integrationMode: "declarative",
|
|
12857
12909
|
adapterId: "materialize-markdown",
|
|
12858
|
-
discovery: "Codex discovers project
|
|
12859
|
-
invocation: "Invoke the installed skill through Codex
|
|
12910
|
+
discovery: "Codex 0.146.x discovers project skills from .codex/skills.",
|
|
12911
|
+
invocation: "Invoke the installed skill through Codex 0.146.x native skill selection.",
|
|
12860
12912
|
precedence: ["project", "user"],
|
|
12861
12913
|
evidenceClaimIds: ["codex.discovery.skills", "codex.invocation.skills"],
|
|
12862
|
-
|
|
12914
|
+
versionRange: "=0.146.0",
|
|
12915
|
+
stability: "version-gated",
|
|
12863
12916
|
evidenceState: "runtime-observed"
|
|
12917
|
+
},
|
|
12918
|
+
{
|
|
12919
|
+
id: "codex-direct-skill-0147",
|
|
12920
|
+
semanticKind: "skill",
|
|
12921
|
+
integrationMode: "declarative",
|
|
12922
|
+
adapterId: "materialize-markdown",
|
|
12923
|
+
discovery: "Codex 0.147.x discovers project skills from .agents/skills.",
|
|
12924
|
+
invocation: "Invoke the installed skill through Codex 0.147.x native skill selection.",
|
|
12925
|
+
precedence: ["project", "user"],
|
|
12926
|
+
evidenceClaimIds: ["codex.discovery.skills-0147", "codex.invocation.skills-0147"],
|
|
12927
|
+
versionRange: ">=0.147.0 <0.148.0",
|
|
12928
|
+
stability: "version-gated",
|
|
12929
|
+
evidenceState: "source-observed"
|
|
12864
12930
|
}
|
|
12865
12931
|
],
|
|
12866
12932
|
configuration: [],
|
|
@@ -12870,10 +12936,37 @@ var codexRuntimeDescriptor = {
|
|
|
12870
12936
|
degradation: []
|
|
12871
12937
|
};
|
|
12872
12938
|
|
|
12873
|
-
// packages/adapters/codex/
|
|
12939
|
+
// packages/adapters/src/codex/runtime-evidence.ts
|
|
12874
12940
|
import { createHash as createHash9 } from "node:crypto";
|
|
12875
12941
|
var digest4 = (value) => createHash9("sha256").update(value).digest("hex");
|
|
12876
12942
|
var observedAt = "2026-08-08T00:00:00.000Z";
|
|
12943
|
+
var sourceObservedAt = "2026-08-15T00:00:00.000Z";
|
|
12944
|
+
var codexSource = "https://github.com/openai/codex";
|
|
12945
|
+
var codexSkillRootsSource = "https://github.com/openai/codex/blob/53f3fa749659498fa24c81da8fde5440fa7bba7f/codex-rs/ext/skills/src/host_roots.rs";
|
|
12946
|
+
var codexCurrentRange = ">=0.147.0 <0.148.0";
|
|
12947
|
+
var projectSkillRootExcerpt = 'const AGENTS_DIR_NAME: &str = ".agents";\nconst SKILLS_DIR_NAME: &str = "skills";';
|
|
12948
|
+
var userSkillRootExcerpt = "home_dir.join(AGENTS_DIR_NAME).join(SKILLS_DIR_NAME), SkillScope::User";
|
|
12949
|
+
var discoveryExcerpt = "let agents_skills = directory.join(AGENTS_DIR_NAME).join(SKILLS_DIR_NAME);";
|
|
12950
|
+
var invocationExcerpt = 'UserInput::Skill {\n name: "demo".to_string(),';
|
|
12951
|
+
var sourceClaim2 = (id, subject, assertion, sourceLocator, sourceExcerpt) => ({
|
|
12952
|
+
schemaVersion: "1.0",
|
|
12953
|
+
id,
|
|
12954
|
+
runtimeId: "codex",
|
|
12955
|
+
category: id.includes("location") ? "location" : id.includes("discovery") ? "discovery" : "invocation",
|
|
12956
|
+
subject,
|
|
12957
|
+
assertion,
|
|
12958
|
+
versionRange: codexCurrentRange,
|
|
12959
|
+
sourceType: "official-source",
|
|
12960
|
+
source: codexSource,
|
|
12961
|
+
sourceLocator,
|
|
12962
|
+
sourceExcerpt,
|
|
12963
|
+
sourceDigest: digest4(sourceExcerpt),
|
|
12964
|
+
state: "source-observed",
|
|
12965
|
+
confidence: "high",
|
|
12966
|
+
verificationStatus: "verified",
|
|
12967
|
+
stability: "version-gated",
|
|
12968
|
+
verifiedAt: sourceObservedAt
|
|
12969
|
+
});
|
|
12877
12970
|
var codexRuntimeEvidence = Object.freeze([
|
|
12878
12971
|
{
|
|
12879
12972
|
schemaVersion: "1.0",
|
|
@@ -12881,54 +12974,82 @@ var codexRuntimeEvidence = Object.freeze([
|
|
|
12881
12974
|
runtimeId: "codex",
|
|
12882
12975
|
category: "location",
|
|
12883
12976
|
subject: "project skill root",
|
|
12884
|
-
assertion: "Codex project skills are materialized beneath .codex/skills.",
|
|
12885
|
-
versionRange: "
|
|
12977
|
+
assertion: "Codex 0.146.x project skills are materialized beneath .codex/skills.",
|
|
12978
|
+
versionRange: "=0.146.0",
|
|
12886
12979
|
sourceType: "runtime-probe",
|
|
12887
12980
|
source: "codex-cli",
|
|
12888
|
-
sourceLocator: "native
|
|
12981
|
+
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
12889
12982
|
sourceExcerpt: ".codex/skills",
|
|
12890
|
-
sourceDigest: digest4("codex project skills .codex/skills"),
|
|
12983
|
+
sourceDigest: digest4("codex 0.146 project skills .codex/skills"),
|
|
12891
12984
|
state: "runtime-observed",
|
|
12892
12985
|
confidence: "high",
|
|
12893
12986
|
verificationStatus: "verified",
|
|
12894
|
-
stability: "
|
|
12987
|
+
stability: "version-gated",
|
|
12895
12988
|
verifiedAt: observedAt
|
|
12896
12989
|
},
|
|
12990
|
+
sourceClaim2(
|
|
12991
|
+
"codex.location.project-skills-agents",
|
|
12992
|
+
"project skill root",
|
|
12993
|
+
"Codex 0.147.x project skills are discovered beneath .agents/skills.",
|
|
12994
|
+
`${codexSkillRootsSource}#L92-L101`,
|
|
12995
|
+
projectSkillRootExcerpt
|
|
12996
|
+
),
|
|
12997
|
+
sourceClaim2(
|
|
12998
|
+
"codex.location.user-skills-agents",
|
|
12999
|
+
"user skill root",
|
|
13000
|
+
"Codex 0.147.x user skills are discovered beneath ~/.agents/skills.",
|
|
13001
|
+
`${codexSkillRootsSource}#L107-L119`,
|
|
13002
|
+
userSkillRootExcerpt
|
|
13003
|
+
),
|
|
12897
13004
|
{
|
|
12898
13005
|
schemaVersion: "1.0",
|
|
12899
13006
|
id: "codex.location.user-skills",
|
|
12900
13007
|
runtimeId: "codex",
|
|
12901
13008
|
category: "location",
|
|
12902
13009
|
subject: "user skill root",
|
|
12903
|
-
assertion: "Codex user skills are materialized beneath CODEX_HOME/skills.",
|
|
12904
|
-
versionRange: "
|
|
13010
|
+
assertion: "Codex 0.146.x user skills are materialized beneath CODEX_HOME/skills.",
|
|
13011
|
+
versionRange: "=0.146.0",
|
|
12905
13012
|
sourceType: "runtime-probe",
|
|
12906
13013
|
source: "codex-cli",
|
|
12907
13014
|
sourceLocator: "native vertical tracer",
|
|
12908
13015
|
sourceExcerpt: "CODEX_HOME/skills",
|
|
12909
|
-
sourceDigest: digest4("codex user skills CODEX_HOME/skills"),
|
|
13016
|
+
sourceDigest: digest4("codex 0.146 user skills CODEX_HOME/skills"),
|
|
12910
13017
|
state: "runtime-observed",
|
|
12911
13018
|
confidence: "high",
|
|
12912
13019
|
verificationStatus: "verified",
|
|
12913
|
-
stability: "
|
|
13020
|
+
stability: "version-gated",
|
|
12914
13021
|
verifiedAt: observedAt
|
|
12915
13022
|
},
|
|
13023
|
+
sourceClaim2(
|
|
13024
|
+
"codex.discovery.skills-0147",
|
|
13025
|
+
"native skill discovery",
|
|
13026
|
+
"Codex 0.147.x discovers Agent Skills from .agents/skills.",
|
|
13027
|
+
`${codexSkillRootsSource}#L139-L161`,
|
|
13028
|
+
discoveryExcerpt
|
|
13029
|
+
),
|
|
13030
|
+
sourceClaim2(
|
|
13031
|
+
"codex.invocation.skills-0147",
|
|
13032
|
+
"native skill invocation",
|
|
13033
|
+
"Codex 0.147.x invokes a discovered Agent Skill through its native skill selection.",
|
|
13034
|
+
"https://github.com/openai/codex/blob/53f3fa749659498fa24c81da8fde5440fa7bba7f/codex-rs/core/tests/suite/skills.rs",
|
|
13035
|
+
invocationExcerpt
|
|
13036
|
+
),
|
|
12916
13037
|
{
|
|
12917
13038
|
schemaVersion: "1.0",
|
|
12918
13039
|
id: "codex.discovery.skills",
|
|
12919
13040
|
runtimeId: "codex",
|
|
12920
13041
|
category: "discovery",
|
|
12921
13042
|
subject: "native skill discovery",
|
|
12922
|
-
assertion: "Codex natively discovers a skill installed in its project skill root.",
|
|
12923
|
-
versionRange: "
|
|
13043
|
+
assertion: "Codex 0.146.x natively discovers a skill installed in its project skill root.",
|
|
13044
|
+
versionRange: "=0.146.0",
|
|
12924
13045
|
sourceType: "runtime-probe",
|
|
12925
13046
|
source: "codex-cli",
|
|
12926
13047
|
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
12927
|
-
sourceDigest: digest4("codex native discovery"),
|
|
13048
|
+
sourceDigest: digest4("codex 0.146 native discovery"),
|
|
12928
13049
|
state: "runtime-observed",
|
|
12929
13050
|
confidence: "high",
|
|
12930
13051
|
verificationStatus: "verified",
|
|
12931
|
-
stability: "
|
|
13052
|
+
stability: "version-gated",
|
|
12932
13053
|
verifiedAt: observedAt
|
|
12933
13054
|
},
|
|
12934
13055
|
{
|
|
@@ -12937,21 +13058,21 @@ var codexRuntimeEvidence = Object.freeze([
|
|
|
12937
13058
|
runtimeId: "codex",
|
|
12938
13059
|
category: "invocation",
|
|
12939
13060
|
subject: "native skill invocation",
|
|
12940
|
-
assertion: "Codex can invoke an installed skill through the native client.",
|
|
12941
|
-
versionRange: "
|
|
13061
|
+
assertion: "Codex 0.146.x can invoke an installed skill through the native client.",
|
|
13062
|
+
versionRange: "=0.146.0",
|
|
12942
13063
|
sourceType: "runtime-probe",
|
|
12943
13064
|
source: "codex-cli",
|
|
12944
13065
|
sourceLocator: "packages/conformance/src/tracer/codex-native-evidence.json",
|
|
12945
|
-
sourceDigest: digest4("codex native invocation"),
|
|
13066
|
+
sourceDigest: digest4("codex 0.146 native invocation"),
|
|
12946
13067
|
state: "runtime-observed",
|
|
12947
13068
|
confidence: "high",
|
|
12948
13069
|
verificationStatus: "verified",
|
|
12949
|
-
stability: "
|
|
13070
|
+
stability: "version-gated",
|
|
12950
13071
|
verifiedAt: observedAt
|
|
12951
13072
|
}
|
|
12952
13073
|
]);
|
|
12953
13074
|
|
|
12954
|
-
// packages/adapters/dcode/
|
|
13075
|
+
// packages/adapters/src/dcode/materialize.ts
|
|
12955
13076
|
import { resolve as resolve5 } from "node:path";
|
|
12956
13077
|
var marker4 = "<!-- portable-capabilities:owned dcode -->";
|
|
12957
13078
|
function destination4(value) {
|
|
@@ -12983,15 +13104,15 @@ function diagnostic3(operation, kind, message) {
|
|
|
12983
13104
|
}
|
|
12984
13105
|
function render4(operation) {
|
|
12985
13106
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
12986
|
-
|
|
13107
|
+
const name = skill?.[1];
|
|
13108
|
+
if (!name) return `${marker4}
|
|
12987
13109
|
${operation.content}`;
|
|
12988
|
-
return
|
|
12989
|
-
name
|
|
12990
|
-
description:
|
|
12991
|
-
|
|
12992
|
-
|
|
12993
|
-
|
|
12994
|
-
`;
|
|
13110
|
+
return renderSkillDocument({
|
|
13111
|
+
name,
|
|
13112
|
+
description: operation.description,
|
|
13113
|
+
marker: marker4,
|
|
13114
|
+
content: operation.content
|
|
13115
|
+
});
|
|
12995
13116
|
}
|
|
12996
13117
|
function registration3(operation) {
|
|
12997
13118
|
return `${JSON.stringify({ adapterId: operation.adapterId, kind: operation.kind, target: operation.target }, null, 2)}
|
|
@@ -13130,7 +13251,7 @@ ${content}
|
|
|
13130
13251
|
});
|
|
13131
13252
|
}
|
|
13132
13253
|
|
|
13133
|
-
// packages/adapters/dcode/
|
|
13254
|
+
// packages/adapters/src/dcode/runtime-descriptor.ts
|
|
13134
13255
|
var markdown3 = "materialize-markdown";
|
|
13135
13256
|
var source2 = "source-observed";
|
|
13136
13257
|
var dcodeRuntimeDescriptor = {
|
|
@@ -13335,7 +13456,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13335
13456
|
]
|
|
13336
13457
|
};
|
|
13337
13458
|
|
|
13338
|
-
// packages/adapters/dcode/
|
|
13459
|
+
// packages/adapters/src/dcode/runtime-evidence.ts
|
|
13339
13460
|
import { createHash as createHash10 } from "node:crypto";
|
|
13340
13461
|
var digest5 = (value) => createHash10("sha256").update(value).digest("hex");
|
|
13341
13462
|
var verifiedAt = "2026-08-10T00:00:00.000Z";
|
|
@@ -13518,7 +13639,7 @@ var dcodeRuntimeEvidence = Object.freeze([
|
|
|
13518
13639
|
})
|
|
13519
13640
|
]);
|
|
13520
13641
|
|
|
13521
|
-
// packages/adapters/oh-my-pi/
|
|
13642
|
+
// packages/adapters/src/oh-my-pi/materialize.ts
|
|
13522
13643
|
import { resolve as resolve6 } from "node:path";
|
|
13523
13644
|
var marker5 = "<!-- portable-capabilities:owned oh-my-pi -->";
|
|
13524
13645
|
function resolveOhMyPiProfile(input) {
|
|
@@ -13576,13 +13697,13 @@ function diagnostic4(operation, kind, message) {
|
|
|
13576
13697
|
}
|
|
13577
13698
|
function render5(operation) {
|
|
13578
13699
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
13579
|
-
|
|
13580
|
-
name
|
|
13581
|
-
|
|
13582
|
-
|
|
13583
|
-
|
|
13584
|
-
|
|
13585
|
-
|
|
13700
|
+
const name = skill?.[1];
|
|
13701
|
+
return name ? renderSkillDocument({
|
|
13702
|
+
name,
|
|
13703
|
+
description: operation.description,
|
|
13704
|
+
marker: marker5,
|
|
13705
|
+
content: operation.content
|
|
13706
|
+
}) : `${marker5}
|
|
13586
13707
|
${operation.content}`;
|
|
13587
13708
|
}
|
|
13588
13709
|
function registration4(operation) {
|
|
@@ -13691,7 +13812,7 @@ async function prepareOhMyPiMaterialization(plan, root, profile = { home: root }
|
|
|
13691
13812
|
});
|
|
13692
13813
|
}
|
|
13693
13814
|
|
|
13694
|
-
// packages/adapters/oh-my-pi/
|
|
13815
|
+
// packages/adapters/src/oh-my-pi/runtime-descriptor.ts
|
|
13695
13816
|
var markdown4 = "materialize-markdown";
|
|
13696
13817
|
var hooks = "oh-my-pi-code-as-hooks";
|
|
13697
13818
|
var config2 = "patch-structured-config";
|
|
@@ -13939,7 +14060,7 @@ var ohMyPiRuntimeDescriptor = {
|
|
|
13939
14060
|
]
|
|
13940
14061
|
};
|
|
13941
14062
|
|
|
13942
|
-
// packages/adapters/oh-my-pi/
|
|
14063
|
+
// packages/adapters/src/oh-my-pi/runtime-evidence.ts
|
|
13943
14064
|
import { createHash as createHash11 } from "node:crypto";
|
|
13944
14065
|
var digest6 = (value) => createHash11("sha256").update(value).digest("hex");
|
|
13945
14066
|
var verifiedAt2 = "2026-08-10T00:00:00.000Z";
|
|
@@ -14089,7 +14210,7 @@ var ohMyPiRuntimeEvidence = [
|
|
|
14089
14210
|
}
|
|
14090
14211
|
];
|
|
14091
14212
|
|
|
14092
|
-
// packages/adapters/opencode/
|
|
14213
|
+
// packages/adapters/src/opencode/materialize.ts
|
|
14093
14214
|
import { resolve as resolve7 } from "node:path";
|
|
14094
14215
|
var marker6 = "<!-- portable-capabilities:owned opencode -->";
|
|
14095
14216
|
function destination5(value) {
|
|
@@ -14126,15 +14247,15 @@ function diagnostic5(operation, kind, message) {
|
|
|
14126
14247
|
}
|
|
14127
14248
|
function render6(operation) {
|
|
14128
14249
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
14129
|
-
|
|
14250
|
+
const name = skill?.[1];
|
|
14251
|
+
if (!name) return `${marker6}
|
|
14130
14252
|
${operation.content}`;
|
|
14131
|
-
return
|
|
14132
|
-
name
|
|
14133
|
-
description:
|
|
14134
|
-
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
`;
|
|
14253
|
+
return renderSkillDocument({
|
|
14254
|
+
name,
|
|
14255
|
+
description: operation.description,
|
|
14256
|
+
marker: marker6,
|
|
14257
|
+
content: operation.content
|
|
14258
|
+
});
|
|
14138
14259
|
}
|
|
14139
14260
|
function config3(operation, root, path9) {
|
|
14140
14261
|
if (operation.format !== "json")
|
|
@@ -14242,7 +14363,7 @@ async function prepareOpencodeMaterialization(plan, root) {
|
|
|
14242
14363
|
});
|
|
14243
14364
|
}
|
|
14244
14365
|
|
|
14245
|
-
// packages/adapters/opencode/
|
|
14366
|
+
// packages/adapters/src/opencode/runtime-descriptor.ts
|
|
14246
14367
|
var native = "opencode.stable";
|
|
14247
14368
|
var beta = "opencode.v2-beta";
|
|
14248
14369
|
var opencodeRuntimeDescriptor = {
|
|
@@ -14524,7 +14645,7 @@ var opencodeRuntimeDescriptor = {
|
|
|
14524
14645
|
]
|
|
14525
14646
|
};
|
|
14526
14647
|
|
|
14527
|
-
// packages/adapters/opencode/
|
|
14648
|
+
// packages/adapters/src/opencode/runtime-evidence.ts
|
|
14528
14649
|
import { createHash as createHash12 } from "node:crypto";
|
|
14529
14650
|
var retrievedAt3 = "2026-08-10T00:00:00.000Z";
|
|
14530
14651
|
var docs2 = "docs/RFC/runtime-capability-profiles-revised.md";
|
|
@@ -14608,14 +14729,14 @@ var sourceClaims = [
|
|
|
14608
14729
|
"discovery",
|
|
14609
14730
|
"stable skill discovery",
|
|
14610
14731
|
"OpenCode discovers native project and user skills.",
|
|
14611
|
-
"
|
|
14732
|
+
"source-observed"
|
|
14612
14733
|
],
|
|
14613
14734
|
[
|
|
14614
14735
|
"invocation.skills",
|
|
14615
14736
|
"invocation",
|
|
14616
14737
|
"stable skill invocation",
|
|
14617
14738
|
"OpenCode invokes a discovered skill through its native skill tool.",
|
|
14618
|
-
"
|
|
14739
|
+
"source-observed"
|
|
14619
14740
|
],
|
|
14620
14741
|
[
|
|
14621
14742
|
"discovery.agents",
|
|
@@ -14753,7 +14874,7 @@ var opencodeRuntimeEvidence = Object.freeze([
|
|
|
14753
14874
|
...betaClaims
|
|
14754
14875
|
]);
|
|
14755
14876
|
|
|
14756
|
-
// packages/adapters/pi/
|
|
14877
|
+
// packages/adapters/src/pi/materialize.ts
|
|
14757
14878
|
import { resolve as resolve8 } from "node:path";
|
|
14758
14879
|
var marker7 = "<!-- portable-capabilities:owned pi -->";
|
|
14759
14880
|
function destination6(value) {
|
|
@@ -14774,15 +14895,15 @@ function confined7(root, path9) {
|
|
|
14774
14895
|
}
|
|
14775
14896
|
function render7(operation) {
|
|
14776
14897
|
const skill = operation.destination.match(/skills\/skill\/([^/]+)$/);
|
|
14777
|
-
|
|
14898
|
+
const name = skill?.[1];
|
|
14899
|
+
if (!name) return `${marker7}
|
|
14778
14900
|
${operation.content}`;
|
|
14779
|
-
return
|
|
14780
|
-
name
|
|
14781
|
-
description:
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
`;
|
|
14901
|
+
return renderSkillDocument({
|
|
14902
|
+
name,
|
|
14903
|
+
description: operation.description,
|
|
14904
|
+
marker: marker7,
|
|
14905
|
+
content: operation.content
|
|
14906
|
+
});
|
|
14786
14907
|
}
|
|
14787
14908
|
function transform2(operation) {
|
|
14788
14909
|
if (operation.format !== "json")
|
|
@@ -14846,7 +14967,7 @@ function preparePiMaterialization(plan, root, ..._options) {
|
|
|
14846
14967
|
});
|
|
14847
14968
|
}
|
|
14848
14969
|
|
|
14849
|
-
// packages/adapters/pi/
|
|
14970
|
+
// packages/adapters/src/pi/runtime-descriptor.ts
|
|
14850
14971
|
var piRuntimeDescriptor = {
|
|
14851
14972
|
schemaVersion: "1.0",
|
|
14852
14973
|
id: "pi",
|
|
@@ -14924,7 +15045,7 @@ var piRuntimeDescriptor = {
|
|
|
14924
15045
|
]
|
|
14925
15046
|
};
|
|
14926
15047
|
|
|
14927
|
-
// packages/adapters/pi/
|
|
15048
|
+
// packages/adapters/src/pi/runtime-evidence.ts
|
|
14928
15049
|
import { createHash as createHash13 } from "node:crypto";
|
|
14929
15050
|
var digest8 = (value) => createHash13("sha256").update(value).digest("hex");
|
|
14930
15051
|
var observedAt2 = "2026-08-08T04:24:00-05:00";
|
|
@@ -14990,7 +15111,7 @@ var piRuntimeEvidence = [
|
|
|
14990
15111
|
category: "discovery",
|
|
14991
15112
|
subject: "native skill discovery",
|
|
14992
15113
|
assertion: "Pi natively discovers a project skill with extensions disabled.",
|
|
14993
|
-
versionRange: "
|
|
15114
|
+
versionRange: "=0.64.0",
|
|
14994
15115
|
sourceType: "runtime-probe",
|
|
14995
15116
|
source: "pi",
|
|
14996
15117
|
sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
|
|
@@ -15008,7 +15129,7 @@ var piRuntimeEvidence = [
|
|
|
15008
15129
|
category: "invocation",
|
|
15009
15130
|
subject: "native skill invocation",
|
|
15010
15131
|
assertion: "Pi invokes a discovered project skill with extensions disabled.",
|
|
15011
|
-
versionRange: "
|
|
15132
|
+
versionRange: "=0.64.0",
|
|
15012
15133
|
sourceType: "runtime-probe",
|
|
15013
15134
|
source: "pi",
|
|
15014
15135
|
sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
|
|
@@ -15163,9 +15284,9 @@ function normalizeDigestValue(value) {
|
|
|
15163
15284
|
function stableManifestDigest(value) {
|
|
15164
15285
|
return digestBytes(new TextEncoder().encode(JSON.stringify(normalizeDigestValue(value))));
|
|
15165
15286
|
}
|
|
15166
|
-
function packageEntriesDigest(
|
|
15287
|
+
function packageEntriesDigest(entries, packageIdentities = []) {
|
|
15167
15288
|
return stableManifestDigest({
|
|
15168
|
-
entries: [...
|
|
15289
|
+
entries: [...entries].sort((left, right) => left.path.localeCompare(right.path)).map((entry) => ({ path: entry.path, digest: entry.digest, mode: entry.mode })),
|
|
15169
15290
|
packageIdentities: [...packageIdentities].sort(
|
|
15170
15291
|
(left, right) => left.lockPath.localeCompare(right.lockPath)
|
|
15171
15292
|
)
|
|
@@ -15613,12 +15734,12 @@ async function removeInstallation(targetRoot, faultInjector, capabilityIds) {
|
|
|
15613
15734
|
const removes = manifest.entries.filter((entry) => unchanged.has(entry.path)).map((entry) => entry.path);
|
|
15614
15735
|
const preserved = manifest.entries.filter((entry) => !unchanged.has(entry.path));
|
|
15615
15736
|
const nextManifest = preserved.length ? (() => {
|
|
15616
|
-
const
|
|
15617
|
-
const preservedPaths = new Set(
|
|
15737
|
+
const entries = Object.freeze(preserved);
|
|
15738
|
+
const preservedPaths = new Set(entries.map((entry) => entry.path));
|
|
15618
15739
|
const packageIdentities = Object.freeze(
|
|
15619
15740
|
manifest.packageIdentities.filter((identity3) => preservedPaths.has(identity3.lockPath))
|
|
15620
15741
|
);
|
|
15621
|
-
const packageDigest = packageEntriesDigest(
|
|
15742
|
+
const packageDigest = packageEntriesDigest(entries, packageIdentities);
|
|
15622
15743
|
const base = {
|
|
15623
15744
|
runtimeId: manifest.runtimeId,
|
|
15624
15745
|
packageVersion: manifest.packageVersion,
|
|
@@ -15626,7 +15747,7 @@ async function removeInstallation(targetRoot, faultInjector, capabilityIds) {
|
|
|
15626
15747
|
journalVersion: manifest.journalVersion,
|
|
15627
15748
|
lifecycleState: "modified",
|
|
15628
15749
|
packageIdentities,
|
|
15629
|
-
entries
|
|
15750
|
+
entries
|
|
15630
15751
|
};
|
|
15631
15752
|
return {
|
|
15632
15753
|
...manifest,
|