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.
- package/assets/skills/memax-memory/SKILL.md +48 -29
- package/dist/commands/agent-configs.d.ts +41 -0
- package/dist/commands/agent-configs.d.ts.map +1 -0
- package/dist/commands/agent-configs.js +1290 -0
- package/dist/commands/agent-configs.js.map +1 -0
- package/dist/commands/agent-configs.test.d.ts +2 -0
- package/dist/commands/agent-configs.test.d.ts.map +1 -0
- package/dist/commands/agent-configs.test.js +122 -0
- package/dist/commands/agent-configs.test.js.map +1 -0
- package/dist/commands/agent-sessions.d.ts +74 -0
- package/dist/commands/agent-sessions.d.ts.map +1 -0
- package/dist/commands/agent-sessions.js +1513 -0
- package/dist/commands/agent-sessions.js.map +1 -0
- package/dist/commands/agent-sessions.test.d.ts +2 -0
- package/dist/commands/agent-sessions.test.d.ts.map +1 -0
- package/dist/commands/agent-sessions.test.js +255 -0
- package/dist/commands/agent-sessions.test.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +36 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/ask.d.ts +15 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +483 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +94 -6
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/capture.d.ts +2 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +13 -4
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +13 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +9 -1
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/dreams.d.ts +22 -0
- package/dist/commands/dreams.d.ts.map +1 -0
- package/dist/commands/dreams.js +251 -0
- package/dist/commands/dreams.js.map +1 -0
- package/dist/commands/dreams.test.d.ts +2 -0
- package/dist/commands/dreams.test.d.ts.map +1 -0
- package/dist/commands/dreams.test.js +39 -0
- package/dist/commands/dreams.test.js.map +1 -0
- package/dist/commands/hook.d.ts +2 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +25 -103
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/hub.d.ts +34 -1
- package/dist/commands/hub.d.ts.map +1 -1
- package/dist/commands/hub.js +303 -9
- package/dist/commands/hub.js.map +1 -1
- package/dist/commands/hub.test.d.ts +2 -0
- package/dist/commands/hub.test.d.ts.map +1 -0
- package/dist/commands/hub.test.js +62 -0
- package/dist/commands/hub.test.js.map +1 -0
- package/dist/commands/import.d.ts +13 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +257 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/import.test.d.ts +2 -0
- package/dist/commands/import.test.d.ts.map +1 -0
- package/dist/commands/import.test.js +11 -0
- package/dist/commands/import.test.js.map +1 -0
- package/dist/commands/list.d.ts +7 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +101 -19
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/list.test.d.ts +2 -0
- package/dist/commands/list.test.d.ts.map +1 -0
- package/dist/commands/list.test.js +20 -0
- package/dist/commands/list.test.js.map +1 -0
- package/dist/commands/login.d.ts +7 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +63 -22
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +276 -51
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/push.d.ts +5 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +34 -4
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/recall.d.ts +10 -1
- package/dist/commands/recall.d.ts.map +1 -1
- package/dist/commands/recall.js +219 -34
- package/dist/commands/recall.js.map +1 -1
- package/dist/commands/recall.test.d.ts +2 -0
- package/dist/commands/recall.test.d.ts.map +1 -0
- package/dist/commands/recall.test.js +31 -0
- package/dist/commands/recall.test.js.map +1 -0
- package/dist/commands/setup-hooks.d.ts +7 -6
- package/dist/commands/setup-hooks.d.ts.map +1 -1
- package/dist/commands/setup-hooks.js +39 -30
- package/dist/commands/setup-hooks.js.map +1 -1
- package/dist/commands/setup-instructions.js +1 -1
- package/dist/commands/setup-mcp.d.ts +28 -2
- package/dist/commands/setup-mcp.d.ts.map +1 -1
- package/dist/commands/setup-mcp.js +192 -54
- package/dist/commands/setup-mcp.js.map +1 -1
- package/dist/commands/setup-types.d.ts +13 -0
- package/dist/commands/setup-types.d.ts.map +1 -1
- package/dist/commands/setup-types.js +10 -10
- package/dist/commands/setup-types.js.map +1 -1
- package/dist/commands/setup.d.ts +7 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +170 -34
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/show.d.ts +5 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +29 -4
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/topic.d.ts +32 -0
- package/dist/commands/topic.d.ts.map +1 -0
- package/dist/commands/topic.js +265 -0
- package/dist/commands/topic.js.map +1 -0
- package/dist/commands/topic.test.d.ts +2 -0
- package/dist/commands/topic.test.d.ts.map +1 -0
- package/dist/commands/topic.test.js +114 -0
- package/dist/commands/topic.test.js.map +1 -0
- package/dist/index.js +35 -176
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +4 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +50 -15
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/client.test.d.ts +2 -0
- package/dist/lib/client.test.d.ts.map +1 -0
- package/dist/lib/client.test.js +44 -0
- package/dist/lib/client.test.js.map +1 -0
- package/dist/lib/config.d.ts +43 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +72 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credentials.d.ts +3 -0
- package/dist/lib/credentials.d.ts.map +1 -1
- package/dist/lib/credentials.js +24 -2
- package/dist/lib/credentials.js.map +1 -1
- package/dist/lib/hubs.d.ts +7 -0
- package/dist/lib/hubs.d.ts.map +1 -0
- package/dist/lib/hubs.js +33 -0
- package/dist/lib/hubs.js.map +1 -0
- package/dist/lib/hubs.test.d.ts +2 -0
- package/dist/lib/hubs.test.d.ts.map +1 -0
- package/dist/lib/hubs.test.js +58 -0
- package/dist/lib/hubs.test.js.map +1 -0
- package/dist/lib/project-context.d.ts +21 -5
- package/dist/lib/project-context.d.ts.map +1 -1
- package/dist/lib/project-context.js +127 -59
- package/dist/lib/project-context.js.map +1 -1
- package/dist/lib/project-context.test.d.ts +2 -0
- package/dist/lib/project-context.test.d.ts.map +1 -0
- package/dist/lib/project-context.test.js +75 -0
- package/dist/lib/project-context.test.js.map +1 -0
- package/dist/lib/trash.d.ts +6 -0
- package/dist/lib/trash.d.ts.map +1 -0
- package/dist/lib/trash.js +28 -0
- package/dist/lib/trash.js.map +1 -0
- package/package.json +2 -2
- package/dist/commands/sync.d.ts +0 -16
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -801
- package/dist/commands/sync.js.map +0 -1
package/dist/commands/hook.js
CHANGED
|
@@ -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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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"] = [
|
|
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
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/hub.d.ts
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
|
-
|
|
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":"
|
|
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"}
|
package/dist/commands/hub.js
CHANGED
|
@@ -1,16 +1,129 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import { getClient } from "../lib/client.js";
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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(`
|
|
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
|
|
46
|
-
|
|
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
|
package/dist/commands/hub.js.map
CHANGED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"hub.test.d.ts","sourceRoot":"","sources":["../../src/commands/hub.test.ts"],"names":[],"mappings":""}
|