abmind 0.2.5-alpha.0 → 0.2.5

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 (80) hide show
  1. package/SUPPORTED-SURFACE.md +52 -0
  2. package/dist/cli/abmind-backup.js +1 -1
  3. package/dist/cli/abmind-backup.js.map +1 -1
  4. package/dist/cli/abmind-deps.d.ts +8 -0
  5. package/dist/cli/abmind-deps.d.ts.map +1 -0
  6. package/dist/cli/abmind-deps.js +55 -0
  7. package/dist/cli/abmind-deps.js.map +1 -0
  8. package/dist/cli/abmind-doctor.js +9 -7
  9. package/dist/cli/abmind-doctor.js.map +1 -1
  10. package/dist/cli/abmind-embed.js +2 -3
  11. package/dist/cli/abmind-embed.js.map +1 -1
  12. package/dist/cli/abmind-expand.d.ts.map +1 -1
  13. package/dist/cli/abmind-expand.js +2 -3
  14. package/dist/cli/abmind-expand.js.map +1 -1
  15. package/dist/cli/abmind-install.js +9 -23
  16. package/dist/cli/abmind-install.js.map +1 -1
  17. package/dist/cli/abmind-passwd.js +2 -3
  18. package/dist/cli/abmind-passwd.js.map +1 -1
  19. package/dist/cli/abmind-secrets.d.ts.map +1 -1
  20. package/dist/cli/abmind-secrets.js +2 -3
  21. package/dist/cli/abmind-secrets.js.map +1 -1
  22. package/dist/cli/abmind-status-runtime.js +10 -12
  23. package/dist/cli/abmind-status-runtime.js.map +1 -1
  24. package/dist/cli/abmind-update-args.d.ts +26 -0
  25. package/dist/cli/abmind-update-args.d.ts.map +1 -0
  26. package/dist/cli/abmind-update-args.js +56 -0
  27. package/dist/cli/abmind-update-args.js.map +1 -0
  28. package/dist/cli/abmind-update.d.ts +13 -5
  29. package/dist/cli/abmind-update.d.ts.map +1 -1
  30. package/dist/cli/abmind-update.js +151 -147
  31. package/dist/cli/abmind-update.js.map +1 -1
  32. package/dist/cli/abmind.js +6 -10
  33. package/dist/cli/abmind.js.map +1 -1
  34. package/dist/cli/banner.d.ts +6 -0
  35. package/dist/cli/banner.d.ts.map +1 -1
  36. package/dist/cli/banner.js +14 -22
  37. package/dist/cli/banner.js.map +1 -1
  38. package/dist/cli/lib/native-dep.d.ts +15 -0
  39. package/dist/cli/lib/native-dep.d.ts.map +1 -0
  40. package/dist/cli/lib/native-dep.js +25 -0
  41. package/dist/cli/lib/native-dep.js.map +1 -0
  42. package/dist/src/context-orchestrator.d.ts +38 -2
  43. package/dist/src/context-orchestrator.d.ts.map +1 -1
  44. package/dist/src/context-orchestrator.js +84 -12
  45. package/dist/src/context-orchestrator.js.map +1 -1
  46. package/dist/src/index.d.ts +5 -3
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/index.js +3 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/memory-db.d.ts.map +1 -1
  51. package/dist/src/memory-db.js +13 -5
  52. package/dist/src/memory-db.js.map +1 -1
  53. package/dist/src/memory-manager.d.ts +8 -0
  54. package/dist/src/memory-manager.d.ts.map +1 -1
  55. package/dist/src/memory-manager.js +8 -0
  56. package/dist/src/memory-manager.js.map +1 -1
  57. package/dist/src/ollama-embed.d.ts.map +1 -1
  58. package/dist/src/ollama-embed.js +11 -1
  59. package/dist/src/ollama-embed.js.map +1 -1
  60. package/dist/src/sleep/audit.d.ts +27 -0
  61. package/dist/src/sleep/audit.d.ts.map +1 -0
  62. package/dist/src/sleep/audit.js +162 -0
  63. package/dist/src/sleep/audit.js.map +1 -0
  64. package/dist/src/sleep/locks.d.ts +15 -0
  65. package/dist/src/sleep/locks.d.ts.map +1 -0
  66. package/dist/src/sleep/locks.js +45 -0
  67. package/dist/src/sleep/locks.js.map +1 -0
  68. package/dist/src/sleep/orchestrator.d.ts +33 -0
  69. package/dist/src/sleep/orchestrator.d.ts.map +1 -1
  70. package/dist/src/sleep/orchestrator.js +186 -22
  71. package/dist/src/sleep/orchestrator.js.map +1 -1
  72. package/dist/src/sleep/sleep-prompt-loader.d.ts +0 -5
  73. package/dist/src/sleep/sleep-prompt-loader.d.ts.map +1 -1
  74. package/dist/src/sleep/sleep-prompt-loader.js +0 -12
  75. package/dist/src/sleep/sleep-prompt-loader.js.map +1 -1
  76. package/dist/src/sleep/state.d.ts +47 -0
  77. package/dist/src/sleep/state.d.ts.map +1 -0
  78. package/dist/src/sleep/state.js +45 -0
  79. package/dist/src/sleep/state.js.map +1 -0
  80. package/package.json +2 -5
