@0xmaxma/claude-gateway 1.6.8 → 1.7.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 +149 -20
- package/config.template.json +59 -1
- package/dist/agent/dreaming/accept.d.ts +43 -0
- package/dist/agent/dreaming/accept.d.ts.map +1 -0
- package/dist/agent/dreaming/accept.js +230 -0
- package/dist/agent/dreaming/accept.js.map +1 -0
- package/dist/agent/dreaming/applier.d.ts +77 -0
- package/dist/agent/dreaming/applier.d.ts.map +1 -0
- package/dist/agent/dreaming/applier.js +406 -0
- package/dist/agent/dreaming/applier.js.map +1 -0
- package/dist/agent/dreaming/audit.d.ts +27 -0
- package/dist/agent/dreaming/audit.d.ts.map +1 -0
- package/dist/agent/dreaming/audit.js +100 -0
- package/dist/agent/dreaming/audit.js.map +1 -0
- package/dist/agent/dreaming/compactor.d.ts +66 -0
- package/dist/agent/dreaming/compactor.d.ts.map +1 -0
- package/dist/agent/dreaming/compactor.js +306 -0
- package/dist/agent/dreaming/compactor.js.map +1 -0
- package/dist/agent/dreaming/config.d.ts +19 -0
- package/dist/agent/dreaming/config.d.ts.map +1 -0
- package/dist/agent/dreaming/config.js +107 -0
- package/dist/agent/dreaming/config.js.map +1 -0
- package/dist/agent/dreaming/episodic.d.ts +42 -0
- package/dist/agent/dreaming/episodic.d.ts.map +1 -0
- package/dist/agent/dreaming/episodic.js +116 -0
- package/dist/agent/dreaming/episodic.js.map +1 -0
- package/dist/agent/dreaming/gather.d.ts +31 -0
- package/dist/agent/dreaming/gather.d.ts.map +1 -0
- package/dist/agent/dreaming/gather.js +55 -0
- package/dist/agent/dreaming/gather.js.map +1 -0
- package/dist/agent/dreaming/index.d.ts +87 -0
- package/dist/agent/dreaming/index.d.ts.map +1 -0
- package/dist/agent/dreaming/index.js +377 -0
- package/dist/agent/dreaming/index.js.map +1 -0
- package/dist/agent/dreaming/migrate-cli.d.ts +17 -0
- package/dist/agent/dreaming/migrate-cli.d.ts.map +1 -0
- package/dist/agent/dreaming/migrate-cli.js +42 -0
- package/dist/agent/dreaming/migrate-cli.js.map +1 -0
- package/dist/agent/dreaming/migrate.d.ts +72 -0
- package/dist/agent/dreaming/migrate.d.ts.map +1 -0
- package/dist/agent/dreaming/migrate.js +374 -0
- package/dist/agent/dreaming/migrate.js.map +1 -0
- package/dist/agent/dreaming/report.d.ts +39 -0
- package/dist/agent/dreaming/report.d.ts.map +1 -0
- package/dist/agent/dreaming/report.js +121 -0
- package/dist/agent/dreaming/report.js.map +1 -0
- package/dist/agent/dreaming/reviewer.d.ts +43 -0
- package/dist/agent/dreaming/reviewer.d.ts.map +1 -0
- package/dist/agent/dreaming/reviewer.js +249 -0
- package/dist/agent/dreaming/reviewer.js.map +1 -0
- package/dist/agent/dreaming/staleness.d.ts +68 -0
- package/dist/agent/dreaming/staleness.d.ts.map +1 -0
- package/dist/agent/dreaming/staleness.js +281 -0
- package/dist/agent/dreaming/staleness.js.map +1 -0
- package/dist/agent/dreaming/types.d.ts +130 -0
- package/dist/agent/dreaming/types.d.ts.map +1 -0
- package/dist/agent/dreaming/types.js +10 -0
- package/dist/agent/dreaming/types.js.map +1 -0
- package/dist/agent/knowledge/archive-db.d.ts +114 -0
- package/dist/agent/knowledge/archive-db.d.ts.map +1 -0
- package/dist/agent/knowledge/archive-db.js +474 -0
- package/dist/agent/knowledge/archive-db.js.map +1 -0
- package/dist/agent/knowledge/chunk.d.ts +21 -0
- package/dist/agent/knowledge/chunk.d.ts.map +1 -0
- package/dist/agent/knowledge/chunk.js +67 -0
- package/dist/agent/knowledge/chunk.js.map +1 -0
- package/dist/agent/knowledge/config.d.ts +20 -0
- package/dist/agent/knowledge/config.d.ts.map +1 -0
- package/dist/agent/knowledge/config.js +143 -0
- package/dist/agent/knowledge/config.js.map +1 -0
- package/dist/agent/knowledge/graph-demo.d.ts +25 -0
- package/dist/agent/knowledge/graph-demo.d.ts.map +1 -0
- package/dist/agent/knowledge/graph-demo.js +132 -0
- package/dist/agent/knowledge/graph-demo.js.map +1 -0
- package/dist/agent/knowledge/index.d.ts +24 -0
- package/dist/agent/knowledge/index.d.ts.map +1 -0
- package/dist/agent/knowledge/index.js +50 -0
- package/dist/agent/knowledge/index.js.map +1 -0
- package/dist/agent/knowledge/indexer.d.ts +34 -0
- package/dist/agent/knowledge/indexer.d.ts.map +1 -0
- package/dist/agent/knowledge/indexer.js +271 -0
- package/dist/agent/knowledge/indexer.js.map +1 -0
- package/dist/agent/knowledge/lifecycle.d.ts +91 -0
- package/dist/agent/knowledge/lifecycle.d.ts.map +1 -0
- package/dist/agent/knowledge/lifecycle.js +205 -0
- package/dist/agent/knowledge/lifecycle.js.map +1 -0
- package/dist/agent/knowledge/provenance.d.ts +15 -0
- package/dist/agent/knowledge/provenance.d.ts.map +1 -0
- package/dist/agent/knowledge/provenance.js +37 -0
- package/dist/agent/knowledge/provenance.js.map +1 -0
- package/dist/agent/knowledge/reindex-cli.d.ts +13 -0
- package/dist/agent/knowledge/reindex-cli.d.ts.map +1 -0
- package/dist/agent/knowledge/reindex-cli.js +53 -0
- package/dist/agent/knowledge/reindex-cli.js.map +1 -0
- package/dist/agent/knowledge/reindex-spawn.d.ts +30 -0
- package/dist/agent/knowledge/reindex-spawn.d.ts.map +1 -0
- package/dist/agent/knowledge/reindex-spawn.js +97 -0
- package/dist/agent/knowledge/reindex-spawn.js.map +1 -0
- package/dist/agent/knowledge/shared-promote.d.ts +18 -0
- package/dist/agent/knowledge/shared-promote.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-promote.js +29 -0
- package/dist/agent/knowledge/shared-promote.js.map +1 -0
- package/dist/agent/knowledge/shared-writer.d.ts +24 -0
- package/dist/agent/knowledge/shared-writer.d.ts.map +1 -0
- package/dist/agent/knowledge/shared-writer.js +97 -0
- package/dist/agent/knowledge/shared-writer.js.map +1 -0
- package/dist/agent/knowledge/types.d.ts +83 -0
- package/dist/agent/knowledge/types.d.ts.map +1 -0
- package/dist/agent/knowledge/types.js +12 -0
- package/dist/agent/knowledge/types.js.map +1 -0
- package/dist/agent/knowledge/wiki.d.ts +107 -0
- package/dist/agent/knowledge/wiki.d.ts.map +1 -0
- package/dist/agent/knowledge/wiki.js +415 -0
- package/dist/agent/knowledge/wiki.js.map +1 -0
- package/dist/agent/memory-metrics.d.ts +48 -0
- package/dist/agent/memory-metrics.d.ts.map +1 -0
- package/dist/agent/memory-metrics.js +156 -0
- package/dist/agent/memory-metrics.js.map +1 -0
- package/dist/agent/runner.d.ts +24 -1
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +82 -6
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/skill-learning/config.d.ts +18 -0
- package/dist/agent/skill-learning/config.d.ts.map +1 -0
- package/dist/agent/skill-learning/config.js +71 -0
- package/dist/agent/skill-learning/config.js.map +1 -0
- package/dist/agent/skill-learning/curator.d.ts +45 -0
- package/dist/agent/skill-learning/curator.d.ts.map +1 -0
- package/dist/agent/skill-learning/curator.js +171 -0
- package/dist/agent/skill-learning/curator.js.map +1 -0
- package/dist/agent/skill-learning/index.d.ts +79 -0
- package/dist/agent/skill-learning/index.d.ts.map +1 -0
- package/dist/agent/skill-learning/index.js +308 -0
- package/dist/agent/skill-learning/index.js.map +1 -0
- package/dist/agent/skill-learning/metrics.d.ts +13 -0
- package/dist/agent/skill-learning/metrics.d.ts.map +1 -0
- package/dist/agent/skill-learning/metrics.js +109 -0
- package/dist/agent/skill-learning/metrics.js.map +1 -0
- package/dist/agent/skill-learning/notifier.d.ts +111 -0
- package/dist/agent/skill-learning/notifier.d.ts.map +1 -0
- package/dist/agent/skill-learning/notifier.js +398 -0
- package/dist/agent/skill-learning/notifier.js.map +1 -0
- package/dist/agent/skill-learning/reviewer.d.ts +61 -0
- package/dist/agent/skill-learning/reviewer.d.ts.map +1 -0
- package/dist/agent/skill-learning/reviewer.js +271 -0
- package/dist/agent/skill-learning/reviewer.js.map +1 -0
- package/dist/agent/skill-learning/telemetry.d.ts +22 -0
- package/dist/agent/skill-learning/telemetry.d.ts.map +1 -0
- package/dist/agent/skill-learning/telemetry.js +90 -0
- package/dist/agent/skill-learning/telemetry.js.map +1 -0
- package/dist/agent/skill-learning/trigger.d.ts +23 -0
- package/dist/agent/skill-learning/trigger.d.ts.map +1 -0
- package/dist/agent/skill-learning/trigger.js +44 -0
- package/dist/agent/skill-learning/trigger.js.map +1 -0
- package/dist/agent/skill-learning/types.d.ts +165 -0
- package/dist/agent/skill-learning/types.d.ts.map +1 -0
- package/dist/agent/skill-learning/types.js +11 -0
- package/dist/agent/skill-learning/types.js.map +1 -0
- package/dist/agent/skill-learning/writer.d.ts +37 -0
- package/dist/agent/skill-learning/writer.d.ts.map +1 -0
- package/dist/agent/skill-learning/writer.js +223 -0
- package/dist/agent/skill-learning/writer.js.map +1 -0
- package/dist/agent/workspace-loader.d.ts +83 -6
- package/dist/agent/workspace-loader.d.ts.map +1 -1
- package/dist/agent/workspace-loader.js +207 -14
- package/dist/agent/workspace-loader.js.map +1 -1
- package/dist/api/gateway-router.d.ts +2 -0
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +293 -6
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/share-router.d.ts.map +1 -1
- package/dist/api/share-router.js +27 -1
- package/dist/api/share-router.js.map +1 -1
- package/dist/api/skills-router.d.ts +2 -2
- package/dist/api/skills-router.d.ts.map +1 -1
- package/dist/api/skills-router.js +61 -1
- package/dist/api/skills-router.js.map +1 -1
- package/dist/apps/agent-manager.d.ts +7 -0
- package/dist/apps/agent-manager.d.ts.map +1 -1
- package/dist/apps/agent-manager.js +13 -1
- package/dist/apps/agent-manager.js.map +1 -1
- package/dist/config/migrator.d.ts +2 -0
- package/dist/config/migrator.d.ts.map +1 -1
- package/dist/config/migrator.js +72 -1
- package/dist/config/migrator.js.map +1 -1
- package/dist/history/cleanup.d.ts +7 -0
- package/dist/history/cleanup.d.ts.map +1 -1
- package/dist/history/cleanup.js +27 -0
- package/dist/history/cleanup.js.map +1 -1
- package/dist/history/db.d.ts +65 -0
- package/dist/history/db.d.ts.map +1 -1
- package/dist/history/db.js +261 -0
- package/dist/history/db.js.map +1 -1
- package/dist/index.js +122 -20
- package/dist/index.js.map +1 -1
- package/dist/session/process.d.ts +10 -0
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +86 -1
- package/dist/session/process.js.map +1 -1
- package/dist/share/share-store.d.ts +11 -0
- package/dist/share/share-store.d.ts.map +1 -1
- package/dist/share/share-store.js +3 -1
- package/dist/share/share-store.js.map +1 -1
- package/dist/skills/loader.d.ts +8 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +29 -1
- package/dist/skills/loader.js.map +1 -1
- package/dist/types.d.ts +116 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/web-ui.d.ts.map +1 -1
- package/dist/ui/web-ui.js +1126 -3
- package/dist/ui/web-ui.js.map +1 -1
- package/mcp/package.json +2 -1
- package/mcp/server.ts +2 -0
- package/mcp/tools/image/module.ts +114 -9
- package/mcp/tools/memory/archive-reader.test.ts +212 -0
- package/mcp/tools/memory/archive-reader.ts +253 -0
- package/mcp/tools/memory/module.ts +152 -0
- package/mcp/tools/memory/retrieval-recorder.ts +66 -0
- package/mcp/tools/shared/share-client.ts +20 -1
- package/mcp/tools/skills/module.ts +28 -0
- package/package.json +1 -1
- package/resource/claude_gateway.svg +1038 -112
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DreamingManager — nightly memory consolidation, propose (dry-run) slice.
|
|
4
|
+
*
|
|
5
|
+
* Orchestrates: gather lookback transcript → print-only reviewer proposes memory
|
|
6
|
+
* ops → write DREAMS.md diary + JSONL audit. In propose mode (the only mode
|
|
7
|
+
* implemented here) NO memory file is mutated. The `auto` applier is a P3
|
|
8
|
+
* follow-up; until it lands, `auto` behaves like `propose` (logs proposals only).
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.DreamingManager = void 0;
|
|
45
|
+
exports.selectProposals = selectProposals;
|
|
46
|
+
exports.agentJitterMs = agentJitterMs;
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const cleanup_1 = require("../../history/cleanup");
|
|
50
|
+
const config_1 = require("../skill-learning/config");
|
|
51
|
+
const config_2 = require("./config");
|
|
52
|
+
const gather_1 = require("./gather");
|
|
53
|
+
const reviewer_1 = require("./reviewer");
|
|
54
|
+
const audit_1 = require("./audit");
|
|
55
|
+
const applier_1 = require("./applier");
|
|
56
|
+
const compactor_1 = require("./compactor");
|
|
57
|
+
const staleness_1 = require("./staleness");
|
|
58
|
+
const migrate_1 = require("./migrate");
|
|
59
|
+
const MS_PER_MINUTE = 60 * 1000;
|
|
60
|
+
// Cap the current-memory context fed to the reviewer so a large MEMORY.md (which
|
|
61
|
+
// is exactly what dreaming exists to shrink) can't blow up the prompt.
|
|
62
|
+
const REVIEWER_CONTEXT_CAP = 12000;
|
|
63
|
+
// Hard ceiling on shrink ops per run so a runaway over-budget reviewer can't thrash.
|
|
64
|
+
const MAX_SHRINK_OPS_PER_RUN = 30;
|
|
65
|
+
/** A proposal that reduces (or does not grow) MEMORY.md length. */
|
|
66
|
+
function isShrinkOp(p) {
|
|
67
|
+
if (p.op === 'remove')
|
|
68
|
+
return true;
|
|
69
|
+
if (p.op === 'replace')
|
|
70
|
+
return (p.content ?? '').trim().length <= (p.target ?? '').length;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Select which proposals to apply this run (#337). Under budget: the classic
|
|
75
|
+
* first-N cap. Over budget (overageFactor > 1): keep the non-shrink (add/grow)
|
|
76
|
+
* cap at `maxChanges`, but allow proportionally MORE shrink ops (remove /
|
|
77
|
+
* length-reducing replace) so an over-budget file converges instead of trickling
|
|
78
|
+
* at `maxChanges`/night. Capped at MAX_SHRINK_OPS_PER_RUN.
|
|
79
|
+
*/
|
|
80
|
+
function selectProposals(proposals, maxChanges, overageFactor) {
|
|
81
|
+
if (overageFactor <= 1 || maxChanges <= 0)
|
|
82
|
+
return proposals.slice(0, maxChanges);
|
|
83
|
+
const shrinkCap = Math.min(maxChanges * Math.ceil(overageFactor), MAX_SHRINK_OPS_PER_RUN);
|
|
84
|
+
const out = [];
|
|
85
|
+
let nonShrink = 0;
|
|
86
|
+
let shrink = 0;
|
|
87
|
+
for (const p of proposals) {
|
|
88
|
+
if (isShrinkOp(p)) {
|
|
89
|
+
if (shrink >= shrinkCap)
|
|
90
|
+
continue;
|
|
91
|
+
shrink++;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (nonShrink >= maxChanges)
|
|
95
|
+
continue;
|
|
96
|
+
nonShrink++;
|
|
97
|
+
}
|
|
98
|
+
out.push(p);
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
function readFileSafe(filePath) {
|
|
103
|
+
try {
|
|
104
|
+
return fs.readFileSync(filePath, 'utf8');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* planning-68 — deterministic per-agent jitter (ms) added to the nightly delay so
|
|
112
|
+
* agents don't all fire at `dreamHour:00` together (thundering herd → concurrent
|
|
113
|
+
* `claude -p` spawns). A stable string hash of `agentId` mapped into
|
|
114
|
+
* `[0, windowMinutes*60_000)`; NOT `Math.random`, so the offset is the same across
|
|
115
|
+
* reschedules and is unit-testable. Non-finite or `<= 0` window ⇒ 0 (feature off).
|
|
116
|
+
*/
|
|
117
|
+
function agentJitterMs(agentId, windowMinutes) {
|
|
118
|
+
if (!Number.isFinite(windowMinutes))
|
|
119
|
+
return 0;
|
|
120
|
+
const windowMs = Math.max(0, Math.floor(windowMinutes)) * 60000;
|
|
121
|
+
if (windowMs <= 0)
|
|
122
|
+
return 0;
|
|
123
|
+
let h = 0;
|
|
124
|
+
for (let i = 0; i < agentId.length; i++) {
|
|
125
|
+
h = (Math.imul(h, 31) + agentId.charCodeAt(i)) >>> 0;
|
|
126
|
+
}
|
|
127
|
+
return h % windowMs;
|
|
128
|
+
}
|
|
129
|
+
class DreamingManager {
|
|
130
|
+
constructor(deps) {
|
|
131
|
+
this.deps = deps;
|
|
132
|
+
this.cfg = (0, config_2.resolveDreamingConfig)(deps.agentCfg, deps.globalCfg);
|
|
133
|
+
}
|
|
134
|
+
log(msg, data) {
|
|
135
|
+
this.deps.logger?.info(msg, data);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Run one dream cycle. Never throws. In propose mode it writes only the diary
|
|
139
|
+
* + audit and mutates no memory file.
|
|
140
|
+
*/
|
|
141
|
+
async dreamOnce(now = Date.now()) {
|
|
142
|
+
const cfg = this.cfg;
|
|
143
|
+
const base = { proposalCount: 0, tokensSpent: 0, mode: cfg.mode };
|
|
144
|
+
if (!cfg.enabled || cfg.maxChangesPerRun <= 0) {
|
|
145
|
+
return { outcome: 'skipped-disabled', ...base };
|
|
146
|
+
}
|
|
147
|
+
const gathered = (0, gather_1.gatherTranscript)(this.deps.db, cfg, now);
|
|
148
|
+
// Quiet window: if the agent was active within quietMinutes, defer.
|
|
149
|
+
if (gathered.lastActivityMs > 0 && now - gathered.lastActivityMs < cfg.quietMinutes * MS_PER_MINUTE) {
|
|
150
|
+
return { outcome: 'skipped-quiet', ...base };
|
|
151
|
+
}
|
|
152
|
+
const memoryPath = path.join(this.deps.workspaceDir, 'MEMORY.md');
|
|
153
|
+
const memoryBudget = this.deps.memoryBudgetChars ?? 8000;
|
|
154
|
+
// DETERMINISTIC COMPACTION (#337): before the LLM reviewer, archive terminal
|
|
155
|
+
// (MERGED/CLOSED) log entries out to a searchable memory/archive/ file, leaving
|
|
156
|
+
// a pointer. This is the primary shrink lever for append-only PR/issue logs and
|
|
157
|
+
// needs no transcript — so it runs (auto mode only) even on empty-transcript
|
|
158
|
+
// nights. Best-effort; never blocks the dream.
|
|
159
|
+
let compactedCount = 0;
|
|
160
|
+
if (cfg.mode === 'auto') {
|
|
161
|
+
try {
|
|
162
|
+
compactedCount = (0, compactor_1.compactCompletedEntries)(this.deps.workspaceDir, now).archivedCount;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
compactedCount = 0;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ARCHIVE STALENESS GC (planning-66): after the compactor, keep the Lane-2
|
|
169
|
+
// archive's SEARCH quality high — soft-invalidate superseded / aged-out /
|
|
170
|
+
// low-recall entries (move to memory/archive/stale.md, never delete) and
|
|
171
|
+
// promote back anything retrieved after invalidation. Deterministic, memory-
|
|
172
|
+
// only (no session restart), best-effort. Auto mode only; injectable clock.
|
|
173
|
+
if (cfg.mode === 'auto' && cfg.staleness.enabled) {
|
|
174
|
+
try {
|
|
175
|
+
(0, staleness_1.runStalenessGc)(this.deps.workspaceDir, cfg.staleness, { now });
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
/* best-effort — never blocks the dream */
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// EMBEDDED ROUTE-OUT (planning-67): when MEMORY.md is over budget, drain its
|
|
182
|
+
// episodic task-log to memory/<topic>.md automatically — archive-first, so
|
|
183
|
+
// every moved block stays searchable (no manual `dreaming:migrate` per agent).
|
|
184
|
+
// Runs auto-mode + routing-on + over-budget only; transcript-independent (like
|
|
185
|
+
// the compactor) so a quiet agent still self-drains; idempotent (skips once
|
|
186
|
+
// under budget); pinned sections excluded inside migrateMemory. Best-effort.
|
|
187
|
+
let routedOut = 0;
|
|
188
|
+
if (cfg.mode === 'auto' &&
|
|
189
|
+
this.deps.writeRouting &&
|
|
190
|
+
cfg.autoRouteOut &&
|
|
191
|
+
this.deps.routeOutFn) {
|
|
192
|
+
const chars = readFileSafe(memoryPath).length;
|
|
193
|
+
if (chars > memoryBudget) {
|
|
194
|
+
try {
|
|
195
|
+
const res = await (0, migrate_1.migrateMemory)(this.deps.workspaceDir, {
|
|
196
|
+
mode: 'apply',
|
|
197
|
+
skipTerminalSweep: true, // the compactor already ran this tick
|
|
198
|
+
episodicArchiveDir: this.deps.episodicArchiveDir || 'memory',
|
|
199
|
+
routeOut: this.deps.routeOutFn,
|
|
200
|
+
now,
|
|
201
|
+
});
|
|
202
|
+
routedOut = res.episodicMoved;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
/* best-effort — never blocks the dream */
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (routedOut > 0) {
|
|
210
|
+
this.log('dream: embedded route-out drained episodic task-log', { routedOut });
|
|
211
|
+
}
|
|
212
|
+
if (!gathered.transcript.trim()) {
|
|
213
|
+
this.audit(now, 'skipped-empty', '', [], 0, 0, cfg.mode === 'auto' ? 0 : undefined, compactedCount);
|
|
214
|
+
return { outcome: 'skipped-empty', ...base, compactedCount };
|
|
215
|
+
}
|
|
216
|
+
// Read the TRUE on-disk MEMORY.md size for the budget signal (the reviewer
|
|
217
|
+
// context below is truncated, so it can't be used to measure the file).
|
|
218
|
+
const memoryChars = readFileSafe(memoryPath).length;
|
|
219
|
+
const currentMemory = readFileSafe(memoryPath).slice(0, REVIEWER_CONTEXT_CAP);
|
|
220
|
+
const currentUser = readFileSafe(path.join(this.deps.workspaceDir, 'USER.md')).slice(0, REVIEWER_CONTEXT_CAP);
|
|
221
|
+
let review;
|
|
222
|
+
try {
|
|
223
|
+
review = await (0, reviewer_1.runDreamReviewer)({
|
|
224
|
+
transcript: gathered.transcript,
|
|
225
|
+
currentMemory,
|
|
226
|
+
currentUser,
|
|
227
|
+
memoryChars,
|
|
228
|
+
memoryBudget,
|
|
229
|
+
writeRouting: this.deps.writeRouting,
|
|
230
|
+
}, cfg, this.deps.spawnFn);
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
// Defensive only: runDreamReviewer is contracted NEVER to throw — it converts
|
|
234
|
+
// every spawn failure into a `timedOut` result. The #352 catch that logged
|
|
235
|
+
// here was therefore dead code. Keep a minimal guard so a future contract
|
|
236
|
+
// break still audits instead of crashing, but the REAL reviewer-failure
|
|
237
|
+
// diagnostic lives on the reachable branch below (#353).
|
|
238
|
+
this.log('dream: reviewer threw unexpectedly (contract violation)', {
|
|
239
|
+
agentId: this.deps.agentId,
|
|
240
|
+
error: err instanceof Error ? err.message : String(err),
|
|
241
|
+
compacted: compactedCount,
|
|
242
|
+
});
|
|
243
|
+
this.audit(now, 'error', '', [], 0, gathered.sessionCount, undefined, compactedCount);
|
|
244
|
+
return { outcome: 'error', ...base, compactedCount };
|
|
245
|
+
}
|
|
246
|
+
// Over budget ⇒ allow proportionally more shrink ops so the file converges (#337).
|
|
247
|
+
const overageFactor = memoryBudget > 0 ? memoryChars / memoryBudget : 1;
|
|
248
|
+
const proposals = selectProposals(review.proposals, cfg.maxChangesPerRun, overageFactor);
|
|
249
|
+
const outcome = review.timedOut
|
|
250
|
+
? 'error'
|
|
251
|
+
: proposals.length > 0
|
|
252
|
+
? 'proposed'
|
|
253
|
+
: 'no-changes';
|
|
254
|
+
// Surface WHY the reviewer produced no usable output (#353). This was
|
|
255
|
+
// previously invisible: makeClaudeSpawn discarded stderr and collapsed
|
|
256
|
+
// timeout / spawn-error / non-zero-exit into a lone `timedOut`, and the #352
|
|
257
|
+
// reviewer-catch log above was unreachable (runDreamReviewer never throws).
|
|
258
|
+
// Log the distinguishable reason HERE, on the branch that actually fires, so
|
|
259
|
+
// the next dream night records the real cause (timeout vs API 429 vs …).
|
|
260
|
+
if (review.timedOut || review.failureReason) {
|
|
261
|
+
this.log('dream: reviewer produced no usable output', {
|
|
262
|
+
agentId: this.deps.agentId,
|
|
263
|
+
outcome,
|
|
264
|
+
failureReason: review.failureReason ?? 'unknown',
|
|
265
|
+
stderrTail: review.stderrTail,
|
|
266
|
+
compacted: compactedCount,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// AUTO MODE (K4): apply the ops to memory through the safe applier (backup +
|
|
270
|
+
// ordered anchor re-resolution + bounded-loss + net-negative + append-only
|
|
271
|
+
// fallback). Writing MEMORY.md/USER.md is memory-only ⇒ no session restart
|
|
272
|
+
// (Part A). PROPOSE MODE mutates nothing — diary + audit only.
|
|
273
|
+
let appliedCount = 0;
|
|
274
|
+
if (cfg.mode === 'auto' && outcome === 'proposed') {
|
|
275
|
+
let appliedProposals = [];
|
|
276
|
+
try {
|
|
277
|
+
const applied = (0, applier_1.applyDreamProposals)(this.deps.workspaceDir, proposals, {
|
|
278
|
+
memoryBudgetChars: memoryBudget,
|
|
279
|
+
userBudgetChars: this.deps.userBudgetChars ?? 3000,
|
|
280
|
+
// planning-65: route episodic ops to memory/<topic>.md only when routing is on.
|
|
281
|
+
episodicArchiveDir: this.deps.writeRouting
|
|
282
|
+
? this.deps.episodicArchiveDir || 'memory'
|
|
283
|
+
: undefined,
|
|
284
|
+
// planning-67: relocate net-shrink `remove`s to a searchable archive
|
|
285
|
+
// (never silently delete) when routing is on.
|
|
286
|
+
archivePrunedRemovals: this.deps.writeRouting === true,
|
|
287
|
+
}, now);
|
|
288
|
+
appliedCount = applied.totalApplied;
|
|
289
|
+
appliedProposals = applied.appliedProposals;
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
appliedCount = 0; // applier never throws, but stay a safe no-op regardless
|
|
293
|
+
}
|
|
294
|
+
// Per-agent→shared promotion (K3↔K4): contribute ONLY the `add`s the applier
|
|
295
|
+
// actually wrote to local memory — never a proposal that was skipped locally
|
|
296
|
+
// (net-negative / bounded-loss), so the shared vault can't gain content the
|
|
297
|
+
// agent's own memory refused. Gated + wired by the gateway (shared enabled +
|
|
298
|
+
// mode auto); best-effort — a promotion failure never affects the local dream.
|
|
299
|
+
if (this.deps.sharedPromote) {
|
|
300
|
+
for (const p of appliedProposals) {
|
|
301
|
+
// Only durable `add`s promote to shared; episodic task-log stays local.
|
|
302
|
+
if (p.op !== 'add' || !p.content || p.tier === 'episodic')
|
|
303
|
+
continue;
|
|
304
|
+
try {
|
|
305
|
+
this.deps.sharedPromote(p);
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
/* best-effort */
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
this.audit(now, outcome, review.summary, proposals, review.tokensSpent, gathered.sessionCount, cfg.mode === 'auto' ? appliedCount : undefined, compactedCount);
|
|
314
|
+
this.log('Dream run complete', {
|
|
315
|
+
agentId: this.deps.agentId,
|
|
316
|
+
outcome,
|
|
317
|
+
mode: cfg.mode,
|
|
318
|
+
proposals: proposals.length,
|
|
319
|
+
applied: appliedCount,
|
|
320
|
+
compacted: compactedCount,
|
|
321
|
+
tokens: review.tokensSpent,
|
|
322
|
+
});
|
|
323
|
+
return {
|
|
324
|
+
outcome,
|
|
325
|
+
proposalCount: proposals.length,
|
|
326
|
+
tokensSpent: review.tokensSpent,
|
|
327
|
+
mode: cfg.mode,
|
|
328
|
+
appliedCount,
|
|
329
|
+
compactedCount,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
audit(ts, outcome, summary, proposals, tokensSpent, sessionCount, appliedCount, compactedCount) {
|
|
333
|
+
(0, audit_1.writeDreamAudit)(this.deps.workspaceDir, {
|
|
334
|
+
ts,
|
|
335
|
+
outcome,
|
|
336
|
+
mode: this.cfg.mode,
|
|
337
|
+
summary,
|
|
338
|
+
proposals,
|
|
339
|
+
tokensSpent,
|
|
340
|
+
sessionCount,
|
|
341
|
+
appliedCount,
|
|
342
|
+
compactedCount,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Start the nightly dream scheduler (mirror `startCurator`): a self-rescheduling
|
|
347
|
+
* unref'd timer at `dreamHour` in `dreamTimezone`. Best-effort; never throws at
|
|
348
|
+
* boot (invalid tz already normalized to UTC in resolveDreamingConfig).
|
|
349
|
+
*/
|
|
350
|
+
startDreaming() {
|
|
351
|
+
if (!this.cfg.enabled || this.cfg.maxChangesPerRun <= 0)
|
|
352
|
+
return;
|
|
353
|
+
const tz = (0, config_1.isValidTimezone)(this.cfg.dreamTimezone) ? this.cfg.dreamTimezone : 'UTC';
|
|
354
|
+
const schedule = () => {
|
|
355
|
+
// planning-68: spread agents across a window so they don't all fire at
|
|
356
|
+
// dreamHour:00 together (deterministic per-agent offset, stable per reschedule).
|
|
357
|
+
const delay = (0, cleanup_1.msUntilNextTime)(this.cfg.dreamHour, this.cfg.dreamMinute, tz) +
|
|
358
|
+
agentJitterMs(this.deps.agentId, this.cfg.staggerWindowMinutes);
|
|
359
|
+
this.timer = setTimeout(() => {
|
|
360
|
+
void this.dreamOnce(Date.now()).catch(() => {
|
|
361
|
+
/* best-effort */
|
|
362
|
+
});
|
|
363
|
+
schedule();
|
|
364
|
+
}, delay);
|
|
365
|
+
if (typeof this.timer.unref === 'function') {
|
|
366
|
+
this.timer.unref();
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
schedule();
|
|
370
|
+
}
|
|
371
|
+
stop() {
|
|
372
|
+
if (this.timer)
|
|
373
|
+
clearTimeout(this.timer);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.DreamingManager = DreamingManager;
|
|
377
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/dreaming/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* One-shot memory migration entry (planning-65).
|
|
4
|
+
*
|
|
5
|
+
* Drains an over-budget MEMORY.md: a deterministic terminal sweep (#337
|
|
6
|
+
* compactor) + an LLM route-out pass that moves episodic task-log blocks to
|
|
7
|
+
* `memory/<topic>.md`. Pinned sections are excluded and nothing is deleted
|
|
8
|
+
* (content is relocated, still searchable via `memory_search`).
|
|
9
|
+
*
|
|
10
|
+
* Usage: node migrate-cli.js <workspaceDir> [--apply] [<reviewModel>]
|
|
11
|
+
* (default is a dry-run that writes .dreaming/migration-plan.md)
|
|
12
|
+
*
|
|
13
|
+
* The route-out classifier is a print-only `claude -p` (no tools, untrusted
|
|
14
|
+
* input) — same safety model as the dreaming reviewer.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=migrate-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cli.d.ts","sourceRoot":"","sources":["../../../src/agent/dreaming/migrate-cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* One-shot memory migration entry (planning-65).
|
|
5
|
+
*
|
|
6
|
+
* Drains an over-budget MEMORY.md: a deterministic terminal sweep (#337
|
|
7
|
+
* compactor) + an LLM route-out pass that moves episodic task-log blocks to
|
|
8
|
+
* `memory/<topic>.md`. Pinned sections are excluded and nothing is deleted
|
|
9
|
+
* (content is relocated, still searchable via `memory_search`).
|
|
10
|
+
*
|
|
11
|
+
* Usage: node migrate-cli.js <workspaceDir> [--apply] [<reviewModel>]
|
|
12
|
+
* (default is a dry-run that writes .dreaming/migration-plan.md)
|
|
13
|
+
*
|
|
14
|
+
* The route-out classifier is a print-only `claude -p` (no tools, untrusted
|
|
15
|
+
* input) — same safety model as the dreaming reviewer.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const reviewer_1 = require("../skill-learning/reviewer");
|
|
19
|
+
const migrate_1 = require("./migrate");
|
|
20
|
+
const DEFAULT_MODEL = 'claude-haiku-4-5-20251001';
|
|
21
|
+
async function main() {
|
|
22
|
+
const workspaceDir = process.argv[2];
|
|
23
|
+
if (!workspaceDir) {
|
|
24
|
+
process.stderr.write('usage: migrate-cli <workspaceDir> [--apply] [<reviewModel>]\n');
|
|
25
|
+
process.exit(2);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const apply = process.argv.includes('--apply');
|
|
29
|
+
const model = process.argv.find((a, i) => i >= 3 && a !== '--apply') ?? DEFAULT_MODEL;
|
|
30
|
+
const result = await (0, migrate_1.migrateMemory)(workspaceDir, {
|
|
31
|
+
mode: apply ? 'apply' : 'propose',
|
|
32
|
+
routeOut: (0, migrate_1.makeRouteOut)((0, reviewer_1.makeClaudeSpawn)(model)),
|
|
33
|
+
});
|
|
34
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
35
|
+
}
|
|
36
|
+
void main()
|
|
37
|
+
.then(() => process.exit(0))
|
|
38
|
+
.catch((err) => {
|
|
39
|
+
process.stderr.write(`[migrate-cli] ${err.message}\n`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=migrate-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cli.js","sourceRoot":"","sources":["../../../src/agent/dreaming/migrate-cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;GAaG;;AAEH,yDAA6D;AAC7D,uCAAwD;AAExD,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,IAAI,aAAa,CAAC;IAEtF,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAa,EAAC,YAAY,EAAE;QAC/C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACjC,QAAQ,EAAE,IAAA,sBAAY,EAAC,IAAA,0BAAe,EAAC,KAAK,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,IAAI,EAAE;KACR,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAkB,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot memory migration (planning-65) — drain an over-budget MEMORY.md that
|
|
3
|
+
* accumulated task-log before write-routing existed.
|
|
4
|
+
*
|
|
5
|
+
* Two deterministic passes, both non-destructive (content is relocated, never
|
|
6
|
+
* deleted — everything stays searchable via `memory_search`):
|
|
7
|
+
*
|
|
8
|
+
* Pass 1 — terminal sweep: reuse the shipped compactor (#337) to move
|
|
9
|
+
* MERGED/CLOSED/✅-marked blocks to `memory/archive/completed.md`.
|
|
10
|
+
*
|
|
11
|
+
* Pass 2 — episodic route-out: an injected classifier (`routeOut`, in
|
|
12
|
+
* production a print-only reviewer) proposes which REMAINING MEMORY.md blocks
|
|
13
|
+
* are episodic task-log. Each surviving proposal moves the block's text to
|
|
14
|
+
* `memory/<topic>.md` and removes the block from MEMORY.md. Pinned sections
|
|
15
|
+
* (`## User`, `## Feedback`, `## Preferences`) are hard-excluded — never moved.
|
|
16
|
+
*
|
|
17
|
+
* `mode:"propose"` writes a `.dreaming/migration-plan.md` review file and mutates
|
|
18
|
+
* MEMORY.md not at all (beyond Pass 1's deterministic sweep, which is always safe
|
|
19
|
+
* and idempotent). `mode:"apply"` performs the moves (archive-first, then one
|
|
20
|
+
* backed-up atomic rewrite of MEMORY.md).
|
|
21
|
+
*/
|
|
22
|
+
import type { ClaudeSpawnFn } from '../skill-learning/reviewer';
|
|
23
|
+
import type { DreamProposal } from './types';
|
|
24
|
+
export type MigrateMode = 'propose' | 'apply';
|
|
25
|
+
export interface MigrateOptions {
|
|
26
|
+
mode: MigrateMode;
|
|
27
|
+
/**
|
|
28
|
+
* Classifier that, given the (post-sweep) MEMORY.md, returns episodic-move
|
|
29
|
+
* proposals: `{op:'add', tier:'episodic', topic, content, target}` where
|
|
30
|
+
* `target` is the exact MEMORY.md block text to remove. Injected so it is
|
|
31
|
+
* fully testable without a live model; production wraps the dream reviewer.
|
|
32
|
+
*/
|
|
33
|
+
routeOut?: (memory: string) => Promise<DreamProposal[]> | DreamProposal[];
|
|
34
|
+
/** Episodic archive dir (relative to workspace). Default "memory". */
|
|
35
|
+
episodicArchiveDir?: string;
|
|
36
|
+
/**
|
|
37
|
+
* planning-67: skip Pass 1 (terminal sweep). The nightly dream already runs
|
|
38
|
+
* the compactor before this call, so re-running it would be a redundant no-op;
|
|
39
|
+
* the embedded route-out stage sets this to go straight to Pass 2.
|
|
40
|
+
*/
|
|
41
|
+
skipTerminalSweep?: boolean;
|
|
42
|
+
now?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface MigrateResult {
|
|
45
|
+
/** Terminal-state blocks archived by the compactor sweep (Pass 1). */
|
|
46
|
+
terminalArchived: number;
|
|
47
|
+
/** Episodic blocks moved to memory/<topic>.md (Pass 2, apply mode only). */
|
|
48
|
+
episodicMoved: number;
|
|
49
|
+
/** Episodic-move proposals that survived validation (propose + apply). */
|
|
50
|
+
episodicPlanned: number;
|
|
51
|
+
/** Path to the written migration-plan.md (propose mode). */
|
|
52
|
+
planPath?: string;
|
|
53
|
+
memoryCharsBefore: number;
|
|
54
|
+
memoryCharsAfter: number;
|
|
55
|
+
}
|
|
56
|
+
/** Char range [start,end) of each pinned section in `memory` (heading → next h1/h2). */
|
|
57
|
+
export declare function pinnedRanges(memory: string): Array<[number, number]>;
|
|
58
|
+
/** True iff the block at `original.indexOf(target)` sits inside a pinned section. */
|
|
59
|
+
export declare function isTargetPinned(memory: string, target: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Run the migration. Never throws on a per-pass error — returns what it managed
|
|
62
|
+
* to do. In `apply` mode the episodic notes are written BEFORE MEMORY.md is
|
|
63
|
+
* rewritten (archive-first), and MEMORY.md is backed up before the atomic write.
|
|
64
|
+
*/
|
|
65
|
+
export declare function migrateMemory(workspaceDir: string, opts: MigrateOptions): Promise<MigrateResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Build the injected route-out classifier that `migrateMemory` consumes, backed by
|
|
68
|
+
* a print-only claude spawn (no tools, untrusted input — same safety model as the
|
|
69
|
+
* dreaming reviewer). Injectable `spawn` keeps it fully testable without a model.
|
|
70
|
+
*/
|
|
71
|
+
export declare function makeRouteOut(spawn: ClaudeSpawnFn): (memory: string) => Promise<DreamProposal[]>;
|
|
72
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/agent/dreaming/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1E,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AA2BD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmBpE;AAMD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKtE;AAyCD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CAmGxB;AA+CD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CA0C/F"}
|