@nex-ai/nex 0.1.38 → 0.1.39

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 (44) hide show
  1. package/dist/cli.js +2 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/workspace.d.ts +8 -0
  4. package/dist/commands/workspace.js +251 -0
  5. package/dist/commands/workspace.js.map +1 -0
  6. package/dist/index.js +12 -12
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/config.d.ts +2 -2
  9. package/dist/lib/config.js +33 -4
  10. package/dist/lib/config.js.map +1 -1
  11. package/dist/lib/workspace-registry.d.ts +47 -0
  12. package/dist/lib/workspace-registry.js +240 -0
  13. package/dist/lib/workspace-registry.js.map +1 -0
  14. package/dist/mcp/config.d.ts +5 -0
  15. package/dist/mcp/config.js +16 -1
  16. package/dist/mcp/config.js.map +1 -1
  17. package/dist/mcp/file-manifest.d.ts +1 -1
  18. package/dist/mcp/file-manifest.js +11 -7
  19. package/dist/mcp/file-manifest.js.map +1 -1
  20. package/dist/mcp/rate-limiter.js +2 -2
  21. package/dist/mcp/rate-limiter.js.map +1 -1
  22. package/dist/mcp/session-store.js +2 -2
  23. package/dist/mcp/session-store.js.map +1 -1
  24. package/dist/mcp/workspace-data-dir.d.ts +2 -0
  25. package/dist/mcp/workspace-data-dir.js +28 -0
  26. package/dist/mcp/workspace-data-dir.js.map +1 -0
  27. package/dist/plugin/auto-register.d.ts +1 -1
  28. package/dist/plugin/auto-register.js +34 -6
  29. package/dist/plugin/auto-register.js.map +1 -1
  30. package/dist/plugin/config.d.ts +11 -4
  31. package/dist/plugin/config.js +21 -5
  32. package/dist/plugin/config.js.map +1 -1
  33. package/dist/plugin/file-manifest.js +10 -6
  34. package/dist/plugin/file-manifest.js.map +1 -1
  35. package/dist/plugin/rate-limiter.js +2 -2
  36. package/dist/plugin/rate-limiter.js.map +1 -1
  37. package/dist/plugin/recall-filter.js +10 -6
  38. package/dist/plugin/recall-filter.js.map +1 -1
  39. package/dist/plugin/session-store.js +2 -3
  40. package/dist/plugin/session-store.js.map +1 -1
  41. package/dist/plugin/workspace-data-dir.d.ts +2 -0
  42. package/dist/plugin/workspace-data-dir.js +31 -0
  43. package/dist/plugin/workspace-data-dir.js.map +1 -0
  44. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import { Command } from "commander";
5
5
  import { createRequire } from "node:module";
6
6
  const require = createRequire(import.meta.url);
7
7
  const { version } = require("../package.json");
8
+ import { workspace } from "./commands/workspace.js";
8
9
  export const program = new Command();
9
10
  program
10
11
  .name("nex")
@@ -15,4 +16,5 @@ program
15
16
  .option("--timeout <ms>", "Request timeout in milliseconds")
16
17
  .option("--session <id>", "Session ID for multi-turn context")
17
18
  .option("--debug", "Debug output on stderr");
