@hasna/mementos 0.14.87 → 0.15.2

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 (88) hide show
  1. package/README.md +44 -9
  2. package/bun.lock +4 -62
  3. package/dist/cli/commands/info-history.d.ts.map +1 -1
  4. package/dist/cli/commands/info-stale.d.ts.map +1 -1
  5. package/dist/cli/commands/io-backup.d.ts.map +1 -1
  6. package/dist/cli/commands/io-export.d.ts.map +1 -1
  7. package/dist/cli/commands/io-restore.d.ts.map +1 -1
  8. package/dist/cli/commands/memory-cmd-chain.d.ts.map +1 -1
  9. package/dist/cli/commands/memory-cmd-crud.d.ts.map +1 -1
  10. package/dist/cli/commands/memory-cmd-recall.d.ts.map +1 -1
  11. package/dist/cli/commands/memory-cmd-search.d.ts.map +1 -1
  12. package/dist/cli/commands/memory-cmd-tail.d.ts.map +1 -1
  13. package/dist/cli/commands/memory-cmd-view.d.ts.map +1 -1
  14. package/dist/cli/commands/memory-cmd-when-to-use.d.ts.map +1 -1
  15. package/dist/cli/commands/storage.d.ts.map +1 -1
  16. package/dist/cli/commands/system-doctor.d.ts.map +1 -1
  17. package/dist/cli/commands/system-profile.d.ts.map +1 -1
  18. package/dist/cli/commands/system-status.d.ts +43 -0
  19. package/dist/cli/commands/system-status.d.ts.map +1 -0
  20. package/dist/cli/commands/system.d.ts.map +1 -1
  21. package/dist/cli/helpers.d.ts.map +1 -1
  22. package/dist/cli/index.js +3735 -2021
  23. package/dist/cli/register-all.d.ts +1 -1
  24. package/dist/cli/register-all.d.ts.map +1 -1
  25. package/dist/db/api-mode.d.ts +135 -37
  26. package/dist/db/api-mode.d.ts.map +1 -1
  27. package/dist/db/database.d.ts.map +1 -1
  28. package/dist/db/memories.d.ts.map +1 -1
  29. package/dist/db/pg-migrate.d.ts.map +1 -1
  30. package/dist/db/store-backend.d.ts +8 -2
  31. package/dist/db/store-backend.d.ts.map +1 -1
  32. package/dist/diagnostics/historical-project-registration-receipt.js +152 -11
  33. package/dist/generated/storage-kit/backend.d.ts +12 -2
  34. package/dist/generated/storage-kit/backend.d.ts.map +1 -1
  35. package/dist/generated/storage-kit/index.d.ts +1 -1
  36. package/dist/generated/storage-kit/index.d.ts.map +1 -1
  37. package/dist/generated/storage-kit/migrations.d.ts +21 -0
  38. package/dist/generated/storage-kit/migrations.d.ts.map +1 -1
  39. package/dist/generated/storage-kit/pool.d.ts +2 -5
  40. package/dist/generated/storage-kit/pool.d.ts.map +1 -1
  41. package/dist/generated/storage-kit/query.d.ts +1 -1
  42. package/dist/generated/storage-kit/query.d.ts.map +1 -1
  43. package/dist/index.d.ts +1 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +3057 -1266
  46. package/dist/lib/config.d.ts.map +1 -1
  47. package/dist/lib/env.d.ts +10 -0
  48. package/dist/lib/env.d.ts.map +1 -0
  49. package/dist/lib/gatherer.d.ts.map +1 -1
  50. package/dist/lib/local-opt-in.d.ts +114 -0
  51. package/dist/lib/local-opt-in.d.ts.map +1 -0
  52. package/dist/lib/model-config.d.ts +1 -1
  53. package/dist/lib/paths.d.ts +60 -0
  54. package/dist/lib/paths.d.ts.map +1 -0
  55. package/dist/lib/profile-sync.d.ts.map +1 -1
  56. package/dist/lib/redact.d.ts +70 -10
  57. package/dist/lib/redact.d.ts.map +1 -1
  58. package/dist/lib/reflection.d.ts.map +1 -1
  59. package/dist/lib/search.d.ts.map +1 -1
  60. package/dist/lib/storage-sync.d.ts.map +1 -1
  61. package/dist/lib/sync.d.ts.map +1 -1
  62. package/dist/mcp/index.d.ts.map +1 -1
  63. package/dist/mcp/index.js +3108 -1276
  64. package/dist/project-registration.js +378 -153
  65. package/dist/sdk/index.d.ts +173 -8
  66. package/dist/sdk/index.d.ts.map +1 -1
  67. package/dist/sdk/index.js +953 -12
  68. package/dist/server/auth.d.ts +2 -0
  69. package/dist/server/auth.d.ts.map +1 -1
  70. package/dist/server/helpers.d.ts +48 -3
  71. package/dist/server/helpers.d.ts.map +1 -1
  72. package/dist/server/index.d.ts.map +1 -1
  73. package/dist/server/index.js +3146 -1324
  74. package/dist/server/routes/system-synthesis.d.ts.map +1 -1
  75. package/dist/storage.d.ts +18 -0
  76. package/dist/storage.d.ts.map +1 -1
  77. package/dist/storage.js +149 -83
  78. package/dist/test-support/store-isolation.d.ts +50 -11
  79. package/dist/test-support/store-isolation.d.ts.map +1 -1
  80. package/docker-entrypoint.sh +7 -0
  81. package/hasna.contract.json +17 -5
  82. package/package.json +8 -8
  83. package/postinstall.mjs +85 -0
  84. package/dashboard/bun.lock +0 -519
  85. package/dist/cli/brains.d.ts +0 -3
  86. package/dist/cli/brains.d.ts.map +0 -1
  87. package/dist/lib/retired-storage-mode.d.ts +0 -11
  88. package/dist/lib/retired-storage-mode.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/mementos",
