smart-claude-memory-mcp 2.1.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.
Files changed (104) hide show
  1. package/.claude-plugin/plugin.json +38 -0
  2. package/CHANGELOG.md +52 -0
  3. package/LICENSE +21 -0
  4. package/README.md +790 -0
  5. package/dist/chunker.js +33 -0
  6. package/dist/chunker.js.map +1 -0
  7. package/dist/config.js +23 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/curriculum/daemon.js +190 -0
  10. package/dist/curriculum/daemon.js.map +1 -0
  11. package/dist/curriculum/scanner.js +237 -0
  12. package/dist/curriculum/scanner.js.map +1 -0
  13. package/dist/index.js +429 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lib/migrations.js +128 -0
  16. package/dist/lib/migrations.js.map +1 -0
  17. package/dist/ollama.js +59 -0
  18. package/dist/ollama.js.map +1 -0
  19. package/dist/project-detect.js +102 -0
  20. package/dist/project-detect.js.map +1 -0
  21. package/dist/project.js +26 -0
  22. package/dist/project.js.map +1 -0
  23. package/dist/sleep/daemon.js +215 -0
  24. package/dist/sleep/daemon.js.map +1 -0
  25. package/dist/sleep/miner.js +285 -0
  26. package/dist/sleep/miner.js.map +1 -0
  27. package/dist/supabase.js +405 -0
  28. package/dist/supabase.js.map +1 -0
  29. package/dist/telemetry/emit.js +19 -0
  30. package/dist/telemetry/emit.js.map +1 -0
  31. package/dist/telemetry/pruner.js +141 -0
  32. package/dist/telemetry/pruner.js.map +1 -0
  33. package/dist/telemetry/types.js +2 -0
  34. package/dist/telemetry/types.js.map +1 -0
  35. package/dist/tools/backlog.js +599 -0
  36. package/dist/tools/backlog.js.map +1 -0
  37. package/dist/tools/batch-freeze-patterns.js +243 -0
  38. package/dist/tools/batch-freeze-patterns.js.map +1 -0
  39. package/dist/tools/bloat-audit.js +101 -0
  40. package/dist/tools/bloat-audit.js.map +1 -0
  41. package/dist/tools/checkpoint.js +259 -0
  42. package/dist/tools/checkpoint.js.map +1 -0
  43. package/dist/tools/compact.js +60 -0
  44. package/dist/tools/compact.js.map +1 -0
  45. package/dist/tools/conflict.js +102 -0
  46. package/dist/tools/conflict.js.map +1 -0
  47. package/dist/tools/curriculum.js +225 -0
  48. package/dist/tools/curriculum.js.map +1 -0
  49. package/dist/tools/frozen-cache.js +106 -0
  50. package/dist/tools/frozen-cache.js.map +1 -0
  51. package/dist/tools/health.js +368 -0
  52. package/dist/tools/health.js.map +1 -0
  53. package/dist/tools/hygiene.js +309 -0
  54. package/dist/tools/hygiene.js.map +1 -0
  55. package/dist/tools/image.js +107 -0
  56. package/dist/tools/image.js.map +1 -0
  57. package/dist/tools/list-global-patterns.js +101 -0
  58. package/dist/tools/list-global-patterns.js.map +1 -0
  59. package/dist/tools/orchestrator.js +113 -0
  60. package/dist/tools/orchestrator.js.map +1 -0
  61. package/dist/tools/policy.js +90 -0
  62. package/dist/tools/policy.js.map +1 -0
  63. package/dist/tools/refactor.js +220 -0
  64. package/dist/tools/refactor.js.map +1 -0
  65. package/dist/tools/save.js +42 -0
  66. package/dist/tools/save.js.map +1 -0
  67. package/dist/tools/search.js +189 -0
  68. package/dist/tools/search.js.map +1 -0
  69. package/dist/tools/setup.js +868 -0
  70. package/dist/tools/setup.js.map +1 -0
  71. package/dist/tools/shared-schemas.js +24 -0
  72. package/dist/tools/shared-schemas.js.map +1 -0
  73. package/dist/tools/skills.js +174 -0
  74. package/dist/tools/skills.js.map +1 -0
  75. package/dist/tools/sleep.js +239 -0
  76. package/dist/tools/sleep.js.map +1 -0
  77. package/dist/tools/sovereign-constitution.js +319 -0
  78. package/dist/tools/sovereign-constitution.js.map +1 -0
  79. package/dist/tools/summarize.js +55 -0
  80. package/dist/tools/summarize.js.map +1 -0
  81. package/dist/tools/sync.js +255 -0
  82. package/dist/tools/sync.js.map +1 -0
  83. package/dist/tools/system_dashboard.js +181 -0
  84. package/dist/tools/system_dashboard.js.map +1 -0
  85. package/dist/tools/update-rule.js +15 -0
  86. package/dist/tools/update-rule.js.map +1 -0
  87. package/dist/tools/verification.js +333 -0
  88. package/dist/tools/verification.js.map +1 -0
  89. package/dist/trajectory/daemon.js +270 -0
  90. package/dist/trajectory/daemon.js.map +1 -0
  91. package/dist/trajectory/stripper.js +124 -0
  92. package/dist/trajectory/stripper.js.map +1 -0
  93. package/dist/trajectory/summarizer.js +77 -0
  94. package/dist/trajectory/summarizer.js.map +1 -0
  95. package/dist/transactions/checkpoint.js +272 -0
  96. package/dist/transactions/checkpoint.js.map +1 -0
  97. package/dist/verification-gate.js +43 -0
  98. package/dist/verification-gate.js.map +1 -0
  99. package/dist/version.js +16 -0
  100. package/dist/version.js.map +1 -0
  101. package/hooks/README.md +54 -0
  102. package/hooks/md-policy.py +497 -0
  103. package/marketplace.json +13 -0
  104. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"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"}