@@ -8,9 +8,8 @@
8
8
  * (see cli/abmind.ts). Previously smuggled via process.env["ABMIND_SECRET_ACTION"].
9
9
  */
10
10
  import { join } from "node:path";
11
- import { createRequire } from "node:module";
12
- const require = createRequire(import.meta.url);
13
- const Database = require("better-sqlite3");
11
+ import { requireNativeDep } from "./lib/native-dep.js";
12
+ const Database = requireNativeDep("better-sqlite3");
14
13
  import { loadMemoryConfig } from "../src/memory-config.js";
15
14
  import { encrypt, loadKey, loadKeyFromFile, decryptWithKey, hasKey } from "../src/crypto.js";
16
15
  export function runSecretsCommand(action) {
@@ -1 +1 @@
1
- {"version":3,"file":"abmind-secrets.js","sourceRoot":"","sources":["../../cli/abmind-secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abmind-secrets.js","sourceRoot":"","sources":["../../cli/abmind-secrets.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI7F,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,gIAAgI,CACjI,CAAC,GAAG,EAAqJ,CAAC;YAE3J,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;YAChG,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACjF,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC,CAAC;YACvL,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,CAAC;YAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,mIAAmI,CACpI,CAAC,GAAG,EAAyE,CAAC;YAE/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEzF,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,EAAE,CAAC,OAAO,CAAC,gGAAgG,CAAC;yBACzG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjE,EAAE,CAAC,OAAO,CAAC,sGAAsG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACjI,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvE,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC,CAAC,CAAC;YACH,EAAE,EAAE,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;YAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAE3G,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;YAEV,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,qFAAqF,CACtF,CAAC,GAAG,EAAyE,CAAC;YAE/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAElF,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBACrD,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBAC7D,EAAE,CAAC,OAAO,CAAC,iFAAiF,CAAC;yBAC1F,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,EAAE,EAAE,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,MAAM,yBAAyB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
@@ -3,12 +3,19 @@
3
3
  const _origErr = console.error;
4
4
  console.error = () => { };
5
5
  /**
6
- * abmind status-runtime — print lifecycle manifest + lock state.
6
+ * abmind status-runtime — print runtime state (lock, key, SOUL, memory, sleep, hooks).
7
+ *
8
+ * #863: the release slot is gone. Version is read from the global install's
9
+ * package.json (via getPackageVersion), not from the manifest. The `current`
10
+ * symlink check is removed. The manifest is still read for install-time
11
+ * metadata (commit, branch, source, activatedAt, host) but those fields
12
+ * are no longer maintained by `abmind update`.
7
13
  *
8
14
  * Named status-runtime to avoid collision with the renamed memory-stats
9
15
  * command. Dispatcher exposes it as `abmind status`.
10
16
  */
11
- import { inspectLock, packagePaths, readCurrent, readManifest } from '../src/deploy-lib/index.js';
17
+ import { inspectLock, packagePaths, readManifest } from '../src/deploy-lib/index.js';
18
+ import { getPackageVersion } from './banner.js';
12
19
  import { printBanner } from './banner.js';
13
20
  import { loadMemoryConfig } from '../src/memory-config.js';
14
21
  import { MemoryManager } from '../src/memory-manager.js';
@@ -19,7 +26,6 @@ async function run() {
19
26
  const paths = packagePaths('abmind');
20
27
  const manifest = await readManifest(paths.manifest);
21
28
  await printBanner("status");
22
- const current = await readCurrent(paths.current);
23
29
  const lock = await inspectLock(paths.lock);
24
30
  if (!manifest) {
25
31
  process.stdout.write(`abmind: not installed (no manifest at ${paths.manifest})\n` +
@@ -29,7 +35,7 @@ async function run() {
29
35
  const lines = [
30
36
  `abmind status`,
31
37
  ` home: ${paths.home}`,
32
- ` version: ${manifest.version || '(unset — run update)'}`,
38
+ ` version: ${getPackageVersion()}`,
33
39
  ];
34
40
  // Only show commit/branch if known
35
41
  if (manifest.commit && manifest.commit !== '(unknown)')
@@ -38,9 +44,6 @@ async function run() {
38
44
  lines.push(` branch: ${manifest.branch}`);
39
45
  lines.push(` source: ${manifest.source}`);
40
46
  lines.push(` activated: ${manifest.activatedAt}`);
41
- // Only show current if releases layout exists
42
- if (current)
43
- lines.push(` current ->: ${current}`);
44
47
  lines.push(` host: ${manifest.host}`);
45
48
  // Key, SOUL, embedding status
46
49
  const { statSync, readFileSync: readFs } = await import('node:fs');
@@ -137,11 +140,6 @@ async function run() {
137
140
  }
138
141
  }
139
142
  catch { /* hooks paths unavailable — skip */ }
140
- if (current !== null && manifest.version !== '' && current !== manifest.version) {
141
- process.stderr.write(`\nWarning: current symlink points at '${current}' but manifest says '${manifest.version}'.\n` +
142
- `Re-run 'abmind update' or 'abmind rollback' to reconcile.\n`);
143
- return 1;
144
- }
145
143
  return 0;
146
144
  }
147
145
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"abmind-status-runtime.js","sourceRoot":"","sources":["../../cli/abmind-status-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abmind-status-runtime.js","sourceRoot":"","sources":["../../cli/abmind-status-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * abmind update — CLI argument parsing (#1308).
3
+ *
4
+ * Extracted from abmind-update.ts into a side-effect-free module so it can be
5
+ * unit-tested. abmind-update.ts is dispatched via import-side-effects (the
6
+ * abmind dispatcher does a bare `await load(file)`), so the main module cannot
7
+ * be imported in a test without firing run()/process.exit. This module has no
8
+ * side effects and no path resolution — `localDir` is the raw token; the caller
9
+ * resolves it to an absolute path.
10
+ */
11
+ export type Channel = "dev" | "alpha" | "stable";
12
+ export interface ParsedArgs {
13
+ readonly channel: Channel;
14
+ /** Raw `<DIR>` token for `--dev <DIR>` (may be relative). Undefined → pull mode. */
15
+ readonly localDir?: string;
16
+ }
17
+ /**
18
+ * Parse `abmind update` argv.
19
+ *
20
+ * - `--dev` with no dir (or followed by another flag) → pull mode (localDir undefined).
21
+ * - `--dev <DIR>` → manual mode (build that tree as-is, no git fetch).
22
+ * - Multiple channels → "error" (keeps strictness: `--dev --alpha` is rejected,
23
+ * not silently reinterpreted as an alpha install).
24
+ */
25
+ export declare function parseArgs(argv: readonly string[]): ParsedArgs | "help" | "error";
26
+ //# sourceMappingURL=abmind-update-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abmind-update-args.d.ts","sourceRoot":"","sources":["../../cli/abmind-update-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CA4BhF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * abmind update — CLI argument parsing (#1308).
3
+ *
4
+ * Extracted from abmind-update.ts into a side-effect-free module so it can be
5
+ * unit-tested. abmind-update.ts is dispatched via import-side-effects (the
6
+ * abmind dispatcher does a bare `await load(file)`), so the main module cannot
7
+ * be imported in a test without firing run()/process.exit. This module has no
8
+ * side effects and no path resolution — `localDir` is the raw token; the caller
9
+ * resolves it to an absolute path.
10
+ */
11
+ /**
12
+ * Parse `abmind update` argv.
13
+ *
14
+ * - `--dev` with no dir (or followed by another flag) → pull mode (localDir undefined).
15
+ * - `--dev <DIR>` → manual mode (build that tree as-is, no git fetch).
16
+ * - Multiple channels → "error" (keeps strictness: `--dev --alpha` is rejected,
17
+ * not silently reinterpreted as an alpha install).
18
+ */
19
+ export function parseArgs(argv) {
20
+ let channel = null;
21
+ let localDir;
22
+ for (let i = 0; i < argv.length; i++) {
23
+ const a = argv[i];
24
+ if (a === "--dev") {
25
+ if (channel)
26
+ return "error"; // multiple channels → error
27
+ channel = "dev";
28
+ const next = argv[i + 1];
29
+ if (next && !next.startsWith("--")) { // explicit dir → manual mode
30
+ localDir = next;
31
+ i++;
32
+ }
33
+ // no dir (or next is a flag) → localDir stays undefined → pull mode
34
+ }
35
+ else if (a === "--alpha") {
36
+ if (channel)
37
+ return "error"; // e.g. `--dev --alpha` → error
38
+ channel = "alpha";
39
+ }
40
+ else if (a === "--stable") {
41
+ if (channel)
42
+ return "error";
43
+ channel = "stable";
44
+ }
45
+ else if (a === "--help" || a === "-h") {
46
+ return "help";
47
+ }
48
+ else {
49
+ return "error";
50
+ }
51
+ }
52
+ if (!channel)
53
+ return "error";
54
+ return { channel, localDir };
55
+ }
56
+ //# sourceMappingURL=abmind-update-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abmind-update-args.js","sourceRoot":"","sources":["../../cli/abmind-update-args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,IAAI,OAAO,GAAmB,IAAI,CAAC;IACnC,IAAI,QAA4B,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YAClB,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC,CAAmB,4BAA4B;YAC3E,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAU,6BAA6B;gBAC1E,QAAQ,GAAG,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,oEAAoE;QACtE,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC,CAAmB,+BAA+B;YAC9E,OAAO,GAAG,OAAO,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;YAC5B,OAAO,GAAG,QAAQ,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,11 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * abmind update [--source local|npm|github] [--from-local]
3
+ * abmind update install a new abmind build to the global npm location.
4
4
  *
5
- * Phase 4 of #158. Mirrors abtars update with a local build source
6
- * aware that abmind has NO build step in the traditional sense — abmind's
7
- * "build" is just `tsc`, producing dist/. Stage dist/ + node_modules/,
8
- * flip current symlink. Same atomic semantics as abtars.
5
+ * Channels:
6
+ * --dev [<DIR>] pull dev into ~/.abmind/src/abmind (no <DIR>), or build
7
+ * the tree at <DIR> as-is, then install globally
8
+ * --alpha npm install -g abmind@alpha
9
+ * --stable npm install -g abmind@latest
10
+ *
11
+ * #863: writes ONLY to the global install. No release slot, no rollback.
12
+ * #1268: writes manifest (version + commit + source) after successful install
13
+ * so the /update slash command can detect channel changes and skip no-op deploys.
14
+ * #1308: --dev owns its source. No <DIR> → clone/fetch dev into
15
+ * ~/.abmind/src/abmind, then build + install. No-op skip when the pulled HEAD
16
+ * matches the installed local commit. Explicit <DIR> always builds (no pull).
9
17
  */
10
18
  export {};
11
19
  //# sourceMappingURL=abmind-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abmind-update.d.ts","sourceRoot":"","sources":["../../cli/abmind-update.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
1
+ {"version":3,"file":"abmind-update.d.ts","sourceRoot":"","sources":["../../cli/abmind-update.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
@@ -1,177 +1,181 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * abmind update [--source local|npm|github] [--from-local]
3
+ * abmind update install a new abmind build to the global npm location.
4
4
  *
5
- * Phase 4 of #158. Mirrors abtars update with a local build source
6
- * aware that abmind has NO build step in the traditional sense — abmind's
7
- * "build" is just `tsc`, producing dist/. Stage dist/ + node_modules/,
8
- * flip current symlink. Same atomic semantics as abtars.
5
+ * Channels:
6
+ * --dev [<DIR>] pull dev into ~/.abmind/src/abmind (no <DIR>), or build
7
+ * the tree at <DIR> as-is, then install globally
8
+ * --alpha npm install -g abmind@alpha
9
+ * --stable npm install -g abmind@latest
10
+ *
11
+ * #863: writes ONLY to the global install. No release slot, no rollback.
12
+ * #1268: writes manifest (version + commit + source) after successful install
13
+ * so the /update slash command can detect channel changes and skip no-op deploys.
14
+ * #1308: --dev owns its source. No <DIR> → clone/fetch dev into
15
+ * ~/.abmind/src/abmind, then build + install. No-op skip when the pulled HEAD
16
+ * matches the installed local commit. Explicit <DIR> always builds (no pull).
9
17
  */
10
- import { spawnSync } from 'node:child_process';
11
- import { cp, mkdir, readFile, rm } from 'node:fs/promises';
12
- import { unlinkSync } from 'node:fs';
13
- import { hostname } from 'node:os';
14
- import { join } from 'node:path';
15
- import { acquireLock, activate, emptyManifest, hashFile, packagePaths, pruneReleases, readManifest, RETENTION, writeManifest, } from '../src/deploy-lib/index.js';
18
+ import { spawnSync } from "node:child_process";
19
+ import { existsSync, lstatSync, unlinkSync, rmSync, writeFileSync, readFileSync, mkdirSync } from "node:fs";
20
+ import { homedir, hostname } from "node:os";
21
+ import { isAbsolute, join, resolve, dirname } from "node:path";
22
+ import { acquireLock, packagePaths, readManifest, writeManifest, emptyManifest } from "../src/deploy-lib/index.js";
23
+ import { parseArgs } from "./abmind-update-args.js";
24
+ /** Git remote for the abmind dev source (#1308). */
25
+ const ABMIND_DEV_REPO = "https://github.com/aksika/abmind.git";
16
26
  function runCmd(cmd, args, cwd) {
17
- const r = spawnSync(cmd, args, { cwd, stdio: 'inherit' });
27
+ const r = spawnSync(cmd, args, { cwd, stdio: "inherit" });
18
28
  if (r.status !== 0) {
19
- throw new Error(`${cmd} ${args.join(' ')} exited with status ${r.status ?? -1}`);
29
+ throw new Error(`${cmd} ${args.join(" ")} exited with status ${r.status ?? -1}`);
20
30
  }
21
31
  }
22
- function tryCmd(cmd, args, cwd) {
23
- const r = spawnSync(cmd, args, { cwd, encoding: 'utf-8' });
32
+ function runCmdStdout(cmd, args, cwd) {
33
+ const r = spawnSync(cmd, args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] });
24
34
  if (r.status !== 0)
25
- return null;
35
+ throw new Error(`${cmd} ${args.join(" ")} exited with status ${r.status}`);
26
36
  return r.stdout.trim();
27
37
  }
28
- function checkStaleness(repoRoot, fromLocal) {
29
- const commit = tryCmd('git', ['rev-parse', '--short', 'HEAD'], repoRoot);
30
- if (commit === null) {
31
- if (!fromLocal)
32
- throw new Error('Not a git repo; pass --from-local to proceed.');
33
- return { commit: 'unknown', branch: null };
38
+ /**
39
+ * Ensure `dir` holds a fresh checkout of abmind's dev branch (#1308).
40
+ * Clone (shallow, -b dev) if absent; otherwise fetch + force-checkout origin/dev.
41
+ * Throws on any git failure — the caller surfaces a loud error, never silent.
42
+ */
43
+ function pullDevSource(dir) {
44
+ if (!existsSync(join(dir, ".git"))) {
45
+ mkdirSync(dirname(dir), { recursive: true });
46
+ runCmd("git", ["clone", "--depth", "1", "-b", "dev", ABMIND_DEV_REPO, dir], dirname(dir));
34
47
  }
35
- const branch = tryCmd('git', ['rev-parse', '--abbrev-ref', 'HEAD'], repoRoot);
36
- if (fromLocal)
37
- return { commit, branch: branch === 'HEAD' ? null : branch };
38
- if (branch === 'HEAD' || branch === null) {
39
- throw new Error('Detached HEAD (no current branch). Pass --from-local to proceed.');
48
+ else {
49
+ runCmd("git", ["-C", dir, "fetch", "origin", "dev"], dir);
50
+ runCmd("git", ["-C", dir, "checkout", "-f", "origin/dev"], dir);
40
51
  }
41
- runCmd('git', ['fetch', '--quiet'], repoRoot);
42
- const upstream = tryCmd('git', ['rev-parse', '--abbrev-ref', `${branch}@{upstream}`], repoRoot);
43
- if (upstream === null) {
44
- throw new Error(`Branch '${branch}' has no upstream. Pass --from-local to proceed.`);
52
+ }
53
+ function printHelp() {
54
+ process.stdout.write(`abmind update install a new abmind build
55
+
56
+ Usage:
57
+ abmind update --dev [<DIR>] Pull dev into ~/.abmind/src/abmind (no <DIR>),
58
+ build, and install globally. With <DIR>, build
59
+ that tree as-is (no git fetch).
60
+ abmind update --alpha Install latest alpha from npm
61
+ abmind update --stable Install latest stable from npm
62
+
63
+ Updates the global abmind install at \$(npm root -g)/abmind. The \`abmind\`
64
+ command on PATH picks up the new code immediately. Writes manifest
65
+ (version + commit + source) for /update slash command coordination.
66
+ `);
67
+ }
68
+ /**
69
+ * One-shot cleanup of the old release slot system, removed by #863.
70
+ * Runs once per host, guarded by a marker file.
71
+ */
72
+ function cleanupOldReleaseSlot(home) {
73
+ const marker = join(home, ".update-v2-cleanup-done");
74
+ if (existsSync(marker))
75
+ return;
76
+ const currentLink = join(home, "current");
77
+ const releasesDir = join(home, "releases");
78
+ try {
79
+ if (lstatSync(currentLink).isSymbolicLink())
80
+ unlinkSync(currentLink);
45
81
  }
46
- const behindStr = tryCmd('git', ['rev-list', '--count', `HEAD..${upstream}`], repoRoot);
47
- const behind = behindStr === null ? null : Number(behindStr);
48
- if (behind === null || !Number.isFinite(behind)) {
49
- throw new Error(`Could not determine how far HEAD is behind ${upstream}. Pass --from-local.`);
82
+ catch { /* not present */ }
83
+ try {
84
+ rmSync(releasesDir, { recursive: true, force: true });
50
85
  }
51
- if (behind > 0) {
52
- throw new Error(`Current branch: ${branch} (${commit})\n${upstream} is ahead by ${behind} commit${behind === 1 ? '' : 's'}.\nRun 'git pull' first, or pass --from-local.`);
86
+ catch { /* not present */ }
87
+ try {
88
+ writeFileSync(marker, new Date().toISOString());
53
89
  }
54
- return { commit, branch };
90
+ catch { /* non-fatal — best-effort cleanup */ }
55
91
  }
56
92
  async function run() {
57
- const argv = process.argv.slice(2);
58
- const paths = packagePaths('abmind');
59
- const m = await readManifest(paths.manifest);
60
- const { printBanner } = await import("./banner.js");
61
- await printBanner("update");
62
- const source = argv.includes('--source')
63
- ? argv[argv.indexOf('--source') + 1]
64
- : 'local';
65
- const fromLocal = argv.includes('--from-local');
66
- if (source !== 'local' && source !== 'npm') {
67
- process.stderr.write(`--source ${source} is not yet supported.\nUse --source local (default) or --source npm.\n`);
93
+ const parsed = parseArgs(process.argv.slice(2));
94
+ if (parsed === "help") {
95
+ printHelp();
96
+ return 0;
97
+ }
98
+ if (parsed === "error") {
99
+ printHelp();
68
100
  return 2;
69
101
  }
70
- const release = await acquireLock(paths.lock, `update --source ${source}`);
102
+ const { printBanner } = await import("./banner.js");
103
+ await printBanner("update");
104
+ // One-shot cleanup of the old release slot (best-effort, non-fatal).
105
+ const home = process.env["ABMIND_HOME"] ?? join(homedir(), ".abmind");
106
+ cleanupOldReleaseSlot(home);
107
+ // Default dev source checkout owned by abmind (#1308). Only used on the
108
+ // no-<DIR> path; an explicit <DIR> builds that tree as-is (no pull).
109
+ const defaultDevSrc = join(home, "src", "abmind");
110
+ // Acquire the update lock to serialize concurrent updates.
111
+ // The lock is at ~/.abmind/.update.lock and is released on exit.
112
+ const paths = packagePaths("abmind");
113
+ const release = await acquireLock(paths.lock, `update --${parsed.channel}`);
114
+ let version;
115
+ let commit;
116
+ let source;
71
117
  try {
72
- if (source === 'npm') {
73
- const latest = tryCmd('npm', ['view', 'abmind', 'version'], process.cwd());
74
- if (!latest)
75
- throw new Error('Failed to fetch latest version from npm registry');
76
- let current = null;
77
- try {
78
- current = JSON.parse(await readFile(join(paths.home, 'current', 'package.json'), 'utf-8')).version;
118
+ if (parsed.channel === "dev") {
119
+ const explicit = parsed.localDir !== undefined;
120
+ const dir = parsed.localDir !== undefined
121
+ ? (isAbsolute(parsed.localDir) ? parsed.localDir : resolve(process.cwd(), parsed.localDir))
122
+ : defaultDevSrc;
123
+ if (!explicit) {
124
+ pullDevSource(dir);
125
+ const head = runCmdStdout("git", ["-C", dir, "rev-parse", "--short", "HEAD"]);
126
+ const prior = await readManifest(paths.manifest);
127
+ if (prior?.source === "local" && prior.commit === head) {
128
+ process.stdout.write(`abmind already up to date (${head}) — skipping build\n`);
129
+ return 0;
130
+ }
79
131
  }
80
- catch { }
81
- if (latest === current) {
82
- process.stdout.write(`Already at latest version (${latest}). Nothing to update.\n`);
83
- return 0;
132
+ if (!existsSync(dir) || !existsSync(`${dir}/package.json`)) {
133
+ process.stderr.write(`Not an abmind source tree: ${dir}\n`);
134
+ return 2;
84
135
  }
85
- const stagedPath = join(paths.releases, latest);
86
- await rm(stagedPath, { recursive: true, force: true });
87
- await mkdir(stagedPath, { recursive: true });
88
- runCmd('npm', ['pack', `abmind@${latest}`, '--pack-destination', stagedPath], stagedPath);
89
- const tgzName = `abmind-${latest}.tgz`;
90
- runCmd('tar', ['-xzf', join(stagedPath, tgzName), '--strip-components=1'], stagedPath);
91
- try {
92
- (await import('node:fs')).unlinkSync(join(stagedPath, tgzName));
93
- }
94
- catch { }
95
- runCmd('npm', ['install', '--omit=dev', '--no-audit', '--no-fund'], stagedPath);
96
- await activate(join(paths.home, 'current'), latest);
97
- await pruneReleases(paths.releases, [], latest);
98
- process.stdout.write(`✓ abmind updated to ${latest} (npm)\n`);
99
- return 0;
136
+ process.stdout.write(`Building abmind from ${dir}...\n`);
137
+ runCmd("npm", ["install", "--no-audit", "--no-fund"], dir);
138
+ runCmd("npm", ["run", "build"], dir);
139
+ process.stdout.write(`Installing to global location...\n`);
140
+ runCmd("npm", ["install", "-g", "--no-audit", "--no-fund", "."], dir);
141
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
142
+ version = pkg.version;
143
+ commit = runCmdStdout("git", ["-C", dir, "rev-parse", "--short", "HEAD"]);
144
+ source = "local";
100
145
  }
101
- const repoRoot = process.cwd();
102
- const { commit, branch } = checkStaleness(repoRoot, fromLocal);
103
- const pkg = JSON.parse(await readFile(join(repoRoot, 'package.json'), 'utf-8'));
104
- if (typeof pkg.version !== 'string')
105
- throw new Error('package.json missing version');
106
- const version = `${pkg.version}-${commit}`;
107
- process.stdout.write(`Building abmind from ${repoRoot}...\n`);
108
- runCmd('npm', ['install', '--no-audit', '--no-fund'], repoRoot);
109
- runCmd('npm', ['run', 'build'], repoRoot);
110
- const stagedPath = join(paths.releases, version);
111
- await rm(stagedPath, { recursive: true, force: true });
112
- await mkdir(stagedPath, { recursive: true });
113
- await cp(join(repoRoot, 'dist'), join(stagedPath, 'dist'), { recursive: true });
114
- // Sync node_modules/ via rsync -aL to dereference symlinks (the
115
- // "abmind": "file:../abmind" package dep becomes a symlink that we
116
- // must materialize into the release, or the runtime runs live code
117
- // from the dev workspace. Also contends with npm test for SQLite locks.)
118
- await rm(paths.nodeModules, { recursive: true, force: true });
119
- await mkdir(paths.nodeModules, { recursive: true });
120
- const rsyncResult = spawnSync('rsync', ['-aL', '--quiet', `${join(repoRoot, 'node_modules')}/`, `${paths.nodeModules}/`], { stdio: 'inherit' });
121
- if (rsyncResult.status !== 0) {
122
- throw new Error(`rsync of node_modules failed (status ${rsyncResult.status ?? -1})`);
146
+ else if (parsed.channel === "alpha") {
147
+ process.stdout.write(`Installing abmind@alpha from npm...\n`);
148
+ runCmd("npm", ["install", "-g", "--no-audit", "--no-fund", "abmind@alpha"], process.cwd());
149
+ const globalRoot = runCmdStdout("npm", ["root", "-g"]);
150
+ const globalPkg = JSON.parse(readFileSync(join(globalRoot, "abmind", "package.json"), "utf-8"));
151
+ version = globalPkg.version;
152
+ commit = `npm:${version}`;
153
+ source = "npm";
123
154
  }
124
- const packageLockHash = await hashFile(join(repoRoot, 'package-lock.json'));
125
- process.stdout.write(`✓ staged ${version} at ${stagedPath}\n`);
126
- await activate(paths.current, version);
127
- process.stdout.write(`✓ current -> releases/${version}\n`);
128
- const prior = await readManifest(paths.manifest);
129
- const now = new Date().toISOString();
130
- const newPriorReleases = prior?.version
131
- ? [
132
- {
133
- version: prior.version,
134
- commit: prior.commit,
135
- activatedAt: prior.activatedAt,
136
- packageLockHash: prior.packageLockHash,
137
- },
138
- ...(prior.priorReleases ?? []),
139
- ].slice(0, RETENTION - 1)
140
- : prior?.priorReleases ?? [];
141
- await writeManifest(paths.manifest, {
142
- ...(prior ?? emptyManifest('abmind', hostname())),
143
- version,
144
- commit,
145
- branch,
146
- packageLockHash,
147
- activatedAt: now,
148
- source: 'local',
149
- priorReleases: newPriorReleases,
150
- });
151
- process.stdout.write(`✓ manifest updated\n`);
152
- const pruned = await pruneReleases(paths.releases, [version, ...newPriorReleases.map((r) => r.version)], version, RETENTION);
153
- if (pruned.length > 0) {
154
- process.stdout.write(`✓ pruned ${pruned.length} old release(s): ${pruned.join(', ')}\n`);
155
+ else {
156
+ process.stdout.write(`Installing abmind@latest from npm...\n`);
157
+ runCmd("npm", ["install", "-g", "--no-audit", "--no-fund", "abmind@latest"], process.cwd());
158
+ const globalRoot = runCmdStdout("npm", ["root", "-g"]);
159
+ const globalPkg = JSON.parse(readFileSync(join(globalRoot, "abmind", "package.json"), "utf-8"));
160
+ version = globalPkg.version;
161
+ commit = `npm:${version}`;
162
+ source = "npm";
155
163
  }
156
- process.stdout.write(`\nabmind update complete: ${version}\n`);
157
- // Reconcile templates → runtime tree
158
- const { reconcile } = await import('../src/reconcile.js');
159
- reconcile(join(repoRoot, 'templates'), paths.home);
160
- process.stdout.write(`✓ reconciled templates\n`);
161
- // Remove stale CLI entries from legacy install paths (#958).
162
- // These shadow ~/.abtars/bin/abmind which is the correct wrapper.
163
- const home = process.env.HOME ?? '';
164
- const stalePaths = [
165
- join(home, '.npm-global', 'bin', 'abmind'),
166
- join(home, '.local', 'bin', 'abmind'),
167
- ];
168
- for (const p of stalePaths) {
169
- try {
170
- unlinkSync(p);
171
- process.stdout.write(`✓ removed stale ${p}\n`);
172
- }
173
- catch { /* ENOENT — already gone */ }
164
+ // Write manifest — best-effort (#1268: partial revert of #863)
165
+ try {
166
+ mkdirSync(dirname(paths.manifest), { recursive: true });
167
+ const prior = await readManifest(paths.manifest);
168
+ const base = prior ?? emptyManifest("abmind", hostname());
169
+ await writeManifest(paths.manifest, {
170
+ ...base,
171
+ version,
172
+ commit,
173
+ source,
174
+ activatedAt: new Date().toISOString(),
175
+ });
174
176
  }
177
+ catch { /* best-effort — update succeeded even if manifest write fails */ }
178
+ process.stdout.write(`\u2713 abmind update complete\n`);
175
179
  return 0;
176
180
  }
177
181
  finally {