memax-cli 0.1.0-alpha.4 → 0.1.0-alpha.40

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 (173) hide show
  1. package/assets/skills/memax-memory/SKILL.md +154 -0
  2. package/dist/commands/agent-sessions.d.ts +62 -0
  3. package/dist/commands/agent-sessions.d.ts.map +1 -0
  4. package/dist/commands/agent-sessions.js +1338 -0
  5. package/dist/commands/agent-sessions.js.map +1 -0
  6. package/dist/commands/agent-sessions.test.d.ts +2 -0
  7. package/dist/commands/agent-sessions.test.d.ts.map +1 -0
  8. package/dist/commands/agent-sessions.test.js +255 -0
  9. package/dist/commands/agent-sessions.test.js.map +1 -0
  10. package/dist/commands/agents.d.ts +3 -0
  11. package/dist/commands/agents.d.ts.map +1 -0
  12. package/dist/commands/agents.js +36 -0
  13. package/dist/commands/agents.js.map +1 -0
  14. package/dist/commands/auth.d.ts +3 -0
  15. package/dist/commands/auth.d.ts.map +1 -1
  16. package/dist/commands/auth.js +38 -7
  17. package/dist/commands/auth.js.map +1 -1
  18. package/dist/commands/capture.d.ts +19 -0
  19. package/dist/commands/capture.d.ts.map +1 -0
  20. package/dist/commands/capture.js +69 -0
  21. package/dist/commands/capture.js.map +1 -0
  22. package/dist/commands/config.d.ts +2 -0
  23. package/dist/commands/config.d.ts.map +1 -1
  24. package/dist/commands/config.js +13 -0
  25. package/dist/commands/config.js.map +1 -1
  26. package/dist/commands/delete.d.ts +3 -1
  27. package/dist/commands/delete.d.ts.map +1 -1
  28. package/dist/commands/delete.js +30 -5
  29. package/dist/commands/delete.js.map +1 -1
  30. package/dist/commands/dreams.d.ts +22 -0
  31. package/dist/commands/dreams.d.ts.map +1 -0
  32. package/dist/commands/dreams.js +205 -0
  33. package/dist/commands/dreams.js.map +1 -0
  34. package/dist/commands/dreams.test.d.ts +2 -0
  35. package/dist/commands/dreams.test.d.ts.map +1 -0
  36. package/dist/commands/dreams.test.js +39 -0
  37. package/dist/commands/dreams.test.js.map +1 -0
  38. package/dist/commands/hook.d.ts +2 -0
  39. package/dist/commands/hook.d.ts.map +1 -1
  40. package/dist/commands/hook.js +6 -0
  41. package/dist/commands/hook.js.map +1 -1
  42. package/dist/commands/hub.d.ts +31 -0
  43. package/dist/commands/hub.d.ts.map +1 -0
  44. package/dist/commands/hub.js +295 -0
  45. package/dist/commands/hub.js.map +1 -0
  46. package/dist/commands/hub.test.d.ts +2 -0
  47. package/dist/commands/hub.test.d.ts.map +1 -0
  48. package/dist/commands/hub.test.js +62 -0
  49. package/dist/commands/hub.test.js.map +1 -0
  50. package/dist/commands/list.d.ts +8 -1
  51. package/dist/commands/list.d.ts.map +1 -1
  52. package/dist/commands/list.js +110 -9
  53. package/dist/commands/list.js.map +1 -1
  54. package/dist/commands/list.test.d.ts +2 -0
  55. package/dist/commands/list.test.d.ts.map +1 -0
  56. package/dist/commands/list.test.js +14 -0
  57. package/dist/commands/list.test.js.map +1 -0
  58. package/dist/commands/login.d.ts +2 -0
  59. package/dist/commands/login.d.ts.map +1 -1
  60. package/dist/commands/login.js +50 -19
  61. package/dist/commands/login.js.map +1 -1
  62. package/dist/commands/mcp.d.ts.map +1 -1
  63. package/dist/commands/mcp.js +285 -42
  64. package/dist/commands/mcp.js.map +1 -1
  65. package/dist/commands/push.d.ts +6 -1
  66. package/dist/commands/push.d.ts.map +1 -1
  67. package/dist/commands/push.js +73 -11
  68. package/dist/commands/push.js.map +1 -1
  69. package/dist/commands/recall.d.ts +9 -0
  70. package/dist/commands/recall.d.ts.map +1 -1
  71. package/dist/commands/recall.js +206 -39
  72. package/dist/commands/recall.js.map +1 -1
  73. package/dist/commands/recall.test.d.ts +2 -0
  74. package/dist/commands/recall.test.d.ts.map +1 -0
  75. package/dist/commands/recall.test.js +31 -0
  76. package/dist/commands/recall.test.js.map +1 -0
  77. package/dist/commands/setup-hooks.d.ts +12 -0
  78. package/dist/commands/setup-hooks.d.ts.map +1 -0
  79. package/dist/commands/setup-hooks.js +193 -0
  80. package/dist/commands/setup-hooks.js.map +1 -0
  81. package/dist/commands/setup-instructions.d.ts +21 -0
  82. package/dist/commands/setup-instructions.d.ts.map +1 -0
  83. package/dist/commands/setup-instructions.js +172 -0
  84. package/dist/commands/setup-instructions.js.map +1 -0
  85. package/dist/commands/setup-mcp.d.ts +14 -0
  86. package/dist/commands/setup-mcp.d.ts.map +1 -0
  87. package/dist/commands/setup-mcp.js +288 -0
  88. package/dist/commands/setup-mcp.js.map +1 -0
  89. package/dist/commands/setup-types.d.ts +20 -0
  90. package/dist/commands/setup-types.d.ts.map +1 -0
  91. package/dist/commands/setup-types.js +60 -0
  92. package/dist/commands/setup-types.js.map +1 -0
  93. package/dist/commands/setup.d.ts +8 -1
  94. package/dist/commands/setup.d.ts.map +1 -1
  95. package/dist/commands/setup.js +163 -307
  96. package/dist/commands/setup.js.map +1 -1
  97. package/dist/commands/show.d.ts +2 -0
  98. package/dist/commands/show.d.ts.map +1 -1
  99. package/dist/commands/show.js +25 -13
  100. package/dist/commands/show.js.map +1 -1
  101. package/dist/commands/sync.d.ts +47 -2
  102. package/dist/commands/sync.d.ts.map +1 -1
  103. package/dist/commands/sync.js +1299 -119
  104. package/dist/commands/sync.js.map +1 -1
  105. package/dist/commands/sync.test.d.ts +2 -0
  106. package/dist/commands/sync.test.d.ts.map +1 -0
  107. package/dist/commands/sync.test.js +130 -0
  108. package/dist/commands/sync.test.js.map +1 -0
  109. package/dist/commands/topic.d.ts +32 -0
  110. package/dist/commands/topic.d.ts.map +1 -0
  111. package/dist/commands/topic.js +223 -0
  112. package/dist/commands/topic.js.map +1 -0
  113. package/dist/commands/topic.test.d.ts +2 -0
  114. package/dist/commands/topic.test.d.ts.map +1 -0
  115. package/dist/commands/topic.test.js +114 -0
  116. package/dist/commands/topic.test.js.map +1 -0
  117. package/dist/index.js +33 -125
  118. package/dist/index.js.map +1 -1
  119. package/dist/lib/client.d.ts +9 -0
  120. package/dist/lib/client.d.ts.map +1 -0
  121. package/dist/lib/client.js +77 -0
  122. package/dist/lib/client.js.map +1 -0
  123. package/dist/lib/config.d.ts +45 -0
  124. package/dist/lib/config.d.ts.map +1 -1
  125. package/dist/lib/config.js +74 -1
  126. package/dist/lib/config.js.map +1 -1
  127. package/dist/lib/hubs.d.ts +7 -0
  128. package/dist/lib/hubs.d.ts.map +1 -0
  129. package/dist/lib/hubs.js +33 -0
  130. package/dist/lib/hubs.js.map +1 -0
  131. package/dist/lib/hubs.test.d.ts +2 -0
  132. package/dist/lib/hubs.test.d.ts.map +1 -0
  133. package/dist/lib/hubs.test.js +57 -0
  134. package/dist/lib/hubs.test.js.map +1 -0
  135. package/dist/lib/project-context.d.ts +56 -0
  136. package/dist/lib/project-context.d.ts.map +1 -0
  137. package/dist/lib/project-context.js +231 -0
  138. package/dist/lib/project-context.js.map +1 -0
  139. package/dist/lib/project-context.test.d.ts +2 -0
  140. package/dist/lib/project-context.test.d.ts.map +1 -0
  141. package/dist/lib/project-context.test.js +75 -0
  142. package/dist/lib/project-context.test.js.map +1 -0
  143. package/dist/lib/prompt.d.ts +7 -0
  144. package/dist/lib/prompt.d.ts.map +1 -0
  145. package/dist/lib/prompt.js +41 -0
  146. package/dist/lib/prompt.js.map +1 -0
  147. package/dist/lib/trash.d.ts +6 -0
  148. package/dist/lib/trash.d.ts.map +1 -0
  149. package/dist/lib/trash.js +28 -0
  150. package/dist/lib/trash.js.map +1 -0
  151. package/package.json +17 -13
  152. package/.vscode/mcp.json +0 -8
  153. package/dist/lib/api.d.ts +0 -4
  154. package/dist/lib/api.d.ts.map +0 -1
  155. package/dist/lib/api.js +0 -95
  156. package/dist/lib/api.js.map +0 -1
  157. package/src/commands/auth.ts +0 -92
  158. package/src/commands/config.ts +0 -27
  159. package/src/commands/delete.ts +0 -20
  160. package/src/commands/hook.ts +0 -243
  161. package/src/commands/list.ts +0 -38
  162. package/src/commands/login.ts +0 -162
  163. package/src/commands/mcp.ts +0 -357
  164. package/src/commands/push.ts +0 -82
  165. package/src/commands/recall.ts +0 -163
  166. package/src/commands/setup.ts +0 -682
  167. package/src/commands/show.ts +0 -35
  168. package/src/commands/sync.ts +0 -403
  169. package/src/index.ts +0 -192
  170. package/src/lib/api.ts +0 -110
  171. package/src/lib/config.ts +0 -61
  172. package/src/lib/credentials.ts +0 -42
  173. package/tsconfig.json +0 -9