3
- "version": "0.14.87",
3
+ "version": "0.15.2",
4
4
  "description": "Universal memory system for AI agents - CLI + MCP server + library API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,17 +30,17 @@
30
30
  },
31
31
  "files": [
32
32
  "dist",
33
- "dashboard/dist",
34
33
  "Dockerfile.package",
35
34
  "docker-entrypoint.sh",
36
35
  "bun.lock",
37
36
  "hasna.contract.json",
38
37
  "LICENSE",
39
- "README.md"
38
+ "README.md",
39
+ "postinstall.mjs"
40
40
  ],
41
41
  "scripts": {
42
42
  "clean": "rm -rf dist",
43
- "build": "bun run clean && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/server/index.ts --outdir dist/server --target bun --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/index.ts src/storage.ts src/pg-sync-worker.ts src/project-registration.ts --outdir dist --target bun --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/diagnostics/historical-project-registration-receipt.ts --outdir dist/diagnostics --target bun --external pg && bun build src/sdk/index.ts --outdir dist/sdk --target bun && tsc --emitDeclarationOnly --outDir dist",
43
+ "build": "bun run clean && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/server/index.ts --outdir dist/server --target bun --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/index.ts src/storage.ts src/pg-sync-worker.ts src/project-registration.ts --outdir dist --target bun --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/diagnostics/historical-project-registration-receipt.ts --outdir dist/diagnostics --target bun --external pg && bun build src/sdk/index.ts --outdir dist/sdk --target bun && tsc --emitDeclarationOnly --outDir dist",
44
44
  "prepare": "bun run build:js",
45
45
  "prepack": "bun run build && bun run scan-artifact",
46
46
  "prepublishOnly": "bun run typecheck && bun run test && bun run contracts:conformance && contracts no-cloud-scan .",
@@ -54,8 +54,8 @@
54
54
  "dev:cli": "bun run src/cli/index.tsx",
55
55
  "dev:mcp": "bun run src/mcp/index.ts",
56
56
  "dev:serve": "bun run src/server/index.ts",
57
- "postinstall": "mkdir -p $HOME/.hasna/mementos $HOME/.hasna/mementos/profiles $HOME/.hasna/mementos/agents $HOME/.hasna/mementos/training 2>/dev/null || true",
58
- "build:js": "bun run clean && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/server/index.ts --outdir dist/server --target bun --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/index.ts src/storage.ts src/pg-sync-worker.ts src/project-registration.ts --outdir dist --target bun --external @hasna/contracts --external @hasna/contracts/schemas --external @hasna/contracts/auth --external pg && bun build src/diagnostics/historical-project-registration-receipt.ts --outdir dist/diagnostics --target bun --external pg && bun build src/sdk/index.ts --outdir dist/sdk --target bun && tsc --emitDeclarationOnly --outDir dist"
57
+ "postinstall": "node postinstall.mjs",
58
+ "build:js": "bun run clean && bun build src/cli/index.tsx --outdir dist/cli --target bun --external ink --external react --external chalk --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/mcp/index.ts --outdir dist/mcp --target bun --external @modelcontextprotocol/sdk --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/server/index.ts --outdir dist/server --target bun --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/index.ts src/storage.ts src/pg-sync-worker.ts src/project-registration.ts --outdir dist --target bun --external @hasna/contracts --external @hasna/contracts/* --external pg && bun build src/diagnostics/historical-project-registration-receipt.ts --outdir dist/diagnostics --target bun --external pg && bun build src/sdk/index.ts --outdir dist/sdk --target bun && tsc --emitDeclarationOnly --outDir dist"
59
59
  },
60
60
  "keywords": [
61
61
  "memory",
@@ -90,7 +90,7 @@
90
90
  "@ai-sdk/anthropic": "^3.0.82",
91
91
  "@ai-sdk/openai": "^3.0.69",
92
92
  "@ai-sdk/openai-compatible": "^2.0.48",
93
- "@hasna/contracts": "0.10.6",
93
+ "@hasna/contracts": "1.0.2",
94
94
  "@hasna/events": "0.1.6",
95
95
  "@modelcontextprotocol/sdk": "^1.12.1",
96
96
  "ai": "^6.0.199",
@@ -104,7 +104,7 @@
104
104
  "zod": "^3.24.2"
105
105
  },
