engineering-intelligence 0.2.0 → 0.3.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 (40) hide show
  1. package/README.md +4 -0
  2. package/dist/cli/index.js +24 -3
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/templates.d.ts +1 -1
  5. package/dist/templates.js +2 -2
  6. package/dist/templates.js.map +1 -1
  7. package/dist/visualizer/index.d.ts +2 -0
  8. package/dist/visualizer/index.d.ts.map +1 -0
  9. package/dist/visualizer/index.js +599 -0
  10. package/dist/visualizer/index.js.map +1 -0
  11. package/package.json +2 -2
  12. package/templates/canonical/agents/change-agent.md +58 -1
  13. package/templates/canonical/agents/engineering-orchestrator.md +69 -3
  14. package/templates/canonical/agents/knowledge-agent.md +59 -2
  15. package/templates/canonical/agents/quality-agent.md +59 -2
  16. package/templates/canonical/rules/engineering-intelligence.md +42 -13
  17. package/templates/canonical/skills/architecture-review-engine/SKILL.md +112 -3
  18. package/templates/canonical/skills/change-detection-engine/SKILL.md +82 -7
  19. package/templates/canonical/skills/change-history-engine/SKILL.md +125 -5
  20. package/templates/canonical/skills/context-sync-engine/SKILL.md +116 -9
  21. package/templates/canonical/skills/deep-project-knowledge-extractor/SKILL.md +171 -5
  22. package/templates/canonical/skills/engineering-change-review/SKILL.md +145 -9
  23. package/templates/canonical/skills/engineering-intelligence-skill/SKILL.md +168 -0
  24. package/templates/canonical/skills/graph-engine/SKILL.md +134 -14
  25. package/templates/canonical/skills/impact-analysis-engine/SKILL.md +125 -11
  26. package/templates/canonical/skills/incremental-sync-engine/SKILL.md +75 -10
  27. package/templates/canonical/skills/initialize-intelligence-skill/SKILL.md +130 -0
  28. package/templates/canonical/skills/knowledge-base-validator/SKILL.md +92 -7
  29. package/templates/canonical/skills/knowledge-sync-engine/SKILL.md +77 -8
  30. package/templates/canonical/skills/memory-sync-engine/SKILL.md +70 -8
  31. package/templates/canonical/skills/refactoring-planner/SKILL.md +143 -2
  32. package/templates/canonical/skills/testing-intelligence-engine/SKILL.md +119 -3
  33. package/templates/canonical/workflows/analyze-impact.md +25 -3
  34. package/templates/canonical/workflows/engineering-intelligence.md +20 -3
  35. package/templates/canonical/workflows/initialize-engineering-intelligence.md +30 -3
  36. package/templates/canonical/workflows/map-architecture.md +17 -6
  37. package/templates/canonical/workflows/review-engineering-change.md +26 -2
  38. package/templates/canonical/workflows/sync-engineering-intelligence.md +20 -2
  39. package/templates/canonical/skills/engineering-intelligence/SKILL.md +0 -21
  40. package/templates/canonical/skills/initialize-engineering-intelligence/SKILL.md +0 -32
