abmind 0.1.1 → 0.1.3

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 (157) hide show
  1. package/CHANGELOG.md +31 -24
  2. package/README.md +7 -4
  3. package/dist/cli/abmind-doctor.d.ts +8 -0
  4. package/dist/cli/abmind-doctor.d.ts.map +1 -0
  5. package/dist/cli/abmind-doctor.js +179 -0
  6. package/dist/cli/abmind-doctor.js.map +1 -0
  7. package/dist/cli/abmind-hook-recall.js +4 -2
  8. package/dist/cli/abmind-hook-recall.js.map +1 -1
  9. package/dist/cli/abmind-hook-wakeup.js +42 -2
  10. package/dist/cli/abmind-hook-wakeup.js.map +1 -1
  11. package/dist/cli/abmind-install-host.d.ts +7 -0
  12. package/dist/cli/abmind-install-host.d.ts.map +1 -0
  13. package/dist/cli/abmind-install-host.js +310 -0
  14. package/dist/cli/abmind-install-host.js.map +1 -0
  15. package/dist/cli/abmind-install.d.ts +1 -1
  16. package/dist/cli/abmind-install.js +1 -1
  17. package/dist/cli/abmind-rollback.d.ts +1 -1
  18. package/dist/cli/abmind-rollback.js +1 -1
  19. package/dist/cli/abmind-store.js +1 -1
  20. package/dist/cli/abmind-store.js.map +1 -1
  21. package/dist/cli/abmind-update.d.ts +2 -2
  22. package/dist/cli/abmind-update.js +50 -5
  23. package/dist/cli/abmind-update.js.map +1 -1
  24. package/dist/cli/abmind.d.ts +1 -1
  25. package/dist/cli/abmind.js +5 -2
  26. package/dist/cli/abmind.js.map +1 -1
  27. package/dist/cli/hook-output.d.ts +11 -0
  28. package/dist/cli/hook-output.d.ts.map +1 -0
  29. package/dist/cli/hook-output.js +33 -0
  30. package/dist/cli/hook-output.js.map +1 -0
  31. package/dist/src/atomic-write.d.ts +5 -0
  32. package/dist/src/atomic-write.d.ts.map +1 -0
  33. package/dist/src/atomic-write.js +18 -0
  34. package/dist/src/atomic-write.js.map +1 -0
  35. package/dist/src/backup.d.ts +2 -2
  36. package/dist/src/backup.d.ts.map +1 -1
  37. package/dist/src/backup.js +16 -6
  38. package/dist/src/backup.js.map +1 -1
  39. package/dist/src/context-engine.d.ts.map +1 -1
  40. package/dist/src/context-engine.js +5 -0
  41. package/dist/src/context-engine.js.map +1 -1
  42. package/dist/src/context-orchestrator.d.ts +55 -0
  43. package/dist/src/context-orchestrator.d.ts.map +1 -0
  44. package/dist/src/context-orchestrator.js +177 -0
  45. package/dist/src/context-orchestrator.js.map +1 -0
  46. package/dist/src/crypto.d.ts +8 -2
  47. package/dist/src/crypto.d.ts.map +1 -1
  48. package/dist/src/crypto.js +23 -6
  49. package/dist/src/crypto.js.map +1 -1
  50. package/dist/src/deploy-lib/cleanup.d.ts +1 -1
  51. package/dist/src/deploy-lib/cleanup.js +1 -1
  52. package/dist/src/ensure-initialized.d.ts +13 -0
  53. package/dist/src/ensure-initialized.d.ts.map +1 -0
  54. package/dist/src/ensure-initialized.js +57 -0
  55. package/dist/src/ensure-initialized.js.map +1 -0
  56. package/dist/src/entity-graph.d.ts.map +1 -1
  57. package/dist/src/entity-graph.js +4 -1
  58. package/dist/src/entity-graph.js.map +1 -1
  59. package/dist/src/imemory-system.d.ts +6 -1
  60. package/dist/src/imemory-system.d.ts.map +1 -1
  61. package/dist/src/index.d.ts +26 -58
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js +31 -65
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/ingest-pipeline.d.ts.map +1 -1
  66. package/dist/src/ingest-pipeline.js +6 -3
  67. package/dist/src/ingest-pipeline.js.map +1 -1
  68. package/dist/src/injection-scanner.d.ts.map +1 -1
  69. package/dist/src/injection-scanner.js +10 -1
  70. package/dist/src/injection-scanner.js.map +1 -1
  71. package/dist/src/mcp-server.js +1 -1
  72. package/dist/src/mcp-server.js.map +1 -1
  73. package/dist/src/mem-logger.d.ts +4 -13
  74. package/dist/src/mem-logger.d.ts.map +1 -1
  75. package/dist/src/mem-logger.js +79 -20
  76. package/dist/src/mem-logger.js.map +1 -1
  77. package/dist/src/mem-types.d.ts +1 -0
  78. package/dist/src/mem-types.d.ts.map +1 -1
  79. package/dist/src/memory-db.d.ts +6 -1
  80. package/dist/src/memory-db.d.ts.map +1 -1
  81. package/dist/src/memory-db.js +10 -1
  82. package/dist/src/memory-db.js.map +1 -1
  83. package/dist/src/memory-editor.d.ts +1 -0
  84. package/dist/src/memory-editor.d.ts.map +1 -1
  85. package/dist/src/memory-editor.js +70 -2
  86. package/dist/src/memory-editor.js.map +1 -1
  87. package/dist/src/memory-manager.d.ts +7 -1
  88. package/dist/src/memory-manager.d.ts.map +1 -1
  89. package/dist/src/memory-manager.js +26 -6
  90. package/dist/src/memory-manager.js.map +1 -1
  91. package/dist/src/message-store.d.ts +1 -1
  92. package/dist/src/message-store.d.ts.map +1 -1
  93. package/dist/src/message-store.js +12 -3
  94. package/dist/src/message-store.js.map +1 -1
  95. package/dist/src/meta-store.d.ts +10 -0
  96. package/dist/src/meta-store.d.ts.map +1 -0
  97. package/dist/src/meta-store.js +20 -0
  98. package/dist/src/meta-store.js.map +1 -0
  99. package/dist/src/native-loader.d.ts +7 -0
  100. package/dist/src/native-loader.d.ts.map +1 -0
  101. package/dist/src/native-loader.js +21 -0
  102. package/dist/src/native-loader.js.map +1 -0
  103. package/dist/src/ollama-embed.d.ts +1 -1
  104. package/dist/src/ollama-embed.d.ts.map +1 -1
  105. package/dist/src/ollama-embed.js +4 -5
  106. package/dist/src/ollama-embed.js.map +1 -1
  107. package/dist/src/openclaw-plugin/index.d.ts.map +1 -1
  108. package/dist/src/openclaw-plugin/index.js +30 -0
  109. package/dist/src/openclaw-plugin/index.js.map +1 -1
  110. package/dist/src/openclaw-plugin/tools.d.ts.map +1 -1
  111. package/dist/src/openclaw-plugin/tools.js +2 -0
  112. package/dist/src/openclaw-plugin/tools.js.map +1 -1
  113. package/dist/src/query-tokenizer.d.ts.map +1 -1
  114. package/dist/src/query-tokenizer.js +3 -2
  115. package/dist/src/query-tokenizer.js.map +1 -1
  116. package/dist/src/recall-benchmark.js +2 -1
  117. package/dist/src/recall-benchmark.js.map +1 -1
  118. package/dist/src/recall-engine.d.ts +2 -0
  119. package/dist/src/recall-engine.d.ts.map +1 -1
  120. package/dist/src/recall-engine.js +65 -5
  121. package/dist/src/recall-engine.js.map +1 -1
  122. package/dist/src/runtime-store.d.ts +1 -1
  123. package/dist/src/runtime-store.js +1 -1
  124. package/dist/src/session-context.js +1 -1
  125. package/dist/src/session-context.js.map +1 -1
  126. package/dist/src/sleep/basic.d.ts.map +1 -1
  127. package/dist/src/sleep/basic.js +2 -0
  128. package/dist/src/sleep/basic.js.map +1 -1
  129. package/dist/src/sleep/native.d.ts.map +1 -1
  130. package/dist/src/sleep/native.js +2 -0
  131. package/dist/src/sleep/native.js.map +1 -1
  132. package/dist/src/sleep/orchestrator.d.ts.map +1 -1
  133. package/dist/src/sleep/orchestrator.js +87 -5
  134. package/dist/src/sleep/orchestrator.js.map +1 -1
  135. package/dist/src/sleep/sleep-daily-summary.d.ts.map +1 -1
  136. package/dist/src/sleep/sleep-daily-summary.js +4 -2
  137. package/dist/src/sleep/sleep-daily-summary.js.map +1 -1
  138. package/dist/src/sleep/sleep-prompt-loader.d.ts +3 -3
  139. package/dist/src/sleep/sleep-prompt-loader.d.ts.map +1 -1
  140. package/dist/src/sleep/sleep-prompt-loader.js +19 -8
  141. package/dist/src/sleep/sleep-prompt-loader.js.map +1 -1
  142. package/dist/src/sleep/test-harness.d.ts.map +1 -1
  143. package/dist/src/sleep/test-harness.js +3 -2
  144. package/dist/src/sleep/test-harness.js.map +1 -1
  145. package/dist/src/sleep-data-access.js +2 -2
  146. package/dist/src/sleep-data-access.js.map +1 -1
  147. package/dist/src/sleep-state-gatherer.js +3 -3
  148. package/dist/src/sleep-state-gatherer.js.map +1 -1
  149. package/dist/src/tool-result-pruner.d.ts +29 -0
  150. package/dist/src/tool-result-pruner.d.ts.map +1 -0
  151. package/dist/src/tool-result-pruner.js +118 -0
  152. package/dist/src/tool-result-pruner.js.map +1 -0
  153. package/package.json +4 -1
  154. package/prompts/sleep/04-retrospective.md +1 -1
  155. package/prompts/sleep/07-topic-assignment.md +2 -2
  156. package/prompts/sleep/11-skill-review.md +2 -2
  157. package/prompts/sleep/SOUL-Dreamy.md +19 -0
