dna-sdk 0.1.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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/adapters/embedding/onnx.d.ts +32 -0
  4. package/dist/adapters/embedding/onnx.js +51 -0
  5. package/dist/adapters/filesystem/cache.d.ts +16 -0
  6. package/dist/adapters/filesystem/cache.js +113 -0
  7. package/dist/adapters/filesystem/index.d.ts +2 -0
  8. package/dist/adapters/filesystem/index.js +2 -0
  9. package/dist/adapters/filesystem/source.d.ts +82 -0
  10. package/dist/adapters/filesystem/source.js +357 -0
  11. package/dist/adapters/postgres/index.d.ts +2 -0
  12. package/dist/adapters/postgres/index.js +2 -0
  13. package/dist/adapters/postgres/migrations.d.ts +14 -0
  14. package/dist/adapters/postgres/migrations.js +88 -0
  15. package/dist/adapters/postgres/source.d.ts +172 -0
  16. package/dist/adapters/postgres/source.js +569 -0
  17. package/dist/adapters/resolvers/github.d.ts +12 -0
  18. package/dist/adapters/resolvers/github.js +47 -0
  19. package/dist/adapters/resolvers/http.d.ts +22 -0
  20. package/dist/adapters/resolvers/http.js +145 -0
  21. package/dist/adapters/resolvers/index.d.ts +3 -0
  22. package/dist/adapters/resolvers/index.js +3 -0
  23. package/dist/adapters/resolvers/local.d.ts +24 -0
  24. package/dist/adapters/resolvers/local.js +132 -0
  25. package/dist/adapters/search/driver.d.ts +45 -0
  26. package/dist/adapters/search/driver.js +138 -0
  27. package/dist/adapters/search/migrations.d.ts +26 -0
  28. package/dist/adapters/search/migrations.js +58 -0
  29. package/dist/adapters/search/rrf.d.ts +23 -0
  30. package/dist/adapters/search/rrf.js +42 -0
  31. package/dist/adapters/search/sqlite-vec.d.ts +66 -0
  32. package/dist/adapters/search/sqlite-vec.js +294 -0
  33. package/dist/bootstrap.d.ts +45 -0
  34. package/dist/bootstrap.js +134 -0
  35. package/dist/extensions/agentskills/DOCS.md +18 -0
  36. package/dist/extensions/agentskills.d.ts +28 -0
  37. package/dist/extensions/agentskills.js +252 -0
  38. package/dist/extensions/agentsmd/DOCS.md +18 -0
  39. package/dist/extensions/agentsmd.d.ts +22 -0
  40. package/dist/extensions/agentsmd.js +170 -0
  41. package/dist/extensions/audit/kinds/audit-log.kind.yaml +148 -0
  42. package/dist/extensions/audit.d.ts +25 -0
  43. package/dist/extensions/audit.js +62 -0
  44. package/dist/extensions/automation/kinds/automation.kind.yaml +296 -0
  45. package/dist/extensions/automation/query.d.ts +49 -0
  46. package/dist/extensions/automation/query.js +77 -0
  47. package/dist/extensions/automation/write-guards.d.ts +59 -0
  48. package/dist/extensions/automation/write-guards.js +153 -0
  49. package/dist/extensions/automation.d.ts +41 -0
  50. package/dist/extensions/automation.js +54 -0
  51. package/dist/extensions/collab.d.ts +16 -0
  52. package/dist/extensions/collab.js +79 -0
  53. package/dist/extensions/doc/kinds/doc.kind.yaml +118 -0
  54. package/dist/extensions/doc.d.ts +25 -0
  55. package/dist/extensions/doc.js +10 -0
  56. package/dist/extensions/eval/kinds/eval-baseline.kind.yaml +65 -0
  57. package/dist/extensions/eval/kinds/eval-case.kind.yaml +140 -0
  58. package/dist/extensions/eval/kinds/eval-run.kind.yaml +134 -0
  59. package/dist/extensions/eval/kinds/eval-suite.kind.yaml +87 -0
  60. package/dist/extensions/eval.d.ts +24 -0
  61. package/dist/extensions/eval.js +31 -0
  62. package/dist/extensions/evidence/kinds/evidence.kind.yaml +92 -0
  63. package/dist/extensions/evidence.d.ts +17 -0
  64. package/dist/extensions/evidence.js +94 -0
  65. package/dist/extensions/federation.d.ts +22 -0
  66. package/dist/extensions/federation.js +173 -0
  67. package/dist/extensions/guardrails/DOCS.md +20 -0
  68. package/dist/extensions/guardrails.d.ts +31 -0
  69. package/dist/extensions/guardrails.js +228 -0
  70. package/dist/extensions/helix/DOCS-Actor.md +20 -0
  71. package/dist/extensions/helix/DOCS-Agent.md +20 -0
  72. package/dist/extensions/helix/DOCS-UseCase.md +20 -0
  73. package/dist/extensions/helix/layers.d.ts +12 -0
  74. package/dist/extensions/helix/layers.js +18 -0
  75. package/dist/extensions/helix/write-guards.d.ts +70 -0
  76. package/dist/extensions/helix/write-guards.js +172 -0
  77. package/dist/extensions/helix.d.ts +29 -0
  78. package/dist/extensions/helix.js +963 -0
  79. package/dist/extensions/helix_extras.d.ts +124 -0
  80. package/dist/extensions/helix_extras.js +328 -0
  81. package/dist/extensions/hooks.d.ts +31 -0
  82. package/dist/extensions/hooks.js +247 -0
  83. package/dist/extensions/kinddef/DOCS.md +24 -0
  84. package/dist/extensions/kinddef.d.ts +40 -0
  85. package/dist/extensions/kinddef.js +171 -0
  86. package/dist/extensions/lesson.d.ts +6 -0
  87. package/dist/extensions/lesson.js +194 -0
  88. package/dist/extensions/modelreg/kinds/model-profile.kind.yaml +155 -0
  89. package/dist/extensions/modelreg.d.ts +30 -0
  90. package/dist/extensions/modelreg.js +38 -0
  91. package/dist/extensions/recognizer.d.ts +34 -0
  92. package/dist/extensions/recognizer.js +272 -0
  93. package/dist/extensions/research.d.ts +32 -0
  94. package/dist/extensions/research.js +292 -0
  95. package/dist/extensions/safety.d.ts +33 -0
  96. package/dist/extensions/safety.js +230 -0
  97. package/dist/extensions/sdlc/kinds/adr.kind.yaml +136 -0
  98. package/dist/extensions/sdlc/kinds/archive-proposal.kind.yaml +107 -0
  99. package/dist/extensions/sdlc/kinds/changelog.kind.yaml +108 -0
  100. package/dist/extensions/sdlc/kinds/cognitive-policy.kind.yaml +470 -0
  101. package/dist/extensions/sdlc/kinds/forecast.kind.yaml +125 -0
  102. package/dist/extensions/sdlc/kinds/insight.kind.yaml +87 -0
  103. package/dist/extensions/sdlc/kinds/kaizen.kind.yaml +106 -0
  104. package/dist/extensions/sdlc/kinds/lesson-learned.kind.yaml +270 -0
  105. package/dist/extensions/sdlc/kinds/narrative.kind.yaml +189 -0
  106. package/dist/extensions/sdlc/kinds/pattern-insight.kind.yaml +204 -0
  107. package/dist/extensions/sdlc/kinds/postmortem.kind.yaml +168 -0
  108. package/dist/extensions/sdlc/kinds/pre-mortem.kind.yaml +145 -0
  109. package/dist/extensions/sdlc/kinds/prompt-template.kind.yaml +109 -0
  110. package/dist/extensions/sdlc/kinds/retrospective.kind.yaml +186 -0
  111. package/dist/extensions/sdlc/kinds/risk-register.kind.yaml +178 -0
  112. package/dist/extensions/sdlc/kinds/saved-view.kind.yaml +127 -0
  113. package/dist/extensions/sdlc/kinds/status-report.kind.yaml +129 -0
  114. package/dist/extensions/sdlc/kinds/synthesis-run.kind.yaml +279 -0
  115. package/dist/extensions/sdlc/kinds/synthesizer-state.kind.yaml +196 -0
  116. package/dist/extensions/sdlc/kinds/workflow-event.kind.yaml +195 -0
  117. package/dist/extensions/sdlc.d.ts +32 -0
  118. package/dist/extensions/sdlc.js +1318 -0
  119. package/dist/extensions/soulspec/DOCS.md +19 -0
  120. package/dist/extensions/soulspec.d.ts +22 -0
  121. package/dist/extensions/soulspec.js +287 -0
  122. package/dist/extensions/tenant.d.ts +6 -0
  123. package/dist/extensions/tenant.js +291 -0
  124. package/dist/extensions/testkit.d.ts +24 -0
  125. package/dist/extensions/testkit.js +211 -0
  126. package/dist/index.d.ts +80 -0
  127. package/dist/index.js +102 -0
  128. package/dist/kernel/_text.d.ts +28 -0
  129. package/dist/kernel/_text.js +42 -0
  130. package/dist/kernel/bundle-handle.d.ts +83 -0
  131. package/dist/kernel/bundle-handle.js +184 -0
  132. package/dist/kernel/capabilities.d.ts +157 -0
  133. package/dist/kernel/capabilities.js +109 -0
  134. package/dist/kernel/collaborator-ports.d.ts +91 -0
  135. package/dist/kernel/collaborator-ports.js +1 -0
  136. package/dist/kernel/composition-resolver.d.ts +215 -0
  137. package/dist/kernel/composition-resolver.js +558 -0
  138. package/dist/kernel/composition.d.ts +10 -0
  139. package/dist/kernel/composition.js +1 -0
  140. package/dist/kernel/descriptor-loader.d.ts +13 -0
  141. package/dist/kernel/descriptor-loader.js +48 -0
  142. package/dist/kernel/document.d.ts +43 -0
  143. package/dist/kernel/document.js +71 -0
  144. package/dist/kernel/embedding.d.ts +28 -0
  145. package/dist/kernel/embedding.js +78 -0
  146. package/dist/kernel/errors.d.ts +62 -0
  147. package/dist/kernel/errors.js +82 -0
  148. package/dist/kernel/events.d.ts +6 -0
  149. package/dist/kernel/events.js +21 -0
  150. package/dist/kernel/evidence-capture.d.ts +69 -0
  151. package/dist/kernel/evidence-capture.js +138 -0
  152. package/dist/kernel/fs.d.ts +20 -0
  153. package/dist/kernel/fs.js +128 -0
  154. package/dist/kernel/generic-rw.d.ts +33 -0
  155. package/dist/kernel/generic-rw.js +235 -0
  156. package/dist/kernel/hooks.d.ts +172 -0
  157. package/dist/kernel/hooks.js +256 -0
  158. package/dist/kernel/index.d.ts +624 -0
  159. package/dist/kernel/index.js +1638 -0
  160. package/dist/kernel/instance.d.ts +211 -0
  161. package/dist/kernel/instance.js +487 -0
  162. package/dist/kernel/kind-registry.d.ts +183 -0
  163. package/dist/kernel/kind-registry.js +710 -0
  164. package/dist/kernel/kind_base.d.ts +106 -0
  165. package/dist/kernel/kind_base.js +244 -0
  166. package/dist/kernel/layer-resolver.d.ts +48 -0
  167. package/dist/kernel/layer-resolver.js +284 -0
  168. package/dist/kernel/lock-manager.d.ts +21 -0
  169. package/dist/kernel/lock-manager.js +43 -0
  170. package/dist/kernel/lock.d.ts +38 -0
  171. package/dist/kernel/lock.js +115 -0
  172. package/dist/kernel/meta.d.ts +135 -0
  173. package/dist/kernel/meta.js +817 -0
  174. package/dist/kernel/models.d.ts +3089 -0
  175. package/dist/kernel/models.js +764 -0
  176. package/dist/kernel/navigator.d.ts +36 -0
  177. package/dist/kernel/navigator.js +132 -0
  178. package/dist/kernel/port-surface.d.ts +33 -0
  179. package/dist/kernel/port-surface.js +180 -0
  180. package/dist/kernel/preview.d.ts +60 -0
  181. package/dist/kernel/preview.js +54 -0
  182. package/dist/kernel/prompt-budget.d.ts +39 -0
  183. package/dist/kernel/prompt-budget.js +43 -0
  184. package/dist/kernel/prompt-builder.d.ts +25 -0
  185. package/dist/kernel/prompt-builder.js +237 -0
  186. package/dist/kernel/protocols.d.ts +751 -0
  187. package/dist/kernel/protocols.js +493 -0
  188. package/dist/kernel/reports.d.ts +26 -0
  189. package/dist/kernel/reports.js +215 -0
  190. package/dist/kernel/resolver.d.ts +146 -0
  191. package/dist/kernel/resolver.js +232 -0
  192. package/dist/kernel/resource.d.ts +57 -0
  193. package/dist/kernel/resource.js +97 -0
  194. package/dist/kernel/runtime.d.ts +16 -0
  195. package/dist/kernel/runtime.js +18 -0
  196. package/dist/kernel/safety-scanner.d.ts +38 -0
  197. package/dist/kernel/safety-scanner.js +228 -0
  198. package/dist/kernel/serialize-to-files.d.ts +29 -0
  199. package/dist/kernel/serialize-to-files.js +23 -0
  200. package/dist/kernel/spec-access.d.ts +23 -0
  201. package/dist/kernel/spec-access.js +40 -0
  202. package/dist/kernel/studio_ui.d.ts +88 -0
  203. package/dist/kernel/studio_ui.js +135 -0
  204. package/dist/kernel/templates.d.ts +77 -0
  205. package/dist/kernel/templates.js +116 -0
  206. package/dist/kernel/tool-registry.d.ts +52 -0
  207. package/dist/kernel/tool-registry.js +89 -0
  208. package/dist/kernel/write-pipeline.d.ts +65 -0
  209. package/dist/kernel/write-pipeline.js +271 -0
  210. package/dist/kernel/writer-helpers.d.ts +24 -0
  211. package/dist/kernel/writer-helpers.js +42 -0
  212. package/dist/memory/decay.d.ts +31 -0
  213. package/dist/memory/decay.js +97 -0
  214. package/dist/memory/ecphory.d.ts +25 -0
  215. package/dist/memory/ecphory.js +178 -0
  216. package/dist/memory/encodingContext.d.ts +21 -0
  217. package/dist/memory/encodingContext.js +62 -0
  218. package/dist/memory/index.d.ts +23 -0
  219. package/dist/memory/index.js +23 -0
  220. package/dist/memory/memoryType.d.ts +7 -0
  221. package/dist/memory/memoryType.js +24 -0
  222. package/dist/memory/policy.d.ts +35 -0
  223. package/dist/memory/policy.js +35 -0
  224. package/dist/memory/retrieval.d.ts +21 -0
  225. package/dist/memory/retrieval.js +145 -0
  226. package/dist/testing/index.d.ts +8 -0
  227. package/dist/testing/index.js +8 -0
  228. package/dist/testing/recordSearchConformance.d.ts +43 -0
  229. package/dist/testing/recordSearchConformance.js +147 -0
  230. package/dist/viz/ascii.d.ts +7 -0
  231. package/dist/viz/ascii.js +60 -0
  232. package/dist/viz/health.d.ts +8 -0
  233. package/dist/viz/health.js +161 -0
  234. package/dist/viz/index.d.ts +10 -0
  235. package/dist/viz/index.js +10 -0
  236. package/dist/viz/matrix.d.ts +8 -0
  237. package/dist/viz/matrix.js +84 -0
  238. package/dist/viz/mermaid.d.ts +38 -0
  239. package/dist/viz/mermaid.js +706 -0
  240. package/package.json +82 -0
