openwolf-enhanced 1.20.3 → 1.20.5
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/CHANGELOG.md +68 -0
- package/dist/dashboard/assets/{AISuggestions-BtMQCJB4.js → AISuggestions-Dm_f2OHb.js} +1 -1
- package/dist/dashboard/assets/{ActivityLog-D5KzYozs.js → ActivityLog-DiY0oo9R.js} +1 -1
- package/dist/dashboard/assets/{ActivityTimeline-DH4ymYtr.js → ActivityTimeline-odPqAaYW.js} +1 -1
- package/dist/dashboard/assets/{AnatomyBrowser-za6ErXCM.js → AnatomyBrowser-B6Go-DD3.js} +1 -1
- package/dist/dashboard/assets/{BugLog-CXV6L77e.js → BugLog-BWVi5CzY.js} +1 -1
- package/dist/dashboard/assets/{CerebrumViewer-DTgixC_R.js → CerebrumViewer-CaDnNGTq.js} +1 -1
- package/dist/dashboard/assets/{CronStatus-KhQ9cskm.js → CronStatus-CnXxqlV8.js} +1 -1
- package/dist/dashboard/assets/{DesignQC-CD8HNcqm.js → DesignQC-B6yXcuuu.js} +1 -1
- package/dist/dashboard/assets/{MemoryViewer-D_WFGOmr.js → MemoryViewer-Mw5PCX7m.js} +1 -1
- package/dist/dashboard/assets/{NativeMemory-CWefTMyK.js → NativeMemory-CQFSOct8.js} +1 -1
- package/dist/dashboard/assets/{ProjectOverview-BulSsPIc.js → ProjectOverview-DO5oObhX.js} +1 -1
- package/dist/dashboard/assets/{ProjectsAggregate-BXs-u6U4.js → ProjectsAggregate-BGUuQlG_.js} +1 -1
- package/dist/dashboard/assets/{StatusBadge-DvHPIQaW.js → StatusBadge-ItJ4m0Hc.js} +1 -1
- package/dist/dashboard/assets/{TokenUsage-DYn_73ci.js → TokenUsage-BIHfezUr.js} +1 -1
- package/dist/dashboard/assets/{index-KRx81wJa.js → index-DVQgnpE9.js} +3 -3
- package/dist/dashboard/index.html +1 -1
- package/dist/hooks/post-bash.js +28 -7
- package/dist/hooks/post-read.js +4 -2
- package/dist/hooks/post-write.js +22 -13
- package/dist/hooks/pre-read.js +4 -2
- package/dist/hooks/pre-write.js +20 -3
- package/dist/hooks/shared.js +36 -3
- package/dist/src/cli/doctor-cmd.js +28 -1
- package/dist/src/cli/doctor-cmd.js.map +1 -1
- package/dist/src/cli/index.js +2 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/hooks/post-bash.js +28 -7
- package/dist/src/hooks/post-bash.js.map +1 -1
- package/dist/src/hooks/post-read.js +4 -2
- package/dist/src/hooks/post-read.js.map +1 -1
- package/dist/src/hooks/post-write.js +22 -13
- package/dist/src/hooks/post-write.js.map +1 -1
- package/dist/src/hooks/pre-read.js +4 -2
- package/dist/src/hooks/pre-read.js.map +1 -1
- package/dist/src/hooks/pre-write.js +20 -3
- package/dist/src/hooks/pre-write.js.map +1 -1
- package/dist/src/hooks/shared.js +36 -3
- package/dist/src/hooks/shared.js.map +1 -1
- package/dist/src/utils/maintenance.js +144 -10
- package/dist/src/utils/maintenance.js.map +1 -1
- package/dist/src/utils/recall.js +3 -3
- package/dist/src/utils/recall.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-DVQgnpE9.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="./assets/index-Cr3yWM5G.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
package/dist/hooks/post-bash.js
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { getWolfDir, ensureWolfDir, getCaptureConfig, redactSecrets, isFileWritingCommand, isNotableCommand, tailWithinBytes, timeShort, readStdin, withLock, readJSON, writeJSON, } from "./shared.js";
|
|
4
|
+
// PostToolUse:Bash — two jobs.
|
|
5
|
+
//
|
|
6
|
+
// 1. Count file-writing shell commands into the session tracker. post-write.ts only matches
|
|
7
|
+
// Write|Edit|MultiEdit, so edits made through the shell were invisible to it and the end-of-turn
|
|
8
|
+
// reminders stayed silent for a session that worked that way. [bug-149]
|
|
9
|
+
// 2. Opt-in passive capture of notable shell activity into .wolf/activity.log: what commands ran
|
|
10
|
+
// (commits, installs, tests, builds, deploys) and which failed. The log feeds the session-start
|
|
11
|
+
// resume digest. Off unless openwolf.capture.enabled.
|
|
12
|
+
//
|
|
13
|
+
// (1) runs regardless of the capture setting — see the note at the gate below.
|
|
14
|
+
/**
|
|
15
|
+
* Does this shell segment invoke the openwolf CLI in COMMAND position (optionally behind
|
|
16
|
+
* `VAR=value` env prefixes and a path)? Matching the command position rather than the bare word
|
|
17
|
+
* keeps the write counter alive in sessions that merely mention an openwolf path. [bug-149]
|
|
18
|
+
*
|
|
19
|
+
* The env-prefix group requires the trailing `\s+` on purpose. With `\s*` leading each iteration
|
|
20
|
+
* instead, `\S*` and the following iteration could split the SAME token in exponentially many
|
|
21
|
+
* ways: a ~70-character segment like `A=a=a=a=…` backtracked for minutes, and this hook runs on
|
|
22
|
+
* every Bash call, so it blocked the agent. Demanding whitespace after each assignment — which is
|
|
23
|
+
* how shell env prefixes actually work — makes the boundary unambiguous and the match linear.
|
|
24
|
+
*/
|
|
25
|
+
export function segmentInvokesOpenwolf(seg) {
|
|
26
|
+
return /^\s*(?:[A-Za-z_]\w*=\S*\s+)*(?:\S*\/)?openwolf(?:\s|$)/.test(seg);
|
|
27
|
+
}
|
|
4
28
|
// Read Claude Code's Bash tool_response and decide if the command failed. Shapes vary across
|
|
5
29
|
// versions, so we probe a few fields and fall back to "unknown" (treated as success, not error).
|
|
6
30
|
function classifyOutcome(resp) {
|
|
@@ -12,10 +36,9 @@ function classifyOutcome(resp) {
|
|
|
12
36
|
}
|
|
13
37
|
if (r.interrupted === true || r.is_error === true || r.isError === true)
|
|
14
38
|
return "error";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return "error";
|
|
39
|
+
// NOTE: no "stderr but no stdout" heuristic — plenty of successful commands write only to
|
|
40
|
+
// stderr (git checkout progress, curl -v, warnings). It misclassified them as failures,
|
|
41
|
+
// undercounting bash_writes and mislabeling activity.log entries. Explicit signals only.
|
|
19
42
|
}
|
|
20
43
|
if (typeof resp === "string" && /(^|\s)(error|failed|command not found)\b|exit code [1-9]/i.test(resp)) {
|
|
21
44
|
return "error";
|
|
@@ -43,9 +66,7 @@ async function main() {
|
|
|
43
66
|
// COMMAND position of each shell segment, not the whole string — the old `\bopenwolf\b` skipped
|
|
44
67
|
// every command that merely mentioned an openwolf PATH, which made the write counter blind for
|
|
45
68
|
// exactly the sessions that work on an openwolf checkout.
|
|
46
|
-
const invokesOpenwolf = cmd
|
|
47
|
-
.split(/&&|\|\||[;|]/)
|
|
48
|
-
.some((seg) => /^(?:\s*[A-Za-z_]\w*=\S*)*\s*(?:\S*\/)?openwolf(?:\s|$)/.test(seg));
|
|
69
|
+
const invokesOpenwolf = cmd.split(/&&|\|\||[;|]/).some(segmentInvokesOpenwolf);
|
|
49
70
|
if (invokesOpenwolf) {
|
|
50
71
|
process.exit(0);
|
|
51
72
|
return;
|
package/dist/hooks/post-read.js
CHANGED
|
@@ -23,8 +23,10 @@ async function main() {
|
|
|
23
23
|
const normalizedFile = normalizePath(filePath);
|
|
24
24
|
// Skip tracking for .wolf/ internal files — consistent with pre-read
|
|
25
25
|
const projectDir = normalizePath(process.env.CLAUDE_PROJECT_DIR || process.cwd());
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Separator required after the root — see pre-read (sibling-prefix directories, e.g.
|
|
27
|
+
// /root/orderflow2, must not count as inside /root/orderflow).
|
|
28
|
+
const relToProject = normalizedFile.startsWith(projectDir + "/")
|
|
29
|
+
? normalizedFile.slice(projectDir.length + 1)
|
|
28
30
|
: "";
|
|
29
31
|
// Don't track reads of files outside the project root (upstream #56). relToProject is ""
|
|
30
32
|
// both when the path is outside projectDir and when it equals the root itself — neither
|
package/dist/hooks/post-write.js
CHANGED
|
@@ -450,15 +450,17 @@ function detectFixPattern(oldStr, newStr, ext, fileLabel) {
|
|
|
450
450
|
fix: `Added async modifier`,
|
|
451
451
|
};
|
|
452
452
|
}
|
|
453
|
-
// --- Type
|
|
453
|
+
// --- Type assertion fix ---
|
|
454
|
+
// Only an added `as`-assertion counts. The old second branch (`": "` newly appearing in a
|
|
455
|
+
// small edit) fired on adding ANY object property or label and flooded the buglog with
|
|
456
|
+
// fake "Type error" entries.
|
|
454
457
|
if (ext === ".ts" || ext === ".tsx") {
|
|
455
|
-
if (
|
|
456
|
-
(newStr.includes(": ") && !oldStr.includes(": ") && oldLines.length <= 3)) {
|
|
458
|
+
if (newStr.includes(" as ") && !oldStr.includes(" as ")) {
|
|
457
459
|
return {
|
|
458
460
|
category: "type-fix",
|
|
459
461
|
summary: `Type error`,
|
|
460
|
-
rootCause: `Missing or incorrect type
|
|
461
|
-
fix: `Added type assertion
|
|
462
|
+
rootCause: `Missing or incorrect type assertion`,
|
|
463
|
+
fix: `Added type assertion`,
|
|
462
464
|
context: extractChangedLines(oldStr, newStr),
|
|
463
465
|
};
|
|
464
466
|
}
|
|
@@ -494,15 +496,22 @@ function tokenizeCode(code) {
|
|
|
494
496
|
return code.replace(/[^\w$]/g, " ").split(/\s+/).filter(t => t.length > 0);
|
|
495
497
|
}
|
|
496
498
|
function findOperatorChange(oldStr, newStr) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
}
|
|
499
|
+
// Tokenize operators longest-first instead of substring-testing: `"===".includes("==")` is true,
|
|
500
|
+
// so the old check could never see a `===` → `==` (or `!==` → `!=`) change — the most classic
|
|
501
|
+
// operator bug of them all.
|
|
502
|
+
const extractOps = (s) => {
|
|
503
|
+
const counts = new Map();
|
|
504
|
+
for (const m of s.match(/===|!==|==|!=|>=|<=|>>|<<|&&|\|\||\?\?/g) ?? []) {
|
|
505
|
+
counts.set(m, (counts.get(m) ?? 0) + 1);
|
|
505
506
|
}
|
|
507
|
+
return counts;
|
|
508
|
+
};
|
|
509
|
+
const oldOps = extractOps(oldStr);
|
|
510
|
+
const newOps = extractOps(newStr);
|
|
511
|
+
const removed = [...oldOps.keys()].filter((op) => (newOps.get(op) ?? 0) < oldOps.get(op));
|
|
512
|
+
const added = [...newOps.keys()].filter((op) => (oldOps.get(op) ?? 0) < newOps.get(op));
|
|
513
|
+
if (removed.length === 1 && added.length === 1) {
|
|
514
|
+
return { old: removed[0], new: added[0] };
|
|
506
515
|
}
|
|
507
516
|
return null;
|
|
508
517
|
}
|
package/dist/hooks/pre-read.js
CHANGED
|
@@ -30,8 +30,10 @@ async function main() {
|
|
|
30
30
|
// Skip tracking for .wolf/ internal files — they're infrastructure, not project files.
|
|
31
31
|
// Counting them inflates anatomy miss rates since .wolf/ is excluded from anatomy scanning.
|
|
32
32
|
const projectDir = normalizePath(process.env.CLAUDE_PROJECT_DIR || process.cwd());
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// Require the path SEPARATOR after the root — a bare startsWith(projectDir) also matched
|
|
34
|
+
// sibling directories sharing the prefix (/root/orderflow2 counted as inside /root/orderflow).
|
|
35
|
+
const relToProject = normalizedFile.startsWith(projectDir + "/")
|
|
36
|
+
? normalizedFile.slice(projectDir.length + 1)
|
|
35
37
|
: "";
|
|
36
38
|
// Don't track files outside the project root (upstream #56).
|
|
37
39
|
if (!relToProject) {
|
package/dist/hooks/pre-write.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import { getWolfDir, ensureWolfDir, readMarkdown, readStdin, readBugLog } from "./shared.js";
|
|
3
|
+
import { getWolfDir, ensureWolfDir, readJSON, writeJSON, readMarkdown, readStdin, readBugLog, withLock } from "./shared.js";
|
|
4
4
|
async function main() {
|
|
5
5
|
ensureWolfDir();
|
|
6
6
|
const wolfDir = getWolfDir();
|
|
@@ -24,7 +24,20 @@ async function main() {
|
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
// 1. Cerebrum Do-Not-Repeat check
|
|
27
|
-
checkCerebrum(wolfDir, allContent);
|
|
27
|
+
const cerebrumWarnings = checkCerebrum(wolfDir, allContent);
|
|
28
|
+
// Record fired warnings in the session tracker — the field existed since day one but nothing
|
|
29
|
+
// ever incremented it, so the ledger/dashboard always showed 0.
|
|
30
|
+
if (cerebrumWarnings > 0) {
|
|
31
|
+
try {
|
|
32
|
+
const sessionFile = path.join(wolfDir, "hooks", "_session.json");
|
|
33
|
+
withLock(sessionFile, () => {
|
|
34
|
+
const session = readJSON(sessionFile, {});
|
|
35
|
+
session.cerebrum_warnings = (session.cerebrum_warnings ?? 0) + cerebrumWarnings;
|
|
36
|
+
writeJSON(sessionFile, session);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch { /* best-effort */ }
|
|
40
|
+
}
|
|
28
41
|
// 2. Bug log: search for similar past bugs when editing code
|
|
29
42
|
// This fires when Claude is about to edit a file — if the edit looks like a fix
|
|
30
43
|
// (changing error handling, modifying catch blocks, etc.), check the bug log
|
|
@@ -37,9 +50,10 @@ function checkCerebrum(wolfDir, content) {
|
|
|
37
50
|
const cerebrumContent = readMarkdown(path.join(wolfDir, "cerebrum.md"));
|
|
38
51
|
const doNotRepeatSection = cerebrumContent.split("## Do-Not-Repeat")[1];
|
|
39
52
|
if (!doNotRepeatSection)
|
|
40
|
-
return;
|
|
53
|
+
return 0;
|
|
41
54
|
const entries = doNotRepeatSection.split("## ")[0];
|
|
42
55
|
const lines = entries.split("\n").filter((l) => l.trim().startsWith("[") || l.trim().startsWith("-"));
|
|
56
|
+
let fired = 0;
|
|
43
57
|
for (const line of lines) {
|
|
44
58
|
const trimmed = line.trim().replace(/^[-*]\s*/, "").replace(/^\[[\d-]+\]\s*/, "");
|
|
45
59
|
if (!trimmed)
|
|
@@ -59,11 +73,14 @@ function checkCerebrum(wolfDir, content) {
|
|
|
59
73
|
const regex = new RegExp(`\\b${pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`, "i");
|
|
60
74
|
if (regex.test(content)) {
|
|
61
75
|
process.stderr.write(`⚠️ OpenWolf cerebrum warning: "${trimmed}" — check your code before proceeding.\n`);
|
|
76
|
+
fired++;
|
|
77
|
+
break; // one warning per Do-Not-Repeat entry is enough
|
|
62
78
|
}
|
|
63
79
|
}
|
|
64
80
|
catch { }
|
|
65
81
|
}
|
|
66
82
|
}
|
|
83
|
+
return fired;
|
|
67
84
|
}
|
|
68
85
|
// Common words that appear in most code — must be excluded from similarity matching
|
|
69
86
|
const STOP_WORDS = new Set([
|
package/dist/hooks/shared.js
CHANGED
|
@@ -12,9 +12,28 @@ export function nativeMemoryDir(projectRoot) {
|
|
|
12
12
|
if (override)
|
|
13
13
|
return fs.existsSync(override) ? override : null;
|
|
14
14
|
const root = projectRoot || process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
15
|
+
const base = path.join(os.homedir(), ".claude", "projects");
|
|
15
16
|
const slug = root.replace(/\//g, "-");
|
|
16
|
-
const dir = path.join(
|
|
17
|
-
|
|
17
|
+
const dir = path.join(base, slug, "memory");
|
|
18
|
+
if (fs.existsSync(dir))
|
|
19
|
+
return dir;
|
|
20
|
+
// The exact slugging Claude Code uses varies for paths with dots/underscores — the plain
|
|
21
|
+
// slash→dash guess above misses those and native memory silently vanished from recall. Fall
|
|
22
|
+
// back to matching any project dir whose name equals the root once BOTH are canonicalized
|
|
23
|
+
// (every non-alphanumeric run → "-"). Exact guess still wins; this only runs on a miss.
|
|
24
|
+
const canon = (s) => s.replace(/[^A-Za-z0-9]+/g, "-");
|
|
25
|
+
const want = canon(root);
|
|
26
|
+
try {
|
|
27
|
+
for (const name of fs.readdirSync(base)) {
|
|
28
|
+
if (canon(name) === want) {
|
|
29
|
+
const candidate = path.join(base, name, "memory");
|
|
30
|
+
if (fs.existsSync(candidate))
|
|
31
|
+
return candidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch { /* no projects dir */ }
|
|
36
|
+
return null;
|
|
18
37
|
}
|
|
19
38
|
export function getWolfDir() {
|
|
20
39
|
// Prefer an explicit project dir so hooks work even if CWD changes during a session.
|
|
@@ -983,11 +1002,25 @@ export function countSemanticEntries(wolfDir) {
|
|
|
983
1002
|
return 0;
|
|
984
1003
|
}
|
|
985
1004
|
}
|
|
1005
|
+
// Matches a <private> region. The second alternative is the fail-closed half: an opening tag with
|
|
1006
|
+
// no matching </private> swallows everything to end-of-input. Without it a single typo'd or
|
|
1007
|
+
// forgotten closing tag silently published the whole rest of the file — into the injected resume
|
|
1008
|
+
// digest, into `recall` output, into the semantic index, and (via blocksFor) into `openwolf push`,
|
|
1009
|
+
// which sends candidates OFF the machine. An unclosed marker must never mean "not private".
|
|
1010
|
+
const PRIVATE_RE = /<private>[\s\S]*?<\/private>|<private>[\s\S]*$/gi;
|
|
986
1011
|
// Remove <private>…</private> blocks (case-insensitive, spanning newlines). Content wrapped
|
|
987
1012
|
// this way in a knowledge file is kept out of the injected resume digest and out of `recall`
|
|
988
1013
|
// results — a lightweight way to note secrets/sensitive context without leaking it into the LLM.
|
|
989
1014
|
export function stripPrivate(text) {
|
|
990
|
-
return text.replace(
|
|
1015
|
+
return text.replace(PRIVATE_RE, "");
|
|
1016
|
+
}
|
|
1017
|
+
/**
|
|
1018
|
+
* Same redaction, but every non-newline character is replaced by a space instead of the region
|
|
1019
|
+
* being deleted. Callers that report line numbers (recall, citations) need the line count to stay
|
|
1020
|
+
* identical, otherwise every citation after a private block points at the wrong line.
|
|
1021
|
+
*/
|
|
1022
|
+
export function blankPrivate(text) {
|
|
1023
|
+
return text.replace(PRIVATE_RE, (m) => m.replace(/[^\n]/g, ""));
|
|
991
1024
|
}
|
|
992
1025
|
// Structured session-summary scaffold written under each new session header in memory.md.
|
|
993
1026
|
// An HTML comment → invisible in rendered markdown (no clutter), but a clear prompt for the
|
|
@@ -2,7 +2,7 @@ import * as fs from "node:fs";
|
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { findProjectRoot } from "../scanner/project-root.js";
|
|
4
4
|
import { readRegistry, getRegistryPath } from "./registry.js";
|
|
5
|
-
import { getRetention, footprint, humanBytes, compactLedger, consolidateMemory, dedupeAndCapBuglog, pruneBackups, cleanTmp, rotateDaemonLog, dirSize, suggestIgnores, nativeMemoryHealth, findDuplicateEntries, } from "../utils/maintenance.js";
|
|
5
|
+
import { getRetention, footprint, humanBytes, compactLedger, consolidateMemory, dedupeAndCapBuglog, pruneBackups, cleanTmp, rotateDaemonLog, dirSize, suggestIgnores, nativeMemoryHealth, findDuplicateEntries, repairNativeMemoryIndex, } from "../utils/maintenance.js";
|
|
6
6
|
import { nativeMemoryDir } from "../hooks/shared.js";
|
|
7
7
|
// `openwolf doctor` — daemon-independent .wolf/ health report + compaction.
|
|
8
8
|
export async function doctorCommand(opts) {
|
|
@@ -73,6 +73,33 @@ export async function doctorCommand(opts) {
|
|
|
73
73
|
console.log(` ⚠ ${h.deadLinks.length} dead index link(s) → missing file: ${h.deadLinks.slice(0, 3).join(", ")}${h.deadLinks.length > 3 ? "…" : ""}`);
|
|
74
74
|
if (h.staleCount)
|
|
75
75
|
console.log(` · ${h.staleCount} topic files untouched in 90+ days`);
|
|
76
|
+
// --fix-index turns that orphan warning into an action. Opt-in on purpose: MEMORY.md is
|
|
77
|
+
// injected into context every session and only its first 200 lines load, so growing it is a
|
|
78
|
+
// trade the user has to make knowingly.
|
|
79
|
+
if (opts.fixIndex && h.orphanCount) {
|
|
80
|
+
const days = Number(opts.indexDays ?? 90) || 90;
|
|
81
|
+
const rep = repairNativeMemoryIndex(nd, { withinDays: days, dryRun: !!opts.dryRun });
|
|
82
|
+
if (!rep.added.length) {
|
|
83
|
+
console.log(` · --fix-index: nothing to add — all ${h.orphanCount} unindexed file(s) are older than ${days}d (raise with --index-days)`);
|
|
84
|
+
}
|
|
85
|
+
else if (rep.wrote) {
|
|
86
|
+
console.log(` ✓ --fix-index: appended ${rep.added.length} entr${rep.added.length === 1 ? "y" : "ies"} to MEMORY.md`);
|
|
87
|
+
for (const a of rep.added.slice(0, 5))
|
|
88
|
+
console.log(` ${a.line.slice(0, 110)}`);
|
|
89
|
+
if (rep.added.length > 5)
|
|
90
|
+
console.log(` … and ${rep.added.length - 5} more`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.log(` · --fix-index (dry run): would append ${rep.added.length} entr${rep.added.length === 1 ? "y" : "ies"}`);
|
|
94
|
+
}
|
|
95
|
+
if (rep.skippedBudget)
|
|
96
|
+
console.log(` · ${rep.skippedBudget} more would not fit — only the first 200 index lines load at session start`);
|
|
97
|
+
if (rep.skippedStale)
|
|
98
|
+
console.log(` · ${rep.skippedStale} unindexed file(s) older than ${days}d left out — reach them with \`openwolf recall\``);
|
|
99
|
+
}
|
|
100
|
+
else if (h.orphanCount && !opts.fixIndex) {
|
|
101
|
+
console.log(` · run \`openwolf doctor --fix-index\` to append the recent ones to MEMORY.md`);
|
|
102
|
+
}
|
|
76
103
|
}
|
|
77
104
|
}
|
|
78
105
|
catch { /* native memory unreadable — skip */ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-cmd.js","sourceRoot":"","sources":["../../../src/cli/doctor-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"doctor-cmd.js","sourceRoot":"","sources":["../../../src/cli/doctor-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQrD,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAgB;IAClD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEhD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEjC,2BAA2B;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,kFAAkF;IAClF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5F,MAAM,IAAI,GAAG,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;gBAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1F,CAAC;YAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,gCAAgC,eAAe,EAAE,GAAG,CAAC,CAAC;YACzG,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;YACtJ,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,MAAM,6CAA6C,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAE9C,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,iBAAiB,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,UAAU,WAAW,CAAC,CAAC,YAAY,cAAc,CAAC,CAAC;YACpJ,IAAI,CAAC,CAAC,mBAAmB;gBACvB,OAAO,CAAC,GAAG,CAAC,gHAAgH,CAAC,CAAC;YAChI,IAAI,CAAC,CAAC,WAAW;gBACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,mGAAmG,CAAC,CAAC;YACvI,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM;gBACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,uCAAuC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxJ,IAAI,CAAC,CAAC,UAAU;gBACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,oCAAoC,CAAC,CAAC;YAEvE,wFAAwF;YACxF,4FAA4F;YAC5F,wCAAwC;YACxC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,uBAAuB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,WAAW,qCAAqC,IAAI,6BAA6B,CAAC,CAAC;gBAC5I,CAAC;qBAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,KAAK,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC;oBACtH,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACpF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,2CAA2C,GAAG,CAAC,KAAK,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzH,CAAC;gBACD,IAAI,GAAG,CAAC,aAAa;oBACnB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,aAAa,4EAA4E,CAAC,CAAC;gBACpH,IAAI,GAAG,CAAC,YAAY;oBAClB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,iCAAiC,IAAI,kDAAkD,CAAC,CAAC;YAChI,CAAC;iBAAM,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IAEjD,yEAAyE;IACzE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,gDAAgD,KAAK,CAAC,MAAM,qCAAqC,CAAC,CAAC;YAC/G,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;IAElD,oFAAoF;IACpF,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;YACxF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;IAEhD,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,OAAO,GAAoB;QAC/B,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC;QAC3B,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,6BAA6B,CAAC;QAC7D,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC;QACnD,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;QACvC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,oBAAoB,CAAC;QAClD,QAAQ,CAAC,OAAO,CAAC;KAClB,CAAC;IAEF,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,OAAO;YAAE,SAAS,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,WAAW,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnH,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -138,6 +138,8 @@ export function createProgram() {
|
|
|
138
138
|
.command("doctor")
|
|
139
139
|
.description("Report .wolf/ health & footprint, then compact (daemon-independent)")
|
|
140
140
|
.option("--dry-run", "Only report sizes/warnings; write nothing")
|
|
141
|
+
.option("--fix-index", "Append unindexed native-memory topic files to MEMORY.md so they surface on resume")
|
|
142
|
+
.option("--index-days <n>", "With --fix-index: only add files touched in the last n days (default 90)", "90")
|
|
141
143
|
.action(async (opts) => {
|
|
142
144
|
const { doctorCommand } = await import("./doctor-cmd.js");
|
|
143
145
|
await doctorCommand(opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,mDAAmD,CAAC;SAChE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,SAAS,EAAE,mDAAmD,CAAC;SACtE,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAEpC,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxD,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1D,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAEvC,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACnD,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACpD,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEL,yBAAyB;IACzB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;SACxE,MAAM,CAAC,kBAAkB,EAAE,qDAAqD,CAAC;SACjF,MAAM,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAA4D,EAAE,EAAE;QAC7E,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,0FAA0F,CAAC;SACvG,MAAM,CAAC,KAAK,EAAE,MAAe,EAAE,EAAE;QAChC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACvD,cAAc,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;SAC1D,MAAM,CAAC,eAAe,EAAE,2CAA2C,EAAE,IAAI,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,gBAAgB,EAAE,+BAA+B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAqG,EAAE,EAAE;QAClJ,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,yBAAyB;IACzB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { getWolfDir, ensureWolfDir, getCaptureConfig, redactSecrets, isFileWritingCommand, isNotableCommand, tailWithinBytes, timeShort, readStdin, withLock, readJSON, writeJSON, } from "./shared.js";
|
|
4
|
+
// PostToolUse:Bash — two jobs.
|
|
5
|
+
//
|
|
6
|
+
// 1. Count file-writing shell commands into the session tracker. post-write.ts only matches
|
|
7
|
+
// Write|Edit|MultiEdit, so edits made through the shell were invisible to it and the end-of-turn
|
|
8
|
+
// reminders stayed silent for a session that worked that way. [bug-149]
|
|
9
|
+
// 2. Opt-in passive capture of notable shell activity into .wolf/activity.log: what commands ran
|
|
10
|
+
// (commits, installs, tests, builds, deploys) and which failed. The log feeds the session-start
|
|
11
|
+
// resume digest. Off unless openwolf.capture.enabled.
|
|
12
|
+
//
|
|
13
|
+
// (1) runs regardless of the capture setting — see the note at the gate below.
|
|
14
|
+
/**
|
|
15
|
+
* Does this shell segment invoke the openwolf CLI in COMMAND position (optionally behind
|
|
16
|
+
* `VAR=value` env prefixes and a path)? Matching the command position rather than the bare word
|
|
17
|
+
* keeps the write counter alive in sessions that merely mention an openwolf path. [bug-149]
|
|
18
|
+
*
|
|
19
|
+
* The env-prefix group requires the trailing `\s+` on purpose. With `\s*` leading each iteration
|
|
20
|
+
* instead, `\S*` and the following iteration could split the SAME token in exponentially many
|
|
21
|
+
* ways: a ~70-character segment like `A=a=a=a=…` backtracked for minutes, and this hook runs on
|
|
22
|
+
* every Bash call, so it blocked the agent. Demanding whitespace after each assignment — which is
|
|
23
|
+
* how shell env prefixes actually work — makes the boundary unambiguous and the match linear.
|
|
24
|
+
*/
|
|
25
|
+
export function segmentInvokesOpenwolf(seg) {
|
|
26
|
+
return /^\s*(?:[A-Za-z_]\w*=\S*\s+)*(?:\S*\/)?openwolf(?:\s|$)/.test(seg);
|
|
27
|
+
}
|
|
4
28
|
// Read Claude Code's Bash tool_response and decide if the command failed. Shapes vary across
|
|
5
29
|
// versions, so we probe a few fields and fall back to "unknown" (treated as success, not error).
|
|
6
30
|
function classifyOutcome(resp) {
|
|
@@ -12,10 +36,9 @@ function classifyOutcome(resp) {
|
|
|
12
36
|
}
|
|
13
37
|
if (r.interrupted === true || r.is_error === true || r.isError === true)
|
|
14
38
|
return "error";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return "error";
|
|
39
|
+
// NOTE: no "stderr but no stdout" heuristic — plenty of successful commands write only to
|
|
40
|
+
// stderr (git checkout progress, curl -v, warnings). It misclassified them as failures,
|
|
41
|
+
// undercounting bash_writes and mislabeling activity.log entries. Explicit signals only.
|
|
19
42
|
}
|
|
20
43
|
if (typeof resp === "string" && /(^|\s)(error|failed|command not found)\b|exit code [1-9]/i.test(resp)) {
|
|
21
44
|
return "error";
|
|
@@ -43,9 +66,7 @@ async function main() {
|
|
|
43
66
|
// COMMAND position of each shell segment, not the whole string — the old `\bopenwolf\b` skipped
|
|
44
67
|
// every command that merely mentioned an openwolf PATH, which made the write counter blind for
|
|
45
68
|
// exactly the sessions that work on an openwolf checkout.
|
|
46
|
-
const invokesOpenwolf = cmd
|
|
47
|
-
.split(/&&|\|\||[;|]/)
|
|
48
|
-
.some((seg) => /^(?:\s*[A-Za-z_]\w*=\S*)*\s*(?:\S*\/)?openwolf(?:\s|$)/.test(seg));
|
|
69
|
+
const invokesOpenwolf = cmd.split(/&&|\|\||[;|]/).some(segmentInvokesOpenwolf);
|
|
49
70
|
if (invokesOpenwolf) {
|
|
50
71
|
process.exit(0);
|
|
51
72
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-bash.js","sourceRoot":"","sources":["../../../src/hooks/post-bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAChF,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,GACvF,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"post-bash.js","sourceRoot":"","sources":["../../../src/hooks/post-bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,8 +23,10 @@ async function main() {
|
|
|
23
23
|
const normalizedFile = normalizePath(filePath);
|
|
24
24
|
// Skip tracking for .wolf/ internal files — consistent with pre-read
|
|
25
25
|
const projectDir = normalizePath(process.env.CLAUDE_PROJECT_DIR || process.cwd());
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Separator required after the root — see pre-read (sibling-prefix directories, e.g.
|
|
27
|
+
// /root/orderflow2, must not count as inside /root/orderflow).
|
|
28
|
+
const relToProject = normalizedFile.startsWith(projectDir + "/")
|
|
29
|
+
? normalizedFile.slice(projectDir.length + 1)
|
|
28
30
|
: "";
|
|
29
31
|
// Don't track reads of files outside the project root (upstream #56). relToProject is ""
|
|
30
32
|
// both when the path is outside projectDir and when it equals the root itself — neither
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-read.js","sourceRoot":"","sources":["../../../src/hooks/post-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOjM,KAAK,UAAU,IAAI;IACjB,aAAa,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAEzD,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,IAAI,KAAiG,CAAC;IACtG,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;QAChB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAE3C,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE/C,qEAAqE;IACrE,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"post-read.js","sourceRoot":"","sources":["../../../src/hooks/post-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -450,15 +450,17 @@ function detectFixPattern(oldStr, newStr, ext, fileLabel) {
|
|
|
450
450
|
fix: `Added async modifier`,
|
|
451
451
|
};
|
|
452
452
|
}
|
|
453
|
-
// --- Type
|
|
453
|
+
// --- Type assertion fix ---
|
|
454
|
+
// Only an added `as`-assertion counts. The old second branch (`": "` newly appearing in a
|
|
455
|
+
// small edit) fired on adding ANY object property or label and flooded the buglog with
|
|
456
|
+
// fake "Type error" entries.
|
|
454
457
|
if (ext === ".ts" || ext === ".tsx") {
|
|
455
|
-
if (
|
|
456
|
-
(newStr.includes(": ") && !oldStr.includes(": ") && oldLines.length <= 3)) {
|
|
458
|
+
if (newStr.includes(" as ") && !oldStr.includes(" as ")) {
|
|
457
459
|
return {
|
|
458
460
|
category: "type-fix",
|
|
459
461
|
summary: `Type error`,
|
|
460
|
-
rootCause: `Missing or incorrect type
|
|
461
|
-
fix: `Added type assertion
|
|
462
|
+
rootCause: `Missing or incorrect type assertion`,
|
|
463
|
+
fix: `Added type assertion`,
|
|
462
464
|
context: extractChangedLines(oldStr, newStr),
|
|
463
465
|
};
|
|
464
466
|
}
|
|
@@ -494,15 +496,22 @@ function tokenizeCode(code) {
|
|
|
494
496
|
return code.replace(/[^\w$]/g, " ").split(/\s+/).filter(t => t.length > 0);
|
|
495
497
|
}
|
|
496
498
|
function findOperatorChange(oldStr, newStr) {
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
}
|
|
499
|
+
// Tokenize operators longest-first instead of substring-testing: `"===".includes("==")` is true,
|
|
500
|
+
// so the old check could never see a `===` → `==` (or `!==` → `!=`) change — the most classic
|
|
501
|
+
// operator bug of them all.
|
|
502
|
+
const extractOps = (s) => {
|
|
503
|
+
const counts = new Map();
|
|
504
|
+
for (const m of s.match(/===|!==|==|!=|>=|<=|>>|<<|&&|\|\||\?\?/g) ?? []) {
|
|
505
|
+
counts.set(m, (counts.get(m) ?? 0) + 1);
|
|
505
506
|
}
|
|
507
|
+
return counts;
|
|
508
|
+
};
|
|
509
|
+
const oldOps = extractOps(oldStr);
|
|
510
|
+
const newOps = extractOps(newStr);
|
|
511
|
+
const removed = [...oldOps.keys()].filter((op) => (newOps.get(op) ?? 0) < oldOps.get(op));
|
|
512
|
+
const added = [...newOps.keys()].filter((op) => (oldOps.get(op) ?? 0) < newOps.get(op));
|
|
513
|
+
if (removed.length === 1 && added.length === 1) {
|
|
514
|
+
return { old: removed[0], new: added[0] };
|
|
506
515
|
}
|
|
507
516
|
return null;
|
|
508
517
|
}
|