ai-capability-framework 1.0.0-rc.3 → 1.0.0

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 (217) hide show
  1. package/CHANGELOG.md +97 -103
  2. package/CODE_OF_CONDUCT.md +11 -13
  3. package/CONTRIBUTING.md +40 -43
  4. package/GOVERNANCE.md +34 -35
  5. package/README.md +99 -63
  6. package/ROADMAP.md +12 -12
  7. package/SECURITY.md +15 -15
  8. package/dist/audit/ledger.d.ts.map +1 -1
  9. package/dist/audit/ledger.js +2 -1
  10. package/dist/audit/records.d.ts.map +1 -1
  11. package/dist/audit/records.js +2 -1
  12. package/dist/audit/types.d.ts +4 -1
  13. package/dist/audit/types.d.ts.map +1 -1
  14. package/dist/aws/dynamodb-stores.d.ts +2 -7
  15. package/dist/aws/dynamodb-stores.d.ts.map +1 -1
  16. package/dist/aws/dynamodb-stores.js +56 -5
  17. package/dist/aws/testing.d.ts.map +1 -1
  18. package/dist/aws/testing.js +9 -0
  19. package/dist/cli.d.ts +6 -6
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +77 -7
  22. package/dist/evals-live/index.d.ts +2 -2
  23. package/dist/evals-live/index.d.ts.map +1 -1
  24. package/dist/evals-live/index.js +1 -1
  25. package/dist/evals-live/live-eval-runner.d.ts +49 -1
  26. package/dist/evals-live/live-eval-runner.d.ts.map +1 -1
  27. package/dist/evals-live/live-eval-runner.js +246 -4
  28. package/dist/evals-live/types.d.ts +62 -9
  29. package/dist/evals-live/types.d.ts.map +1 -1
  30. package/dist/index.d.ts +0 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +0 -1
  33. package/dist/runtime/actions.d.ts +2 -0
  34. package/dist/runtime/actions.d.ts.map +1 -1
  35. package/dist/runtime/actions.js +200 -55
  36. package/dist/runtime/index.d.ts +1 -1
  37. package/dist/runtime/index.d.ts.map +1 -1
  38. package/dist/runtime/stores.d.ts +2 -7
  39. package/dist/runtime/stores.d.ts.map +1 -1
  40. package/dist/runtime/stores.js +12 -0
  41. package/dist/runtime/types.d.ts +25 -6
  42. package/dist/runtime/types.d.ts.map +1 -1
  43. package/docs/action-lifecycle.md +38 -32
  44. package/docs/adapter-roadmap.md +51 -49
  45. package/docs/adapters.md +14 -15
  46. package/docs/ai-sdk-runtime.md +36 -39
  47. package/docs/anthropic-runtime.md +29 -32
  48. package/docs/api/public-api-policy.md +59 -0
  49. package/docs/api.md +354 -371
  50. package/docs/architecture/current-state.md +28 -31
  51. package/docs/audit/index.md +29 -29
  52. package/docs/aws/cloudwatch-telemetry.md +5 -7
  53. package/docs/aws/dynamodb-single-table.md +8 -9
  54. package/docs/aws/kms-redaction.md +5 -6
  55. package/docs/aws/overview.md +5 -5
  56. package/docs/aws/production-reference.md +13 -14
  57. package/docs/aws/step-functions-approval.md +7 -9
  58. package/docs/aws-runtime.md +24 -25
  59. package/docs/capability-manifests.md +17 -21
  60. package/docs/control-plane/overview.md +2 -2
  61. package/docs/control-plane.md +24 -27
  62. package/docs/controls/index.md +19 -22
  63. package/docs/core/capability-manifests.md +4 -5
  64. package/docs/core/entity-manifests.md +5 -5
  65. package/docs/eval-runner.md +29 -31
  66. package/docs/evalops.md +13 -14
  67. package/docs/evals/golden-tests.md +4 -5
  68. package/docs/evals/overview.md +3 -3
  69. package/docs/evals/replay-and-trace-to-golden.md +19 -20
  70. package/docs/evals.md +19 -20
  71. package/docs/evidence.md +22 -23
  72. package/docs/gemini-runtime.md +31 -33
  73. package/docs/getting-started/anthropic-quickstart.md +61 -0
  74. package/docs/getting-started/concepts.md +9 -10
  75. package/docs/getting-started/gemini-quickstart.md +62 -0
  76. package/docs/getting-started/installation.md +3 -3
  77. package/docs/getting-started/openai-quickstart.md +61 -0
  78. package/docs/getting-started/provider-neutral-quickstart.md +106 -0
  79. package/docs/getting-started/quickstart.md +2 -2
  80. package/docs/getting-started.md +23 -20
  81. package/docs/glossary.md +31 -48
  82. package/docs/governance/gate.md +28 -30
  83. package/docs/governance/impact-and-compatibility.md +2 -3
  84. package/docs/governance/index.md +53 -54
  85. package/docs/governance/lifecycle.md +4 -5
  86. package/docs/governance/overview.md +2 -3
  87. package/docs/governance/risk-compiler.md +4 -5
  88. package/docs/host-responsibilities.md +6 -8
  89. package/docs/implementation-notes/baseline-gaps.md +15 -18
  90. package/docs/index.md +21 -6
  91. package/docs/interoperability.md +9 -9
  92. package/docs/langchain-runtime.md +27 -31
  93. package/docs/live-evals.md +68 -32
  94. package/docs/mcp-server-runtime.md +36 -40
  95. package/docs/memory.md +35 -36
  96. package/docs/migration-0.1-to-1.0.md +14 -9
  97. package/docs/observability/overview.md +2 -3
  98. package/docs/observability-runtime.md +35 -39
  99. package/docs/openai-responses.md +36 -37
  100. package/docs/openai-runtime.md +41 -46
  101. package/docs/openai-walkthrough.md +24 -28
  102. package/docs/policy-broker.md +9 -10
  103. package/docs/provenance.md +30 -29
  104. package/docs/providers/anthropic.md +5 -5
  105. package/docs/providers/choose-a-runtime.md +37 -0
  106. package/docs/providers/conformance.md +14 -15
  107. package/docs/providers/gemini.md +5 -5
  108. package/docs/providers/mcp.md +2 -3
  109. package/docs/providers/openai.md +2 -2
  110. package/docs/providers/semantic-kernel.md +2 -2
  111. package/docs/providers.md +43 -38
  112. package/docs/public/license-exceptions.md +187 -0
  113. package/docs/public/npm-release-preflight.md +112 -0
  114. package/docs/public-framework/compatibility-policy.md +12 -13
  115. package/docs/public-framework/deprecation-policy.md +8 -8
  116. package/docs/public-framework/final-certification-matrix.md +104 -0
  117. package/docs/public-framework/license-decision.md +20 -0
  118. package/docs/public-framework/release-process.md +46 -16
  119. package/docs/public-framework/security-disclosure.md +4 -5
  120. package/docs/public-framework/v1-certification.md +102 -15
  121. package/docs/release.md +200 -122
  122. package/docs/runtime/action-lifecycle.md +3 -3
  123. package/docs/runtime/policy-broker.md +4 -4
  124. package/docs/runtime/runtime-overview.md +4 -5
  125. package/docs/runtime/tool-result-envelope.md +7 -7
  126. package/docs/runtime.md +90 -93
  127. package/docs/security/overview.md +4 -4
  128. package/docs/security/security-packs.md +24 -26
  129. package/docs/security/trust-taint-redaction.md +42 -47
  130. package/docs/semantic-kernel-runtime.md +35 -37
  131. package/docs/spec.md +95 -101
  132. package/docs/start-here.md +18 -20
  133. package/examples/01-basic-read-capability/README.md +3 -4
  134. package/examples/02-prepare-approve-commit/README.md +6 -6
  135. package/examples/03-multi-provider-tools/README.md +2 -2
  136. package/examples/04-mcp-server/README.md +4 -5
  137. package/examples/05-langchain-langgraph-bridge/README.md +4 -5
  138. package/examples/06-vercel-ai-sdk-bridge/README.md +5 -7
  139. package/examples/07-policy-broker-custom-auth/README.md +4 -4
  140. package/examples/08-aws-step-functions-approval/README.md +4 -5
  141. package/examples/09-security-packs-promptfoo/README.md +4 -4
  142. package/examples/10-trace-to-golden/README.md +2 -2
  143. package/examples/11-control-plane/README.md +4 -5
  144. package/examples/aws/README.md +5 -8
  145. package/examples/control-plane/README.md +8 -9
  146. package/examples/control-plane/fixtures/control-plane.seed.json +8 -32
  147. package/examples/control-plane/public/app.js +57 -18
  148. package/examples/control-plane/public/index.html +15 -6
  149. package/examples/control-plane/server.mjs +15 -3
  150. package/examples/eval-results/public.results.passing.json +6 -21
  151. package/examples/providers/ai-sdk-next/README.md +11 -8
  152. package/examples/providers/anthropic-claude/README.md +5 -6
  153. package/examples/providers/gemini/README.md +6 -6
  154. package/examples/providers/langchain-agent/README.md +3 -4
  155. package/examples/providers/langgraph-tool-node/README.md +7 -7
  156. package/examples/providers/mcp/README.md +8 -8
  157. package/examples/providers/provider-conformance/README.md +3 -3
  158. package/examples/providers/semantic-kernel-mcp/README.md +6 -6
  159. package/examples/providers/semantic-kernel-openapi/README.md +6 -7
  160. package/examples/runtime-support-billing/README.md +8 -9
  161. package/examples/runtime-support-billing/support-billing-runtime.mjs +8 -4
  162. package/examples/scheduling/capabilities/scheduling.availability.get.yaml +2 -2
  163. package/examples/scheduling/capabilities/scheduling.invite.prepare.yaml +2 -2
  164. package/examples/scheduling/capabilities/scheduling.invite.send.yaml +2 -2
  165. package/examples/scheduling/entities/AvailabilitySlot.yaml +2 -2
  166. package/examples/scheduling/entities/MeetingInvite.yaml +2 -2
  167. package/examples/scheduling/evals/scheduling.invite.prepare.valid.yaml +3 -1
  168. package/examples/semantic-kernel-mcp/README.md +11 -12
  169. package/examples/semantic-kernel-openapi/README.md +8 -8
  170. package/examples/support/capabilities/support.refund.commit_case.yaml +3 -3
  171. package/examples/support/capabilities/support.refund.prepare_case.yaml +2 -2
  172. package/examples/support/capabilities/support.ticket.get.yaml +2 -2
  173. package/examples/support/entities/Ticket.yaml +0 -1
  174. package/examples/support/eval-results/support.results.passing.json +3 -12
  175. package/examples/support/evals/support.refund.prepare_case.approval_required.yaml +3 -1
  176. package/examples/support/evals/support.refund.prepare_case.valid.yaml +3 -2
  177. package/examples/support/memory/support.agent.preferences.json +2 -6
  178. package/examples/support/openai/context.support_agent.json +1 -4
  179. package/examples/support/provenance/support.refund.summary.provenance.json +2 -6
  180. package/examples/support/replay/support.refund.approval_required.trace.json +4 -14
  181. package/package.json +22 -5
  182. package/schemas/audit/action-record.schema.json +4 -1
  183. package/schemas/aws/approval-task.schema.json +8 -1
  184. package/schemas/conformance/conformance-case.schema.json +18 -2
  185. package/schemas/conformance/conformance-report.schema.json +17 -2
  186. package/schemas/conformance/provider-target-matrix.schema.json +35 -4
  187. package/schemas/controls/control-decision.schema.json +7 -1
  188. package/schemas/eval-case.schema.json +8 -1
  189. package/schemas/eval-result.schema.json +8 -1
  190. package/schemas/evidence/evidence-pack.schema.json +34 -5
  191. package/schemas/governance/compatibility-diff.schema.json +8 -1
  192. package/schemas/governance/lifecycle-transition.schema.json +10 -1
  193. package/schemas/governance/risk-compilation-result.schema.json +9 -1
  194. package/schemas/provenance/generated-content-provenance.schema.json +3 -1
  195. package/schemas/replay/replay-result.schema.json +16 -2
  196. package/schemas/replay/replay-trace.schema.json +11 -2
  197. package/schemas/security/context-segment.schema.json +21 -12
  198. package/schemas/security/redaction-policy.schema.json +4 -1
  199. package/schemas/security-packs/coverage-report.schema.json +17 -2
  200. package/schemas/security-packs/security-case-suite.schema.json +11 -1
  201. package/schemas/tool-result-envelope.schema.json +9 -1
  202. package/security-packs/approval_bypass.yaml +12 -2
  203. package/security-packs/capability_spoofing.yaml +17 -3
  204. package/security-packs/cost_amplification.yaml +21 -4
  205. package/security-packs/cross_tenant_access.yaml +16 -3
  206. package/security-packs/insecure_output_rendering.yaml +15 -4
  207. package/security-packs/mcp_tool_abuse.yaml +17 -3
  208. package/security-packs/memory_scope_violation.yaml +19 -4
  209. package/security-packs/prompt_injection_direct.yaml +19 -4
  210. package/security-packs/prompt_injection_indirect.yaml +18 -3
  211. package/security-packs/provider_payload_exposure.yaml +26 -4
  212. package/security-packs/retrieval_poisoning.yaml +5 -2
  213. package/security-packs/schema_confusion.yaml +17 -3
  214. package/security-packs/sensitive_data_disclosure.yaml +22 -5
  215. package/security-packs/tool_exfiltration.yaml +20 -4
  216. package/security-packs/tool_result_poisoning.yaml +19 -4
  217. package/security-packs/unsafe_commit_attempt.yaml +6 -3