@@ -0,0 +1,114 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildTopicPathMap, flattenTopics, resolveTopicReference, topicDisplayCount, topicDisplayID, } from "./topic.js";
3
+ describe("topicDisplayCount", () => {
4
+ it("prefers subtree totals over direct counts", () => {
5
+ expect(topicDisplayCount({ memory_count: 0, total_memory_count: 7 })).toBe(7);
6
+ });
7
+ it("falls back to direct count when subtree total is zero", () => {
8
+ expect(topicDisplayCount({ memory_count: 3, total_memory_count: 0 })).toBe(0);
9
+ });
10
+ });
11
+ describe("buildTopicPathMap", () => {
12
+ it("builds slash-delimited topic paths from the tree", () => {
13
+ const map = buildTopicPathMap([
14
+ {
15
+ id: "root",
16
+ owner_id: "u1",
17
+ hub_id: "h1",
18
+ parent_id: null,
19
+ name: "Engineering",
20
+ description: "",
21
+ icon: "folder",
22
+ position: 0,
23
+ pinned: false,
24
+ user_modified: false,
25
+ created_at: "",
26
+ updated_at: "",
27
+ memory_count: 1,
28
+ total_memory_count: 2,
29
+ category_dots: [],
30
+ children: [
31
+ {
32
+ id: "child",
33
+ owner_id: "u1",
34
+ hub_id: "h1",
35
+ parent_id: "root",
36
+ name: "Caching",
37
+ description: "",
38
+ icon: "folder",
39
+ position: 0,
40
+ pinned: false,
41
+ user_modified: false,
42
+ created_at: "",
43
+ updated_at: "",
44
+ memory_count: 1,
45
+ total_memory_count: 1,
46
+ category_dots: [],
47
+ children: [],
48
+ },
49
+ ],
50
+ },
51
+ ]);
52
+ expect(map.get("root")).toBe("Engineering");
53
+ expect(map.get("child")).toBe("Engineering / Caching");
54
+ });
55
+ });
56
+ describe("topicDisplayID", () => {
57
+ it("shortens IDs by default", () => {
58
+ expect(topicDisplayID("12345678-1234-1234-1234-123456789abc")).toBe("12345678");
59
+ });
60
+ it("shows full IDs in verbose mode", () => {
61
+ expect(topicDisplayID("12345678-1234-1234-1234-123456789abc", true)).toBe("12345678-1234-1234-1234-123456789abc");
62
+ });
63
+ });
64
+ describe("resolveTopicReference", () => {
65
+ const topics = [
66
+ {
67
+ id: "12345678-1234-1234-1234-123456789abc",
68
+ owner_id: "u1",
69
+ hub_id: "h1",
70
+ parent_id: null,
71
+ name: "Engineering",
72
+ description: "",
73
+ icon: "folder",
74
+ position: 0,
75
+ pinned: false,
76
+ user_modified: false,
77
+ created_at: "",
78
+ updated_at: "",
79
+ memory_count: 1,
80
+ total_memory_count: 2,
81
+ category_dots: [],
82
+ children: [
83
+ {
84
+ id: "abcdef12-1234-1234-1234-123456789abc",
85
+ owner_id: "u1",
86
+ hub_id: "h1",
87
+ parent_id: "12345678-1234-1234-1234-123456789abc",
88
+ name: "Caching",
89
+ description: "",
90
+ icon: "folder",
91
+ position: 0,
92
+ pinned: false,
93
+ user_modified: false,
94
+ created_at: "",
95
+ updated_at: "",
96
+ memory_count: 1,
97
+ total_memory_count: 1,
98
+ category_dots: [],
99
+ children: [],
100
+ },
101
+ ],
102
+ },
103
+ ];
104
+ it("resolves exact IDs", () => {
105
+ expect(resolveTopicReference(topics, "12345678-1234-1234-1234-123456789abc")).toBe("12345678-1234-1234-1234-123456789abc");
106
+ });
107
+ it("resolves unique ID prefixes", () => {
108
+ expect(resolveTopicReference(topics, "abcdef12")).toBe("abcdef12-1234-1234-1234-123456789abc");
109
+ });
110
+ it("flattens nested topics for resolution", () => {
111
+ expect(flattenTopics(topics)).toHaveLength(2);
112
+ });
113
+ });
114
+ //# sourceMappingURL=topic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic.test.js","sourceRoot":"","sources":["../../src/commands/topic.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,18 +3,23 @@ import { Command } from "commander";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { join, dirname } from "node:path";
6
- import { pushCommand } from "./commands/push.js";
7
- import { recallCommand } from "./commands/recall.js";
8
- import { listCommand } from "./commands/list.js";
9
- import { showCommand } from "./commands/show.js";
10
- import { deleteCommand } from "./commands/delete.js";
11
- import { syncCommand, syncAgentMemoryCommand } from "./commands/sync.js";
12
- import { hookCommand } from "./commands/hook.js";
13
- import { configGetCommand, configSetCommand } from "./commands/config.js";
14
- import { loginCommand, logoutCommand, whoamiCommand, } from "./commands/login.js";
15
- import { createKeyCommand, listKeysCommand, revokeKeyCommand, } from "./commands/auth.js";
6
+ import { registerPushCommand } from "./commands/push.js";
7
+ import { registerRecallCommand } from "./commands/recall.js";
8
+ import { registerListCommand } from "./commands/list.js";
9
+ import { registerShowCommand } from "./commands/show.js";
10
+ import { registerDeleteCommand } from "./commands/delete.js";
11
+ import { registerSyncCommands } from "./commands/sync.js";
12
+ import { registerAgentsCommands } from "./commands/agents.js";
13
+ import { registerHookCommand } from "./commands/hook.js";
14
+ import { registerConfigCommand } from "./commands/config.js";
15
+ import { registerLoginCommands } from "./commands/login.js";
16
+ import { registerAuthCommand } from "./commands/auth.js";
16
17
  import { registerMcpCommand } from "./commands/mcp.js";