package/CHANGELOG.md CHANGED
@@ -1,34 +1,41 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to abmind are documented here.
3
+ All notable changes to abmind. Follows [Keep a Changelog](https://keepachangelog.com/).
4
4
 
5
- Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
- Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html) — pre-1.0 contracts may drift between minor versions.
7
-
8
- ## [0.1.0] — 2026-04-19
9
-
10
- First release with the sleep orchestrator living inside abmind. Previously abmind shipped memory + recall only; the orchestrator lived in AgentBridge.
5
+ ## [0.1.2] — 2026-05-07
11
6
 
12
7
  ### Added
13
-
14
- - **Sleep orchestrator** (`runSleepCycle`) moved into abmind as a library function. Any host (bridge, MCP, CLI, plugin) provides its own `SleepRuntime` adapter for LLM calls.
15
- - **`SleepRuntime` interface** — one method: `complete(prompt): Promise<string>`. No default implementation — library ships no LLM assumption.
16
- - **Four sleep levels** — `basic` (1 LLM call, single-shot, frontier-model-only), `budget` (~3 calls, essentials), `normal` (~10-14 calls, default), `ultimate` (~14 calls, everything).
17
- - **Basic level** (`abmind sleep --level basic`) single-shot daily summary + memory extraction via one LLM turn. New prompt template at `prompts/sleep/basic.md`.
18
- - **`abmind sleep` subcommand** — standalone CLI entry point; uses `ABMIND_LLM_CMD` shell template with `{PROMPT_FILE}` substitution.
19
- - **Interval-aware daily files** — multi-day catch-up runs produce `daily_<start>_to_<end>.md` with range heading; single-day runs still produce `daily_<date>.md`.
20
- - **Supersede-delete dedupe** — writing an interval file deletes any single-day files it covers, preventing downstream globbers from double-counting.
21
- - **Package-tree prompts fallback** — sleep prompt loader resolves from the package tree when `$ABMIND_HOME/prompts/sleep/` is absent. Fresh npm installs work without manual prompt copying.
22
- - **Publish metadata** — `types`, `exports.types` condition, `repository`, `bugs`, `homepage`, `keywords`, `publishConfig`, `files` array scoped to shipped artifacts.
23
- - **`CHANGELOG.md`** — this file.
8
+ - **Context Orchestrator** — moved from abtars into abmind (memory logic owns context)
9
+ - **Lazy runtime init** — `ensureInitialized()` seeds core files + runs schema migrations on first use
10
+ - **SOUL-Dreamy.md**sleep identity prompt (context injection, not separate LLM call)
11
+ - **abmind doctor** — CLI health check (permissions, DB integrity, ollama, sqlite-vec)
12
+ - **Emotion boost** `applyEmotionBoost` in recall engine (linear |e|×0.02, tie-breaker only)
13
+ - **Tool result pruner** — truncates oversized tool outputs before context injection
14
+ - **Native loader** — loads sqlite-vec from `~/.abmind/lib/` via createRequire
15
+ - **Bundled core templates** — SOUL.md, user_profile.md, agent_notes.md, core_facts.md, memory-tools.md
16
+ - **File logging** — standalone mode writes to `~/.abmind/logs/`
24
17
 