@@ -1,23 +1,22 @@
1
1
  # Action Lifecycle
2
2
 
3
- AICF runtime separates model-facing tool use from host-controlled side effects.
4
- Models may receive read and prepare capabilities. Commit stays behind
5
- application code.
3
+ AICF runtime separates model-facing tool use from host-controlled side effects. Models
4
+ may receive read and prepare capabilities. Commit stays behind application code.
6
5
 
7
6
  ## Flow
8
7
 
9
8
  The runtime lifecycle is:
10
9
 
11
10
  ```text
12
- route -> read or prepare -> approval pending -> approved or rejected -> commit -> audit
11
+ route -> read or prepare -> approval pending -> approved or rejected -> commit -> optional verify -> audit
13
12
  ```
14
13
 
15
- `AicfToolExecutor` accepts only `read` and `prepare` execution requests. A
16
- malformed model tool call that attempts `commit` is denied safely.
14
+ `AicfToolExecutor` accepts only `read` and `prepare` execution requests. A malformed
15
+ model tool call that attempts `commit` is denied safely.
17
16
 
18
- `AicfActionLifecycleManager` is the commit entrypoint. It commits only from a
19
- stored prepared action plus a matching approval when required and an idempotency
20
- key when required by the capability manifest.
17
+ `AicfActionLifecycleManager` is the commit entrypoint. It commits only from a stored
18
+ prepared action plus a matching approval when required and an idempotency key when
19
+ required by the capability manifest.
21
20
 