17
- import { setupCommand, teardownCommand } from "./commands/setup.js";
18
+ import { registerSetupCommands } from "./commands/setup.js";
19
+ import { registerHubCommands } from "./commands/hub.js";
20
+ import { registerTopicCommands } from "./commands/topic.js";
21
+ import { registerCaptureSessionCommand } from "./commands/capture.js";
22
+ import { registerDreamsCommands } from "./commands/dreams.js";
18
23
  const __dirname = dirname(fileURLToPath(import.meta.url));
19
24
  const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
20
25
  const program = new Command();
@@ -22,120 +27,23 @@ program
22
27
  .name("memax")
23
28
  .description("Universal context & memory hub for AI agents")
24
29
  .version(pkg.version);
25
- // --- Core commands ---
26
- program
27
- .command("push")
28
- .description("Save knowledge to your Memax workspace")
29
- .option("-f, --file <path>", "File to push")
30
- .option("-c, --category <category>", "Category (auto-detected if omitted)")
31
- .option("-t, --tags <tags>", "Comma-separated tags")
32
- .option("--title <title>", "Note title")
33
- .option("--ttl <duration>", "Auto-archive after duration (e.g., 7d, 30d)")
34
- .option("--stdin", "Read content from stdin")
35
- .action(pushCommand);
36
- program
37
- .command("recall [query]")
38
- .description("Ask your knowledge a question")
39
- .option("-c, --category <category>", "Filter by category")
40
- .option("-t, --tags <tags>", "Filter by tags")
41
- .option("-l, --limit <n>", "Max results", "5")
42
- .option("--format <format>", "Output format: text, json", "text")
43
- .option("--hook", "Output in agent-injectable format")
44
- .option("--max-tokens <number>", "Maximum tokens to output (approximate)")
45
- .option("--include-archived", "Include archived notes")
46
- .action(recallCommand);
47
- program
48
- .command("list")
49
- .description("List your knowledge notes")
50
- .option("-c, --category <category>", "Filter by category")
51
- .option("--state <state>", "Filter by state: active, cooling, archived")
52
- .option("-l, --limit <n>", "Max results", "20")
53
- .action(listCommand);
54
- program
55
- .command("show <id>")
56
- .description("Show a specific note")
57
- .action(showCommand);
58
- program
59
- .command("delete <id>")
60
- .description("Delete a note")
61
- .option("--confirm", "Skip confirmation")
62
- .action(deleteCommand);
63
- // --- Sync ---
64
- const syncCmd = program
65
- .command("sync [directory]")
66
- .description("Sync a directory or agent memory to your Memax workspace")
67
- .option("-w, --watch", "Watch for changes (coming soon)")
68
- .option("-b, --boundary <level>", "Visibility level: private, team, org", "private")
69
- .option("-c, --category <category>", "Default category (auto-detected if omitted)")
70
- .option("--ignore <patterns>", "Comma-separated directories to ignore")
71
- .option("--agent-memory", "Sync native AI agent memory files (Claude Code, Cursor, Codex)")
72
- .action(syncCommand);
73
- syncCmd
74
- .command("agents")
75
- .description("Sync native AI agent memory files to Memax")
76
- .action(syncAgentMemoryCommand);
77
- // --- Agent integration setup ---
78
- program
79
- .command("setup")
80
- .description("Set up AI agent integrations (auto-detects installed agents)")
81
- .option("--mcp", "Enable MCP server (agent tools)")
82
- .option("--hooks", "Enable context injection hooks")
83
- .option("--all", "Enable both MCP and hooks")
84
- .option("--only <agents>", "Only configure these agents (comma-separated)")
85
- .option("--skip <agents>", "Skip these agents (comma-separated)")
86
- .action(setupCommand);
87
- program
88
- .command("teardown")
89
- .description("Remove Memax integrations from agents")
90
- .option("--only <agents>", "Only remove from these agents (comma-separated)")
91
- .action(teardownCommand);
92
- program
93
- .command("hook <action> <agent>")
94
- .description("Manage agent hooks (install/uninstall claude-code)")
95
- .action(hookCommand);
96
- // --- Auth ---
97
- program
98
- .command("login")
99
- .description("Log in to Memax via GitHub")
100
- .action(loginCommand);
101
- program
102
- .command("logout")
103
- .description("Clear saved credentials")
104
- .action(logoutCommand);
105
- program
106
- .command("whoami")
107
- .description("Show current user")
108
- .action(whoamiCommand);
109
- // --- API Keys ---
110
- const authCmd = program
111
- .command("auth")
112
- .description("Manage authentication and API keys");
113
- authCmd
114
- .command("create-key <name>")
115
- .description("Create an API key for CI/CD or non-interactive use")
116
- .option("--expires <days>", "Expire after N days (default: never)")
117
- .action(createKeyCommand);
118
- authCmd
119
- .command("list-keys")
120
- .description("List your API keys")
121
- .action(listKeysCommand);
122
- authCmd
123
- .command("revoke-key <id>")
124
- .description("Revoke an API key")
125
- .action(revokeKeyCommand);
126
- // --- MCP Server ---
30
+ // --- Command registration (order defines help layout) ---
31
+ registerPushCommand(program);
32
+ registerRecallCommand(program);
33
+ registerListCommand(program);
34
+ registerShowCommand(program);
35
+ registerDeleteCommand(program);
36
+ registerCaptureSessionCommand(program);
37
+ registerTopicCommands(program);
38
+ registerDreamsCommands(program);
39
+ registerHubCommands(program);
40
+ registerAgentsCommands(program);
41
+ registerSyncCommands(program);
42
+ registerSetupCommands(program);
43
+ registerHookCommand(program);
127
44
  registerMcpCommand(program);
