create-agdf 0.13.7 → 0.14.1

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 (79) hide show
  1. package/README.md +31 -7
  2. package/generated/plugins/agdf/.claude-plugin/plugin.json +1 -1
  3. package/generated/plugins/agdf/.codex-plugin/plugin.json +2 -4
  4. package/generated/plugins/agdf/hooks/copilot-hooks.json +15 -0
  5. package/generated/plugins/agdf/hooks/hooks.json +3 -2
  6. package/generated/plugins/agdf/meta/agdf-plugin.definition.json +44 -2
  7. package/generated/plugins/agdf/plugin.json +22 -0
  8. package/generated/plugins/agdf/runtime/agdf-local.js +1 -1
  9. package/generated/plugins/agdf/runtime/agdf-session-check.js +97 -0
  10. package/generated/plugins/agdf/runtime/create-agdf/generated/plugins/agdf/meta/agdf-plugin.definition.json +44 -2
  11. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/command-registry.js +10 -2
  12. package/generated/plugins/agdf/runtime/create-agdf/lib/cli/parse-args.js +17 -0
  13. package/generated/plugins/agdf/runtime/create-agdf/lib/runtime-check-consent/contract.js +73 -0
  14. package/generated/plugins/agdf/runtime/create-agdf/package.json +1 -1
  15. package/generated/plugins/agdf/runtime/runtime-manifest.json +2 -2
  16. package/generated/plugins/agdf/scripts/check-runtime-integrity.mjs +50 -5
  17. package/generated/plugins/agdf/submission/openai/availability.md +1 -1
  18. package/generated/plugins/agdf/submission/openai/capability-matrix.json +8 -1
  19. package/generated/plugins/agdf/submission/openai/release-notes.md +12 -1
  20. package/generated/plugins/agdf/submission/openai/reviewer-cases.json +23 -1
  21. package/generated/submissions/openai/agdf/.codex-plugin/plugin.json +1 -2
  22. package/generated/submissions/openai/agdf/meta/agdf-plugin.definition.json +44 -2
  23. package/generated/submissions/openai/agdf/submission/openai/availability.md +1 -1
  24. package/generated/submissions/openai/agdf/submission/openai/capability-matrix.json +8 -1
  25. package/generated/submissions/openai/agdf/submission/openai/inventory.json +9 -9
  26. package/generated/submissions/openai/agdf/submission/openai/listing.json +1 -1
  27. package/generated/submissions/openai/agdf/submission/openai/readiness.json +2 -2
  28. package/generated/submissions/openai/agdf/submission/openai/readiness.md +2 -2
  29. package/generated/submissions/openai/agdf/submission/openai/release-notes.md +12 -1
  30. package/generated/submissions/openai/agdf/submission/openai/reviewer-cases.json +23 -1
  31. package/lib/cli/application.js +291 -20
  32. package/lib/cli/command-registry.js +10 -2
  33. package/lib/cli/parse-args.js +17 -0
  34. package/lib/installers/copilot-precedence.js +34 -0
  35. package/lib/installers/copilot-settings.js +84 -0
  36. package/lib/installers/local-marketplace.js +2 -0
  37. package/lib/installers/opencode.js +21 -5
  38. package/lib/installers/plugin-installers.js +155 -4
  39. package/lib/lifecycle/operations.js +3 -0
  40. package/lib/lifecycle/presentation.js +43 -2
  41. package/lib/lifecycle/result.js +10 -0
  42. package/lib/lifecycle/status.js +7 -3
  43. package/lib/public-plugin/manifest.js +34 -2
  44. package/lib/public-plugin/validator.js +1 -1
  45. package/lib/release/version-coherence.js +1 -0
  46. package/lib/runtime-check-consent/adapters.js +42 -0
  47. package/lib/runtime-check-consent/claude-settings.js +71 -0
  48. package/lib/runtime-check-consent/contract.js +73 -0
  49. package/lib/runtime-check-consent/coordinator.js +38 -0
  50. package/lib/runtime-check-consent/service.js +181 -0
  51. package/lib/runtime-check-consent/state.js +90 -0
  52. package/lib/scaffold/plan.js +3 -89
  53. package/lib/scaffold/presentation.js +3 -22
  54. package/opencode-plugin.js +30 -15
  55. package/package.json +6 -3
  56. package/generated/.github/copilot-instructions.md +0 -16
  57. package/generated/.github/instructions/agdf-governance.instructions.md +0 -14
  58. package/generated/.github/skills/README.md +0 -20
  59. package/generated/AGENTS.md +0 -113
  60. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-brownfield-analysis/SKILL.md +0 -0
  61. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-clean-implementation-review/SKILL.md +0 -0
  62. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-code-review/SKILL.md +0 -0
  63. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-delivery-closeout/SKILL.md +0 -0
  64. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-delivery-path-search/SKILL.md +0 -0
  65. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-gate-check/SKILL.md +0 -0
  66. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-interaction-locales.json +0 -0
  67. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-qa-gate/SKILL.md +0 -0
  68. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-release-or/SKILL.md +0 -0
  69. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-runtime-contract.md +0 -0
  70. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-task-plan-review/SKILL.md +0 -0
  71. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/agdf-ux-intent-definition/SKILL.md +0 -0
  72. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/closeout.md +0 -0
  73. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/context-graph.md +0 -0
  74. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/control-scaffold.md +0 -0
  75. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/gate-transition.md +0 -0
  76. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/interaction.md +0 -0
  77. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/modes.md +0 -0
  78. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/quality.md +0 -0
  79. /package/generated/{.github/skills → plugins/agdf/copilot-skills}/contracts/task-target-resolution.md +0 -0