22
21
  ## Prepare
23
22
 
@@ -29,18 +28,17 @@ Prepare validates:
29
28
  - registered prepare handler;
30
29
  - output schema for the prepared-action preview.
31
30
 
32
- Successful prepare stores an `AicfPreparedAction`. Prepare capabilities that
33
- can later be committed should declare `lifecycle.commit_capability_id`, and the
34
- prepared action records that linked commit capability. If policy requires
35
- approval, the returned model-safe envelope includes
36
- `status: "approval_required"` and a prepared-action reference.
31
+ Successful prepare stores an `AicfPreparedAction`. Prepare capabilities that can later
32
+ be committed should declare `lifecycle.commit_capability_id`, and the prepared action
33
+ records that linked commit capability. If policy requires approval, the returned
34
+ model-safe envelope includes `status: "approval_required"` and a prepared-action
35
+ reference.
37
36
 
38
37
  ## Approval
39
38
 
40
- `recordApproval()` records an approval decision for a prepared action and updates
41
- the prepared-action state. It does not build approval UI, verify approvers, or
42
- own identity. Host applications must perform those checks before recording the
43
- decision.
39
+ `recordApproval()` records an approval decision for a prepared action and updates the
40
+ prepared-action state. It does not build approval UI, verify approvers, or own identity.
41
+ Host applications must perform those checks before recording the decision.
44
42
 
45
43
  ## Commit
46
44
 
@@ -48,28 +46,36 @@ Commit validates:
48
46
 
49
47
  - stored prepared action exists and is not expired, rejected, or cancelled;
50
48
  - requested commit capability matches the prepared action's declared
51
- `commitCapabilityId`, or the prepared action capability itself supports
52
- commit;
49
+ `commitCapabilityId`, or the prepared action capability itself supports commit;
53
50
  - commit capability exists and supports `lifecycle.commit`;
54
51
  - commit handler exists;
55
52
  - approval exists, is approved, matches the prepared action, and is not expired;
56
53
  - idempotency is present when required;
57
54
  - policy allows commit for the runtime context.
58
55
 
59
- Commit uses the stored prepared action and approval. It does not accept
60
- model-provided raw business arguments. Duplicate idempotency keys return the
61
- safe existing result rather than invoking the handler again.
56
+ Commit uses the stored prepared action and approval. It does not accept model-provided
57
+ raw business arguments. Duplicate idempotency keys return the safe existing result
58
+ rather than invoking the handler again.
62
59
 
63
- Failed commit handlers, thrown commit handlers, and invalid commit output move
64
- the prepared action to `failed`. Terminal actions such as committed, verified,
65
- failed, expired, cancelled, and rejected cannot be moved back to approved.
60
+ Failed commit handlers, thrown commit handlers, and invalid commit output move the
61
+ prepared action to `failed`. Terminal actions such as committed, failed, expired,
62
+ cancelled, and rejected cannot be moved back to approved.
66
63
 
67
64
  ## Verify
68
65
 
69
- `verify()` checks a committed action through the committed capability's optional
70
- verify handler. It returns model-safe `verified`, `failed`, `unavailable`, or
71
- `denied` envelopes and never exposes thrown handler error details directly.
66
+ `verify()` checks a stored committed action through the committed capability's optional
67
+ verify handler. It requires the committed-action reference to match the stored prepared
68
+ action, tenant, account, subject, and committed capability.
72
69
 
