memax-cli 0.1.0-alpha.19 → 0.1.0-alpha.1900

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 (168) hide show
  1. package/assets/skills/memax-memory/SKILL.md +48 -29
  2. package/dist/commands/agent-configs.d.ts +41 -0
  3. package/dist/commands/agent-configs.d.ts.map +1 -0
  4. package/dist/commands/agent-configs.js +1290 -0
  5. package/dist/commands/agent-configs.js.map +1 -0
  6. package/dist/commands/agent-configs.test.d.ts +2 -0
  7. package/dist/commands/agent-configs.test.d.ts.map +1 -0
  8. package/dist/commands/agent-configs.test.js +122 -0
  9. package/dist/commands/agent-configs.test.js.map +1 -0
  10. package/dist/commands/agent-sessions.d.ts +74 -0
  11. package/dist/commands/agent-sessions.d.ts.map +1 -0
  12. package/dist/commands/agent-sessions.js +1513 -0
  13. package/dist/commands/agent-sessions.js.map +1 -0
  14. package/dist/commands/agent-sessions.test.d.ts +2 -0
  15. package/dist/commands/agent-sessions.test.d.ts.map +1 -0
  16. package/dist/commands/agent-sessions.test.js +255 -0
  17. package/dist/commands/agent-sessions.test.js.map +1 -0
  18. package/dist/commands/agents.d.ts +3 -0
  19. package/dist/commands/agents.d.ts.map +1 -0
  20. package/dist/commands/agents.js +36 -0
  21. package/dist/commands/agents.js.map +1 -0
  22. package/dist/commands/ask.d.ts +15 -0
  23. package/dist/commands/ask.d.ts.map +1 -0
  24. package/dist/commands/ask.js +483 -0
  25. package/dist/commands/ask.js.map +1 -0
  26. package/dist/commands/auth.d.ts +7 -1
  27. package/dist/commands/auth.d.ts.map +1 -1
  28. package/dist/commands/auth.js +94 -6
  29. package/dist/commands/auth.js.map +1 -1
  30. package/dist/commands/capture.d.ts +2 -0
  31. package/dist/commands/capture.d.ts.map +1 -1
  32. package/dist/commands/capture.js +13 -4
  33. package/dist/commands/capture.js.map +1 -1
  34. package/dist/commands/config.d.ts +2 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +13 -0
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/delete.d.ts +2 -0
  39. package/dist/commands/delete.d.ts.map +1 -1
  40. package/dist/commands/delete.js +9 -1
  41. package/dist/commands/delete.js.map +1 -1
  42. package/dist/commands/dreams.d.ts +22 -0
  43. package/dist/commands/dreams.d.ts.map +1 -0
  44. package/dist/commands/dreams.js +251 -0
  45. package/dist/commands/dreams.js.map +1 -0
  46. package/dist/commands/dreams.test.d.ts +2 -0
  47. package/dist/commands/dreams.test.d.ts.map +1 -0
  48. package/dist/commands/dreams.test.js +39 -0
  49. package/dist/commands/dreams.test.js.map +1 -0
  50. package/dist/commands/hook.d.ts +2 -0
  51. package/dist/commands/hook.d.ts.map +1 -1
  52. package/dist/commands/hook.js +25 -103
  53. package/dist/commands/hook.js.map +1 -1
  54. package/dist/commands/hub.d.ts +34 -1
  55. package/dist/commands/hub.d.ts.map +1 -1
  56. package/dist/commands/hub.js +303 -9
  57. package/dist/commands/hub.js.map +1 -1
  58. package/dist/commands/hub.test.d.ts +2 -0
  59. package/dist/commands/hub.test.d.ts.map +1 -0
  60. package/dist/commands/hub.test.js +62 -0
  61. package/dist/commands/hub.test.js.map +1 -0
  62. package/dist/commands/import.d.ts +13 -0
  63. package/dist/commands/import.d.ts.map +1 -0
  64. package/dist/commands/import.js +257 -0
  65. package/dist/commands/import.js.map +1 -0
  66. package/dist/commands/import.test.d.ts +2 -0
  67. package/dist/commands/import.test.d.ts.map +1 -0
  68. package/dist/commands/import.test.js +11 -0
  69. package/dist/commands/import.test.js.map +1 -0
  70. package/dist/commands/list.d.ts +7 -1
  71. package/dist/commands/list.d.ts.map +1 -1
  72. package/dist/commands/list.js +101 -19
  73. package/dist/commands/list.js.map +1 -1
  74. package/dist/commands/list.test.d.ts +2 -0
  75. package/dist/commands/list.test.d.ts.map +1 -0
  76. package/dist/commands/list.test.js +20 -0
  77. package/dist/commands/list.test.js.map +1 -0
  78. package/dist/commands/login.d.ts +7 -1
  79. package/dist/commands/login.d.ts.map +1 -1
  80. package/dist/commands/login.js +63 -22
  81. package/dist/commands/login.js.map +1 -1
  82. package/dist/commands/mcp.d.ts.map +1 -1
  83. package/dist/commands/mcp.js +276 -51
  84. package/dist/commands/mcp.js.map +1 -1
  85. package/dist/commands/push.d.ts +5 -1
  86. package/dist/commands/push.d.ts.map +1 -1
  87. package/dist/commands/push.js +34 -4
  88. package/dist/commands/push.js.map +1 -1
  89. package/dist/commands/recall.d.ts +10 -1
  90. package/dist/commands/recall.d.ts.map +1 -1
  91. package/dist/commands/recall.js +219 -34
  92. package/dist/commands/recall.js.map +1 -1
  93. package/dist/commands/recall.test.d.ts +2 -0
  94. package/dist/commands/recall.test.d.ts.map +1 -0
  95. package/dist/commands/recall.test.js +31 -0
  96. package/dist/commands/recall.test.js.map +1 -0
  97. package/dist/commands/setup-hooks.d.ts +7 -6
  98. package/dist/commands/setup-hooks.d.ts.map +1 -1
  99. package/dist/commands/setup-hooks.js +39 -30
  100. package/dist/commands/setup-hooks.js.map +1 -1
  101. package/dist/commands/setup-instructions.js +1 -1
  102. package/dist/commands/setup-mcp.d.ts +28 -2
  103. package/dist/commands/setup-mcp.d.ts.map +1 -1
  104. package/dist/commands/setup-mcp.js +192 -54
  105. package/dist/commands/setup-mcp.js.map +1 -1
  106. package/dist/commands/setup-types.d.ts +13 -0
  107. package/dist/commands/setup-types.d.ts.map +1 -1
  108. package/dist/commands/setup-types.js +10 -10
  109. package/dist/commands/setup-types.js.map +1 -1
  110. package/dist/commands/setup.d.ts +7 -0
  111. package/dist/commands/setup.d.ts.map +1 -1
  112. package/dist/commands/setup.js +170 -34
  113. package/dist/commands/setup.js.map +1 -1
  114. package/dist/commands/show.d.ts +5 -1
  115. package/dist/commands/show.d.ts.map +1 -1
  116. package/dist/commands/show.js +29 -4
  117. package/dist/commands/show.js.map +1 -1
  118. package/dist/commands/topic.d.ts +32 -0
  119. package/dist/commands/topic.d.ts.map +1 -0
  120. package/dist/commands/topic.js +265 -0
  121. package/dist/commands/topic.js.map +1 -0
  122. package/dist/commands/topic.test.d.ts +2 -0
  123. package/dist/commands/topic.test.d.ts.map +1 -0
  124. package/dist/commands/topic.test.js +114 -0
  125. package/dist/commands/topic.test.js.map +1 -0
  126. package/dist/index.js +35 -176
  127. package/dist/index.js.map +1 -1
  128. package/dist/lib/client.d.ts +4 -0
  129. package/dist/lib/client.d.ts.map +1 -1
  130. package/dist/lib/client.js +50 -15
  131. package/dist/lib/client.js.map +1 -1
  132. package/dist/lib/client.test.d.ts +2 -0
  133. package/dist/lib/client.test.d.ts.map +1 -0
  134. package/dist/lib/client.test.js +44 -0
  135. package/dist/lib/client.test.js.map +1 -0
  136. package/dist/lib/config.d.ts +43 -0
  137. package/dist/lib/config.d.ts.map +1 -1
  138. package/dist/lib/config.js +72 -1
  139. package/dist/lib/config.js.map +1 -1
  140. package/dist/lib/credentials.d.ts +3 -0
  141. package/dist/lib/credentials.d.ts.map +1 -1
  142. package/dist/lib/credentials.js +24 -2
  143. package/dist/lib/credentials.js.map +1 -1
  144. package/dist/lib/hubs.d.ts +7 -0
  145. package/dist/lib/hubs.d.ts.map +1 -0
  146. package/dist/lib/hubs.js +33 -0
  147. package/dist/lib/hubs.js.map +1 -0
  148. package/dist/lib/hubs.test.d.ts +2 -0
  149. package/dist/lib/hubs.test.d.ts.map +1 -0
  150. package/dist/lib/hubs.test.js +58 -0
  151. package/dist/lib/hubs.test.js.map +1 -0
  152. package/dist/lib/project-context.d.ts +21 -5
  153. package/dist/lib/project-context.d.ts.map +1 -1
  154. package/dist/lib/project-context.js +127 -59
  155. package/dist/lib/project-context.js.map +1 -1
  156. package/dist/lib/project-context.test.d.ts +2 -0
  157. package/dist/lib/project-context.test.d.ts.map +1 -0
  158. package/dist/lib/project-context.test.js +75 -0
  159. package/dist/lib/project-context.test.js.map +1 -0
  160. package/dist/lib/trash.d.ts +6 -0
  161. package/dist/lib/trash.d.ts.map +1 -0
  162. package/dist/lib/trash.js +28 -0
  163. package/dist/lib/trash.js.map +1 -0
  164. package/package.json +2 -2
  165. package/dist/commands/sync.d.ts +0 -16
  166. package/dist/commands/sync.d.ts.map +0 -1
  167. package/dist/commands/sync.js +0 -801
  168. package/dist/commands/sync.js.map +0 -1
