plugnz 0.0.25 → 0.0.26

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.
Files changed (2) hide show
  1. package/dist/plugnz.mjs +52 -2
  2. package/package.json +1 -1
package/dist/plugnz.mjs CHANGED
@@ -18575,6 +18575,12 @@ function createClaudeCodeLifecycleHost(input) {
18575
18575
  return decision;
18576
18576
  if (request.operation !== "install" && request.operation !== "update")
18577
18577
  return decision;
18578
+ if (request.snapshot.inventory.hookDeclarations.some((declaration) => declaration.form === "portable-hooks") && !claudeReflectionPermissionsSupported(request.snapshot.inventory, request.snapshot.packageRoot)) {
18579
+ return selectLifecycleRoute(definition.id, definition.evidenceProfiles.map((profile) => ({
18580
+ ...profile,
18581
+ semantics: { ...profile.semantics, "ordinary-skills": "unsupported", agents: "unsupported", "permissions-preprocessing": "unsupported" }
18582
+ })), request);
18583
+ }
18578
18584
  if (request.snapshot.inventory.componentDefinitions.some((component) => component.kind === "agent" && (component.root !== "agents" || component.dialect !== "markdown"))) {
18579
18585
  return selectLifecycleRoute(definition.id, definition.evidenceProfiles.map((profile) => ({
18580
18586
  ...profile,
@@ -18618,12 +18624,56 @@ function claudeRouteEvidence(contracts, facts) {
18618
18624
  return { route: "managed", hold: "same-version-bytes" };
18619
18625
  return { route: "native", proofId: `claude-native-update-${contract.version}-git` };
18620
18626
  }
18627
+ function claudeReflectionPermissionsSupported(inventory, root) {
18628
+ const agents = inventory.componentDefinitions.filter((component) => component.kind === "agent");
18629
+ const agentPaths = new Set(agents.map((component) => component.path));
18630
+ if (inventory.components.permissionsPreprocessing.some((path) => !agentPaths.has(path)))
18631
+ return false;
18632
+ if (!inventory.components.skills.every((path) => {
18633
+ try {
18634
+ const raw = readFileSync21(join27(root, path), "utf8");
18635
+ const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/u.exec(raw);
18636
+ if (!match || /!`[\s\S]*?`/u.test(raw))
18637
+ return false;
18638
+ const header = yamlParse(match[1] ?? "");
18639
+ return !PERMISSION_FIELDS.some((field) => Object.hasOwn(header, field));
18640
+ } catch {
18641
+ return false;
18642
+ }
18643
+ }))
18644
+ return false;
18645
+ return agents.every((component) => {
18646
+ if (component.root !== "agents" || component.dialect !== "markdown")
18647
+ return false;
18648
+ try {
18649
+ const raw = readFileSync21(join27(root, component.path), "utf8");
18650
+ const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/u.exec(raw);
18651
+ if (!match || /!`[\s\S]*?`/u.test(raw))
18652
+ return false;
18653
+ const header = yamlParse(match[1] ?? "");
18654
+ if (Object.keys(header).some((key) => !["name", "description", "model", "tools"].includes(key)) || header["model"] !== "inherit")
18655
+ return false;
18656
+ const tools = typeof header["tools"] === "string" ? header["tools"].split(",").map((tool) => tool.trim()).sort() : [];
18657
+ return tools.length === 2 && tools[0] === "Read" && tools[1] === "Write";
18658
+ } catch {
18659
+ return false;
18660
+ }
18661
+ });
18662
+ }
18663
+ function claudeReflectionHookProfile() {
18664
+ const hooks = portableHookProfile(hookAdapter, "managed", ["install", "update", "disable", "retire"]);
18665
+ return createCapabilityEvidenceProfile({
18666
+ ...hooks,
18667
+ semantics: { ...hooks.semantics, "ordinary-skills": "supported", agents: "supported", "permissions-preprocessing": "supported" },
18668
+ evidence: [...hooks.evidence, "docs/evidence/claude-code-2.1.285-reflection-20261016.json"]
18669
+ });
18670
+ }
18621
18671
  function claudeCodeLifecycleDefinition(contracts) {
18622
18672
  const version = claudeVersionObservation(observeClaudeCodeVersion());
18623
18673
  const detectedVersion = version.kind === "detected" ? version.version : undefined;
18624
18674
  return {
18625
18675
  id: "claude-code",
18626
- evidenceProfiles: [...claudeEvidenceProfiles(detectedVersion, contracts), portableHookProfile(hookAdapter, "managed", ["install", "update", "disable", "retire"])],
18676
+ evidenceProfiles: [...claudeEvidenceProfiles(detectedVersion, contracts), claudeReflectionHookProfile()],
18627
18677
  probeVersion: async () => version,
18628
18678
  observeTarget: async (target) => ({ target, installations: observeClaudeInstallations(target, detectedVersion) }),
18629
18679
  observeNativeMutationScope: async (request) => ({
@@ -34128,7 +34178,7 @@ function legacyCommandAction(command) {
34128
34178
  // package.json
34129
34179
  var package_default = {
34130
34180
  name: "plugnz",
34131
- version: "0.0.25",
34181
+ version: "0.0.26",
34132
34182
  description: "Install, diagnose and update agent plugins (Agent Plugins spec) and MCP configs across Claude Code, Codex, Cursor, Kimi and more",
34133
34183
  license: "MIT",
34134
34184
  type: "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plugnz",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Install, diagnose and update agent plugins (Agent Plugins spec) and MCP configs across Claude Code, Codex, Cursor, Kimi and more",
5
5
  "license": "MIT",
6
6
  "type": "module",