73
- In-memory stores are examples and test utilities. Production applications should
74
- use durable stores, such as the optional AWS reference stores or host-owned
75
- storage.
70
+ Verification does not rewrite committed side-effect history. A successful verification
71
+ keeps the prepared action state as `committed` and records
72
+ `verification.status: "verified"`. A verification failure also keeps state as
73
+ `committed` and records `verification.status: "verification_failed"`. Runtime envelopes
74
+ mirror this split with `action.state: "committed"` plus `action.verificationStatus`.
75
+
76
+ If an action is already verified, `verify()` returns the stored verification result
77
+ without calling the handler again. Thrown handler errors are redacted in the envelope,
78
+ audit event, and optional audit ledger.
79
+
80
+ In-memory stores are examples and test utilities. Production applications should use
81
+ durable stores, such as the optional AWS reference stores or host-owned storage.
@@ -22,29 +22,29 @@ Every adapter should expose the same high-level contract:
22
22
  - `bindings`, `excluded`, and `diagnostics`;
23
23
  - selection gated by `decideCapability(..., operation: "select")`;
24
24
  - restricted side-effect tools excluded by default;
25
- - schema normalization that fails closed when the target cannot represent an
26
- AICF input schema safely.
25
+ - schema normalization that fails closed when the target cannot represent an AICF input
26
+ schema safely.
27
27
 
28
28
  ## Priority Order
29
29
 
30
- | Priority | Adapter | Why It Comes Here | Primary Output |
31
- | --- | --- | --- | --- |
32
- | Priority | Adapter | Status | Primary Output |
33
- | --- | --- | --- | --- |
34
- | P1 | Anthropic Claude Messages tools | Implemented | Claude client tool definitions plus parser for `tool_use` blocks. |
35
- | P2 | Google Gemini function calling | Implemented | Gemini `functionDeclarations` plus parser for `functionCall` objects. |
36
- | P3 | Vercel AI SDK tools | Implemented | AI SDK tool map with `inputSchema`, `description`, `strict`, and no `execute`. |
37
- | P4 | Model Context Protocol tool descriptors | Implemented | MCP `Tool` descriptors and parser for `tools/call` requests. |
38
- | P5 | LangChain/LangGraph tools | Implemented | Structured tool parameter specs and bindings for host-supplied functions. |
39
- | P6 | Semantic Kernel functions | Implemented | Function/plugin metadata and parser guidance for manual invocation flows. |
30
+ | Priority | Adapter | Why It Comes Here | Primary Output |
31
+ | -------- | --------------------------------------- | ----------------- | ------------------------------------------------------------------------------ |
32
+ | Priority | Adapter | Status | Primary Output |
33
+ | --- | --- | --- | --- |
34
+ | P1 | Anthropic Claude Messages tools | Implemented | Claude client tool definitions plus parser for `tool_use` blocks. |
35
+ | P2 | Google Gemini function calling | Implemented | Gemini `functionDeclarations` plus parser for `functionCall` objects. |
36
+ | P3 | Vercel AI SDK tools | Implemented | AI SDK tool map with `inputSchema`, `description`, `strict`, and no `execute`. |
37
+ | P4 | Model Context Protocol tool descriptors | Implemented | MCP `Tool` descriptors and parser for `tools/call` requests. |
38
+ | P5 | LangChain/LangGraph tools | Implemented | Structured tool parameter specs and bindings for host-supplied functions. |
39
+ | P6 | Semantic Kernel functions | Implemented | Function/plugin metadata and parser guidance for manual invocation flows. |
40
40
 
41
41
  ## P1: Anthropic Claude Messages Tools
42
42
 
43
43
  Target a no-model-call adapter that exports Claude client tool definitions:
44
44
 
45
45
  - `name`: sanitized AICF capability ID, capped at the provider limit.
46
- - `description`: composed from `model_description`, use guidance, risk,
47
- autonomy, lifecycle, and side-effect metadata.
46
+ - `description`: composed from `model_description`, use guidance, risk, autonomy,
47
+ lifecycle, and side-effect metadata.
48
48
  - `input_schema`: normalized AICF `input_schema`.
49
49
  - `strict: true` when the schema can be represented safely.
50
50
  - optional `input_examples` only when public examples are available and validated.
@@ -54,12 +54,10 @@ Parser target:
54
54
  - map Claude `tool_use.name` to capability ID;
55
55
  - read `tool_use.id` as call ID;
56
56
  - validate `tool_use.input` against the original AICF input schema;
57
- - return structured diagnostics for unknown names, malformed input, and schema
58
- failures.
57
+ - return structured diagnostics for unknown names, malformed input, and schema failures.
59
58
 
60
- Reference basis: Claude client tools include `name`, `description`, and
61
- `input_schema`, can use `strict: true`, and return `tool_use` blocks that the
62
- host application executes.
59
+ Reference basis: Claude client tools include `name`, `description`, and `input_schema`,
60
+ can use `strict: true`, and return `tool_use` blocks that the host application executes.
63
61
 
64
62
  ## P2: Google Gemini Function Calling
65
63
 
@@ -67,8 +65,8 @@ Target a no-model-call adapter that exports Gemini function declarations:
67
65
 
68
66
  - `name`: sanitized capability ID using underscores or camelCase-safe names.
69
67
  - `description`: composed from AICF model-facing and governance metadata.
70
- - `parameters`: AICF input schema converted to Gemini's OpenAPI-compatible
71
- schema subset.
68
+ - `parameters`: AICF input schema converted to Gemini's OpenAPI-compatible schema
69
+ subset.
72
70
 
73
71
  Parser target:
74
72
 
@@ -78,13 +76,13 @@ Parser target:
78
76
  - report schema keywords that cannot be represented safely in Gemini parameters.
79
77
 
80
78
  The hard part is schema normalization. Gemini function declarations use an
81
- OpenAPI-compatible subset, so this adapter should fail closed for unsupported
82
- JSON Schema 2020-12 features rather than silently weakening validation.
79
+ OpenAPI-compatible subset, so this adapter should fail closed for unsupported JSON
80
+ Schema 2020-12 features rather than silently weakening validation.
83
81
 
84
82
  ## P3: Vercel AI SDK Tools
85
83
 
86
- Target a TypeScript-first adapter that exports an AI SDK-compatible tool map
87
- without execution functions:
84
+ Target a TypeScript-first adapter that exports an AI SDK-compatible tool map without
85
+ execution functions:
88
86
 