package/dist/ollama.js ADDED
@@ -0,0 +1,59 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { config } from "./config.js";
3
+ export async function embed(texts) {
4
+ if (texts.length === 0)
5
+ return [];
6
+ const res = await fetch(`${config.OLLAMA_HOST}/api/embed`, {
7
+ method: "POST",
8
+ headers: { "content-type": "application/json" },
9
+ body: JSON.stringify({
10
+ model: config.OLLAMA_EMBED_MODEL,
11
+ input: texts,
12
+ }),
13
+ });
14
+ if (!res.ok) {
15
+ throw new Error(`Ollama embed failed ${res.status}: ${await res.text()}`);
16
+ }
17
+ const json = (await res.json());
18
+ const bad = json.embeddings.find((v) => v.length !== config.EMBED_DIM);
19
+ if (bad) {
20
+ throw new Error(`Embedding dim mismatch: got ${bad.length}, expected ${config.EMBED_DIM}. ` +
21
+ `Check OLLAMA_EMBED_MODEL and EMBED_DIM in .env.`);
22
+ }
23
+ return json.embeddings;
24
+ }
25
+ const CHAT_MODEL = process.env.OLLAMA_CHAT_MODEL ?? "qwen3-coder:480b-cloud";
26
+ const VISION_MODEL = process.env.OLLAMA_VISION_MODEL ?? "moondream";
27
+ export async function chat(messages, opts = {}) {
28
+ const model = opts.model ?? CHAT_MODEL;
29
+ const controller = new AbortController();
30
+ const timeout = opts.timeoutMs ?? 60_000;
31
+ const t = setTimeout(() => controller.abort(), timeout);
32
+ try {
33
+ const res = await fetch(`${config.OLLAMA_HOST}/api/chat`, {
34
+ method: "POST",
35
+ headers: { "content-type": "application/json" },
36
+ body: JSON.stringify({
37
+ model,
38
+ messages,
39
+ stream: false,
40
+ options: opts.temperature != null ? { temperature: opts.temperature } : undefined,
41
+ }),
42
+ signal: controller.signal,
43
+ });
44
+ if (!res.ok)
45
+ throw new Error(`chat failed ${res.status}: ${await res.text()}`);
46
+ const json = (await res.json());
47
+ return json.message?.content ?? "";
48
+ }
49
+ finally {
50
+ clearTimeout(t);
51
+ }
52
+ }
53
+ /** Moondream (or any multimodal Ollama model) caption. Returns plain text. */
54
+ export async function captionImage(imagePath, prompt = "Describe this image in detail, including any text, diagrams, people, objects, and inferred context.", opts = {}) {
55
+ const bytes = await readFile(imagePath);
56
+ const base64 = bytes.toString("base64");
57
+ return chat([{ role: "user", content: prompt, images: [base64] }], { model: opts.model ?? VISION_MODEL, timeoutMs: opts.timeoutMs ?? 120_000 });
58
+ }
59
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { stat, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ async function exists(p) {
4
+ try {
5
+ await stat(p);
6
+ return true;
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ }
12
+ async function fileIncludes(p, needle) {
13
+ try {
14
+ const content = await readFile(p, "utf8");
15
+ return content.includes(needle);
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ /**
22
+ * Detect the project's stack from filesystem markers. Used by refactor_guard
23
+ * to pick the right compiler-gate command and by init_project to customize
24
+ * the readiness report per stack.
25
+ */
26
+ export async function detectProjectType(workspace) {
27
+ const markers = [];
28
+ const pubspec = join(workspace, "pubspec.yaml");
29
+ const packageJson = join(workspace, "package.json");
30
+ const tsconfig = join(workspace, "tsconfig.json");
31
+ const pyproject = join(workspace, "pyproject.toml");
32
+ const requirements = join(workspace, "requirements.txt");
33
+ const cargoToml = join(workspace, "Cargo.toml");
34
+ const goMod = join(workspace, "go.mod");
35
+ const [hasPub, hasPkg, hasTs, hasPy, hasReq, hasCargo, hasGo] = await Promise.all([
36
+ exists(pubspec), exists(packageJson), exists(tsconfig),
37
+ exists(pyproject), exists(requirements), exists(cargoToml), exists(goMod),
38
+ ]);
39
+ if (hasPub) {
40
+ markers.push("pubspec.yaml");
41
+ // Treat any pubspec as Flutter unless it explicitly has no flutter dep.
42
+ const isFlutter = await fileIncludes(pubspec, "flutter:");
43
+ return {
44
+ workspace,
45
+ type: isFlutter ? "flutter" : "dart",
46
+ markers,
47
+ compiler_gate_command: { bin: isFlutter ? "flutter" : "dart", args: ["analyze"] },
48
+ };
49
+ }
50
+ if (hasPkg) {
51
+ markers.push("package.json");
52
+ if (hasTs) {
53
+ markers.push("tsconfig.json");
54
+ return {
55
+ workspace,
56
+ type: "web-ts",
57
+ markers,
58
+ // npx to avoid requiring a global typescript install.
59
+ compiler_gate_command: { bin: "npx", args: ["tsc", "--noEmit"] },
60
+ };
61
+ }
62
+ return {
63
+ workspace,
64
+ type: "web-js",
65
+ markers,
66
+ // node --check is per-file, not project-wide. For a JS project the
67
+ // pragmatic gate is 'npm run build' or a lint script. Default to
68
+ // 'node --check <entry>' if we had one — otherwise no automatic gate.
69
+ compiler_gate_command: null,
70
+ };
71
+ }
72
+ if (hasPy || hasReq) {
73
+ markers.push(hasPy ? "pyproject.toml" : "requirements.txt");
74
+ return {
75
+ workspace,
76
+ type: "python",
77
+ markers,
78
+ // py_compile gives syntax check across a whole package cheaply.
79
+ compiler_gate_command: { bin: "python", args: ["-m", "compileall", "-q", workspace] },
80
+ };
81
+ }
82
+ if (hasCargo) {
83
+ markers.push("Cargo.toml");
84
+ return {
85
+ workspace,
86
+ type: "rust",
87
+ markers,
88
+ compiler_gate_command: { bin: "cargo", args: ["check"] },
89
+ };
90
+ }
91
+ if (hasGo) {
92
+ markers.push("go.mod");
93
+ return {
94
+ workspace,
95
+ type: "go",
96
+ markers,
97
+ compiler_gate_command: { bin: "go", args: ["vet", "./..."] },
98
+ };
99
+ }
100
+ return { workspace, type: "unknown", markers, compiler_gate_command: null };
101
+ }
102
+ //# sourceMappingURL=project-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detect.js","sourceRoot":"","sources":["../src/project-detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { basename } from "node:path";
2
+ export function slugify(s) {
3
+ const cleaned = s
4
+ .toLowerCase()
5
+ .normalize("NFKD")
6
+ .replace(/[̀-ͯ]/g, "")
7
+ .replace(/[^a-z0-9\s_-]/g, "")
8
+ .trim()
9
+ .replace(/[\s_]+/g, "-")
10
+ .replace(/-+/g, "-")
11
+ .replace(/^-|-$/g, "");
12
+ return cleaned || "default";
13
+ }
14
+ export function detectProjectId(cwd = process.cwd()) {
15
+ return slugify(basename(cwd) || "default");
16
+ }
17
+ export const currentProjectId = detectProjectId();
18
+ // v1.1.1 display/slug decoupling — DB key stays "claude-memory" (preserves 1013 memory chunks);
19
+ // user-facing renders show "smart-claude-memory" to match post-rebrand brand.
20
+ // Remove this bridge once Supabase rows are migrated to the new slug (see v1.2.0).
21
+ export function displayProjectName(projectId) {
22
+ if (projectId === "claude-memory")
23
+ return "smart-claude-memory";
24
+ return projectId;
25
+ }
26
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,MAAM,OAAO,GAAG,CAAC;SACd,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACzD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC;AAElD,gGAAgG;AAChG,8EAA8E;AAC9E,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,IAAI,SAAS,KAAK,eAAe;QAAE,OAAO,qBAAqB,CAAC;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,215 @@
1
+ // Sleep Learning Daemon (Agentic OS 2026 / Mission 3 / SCM-S19-D1).
2
+ // Idle miner: every SLEEP_LEARNER_INTERVAL_MS, calls mineClusters() over the
3
+ // current project's trajectory_summaries ⋈ archive_backlog (success), emits
4
+ // skill_candidates via upsert_skill_candidate RPC.
5
+ //
6
+ // SCM-S22-D1 (M3 Proposer Remediation / Single Brain mandate):
7
+ // The daemon ONLY mines + stubs. Generative naming/step-extraction is the
8
+ // Orchestrator's domain (compose_skill_candidate tool). Auto-promotion is
9
+ // likewise Orchestrator-only — there is no Node-side promotion path.
10
+ // Boundary Invariant #1: no AI/LLM imports inside src/sleep/**.
11
+ //
12
+ // Mirrors src/trajectory/daemon.ts: module-level state, .unref()'d interval,
13
+ // re-entrancy guard, try/finally tick so the loop NEVER throws.
14
+ import { supabase } from "../supabase.js";
15
+ import { currentProjectId } from "../project.js";
16
+ import { mineClusters } from "./miner.js";
17
+ import { emit } from "../telemetry/emit.js";
18
+ const DEFAULT_INTERVAL_MS = 3_600_000;
19
+ const DEFAULT_BATCH = 10;
20
+ const DEFAULT_MIN_FREQ = 3;
21
+ const state = {
22
+ enabled: false,
23
+ intervalMs: DEFAULT_INTERVAL_MS,
24
+ batch: DEFAULT_BATCH,
25
+ minFreq: DEFAULT_MIN_FREQ,
26
+ lastRunAt: null,
27
+ lastRunMined: 0,
28
+ lastRunSkipped: 0,
29
+ lastRunErrored: 0,
30
+ lastRunDurationMs: 0,
31
+ candidatesMinedTotal: 0,
32
+ timer: null,
33
+ running: false,
34
+ };
35
+ function readIntEnv(name, fallback) {
36
+ const raw = process.env[name];
37
+ if (!raw)
38
+ return fallback;
39
+ const n = Number.parseInt(raw, 10);
40
+ return Number.isFinite(n) && n > 0 ? n : fallback;
41
+ }
42
+ function resolveConfig() {
43
+ return {
44
+ intervalMs: readIntEnv("SLEEP_LEARNER_INTERVAL_MS", DEFAULT_INTERVAL_MS),
45
+ batch: readIntEnv("SLEEP_LEARNER_BATCH", DEFAULT_BATCH),
46
+ minFreq: readIntEnv("SLEEP_LEARNER_MIN_FREQ", DEFAULT_MIN_FREQ),
47
+ };
48
+ }
49
+ /**
50
+ * Process one cluster: upsert a stub via the RPC with NULL proposed_name /
51
+ * proposed_steps / model. The Orchestrator fills those in via
52
+ * compose_skill_candidate before promotion. Per-cluster try/catch — one bad
53
+ * cluster never breaks the batch.
54
+ */
55
+ export async function mineOneCluster(stub) {
56
+ const { data: upsertData, error: upsertError } = await supabase.rpc("upsert_skill_candidate", {
57
+ p_project_id: stub.project_id,
58
+ p_pattern_hash: stub.pattern_hash,
59
+ p_source_summary_ids: stub.source_summary_ids,
60
+ p_source_backlog_ids: stub.source_backlog_ids,
61
+ p_frequency: stub.frequency,
62
+ p_success_count: stub.success_count,
63
+ p_candidate_embedding: stub.candidate_embedding,
64
+ p_proposed_name: null,
65
+ p_proposed_steps: null,
66
+ p_model: null,
67
+ p_strategy: "centroid+ngram",
68
+ });
69
+ if (upsertError) {
70
+ return {
71
+ ok: false,
72
+ candidate_id: null,
73
+ is_new: false,
74
+ reason: `upsert_failed: ${upsertError.message}`,
75
+ };
76
+ }
77
+ // upsert_skill_candidate returns SETOF (id, state, frequency, success_count, is_new).
78
+ const rows = (upsertData ?? []);
79
+ if (rows.length === 0) {
80
+ return {
81
+ ok: false,
82
+ candidate_id: null,
83
+ is_new: false,
84
+ reason: "upsert_returned_no_rows",
85
+ };
86
+ }
87
+ const head = rows[0];
88
+ return {
89
+ ok: true,
90
+ candidate_id: head.id,
91
+ is_new: head.is_new,
92
+ };
93
+ }
94
+ export async function runMiningOnce(opts = {}) {
95
+ const t0 = Date.now();
96
+ const cfg = resolveConfig();
97
+ const projectId = opts.projectId ?? currentProjectId;
98
+ const batch = opts.batch ?? cfg.batch;
99
+ const minFreq = opts.minFreq ?? cfg.minFreq;
100
+ let mined = 0;
101
+ let skipped = 0;
102
+ let errored = 0;
103
+ try {
104
+ const stubs = await mineClusters({ projectId, batch, minFreq });
105
+ for (const stub of stubs) {
106
+ try {
107
+ const r = await mineOneCluster(stub);
108
+ if (r.ok) {
109
+ if (r.is_new)
110
+ mined++;
111
+ else
112
+ skipped++;
113
+ }
114
+ else {
115
+ errored++;
116
+ }
117
+ }
118
+ catch {
119
+ errored++;
120
+ }
121
+ }
122
+ }
123
+ catch {
124
+ errored++;
125
+ }
126
+ return {
127
+ mined,
128
+ skipped,
129
+ errored,
130
+ duration_ms: Date.now() - t0,
131
+ };
132
+ }
133
+ // ─── daemon lifecycle ─────────────────────────────────────────────────────
134
+ async function tick() {
135
+ if (state.running)
136
+ return;
137
+ state.running = true;
138
+ const __tStart = Date.now();
139
+ void emit({ daemon: "sleep_learner", event: "run_started" });
140
+ try {
141
+ const r = await runMiningOnce({
142
+ batch: state.batch,
143
+ minFreq: state.minFreq,
144
+ });
145
+ state.lastRunMined = r.mined;
146
+ state.lastRunSkipped = r.skipped;
147
+ state.lastRunErrored = r.errored;
148
+ state.lastRunDurationMs = r.duration_ms;
149
+ state.lastRunAt = new Date().toISOString();
150
+ state.candidatesMinedTotal += r.mined;
151
+ void emit({
152
+ daemon: "sleep_learner",
153
+ event: "run_ended",
154
+ payload: {
155
+ mined: state.lastRunMined,
156
+ skipped: state.lastRunSkipped,
157
+ errored: state.lastRunErrored,
158
+ duration_ms: Date.now() - __tStart,
159
+ },
160
+ });
161
+ }
162
+ catch (err) {
163
+ state.lastRunErrored++;
164
+ state.lastRunAt = new Date().toISOString();
165
+ void emit({
166
+ daemon: "sleep_learner",
167
+ event: "run_errored",
168
+ payload: {
169
+ error_message: err instanceof Error ? err.message : String(err),
170
+ duration_ms: Date.now() - __tStart,
171
+ },
172
+ });
173
+ }
174
+ finally {
175
+ state.running = false;
176
+ }
177
+ }
178
+ export function startSleepLearner() {
179
+ if (state.timer)
180
+ return;
181
+ const cfg = resolveConfig();
182
+ state.intervalMs = cfg.intervalMs;
183
+ state.batch = cfg.batch;
184
+ state.minFreq = cfg.minFreq;
185
+ state.enabled = true;
186
+ state.timer = setInterval(() => {
187
+ if (state.running)
188
+ return;
189
+ void tick();
190
+ }, state.intervalMs);
191
+ state.timer.unref();
192
+ }
193
+ export function stopSleepLearner() {
194
+ if (state.timer)
195
+ clearInterval(state.timer);
196
+ state.timer = null;
197
+ state.enabled = false;
198
+ }
199
+ export function getSleepLearnerStatus() {
200
+ return {
201
+ running: state.running,
202
+ enabled: state.enabled,
203
+ interval_ms: state.intervalMs,
204
+ batch: state.batch,
205
+ min_freq: state.minFreq,
206
+ last_run_at: state.lastRunAt,
207
+ last_run_mined: state.lastRunMined,
208
+ last_run_skipped: state.lastRunSkipped,
209
+ last_run_errored: state.lastRunErrored,
210
+ last_run_duration_ms: state.lastRunDurationMs,
211
+ candidates_mined_total: state.candidatesMinedTotal,
212
+ };
213
+ }
214
+ export const runSleepLearnerOnce = tick;
215
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/sleep/daemon.ts"],"names":[],"mappings":"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"}