@codified/cli 0.3.5 → 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.
Files changed (105) hide show
  1. package/dist/commands/add.d.ts +3 -0
  2. package/dist/commands/add.d.ts.map +1 -0
  3. package/dist/commands/add.js +163 -0
  4. package/dist/commands/add.js.map +1 -0
  5. package/dist/commands/bootstrap.d.ts.map +1 -0
  6. package/dist/commands/bootstrap.js +141 -0
  7. package/dist/commands/bootstrap.js.map +1 -0
  8. package/dist/commands/check.d.ts +3 -0
  9. package/dist/commands/check.d.ts.map +1 -0
  10. package/dist/commands/check.js +332 -0
  11. package/dist/commands/check.js.map +1 -0
  12. package/dist/commands/cleanup.d.ts +3 -0
  13. package/dist/commands/cleanup.d.ts.map +1 -0
  14. package/dist/commands/cleanup.js +166 -0
  15. package/dist/commands/cleanup.js.map +1 -0
  16. package/dist/commands/collect.d.ts +26 -0
  17. package/dist/commands/collect.d.ts.map +1 -0
  18. package/dist/commands/collect.js +269 -0
  19. package/dist/commands/collect.js.map +1 -0
  20. package/dist/commands/connect.d.ts +3 -0
  21. package/dist/commands/connect.d.ts.map +1 -0
  22. package/dist/commands/connect.js +321 -0
  23. package/dist/commands/connect.js.map +1 -0
  24. package/dist/commands/explain.d.ts +3 -0
  25. package/dist/commands/explain.d.ts.map +1 -0
  26. package/dist/commands/explain.js +527 -0
  27. package/dist/commands/explain.js.map +1 -0
  28. package/dist/commands/export.d.ts +3 -0
  29. package/dist/commands/export.d.ts.map +1 -0
  30. package/dist/commands/export.js +59 -0
  31. package/dist/commands/export.js.map +1 -0
  32. package/dist/commands/gaps.d.ts +3 -0
  33. package/dist/commands/gaps.d.ts.map +1 -0
  34. package/dist/commands/gaps.js +315 -0
  35. package/dist/commands/gaps.js.map +1 -0
  36. package/dist/commands/graph.d.ts +3 -0
  37. package/dist/commands/graph.d.ts.map +1 -0
  38. package/dist/commands/graph.js +293 -0
  39. package/dist/commands/graph.js.map +1 -0
  40. package/dist/commands/import-cmd.d.ts +3 -0
  41. package/dist/commands/import-cmd.d.ts.map +1 -0
  42. package/dist/commands/import-cmd.js +199 -0
  43. package/dist/commands/import-cmd.js.map +1 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +215 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/project.d.ts +3 -0
  48. package/dist/commands/project.d.ts.map +1 -0
  49. package/dist/commands/project.js +179 -0
  50. package/dist/commands/project.js.map +1 -0
  51. package/dist/commands/reset.d.ts +3 -0
  52. package/dist/commands/reset.d.ts.map +1 -0
  53. package/dist/commands/reset.js +157 -0
  54. package/dist/commands/reset.js.map +1 -0
  55. package/dist/commands/search.d.ts +3 -0
  56. package/dist/commands/search.d.ts.map +1 -0
  57. package/dist/commands/search.js +183 -0
  58. package/dist/commands/search.js.map +1 -0
  59. package/dist/commands/start.d.ts.map +1 -0
  60. package/dist/commands/start.js +205 -0
  61. package/dist/commands/start.js.map +1 -0
  62. package/dist/commands/status.d.ts.map +1 -0
  63. package/dist/commands/status.js +242 -0
  64. package/dist/commands/status.js.map +1 -0
  65. package/dist/commands/timeline.d.ts +3 -0
  66. package/dist/commands/timeline.d.ts.map +1 -0
  67. package/dist/commands/timeline.js +424 -0
  68. package/dist/commands/timeline.js.map +1 -0
  69. package/dist/commands/triage.d.ts +3 -0
  70. package/dist/commands/triage.d.ts.map +1 -0
  71. package/dist/commands/triage.js +336 -0
  72. package/dist/commands/triage.js.map +1 -0
  73. package/dist/commands/up.d.ts +3 -0
  74. package/dist/commands/up.d.ts.map +1 -0
  75. package/dist/commands/up.js +312 -0
  76. package/dist/commands/up.js.map +1 -0
  77. package/dist/commands/watch.d.ts +3 -0
  78. package/dist/commands/watch.d.ts.map +1 -0
  79. package/dist/commands/watch.js +224 -0
  80. package/dist/commands/watch.js.map +1 -0
  81. package/dist/index.d.ts +2 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +574 -491
  84. package/dist/index.js.map +1 -0
  85. package/dist/lib/config.d.ts +52 -0
  86. package/dist/lib/config.d.ts.map +1 -0
  87. package/dist/lib/config.js +142 -0
  88. package/dist/lib/config.js.map +1 -0
  89. package/dist/lib/docker.d.ts +23 -0
  90. package/dist/lib/docker.d.ts.map +1 -0
  91. package/dist/lib/docker.js +84 -0
  92. package/dist/lib/docker.js.map +1 -0
  93. package/dist/lib/migrate.d.ts +9 -0
  94. package/dist/lib/migrate.d.ts.map +1 -0
  95. package/dist/lib/migrate.js +97 -0
  96. package/dist/lib/migrate.js.map +1 -0
  97. package/dist/lib/paths.d.ts +9 -0
  98. package/dist/lib/paths.d.ts.map +1 -0
  99. package/dist/lib/paths.js +28 -0
  100. package/dist/lib/paths.js.map +1 -0
  101. package/dist/lib/prompt.d.ts +14 -0
  102. package/dist/lib/prompt.d.ts.map +1 -0
  103. package/dist/lib/prompt.js +87 -0
  104. package/dist/lib/prompt.js.map +1 -0
  105. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const addCommand: Command;