89
87
  - object keys are deterministic tool names;
90
88
  - values include `description`, `inputSchema`, and `strict` when supported;
@@ -97,9 +95,9 @@ Parser target:
97
95
  - validate tool call input against the original AICF input schema;
98
96
  - leave tool result production and execution to the host app.
99
97
 
100
- This adapter is attractive because the AI SDK accepts JSON schemas and `execute`
101
- is optional, allowing host apps to forward calls to a queue, client, or approval
102
- path instead of executing in the same process.
98
+ This adapter is attractive because the AI SDK accepts JSON schemas and `execute` is
99
+ optional, allowing host apps to forward calls to a queue, client, or approval path
100
+ instead of executing in the same process.
103
101
 
104
102
  ## P4: Model Context Protocol Tool Descriptors
105
103
 
@@ -110,18 +108,18 @@ Target MCP descriptor export, not an AICF-owned executable MCP server:
110
108
  - `description`: AICF model description plus lifecycle/risk guidance;
111
109
  - `inputSchema`: AICF input schema, preserving JSON Schema 2020-12 where valid;
112
110
  - `outputSchema`: AICF output schema when representable;
113
- - `annotations`: conservative hints derived from side effects, such as read-only
114
- and idempotent hints.
111
+ - `annotations`: conservative hints derived from side effects, such as read-only and
112
+ idempotent hints.
115
113
 
116
114
  Parser target:
117
115
 
118
116
  - map `tools/call.params.name` to capability ID;
119
117
  - validate `tools/call.params.arguments`;
120
- - return an AICF capability request object for the host MCP server or runtime to
121
- decide and execute.
118
+ - return an AICF capability request object for the host MCP server or runtime to decide
119
+ and execute.
122
120
 
123
- Do not add an MCP server that executes capabilities inside AICF. Host apps may
124
- use AICF descriptors inside their own MCP server implementation.
121
+ Do not add an MCP server that executes capabilities inside AICF. Host apps may use AICF
122
+ descriptors inside their own MCP server implementation.
125
123
 
126
124
  ## P5: LangChain And LangGraph Tools
127
125
 
@@ -132,12 +130,12 @@ Target descriptor export for host-created tools:
132
130
  - schema suitable for LangChain structured tools;
133
131
  - binding metadata for capability ID, risk, autonomy, and restriction status.
134
132
 
135
- Do not generate callable implementations. LangChain and LangGraph tools are
136
- runtime functions that can update state or return commands, so the host must
137
- supply execution, approval, and state handling.
133
+ Do not generate callable implementations. LangChain and LangGraph tools are runtime
134
+ functions that can update state or return commands, so the host must supply execution,
135
+ approval, and state handling.
138
136
 
139
- This adapter should probably be implemented after the AI SDK adapter, because
140
- both are TypeScript-oriented but AI SDK has a cleaner descriptor-only path.
137
+ This adapter should probably be implemented after the AI SDK adapter, because both are
138
+ TypeScript-oriented but AI SDK has a cleaner descriptor-only path.
141
139
 
142
140
  ## P6: Semantic Kernel Functions
143
141
 
@@ -148,8 +146,8 @@ Target metadata and manual-invocation compatibility:
148
146
  - parser support for chosen function name and arguments;
149
147
  - guidance for `autoInvoke: false` style host workflows.
150
148
 
151
- Semantic Kernel is useful for enterprise users, but its strongest value is in
152
- runtime orchestration. AICF should stay on the metadata and validation side.
149
+ Semantic Kernel is useful for enterprise users, but its strongest value is in runtime
150
+ orchestration. AICF should stay on the metadata and validation side.
153
151
 
154
152
  ## Common Tests For Future Adapter Implementations
155
153
 
@@ -157,10 +155,10 @@ Each adapter should add tests for:
157
155
 
158
156
  - allowed read and prepare capabilities exported for a matching context;
159
157
  - restricted commit/send capabilities excluded by default;
160
- - restricted export only with an explicit option and deterministic selection
161
- still applied;
162
- - deterministic safe name generation, truncation, collision handling, and
163
- reverse bindings;
158
+ - restricted export only with an explicit option and deterministic selection still
159
+ applied;
160
+ - deterministic safe name generation, truncation, collision handling, and reverse
161
+ bindings;
164
162
  - schema normalization success and unsupported-schema exclusion;
165
163
  - valid tool-call parsing;
166
164
  - invalid JSON or malformed input handling;
@@ -170,10 +168,14 @@ Each adapter should add tests for:
170
168
 
171
169
  ## Reference Links
172
170
 
173
- - Anthropic Claude tool use: https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview
174
- - Anthropic define tools: https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools
171
+ - Anthropic Claude tool use:
172
+ https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview
173
+ - Anthropic define tools:
174
+ https://platform.claude.com/docs/en/agents-and-tools/tool-use/define-tools
175
175
  - Google Gemini function calling: https://ai.google.dev/gemini-api/docs/function-calling
176
176
  - Vercel AI SDK tool calling: https://ai-sdk.dev/docs/ai-sdk-core/tools-and-tool-calling
177
- - Model Context Protocol tools: https://modelcontextprotocol.io/specification/2025-06-18/server/tools
177
+ - Model Context Protocol tools:
178
+ https://modelcontextprotocol.io/specification/2025-06-18/server/tools
178
179
  - LangChain JavaScript tools: https://docs.langchain.com/oss/javascript/langchain/tools
179
- - Semantic Kernel manual function invocation: https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/function-calling/function-invocation
180
+ - Semantic Kernel manual function invocation:
181
+ https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/function-calling/function-invocation
package/docs/adapters.md CHANGED
@@ -1,21 +1,20 @@
1
1
  # Adapters
2
2
 
3
- AICF adapters export validated capability manifests into provider or runtime
4
- tool descriptor shapes. They do not call models, execute handlers, persist
5
- actions, collect approvals, or perform side effects.
3
+ AICF adapters export validated capability manifests into provider or runtime tool
4
+ descriptor shapes. They do not call models, execute handlers, persist actions, collect
5
+ approvals, or perform side effects.
6
6
 
7
7
  Every adapter follows the same boundary:
8
8
 
9
9
  - require a decision context with permissions and autonomy tier;
