aismemory 0.8.2 → 0.8.4

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 (198) hide show
  1. package/README.md +146 -3
  2. package/dist/__tests__/agent-key-mode.test.js +46 -5
  3. package/dist/__tests__/agent-key-mode.test.js.map +1 -1
  4. package/dist/__tests__/ais-http.test.js +49 -1
  5. package/dist/__tests__/ais-http.test.js.map +1 -1
  6. package/dist/__tests__/auto-enroll-key.test.js +20 -1
  7. package/dist/__tests__/auto-enroll-key.test.js.map +1 -1
  8. package/dist/__tests__/cli-info.test.d.ts +1 -0
  9. package/dist/__tests__/cli-info.test.js +117 -0
  10. package/dist/__tests__/cli-info.test.js.map +1 -0
  11. package/dist/__tests__/client-credential-expiry.test.d.ts +1 -0
  12. package/dist/__tests__/client-credential-expiry.test.js +319 -0
  13. package/dist/__tests__/client-credential-expiry.test.js.map +1 -0
  14. package/dist/__tests__/credential-resolution.test.js +10 -4
  15. package/dist/__tests__/credential-resolution.test.js.map +1 -1
  16. package/dist/__tests__/declared-agent.test.d.ts +1 -0
  17. package/dist/__tests__/declared-agent.test.js +60 -0
  18. package/dist/__tests__/declared-agent.test.js.map +1 -0
  19. package/dist/__tests__/doctor.test.js +21 -2
  20. package/dist/__tests__/doctor.test.js.map +1 -1
  21. package/dist/__tests__/dream-poll.test.d.ts +1 -0
  22. package/dist/__tests__/dream-poll.test.js +130 -0
  23. package/dist/__tests__/dream-poll.test.js.map +1 -0
  24. package/dist/__tests__/enable-key-auth.test.d.ts +1 -0
  25. package/dist/__tests__/enable-key-auth.test.js +180 -0
  26. package/dist/__tests__/enable-key-auth.test.js.map +1 -0
  27. package/dist/__tests__/existing-hashes.test.js +3 -6
  28. package/dist/__tests__/existing-hashes.test.js.map +1 -1
  29. package/dist/__tests__/full-context-view-forwarding.test.js +20 -1
  30. package/dist/__tests__/full-context-view-forwarding.test.js.map +1 -1
  31. package/dist/__tests__/hooks.test.d.ts +1 -0
  32. package/dist/__tests__/hooks.test.js +455 -0
  33. package/dist/__tests__/hooks.test.js.map +1 -0
  34. package/dist/__tests__/hydration.test.js +2 -0
  35. package/dist/__tests__/hydration.test.js.map +1 -1
  36. package/dist/__tests__/install.test.js +28 -1
  37. package/dist/__tests__/install.test.js.map +1 -1
  38. package/dist/__tests__/invite-accept.test.d.ts +1 -0
  39. package/dist/__tests__/invite-accept.test.js +282 -0
  40. package/dist/__tests__/invite-accept.test.js.map +1 -0
  41. package/dist/__tests__/list-all-agents.test.js +17 -15
  42. package/dist/__tests__/list-all-agents.test.js.map +1 -1
  43. package/dist/__tests__/mcp-instructions.test.d.ts +1 -0
  44. package/dist/__tests__/mcp-instructions.test.js +26 -0
  45. package/dist/__tests__/mcp-instructions.test.js.map +1 -0
  46. package/dist/__tests__/mcp-tools.test.js +136 -5
  47. package/dist/__tests__/mcp-tools.test.js.map +1 -1
  48. package/dist/__tests__/memory-export.test.d.ts +1 -0
  49. package/dist/__tests__/memory-export.test.js +78 -0
  50. package/dist/__tests__/memory-export.test.js.map +1 -0
  51. package/dist/__tests__/missing-credential-help.test.d.ts +1 -0
  52. package/dist/__tests__/missing-credential-help.test.js +14 -0
  53. package/dist/__tests__/missing-credential-help.test.js.map +1 -0
  54. package/dist/__tests__/owner-credentials.test.d.ts +1 -0
  55. package/dist/__tests__/owner-credentials.test.js +250 -0
  56. package/dist/__tests__/owner-credentials.test.js.map +1 -0
  57. package/dist/__tests__/owner-keychain-agent-load.test.d.ts +1 -0
  58. package/dist/__tests__/owner-keychain-agent-load.test.js +57 -0
  59. package/dist/__tests__/owner-keychain-agent-load.test.js.map +1 -0
  60. package/dist/__tests__/recall-order-by.test.d.ts +1 -0
  61. package/dist/__tests__/recall-order-by.test.js +115 -0
  62. package/dist/__tests__/recall-order-by.test.js.map +1 -0
  63. package/dist/__tests__/reconnect-survival-e2e.test.js +3 -2
  64. package/dist/__tests__/reconnect-survival-e2e.test.js.map +1 -1
  65. package/dist/__tests__/remember-duplicate-truth.test.js +11 -0
  66. package/dist/__tests__/remember-duplicate-truth.test.js.map +1 -1
  67. package/dist/__tests__/request-timeout.test.js +15 -0
  68. package/dist/__tests__/request-timeout.test.js.map +1 -1
  69. package/dist/__tests__/resolve-agent-preference.test.js +19 -8
  70. package/dist/__tests__/resolve-agent-preference.test.js.map +1 -1
  71. package/dist/__tests__/retry-after.test.js +53 -0
  72. package/dist/__tests__/retry-after.test.js.map +1 -1
  73. package/dist/__tests__/run-pass-mode.test.js +34 -1
  74. package/dist/__tests__/run-pass-mode.test.js.map +1 -1
  75. package/dist/__tests__/session-identity.test.js +63 -0
  76. package/dist/__tests__/session-identity.test.js.map +1 -1
  77. package/dist/__tests__/signin-keychain.test.d.ts +1 -0
  78. package/dist/__tests__/signin-keychain.test.js +79 -0
  79. package/dist/__tests__/signin-keychain.test.js.map +1 -0
  80. package/dist/__tests__/startup-identity.test.d.ts +1 -0
  81. package/dist/__tests__/startup-identity.test.js +213 -0
  82. package/dist/__tests__/startup-identity.test.js.map +1 -0
  83. package/dist/__tests__/sync-auth.test.d.ts +1 -0
  84. package/dist/__tests__/sync-auth.test.js +69 -0
  85. package/dist/__tests__/sync-auth.test.js.map +1 -0
  86. package/dist/__tests__/sync-doc.test.d.ts +1 -0
  87. package/dist/__tests__/sync-doc.test.js +13 -0
  88. package/dist/__tests__/sync-doc.test.js.map +1 -0
  89. package/dist/__tests__/sync-memory-cli.test.js +1 -1
  90. package/dist/__tests__/sync-memory-cli.test.js.map +1 -1
  91. package/dist/__tests__/tool-args.test.js +6 -0
  92. package/dist/__tests__/tool-args.test.js.map +1 -1
  93. package/dist/__tests__/version-check.test.js +16 -1
  94. package/dist/__tests__/version-check.test.js.map +1 -1
  95. package/dist/agent-key-mode.js +24 -24
  96. package/dist/agent-key-mode.js.map +1 -1
  97. package/dist/agent-preference.d.ts +4 -0
  98. package/dist/agent-preference.js +7 -1
  99. package/dist/agent-preference.js.map +1 -1
  100. package/dist/ais-http-error.d.ts +5 -0
  101. package/dist/ais-http-error.js +10 -0
  102. package/dist/ais-http-error.js.map +1 -1
  103. package/dist/ais-http.d.ts +2 -0
  104. package/dist/ais-http.js +41 -6
  105. package/dist/ais-http.js.map +1 -1
  106. package/dist/auto-handoff.js +2 -1
  107. package/dist/auto-handoff.js.map +1 -1
  108. package/dist/cli/doctor.d.ts +8 -0
  109. package/dist/cli/doctor.js +19 -0
  110. package/dist/cli/doctor.js.map +1 -1
  111. package/dist/cli/enable-key-auth.js +39 -18
  112. package/dist/cli/enable-key-auth.js.map +1 -1
  113. package/dist/cli/export-harness.d.ts +13 -0
  114. package/dist/cli/export-harness.js +110 -0
  115. package/dist/cli/export-harness.js.map +1 -0
  116. package/dist/cli/hooks.d.ts +62 -0
  117. package/dist/cli/hooks.js +634 -0
  118. package/dist/cli/hooks.js.map +1 -0
  119. package/dist/cli/install.d.ts +4 -0
  120. package/dist/cli/install.js +44 -5
  121. package/dist/cli/install.js.map +1 -1
  122. package/dist/cli/invite-accept.d.ts +67 -0
  123. package/dist/cli/invite-accept.js +295 -0
  124. package/dist/cli/invite-accept.js.map +1 -0
  125. package/dist/cli/owner-credentials.d.ts +52 -0
  126. package/dist/cli/owner-credentials.js +387 -0
  127. package/dist/cli/owner-credentials.js.map +1 -0
  128. package/dist/cli/sync-memory.js +7 -9
  129. package/dist/cli/sync-memory.js.map +1 -1
  130. package/dist/cli-info.d.ts +18 -0
  131. package/dist/cli-info.js +77 -0
  132. package/dist/cli-info.js.map +1 -0
  133. package/dist/credential-expiry.d.ts +10 -0
  134. package/dist/credential-expiry.js +41 -0
  135. package/dist/credential-expiry.js.map +1 -0
  136. package/dist/credential-whoami.js +1 -1
  137. package/dist/credential-whoami.js.map +1 -1
  138. package/dist/declared-agent.d.ts +20 -0
  139. package/dist/declared-agent.js +40 -0
  140. package/dist/declared-agent.js.map +1 -0
  141. package/dist/device-poll.d.ts +1 -0
  142. package/dist/device-poll.js.map +1 -1
  143. package/dist/dream-poll.d.ts +19 -0
  144. package/dist/dream-poll.js +93 -0
  145. package/dist/dream-poll.js.map +1 -0
  146. package/dist/env-agent.d.ts +6 -1
  147. package/dist/env-agent.js +18 -5
  148. package/dist/env-agent.js.map +1 -1
  149. package/dist/hydration.js +2 -1
  150. package/dist/hydration.js.map +1 -1
  151. package/dist/index.d.ts +1 -0
  152. package/dist/index.js +145 -18
  153. package/dist/index.js.map +1 -1
  154. package/dist/key-auth.d.ts +13 -3
  155. package/dist/key-auth.js +27 -5
  156. package/dist/key-auth.js.map +1 -1
  157. package/dist/mcp/tools.js +55 -25
  158. package/dist/mcp/tools.js.map +1 -1
  159. package/dist/mcp-instructions.d.ts +6 -0
  160. package/dist/mcp-instructions.js +7 -0
  161. package/dist/mcp-instructions.js.map +1 -0
  162. package/dist/memory-export.d.ts +30 -0
  163. package/dist/memory-export.js +116 -0
  164. package/dist/memory-export.js.map +1 -0
  165. package/dist/pipeline/bulk-store.d.ts +2 -5
  166. package/dist/pipeline/bulk-store.js +2 -4
  167. package/dist/pipeline/bulk-store.js.map +1 -1
  168. package/dist/pipeline/existing-hashes.d.ts +2 -5
  169. package/dist/pipeline/existing-hashes.js +1 -2
  170. package/dist/pipeline/existing-hashes.js.map +1 -1
  171. package/dist/pipeline/sync-auth.d.ts +12 -0
  172. package/dist/pipeline/sync-auth.js +64 -0
  173. package/dist/pipeline/sync-auth.js.map +1 -0
  174. package/dist/refresh.js +2 -1
  175. package/dist/refresh.js.map +1 -1
  176. package/dist/request-timeout.d.ts +4 -4
  177. package/dist/request-timeout.js +15 -6
  178. package/dist/request-timeout.js.map +1 -1
  179. package/dist/run-pass-mode.js +48 -15
  180. package/dist/run-pass-mode.js.map +1 -1
  181. package/dist/session-identity.js +14 -12
  182. package/dist/session-identity.js.map +1 -1
  183. package/dist/signin-keychain.d.ts +54 -0
  184. package/dist/signin-keychain.js +200 -0
  185. package/dist/signin-keychain.js.map +1 -0
  186. package/dist/startup-identity.d.ts +71 -0
  187. package/dist/startup-identity.js +213 -0
  188. package/dist/startup-identity.js.map +1 -0
  189. package/dist/tool-args.d.ts +10 -0
  190. package/dist/tool-args.js +39 -0
  191. package/dist/tool-args.js.map +1 -1
  192. package/dist/types.d.ts +8 -0
  193. package/dist/version-check.d.ts +8 -0
  194. package/dist/version-check.js +21 -1
  195. package/dist/version-check.js.map +1 -1
  196. package/dist/workspace-key-mode.js +54 -33
  197. package/dist/workspace-key-mode.js.map +1 -1
  198. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/cli/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  export interface InstallResult {
2
2
  configPath: string;
3
+ entryInstructionsPath: string;
4
+ entryInstructions: string;
3
5
  startCommand: string;
4
6
  }
