@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.
- 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 +574 -491
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|