128
- // --- Config ---
129
- const configCmd = program
130
- .command("config")
131
- .description("Manage Memax configuration");
132
- configCmd
133
- .command("get [key]")
134
- .description("Get config value (or all values)")
135
- .action(configGetCommand);
136
- configCmd
137
- .command("set <key> <value>")
138
- .description("Set a config value")
139
- .action(configSetCommand);
45
+ registerLoginCommands(program);
46
+ registerAuthCommand(program);
47
+ registerConfigCommand(program);
140
48
  program.parse();
141
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,2DAA2D;AAE3D,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Memax } from "memax-sdk";
2
+ /** Get the shared SDK client instance (lazily created) */
3
+ export declare function getClient(): Memax;
4
+ /** Get an unauthenticated SDK client for auth bootstrap/refresh flows */
5
+ export declare function getPublicClient(): Memax;
6
+ /** Reset the cached client (useful after login/logout) */
7
+ export declare function resetClient(): void;
8
+ export declare function getAuthHeaders(): Promise<Record<string, string>>;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWlC,0DAA0D;AAC1D,wBAAgB,SAAS,IAAI,KAAK,CASjC;AAED,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,KAAK,CAQvC;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEtE"}
@@ -0,0 +1,77 @@
1
+ // =============================================================================
2
+ // CLI API client — configures memax-sdk with CLI-specific auth
3
+ //
4
+ // All CLI commands should use `getClient()` instead of raw fetch.
5
+ // Auth flow: MEMAX_API_KEY env var → stored credentials (with auto-refresh).
6
+ // =============================================================================
7
+ import { Memax } from "memax-sdk";
8
+ import { loadConfig } from "./config.js";
9
+ import { loadCredentials, saveCredentials, isTokenExpired, } from "./credentials.js";
10
+ let instance = null;
11
+ let publicInstance = null;
12
+ /** Get the shared SDK client instance (lazily created) */
13
+ export function getClient() {
14
+ if (!instance) {
15
+ const config = loadConfig();
16
+ instance = new Memax({
17
+ apiUrl: config.api_url,
18
+ auth: cliAuthProvider,
19
+ });
20
+ }
21
+ return instance;
22
+ }
23
+ /** Get an unauthenticated SDK client for auth bootstrap/refresh flows */
24
+ export function getPublicClient() {
25
+ if (!publicInstance) {
26
+ const config = loadConfig();
27
+ publicInstance = new Memax({
28
+ apiUrl: config.api_url,
29
+ });
30
+ }
31
+ return publicInstance;
32
+ }
33
+ /** Reset the cached client (useful after login/logout) */
34
+ export function resetClient() {
35
+ instance = null;
36
+ publicInstance = null;
37
+ }
38
+ export async function getAuthHeaders() {
39
+ return cliAuthProvider();
40
+ }
41
+ /**
42
+ * CLI auth provider — resolves authorization headers.
43
+ *
44
+ * Priority:
45
+ * 1. MEMAX_API_KEY env var (CI/CD, non-interactive)
46
+ * 2. Stored credentials with automatic token refresh
47
+ */
48
+ async function cliAuthProvider() {
49
+ // 1. Env var takes priority
50
+ const envKey = process.env.MEMAX_API_KEY;
51
+ if (envKey) {
52
+ return { Authorization: `Bearer ${envKey}` };
53
+ }
54
+ // 2. Stored credentials
55
+ const creds = loadCredentials();
56
+ if (!creds?.access_token)
57
+ return {};
58
+ // Auto-refresh if expired
59
+ if (isTokenExpired() && creds.refresh_token) {
60
+ try {
61
+ const tokens = await getPublicClient().auth.refresh(creds.refresh_token);
62
+ if (tokens.access_token) {
63
+ saveCredentials({
64
+ access_token: tokens.access_token,
65
+ refresh_token: tokens.refresh_token,
66
+ expires_at: Date.now() + tokens.expires_in * 1000,
67
+ });
68
+ return { Authorization: `Bearer ${tokens.access_token}` };
69
+ }
70
+ }
71
+ catch {
72
+ // Refresh failed — fall through to stale token
73
+ }
74
+ }
75
+ return { Authorization: `Bearer ${creds.access_token}` };
76
+ }
77
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,6EAA6E;AAC7E,gFAAgF;AAEhF,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,IAAI,QAAQ,GAAiB,IAAI,CAAC;AAClC,IAAI,cAAc,GAAiB,IAAI,CAAC;AAExC,0DAA0D;AAC1D,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,QAAQ,GAAG,IAAI,KAAK,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,cAAc,GAAG,IAAI,KAAK,CAAC;YACzB,MAAM,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,WAAW;IACzB,QAAQ,GAAG,IAAI,CAAC;IAChB,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,eAAe;IAC5B,4BAA4B;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CAAC;IAC/C,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,YAAY;QAAE,OAAO,EAAE,CAAC;IAEpC,0BAA0B;IAC1B,IAAI,cAAc,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,eAAe,CAAC;oBACd,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;iBAClD,CAAC,CAAC;gBACH,OAAO,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;AAC3D,CAAC"}
@@ -1,10 +1,55 @@
1
1
  export interface MemaxConfig {
2
2
  api_url: string;
3
3
  default_hub: string;
4
+ active_hub_id?: string;
4
5
  default_boundary: string;
5
6
  auto_categorize: boolean;
7
+ device_id?: string;
8
+ sync_sources?: SyncSourceState[];
9
+ agent_session_roots?: AgentSessionRoot[];
10
+ }
11
+ export interface AgentSessionRoot {
12
+ id?: string;
13
+ agent: string;
14
+ root_path: string;
15
+ scope: string;
16
+ session_type?: string;
17
+ include_extensions?: string[];
18
+ }
19
+ export interface SyncSourceState {
20
+ id: string;
21
+ root_path: string;
22
+ kind: "directory";
23
+ ignore_patterns: string[];
24
+ default_category?: string;
25
+ default_boundary?: string;
26
+ deletion_policy: "retain";
27
+ last_sync_at?: string;
28
+ last_mode?: "manual" | "watch";
29
+ last_scan_count?: number;
30
+ last_pushed?: number;
31
+ last_skipped?: number;
32
+ last_errors?: number;
6
33
  }