3
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuMpC,eAAO,MAAM,UAAU,SAwBQ,CAAC"}
@@ -0,0 +1,163 @@
1
+ // codify add — record context into the graph from the terminal
2
+ import { Command } from "commander";
3
+ import { randomUUID } from "node:crypto";
4
+ import { loadProjectConfig } from "../lib/config.js";
5
+ // --- Color helpers (ANSI escape codes) ---
6
+ const RESET = "\x1b[0m";
7
+ const BOLD = "\x1b[1m";
8
+ const DIM = "\x1b[2m";
9
+ const CYAN = "\x1b[36m";
10
+ const GREEN = "\x1b[32m";
11
+ const YELLOW = "\x1b[33m";
12
+ const MAGENTA = "\x1b[35m";
13
+ const BLUE = "\x1b[34m";
14
+ function typeColor(type) {
15
+ const colors = {
16
+ Decision: "\x1b[33m", // yellow
17
+ Feature: "\x1b[32m", // green
18
+ Metric: "\x1b[36m", // cyan
19
+ CustomerSignal: "\x1b[35m", // magenta
20
+ CodeArtifact: "\x1b[34m", // blue
21
+ Discussion: "\x1b[37m", // white
22
+ };
23
+ return `${colors[type] ?? DIM}${type}${RESET}`;
24
+ }
25
+ const NODE_TYPES = {
26
+ decision: { type: "Decision", defaultStatus: "accepted" },
27
+ feature: { type: "Feature", defaultStatus: "active" },
28
+ signal: { type: "CustomerSignal", defaultStatus: "active" },
29
+ artifact: { type: "CodeArtifact", defaultStatus: "active" },
30
+ discussion: { type: "Discussion", defaultStatus: "active" },
31
+ metric: { type: "Metric", defaultStatus: "active" },
32
+ };
33
+ // --- Insert helper ---
34
+ async function insertNode(typeDef, title, opts) {
35
+ try {
36
+ await loadProjectConfig();
37
+ const { getPool, closePool } = await import("@codify/graph");
38
+ const pool = getPool();
39
+ try {
40
+ await pool.query("SELECT 1");
41
+ }
42
+ catch {
43
+ console.error(" ERROR: Cannot connect to PostgreSQL. Run 'codify init' first.\n");
44
+ process.exit(1);
45
+ }
46
+ const nodeId = randomUUID();
47
+ const tags = opts.tags ? opts.tags.split(",").map((t) => t.trim()).filter(Boolean) : [];
48
+ const properties = {
49
+ title,
50
+ status: typeDef.defaultStatus,
51
+ };
52
+ if (opts.description) {
53
+ properties.description = opts.description;
54
+ }
55
+ // Insert the node
56
+ await pool.query(`INSERT INTO nodes (id, type, layer, confidence, freshness, source_system, source_reference, source_agent_id, source_reliability, properties, tags)
57
+ VALUES ($1, $2, 'permanent', 0.8, 1.0, 'cli', 'codify-add', 'user', 0.8, $3, $4)`, [nodeId, typeDef.type, JSON.stringify(properties), tags]);
58
+ // If --link is provided, also create an edge
59
+ if (opts.link) {
60
+ const edgeType = opts.linkType ?? "relates_to";
61
+ const edgeId = randomUUID();
62
+ // Verify the target node exists
63
+ const targetResult = await pool.query("SELECT id FROM nodes WHERE id = $1", [opts.link]);
64
+ if (targetResult.rows.length === 0) {
65
+ console.warn(`\n ${YELLOW}WARNING:${RESET} Target node ${opts.link} not found. Edge was not created.\n`);
66
+ }
67
+ else {
68
+ await pool.query(`INSERT INTO edges (id, type, source_id, target_id, confidence, weight, evidence)
69
+ VALUES ($1, $2, $3, $4, 0.8, 0.5, $5)`, [edgeId, edgeType, nodeId, opts.link, `CLI link: ${title}`]);
70
+ }
71
+ }
72
+ // Print success
73
+ console.log(`\n ${GREEN}${BOLD}Context recorded.${RESET}\n`);
74
+ console.log(` ${DIM}ID:${RESET} ${CYAN}${nodeId}${RESET}`);
75
+ console.log(` ${DIM}Type:${RESET} [${typeColor(typeDef.type)}]`);
76
+ console.log(` ${DIM}Title:${RESET} ${BOLD}${title}${RESET}`);
77
+ if (opts.description) {
78
+ console.log(` ${DIM}Desc:${RESET} ${opts.description}`);
79
+ }
80
+ if (tags.length > 0) {
81
+ console.log(` ${DIM}Tags:${RESET} ${tags.map((t) => `${MAGENTA}${t}${RESET}`).join(", ")}`);
82
+ }
83
+ if (opts.link) {
84
+ const edgeType = opts.linkType ?? "relates_to";
85
+ console.log(` ${DIM}Link:${RESET} ${BLUE}${edgeType}${RESET} -> ${opts.link}`);
86
+ }
87
+ console.log(` ${DIM}Layer:${RESET} permanent ${DIM}Confidence:${RESET} 0.80 ${DIM}Freshness:${RESET} 1.00`);
88
+ console.log("");
89
+ await closePool();
90
+ }
91
+ catch (err) {
92
+ const message = err instanceof Error ? err.message : String(err);
93
+ if (message.includes("ECONNREFUSED")) {
94
+ console.error("\n ERROR: Cannot connect to Codify services.");
95
+ console.error(" Run 'codify init' to start the infrastructure.\n");
96
+ }
97
+ else if (message.includes("violates foreign key constraint") && message.includes("edge_types")) {
98
+ const edgeType = opts.linkType ?? "relates_to";
99
+ console.error(`\n ERROR: Edge type "${edgeType}" is not registered.`);
100
+ console.error(" Use a valid edge type: relates_to, caused_by, informed_by, evidence_for, etc.\n");
101
+ }
102
+ else {
103
+ console.error(`\n ERROR: ${message}\n`);
104
+ }
105
+ process.exit(1);
106
+ }
107
+ }
108
+ // --- Build a subcommand for each node type ---
109
+ function makeSubcommand(name, alias, typeDef, description) {
110
+ const cmd = new Command(name)
111
+ .description(description)
112
+ .argument("<title>", "Short title for the context node")
113
+ .option("--description <text>", "Detailed description or reasoning")
114
+ .option("--tags <tags>", "Comma-separated tags (e.g., auth,api)")
115
+ .option("--link <nodeId>", "Link to an existing node by ID")
116
+ .option("--link-type <edgeType>", "Edge type for the link (default: relates_to)", "relates_to")
117
+ .action(async (title, cmdOpts) => {
118
+ await insertNode(typeDef, title, {
119
+ description: cmdOpts.description,
120
+ tags: cmdOpts.tags,
121
+ link: cmdOpts.link,
122
+ linkType: cmdOpts.linkType,
123
+ });
124
+ });
125
+ if (alias) {
126
+ cmd.alias(alias);
127
+ }
128
+ return cmd;
129
+ }
130
+ // --- Subcommands ---
131
+ const decisionSubcommand = makeSubcommand("decision", null, NODE_TYPES.decision, "Record a decision (e.g., 'Chose JWT for API auth')");
132
+ const featureSubcommand = makeSubcommand("feature", null, NODE_TYPES.feature, "Record a feature (e.g., 'User auth flow')");
133
+ const signalSubcommand = makeSubcommand("signal", "customer-signal", NODE_TYPES.signal, "Record a customer signal (e.g., '3 customers asked for dark mode')");
134
+ const artifactSubcommand = makeSubcommand("artifact", "code-artifact", NODE_TYPES.artifact, "Record a code artifact (e.g., 'src/middleware/auth.ts')");
135
+ const discussionSubcommand = makeSubcommand("discussion", null, NODE_TYPES.discussion, "Record a discussion (e.g., 'Team agreed on REST over GraphQL')");
136
+ const metricSubcommand = makeSubcommand("metric", null, NODE_TYPES.metric, "Record a metric (e.g., 'API response time under 200ms')");
137
+ // --- Main add command ---
138
+ export const addCommand = new Command("add")
139
+ .description("Add context to the graph")
140
+ .addHelpText("after", `
141
+ Node types:
142
+ decision Record a technical or product decision
143
+ feature Record a product feature
144
+ signal Record a customer signal (alias: customer-signal)
145
+ artifact Record a code artifact (alias: code-artifact)
146
+ discussion Record a team discussion
147
+ metric Record a tracked metric
148
+
149
+ Examples:
150
+ codify add decision "Chose JWT for API auth" --description "Stateless, scalable" --tags auth,api
151
+ codify add signal "3 customers asked for dark mode" --tags ux,feature-request
152
+ codify add feature "User auth flow" --description "Login/signup with JWT"
153
+ codify add artifact "src/middleware/auth.ts" --tags auth
154
+ codify add discussion "Team agreed on REST over GraphQL" --tags api
155
+ codify add metric "API response time under 200ms" --tags performance
156
+ `)
157
+ .addCommand(decisionSubcommand)
158
+ .addCommand(featureSubcommand)
159
+ .addCommand(signalSubcommand)
160
+ .addCommand(artifactSubcommand)
161
+ .addCommand(discussionSubcommand)
162
+ .addCommand(metricSubcommand);
163
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,4CAA4C;AAE5C,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAA2B;QACrC,QAAQ,EAAE,UAAU,EAAQ,SAAS;QACrC,OAAO,EAAE,UAAU,EAAS,QAAQ;QACpC,MAAM,EAAE,UAAU,EAAU,OAAO;QACnC,cAAc,EAAE,UAAU,EAAE,UAAU;QACtC,YAAY,EAAE,UAAU,EAAI,OAAO;QACnC,UAAU,EAAE,UAAU,EAAM,QAAQ;KACrC,CAAC;IACF,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AACjD,CAAC;AASD,MAAM,UAAU,GAAgC;IAC9C,QAAQ,EAAG,EAAE,IAAI,EAAE,UAAU,EAAQ,aAAa,EAAE,UAAU,EAAE;IAChE,OAAO,EAAI,EAAE,IAAI,EAAE,SAAS,EAAS,aAAa,EAAE,QAAQ,EAAE;IAC9D,MAAM,EAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE;IAC9D,QAAQ,EAAG,EAAE,IAAI,EAAE,cAAc,EAAI,aAAa,EAAE,QAAQ,EAAE;IAC9D,UAAU,EAAC,EAAE,IAAI,EAAE,YAAY,EAAM,aAAa,EAAE,QAAQ,EAAE;IAC9D,MAAM,EAAK,EAAE,IAAI,EAAE,QAAQ,EAAU,aAAa,EAAE,QAAQ,EAAE;CAC/D,CAAC;AAEF,wBAAwB;AAExB,KAAK,UAAU,UAAU,CACvB,OAAoB,EACpB,KAAa,EACb,IAA+E;IAE/E,IAAI,CAAC;QACH,MAAM,iBAAiB,EAAE,CAAC;QAE1B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAE7D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExF,MAAM,UAAU,GAA4B;YAC1C,KAAK;YACL,MAAM,EAAE,OAAO,CAAC,aAAa;SAC9B,CAAC;QACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5C,CAAC;QAED,kBAAkB;QAClB,MAAM,IAAI,CAAC,KAAK,CACd;wFACkF,EAClF,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CACzD,CAAC;QAEF,6CAA6C;QAC7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;YAC/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,gCAAgC;YAChC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CACnC,oCAAoC,EACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;YAEF,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,OAAO,MAAM,WAAW,KAAK,gBAAgB,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;YAC5G,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,KAAK,CACd;iDACuC,EACvC,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,KAAK,EAAE,CAAC,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,IAAI,oBAAoB,KAAK,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,KAAK,OAAO,IAAI,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,KAAK,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,GAAG,QAAQ,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,KAAK,eAAe,GAAG,cAAc,KAAK,UAAU,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC;QAC/G,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,SAAS,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,yBAAyB,QAAQ,sBAAsB,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,gDAAgD;AAEhD,SAAS,cAAc,CAAC,IAAY,EAAE,KAAoB,EAAE,OAAoB,EAAE,WAAmB;IACnG,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;SAC1B,WAAW,CAAC,WAAW,CAAC;SACxB,QAAQ,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACvD,MAAM,CAAC,sBAAsB,EAAE,mCAAmC,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;SAC3D,MAAM,CAAC,wBAAwB,EAAE,8CAA8C,EAAE,YAAY,CAAC;SAC9F,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAAO,EAAE,EAAE;QACvC,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE;YAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sBAAsB;AAEtB,MAAM,kBAAkB,GAAG,cAAc,CACvC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EACrC,oDAAoD,CACrD,CAAC;AAEF,MAAM,iBAAiB,GAAG,cAAc,CACtC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EACnC,2CAA2C,CAC5C,CAAC;AAEF,MAAM,gBAAgB,GAAG,cAAc,CACrC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAC,MAAM,EAC9C,oEAAoE,CACrE,CAAC;AAEF,MAAM,kBAAkB,GAAG,cAAc,CACvC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,QAAQ,EAChD,yDAAyD,CAC1D,CAAC;AAEF,MAAM,oBAAoB,GAAG,cAAc,CACzC,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EACzC,gEAAgE,CACjE,CAAC;AAEF,MAAM,gBAAgB,GAAG,cAAc,CACrC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EACjC,yDAAyD,CAC1D,CAAC;AAEF,2BAA2B;AAE3B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,0BAA0B,CAAC;KACvC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;CAgBvB,CAAC;KACC,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,iBAAiB,CAAC;KAC7B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,oBAAoB,CAAC;KAChC,UAAU,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,gBAAgB,SA+IzB,CAAC"}
@@ -0,0 +1,141 @@
1
+ // codify bootstrap — mine the current project's git history into the context graph
2
+ //
3
+ // Uses the ingest service: LocalGitConnector → GitMiner (Claude-powered) → StagingPipeline
4
+ // This is the proper pipeline — Claude interprets commit messages, PR descriptions,
5
+ // and review comments to extract Decision, Feature, CodeArtifact, Discussion, Person nodes.
6
+ import { Command } from "commander";
7
+ import { spawnSync } from "node:child_process";
8
+ import { loadProjectConfig } from "../lib/config.js";
9
+ import { confirm } from "../lib/prompt.js";
10
+ export const bootstrapCommand = new Command("bootstrap")
11
+ .description("Mine the current project's git history into the context graph")
12
+ .option("--limit <n>", "Maximum commits to process", "500")
13
+ .option("--skip-prs", "Skip GitHub PR fetching")
14
+ .option("--batch-size <n>", "Artifacts per miner batch", "10")
15
+ .option("--yes", "Skip confirmation prompt")
16
+ .action(async (opts) => {
17
+ try {
18
+ const cwd = process.cwd();
19
+ console.log("\n Codify Bootstrap — Mining Git History\n");
20
+ // Check we're in a git repo
21
+ const gitCheck = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], {
22
+ cwd,
23
+ stdio: "pipe",
24
+ });
25
+ if (gitCheck.status !== 0) {
26
+ console.error(" ERROR: Not in a git repository. Run from a git project.\n");
27
+ process.exit(1);
28
+ }
29
+ // Cost estimate
30
+ const commitCountResult = spawnSync("git", ["rev-list", "--count", "HEAD"], {
31
+ cwd,
32
+ stdio: "pipe",
33
+ });
34
+ let commitCount = parseInt(commitCountResult.stdout?.toString().trim() ?? "0", 10);
35
+ const limit = parseInt(opts.limit, 10);
36
+ if (commitCount > limit)
37
+ commitCount = limit;
38
+ console.log(` Will process ${commitCount} commits (Claude API calls required).`);
39
+ if (!opts.yes) {
40
+ const proceed = await confirm(" Proceed?");
41
+ if (!proceed) {
42
+ console.log(" Aborted.\n");
43
+ process.exit(0);
44
+ }
45
+ }
46
+ console.log("");
47
+ // Load project config (.codify/config.json → env vars)
48
+ await loadProjectConfig();
49
+ // Verify DB connection
50
+ const { getPool } = await import("@codify/graph");
51
+ const pool = getPool();
52
+ try {
53
+ await pool.query("SELECT 1");
54
+ }
55
+ catch {
56
+ console.error(" ERROR: Cannot connect to PostgreSQL. Run 'codify init' first.\n");
57
+ process.exit(1);
58
+ }
59
+ // Check for ANTHROPIC_API_KEY
60
+ if (!process.env.ANTHROPIC_API_KEY) {
61
+ console.error(" ERROR: ANTHROPIC_API_KEY not set. The miner needs Claude to extract context.\n");
62
+ console.error(" Set it in your environment or .codify/config.json.\n");
63
+ process.exit(1);
64
+ }
65
+ // Initialize the ingest service
66
+ console.log(" [1/3] Initializing ingest service...");
67
+ const { createIngestService } = await import("@codify/agents");
68
+ const batchSize = parseInt(opts.batchSize, 10);
69
+ const ingest = await createIngestService({
70
+ minerBatchSize: batchSize,
71
+ enableDedup: true,
72
+ autoPromoteThreshold: 0.7,
73
+ });
74
+ // Connect the local-git connector to this project
75
+ console.log(` OK Connecting to ${cwd}`);
76
+ await ingest.registry.connect("local-git", {
77
+ type: "local",
78
+ credentials: { repoPath: cwd, maxCommits: String(limit) },
79
+ });
80
+ // Run bootstrap (full sync through connector → miner → pipeline)
81
+ console.log("\n [2/3] Mining git history with Claude...");
82
+ console.log(" This uses AI to extract decisions, features, discussions,");
83
+ console.log(" and relationships from your commit and PR history.\n");
84
+ const totalBatches = Math.ceil(commitCount / batchSize);
85
+ console.log(` Processing ${commitCount} commits in ~${totalBatches} batch${totalBatches === 1 ? "" : "es"}\n`);
86
+ const startTime = Date.now();
87
+ const batchTimes = [];
88
+ let batchNum = 0;
89
+ // Progress callback — logs per-batch progress with ETA
90
+ const originalLog = console.log;
91
+ const batchPattern = /mined|batch|processing/i;
92
+ const patchedLog = (...args) => {
93
+ const msg = String(args[0] ?? "");
94
+ if (batchPattern.test(msg)) {
95
+ batchNum++;
96
+ const now = Date.now();
97
+ batchTimes.push(now);
98
+ if (batchNum >= 2 && batchNum < totalBatches) {
99
+ const elapsed = (now - startTime) / 1000;
100
+ const avgBatchSec = elapsed / batchNum;
101
+ const remaining = Math.round(avgBatchSec * (totalBatches - batchNum));
102
+ const mins = Math.floor(remaining / 60);
103
+ const secs = remaining % 60;
104
+ const eta = mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;
105
+ originalLog(` Batch ${batchNum}/${totalBatches} (${Math.round((batchNum / totalBatches) * 100)}%) — ~${eta} remaining`);
106
+ return;
107
+ }
108
+ }
109
+ originalLog(...args);
110
+ };
111
+ console.log = patchedLog;
112
+ const result = await ingest.bootstrap.run("local-git");
113
+ console.log = originalLog;
114
+ const durationSec = ((Date.now() - startTime) / 1000).toFixed(1);
115
+ // Summary
116
+ console.log(`\n Your context graph is live!\n`);
117
+ console.log(` ${result.totalArtifacts} artifacts mined in ${durationSec}s\n`);
118
+ console.log(` Nodes: ${result.pipeline.created.length} created, ${result.pipeline.merged.length} merged`);
119
+ if (result.pipeline.rejected.length > 0) {
120
+ console.log(` Skipped: ${result.pipeline.rejected.length}`);
121
+ }
122
+ console.log(`\n Run 'codify status' to see your graph.`);
123
+ console.log(` Claude Code now has full context about your project.\n`);
124
+ }
125
+ catch (err) {
126
+ const message = err instanceof Error ? err.message : String(err);
127
+ if (message.includes("ECONNREFUSED")) {
128
+ console.error("\n ERROR: Cannot connect to Codify services.");
129
+ console.error(" Run 'codify init' to start the infrastructure.\n");
130
+ }
131
+ else if (message.includes("ANTHROPIC_API_KEY")) {
132
+ console.error("\n ERROR: ANTHROPIC_API_KEY not set.");
133
+ console.error(" Export your API key: export ANTHROPIC_API_KEY=sk-...\n");
134
+ }
135
+ else {
136
+ console.error(`\n ERROR: ${message}\n`);
137
+ }
138
+ process.exit(1);
139
+ }
140
+ });
141
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const checkCommand: Command;
3
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,eAAO,MAAM,YAAY,SAwSrB,CAAC"}