@@ -0,0 +1,599 @@
1
+ import { SKILL_NAMES, AGENT_NAMES, WORKFLOW_NAMES } from "../templates.js";
2
+ const SKILL_CATALOG = {
3
+ "initialize-intelligence-skill": {
4
+ name: "Initialize Intelligence",
5
+ category: "initialization",
6
+ description: "Creates evidence-backed project intelligence baseline",
7
+ usedBy: ["engineering-intelligence-skill"],
8
+ dependsOn: ["deep-project-knowledge-extractor", "knowledge-base-validator", "graph-engine", "change-history-engine"],
9
+ },
10
+ "engineering-intelligence-skill": {
11
+ name: "Engineering Intelligence",
12
+ category: "implementation",
13
+ description: "Executes engineering changes with full lifecycle",
14
+ usedBy: [],
15
+ dependsOn: ["initialize-intelligence-skill", "change-detection-engine", "impact-analysis-engine", "testing-intelligence-engine", "incremental-sync-engine", "change-history-engine"],
16
+ },
17
+ "deep-project-knowledge-extractor": {
18
+ name: "Knowledge Extractor",
19
+ category: "initialization",
20
+ description: "Produces evidence-based project documentation",
21
+ usedBy: ["initialize-intelligence-skill"],
22
+ dependsOn: [],
23
+ },
24
+ "knowledge-base-validator": {
25
+ name: "Knowledge Validator",
26
+ category: "review",
27
+ description: "Validates docs against source evidence",
28
+ usedBy: ["initialize-intelligence-skill", "incremental-sync-engine"],
29
+ dependsOn: ["deep-project-knowledge-extractor"],
30
+ },
31
+ "graph-engine": {
32
+ name: "Graph Engine",
33
+ category: "analysis",
34
+ description: "Builds evidence-backed architecture graphs",
35
+ usedBy: ["initialize-intelligence-skill", "impact-analysis-engine", "incremental-sync-engine"],
36
+ dependsOn: [],
37
+ },
38
+ "impact-analysis-engine": {
39
+ name: "Impact Analysis",
40
+ category: "analysis",
41
+ description: "Determines direct and indirect change impact",
42
+ usedBy: ["engineering-intelligence-skill", "incremental-sync-engine"],
43
+ dependsOn: ["change-detection-engine", "graph-engine"],
44
+ },
45
+ "change-detection-engine": {
46
+ name: "Change Detection",
47
+ category: "analysis",
48
+ description: "Resolves change scope from diffs or proposals",
49
+ usedBy: ["impact-analysis-engine", "incremental-sync-engine", "engineering-change-review"],
50
+ dependsOn: [],
51
+ },
52
+ "incremental-sync-engine": {
53
+ name: "Incremental Sync",
54
+ category: "sync",
55
+ description: "Synchronizes only affected intelligence artifacts",
56
+ usedBy: ["engineering-intelligence-skill"],
57
+ dependsOn: ["change-detection-engine", "impact-analysis-engine", "graph-engine", "knowledge-sync-engine", "memory-sync-engine", "context-sync-engine"],
58
+ },
59
+ "testing-intelligence-engine": {
60
+ name: "Testing Intelligence",
61
+ category: "implementation",
62
+ description: "Determines risk-based testing needs",
63
+ usedBy: ["engineering-intelligence-skill"],
64
+ dependsOn: ["impact-analysis-engine"],
65
+ },
66
+ "knowledge-sync-engine": {
67
+ name: "Knowledge Sync",
68
+ category: "sync",
69
+ description: "Updates knowledge-base documents",
70
+ usedBy: ["incremental-sync-engine"],
71
+ dependsOn: ["impact-analysis-engine"],
72
+ },
73
+ "memory-sync-engine": {
74
+ name: "Memory Sync",
75
+ category: "sync",
76
+ description: "Maintains durable engineering memory",
77
+ usedBy: ["incremental-sync-engine"],
78
+ dependsOn: ["impact-analysis-engine"],
79
+ },
80
+ "context-sync-engine": {
81
+ name: "Context Sync",
82
+ category: "sync",
83
+ description: "Maintains AI navigation context maps",
84
+ usedBy: ["incremental-sync-engine"],
85
+ dependsOn: ["impact-analysis-engine", "graph-engine"],
86
+ },
87
+ "change-history-engine": {
88
+ name: "Change History",
89
+ category: "implementation",
90
+ description: "Records validated engineering work",
91
+ usedBy: ["initialize-intelligence-skill", "engineering-intelligence-skill"],
92
+ dependsOn: ["impact-analysis-engine"],
93
+ },
94
+ "architecture-review-engine": {
95
+ name: "Architecture Review",
96
+ category: "review",
97
+ description: "Reviews architecture quality and health",
98
+ usedBy: ["refactoring-planner"],
99
+ dependsOn: ["graph-engine"],
100
+ },
101
+ "refactoring-planner": {
102
+ name: "Refactoring Planner",
103
+ category: "planning",
104
+ description: "Plans safe, incremental refactoring",
105
+ usedBy: ["engineering-intelligence-skill"],
106
+ dependsOn: ["graph-engine", "architecture-review-engine"],
107
+ },
108
+ "engineering-change-review": {
109
+ name: "Change Review",
110
+ category: "review",
111
+ description: "Reviews changes for quality before completion",
112
+ usedBy: ["engineering-intelligence-skill"],
113
+ dependsOn: ["change-detection-engine"],
114
+ },
115
+ };
116
+ const CATEGORY_COLORS = {
117
+ initialization: "#6366f1",
118
+ implementation: "#22c55e",
119
+ analysis: "#f59e0b",
120
+ sync: "#06b6d4",
121
+ review: "#ef4444",
122
+ planning: "#a855f7",
123
+ };
124
+ const CATEGORY_LABELS = {
125
+ initialization: "Initialization",
126
+ implementation: "Implementation",
127
+ analysis: "Analysis",
128
+ sync: "Synchronization",
129
+ review: "Review & Validation",
130
+ planning: "Planning",
131
+ };
132
+ const WORKFLOW_CATALOG = [
133
+ {
134
+ name: "initialize-engineering-intelligence",
135
+ type: "read-write",
136
+ description: "Initialize project intelligence baseline",
137
+ steps: [
138
+ { name: "Discover", skill: "deep-project-knowledge-extractor" },
139
+ { name: "Extract", skill: "deep-project-knowledge-extractor" },
140
+ { name: "Validate", skill: "knowledge-base-validator" },
141
+ { name: "Build Graphs", skill: "graph-engine" },
142
+ { name: "Record", skill: "change-history-engine" },
143
+ ],
144
+ },
145
+ {
146
+ name: "engineering-intelligence",
147
+ type: "read-write",
148
+ description: "Full implementation lifecycle",
149
+ steps: [
150
+ { name: "Detect Change", skill: "change-detection-engine" },
151
+ { name: "Analyze Impact", skill: "impact-analysis-engine" },
152
+ { name: "Implement", skill: "engineering-intelligence-skill" },
153
+ { name: "Test", skill: "testing-intelligence-engine" },
154
+ { name: "Sync", skill: "incremental-sync-engine" },
155
+ { name: "Record", skill: "change-history-engine" },
156
+ ],
157
+ },
158
+ {
159
+ name: "map-architecture",
160
+ type: "read-only",
161
+ description: "Build architecture graphs",
162
+ steps: [{ name: "Build Graphs", skill: "graph-engine" }],
163
+ },
164
+ {
165
+ name: "analyze-impact",
166
+ type: "read-only",
167
+ description: "Write impact report",
168
+ steps: [
169
+ { name: "Detect Change", skill: "change-detection-engine" },
170
+ { name: "Analyze Impact", skill: "impact-analysis-engine" },
171
+ ],
172
+ },
173
+ {
174
+ name: "sync-engineering-intelligence",
175
+ type: "read-only",
176
+ description: "Sync affected intelligence",
177
+ steps: [
178
+ { name: "Detect Change", skill: "change-detection-engine" },
179
+ { name: "Analyze Impact", skill: "impact-analysis-engine" },
180
+ { name: "Sync", skill: "incremental-sync-engine" },
181
+ ],
182
+ },
183
+ {
184
+ name: "review-engineering-change",
185
+ type: "read-only",
186
+ description: "Review changes and write findings",
187
+ steps: [
188
+ { name: "Detect Change", skill: "change-detection-engine" },
189
+ { name: "Review", skill: "engineering-change-review" },
190
+ ],
191
+ },
192
+ ];
193
+ export function generateDashboardHTML() {
194
+ const skillCards = Object.entries(SKILL_CATALOG)
195
+ .map(([id, info]) => {
196
+ const color = CATEGORY_COLORS[info.category] ?? "#888";
197
+ const deps = info.dependsOn.length > 0
198
+ ? info.dependsOn.map((d) => `<span class="dep-tag">${SKILL_CATALOG[d]?.name ?? d}</span>`).join("")
199
+ : '<span class="dep-none">None</span>';
200
+ const consumers = info.usedBy.length > 0
201
+ ? info.usedBy.map((u) => `<span class="dep-tag">${SKILL_CATALOG[u]?.name ?? u}</span>`).join("")
202
+ : '<span class="dep-none">Standalone</span>';
203
+ return `<div class="skill-card" data-category="${info.category}">
204
+ <div class="skill-header">
205
+ <span class="skill-badge" style="background:${color}">${CATEGORY_LABELS[info.category]}</span>
206
+ <h3>${info.name}</h3>
207
+ </div>
208
+ <p class="skill-desc">${info.description}</p>
209
+ <div class="skill-id"><code>${id}</code></div>
210
+ <div class="skill-deps">
211
+ <div class="dep-row"><span class="dep-label">Depends on:</span>${deps}</div>
212
+ <div class="dep-row"><span class="dep-label">Used by:</span>${consumers}</div>
213
+ </div>
214
+ </div>`;
215
+ })
216
+ .join("\n");
217
+ const workflowCards = WORKFLOW_CATALOG.map((wf) => {
218
+ const steps = wf.steps
219
+ .map((step, i) => {
220
+ const color = CATEGORY_COLORS[SKILL_CATALOG[step.skill]?.category ?? "analysis"] ?? "#888";
221
+ return `<div class="wf-step">
222
+ <div class="step-num">${i + 1}</div>
223
+ <div class="step-body">
224
+ <div class="step-name">${step.name}</div>
225
+ <div class="step-skill" style="color:${color}">${SKILL_CATALOG[step.skill]?.name ?? step.skill}</div>
226
+ </div>
227
+ </div>`;
228
+ })
229
+ .join('<div class="step-arrow">→</div>');
230
+ const typeBadge = wf.type === "read-only"
231
+ ? '<span class="wf-badge wf-readonly">Read-Only</span>'
232
+ : '<span class="wf-badge wf-readwrite">Read-Write</span>';
233
+ return `<div class="wf-card">
234
+ <div class="wf-header">
235
+ ${typeBadge}
236
+ <h3>${wf.name}</h3>
237
+ <p>${wf.description}</p>
238
+ </div>
239
+ <div class="wf-pipeline">${steps}</div>
240
+ </div>`;
241
+ }).join("\n");
242
+ const agentCards = [
243
+ { name: "Engineering Orchestrator", role: "Classifies requests, routes work, coordinates agents", skills: "All skills", color: "#6366f1" },
244
+ { name: "Change Agent", role: "Implements code changes, adds tests, collects evidence", skills: "engineering-intelligence-skill, testing-intelligence-engine", color: "#22c55e" },
245
+ { name: "Quality Agent", role: "Validates correctness, runs tests, reviews architecture", skills: "engineering-change-review, testing-intelligence-engine", color: "#ef4444" },
246
+ { name: "Knowledge Agent", role: "Maintains all intelligence artifacts", skills: "All sync engines, graph-engine, change-history-engine", color: "#06b6d4" },
247
+ ].map((agent) => `<div class="agent-card">
248
+ <div class="agent-icon" style="background:${agent.color}">${agent.name.charAt(0)}</div>
249
+ <div class="agent-body">
250
+ <h3>${agent.name}</h3>
251
+ <p>${agent.role}</p>
252
+ <div class="agent-skills"><strong>Skills:</strong> ${agent.skills}</div>
253
+ </div>
254
+ </div>`).join("\n");
255
+ const artifactTree = `
256
+ <div class="tree">
257
+ <div class="tree-node root">knowledge-base/<span class="tree-count">16 documents</span></div>
258
+ <div class="tree-node root">.engineering-intelligence/
259
+ <div class="tree-node">memory/<span class="tree-count">5 documents</span></div>
260
+ <div class="tree-node">context/<span class="tree-count">6 maps</span></div>
261
+ <div class="tree-node">events/<span class="tree-count">5 guides</span></div>
262
+ <div class="tree-node">graph/<span class="tree-count">4 JSON + 1 map</span></div>
263
+ <div class="tree-node">reports/<span class="tree-count">IMP-*/REV-* reports</span></div>
264
+ </div>
265
+ <div class="tree-node root">.changes/<span class="tree-count">CHG-* records</span></div>
266
+ </div>`;
267
+ const categoryFilters = Object.entries(CATEGORY_LABELS)
268
+ .map(([id, label]) => `<button class="filter-btn active" data-filter="${id}" style="--btn-color:${CATEGORY_COLORS[id]}">${label}</button>`)
269
+ .join("\n");
270
+ return `<!DOCTYPE html>
271
+ <html lang="en">
272
+ <head>
273
+ <meta charset="UTF-8">
274
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
275
+ <title>Engineering Intelligence — Dashboard</title>
276
+ <style>
277
+ :root {
278
+ --bg: #0a0a0f;
279
+ --surface: #12121a;
280
+ --surface-hover: #1a1a26;
281
+ --border: #2a2a3a;
282
+ --text: #e4e4ef;
283
+ --text-dim: #8888a0;
284
+ --accent: #6366f1;
285
+ --radius: 12px;
286
+ --glass: rgba(18, 18, 26, 0.8);
287
+ }
288
+ * { margin:0; padding:0; box-sizing:border-box; }
289
+ body {
290
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
291
+ background: var(--bg);
292
+ color: var(--text);
293
+ line-height: 1.6;
294
+ min-height: 100vh;
295
+ }
296
+ .container { max-width: 1400px; margin: 0 auto; padding: 2rem; }
297
+
298
+ /* Header */
299
+ .header {
300
+ text-align: center;
301
+ padding: 3rem 0 2rem;
302
+ border-bottom: 1px solid var(--border);
303
+ margin-bottom: 2rem;
304
+ }
305
+ .header h1 {
306
+ font-size: 2.5rem;
307
+ font-weight: 800;
308
+ background: linear-gradient(135deg, #6366f1, #a855f7, #06b6d4);
309
+ -webkit-background-clip: text;
310
+ -webkit-text-fill-color: transparent;
311
+ background-clip: text;
312
+ margin-bottom: 0.5rem;
313
+ }
314
+ .header p { color: var(--text-dim); font-size: 1.1rem; }
315
+ .header .stats {
316
+ display: flex;
317
+ justify-content: center;
318
+ gap: 2rem;
319
+ margin-top: 1.5rem;
320
+ }
321
+ .stat {
322
+ background: var(--surface);
323
+ border: 1px solid var(--border);
324
+ border-radius: var(--radius);
325
+ padding: 1rem 1.5rem;
326
+ text-align: center;
327
+ }
328
+ .stat-num { font-size: 2rem; font-weight: 700; color: var(--accent); }
329
+ .stat-label { font-size: 0.85rem; color: var(--text-dim); }
330
+
331
+ /* Tabs */
332
+ .tabs {
333
+ display: flex;
334
+ gap: 0.5rem;
335
+ margin-bottom: 2rem;
336
+ border-bottom: 1px solid var(--border);
337
+ padding-bottom: 0;
338
+ }
339
+ .tab {
340
+ padding: 0.75rem 1.5rem;
341
+ background: transparent;
342
+ border: none;
343
+ color: var(--text-dim);
344
+ cursor: pointer;
345
+ font-size: 1rem;
346
+ border-bottom: 2px solid transparent;
347
+ transition: all 0.2s;
348
+ }
349
+ .tab:hover { color: var(--text); }
350
+ .tab.active { color: var(--accent); border-bottom-color: var(--accent); }
351
+ .tab-content { display: none; }
352
+ .tab-content.active { display: block; }
353
+
354
+ /* Filter buttons */
355
+ .filters { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; flex-wrap: wrap; }
356
+ .filter-btn {
357
+ padding: 0.4rem 1rem;
358
+ border-radius: 20px;
359
+ border: 1px solid var(--btn-color);
360
+ background: transparent;
361
+ color: var(--btn-color);
362
+ cursor: pointer;
363
+ font-size: 0.85rem;
364
+ transition: all 0.2s;
365
+ }
366
+ .filter-btn.active { background: var(--btn-color); color: white; }
367
+ .filter-btn:hover { opacity: 0.8; }
368
+
369
+ /* Skill cards */
370
+ .skill-grid {
371
+ display: grid;
372
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
373
+ gap: 1rem;
374
+ }
375
+ .skill-card {
376
+ background: var(--surface);
377
+ border: 1px solid var(--border);
378
+ border-radius: var(--radius);
379
+ padding: 1.25rem;
380
+ transition: all 0.2s;
381
+ }
382
+ .skill-card:hover { background: var(--surface-hover); border-color: var(--accent); transform: translateY(-2px); }
383
+ .skill-card.hidden { display: none; }
384
+ .skill-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.5rem; }
385
+ .skill-badge {
386
+ padding: 0.2rem 0.6rem;
387
+ border-radius: 6px;
388
+ font-size: 0.7rem;
389
+ font-weight: 600;
390
+ color: white;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ white-space: nowrap;
394
+ }
395
+ .skill-header h3 { font-size: 1.1rem; }
396
+ .skill-desc { color: var(--text-dim); font-size: 0.9rem; margin-bottom: 0.75rem; }
397
+ .skill-id { margin-bottom: 0.75rem; }
398
+ .skill-id code { background: var(--bg); padding: 0.2rem 0.5rem; border-radius: 4px; font-size: 0.8rem; color: var(--accent); }
399
+ .skill-deps { font-size: 0.85rem; }
400
+ .dep-row { margin-bottom: 0.4rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem; }
401
+ .dep-label { color: var(--text-dim); font-weight: 500; margin-right: 0.3rem; }
402
+ .dep-tag { background: var(--bg); padding: 0.15rem 0.5rem; border-radius: 4px; font-size: 0.75rem; }
403
+ .dep-none { color: var(--text-dim); font-size: 0.75rem; font-style: italic; }
404
+
405
+ /* Workflow cards */
406
+ .wf-grid { display: flex; flex-direction: column; gap: 1.5rem; }
407
+ .wf-card {
408
+ background: var(--surface);
409
+ border: 1px solid var(--border);
410
+ border-radius: var(--radius);
411
+ padding: 1.5rem;
412
+ transition: border-color 0.2s;
413
+ }
414
+ .wf-card:hover { border-color: var(--accent); }
415
+ .wf-header { margin-bottom: 1rem; }
416
+ .wf-header h3 { font-size: 1.1rem; margin-bottom: 0.25rem; }
417
+ .wf-header p { color: var(--text-dim); font-size: 0.9rem; }
418
+ .wf-badge {
419
+ display: inline-block;
420
+ padding: 0.2rem 0.6rem;
421
+ border-radius: 6px;
422
+ font-size: 0.7rem;
423
+ font-weight: 600;
424
+ text-transform: uppercase;
425
+ margin-bottom: 0.5rem;
426
+ }
427
+ .wf-readonly { background: #1e3a5f; color: #60a5fa; }
428
+ .wf-readwrite { background: #1a3d2a; color: #4ade80; }
429
+ .wf-pipeline {
430
+ display: flex;
431
+ align-items: center;
432
+ gap: 0.5rem;
433
+ overflow-x: auto;
434
+ padding: 0.5rem 0;
435
+ }
436
+ .wf-step {
437
+ display: flex;
438
+ align-items: center;
439
+ gap: 0.5rem;
440
+ background: var(--bg);
441
+ padding: 0.75rem 1rem;
442
+ border-radius: 8px;
443
+ min-width: fit-content;
444
+ }
445
+ .step-num {
446
+ width: 24px;
447
+ height: 24px;
448
+ border-radius: 50%;
449
+ background: var(--accent);
450
+ color: white;
451
+ display: flex;
452
+ align-items: center;
453
+ justify-content: center;
454
+ font-size: 0.75rem;
455
+ font-weight: 700;
456
+ flex-shrink: 0;
457
+ }
458
+ .step-name { font-size: 0.85rem; font-weight: 600; }
459
+ .step-skill { font-size: 0.75rem; }
460
+ .step-arrow { color: var(--text-dim); font-size: 1.2rem; flex-shrink: 0; }
461
+
462
+ /* Agent cards */
463
+ .agent-grid {
464
+ display: grid;
465
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
466
+ gap: 1rem;
467
+ }
468
+ .agent-card {
469
+ background: var(--surface);
470
+ border: 1px solid var(--border);
471
+ border-radius: var(--radius);
472
+ padding: 1.25rem;
473
+ display: flex;
474
+ gap: 1rem;
475
+ transition: all 0.2s;
476
+ }
477
+ .agent-card:hover { border-color: var(--accent); transform: translateY(-2px); }
478
+ .agent-icon {
479
+ width: 48px;
480
+ height: 48px;
481
+ border-radius: 12px;
482
+ display: flex;
483
+ align-items: center;
484
+ justify-content: center;
485
+ font-size: 1.4rem;
486
+ font-weight: 700;
487
+ color: white;
488
+ flex-shrink: 0;
489
+ }
490
+ .agent-body h3 { font-size: 1rem; margin-bottom: 0.25rem; }
491
+ .agent-body p { color: var(--text-dim); font-size: 0.85rem; margin-bottom: 0.5rem; }
492
+ .agent-skills { font-size: 0.8rem; color: var(--text-dim); }
493
+
494
+ /* Artifact tree */
495
+ .tree { padding: 1rem; }
496
+ .tree-node {
497
+ padding: 0.5rem 0 0.5rem 1.5rem;
498
+ border-left: 2px solid var(--border);
499
+ position: relative;
500
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
501
+ font-size: 0.9rem;
502
+ }
503
+ .tree-node::before {
504
+ content: '';
505
+ position: absolute;
506
+ left: -2px;
507
+ top: 50%;
508
+ width: 12px;
509
+ height: 2px;
510
+ background: var(--border);
511
+ }
512
+ .tree-node.root {
513
+ border-left: none;
514
+ padding-left: 0;
515
+ font-weight: 600;
516
+ color: var(--accent);
517
+ margin-top: 0.75rem;
518
+ }
519
+ .tree-node.root::before { display: none; }
520
+ .tree-count {
521
+ color: var(--text-dim);
522
+ font-weight: 400;
523
+ font-size: 0.8rem;
524
+ margin-left: 0.5rem;
525
+ }
526
+
527
+ /* Responsive */
528
+ @media (max-width: 768px) {
529
+ .header h1 { font-size: 1.8rem; }
530
+ .header .stats { flex-wrap: wrap; }
531
+ .skill-grid { grid-template-columns: 1fr; }
532
+ .agent-grid { grid-template-columns: 1fr; }
533
+ .wf-pipeline { flex-wrap: wrap; }
534
+ }
535
+ </style>
536
+ </head>
537
+ <body>
538
+ <div class="container">
539
+ <div class="header">
540
+ <h1>Engineering Intelligence OS</h1>
541
+ <p>Graph-backed engineering intelligence toolkit</p>
542
+ <div class="stats">
543
+ <div class="stat"><div class="stat-num">${SKILL_NAMES.length}</div><div class="stat-label">Skills</div></div>
544
+ <div class="stat"><div class="stat-num">${AGENT_NAMES.length}</div><div class="stat-label">Agents</div></div>
545
+ <div class="stat"><div class="stat-num">${WORKFLOW_NAMES.length}</div><div class="stat-label">Workflows</div></div>
546
+ <div class="stat"><div class="stat-num">37+</div><div class="stat-label">Artifacts</div></div>
547
+ </div>
548
+ </div>
549
+
550
+ <div class="tabs">
551
+ <button class="tab active" data-tab="skills">Skills</button>
552
+ <button class="tab" data-tab="workflows">Workflows</button>
553
+ <button class="tab" data-tab="agents">Agents</button>
554
+ <button class="tab" data-tab="artifacts">Artifacts</button>
555
+ </div>
556
+
557
+ <div class="tab-content active" id="skills">
558
+ <div class="filters">${categoryFilters}</div>
559
+ <div class="skill-grid">${skillCards}</div>
560
+ </div>
561
+
562
+ <div class="tab-content" id="workflows">
563
+ <div class="wf-grid">${workflowCards}</div>
564
+ </div>
565
+
566
+ <div class="tab-content" id="agents">
567
+ <div class="agent-grid">${agentCards}</div>
568
+ </div>
569
+
570
+ <div class="tab-content" id="artifacts">
571
+ <h2 style="margin-bottom:1rem;">Generated Artifact Structure</h2>
572
+ <p style="color:var(--text-dim);margin-bottom:1rem;">These artifacts are generated and maintained by the AI IDE agent after installation.</p>
573
+ ${artifactTree}
574
+ </div>
575
+ </div>
576
+
577
+ <script>
578
+ document.querySelectorAll('.tab').forEach(tab => {
579
+ tab.addEventListener('click', () => {
580
+ document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
581
+ document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
582
+ tab.classList.add('active');
583
+ document.getElementById(tab.dataset.tab).classList.add('active');
584
+ });
585
+ });
586
+ document.querySelectorAll('.filter-btn').forEach(btn => {
587
+ btn.addEventListener('click', () => {
588
+ btn.classList.toggle('active');
589
+ const active = [...document.querySelectorAll('.filter-btn.active')].map(b => b.dataset.filter);
590
+ document.querySelectorAll('.skill-card').forEach(card => {
591
+ card.classList.toggle('hidden', !active.includes(card.dataset.category));
592
+ });
593
+ });
594
+ });
595
+ </script>
596
+ </body>
597
+ </html>`;
598
+ }
599
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visualizer/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "engineering-intelligence",
3
- "version": "0.2.0",
4
- "description": "Install graph-backed engineering intelligence skills, agents, and workflows for AI coding IDEs.",
3
+ "version": "0.3.0",
4
+ "description": "Install and visualize graph-backed engineering intelligence skills, agents, and workflows for AI coding IDEs.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "engineering-intelligence": "./dist/cli/index.js"
@@ -5,4 +5,61 @@ description: Implements scoped engineering changes after impact analysis and pro
5
5
 