@@ -0,0 +1,140 @@
1
+ # EvalCase โ€” one declarative evaluation scenario (record plane).
2
+ #
3
+ # Tier B port from the internal SDK's eval extension (s-dna-eval-kit).
4
+ # Upstream, an EvalCase declared a live-agent scenario (prompt, expected
5
+ # tool calls, trajectory mode, HITL policy, LLM-judge engines) executed by
6
+ # a Temporal worker. What travels is the AUTHORING VOCABULARY โ€” a case
7
+ # declares a target, deterministic checks and tags. What does NOT travel
8
+ # (coupled to the upstream runtime, not the Kind): trajectory_mode,
9
+ # hitl_policy, expected_tool_calls, engines/required_engines, judge_rubric
10
+ # and friends โ€” all of them presuppose a live agent loop + LLM judge that
11
+ # a notation SDK does not ship.
12
+ #
13
+ # Local-first evolution: the default target is the KERNEL ITSELF โ€”
14
+ # `target: {type: prompt, agent: X}` makes the runner compose
15
+ # `build_prompt(agent=X)` and apply the checks to the composed prompt.
16
+ # Deterministic, offline, and a REAL evaluation of declarative config
17
+ # ("does my agent compose what I expect?"). LLM/live targets are an
18
+ # extension point the HOST registers (EvalTargetPort โ€” same
19
+ # declare-here/execute-in-the-host split as Automation).
20
+ #
21
+ # tenant_scope intentionally NOT declared โ€” permissive (base + per-tenant
22
+ # overlay), the Evidence/Automation precedent.
23
+ #
24
+ # PARITY-CRITICAL package data: byte-identical mirror under both runtimes'
25
+ # eval/kinds/ (tests/test_descriptor_hash_parity.py enforces).
26
+ apiVersion: github.com/ruinosus/dna/core/v1
27
+ kind: KindDefinition
28
+ metadata:
29
+ name: eval-case
30
+ spec:
31
+ target_api_version: github.com/ruinosus/dna/eval/v1
32
+ target_kind: EvalCase
33
+ alias: eval-eval-case
34
+ origin: github.com/ruinosus/dna/eval
35
+ plane: record
36
+ prompt_target: false
37
+ flatten_in_context: false
38
+ prompt_target_priority: 0
39
+ storage:
40
+ type: yaml
41
+ container: eval-cases
42
+ schema:
43
+ type: object
44
+ required:
45
+ - checks
46
+ additionalProperties: false
47
+ properties:
48
+ description:
49
+ type: string
50
+ description: What this case verifies (one line).
51
+ target:
52
+ type: object
53
+ additionalProperties: true
54
+ description: What to evaluate. Omitted โ†’ the suite's target โ†’
55
+ {type = prompt}. type=prompt composes the agent's system prompt
56
+ via build_prompt (deterministic, offline); any other type must
57
+ be registered by the host as an EvalTargetPort.
58
+ properties:
59
+ type:
60
+ type: string
61
+ description: Target type. 'prompt' is built in; custom types
62
+ are host-registered EvalTargetPorts.
63
+ agent:
64
+ type: string
65
+ description: Agent name for the prompt target (omitted โ†’
66
+ the scope's default agent).
67
+ scope:
68
+ type: string
69
+ description: Scope override for the prompt target (omitted โ†’
70
+ the scope the suite runs in).
71
+ input:
72
+ type: string
73
+ description: Free-form input for custom targets (e.g. the user
74
+ message an LLM target sends). The prompt target ignores it.
75
+ checks:
76
+ type: array
77
+ minItems: 1
78
+ description: Deterministic assertions applied to the text the
79
+ target produced. ALL checks must pass for the case to pass.
80
+ items:
81
+ type: object
82
+ required:
83
+ - type
84
+ additionalProperties: false
85
+ properties:
86
+ type:
87
+ type: string
88
+ enum:
89
+ - contains
90
+ - not_contains
91
+ - regex
92
+ - not_regex
93
+ - equals
94
+ - min_length
95
+ - max_length
96
+ value:
97
+ type:
98
+ - string
99
+ - integer
100
+ description: The needle/pattern (string checks) or the
101
+ length bound (min_length/max_length).
102
+ case_sensitive:
103
+ type: boolean
104
+ description: For contains/not_contains/equals. Default true.
105
+ expected:
106
+ type: string
107
+ description: Human-readable note of the expected outcome (shown
108
+ in reports; not machine-checked).
109
+ tags:
110
+ type: array
111
+ items:
112
+ type: string
113
+ skip:
114
+ type: boolean
115
+ description: Declared but not executed (reported as skipped).
116
+ skip_reason:
117
+ type: string
118
+ describe:
119
+ path: description
120
+ description_fallback_field: description
121
+ summary:
122
+ target_type:
123
+ path: target.type
124
+ default: ''
125
+ checks:
126
+ count_of: checks
127
+ tags: []
128
+ graph_style:
129
+ fill: '#8B5CF6'
130
+ stroke: '#7C3AED'
131
+ text_color: '#fff'
132
+ ascii_icon: ๐Ÿงช
133
+ display_label: Eval Cases
134
+ docs: An EvalCase is one declarative evaluation scenario. It names a
135
+ target (default = the kernel's own prompt composition via
136
+ build_prompt, deterministic and offline; custom targets such as a
137
+ live LLM are host-registered EvalTargetPorts) and a list of
138
+ deterministic checks (contains/regex/equals/length) applied to the
139
+ text the target produced. Grouped by an EvalSuite; executed by the
140
+ local runner (`dna eval run`), which persists an EvalRun.
@@ -0,0 +1,134 @@
1
+ # EvalRun โ€” persisted result of running an EvalSuite (record plane,
2
+ # runtime artifact; written by the local runner / `dna eval run --save`).
3
+ #
4
+ # Tier B port from the internal SDK's eval extension (s-dna-eval-kit).
5
+ # Upstream, runs were written by a Temporal eval worker and carried live
6
+ # agent telemetry. What does NOT travel (runtime-coupled, honest cut):
7
+ # agent (the run records its resolved target instead), total_tokens,
8
+ # total_cost_usd, aggregate_score/score_label, per-case tool calls,
9
+ # trajectories and metric scores. What travels: the run ledger โ€” counts,
10
+ # timestamps, target info and per-case check results.
11
+ #
12
+ # tenant_scope intentionally NOT declared โ€” permissive (base + per-tenant
13
+ # overlay), the Evidence/Automation precedent.
14
+ #
15
+ # PARITY-CRITICAL package data: byte-identical mirror under both runtimes'
16
+ # eval/kinds/ (tests/test_descriptor_hash_parity.py enforces).
17
+ apiVersion: github.com/ruinosus/dna/core/v1
18
+ kind: KindDefinition
19
+ metadata:
20
+ name: eval-run
21
+ spec:
22
+ target_api_version: github.com/ruinosus/dna/eval/v1
23
+ target_kind: EvalRun
24
+ alias: eval-eval-run
25
+ origin: github.com/ruinosus/dna/eval
26
+ plane: record
27
+ prompt_target: false
28
+ flatten_in_context: false
29
+ prompt_target_priority: 0
30
+ is_runtime_artifact: true
31
+ storage:
32
+ type: yaml
33
+ container: eval-runs
34
+ schema:
35
+ type: object
36
+ required:
37
+ - suite
38
+ - total
39
+ - passed
40
+ - failed
41
+ - results
42
+ additionalProperties: false
43
+ properties:
44
+ suite:
45
+ type: string
46
+ description: Name of the EvalSuite that was executed.
47
+ started_at:
48
+ type: string
49
+ format: date-time
50
+ finished_at:
51
+ type: string
52
+ format: date-time
53
+ target:
54
+ type: object
55
+ additionalProperties: true
56
+ description: The suite-level target the run resolved (per-case
57
+ overrides are recorded on each result row).
58
+ total:
59
+ type: integer
60
+ passed:
61
+ type: integer
62
+ failed:
63
+ type: integer
64
+ errored:
65
+ type: integer
66
+ skipped:
67
+ type: integer
68
+ results:
69
+ type: array
70
+ description: Per-case outcomes, in execution order.
71
+ items:
72
+ type: object
73
+ required:
74
+ - case
75
+ - status
76
+ additionalProperties: false
77
+ properties:
78
+ case:
79
+ type: string
80
+ status:
81
+ type: string
82
+ enum:
83
+ - passed
84
+ - failed
85
+ - error
86
+ - skipped
87
+ target_type:
88
+ type: string
89
+ description: Resolved target type this case ran against.
90
+ checks:
91
+ type: array
92
+ description: Outcome of each declared check.
93
+ items:
94
+ type: object
95
+ required:
96
+ - type
97
+ - passed
98
+ additionalProperties: false
99
+ properties:
100
+ type:
101
+ type: string
102
+ value:
103
+ type:
104
+ - string
105
+ - integer
106
+ passed:
107
+ type: boolean
108
+ detail:
109
+ type: string
110
+ description: Why the check failed (or the error).
111
+ error:
112
+ type: string
113
+ description: Error message when status=error (unknown
114
+ target type, target raised, case not found).
115
+ output_excerpt:
116
+ type: string
117
+ description: First chars of the text the target produced
118
+ (evidence for humans reading the run).
119
+ summary:
120
+ suite: ''
121
+ passed: 0
122
+ failed: 0
123
+ total: 0
124
+ graph_style:
125
+ fill: '#3B82F6'
126
+ stroke: '#2563EB'
127
+ text_color: '#fff'
128
+ ascii_icon: ๐Ÿ“Š
129
+ display_label: Eval Runs
130
+ docs: An EvalRun is the persisted result of one local execution of an
131
+ EvalSuite โ€” pass/fail/error/skip counts, timestamps, the resolved
132
+ target, and per-case results with the outcome of every declared
133
+ check. Written by `dna eval run --save`; compared against a pinned
134
+ EvalBaseline to detect regressions (`dna eval run --baseline`).
@@ -0,0 +1,87 @@
1
+ # EvalSuite โ€” groups EvalCases + run configuration (record plane).
2
+ #
3
+ # Tier B port from the internal SDK's eval extension (s-dna-eval-kit).
4
+ # Upstream, a suite bound the cases to a live agent + worker execution
5
+ # config. What does NOT travel (runtime/worker-coupled, honest cut):
6
+ # agent (required upstream โ€” here the target carries the binding),
7
+ # timeout_per_case, max_cost_usd, model_override, comparison_key,
8
+ # auto_findings, judge_language/judge_profile, parent_suite and the
9
+ # red-team (pyrit) block. What travels: the grouping (cases), a default
10
+ # target the cases inherit, and stop_on_fail.
11
+ #
12
+ # tenant_scope intentionally NOT declared โ€” permissive (base + per-tenant
13
+ # overlay), the Evidence/Automation precedent.
14
+ #
15
+ # PARITY-CRITICAL package data: byte-identical mirror under both runtimes'
16
+ # eval/kinds/ (tests/test_descriptor_hash_parity.py enforces).
17
+ apiVersion: github.com/ruinosus/dna/core/v1
18
+ kind: KindDefinition
19
+ metadata:
20
+ name: eval-suite
21
+ spec:
22
+ target_api_version: github.com/ruinosus/dna/eval/v1
23
+ target_kind: EvalSuite
24
+ alias: eval-eval-suite
25
+ origin: github.com/ruinosus/dna/eval
26
+ plane: record
27
+ prompt_target: false
28
+ flatten_in_context: false
29
+ prompt_target_priority: 0
30
+ storage:
31
+ type: yaml
32
+ container: eval-suites
33
+ dep_filters:
34
+ cases: eval-eval-case
35
+ schema:
36
+ type: object
37
+ additionalProperties: false
38
+ properties:
39
+ description:
40
+ type: string
41
+ description: What this suite evaluates (one line).
42
+ cases:
43
+ type: array
44
+ items:
45
+ type: string
46
+ description: EvalCase names to run, in order. Empty/omitted =
47
+ every EvalCase in the scope.
48
+ target:
49
+ type: object
50
+ additionalProperties: true
51
+ description: Default target for cases that do not declare their
52
+ own (same shape as EvalCase.target).
53
+ properties:
54
+ type:
55
+ type: string
56
+ agent:
57
+ type: string
58
+ scope:
59
+ type: string
60
+ stop_on_fail:
61
+ type: boolean
62
+ description: Stop executing remaining cases after the first
63
+ failed/errored case. Default false.
64
+ labels:
65
+ type: array
66
+ items:
67
+ type: string
68
+ describe:
69
+ path: description
70
+ description_fallback_field: description
71
+ summary:
72
+ cases:
73
+ count_of: cases
74
+ target_type:
75
+ path: target.type
76
+ default: ''
77
+ graph_style:
78
+ fill: '#6366F1'
79
+ stroke: '#4F46E5'
80
+ text_color: '#fff'
81
+ ascii_icon: ๐Ÿ“‹
82
+ display_label: Eval Suites
83
+ docs: An EvalSuite groups EvalCase documents and configures how the
84
+ local runner executes them โ€” the case list (empty = all cases in the
85
+ scope), a default target the cases inherit, and stop_on_fail. Run it
86
+ with `dna eval run <suite>`; each execution can be persisted as an
87
+ EvalRun and compared against a pinned EvalBaseline.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * EvalExtension โ€” evaluation authoring as data (TS twin).
3
+ *
4
+ * Registers 4 Kinds, all from descriptors (F3 โ€” record Kinds are data,
5
+ * not classes): EvalCase (eval-eval-case), EvalSuite (eval-eval-suite),
6
+ * EvalRun (eval-eval-run), EvalBaseline (eval-eval-baseline). The
7
+ * kinds/*.kind.yaml files are PARITY-CRITICAL package data โ€”
8
+ * byte-identical mirrors of the Python copies
9
+ * (tests/test_descriptor_hash_parity.py enforces).
10
+ *
11
+ * The local synchronous runner (run_suite / compare / EvalTargetPort) is
12
+ * Py-primary by design (dna/extensions/eval/runner.py): the runner is a
13
+ * host-side execution library โ€” the same declare-here/execute-in-the-host
14
+ * split as Automation, where the DECLARATION (these Kinds) is the
15
+ * cross-language contract and execution lives with the host. A TS host
16
+ * evaluates the same documents against the same schemas; a TS runner twin
17
+ * lands when a TS host needs one.
18
+ */
19
+ import type { Extension, ExtensionHost } from "../kernel/protocols.js";
20
+ export declare class EvalExtension implements Extension {
21
+ readonly name = "eval";
22
+ readonly version = "1.0.0";
23
+ register(kernel: ExtensionHost): void;
24
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * EvalExtension โ€” evaluation authoring as data (TS twin).
3
+ *
4
+ * Registers 4 Kinds, all from descriptors (F3 โ€” record Kinds are data,
5
+ * not classes): EvalCase (eval-eval-case), EvalSuite (eval-eval-suite),
6
+ * EvalRun (eval-eval-run), EvalBaseline (eval-eval-baseline). The
7
+ * kinds/*.kind.yaml files are PARITY-CRITICAL package data โ€”
8
+ * byte-identical mirrors of the Python copies
9
+ * (tests/test_descriptor_hash_parity.py enforces).
10
+ *
11
+ * The local synchronous runner (run_suite / compare / EvalTargetPort) is
12
+ * Py-primary by design (dna/extensions/eval/runner.py): the runner is a
13
+ * host-side execution library โ€” the same declare-here/execute-in-the-host
14
+ * split as Automation, where the DECLARATION (these Kinds) is the
15
+ * cross-language contract and execution lives with the host. A TS host
16
+ * evaluates the same documents against the same schemas; a TS runner twin
17
+ * lands when a TS host needs one.
18
+ */
19
+ import { loadDescriptors } from "../kernel/descriptor-loader.js";
20
+ export class EvalExtension {
21
+ name = "eval";
22
+ version = "1.0.0";
23
+ register(kernel) {
24
+ // F3: builtin record Kinds as descriptors โ€” package data through the
25
+ // same funnel as per-scope KindDefinitions (plane lint + digest
26
+ // idempotency + builtin conflict marker).
27
+ for (const raw of loadDescriptors(import.meta.url, "eval/kinds")) {
28
+ kernel.kindFromDescriptor(raw);
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,92 @@
1
+ # Evidence โ€” immutable audit event record (record plane, runtime artifact).
2
+ # Two real shapes share the schema (s-evidence-schema-reconciliation):
3
+ # provenance (kernel evidence_capture) and gaia worker events.
4
+ #
5
+ # F3 lote-3 (spec 2026-06-10-kinds-descriptor-f3): the twin EvidenceKind
6
+ # classes (Py+TS) were DELETED โ€” this descriptor is the single source.
7
+ # PARITY-CRITICAL package data: byte-identical mirror under both runtimes'
8
+ # evidence/kinds/ (tests/test_descriptor_hash_parity.py enforces).
9
+ # Equivalence frozen in tests/test_lote3_descriptor_equivalence.py
10
+ # (golden: tests/goldens/lote3/Evidence.golden.json).
11
+ #
12
+ # tenant_scope intentionally NOT declared (class never declared `scope`;
13
+ # undeclared kinds stay permissive โ€” declaring would change tenancy).
14
+ apiVersion: github.com/ruinosus/dna/core/v1
15
+ kind: KindDefinition
16
+ metadata:
17
+ name: evidence
18
+ spec:
19
+ target_api_version: github.com/ruinosus/dna/evidence/v1
20
+ target_kind: Evidence
21
+ alias: evidence-evidence
22
+ origin: github.com/ruinosus/dna/evidence
23
+ plane: record
24
+ prompt_target: false
25
+ flatten_in_context: false
26
+ prompt_target_priority: 0
27
+ is_runtime_artifact: true
28
+ storage:
29
+ type: yaml
30
+ container: evidence
31
+ schema:
32
+ type: object
33
+ required:
34
+ - event_type
35
+ additionalProperties: true
36
+ properties:
37
+ event_type:
38
+ type: string
39
+ enum:
40
+ - document_created
41
+ - document_modified
42
+ - document_deleted
43
+ - eval_run_completed
44
+ - baseline_pinned
45
+ - finding_created
46
+ - finding_status_changed
47
+ - custom
48
+ - gaia.assessment.started
49
+ - gaia.assessment.completed
50
+ - gaia.assessment.failed
51
+ - gaia.pillar.completed
52
+ - gaia.pillar.threshold_breach
53
+ - gaia.report.issued
54
+ sha256:
55
+ type: string
56
+ captured_at:
57
+ type: string
58
+ format: date-time
59
+ author:
60
+ type: string
61
+ document_ref:
62
+ type: string
63
+ snapshot:
64
+ type: object
65
+ additionalProperties: true
66
+ suite:
67
+ type: string
68
+ notes:
69
+ type: string
70
+ created_at:
71
+ type: string
72
+ format: date-time
73
+ payload:
74
+ type: object
75
+ additionalProperties: true
76
+ source_kind:
77
+ type: string
78
+ source_name:
79
+ type: string
80
+ summary:
81
+ event_type: ''
82
+ document_ref: ''
83
+ captured_at: ''
84
+ graph_style:
85
+ fill: '#059669'
86
+ stroke: '#047857'
87
+ text_color: '#fff'
88
+ ascii_icon: ๐Ÿ“œ
89
+ display_label: Evidence
90
+ docs: An Evidence document is an immutable audit event record. Captures the event
91
+ type, SHA-256 hash of the referenced content, timestamp, author, and optional
92
+ snapshot. Used by the GAIA report pipeline to provide a verifiable audit trail.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * EvidenceExtension โ€” audit trail Kinds for the GAIA pipeline.
3
+ *
4
+ * Registers 2 KindPorts:
5
+ * - Evidence (evidence-evidence) โ€” immutable audit event record
6
+ * - EvidencePolicy (evidence-policy) โ€” controls which events are auto-captured
7
+ *
8
+ * All use YAML storage with no custom reader/writer โ€” the generic
9
+ * machinery handles serialization. 1:1 parity with Python.
10
+ */
11
+ import type { Extension, ExtensionHost } from "../kernel/protocols.js";
12
+ export { shouldCapture } from "../kernel/evidence-capture.js";
13
+ export declare class EvidenceExtension implements Extension {
14
+ readonly name = "evidence";
15
+ readonly version = "1.0.0";
16
+ register(kernel: ExtensionHost): void;
17
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * EvidenceExtension โ€” audit trail Kinds for the GAIA pipeline.
3
+ *
4
+ * Registers 2 KindPorts:
5
+ * - Evidence (evidence-evidence) โ€” immutable audit event record
6
+ * - EvidencePolicy (evidence-policy) โ€” controls which events are auto-captured
7
+ *
8
+ * All use YAML storage with no custom reader/writer โ€” the generic
9
+ * machinery handles serialization. 1:1 parity with Python.
10
+ */
11
+ import { KindBase } from "../kernel/kind_base.js";
12
+ import { SD } from "../kernel/protocols.js";
13
+ import { makeEvidenceCaptureHandler } from "../kernel/evidence-capture.js";
14
+ // shouldCapture is generic policy-evaluation logic that now lives in the
15
+ // kernel (s-invert-evidence-capture-dep) so the microkernel's evidence-capture
16
+ // handler needs no extension import. Re-exported here as the extension's
17
+ // public API (index.ts + callers import it from this module).
18
+ import { loadDescriptors } from "../kernel/descriptor-loader.js";
19
+ export { shouldCapture } from "../kernel/evidence-capture.js";
20
+ const API_VERSION = "github.com/ruinosus/dna/evidence/v1";
21
+ // Evidence โ€” F3 lote-3 (spec 2026-06-10-kinds-descriptor-f3): the twin
22
+ // EvidenceKind classes (Py+TS) were DELETED โ€” synthesized from
23
+ // kinds/evidence.kind.yaml (parity-critical package data, byte-identical
24
+ // Pyโ†”TS) via the loadDescriptors loop in register(). Equivalence with the
25
+ // extinct class frozen in test_lote3_descriptor_equivalence.py (golden:
26
+ // tests/goldens/lote3/Evidence.golden.json).
27
+ // ---------------------------------------------------------------------------
28
+ // EvidencePolicy Kind
29
+ // ---------------------------------------------------------------------------
30
+ class EvidencePolicyKind extends KindBase {
31
+ apiVersion = API_VERSION;
32
+ kind = "EvidencePolicy";
33
+ alias = "evidence-policy";
34
+ origin = "github.com/ruinosus/dna/evidence";
35
+ isPromptTarget = false;
36
+ promptTargetPriority = 0;
37
+ flattenInContext = false;
38
+ storage = SD.yaml("evidence-policies");
39
+ graphStyle = { fill: "#0891B2", stroke: "#0E7490", textColor: "#fff" };
40
+ asciiIcon = "๐Ÿ“‘";
41
+ displayLabel = "Evidence Policies";
42
+ docs = "An EvidencePolicy controls which event types are automatically " +
43
+ "captured as Evidence documents. Declares the list of event types " +
44
+ "to watch, whether auto-capture is enabled, and retention period.";
45
+ dependencies() { return null; }
46
+ schema() {
47
+ return {
48
+ type: "object",
49
+ required: ["events"],
50
+ additionalProperties: true,
51
+ properties: {
52
+ events: {
53
+ type: "array",
54
+ items: { type: "string" },
55
+ },
56
+ auto_capture: { type: "boolean", default: true },
57
+ retention_days: { type: "integer", default: 365 },
58
+ },
59
+ };
60
+ }
61
+ summary(doc) {
62
+ const spec = (doc.spec ?? {});
63
+ return {
64
+ events: spec.events ?? [],
65
+ auto_capture: spec.auto_capture ?? true,
66
+ retention_days: spec.retention_days ?? 365,
67
+ };
68
+ }
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // Extension
72
+ // ---------------------------------------------------------------------------
73
+ export class EvidenceExtension {
74
+ name = "evidence";
75
+ version = "1.0.0";
76
+ register(kernel) {
77
+ kernel.kind(new EvidencePolicyKind());
78
+ // F3 lote-3: builtin record Kinds as descriptors (Evidence) โ€”
79
+ // kinds/*.kind.yaml package data through the same funnel as per-scope
80
+ // KindDefinitions (plane lint + digest idempotency + conflict marker).
81
+ for (const raw of loadDescriptors(import.meta.url, "evidence/kinds")) {
82
+ kernel.kindFromDescriptor(raw);
83
+ }
84
+ // Register the evidence auto-capture handler when the host also
85
+ // exposes the RUNTIME capabilities the handler closes over
86
+ // (instance + writeDocument โ€” the full Kernel does; a bare
87
+ // ExtensionHost slice need not). Feature-test, then narrow to the
88
+ // handler's own declared host contract.
89
+ const cap = kernel;
90
+ if (typeof cap.instance === "function" && typeof cap.writeDocument === "function") {
91
+ kernel.on("post_save", makeEvidenceCaptureHandler(cap));
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * FederationExtension โ€” Phase 14r MCP Federation (schema v2, 2026-07-07).
3
+ *
4
+ * Declares the `MCPFederation` Kind: an external MCP server whose tools
5
+ * DNA agents consume via `Agent.spec.mcp_servers` (primary,
6
+ * s-mcp-servers-on-agent) or via the DNA-as-MCP-server proxy
7
+ * (legacy Phase 14r direction). Transports: stdio | streamable_http.
8
+ * Auth carries env-var NAMES only โ€” never secret values.
9
+ *
10
+ * Schema v2 is fully backward-compatible with v1 docs: `transport`
11
+ * defaults to `stdio` and every new field is optional.
12
+ *
13
+ * 1:1 parity with python/dna/extensions/federation/__init__.py.
14
+ * The TS SDK ships schema/Kind parity only โ€” the agent runtime (and the
15
+ * MCP client) is Python-only by design (spec ยง3).
16
+ */
17
+ import type { ExtensionHost, Extension } from "../kernel/protocols.js";
18
+ export declare class FederationExtension implements Extension {
19
+ readonly name = "federation";
20
+ readonly version = "1.0.0";
21
+ register(kernel: ExtensionHost): void;
22
+ }