greprag 5.37.0 → 5.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,7 @@ interface DiscoverProject {
20
20
  name: string | null;
21
21
  anchor: 'registered' | 'fallback';
22
22
  row_counts: Record<string, number>;
23
- lore?: number;
23
+ repaired?: number;
24
24
  smell?: number;
25
25
  first_activity: string | null;
26
26
  last_activity: string | null;
@@ -107,16 +107,17 @@ function renderHuman(r) {
107
107
  const nameW = Math.max(4, ...r.projects.map(p => (p.name || '<unnamed>').length));
108
108
  // Each shape column is wide enough for its label or a 5-digit count.
109
109
  const colWs = types.map(t => Math.max(t.length, 5));
110
- // Lore + smell columns ride after the memory shapes — they live in their own
111
- // kind=lore store, not the memory pyramid, so they're separate from row_counts.
112
- const loreW = Math.max('lore'.length, 5);
110
+ // Repaired + smell columns ride after the memory shapes — they live in their
111
+ // own kind=fix store, not the memory pyramid, so they're separate from
112
+ // row_counts.
113
+ const repairedW = Math.max('repaired'.length, 5);
113
114
  const smellW = Math.max('smell'.length, 5);
114
115
  const dateW = 10;
115
116
  const header = [
116
117
  'name'.padEnd(nameW),
117
118
  'anchor'.padEnd(10),
118
119
  ...types.map((t, i) => t.padStart(colWs[i])),
119
- 'lore'.padStart(loreW),
120
+ 'repaired'.padStart(repairedW),
120
121
  'smell'.padStart(smellW),
121
122
  'first'.padEnd(dateW),
122
123
  'last'.padEnd(dateW),
@@ -129,7 +130,7 @@ function renderHuman(r) {
129
130
  (p.name || '<unnamed>').padEnd(nameW),
130
131
  p.anchor.padEnd(10),
131
132
  ...types.map((t, i) => (p.row_counts[t] || 0).toString().padStart(colWs[i])),
132
- (p.lore || 0).toString().padStart(loreW),
133
+ (p.repaired || 0).toString().padStart(repairedW),
133
134
  (p.smell || 0).toString().padStart(smellW),
134
135
  fmtDate(p.first_activity).padEnd(dateW),
135
136
  fmtDate(p.last_activity).padEnd(dateW),
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DH,kCAiDC;AAED,kCAgCC;AAhJD,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAwBlD,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAClE,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe;QACtD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,GAAkB;IACjC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,2EAA2E;AAC3E,SAAgB,WAAW,CAAC,CAAmB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/J,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,qBAAqB,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAClF,qEAAqE;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG;QACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB,YAAY;KACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,CAAC,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACnB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1C,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACtC,CAAC,CAAC,EAAE;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;QACxD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,uBAAuB,EAAE;QAC5D,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE;KACrD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;IAEpD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** greprag fix — the Mechanic's per-project fix queue (friction → fix → repair).
2
+ *
3
+ * A "fix" is a rough spot worth repairing — docs/mechanic.md. Entries are
4
+ * project-specific emergent knowledge: discovered constraints, gotchas,
5
+ * tribal knowledge that drifts as the codebase evolves, plus raw smells
6
+ * (scope='smell') awaiting digestion. Distinct from static project knowledge
7
+ * (CLAUDE.md / docs / code structure). Reviewed via /mechanic.
8
+ *
9
+ * Pull-based: agents seed fixes a future spawned chip would have wanted;
10
+ * future chips query the relevant scope at spawn time and skip the discovery
11
+ * they would otherwise repeat. All server work delegates to FixService in
12
+ * @greprag/core; the CLI is a thin HTTP printer + project resolver.
13
+ *
14
+ * Subcommand surface — runFix dispatches:
15
+ * log "<text>" [--scope <s>] [--repaired] open a fix (raw friction);
16
+ * --repaired records a known rule directly
17
+ * list [--all] [--repaired] [--format json] open queue by default;
18
+ * --repaired = resolved rules;
19
+ * --all = tenant-wide census
20
+ * repair <id> "<rule>" [--scope <s>] resolve a fix: record the durable rule + close
21
+ * delete <id> hard-remove a fix (noise / cleanup)
22
+ * search "<query>" [--scope <s>] [--limit N] lexical search across fixes
23
+ * scopes distinct scope labels in use
24
+ *
25
+ * All verbs accept [--project <name>] to target another project's queue.
26
+ * Project resolution: without --project, uses the current cwd's anchor.
27
+ * With --project <name>, hits /v1/inbox/projects to resolve name → projectId
28
+ * (case-insensitive). */
29
+ export declare function runFix(args: string[]): Promise<void>;
@@ -0,0 +1,519 @@
1
+ "use strict";
2
+ // adr: adr/lore-rename.md
3
+ /** greprag fix — the Mechanic's per-project fix queue (friction → fix → repair).
4
+ *
5
+ * A "fix" is a rough spot worth repairing — docs/mechanic.md. Entries are
6
+ * project-specific emergent knowledge: discovered constraints, gotchas,
7
+ * tribal knowledge that drifts as the codebase evolves, plus raw smells
8
+ * (scope='smell') awaiting digestion. Distinct from static project knowledge
9
+ * (CLAUDE.md / docs / code structure). Reviewed via /mechanic.
10
+ *
11
+ * Pull-based: agents seed fixes a future spawned chip would have wanted;
12
+ * future chips query the relevant scope at spawn time and skip the discovery
13
+ * they would otherwise repeat. All server work delegates to FixService in
14
+ * @greprag/core; the CLI is a thin HTTP printer + project resolver.
15
+ *
16
+ * Subcommand surface — runFix dispatches:
17
+ * log "<text>" [--scope <s>] [--repaired] open a fix (raw friction);
18
+ * --repaired records a known rule directly
19
+ * list [--all] [--repaired] [--format json] open queue by default;
20
+ * --repaired = resolved rules;
21
+ * --all = tenant-wide census
22
+ * repair <id> "<rule>" [--scope <s>] resolve a fix: record the durable rule + close
23
+ * delete <id> hard-remove a fix (noise / cleanup)
24
+ * search "<query>" [--scope <s>] [--limit N] lexical search across fixes
25
+ * scopes distinct scope labels in use
26
+ *
27
+ * All verbs accept [--project <name>] to target another project's queue.
28
+ * Project resolution: without --project, uses the current cwd's anchor.
29
+ * With --project <name>, hits /v1/inbox/projects to resolve name → projectId
30
+ * (case-insensitive). */
31
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ var desc = Object.getOwnPropertyDescriptor(m, k);
34
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
35
+ desc = { enumerable: true, get: function() { return m[k]; } };
36
+ }
37
+ Object.defineProperty(o, k2, desc);
38
+ }) : (function(o, m, k, k2) {
39
+ if (k2 === undefined) k2 = k;
40
+ o[k2] = m[k];
41
+ }));
42
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
43
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
44
+ }) : function(o, v) {
45
+ o["default"] = v;
46
+ });
47
+ var __importStar = (this && this.__importStar) || (function () {
48
+ var ownKeys = function(o) {
49
+ ownKeys = Object.getOwnPropertyNames || function (o) {
50
+ var ar = [];
51
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
52
+ return ar;
53
+ };
54
+ return ownKeys(o);
55
+ };
56
+ return function (mod) {
57
+ if (mod && mod.__esModule) return mod;
58
+ var result = {};
59
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
60
+ __setModuleDefault(result, mod);
61
+ return result;
62
+ };
63
+ })();
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.runFix = runFix;
66
+ const fs = __importStar(require("fs"));
67
+ const path = __importStar(require("path"));
68
+ const project_anchor_1 = require("../project-anchor");
69
+ const API_URL_DEFAULT = 'https://api.greprag.com';
70
+ // Reserved scope for raw, undigested SMELLS — see docs/lore-smell.md. The CLI's
71
+ // `fix log` (no --repaired) writes here; `fix list` (no --repaired) reads here.
72
+ // Durable readers (`fix list --repaired` / search / scopes) exclude it. The
73
+ // stored value stays 'smell' — the fix CLI maps smell ↔ open-fix at the verb
74
+ // layer, the server is the authority for cross-project reads.
75
+ const SMELL_SCOPE = 'smell';
76
+ // ---------- Config / env --------------------------------------------------
77
+ function loadEnvFile(filePath) {
78
+ try {
79
+ const content = fs.readFileSync(filePath, 'utf-8');
80
+ for (const line of content.split('\n')) {
81
+ const trimmed = line.trim();
82
+ if (!trimmed || trimmed.startsWith('#'))
83
+ continue;
84
+ const eqIdx = trimmed.indexOf('=');
85
+ if (eqIdx < 1)
86
+ continue;
87
+ const key = trimmed.slice(0, eqIdx).trim();
88
+ let value = trimmed.slice(eqIdx + 1).trim();
89
+ if ((value.startsWith('"') && value.endsWith('"')) ||
90
+ (value.startsWith("'") && value.endsWith("'"))) {
91
+ value = value.slice(1, -1);
92
+ }
93
+ if (!process.env[key])
94
+ process.env[key] = value;
95
+ }
96
+ }
97
+ catch { /* file missing — fine */ }
98
+ }
99
+ function getConfig() {
100
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
101
+ if (homeDir)
102
+ loadEnvFile(path.join(homeDir, '.greprag', '.env'));
103
+ if (!process.env.GREPRAG_API_KEY)
104
+ loadEnvFile(path.join(process.cwd(), '.env'));
105
+ return {
106
+ apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT,
107
+ apiKey: process.env.GREPRAG_API_KEY || '',
108
+ };
109
+ }
110
+ async function apiCall(url, apiKey, body) {
111
+ const res = await fetch(url, {
112
+ method: 'POST',
113
+ headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
114
+ body: JSON.stringify(body),
115
+ });
116
+ if (!res.ok)
117
+ throw new Error(`API ${res.status}: ${await res.text()}`);
118
+ return res.json();
119
+ }
120
+ async function apiGet(url, apiKey) {
121
+ const res = await fetch(url, { headers: { 'Authorization': `Bearer ${apiKey}` } });
122
+ if (!res.ok)
123
+ throw new Error(`API ${res.status}: ${await res.text()}`);
124
+ return res.json();
125
+ }
126
+ async function apiDelete(url, apiKey) {
127
+ const res = await fetch(url, {
128
+ method: 'DELETE',
129
+ headers: { 'Authorization': `Bearer ${apiKey}` },
130
+ });
131
+ if (!res.ok)
132
+ throw new Error(`API ${res.status}: ${await res.text()}`);
133
+ return res.json();
134
+ }
135
+ // ---------- Helpers --------------------------------------------------------
136
+ function getFlag(args, flag) {
137
+ const idx = args.indexOf(flag);
138
+ if (idx === -1 || idx + 1 >= args.length)
139
+ return undefined;
140
+ return args[idx + 1];
141
+ }
142
+ function abortNotConfigured() {
143
+ console.error('Not configured. Run: greprag init');
144
+ process.exit(1);
145
+ }
146
+ /** Resolve which project a fix command operates on. --project <name> wins via
147
+ * the tenant's projects registry; otherwise the cwd's anchor decides. */
148
+ async function resolveProject(args, apiUrl, apiKey) {
149
+ const projectArg = getFlag(args, '--project');
150
+ if (!projectArg) {
151
+ const anchor = (0, project_anchor_1.readAnchor)(process.cwd());
152
+ return { projectId: anchor.projectId, projectName: anchor.projectName };
153
+ }
154
+ const r = await apiGet(`${apiUrl}/v1/inbox/projects`, apiKey);
155
+ const needle = projectArg.trim().toLowerCase();
156
+ const match = (r.projects || []).find(p => p.project_name.toLowerCase() === needle);
157
+ if (!match) {
158
+ throw new Error(`project "${projectArg}" not found under this tenant. ` +
159
+ `Register it via 'greprag init' in that directory, then retry.`);
160
+ }
161
+ return { projectId: match.project_id, projectName: match.project_name };
162
+ }
163
+ /** Best-effort session uuid from the harness env (Claude Code exposes
164
+ * CLAUDE_SESSION_ID on hook invocations). Callers can override via
165
+ * --source-session. */
166
+ function readSessionEnv() {
167
+ return process.env.CLAUDE_SESSION_ID || process.env.GREPRAG_SESSION_ID || null;
168
+ }
169
+ // ---------- add (the --repaired path of `fix log`) ------------------------
170
+ async function addCmd(args) {
171
+ const cfg = getConfig();
172
+ if (!cfg.apiKey)
173
+ abortNotConfigured();
174
+ const text = args[0];
175
+ if (!text || text.startsWith('--')) {
176
+ console.error('Usage: greprag fix log "<text>" --repaired --scope <scope> [--project <name>] [--source-session <id>]');
177
+ process.exit(1);
178
+ }
179
+ const scope = getFlag(args, '--scope');
180
+ if (!scope) {
181
+ console.error('Usage: greprag fix log "<text>" --repaired --scope <scope> [--project <name>]');
182
+ process.exit(1);
183
+ }
184
+ const sourceSession = getFlag(args, '--source-session') || readSessionEnv();
185
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
186
+ const result = await apiCall(`${cfg.apiUrl}/v1/fix/${projectId}`, cfg.apiKey, {
187
+ text, scope,
188
+ sourceSessionId: sourceSession,
189
+ projectName,
190
+ });
191
+ if (!result.ok || !result.nodeId)
192
+ throw new Error(result.error || 'add failed');
193
+ console.log(`Added fix [${result.nodeId}] scope=${scope} project=${projectName}`);
194
+ }
195
+ // ---------- smell (the default path of `fix log`) -------------------------
196
+ /** `fix log "<text>"` (no --repaired) → leave a RAW signal for /mechanic to
197
+ * digest. Zero structure by design: no --scope, no trigger. A smell is NOT a
198
+ * durable rule — it's an item awaiting digestion (the advisor decides
199
+ * fix-vs-instantiate, assigns scope + injection trigger). Frictionless capture
200
+ * is the whole point; defer all judgment to digestion. docs/lore-smell.md. */
201
+ async function smellCmd(args) {
202
+ const cfg = getConfig();
203
+ if (!cfg.apiKey)
204
+ abortNotConfigured();
205
+ const text = args[0];
206
+ if (!text || text.startsWith('--')) {
207
+ console.error('Usage: greprag fix log "<text>" [--project <name>]');
208
+ console.error('Leave a raw signal for the Mechanic to digest — a broken mechanism,');
209
+ console.error('a missing guardrail, or a durable truth not yet captured.');
210
+ process.exit(1);
211
+ }
212
+ const sourceSession = getFlag(args, '--source-session') || readSessionEnv();
213
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
214
+ const result = await apiCall(`${cfg.apiUrl}/v1/fix/${projectId}`, cfg.apiKey, { text, scope: SMELL_SCOPE, sourceSessionId: sourceSession, projectName });
215
+ if (!result.ok || !result.nodeId)
216
+ throw new Error(result.error || 'smell failed');
217
+ console.log(`Fix logged [${result.nodeId}] in ${projectName}. Digest via /mechanic.`);
218
+ }
219
+ /** `fix list` (no --repaired) → the raw smell queue awaiting digestion. The
220
+ * only reader that surfaces SMELL_SCOPE entries; durable list/search/scopes
221
+ * hide them. Without --all: the current project only. With --all: every
222
+ * project in the tenant, each row project-annotated (the Mechanic's
223
+ * Phase 0 census — so a backlog in another venture root can't hide). */
224
+ async function smellsCmd(args) {
225
+ const cfg = getConfig();
226
+ if (!cfg.apiKey)
227
+ abortNotConfigured();
228
+ const format = (getFlag(args, '--format') || 'text').toLowerCase();
229
+ if (args.includes('--all')) {
230
+ return smellsAllCmd(cfg, format);
231
+ }
232
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
233
+ const result = await apiGet(`${cfg.apiUrl}/v1/fix/${projectId}/list`, cfg.apiKey);
234
+ if (!result.ok)
235
+ throw new Error(result.error || 'smells failed');
236
+ const rows = (result.fix ?? []).filter(r => r.scope === SMELL_SCOPE);
237
+ if (format === 'json') {
238
+ console.log(JSON.stringify({ project: projectName, smells: rows }, null, 2));
239
+ return;
240
+ }
241
+ if (rows.length === 0) {
242
+ console.log(`No fixes awaiting digestion in ${projectName}.`);
243
+ return;
244
+ }
245
+ console.log(`\n${rows.length} fix${rows.length === 1 ? '' : 'es'} awaiting digestion in ${projectName}:\n`);
246
+ for (const r of rows) {
247
+ const date = r.createdAt ? r.createdAt.slice(0, 10) : '';
248
+ console.log(` [${r.nodeId}] ${date} ${r.text}`);
249
+ }
250
+ console.log(`\nDigest: /mechanic · retire one: greprag fix delete <nodeId>`);
251
+ }
252
+ /** `fix list --all` → tenant-wide smell census. One server call returns every
253
+ * smell across every project; the CLI groups them and stamps the top-level
254
+ * total + byProject summary the Mechanic skill consumes. JSON shape is a
255
+ * stable contract — do not reshape casually. */
256
+ async function smellsAllCmd(cfg, format) {
257
+ const result = await apiGet(`${cfg.apiUrl}/v1/fix/census/smells`, cfg.apiKey);
258
+ if (!result.ok || !result.smells)
259
+ throw new Error(result.error || 'smells census failed');
260
+ // Project server rows onto the published smell shape (drop projectId + any
261
+ // server-internal fields so the JSON contract stays exactly:
262
+ // id, nodeId, text, scope, sourceSessionId, createdAt, project).
263
+ const smells = result.smells.map(s => ({
264
+ id: s.id,
265
+ nodeId: s.nodeId,
266
+ text: s.text,
267
+ scope: s.scope,
268
+ sourceSessionId: s.sourceSessionId,
269
+ createdAt: s.createdAt,
270
+ project: s.project,
271
+ }));
272
+ const total = smells.length;
273
+ const counts = new Map();
274
+ for (const s of smells)
275
+ counts.set(s.project, (counts.get(s.project) ?? 0) + 1);
276
+ const byProject = [...counts.entries()]
277
+ .map(([project, count]) => ({ project, count }))
278
+ .sort((a, b) => b.count - a.count || a.project.localeCompare(b.project));
279
+ if (format === 'json') {
280
+ console.log(JSON.stringify({ total, byProject, smells }, null, 2));
281
+ return;
282
+ }
283
+ if (total === 0) {
284
+ console.log('No fixes awaiting digestion across any project.');
285
+ return;
286
+ }
287
+ console.log(`\n${total} fix${total === 1 ? '' : 'es'} awaiting digestion across ${byProject.length} project${byProject.length === 1 ? '' : 's'}:\n`);
288
+ const grouped = new Map();
289
+ for (const s of smells) {
290
+ if (!grouped.has(s.project))
291
+ grouped.set(s.project, []);
292
+ grouped.get(s.project).push(s);
293
+ }
294
+ for (const { project, count } of byProject) {
295
+ console.log(`${project} (${count}):`);
296
+ for (const r of grouped.get(project) ?? []) {
297
+ const date = r.createdAt ? r.createdAt.slice(0, 10) : '';
298
+ console.log(` [${r.nodeId}] ${date} ${r.text}`);
299
+ }
300
+ console.log('');
301
+ }
302
+ console.log(`Digest: /mechanic · retire one: greprag fix delete <nodeId> --project <name>`);
303
+ }
304
+ // ---------- query (`fix search`) ------------------------------------------
305
+ async function queryCmd(args) {
306
+ const cfg = getConfig();
307
+ if (!cfg.apiKey)
308
+ abortNotConfigured();
309
+ const scope = getFlag(args, '--scope');
310
+ const queryStr = getFlag(args, '--query');
311
+ const limit = parseInt(getFlag(args, '--limit') || '10', 10);
312
+ const format = (getFlag(args, '--format') || 'markdown').toLowerCase();
313
+ if (format !== 'markdown' && format !== 'json') {
314
+ console.error('--format must be markdown or json');
315
+ process.exit(1);
316
+ }
317
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
318
+ const params = new URLSearchParams();
319
+ if (scope)
320
+ params.set('scope', scope);
321
+ if (queryStr)
322
+ params.set('query', queryStr);
323
+ params.set('limit', String(limit));
324
+ const result = await apiGet(`${cfg.apiUrl}/v1/fix/${projectId}?${params.toString()}`, cfg.apiKey);
325
+ const allRows = result.fix;
326
+ if (!result.ok || !allRows)
327
+ throw new Error(result.error || 'query failed');
328
+ // Hide raw smells from durable reads unless the caller explicitly asked for
329
+ // that scope (`--scope smell`), which is a deliberate queue peek.
330
+ const rows = scope ? allRows : allRows.filter(r => r.scope !== SMELL_SCOPE);
331
+ if (format === 'json') {
332
+ console.log(JSON.stringify({
333
+ project: projectName,
334
+ scope: scope ?? null,
335
+ query: queryStr ?? null,
336
+ fix: rows,
337
+ }, null, 2));
338
+ return;
339
+ }
340
+ if (rows.length === 0) {
341
+ const scopeNote = scope ? ` (scope=${scope})` : '';
342
+ const queryNote = queryStr ? ` matching "${queryStr}"` : '';
343
+ console.log(`No fixes in ${projectName}${scopeNote}${queryNote}.`);
344
+ return;
345
+ }
346
+ for (let i = 0; i < rows.length; i++) {
347
+ console.log(`${i + 1}. ${rows[i].text}`);
348
+ }
349
+ }
350
+ // ---------- list (`fix list --repaired`) ----------------------------------
351
+ async function listCmd(args) {
352
+ const cfg = getConfig();
353
+ if (!cfg.apiKey)
354
+ abortNotConfigured();
355
+ const format = (getFlag(args, '--format') || 'text').toLowerCase();
356
+ if (format !== 'text' && format !== 'json' && format !== 'markdown') {
357
+ console.error('--format must be text, markdown, or json');
358
+ process.exit(1);
359
+ }
360
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
361
+ const result = await apiGet(`${cfg.apiUrl}/v1/fix/${projectId}/list`, cfg.apiKey);
362
+ const allRows = result.fix;
363
+ if (!result.ok || !allRows)
364
+ throw new Error(result.error || 'list failed');
365
+ // The durable-review surface — never show raw smells (see smellsCmd).
366
+ const rows = allRows.filter(r => r.scope !== SMELL_SCOPE);
367
+ if (format === 'json') {
368
+ console.log(JSON.stringify({
369
+ project: projectName,
370
+ fix: rows,
371
+ }, null, 2));
372
+ return;
373
+ }
374
+ if (rows.length === 0) {
375
+ console.log(`No fixes recorded in ${projectName} yet.`);
376
+ console.log('Add one: greprag fix log "<text>"');
377
+ return;
378
+ }
379
+ // Group by scope (server already orders scope ASC, createdAt DESC).
380
+ const grouped = new Map();
381
+ for (const f of rows) {
382
+ const scope = f.scope || '(no scope)';
383
+ if (!grouped.has(scope))
384
+ grouped.set(scope, []);
385
+ grouped.get(scope).push(f);
386
+ }
387
+ console.log(`\n${rows.length} fix entr${rows.length === 1 ? 'y' : 'ies'} in ${projectName}:\n`);
388
+ for (const [scope, rows] of grouped) {
389
+ console.log(`## ${scope} (${rows.length})`);
390
+ for (const f of rows) {
391
+ const date = f.createdAt ? f.createdAt.slice(0, 10) : '';
392
+ console.log(` [${f.nodeId}] ${date} ${f.text}`);
393
+ }
394
+ console.log('');
395
+ }
396
+ }
397
+ // ---------- delete --------------------------------------------------------
398
+ async function deleteCmd(args) {
399
+ const cfg = getConfig();
400
+ if (!cfg.apiKey)
401
+ abortNotConfigured();
402
+ const nodeId = args[0];
403
+ if (!nodeId || nodeId.startsWith('--')) {
404
+ console.error('Usage: greprag fix delete <nodeId> [--project <name>]');
405
+ process.exit(1);
406
+ }
407
+ if (!/^[0-9a-f]{8}$/i.test(nodeId)) {
408
+ console.error('nodeId must be 8 hex chars (printed in `greprag fix list`).');
409
+ process.exit(1);
410
+ }
411
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
412
+ const result = await apiDelete(`${cfg.apiUrl}/v1/fix/${projectId}/${nodeId}`, cfg.apiKey);
413
+ if (!result.ok)
414
+ throw new Error(result.error || 'delete failed');
415
+ console.log(`Deleted fix [${nodeId}] from ${projectName}`);
416
+ }
417
+ // ---------- scopes --------------------------------------------------------
418
+ async function scopesCmd(args) {
419
+ const cfg = getConfig();
420
+ if (!cfg.apiKey)
421
+ abortNotConfigured();
422
+ const { projectId, projectName } = await resolveProject(args, cfg.apiUrl, cfg.apiKey);
423
+ const result = await apiGet(`${cfg.apiUrl}/v1/fix/${projectId}/scopes`, cfg.apiKey);
424
+ if (!result.ok || !result.scopes)
425
+ throw new Error(result.error || 'scopes failed');
426
+ // The reserved smell scope is an internal queue, not a durable scope label.
427
+ const scopes = result.scopes.filter(s => s !== SMELL_SCOPE);
428
+ if (scopes.length === 0) {
429
+ console.log(`No scopes in ${projectName} yet.`);
430
+ return;
431
+ }
432
+ for (const s of scopes)
433
+ console.log(s);
434
+ }
435
+ // ---------- Dispatch ------------------------------------------------------
436
+ const FIX_HELP = `greprag fix — the Mechanic's per-project fix queue (friction → fix → repair)
437
+
438
+ USAGE
439
+ greprag fix log "<text>" [--scope <s>] [--repaired] Open a fix (raw friction).
440
+ --repaired records a known rule directly.
441
+ greprag fix list [--all] [--repaired] [--format json] List fixes — open by default;
442
+ --repaired = resolved; --all = tenant-wide.
443
+ greprag fix repair <id> "<rule>" [--scope <s>] Resolve a fix: record the durable rule, close it.
444
+ greprag fix delete <id> Hard-remove a fix (noise / cleanup).
445
+ greprag fix search "<query>" [--scope <s>] Search fixes.
446
+ greprag fix scopes List scope tags in use.
447
+
448
+ All verbs accept [--project <name>] to target another project's queue.
449
+
450
+ NOTES
451
+ • A 'repair' RECORDS the durable rule (kept, browsable via 'fix list --repaired')
452
+ and closes the open fix. To remove a fix without keeping a rule, use 'delete'.
453
+
454
+ Examples:
455
+ greprag fix log "Migrations live at repo root, not packages/api/migrations." --repaired --scope chip-startup
456
+ greprag fix search "where do migrations live" --limit 5
457
+ greprag fix list --repaired
458
+ greprag fix delete a3f2c1d4
459
+ greprag fix scopes`;
460
+ async function runFix(args) {
461
+ const sub = args[0];
462
+ const rest = args.slice(1);
463
+ if (!sub || sub === '--help' || sub === '-h' || sub === 'help') {
464
+ console.log(FIX_HELP);
465
+ return;
466
+ }
467
+ switch (sub) {
468
+ case 'log': {
469
+ // Raw friction → open fix (smell). --repaired → a known durable rule.
470
+ if (rest.includes('--repaired')) {
471
+ return addCmd(rest.filter(a => a !== '--repaired'));
472
+ }
473
+ return smellCmd(rest);
474
+ }
475
+ case 'list': {
476
+ // Open queue by default; --repaired → resolved/durable rules.
477
+ if (rest.includes('--repaired')) {
478
+ return listCmd(rest.filter(a => a !== '--repaired'));
479
+ }
480
+ return smellsCmd(rest);
481
+ }
482
+ case 'repair': {
483
+ // Resolve: record the durable rule (kept) + close the open fix.
484
+ const id = rest[0];
485
+ const rule = rest[1];
486
+ if (!id || !rule) {
487
+ console.error('Usage: greprag fix repair <id> "<durable rule>" [--scope <s>]');
488
+ console.error('A repair records the durable rule (kept) and closes the open fix.');
489
+ console.error('To remove a fix without keeping a rule, use: greprag fix delete <id>');
490
+ process.exit(1);
491
+ }
492
+ let flags = rest.slice(2);
493
+ if (!flags.includes('--scope'))
494
+ flags = [...flags, '--scope', 'general'];
495
+ await addCmd([rule, ...flags]);
496
+ const project = getFlag(flags, '--project');
497
+ return deleteCmd([id, ...(project ? ['--project', project] : [])]);
498
+ }
499
+ case 'delete': {
500
+ return deleteCmd(rest);
501
+ }
502
+ case 'search': {
503
+ const q = rest[0];
504
+ if (!q) {
505
+ console.error('Usage: greprag fix search "<query>" [--scope <s>]');
506
+ process.exit(1);
507
+ }
508
+ return queryCmd(['--query', q, ...rest.slice(1)]);
509
+ }
510
+ case 'scopes': {
511
+ return scopesCmd(rest);
512
+ }
513
+ default:
514
+ console.error(`Unknown fix subcommand: ${sub}\n`);
515
+ console.log(FIX_HELP);
516
+ process.exit(1);
517
+ }
518
+ }
519
+ //# sourceMappingURL=fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"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"}