10
10
  - include only capabilities whose `select` decision is `allowed`;
11
- - exclude restricted commit, send, money-moving, permission-changing, workflow,
12
- and irreversible capabilities by default;
13
- - allow restricted export only with `includeRestricted: true`, while still
14
- applying deterministic selection;
11
+ - exclude restricted commit, send, money-moving, permission-changing, workflow, and
12
+ irreversible capabilities by default;
13
+ - allow restricted export only with `includeRestricted: true`, while still applying
14
+ deterministic selection;
15
15
  - bind exported names back to AICF capability IDs;
16
16
  - validate parsed tool-call arguments against the original AICF input schema;
17
- - fail closed with diagnostics when schemas or names cannot be represented
18
- safely.
17
+ - fail closed with diagnostics when schemas or names cannot be represented safely.
19
18
 
20
19
  ## TypeScript APIs
21
20
 
@@ -89,9 +88,9 @@ node dist/cli.js langchain-tools examples --context examples/support/openai/cont
89
88
  node dist/cli.js semantic-kernel-functions examples --context examples/support/openai/context.support_agent.json
90
89
  ```
91
90
 
92
- Use `--include-restricted` only when the host has deliberately narrowed context
93
- and still intends to run deterministic approval, idempotency, auth, and commit
94
- checks before any side effect.
91
+ Use `--include-restricted` only when the host has deliberately narrowed context and
92
+ still intends to run deterministic approval, idempotency, auth, and commit checks before
93
+ any side effect.
95
94
 
96
95
  ## Output Shapes
97
96
 
@@ -107,6 +106,6 @@ All outputs include `bindings`, `excluded`, and `diagnostics`.
107
106
 
108
107
  ## Host Responsibilities
109
108
 
110
- Adapters only produce descriptors and parse calls. Host applications remain
111
- responsible for model requests, real authorization, facts, approvals, execution,
112
- storage, idempotency, verification, and durable audit logs.
109
+ Adapters only produce descriptors and parse calls. Host applications remain responsible
110
+ for model requests, real authorization, facts, approvals, execution, storage,
111
+ idempotency, verification, and durable audit logs.
@@ -1,18 +1,18 @@
1
1
  # Vercel AI SDK Bridge
2
2
 
3
- The AI SDK bridge is an optional provider adapter for applications that already
4
- use Vercel AI SDK Core. It translates a routed AICF capability slice into AI SDK
5
- tools, executes tool calls through `AicfToolExecutor`, and returns model-safe
6
- AICF runtime envelopes.
3
+ The AI SDK bridge is an optional provider adapter for applications that already use
4
+ Vercel AI SDK Core. It translates a routed AICF capability slice into AI SDK tools,
5
+ executes tool calls through `AicfToolExecutor`, and returns model-safe AICF runtime
6
+ envelopes.
7
7
 
8
- It does not install provider packages, choose a model provider, expose commit
9
- tools, persist state, log raw provider payloads, or make root/runtime imports
10
- depend on the `ai` package.
8
+ It does not install provider packages, choose a model provider, expose commit tools,
9
+ persist state, log raw provider payloads, or make root/runtime imports depend on the
10
+ `ai` package.
11
11
 
12
12
  ## Import
13
13
 
14
- Install AICF plus AI SDK Core only in applications that use this bridge. Model
15
- provider packages remain host application dependencies.
14
+ Install AICF plus AI SDK Core only in applications that use this bridge. Model provider
15
+ packages remain host application dependencies.
16
16
 
17
17
  ```bash
18
18
  npm install ai-capability-framework ai
@@ -26,52 +26,49 @@ import {
26
26
  } from "ai-capability-framework/providers/ai-sdk";
