@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}'`;
@@ -3784,10 +3784,10 @@ async function writeJournal(targetRoot, journal) {
3784
3784
  );
3785
3785
  await rename2(temporary, path9);
3786
3786
  }
3787
- async function copyAtomically(source3, target, mode) {
3787
+ async function copyAtomically(source2, target, mode) {
3788
3788
  await mkdir2(dirname3(target), { recursive: true });
3789
3789
  const temporary = `${target}.pc-stage-${process.pid}`;
3790
- await copyFile(source3, temporary);
3790
+ await copyFile(source2, temporary);
3791
3791
  await chmod(temporary, mode);
3792
3792
  await rename2(temporary, target);
3793
3793
  }
@@ -3970,13 +3970,13 @@ async function planReconciliation(options, manifest, desired) {
3970
3970
  return { writes, removes, preserved, nextManifest };
3971
3971
  }
3972
3972
  async function backupPath(targetRoot, transactionRoot, path9) {
3973
- const source3 = await assertNoSymlinkInPreparedPath(targetRoot, path9);
3974
- if (!await pathExists(source3)) return false;
3973
+ const source2 = await assertNoSymlinkInPreparedPath(targetRoot, path9);
3974
+ if (!await pathExists(source2)) return false;
3975
3975
  await assertNoSymlinkInPreparedPath(targetRoot, path9);
3976
3976
  const target = join3(transactionRoot, "backup", path9);
3977
3977
  await mkdir2(dirname3(target), { recursive: true });
3978
3978
  await assertNoSymlinkInPreparedPath(targetRoot, path9);
3979
- await copyFile(source3, target);
3979
+ await copyFile(source2, target);
3980
3980
  return true;
3981
3981
  }
3982
3982
  async function restoreTransaction(targetRoot, transactionRoot, mutations, manifestHadOriginal, options) {
@@ -8143,11 +8143,11 @@ var getToStream = (destination7, to = "stdin") => {
8143
8143
  }
8144
8144
  return destinationStream;
8145
8145
  };
8146
- var getFromStream = (source3, from = "stdout") => {
8146
+ var getFromStream = (source2, from = "stdout") => {
8147
8147
  const isWritable = false;
8148
- const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source3);
8148
+ const { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source2);
8149
8149
  const fdNumber = getFdNumber(fileDescriptors, from, isWritable);
8150
- const sourceStream = fdNumber === "all" ? source3.all : source3.stdio[fdNumber];
8150
+ const sourceStream = fdNumber === "all" ? source2.all : source2.stdio[fdNumber];
8151
8151
  if (sourceStream === null || sourceStream === void 0) {
8152
8152
  throw new TypeError(getInvalidStdioOptionMessage(fdNumber, from, options, isWritable));
8153
8153
  }
@@ -9849,17 +9849,17 @@ var PASSTHROUGH_LISTENERS_PER_STREAM = 1;
9849
9849
 
9850
9850
  // node_modules/.pnpm/execa@10.0.0/node_modules/execa/lib/io/pipeline.js
9851
9851
  import { finished as finished3 } from "node:stream/promises";
9852
- var pipeStreams = (source3, destination7) => {
9853
- source3.pipe(destination7);
9854
- onSourceFinish(source3, destination7);
9855
- onDestinationFinish(source3, destination7);
9852
+ var pipeStreams = (source2, destination7) => {
9853
+ source2.pipe(destination7);
9854
+ onSourceFinish(source2, destination7);
9855
+ onDestinationFinish(source2, destination7);
9856
9856
  };
9857
- var onSourceFinish = async (source3, destination7) => {
9858
- if (isStandardStream(source3) || isStandardStream(destination7)) {
9857
+ var onSourceFinish = async (source2, destination7) => {
9858
+ if (isStandardStream(source2) || isStandardStream(destination7)) {
9859
9859
  return;
9860
9860
  }
9861
9861
  try {
9862
- await finished3(source3, { cleanup: true, readable: true, writable: false });
9862
+ await finished3(source2, { cleanup: true, readable: true, writable: false });
9863
9863
  } catch {
9864
9864
  }
9865
9865
  endDestinationStream(destination7);
@@ -9869,19 +9869,19 @@ var endDestinationStream = (destination7) => {
9869
9869
  destination7.end();
9870
9870
  }
9871
9871
  };
9872
- var onDestinationFinish = async (source3, destination7) => {
9873
- if (isStandardStream(source3) || isStandardStream(destination7)) {
9872
+ var onDestinationFinish = async (source2, destination7) => {
9873
+ if (isStandardStream(source2) || isStandardStream(destination7)) {
9874
9874
  return;
9875
9875
  }
9876
9876
  try {
9877
9877
  await finished3(destination7, { cleanup: true, readable: false, writable: true });
9878
9878
  } catch {
9879
9879
  }
9880
- abortSourceStream(source3);
9880
+ abortSourceStream(source2);
9881
9881
  };
9882
- var abortSourceStream = (source3) => {
9883
- if (source3.readable) {
9884
- source3.destroy();
9882
+ var abortSourceStream = (source2) => {
9883
+ if (source2.readable) {
9884
+ source2.destroy();
9885
9885
  }
9886
9886
  };
9887
9887
 
@@ -10605,7 +10605,7 @@ var createWritableStream = (subprocess, writableOptions) => Writable3.toWeb(subp
10605
10605
  var createTransformStream = (subprocess, duplexOptions) => Duplex3.toWeb(subprocess.duplex(duplexOptions));
10606
10606
 
10607
10607
  // node_modules/.pnpm/execa@10.0.0/node_modules/execa/lib/pipe/pipe-arguments.js
10608
- var normalizePipeArguments = ({ source: source3, sourcePromise, boundOptions, createNested }, ...pipeArguments) => {
10608
+ var normalizePipeArguments = ({ source: source2, sourcePromise, boundOptions, createNested }, ...pipeArguments) => {
10609
10609
  const startTime = getStartTime();
10610
10610
  const {
10611
10611
  destination: destination7,
@@ -10614,8 +10614,8 @@ var normalizePipeArguments = ({ source: source3, sourcePromise, boundOptions, cr
10614
10614
  from,
10615
10615
  unpipeSignal
10616
10616
  } = getDestinationStream(boundOptions, createNested, pipeArguments);
10617
- const { sourceStream, sourceError } = getSourceStream(source3, from);
10618
- const { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(source3);
10617
+ const { sourceStream, sourceError } = getSourceStream(source2, from);
10618
+ const { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(source2);
10619
10619
  return {
10620
10620
  sourcePromise,
10621
10621
  sourceStream,
@@ -10668,9 +10668,9 @@ var getDestination = (boundOptions, createNested, firstArgument, ...pipeArgument
10668
10668
  throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`);
10669
10669
  };
10670
10670
  var mapDestinationArguments = ({ options }) => ({ options: { ...options, stdin: "pipe", piped: true } });
10671
- var getSourceStream = (source3, from) => {
10671
+ var getSourceStream = (source2, from) => {
10672
10672
  try {
10673
- const sourceStream = getFromStream(source3, from);
10673
+ const sourceStream = getFromStream(source2, from);
10674
10674
  return { sourceStream };
10675
10675
  } catch (error) {
10676
10676
  return { sourceError: error };
@@ -12153,6 +12153,15 @@ function resolveRuntimeEvidence(claim4, runtimeVersion) {
12153
12153
  reason: !applicable ? "version-inapplicable" : !sufficientState ? "insufficient-evidence" : !verified ? "unverified" : !confident ? "low-confidence" : !sourceComplete ? "incomplete-source" : claim4.stability === "deprecated" ? "deprecated" : "usable"
12154
12154
  };
12155
12155
  }
12156
+ function areRuntimeEvidenceClaimsUsable(claimIds, runtimeId, claims, runtimeVersion) {
12157
+ if (claimIds.length === 0) return false;
12158
+ return claimIds.every((claimId) => {
12159
+ const claim4 = claims.find(
12160
+ (candidate) => candidate.id === claimId && candidate.runtimeId === runtimeId
12161
+ );
12162
+ return claim4 !== void 0 && resolveRuntimeEvidence(claim4, runtimeVersion).usableForAutomaticInstall;
12163
+ });
12164
+ }
12156
12165
 
12157
12166
  // packages/compiler/src/negotiation/adapter-registry.ts
12158
12167
  var adapterIds = Object.freeze([
@@ -12175,7 +12184,9 @@ function negotiateCapability(artifact, descriptor, claims, version) {
12175
12184
  return artifact.invocationIntents.map((intent) => {
12176
12185
  const surface = descriptor.surfaces.find(
12177
12186
  (x) => x.semanticKind === intent && (x.versionRange === void 0 || isRuntimeVersionInRange(x.versionRange, version)) && x.evidenceClaimIds.some((claimId) => {
12178
- const claim4 = claims.find((candidate) => candidate.id === claimId);
12187
+ const claim4 = claims.find(
12188
+ (candidate) => candidate.id === claimId && candidate.runtimeId === descriptor.id
12189
+ );
12179
12190
  return claim4 !== void 0 && resolveRuntimeEvidence(claim4, version).reason !== "version-inapplicable";
12180
12191
  })
12181
12192
  );
@@ -12192,8 +12203,12 @@ function negotiateCapability(artifact, descriptor, claims, version) {
12192
12203
  evidenceClaimIds: [],
12193
12204
  reason: "no matching surface"
12194
12205
  };
12195
- const related = claims.filter((c4) => surface.evidenceClaimIds.includes(c4.id));
12196
- const usable = related.length > 0 && related.every((c4) => resolveRuntimeEvidence(c4, version).usableForAutomaticInstall);
12206
+ const usable = areRuntimeEvidenceClaimsUsable(
12207
+ surface.evidenceClaimIds,
12208
+ descriptor.id,
12209
+ claims,
12210
+ version
12211
+ );
12197
12212
  const degraded = descriptor.degradation.find((d) => d.from === intent);
12198
12213
  return {
12199
12214
  intent,
@@ -12454,7 +12469,22 @@ function planSetup(request, artifact, descriptor, claims, ownershipManifest) {
12454
12469
  request.runtimeVersion
12455
12470
  );
12456
12471
  const projectionPlan = planProjection(artifact, descriptor.id, request.scope, negotiations);
12457
- const baseInstallationPlan = planInstallation(projectionPlan, descriptor, request.runtimeVersion);
12472
+ const evidenceBackedDescriptor = {
12473
+ ...descriptor,
12474
+ locations: descriptor.locations.filter(
12475
+ (location) => location.installation === "manual" || location.installation === "unsupported" || areRuntimeEvidenceClaimsUsable(
12476
+ location.evidenceClaimIds,
12477
+ descriptor.id,
12478
+ policyClaims,
12479
+ request.runtimeVersion
12480
+ )
12481
+ )
12482
+ };
12483
+ const baseInstallationPlan = planInstallation(
12484
+ projectionPlan,
12485
+ evidenceBackedDescriptor,
12486
+ request.runtimeVersion
12487
+ );
12458
12488
  const mutatingIntent = request.intent === "setup" || request.intent === "update";
12459
12489
  let installationPlan = mutatingIntent ? baseInstallationPlan : { ...baseInstallationPlan, operations: [] };
12460
12490
  if (request.intent === "remove") {
@@ -12640,7 +12670,7 @@ async function resolveVerifiedCapabilityEntrypoint(options) {
12640
12670
  }
12641
12671
 
12642
12672
  // packages/cli/src/release.ts
12643
- var cliVersion = true ? "0.1.10" : createRequire(import.meta.url)("../../../package.json").version;
12673
+ var cliVersion = true ? "0.1.15" : createRequire(import.meta.url)("../../../package.json").version;
12644
12674
 
12645
12675
  // packages/adapters/src/antigravity/materialize.ts
12646
12676
  import { resolve as resolve4 } from "node:path";
@@ -12799,7 +12829,7 @@ var antigravityRuntimeDescriptor = {
12799
12829
  schemaVersion: "1.0",
12800
12830
  id: "antigravity",
12801
12831
  aliases: ["google-antigravity", "antigravity-cli"],
12802
- supportedVersions: [">=2.0.0"],
12832
+ supportedVersions: [">=1.1.4 <2.0.0"],
12803
12833
  locations: [
12804
12834
  {
12805
12835
  id: "antigravity-project-skills",
@@ -12898,11 +12928,11 @@ var antigravityRuntimeDescriptor = {
12898
12928
  evidenceState: "source-observed"
12899
12929
  },
12900
12930
  {
12901
- id: "antigravity-2.0-rules",
12931
+ id: "antigravity-workspace-rules",
12902
12932
  semanticKind: "rule",
12903
12933
  integrationMode: "declarative",
12904
12934
  adapterId: markdown,
12905
- discovery: "2.0 workspace rules are discovered from .agents/rules.",
12935
+ discovery: "Workspace rules may be discovered from .agents/rules when verified for a supported client.",
12906
12936
  invocation: "Rules apply according to their activation mode.",
12907
12937
  precedence: ["workspace", "global"],
12908
12938
  evidenceClaimIds: ["antigravity.cli.discovery.rules"],
@@ -12910,11 +12940,11 @@ var antigravityRuntimeDescriptor = {
12910
12940
  evidenceState: "source-observed"
12911
12941
  },
12912
12942
  {
12913
- id: "antigravity-2.0-agents",
12943
+ id: "antigravity-workspace-agents",
12914
12944
  semanticKind: "agent",
12915
12945
  integrationMode: "declarative",
12916
12946
  adapterId: markdown,
12917
- discovery: "Custom agents are discovered from .agents/agents.",
12947
+ discovery: "Workspace agents may be discovered from .agents/agents when verified for a supported client.",
12918
12948
  invocation: "Invoke through the native subagent interface.",
12919
12949
  precedence: ["workspace", "global"],
12920
12950
  evidenceClaimIds: ["antigravity.cli.discovery.agents"],
@@ -12922,11 +12952,11 @@ var antigravityRuntimeDescriptor = {
12922
12952
  evidenceState: "source-observed"
12923
12953
  },
12924
12954
  {
12925
- id: "antigravity-2.0-hooks",
12955
+ id: "antigravity-workspace-hooks",
12926
12956
  semanticKind: "hook",
12927
12957
  integrationMode: "declarative",
12928
12958
  adapterId: hook,
12929
- discovery: "hooks.json is discovered at workspace scope.",
12959
+ discovery: "Workspace hooks may be discovered from hooks.json when verified for a supported client.",
12930
12960
  invocation: "Hooks participate in native tool and invocation events.",
12931
12961
  precedence: ["workspace", "global", "plugin"],
12932
12962
  evidenceClaimIds: ["antigravity.cli.hooks"],
@@ -12934,11 +12964,11 @@ var antigravityRuntimeDescriptor = {
12934
12964
  evidenceState: "source-observed"
12935
12965
  },
12936
12966
  {
12937
- id: "antigravity-2.0-mcp",
12967
+ id: "antigravity-workspace-mcp",
12938
12968
  semanticKind: "mcp",
12939
12969
  integrationMode: "declarative",
12940
12970
  adapterId: mcp,
12941
- discovery: "mcp_config.json is discovered at workspace scope.",
12971
+ discovery: "Workspace MCP may be discovered from mcp_config.json when verified for a supported client.",
12942
12972
  invocation: "MCP servers are exposed as native tools.",
12943
12973
  precedence: ["workspace", "global"],
12944
12974
  evidenceClaimIds: ["antigravity.cli.mcp"],
@@ -12986,148 +13016,148 @@ var antigravityRuntimeDescriptor = {
12986
13016
  // packages/adapters/src/antigravity/runtime-evidence.ts
12987
13017
  import { createHash as createHash9 } from "node:crypto";
12988
13018
  var digest2 = (value) => createHash9("sha256").update(value).digest("hex");
12989
- var retrievedAt = "2026-08-10T00:00:00.000Z";
12990
- var source = "docs/RFC/runtime-capability-profiles-revised.md";
12991
- var sourceClaim = (id, category, subject, assertion, locator, state = "source-observed", mode = "2.0") => ({
12992
- schemaVersion: "1.0",
12993
- id,
12994
- runtimeId: "antigravity",
12995
- category,
12996
- subject,
12997
- assertion,
12998
- versionRange: `product-mode:${mode}; >=2.0.0`,
12999
- sourceType: "official-source",
13000
- source,
13001
- sourceLocator: locator,
13002
- sourceDigest: digest2(`${id}:${assertion}:${locator}`),
13003
- state,
13004
- confidence: state === "unknown" ? "medium" : "high",
13005
- verificationStatus: state === "unknown" ? "unverified" : "verified",
13006
- stability: state === "unknown" ? "version-gated" : "stable",
13007
- verifiedAt: retrievedAt
13008
- });
13019
+ var retrievedAt = "2026-08-15T00:00:00.000Z";
13020
+ var cliVersionRange = ">=1.1.4 <2.0.0";
13021
+ var cliDocs = "https://codelabs.developers.google.com/antigravity/how-to-create-agent-skills-for-antigravity-cli";
13022
+ var productDocs = "https://www.antigravity.google/product/antigravity-cli";
13023
+ var sourceClaim = (id, category, subject, assertion, locator, options = {}) => {
13024
+ const state = options.state ?? "source-observed";
13025
+ return {
13026
+ schemaVersion: "1.0",
13027
+ id,
13028
+ runtimeId: "antigravity",
13029
+ category,
13030
+ subject,
13031
+ assertion,
13032
+ versionRange: options.versionRange ?? cliVersionRange,
13033
+ sourceType: "official-docs",
13034
+ source: options.source ?? cliDocs,
13035
+ sourceLocator: locator,
13036
+ sourceDigest: digest2(`${id}:${assertion}:${locator}`),
13037
+ state,
13038
+ confidence: state === "unknown" ? "low" : "high",
13039
+ verificationStatus: state === "unknown" ? "unverified" : "verified",
13040
+ stability: state === "unknown" ? "version-gated" : "stable",
13041
+ verifiedAt: retrievedAt
13042
+ };
13043
+ };
13009
13044
  var antigravityRuntimeEvidence = [
13010
13045
  sourceClaim(
13011
13046
  "antigravity.location.project-skills",
13012
13047
  "location",
13013
13048
  "workspace skill root",
13014
- "Antigravity discovers workspace skills beneath .agents/skills.",
13015
- "Section 9: .agents/skills/<name>/SKILL.md"
13049
+ "Antigravity CLI discovers workspace skills beneath .agents/skills.",
13050
+ "Skill location: .agents/skills/<skill-name>/SKILL.md"
13016
13051
  ),
13017
13052
  sourceClaim(
13018
13053
  "antigravity.location.project-rules",
13019
13054
  "location",
13020
13055
  "workspace rule root",
13021
- "Antigravity discovers workspace rules beneath .agents/rules.",
13022
- "Section 9: .agents/rules/*.md"
13056
+ "The native workspace rule path is not established by the verified CLI skill documentation.",
13057
+ "Workspace rule path: not established",
13058
+ { source: productDocs, state: "unknown" }
13023
13059
  ),
13024
13060
  sourceClaim(
13025
13061
  "antigravity.location.project-agents",
13026
13062
  "location",
13027
13063
  "workspace agent root",
13028
- "Antigravity discovers custom agents beneath .agents/agents.",
13029
- "Section 3: .agents/agents/<name>.md"
13064
+ "The native workspace agent path is not established by the verified CLI skill documentation.",
13065
+ "Workspace agent path: not established",
13066
+ { source: productDocs, state: "unknown" }
13030
13067
  ),
13031
13068
  sourceClaim(
13032
13069
  "antigravity.location.project-hooks",
13033
13070
  "location",
13034
13071
  "workspace hook config",
13035
- "Antigravity discovers workspace hooks from .agents/hooks.json.",
13036
- "Section 3: .agents/hooks.json"
13072
+ "The native workspace hook path is not established by the verified CLI skill documentation.",
13073
+ "Workspace hook path: not established",
13074
+ { source: productDocs, state: "unknown" }
13037
13075
  ),
13038
13076
  sourceClaim(
13039
13077
  "antigravity.location.project-mcp",
13040
13078
  "location",
13041
13079
  "workspace MCP config",
13042
- "Antigravity discovers workspace MCP servers from .agents/mcp_config.json.",
13043
- "Section 3: .agents/mcp_config.json"
13080
+ "The native workspace MCP configuration path is not established by the verified CLI skill documentation.",
13081
+ "Workspace MCP path: not established",
13082
+ { source: productDocs, state: "unknown" }
13044
13083
  ),
13045
13084
  sourceClaim(
13046
13085
  "antigravity.location.plugins",
13047
13086
  "location",
13048
13087
  "CLI plugin staging root",
13049
- "Antigravity CLI stages plugins beneath the documented Gemini plugin root.",
13050
- "Section 2: ~/.gemini/antigravity-cli/plugins/<plugin-name>/"
13088
+ "The native CLI plugin staging path is not established by the verified CLI skill documentation.",
13089
+ "CLI plugin staging path: not established",
13090
+ { source: productDocs, state: "unknown" }
13051
13091
  ),
13052
13092
  sourceClaim(
13053
13093
  "antigravity.workflow.storage",
13054
13094
  "location",
13055
13095
  "workflow storage",
13056
13096
  "Workflow physical storage path is not established by primary public documentation.",
13057
- "Section 9: workflow storage unknown",
13058
- "unknown"
13097
+ "Workflow storage path: not established",
13098
+ { source: productDocs, state: "unknown" }
13059
13099
  ),
13060
13100
  sourceClaim(
13061
13101
  "antigravity.cli.discovery.skills",
13062
13102
  "discovery",
13063
13103
  "CLI skill discovery",
13064
- "Antigravity CLI discovers project skills from .agents/skills.",
13065
- "Section 3; CLI mode; source observation only",
13066
- "source-observed",
13067
- "cli"
13104
+ "Antigravity CLI automatically discovers project skills from .agents/skills.",
13105
+ "Skill discovery and /skills listing"
13068
13106
  ),
13069
13107
  sourceClaim(
13070
13108
  "antigravity.cli.invocation.skills",
13071
13109
  "invocation",
13072
13110
  "CLI skill invocation",
13073
- "Antigravity CLI skill invocation is documented but not runtime-observed.",
13074
- "Section 6; CLI mode; runtime unavailable",
13075
- "source-observed",
13076
- "cli"
13111
+ "Antigravity CLI can list and invoke a discovered skill from the project workspace.",
13112
+ "Launch with agy; invoke through the skill-aware CLI workflow"
13077
13113
  ),
13078
13114
  sourceClaim(
13079
13115
  "antigravity.ide.discovery.skills",
13080
13116
  "discovery",
13081
13117
  "IDE skill discovery",
13082
- "Antigravity IDE uses the shared .agents/skills workspace root.",
13083
- "Section 3; IDE mode; runtime unavailable",
13084
- "source-observed",
13085
- "ide"
13118
+ "IDE skill discovery is not established by the verified CLI skill documentation.",
13119
+ "IDE skill discovery: not established",
13120
+ { source: productDocs, state: "unknown" }
13086
13121
  ),
13087
13122
  sourceClaim(
13088
13123
  "antigravity.cli.discovery.rules",
13089
13124
  "discovery",
13090
- "2.0 rule discovery",
13091
- "Workspace rules are discovered from .agents/rules.",
13092
- "Section 3; Antigravity 2.0 mode",
13093
- "source-observed",
13094
- "2.0"
13125
+ "workspace rule discovery",
13126
+ "Workspace rule discovery is not established by the verified CLI skill documentation.",
13127
+ "Workspace rule discovery: not established",
13128
+ { source: productDocs, state: "unknown" }
13095
13129
  ),
13096
13130
  sourceClaim(
13097
13131
  "antigravity.cli.discovery.agents",
13098
13132
  "discovery",
13099
- "2.0 agent discovery",
13100
- "Custom agents are discovered from .agents/agents.",
13101
- "Section 3; Antigravity 2.0 mode",
13102
- "source-observed",
13103
- "2.0"
13133
+ "workspace agent discovery",
13134
+ "Workspace agent discovery is not established by the verified CLI skill documentation.",
13135
+ "Workspace agent discovery: not established",
13136
+ { source: productDocs, state: "unknown" }
13104
13137
  ),
13105
13138
  sourceClaim(
13106
13139
  "antigravity.cli.hooks",
13107
13140
  "hooks",
13108
- "2.0 hook registration",
13109
- "Workspace hooks use .agents/hooks.json and typed tool decisions.",
13110
- "Section 6; Antigravity 2.0 mode",
13111
- "source-observed",
13112
- "2.0"
13141
+ "workspace hook registration",
13142
+ "Workspace hook registration is not established by the verified CLI skill documentation.",
13143
+ "Workspace hook registration: not established",
13144
+ { source: productDocs, state: "unknown" }
13113
13145
  ),
13114
13146
  sourceClaim(
13115
13147
  "antigravity.cli.mcp",
13116
13148
  "mcp",
13117
- "2.0 MCP registration",
13118
- "Workspace MCP uses .agents/mcp_config.json.",
13119
- "Section 3; Antigravity 2.0 mode",
13120
- "source-observed",
13121
- "2.0"
13149
+ "workspace MCP registration",
13150
+ "Workspace MCP registration is not established by the verified CLI skill documentation.",
13151
+ "Workspace MCP registration: not established",
13152
+ { source: productDocs, state: "unknown" }
13122
13153
  ),
13123
13154
  sourceClaim(
13124
13155
  "antigravity.cli.plugins",
13125
13156
  "plugin",
13126
13157
  "CLI plugin registration",
13127
- "CLI plugins require staged bundles with plugin.json.",
13128
- "Section 5; CLI mode",
13129
- "source-observed",
13130
- "cli"
13158
+ "CLI plugin registration is not established by the verified CLI skill documentation.",
13159
+ "CLI plugin registration: not established",
13160
+ { source: productDocs, state: "unknown" }
13131
13161
  )
13132
13162
  ];
13133
13163
 
@@ -14197,7 +14227,7 @@ async function prepareDCodeMaterialization(plan, root) {
14197
14227
 
14198
14228
  // packages/adapters/src/dcode/runtime-descriptor.ts
14199
14229
  var markdown3 = "materialize-markdown";
14200
- var source2 = "source-observed";
14230
+ var source = "source-observed";
14201
14231
  var dcodeRuntimeDescriptor = {
14202
14232
  schemaVersion: "1.0",
14203
14233
  id: "dcode",
@@ -14256,7 +14286,7 @@ var dcodeRuntimeDescriptor = {
14256
14286
  precedence: ["project"],
14257
14287
  evidenceClaimIds: ["dcode.discovery.cli-skill", "dcode.invocation.cli-skill"],
14258
14288
  stability: "stable",
14259
- evidenceState: source2
14289
+ evidenceState: source
14260
14290
  },
14261
14291
  {
14262
14292
  id: "dcode-cli-instructions",
@@ -14268,7 +14298,7 @@ var dcodeRuntimeDescriptor = {
14268
14298
  precedence: ["project"],
14269
14299
  evidenceClaimIds: ["dcode.location.project-root"],
14270
14300
  stability: "stable",
14271
- evidenceState: source2
14301
+ evidenceState: source
14272
14302
  },
14273
14303
  {
14274
14304
  id: "dcode-cli-sync-subagents",
@@ -14280,7 +14310,7 @@ var dcodeRuntimeDescriptor = {
14280
14310
  precedence: ["project", "user"],
14281
14311
  evidenceClaimIds: ["dcode.cli.sync-subagents"],
14282
14312
  stability: "version-gated",
14283
- evidenceState: source2
14313
+ evidenceState: source
14284
14314
  },
14285
14315
  {
14286
14316
  id: "dcode-cli-memory",
@@ -14292,7 +14322,7 @@ var dcodeRuntimeDescriptor = {
14292
14322
  precedence: ["project", "user"],
14293
14323
  evidenceClaimIds: ["dcode.cli.memory"],
14294
14324
  stability: "version-gated",
14295
- evidenceState: source2
14325
+ evidenceState: source
14296
14326
  },
14297
14327
  {
14298
14328
  id: "dcode-cli-mcp",
@@ -14304,7 +14334,7 @@ var dcodeRuntimeDescriptor = {
14304
14334
  precedence: ["project", "user"],
14305
14335
  evidenceClaimIds: ["dcode.cli.mcp"],
14306
14336
  stability: "version-gated",
14307
- evidenceState: source2
14337
+ evidenceState: source
14308
14338
  },
14309
14339
  {
14310
14340
  id: "dcode-cli-configuration",
@@ -14316,7 +14346,7 @@ var dcodeRuntimeDescriptor = {
14316
14346
  precedence: ["project", "user"],
14317
14347
  evidenceClaimIds: ["dcode.cli.configuration"],
14318
14348
  stability: "version-gated",
14319
- evidenceState: source2
14349
+ evidenceState: source
14320
14350
  },
14321
14351
  {
14322
14352
  id: "dcode-cli-advisory-hooks",
@@ -14328,7 +14358,7 @@ var dcodeRuntimeDescriptor = {
14328
14358
  precedence: ["project", "user"],
14329
14359
  evidenceClaimIds: ["dcode.hooks.advisory"],
14330
14360
  stability: "version-gated",
14331
- evidenceState: source2
14361
+ evidenceState: source
14332
14362
  },
14333
14363
  {
14334
14364
  id: "dcode-sdk-tools",
@@ -14340,7 +14370,7 @@ var dcodeRuntimeDescriptor = {
14340
14370
  precedence: ["sdk"],
14341
14371
  evidenceClaimIds: ["dcode.sdk.tools"],
14342
14372
  stability: "version-gated",
14343
- evidenceState: source2
14373
+ evidenceState: source
14344
14374
  },
14345
14375
  {
14346
14376
  id: "dcode-cli-async-subagents",
@@ -15992,7 +16022,8 @@ var piRuntimeDescriptor = {
15992
16022
  // packages/adapters/src/pi/runtime-evidence.ts
15993
16023
  import { createHash as createHash15 } from "node:crypto";
15994
16024
  var digest8 = (value) => createHash15("sha256").update(value).digest("hex");
15995
- var observedAt2 = "2026-08-08T04:24:00-05:00";
16025
+ var observedAt2 = "2026-08-15T00:00:00.000Z";
16026
+ var skillsDocs = "https://pi.dev/docs/latest/skills";
15996
16027
  var piRuntimeEvidence = [
15997
16028
  {
15998
16029
  schemaVersion: "1.0",
@@ -16054,13 +16085,13 @@ var piRuntimeEvidence = [
16054
16085
  runtimeId: "pi",
16055
16086
  category: "discovery",
16056
16087
  subject: "native skill discovery",
16057
- assertion: "Pi natively discovers a project skill with extensions disabled.",
16058
- versionRange: "=0.64.0",
16059
- sourceType: "runtime-probe",
16060
- source: "pi",
16061
- sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
16062
- sourceDigest: digest8("Pi native discovery with extensions disabled"),
16063
- state: "runtime-observed",
16088
+ assertion: "Pi discovers project skills beneath .pi/skills.",
16089
+ versionRange: ">=0.64.0",
16090
+ sourceType: "official-docs",
16091
+ source: skillsDocs,
16092
+ sourceLocator: "Project skills: .pi/skills/",
16093
+ sourceDigest: digest8("Pi project skills .pi/skills official docs"),
16094
+ state: "source-observed",
16064
16095
  confidence: "high",
16065
16096
  verificationStatus: "verified",
16066
16097
  stability: "stable",
@@ -16072,13 +16103,13 @@ var piRuntimeEvidence = [
16072
16103
  runtimeId: "pi",
16073
16104
  category: "invocation",
16074
16105
  subject: "native skill invocation",
16075
- assertion: "Pi invokes a discovered project skill with extensions disabled.",
16076
- versionRange: "=0.64.0",
16077
- sourceType: "runtime-probe",
16078
- source: "pi",
16079
- sourceLocator: "packages/conformance/src/tracer/pi-native-evidence.json",
16080
- sourceDigest: digest8("Pi native invocation with extensions disabled"),
16081
- state: "runtime-observed",
16106
+ assertion: "Pi loads a discovered skill when its description matches the task or the user invokes /skill:name.",
16107
+ versionRange: ">=0.64.0",
16108
+ sourceType: "official-docs",
16109
+ source: skillsDocs,
16110
+ sourceLocator: "Skill loading and invocation: /skill:name",
16111
+ sourceDigest: digest8("Pi skill invocation official docs"),
16112
+ state: "source-observed",
16082
16113
  confidence: "high",
16083
16114
  verificationStatus: "verified",
16084
16115
  stability: "stable",
@@ -16225,6 +16256,7 @@ function operationalContract(role) {
16225
16256
  resources: [
16226
16257
  roleFacet(role, "resources"),
16227
16258
  "Load [resource:resources/contract.json] for the complete role contract.",
16259
+ "Load [resource:resources/input.schema.json] before interpreting capability inputs.",
16228
16260
  "Load [resource:resources/output.schema.json] before constructing the final output."
16229
16261
  ],
16230
16262
  ambiguityAndAbstention: [roleFacet(role, "ambiguity"), roleFacet(role, "abstention")],
@@ -16269,6 +16301,20 @@ async function loadCanonicalArtifact(catalogRoot, capabilityId) {
16269
16301
  if (isAbsolute3(schemaRelativePath) || schemaRelativePath.startsWith(".."))
16270
16302
  throw new Error(`Canonical output schema escapes catalog: ${role.output.schema}`);
16271
16303
  const schemaContent = await readFile6(schemaFile, "utf8");
16304
+ const inputSchemaContent = `${JSON.stringify(
16305
+ {
16306
+ $schema: "https://json-schema.org/draft/2020-12/schema",
16307
+ type: "object",
16308
+ properties: Object.fromEntries(
16309
+ role.inputs.map((input) => [input.name, { description: input.description }])
16310
+ ),
16311
+ required: role.inputs.filter((input) => input.required).map((input) => input.name),
16312
+ additionalProperties: true
16313
+ },
16314
+ null,
16315
+ 2
16316
+ )}
16317
+ `;
16272
16318
  const contract = operationalContract(role);
16273
16319
  const contractContent = `${JSON.stringify(
16274
16320
  { ...role, output: { ...role.output, schema: "resources/output.schema.json" } },
@@ -16277,6 +16323,13 @@ async function loadCanonicalArtifact(catalogRoot, capabilityId) {
16277
16323
  )}
16278
16324
  `;
16279
16325
  const resources = [
16326
+ resource(
16327
+ file,
16328
+ "role.inputs",
16329
+ "resources/input.schema.json",
16330
+ "application/schema+json",
16331
+ inputSchemaContent
16332
+ ),
16280
16333
  resource(
16281
16334
  file,
16282
16335
  role.output.schema,
@@ -16352,6 +16405,14 @@ function renderVerifiedUsage(preview, descriptor, claims, runtimeVersion) {
16352
16405
  return verified ? `${descriptor.id}: ${surface.invocation}` : `${descriptor.id}: native usage unavailable; use manual guidance`;
16353
16406
  });
16354
16407
  }
16408
+ function negotiationDiagnostics(previews) {
16409
+ return previews.flatMap(
16410
+ (preview) => preview.negotiations.filter((negotiation) => negotiation.installationMode !== "automatic").map((negotiation) => {
16411
+ const evidence = negotiation.evidenceClaimIds.join(", ") || "no evidence claims";
16412
+ return `${negotiation.intent}: ${negotiation.installationMode} (${negotiation.reason}) [${evidence}]`;
16413
+ })
16414
+ );
16415
+ }
16355
16416
  function composeInstallationPlan(previews, artifacts, runtimeId) {
16356
16417
  const first = previews[0]?.installationPlan;
16357
16418
  if (!first) throw new Error("at least one installation plan is required");
@@ -16444,15 +16505,17 @@ async function executeSetupSelection(request, artifacts, descriptor, claims, con
16444
16505
  const duplicatePath = prepared.mutations.map((mutation) => mutation.path).find((path9, index, paths) => paths.indexOf(path9) !== index);
16445
16506
  if (duplicatePath)
16446
16507
  throw new Error(`Selection produced duplicate prepared path: ${duplicatePath}`);
16508
+ const preparedDiagnostics = [
16509
+ ...prepared.diagnostics?.map(
16510
+ (diagnostic6) => `${diagnostic6.kind}: ${diagnostic6.message}`
16511
+ ) ?? [],
16512
+ ...executionRequest.intent === "remove" ? [] : negotiationDiagnostics(previews)
16513
+ ];
16447
16514
  return executePreparedInstallation({
16448
16515
  ...lifecycleOptions,
16449
16516
  preparedOperation: executionRequest.intent === "update" ? "upgrade" : executionRequest.intent === "remove" ? "remove" : "install",
16450
16517
  preparedMutations: prepared.mutations,
16451
- ...prepared.diagnostics ? {
16452
- preparedDiagnostics: prepared.diagnostics.map(
16453
- (diagnostic6) => `${diagnostic6.kind}: ${diagnostic6.message}`
16454
- )
16455
- } : {}
16518
+ ...preparedDiagnostics.length > 0 ? { preparedDiagnostics } : {}
16456
16519
  });
16457
16520
  })() : await statusInstallation(targetRoot);
16458
16521
  return { request, previews, lifecycle };