@hasna/mementos 0.14.27 → 0.14.29

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.
package/README.md CHANGED
@@ -20,7 +20,8 @@ mementos setup agents
20
20
 
21
21
  `mementos setup agents` registers the hosted `mementos-mcp` server in Claude
22
22
  Code, Codex, OpenCode, and Antigravity config files. It also writes managed
23
- diagnostic snippets under `~/.config/mementos/agent-integrations`.
23
+ diagnostic snippets and host-specific memory instructions under
24
+ `~/.config/mementos/agent-integrations`.
24
25
 
25
26
  ## MCP
26
27
 
@@ -42,4 +43,7 @@ Claude Code also receives `UserPromptSubmit`, `SessionStart`, and `Stop` hook
42
43
  entries that call `mementos hook ...` and return hosted memory as hook context.
43
44
  Codex does not expose a native hook file in `~/.codex/config.toml`, so the
44
45
  installer registers MCP there and keeps the injection command in the managed
45
- integration snippets.
46
+ integration snippets. OpenCode and Antigravity receive the same MCP registration
47
+ plus host instruction files that tell the agent to use `memory.search`,
48
+ `memory.save`, and `mementos inject` as the hosted fallback path when native
49
+ hooks are unavailable.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-setup.d.ts","sourceRoot":"","sources":["../src/agent-setup.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,8DAA+D,CAAC;AAElG,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;KAC9B,CAAC;IACF,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,IAAI,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CA0CnF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,2BAAgC,GAAG,oBAAoB,CAyBlG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAqCjF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,SAAwB;;;EAStE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAW9D"}
1
+ {"version":3,"file":"agent-setup.d.ts","sourceRoot":"","sources":["../src/agent-setup.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,8DAA+D,CAAC;AAElG,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;KAC9B,CAAC;IACF,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,IAAI,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAkDnF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,2BAAgC,GAAG,oBAAoB,CAyBlG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAqCjF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,SAAwB;;;EAStE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAW9D"}
package/dist/cli.js CHANGED
@@ -15,6 +15,10 @@ function buildAgentSetupPlan(options = {}) {
15
15
  const hookCommand = "mementos hook stop";
16
16
  const injectCommand = "mementos inject";
17
17
  const files = [
18
+ {
19
+ path: join(baseDir, "mementos-instructions.md"),
20
+ content: renderSharedInstructions({ apiUrl, injectCommand, mcpCommand })
21
+ },
18
22
  {
19
23
  path: join(baseDir, "mementos-injection.md"),
20
24
  content: renderInjectionInstructions({ apiUrl, injectCommand })
@@ -31,6 +35,10 @@ function buildAgentSetupPlan(options = {}) {
31
35
  }
32
36
  ];
33
37
  for (const host of hosts) {
38
+ files.push({
39
+ path: join(baseDir, `${host}-instructions.md`),
40
+ content: renderHostInstructions(host, { apiUrl, injectCommand, mcpCommand })
41
+ });
34
42
  files.push({
35
43
  path: join(baseDir, `${host}.json`),
36
44
  content: `${JSON.stringify(renderHostConfig(host, { apiUrl, hookCommand, injectCommand, mcpCommand }), null, 2)}
@@ -155,11 +163,13 @@ function renderHostConfig(host, commands) {
155
163
  host,
156
164
  install: "bun install -g @hasna/mementos",
157
165
  remoteOnly: true,
166
+ nativeHooks: hasNativeHooks(host),
158
167
  mcp: renderMcpServerConfig(commands).mcpServers.mementos,
159
168
  hooks: {
160
169
  stop: commands.hookCommand,
161
170
  injection: commands.injectCommand
162
- }
171
+ },
172
+ instructions: `${host}-instructions.md`
163
173
  };
164
174
  }
165
175
  function renderManagedHostConfig(host, commands) {
@@ -173,8 +183,15 @@ function renderManagedHostConfig(host, commands) {
173
183
  inject: commands.injectCommand,
174
184
  stopHook: commands.hookCommand
175
185
  },
186
+ injection: {
187
+ nativeHooks: hasNativeHooks(host),
188
+ fallbackCommand: commands.injectCommand,
189
+ mcpTools: ["memory.search", "memory.save", "memory.get", "memory.update", "memory.delete", "memory.usage"]
190
+ },
176
191
  files: {
177
192
  integrationDir: commands.baseDir,
193
+ sharedInstructions: join(commands.baseDir, "mementos-instructions.md"),
194
+ hostInstructions: join(commands.baseDir, `${host}-instructions.md`),
178
195
  injectionInstructions: join(commands.baseDir, "mementos-injection.md"),
179
196
  stopHook: join(commands.baseDir, "mementos-stop-hook.sh")
180
197
  }
@@ -455,6 +472,63 @@ MEMENTOS_API_URL=${apiUrl} MEMENTOS_API_TOKEN=$MEMENTOS_API_TOKEN ${injectComman
455
472
  This command reads hosted memory through the mementos.md API and prints a prompt-ready block.
456
473
  `;
457
474
  }
475
+ function renderSharedInstructions({
476
+ apiUrl,
477
+ injectCommand,
478
+ mcpCommand
479
+ }) {
480
+ return `# mementos.md Agent Instructions
481
+
482
+ Use mementos.md as hosted durable memory for this agent host.
483
+
484
+ - The MCP server command is \`${mcpCommand}\`.
485
+ - The hosted API is \`${apiUrl}\`.
486
+ - Use \`memory.search\` before non-trivial project work.
487
+ - Use \`memory.save\` for durable decisions, root causes, and reusable context.
488
+ - If the host does not provide a native hook, run \`${injectCommand} "<current task or question>"\` and include the returned hosted context in the next prompt.
489
+ - Do not create or depend on a local memory database for the SaaS package.
490
+ `;
491
+ }
492
+ function renderHostInstructions(host, commands) {
493
+ const common = renderSharedInstructions(commands);
494
+ if (host === "claude-code") {
495
+ return `${common}
496
+ ## Claude Code
497
+
498
+ Claude Code has native mementos hooks installed by \`mementos setup agents\`.
499
+ Use the mementos MCP server for explicit memory operations and let the
500
+ \`UserPromptSubmit\`, \`SessionStart\`, and \`Stop\` hooks inject hosted context.
501
+ `;
502
+ }
503
+ if (host === "codex") {
504
+ return `${common}
505
+ ## Codex
506
+
507
+ Codex does not have a mementos native hook in its config file. Use the
508
+ mementos MCP server for durable memory and run \`${commands.injectCommand}\`
509
+ when you need prompt-ready hosted context before a turn.
510
+ `;
511
+ }
512
+ if (host === "opencode") {
513
+ return `${common}
514
+ ## OpenCode
515
+
516
+ Use the mementos MCP server for durable memory. When OpenCode cannot invoke a
517
+ native lifecycle hook, run \`${commands.injectCommand}\` with the active task
518
+ or error text and paste the hosted context into the next prompt.
519
+ `;
520
+ }
521
+ return `${common}
522
+ ## Antigravity
523
+
524
+ Use the mementos MCP server for durable memory. When Antigravity cannot invoke
525
+ a native lifecycle hook, run \`${commands.injectCommand}\` with the active task
526
+ or error text and include the hosted context before continuing.
527
+ `;
528
+ }
529
+ function hasNativeHooks(host) {
530
+ return host === "claude-code";
531
+ }
458
532
  function renderHookScript(command) {
459
533
  return `#!/usr/bin/env bash
460
534
  set -euo pipefail
@@ -807,14 +881,16 @@ async function runHook(args) {
807
881
  "user-prompt-submit": "UserPromptSubmit"
808
882
  };
809
883
  if (subcommand in hookEvents) {
810
- const query2 = await readHookQuery();
884
+ const hookInput = await readHookInput();
885
+ const query2 = hookInput.query;
811
886
  const payload = await client.injectionContext({ query: query2, limit: 12 });
812
887
  const block = readTextPayload(payload) ?? formatMemoryInjection(payload);
888
+ const inboxBlock = await readInboxHookContext(hookInput);
813
889
  return {
814
890
  suppressOutput: true,
815
891
  hookSpecificOutput: {
816
892
  hookEventName: hookEvents[subcommand],
817
- additionalContext: block
893
+ additionalContext: combineContextBlocks(inboxBlock, block)
818
894
  }
819
895
  };
820
896
  }
@@ -824,22 +900,97 @@ async function runHook(args) {
824
900
  const query = process.env.MEMENTOS_INJECTION_QUERY ?? process.cwd();
825
901
  return injectMemory([query]);
826
902
  }
827
- async function readHookQuery() {
828
- if (process.env.MEMENTOS_INJECTION_QUERY)
829
- return process.env.MEMENTOS_INJECTION_QUERY;
903
+ async function readHookInput() {
904
+ if (process.env.MEMENTOS_INJECTION_QUERY) {
905
+ return {
906
+ agentName: process.env.MEMENTOS_AGENT_NAME,
907
+ query: process.env.MEMENTOS_INJECTION_QUERY
908
+ };
909
+ }
830
910
  const stdin = await readOptionalStdin();
831
- if (!stdin)
832
- return process.cwd();
911
+ if (!stdin) {
912
+ return {
913
+ agentName: process.env.MEMENTOS_AGENT_NAME,
914
+ query: process.cwd()
915
+ };
916
+ }
833
917
  try {
834
918
  const parsed = JSON.parse(stdin);
835
919
  const prompt = parsed.prompt ?? parsed.userPrompt ?? parsed.message ?? parsed.cwd;
836
- if (typeof prompt === "string" && prompt.trim())
837
- return prompt.trim();
920
+ return {
921
+ agentName: readHookText(parsed.agentName ?? parsed.agent ?? parsed.name) ?? process.env.MEMENTOS_AGENT_NAME,
922
+ projectKey: readHookText(parsed.projectKey ?? parsed.project),
923
+ query: typeof prompt === "string" && prompt.trim() ? prompt.trim() : process.cwd(),
924
+ sessionId: readHookText(parsed.sessionId ?? parsed.session_id)
925
+ };
838
926
  } catch {
839
- if (stdin.trim())
840
- return stdin.trim();
927
+ if (stdin.trim()) {
928
+ return {
929
+ agentName: process.env.MEMENTOS_AGENT_NAME,
930
+ query: stdin.trim()
931
+ };
932
+ }
841
933
  }
842
- return process.cwd();
934
+ return {
935
+ agentName: process.env.MEMENTOS_AGENT_NAME,
936
+ query: process.cwd()
937
+ };
938
+ }
939
+ async function readInboxHookContext(input) {
940
+ if (!input.agentName)
941
+ return;
942
+ const response = await client.listInboxMessages({
943
+ agentName: input.agentName,
944
+ projectKey: input.projectKey,
945
+ sessionId: input.sessionId,
946
+ limit: 10
947
+ });
948
+ const messages = readInboxMessages(response);
949
+ if (messages.length === 0)
950
+ return;
951
+ await Promise.all(messages.map((message) => client.claimInboxMessage(message.id, { agentName: input.agentName })));
952
+ return formatInboxContext(messages);
953
+ }
954
+ function readInboxMessages(payload) {
955
+ if (typeof payload !== "object" || payload === null)
956
+ return [];
957
+ const messages = payload.messages;
958
+ if (!Array.isArray(messages))
959
+ return [];
960
+ return messages.flatMap((message) => {
961
+ if (typeof message !== "object" || message === null)
962
+ return [];
963
+ const record = message;
964
+ const id = readHookText(record.id);
965
+ const value = readHookText(record.message);
966
+ if (!id || !value)
967
+ return [];
968
+ return [{
969
+ id,
970
+ kind: readHookText(record.kind) ?? "directive",
971
+ message: value,
972
+ priority: readHookText(record.priority) ?? "normal",
973
+ title: readHookText(record.title)
974
+ }];
975
+ });
976
+ }
977
+ function formatInboxContext(messages) {
978
+ return [
979
+ "## mementos.md inbox",
980
+ "Apply these hosted agent directives before continuing. They have been claimed remotely.",
981
+ "",
982
+ ...messages.map((message) => `- [${message.priority}] ${message.title ? `${message.title}: ` : ""}${message.message} (${message.kind})`),
983
+ ""
984
+ ].join(`
985
+ `);
986
+ }
987
+ function combineContextBlocks(...blocks) {
988
+ return blocks.map((block) => block?.trim()).filter(Boolean).join(`
989
+
990
+ `);
991
+ }
992
+ function readHookText(value) {
993
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
843
994
  }
844
995
  async function readOptionalStdin() {
845
996
  if (process.stdin.isTTY)
package/dist/index.js CHANGED
@@ -146,7 +146,7 @@ function readErrorMessage(payload, status) {
146
146
  }
147
147
  // src/mcp-runtime.ts
148
148
  import { createInterface } from "readline";
149
- var MEMENTOS_MCP_VERSION = "0.14.27";
149
+ var MEMENTOS_MCP_VERSION = "0.14.29";
150
150
  var AUTHLESS_SCHEMA = {
151
151
  type: "object",
152
152
  properties: {},
@@ -358,6 +358,10 @@ function buildAgentSetupPlan(options = {}) {
358
358
  const hookCommand = "mementos hook stop";
359
359
  const injectCommand = "mementos inject";
360
360
  const files = [
361
+ {
362
+ path: join(baseDir, "mementos-instructions.md"),
363
+ content: renderSharedInstructions({ apiUrl, injectCommand, mcpCommand })
364
+ },
361
365
  {
362
366
  path: join(baseDir, "mementos-injection.md"),
363
367
  content: renderInjectionInstructions({ apiUrl, injectCommand })
@@ -374,6 +378,10 @@ function buildAgentSetupPlan(options = {}) {
374
378
  }
375
379
  ];
376
380
  for (const host of hosts) {
381
+ files.push({
382
+ path: join(baseDir, `${host}-instructions.md`),
383
+ content: renderHostInstructions(host, { apiUrl, injectCommand, mcpCommand })
384
+ });
377
385
  files.push({
378
386
  path: join(baseDir, `${host}.json`),
379
387
  content: `${JSON.stringify(renderHostConfig(host, { apiUrl, hookCommand, injectCommand, mcpCommand }), null, 2)}
@@ -498,11 +506,13 @@ function renderHostConfig(host, commands) {
498
506
  host,
499
507
  install: "bun install -g @hasna/mementos",
500
508
  remoteOnly: true,
509
+ nativeHooks: hasNativeHooks(host),
501
510
  mcp: renderMcpServerConfig(commands).mcpServers.mementos,
502
511
  hooks: {
503
512
  stop: commands.hookCommand,
504
513
  injection: commands.injectCommand
505
- }
514
+ },
515
+ instructions: `${host}-instructions.md`
506
516
  };
507
517
  }
508
518
  function renderManagedHostConfig(host, commands) {
@@ -516,8 +526,15 @@ function renderManagedHostConfig(host, commands) {
516
526
  inject: commands.injectCommand,
517
527
  stopHook: commands.hookCommand
518
528
  },
529
+ injection: {
530
+ nativeHooks: hasNativeHooks(host),
531
+ fallbackCommand: commands.injectCommand,
532
+ mcpTools: ["memory.search", "memory.save", "memory.get", "memory.update", "memory.delete", "memory.usage"]
533
+ },
519
534
  files: {
520
535
  integrationDir: commands.baseDir,
536
+ sharedInstructions: join(commands.baseDir, "mementos-instructions.md"),
537
+ hostInstructions: join(commands.baseDir, `${host}-instructions.md`),
521
538
  injectionInstructions: join(commands.baseDir, "mementos-injection.md"),
522
539
  stopHook: join(commands.baseDir, "mementos-stop-hook.sh")
523
540
  }
@@ -798,6 +815,63 @@ MEMENTOS_API_URL=${apiUrl} MEMENTOS_API_TOKEN=$MEMENTOS_API_TOKEN ${injectComman
798
815
  This command reads hosted memory through the mementos.md API and prints a prompt-ready block.
799
816
  `;
800
817
  }
818
+ function renderSharedInstructions({
819
+ apiUrl,
820
+ injectCommand,
821
+ mcpCommand
822
+ }) {
823
+ return `# mementos.md Agent Instructions
824
+
825
+ Use mementos.md as hosted durable memory for this agent host.
826
+
827
+ - The MCP server command is \`${mcpCommand}\`.
828
+ - The hosted API is \`${apiUrl}\`.
829
+ - Use \`memory.search\` before non-trivial project work.
830
+ - Use \`memory.save\` for durable decisions, root causes, and reusable context.
831
+ - If the host does not provide a native hook, run \`${injectCommand} "<current task or question>"\` and include the returned hosted context in the next prompt.
832
+ - Do not create or depend on a local memory database for the SaaS package.
833
+ `;
834
+ }
835
+ function renderHostInstructions(host, commands) {
836
+ const common = renderSharedInstructions(commands);
837
+ if (host === "claude-code") {
838
+ return `${common}
839
+ ## Claude Code
840
+
841
+ Claude Code has native mementos hooks installed by \`mementos setup agents\`.
842
+ Use the mementos MCP server for explicit memory operations and let the
843
+ \`UserPromptSubmit\`, \`SessionStart\`, and \`Stop\` hooks inject hosted context.
844
+ `;
845
+ }
846
+ if (host === "codex") {
847
+ return `${common}
848
+ ## Codex
849
+
850
+ Codex does not have a mementos native hook in its config file. Use the
851
+ mementos MCP server for durable memory and run \`${commands.injectCommand}\`
852
+ when you need prompt-ready hosted context before a turn.
853
+ `;
854
+ }
855
+ if (host === "opencode") {
856
+ return `${common}
857
+ ## OpenCode
858
+
859
+ Use the mementos MCP server for durable memory. When OpenCode cannot invoke a
860
+ native lifecycle hook, run \`${commands.injectCommand}\` with the active task
861
+ or error text and paste the hosted context into the next prompt.
862
+ `;
863
+ }
864
+ return `${common}
865
+ ## Antigravity
866
+
867
+ Use the mementos MCP server for durable memory. When Antigravity cannot invoke
868
+ a native lifecycle hook, run \`${commands.injectCommand}\` with the active task
869
+ or error text and include the hosted context before continuing.
870
+ `;
871
+ }
872
+ function hasNativeHooks(host) {
873
+ return host === "claude-code";
874
+ }
801
875
  function renderHookScript(command) {
802
876
  return `#!/usr/bin/env bash
803
877
  set -euo pipefail
@@ -1,5 +1,5 @@
1
1
  import { MementosRemoteClient } from "./remote-client";
2
- export declare const MEMENTOS_MCP_VERSION = "0.14.27";
2
+ export declare const MEMENTOS_MCP_VERSION = "0.14.29";
3
3
  export interface RemoteMcpTool {
4
4
  name: string;
5
5
  description: string;
package/dist/mcp.js CHANGED
@@ -151,7 +151,7 @@ function readErrorMessage(payload, status) {
151
151
  }
152
152
 
153
153
  // src/mcp-runtime.ts
154
- var MEMENTOS_MCP_VERSION = "0.14.27";
154
+ var MEMENTOS_MCP_VERSION = "0.14.29";
155
155
  var AUTHLESS_SCHEMA = {
156
156
  type: "object",
157
157
  properties: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/mementos",
3
- "version": "0.14.27",
3
+ "version": "0.14.29",
4
4
  "description": "Remote-only mementos.md SaaS CLI and MCP client",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",