codetree-claude 1.7.2 → 1.7.3

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.
@@ -1,21 +1,28 @@
1
1
  /**
2
- * Rework detector (R4) — HEURISTIC, labeled. Reads the Claude Code transcript and flags
3
- * assistant turns that are "redone work", attributing that turn's output tokens as rework.
2
+ * Rework detector (R4) — HEURISTIC, labeled + EXPLAINABLE. Reads the Claude Code transcript and
3
+ * flags assistant turns that are "redone work", attributing that turn's output tokens as rework
4
+ * AND recording WHY (a stable `cause` + a short `reason`) so the dashboard can show its evidence.
4
5
  *
5
- * Signals (documented, tunable):
6
- * - error→fix loop: a tool_result error in the immediately preceding turn, then this turn
7
- * edits a file the fix turn is rework.
8
- * - re-edit churn: the 3rd+ edit to the SAME file within a session → rework.
6
+ * Signals (documented, tunable), most-specific cause wins:
7
+ * - test_fix: a FAILING-TEST tool_result in the preceding turn, then this turn edits a file.
8
+ * - error_fix: any other tool_result error in the preceding turn, then this turn edits a file.
9
+ * - re_edit_churn: the 3rd+ edit to the SAME file within a session.
9
10
  *
10
- * Pure + dependency-free so it can be unit-tested with a fixture. Never throws.
11
+ * `cause` is a stable category that is safe to ship to the cloud. `reason` may contain a file name
12
+ * and is for LOCAL display/debug only — it is NEVER uploaded. Pure + dependency-free so it can be
13
+ * unit-tested with a fixture. Never throws.
11
14
  */
15
+ export type ReworkCause = "" | "error_fix" | "test_fix" | "re_edit_churn";
12
16
  export interface ReworkFlag {
13
17
  reworkTurn: boolean;
14
18
  reworkTokens: number;
19
+ cause: ReworkCause;
20
+ reason: string;
15
21
  }
16
22
  export declare const REWORK: {
17
23
  reEditChurnThreshold: number;
18
24
  errorPattern: RegExp;
25
+ testPattern: RegExp;
19
26
  };
20
27
  /** Map of assistant message id → rework flag. Read straight from the transcript path. */
21
28
  export declare function detectRework(transcriptPath: string): Record<string, ReworkFlag>;