7
34
  export declare function getConfigDir(): string;
8
35
  export declare function loadConfig(): MemaxConfig;
9
36
  export declare function saveConfig(config: Partial<MemaxConfig>): void;
37
+ export declare function getActiveHubID(): string;
38
+ export declare function setActiveHubID(hubID: string): void;
39
+ export declare function getOrCreateDeviceID(): string;
40
+ export declare function makeSyncSourceID(rootPath: string): string;
41
+ export declare function listSyncSources(): SyncSourceState[];
42
+ export declare function upsertSyncSource(source: Omit<SyncSourceState, "id"> & {
43
+ id?: string;
44
+ }): SyncSourceState;
45
+ export declare function updateSyncSourceRun(rootPath: string, update: {
46
+ ignorePatterns: string[];
47
+ defaultCategory?: string;
48
+ defaultBoundary?: string;
49
+ mode: "manual" | "watch";
50
+ scanCount: number;
51
+ pushed: number;
52
+ skipped: number;
53
+ errors: number;
54
+ }): SyncSourceState;
10
55
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;AASD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,WAAW,CAgBxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAiB7D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,QAAQ,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,WAAW,CAmBxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAiB7D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,eAAe,IAAI,eAAe,EAAE,CAInD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,eAAe,CA6BjB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,GACA,eAAe,CAmBjB"}
@@ -1,11 +1,12 @@
1
1
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
+ import { randomUUID, createHash } from "node:crypto";
4
5
  const CONFIG_DIR = join(homedir(), ".memax");
