@codified/cli 0.3.4 → 0.3.6
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.
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +163 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +141 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +332 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/cleanup.d.ts +3 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +166 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/collect.d.ts +26 -0
- package/dist/commands/collect.d.ts.map +1 -0
- package/dist/commands/collect.js +269 -0
- package/dist/commands/collect.js.map +1 -0
- package/dist/commands/connect.d.ts +3 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +321 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/explain.d.ts +3 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +527 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +59 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/gaps.d.ts +3 -0
- package/dist/commands/gaps.d.ts.map +1 -0
- package/dist/commands/gaps.js +315 -0
- package/dist/commands/gaps.js.map +1 -0
- package/dist/commands/graph.d.ts +3 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +293 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/import-cmd.d.ts +3 -0
- package/dist/commands/import-cmd.d.ts.map +1 -0
- package/dist/commands/import-cmd.js +199 -0
- package/dist/commands/import-cmd.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +215 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +179 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/reset.d.ts +3 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +157 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +183 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +205 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +242 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/timeline.d.ts +3 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +424 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/triage.d.ts +3 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +336 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +312 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +224 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +668 -494
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +52 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +142 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/docker.d.ts +23 -0
- package/dist/lib/docker.d.ts.map +1 -0
- package/dist/lib/docker.js +84 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/migrate.d.ts +9 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +97 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/paths.d.ts +9 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +28 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/prompt.d.ts +14 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +87 -0
- package/dist/lib/prompt.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// codify status — project health dashboard
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { loadProjectConfig } from "../lib/config.js";
|
|
4
|
+
export const statusCommand = new Command("status")
|
|
5
|
+
.description("Show project health dashboard")
|
|
6
|
+
.action(async () => {
|
|
7
|
+
try {
|
|
8
|
+
await loadProjectConfig();
|
|
9
|
+
const { getPool, closePool } = await import("@codify/graph");
|
|
10
|
+
const pool = getPool();
|
|
11
|
+
try {
|
|
12
|
+
await pool.query("SELECT 1");
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
console.error(" ERROR: Cannot connect to PostgreSQL. Run 'codify init' first.\n");
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
// ── Gather all data ──────────────────────────────────────────
|
|
19
|
+
// Node counts by type
|
|
20
|
+
const nodesByType = await pool.query(`SELECT type, COUNT(*) as count FROM nodes
|
|
21
|
+
WHERE superseded_by IS NULL
|
|
22
|
+
GROUP BY type ORDER BY count DESC`);
|
|
23
|
+
const totalNodes = nodesByType.rows.reduce((sum, r) => sum + parseInt(r.count, 10), 0);
|
|
24
|
+
// Edge count
|
|
25
|
+
const edgeCount = await pool.query(`SELECT COUNT(*) as count FROM edges`);
|
|
26
|
+
const totalEdges = parseInt(edgeCount.rows[0].count, 10);
|
|
27
|
+
// Freshness metrics for health score
|
|
28
|
+
const freshNodes = await pool.query(`SELECT COUNT(*) as count FROM nodes
|
|
29
|
+
WHERE superseded_by IS NULL AND freshness > 0.5`);
|
|
30
|
+
const freshCount = parseInt(freshNodes.rows[0].count, 10);
|
|
31
|
+
const freshPercent = totalNodes > 0 ? freshCount / totalNodes : 0;
|
|
32
|
+
// Decisions with customer evidence (edges from CustomerSignal → Decision)
|
|
33
|
+
const decisionsTotal = await pool.query(`SELECT COUNT(*) as count FROM nodes
|
|
34
|
+
WHERE type = 'Decision' AND superseded_by IS NULL`);
|
|
35
|
+
const decisionsWithEvidence = await pool.query(`SELECT COUNT(DISTINCT d.id) as count
|
|
36
|
+
FROM nodes d
|
|
37
|
+
JOIN edges e ON e.target_id = d.id
|
|
38
|
+
JOIN nodes cs ON cs.id = e.source_id AND cs.type = 'CustomerSignal'
|
|
39
|
+
WHERE d.type = 'Decision' AND d.superseded_by IS NULL
|
|
40
|
+
AND e.type IN ('evidence_for', 'informed_by', 'validates')`);
|
|
41
|
+
const totalDecisions = parseInt(decisionsTotal.rows[0].count, 10);
|
|
42
|
+
const evidencedDecisions = parseInt(decisionsWithEvidence.rows[0].count, 10);
|
|
43
|
+
const evidencePercent = totalDecisions > 0 ? evidencedDecisions / totalDecisions : 0;
|
|
44
|
+
// Gap-to-node ratio
|
|
45
|
+
const gapCount = await pool.query(`SELECT COUNT(*) as count FROM nodes
|
|
46
|
+
WHERE type = 'Gap' AND superseded_by IS NULL`);
|
|
47
|
+
const totalGaps = parseInt(gapCount.rows[0].count, 10);
|
|
48
|
+
const gapRatio = totalNodes > 0 ? totalGaps / totalNodes : 0;
|
|
49
|
+
// Lower ratio = healthier. Score: 1 - (ratio capped at 0.5) * 2
|
|
50
|
+
const gapScore = Math.max(0, 1 - Math.min(gapRatio, 0.5) * 2);
|
|
51
|
+
// Check if any CustomerSignal nodes exist to determine if evidence metric applies
|
|
52
|
+
const customerSignalCount = await pool.query(`SELECT COUNT(*) as count FROM nodes
|
|
53
|
+
WHERE type = 'CustomerSignal' AND superseded_by IS NULL`);
|
|
54
|
+
const totalCustomerSignals = parseInt(customerSignalCount.rows[0].count, 10);
|
|
55
|
+
const hasCustomerSignals = totalCustomerSignals > 0;
|
|
56
|
+
// Weighted health score: adjust weights based on available data
|
|
57
|
+
// If no customer signals exist, don't penalize the evidence component
|
|
58
|
+
const healthScore = hasCustomerSignals
|
|
59
|
+
? Math.round((freshPercent * 0.4 + evidencePercent * 0.3 + gapScore * 0.3) * 100)
|
|
60
|
+
: Math.round((freshPercent * 0.55 + gapScore * 0.45) * 100);
|
|
61
|
+
// Top 3 critical gaps
|
|
62
|
+
const criticalGaps = await pool.query(`SELECT
|
|
63
|
+
properties->>'title' as title,
|
|
64
|
+
COALESCE(properties->>'severity', 'unknown') as severity,
|
|
65
|
+
freshness,
|
|
66
|
+
COALESCE(properties->>'description', properties->>'reason', '') as description
|
|
67
|
+
FROM nodes
|
|
68
|
+
WHERE type = 'Gap' AND superseded_by IS NULL
|
|
69
|
+
ORDER BY
|
|
70
|
+
CASE COALESCE(properties->>'severity', 'unknown')
|
|
71
|
+
WHEN 'critical' THEN 0
|
|
72
|
+
WHEN 'high' THEN 1
|
|
73
|
+
WHEN 'medium' THEN 2
|
|
74
|
+
WHEN 'low' THEN 3
|
|
75
|
+
ELSE 4
|
|
76
|
+
END,
|
|
77
|
+
freshness DESC
|
|
78
|
+
LIMIT 3`);
|
|
79
|
+
// Freshness distribution for ASCII bar
|
|
80
|
+
const freshnessDist = await pool.query(`SELECT
|
|
81
|
+
CASE
|
|
82
|
+
WHEN freshness >= 0.8 THEN 'fresh'
|
|
83
|
+
WHEN freshness >= 0.5 THEN 'moderate'
|
|
84
|
+
WHEN freshness >= 0.2 THEN 'stale'
|
|
85
|
+
ELSE 'very_stale'
|
|
86
|
+
END as bucket,
|
|
87
|
+
COUNT(*) as count
|
|
88
|
+
FROM nodes WHERE superseded_by IS NULL
|
|
89
|
+
GROUP BY bucket`);
|
|
90
|
+
const freshDist = {
|
|
91
|
+
fresh: 0,
|
|
92
|
+
moderate: 0,
|
|
93
|
+
stale: 0,
|
|
94
|
+
very_stale: 0,
|
|
95
|
+
};
|
|
96
|
+
for (const row of freshnessDist.rows) {
|
|
97
|
+
freshDist[row.bucket] = parseInt(row.count, 10);
|
|
98
|
+
}
|
|
99
|
+
// Connector sync status
|
|
100
|
+
const connectors = await pool.query(`SELECT connector_id, status, last_sync_at, artifact_count, error
|
|
101
|
+
FROM connector_sync_state
|
|
102
|
+
ORDER BY connector_id`);
|
|
103
|
+
// Recent metabolism activity
|
|
104
|
+
const metabolismActivity = await pool.query(`SELECT event_type, action, reason, created_at
|
|
105
|
+
FROM metabolism_audit
|
|
106
|
+
ORDER BY created_at DESC
|
|
107
|
+
LIMIT 5`);
|
|
108
|
+
// Edges by type (top 10 for detail)
|
|
109
|
+
const edgesByType = await pool.query(`SELECT type, COUNT(*) as count FROM edges
|
|
110
|
+
GROUP BY type ORDER BY count DESC LIMIT 10`);
|
|
111
|
+
// Branches
|
|
112
|
+
const branches = await pool.query(`SELECT status, COUNT(*) as count FROM branches GROUP BY status`);
|
|
113
|
+
// Last activity
|
|
114
|
+
const lastActivity = await pool.query(`SELECT MAX(updated_at) as last FROM nodes WHERE superseded_by IS NULL`);
|
|
115
|
+
// ── Render dashboard ─────────────────────────────────────────
|
|
116
|
+
console.log("\n Codify — Project Health Dashboard\n");
|
|
117
|
+
// Health Score (headline)
|
|
118
|
+
const healthBar = renderBar(healthScore, 100, 30);
|
|
119
|
+
console.log(` Health Score: ${healthScore}% ${healthBar}`);
|
|
120
|
+
console.log(` Freshness: ${Math.round(freshPercent * 100)}% of nodes above 0.5`);
|
|
121
|
+
if (hasCustomerSignals) {
|
|
122
|
+
console.log(` Evidence: ${evidencedDecisions}/${totalDecisions} decisions backed by customer signals`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log(` Evidence: No customer signals yet. Run 'codify connect slack' or 'codify connect linear' to add.`);
|
|
126
|
+
}
|
|
127
|
+
console.log(` Gap ratio: ${totalGaps} gaps / ${totalNodes} nodes (${(gapRatio * 100).toFixed(1)}%)`);
|
|
128
|
+
// Freshness distribution — ASCII bar chart
|
|
129
|
+
console.log(`\n Freshness Distribution:`);
|
|
130
|
+
const maxFresh = Math.max(freshDist.fresh, freshDist.moderate, freshDist.stale, freshDist.very_stale, 1);
|
|
131
|
+
const barWidth = 30;
|
|
132
|
+
console.log(` Fresh (>0.8) ${renderBar(freshDist.fresh, maxFresh, barWidth)} ${freshDist.fresh}`);
|
|
133
|
+
console.log(` Moderate (0.5-0.8) ${renderBar(freshDist.moderate, maxFresh, barWidth)} ${freshDist.moderate}`);
|
|
134
|
+
console.log(` Stale (0.2-0.5) ${renderBar(freshDist.stale, maxFresh, barWidth)} ${freshDist.stale}`);
|
|
135
|
+
console.log(` Very stale (<0.2)${renderBar(freshDist.very_stale, maxFresh, barWidth)} ${freshDist.very_stale}`);
|
|
136
|
+
// Top 3 critical gaps
|
|
137
|
+
if (criticalGaps.rows.length > 0) {
|
|
138
|
+
console.log(`\n Top Critical Gaps:`);
|
|
139
|
+
for (const gap of criticalGaps.rows) {
|
|
140
|
+
const title = gap.title ?? "(untitled)";
|
|
141
|
+
const sev = gap.severity.toUpperCase();
|
|
142
|
+
const desc = gap.description
|
|
143
|
+
? truncate(gap.description, 60)
|
|
144
|
+
: "";
|
|
145
|
+
console.log(` [${sev}] ${title}`);
|
|
146
|
+
if (desc) {
|
|
147
|
+
console.log(` ${desc}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(`\n No active gaps detected.`);
|
|
153
|
+
}
|
|
154
|
+
// Connector sync status
|
|
155
|
+
console.log(`\n Connectors:`);
|
|
156
|
+
if (connectors.rows.length > 0) {
|
|
157
|
+
for (const c of connectors.rows) {
|
|
158
|
+
const syncTime = c.last_sync_at
|
|
159
|
+
? new Date(c.last_sync_at).toLocaleString()
|
|
160
|
+
: "never";
|
|
161
|
+
const statusIcon = c.status === "error" ? "!" : c.status === "syncing" ? "~" : "*";
|
|
162
|
+
const errorNote = c.error ? ` (${truncate(c.error, 40)})` : "";
|
|
163
|
+
console.log(` ${statusIcon} ${c.connector_id.padEnd(20)} ${c.status.padEnd(10)} last sync: ${syncTime} artifacts: ${c.artifact_count}${errorNote}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
console.log(` No connectors registered. Run 'codify bootstrap' to connect.`);
|
|
168
|
+
}
|
|
169
|
+
// Recent metabolism activity
|
|
170
|
+
console.log(`\n Recent Metabolism Activity:`);
|
|
171
|
+
if (metabolismActivity.rows.length > 0) {
|
|
172
|
+
for (const m of metabolismActivity.rows) {
|
|
173
|
+
const time = new Date(m.created_at).toLocaleString();
|
|
174
|
+
const reason = m.reason ? ` — ${truncate(m.reason, 50)}` : "";
|
|
175
|
+
console.log(` ${time} ${m.event_type} ${m.action}${reason}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.log(` No metabolism activity recorded yet.`);
|
|
180
|
+
}
|
|
181
|
+
// Supporting detail: nodes, edges, branches
|
|
182
|
+
console.log(`\n Graph Detail:`);
|
|
183
|
+
console.log(` Nodes: ${totalNodes} total`);
|
|
184
|
+
for (const row of nodesByType.rows) {
|
|
185
|
+
console.log(` ${row.type.padEnd(20)} ${row.count}`);
|
|
186
|
+
}
|
|
187
|
+
console.log(` Edges: ${totalEdges} total`);
|
|
188
|
+
for (const row of edgesByType.rows) {
|
|
189
|
+
console.log(` ${row.type.padEnd(20)} ${row.count}`);
|
|
190
|
+
}
|
|
191
|
+
if (branches.rows.length > 0) {
|
|
192
|
+
console.log(` Branches:`);
|
|
193
|
+
for (const row of branches.rows) {
|
|
194
|
+
console.log(` ${row.status.padEnd(20)} ${row.count}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (lastActivity.rows[0]?.last) {
|
|
198
|
+
console.log(`\n Last activity: ${new Date(lastActivity.rows[0].last).toLocaleString()}`);
|
|
199
|
+
}
|
|
200
|
+
// Next steps for small graphs
|
|
201
|
+
if (totalNodes < 50) {
|
|
202
|
+
console.log(`\n Next steps:`);
|
|
203
|
+
console.log(` codify bootstrap Mine more git history`);
|
|
204
|
+
console.log(` Ask Claude: "What decisions were made about [topic]?"`);
|
|
205
|
+
}
|
|
206
|
+
console.log("");
|
|
207
|
+
await closePool();
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
211
|
+
if (message.includes("ECONNREFUSED")) {
|
|
212
|
+
console.error("\n ERROR: Cannot connect to Codify services.");
|
|
213
|
+
console.error(" Run 'codify init' to start the infrastructure.\n");
|
|
214
|
+
}
|
|
215
|
+
else if (message.includes("ANTHROPIC_API_KEY")) {
|
|
216
|
+
console.error("\n ERROR: ANTHROPIC_API_KEY not set.");
|
|
217
|
+
console.error(" Export your API key: export ANTHROPIC_API_KEY=sk-...\n");
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.error(`\n ERROR: ${message}\n`);
|
|
221
|
+
}
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
/**
|
|
226
|
+
* Render a simple ASCII bar.
|
|
227
|
+
* value/max scaled to width characters using block characters.
|
|
228
|
+
*/
|
|
229
|
+
function renderBar(value, max, width) {
|
|
230
|
+
const filled = max > 0 ? Math.round((value / max) * width) : 0;
|
|
231
|
+
const empty = width - filled;
|
|
232
|
+
return "[" + "#".repeat(filled) + " ".repeat(empty) + "]";
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Truncate a string to maxLen characters, adding "..." if truncated.
|
|
236
|
+
*/
|
|
237
|
+
function truncate(str, maxLen) {
|
|
238
|
+
if (str.length <= maxLen)
|
|
239
|
+
return str;
|
|
240
|
+
return str.slice(0, maxLen - 3) + "...";
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,eAAO,MAAM,eAAe,SA2ZxB,CAAC"}
|