@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,312 @@
1
+ // codify up — one-command setup: init -> bootstrap -> start
2
+ //
3
+ // Smart step-skipping: checks infrastructure and graph state before each step
4
+ // so it's safe to run repeatedly (idempotent).
5
+ import { Command } from "commander";
6
+ import { existsSync } from "node:fs";
7
+ import { resolve } from "node:path";
8
+ import { spawnSync } from "node:child_process";
9
+ import { loadProjectConfig } from "../lib/config.js";
10
+ // ANSI helpers
11
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
12
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
13
+ const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
14
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
15
+ export const upCommand = new Command("up")
16
+ .description("Set up and start Codify in one command (init + bootstrap + start)")
17
+ .option("--skip-bootstrap", "Skip the bootstrap step")
18
+ .option("--yes", "Non-interactive mode (pass through to init and bootstrap)")
19
+ .option("--limit <n>", "Maximum commits for bootstrap", "200")
20
+ .action(async (opts) => {
21
+ try {
22
+ const cwd = process.cwd();
23
+ console.log(`\n ${bold("Codify \u2014 Up")}\n`);
24
+ // ── Step 1/3: Infrastructure ──────────────────────────────────
25
+ console.log(` ${cyan("Step 1/3: Infrastructure")}`);
26
+ const configDir = resolve(cwd, ".codify");
27
+ const configExists = existsSync(resolve(configDir, "config.json"));
28
+ let infraReady = false;
29
+ if (configExists) {
30
+ // Config exists — check if PostgreSQL is reachable
31
+ await loadProjectConfig();
32
+ try {
33
+ const { getPool } = await import("@codify/graph");
34
+ const pool = getPool();
35
+ await pool.query("SELECT 1");
36
+ infraReady = true;
37
+ }
38
+ catch {
39
+ // PostgreSQL not reachable — need init
40
+ }
41
+ }
42
+ if (infraReady) {
43
+ console.log(` ${green("\u2713")} Infrastructure ready ${dim("(skipping init)")}`);
44
+ }
45
+ else {
46
+ console.log(` Running ${bold("codify init")}...`);
47
+ // Build the init command with passthrough flags
48
+ const initArgs = ["init"];
49
+ if (opts.yes)
50
+ initArgs.push("--yes");
51
+ // Run init as a subprocess so we get the full init flow
52
+ // (Docker setup, migrations, MCP registration, etc.)
53
+ const codifyPath = resolve(process.argv[1]);
54
+ const result = spawnSync(process.execPath, [codifyPath, ...initArgs], {
55
+ cwd,
56
+ stdio: "inherit",
57
+ env: process.env,
58
+ });
59
+ if (result.status !== 0) {
60
+ console.error(`\n ${bold("Init failed.")} Fix the errors above and try again.\n`);
61
+ process.exit(1);
62
+ }
63
+ // Reload config after init
64
+ await loadProjectConfig();
65
+ console.log(` ${green("\u2713")} Infrastructure initialized`);
66
+ }
67
+ // ── Step 2/3: Bootstrap ───────────────────────────────────────
68
+ console.log(`\n ${cyan("Step 2/3: Bootstrap")}`);
69
+ if (opts.skipBootstrap) {
70
+ console.log(` ${dim("\u2013")} Skipped ${dim("(--skip-bootstrap)")}`);
71
+ }
72
+ else {
73
+ // Check if graph already has data
74
+ let nodeCount = 0;
75
+ try {
76
+ const { getPool } = await import("@codify/graph");
77
+ const pool = getPool();
78
+ const { rows } = await pool.query("SELECT COUNT(*)::int AS count FROM nodes");
79
+ nodeCount = rows[0]?.count ?? 0;
80
+ }
81
+ catch {
82
+ // If we can't query, we'll try bootstrap and let it fail with a clear message
83
+ }
84
+ if (nodeCount > 0) {
85
+ console.log(` ${green("\u2713")} Graph already populated: ${bold(String(nodeCount))} nodes ${dim("(skipping bootstrap)")}`);
86
+ }
87
+ else {
88
+ // Check we're in a git repo
89
+ const gitCheck = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], {
90
+ cwd,
91
+ stdio: "pipe",
92
+ });
93
+ if (gitCheck.status !== 0) {
94
+ console.log(` ${dim("\u2013")} Not a git repository ${dim("(skipping bootstrap)")}`);
95
+ }
96
+ else {
97
+ const limit = opts.limit;
98
+ console.log(` Bootstrapping git history (limit: ${bold(limit)})...`);
99
+ console.log("");
100
+ // Run bootstrap as a subprocess for clean output
101
+ const codifyPath = resolve(process.argv[1]);
102
+ const bootstrapArgs = ["bootstrap", "--limit", limit, "--yes"];
103
+ const result = spawnSync(process.execPath, [codifyPath, ...bootstrapArgs], {
104
+ cwd,
105
+ stdio: "inherit",
106
+ env: process.env,
107
+ });
108
+ if (result.status !== 0) {
109
+ console.error(`\n ${bold("Bootstrap failed.")} You can retry with: codify bootstrap\n`);
110
+ process.exit(1);
111
+ }
112
+ // Get final node count
113
+ try {
114
+ const { getPool } = await import("@codify/graph");
115
+ const pool = getPool();
116
+ const { rows } = await pool.query("SELECT COUNT(*)::int AS count FROM nodes");
117
+ const finalCount = rows[0]?.count ?? 0;
118
+ console.log(` ${green("\u2713")} Graph populated: ${bold(String(finalCount))} nodes`);
119
+ }
120
+ catch {
121
+ console.log(` ${green("\u2713")} Bootstrap complete`);
122
+ }
123
+ }
124
+ }
125
+ }
126
+ // ── Step 3/3: MCP Server ──────────────────────────────────────
127
+ console.log(`\n ${cyan("Step 3/3: MCP Server")}`);
128
+ console.log(` Starting MCP server on stdio...`);
129
+ console.log("");
130
+ // Hand off to start — this runs in-process since the MCP server
131
+ // needs to stay alive on stdio. We import and execute the same
132
+ // logic that `codify start` uses.
133
+ await loadProjectConfig();
134
+ const { getPool, closePool } = await import("@codify/graph");
135
+ const { createEventBus } = await import("@codify/events");
136
+ const { startGapEngine, CollectionPlanner } = await import("@codify/agents");
137
+ const { MetabolismService } = await import("@codify/metabolism");
138
+ const { GraphServiceAdapter } = await import("@codify/app");
139
+ // Connect to PostgreSQL
140
+ const pool = getPool();
141
+ const { rows } = await pool.query("SELECT 1 AS ok");
142
+ if (rows[0]?.ok !== 1) {
143
+ console.error(" Failed to connect to PostgreSQL.");
144
+ process.exit(1);
145
+ }
146
+ console.error(` ${green("\u2713")} PostgreSQL connected`);
147
+ // Set up graph service
148
+ const graphService = new GraphServiceAdapter();
149
+ // Connect event bus
150
+ const eventBus = await createEventBus({
151
+ servers: process.env.NATS_URL ?? "nats://localhost:4222",
152
+ });
153
+ console.error(` ${green("\u2713")} NATS connected`);
154
+ // Start background services
155
+ const gapEngine = await startGapEngine();
156
+ const metabolism = new MetabolismService(eventBus);
157
+ await metabolism.start();
158
+ // Start collection planner
159
+ const collectionPlanner = new CollectionPlanner(eventBus);
160
+ await collectionPlanner.start();
161
+ // Auto-collection subscriber: mine graph for evidence when gaps are detected
162
+ {
163
+ const { collectEvidenceForGap } = await import("./collect.js");
164
+ let lastCollectionTime = 0;
165
+ let collectionsThisMinute = 0;
166
+ let minuteStart = Date.now();
167
+ eventBus.subscriber.subscribe("gap.detected.>", async (event) => {
168
+ const ev = event;
169
+ if (!ev.gapNodeId)
170
+ return;
171
+ const now = Date.now();
172
+ if (now - minuteStart > 60_000) {
173
+ collectionsThisMinute = 0;
174
+ minuteStart = now;
175
+ }
176
+ if (collectionsThisMinute >= 10)
177
+ return;
178
+ if (now - lastCollectionTime < 5_000)
179
+ return;
180
+ collectionsThisMinute++;
181
+ lastCollectionTime = now;
182
+ try {
183
+ const affectedResult = await pool.query(`SELECT n.id, n.type, n.properties, n.metadata
184
+ FROM nodes n
185
+ JOIN edges e ON (e.source_id = n.id OR e.target_id = n.id)
186
+ WHERE (e.source_id = $1 OR e.target_id = $1)
187
+ AND n.id != $1
188
+ AND n.superseded_by IS NULL
189
+ GROUP BY n.id, n.type, n.properties, n.metadata`, [ev.gapNodeId]);
190
+ const affectedNodes = affectedResult.rows.map((r) => {
191
+ const p = r.properties ?? {};
192
+ const m = r.metadata ?? {};
193
+ return {
194
+ id: r.id,
195
+ type: r.type,
196
+ title: p.title ?? m.title ??
197
+ p.name ?? m.name ?? "(untitled)",
198
+ };
199
+ });
200
+ if (affectedNodes.length === 0)
201
+ return;
202
+ const { evidenceNodes } = await collectEvidenceForGap(pool, ev.gapNodeId, affectedNodes);
203
+ if (evidenceNodes.length > 0) {
204
+ await pool.query(`UPDATE nodes
205
+ SET properties = jsonb_set(properties, '{status}', '"evidence_found"'),
206
+ updated_at = now()
207
+ WHERE id = $1
208
+ AND COALESCE(properties->>'status', 'detected') = 'detected'`, [ev.gapNodeId]);
209
+ const gapResult = await pool.query(`SELECT properties FROM nodes WHERE id = $1`, [ev.gapNodeId]);
210
+ const gapTitle = gapResult.rows[0]?.properties?.title ??
211
+ gapResult.rows[0]?.properties?.description?.slice(0, 50) ?? ev.gapNodeId.slice(0, 12);
212
+ console.error(`[collection] Auto-collected ${evidenceNodes.length} evidence node${evidenceNodes.length === 1 ? "" : "s"} for gap: ${gapTitle}`);
213
+ }
214
+ }
215
+ catch (err) {
216
+ console.error(`[collection] Auto-collection error: ${err instanceof Error ? err.message : String(err)}`);
217
+ }
218
+ }, { group: "auto-collector" });
219
+ console.error(" \u2713 Auto-collection subscriber ready");
220
+ }
221
+ // Wire up bootstrap and graph stats functions
222
+ const { createIngestService } = await import("@codify/agents");
223
+ const bootstrapFn = async (repoPath) => {
224
+ const ingest = await createIngestService({
225
+ minerBatchSize: 10,
226
+ enableDedup: true,
227
+ autoPromoteThreshold: 0.7,
228
+ });
229
+ await ingest.registry.connect("local-git", {
230
+ type: "local",
231
+ credentials: { repoPath },
232
+ });
233
+ const startTime = Date.now();
234
+ const result = await ingest.bootstrap.run("local-git");
235
+ return {
236
+ connectorId: "local-git",
237
+ totalArtifacts: result.totalArtifacts,
238
+ nodesCreated: result.pipeline.created.length,
239
+ nodesMerged: result.pipeline.merged.length,
240
+ durationMs: Date.now() - startTime,
241
+ };
242
+ };
243
+ const graphStatsFn = async () => {
244
+ const { query } = await import("@codify/graph");
245
+ const [nodeStats, edgeCount, gapCount, freshnessAvg, oldestNewest] = await Promise.all([
246
+ query("SELECT type, COUNT(*)::int as count FROM nodes WHERE superseded_by IS NULL GROUP BY type"),
247
+ query("SELECT COUNT(*)::int as count FROM edges"),
248
+ query("SELECT COUNT(*)::int as count FROM nodes WHERE type = 'Gap' AND superseded_by IS NULL"),
249
+ query("SELECT COALESCE(AVG(freshness), 0)::float as avg FROM nodes WHERE superseded_by IS NULL"),
250
+ query("SELECT MIN(created_at) as oldest, MAX(created_at) as newest FROM nodes WHERE superseded_by IS NULL"),
251
+ ]);
252
+ const nodesByType = {};
253
+ let totalNodes = 0;
254
+ for (const row of nodeStats.rows) {
255
+ nodesByType[row.type] = row.count;
256
+ totalNodes += row.count;
257
+ }
258
+ const layerStats = await query("SELECT layer, COUNT(*)::int as count FROM nodes WHERE superseded_by IS NULL GROUP BY layer");
259
+ const nodesByLayer = {};
260
+ for (const row of layerStats.rows) {
261
+ nodesByLayer[row.layer] = row.count;
262
+ }
263
+ return {
264
+ totalNodes,
265
+ totalEdges: edgeCount.rows[0]?.count ?? 0,
266
+ nodesByType,
267
+ nodesByLayer,
268
+ avgFreshness: freshnessAvg.rows[0]?.avg ?? 0,
269
+ gapCount: gapCount.rows[0]?.count ?? 0,
270
+ oldestNode: oldestNewest.rows[0]?.oldest?.toISOString() ?? null,
271
+ newestNode: oldestNewest.rows[0]?.newest?.toISOString() ?? null,
272
+ };
273
+ };
274
+ // Start MCP server on stdio
275
+ const { startMcpStdio } = await import("@codify/api");
276
+ await startMcpStdio(graphService, {
277
+ bootstrapFn,
278
+ graphStatsFn,
279
+ collectionPlannerFn: () => collectionPlanner.listPlans(),
280
+ gapQueueFn: (filters) => gapEngine.gapQueue.listGaps(filters),
281
+ });
282
+ console.error(` ${green("\u2713")} MCP server ready on stdio`);
283
+ // Graceful shutdown
284
+ const shutdown = async (signal) => {
285
+ console.error(`[codify] Shutting down (${signal})...`);
286
+ try {
287
+ await metabolism.stop();
288
+ await gapEngine.stop();
289
+ await eventBus.close();
290
+ await closePool();
291
+ process.exit(0);
292
+ }
293
+ catch {
294
+ process.exit(1);
295
+ }
296
+ };
297
+ process.on("SIGINT", () => shutdown("SIGINT"));
298
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
299
+ }
300
+ catch (err) {
301
+ const message = err instanceof Error ? err.message : String(err);
302
+ if (message.includes("ECONNREFUSED")) {
303
+ console.error("\n ERROR: Cannot connect to Codify services.");
304
+ console.error(" Make sure Docker is running and try again.\n");
305
+ }
306
+ else {
307
+ console.error(`\n ERROR: ${message}\n`);
308
+ }
309
+ process.exit(1);
310
+ }
311
+ });
312
+ //# sourceMappingURL=up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const watchCommand: Command;
3
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,eAAO,MAAM,YAAY,SA+KrB,CAAC"}
@@ -0,0 +1,224 @@
1
+ // codify watch — continuous ingest polling loop
2
+ //
3
+ // Polls all connected connectors at a configurable interval,
4
+ // running incremental sync to keep the context graph up to date.
5
+ import { Command } from "commander";
6
+ import { loadProjectConfig, loadConnectors, updateConnectorSyncTime } from "../lib/config.js";
7
+ /**
8
+ * Build a ConnectorAuthConfig from a persisted ConnectorEntry.
9
+ * Translates the stored credentials format into the auth config
10
+ * that each connector's authenticate() method expects.
11
+ */
12
+ function buildAuthConfig(entry) {
13
+ switch (entry.type) {
14
+ case "slack": {
15
+ const creds = {
16
+ token: entry.credentials.token,
17
+ channels: entry.credentials.channels.join(","),
18
+ };
19
+ return {
20
+ type: "slack",
21
+ token: entry.credentials.token,
22
+ credentials: creds,
23
+ };
24
+ }
25
+ case "github": {
26
+ const repos = entry.credentials.repos;
27
+ const [first] = repos;
28
+ const [owner, repo] = first.split("/");
29
+ return {
30
+ type: "github",
31
+ token: entry.credentials.token,
32
+ credentials: { owner, repo },
33
+ };
34
+ }
35
+ case "linear": {
36
+ const creds = {
37
+ token: entry.credentials.apiKey,
38
+ };
39
+ if (entry.credentials.team) {
40
+ creds.teams = String(entry.credentials.team);
41
+ }
42
+ return {
43
+ type: "linear",
44
+ token: entry.credentials.apiKey,
45
+ credentials: creds,
46
+ };
47
+ }
48
+ case "notion":
49
+ return {
50
+ type: "notion",
51
+ token: entry.credentials.token,
52
+ credentials: {
53
+ token: entry.credentials.token,
54
+ },
55
+ };
56
+ default:
57
+ throw new Error(`Unknown connector type: ${entry.type}`);
58
+ }
59
+ }
60
+ export const watchCommand = new Command("watch")
61
+ .description("Start continuous ingest — poll connectors for new data")
62
+ .option("--interval <minutes>", "Poll interval in minutes (default: 15)", "15")
63
+ .action(async (opts) => {
64
+ try {
65
+ const cwd = process.cwd();
66
+ const intervalMinutes = parseInt(opts.interval, 10);
67
+ if (isNaN(intervalMinutes) || intervalMinutes < 1) {
68
+ console.error(" ERROR: --interval must be a positive integer (minutes).\n");
69
+ process.exit(1);
70
+ }
71
+ const intervalMs = intervalMinutes * 60 * 1000;
72
+ console.log("\n Codify Watch — Continuous Ingest\n");
73
+ console.log(` Poll interval: ${intervalMinutes} minute${intervalMinutes === 1 ? "" : "s"}`);
74
+ // Load project config (.codify/config.json → env vars)
75
+ await loadProjectConfig();
76
+ // 1. Connect to database
77
+ const { getPool, closePool } = await import("@codify/graph");
78
+ const pool = getPool();
79
+ try {
80
+ await pool.query("SELECT 1");
81
+ }
82
+ catch {
83
+ console.error(" ERROR: Cannot connect to PostgreSQL. Run 'codify init' first.\n");
84
+ process.exit(1);
85
+ }
86
+ console.log(" ✓ PostgreSQL connected");
87
+ // 2. Connect to NATS
88
+ const { createEventBus } = await import("@codify/events");
89
+ const eventBus = await createEventBus({
90
+ servers: process.env.NATS_URL ?? "nats://localhost:4222",
91
+ });
92
+ console.log(" ✓ NATS connected");
93
+ // 3. Create IngestService
94
+ const { createIngestService } = await import("@codify/agents");
95
+ const ingest = await createIngestService({
96
+ minerBatchSize: 10,
97
+ enableDedup: true,
98
+ autoPromoteThreshold: 0.7,
99
+ }, eventBus);
100
+ // Connect the local-git connector to the current project
101
+ await ingest.registry.connect("local-git", {
102
+ type: "local",
103
+ credentials: { repoPath: cwd },
104
+ });
105
+ console.log(` ✓ Local git connector: ${cwd}`);
106
+ // Auto-load persisted connectors from .codify/config.json
107
+ const persistedConnectors = loadConnectors();
108
+ const connectorEntryMap = new Map();
109
+ for (const entry of persistedConnectors) {
110
+ try {
111
+ const authConfig = buildAuthConfig(entry);
112
+ await ingest.registry.connect(entry.type, authConfig);
113
+ connectorEntryMap.set(entry.type, entry);
114
+ console.log(` ✓ ${entry.type} connector: ${entry.id}`);
115
+ }
116
+ catch (err) {
117
+ const message = err instanceof Error ? err.message : String(err);
118
+ console.error(` WARNING: Failed to connect ${entry.id} (${entry.type}): ${message}`);
119
+ }
120
+ }
121
+ if (persistedConnectors.length > 0) {
122
+ console.log(` Loaded ${persistedConnectors.length} persisted connector${persistedConnectors.length === 1 ? "" : "s"}`);
123
+ }
124
+ const connectorNames = ["local-git", ...persistedConnectors.map(c => c.id)];
125
+ console.log(`\n Watching ${connectorNames.length} connector${connectorNames.length === 1 ? "" : "s"} (${connectorNames.join(", ")})`);
126
+ console.log(" Ctrl+C to stop\n");
127
+ // 4. Polling loop
128
+ let running = true;
129
+ const sessionStart = Date.now();
130
+ let totalArtifactsSynced = 0;
131
+ let lastSyncSummary = "none yet";
132
+ const poll = async () => {
133
+ const connectors = ingest.registry.list();
134
+ for (const connector of connectors) {
135
+ const connection = ingest.registry.getConnection(connector.id);
136
+ if (!connection)
137
+ continue; // skip connectors that aren't connected
138
+ try {
139
+ const result = await ingest.bootstrap.incrementalSync(connector.id);
140
+ if (result.totalArtifacts > 0) {
141
+ totalArtifactsSynced += result.totalArtifacts;
142
+ lastSyncSummary = `${result.totalArtifacts} from ${connector.name}`;
143
+ console.log(` Synced ${result.totalArtifacts} artifact${result.totalArtifacts === 1 ? "" : "s"} from ${connector.name} ` +
144
+ `(+${result.pipeline.created.length} created, +${result.pipeline.merged.length} merged) ` +
145
+ `[${(result.durationMs / 1000).toFixed(1)}s]`);
146
+ }
147
+ else {
148
+ console.log(` ${connector.name}: no new data`);
149
+ }
150
+ // Update lastSyncAt for persisted connectors
151
+ const persistedEntry = connectorEntryMap.get(connector.id);
152
+ if (persistedEntry) {
153
+ updateConnectorSyncTime(persistedEntry.id);
154
+ }
155
+ }
156
+ catch (err) {
157
+ const message = err instanceof Error ? err.message : String(err);
158
+ console.error(` ERROR syncing ${connector.name}: ${message}`);
159
+ }
160
+ }
161
+ };
162
+ // Run first poll immediately
163
+ await poll();
164
+ // Schedule subsequent polls
165
+ const timer = setInterval(async () => {
166
+ if (!running)
167
+ return;
168
+ const now = new Date().toLocaleTimeString();
169
+ console.log(`\n [${now}] Polling...`);
170
+ await poll();
171
+ }, intervalMs);
172
+ // Heartbeat: show status every 60 seconds
173
+ const heartbeat = setInterval(() => {
174
+ if (!running)
175
+ return;
176
+ const now = new Date().toLocaleTimeString();
177
+ const elapsed = Math.round((Date.now() - sessionStart) / 1000);
178
+ const nextPollIn = Math.max(0, intervalMinutes * 60 - (elapsed % (intervalMinutes * 60)));
179
+ const nextMins = Math.floor(nextPollIn / 60);
180
+ const nextSecs = nextPollIn % 60;
181
+ const nextStr = nextMins > 0 ? `${nextMins}m ${nextSecs}s` : `${nextSecs}s`;
182
+ console.log(` [${now}] Watching... next poll in ${nextStr} (last sync: ${lastSyncSummary})`);
183
+ }, 60_000);
184
+ // 5. Handle SIGINT gracefully
185
+ const shutdown = async (signal) => {
186
+ running = false;
187
+ clearInterval(timer);
188
+ clearInterval(heartbeat);
189
+ const sessionDuration = Math.round((Date.now() - sessionStart) / 1000);
190
+ const mins = Math.floor(sessionDuration / 60);
191
+ const secs = sessionDuration % 60;
192
+ const durationStr = mins > 0 ? `${mins}m ${secs}s` : `${secs}s`;
193
+ console.log(`\n [codify watch] Shutting down (${signal})...`);
194
+ console.log(` Session: ${durationStr}, ${totalArtifactsSynced} artifact${totalArtifactsSynced === 1 ? "" : "s"} synced`);
195
+ try {
196
+ await eventBus.close();
197
+ await closePool();
198
+ console.log(" Clean shutdown\n");
199
+ process.exit(0);
200
+ }
201
+ catch {
202
+ process.exit(1);
203
+ }
204
+ };
205
+ process.on("SIGINT", () => shutdown("SIGINT"));
206
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
207
+ }
208
+ catch (err) {
209
+ const message = err instanceof Error ? err.message : String(err);
210
+ if (message.includes("ECONNREFUSED")) {
211
+ console.error("\n ERROR: Cannot connect to Codify services.");
212
+ console.error(" Run 'codify init' to start the infrastructure.\n");
213
+ }
214
+ else if (message.includes("ANTHROPIC_API_KEY")) {
215
+ console.error("\n ERROR: ANTHROPIC_API_KEY not set.");
216
+ console.error(" Export your API key: export ANTHROPIC_API_KEY=sk-...\n");
217
+ }
218
+ else {
219
+ console.error(`\n ERROR: ${message}\n`);
220
+ }
221
+ process.exit(1);
222
+ }
223
+ });
224
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}