106
106
  "devDependencies": {
107
- "@types/bun": "^1.2.4",
107
+ "@types/bun": "1.3.14",
108
108
  "bun-types": "1.3.14",
109
109
  "@types/pg": "^8.11.11",
110
110
  "@types/react": "^18.3.18",
@@ -0,0 +1,85 @@
1
+ // Best-effort install-time creation of the mementos data home, resolving the
2
+ // SAME effective data root the runtime uses (src/lib/paths.ts getDataRoot): an
3
+ // exact-app override (HASNA_MEMENTOS_HOME / MEMENTOS_HOME) wins; otherwise the
4
+ // @hasna/paths XDG data home once adopted (HASNA_DATA_HOME set, or mementos.db
5
+ // already migrated there); otherwise the legacy ~/.hasna/mementos default.
6
+ // Failures are non-fatal: the runtime creates the same directories on first use.
7
+ import { existsSync, mkdirSync } from "node:fs";
8
+ // --- Local path resolver -------------------------------------------------
9
+ // @hasna/paths was deleted (hasna/apps#1535, 2026-09-03); this in-package
10
+ // implementation preserves the resolver contract (XDG / macOS home layout
11
+ // honoring HASNA_{CONFIG,DATA,STATE,CACHE}_HOME, with the same env-override
12
+ // and home-override semantics the deleted package had).
13
+ import { homedir as pathsResolverHomedir } from "node:os";
14
+ import { join as pathsResolverJoin } from "node:path";
15
+
16
+ const PATHS_RESOLVER_KIND_ENV = {
17
+ config: "HASNA_CONFIG_HOME",
18
+ data: "HASNA_DATA_HOME",
19
+ state: "HASNA_STATE_HOME",
20
+ cache: "HASNA_CACHE_HOME",
21
+ };
22
+
23
+ function pathsResolverBaseDir(kind, options) {
24
+ const env = options.env ?? process.env;
25
+ const override = env[PATHS_RESOLVER_KIND_ENV[kind]];
26
+ if (typeof override === "string" && override.length > 0) return override;
27
+ const home = options.home ?? pathsResolverHomedir();
28
+ const platform = options.platform ?? process.platform;
29
+ if (platform === "darwin") {
30
+ switch (kind) {
31
+ case "config":
32
+ case "data":
33
+ return pathsResolverJoin(home, "Library", "Application Support", "Hasna");
34
+ case "cache":
35
+ return pathsResolverJoin(home, "Library", "Caches", "Hasna");
36
+ case "state":
37
+ return pathsResolverJoin(home, "Library", "Logs", "Hasna");
38
+ }
39
+ }
40
+ switch (kind) {
41
+ case "config":
42
+ return pathsResolverJoin(home, ".config", "hasna");
43
+ case "data":
44
+ return pathsResolverJoin(home, ".local", "share", "hasna");
45
+ case "state":
46
+ return pathsResolverJoin(home, ".local", "state", "hasna");
47
+ case "cache":
48
+ return pathsResolverJoin(home, ".cache", "hasna");
49
+ }
50
+ }
51
+
52
+ function pathsResolverResolve(kind, options) {
53
+ const appSegment = options.internal === true ? pathsResolverJoin("internal", options.app) : options.app;
54
+ return pathsResolverJoin(pathsResolverBaseDir(kind, options), appSegment);
55
+ }
56
+ function dataDir(options) {
57
+ return pathsResolverResolve("data", options);
58
+ }
59
+ import { homedir } from "node:os";
60
+ import { join } from "node:path";
61
+
62
+ const EXACT_OVERRIDES = [
63
+ (process.env["HASNA_MEMENTOS_HOME"] || "").trim(),
64
+ (process.env["MEMENTOS_HOME"] || "").trim(),
65
+ ].filter(Boolean);
66
+ const DATA_HOME_OVERRIDE = (process.env["HASNA_DATA_HOME"] || "").trim();
67
+
68
+ try {
69
+ // (local resolver — @hasna/paths deleted, hasna/apps#1535)
70
+ const home = process.env["HOME"] || process.env["USERPROFILE"] || homedir();
71
+ const resolved = dataDir({ app: "mementos", home });
72
+ let root;
73
+ if (EXACT_OVERRIDES.length > 0) {
74
+ root = EXACT_OVERRIDES[0];
75
+ } else if (DATA_HOME_OVERRIDE || existsSync(join(resolved, "mementos.db"))) {
76
+ root = resolved;
77
+ } else {
78
+ root = join(home, ".hasna", "mementos");
79
+ }
80
+ for (const sub of ["", "profiles", "agents", "training", "backups", "storage"]) {
81
+ mkdirSync(join(root, sub), { recursive: true });
82
+ }
83
+ } catch {
84
+ // never fail an install over pre-created directories
85
+ }