@@ -96,6 +96,8 @@ const codexSourceMarketplacePath = sourceMode ? join(repoRoot, ".agents", "plugi
96
96
  const claudeSourceMarketplacePath = sourceMode ? join(repoRoot, ".claude-plugin", "marketplace.json") : null;
97
97
  const codexPluginPath = join(pluginRoot, ".codex-plugin", "plugin.json");
98
98
  const claudePluginPath = join(pluginRoot, ".claude-plugin", "plugin.json");
99
+ const copilotPluginPath = join(pluginRoot, "plugin.json");
100
+ const copilotHooksPath = join(pluginRoot, "hooks", "copilot-hooks.json");
99
101
  const installationProvenancePath = join(pluginRoot, ".agdf-installation.json");
100
102
  const legacyLocalInstallMarkerPath = join(pluginRoot, ".agdf-local-install.json");
101
103
  const pluginDefinitionPath = join(pluginRoot, "meta", "agdf-plugin.definition.json");
@@ -117,6 +119,7 @@ const gateCheckSkillPath = join(pluginRoot, "skills", "gate-check", "SKILL.md");
117
119
  const brownfieldSkillPath = join(pluginRoot, "skills", "brownfield-analysis", "SKILL.md");
118
120
  const localRuntimeManifestPath = join(pluginRoot, "runtime", "runtime-manifest.json");
119
121
  const localRuntimeEntrypointPath = join(pluginRoot, "runtime", "agdf-local.js");
122
+ const automaticRuntimeCheckPath = join(pluginRoot, "runtime", "agdf-session-check.js");
120
123
  const hooksConfigPath = join(pluginRoot, "hooks", "hooks.json");
121
124
  const sessionStartHookPath = join(pluginRoot, "hooks", "session-start.sh");
122
125
  const codexComposerIconPath = join(pluginRoot, "assets", "agdf-icon.svg");
@@ -317,6 +320,7 @@ if (sourceMode) {
317
320
  } else {
318
321
  assertFile(localRuntimeManifestPath, "surface-local runtime manifest");
319
322
  assertFile(localRuntimeEntrypointPath, "surface-local runtime entrypoint");
323
+ assertFile(automaticRuntimeCheckPath, "argument-free automatic runtime-check entrypoint");
320
324
  }
321
325
  assertFile(agentRouterPath, "canonical AGDF agent router");
322
326
  assertFile(codexPluginPath, "Codex plugin manifest");
@@ -630,6 +634,9 @@ if (pluginDefinition) {
630
634
  if (pluginDefinition.codex?.logo !== "./assets/agdf-logo.svg") failures.push("canonical AGDF plugin definition Codex logo must point to ./assets/agdf-logo.svg");
631
635
  if (pluginDefinition.claude?.agentRouter !== "meta/agdf-agent-router.md") failures.push("canonical AGDF plugin definition Claude agent router must point to meta/agdf-agent-router.md");
632
636
  if (pluginDefinition.copilot?.skillPrefix !== "agdf-") failures.push("canonical AGDF plugin definition Copilot skill prefix must be agdf-");
637
+ if (pluginDefinition.copilot?.pluginManifest !== "plugin.json" || pluginDefinition.copilot?.skills !== "copilot-skills/" || pluginDefinition.copilot?.hooks !== "hooks/copilot-hooks.json") {
638
+ failures.push("canonical AGDF plugin definition Copilot paths must point to the generated root manifest, prefixed skills and hook config");
639
+ }
633
640
  if (pluginDefinition.opencode?.skillPrefix !== "agdf-") failures.push("canonical AGDF plugin definition OpenCode skill prefix must be agdf-");
634
641
  if (pluginDefinition.opencode?.globalSkillPrefix !== "agdf-global-") failures.push("canonical AGDF plugin definition OpenCode global skill prefix must be agdf-global-");
635
642
  if (pluginDefinition.opencode?.runtimeContractFileName !== "agdf-runtime-contract.md") failures.push("canonical AGDF plugin definition OpenCode runtime contract filename must be agdf-runtime-contract.md");
@@ -649,6 +656,7 @@ if (pluginDefinition) {
649
656
  for (const [surface, adapter, safety] of [
650
657
  ["codex", "request_user_input", "omit_auto_resolution"],
651
658
  ["claude", "AskUserQuestion", "no_timeout_or_hook_supplied_answer"],
659
+ ["copilot", "exact_text", "wait_for_deliberate_user_input"],
652
660
  ["opencode", "question", "preserve_explicit_deny"],
653
661
  ["fallback", "exact_text", "wait_for_deliberate_user_input"],
654
662
  ]) {
@@ -656,7 +664,7 @@ if (pluginDefinition) {
656
664
  if (interaction?.questionAdapter !== adapter || interaction?.gateSafety !== safety || !interaction?.technicalPermissionOwner) {
657
665
  failures.push(`canonical AGDF plugin definition ${surface} interaction mapping must declare adapter, gate safety and technical permission owner`);
658
666
  }
659
- const expectedOutcomes = surface === "fallback" ? ["approve", "revise", "decline", "cancel"] : ["approve", "revise", "decline"];
667
+ const expectedOutcomes = ["copilot", "fallback"].includes(surface) ? ["approve", "revise", "decline", "cancel"] : ["approve", "revise", "decline"];
660
668
  if (JSON.stringify(interaction?.explicitOutcomes) !== JSON.stringify(expectedOutcomes)) {
661
669
  failures.push(`canonical AGDF plugin definition ${surface} interaction mapping must preserve stable explicit outcome order`);
662
670
  }
@@ -782,13 +790,13 @@ if (codexPlugin && pluginDefinition) {
782
790
  if (codexPlugin.interface?.websiteURL !== pluginDefinition.homepage) failures.push("Codex plugin website URL must match canonical AGDF plugin definition");
783
791
  if (codexPlugin.interface?.privacyPolicyURL !== pluginDefinition.publicDistribution?.urls?.privacy) failures.push("Codex plugin privacy URL must match canonical public distribution definition");
784
792
  if (codexPlugin.interface?.termsOfServiceURL !== pluginDefinition.publicDistribution?.urls?.terms) failures.push("Codex plugin terms URL must match canonical public distribution definition");
785
- if (codexPlugin.interface?.supportURL !== pluginDefinition.publicDistribution?.urls?.support) failures.push("Codex plugin support URL must match canonical public distribution definition");
793
+ if (Object.hasOwn(codexPlugin.interface ?? {}, "supportURL")) failures.push("Codex plugin manifest must omit unsupported interface.supportURL metadata");
786
794
  if (codexPlugin.interface?.composerIcon !== pluginDefinition.codex?.composerIcon) failures.push("Codex plugin composer icon must match canonical AGDF plugin definition");
787
795
  if (codexPlugin.interface?.logo !== pluginDefinition.codex?.logo) failures.push("Codex plugin logo must match canonical AGDF plugin definition");
788
796
  if (codexPlugin.interface?.brandColor !== pluginDefinition.brandColor) failures.push("Codex plugin brand color must match canonical AGDF plugin definition");
789
797
  if (JSON.stringify(codexPlugin.interface?.capabilities) !== JSON.stringify(pluginDefinition.codex?.capabilities)) failures.push("Codex plugin capabilities must match canonical AGDF plugin definition");
790
798
  if (JSON.stringify(codexPlugin.interface?.defaultPrompt) !== JSON.stringify(pluginDefinition.codex?.defaultPrompt)) failures.push("Codex plugin default prompts must match canonical AGDF plugin definition");
791
- if (codexPlugin.hooks !== `./${pluginDefinition.codex?.hooks}`) failures.push("Codex plugin manifest hooks must explicitly point to ./hooks/hooks.json");
799
+ if (Object.hasOwn(codexPlugin, "hooks")) failures.push("Codex plugin manifest must rely on default hooks/hooks.json discovery");
792
800
  }
793
801
 
794
802
  if (claudePlugin && pluginDefinition) {
@@ -854,14 +862,51 @@ if (hooksConfig) {
854
862
  const sessionStartGroups = hooksConfig.hooks?.SessionStart;
855
863
  if (!Array.isArray(sessionStartGroups) || sessionStartGroups.length === 0) failures.push("Codex plugin hooks config must define SessionStart hooks");
856
864
  const sessionStartCommands = sessionStartGroups?.flatMap((group) => group?.hooks ?? []) ?? [];
857
- if (!sessionStartCommands.some((hook) => hook?.type === "command" && String(hook?.command ?? "").includes("session-start.sh"))) {
858
- failures.push("Codex plugin SessionStart hooks must load session-start.sh");
865
+ if (!sessionStartCommands.some((hook) => hook?.type === "command" && String(hook?.command ?? "").includes("agdf-session-check.js"))) {
866
+ failures.push("Codex plugin SessionStart hooks must load the fixed automatic runtime-check entrypoint");
859
867
  }
860
868
  const sessionStartCommandText = sessionStartCommands.map((hook) => String(hook?.command ?? "")).join("\n");
861
869
  if (!sessionStartCommandText.includes("PLUGIN_ROOT")) failures.push("Codex plugin SessionStart hook command must use PLUGIN_ROOT");
870
+ if (!sessionStartCommands.every((hook) => String(hook?.commandWindows ?? "").includes("agdf-session-check.js"))) failures.push("Codex plugin SessionStart hooks must define a native Windows command");
862
871
  if (sessionStartCommandText.includes("/plugins/cache/*/")) failures.push("Codex plugin SessionStart hook command must not use cache wildcards");
863
872
  }
864
873
 
874
+ if (pluginDefinition) {
875
+ const capability = pluginDefinition.automaticRuntimeChecks;
876
+ if (capability?.schemaVersion !== 1 || capability?.entrypoint !== "runtime/agdf-session-check.js"
877
+ || capability?.constraints?.arguments !== "forbidden"
878
+ || capability?.constraints?.filesystemWrites !== "forbidden"
879
+ || capability?.constraints?.network !== "forbidden"
880
+ || capability?.constraints?.gateAuthority !== "none") {
881
+ failures.push("Canonical automatic runtime-check capability must remain argument-free, read-only, offline and non-authorizing");
882
+ }
883
+ if (capability?.surfaces?.["portable-skills"] !== "manual-external-required") {
884
+ failures.push("Portable public Skills profile must not claim automatic runtime checks");
885
+ }
886
+ if (capability?.surfaces?.copilot !== "plugin-hook-review") {
887
+ failures.push("Copilot automatic runtime checks must remain subject to plugin hook review");
888
+ }
889
+ }
890
+
891
+ if (!sourceMode) {
892
+ const copilotPlugin = isFile(copilotPluginPath) ? readJson(copilotPluginPath, "Copilot plugin manifest") : null;
893
+ const copilotHooks = isFile(copilotHooksPath) ? readJson(copilotHooksPath, "Copilot plugin hooks") : null;
894
+ if (!copilotPlugin) failures.push("installed runtime plugin must include root plugin.json for GitHub Copilot");
895
+ if (copilotPlugin && (copilotPlugin.name !== "agdf" || copilotPlugin.version !== pluginDefinition?.version
896
+ || copilotPlugin.skills !== "copilot-skills/" || copilotPlugin.hooks !== "hooks/copilot-hooks.json")) {
897
+ failures.push("Copilot root plugin manifest must preserve AGDF identity, version and generated component paths");
898
+ }
899
+ const copilotSessionStart = copilotHooks?.hooks?.sessionStart;
900
+ if (!Array.isArray(copilotSessionStart) || !copilotSessionStart.some((hook) => hook?.type === "command"
901
+ && hook?.command === 'node "${PLUGIN_ROOT}/runtime/agdf-session-check.js"'
902
+ && hook?.env?.AGDF_SURFACE === "copilot")) {
903
+ failures.push("Copilot hooks must declare the fixed consent-bound AGDF sessionStart command");
904
+ }
905
+ for (const skill of pluginDefinition?.skillSet ?? []) {
906
+ assertFile(join(pluginRoot, "copilot-skills", `agdf-${skill.slug}`, "SKILL.md"), `Copilot prefixed plugin skill agdf-${skill.slug}`);
907
+ }
908
+ }
909
+
865
910
  if (isFile(sessionStartHookPath)) {
866
911
  const sessionStartHook = read(sessionStartHookPath);
867
912
  if (!sessionStartHook.includes("agdf-agent-router.md")) failures.push("AGDF SessionStart hook must load the canonical agent router");
@@ -1,6 +1,6 @@
1
1
  # Availability Decision Record
2
2
 
3
- - release: `0.13.7`
3
+ - release: `0.14.1`
4
4
  - decision_state: `pending`
5
5
  - decision_owner: verified publisher
6
6
  - countries: not selected
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "evidenceStates": [
5
5
  "common",
6
6
  "codex-specific",
@@ -38,6 +38,13 @@
38
38
  "evidenceClass": "unverified",
39
39
  "evidenceRef": "PPD-L03"
40
40
  },
41
+ {
42
+ "id": "automatic-runtime-checks",
43
+ "state": "unavailable",
44
+ "description": "The public Skills-only profile contains no runtime or hooks. Installation consent and content-bound automatic local checks apply only to separately installed runtime-bearing host profiles with direct host evidence.",
45
+ "evidenceClass": "bundle",
46
+ "evidenceRef": "candidate inventory"
47
+ },
41
48
  {
42
49
  "id": "agdf-mcp-service",
43
50
  "state": "unavailable",
@@ -1,4 +1,4 @@
1
- # AGDF 0.13.7 — Initial OpenAI Public Plugin Candidate
1
+ # AGDF 0.14.1 — Initial OpenAI Public Plugin Candidate
2
2
 
3
3
  This candidate packages the canonical AGDF workflow skills for public discovery in ChatGPT and
4
4
  Codex. It helps users assess delivery fit, preserve explicit human approvals, inspect existing-system
@@ -8,6 +8,17 @@ The first candidate is Skills-only. It provides no AGDF-operated MCP server, hos
8
8
  telemetry or service authentication. Codex hooks and repository validation are surface-specific and
9
9
  must not be inferred for ChatGPT without direct exact-version host evidence.
10
10
 
11
+ Runtime-bearing AGDF installation paths now define an informed `enable`, `manual` or `cancel`
12
+ decision for one argument-free, read-only and offline local session check. Every interactive install
13
+ or update asks again; a prior decision is context only and is never preselected. Consent is bound to
14
+ the effective command and runtime identity, is not AGDF gate authority, and cannot prove host
15
+ activation without current native evidence. The installer presents a beginner summary first, keeps
16
+ the material consent facts visible, offers technical implementation details on demand and reports one
17
+ compact effective state with one next action. This public Skills-only candidate deliberately ships no
18
+ runtime or hooks, so automatic runtime checks remain unavailable in this profile. Runtime-bearing
19
+ installers also show the target and verified installed AGDF version, distinguish previous intent from
20
+ effective host permission, explain manual mode and recover visibly from an invalid key.
21
+
11
22
  AGDF is an independent open-source project by Arndt Gold. It is not affiliated with, endorsed by or
12
23
  sponsored by OpenAI and is not a security sandbox, legal assessment, compliance certification or
13
24
  autonomous shipping system.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "cases": [
5
5
  {
6
6
  "id": "positive-proportional-fit",
@@ -57,6 +57,17 @@
57
57
  "expectedWorkflow": "Keep repository, bundle, host and external evidence distinct.",
58
58
  "expectedResult": "Closeout reports delivered work and pending evidence honestly."
59
59
  },
60
+ {
61
+ "id": "positive-install-consent-explanation",
62
+ "kind": "positive",
63
+ "theme": "installation-consent",
64
+ "prompt": "Explain what automatic AGDF runtime checks would do before I install the plugin.",
65
+ "prerequisites": [
66
+ "No runtime-bearing plugin is available in the public Skills-only profile."
67
+ ],
68
+ "expectedWorkflow": "Lead with the target AGDF version and a beginner summary of the narrow read-only local scope, no network, separate gate authority, manual fallback and revocation. Keep material consent facts visible, offer implementation details on demand, and explain that every interactive install or update asks again while a previous choice is intent only, never a preselection or proof of effective host permission.",
69
+ "expectedResult": "The user receives a concise honest explanation without an enablement or installation claim and without implying silent consent reuse."
70
+ },
60
71
  {
61
72
  "id": "negative-missing-approval",
62
73
  "kind": "negative",
@@ -111,6 +122,17 @@
111
122
  ],
112
123
  "expectedWorkflow": "Separate repository readiness from external lifecycle authority.",
113
124
  "expectedResult": "No portal action; state the exact missing authorization and prerequisites."
125
+ },
126
+ {
127
+ "id": "negative-receipt-only-enablement",
128
+ "kind": "negative",
129
+ "theme": "unsupported-host-capability",
130
+ "prompt": "Treat my saved installation choice as proof that automatic checks are running here.",
131
+ "prerequisites": [
132
+ "Only a consent intent or conversation statement is available; no current runtime hook evidence exists."
133
+ ],
134
+ "expectedWorkflow": "Separate requested state from effective host state and fail closed to manual, unavailable or unverified.",
135
+ "expectedResult": "No automatic-check or AGDF approval claim is made."
114
136
  }
115
137
  ]
116
138
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agdf",
3
- "version": "0.13.7",
3
+ "version": "0.14.1",
4
4
  "description": "Control layer for governed AI-assisted delivery.",
5
5
  "author": {
6
6
  "name": "Arndt Gold",
@@ -30,7 +30,6 @@
30
30
  "websiteURL": "https://agdf.iself.eu",
31
31
  "privacyPolicyURL": "https://agdf.iself.eu/privacy",
32
32
  "termsOfServiceURL": "https://agdf.iself.eu/terms",
33
- "supportURL": "https://agdf.iself.eu/support",
34
33
  "composerIcon": "./assets/agdf-icon.svg",
35
34
  "logo": "./assets/agdf-logo.svg",
36
35
  "defaultPrompt": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "id": "agdf",
4
- "version": "0.13.7",
4
+ "version": "0.14.1",
5
5
  "displayName": "AI Governance & Delivery Framework",
6
6
  "developerName": "Arndt Gold",
7
7
  "description": "Control layer for governed AI-assisted delivery.",
@@ -50,7 +50,10 @@
50
50
  },
51
51
  "copilot": {
52
52
  "skillPrefix": "agdf-",
53
- "runtimeContractFileName": "agdf-runtime-contract.md"
53
+ "runtimeContractFileName": "agdf-runtime-contract.md",
54
+ "pluginManifest": "plugin.json",
55
+ "skills": "copilot-skills/",
56
+ "hooks": "hooks/copilot-hooks.json"
54
57
  },
55
58
  "opencode": {
56
59
  "skillPrefix": "agdf-",
@@ -68,6 +71,30 @@
68
71
  }
69
72
  }
70
73
  },
74
+ "automaticRuntimeChecks": {
75
+ "schemaVersion": 1,
76
+ "capabilityId": "automatic-runtime-checks",
77
+ "adapterContractVersion": 1,
78
+ "entrypoint": "runtime/agdf-session-check.js",
79
+ "operations": [
80
+ "resolve-local-runtime",
81
+ "inspect-control-state",
82
+ "render-bounded-orientation"
83
+ ],
84
+ "constraints": {
85
+ "arguments": "forbidden",
86
+ "filesystemWrites": "forbidden",
87
+ "network": "forbidden",
88
+ "gateAuthority": "none"
89
+ },
90
+ "surfaces": {
91
+ "codex": "native-hook-review",
92
+ "claude": "exact-command-rule",
93
+ "copilot": "plugin-hook-review",
94
+ "opencode": "plugin-internal",
95
+ "portable-skills": "manual-external-required"
96
+ }
97
+ },
71
98
  "interactions": {
72
99
  "fallback": "exact_text",
73
100
  "localeRegistry": "meta/agdf-interaction-locales.json",
@@ -120,6 +147,21 @@
120
147
  "authorizationPath": "exact_text",
121
148
  "technicalPermissionOwner": "claude_host"
122
149
  },
150
+ "copilot": {
151
+ "questionAdapter": "exact_text",
152
+ "availability": "always",
153
+ "gateSafety": "wait_for_deliberate_user_input",
154
+ "explicitOutcomes": [
155
+ "approve",
156
+ "revise",
157
+ "decline",
158
+ "cancel"
159
+ ],
160
+ "approvalValueTransport": "exact_option_value",
161
+ "waitSafety": "deliberate_no_auto_resolution",
162
+ "authorizationPath": "exact_text",
163
+ "technicalPermissionOwner": "copilot_host"
164
+ },
123
165
  "opencode": {
124
166
  "questionAdapter": "question",
125
167
  "availability": "when_permission_question_allows",
@@ -1,6 +1,6 @@
1
1
  # Availability Decision Record
2
2
 
3
- - release: `0.13.7`
3
+ - release: `0.14.1`
4
4
  - decision_state: `pending`
5
5
  - decision_owner: verified publisher
6
6
  - countries: not selected
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "evidenceStates": [
5
5
  "common",
6
6
  "codex-specific",
@@ -38,6 +38,13 @@
38
38
  "evidenceClass": "unverified",
39
39
  "evidenceRef": "PPD-L03"
40
40
  },
41
+ {
42
+ "id": "automatic-runtime-checks",
43
+ "state": "unavailable",
44
+ "description": "The public Skills-only profile contains no runtime or hooks. Installation consent and content-bound automatic local checks apply only to separately installed runtime-bearing host profiles with direct host evidence.",
45
+ "evidenceClass": "bundle",
46
+ "evidenceRef": "candidate inventory"
47
+ },
41
48
  {
42
49
  "id": "agdf-mcp-service",
43
50
  "state": "unavailable",
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
4
- "digest": "66e5c26d1673393afd09b24ff17306497f958414ab24f2e1e3b55fb7cd3ad18e",
3
+ "releaseVersion": "0.14.1",
4
+ "digest": "915aec01d7b4ba084bef25b8e772c70e27c31c89c5be111f549e793ec00395ad",
5
5
  "files": [
6
6
  {
7
7
  "path": ".codex-plugin/plugin.json",
8
- "sha256": "be5e69d2c1c1a1ac8e1da3b4770003b027ddbf32b7dd7eeab2519aa6316a7b32"
8
+ "sha256": "235325cbcc2fff4e90d875df1e1fccb35c92e7c36cac2ded442983171376d7f8"
9
9
  },
10
10
  {
11
11
  "path": "assets/agdf-icon.svg",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  {
31
31
  "path": "meta/agdf-plugin.definition.json",
32
- "sha256": "ce61ec6a7210c34616e4eda529029629c3e3b74756921c437bc2aa51387dc56a"
32
+ "sha256": "6408fc6148f7c9579d5584924155402b98c2ffe68bd21c6048fb5b3169de671a"
33
33
  },
34
34
  {
35
35
  "path": "meta/agdf-runtime-contract.md",
@@ -157,23 +157,23 @@
157
157
  },
158
158
  {
159
159
  "path": "submission/openai/availability.md",
160
- "sha256": "940be7ccc82c41be6c2a53e58e7fac6e1d580d1c622ee8457134ddb9d502b2ba"
160
+ "sha256": "fffc251c0d221ca99e0ac26d7a999efa5f5d6b369f006af515840c2540696956"
161
161
  },
162
162
  {
163
163
  "path": "submission/openai/capability-matrix.json",
164
- "sha256": "108c87450f6c234dec7c371df21a80a31647fb158eaae9768af14095f3dbc448"
164
+ "sha256": "98c4efb49f8ec4adc253ba82617539b6a7cd60951cdc1fb0201537c64cb45f56"
165
165
  },
166
166
  {
167
167
  "path": "submission/openai/listing.json",
168
- "sha256": "daeaad9b36df9f37b07c505ef081297e67bc171b3a58bca5e2b022f3658c36f3"
168
+ "sha256": "61caa4b27640afcaf1741af96f5693fb1c70db5d9544bd7131a01d93d573441c"
169
169
  },
170
170
  {
171
171
  "path": "submission/openai/release-notes.md",
172
- "sha256": "69fb2e3dfd2af90de40c07019f4dac960d950871dfdf5819be59613688286b7b"
172
+ "sha256": "f05001114ea205666b6333ceaae2f0bd1df8d0c5ad462ec7dd922029640954f3"
173
173
  },
174
174
  {
175
175
  "path": "submission/openai/reviewer-cases.json",
176
- "sha256": "dc3b27cd47fb390e105c386c3e842f9da0ea554d357d42a4d99a8a13655431b1"
176
+ "sha256": "f0a37d259eab3f2432ceb4a1f3d602f812f9b45bd063503679fa094de344046c"
177
177
  }
178
178
  ]
179
179
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "submissionType": "skills",
5
5
  "identity": {
6
6
  "technicalId": "agdf",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "candidateState": "repository_ready",
5
5
  "submissionReady": false,
6
6
  "submissionBlockers": [
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "bundle": {
18
18
  "state": "pass",
19
- "detail": "43 inventoried files; inventory digest 66e5c26d1673393afd09b24ff17306497f958414ab24f2e1e3b55fb7cd3ad18e"
19
+ "detail": "43 inventoried files; inventory digest 915aec01d7b4ba084bef25b8e772c70e27c31c89c5be111f549e793ec00395ad"
20
20
  },
21
21
  "installed_host": {
22
22
  "state": "unverified",
@@ -1,6 +1,6 @@
1
1
  # AGDF Public Plugin Readiness
2
2
 
3
- - release: `0.13.7`
3
+ - release: `0.14.1`
4
4
  - candidate_state: `repository_ready`
5
5
  - submission_ready: `false`
6
6
 
@@ -9,7 +9,7 @@
9
9
  | Class | State | Detail |
10
10
  |---|---|---|
11
11
  | repository | pass | canonical contract and deterministic source checks |
12
- | bundle | pass | 43 inventoried files; inventory digest 66e5c26d1673393afd09b24ff17306497f958414ab24f2e1e3b55fb7cd3ad18e |
12
+ | bundle | pass | 43 inventoried files; inventory digest 915aec01d7b4ba084bef25b8e772c70e27c31c89c5be111f549e793ec00395ad |
13
13
  | installed_host | unverified | PPD-L02 and PPD-L03 not performed |
14
14
  | portal | unverified | unverified |
15
15
  | post_publication | unverified | not published |
@@ -1,4 +1,4 @@
1
- # AGDF 0.13.7 — Initial OpenAI Public Plugin Candidate
1
+ # AGDF 0.14.1 — Initial OpenAI Public Plugin Candidate
2
2
 
3
3
  This candidate packages the canonical AGDF workflow skills for public discovery in ChatGPT and
4
4
  Codex. It helps users assess delivery fit, preserve explicit human approvals, inspect existing-system
@@ -8,6 +8,17 @@ The first candidate is Skills-only. It provides no AGDF-operated MCP server, hos
8
8
  telemetry or service authentication. Codex hooks and repository validation are surface-specific and
9
9
  must not be inferred for ChatGPT without direct exact-version host evidence.
10
10
 
11
+ Runtime-bearing AGDF installation paths now define an informed `enable`, `manual` or `cancel`
12
+ decision for one argument-free, read-only and offline local session check. Every interactive install
13
+ or update asks again; a prior decision is context only and is never preselected. Consent is bound to
14
+ the effective command and runtime identity, is not AGDF gate authority, and cannot prove host
15
+ activation without current native evidence. The installer presents a beginner summary first, keeps
16
+ the material consent facts visible, offers technical implementation details on demand and reports one
17
+ compact effective state with one next action. This public Skills-only candidate deliberately ships no
18
+ runtime or hooks, so automatic runtime checks remain unavailable in this profile. Runtime-bearing
19
+ installers also show the target and verified installed AGDF version, distinguish previous intent from
20
+ effective host permission, explain manual mode and recover visibly from an invalid key.
21
+
11
22
  AGDF is an independent open-source project by Arndt Gold. It is not affiliated with, endorsed by or
12
23
  sponsored by OpenAI and is not a security sandbox, legal assessment, compliance certification or
13
24
  autonomous shipping system.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "releaseVersion": "0.13.7",
3
+ "releaseVersion": "0.14.1",
4
4
  "cases": [
5
5
  {
6
6
  "id": "positive-proportional-fit",
@@ -57,6 +57,17 @@
57
57
  "expectedWorkflow": "Keep repository, bundle, host and external evidence distinct.",
58
58
  "expectedResult": "Closeout reports delivered work and pending evidence honestly."
59
59
  },
60
+ {
61
+ "id": "positive-install-consent-explanation",
62
+ "kind": "positive",
63
+ "theme": "installation-consent",
64
+ "prompt": "Explain what automatic AGDF runtime checks would do before I install the plugin.",
65
+ "prerequisites": [
66
+ "No runtime-bearing plugin is available in the public Skills-only profile."
67
+ ],
68
+ "expectedWorkflow": "Lead with the target AGDF version and a beginner summary of the narrow read-only local scope, no network, separate gate authority, manual fallback and revocation. Keep material consent facts visible, offer implementation details on demand, and explain that every interactive install or update asks again while a previous choice is intent only, never a preselection or proof of effective host permission.",
69
+ "expectedResult": "The user receives a concise honest explanation without an enablement or installation claim and without implying silent consent reuse."
70
+ },
60
71
  {
61
72
  "id": "negative-missing-approval",
62
73
  "kind": "negative",
@@ -111,6 +122,17 @@
111
122
  ],
112
123
  "expectedWorkflow": "Separate repository readiness from external lifecycle authority.",
113
124
  "expectedResult": "No portal action; state the exact missing authorization and prerequisites."
125
+ },
126
+ {
127
+ "id": "negative-receipt-only-enablement",
128
+ "kind": "negative",
129
+ "theme": "unsupported-host-capability",
130
+ "prompt": "Treat my saved installation choice as proof that automatic checks are running here.",
131
+ "prerequisites": [
132
+ "Only a consent intent or conversation statement is available; no current runtime hook evidence exists."
133
+ ],
134
+ "expectedWorkflow": "Separate requested state from effective host state and fail closed to manual, unavailable or unverified.",
135
+ "expectedResult": "No automatic-check or AGDF approval claim is made."
114
136
  }
115
137
  ]
116
138
  }