27
27
  ```
28
28
 
29
- `createDefaultAiSdkToolFactories()` dynamically imports the optional `ai`
30
- package. Host applications may instead pass compatible `tool`, `jsonSchema`,
31
- and optional `stepCountIs` factories.
29
+ `createDefaultAiSdkToolFactories()` dynamically imports the optional `ai` package. Host
30
+ applications may instead pass compatible `tool`, `jsonSchema`, and optional
31
+ `stepCountIs` factories.
32
32
 
33
33
  ## Tool Bridge
34
34
 
35
- `buildAiSdkTools()` builds an AI SDK tool set from an already-routed AICF
36
- capability slice. Each generated tool uses a provider-safe name, a cloned JSON
37
- Schema input, and an `execute` callback that delegates to
38
- `executeProviderToolCall()`.
35
+ `buildAiSdkTools()` builds an AI SDK tool set from an already-routed AICF capability
36
+ slice. Each generated tool uses a provider-safe name, a cloned JSON Schema input, and an
37
+ `execute` callback that delegates to `executeProviderToolCall()`.
39
38
 
40
39
  AI SDK validation and `needsApproval` metadata are advisory. AICF still performs
41
- canonical input validation, policy checks, lifecycle checks, approval handling,
42
- and model-safe envelope formatting.
40
+ canonical input validation, policy checks, lifecycle checks, approval handling, and
41
+ model-safe envelope formatting.
43
42
 
44
43
  Minimal usage is: validate manifests, build a routed runtime slice, register
45
- read/prepare handlers, create AI SDK tool factories, then pass the generated
46
- tools to a host-owned `generateText` or `streamText` call.
44
+ read/prepare handlers, create AI SDK tool factories, then pass the generated tools to a
45
+ host-owned `generateText` or `streamText` call.
47
46
 
48
47
  ## Generate And Stream Wrappers
49
48
 
50
- `runAiSdkGenerateText()` is a convenience wrapper around a host-supplied
51
- `generateText` function. It passes the host model, prompt or messages, system
52
- text, tools, `stopWhen`, and provider options, then returns a safe summary with
53
- text, tool-call summaries, model-safe tool envelopes, usage, warnings, and trace
54
- events.
49
+ `runAiSdkGenerateText()` is a convenience wrapper around a host-supplied `generateText`
50
+ function. It passes the host model, prompt or messages, system text, tools, `stopWhen`,
51
+ and provider options, then returns a safe summary with text, tool-call summaries,
52
+ model-safe tool envelopes, usage, warnings, and trace events.
55
53
 
56
- `runAiSdkStreamText()` is a thin wrapper around a host-supplied `streamText`
57
- function. It passes AICF-backed tools and trace hooks, sets `includeRawChunks:
58
- false`, and does not consume, transform, log, or store raw stream chunks.
54
+ `runAiSdkStreamText()` is a thin wrapper around a host-supplied `streamText` function.
55
+ It passes AICF-backed tools and trace hooks, sets `includeRawChunks: false`, and does
56
+ not consume, transform, log, or store raw stream chunks.
59
57
 
60
58
  ## Boundary
61
59
 
62
- - AICF capability manifests, policy, lifecycle, and runtime envelopes remain the
63
- source of truth.
64
- - Commit, destructive, money-moving, and external-send capabilities are not
65
- exported by default and are not executable through AI SDK tool calls.
66
- - Provider packages such as `@ai-sdk/openai`, `@ai-sdk/anthropic`, and
67
- `@ai-sdk/google` are host application dependencies, not AICF dependencies.
68
- - Raw prompts, provider request/response payloads, traces, credentials, and
69
- private diagnostics are not captured by default.
60
+ - AICF capability manifests, policy, lifecycle, and runtime envelopes remain the source
61
+ of truth.
62
+ - Commit, destructive, money-moving, and external-send capabilities are not exported by
63
+ default and are not executable through AI SDK tool calls.
64
+ - Provider packages such as `@ai-sdk/openai`, `@ai-sdk/anthropic`, and `@ai-sdk/google`
65
+ are host application dependencies, not AICF dependencies.
66
+ - Raw prompts, provider request/response payloads, traces, credentials, and private
67
+ diagnostics are not captured by default.
70
68
  - Live tests are opt-in with `RUN_LIVE_AI_SDK=1` and host-provided model setup.
71
69
 
72
- Known limitations: no AI SDK provider packages, no provider selection, no UI
73
- components, no raw stream chunk capture, no production storage, and no
74
- model-exposed commit path.
70
+ Known limitations: no AI SDK provider packages, no provider selection, no UI components,
71
+ no raw stream chunk capture, no production storage, and no model-exposed commit path.
75
72
 
76
73
  ## Checks
77
74
 
@@ -1,17 +1,16 @@
1
1
  # Anthropic Claude Runtime
2
2
 
3
- The Anthropic runtime is an optional provider adapter for Claude Messages tool
4
- use. It translates a routed AICF capability slice into Claude client tools,
5
- runs a bounded Messages loop with a caller-provided client, executes tool calls
6
- through `AicfToolExecutor`, and returns Claude-compatible `tool_result` blocks.
3
+ The Anthropic runtime is an optional provider adapter for Claude Messages tool use. It
4
+ translates a routed AICF capability slice into Claude client tools, runs a bounded
5
+ Messages loop with a caller-provided client, executes tool calls through
6
+ `AicfToolExecutor`, and returns Claude-compatible `tool_result` blocks.
7
7
 
8
- It does not expose commit tools, use Anthropic Tool Runner, persist state, log
9
- raw provider payloads, or make root/runtime imports depend on the Anthropic SDK.
8
+ It does not expose commit tools, use Anthropic Tool Runner, persist state, log raw
9
+ provider payloads, or make root/runtime imports depend on the Anthropic SDK.
10
10
 
11
11
  ## Import
12
12
 
13
- Install AICF plus the optional Anthropic SDK only in applications that use this
14
- subpath:
13
+ Install AICF plus the optional Anthropic SDK only in applications that use this subpath:
15
14
 
16
15
  ```bash
17
16
  npm install ai-capability-framework @anthropic-ai/sdk