25
18
  ### Changed
19
+ - Public API shrunk from ~120 to ~36 exports (#432)
20
+ - Sleep orchestrator: identity step is context injection (prepended to first real step)
21
+ - Recall: `applySpacingBoost` pipeline stage
26
22
 
27
- - **README** rewritten for npm-install audience first. Clone-from-source instructions moved to Contributing.
28
- - **`SleepRuntime.complete` signature** `(prompt: string) => Promise<string>`. Replaces bridge-specific `SubagentRuntime.complete(agent, prompt, opts)`.
29
- - **Orchestrator identity** internal TAG and comments updated from `agentbridge-sleep` to `abmind-sleep`.
23
+ ### Fixed
24
+ - Sleep audit regex matched 6-digit time but files use 4-digit (#444)
25
+ - Crypto: `decryptWithKey` uses provided key correctly
30
26
 
31
- ### Removed
27
+ ## [0.1.0] — 2026-04-15
32
28
 
33
- - **Bridge-specific imports inside the orchestrator** — cron-db dynamic import, transport-config dynamic import. Callers inject equivalents through `RunOpts` when needed.
34
- - **CLI main() in `src/sleep/orchestrator.ts`** the orchestrator is now library-only. Standalone entry lives in `cli/abmind-sleep.ts`.
29
+ ### Added
30
+ - Memory engineSQLite + FTS5 + trigram + vector search (sqlite-vec)
31
+ - 4-layer recall: full-text, trigram, semantic embeddings, consolidated summaries
32
+ - Ingest pipeline — entity extraction, emotion tagging, classification
33
+ - Sleep system — 17-step overnight maintenance (gc-noise, daily summary, extract, retrospective, consolidate, prune)
34
+ - OpenClaw plugin — memory tools for OpenClaw gateway
35
+ - CLI hooks — `hook-wakeup`, `hook-recall`, `hook-store` for external integrations
36
+ - Credential vault — encrypted secret storage (AES-256-GCM)
37
+ - Injection scanner — detects prompt injection in stored content
38
+ - NATO Admiralty Code classification (0-3 clearance levels)
39
+ - Session context builder — wake-up context for new sessions
40
+ - Embedding provider — Ollama nomic-embed-text (local, no API key)
41
+ - Backup/restore — `abmind backup`, `abmind restore`
package/README.md CHANGED
@@ -2,15 +2,18 @@
2
2
 
3
3
  Persistent memory system for AI agents — store, recall, consolidate, and forget.
4
4
 
5
- SQLite-backed, 4-layer recall (FTS5 + trigram + embeddings + consolidated summaries), overnight sleep maintenance, injection detection, and a classification system inspired by NATO Admiralty Codes.
5
+ SQLite-backed, 4-layer recall (FTS5 + trigram + embeddings + consolidated summaries), overnight sleep maintenance, injection detection, context orchestration, and a classification system inspired by NATO Admiralty Codes.
6
+
7
+ **Version:** 0.1.2 | **Docs:** [aksika.github.io/abmind](https://aksika.github.io/abmind/) | **License:** Apache 2.0
6
8
 
7
9
  ## Install
8
10
 
9
11
  ```bash
10
12
  npm install abmind
13
+ abmind install
11
14
  ```
12
15
 
13
- Requires Node 22+.
16
+ Requires Node 22+. Full guide: [docs/install.md](docs/install.md)
14
17
 
15
18
  ## Library Usage
16
19
 
@@ -148,7 +151,7 @@ Add to your host's MCP config:
148
151
  { "mcpServers": { "abmind": { "command": "abmind", "args": ["mcp"] } } }
149
152
  ```
150
153
 
151
- Works with kiro-cli, Claude Code, Cursor, OpenCode, and any MCP-compatible host.
154
+ Works with kiro-cli, Claude Code, Codex CLI, Gemini CLI, Cursor, OpenCode, and any MCP-compatible host.
152
155
 
153
156
  ## Integration Paths
154
157
 
@@ -158,7 +161,7 @@ Works with kiro-cli, Claude Code, Cursor, OpenCode, and any MCP-compatible host.
158
161
  | **MCP server** (`abmind mcp`) | Editors + hosts with MCP support |
159
162
  | **CLI** (`abmind store/recall/...`) | Shell scripts, automation |
160
163
  | **OpenClaw plugin** | Native OpenClaw memory slot replacement |
161
- | **AgentBridge** | In-process memory for the bridge runtime |
164
+ | **abtars** | In-process memory for the bridge runtime |
162
165
 
163
166
  ## Data Location
164
167
 
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * abmind doctor — health check CLI (#442).
4
+ * Checks permissions, DB, ollama, templates, sqlite-vec.
5
+ * --fix auto-corrects what it can.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=abmind-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abmind-doctor.d.ts","sourceRoot":"","sources":["../../cli/abmind-doctor.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * abmind doctor — health check CLI (#442).
4
+ * Checks permissions, DB, ollama, templates, sqlite-vec.
5
+ * --fix auto-corrects what it can.
6
+ */
7
+ import { existsSync, statSync, readdirSync, accessSync, constants, chmodSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { homedir } from "node:os";
10
+ const home = process.env.ABMIND_HOME ?? join(homedir(), ".abmind");
11
+ const fix = process.argv.includes("--fix");
12
+ const results = [];
13
+ function check(name, fn) {
14
+ try {
15
+ const r = fn();
16
+ results.push(r);
17
+ const icon = r.status === "ok" ? "[OK] " : r.status === "warn" ? "[WARN]" : r.status === "skip" ? "[SKIP]" : "[ERR] ";
18
+ process.stdout.write(`${icon} ${name}: ${r.message}\n`);
19
+ if (fix && r.fix && r.status === "warn") {
20
+ r.fix();
21
+ process.stdout.write(`[FIX] ${name} → corrected\n`);
22
+ }
23
+ }
24
+ catch (err) {
25
+ results.push({ status: "error", message: String(err) });
26
+ process.stdout.write(`[ERR] ${name}: ${err instanceof Error ? err.message : String(err)}\n`);
27
+ }
28
+ }
29
+ function checkDirMode(path, expected) {
30
+ if (!existsSync(path))
31
+ return { status: "warn", message: "missing" };
32
+ const mode = statSync(path).mode & 0o777;
33
+ if (mode === expected)
34
+ return { status: "ok", message: `${path} (${mode.toString(8)})` };
35
+ return { status: "warn", message: `${mode.toString(8)} — should be ${expected.toString(8)}`, fix: () => chmodSync(path, expected) };
36
+ }
37
+ function checkFilesMode(dir, expected) {
38
+ if (!existsSync(dir))
39
+ return { status: "skip", message: "dir missing" };
40
+ const bad = [];
41
+ for (const f of readdirSync(dir)) {
42
+ const p = join(dir, f);
43
+ const st = statSync(p);
44
+ if (st.isFile() && (st.mode & 0o777) !== expected)
45
+ bad.push(f);
46
+ }
47
+ if (bad.length === 0)
48
+ return { status: "ok", message: `all files ${expected.toString(8)}` };
49
+ return {
50
+ status: "warn",
51
+ message: `${bad.length} file(s) not ${expected.toString(8)}: ${bad.slice(0, 3).join(", ")}`,
52
+ fix: () => { for (const f of bad)
53
+ chmodSync(join(dir, f), expected); },
54
+ };
55
+ }
56
+ // ── Checks ──────────────────────────────────────────────────────────────────
57
+ process.stdout.write(`abmind doctor\n${"=".repeat(40)}\n`);
58
+ check("root ~/.abmind/", () => checkDirMode(home, 0o700));
59
+ check("config/ permissions", () => checkDirMode(join(home, "config"), 0o700));
60
+ check("config/* files", () => checkFilesMode(join(home, "config"), 0o600));
61
+ check("memory/ permissions", () => checkDirMode(join(home, "memory"), 0o700));
62
+ check("memory.db exists", () => {
63
+ const p = join(home, "memory", "memory.db");
64
+ return existsSync(p) ? { status: "ok", message: p } : { status: "warn", message: "missing — run abmind to initialize" };
65
+ });
66
+ check("core templates", () => {
67
+ const coreDir = join(home, "memory", "core");
68
+ if (!existsSync(coreDir))
69
+ return { status: "warn", message: "missing — run abmind install" };
70
+ const files = readdirSync(coreDir).filter(f => f.endsWith(".md"));
71
+ return files.length >= 4
72
+ ? { status: "ok", message: `${files.length} templates` }
73
+ : { status: "warn", message: `only ${files.length} templates (expected ≥4)` };
74
+ });
75
+ check("logs/ writable", () => {
76
+ const logsDir = join(home, "logs");
77
+ if (!existsSync(logsDir))
78
+ return { status: "warn", message: "missing", fix: () => { require("fs").mkdirSync(logsDir, { recursive: true, mode: 0o700 }); } };
79
+ try {
80
+ accessSync(logsDir, constants.W_OK);
81
+ return { status: "ok", message: "writable" };
82
+ }
83
+ catch {
84
+ return { status: "warn", message: "not writable" };
85
+ }
86
+ });
87
+ check("ollama reachable", () => {
88
+ try {
89
+ const { execSync } = require("child_process");
90
+ execSync("curl -sf http://localhost:11434/api/tags", { timeout: 3000, stdio: "pipe" });
91
+ return { status: "ok", message: "localhost:11434" };
92
+ }
93
+ catch {
94
+ return { status: "warn", message: "ollama not running or not reachable" };
95
+ }
96
+ });
97
+ check("embedding model", () => {
98
+ try {
99
+ const { execSync } = require("child_process");
100
+ const out = execSync("curl -sf http://localhost:11434/api/tags", { timeout: 3000, encoding: "utf-8" });
101
+ const models = JSON.parse(out).models?.map((m) => m.name) ?? [];
102
+ const has = models.some((n) => n.includes("nomic-embed-text"));
103
+ return has ? { status: "ok", message: "nomic-embed-text" } : { status: "warn", message: `not found (available: ${models.slice(0, 3).join(", ")})` };
104
+ }
105
+ catch {
106
+ return { status: "skip", message: "ollama not reachable" };
107
+ }
108
+ });
109
+ check("sqlite-vec", () => {
110
+ try {
111
+ require.resolve("sqlite-vec");
112
+ return { status: "ok", message: "loadable" };
113
+ }
114
+ catch {
115
+ return { status: "warn", message: "not installed (brute-force fallback)" };
116
+ }
117
+ });
118
+ check("IPC socket", () => {
119
+ const sock = join(home, "memory.sock");
120
+ if (!existsSync(sock))
121
+ return { status: "skip", message: "not running (bridge offline)" };
122
+ return { status: "ok", message: sock };
123
+ });
124
+ // _meta checks (#447)
125
+ check("sleep health", () => {
126
+ const dbPath = join(home, "memory", "memory.db");
127
+ if (!existsSync(dbPath))
128
+ return { status: "skip", message: "no DB" };
129
+ try {
130
+ const Database = require("better-sqlite3");
131
+ const db = new Database(dbPath, { readonly: true });
132
+ const get = (key) => {
133
+ const row = db.prepare("SELECT value FROM _meta WHERE key = ?").get(key);
134
+ return row?.value ?? null;
135
+ };
136
+ const lastSuccess = get("sleep_last_success_ts");
137
+ const failures = parseInt(get("sleep_consecutive_failures") ?? "0", 10);
138
+ db.close();
139
+ if (failures > 3)
140
+ return { status: "warn", message: `${failures} consecutive failures` };
141
+ if (lastSuccess) {
142
+ const ageH = Math.round((Date.now() - parseInt(lastSuccess, 10)) / 3600000);
143
+ if (ageH > 48)
144
+ return { status: "warn", message: `last success ${ageH}h ago (>48h)` };
145
+ return { status: "ok", message: `last success ${ageH}h ago, ${failures} failures` };
146
+ }
147
+ return { status: "skip", message: "no sleep runs recorded yet" };
148
+ }
149
+ catch {
150
+ return { status: "skip", message: "cannot read _meta" };
151
+ }
152
+ });
153
+ check("backup age", () => {
154
+ const dbPath = join(home, "memory", "memory.db");
155
+ if (!existsSync(dbPath))
156
+ return { status: "skip", message: "no DB" };
157
+ try {
158
+ const Database = require("better-sqlite3");
159
+ const db = new Database(dbPath, { readonly: true });
160
+ const row = db.prepare("SELECT value FROM _meta WHERE key = 'last_backup_ts'").get();
161
+ db.close();
162
+ if (!row)
163
+ return { status: "warn", message: "no backup recorded" };
164
+ const ageD = Math.round((Date.now() - parseInt(row.value, 10)) / 86400000);
165
+ if (ageD > 7)
166
+ return { status: "warn", message: `last backup ${ageD} days ago (>7d)` };
167
+ return { status: "ok", message: `last backup ${ageD}d ago` };
168
+ }
169
+ catch {
170
+ return { status: "skip", message: "cannot read _meta" };
171
+ }
172
+ });
173
+ // ── Summary ─────────────────────────────────────────────────────────────────
174
+ const ok = results.filter(r => r.status === "ok").length;
175
+ const warn = results.filter(r => r.status === "warn").length;
176
+ const err = results.filter(r => r.status === "error").length;
177
+ process.stdout.write(`\n${ok} passed, ${warn} warnings, ${err} errors\n`);
178
+ process.exit(err > 0 ? 1 : 0);
179
+ //# sourceMappingURL=abmind-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abmind-doctor.js","sourceRoot":"","sources":["../../cli/abmind-doctor.ts"],"names":[],"mappings":"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"}
@@ -107,8 +107,10 @@ Env vars:
107
107
  lines.push(line);
108
108
  total += line.length + 1;
109
109
  }
110
- if (lines.length > 1)
111
- process.stdout.write(lines.join("\n") + "\n");
110
+ if (lines.length > 1) {
111
+ const { resolveHookFormat, writeHookOutput } = await import("./hook-output.js");
112
+ writeHookOutput(lines.join("\n") + "\n", resolveHookFormat());
113
+ }
112
114
  }
113
115
  finally {
114
116
  memory.close();
@@ -1 +1 @@
1
- {"version":3,"file":"abmind-hook-recall.js","sourceRoot":"","sources":["../../cli/abmind-hook-recall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abmind-hook-recall.js","sourceRoot":"","sources":["../../cli/abmind-hook-recall.ts"],"names":[],"mappings":"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"}
@@ -57,20 +57,31 @@ Disable via env var: ABMIND_HOOKS_DISABLED=true`,
57
57
  }
58
58
  try {
59
59
  await readStdinJson(); // payload is just { hook_event_name, cwd } — we don't use the contents, but drain stdin cleanly
60
+ const { resolveHookFormat, writeHookOutput } = await import("./hook-output.js");
61
+ const format = resolveHookFormat();
60
62
  const config = loadMemoryConfig();
61
63
  const memory = new MemoryManager(config);
62
64
  await memory.initialize({ skipEmbeddingCheck: true });
63
65
  try {
64
66
  const maxChars = Number(process.env.ABMIND_HOOK_WAKEUP_MAX_CHARS ?? DEFAULT_WAKEUP_CHARS);
65
67
  const wakeUp = memory.buildWakeUp(maxChars);
68
+ let output = "";
66
69
  if (wakeUp && wakeUp.trim()) {
67
- process.stdout.write(wakeUp);
70
+ output = wakeUp;
68
71
  }
69
72
  // #366 — check if extraction is needed
70
73
  const extractionBlock = buildExtractionInjection(memory);
71
74
  if (extractionBlock) {
72
- process.stdout.write("\n\n" + extractionBlock);
75
+ output += (output ? "\n\n" : "") + extractionBlock;
73
76
  }
77
+ // #529 — check if full sleep is overdue (>24h since last audit)
78
+ if (!extractionBlock) {
79
+ const sleepBlock = buildSleepInjection(memory);
80
+ if (sleepBlock) {
81
+ output += (output ? "\n\n" : "") + sleepBlock;
82
+ }
83
+ }
84
+ writeHookOutput(output, format);
74
85
  }
75
86
  finally {
76
87
  memory.close();
@@ -140,4 +151,33 @@ Run this extraction routine before responding to the user:
140
151
  Extract: facts about the user, decisions made, preferences stated, lessons learned. Skip: greetings, tool outputs, debugging noise.
141
152
  ---`;
142
153
  }
154
+ /** #529 — Inject full sleep instructions when sleep is overdue (>24h since last audit). */
155
+ function buildSleepInjection(memory) {
156
+ const memDir = memory.getConfig().memoryDir;
157
+ const sleepDir = join(memDir, "sleep");
158
+ try {
159
+ const files = readdirSync(sleepDir).filter(f => f.startsWith("sleep_")).sort();
160
+ if (files.length === 0)
161
+ return null; // never slept — don't force on first run
162
+ const latest = files[files.length - 1];
163
+ const st = statSync(join(sleepDir, latest));
164
+ const hoursSince = (Date.now() - st.mtimeMs) / 3600_000;
165
+ if (hoursSince < 24)
166
+ return null; // recent enough
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ return `---
172
+ ⚠️ MEMORY CONSOLIDATION OVERDUE (>24h since last sleep cycle)
173
+
174
+ Run the full sleep pipeline before responding:
175
+
176
+ 1. Run: \`abmind sleep --level native\`
177
+ 2. Wait for completion (may take 30-60s)
178
+ 3. Proceed with user's request normally.
179
+
180
+ This consolidates memories, detects contradictions, and maintains memory health.
181
+ ---`;
182
+ }
143
183
  //# sourceMappingURL=abmind-hook-wakeup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"abmind-hook-wakeup.js","sourceRoot":"","sources":["../../cli/abmind-hook-wakeup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abmind-hook-wakeup.js","sourceRoot":"","sources":["../../cli/abmind-hook-wakeup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * abmind install-host — atomic installer for Claude Code + Gemini extensions (#368).
4
+ * Usage: abmind install-host <claude|gemini|codex> [--uninstall]
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=abmind-install-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abmind-install-host.d.ts","sourceRoot":"","sources":["../../cli/abmind-install-host.ts"],"names":[],"mappings":";AACA;;;GAGG"}