@acidicsoil/portable-capabilities 0.1.10 → 0.1.15
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 +30 -0
- package/README.md +12 -9
- package/dist-release/cli.js +209 -146
- package/dist-release/cli.js.map +3 -3
- package/dist-release/index.js +209 -146
- package/dist-release/index.js.map +3 -3
- package/package.json +3 -2
package/dist-release/cli.js
CHANGED
|
@@ -1997,13 +1997,13 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1997
1997
|
* @param {string} source - expected values are default/config/env/cli/implied
|
|
1998
1998
|
* @return {Command} `this` command for chaining
|
|
1999
1999
|
*/
|
|
2000
|
-
setOptionValueWithSource(key, value,
|
|
2000
|
+
setOptionValueWithSource(key, value, source2) {
|
|
2001
2001
|
if (this._storeOptionsAsProperties) {
|
|
2002
2002
|
this[key] = value;
|
|
2003
2003
|
} else {
|
|
2004
2004
|
this._optionValues[key] = value;
|
|
2005
2005
|
}
|
|
2006
|
-
this._optionValueSources[key] =
|
|
2006
|
+
this._optionValueSources[key] = source2;
|
|
2007
2007
|
return this;
|
|
2008
2008
|
}
|
|
2009
2009
|
/**
|
|
@@ -2024,13 +2024,13 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
2024
2024
|
* @return {string}
|
|
2025
2025
|
*/
|
|
2026
2026
|
getOptionValueSourceWithGlobals(key) {
|
|
2027
|
-
let
|
|
2027
|
+
let source2;
|
|
2028
2028
|
this._getCommandAndAncestors().forEach((cmd) => {
|
|
2029
2029
|
if (cmd.getOptionValueSource(key) !== void 0) {
|
|
2030
|
-
|
|
2030
|
+
source2 = cmd.getOptionValueSource(key);
|
|
2031
2031
|
}
|
|
2032
2032
|
});
|
|
2033
|
-
return
|
|
2033
|
+
return source2;
|
|
2034
2034
|
}
|
|
2035
2035
|
/**
|
|
2036
2036
|
* Get user arguments from implied or explicit arguments.
|
|
@@ -2900,8 +2900,8 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
2900
2900
|
const getErrorMessage = (option2) => {
|
|
2901
2901
|
const bestOption = findBestOptionFromValue(option2);
|
|
2902
2902
|
const optionKey = bestOption.attributeName();
|
|
2903
|
-
const
|
|
2904
|
-
if (
|
|
2903
|
+
const source2 = this.getOptionValueSource(optionKey);
|
|
2904
|
+
if (source2 === "env") {
|
|
2905
2905
|
return `environment variable '${bestOption.envVar}'`;
|
|
2906
2906
|
}
|
|
2907
2907
|
return `option '${bestOption.flags}'`;
|
|
@@ -3684,6 +3684,15 @@ function resolveRuntimeEvidence(claim4, runtimeVersion) {
|
|
|
3684
3684
|
reason: !applicable ? "version-inapplicable" : !sufficientState ? "insufficient-evidence" : !verified ? "unverified" : !confident ? "low-confidence" : !sourceComplete ? "incomplete-source" : claim4.stability === "deprecated" ? "deprecated" : "usable"
|
|
3685
3685
|
};
|
|
3686
3686
|
}
|
|
3687
|
+
function areRuntimeEvidenceClaimsUsable(claimIds, runtimeId, claims, runtimeVersion) {
|
|
3688
|
+
if (claimIds.length === 0) return false;
|
|
3689
|
+
return claimIds.every((claimId) => {
|
|
3690
|
+
const claim4 = claims.find(
|
|
3691
|
+
(candidate) => candidate.id === claimId && candidate.runtimeId === runtimeId
|
|
3692
|
+
);
|
|
3693
|
+
return claim4 !== void 0 && resolveRuntimeEvidence(claim4, runtimeVersion).usableForAutomaticInstall;
|
|
3694
|
+
});
|
|
3695
|
+
}
|
|
3687
3696
|
|
|
3688
3697
|
// packages/compiler/src/negotiation/adapter-registry.ts
|
|
3689
3698
|
var adapterIds = Object.freeze([
|
|
@@ -3706,7 +3715,9 @@ function negotiateCapability(artifact, descriptor, claims, version) {
|
|
|
3706
3715
|
return artifact.invocationIntents.map((intent) => {
|
|
3707
3716
|
const surface = descriptor.surfaces.find(
|
|
3708
3717
|
(x) => x.semanticKind === intent && (x.versionRange === void 0 || isRuntimeVersionInRange(x.versionRange, version)) && x.evidenceClaimIds.some((claimId) => {
|
|
3709
|
-
const claim4 = claims.find(
|
|
3718
|
+
const claim4 = claims.find(
|
|
3719
|
+
(candidate) => candidate.id === claimId && candidate.runtimeId === descriptor.id
|
|
3720
|
+
);
|
|
3710
3721
|
return claim4 !== void 0 && resolveRuntimeEvidence(claim4, version).reason !== "version-inapplicable";
|
|
3711
3722
|
})
|
|
3712
3723
|
);
|
|
@@ -3723,8 +3734,12 @@ function negotiateCapability(artifact, descriptor, claims, version) {
|
|
|
3723
3734
|
evidenceClaimIds: [],
|
|
3724
3735
|
reason: "no matching surface"
|
|
3725
3736
|
};
|
|
3726
|
-
const
|
|
3727
|
-
|
|
3737
|
+
const usable = areRuntimeEvidenceClaimsUsable(
|
|
3738
|
+
surface.evidenceClaimIds,
|
|
3739
|
+
descriptor.id,
|
|
3740
|
+
claims,
|
|
3741
|
+
version
|
|
3742
|
+
);
|
|
3728
3743
|
const degraded = descriptor.degradation.find((d) => d.from === intent);
|
|
3729
3744
|
return {
|
|
3730
3745
|
intent,
|
|
@@ -3985,7 +4000,22 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
|
|
|
3985
4000
|
request.runtimeVersion
|
|
3986
4001
|
);
|
|
3987
4002
|
const projectionPlan = planProjection(artifact, descriptor.id, request.scope, negotiations);
|
|
3988
|
-
const
|
|
4003
|
+
const evidenceBackedDescriptor = {
|
|
4004
|
+
...descriptor,
|
|
4005
|
+
locations: descriptor.locations.filter(
|
|
4006
|
+
(location) => location.installation === "manual" || location.installation === "unsupported" || areRuntimeEvidenceClaimsUsable(
|
|
4007
|
+
location.evidenceClaimIds,
|
|
4008
|
+
descriptor.id,
|
|
4009
|
+
policyClaims,
|
|
4010
|
+
request.runtimeVersion
|
|
4011
|
+
)
|
|
4012
|
+
)
|
|
4013
|
+
};
|
|
4014
|
+
const baseInstallationPlan = planInstallation(
|
|
4015
|
+
projectionPlan,
|
|
4016
|
+
evidenceBackedDescriptor,
|
|
4017
|
+
request.runtimeVersion
|
|
4018
|
+
);
|
|
3989
4019
|
const mutatingIntent = request.intent === "setup" || request.intent === "update";
|
|
3990
4020
|
let installationPlan = mutatingIntent ? baseInstallationPlan : { ...baseInstallationPlan, operations: [] };
|
|
3991
4021
|
if (request.intent === "remove") {
|
|
@@ -7802,11 +7832,11 @@ var getToStream = (destination7, to = "stdin") => {
|
|
|
7802
7832
|
}
|
|
7803
7833
|
return destinationStream;
|
|
7804
7834
|
};
|
|
7805
|
-
var getFromStream = (
|
|
7835
|
+
var getFromStream = (source2, from = "stdout") => {
|
|
7806
7836
|
const isWritable = false;
|
|
7807
|
-
const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(
|
|
7837
|
+
const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source2);
|
|
7808
7838
|
const fdNumber = getFdNumber(fileDescriptors, from, isWritable);
|
|
7809
|
-
const sourceStream = fdNumber === "all" ?
|
|
7839
|
+
const sourceStream = fdNumber === "all" ? source2.all : source2.stdio[fdNumber];
|
|
7810
7840
|
if (sourceStream === null || sourceStream === void 0) {
|
|
7811
7841
|
throw new TypeError(getInvalidStdioOptionMessage(fdNumber, from, options, isWritable));
|
|
7812
7842
|
}
|
|
@@ -9508,17 +9538,17 @@ var PASSTHROUGH_LISTENERS_PER_STREAM = 1;
|
|
|
9508
9538
|
|
|
9509
9539
|
// node_modules/.pnpm/execa@10.0.0/node_modules/execa/lib/io/pipeline.js
|
|
9510
9540
|
import { finished as finished3 } from "node:stream/promises";
|
|
9511
|
-
var pipeStreams = (
|
|
9512
|
-
|
|
9513
|
-
onSourceFinish(
|
|
9514
|
-
onDestinationFinish(
|
|
9541
|
+
var pipeStreams = (source2, destination7) => {
|
|
9542
|
+
source2.pipe(destination7);
|
|
9543
|
+
onSourceFinish(source2, destination7);
|
|
9544
|
+
onDestinationFinish(source2, destination7);
|
|
9515
9545
|
};
|
|
9516
|
-
var onSourceFinish = async (
|
|
9517
|
-
if (isStandardStream(
|
|
9546
|
+
var onSourceFinish = async (source2, destination7) => {
|
|
9547
|
+
if (isStandardStream(source2) || isStandardStream(destination7)) {
|
|
9518
9548
|
return;
|
|
9519
9549
|
}
|
|
9520
9550
|
try {
|
|
9521
|
-
await finished3(
|
|
9551
|
+
await finished3(source2, { cleanup: true, readable: true, writable: false });
|
|
9522
9552
|
} catch {
|
|
9523
9553
|
}
|
|
9524
9554
|
endDestinationStream(destination7);
|
|
@@ -9528,19 +9558,19 @@ var endDestinationStream = (destination7) => {
|
|
|
9528
9558
|
destination7.end();
|
|
9529
9559
|
}
|
|
9530
9560
|
};
|
|
9531
|
-
var onDestinationFinish = async (
|
|
9532
|
-
if (isStandardStream(
|
|
9561
|
+
var onDestinationFinish = async (source2, destination7) => {
|
|
9562
|
+
if (isStandardStream(source2) || isStandardStream(destination7)) {
|
|
9533
9563
|
return;
|
|
9534
9564
|
}
|
|
9535
9565
|
try {
|
|
9536
9566
|
await finished3(destination7, { cleanup: true, readable: false, writable: true });
|
|
9537
9567
|
} catch {
|
|
9538
9568
|
}
|
|
9539
|
-
abortSourceStream(
|
|
9569
|
+
abortSourceStream(source2);
|
|
9540
9570
|
};
|
|
9541
|
-
var abortSourceStream = (
|
|
9542
|
-
if (
|
|
9543
|
-
|
|
9571
|
+
var abortSourceStream = (source2) => {
|
|
9572
|
+
if (source2.readable) {
|
|
9573
|
+
source2.destroy();
|
|
9544
9574
|
}
|
|
9545
9575
|
};
|
|
9546
9576
|
|
|
@@ -10264,7 +10294,7 @@ var createWritableStream = (subprocess, writableOptions) => Writable3.toWeb(subp
|
|
|
10264
10294
|
var createTransformStream = (subprocess, duplexOptions) => Duplex3.toWeb(subprocess.duplex(duplexOptions));
|
|
10265
10295
|
|
|
10266
10296
|
// node_modules/.pnpm/execa@10.0.0/node_modules/execa/lib/pipe/pipe-arguments.js
|
|
10267
|
-
var normalizePipeArguments = ({ source:
|
|
10297
|
+
var normalizePipeArguments = ({ source: source2, sourcePromise, boundOptions, createNested }, ...pipeArguments) => {
|
|
10268
10298
|
const startTime = getStartTime();
|
|
10269
10299
|
const {
|
|
10270
10300
|
destination: destination7,
|
|
@@ -10273,8 +10303,8 @@ var normalizePipeArguments = ({ source: source3, sourcePromise, boundOptions, cr
|
|
|
10273
10303
|
from,
|
|
10274
10304
|
unpipeSignal
|
|
10275
10305
|
} = getDestinationStream(boundOptions, createNested, pipeArguments);
|
|
10276
|
-
const { sourceStream, sourceError } = getSourceStream(
|
|
10277
|
-
const { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(
|
|
10306
|
+
const { sourceStream, sourceError } = getSourceStream(source2, from);
|
|
10307
|
+
const { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(source2);
|
|
10278
10308
|
return {
|
|
10279
10309
|
sourcePromise,
|
|
10280
10310
|
sourceStream,
|
|
@@ -10327,9 +10357,9 @@ var getDestination = (boundOptions, createNested, firstArgument, ...pipeArgument
|
|
|
10327
10357
|
throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`);
|
|
10328
10358
|
};
|
|
10329
10359
|
var mapDestinationArguments = ({ options }) => ({ options: { ...options, stdin: "pipe", piped: true } });
|
|
10330
|
-
var getSourceStream = (
|
|
10360
|
+
var getSourceStream = (source2, from) => {
|
|
10331
10361
|
try {
|
|
10332
|
-
const sourceStream = getFromStream(
|
|
10362
|
+
const sourceStream = getFromStream(source2, from);
|
|
10333
10363
|
return { sourceStream };
|
|
10334
10364
|
} catch (error) {
|
|
10335
10365
|
return { sourceError: error };
|
|
@@ -11733,7 +11763,7 @@ function writeEnvelope(envelope, format2) {
|
|
|
11733
11763
|
}
|
|
11734
11764
|
|
|
11735
11765
|
// packages/cli/src/release.ts
|
|
11736
|
-
var cliVersion = true ? "0.1.
|
|
11766
|
+
var cliVersion = true ? "0.1.15" : createRequire(import.meta.url)("../../../package.json").version;
|
|
11737
11767
|
|
|
11738
11768
|
// packages/adapters/src/antigravity/materialize.ts
|
|
11739
11769
|
import { resolve as resolve2 } from "node:path";
|
|
@@ -11892,7 +11922,7 @@ var antigravityRuntimeDescriptor = {
|
|
|
11892
11922
|
schemaVersion: "1.0",
|
|
11893
11923
|
id: "antigravity",
|
|
11894
11924
|
aliases: ["google-antigravity", "antigravity-cli"],
|
|
11895
|
-
supportedVersions: [">=2.0.0"],
|
|
11925
|
+
supportedVersions: [">=1.1.4 <2.0.0"],
|
|
11896
11926
|
locations: [
|
|
11897
11927
|
{
|
|
11898
11928
|
id: "antigravity-project-skills",
|
|
@@ -11991,11 +12021,11 @@ var antigravityRuntimeDescriptor = {
|
|
|
11991
12021
|
evidenceState: "source-observed"
|
|
11992
12022
|
},
|
|
11993
12023
|
{
|
|
11994
|
-
id: "antigravity-
|
|
12024
|
+
id: "antigravity-workspace-rules",
|
|
11995
12025
|
semanticKind: "rule",
|
|
11996
12026
|
integrationMode: "declarative",
|
|
11997
12027
|
adapterId: markdown,
|
|
11998
|
-
discovery: "
|
|
12028
|
+
discovery: "Workspace rules may be discovered from .agents/rules when verified for a supported client.",
|
|
11999
12029
|
invocation: "Rules apply according to their activation mode.",
|
|
12000
12030
|
precedence: ["workspace", "global"],
|
|
12001
12031
|
evidenceClaimIds: ["antigravity.cli.discovery.rules"],
|
|
@@ -12003,11 +12033,11 @@ var antigravityRuntimeDescriptor = {
|
|
|
12003
12033
|
evidenceState: "source-observed"
|
|
12004
12034
|
},
|
|
12005
12035
|
{
|
|
12006
|
-
id: "antigravity-
|
|
12036
|
+
id: "antigravity-workspace-agents",
|
|
12007
12037
|
semanticKind: "agent",
|
|
12008
12038
|
integrationMode: "declarative",
|
|
12009
12039
|
adapterId: markdown,
|
|
12010
|
-
discovery: "
|
|
12040
|
+
discovery: "Workspace agents may be discovered from .agents/agents when verified for a supported client.",
|
|
12011
12041
|
invocation: "Invoke through the native subagent interface.",
|
|
12012
12042
|
precedence: ["workspace", "global"],
|
|
12013
12043
|
evidenceClaimIds: ["antigravity.cli.discovery.agents"],
|
|
@@ -12015,11 +12045,11 @@ var antigravityRuntimeDescriptor = {
|
|
|
12015
12045
|
evidenceState: "source-observed"
|
|
12016
12046
|
},
|
|
12017
12047
|
{
|
|
12018
|
-
id: "antigravity-
|
|
12048
|
+
id: "antigravity-workspace-hooks",
|
|
12019
12049
|
semanticKind: "hook",
|
|
12020
12050
|
integrationMode: "declarative",
|
|
12021
12051
|
adapterId: hook,
|
|
12022
|
-
discovery: "hooks.json
|
|
12052
|
+
discovery: "Workspace hooks may be discovered from hooks.json when verified for a supported client.",
|
|
12023
12053
|
invocation: "Hooks participate in native tool and invocation events.",
|
|
12024
12054
|
precedence: ["workspace", "global", "plugin"],
|
|
12025
12055
|
evidenceClaimIds: ["antigravity.cli.hooks"],
|
|
@@ -12027,11 +12057,11 @@ var antigravityRuntimeDescriptor = {
|
|
|
12027
12057
|
evidenceState: "source-observed"
|
|
12028
12058
|
},
|
|
12029
12059
|
{
|
|
12030
|
-
id: "antigravity-
|
|
12060
|
+
id: "antigravity-workspace-mcp",
|
|
12031
12061
|
semanticKind: "mcp",
|
|
12032
12062
|
integrationMode: "declarative",
|
|
12033
12063
|
adapterId: mcp,
|
|
12034
|
-
discovery: "mcp_config.json
|
|
12064
|
+
discovery: "Workspace MCP may be discovered from mcp_config.json when verified for a supported client.",
|
|
12035
12065
|
invocation: "MCP servers are exposed as native tools.",
|
|
12036
12066
|
precedence: ["workspace", "global"],
|
|
12037
12067
|
evidenceClaimIds: ["antigravity.cli.mcp"],
|
|
@@ -12079,148 +12109,148 @@ var antigravityRuntimeDescriptor = {
|
|
|
12079
12109
|
// packages/adapters/src/antigravity/runtime-evidence.ts
|
|
12080
12110
|
import { createHash as createHash7 } from "node:crypto";
|
|
12081
12111
|
var digest2 = (value) => createHash7("sha256").update(value).digest("hex");
|
|
12082
|
-
var retrievedAt = "2026-08-
|
|
12083
|
-
var
|
|
12084
|
-
var
|
|
12085
|
-
|
|
12086
|
-
|
|
12087
|
-
|
|
12088
|
-
|
|
12089
|
-
|
|
12090
|
-
|
|
12091
|
-
|
|
12092
|
-
|
|
12093
|
-
|
|
12094
|
-
|
|
12095
|
-
|
|
12096
|
-
|
|
12097
|
-
|
|
12098
|
-
|
|
12099
|
-
|
|
12100
|
-
|
|
12101
|
-
|
|
12112
|
+
var retrievedAt = "2026-08-15T00:00:00.000Z";
|
|
12113
|
+
var cliVersionRange = ">=1.1.4 <2.0.0";
|
|
12114
|
+
var cliDocs = "https://codelabs.developers.google.com/antigravity/how-to-create-agent-skills-for-antigravity-cli";
|
|
12115
|
+
var productDocs = "https://www.antigravity.google/product/antigravity-cli";
|
|
12116
|
+
var sourceClaim = (id, category, subject, assertion, locator, options = {}) => {
|
|
12117
|
+
const state = options.state ?? "source-observed";
|
|
12118
|
+
return {
|
|
12119
|
+
schemaVersion: "1.0",
|
|
12120
|
+
id,
|
|
12121
|
+
runtimeId: "antigravity",
|
|
12122
|
+
category,
|
|
12123
|
+
subject,
|
|
12124
|
+
assertion,
|
|
12125
|
+
versionRange: options.versionRange ?? cliVersionRange,
|
|
12126
|
+
sourceType: "official-docs",
|
|
12127
|
+
source: options.source ?? cliDocs,
|
|
12128
|
+
sourceLocator: locator,
|
|
12129
|
+
sourceDigest: digest2(`${id}:${assertion}:${locator}`),
|
|
12130
|
+
state,
|
|
12131
|
+
confidence: state === "unknown" ? "low" : "high",
|
|
12132
|
+
verificationStatus: state === "unknown" ? "unverified" : "verified",
|
|
12133
|
+
stability: state === "unknown" ? "version-gated" : "stable",
|
|
12134
|
+
verifiedAt: retrievedAt
|
|
12135
|
+
};
|
|
12136
|
+
};
|
|
12102
12137
|
var antigravityRuntimeEvidence = [
|
|
12103
12138
|
sourceClaim(
|
|
12104
12139
|
"antigravity.location.project-skills",
|
|
12105
12140
|
"location",
|
|
12106
12141
|
"workspace skill root",
|
|
12107
|
-
"Antigravity discovers workspace skills beneath .agents/skills.",
|
|
12108
|
-
"
|
|
12142
|
+
"Antigravity CLI discovers workspace skills beneath .agents/skills.",
|
|
12143
|
+
"Skill location: .agents/skills/<skill-name>/SKILL.md"
|
|
12109
12144
|
),
|
|
12110
12145
|
sourceClaim(
|
|
12111
12146
|
"antigravity.location.project-rules",
|
|
12112
12147
|
"location",
|
|
12113
12148
|
"workspace rule root",
|
|
12114
|
-
"
|
|
12115
|
-
"
|
|
12149
|
+
"The native workspace rule path is not established by the verified CLI skill documentation.",
|
|
12150
|
+
"Workspace rule path: not established",
|
|
12151
|
+
{ source: productDocs, state: "unknown" }
|
|
12116
12152
|
),
|
|
12117
12153
|
sourceClaim(
|
|
12118
12154
|
"antigravity.location.project-agents",
|
|
12119
12155
|
"location",
|
|
12120
12156
|
"workspace agent root",
|
|
12121
|
-
"
|
|
12122
|
-
"
|
|
12157
|
+
"The native workspace agent path is not established by the verified CLI skill documentation.",
|
|
12158
|
+
"Workspace agent path: not established",
|
|
12159
|
+
{ source: productDocs, state: "unknown" }
|
|
12123
12160
|
),
|
|
12124
12161
|
sourceClaim(
|
|
12125
12162
|
"antigravity.location.project-hooks",
|
|
12126
12163
|
"location",
|
|
12127
12164
|
"workspace hook config",
|
|
12128
|
-
"
|
|
12129
|
-
"
|
|
12165
|
+
"The native workspace hook path is not established by the verified CLI skill documentation.",
|
|
12166
|
+
"Workspace hook path: not established",
|
|
12167
|
+
{ source: productDocs, state: "unknown" }
|
|
12130
12168
|
),
|
|
12131
12169
|
sourceClaim(
|
|
12132
12170
|
"antigravity.location.project-mcp",
|
|
12133
12171
|
"location",
|
|
12134
12172
|
"workspace MCP config",
|
|
12135
|
-
"
|
|
12136
|
-
"
|
|
12173
|
+
"The native workspace MCP configuration path is not established by the verified CLI skill documentation.",
|
|
12174
|
+
"Workspace MCP path: not established",
|
|
12175
|
+
{ source: productDocs, state: "unknown" }
|
|
12137
12176
|
),
|
|
12138
12177
|
sourceClaim(
|
|
12139
12178
|
"antigravity.location.plugins",
|
|
12140
12179
|
"location",
|
|
12141
12180
|
"CLI plugin staging root",
|
|
12142
|
-
"
|
|
12143
|
-
"
|
|
12181
|
+
"The native CLI plugin staging path is not established by the verified CLI skill documentation.",
|
|
12182
|
+
"CLI plugin staging path: not established",
|
|
12183
|
+
{ source: productDocs, state: "unknown" }
|
|
12144
12184
|
),
|
|
12145
12185
|
sourceClaim(
|
|
12146
12186
|
"antigravity.workflow.storage",
|
|
12147
12187
|
"location",
|
|
12148
12188
|
"workflow storage",
|
|
12149
12189
|
"Workflow physical storage path is not established by primary public documentation.",
|
|
12150
|
-
"
|
|
12151
|
-
"unknown"
|
|
12190
|
+
"Workflow storage path: not established",
|
|
12191
|
+
{ source: productDocs, state: "unknown" }
|
|
12152
12192
|
),
|
|
12153
12193
|
sourceClaim(
|
|
12154
12194
|
"antigravity.cli.discovery.skills",
|
|
12155
12195
|
"discovery",
|
|
12156
12196
|
"CLI skill discovery",
|
|
12157
|
-
"Antigravity CLI discovers project skills from .agents/skills.",
|
|
12158
|
-
"
|
|
12159
|
-
"source-observed",
|
|
12160
|
-
"cli"
|
|
12197
|
+
"Antigravity CLI automatically discovers project skills from .agents/skills.",
|
|
12198
|
+
"Skill discovery and /skills listing"
|
|
12161
12199
|
),
|
|
12162
12200
|
sourceClaim(
|
|
12163
12201
|
"antigravity.cli.invocation.skills",
|
|
12164
12202
|
"invocation",
|
|
12165
12203
|
"CLI skill invocation",
|
|
12166
|
-
"Antigravity CLI
|
|
12167
|
-
"
|
|
12168
|
-
"source-observed",
|
|
12169
|
-
"cli"
|
|
12204
|
+
"Antigravity CLI can list and invoke a discovered skill from the project workspace.",
|
|
12205
|
+
"Launch with agy; invoke through the skill-aware CLI workflow"
|
|
12170
12206
|
),
|
|
12171
12207
|
sourceClaim(
|
|
12172
12208
|
"antigravity.ide.discovery.skills",
|
|
12173
12209
|
"discovery",
|
|
12174
12210
|
"IDE skill discovery",
|
|
12175
|
-
"
|
|
12176
|
-
"
|
|
12177
|
-
|
|
12178
|
-
"ide"
|
|
12211
|
+
"IDE skill discovery is not established by the verified CLI skill documentation.",
|
|
12212
|
+
"IDE skill discovery: not established",
|
|
12213
|
+
{ source: productDocs, state: "unknown" }
|
|
12179
12214
|
),
|
|
12180
12215
|
sourceClaim(
|
|
12181
12216
|
"antigravity.cli.discovery.rules",
|
|
12182
12217
|
"discovery",
|
|
12183
|
-
"
|
|
12184
|
-
"Workspace
|
|
12185
|
-
"
|
|
12186
|
-
|
|
12187
|
-
"2.0"
|
|
12218
|
+
"workspace rule discovery",
|
|
12219
|
+
"Workspace rule discovery is not established by the verified CLI skill documentation.",
|
|
12220
|
+
"Workspace rule discovery: not established",
|
|
12221
|
+
{ source: productDocs, state: "unknown" }
|
|
12188
12222
|
),
|
|
12189
12223
|
sourceClaim(
|
|
12190
12224
|
"antigravity.cli.discovery.agents",
|
|
12191
12225
|
"discovery",
|
|
12192
|
-
"
|
|
12193
|
-
"
|
|
12194
|
-
"
|
|
12195
|
-
|
|
12196
|
-
"2.0"
|
|
12226
|
+
"workspace agent discovery",
|
|
12227
|
+
"Workspace agent discovery is not established by the verified CLI skill documentation.",
|
|
12228
|
+
"Workspace agent discovery: not established",
|
|
12229
|
+
{ source: productDocs, state: "unknown" }
|
|
12197
12230
|
),
|
|
12198
12231
|
sourceClaim(
|
|
12199
12232
|
"antigravity.cli.hooks",
|
|
12200
12233
|
"hooks",
|
|
12201
|
-
"
|
|
12202
|
-
"Workspace
|
|
12203
|
-
"
|
|
12204
|
-
|
|
12205
|
-
"2.0"
|
|
12234
|
+
"workspace hook registration",
|
|
12235
|
+
"Workspace hook registration is not established by the verified CLI skill documentation.",
|
|
12236
|
+
"Workspace hook registration: not established",
|
|
12237
|
+
{ source: productDocs, state: "unknown" }
|
|
12206
12238
|
),
|
|
12207
12239
|
sourceClaim(
|
|
12208
12240
|
"antigravity.cli.mcp",
|
|
12209
12241
|
"mcp",
|
|
12210
|
-
"
|
|
12211
|
-
"Workspace MCP
|
|
12212
|
-
"
|
|
12213
|
-
|
|
12214
|
-
"2.0"
|
|
12242
|
+
"workspace MCP registration",
|
|
12243
|
+
"Workspace MCP registration is not established by the verified CLI skill documentation.",
|
|
12244
|
+
"Workspace MCP registration: not established",
|
|
12245
|
+
{ source: productDocs, state: "unknown" }
|
|
12215
12246
|
),
|
|
12216
12247
|
sourceClaim(
|
|
12217
12248
|
"antigravity.cli.plugins",
|
|
12218
12249
|
"plugin",
|
|
12219
12250
|
"CLI plugin registration",
|
|
12220
|
-
"CLI
|
|
12221
|
-
"
|
|
12222
|
-
|
|
12223
|
-
"cli"
|
|
12251
|
+
"CLI plugin registration is not established by the verified CLI skill documentation.",
|
|
12252
|
+
"CLI plugin registration: not established",
|
|
12253
|
+
{ source: productDocs, state: "unknown" }
|
|
12224
12254
|
)
|
|
12225
12255
|
];
|
|
12226
12256
|
|
|
@@ -13290,7 +13320,7 @@ async function prepareDCodeMaterialization(plan, root) {
|
|
|
13290
13320
|
|
|
13291
13321
|
// packages/adapters/src/dcode/runtime-descriptor.ts
|
|
13292
13322
|
var markdown3 = "materialize-markdown";
|
|
13293
|
-
var
|
|
13323
|
+
var source = "source-observed";
|
|
13294
13324
|
var dcodeRuntimeDescriptor = {
|
|
13295
13325
|
schemaVersion: "1.0",
|
|
13296
13326
|
id: "dcode",
|
|
@@ -13349,7 +13379,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13349
13379
|
precedence: ["project"],
|
|
13350
13380
|
evidenceClaimIds: ["dcode.discovery.cli-skill", "dcode.invocation.cli-skill"],
|
|
13351
13381
|
stability: "stable",
|
|
13352
|
-
evidenceState:
|
|
13382
|
+
evidenceState: source
|
|
13353
13383
|
},
|
|
13354
13384
|
{
|
|
13355
13385
|
id: "dcode-cli-instructions",
|
|
@@ -13361,7 +13391,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13361
13391
|
precedence: ["project"],
|
|
13362
13392
|
evidenceClaimIds: ["dcode.location.project-root"],
|
|
13363
13393
|
stability: "stable",
|
|
13364
|
-
evidenceState:
|
|
13394
|
+
evidenceState: source
|
|
13365
13395
|
},
|
|
13366
13396
|
{
|
|
13367
13397
|
id: "dcode-cli-sync-subagents",
|
|
@@ -13373,7 +13403,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13373
13403
|
precedence: ["project", "user"],
|
|
13374
13404
|
evidenceClaimIds: ["dcode.cli.sync-subagents"],
|
|
13375
13405
|
stability: "version-gated",
|
|
13376
|
-
evidenceState:
|
|
13406
|
+
evidenceState: source
|
|
13377
13407
|
},
|
|
13378
13408
|
{
|
|
13379
13409
|
id: "dcode-cli-memory",
|
|
@@ -13385,7 +13415,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13385
13415
|
precedence: ["project", "user"],
|
|
13386
13416
|
evidenceClaimIds: ["dcode.cli.memory"],
|
|
13387
13417
|
stability: "version-gated",
|
|
13388
|
-
evidenceState:
|
|
13418
|
+
evidenceState: source
|
|
13389
13419
|
},
|
|
13390
13420
|
{
|
|
13391
13421
|
id: "dcode-cli-mcp",
|
|
@@ -13397,7 +13427,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13397
13427
|
precedence: ["project", "user"],
|
|
13398
13428
|
evidenceClaimIds: ["dcode.cli.mcp"],
|
|
13399
13429
|
stability: "version-gated",
|
|
13400
|
-
evidenceState:
|
|
13430
|
+
evidenceState: source
|
|
13401
13431
|
},
|
|
13402
13432
|
{
|
|
13403
13433
|
id: "dcode-cli-configuration",
|
|
@@ -13409,7 +13439,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13409
13439
|
precedence: ["project", "user"],
|
|
13410
13440
|
evidenceClaimIds: ["dcode.cli.configuration"],
|
|
13411
13441
|
stability: "version-gated",
|
|
13412
|
-
evidenceState:
|
|
13442
|
+
evidenceState: source
|
|
13413
13443
|
},
|
|
13414
13444
|
{
|
|
13415
13445
|
id: "dcode-cli-advisory-hooks",
|
|
@@ -13421,7 +13451,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13421
13451
|
precedence: ["project", "user"],
|
|
13422
13452
|
evidenceClaimIds: ["dcode.hooks.advisory"],
|
|
13423
13453
|
stability: "version-gated",
|
|
13424
|
-
evidenceState:
|
|
13454
|
+
evidenceState: source
|
|
13425
13455
|
},
|
|
13426
13456
|
{
|
|
13427
13457
|
id: "dcode-sdk-tools",
|
|
@@ -13433,7 +13463,7 @@ var dcodeRuntimeDescriptor = {
|
|
|
13433
13463
|
precedence: ["sdk"],
|
|
13434
13464
|
evidenceClaimIds: ["dcode.sdk.tools"],
|
|
13435
13465
|
stability: "version-gated",
|
|
13436
|
-
evidenceState:
|
|
13466
|
+
evidenceState: source
|
|
13437
13467
|
},
|
|
13438
13468
|
{
|
|
13439
13469
|
id: "dcode-cli-async-subagents",
|
|
@@ -15085,7 +15115,8 @@ var piRuntimeDescriptor = {
|
|
|
15085
15115
|
// packages/adapters/src/pi/runtime-evidence.ts
|
|
15086
15116
|
import { createHash as createHash13 } from "node:crypto";
|
|
15087
15117
|
var digest8 = (value) => createHash13("sha256").update(value).digest("hex");
|
|
15088
|
-
var observedAt2 = "2026-08-
|
|
15118
|
+
var observedAt2 = "2026-08-15T00:00:00.000Z";
|
|
15119
|
+
var skillsDocs = "https://pi.dev/docs/latest/skills";
|
|
15089
15120
|
var piRuntimeEvidence = [
|
|
15090
15121
|
{
|
|
15091
15122
|
schemaVersion: "1.0",
|
|
@@ -15147,13 +15178,13 @@ var piRuntimeEvidence = [
|
|
|
15147
15178
|
runtimeId: "pi",
|
|
15148
15179
|
category: "discovery",
|
|
15149
15180
|
subject: "native skill discovery",
|
|
15150
|
-
assertion: "Pi
|
|
15151
|
-
versionRange: "
|
|
15152
|
-
sourceType: "
|
|
15153
|
-
source:
|
|
15154
|
-
sourceLocator: "
|
|
15155
|
-
sourceDigest: digest8("Pi
|
|
15156
|
-
state: "
|
|
15181
|
+
assertion: "Pi discovers project skills beneath .pi/skills.",
|
|
15182
|
+
versionRange: ">=0.64.0",
|
|
15183
|
+
sourceType: "official-docs",
|
|
15184
|
+
source: skillsDocs,
|
|
15185
|
+
sourceLocator: "Project skills: .pi/skills/",
|
|
15186
|
+
sourceDigest: digest8("Pi project skills .pi/skills official docs"),
|
|
15187
|
+
state: "source-observed",
|
|
15157
15188
|
confidence: "high",
|
|
15158
15189
|
verificationStatus: "verified",
|
|
15159
15190
|
stability: "stable",
|
|
@@ -15165,13 +15196,13 @@ var piRuntimeEvidence = [
|
|
|
15165
15196
|
runtimeId: "pi",
|
|
15166
15197
|
category: "invocation",
|
|
15167
15198
|
subject: "native skill invocation",
|
|
15168
|
-
assertion: "Pi
|
|
15169
|
-
versionRange: "
|
|
15170
|
-
sourceType: "
|
|
15171
|
-
source:
|
|
15172
|
-
sourceLocator: "
|
|
15173
|
-
sourceDigest: digest8("Pi
|
|
15174
|
-
state: "
|
|
15199
|
+
assertion: "Pi loads a discovered skill when its description matches the task or the user invokes /skill:name.",
|
|
15200
|
+
versionRange: ">=0.64.0",
|
|
15201
|
+
sourceType: "official-docs",
|
|
15202
|
+
source: skillsDocs,
|
|
15203
|
+
sourceLocator: "Skill loading and invocation: /skill:name",
|
|
15204
|
+
sourceDigest: digest8("Pi skill invocation official docs"),
|
|
15205
|
+
state: "source-observed",
|
|
15175
15206
|
confidence: "high",
|
|
15176
15207
|
verificationStatus: "verified",
|
|
15177
15208
|
stability: "stable",
|
|
@@ -15437,10 +15468,10 @@ async function writeJournal(targetRoot, journal) {
|
|
|
15437
15468
|
);
|
|
15438
15469
|
await rename2(temporary, path9);
|
|
15439
15470
|
}
|
|
15440
|
-
async function copyAtomically(
|
|
15471
|
+
async function copyAtomically(source2, target, mode) {
|
|
15441
15472
|
await mkdir3(dirname3(target), { recursive: true });
|
|
15442
15473
|
const temporary = `${target}.pc-stage-${process.pid}`;
|
|
15443
|
-
await copyFile(
|
|
15474
|
+
await copyFile(source2, temporary);
|
|
15444
15475
|
await chmod(temporary, mode);
|
|
15445
15476
|
await rename2(temporary, target);
|
|
15446
15477
|
}
|
|
@@ -15459,13 +15490,13 @@ function result(operation, state, values = {}) {
|
|
|
15459
15490
|
};
|
|
15460
15491
|
}
|
|
15461
15492
|
async function backupPath(targetRoot, transactionRoot, path9) {
|
|
15462
|
-
const
|
|
15463
|
-
if (!await pathExists(
|
|
15493
|
+
const source2 = await assertNoSymlinkInPreparedPath(targetRoot, path9);
|
|
15494
|
+
if (!await pathExists(source2)) return false;
|
|
15464
15495
|
await assertNoSymlinkInPreparedPath(targetRoot, path9);
|
|
15465
15496
|
const target = join3(transactionRoot, "backup", path9);
|
|
15466
15497
|
await mkdir3(dirname3(target), { recursive: true });
|
|
15467
15498
|
await assertNoSymlinkInPreparedPath(targetRoot, path9);
|
|
15468
|
-
await copyFile(
|
|
15499
|
+
await copyFile(source2, target);
|
|
15469
15500
|
return true;
|
|
15470
15501
|
}
|
|
15471
15502
|
async function restoreTransaction(targetRoot, transactionRoot, mutations, manifestHadOriginal, options) {
|
|
@@ -15791,6 +15822,7 @@ function operationalContract(role) {
|
|
|
15791
15822
|
resources: [
|
|
15792
15823
|
roleFacet(role, "resources"),
|
|
15793
15824
|
"Load [resource:resources/contract.json] for the complete role contract.",
|
|
15825
|
+
"Load [resource:resources/input.schema.json] before interpreting capability inputs.",
|
|
15794
15826
|
"Load [resource:resources/output.schema.json] before constructing the final output."
|
|
15795
15827
|
],
|
|
15796
15828
|
ambiguityAndAbstention: [roleFacet(role, "ambiguity"), roleFacet(role, "abstention")],
|
|
@@ -15835,6 +15867,20 @@ async function loadCanonicalArtifact(catalogRoot, capabilityId) {
|
|
|
15835
15867
|
if (isAbsolute3(schemaRelativePath) || schemaRelativePath.startsWith(".."))
|
|
15836
15868
|
throw new Error(`Canonical output schema escapes catalog: ${role.output.schema}`);
|
|
15837
15869
|
const schemaContent = await readFile6(schemaFile, "utf8");
|
|
15870
|
+
const inputSchemaContent = `${JSON.stringify(
|
|
15871
|
+
{
|
|
15872
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
15873
|
+
type: "object",
|
|
15874
|
+
properties: Object.fromEntries(
|
|
15875
|
+
role.inputs.map((input) => [input.name, { description: input.description }])
|
|
15876
|
+
),
|
|
15877
|
+
required: role.inputs.filter((input) => input.required).map((input) => input.name),
|
|
15878
|
+
additionalProperties: true
|
|
15879
|
+
},
|
|
15880
|
+
null,
|
|
15881
|
+
2
|
|
15882
|
+
)}
|
|
15883
|
+
`;
|
|
15838
15884
|
const contract = operationalContract(role);
|
|
15839
15885
|
const contractContent = `${JSON.stringify(
|
|
15840
15886
|
{ ...role, output: { ...role.output, schema: "resources/output.schema.json" } },
|
|
@@ -15843,6 +15889,13 @@ async function loadCanonicalArtifact(catalogRoot, capabilityId) {
|
|
|
15843
15889
|
)}
|
|
15844
15890
|
`;
|
|
15845
15891
|
const resources = [
|
|
15892
|
+
resource(
|
|
15893
|
+
file,
|
|
15894
|
+
"role.inputs",
|
|
15895
|
+
"resources/input.schema.json",
|
|
15896
|
+
"application/schema+json",
|
|
15897
|
+
inputSchemaContent
|
|
15898
|
+
),
|
|
15846
15899
|
resource(
|
|
15847
15900
|
file,
|
|
15848
15901
|
role.output.schema,
|
|
@@ -15907,6 +15960,14 @@ function previewSetup(request, artifact, descriptor, claims, ownershipManifest)
|
|
|
15907
15960
|
const body = { ...plan, selectedSurfaces, conversions, conflicts };
|
|
15908
15961
|
return { ...body, digest: stableDigest(body) };
|
|
15909
15962
|
}
|
|
15963
|
+
function negotiationDiagnostics(previews) {
|
|
15964
|
+
return previews.flatMap(
|
|
15965
|
+
(preview) => preview.negotiations.filter((negotiation) => negotiation.installationMode !== "automatic").map((negotiation) => {
|
|
15966
|
+
const evidence = negotiation.evidenceClaimIds.join(", ") || "no evidence claims";
|
|
15967
|
+
return `${negotiation.intent}: ${negotiation.installationMode} (${negotiation.reason}) [${evidence}]`;
|
|
15968
|
+
})
|
|
15969
|
+
);
|
|
15970
|
+
}
|
|
15910
15971
|
function composeInstallationPlan(previews, artifacts, runtimeId) {
|
|
15911
15972
|
const first = previews[0]?.installationPlan;
|
|
15912
15973
|
if (!first) throw new Error("at least one installation plan is required");
|
|
@@ -15999,15 +16060,17 @@ async function executeSetupSelection(request, artifacts, descriptor, claims, con
|
|
|
15999
16060
|
const duplicatePath = prepared.mutations.map((mutation) => mutation.path).find((path9, index, paths) => paths.indexOf(path9) !== index);
|
|
16000
16061
|
if (duplicatePath)
|
|
16001
16062
|
throw new Error(`Selection produced duplicate prepared path: ${duplicatePath}`);
|
|
16063
|
+
const preparedDiagnostics = [
|
|
16064
|
+
...prepared.diagnostics?.map(
|
|
16065
|
+
(diagnostic6) => `${diagnostic6.kind}: ${diagnostic6.message}`
|
|
16066
|
+
) ?? [],
|
|
16067
|
+
...executionRequest.intent === "remove" ? [] : negotiationDiagnostics(previews)
|
|
16068
|
+
];
|
|
16002
16069
|
return executePreparedInstallation({
|
|
16003
16070
|
...lifecycleOptions,
|
|
16004
16071
|
preparedOperation: executionRequest.intent === "update" ? "upgrade" : executionRequest.intent === "remove" ? "remove" : "install",
|
|
16005
16072
|
preparedMutations: prepared.mutations,
|
|
16006
|
-
...
|
|
16007
|
-
preparedDiagnostics: prepared.diagnostics.map(
|
|
16008
|
-
(diagnostic6) => `${diagnostic6.kind}: ${diagnostic6.message}`
|
|
16009
|
-
)
|
|
16010
|
-
} : {}
|
|
16073
|
+
...preparedDiagnostics.length > 0 ? { preparedDiagnostics } : {}
|
|
16011
16074
|
});
|
|
16012
16075
|
})() : await statusInstallation(targetRoot);
|
|
16013
16076
|
return { request, previews, lifecycle };
|