@@ -1 +1 @@
1
- {"version":3,"file":"rework.d.ts","sourceRoot":"","sources":["../../src/cloud/rework.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAIF,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAU/E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAgE5E"}
1
+ {"version":3,"file":"rework.d.ts","sourceRoot":"","sources":["../../src/cloud/rework.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,WAAW,GAAG,EAAE,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,MAAM;;;;CAIlB,CAAC;AAKF,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAS/E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAkF5E"}
@@ -2,19 +2,20 @@ import { readFileSync, existsSync } from "node:fs";
2
2
  export const REWORK = {
3
3
  reEditChurnThreshold: 3, // the Nth+ edit to the same file counts as rework
4
4
  errorPattern: /\b(error|exception|traceback|failed|assertionerror|test failed|cannot find|undefined is not)\b/i,
5
+ testPattern: /\b(tests? (failed|failing)|assertion ?error|\d+ (passing|failing)|\bFAIL\b|✕)\b/i,
5
6
  };
6
7
  const num = (v) => (typeof v === "number" && isFinite(v) ? v : 0);
8
+ const base = (p) => p.split(/[\\/]/).pop() || p;
7
9
  /** Map of assistant message id → rework flag. Read straight from the transcript path. */
8
10
  export function detectRework(transcriptPath) {
9
- const byId = {};
10
11
  if (!transcriptPath || !existsSync(transcriptPath))
11
- return byId;
12
+ return {};
12
13
  let raw;
13
14
  try {
14
15
  raw = readFileSync(transcriptPath, "utf-8");
15
16
  }
16
17
  catch {
17
- return byId;
18
+ return {};
18
19
  }
19
20
  return detectReworkFromText(raw);
20
21
  }
@@ -24,6 +25,7 @@ export function detectReworkFromText(raw) {
24
25
  const lines = raw.split("\n").filter((l) => l.trim().length > 0);
25
26
  const editsByFile = new Map();
26
27
  let pendingError = false; // a tool_result error seen since the last assistant turn
28
+ let pendingTest = false; // ...and that error was a failing test
27
29
  for (const line of lines) {
28
30
  let obj;
29
31
  try {
@@ -40,10 +42,13 @@ export function detectReworkFromText(raw) {
40
42
  for (const block of content) {
41
43
  if (block?.type !== "tool_result")
42
44
  continue;
43
- const isErr = block?.is_error === true ||
44
- REWORK.errorPattern.test(typeof block?.content === "string" ? block.content : JSON.stringify(block?.content ?? ""));
45
- if (isErr)
45
+ const text = typeof block?.content === "string" ? block.content : JSON.stringify(block?.content ?? "");
46
+ const isErr = block?.is_error === true || REWORK.errorPattern.test(text);
47
+ if (isErr) {
46
48
  pendingError = true;
49
+ if (REWORK.testPattern.test(text))
50
+ pendingTest = true;
51
+ }
47
52
  }
48
53
  }
49
54
  continue;
@@ -68,19 +73,32 @@ export function detectReworkFromText(raw) {
68
73
  }
69
74
  }
70
75
  }
71
- let rework = false;
72
- // error→fix loop: previous turn errored and this turn edits something.
73
- if (pendingError && edited.length > 0)
74
- rework = true;
75
- // re-edit churn: 3rd+ edit to the same file.
76
+ // Tally re-edit churn for every file touched, remembering the worst offender this turn.
77
+ let churnFile = "";
78
+ let churnN = 0;
76
79
  for (const f of edited) {
77
- const n = (editsByFile.get(f) ?? 0) + 1;
78
- editsByFile.set(f, n);
79
- if (n >= REWORK.reEditChurnThreshold)
80
- rework = true;
80
+ const c = (editsByFile.get(f) ?? 0) + 1;
81
+ editsByFile.set(f, c);
82
+ if (c >= REWORK.reEditChurnThreshold && c > churnN) {
83
+ churnN = c;
84
+ churnFile = f;
85
+ }
86
+ }
87
+ // Attribute to exactly ONE cause; most specific wins (test > error > churn).
88
+ let cause = "";
89
+ let reason = "";
90
+ if (pendingError && edited.length > 0) {
91
+ cause = pendingTest ? "test_fix" : "error_fix";
92
+ reason = `${pendingTest ? "test failure" : "tool error"} → edited ${base(edited[0])}`;
93
+ }
94
+ else if (churnFile) {
95
+ cause = "re_edit_churn";
96
+ reason = `${churnN}× edits to ${base(churnFile)} this session`;
81
97
  }
82
- byId[id] = { reworkTurn: rework, reworkTokens: rework ? outputTokens : 0 };
98
+ const rework = cause !== "";
99
+ byId[id] = { reworkTurn: rework, reworkTokens: rework ? outputTokens : 0, cause, reason };
83
100
  pendingError = false; // consumed by this assistant turn
101
+ pendingTest = false;
84
102
  }
85
103
  return byId;
86
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rework.js","sourceRoot":"","sources":["../../src/cloud/rework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rework.js","sourceRoot":"","sources":["../../src/cloud/rework.ts"],"names":[],"mappings":"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"}
package/dist/hook/stop.js CHANGED
@@ -51,7 +51,7 @@ async function main() {
51
51
  tokensInput: t.tokensInput, tokensOutput: t.tokensOutput,
52
52
  tokensCacheRead: t.tokensCacheRead, tokensCacheCreation: t.tokensCacheCreation,
53
53
  tokensSaved: 0, reworkTurn: rw?.reworkTurn ?? false, reworkTokens: rw?.reworkTokens ?? 0,
54
- tool: "claude-code",
54
+ reworkCause: rw?.cause ?? "", tool: "claude-code",
55
55
  });
56
56
  }
57
57
  state.sessions[session_id] = { lines: totalLines };
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hook/stop.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AASnF,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,KAAK,UAAU,IAAI;IACjB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,GAAG,IAAI,KAAK,CAAC;IAEtD,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACnD,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,qDAAqD;IAExG,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAE5F,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;IAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,qFAAqF;IACrF,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,6CAA6C;QAC3F,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO;gBAChF,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY;gBACxD,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;gBAC9E,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,IAAI,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,IAAI,CAAC;gBACxF,IAAI,EAAE,aAAa;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC;IAED,2FAA2F;IAC3F,sFAAsF;IACtF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAmC,CAAC;QACtF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,oBAAoB,IAAI,KAAK,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1C,4FAA4F;QAC5F,2FAA2F;QAC3F,6FAA6F;QAC7F,0FAA0F;QAC1F,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QACnE,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QAC5D,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAAE,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,UAAU,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,GAAG,UAAU,QAAQ,QAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAChG,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI,EAAE,OAAO;gBACxD,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU;gBACxD,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU;aACtF,CAAC,CAAC;YACH,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC/B,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;YAC3B,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED,2FAA2F;IAC3F,8FAA8F;IAC9F,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hook/stop.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codetree-claude",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "description": "MCP server & CLI: codebase index + cache for Claude Code, Cursor, OpenAI Codex, Google Antigravity/Gemini. Model Context Protocol tools (codetree_read, codetree_search, …), hooks on Claude, rules on other IDEs. Token savings, SQLite index, symbol search, session memory.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",