6
6
  # Change Agent
7
7
 
8
- Read relevant intelligence and graph artifacts, consume the persisted impact report, edit only the necessary code, and add appropriate tests. Return concrete changed areas and validation evidence for quality, graph synchronization, and knowledge responsibilities.
8
+ Responsible for the implementation phase of engineering work. Receives a validated impact report and produces code changes with evidence for downstream quality and knowledge agents.
9
+
10
+ ## Responsibilities
11
+
12
+ 1. **Read context** — Consume the impact report, relevant intelligence, and graph artifacts
13
+ 2. **Implement changes** — Edit only the files necessary for the request
14
+ 3. **Add tests** — Write tests proportional to risk level
15
+ 4. **Collect evidence** — Document exactly what changed, what was tested, and what needs attention
16
+
17
+ ## Implementation Checklist
18
+
19
+ Before writing code:
20
+ - [ ] Impact report exists and has been read
21
+ - [ ] Relevant knowledge-base docs reviewed
22
+ - [ ] Architecture decisions and coding patterns from memory consulted
23
+ - [ ] Dangerous areas near the change identified
24
+
25
+ During implementation:
26
+ - [ ] Only necessary files are modified
27
+ - [ ] Existing patterns and conventions are followed
28
+ - [ ] Error handling is appropriate
29
+ - [ ] New code is at the correct abstraction level
30
+
31
+ After implementation:
32
+ - [ ] Tests added for new/changed behavior
33
+ - [ ] Tests executed and results recorded
34
+ - [ ] List of changed files and areas prepared
35
+
36
+ ## Evidence Collection
37
+
38
+ Prepare this handoff for the Quality Agent and Knowledge Agent:
39
+
40
+ ```markdown
41
+ ## Change Evidence
42
+
43
+ ### Files Changed
44
+ | File | Action | Description |
45
+ |---|---|---|
46
+
47
+ ### Tests
48
+ | Test | Result | Coverage |
49
+ |---|---|---|
50
+
51
+ ### Areas Requiring Attention
52
+ - <fragile changes, untested paths, uncertainty>
53
+
54
+ ### Validation Commands Run
55
+ | Command | Result |
56
+ |---|---|
57
+ ```
58
+
59
+ ## Rules
60
+
61
+ - Never implement without an impact report
62
+ - Follow existing patterns from `.engineering-intelligence/memory/coding-patterns.md`
63
+ - Test proportionally — more tests for higher risk
64
+ - Record honest results — failures are valuable information
65
+ - Return concrete change evidence, not vague summaries