19
+ program.addCommand(workspace);
18
20
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;KAC5D,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;KAC3D,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;KAC7D,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;KAC5D,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;KAC3D,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;KAC7D,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAE/C,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * nex workspace — manage local workspaces.
3
+ *
4
+ * Subcommands: list, switch, rename, current.
5
+ */
6
+ import { Command } from "commander";
7
+ declare const workspace: Command;
8
+ export { workspace };
@@ -0,0 +1,251 @@
1
+ /**
2
+ * nex workspace — manage local workspaces.
3
+ *
4
+ * Subcommands: list, switch, rename, current.
5
+ */
6
+ import { Command } from "commander";
7
+ import { listWorkspaces, switchWorkspace, renameWorkspace, getActiveCredentials, resolveSlug, loadRegistry, resetDataDirCache, removeWorkspace, } from "../lib/workspace-registry.js";
8
+ import { style, sym } from "../lib/tui.js";
9
+ import { resolveFormat } from "../lib/config.js";
10
+ const workspace = new Command("workspace").description("Manage workspaces");
11
+ // --- current ---
12
+ workspace
13
+ .command("current")
14
+ .description("Show active workspace")
15
+ .action(() => {
16
+ const creds = getActiveCredentials();
17
+ if (!creds) {
18
+ process.stderr.write("No active workspace. Run: nex register --email <email>\n");
19
+ process.exit(1);
20
+ }
21
+ const registry = loadRegistry();
22
+ const meta = registry.workspaces[creds.workspace_slug];
23
+ const nickname = meta?.nickname;
24
+ const format = resolveFormat();
25
+ if (format === "json") {
26
+ console.log(JSON.stringify({
27
+ slug: creds.workspace_slug,
28
+ nickname: nickname || null,
29
+ email: creds.email,
30
+ workspace_id: creds.workspace_id,
31
+ active: true,
32
+ }));
33
+ }
34
+ else {
35
+ const display = nickname
36
+ ? `${style.bold(nickname)} (${style.dim(creds.workspace_slug)})`
37
+ : style.bold(creds.workspace_slug);
38
+ console.log(`${sym.success} Active: ${display}`);
39
+ console.log(` Email: ${creds.email}`);
40
+ console.log(` ID: ${creds.workspace_id}`);
41
+ }
42
+ });
43
+ // --- switch ---
44
+ workspace
45
+ .command("switch")
46
+ .description("Switch active workspace")
47
+ .argument("[slug-or-nickname]", "Workspace slug or nickname")
48
+ .action(async (input) => {
49
+ if (!input) {
50
+ // Interactive mode — launch picker
51
+ await interactiveWorkspacePicker();
52
+ return;
53
+ }
54
+ const slug = resolveSlug(input);
55
+ if (!slug) {
56
+ process.stderr.write(`Workspace "${input}" not found.\n`);
57
+ process.exit(1);
58
+ }
59
+ const creds = switchWorkspace(slug);
60
+ resetDataDirCache();
61
+ console.log(`${sym.success} Switched to ${style.bold(slug)} (${creds.email})`);
62
+ });
63
+ // --- rename ---
64
+ workspace
65
+ .command("rename")
66
+ .description("Rename a workspace")
67
+ .argument("<slug-or-nickname>", "Workspace slug or nickname")
68
+ .argument("<name>", "New nickname")
69
+ .action((input, name) => {
70
+ const slug = resolveSlug(input);
71
+ if (!slug) {
72
+ process.stderr.write(`Workspace "${input}" not found.\n`);
73
+ process.exit(1);
74
+ }
75
+ renameWorkspace(slug, name);
76
+ console.log(`${sym.success} Renamed ${style.bold(slug)} to "${name}"`);
77
+ });
78
+ // --- list ---
79
+ workspace
80
+ .command("list")
81
+ .description("Interactive workspace manager")
82
+ .action(async () => {
83
+ if (!process.stdin.isTTY) {
84
+ // Non-TTY: print JSON list
85
+ const workspaces = listWorkspaces();
86
+ const registry = loadRegistry();
87
+ const output = workspaces.map((ws) => ({
88
+ slug: ws.slug,
89
+ nickname: ws.nickname || null,
90
+ email: ws.email,
91
+ active: ws.slug === registry.active_workspace,
92
+ }));
93
+ console.log(JSON.stringify(output, null, 2));
94
+ return;
95
+ }
96
+ await interactiveWorkspacePicker();
97
+ });
98
+ export { workspace };
99
+ // --- Interactive picker ---
100
+ async function interactiveWorkspacePicker() {
101
+ const registry = loadRegistry();
102
+ let workspaces = listWorkspaces();
103
+ if (workspaces.length === 0) {
104
+ console.log("No workspaces registered. Run: nex register --email <email>");
105
+ return;
106
+ }
107
+ let selected = 0;
108
+ let mode = "normal";
109
+ let renameBuffer = "";
110
+ let errorMessage = "";
111
+ function draw() {
112
+ // Clear screen + move cursor home
113
+ process.stdout.write("\x1b[2J\x1b[H");
114
+ process.stdout.write(` ${style.bold("Workspaces")}${style.dim(" (q to exit)")}\n`);
115
+ process.stdout.write(` ${"─".repeat(45)}\n\n`);
116
+ for (let i = 0; i < workspaces.length; i++) {
117
+ const ws = workspaces[i];
118
+ const isActive = ws.slug === registry.active_workspace;
119
+ const isSelected = i === selected;
120
+ const indicator = isActive ? style.green("●") : " ";
121
+ const pointer = isSelected ? style.cyan(sym.pointer) : " ";
122
+ const display = ws.nickname
123
+ ? `${style.bold(ws.nickname)} ${style.dim(`(${ws.slug})`)}`
124
+ : style.bold(ws.slug);
125
+ process.stdout.write(` ${pointer} ${indicator} ${display}\n`);
126
+ process.stdout.write(` ${style.dim(ws.email)}\n`);
127
+ // Inline rename input
128
+ if (isSelected && mode === "renaming") {
129
+ process.stdout.write(` ${style.cyan("Nickname:")} ${renameBuffer}\u2588\n`);
130
+ }
131
+ // Inline delete confirmation
132
+ if (isSelected && mode === "confirming-delete") {
133
+ const name = ws.nickname || ws.slug;
134
+ process.stdout.write(` ${style.red(`Remove ${name}? (y/n)`)}\n`);
135
+ }
136
+ process.stdout.write("\n");
137
+ }
138
+ if (errorMessage) {
139
+ process.stdout.write(` ${style.red(errorMessage)}\n\n`);
140
+ errorMessage = "";
141
+ }
142
+ if (mode === "normal") {
143
+ process.stdout.write(` ${style.dim("[↑↓] navigate [enter] switch [r] rename [d] delete")}\n`);
144
+ }
145
+ else if (mode === "renaming") {
146
+ process.stdout.write(` ${style.dim("[enter] save [esc] cancel")}\n`);
147
+ }
148
+ }
149
+ function cleanup() {
150
+ process.stdin.setRawMode(false);
151
+ process.stdin.pause();
152
+ process.stdin.removeAllListeners("data");
153
+ // Clear screen
154
+ process.stdout.write("\x1b[2J\x1b[H");
155
+ }
156
+ return new Promise((resolve) => {
157
+ process.stdin.setRawMode(true);
158
+ process.stdin.resume();
159
+ process.stdin.setEncoding("utf-8");
160
+ draw();
161
+ process.stdin.on("data", (key) => {
162
+ if (mode === "normal") {
163
+ // Navigation
164
+ if (key === "\x1b[A" && selected > 0) {
165
+ selected--;
166
+ }
167
+ else if (key === "\x1b[B" && selected < workspaces.length - 1) {
168
+ selected++;
169
+ }
170
+ // Switch (enter)
171
+ else if (key === "\r") {
172
+ const ws = workspaces[selected];
173
+ if (ws.slug !== registry.active_workspace) {
174
+ switchWorkspace(ws.slug);
175
+ resetDataDirCache();
176
+ registry.active_workspace = ws.slug;
177
+ }
178
+ cleanup();
179
+ const display = ws.nickname || ws.slug;
180
+ console.log(`${sym.success} Switched to ${style.bold(display)}`);
181
+ resolve();
182
+ return;
183
+ }
184
+ // Rename (r)
185
+ else if (key === "r") {
186
+ mode = "renaming";
187
+ renameBuffer = workspaces[selected].nickname || "";
188
+ }
189
+ // Delete (d)
190
+ else if (key === "d") {
191
+ const ws = workspaces[selected];
192
+ if (ws.slug === registry.active_workspace) {
193
+ errorMessage = "Cannot remove active workspace. Switch first.";
194
+ }
195
+ else {
196
+ mode = "confirming-delete";
197
+ }
198
+ }
199
+ // Quit
200
+ else if (key === "q" || key === "\x03") {
201
+ cleanup();
202
+ resolve();
203
+ return;
204
+ }
205
+ }
206
+ else if (mode === "renaming") {
207
+ if (key === "\r") {
208
+ // Commit rename
209
+ const ws = workspaces[selected];
210
+ renameWorkspace(ws.slug, renameBuffer);
211
+ ws.nickname = renameBuffer;
212
+ mode = "normal";
213
+ renameBuffer = "";
214
+ }
215
+ else if (key === "\x1b") {
216
+ // Cancel
217
+ mode = "normal";
218
+ renameBuffer = "";
219
+ }
220
+ else if (key === "\x7f") {
221
+ // Backspace
222
+ renameBuffer = renameBuffer.slice(0, -1);
223
+ }
224
+ else if (key.length === 1 && key >= " ") {
225
+ renameBuffer += key;
226
+ }
227
+ }
228
+ else if (mode === "confirming-delete") {
229
+ if (key === "y") {
230
+ const ws = workspaces[selected];
231
+ removeWorkspace(ws.slug);
232
+ workspaces = listWorkspaces();
233
+ if (selected >= workspaces.length)
234
+ selected = Math.max(0, workspaces.length - 1);
235
+ mode = "normal";
236
+ if (workspaces.length === 0) {
237
+ cleanup();
238
+ console.log("All workspaces removed.");
239
+ resolve();
240
+ return;
241
+ }
242
+ }
243
+ else {
244
+ mode = "normal";
245
+ }
246
+ }
247
+ draw();
248
+ });
249
+ });
250
+ }
251
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -97,7 +97,7 @@ When no command is given, launches the interactive TUI.`);
97
97
  emitAndExit(result);
98
98
  }
99
99
  // Interactive commands → fall through to Commander (rich TUI with pickers, spinners, workflows)
100
- const INTERACTIVE_COMMANDS = new Set(["setup", "integrate", "scan", "register", "status"]);
100
+ const INTERACTIVE_COMMANDS = new Set(["setup", "integrate", "scan", "register", "status", "workspace"]);
101
101
  const firstArg = cleanArgs[0]?.toLowerCase();
102
102
  // nex mcp → start embedded MCP server
103
103
  if (firstArg === "mcp") {
@@ -109,6 +109,17 @@ When no command is given, launches the interactive TUI.`);
109
109
  const result = await dispatchTokens(cleanArgs, ctx);