7
+ /** First-call guidance for a new machine; carries the agent ID only, never credentials. */
8
+ export declare function renderEntryInstructions(agentId: string): string;
5
9
  export declare function installIdentity(identity: string, outDir?: string): InstallResult;
6
10
  export declare function main(argv?: string[]): void;
@@ -1,8 +1,32 @@
1
1
  /** Generate opt-in session configs; never register an identity in user scope. */
2
- import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { lstatSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { parseArgs } from 'node:util';
5
5
  import { loadSessionIdentity } from '../session-identity.js';
6
+ import { readPackageVersion } from '../version-check.js';
7
+ function exists(path) {
8
+ try {
9
+ lstatSync(path);
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ /** First-call guidance for a new machine; carries the agent ID only, never credentials. */
17
+ export function renderEntryInstructions(agentId) {
18
+ return `# AIS Memory entry instructions: ${agentId}
19
+
20
+ This session is pinned to AIS agent \`${agentId}\` through its MCP config.
21
+ Call these in order at the start of every session:
22
+
23
+ 1. \`whoami\`: confirm the active identity is \`${agentId}\`, or complete authentication if it asks.
24
+ 2. \`full_context\`: load the identity, constitution and goals.
25
+ 3. Operating layer: follow the instructions and goals \`full_context\` returns; \`recall\` before answering from past context and \`remember\` each decision or lesson worth keeping.
26
+
27
+ No credentials are stored in this file or the MCP config. Authenticate through \`whoami\`.
28
+ `;
29
+ }
6
30
  function shellQuote(value) {
7
31
  return `'${value.replaceAll("'", "'\\''")}'`;
8
32
  }
@@ -15,7 +39,8 @@ export function installIdentity(identity, outDir = resolve('aismemory-configs'))
15
39
  mcpServers: {
16
40
  aismemory: {
17
41
  command: 'npx',
18
- args: ['-y', 'aismemory@latest'],
42
+ // Pin this release: resolving @latest on every start can outlast a client's connect timeout.
43
+ args: ['-y', `aismemory@${readPackageVersion()}`],
19
44
  env: {
20
45
  AIS_AGENT_ID: pin.agentId,
21
46
  npm_config_audit: 'false',
@@ -24,29 +49,43 @@ export function installIdentity(identity, outDir = resolve('aismemory-configs'))
24
49
  },
25
50
  },
26
51
  };
52
+ const entryInstructionsPath = join(resolve(outDir), `aismemory-${pin.agentId}.entry.md`);
53
+ const entryInstructions = renderEntryInstructions(pin.agentId);
54
+ // Check both up front so a refusal never leaves a config without its instructions.
55
+ if (exists(configPath) || exists(entryInstructionsPath)) {
56
+ throw new Error(`Refusing to overwrite existing install files for ${pin.agentId} in ${resolve(outDir)}.`);
57
+ }
27
58
  mkdirSync(resolve(outDir), { recursive: true });
28
59
  // Exclusive creation refuses existing files (including symlinks); never overwrite
29
60
  // another config or follow a link into a user's shared configuration.
30
61
  writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`, { flag: 'wx' });
62
+ writeFileSync(entryInstructionsPath, entryInstructions, { flag: 'wx' });
31
63
  return {
32
64
  configPath,
65
+ entryInstructionsPath,
66
+ entryInstructions,
33
67
  startCommand: `AIS_AGENT_ID=${shellQuote(pin.agentId)} claude --strict-mcp-config --mcp-config ${shellQuote(configPath)}`,
34
68
  };
35
69
  }
36
70
  export function main(argv = process.argv.slice(3)) {
37
71
  const { values } = parseArgs({
38
72
  args: argv,
39
- options: { identity: { type: 'string' }, out: { type: 'string' }, help: { type: 'boolean' } },
73
+ options: { identity: { type: 'string' }, out: { type: 'string' }, bundle: { type: 'boolean' }, help: { type: 'boolean' } },
40
74
  strict: true,
41
75
  allowPositionals: false,
42
76
  });
43
77
  if (values.help) {
44
- process.stdout.write('Usage: aismemory install --identity <agent-id> [--out <directory>]\nUse the agent ID from whoami; names are not resolved. Default output: ./aismemory-configs\n');
78
+ process.stdout.write('Usage: aismemory install --identity <agent-id> [--out <directory>] [--bundle]\n--bundle also prints one JSON bundle (config, entry instructions, start command). Use the agent ID from whoami; names are not resolved. Default output: ./aismemory-configs\n');
45
79
  return;
46
80
  }
47
81
  if (!values.identity)
48
82
  throw new Error('Usage: aismemory install --identity <agent-id> [--out <directory>]');
49
83
  const result = installIdentity(values.identity, values.out);
50
- process.stdout.write(`Created ${result.configPath}\n\nStart this identity's session (shell/start-script snippet):\n${result.startCommand}\n\n--strict-mcp-config loads only this config for this session. Add other needed MCP servers to this file.\nKeep this config per session; never copy its AIS_AGENT_ID into ~/.claude.json or a shared shell profile.\nNo credentials were copied. Run whoami in the session to verify or complete authentication.\n`);
84
+ if (values.bundle) {
85
+ const config = JSON.parse(readFileSync(result.configPath, 'utf8'));
86
+ process.stdout.write(`${JSON.stringify({ config, entryInstructions: result.entryInstructions, startCommand: result.startCommand }, null, 2)}\n`);
87
+ return;
88
+ }
89
+ process.stdout.write(`Created ${result.configPath}\nCreated ${result.entryInstructionsPath}\n\nStart this identity's session (shell/start-script snippet):\n${result.startCommand}\n\n--strict-mcp-config loads only this config for this session. Add other needed MCP servers to this file.\nKeep this config per session; never copy its AIS_AGENT_ID into ~/.claude.json or a shared shell profile.\nNo credentials were copied. Run whoami in the session to verify or complete authentication.\n`);
51
90
  }
52
91
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAO7D,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,SAAiB,OAAO,CAAC,mBAAmB,CAAC;IAC7F,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAChC,GAAG,EAAE;oBACH,YAAY,EAAE,GAAG,CAAC,OAAO;oBACzB,gBAAgB,EAAE,OAAO;oBACzB,eAAe,EAAE,OAAO;iBACzB;aACF;SACF;KACF,CAAC;IACF,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,kFAAkF;IAClF,sEAAsE;IACtE,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO;QACL,UAAU;QACV,YAAY,EAAE,gBAAgB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,4CAA4C,UAAU,CAAC,UAAU,CAAC,EAAE;KAC1H,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAC7F,MAAM,EAAE,IAAI;QACZ,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iKAAiK,CAAC,CAAC;QACxL,OAAO;IACT,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,UAAU,oEAAoE,MAAM,CAAC,YAAY,sTAAsT,CAAC,CAAC;AAClc,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export interface InviteAcceptArgs {
2
+ tokenEnv?: string;
3
+ tokenStdin: boolean;
4
+ name?: string;
5
+ help: boolean;
6
+ }
7
+ export interface InviteAcceptResult {
8
+ ok: true;
9
+ claimUrl: string;
10
+ officialHost?: string;
11
+ inviteCodeLabel?: string;
12
+ inviterDisplayName?: string;
13
+ agentMessage?: string;
14
+ humanMessage?: string;
15
+ credentialsSaved?: boolean;
16
+ credentialsFile?: string;
17
+ /** Why the save failed (fs error message only; never the bearer). */
18
+ credentialsError?: string;
19
+ }
20
+ /** Fields of the reply that make up the credentials file; never printed. */
21
+ interface ProvisionalBearer {
22
+ token: string;
23
+ agentId: string;
24
+ tenantId: string;
25
+ expiresAt: string;
26
+ }
27
+ export interface InviteAcceptDeps {
28
+ env: NodeJS.ProcessEnv;
29
+ readStdin: () => Promise<string>;
30
+ fetchImpl: typeof fetch;
31
+ stdout: (text: string) => void;
32
+ /** Where to save the provisional bearer; defaults to provisionalCredentialsPath(). */
33
+ credentialsPath?: string;
34
+ /** Home directory for the default path; defaults to os.homedir(). */
35
+ home?: string;
36
+ }
37
+ export declare class InviteAcceptError extends Error {
38
+ constructor(message: string);
39
+ }
40
+ export declare function parseInviteArgs(argv: string[]): InviteAcceptArgs;
41
+ /** Resolve the token from the one source the arguments allow. */
42
+ export declare function readInviteToken(args: InviteAcceptArgs, deps: Pick<InviteAcceptDeps, 'env' | 'readStdin'>): Promise<string>;
43
+ /**
44
+ * Where the provisional bearer goes, or why it is not saved. With AIS_AGENT_ID
45
+ * pinned to another agent the default path is that agent's file, so the new
46
+ * agent gets its own agents/<agentId>/ file instead. An explicit
47
+ * AIS_CREDENTIALS_FILE is then the pinned agent's file too, so nothing is saved.
48
+ */
49
+ export declare function provisionalCredentialsPath(env: NodeJS.ProcessEnv, agentId: string, home?: string): {
50
+ file: string;
51
+ } | {
52
+ skipped: string;
53
+ };
54
+ /**
55
+ * Create the credentials file with the provisional bearer. The exclusive
56
+ * flag ('wx') means an existing file is left alone and no pre-existing
57
+ * file's permissions are inherited. Returns false when the file exists.
58
+ */
59
+ export declare function saveProvisionalCredentials(bearer: ProvisionalBearer, file: string): boolean;
60
+ /** POST /v1/register with the invite. The bearer token in the reply is not printed. */
61
+ export declare function acceptInvite(aisUrl: string, token: string, name: string | undefined, fetchImpl: typeof fetch): Promise<InviteAcceptResult & {
62
+ bearer?: ProvisionalBearer | 'mismatch';
63
+ }>;
64
+ export declare function main(argv: string[], deps?: InviteAcceptDeps): Promise<void>;
65
+ /** Entry from `aismemory invite ...`: failures print one line and exit 1. */
66
+ export declare function runFromCli(argv: string[]): Promise<void>;
67
+ export {};
@@ -0,0 +1,295 @@
1
+ /**
2
+ * `aismemory invite accept` — register this agent with a friends invite and
3
+ * print the bond link for the human (CORBOT-74F03CB8, design
4
+ * docs/design/2026-09-25-invite-friends.md §A/§B).
5
+ *
6
+ * The token is read from an environment variable (--token-env NAME) or from
7
+ * stdin (--token-stdin), never from argv: argv lands in process listings and
8
+ * shell history. There is deliberately no --token flag.
9
+ *
10
+ * Usage:
11
+ * AIS_FRIEND_INVITE_TOKEN=... npx -y aismemory invite accept --token-env AIS_FRIEND_INVITE_TOKEN
12
+ * printf '%s' "$AIS_FRIEND_INVITE_TOKEN" | npx -y aismemory invite accept --token-stdin
13
+ *
14
+ * Exit codes:
15
+ * 0 — registered; the bond link is on stdout
16
+ *
17
+ * The provisional bearer from the reply is saved to the credentials file
18
+ * (dir 0700, file 0600; CORBOT-E1F1BF0C) so the agent can use AIS before
19
+ * bonding without a second sign-in. It is never printed. An existing
20
+ * credentials file is never overwritten: that may be a bonded agent's.
21
+ * 1 — bad arguments, no token, or the service refused the invite
22
+ */
23
+ import { chmodSync, lstatSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
24
+ import { homedir } from 'node:os';
25
+ import { dirname, join } from 'node:path';
26
+ import { DEFAULT_AIS_URL } from '../ais-http.js';
27
+ import { credentialsFilePath } from '../oauth-credentials.js';
28
+ const USAGE = `aismemory invite accept — join Agents & Swarms with a friends invite
29
+
30
+ Usage:
31
+ AIS_FRIEND_INVITE_TOKEN=... aismemory invite accept --token-env AIS_FRIEND_INVITE_TOKEN
32
+ printf '%s' "$AIS_FRIEND_INVITE_TOKEN" | aismemory invite accept --token-stdin
33
+
34
+ Options:
35
+ --token-env <NAME> Read the invite token from environment variable NAME.
36
+ --token-stdin Read the invite token from standard input.
37
+ --name <name> Name for this agent (optional).
38
+ --help, -h Show this message.
39
+
40
+ There is no --token flag: a token on the command line lands in process
41
+ listings and shell history. Give your human only the bond link printed.
42
+ `;
43
+ const ENV_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
44
+ // Same rule credentialsFilePath() applies to AIS_AGENT_ID: one safe path segment.
45
+ const AGENT_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
46
+ export class InviteAcceptError extends Error {
47
+ constructor(message) {
48
+ super(message);
49
+ this.name = 'InviteAcceptError';
50
+ }
51
+ }
52
+ export function parseInviteArgs(argv) {
53
+ const [sub, ...rest] = argv;
54
+ if (sub === '--help' || sub === '-h' || sub === undefined) {
55
+ return { tokenStdin: false, help: true };
56
+ }
57
+ if (sub !== 'accept') {
58
+ throw new InviteAcceptError(`Unknown invite command: ${sub}. Run aismemory invite accept --help.`);
59
+ }
60
+ const args = { tokenStdin: false, help: false };
61
+ for (let i = 0; i < rest.length; i++) {
62
+ const flag = rest[i];
63
+ if (flag === '--token-env' && rest[i + 1] !== undefined) {
64
+ args.tokenEnv = rest[++i];
65
+ }
66
+ else if (flag === '--token-stdin') {
67
+ args.tokenStdin = true;
68
+ }
69
+ else if (flag === '--name' && rest[i + 1] !== undefined) {
70
+ args.name = rest[++i];
71
+ }
72
+ else if (flag === '--help' || flag === '-h') {
73
+ args.help = true;
74
+ }
75
+ else if (flag === '--token' || flag.startsWith('--token=')) {
76
+ // Never echo the value: it may be the token itself.
77
+ throw new InviteAcceptError('There is no --token flag; a token in argv leaks into process listings and shell history. ' +
78
+ 'Use --token-env NAME or --token-stdin.');
79
+ }
80
+ else {
81
+ throw new InviteAcceptError(`Unknown option: ${flag.startsWith('-') ? flag : '(positional argument)'}. Run aismemory invite accept --help.`);
82
+ }
83
+ }
84
+ if (args.help)
85
+ return args;
86
+ if ((args.tokenEnv !== undefined) === args.tokenStdin) {
87
+ throw new InviteAcceptError('Pass exactly one of --token-env NAME or --token-stdin.');
88
+ }
89
+ if (args.tokenEnv !== undefined && !ENV_NAME_PATTERN.test(args.tokenEnv)) {
90
+ throw new InviteAcceptError('--token-env takes the NAME of an environment variable, not the token.');
91
+ }
92
+ return args;
93
+ }
94
+ /** Resolve the token from the one source the arguments allow. */
95
+ export async function readInviteToken(args, deps) {
96
+ const raw = args.tokenStdin ? await deps.readStdin() : deps.env[args.tokenEnv];
97
+ const token = raw?.trim() ?? '';
98
+ if (token.length === 0) {
99
+ throw new InviteAcceptError(
100
+ // Never echo the name: a user may have passed the token itself as NAME.
101
+ args.tokenStdin ? 'No invite token on stdin.' : 'The environment variable named by --token-env is empty or not set.');
102
+ }
103
+ return token;
104
+ }
105
+ function pickString(source, key) {
106
+ const value = source[key];
107
+ return typeof value === 'string' ? value : undefined;
108
+ }
109
+ /** Payload claims of the provisional JWT AIS just issued (not verified here). */
110
+ function jwtClaims(jwt) {
111
+ const payload = jwt.split('.')[1];
112
+ if (payload === undefined)
113
+ return undefined;
114
+ try {
115
+ const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
116
+ return typeof claims === 'object' && claims !== null ? claims : undefined;
117
+ }
118
+ catch {
119
+ return undefined;
120
+ }
121
+ }
122
+ /** The bearer from the reply, or 'mismatch' when its agentId is not the JWT's agent. */
123
+ function provisionalBearer(data) {
124
+ const token = pickString(data, 'bearerToken');
125
+ const agentId = pickString(data, 'agentId');
126
+ const expiresAt = pickString(data, 'expiresAt');
127
+ const claims = token === undefined ? undefined : jwtClaims(token);
128
+ const tenantId = claims === undefined ? undefined : pickString(claims, 'tenant_id');
129
+ if (token === undefined || agentId === undefined || expiresAt === undefined || claims === undefined || tenantId === undefined) {
130
+ return undefined;
131
+ }
132
+ // Every agent claim the JWT carries must name the agent the reply names.
133
+ const jwtAgentIds = [pickString(claims, 'agent_id'), pickString(claims, 'sub')]
134
+ .filter((id) => id !== undefined);
135
+ if (jwtAgentIds.length === 0 || jwtAgentIds.some((id) => id !== agentId)) {
136
+ return 'mismatch';
137
+ }
138
+ return { token, agentId, tenantId, expiresAt };
139
+ }
140
+ /**
141
+ * Where the provisional bearer goes, or why it is not saved. With AIS_AGENT_ID
142
+ * pinned to another agent the default path is that agent's file, so the new
143
+ * agent gets its own agents/<agentId>/ file instead. An explicit
144
+ * AIS_CREDENTIALS_FILE is then the pinned agent's file too, so nothing is saved.
145
+ */
146
+ export function provisionalCredentialsPath(env, agentId, home = homedir()) {
147
+ const pinned = env['AIS_AGENT_ID']?.trim();
148
+ if (!pinned || pinned === agentId) {
149
+ return { file: credentialsFilePath(home) };
150
+ }
151
+ if (env['AIS_CREDENTIALS_FILE']?.trim()) {
152
+ return { skipped: 'AIS_CREDENTIALS_FILE is set while AIS_AGENT_ID names another agent; credentials not saved.' };
153
+ }
154
+ if (!AGENT_ID_PATTERN.test(agentId)) {
155
+ return { skipped: 'The new agent id is not a safe path segment; credentials not saved.' };
156
+ }
157
+ return { file: join(home, '.aismemory', 'agents', agentId, 'credentials.json') };
158
+ }
159
+ // A credentials file is a few hundred bytes; anything bigger is not one.
160
+ const MAX_CREDENTIALS_BYTES = 64 * 1024;
161
+ /** True when `file` holds credentials whose expiresAt has passed. */
162
+ function holdsExpiredCredentials(file, nowMs) {
163
+ try {
164
+ // Never read a FIFO, device or symlink target: a blocking read would hide the bond link.
165
+ const stat = lstatSync(file);
166
+ if (!stat.isFile() || stat.size > MAX_CREDENTIALS_BYTES)
167
+ return false;
168
+ const parsed = JSON.parse(readFileSync(file, 'utf8'));
169
+ if (typeof parsed !== 'object' || parsed === null)
170
+ return false;
171
+ const expiresAt = pickString(parsed, 'expiresAt');
172
+ const expiresMs = expiresAt === undefined ? Number.NaN : Date.parse(expiresAt);
173
+ return Number.isFinite(expiresMs) && expiresMs <= nowMs;
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ /**
180
+ * Create the credentials file with the provisional bearer. The exclusive
181
+ * flag ('wx') means an existing file is left alone and no pre-existing
182
+ * file's permissions are inherited. Returns false when the file exists.
183
+ */
184
+ export function saveProvisionalCredentials(bearer, file) {
185
+ mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
186
+ const creds = bearer;
187
+ try {
188
+ writeFileSync(file, JSON.stringify(creds, null, 2), { mode: 0o600, flag: 'wx' });
189
+ }
190
+ catch (err) {
191
+ if (err.code === 'EEXIST')
192
+ return false;
193
+ throw err;
194
+ }
195
+ // The create mode is umask-dependent; chmod is the reliable path on POSIX.
196
+ if (process.platform !== 'win32') {
197
+ chmodSync(file, 0o600);
198
+ }
199
+ return true;
200
+ }
201
+ /** POST /v1/register with the invite. The bearer token in the reply is not printed. */
202
+ export async function acceptInvite(aisUrl, token, name, fetchImpl) {
203
+ const res = await fetchImpl(`${aisUrl}/v1/register`, {
204
+ method: 'POST',
205
+ headers: { 'Content-Type': 'application/json' },
206
+ body: JSON.stringify(name === undefined ? { inviteToken: token } : { inviteToken: token, name }),
207
+ });
208
+ const body = await res.json().catch(() => null);
209
+ const envelope = typeof body === 'object' && body !== null ? body : {};
210
+ const data = typeof envelope['data'] === 'object' && envelope['data'] !== null
211
+ ? envelope['data']
212
+ : {};
213
+ const claimUrl = pickString(data, 'claimUrl');
214
+ if (!res.ok || claimUrl === undefined) {
215
+ const error = typeof envelope['error'] === 'object' && envelope['error'] !== null
216
+ ? envelope['error']
217
+ : {};
218
+ throw new InviteAcceptError(pickString(error, 'message') ?? `The service refused the invite (HTTP ${res.status}).`);
219
+ }
220
+ return {
221
+ ok: true,
222
+ claimUrl,
223
+ officialHost: pickString(data, 'officialHost'),
224
+ inviteCodeLabel: pickString(data, 'inviteCodeLabel'),
225
+ inviterDisplayName: pickString(data, 'inviterDisplayName'),
226
+ agentMessage: pickString(data, 'agentMessage'),
227
+ humanMessage: pickString(data, 'humanMessage'),
228
+ bearer: provisionalBearer(data),
229
+ };
230
+ }
231
+ async function readAllStdin() {
232
+ const chunks = [];
233
+ for await (const chunk of process.stdin) {
234
+ chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
235
+ }
236
+ return Buffer.concat(chunks).toString('utf8');
237
+ }
238
+ export async function main(argv, deps = {
239
+ env: process.env,
240
+ readStdin: readAllStdin,
241
+ fetchImpl: fetch,
242
+ stdout: (text) => { process.stdout.write(text); },
243
+ }) {
244
+ const args = parseInviteArgs(argv);
245
+ if (args.help) {
246
+ deps.stdout(USAGE);
247
+ return;
248
+ }
249
+ const token = await readInviteToken(args, deps);
250
+ const aisUrl = (deps.env['AIS_URL']?.trim() || DEFAULT_AIS_URL).replace(/\/+$/, '');
251
+ const { bearer, ...result } = await acceptInvite(aisUrl, token, args.name, deps.fetchImpl);
252
+ if (bearer === 'mismatch') {
253
+ result.credentialsSaved = false;
254
+ result.credentialsError = 'The reply agentId does not match the bearer token; credentials not saved.';
255
+ }
256
+ else if (bearer !== undefined) {
257
+ // The agent is registered by now: a local save failure must not hide
258
+ // the bond link, so it is reported in the result instead of thrown.
259
+ try {
260
+ const target = deps.credentialsPath !== undefined
261
+ ? { file: deps.credentialsPath }
262
+ : provisionalCredentialsPath(deps.env, bearer.agentId, deps.home);
263
+ if ('skipped' in target) {
264
+ result.credentialsSaved = false;
265
+ result.credentialsError = target.skipped;
266
+ }
267
+ else {
268
+ const { file } = target;
269
+ result.credentialsFile = file;
270
+ result.credentialsSaved = saveProvisionalCredentials(bearer, file);
271
+ if (!result.credentialsSaved && holdsExpiredCredentials(file, Date.now())) {
272
+ const hint = `An expired credentials file at ${file} was left in place, so the new credentials were not saved; the bond link still works, and the agent can sign in after bonding.`;
273
+ result.humanMessage = result.humanMessage === undefined ? hint : `${result.humanMessage} ${hint}`;
274
+ }
275
+ }
276
+ }
277
+ catch (err) {
278
+ result.credentialsSaved = false;
279
+ result.credentialsError = err instanceof Error ? err.message : 'Could not save credentials';
280
+ }
281
+ }
282
+ deps.stdout(`${JSON.stringify(result, null, 2)}\n`);
283
+ }
284
+ /** Entry from `aismemory invite ...`: failures print one line and exit 1. */
285
+ export async function runFromCli(argv) {
286
+ try {
287
+ await main(argv);
288
+ }
289
+ catch (err) {
290
+ const message = err instanceof Error ? err.message : String(err);
291
+ process.stderr.write(`[aismemory invite] Failed: ${message}\n`);
292
+ process.exit(1);
293
+ }
294
+ }
295
+ //# sourceMappingURL=invite-accept.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-accept.js","sourceRoot":"","sources":["../../src/cli/invite-accept.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export type OwnerCommand = 'rotate-token' | 'api-keys' | 'agents';
2
+ export type OwnerAction = {
3
+ kind: 'help';
4
+ } | {
5
+ kind: 'rotate';
6
+ agentId: string;
7
+ } | {
8
+ kind: 'list';
9
+ agentId: string;
10
+ } | {
11
+ kind: 'create';
12
+ agentId: string;
13
+ name?: string;
14
+ expiresInDays?: number;
15
+ readOnly: boolean;
16
+ } | {
17
+ kind: 'revoke';
18
+ agentId: string;
19
+ keyId: string;
20
+ } | {
21
+ kind: 'agents-create';
22
+ names: string[];
23
+ description?: string;
24
+ };
25
+ /** The owner session this device's enrolled key signs in as. */
26
+ export interface OwnerSession {
27
+ token: string;
28
+ userId: string;
29
+ }
30
+ export interface OwnerCredentialsDeps {
31
+ env: NodeJS.ProcessEnv;
32
+ fetchImpl: typeof fetch;
33
+ /** The owner session, or null when this device has no enrolled owner key. */
34
+ getOwnerSession: (aisUrl: string) => Promise<OwnerSession | null>;
35
+ stdout: (text: string) => void;
36
+ stderr: (text: string) => void;
37
+ }
38
+ export declare class OwnerCredentialsError extends Error {
39
+ constructor(message: string);
40
+ }
41
+ export declare function parseOwnerArgs(command: OwnerCommand, argv: string[], env: NodeJS.ProcessEnv): OwnerAction;
42
+ export declare function runOwnerCommand(command: OwnerCommand, argv: string[], deps: OwnerCredentialsDeps): Promise<void>;
43
+ /**
44
+ * The user id comes from the token the service signed, not from the local key
45
+ * file: a copied or edited key file must not set another person as owner.
46
+ */
47
+ export declare function ownerSessionFromCreds(creds: {
48
+ token: string;
49
+ userId: string;
50
+ }): OwnerSession;
51
+ /** Entry from `aismemory rotate-token|api-keys|agents ...`: one failure line, exit 1. */
52
+ export declare function runFromCli(command: OwnerCommand, argv: string[]): Promise<void>;