engineering-intelligence 0.2.0 → 0.4.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 (44) hide show
  1. package/README.md +5 -1
  2. package/dist/adapters/index.js +3 -3
  3. package/dist/adapters/index.js.map +1 -1
  4. package/dist/cli/index.js +24 -3
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/templates.d.ts +1 -1
  7. package/dist/templates.js +2 -2
  8. package/dist/templates.js.map +1 -1
  9. package/dist/validation/index.js +1 -1
  10. package/dist/validation/index.js.map +1 -1
  11. package/dist/visualizer/index.d.ts +2 -0
  12. package/dist/visualizer/index.d.ts.map +1 -0
  13. package/dist/visualizer/index.js +599 -0
  14. package/dist/visualizer/index.js.map +1 -0
  15. package/package.json +3 -3
  16. package/templates/canonical/agents/change-agent.md +58 -1
  17. package/templates/canonical/agents/engineering-orchestrator.md +69 -3
  18. package/templates/canonical/agents/knowledge-agent.md +59 -2
  19. package/templates/canonical/agents/quality-agent.md +59 -2
  20. package/templates/canonical/rules/engineering-intelligence.md +42 -13
  21. package/templates/canonical/skills/architecture-review-engine/SKILL.md +112 -3
  22. package/templates/canonical/skills/change-detection-engine/SKILL.md +82 -7
  23. package/templates/canonical/skills/change-history-engine/SKILL.md +125 -5
  24. package/templates/canonical/skills/context-sync-engine/SKILL.md +116 -9
  25. package/templates/canonical/skills/deep-project-knowledge-extractor/SKILL.md +171 -5
  26. package/templates/canonical/skills/engineering-change-review/SKILL.md +145 -9
  27. package/templates/canonical/skills/engineering-intelligence-skill/SKILL.md +168 -0
  28. package/templates/canonical/skills/graph-engine/SKILL.md +134 -14
  29. package/templates/canonical/skills/impact-analysis-engine/SKILL.md +125 -11
  30. package/templates/canonical/skills/incremental-sync-engine/SKILL.md +75 -10
  31. package/templates/canonical/skills/initialize-intelligence-skill/SKILL.md +130 -0
  32. package/templates/canonical/skills/knowledge-base-validator/SKILL.md +92 -7
  33. package/templates/canonical/skills/knowledge-sync-engine/SKILL.md +77 -8
  34. package/templates/canonical/skills/memory-sync-engine/SKILL.md +70 -8
  35. package/templates/canonical/skills/refactoring-planner/SKILL.md +143 -2
  36. package/templates/canonical/skills/testing-intelligence-engine/SKILL.md +119 -3
  37. package/templates/canonical/workflows/analyze-impact.md +25 -3
  38. package/templates/canonical/workflows/engineering-intelligence.md +20 -3
  39. package/templates/canonical/workflows/initialize-engineering-intelligence.md +30 -3
  40. package/templates/canonical/workflows/map-architecture.md +17 -6
  41. package/templates/canonical/workflows/review-engineering-change.md +26 -2
  42. package/templates/canonical/workflows/sync-engineering-intelligence.md +20 -2
  43. package/templates/canonical/skills/engineering-intelligence/SKILL.md +0 -21
  44. 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.4.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"
@@ -36,4 +36,4 @@
36
36
  "@types/node": "^22.15.0",
37
37
  "typescript": "^5.8.3"
38
38
  }
39
- }
39
+ }