110
110
  emitAndExit(result);
111
111
  }
112
+ // Interactive commands → Commander (setup, integrate, scan, register, workspace)
113
+ if (firstArg && INTERACTIVE_COMMANDS.has(firstArg)) {
114
+ // Load Commander command modules to register their handlers
115
+ await import("./commands/setup.js");
116
+ await import("./commands/scan.js");
117
+ await import("./commands/register.js");
118
+ await import("./commands/integrate.js");
119
+ const { program } = await import("./cli.js");
120
+ program.parse(["node", "nex", ...args]);
121
+ return;
122
+ }
112
123
  // Piped stdin → dispatch each line
113
124
  if (!process.stdin.isTTY) {
114
125
  const chunks = [];
@@ -122,17 +133,6 @@ When no command is given, launches the interactive TUI.`);
122
133
  }
123
134
  process.exit(0);
124
135
  }
125
- // Interactive commands or no subcommand → Commander (setup, integrate, scan, register)
126
- if (firstArg && INTERACTIVE_COMMANDS.has(firstArg)) {
127
- // Load Commander command modules to register their handlers
128
- await import("./commands/setup.js");
129
- await import("./commands/scan.js");
130
- await import("./commands/register.js");
131
- await import("./commands/integrate.js");
132
- const { program } = await import("./cli.js");
133
- program.parse(["node", "nex", ...args]);
134
- return;
135
- }
136
136
  // No subcommand → TUI
137
137
  const { startTui } = await import("./tui/index.js");
138
138
  startTui();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAgB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,MAA0B,CAAC;IAC/B,IAAI,MAA0B,CAAC;IAC/B,IAAI,OAA2B,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,GAAG,EAAE;YACH,MAAM,EAAE,CAAC,MAAM,IAAI,aAAa,EAAE,CAAW;YAC7C,MAAM;YACN,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAS,WAAW,CAAC,MAA4D;IAC/E,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAQ,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;wDAyBwC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kEAAkE;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEpD,0DAA0D;IAC1D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,gGAAgG;IAChG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAE7C,sCAAsC;IACtC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACpD,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1C,WAAW,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uFAAuF;IACvF,IAAI,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,4DAA4D;QAC5D,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACpC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export interface NexConfig {
18
18
  export declare function loadConfig(): NexConfig;
19
19
  export declare function saveConfig(config: NexConfig): void;
20
20
  /**
21
- * Resolve API key from: flag > env > config file.
21
+ * Resolve API key from: flag > env > active workspace > config file.
22
22
  */
23
23
  export declare function resolveApiKey(flagValue?: string): string | undefined;
24
24
  /**
@@ -30,6 +30,6 @@ export declare function resolveFormat(flagValue?: string): string;
30
30
  */
31
31
  export declare function resolveTimeout(flagValue?: string): number;
32
32
  /**
33
- * Persist registration data to config file.
33
+ * Persist registration data to config file and workspace registry.
34
34
  */
35
35
  export declare function persistRegistration(data: Record<string, unknown>): void;
@@ -5,6 +5,7 @@
5
5
  import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
6
6
  import { join, dirname } from "node:path";
7
7
  import { homedir } from "node:os";
8
+ import { getActiveCredentials, addWorkspace } from "./workspace-registry.js";
8
9
  export const CONFIG_PATH = join(homedir(), ".nex", "config.json");
9
10
  export const BASE_URL = process.env.NEX_DEV_URL ?? loadConfig().dev_url ?? "https://app.nex.ai";
10
11
  export const API_BASE = `${BASE_URL}/api/developers`;
@@ -12,7 +13,15 @@ export const REGISTER_URL = `${BASE_URL}/api/v1/agents/register`;
12
13
  export function loadConfig() {
13
14
  try {
14
15
  const raw = readFileSync(CONFIG_PATH, "utf-8");
15
- return JSON.parse(raw);
16
+ const data = JSON.parse(raw);
17
+ // If migrated format, merge active workspace credentials into return
18
+ if (data.active_workspace && !data.api_key) {
19
+ const wsCreds = getActiveCredentials();
20
+ if (wsCreds) {
21
+ return { ...data, ...wsCreds };
22
+ }
23
+ }
24
+ return data;
16
25
  }
17
26
  catch {
18
27
  return {};
@@ -23,10 +32,19 @@ export function saveConfig(config) {
23
32
  writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", "utf-8");
24
33
  }
25
34
  /**
26
- * Resolve API key from: flag > env > config file.
35
+ * Resolve API key from: flag > env > active workspace > config file.
27
36
  */
28
37
  export function resolveApiKey(flagValue) {
29
- return flagValue || process.env.NEX_API_KEY || loadConfig().api_key || undefined;
38
+ if (flagValue)
39
+ return flagValue;
40
+ if (process.env.NEX_API_KEY)
41
+ return process.env.NEX_API_KEY;
42
+ // Try active workspace credentials
43
+ const wsCreds = getActiveCredentials();
44
+ if (wsCreds?.api_key)
45
+ return wsCreds.api_key;
46
+ // Legacy fallback: flat config.json (pre-migration)
47
+ return loadConfig().api_key || undefined;
30
48
  }
31
49
  /**
32
50
  * Resolve output format from: flag > config file > default.
@@ -49,9 +67,10 @@ export function resolveTimeout(flagValue) {
49
67
  return loadConfig().default_timeout ?? 120_000;
50
68
  }
51
69
  /**
52
- * Persist registration data to config file.
70
+ * Persist registration data to config file and workspace registry.
53
71
  */
54
72
  export function persistRegistration(data) {
73
+ // Legacy: still write to config.json for backwards compat during migration
55
74
  const existing = loadConfig();
56
75
  if (typeof data.api_key === "string")
57
76
  existing.api_key = data.api_key;
@@ -63,5 +82,15 @@ export function persistRegistration(data) {
63
82
  if (typeof data.workspace_slug === "string")
64
83
  existing.workspace_slug = data.workspace_slug;
65
84
  saveConfig(existing);
85
+ // New: add to workspace registry
86
+ const slug = data.workspace_slug || data.workspace_id;
87
+ if (slug && data.api_key) {
88
+ addWorkspace(slug, {
89
+ api_key: data.api_key,
90
+ email: data.email || "",
91
+ workspace_id: String(data.workspace_id || ""),
92
+ workspace_slug: slug,
93
+ });
94
+ }
66
95
  }
67
96
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,OAAO,IAAI,oBAAoB,CAAC;AAChG,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,QAAQ,iBAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,QAAQ,yBAAyB,CAAC;AAYjE,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,OAAO,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC,cAAc,CAAC;IAC/C,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,+EAA+E;IAC/E,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9C,OAAO,UAAU,EAAE,CAAC,eAAe,IAAI,OAAO,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA6B;IAC/D,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACtE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAChE,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACnF,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;QAAE,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC3F,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Workspace registry — manages multiple Nex workspaces on a single machine.
3
+ *
4
+ * Storage:
5
+ * ~/.nex/config.json → registry (active_workspace + workspace list)
6
+ * ~/.nex/workspaces/<slug>/ → per-workspace credentials + state
7
+ *
8
+ * All functions accept an optional `baseDir` for testing (defaults to ~/.nex).
9
+ */
10
+ export interface WorkspaceEntry {
11
+ slug: string;
12
+ nickname?: string;
13
+ added_at: number;
14
+ }
15
+ export interface WorkspaceCredentials {
16
+ api_key: string;
17
+ email: string;
18
+ workspace_id: string;
19
+ workspace_slug: string;
20
+ }
21
+ export interface WorkspaceRegistry {
22
+ active_workspace: string;
23
+ workspaces: Record<string, {
24
+ nickname?: string;
25
+ added_at: number;
26
+ }>;
27
+ [key: string]: unknown;
28
+ }
29
+ export declare function loadRegistry(baseDir?: string): WorkspaceRegistry;
30
+ export declare function saveRegistry(registry: WorkspaceRegistry, baseDir?: string): void;
31
+ export declare function addWorkspace(slug: string, credentials: WorkspaceCredentials, nickname?: string, baseDir?: string): void;
32
+ export declare function removeWorkspace(slug: string, baseDir?: string): void;
33
+ export declare function switchWorkspace(slug: string, baseDir?: string): WorkspaceCredentials;
34
+ export declare function renameWorkspace(slug: string, nickname: string, baseDir?: string): void;
35
+ export declare function getActiveCredentials(baseDir?: string): WorkspaceCredentials | undefined;
36
+ export declare function listWorkspaces(baseDir?: string): (WorkspaceEntry & {
37
+ email: string;
38
+ })[];
39
+ export declare function workspaceDataDir(slug?: string, baseDir?: string): string;
40
+ /** Reset cached data dir (for testing or after workspace switch). */
41
+ export declare function resetDataDirCache(): void;
42
+ /**
43
+ * Resolve a workspace slug from a slug-or-nickname input.
44
+ * Resolution: exact slug → case-insensitive nickname → null.
45
+ */
46
+ export declare function resolveSlug(input: string, baseDir?: string): string | null;
47
+ export declare function migrateIfNeeded(baseDir?: string, legacyMcpPath?: string): void;