@evomap/evolver 1.90.0 → 2.0.0-beta.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/README.md +27 -564
- package/bin/evolver-llm-proxy.js +3 -0
- package/bin/evolver-mcp.js +2 -0
- package/bin/evolver-proxy.js +3 -0
- package/bin/evolver.js +4 -0
- package/index.js +1 -3670
- package/package.json +32 -62
- package/CONTRIBUTING.md +0 -19
- package/LICENSE +0 -641
- package/README.ja-JP.md +0 -521
- package/README.ko-KR.md +0 -520
- package/README.zh-CN.md +0 -531
- package/SKILL.md +0 -365
- package/assets/cover.png +0 -0
- package/assets/gep/genes.seed.json +0 -496
- package/conformance/savings-core/constants.json +0 -30
- package/conformance/savings-core/golden-vectors.json +0 -333
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/refresh_stars_badge.js +0 -168
- package/scripts/seed-merchants.js +0 -91
- package/scripts/skill2recipes.js +0 -118
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/src/adapters/claudeCode.js +0 -194
- package/src/adapters/codex.js +0 -216
- package/src/adapters/cursor.js +0 -91
- package/src/adapters/hookAdapter.js +0 -469
- package/src/adapters/kiro.js +0 -195
- package/src/adapters/opencode.js +0 -326
- package/src/adapters/scripts/_lockPaths.js +0 -74
- package/src/adapters/scripts/_memoryFiltering.js +0 -35
- package/src/adapters/scripts/_runtimePaths.js +0 -440
- package/src/adapters/scripts/evolver-session-end.js +0 -321
- package/src/adapters/scripts/evolver-session-start.js +0 -587
- package/src/adapters/scripts/evolver-signal-detect.js +0 -98
- package/src/adapters/scripts/evolver-task-recall.js +0 -173
- package/src/atp/atpExecute.js +0 -283
- package/src/atp/atpTaskPickup.js +0 -233
- package/src/atp/autoBuyer.js +0 -382
- package/src/atp/autoDeliver.js +0 -215
- package/src/atp/cli.js +0 -354
- package/src/atp/cliAutobuyPrompt.js +0 -154
- package/src/atp/consumerAgent.js +0 -157
- package/src/atp/defaultHandler.js +0 -69
- package/src/atp/heartbeatSignalsHandler.js +0 -254
- package/src/atp/hubClient.js +0 -317
- package/src/atp/index.js +0 -38
- package/src/atp/merchantAgent.js +0 -118
- package/src/atp/protocol.js +0 -41
- package/src/atp/questionComposer.js +0 -133
- package/src/atp/serviceHelper.js +0 -92
- package/src/canary.js +0 -13
- package/src/config.js +0 -351
- package/src/evolve/guards.js +0 -1
- package/src/evolve/pipeline/collect.js +0 -1
- package/src/evolve/pipeline/dispatch.js +0 -1
- package/src/evolve/pipeline/enrich.js +0 -1
- package/src/evolve/pipeline/hub.js +0 -1
- package/src/evolve/pipeline/select.js +0 -1
- package/src/evolve/pipeline/signals.js +0 -1
- package/src/evolve/utils.js +0 -1
- package/src/evolve.js +0 -1
- package/src/experiment/agentRunner.js +0 -229
- package/src/experiment/cli.js +0 -159
- package/src/experiment/comparison.js +0 -233
- package/src/experiment/metrics.js +0 -75
- package/src/forceUpdate.js +0 -991
- package/src/gep/a2a.js +0 -173
- package/src/gep/a2aProtocol.js +0 -1
- package/src/gep/analyzer.js +0 -35
- package/src/gep/antiAbuseTelemetry.js +0 -1
- package/src/gep/assetCallLog.js +0 -197
- package/src/gep/assetStore.js +0 -723
- package/src/gep/assets.js +0 -36
- package/src/gep/autoDistillConv.js +0 -1
- package/src/gep/autoDistillLlm.js +0 -1
- package/src/gep/bridge.js +0 -138
- package/src/gep/candidateEval.js +0 -1
- package/src/gep/candidates.js +0 -1
- package/src/gep/claimNudge.js +0 -121
- package/src/gep/cliContracts.js +0 -1190
- package/src/gep/contentHash.js +0 -1
- package/src/gep/conversationDistiller.js +0 -1
- package/src/gep/conversationSniffer.js +0 -1
- package/src/gep/crypto.js +0 -1
- package/src/gep/curriculum.js +0 -1
- package/src/gep/deviceId.js +0 -1
- package/src/gep/directoryClient.js +0 -115
- package/src/gep/envFingerprint.js +0 -1
- package/src/gep/epigenetics.js +0 -1
- package/src/gep/execBridge.js +0 -1
- package/src/gep/executionTrace.js +0 -291
- package/src/gep/explore.js +0 -1
- package/src/gep/featureFlags.js +0 -121
- package/src/gep/gitOps.js +0 -265
- package/src/gep/hash.js +0 -1
- package/src/gep/hostErrorClassifier.js +0 -34
- package/src/gep/hubFetch.js +0 -1
- package/src/gep/hubReview.js +0 -1
- package/src/gep/hubSearch.js +0 -1
- package/src/gep/hubVerify.js +0 -1
- package/src/gep/idleScheduler.js +0 -400
- package/src/gep/issueReporter.js +0 -416
- package/src/gep/learningSignals.js +0 -1
- package/src/gep/llmReview.js +0 -92
- package/src/gep/localStateAwareness.js +0 -243
- package/src/gep/mailboxTransport.js +0 -119
- package/src/gep/memoryGraph.js +0 -1
- package/src/gep/memoryGraphAdapter.js +0 -1
- package/src/gep/mutation.js +0 -1
- package/src/gep/narrativeMemory.js +0 -1
- package/src/gep/oauthLogin.js +0 -181
- package/src/gep/openPRRegistry.js +0 -1
- package/src/gep/paths.js +0 -522
- package/src/gep/personality.js +0 -1
- package/src/gep/policyCheck.js +0 -1
- package/src/gep/portable.js +0 -103
- package/src/gep/privacyClient.js +0 -235
- package/src/gep/prompt.js +0 -1
- package/src/gep/questionGenerator.js +0 -518
- package/src/gep/recallInject.js +0 -1
- package/src/gep/recallVerifier.js +0 -1
- package/src/gep/reflection.js +0 -1
- package/src/gep/sanitize.js +0 -264
- package/src/gep/savingsCore.js +0 -1
- package/src/gep/schemas/capsule.js +0 -170
- package/src/gep/schemas/gene.js +0 -154
- package/src/gep/schemas/index.js +0 -8
- package/src/gep/schemas/protocol.js +0 -51
- package/src/gep/schemas/task.js +0 -74
- package/src/gep/selector.js +0 -1
- package/src/gep/selfPR.js +0 -469
- package/src/gep/signals.js +0 -776
- package/src/gep/skill2gep.js +0 -1056
- package/src/gep/skill2gepAudit.js +0 -303
- package/src/gep/skill2recipes.js +0 -511
- package/src/gep/skillDistiller.js +0 -1
- package/src/gep/skillPublisher.js +0 -358
- package/src/gep/solidify.js +0 -1
- package/src/gep/strategy.js +0 -1
- package/src/gep/taskReceiver.js +0 -575
- package/src/gep/tokenSavings.js +0 -1
- package/src/gep/trajectoryExport.js +0 -1
- package/src/gep/validationReport.js +0 -55
- package/src/gep/validator/index.js +0 -411
- package/src/gep/validator/reporter.js +0 -210
- package/src/gep/validator/sandboxExecutor.js +0 -480
- package/src/gep/validator/stakeBootstrap.js +0 -357
- package/src/gep/workspaceKeychain.js +0 -1
- package/src/ops/cleanup.js +0 -80
- package/src/ops/commentary.js +0 -60
- package/src/ops/health_check.js +0 -104
- package/src/ops/index.js +0 -11
- package/src/ops/innovation.js +0 -67
- package/src/ops/lifecycle.js +0 -798
- package/src/ops/self_repair.js +0 -76
- package/src/ops/skills_monitor.js +0 -147
- package/src/ops/trigger.js +0 -33
- package/src/proxy/clientSettings.js +0 -405
- package/src/proxy/envelope.js +0 -59
- package/src/proxy/extensions/dmHandler.js +0 -45
- package/src/proxy/extensions/sessionHandler.js +0 -141
- package/src/proxy/extensions/skillUpdater.js +0 -64
- package/src/proxy/extensions/traceControl.js +0 -1
- package/src/proxy/index.js +0 -1395
- package/src/proxy/inject.js +0 -1
- package/src/proxy/lifecycle/manager.js +0 -1568
- package/src/proxy/mailbox/state.js +0 -207
- package/src/proxy/mailbox/store.js +0 -602
- package/src/proxy/router/cache_passthrough.js +0 -26
- package/src/proxy/router/features.js +0 -84
- package/src/proxy/router/gemini_route.js +0 -154
- package/src/proxy/router/messages_route.js +0 -535
- package/src/proxy/router/model_router.js +0 -113
- package/src/proxy/router/models_route.js +0 -52
- package/src/proxy/router/ollama_route.js +0 -103
- package/src/proxy/router/responses_route.js +0 -170
- package/src/proxy/router/vertex_route.js +0 -110
- package/src/proxy/server/http.js +0 -363
- package/src/proxy/server/routes.js +0 -558
- package/src/proxy/server/settings.js +0 -115
- package/src/proxy/sync/engine.js +0 -179
- package/src/proxy/sync/inbound.js +0 -211
- package/src/proxy/sync/outbound.js +0 -361
- package/src/proxy/task/monitor.js +0 -131
- package/src/proxy/trace/extractor.js +0 -1
- package/src/proxy/trace/usage.js +0 -1
- package/src/solo/breaker.js +0 -25
- package/src/solo/gitGuard.js +0 -65
- package/src/webui/client/clientJs/assets.js +0 -111
- package/src/webui/client/clientJs/bootstrap.js +0 -92
- package/src/webui/client/clientJs/common.js +0 -77
- package/src/webui/client/clientJs/i18n.js +0 -366
- package/src/webui/client/clientJs/index.js +0 -35
- package/src/webui/client/clientJs/interactions.js +0 -351
- package/src/webui/client/clientJs/overview.js +0 -152
- package/src/webui/client/clientJs/personality.js +0 -285
- package/src/webui/client/clientJs/pipelines.js +0 -330
- package/src/webui/client/indexHtml.js +0 -221
- package/src/webui/client/static.js +0 -23
- package/src/webui/client/stylesCss.js +0 -639
- package/src/webui/client/vendor/README.md +0 -15
- package/src/webui/client/vendor/echarts.min.js +0 -45
- package/src/webui/index.js +0 -14
- package/src/webui/observer/assets.js +0 -146
- package/src/webui/observer/index.js +0 -37
- package/src/webui/observer/interactions.js +0 -127
- package/src/webui/observer/jsonl.js +0 -75
- package/src/webui/observer/paths.js +0 -46
- package/src/webui/observer/personality.js +0 -43
- package/src/webui/observer/pipelineEvents.js +0 -58
- package/src/webui/observer/redact.js +0 -63
- package/src/webui/observer/runs.js +0 -356
- package/src/webui/observer/safety.js +0 -57
- package/src/webui/observer/skills.js +0 -70
- package/src/webui/observer/status.js +0 -71
- package/src/webui/server/http.js +0 -138
- package/src/webui/server/routes.js +0 -41
package/src/adapters/codex.js
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const { mergeJsonFile, copyHookScripts, appendSectionToFile, removeHookScripts, removeMarkedSection, assertSafeConfigDir, isEvolverHookCommand } = require('./hookAdapter');
|
|
4
|
-
|
|
5
|
-
const HOOK_SCRIPTS_DIR_NAME = 'hooks';
|
|
6
|
-
const EVOLVER_MARKER = '<!-- evolver-evolution-memory -->';
|
|
7
|
-
|
|
8
|
-
function buildCodexHooksJson(evolverRoot) {
|
|
9
|
-
const scriptsBase = '.codex/hooks';
|
|
10
|
-
return {
|
|
11
|
-
hooks: {
|
|
12
|
-
SessionStart: [
|
|
13
|
-
{
|
|
14
|
-
type: 'command',
|
|
15
|
-
command: `node ${scriptsBase}/evolver-session-start.js`,
|
|
16
|
-
timeout: 3,
|
|
17
|
-
},
|
|
18
|
-
],
|
|
19
|
-
PostToolUse: [
|
|
20
|
-
{
|
|
21
|
-
type: 'command',
|
|
22
|
-
command: `node ${scriptsBase}/evolver-signal-detect.js`,
|
|
23
|
-
timeout: 2,
|
|
24
|
-
},
|
|
25
|
-
],
|
|
26
|
-
Stop: [
|
|
27
|
-
{
|
|
28
|
-
type: 'command',
|
|
29
|
-
command: `node ${scriptsBase}/evolver-session-end.js`,
|
|
30
|
-
timeout: 8,
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function ensureConfigToml(codexDir) {
|
|
38
|
-
const tomlPath = path.join(codexDir, 'config.toml');
|
|
39
|
-
let content = '';
|
|
40
|
-
try { content = fs.readFileSync(tomlPath, 'utf8'); } catch { /* new file */ }
|
|
41
|
-
|
|
42
|
-
if (/codex_hooks\s*=\s*true/i.test(content)) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (/\[features\]/.test(content)) {
|
|
47
|
-
content = content.replace(
|
|
48
|
-
/\[features\]/,
|
|
49
|
-
'[features]\ncodex_hooks = true'
|
|
50
|
-
);
|
|
51
|
-
} else {
|
|
52
|
-
const separator = content.length > 0 && !content.endsWith('\n') ? '\n\n' : content.length > 0 ? '\n' : '';
|
|
53
|
-
content += separator + '[features]\ncodex_hooks = true\n';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
fs.writeFileSync(tomlPath, content, 'utf8');
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Reverse of `ensureConfigToml`: drop the `codex_hooks = true` line and, if
|
|
61
|
-
// the surrounding `[features]` block becomes empty as a result, drop that
|
|
62
|
-
// header too. Other unrelated entries under `[features]` are preserved.
|
|
63
|
-
// Returns true when the file changed.
|
|
64
|
-
function cleanConfigToml(codexDir) {
|
|
65
|
-
const tomlPath = path.join(codexDir, 'config.toml');
|
|
66
|
-
let content;
|
|
67
|
-
try { content = fs.readFileSync(tomlPath, 'utf8'); } catch { return false; }
|
|
68
|
-
if (!/codex_hooks\s*=\s*true/i.test(content)) return false;
|
|
69
|
-
|
|
70
|
-
// Drop the `codex_hooks = true` line. The greedy `\s*` after `true`
|
|
71
|
-
// consumes the trailing newline plus any blank lines so the
|
|
72
|
-
// empty-`[features]` check below cannot be fooled by a stray blank
|
|
73
|
-
// line into treating the section as empty while user entries still
|
|
74
|
-
// follow.
|
|
75
|
-
let next = content.replace(/^\s*codex_hooks\s*=\s*true\s*\n?/im, '');
|
|
76
|
-
// Drop a now-empty `[features]` block. Two strict patterns avoid
|
|
77
|
-
// `$` with the /m flag — multiline `$` matches before any `\n`, so
|
|
78
|
-
// a single `(?=\s*$)` lookahead can succeed mid-file and strand
|
|
79
|
-
// user entries below the removed header (PR #94 round-3).
|
|
80
|
-
next = next.replace(/(^|\n)\[features\]\s*\n(?=\s*\[)/, '$1');
|
|
81
|
-
next = next.replace(/(^|\n)\[features\]\s*$/, '$1');
|
|
82
|
-
next = next.replace(/\n{3,}/g, '\n\n').trimEnd();
|
|
83
|
-
if (next.length > 0) next += '\n';
|
|
84
|
-
fs.writeFileSync(tomlPath, next, 'utf8');
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function buildAgentsMdSection() {
|
|
89
|
-
return `${EVOLVER_MARKER}
|
|
90
|
-
## Evolution Memory (Evolver)
|
|
91
|
-
|
|
92
|
-
This project uses evolver for self-evolution. Hooks automatically:
|
|
93
|
-
1. Run quietly at session start and load recent evolution memory when useful
|
|
94
|
-
2. Detect evolution signals during file edits
|
|
95
|
-
3. Record outcomes at session end
|
|
96
|
-
|
|
97
|
-
Use Evolver context only when it is directly relevant. Do not narrate routine Evolver checks, hook status, or empty recall/search results to the user.
|
|
98
|
-
Signals: log_error, perf_bottleneck, user_feature_request, capability_gap, deployment_issue, test_failure.`;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function install({ configRoot, evolverRoot, force }) {
|
|
102
|
-
const codexDir = path.join(configRoot, '.codex');
|
|
103
|
-
const hooksJsonPath = path.join(codexDir, 'hooks.json');
|
|
104
|
-
const hooksDir = path.join(codexDir, HOOK_SCRIPTS_DIR_NAME);
|
|
105
|
-
const agentsMdPath = path.join(configRoot, 'AGENTS.md');
|
|
106
|
-
assertSafeConfigDir(codexDir, '.codex', { subdirs: [HOOK_SCRIPTS_DIR_NAME] });
|
|
107
|
-
|
|
108
|
-
if (!force && fs.existsSync(hooksJsonPath)) {
|
|
109
|
-
try {
|
|
110
|
-
const existing = JSON.parse(fs.readFileSync(hooksJsonPath, 'utf8'));
|
|
111
|
-
if (existing._evolver_managed) {
|
|
112
|
-
console.log('[codex] Evolver hooks already installed. Use --force to overwrite.');
|
|
113
|
-
return { ok: true, skipped: true };
|
|
114
|
-
}
|
|
115
|
-
} catch { /* proceed */ }
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
fs.mkdirSync(codexDir, { recursive: true });
|
|
119
|
-
|
|
120
|
-
const hooksCfg = buildCodexHooksJson(evolverRoot);
|
|
121
|
-
mergeJsonFile(hooksJsonPath, hooksCfg);
|
|
122
|
-
console.log('[codex] Wrote ' + hooksJsonPath);
|
|
123
|
-
|
|
124
|
-
const copied = copyHookScripts(hooksDir, path.join(evolverRoot, 'src', 'adapters'));
|
|
125
|
-
console.log('[codex] Copied ' + copied.length + ' hook scripts to ' + hooksDir);
|
|
126
|
-
|
|
127
|
-
const tomlChanged = ensureConfigToml(codexDir);
|
|
128
|
-
if (tomlChanged) {
|
|
129
|
-
console.log('[codex] Enabled codex_hooks in config.toml');
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const injected = appendSectionToFile(agentsMdPath, EVOLVER_MARKER, buildAgentsMdSection());
|
|
133
|
-
if (injected) {
|
|
134
|
-
console.log('[codex] Injected evolution section into ' + agentsMdPath);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
console.log('[codex] Installation complete.');
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
ok: true,
|
|
141
|
-
platform: 'codex',
|
|
142
|
-
files: [hooksJsonPath, path.join(codexDir, 'config.toml'), agentsMdPath, ...copied],
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function uninstall({ configRoot }) {
|
|
147
|
-
const codexDir = path.join(configRoot, '.codex');
|
|
148
|
-
const hooksJsonPath = path.join(codexDir, 'hooks.json');
|
|
149
|
-
const hooksDir = path.join(codexDir, HOOK_SCRIPTS_DIR_NAME);
|
|
150
|
-
const agentsMdPath = path.join(configRoot, 'AGENTS.md');
|
|
151
|
-
assertSafeConfigDir(codexDir, '.codex', { subdirs: [HOOK_SCRIPTS_DIR_NAME] });
|
|
152
|
-
|
|
153
|
-
let changed = false;
|
|
154
|
-
|
|
155
|
-
// Strip evolver entries from hooks.json. Even when the
|
|
156
|
-
// `_evolver_managed` marker is missing (older install, hand-edited
|
|
157
|
-
// file), we still try to filter by command — a missing marker should
|
|
158
|
-
// not strand obvious evolver-owned entries (#538).
|
|
159
|
-
try {
|
|
160
|
-
if (fs.existsSync(hooksJsonPath)) {
|
|
161
|
-
const data = JSON.parse(fs.readFileSync(hooksJsonPath, 'utf8'));
|
|
162
|
-
let touched = false;
|
|
163
|
-
if (data.hooks) {
|
|
164
|
-
for (const event of Object.keys(data.hooks)) {
|
|
165
|
-
if (Array.isArray(data.hooks[event])) {
|
|
166
|
-
const before = data.hooks[event].length;
|
|
167
|
-
data.hooks[event] = data.hooks[event].filter(h => {
|
|
168
|
-
const cmd = (h && h.command) || '';
|
|
169
|
-
return !isEvolverHookCommand(cmd);
|
|
170
|
-
});
|
|
171
|
-
if (data.hooks[event].length !== before) touched = true;
|
|
172
|
-
if (data.hooks[event].length === 0) delete data.hooks[event];
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (Object.keys(data.hooks).length === 0) delete data.hooks;
|
|
176
|
-
}
|
|
177
|
-
if (data._evolver_managed) {
|
|
178
|
-
delete data._evolver_managed;
|
|
179
|
-
touched = true;
|
|
180
|
-
}
|
|
181
|
-
if (touched) {
|
|
182
|
-
fs.writeFileSync(hooksJsonPath, JSON.stringify(data, null, 2) + '\n', 'utf8');
|
|
183
|
-
changed = true;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
} catch (e) {
|
|
187
|
-
console.warn(`[codex] Failed to clean ${hooksJsonPath}: ${e.message || e}`);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
const scripts = removeHookScripts(hooksDir);
|
|
191
|
-
if (scripts > 0) changed = true;
|
|
192
|
-
// If hooks dir is now empty (only evolver scripts lived there), remove it
|
|
193
|
-
// so a subsequent install starts from a clean slate.
|
|
194
|
-
try {
|
|
195
|
-
if (fs.existsSync(hooksDir) && fs.readdirSync(hooksDir).length === 0) {
|
|
196
|
-
fs.rmdirSync(hooksDir);
|
|
197
|
-
}
|
|
198
|
-
} catch { /* best-effort */ }
|
|
199
|
-
|
|
200
|
-
if (cleanConfigToml(codexDir)) {
|
|
201
|
-
console.log('[codex] Removed codex_hooks flag from config.toml');
|
|
202
|
-
changed = true;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
if (removeMarkedSection(agentsMdPath, EVOLVER_MARKER)) {
|
|
206
|
-
changed = true;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
console.log(changed
|
|
210
|
-
? '[codex] Uninstalled evolver hooks.'
|
|
211
|
-
: '[codex] No evolver hooks found to uninstall.');
|
|
212
|
-
|
|
213
|
-
return { ok: true, removed: changed };
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
module.exports = { install, uninstall, buildCodexHooksJson, ensureConfigToml, cleanConfigToml };
|
package/src/adapters/cursor.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const { mergeJsonFile, copyHookScripts, removeEvolverHooks, removeHookScripts, assertSafeConfigDir } = require('./hookAdapter');
|
|
4
|
-
|
|
5
|
-
const HOOK_SCRIPTS_DIR_NAME = 'hooks';
|
|
6
|
-
|
|
7
|
-
function buildHooksJson(evolverRoot, isUserLevel) {
|
|
8
|
-
const scriptsBase = isUserLevel ? './hooks' : '.cursor/hooks';
|
|
9
|
-
return {
|
|
10
|
-
version: 1,
|
|
11
|
-
hooks: {
|
|
12
|
-
sessionStart: [
|
|
13
|
-
{
|
|
14
|
-
command: `node ${scriptsBase}/evolver-session-start.js`,
|
|
15
|
-
timeout: 3,
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
afterFileEdit: [
|
|
19
|
-
{
|
|
20
|
-
command: `node ${scriptsBase}/evolver-signal-detect.js`,
|
|
21
|
-
matcher: 'Write',
|
|
22
|
-
timeout: 2,
|
|
23
|
-
},
|
|
24
|
-
],
|
|
25
|
-
stop: [
|
|
26
|
-
{
|
|
27
|
-
command: `node ${scriptsBase}/evolver-session-end.js`,
|
|
28
|
-
timeout: 8,
|
|
29
|
-
loop_limit: 1,
|
|
30
|
-
},
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function install({ configRoot, evolverRoot, force }) {
|
|
37
|
-
const os = require('os');
|
|
38
|
-
const isUserLevel = configRoot === os.homedir();
|
|
39
|
-
const cursorDir = path.join(configRoot, '.cursor');
|
|
40
|
-
const hooksJsonPath = path.join(cursorDir, 'hooks.json');
|
|
41
|
-
const hooksDir = path.join(cursorDir, HOOK_SCRIPTS_DIR_NAME);
|
|
42
|
-
assertSafeConfigDir(cursorDir, '.cursor', { subdirs: [HOOK_SCRIPTS_DIR_NAME] });
|
|
43
|
-
|
|
44
|
-
if (!force && fs.existsSync(hooksJsonPath)) {
|
|
45
|
-
try {
|
|
46
|
-
const existing = JSON.parse(fs.readFileSync(hooksJsonPath, 'utf8'));
|
|
47
|
-
if (existing._evolver_managed) {
|
|
48
|
-
console.log('[cursor] Evolver hooks already installed. Use --force to overwrite.');
|
|
49
|
-
return { ok: true, skipped: true };
|
|
50
|
-
}
|
|
51
|
-
} catch { /* proceed */ }
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fs.mkdirSync(cursorDir, { recursive: true });
|
|
55
|
-
|
|
56
|
-
const hooksCfg = buildHooksJson(evolverRoot, isUserLevel);
|
|
57
|
-
mergeJsonFile(hooksJsonPath, hooksCfg);
|
|
58
|
-
console.log('[cursor] Wrote ' + hooksJsonPath);
|
|
59
|
-
|
|
60
|
-
const copied = copyHookScripts(hooksDir, path.join(evolverRoot, 'src', 'adapters'));
|
|
61
|
-
console.log('[cursor] Copied ' + copied.length + ' hook scripts to ' + hooksDir);
|
|
62
|
-
|
|
63
|
-
console.log('[cursor] Installation complete.');
|
|
64
|
-
console.log('[cursor] Restart Cursor or open a new session to activate hooks.');
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
ok: true,
|
|
68
|
-
platform: 'cursor',
|
|
69
|
-
files: [hooksJsonPath, ...copied],
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function uninstall({ configRoot, evolverRoot }) {
|
|
74
|
-
const cursorDir = path.join(configRoot, '.cursor');
|
|
75
|
-
const hooksJsonPath = path.join(cursorDir, 'hooks.json');
|
|
76
|
-
const hooksDir = path.join(cursorDir, HOOK_SCRIPTS_DIR_NAME);
|
|
77
|
-
assertSafeConfigDir(cursorDir, '.cursor', { subdirs: [HOOK_SCRIPTS_DIR_NAME] });
|
|
78
|
-
|
|
79
|
-
const removed = removeEvolverHooks(hooksJsonPath);
|
|
80
|
-
const scripts = removeHookScripts(hooksDir);
|
|
81
|
-
|
|
82
|
-
if (removed || scripts > 0) {
|
|
83
|
-
console.log('[cursor] Uninstalled evolver hooks (' + scripts + ' scripts removed).');
|
|
84
|
-
} else {
|
|
85
|
-
console.log('[cursor] No evolver hooks found to uninstall.');
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return { ok: true, removed: removed || scripts > 0 };
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
module.exports = { install, uninstall, buildHooksJson };
|