@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.
@@ -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, source3) {
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] = source3;
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 source3;
2027
+ let source2;
2028
2028
  this._getCommandAndAncestors().forEach((cmd) => {
2029
2029
  if (cmd.getOptionValueSource(key) !== void 0) {
2030
- source3 = cmd.getOptionValueSource(key);
2030
+ source2 = cmd.getOptionValueSource(key);
2031
2031
  }
2032
2032
  });
2033
- return source3;
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 source3 = this.getOptionValueSource(optionKey);
2904
- if (source3 === "env") {
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((candidate) => candidate.id === claimId);
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 related = claims.filter((c4) => surface.evidenceClaimIds.includes(c4.id));
3727
- const usable = related.length > 0 && related.every((c4) => resolveRuntimeEvidence(c4, version).usableForAutomaticInstall);
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 baseInstallationPlan = planInstallation(projectionPlan, descriptor, request.runtimeVersion);
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 = (source3, from = "stdout") => {
7835
+ var getFromStream = (source2, from = "stdout") => {
7806
7836
  const isWritable = false;
7807
- const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source3);
7837
+ const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source2);
7808
7838
  const fdNumber = getFdNumber(fileDescriptors, from, isWritable);
7809
- const sourceStream = fdNumber === "all" ? source3.all : source3.stdio[fdNumber];
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 = (source3, destination7) => {
9512
- source3.pipe(destination7);
9513
- onSourceFinish(source3, destination7);
9514
- onDestinationFinish(source3, destination7);
9541
+ var pipeStreams = (source2, destination7) => {
9542
+ source2.pipe(destination7);
9543
+ onSourceFinish(source2, destination7);
9544
+ onDestinationFinish(source2, destination7);
9515
9545
  };
9516
- var onSourceFinish = async (source3, destination7) => {
9517
- if (isStandardStream(source3) || isStandardStream(destination7)) {
9546
+ var onSourceFinish = async (source2, destination7) => {
9547
+ if (isStandardStream(source2) || isStandardStream(destination7)) {
9518
9548
  return;
9519
9549
  }
9520
9550
  try {
9521
- await finished3(source3, { cleanup: true, readable: true, writable: false });
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 (source3, destination7) => {
9532
- if (isStandardStream(source3) || isStandardStream(destination7)) {
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(source3);
9569
+ abortSourceStream(source2);
9540
9570
  };
9541
- var abortSourceStream = (source3) => {
9542
- if (source3.readable) {
9543
- source3.destroy();
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: source3, sourcePromise, boundOptions, createNested }, ...pipeArguments) => {
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(source3, from);
10277
- const { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(source3);
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 = (source3, from) => {
10360
+ var getSourceStream = (source2, from) => {
10331
10361
  try {
10332
- const sourceStream = getFromStream(source3, from);
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.10" : createRequire(import.meta.url)("../../../package.json").version;
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-2.0-rules",
12024
+ id: "antigravity-workspace-rules",
11995
12025
  semanticKind: "rule",
11996
12026
  integrationMode: "declarative",
11997
12027
  adapterId: markdown,
11998
- discovery: "2.0 workspace rules are discovered from .agents/rules.",
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-2.0-agents",
12036
+ id: "antigravity-workspace-agents",
12007
12037
  semanticKind: "agent",
12008
12038
  integrationMode: "declarative",
12009
12039
  adapterId: markdown,
12010
- discovery: "Custom agents are discovered from .agents/agents.",
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-2.0-hooks",
12048
+ id: "antigravity-workspace-hooks",
12019
12049
  semanticKind: "hook",
12020
12050
  integrationMode: "declarative",
12021
12051
  adapterId: hook,
12022
- discovery: "hooks.json is discovered at workspace scope.",
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-2.0-mcp",
12060
+ id: "antigravity-workspace-mcp",
12031
12061
  semanticKind: "mcp",
12032
12062
  integrationMode: "declarative",
12033
12063
  adapterId: mcp,
12034
- discovery: "mcp_config.json is discovered at workspace scope.",
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-10T00:00:00.000Z";
12083
- var source = "docs/RFC/runtime-capability-profiles-revised.md";
12084
- var sourceClaim = (id, category, subject, assertion, locator, state = "source-observed", mode = "2.0") => ({
12085
- schemaVersion: "1.0",
12086
- id,
12087
- runtimeId: "antigravity",
12088
- category,
12089
- subject,
12090
- assertion,
12091
- versionRange: `product-mode:${mode}; >=2.0.0`,
12092
- sourceType: "official-source",
12093
- source,
12094
- sourceLocator: locator,
12095
- sourceDigest: digest2(`${id}:${assertion}:${locator}`),
12096
- state,
12097
- confidence: state === "unknown" ? "medium" : "high",
12098
- verificationStatus: state === "unknown" ? "unverified" : "verified",
12099
- stability: state === "unknown" ? "version-gated" : "stable",
12100
- verifiedAt: retrievedAt
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
- "Section 9: .agents/skills/<name>/SKILL.md"
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
- "Antigravity discovers workspace rules beneath .agents/rules.",
12115
- "Section 9: .agents/rules/*.md"
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
- "Antigravity discovers custom agents beneath .agents/agents.",
12122
- "Section 3: .agents/agents/<name>.md"
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
- "Antigravity discovers workspace hooks from .agents/hooks.json.",
12129
- "Section 3: .agents/hooks.json"
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
- "Antigravity discovers workspace MCP servers from .agents/mcp_config.json.",
12136
- "Section 3: .agents/mcp_config.json"
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
- "Antigravity CLI stages plugins beneath the documented Gemini plugin root.",
12143
- "Section 2: ~/.gemini/antigravity-cli/plugins/<plugin-name>/"
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
- "Section 9: workflow storage unknown",
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
- "Section 3; CLI mode; source observation only",
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 skill invocation is documented but not runtime-observed.",
12167
- "Section 6; CLI mode; runtime unavailable",
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
- "Antigravity IDE uses the shared .agents/skills workspace root.",
12176
- "Section 3; IDE mode; runtime unavailable",
12177
- "source-observed",
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
- "2.0 rule discovery",
12184
- "Workspace rules are discovered from .agents/rules.",
12185
- "Section 3; Antigravity 2.0 mode",
12186
- "source-observed",
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
- "2.0 agent discovery",
12193
- "Custom agents are discovered from .agents/agents.",
12194
- "Section 3; Antigravity 2.0 mode",
12195
- "source-observed",
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
- "2.0 hook registration",
12202
- "Workspace hooks use .agents/hooks.json and typed tool decisions.",
12203
- "Section 6; Antigravity 2.0 mode",
12204
- "source-observed",
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
- "2.0 MCP registration",
12211
- "Workspace MCP uses .agents/mcp_config.json.",
12212
- "Section 3; Antigravity 2.0 mode",
12213
- "source-observed",
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 plugins require staged bundles with plugin.json.",
12221
- "Section 5; CLI mode",
12222
- "source-observed",
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 source2 = "source-observed";
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: source2
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: source2
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: source2
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: source2
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: source2
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: source2
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: source2
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: source2
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-08T04:24:00-05:00";
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 natively discovers a project skill with extensions disabled.",
15151
- versionRange: "=0.64.0",
15152
- sourceType: "runtime-probe",
15153
- source: "pi",
15154
- sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
15155
- sourceDigest: digest8("Pi native discovery with extensions disabled"),
15156
- state: "runtime-observed",
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 invokes a discovered project skill with extensions disabled.",
15169
- versionRange: "=0.64.0",
15170
- sourceType: "runtime-probe",
15171
- source: "pi",
15172
- sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
15173
- sourceDigest: digest8("Pi native invocation with extensions disabled"),
15174
- state: "runtime-observed",
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(source3, target, mode) {
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(source3, temporary);
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 source3 = await assertNoSymlinkInPreparedPath(targetRoot, path9);
15463
- if (!await pathExists(source3)) return false;
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(source3, target);
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
- ...prepared.diagnostics ? {
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 };