openwolf-enhanced 1.14.0 → 1.15.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.
- package/CHANGELOG.md +35 -0
- package/README.md +3 -0
- package/dist/dashboard/assets/{AISuggestions-DXTCcxtl.js → AISuggestions-CezwIo28.js} +1 -1
- package/dist/dashboard/assets/{ActivityTimeline-CBotlA2S.js → ActivityTimeline-ldWqtC0i.js} +1 -1
- package/dist/dashboard/assets/{AnatomyBrowser-B0tUW2in.js → AnatomyBrowser-DRqWKGfh.js} +1 -1
- package/dist/dashboard/assets/{BugLog-BI3POwy9.js → BugLog-DlLQUFwB.js} +1 -1
- package/dist/dashboard/assets/{CerebrumViewer-B-yNICk0.js → CerebrumViewer-033AHh9C.js} +1 -1
- package/dist/dashboard/assets/{CronStatus-DwriIBui.js → CronStatus-BzCHuAev.js} +1 -1
- package/dist/dashboard/assets/{DesignQC-mTHBTvOd.js → DesignQC-Dt_Jtpbh.js} +1 -1
- package/dist/dashboard/assets/{MemoryViewer-Cv8GGxXK.js → MemoryViewer-Byy5Rorr.js} +1 -1
- package/dist/dashboard/assets/{NativeMemory-Cg_aKFiC.js → NativeMemory-6bffA3Kx.js} +1 -1
- package/dist/dashboard/assets/{ProjectOverview-Ckxo9glf.js → ProjectOverview-CnFgexvh.js} +1 -1
- package/dist/dashboard/assets/{ProjectsAggregate-DzDXZ4Dd.js → ProjectsAggregate-ifjudjIU.js} +1 -1
- package/dist/dashboard/assets/{StatusBadge-BsjWCdn0.js → StatusBadge-CdoFOoWW.js} +1 -1
- package/dist/dashboard/assets/{TokenUsage-CdvI0UwZ.js → TokenUsage-fKpCX0bA.js} +1 -1
- package/dist/dashboard/assets/{index-BrZlnvD4.js → index-DuEd3N7W.js} +3 -3
- package/dist/dashboard/index.html +1 -1
- package/dist/hooks/shared.js +42 -11
- package/dist/src/cli/init.js +5 -123
- package/dist/src/cli/init.js.map +1 -1
- package/dist/src/cli/update.js +9 -46
- package/dist/src/cli/update.js.map +1 -1
- package/dist/src/daemon/cron-engine.js +14 -23
- package/dist/src/daemon/cron-engine.js.map +1 -1
- package/dist/src/daemon/llm-provider.js +48 -0
- package/dist/src/daemon/llm-provider.js.map +1 -0
- package/dist/src/daemon/wolf-daemon.js +3 -1
- package/dist/src/daemon/wolf-daemon.js.map +1 -1
- package/dist/src/hooks/shared.js +42 -11
- package/dist/src/hooks/shared.js.map +1 -1
- package/dist/src/utils/agent-hooks.js +163 -0
- package/dist/src/utils/agent-hooks.js.map +1 -0
- package/package.json +1 -1
- package/src/templates/config.json +5 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { readJSON, writeJSON, writeText } from "./fs-safe.js";
|
|
4
|
+
import { ensureDir } from "./paths.js";
|
|
5
|
+
export const NON_CLAUDE_AGENTS = ["codex", "gemini", "opencode"];
|
|
6
|
+
const HOOKS = [
|
|
7
|
+
{ script: "session-start.js", claudeEvent: "SessionStart", matcher: "" },
|
|
8
|
+
{ script: "pre-read.js", claudeEvent: "PreToolUse", matcher: "Read" },
|
|
9
|
+
{ script: "pre-write.js", claudeEvent: "PreToolUse", matcher: "Write|Edit|MultiEdit" },
|
|
10
|
+
{ script: "post-read.js", claudeEvent: "PostToolUse", matcher: "Read" },
|
|
11
|
+
{ script: "post-write.js", claudeEvent: "PostToolUse", matcher: "Write|Edit|MultiEdit" },
|
|
12
|
+
{ script: "post-bash.js", claudeEvent: "PostToolUse", matcher: "Bash" },
|
|
13
|
+
{ script: "stop.js", claudeEvent: "Stop", matcher: "" },
|
|
14
|
+
];
|
|
15
|
+
function cmd(projectDirExpr, script, exportProjectDir) {
|
|
16
|
+
const node = `node "${projectDirExpr}/.wolf/hooks/${script}"`;
|
|
17
|
+
// Non-Claude agents don't export CLAUDE_PROJECT_DIR; set OPENWOLF_PROJECT_DIR so getWolfDir()
|
|
18
|
+
// resolves the right .wolf/ regardless of the hook's cwd.
|
|
19
|
+
return exportProjectDir ? `OPENWOLF_PROJECT_DIR="${projectDirExpr}" ${node}` : node;
|
|
20
|
+
}
|
|
21
|
+
// ---- Claude: exactly the historical settings (7 hooks, $CLAUDE_PROJECT_DIR) ----
|
|
22
|
+
function claudeSettings() {
|
|
23
|
+
const hooks = { SessionStart: [], PreToolUse: [], PostToolUse: [], Stop: [] };
|
|
24
|
+
for (const h of HOOKS) {
|
|
25
|
+
const timeout = h.script === "post-write.js" || h.script === "stop.js" ? 10 : 5;
|
|
26
|
+
hooks[h.claudeEvent].push({
|
|
27
|
+
...(h.matcher !== undefined ? { matcher: h.matcher } : {}),
|
|
28
|
+
hooks: [{ type: "command", _managedBy: "openwolf", command: cmd("$CLAUDE_PROJECT_DIR", h.script, false), timeout }],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return { hooks };
|
|
32
|
+
}
|
|
33
|
+
// ---- Codex: same event names as Claude; edits arrive as `apply_patch`, shell as `Bash`.
|
|
34
|
+
// Env var for the project dir is unconfirmed upstream, so we bake in the absolute path (stable per
|
|
35
|
+
// machine → the trust-hash stays put until the next `openwolf update`). ----
|
|
36
|
+
function codexSettings(projectRoot) {
|
|
37
|
+
const P = projectRoot;
|
|
38
|
+
return {
|
|
39
|
+
hooks: {
|
|
40
|
+
SessionStart: [{ hooks: [{ type: "command", command: cmd(P, "session-start.js", true), timeout: 15 }] }],
|
|
41
|
+
PostToolUse: [
|
|
42
|
+
{ matcher: "^apply_patch$", hooks: [{ type: "command", command: cmd(P, "post-write.js", true), timeout: 15 }] },
|
|
43
|
+
{ matcher: "^Bash$", hooks: [{ type: "command", command: cmd(P, "post-bash.js", true), timeout: 15 }] },
|
|
44
|
+
],
|
|
45
|
+
Stop: [{ hooks: [{ type: "command", command: cmd(P, "stop.js", true), timeout: 15 }] }],
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// ---- Gemini: PostToolUse = AfterTool, Stop = SessionEnd; tools write_file/replace/run_shell_command.
|
|
50
|
+
// $GEMINI_PROJECT_DIR is documented. Timeouts are milliseconds here. ----
|
|
51
|
+
function geminiSettings() {
|
|
52
|
+
const P = "$GEMINI_PROJECT_DIR";
|
|
53
|
+
return {
|
|
54
|
+
hooks: {
|
|
55
|
+
SessionStart: [{ hooks: [{ type: "command", name: "openwolf-session-start", command: cmd(P, "session-start.js", true), timeout: 10000 }] }],
|
|
56
|
+
AfterTool: [
|
|
57
|
+
{ matcher: "write_file|replace", hooks: [{ type: "command", name: "openwolf-post-write", command: cmd(P, "post-write.js", true), timeout: 15000 }] },
|
|
58
|
+
{ matcher: "run_shell_command", hooks: [{ type: "command", name: "openwolf-post-bash", command: cmd(P, "post-bash.js", true), timeout: 15000 }] },
|
|
59
|
+
],
|
|
60
|
+
SessionEnd: [{ hooks: [{ type: "command", name: "openwolf-stop", command: cmd(P, "stop.js", true), timeout: 15000 }] }],
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Merge managed OpenWolf hook entries into an existing settings object, preserving the user's own
|
|
65
|
+
// hooks. An entry is "ours" if any of its commands references `.wolf/hooks/` (or is _managedBy us).
|
|
66
|
+
export function mergeManagedHooks(existing, settings) {
|
|
67
|
+
const merged = { ...existing };
|
|
68
|
+
if (!merged.hooks || typeof merged.hooks !== "object")
|
|
69
|
+
merged.hooks = {};
|
|
70
|
+
const hooks = merged.hooks;
|
|
71
|
+
for (const [event, entries] of Object.entries(settings.hooks)) {
|
|
72
|
+
if (!Array.isArray(hooks[event]))
|
|
73
|
+
hooks[event] = [];
|
|
74
|
+
hooks[event] = hooks[event].filter((e) => !e.hooks?.some((h) => (h.command && h.command.includes(".wolf/hooks/")) || h._managedBy === "openwolf"));
|
|
75
|
+
hooks[event].push(...entries);
|
|
76
|
+
}
|
|
77
|
+
return merged;
|
|
78
|
+
}
|
|
79
|
+
// The OpenCode plugin (plain ESM). OpenCode has no SessionStart injection, so the resume digest is
|
|
80
|
+
// pushed in at compaction; file/shell activity is captured after each tool run via the Node scripts.
|
|
81
|
+
function opencodePlugin(projectRoot) {
|
|
82
|
+
return `// OpenWolf plugin for OpenCode — generated by \`openwolf update\`. Do not edit.
|
|
83
|
+
// Note: OpenCode exposes no SessionStart context-injection hook (unlike Claude/Codex/Gemini), so the
|
|
84
|
+
// resume digest is injected at compaction; edits/shell are captured after each tool run. See the README.
|
|
85
|
+
import { spawnSync } from "node:child_process";
|
|
86
|
+
|
|
87
|
+
const PROJECT = ${JSON.stringify(projectRoot)};
|
|
88
|
+
const env = { ...process.env, OPENWOLF_PROJECT_DIR: PROJECT };
|
|
89
|
+
|
|
90
|
+
function runHook(script, payload) {
|
|
91
|
+
try {
|
|
92
|
+
spawnSync("node", [PROJECT + "/.wolf/hooks/" + script], { input: JSON.stringify(payload), env, encoding: "utf8", timeout: 15000 });
|
|
93
|
+
} catch {}
|
|
94
|
+
}
|
|
95
|
+
function resumeDigest() {
|
|
96
|
+
try {
|
|
97
|
+
const r = spawnSync("node", [PROJECT + "/.wolf/hooks/session-start.js"], { input: "{}", env, encoding: "utf8", timeout: 15000 });
|
|
98
|
+
const out = JSON.parse(r.stdout || "{}");
|
|
99
|
+
return (out.hookSpecificOutput && out.hookSpecificOutput.additionalContext) || "";
|
|
100
|
+
} catch { return ""; }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export const OpenWolf = async () => ({
|
|
104
|
+
"experimental.session.compacting": async (_input, output) => {
|
|
105
|
+
const ctx = resumeDigest();
|
|
106
|
+
if (ctx && output && output.context && output.context.push) output.context.push(ctx);
|
|
107
|
+
},
|
|
108
|
+
"tool.execute.after": async (input, output) => {
|
|
109
|
+
const tool = String((input && input.tool) || "").toLowerCase();
|
|
110
|
+
const args = (output && output.args) || (input && input.args) || {};
|
|
111
|
+
if (tool === "bash") runHook("post-bash.js", { tool_name: "Bash", tool_input: { command: args.command || "" }, tool_response: output });
|
|
112
|
+
else if (tool === "edit" || tool === "write") runHook("post-write.js", { tool_name: "Edit", tool_input: { file_path: args.filePath || args.file_path || "" } });
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
`;
|
|
116
|
+
}
|
|
117
|
+
// Which non-Claude agents this project uses (their config dir exists).
|
|
118
|
+
export function detectAgents(projectRoot) {
|
|
119
|
+
const found = [];
|
|
120
|
+
for (const [agent, dir] of [["codex", ".codex"], ["gemini", ".gemini"], ["opencode", ".opencode"]]) {
|
|
121
|
+
if (fs.existsSync(path.join(projectRoot, dir)))
|
|
122
|
+
found.push(agent);
|
|
123
|
+
}
|
|
124
|
+
return found;
|
|
125
|
+
}
|
|
126
|
+
function deployJsonAgent(dir, file, settings) {
|
|
127
|
+
ensureDir(dir);
|
|
128
|
+
const p = path.join(dir, file);
|
|
129
|
+
const existing = fs.existsSync(p) ? readJSON(p, {}) : {};
|
|
130
|
+
writeJSON(p, mergeManagedHooks(existing, settings));
|
|
131
|
+
}
|
|
132
|
+
// Deploy OpenWolf hooks to Claude (always) plus every detected agent. Returns a per-agent result.
|
|
133
|
+
export function deployAgentHooks(projectRoot) {
|
|
134
|
+
const results = [];
|
|
135
|
+
// Claude — always.
|
|
136
|
+
deployJsonAgent(path.join(projectRoot, ".claude"), "settings.json", claudeSettings());
|
|
137
|
+
results.push({ agent: "claude", deployed: true, detail: ".claude/settings.json" });
|
|
138
|
+
for (const agent of detectAgents(projectRoot)) {
|
|
139
|
+
try {
|
|
140
|
+
if (agent === "codex") {
|
|
141
|
+
deployJsonAgent(path.join(projectRoot, ".codex"), "hooks.json", codexSettings(projectRoot));
|
|
142
|
+
results.push({ agent, deployed: true, detail: ".codex/hooks.json (re-approve trust in Codex)" });
|
|
143
|
+
}
|
|
144
|
+
else if (agent === "gemini") {
|
|
145
|
+
deployJsonAgent(path.join(projectRoot, ".gemini"), "settings.json", geminiSettings());
|
|
146
|
+
results.push({ agent, deployed: true, detail: ".gemini/settings.json" });
|
|
147
|
+
}
|
|
148
|
+
else if (agent === "opencode") {
|
|
149
|
+
const dir = path.join(projectRoot, ".opencode", "plugin");
|
|
150
|
+
ensureDir(dir);
|
|
151
|
+
writeText(path.join(dir, "openwolf.js"), opencodePlugin(projectRoot));
|
|
152
|
+
results.push({ agent, deployed: true, detail: ".opencode/plugin/openwolf.js (compaction-only inject)" });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
results.push({ agent, deployed: false, detail: `failed: ${e.message}` });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return results;
|
|
160
|
+
}
|
|
161
|
+
// Exposed for tests.
|
|
162
|
+
export const _internal = { claudeSettings, codexSettings, geminiSettings, opencodePlugin, mergeManagedHooks };
|
|
163
|
+
//# sourceMappingURL=agent-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-hooks.js","sourceRoot":"","sources":["../../../src/utils/agent-hooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openwolf-enhanced",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"description": "Token-conscious AI brain for Claude Code projects — enhanced fork with bounded storage, self-maintenance (openwolf doctor), .wolfignore scoping, and tunable retention.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"openwolf": {
|
|
4
4
|
"enabled": true,
|
|
5
|
+
"lang": "en",
|
|
5
6
|
"anatomy": {
|
|
6
7
|
"auto_scan_on_init": true,
|
|
7
8
|
"rescan_interval_hours": 6,
|
|
@@ -42,7 +43,10 @@
|
|
|
42
43
|
"dead_letter_enabled": true,
|
|
43
44
|
"heartbeat_interval_minutes": 30,
|
|
44
45
|
"use_claude_p": true,
|
|
45
|
-
"api_key_env": null
|
|
46
|
+
"api_key_env": null,
|
|
47
|
+
"llm_provider": "anthropic",
|
|
48
|
+
"llm_base_url": null,
|
|
49
|
+
"llm_model": null
|
|
46
50
|
},
|
|
47
51
|
"memory": {
|
|
48
52
|
"consolidation_after_days": 7,
|