@@ -26,8 +25,8 @@ import {
26
25
  ```
27
26
 
28
27
  `createDefaultAnthropicMessagesClient()` dynamically imports the optional
29
- `@anthropic-ai/sdk` package. Host applications may instead pass any compatible
30
- client with `messages.create(input)`.
28
+ `@anthropic-ai/sdk` package. Host applications may instead pass any compatible client
29
+ with `messages.create(input)`.
31
30
 
32
31
  ## Runtime Shape
33
32
 
@@ -35,38 +34,36 @@ Minimal usage is: validate manifests, build a routed runtime slice, register
35
34
  read/prepare handlers, create or pass a Claude-compatible client, then call
36
35
  `runAnthropicMessages()` with synthetic-safe messages and host context.
37
36
 
38
- The host application is responsible for building runtime context, routing
39
- capabilities, registering handlers, and providing initial Claude messages.
37
+ The host application is responsible for building runtime context, routing capabilities,
38
+ registering handlers, and providing initial Claude messages.
40
39
 
41
- `runAnthropicMessages()` sends `model`, `max_tokens`, `system`, `messages`,
42
- `tools`, and optional `tool_choice` to `client.messages.create()`. If Claude
43
- returns `tool_use` blocks, AICF parses them through the generated binding map,
44
- validates arguments against the original AICF schema, executes only read or
45
- prepare through the runtime executor, and appends one user message whose content
46
- starts with matching `tool_result` blocks.
40
+ `runAnthropicMessages()` sends `model`, `max_tokens`, `system`, `messages`, `tools`, and
41
+ optional `tool_choice` to `client.messages.create()`. If Claude returns `tool_use`
42
+ blocks, AICF parses them through the generated binding map, validates arguments against
43
+ the original AICF schema, executes only read or prepare through the runtime executor,
44
+ and appends one user message whose content starts with matching `tool_result` blocks.
47
45
 
48
- `tool_result.tool_use_id` always comes from Claude's `tool_use.id`. Safe error
49
- envelopes set `is_error: true`; approval-required prepare results are returned
50
- as model-safe envelopes without committing the action.
46
+ `tool_result.tool_use_id` always comes from Claude's `tool_use.id`. Safe error envelopes
47
+ set `is_error: true`; approval-required prepare results are returned as model-safe
48
+ envelopes without committing the action.
51
49
 
52
50
  ## Boundary
53
51
 
54
- The Anthropic runtime follows the same provider-neutral boundary as the OpenAI
55
- runtime:
52
+ The Anthropic runtime follows the same provider-neutral boundary as the OpenAI runtime:
56
53
 
57
- - AICF capability manifests, policy, lifecycle, and runtime envelopes remain the
58
- source of truth.
54
+ - AICF capability manifests, policy, lifecycle, and runtime envelopes remain the source
55
+ of truth.
59
56
  - Claude tool schemas are provider descriptors, not trusted execution policy.
60
- - Commit, destructive, money-moving, and external-send capabilities are not
61
- exported by default and are not executable through provider tool calls.
62
- - Raw prompts, provider request/response payloads, traces, credentials, and
63
- private diagnostics are not captured by default.
57
+ - Commit, destructive, money-moving, and external-send capabilities are not exported by
58
+ default and are not executable through provider tool calls.
59
+ - Raw prompts, provider request/response payloads, traces, credentials, and private
60
+ diagnostics are not captured by default.
64
61
  - Live tests are opt-in with `RUN_LIVE_ANTHROPIC=1`, `ANTHROPIC_API_KEY`, and
65
62
  `AICF_ANTHROPIC_MODEL`.
66
63
 
67
- Known limitations: no streaming, no Anthropic Tool Runner, no server-side
68
- Anthropic tools, no provider-managed automatic tool execution, no production
69
- storage, and no model-exposed commit path.
64
+ Known limitations: no streaming, no Anthropic Tool Runner, no server-side Anthropic
65
+ tools, no provider-managed automatic tool execution, no production storage, and no
66
+ model-exposed commit path.
70
67
 
71
68
  ## Checks
72
69
 
@@ -0,0 +1,59 @@
1
+ # Public API Policy
2
+
3
+ AICF treats published package exports as public contracts. The root package is the
4
+ stable Core and descriptor API. Runtime, provider, governance, security, storage,
5
+ control-plane, eval, and CLI utilities live behind explicit subpaths so applications can
6
+ import only the surface they use.
7
+
8
+ ## Root API Policy
9
+
10
+ The root import is reserved for stable Core and descriptor APIs. It should stay small
11
+ enough that applications can import it without pulling optional runtime, provider,
12
+ cloud, tracing, or CLI implementation dependencies.
13
+
14
+ ## Import Policy
15
+
16
+ - Use `ai-capability-framework` for Core contracts, manifest loading, validation,
17
+ deterministic decisions, eval helpers, descriptor adapters, and model-safe tool
18
+ results.
19
+ - Use subpaths for optional runtime or integration surfaces, such as
20
+ `ai-capability-framework/runtime`, `ai-capability-framework/openai`, and
21
+ `ai-capability-framework/providers/anthropic`.
22
+ - Use `ai-capability-framework/cli` only for programmatic CLI tests or tooling. The
23
+ `runCli` helper is intentionally not exported from the root package.
24
+ - The `aicf` binary remains the supported command-line entrypoint for normal CLI use.
25
+ - Optional provider, AWS, OpenTelemetry, Langfuse, MCP, LangChain, AI SDK, and Agents
26
+ SDK packages must not be required by the root import.
27
+
28
+ ## Export Classifications
29
+
30
+ | Surface | Classification | Notes |
31
+ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
32
+ | `ai-capability-framework` | stable public | Core manifests, loading, validation, deterministic decisions, eval helpers, descriptor-only adapters, registry helpers, and model-safe tool-result helpers. |
33
+ | `ai-capability-framework/runtime` | release-candidate public | No-model runtime context, routing, policy, handler registry, executor, lifecycle, stores, audit events, and envelopes. |
34
+ | `ai-capability-framework/openai` | adapter public | Optional OpenAI Responses runtime and OpenAI Agents SDK bridge. |
35
+ | `ai-capability-framework/providers` | adapter public | Shared provider foundation for names, schemas, calls, results, optional dependencies, and provider execution helpers. |
36
+ | `ai-capability-framework/providers/*` | adapter public | Provider-specific or framework-bridge adapter surfaces for Anthropic, Gemini, AI SDK, LangChain, MCP, Semantic Kernel, and conformance helpers. |
37
+ | `ai-capability-framework/mcp-server` | adapter public | Optional MCP server runtime surface backed by AICF routing and execution. |
38
+ | `ai-capability-framework/aws` | adapter public | Optional AWS reference adapters. AWS SDK imports stay isolated to this subpath. |
39
+ | `ai-capability-framework/observability`, `ai-capability-framework/langfuse` | release-candidate public | Optional metadata/redacted-content tracing and Langfuse adapters. |
40
+ | `ai-capability-framework/evals-live`, `ai-capability-framework/evalops`, `ai-capability-framework/promptfoo` | release-candidate public | Optional eval and EvalOps export/import helpers. Live paths are opt-in. |
41
+ | `ai-capability-framework/governance`, `ai-capability-framework/controls`, `ai-capability-framework/conformance` | release-candidate public | Governance, runtime controls, and deterministic conformance gates. |
42
+ | `ai-capability-framework/audit`, `ai-capability-framework/security`, `ai-capability-framework/security-packs`, `ai-capability-framework/replay`, `ai-capability-framework/evidence`, `ai-capability-framework/memory`, `ai-capability-framework/provenance` | release-candidate public | Public-safe evidence, security, replay, memory, and provenance utility contracts. |
43
+ | `ai-capability-framework/control-plane` | release-candidate public | Framework-neutral request router and reference service helpers; production auth and storage remain host-owned. |
44
+ | `ai-capability-framework/cli` | release-candidate public | Programmatic CLI runner for tests and tooling. Exposes `runCli` and `CliRunOptions`; not exported from the root package. |
45
+ | `src/cli.ts` direct imports in repository tests | internal but exported for CLI/tests | Source-level test convenience only. External users should import `ai-capability-framework/cli` or run the `aicf` binary. |
46
+ | Root `runCli` export | should be removed before v1 | Removed from root in P7. Use `ai-capability-framework/cli`. |
47
+ | CLI implementation helpers other than `runCli` and `CliRunOptions` | should move to subpath | Keep private to the CLI module unless a future release documents a narrow public contract. |
48
+ | Undocumented source files, generated internals, and private helper functions | should be removed before v1 | Do not expose through package exports. |
49
+
50
+ ## Migration Note For Release-Candidate Users
51
+
52
+ If a release-candidate app imported `runCli` from the package root, change it to:
53
+
54
+ ```ts
55
+ import { runCli } from "ai-capability-framework/cli";
56
+ ```
57
+
58
+ This keeps root imports focused on the stable Core API while preserving a supported
59
+ programmatic CLI entrypoint for tests and local automation.