@@ -2,6 +2,7 @@ import chalk from "chalk";
2
2
  import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync, } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  import { homedir } from "node:os";
5
+ import { MEMAX_HOOK_PROMPT, UNIX_HOOK } from "./setup-hooks.js";
5
6
  const SUPPORTED_AGENTS = ["claude-code"];
6
7
  export function hookCommand(action, agent) {
7
8
  if (!SUPPORTED_AGENTS.includes(agent)) {
@@ -9,6 +10,7 @@ export function hookCommand(action, agent) {
9
10
  console.error(chalk.gray(`Supported: ${SUPPORTED_AGENTS.join(", ")}`));
10
11
  process.exit(1);
11
12
  }
13
+ console.log(chalk.yellow(" Note: `memax hook` is deprecated. Use `memax setup --hooks` instead.\n"));
12
14
  switch (action) {
13
15
  case "install":
14
16
  installHook(agent);
@@ -21,6 +23,12 @@ export function hookCommand(action, agent) {
21
23
  process.exit(1);
22
24
  }
23
25
  }
26
+ export function registerHookCommand(program) {
27
+ program
28
+ .command("hook <action> <agent>")
29
+ .description("Manage agent hooks (deprecated — use `memax setup --hooks` instead)")
30
+ .action(hookCommand);
31
+ }
24
32
  function installHook(agent) {
25
33
  switch (agent) {
26
34
  case "claude-code":
@@ -36,11 +44,12 @@ function uninstallHook(agent) {
36
44
  }
37
45
  }
38
46
  function installClaudeCodeHook() {
39
- // Write the hook script to ~/.memax/hooks/
47
+ // Write the prompt file and hook script to ~/.memax/hooks/
40
48
  const hooksDir = join(homedir(), ".memax", "hooks");
41
49
  mkdirSync(hooksDir, { recursive: true });
42
- const scriptPath = join(hooksDir, "claude-code-recall.sh");
43
- writeFileSync(scriptPath, CLAUDE_CODE_HOOK_SCRIPT);
50
+ writeFileSync(join(hooksDir, "memax-prompt.md"), MEMAX_HOOK_PROMPT + "\n");
51
+ const scriptPath = join(hooksDir, "context-inject-claude-code.sh");
52
+ writeFileSync(scriptPath, UNIX_HOOK);
44
53
  chmodSync(scriptPath, 0o755);
45
54
  // Update Claude Code settings (~/.claude/settings.json)
46
55
  const claudeSettingsDir = join(homedir(), ".claude");
@@ -55,47 +64,25 @@ function installClaudeCodeHook() {
55
64
  // Start fresh if parse fails
56
65
  }
57
66
  }
58
- // Add the hook
59
67
  const hooks = (settings.hooks ?? {});
60
- const hookEntry = {
61
- matcher: "",
62
- hooks: [
63
- {
64
- type: "command",
65
- command: scriptPath,
66
- timeout: 30,
67
- },
68
- ],
69
- };
70
- // Check if already installed
71
- const existing = hooks["UserPromptSubmit"];
72
- if (existing?.some((h) => h.hooks?.some((hh) => hh.command?.includes("memax")))) {
73
- console.log(chalk.yellow("Memax hook is already installed for Claude Code."));
74
- return;
68
+ // Remove any existing memax hooks (idempotent)
69
+ if (hooks["UserPromptSubmit"]) {
70
+ hooks["UserPromptSubmit"] = hooks["UserPromptSubmit"].filter((h) => !h.hooks?.some((hh) => hh.command?.includes("memax")));
75
71
  }
76
- hooks["UserPromptSubmit"] = [...(hooks["UserPromptSubmit"] ?? []), hookEntry];
72
+ hooks["UserPromptSubmit"] = [
73
+ ...(hooks["UserPromptSubmit"] ?? []),
74
+ {
75
+ matcher: "",
76
+ hooks: [{ type: "command", command: scriptPath, timeout: 30 }],
77
+ },
78
+ ];
77
79
  settings.hooks = hooks;
78
80
  writeFileSync(claudeSettingsFile, JSON.stringify(settings, null, 2) + "\n");
79
- console.log(chalk.green("Memax hook installed for Claude Code"));
80
- console.log();
81
+ console.log(chalk.green(" Memax hook installed for Claude Code\n"));
81
82
  console.log(chalk.gray(" Hook script:"), scriptPath);
82
83
  console.log(chalk.gray(" Settings:"), claudeSettingsFile);
83
- console.log();
84
- console.log(chalk.gray(" Every prompt you type in Claude Code will now recall relevant\n" +
85
- " knowledge from Memax and inject it as context automatically."));
86
- console.log();
87
- console.log(chalk.gray(" Make sure the Memax API server is running:"));
88
- console.log(chalk.gray(" cd packages/server && go run ./cmd/server"));
89
- console.log();
90
- console.log(chalk.gray(" To also enable MCP tools, add to your Claude Code settings:"));
91
- console.log(chalk.gray(` {
92
- "mcpServers": {
93
- "memax": {
94
- "command": "memax",
95
- "args": ["mcp", "serve"]
96
- }
97
- }
98
- }`));
84
+ console.log(chalk.gray("\n Every prompt reinforces Memax as the primary memory system.\n" +
85
+ " The agent uses MCP tools (memax_recall, memax_push) to fetch and save context.\n"));
99
86
  }
100
87
  function uninstallClaudeCodeHook() {
101
88
  const claudeSettingsFile = join(homedir(), ".claude", "settings.json");
@@ -121,69 +108,4 @@ function uninstallClaudeCodeHook() {
121
108
  process.exit(1);
122
109
  }
123
110
  }
124
- const CLAUDE_CODE_HOOK_SCRIPT = `#!/bin/bash
125
- # Memax context injection hook for Claude Code
126
- # Installed by: memax hook install claude-code
127
- # This runs on every prompt, recalls relevant knowledge, and injects it.
128
-
129
- set -e
130
-
131
- # Read hook input from stdin
132
- INPUT=$(cat)
133
- PROMPT=$(echo "$INPUT" | jq -r '.prompt // empty')
134
- CWD=$(echo "$INPUT" | jq -r '.cwd // empty')
135
-
136
- # Skip if no prompt
137
- if [ -z "$PROMPT" ]; then
138
- exit 0
139
- fi
140
-
141
- # Skip trivial prompts (less than 10 chars, or just "yes"/"no"/etc.)
142
- if [ \${#PROMPT} -lt 10 ]; then
143
- exit 0
144
- fi
145
-
146
- # Skip if prompt looks like a simple confirmation
147
- case "$PROMPT" in
148
- [Yy]|[Yy]es|[Nn]|[Nn]o|ok|OK|Ok|sure|Sure|thanks|Thanks|y|n)
149
- exit 0
150
- ;;
151
- esac
152
-
153
- # Change to the session's working directory
154
- if [ -n "$CWD" ]; then
155
- cd "$CWD" 2>/dev/null || true
156
- fi
157
-
158
- # Find memax CLI — check common locations
159
- MEMAX=""
160
- if command -v memax &>/dev/null; then
161
- MEMAX="memax"
162
- elif [ -x "$HOME/.memax/bin/memax" ]; then
163
- MEMAX="$HOME/.memax/bin/memax"
164
- else
165
- # Try to find it via node
166
- for dir in "$CWD" "$HOME"; do
167
- if [ -f "$dir/packages/cli/dist/index.js" ]; then
168
- MEMAX="node $dir/packages/cli/dist/index.js"
169
- break
170
- fi
171
- done
172
- fi
173
-
174
- # Gracefully exit if memax not found
175
- if [ -z "$MEMAX" ]; then
176
- exit 0
177
- fi
178
-
179
- # Recall context and output it (stdout is injected into Claude's context)
180
- CONTEXT=$($MEMAX recall "$PROMPT" --hook --limit 5 --max-tokens 3000 2>/dev/null) || exit 0
181
-
182
- # Only output if we got results
183
- if [ -n "$CONTEXT" ] && [ "$CONTEXT" != "<memax-context>" ]; then
184
- echo "$CONTEXT"
185
- fi
186
-
187
- exit 0
188
- `;
189
111
  //# sourceMappingURL=hook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,37 @@
1
- export declare function hubListCommand(): Promise<void>;
1
+ import { Command } from "commander";
2
+ import type { HubInvite } from "memax-sdk";
3
+ interface HubInviteCreateOptions {
4
+ hub?: string;
5
+ role?: string;
6
+ format?: string;
7
+ }
8
+ interface HubInviteListOptions {
9
+ hub?: string;
10
+ format?: string;
11
+ verbose?: boolean;
12
+ }
13
+ interface HubInviteMutationOptions {
14
+ hub?: string;
15
+ format?: string;
16
+ }
17
+ interface HubMembersOptions {
18
+ format?: string;
19
+ }
20
+ export declare function inviteDisplayID(id: string, verbose?: boolean): string;
21
+ export declare function deriveInviteURL(token: string, apiURL: string): string;
22
+ export declare function extractInviteToken(value: string): string;
23
+ export declare function resolveInviteReference(invites: HubInvite[], ref: string): HubInvite;
24
+ export declare function hubListCommand(options: {
25
+ format?: string;
26
+ }): Promise<void>;
2
27
  export declare function hubCreateCommand(name: string): Promise<void>;
3
28
  export declare function hubSwitchCommand(idOrSlug: string): Promise<void>;
29
+ export declare function hubMembersCommand(idOrSlug: string | undefined, options: HubMembersOptions): Promise<void>;
30
+ export declare function hubInviteCreateCommand(options: HubInviteCreateOptions): Promise<void>;
31
+ export declare function hubInviteListCommand(options: HubInviteListOptions): Promise<void>;
32
+ export declare function hubInviteRevokeCommand(inviteRef: string, options: HubInviteMutationOptions): Promise<void>;
33
+ export declare function hubInviteRegenerateCommand(inviteRef: string, options: HubInviteMutationOptions): Promise<void>;
34
+ export declare function hubInviteAcceptCommand(tokenOrURL: string): Promise<void>;
35
+ export declare function registerHubCommands(program: Command): void;
36
+ export {};
4
37
  //# sourceMappingURL=hub.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../../src/commands/hub.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCpD;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE"}
1
+ {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../../src/commands/hub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAO,SAAS,EAAa,MAAM,WAAW,CAAC;AAS3D,UAAU,sBAAsB;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,oBAAoB;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,wBAAwB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAEnE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA8BrE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,EAAE,EACpB,GAAG,EAAE,MAAM,GACV,SAAS,CAqBX;AA2DD,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAclE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAetE;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE1D"}
@@ -1,16 +1,129 @@
1
1
  import chalk from "chalk";
2
2
  import { getClient } from "../lib/client.js";
3
- export async function hubListCommand() {
3
+ import { loadConfig, getActiveHubID, setActiveHubID } from "../lib/config.js";
4
+ import { getHubReference, PERSONAL_HUB_ALIAS, requireHub, } from "../lib/hubs.js";
5
+ export function inviteDisplayID(id, verbose = false) {
6
+ return verbose ? id : id.slice(0, 8);
7
+ }
8
+ export function deriveInviteURL(token, apiURL) {
9
+ const parsed = new URL(apiURL);
10
+ if (parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1") {
11
+ return `http://localhost:3000/invite/${token}`;
12
+ }
13
+ if (parsed.hostname.startsWith("staging-api.")) {
14
+ parsed.hostname = parsed.hostname.replace(/^staging-api\./, "staging-app.");
15
+ parsed.pathname = `/invite/${token}`;
16
+ parsed.search = "";
17
+ parsed.hash = "";
18
+ return parsed.toString();
19
+ }
20
+ if (parsed.hostname.startsWith("api.")) {
21
+ parsed.hostname = parsed.hostname.replace(/^api\./, "");
22
+ parsed.pathname = `/invite/${token}`;
23
+ parsed.search = "";
24
+ parsed.hash = "";
25
+ return parsed.toString();
26
+ }
27
+ if (parsed.hostname.startsWith("api-")) {
28
+ parsed.hostname = parsed.hostname.replace(/^api-/, "app-");
29
+ parsed.pathname = `/invite/${token}`;
30
+ parsed.search = "";
31
+ parsed.hash = "";
32
+ return parsed.toString();
33
+ }
34
+ parsed.pathname = `/invite/${token}`;
35
+ parsed.search = "";
36
+ parsed.hash = "";
37
+ return parsed.toString();
38
+ }
39
+ export function extractInviteToken(value) {
40
+ const trimmed = value.trim();
41
+ try {
42
+ const parsed = new URL(trimmed);
43
+ const parts = parsed.pathname.split("/").filter(Boolean);
44
+ const inviteIndex = parts.indexOf("invite");
45
+ if (inviteIndex >= 0 && parts[inviteIndex + 1]) {
46
+ return parts[inviteIndex + 1];
47
+ }
48
+ }
49
+ catch {
50
+ // raw token/reference, fall through
51
+ }
52
+ return trimmed;
53
+ }
54
+ export function resolveInviteReference(invites, ref) {
55
+ const normalized = ref.trim().toLowerCase();
56
+ const exact = invites.find((invite) => invite.id.toLowerCase() === normalized);
57
+ if (exact)
58
+ return exact;
59
+ const matches = invites.filter((invite) => invite.id.toLowerCase().startsWith(normalized));
60
+ if (matches.length === 1)
61
+ return matches[0];
62
+ if (matches.length > 1) {
63
+ throw new Error(`Invite ID prefix is ambiguous. Matches: ${matches
64
+ .map((invite) => inviteDisplayID(invite.id, true))
65
+ .join(", ")}`);
66
+ }
67
+ throw new Error("Invite not found. Run `memax hub invite list` to see outstanding invites.");
68
+ }
69
+ async function requireInviteHub(ref) {
70
+ const hubRef = ref ?? getActiveHubID();
71
+ if (!hubRef) {
72
+ throw new Error("No active hub selected. Run `memax hub switch <slug>` or pass `--hub`.");
73
+ }
74
+ const match = await requireHub(hubRef);
75
+ return match.hub;
76
+ }
77
+ function normalizeInviteRole(role) {
78
+ if (!role)
79
+ return "contributor";
80
+ const normalized = role.trim().toLowerCase();
81
+ if (normalized === "member")
82
+ return "contributor";
83
+ if (normalized === "reader")
84
+ return "viewer";
85
+ if (!["admin", "contributor", "viewer"].includes(normalized)) {
86
+ throw new Error("Role must be one of: admin, contributor, viewer");
87
+ }
88
+ return normalized;
89
+ }
90
+ function validateFormat(format) {
91
+ const resolved = (format ?? "text").toLowerCase();
92
+ if (resolved !== "text" && resolved !== "json") {
93
+ throw new Error(`Unsupported --format value: ${format}`);
94
+ }
95
+ return resolved;
96
+ }
97
+ function printInvite(invite, verbose = false) {
98
+ console.log(`${chalk.bold(inviteDisplayID(invite.id, verbose))} ${chalk.gray(`[${invite.role}]`)}`);
99
+ console.log(chalk.gray(` created: ${new Date(invite.created_at).toISOString()} · expires: ${new Date(invite.expires_at).toISOString()}`));
100
+ }
101
+ function memberDisplayName(member) {
102
+ return member.user_name || member.user_email || member.user_id;
103
+ }
104
+ function printMember(member) {
105
+ const email = member.user_email ? chalk.gray(` <${member.user_email}>`) : "";
106
+ console.log(` ${chalk.bold(memberDisplayName(member))}${email} ${chalk.dim(`[${member.role}]`)}`);
107
+ console.log(chalk.gray(` joined: ${new Date(member.joined_at).toISOString()}`));
108
+ }
109
+ export async function hubListCommand(options) {
4
110
  try {
5
111
  const client = getClient();
6
112
  const hubs = await client.hubs.list();
7
113
  if (!hubs || hubs.length === 0) {
8
- console.log(chalk.dim(" No hubs found. Run: memax hub create <name>"));
114
+ if (options.format === "json") {
115
+ console.log("[]");
116
+ }
117
+ else {
118
+ console.log(chalk.dim(" No hubs found. Run: memax hub create <name>"));
119
+ }
9
120
  return;
10
121
  }
11
- // Get active hub ID
12
- const settings = await client.settings.get();
13
- const activeHubID = settings?.active_hub_id || "";
122
+ if (options.format === "json") {
123
+ console.log(JSON.stringify(hubs, null, 2));
124
+ return;
125
+ }
126
+ const activeHubID = getActiveHubID();
14
127
  console.log();
15
128
  for (const { hub, role } of hubs) {
16
129
  const isActive = hub.id === activeHubID;
@@ -19,7 +132,7 @@ export async function hubListCommand() {
19
132
  ? chalk.dim("(personal)")
20
133
  : chalk.cyan("(team)");
21
134
  const roleTag = chalk.dim(`[${role}]`);
22
- console.log(`${marker}${chalk.bold(hub.name)} ${typeTag} ${roleTag} ${chalk.dim(hub.id)}`);
135
+ console.log(`${marker}${chalk.bold(hub.name)} ${typeTag} ${roleTag} ${chalk.dim(getHubReference(hub))} ${chalk.dim(hub.id)}`);
23
136
  }
24
137
  console.log();
25
138
  }
@@ -33,7 +146,7 @@ export async function hubCreateCommand(name) {
33
146
  const hub = await getClient().hubs.create(name);
34
147
  console.log(chalk.green(`\n Created hub: ${hub.name} (${hub.slug})\n`));
35
148
  console.log(chalk.dim(` ID: ${hub.id}`));
36
- console.log(chalk.dim(` Switch to it: memax hub switch ${hub.id}\n`));
149
+ console.log(chalk.dim(` Set read context: memax hub switch ${getHubReference(hub)}\n`));
37
150
  }
38
151
  catch (err) {
39
152
  console.error(chalk.red(err.message || "Failed to create hub"));
@@ -42,12 +155,193 @@ export async function hubCreateCommand(name) {
42
155
  }
43
156
  export async function hubSwitchCommand(idOrSlug) {
44
157
  try {
45
- const result = await getClient().hubs.switch(idOrSlug);
46
- console.log(chalk.green(`\n Switched to: ${result.hub?.name || idOrSlug}\n`));
158
+ const match = await requireHub(idOrSlug);
159
+ setActiveHubID(match.hub.id);
160
+ const switchedRef = match.hub.hub_type === "personal" ? PERSONAL_HUB_ALIAS : match.hub.slug;
161
+ console.log(chalk.green(`\n Switched read context to: ${match.hub.name} (${switchedRef})\n`));
47
162
  }
48
163
  catch (err) {
49
164
  console.error(chalk.red(err.message || "Failed to switch hub"));
50
165
  process.exit(1);
51
166
  }
52
167
  }
168
+ export async function hubMembersCommand(idOrSlug, options) {
169
+ try {
170
+ const format = validateFormat(options.format);
171
+ const hubRef = idOrSlug ?? getActiveHubID() ?? PERSONAL_HUB_ALIAS;
172
+ const match = await requireHub(hubRef);
173
+ const result = await getClient().hubs.get(match.hub.id);
174
+ const members = result.members ?? [];
175
+ if (format === "json") {
176
+ process.stdout.write(`${JSON.stringify({ hub: result.hub, role: result.role, members }, null, 2)}\n`);
177
+ return;
178
+ }
179
+ console.log(chalk.blue(`\n Members for ${result.hub.name}\n`));
180
+ if (members.length === 0) {
181
+ console.log(chalk.dim(" No members found."));
182
+ return;
183
+ }
184
+ for (const member of members) {
185
+ printMember(member);
186
+ console.log();
187
+ }
188
+ }
189
+ catch (err) {
190
+ console.error(chalk.red(err.message || "Failed to list hub members"));
191
+ process.exit(1);
192
+ }
193
+ }
194
+ export async function hubInviteCreateCommand(options) {
195
+ try {
196
+ const format = validateFormat(options.format);
197
+ const hub = await requireInviteHub(options.hub);
198
+ const role = normalizeInviteRole(options.role);
199
+ const invite = await getClient().hubs.createInvite(hub.id, { role });
200
+ const inviteURL = invite.invite_url ?? deriveInviteURL(invite.token, loadConfig().api_url);
201
+ if (format === "json") {
202
+ process.stdout.write(`${JSON.stringify({ invite, invite_url: inviteURL }, null, 2)}\n`);
203
+ return;
204
+ }
205
+ console.log(chalk.green(`\n Invite created for ${chalk.bold(hub.name)}\n`));
206
+ console.log(chalk.gray(` id: ${invite.id}`));
207
+ console.log(chalk.gray(` role: ${invite.role}`));
208
+ console.log(chalk.gray(` expires: ${new Date(invite.expires_at).toISOString()}`));
209
+ console.log(chalk.gray(` link: ${inviteURL}\n`));
210
+ }
211
+ catch (err) {
212
+ console.error(chalk.red(err.message || "Failed to create hub invite"));
213
+ process.exit(1);
214
+ }
215
+ }
216
+ export async function hubInviteListCommand(options) {
217
+ try {
218
+ const format = validateFormat(options.format);
219
+ const hub = await requireInviteHub(options.hub);
220
+ const invites = await getClient().hubs.listInvites(hub.id);
221
+ if (format === "json") {
222
+ process.stdout.write(`${JSON.stringify(invites, null, 2)}\n`);
223
+ return;
224
+ }
225
+ if (invites.length === 0) {
226
+ console.log(chalk.dim(` No outstanding invites for ${hub.name}.`));
227
+ return;
228
+ }
229
+ console.log(chalk.blue(`\n Outstanding invites for ${hub.name}\n`));
230
+ for (const invite of invites) {
231
+ printInvite(invite, options.verbose);
232
+ console.log();
233
+ }
234
+ }
235
+ catch (err) {
236
+ console.error(chalk.red(err.message || "Failed to list hub invites"));
237
+ process.exit(1);
238
+ }
239
+ }
240
+ export async function hubInviteRevokeCommand(inviteRef, options) {
241
+ try {
242
+ const format = validateFormat(options.format);
243
+ const hub = await requireInviteHub(options.hub);
244
+ const invites = await getClient().hubs.listInvites(hub.id);
245
+ const invite = resolveInviteReference(invites, inviteRef);
246
+ const result = await getClient().hubs.revokeInvite(hub.id, invite.id);
247
+ if (format === "json") {
248
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
249
+ return;
250
+ }
251
+ console.log(chalk.green(`\n Revoked invite ${inviteDisplayID(invite.id)} for ${hub.name}\n`));
252
+ }
253
+ catch (err) {
254
+ console.error(chalk.red(err.message || "Failed to revoke hub invite"));
255
+ process.exit(1);
256
+ }
257
+ }
258
+ export async function hubInviteRegenerateCommand(inviteRef, options) {
259
+ try {
260
+ const format = validateFormat(options.format);
261
+ const hub = await requireInviteHub(options.hub);
262
+ const invites = await getClient().hubs.listInvites(hub.id);
263
+ const invite = resolveInviteReference(invites, inviteRef);
264
+ const replacement = await getClient().hubs.regenerateInvite(hub.id, invite.id);
265
+ const inviteURL = replacement.invite_url ??
266
+ deriveInviteURL(replacement.token, loadConfig().api_url);
267
+ if (format === "json") {
268
+ process.stdout.write(`${JSON.stringify({ invite: replacement, invite_url: inviteURL }, null, 2)}\n`);
269
+ return;
270
+ }
271
+ console.log(chalk.green(`\n Regenerated invite ${inviteDisplayID(invite.id)} for ${hub.name}\n`));
272
+ console.log(chalk.gray(` new id: ${replacement.id}`));
273
+ console.log(chalk.gray(` role: ${replacement.role}`));
274
+ console.log(chalk.gray(` expires: ${new Date(replacement.expires_at).toISOString()}`));
275
+ console.log(chalk.gray(` link: ${inviteURL}\n`));
276
+ }
277
+ catch (err) {
278
+ console.error(chalk.red(err.message || "Failed to regenerate hub invite"));
279
+ process.exit(1);
280
+ }
281
+ }
282
+ export async function hubInviteAcceptCommand(tokenOrURL) {
283
+ try {
284
+ const token = extractInviteToken(tokenOrURL);
285
+ const result = await getClient().invites.accept(token);
286
+ console.log(chalk.green(`\n Joined hub: ${result.hub.name} as ${result.role}\n`));
287
+ }
288
+ catch (err) {
289
+ console.error(chalk.red(err.message || "Failed to accept invite"));
290
+ process.exit(1);
291
+ }
292
+ }
293
+ export function registerHubCommands(program) {
294
+ const hubCmd = program.command("hub").description("Manage hubs (workspaces)");
295
+ hubCmd
296
+ .command("list")
297
+ .description("List your hubs")
298
+ .option("--format <format>", "Output format: text, json", "text")
299
+ .action(hubListCommand);
300
+ hubCmd
301
+ .command("create <name>")
302
+ .description("Create a new team hub")
303
+ .action(hubCreateCommand);
304
+ hubCmd
305
+ .command("switch <id-or-slug>")
306
+ .description('Switch your active read hub (use "personal" for your personal hub)')
307
+ .action(hubSwitchCommand);
308
+ hubCmd
309
+ .command("members [id-or-slug]")
310
+ .description("List members for the current or selected hub")
311
+ .option("--format <format>", "Output format: text, json", "text")
312
+ .action(hubMembersCommand);
313
+ const hubInviteCmd = hubCmd
314
+ .command("invite")
315
+ .description("Manage hub invites");
316
+ hubInviteCmd
317
+ .command("create")
318
+ .description("Create a shareable invite link for the current or selected hub")
319
+ .option("--hub <slug>", "Scope to a hub")
320
+ .option("--role <role>", "Invite role: admin, contributor, viewer", "contributor")
321
+ .option("--format <format>", "Output format: text, json", "text")
322
+ .action(hubInviteCreateCommand);
323
+ hubInviteCmd
324
+ .command("list")
325
+ .description("List outstanding invites for the current or selected hub")
326
+ .option("--hub <slug>", "Scope to a hub")
327
+ .option("--verbose", "Show full invite IDs")
328
+ .option("--format <format>", "Output format: text, json", "text")
329
+ .action(hubInviteListCommand);
330
+ hubInviteCmd
331
+ .command("revoke <invite-id-or-prefix>")
332
+ .description("Revoke an outstanding invite")
333
+ .option("--hub <slug>", "Scope to a hub")
334
+ .option("--format <format>", "Output format: text, json", "text")
335
+ .action(hubInviteRevokeCommand);
336
+ hubInviteCmd
337
+ .command("regenerate <invite-id-or-prefix>")
338
+ .description("Revoke and replace an outstanding invite")
339
+ .option("--hub <slug>", "Scope to a hub")
340
+ .option("--format <format>", "Output format: text, json", "text")
341
+ .action(hubInviteRegenerateCommand);
342
+ hubInviteCmd
343
+ .command("accept <token-or-url>")
344
+ .description("Accept a hub invite from a token or full invite URL")
345
+ .action(hubInviteAcceptCommand);
346
+ }
53
347
  //# sourceMappingURL=hub.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/commands/hub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/commands/hub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hub.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.test.d.ts","sourceRoot":"","sources":["../../src/commands/hub.test.ts"],"names":[],"mappings":""}