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,60 @@
1
+ /**
2
+ * ASCII tree rendering — standalone function operating on ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused.
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // ASCII Tree
8
+ // ---------------------------------------------------------------------------
9
+ export function asciiTree(mi) {
10
+ const tree = mi.dependencyTree();
11
+ if (Object.keys(tree).length === 0) {
12
+ return "(no dependencies)";
13
+ }
14
+ const lines = [`\u{1F4E6} ${mi.scope}`];
15
+ const agentNames = Object.keys(tree).sort();
16
+ for (let i = 0; i < agentNames.length; i++) {
17
+ const agentName = agentNames[i];
18
+ const info = tree[agentName];
19
+ const isLastAgent = i === agentNames.length - 1;
20
+ const prefix = isLastAgent ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
21
+ const childPrefix = isLastAgent ? " " : "\u2502 ";
22
+ lines.push(`${prefix}\u{1F916} ${agentName}`);
23
+ const dependsOn = (info.depends_on ?? {});
24
+ const depGroups = Object.entries(dependsOn);
25
+ for (let j = 0; j < depGroups.length; j++) {
26
+ const [depType, deps] = depGroups[j];
27
+ const isLastGroup = j === depGroups.length - 1;
28
+ const groupPrefix = isLastGroup ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
29
+ const itemPrefix = isLastGroup ? " " : "\u2502 ";
30
+ lines.push(`${childPrefix}${groupPrefix}${depType}/`);
31
+ const depItems = Object.entries(deps);
32
+ for (let k = 0; k < depItems.length; k++) {
33
+ const [depName, depInfo] = depItems[k];
34
+ const isLastDep = k === depItems.length - 1;
35
+ const depPrefix = isLastDep ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
36
+ const kind = depInfo.kind ?? "";
37
+ const found = depInfo.found ?? true;
38
+ // Use KindPort.asciiIcon + graphMeta for kind-specific labels
39
+ const depKp = mi.kindFor(kind);
40
+ const depIcon = depKp?.asciiIcon ?? "";
41
+ const depDoc = mi._one(kind, depName);
42
+ const depMeta = depDoc ? (depKp?.graphMeta?.(depDoc) ?? {}) : {};
43
+ let label;
44
+ if (depMeta.severity) {
45
+ const m = depMeta;
46
+ const severityIcon = m.severity === "error" ? "\u{1F534}" : "\u{1F7E1}";
47
+ label = `${severityIcon} ${depName} (${m.rules ?? 0} rules, ${m.severity})`;
48
+ }
49
+ else {
50
+ label = depIcon ? `${depIcon} ${depName}` : depName;
51
+ }
52
+ if (!found) {
53
+ label += " \u274C MISSING";
54
+ }
55
+ lines.push(`${childPrefix}${itemPrefix}${depPrefix}${label}`);
56
+ }
57
+ }
58
+ }
59
+ return lines.join("\n");
60
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Health report and impact analysis — standalone functions operating on ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused.
5
+ */
6
+ import type { ManifestInstance } from "../kernel/instance.js";
7
+ export declare function healthReport(mi: ManifestInstance): Record<string, unknown>;
8
+ export declare function impact(mi: ManifestInstance, kind: string, name: string): Record<string, unknown>;
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Health report and impact analysis — standalone functions operating on ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused.
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // Helpers (private access via cast)
8
+ // ---------------------------------------------------------------------------
9
+ function _kinds(mi) {
10
+ return mi._kinds;
11
+ }
12
+ function _profiles(mi) {
13
+ return mi._profiles;
14
+ }
15
+ // ---------------------------------------------------------------------------
16
+ // Health Report
17
+ // ---------------------------------------------------------------------------
18
+ export function healthReport(mi) {
19
+ const kinds = _kinds(mi);
20
+ const profiles = _profiles(mi);
21
+ const tree = mi.dependencyTree();
22
+ const comp = mi.compositionResult;
23
+ // All orchestrators (agents) — found via composition profiles
24
+ const allAgents = mi.allWhere(kp => kp.isPromptTarget && !kp.isRoot && !kp.flattenInContext);
25
+ const agentNames = new Set(allAgents.map((a) => a.name));
26
+ // --- Generic slot-based health checks via CompositionProfile ---
27
+ const slotIssues = {};
28
+ const slotCoverage = {};
29
+ const slotTotals = {};
30
+ let hasIssues = false;
31
+ for (const agent of allAgents) {
32
+ const profile = mi.profileFor(agent);
33
+ if (!profile)
34
+ continue;
35
+ for (const slot of profile.slots) {
36
+ if (!slot.healthCheck)
37
+ continue;
38
+ const deps = mi.iterDocDeps(agent);
39
+ const slotDeps = deps.find(d => d.label === slot.name);
40
+ const names = slotDeps?.names ?? [];
41
+ if (slot.healthCheck.rule === "at-least-one" && names.length === 0) {
42
+ const key = slot.healthCheck.issueKey;
43
+ (slotIssues[key] ??= []).push(agent.name);
44
+ hasIssues = true;
45
+ }
46
+ }
47
+ }
48
+ // Coverage stats per slot
49
+ for (const profile of profiles) {
50
+ for (const slot of profile.slots) {
51
+ if (!slot.healthCheck)
52
+ continue;
53
+ const issueList = slotIssues[slot.healthCheck.issueKey] ?? [];
54
+ const covered = allAgents.length - issueList.length;
55
+ slotCoverage[slot.name] = `${covered}/${allAgents.length} agents`;
56
+ // Count total docs of this slot's target kind
57
+ const targetKp = mi.kindForAlias(slot.targetAlias);
58
+ if (targetKp) {
59
+ const allOfKind = mi._all(targetKp.kind);
60
+ slotTotals[`${slot.name}_total`] = allOfKind.length;
61
+ // For kinds with graphMeta returning severity, count rules
62
+ let rulesCount = 0;
63
+ for (const d of allOfKind) {
64
+ const meta = targetKp.graphMeta?.(d) ?? targetKp.summary(d) ?? {};
65
+ const m = meta;
66
+ if (typeof m.rules === "number")
67
+ rulesCount += m.rules;
68
+ }
69
+ if (rulesCount > 0)
70
+ slotTotals[`${slot.name}_rules_total`] = rulesCount;
71
+ // has-error-severity: find agents missing error-severity docs
72
+ if (slot.healthCheck.rule === "at-least-one") {
73
+ const errorDocs = allOfKind.filter(d => {
74
+ const m = (targetKp.graphMeta?.(d) ?? targetKp.summary(d) ?? {});
75
+ return m.severity === "error";
76
+ });
77
+ if (errorDocs.length > 0) {
78
+ const agentsWithError = new Set();
79
+ for (const agent of allAgents) {
80
+ const deps = mi.iterDocDeps(agent);
81
+ const slotDeps = deps.find(dd => dd.label === slot.name);
82
+ for (const depName of slotDeps?.names ?? []) {
83
+ if (errorDocs.some(ed => ed.name === depName)) {
84
+ agentsWithError.add(agent.name);
85
+ }
86
+ }
87
+ }
88
+ const missing = [...agentNames].filter(n => !agentsWithError.has(n)).sort();
89
+ if (missing.length > 0) {
90
+ slotIssues[`agents_missing_error_${slot.name}`] = missing;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ // Referenced deps (from tree)
98
+ const referenced = new Set();
99
+ for (const info of Object.values(tree)) {
100
+ const treeInfo = info;
101
+ const dependsOn = treeInfo.depends_on;
102
+ if (!dependsOn)
103
+ continue;
104
+ for (const deps of Object.values(dependsOn)) {
105
+ for (const depName of Object.keys(deps)) {
106
+ referenced.add(depName);
107
+ }
108
+ }
109
+ }
110
+ // Find orphan documents (not referenced, not root, not prompt-target)
111
+ const orphans = [];
112
+ for (const doc of mi.documents) {
113
+ const _kp = kinds.get(`${doc.apiVersion}\0${doc.kind}`);
114
+ if (_kp?.isRoot || _kp?.isPromptTarget)
115
+ continue;
116
+ if (!referenced.has(doc.name)) {
117
+ orphans.push({ kind: doc.kind, name: doc.name });
118
+ }
119
+ }
120
+ const isHealthy = comp.missing.length === 0 && !hasIssues;
121
+ return {
122
+ status: isHealthy ? "healthy" : "warnings",
123
+ composition_valid: comp.missing.length === 0,
124
+ missing_refs: comp.missing,
125
+ agents_total: allAgents.length,
126
+ // Slot issues — each key comes from slot.healthCheck.issueKey
127
+ ...slotIssues,
128
+ // Slot totals (e.g. guardrails_total, guardrails_rules_total)
129
+ ...slotTotals,
130
+ orphan_documents: orphans,
131
+ coverage: slotCoverage,
132
+ };
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // Impact Analysis
136
+ // ---------------------------------------------------------------------------
137
+ export function impact(mi, kind, name) {
138
+ const tree = mi.dependencyTree();
139
+ const affected = [];
140
+ for (const [agentName, info] of Object.entries(tree)) {
141
+ const treeInfo = info;
142
+ const dependsOn = treeInfo.depends_on;
143
+ if (!dependsOn)
144
+ continue;
145
+ for (const [depType, deps] of Object.entries(dependsOn)) {
146
+ if (name in deps) {
147
+ affected.push({ agent: agentName, relationship: depType });
148
+ }
149
+ }
150
+ }
151
+ const doc = mi._one(kind, name);
152
+ return {
153
+ kind,
154
+ name,
155
+ description: doc ? (doc.metadata.description ?? "") : "",
156
+ found: doc !== null,
157
+ affected_agents: affected,
158
+ affected_count: affected.length,
159
+ safe_to_remove: affected.length === 0,
160
+ };
161
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Visualization module — barrel re-export.
3
+ *
4
+ * Standalone functions that operate on ManifestInstance, extracted from
5
+ * the class to keep the kernel focused on query/prompt/composition.
6
+ */
7
+ export { dependencyTreeMermaid, compositionFlowchartMermaid, c4ComponentMermaid, erDiagramMermaid, erModel, mindmapMermaid, pieChartMermaid, quadrantMermaid, timelineMermaid, sankeyMermaid, kindCatalogMermaid, exportDiagramsMd, } from "./mermaid.js";
8
+ export { healthReport, impact } from "./health.js";
9
+ export { matrix, matrixMarkdown } from "./matrix.js";
10
+ export { asciiTree } from "./ascii.js";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Visualization module — barrel re-export.
3
+ *
4
+ * Standalone functions that operate on ManifestInstance, extracted from
5
+ * the class to keep the kernel focused on query/prompt/composition.
6
+ */
7
+ export { dependencyTreeMermaid, compositionFlowchartMermaid, c4ComponentMermaid, erDiagramMermaid, erModel, mindmapMermaid, pieChartMermaid, quadrantMermaid, timelineMermaid, sankeyMermaid, kindCatalogMermaid, exportDiagramsMd, } from "./mermaid.js";
8
+ export { healthReport, impact } from "./health.js";
9
+ export { matrix, matrixMarkdown } from "./matrix.js";
10
+ export { asciiTree } from "./ascii.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Matrix views — standalone functions operating on ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused.
5
+ */
6
+ import type { ManifestInstance } from "../kernel/instance.js";
7
+ export declare function matrix(mi: ManifestInstance): Record<string, unknown>;
8
+ export declare function matrixMarkdown(mi: ManifestInstance): string;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Matrix views — standalone functions operating on ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused.
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // Matrix (structured)
8
+ // ---------------------------------------------------------------------------
9
+ export function matrix(mi) {
10
+ const tree = mi.dependencyTree();
11
+ if (Object.keys(tree).length === 0) {
12
+ return { agents: [], dependencies: {}, matrix: {} };
13
+ }
14
+ const agents = Object.keys(tree).sort();
15
+ // Collect all deps grouped by kind
16
+ const depsByKind = new Map();
17
+ for (const info of Object.values(tree)) {
18
+ const treeInfo = info;
19
+ const dependsOn = treeInfo.depends_on;
20
+ if (!dependsOn)
21
+ continue;
22
+ for (const deps of Object.values(dependsOn)) {
23
+ for (const [depName, depInfo] of Object.entries(deps)) {
24
+ const kind = depInfo.kind ?? "Unknown";
25
+ if (!depsByKind.has(kind))
26
+ depsByKind.set(kind, new Set());
27
+ depsByKind.get(kind).add(depName);
28
+ }
29
+ }
30
+ }
31
+ // Build matrix
32
+ const matrixData = {};
33
+ for (const [agentName, info] of Object.entries(tree)) {
34
+ const treeInfo = info;
35
+ const dependsOn = treeInfo.depends_on;
36
+ const row = {};
37
+ if (dependsOn) {
38
+ for (const deps of Object.values(dependsOn)) {
39
+ for (const depName of Object.keys(deps)) {
40
+ row[depName] = true;
41
+ }
42
+ }
43
+ }
44
+ matrixData[agentName] = row;
45
+ }
46
+ // Build sorted dependencies object
47
+ const dependencies = {};
48
+ const sortedKinds = [...depsByKind.keys()].sort();
49
+ for (const kind of sortedKinds) {
50
+ dependencies[kind] = [...depsByKind.get(kind)].sort();
51
+ }
52
+ return { agents, dependencies, matrix: matrixData };
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Matrix Markdown
56
+ // ---------------------------------------------------------------------------
57
+ export function matrixMarkdown(mi) {
58
+ const data = matrix(mi);
59
+ const agents = data.agents;
60
+ if (agents.length === 0) {
61
+ return "No agents with dependencies found.";
62
+ }
63
+ const dependencies = data.dependencies;
64
+ const matrixData = data.matrix;
65
+ // Flatten all dep names in kind order
66
+ const allDeps = []; // [kind, name]
67
+ for (const [kind, names] of Object.entries(dependencies)) {
68
+ for (const name of names) {
69
+ allDeps.push([kind, name]);
70
+ }
71
+ }
72
+ // Header
73
+ const depHeaders = allDeps.map(([, n]) => n);
74
+ const header = `| Agent | ${depHeaders.join(" | ")} |`;
75
+ const sep = `|-------|${allDeps.map(() => ":---:").join("|")}|`;
76
+ const rows = [];
77
+ for (const agent of agents) {
78
+ const cells = allDeps.map(([, depName]) => matrixData[agent]?.[depName] ? "\u25CF" : " ");
79
+ rows.push(`| **${agent}** | ${cells.join(" | ")} |`);
80
+ }
81
+ // Kind legend row
82
+ const kindRow = `| *Kind* | ${allDeps.map(([k]) => `*${k[0].toUpperCase()}*`).join(" | ")} |`;
83
+ return [header, sep, kindRow, ...rows].join("\n");
84
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Mermaid diagram generators — standalone functions that operate on a ManifestInstance.
3
+ *
4
+ * Extracted from ManifestInstance to keep the kernel class focused on
5
+ * query/prompt/composition. The original methods on ManifestInstance are
6
+ * preserved for backwards compat; these functions are the canonical
7
+ * implementation going forward.
8
+ */
9
+ import type { ManifestInstance } from "../kernel/instance.js";
10
+ export declare function dependencyTreeMermaid(mi: ManifestInstance): string;
11
+ export declare function compositionFlowchartMermaid(mi: ManifestInstance): string;
12
+ export declare function c4ComponentMermaid(mi: ManifestInstance): string;
13
+ export declare function erModel(mi: ManifestInstance): {
14
+ entities: {
15
+ id: string;
16
+ kind: string;
17
+ name: string;
18
+ attrs: {
19
+ key: string;
20
+ type: string;
21
+ value: string;
22
+ }[];
23
+ }[];
24
+ relationships: {
25
+ sourceId: string;
26
+ targetId: string;
27
+ label: string;
28
+ isMany: boolean;
29
+ }[];
30
+ };
31
+ export declare function erDiagramMermaid(mi: ManifestInstance): string;
32
+ export declare function mindmapMermaid(mi: ManifestInstance): string;
33
+ export declare function pieChartMermaid(mi: ManifestInstance): string;
34
+ export declare function quadrantMermaid(mi: ManifestInstance): string;
35
+ export declare function timelineMermaid(mi: ManifestInstance): string;
36
+ export declare function sankeyMermaid(mi: ManifestInstance): string;
37
+ export declare function kindCatalogMermaid(mi: ManifestInstance): string;
38
+ export declare function exportDiagramsMd(mi: ManifestInstance, path?: string): Record<string, string>;