5
6
  const CONFIG_FILE = join(CONFIG_DIR, "config.json");
6
7
  const DEFAULT_CONFIG = {
7
8
  api_url: "http://localhost:8080",
8
- default_hub: "default",
9
+ default_hub: "",
9
10
  default_boundary: "private",
10
11
  auto_categorize: true,
11
12
  };
@@ -21,6 +22,9 @@ export function loadConfig() {
21
22
  try {
22
23
  const raw = readFileSync(CONFIG_FILE, "utf-8");
23
24
  const config = { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
25
+ if (!config.active_hub_id && config.default_hub) {
26
+ config.active_hub_id = config.default_hub;
27
+ }
24
28
  if (envUrl)
25
29
  config.api_url = envUrl;
26
30
  return config;
@@ -46,4 +50,73 @@ export function saveConfig(config) {
46
50
  const merged = { ...existing, ...config };
47
51
  writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2) + "\n");
48
52
  }
53
+ export function getActiveHubID() {
54
+ const config = loadConfig();
55
+ return config.active_hub_id?.trim() || config.default_hub?.trim() || "";
56
+ }
57
+ export function setActiveHubID(hubID) {
58
+ saveConfig({ active_hub_id: hubID });
59
+ }
60
+ export function getOrCreateDeviceID() {
61
+ const config = loadConfig();
62
+ if (config.device_id && config.device_id.trim()) {
63
+ return config.device_id;
64
+ }
65
+ const deviceID = randomUUID();
66
+ saveConfig({ device_id: deviceID });
67
+ return deviceID;
68
+ }
69
+ export function makeSyncSourceID(rootPath) {
70
+ return createHash("sha256").update(rootPath).digest("hex").slice(0, 12);
71
+ }
72
+ export function listSyncSources() {
73
+ return [...(loadConfig().sync_sources ?? [])].sort((a, b) => a.root_path.localeCompare(b.root_path));
74
+ }
75
+ export function upsertSyncSource(source) {
76
+ const config = loadConfig();
77
+ const syncSources = [...(config.sync_sources ?? [])];
78
+ const id = source.id ?? makeSyncSourceID(source.root_path);
79
+ const next = {
80
+ id,
81
+ root_path: source.root_path,
82
+ kind: source.kind,
83
+ ignore_patterns: [...source.ignore_patterns],
84
+ default_category: source.default_category,
85
+ default_boundary: source.default_boundary,
86
+ deletion_policy: source.deletion_policy,
87
+ last_sync_at: source.last_sync_at,
88
+ last_mode: source.last_mode,
89
+ last_scan_count: source.last_scan_count,
90
+ last_pushed: source.last_pushed,
91
+ last_skipped: source.last_skipped,
92
+ last_errors: source.last_errors,
93
+ };
94
+ const existingIndex = syncSources.findIndex((item) => item.id === id);
95
+ if (existingIndex >= 0) {
96
+ syncSources[existingIndex] = next;
97
+ }
98
+ else {
99
+ syncSources.push(next);
100
+ }
101
+ saveConfig({ sync_sources: syncSources });
102
+ return next;
103
+ }
104
+ export function updateSyncSourceRun(rootPath, update) {
105
+ const existing = listSyncSources().find((item) => item.root_path === rootPath);
106
+ return upsertSyncSource({
107
+ id: existing?.id,
108
+ root_path: rootPath,
109
+ kind: "directory",
110
+ ignore_patterns: update.ignorePatterns,
111
+ default_category: update.defaultCategory,
112
+ default_boundary: update.defaultBoundary,
113
+ deletion_policy: "retain",
114
+ last_sync_at: new Date().toISOString(),
115
+ last_mode: update.mode,
116
+ last_scan_count: update.scanCount,
117
+ last_pushed: update.pushed,
118
+ last_skipped: update.skipped,
119
+ last_errors: update.errors,
120
+ });
121
+ }
49
122
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AASpD,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,uBAAuB;IAChC,WAAW,EAAE,SAAS;IACtB,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,+BAA+B;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAEzC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,IAAI,MAAM;YAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA4B;IACrD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,QAAQ,GAAG,cAAc,CAAC;IAC9B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,QAAQ,GAAG;gBACT,GAAG,cAAc;gBACjB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;aAClD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Hub, HubWithRole } from "memax-sdk";
2
+ export declare const PERSONAL_HUB_ALIAS = "personal";
3
+ export declare function getHubReference(hub: Hub): string;
4
+ export declare function findHubMatch(hubs: HubWithRole[], ref: string): HubWithRole | undefined;
5
+ export declare function resolveHubID(ref: string | undefined): Promise<string | undefined>;
6
+ export declare function requireHub(ref: string): Promise<HubWithRole>;
7
+ //# sourceMappingURL=hubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubs.d.ts","sourceRoot":"","sources":["../../src/lib/hubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGlD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAM7C,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EAAE,EACnB,GAAG,EAAE,MAAM,GACV,WAAW,GAAG,SAAS,CAWzB;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAI7B;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASlE"}
@@ -0,0 +1,33 @@
1
+ import { getClient } from "./client.js";
2
+ export const PERSONAL_HUB_ALIAS = "personal";
3
+ function normalizeHubRef(value) {
4
+ return value.trim().toLowerCase();
5
+ }
6
+ export function getHubReference(hub) {
7
+ return hub.hub_type === "personal" ? PERSONAL_HUB_ALIAS : hub.slug;
8
+ }
9
+ export function findHubMatch(hubs, ref) {
10
+ const normalized = normalizeHubRef(ref);
11
+ if (normalized === PERSONAL_HUB_ALIAS) {
12
+ return hubs.find(({ hub }) => hub.hub_type === "personal");
13
+ }
14
+ return hubs.find(({ hub }) => {
15
+ return (normalizeHubRef(hub.id) === normalized ||
16
+ normalizeHubRef(hub.slug) === normalized);
17
+ });
18
+ }
19
+ export async function resolveHubID(ref) {
20
+ if (!ref)
21
+ return undefined;
22
+ const hubs = await getClient().hubs.list();
23
+ return findHubMatch(hubs, ref)?.hub.id;
24
+ }
25
+ export async function requireHub(ref) {
26
+ const hubs = await getClient().hubs.list();
27
+ const match = findHubMatch(hubs, ref);
28
+ if (!match) {
29
+ throw new Error("Hub not found or not accessible. Run `memax hub list` to see available hubs.");
30
+ }
31
+ return match;
32
+ }
33
+ //# sourceMappingURL=hubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubs.js","sourceRoot":"","sources":["../../src/lib/hubs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE7C,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAmB,EACnB,GAAW;IAEX,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;QAC3B,OAAO,CACL,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,UAAU;YACtC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,CACzC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAuB;IAEvB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}