nomoreide 0.1.72 → 0.1.74

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 (95) hide show
  1. package/README.md +48 -0
  2. package/dist/cli/agents.d.ts +2 -0
  3. package/dist/cli/agents.js +43 -0
  4. package/dist/cli/agents.js.map +1 -0
  5. package/dist/cli/commands.d.ts +3 -1
  6. package/dist/cli/commands.js +21 -14
  7. package/dist/cli/commands.js.map +1 -1
  8. package/dist/cli/daemon.d.ts +15 -0
  9. package/dist/cli/daemon.js +139 -0
  10. package/dist/cli/daemon.js.map +1 -0
  11. package/dist/cli/profile.d.ts +2 -0
  12. package/dist/cli/profile.js +167 -0
  13. package/dist/cli/profile.js.map +1 -0
  14. package/dist/core/agent-env-actions.d.ts +4 -4
  15. package/dist/core/agent-profiles/registry-config.d.ts +1 -1
  16. package/dist/core/agent-profiles/registry-config.js +4 -1
  17. package/dist/core/agent-profiles/registry-config.js.map +1 -1
  18. package/dist/core/agent-terminal.d.ts +6 -0
  19. package/dist/core/agent-terminal.js +16 -0
  20. package/dist/core/agent-terminal.js.map +1 -0
  21. package/dist/core/app-version.d.ts +2 -0
  22. package/dist/core/app-version.js +16 -0
  23. package/dist/core/app-version.js.map +1 -0
  24. package/dist/core/config-store.js +1 -0
  25. package/dist/core/config-store.js.map +1 -1
  26. package/dist/core/daemon-client.d.ts +66 -0
  27. package/dist/core/daemon-client.js +121 -0
  28. package/dist/core/daemon-client.js.map +1 -0
  29. package/dist/core/daemon-lifecycle.d.ts +59 -0
  30. package/dist/core/daemon-lifecycle.js +147 -0
  31. package/dist/core/daemon-lifecycle.js.map +1 -0
  32. package/dist/core/db-peek.d.ts +4 -0
  33. package/dist/core/db-peek.js +2 -0
  34. package/dist/core/db-peek.js.map +1 -1
  35. package/dist/core/repo-onboard.d.ts +8 -8
  36. package/dist/core/service-health.js +6 -1
  37. package/dist/core/service-health.js.map +1 -1
  38. package/dist/core/service-registry.d.ts +5 -3
  39. package/dist/core/service-registry.js +8 -5
  40. package/dist/core/service-registry.js.map +1 -1
  41. package/dist/core/terminal-manager.d.ts +3 -0
  42. package/dist/core/terminal-manager.js +2 -0
  43. package/dist/core/terminal-manager.js.map +1 -1
  44. package/dist/core/terminal-session.d.ts +7 -0
  45. package/dist/core/terminal-session.js +6 -0
  46. package/dist/core/terminal-session.js.map +1 -1
  47. package/dist/core/types.d.ts +6 -0
  48. package/dist/core/workflows.d.ts +7 -19
  49. package/dist/core/workflows.js +9 -21
  50. package/dist/core/workflows.js.map +1 -1
  51. package/dist/index.js +22 -5
  52. package/dist/index.js.map +1 -1
  53. package/dist/mcp/server.d.ts +11 -7
  54. package/dist/mcp/server.js +15 -34
  55. package/dist/mcp/server.js.map +1 -1
  56. package/dist/mcp/tools/agent.js +15 -5
  57. package/dist/mcp/tools/agent.js.map +1 -1
  58. package/dist/mcp/tools/context.d.ts +6 -8
  59. package/dist/mcp/tools/context.js.map +1 -1
  60. package/dist/mcp/tools/database.js +13 -17
  61. package/dist/mcp/tools/database.js.map +1 -1
  62. package/dist/mcp/tools/services.d.ts +5 -0
  63. package/dist/mcp/tools/services.js +31 -21
  64. package/dist/mcp/tools/services.js.map +1 -1
  65. package/dist/tui/app.d.ts +4 -2
  66. package/dist/tui/app.js +19 -16
  67. package/dist/tui/app.js.map +1 -1
  68. package/dist/web/client/assets/{code-editor-fZ2dpXfw.js → code-editor-GK07_DNL.js} +1 -1
  69. package/dist/web/client/assets/index-C8kH2Crm.css +1 -0
  70. package/dist/web/client/assets/index-D7ZrdlUm.js +219 -0
  71. package/dist/web/client/index.html +2 -2
  72. package/dist/web/routes/agent-chat-routes.d.ts +1 -1
  73. package/dist/web/routes/agent-chat-routes.js +3 -4
  74. package/dist/web/routes/agent-chat-routes.js.map +1 -1
  75. package/dist/web/routes/context.d.ts +6 -0
  76. package/dist/web/routes/context.js.map +1 -1
  77. package/dist/web/routes/dashboard-routes.js +27 -1
  78. package/dist/web/routes/dashboard-routes.js.map +1 -1
  79. package/dist/web/routes/database-routes.js +3 -0
  80. package/dist/web/routes/database-routes.js.map +1 -1
  81. package/dist/web/routes/shell-routes.js +1 -0
  82. package/dist/web/routes/shell-routes.js.map +1 -1
  83. package/dist/web/routes/terminal-routes.js +33 -0
  84. package/dist/web/routes/terminal-routes.js.map +1 -1
  85. package/dist/web/routes/workflow-routes.d.ts +2 -2
  86. package/dist/web/routes/workflow-routes.js +2 -2
  87. package/dist/web/server.d.ts +2 -0
  88. package/dist/web/server.js +2 -1
  89. package/dist/web/server.js.map +1 -1
  90. package/package.json +2 -1
  91. package/dist/web/client/assets/index-CraqLFuO.js +0 -222
  92. package/dist/web/client/assets/index-n7aEcfkd.css +0 -1
  93. package/dist/web/ui-lifecycle.d.ts +0 -30
  94. package/dist/web/ui-lifecycle.js +0 -129
  95. package/dist/web/ui-lifecycle.js.map +0 -1
package/README.md CHANGED
@@ -212,6 +212,9 @@ graph TD
212
212
  | Database browse and SQL query | | | ✓ | ✓ |
213
213
  | Human-approved SQL writes | | | ✓ | |
214
214
  | Agent tools, hooks, plugins, usage | | | ✓ | |
215
+ | Agent environments (live MCPs & skills) | ✓ | | ✓ | ✓ |
216
+ | Agent profiles (snapshot / apply / share) | ✓ | | ✓ | ✓ |
217
+ | Hosted profile registry (publish / install) | ✓ | | ✓ | ✓ |
215
218
  | Safe Git (no force-push, no reset) | ✓ | ✓ | ✓ | ✓ |
216
219
 
217
220
  ---
@@ -316,6 +319,36 @@ nomoreide git add-repo app --path /path/to/repo
316
319
  nomoreide git select-repo app
317
320
  ```
318
321
 
322
+ ### Agent Environments & Profiles
323
+
324
+ Inspect and manage your coding agents' MCP servers and skills (Claude Code,
325
+ Codex CLI, Antigravity), and bundle them into portable profiles. Formerly the
326
+ standalone `brainctl` package — see the
327
+ [migration guide](docs/brainctl-migration.md).
328
+
329
+ ```bash
330
+ # Live agent configuration (read-only)
331
+ nomoreide agents status # per-agent install state, MCP + skill counts
332
+ nomoreide agents doctor # config sanity checks
333
+ nomoreide agents read claude # dump one agent's live config as JSON
334
+
335
+ # Profiles: named bundles of MCP servers + skills
336
+ nomoreide profile list
337
+ nomoreide profile snapshot claude my-setup # capture an agent's live config
338
+ nomoreide profile apply my-setup codex --dry-run
339
+ nomoreide profile apply my-setup codex # backs up the config first
340
+ nomoreide profile export my-setup # credential-redacted .tar.gz
341
+ nomoreide profile import my-setup.tar.gz --as teammate-setup
342
+
343
+ # Hosted registry (sign in via the web UI, or set BRAINCTL_API_TOKEN)
344
+ nomoreide profile publish my-setup --slug my-setup --title "My Setup"
345
+ nomoreide profile install my-setup
346
+ ```
347
+
348
+ Exports and published packages never contain raw secrets — secret-looking
349
+ values are redacted to `${credentials.*}` placeholders that importers fill
350
+ from their own environment.
351
+
319
352
  ---
320
353
 
321
354
  ## MCP Tools
@@ -383,6 +416,21 @@ All tools are prefixed with `nomoreide_` and are available to any connected MCP
383
416
  | `nomoreide_github_get_commit_ci` | Inspect commit check status |
384
417
  | `nomoreide_github_list_workflow_runs` | List recent GitHub Actions workflow runs |
385
418
 
419
+ ### Agent Environment & Profile Tools
420
+
421
+ | Tool | Description |
422
+ |---|---|
423
+ | `nomoreide_agents_status` / `nomoreide_agents_read_configs` | Live agent install state and MCP/skill configuration |
424
+ | `nomoreide_agents_doctor` | Agent config sanity checks |
425
+ | `nomoreide_agents_add_mcp` / `nomoreide_agents_remove_mcp` | Add or remove an MCP server (config backed up first) |
426
+ | `nomoreide_agents_move_mcp_scope` / `nomoreide_agents_move_skill_scope` | Copy/move MCPs and skills between agents and scopes |
427
+ | `nomoreide_agents_snapshot_agent` | Back up an agent's config files |
428
+ | `nomoreide_profiles_list` / `get` / `create` / `update` / `delete` | Profile CRUD |
429
+ | `nomoreide_profiles_snapshot` / `nomoreide_profiles_apply` | Capture a live agent into a profile / apply one (dry-run preview) |
430
+ | `nomoreide_profiles_export` / `nomoreide_profiles_import` | Credential-redacted portable archives |
431
+ | `nomoreide_profiles_publish` / `nomoreide_profiles_install_from_registry` | Share profiles through the hosted registry |
432
+ | `nomoreide_profiles_register_github` | Register a GitHub repo as a registry profile |
433
+
386
434
  ---
387
435
 
388
436
  ## Example Configurations
@@ -0,0 +1,2 @@
1
+ /** Agent Environments on the CLI (ROR-64) — read-only, same core as UI/MCP. */
2
+ export declare function runAgentsCli(subcommand: string | undefined, args: string[], stdout: (line: string) => void): Promise<number>;
@@ -0,0 +1,43 @@
1
+ import { getAgentAvailability, readAllAgentConfigs, runAgentDoctor, AGENT_NAMES, } from "../core/agent-env/index.js";
2
+ import { UsageError } from "./errors.js";
3
+ const USAGE = "Usage: nomoreide agents [status|doctor|read [claude|codex|antigravity]]";
4
+ /** Agent Environments on the CLI (ROR-64) — read-only, same core as UI/MCP. */
5
+ export async function runAgentsCli(subcommand, args, stdout) {
6
+ const cwd = process.cwd();
7
+ if (subcommand === undefined || subcommand === "status") {
8
+ const [availability, configs] = await Promise.all([
9
+ getAgentAvailability(),
10
+ readAllAgentConfigs({ cwd }),
11
+ ]);
12
+ const byAgent = new Map(availability.map((entry) => [entry.agent, entry]));
13
+ stdout("Agent\tInstalled\tMCPs\tSkills\tConfig");
14
+ for (const config of configs) {
15
+ const installed = byAgent.get(config.agent)?.available ? "yes" : "no";
16
+ const mcpCount = Object.keys(config.mcpServers).length +
17
+ Object.keys(config.remoteMcpServers).length +
18
+ Object.keys(config.projectMcpServers).length +
19
+ Object.keys(config.projectRemoteMcpServers).length;
20
+ stdout(`${config.agent}\t${installed}\t${mcpCount}\t${config.skills.length}\t${config.exists ? config.configPath : "(none)"}`);
21
+ }
22
+ return 0;
23
+ }
24
+ if (subcommand === "doctor") {
25
+ const result = await runAgentDoctor({ cwd });
26
+ for (const check of result.checks) {
27
+ stdout(`${check.status === "ok" ? "ok" : "warn"}\t${check.label}\t${check.message}`);
28
+ }
29
+ return result.hasIssues ? 1 : 0;
30
+ }
31
+ if (subcommand === "read") {
32
+ const agent = args.find((arg) => !arg.startsWith("--"));
33
+ if (agent && !AGENT_NAMES.includes(agent)) {
34
+ throw new UsageError(`Unknown agent "${agent}". Use one of: ${AGENT_NAMES.join(", ")}`);
35
+ }
36
+ const configs = await readAllAgentConfigs({ cwd });
37
+ const selected = agent ? configs.filter((config) => config.agent === agent) : configs;
38
+ stdout(JSON.stringify(agent ? selected[0] : selected, null, 2));
39
+ return 0;
40
+ }
41
+ throw new UsageError(USAGE);
42
+ }
43
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
+ import { type DaemonConnection } from "../core/daemon-client.js";
1
2
  export interface CliOptions {
2
3
  configPath?: string;
3
- logDir?: string;
4
4
  stdout?: (line: string) => void;
5
5
  stderr?: (line: string) => void;
6
+ /** Injectable for tests; defaults to the machine-global daemon. */
7
+ daemon?: DaemonConnection;
6
8
  }
7
9
  export declare function runCli(args: string[], options?: CliOptions): Promise<number>;
@@ -1,11 +1,11 @@
1
- import { resolve } from "node:path";
2
1
  import { ConfigStore, ConfigValidationError, defaultGlobalConfigPath, } from "../core/config-store.js";
3
- import { LogStore } from "../core/log-store.js";
4
- import { ProcessManager } from "../core/process-manager.js";
2
+ import { createDaemonConnection, } from "../core/daemon-client.js";
3
+ import { runAgentsCli } from "./agents.js";
5
4
  import { UsageError } from "./errors.js";
6
5
  import { parseFlags } from "./flags.js";
7
6
  import { runGitCli } from "./git.js";
8
- const USAGE = "Usage: nomoreide [mcp|setup|tui|web|git|list|logs|start|stop|restart|add]";
7
+ import { runProfileCli } from "./profile.js";
8
+ const USAGE = "Usage: nomoreide [mcp|setup|tui|web|daemon|git|agents|profile|list|logs|start|stop|restart|add]";
9
9
  const MCP_SETUP_LINES = [
10
10
  "NoMoreIDE MCP setup",
11
11
  "",
@@ -29,10 +29,9 @@ export async function runCli(args, options = {}) {
29
29
  const stdout = options.stdout ?? ((line) => console.log(line));
30
30
  const stderr = options.stderr ?? ((line) => console.error(line));
31
31
  const configStore = new ConfigStore(options.configPath ?? defaultGlobalConfigPath());
32
- const logStore = new LogStore({
33
- baseDir: options.logDir ?? resolve(process.cwd(), ".nomoreide/logs"),
34
- });
35
- const manager = new ProcessManager({ configStore, logStore });
32
+ // Runtime commands (start/stop/restart/logs) talk to the shared daemon so
33
+ // services outlive this CLI invocation and are visible to every session.
34
+ const daemon = options.daemon ?? createDaemonConnection();
36
35
  try {
37
36
  const [command, subcommand, ...rest] = args;
38
37
  if (command === "setup") {
@@ -44,6 +43,12 @@ export async function runCli(args, options = {}) {
44
43
  if (command === "git") {
45
44
  return await runGitCli(subcommand, rest, stdout, configStore);
46
45
  }
46
+ if (command === "agents") {
47
+ return await runAgentsCli(subcommand, rest, stdout);
48
+ }
49
+ if (command === "profile") {
50
+ return await runProfileCli(subcommand, rest, stdout);
51
+ }
47
52
  if (command === "add" && subcommand === "service") {
48
53
  const name = rest[0];
49
54
  const flags = parseFlags(rest.slice(1));
@@ -127,7 +132,8 @@ export async function runCli(args, options = {}) {
127
132
  if (!name) {
128
133
  throw new UsageError("service name is required");
129
134
  }
130
- for (const entry of logStore.read(name, 200)) {
135
+ const client = await daemon.client();
136
+ for (const entry of await client.logs(name, 200)) {
131
137
  stdout(`${entry.timestamp}\t${entry.stream}\t${entry.text}`);
132
138
  }
133
139
  return 0;
@@ -139,15 +145,16 @@ export async function runCli(args, options = {}) {
139
145
  }
140
146
  const config = await configStore.load();
141
147
  const isBundle = config.bundles.some((bundle) => bundle.name === name);
148
+ const client = await daemon.client();
142
149
  const result = command === "start"
143
150
  ? isBundle
144
- ? await manager.startBundle(name)
145
- : await manager.startService(name)
151
+ ? await client.startBundle(name)
152
+ : await client.startService(name)
146
153
  : command === "stop"
147
154
  ? isBundle
148
- ? await manager.stopBundle(name)
149
- : await manager.stopService(name)
150
- : await manager.restartService(name);
155
+ ? await client.stopBundle(name)
156
+ : await client.stopService(name)
157
+ : await client.restartService(name);
151
158
  stdout(JSON.stringify(result, null, 2));
152
159
  return 0;
153
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface DaemonCliOptions {
2
+ statePath?: string;
3
+ port?: number;
4
+ stdout?: (line: string) => void;
5
+ stderr?: (line: string) => void;
6
+ }
7
+ /**
8
+ * `nomoreide daemon [status|stop|restart] [--port=N]`.
9
+ *
10
+ * Bare `nomoreide daemon` runs the machine-global daemon in the foreground —
11
+ * the process `ensureDaemon()` spawns detached. It owns every spawned service
12
+ * and uses global state dirs (`~/.nomoreide/logs`, `~/.nomoreide`), so any
13
+ * session on the machine sees the same services and logs.
14
+ */
15
+ export declare function runDaemonCli(args: string[], options?: DaemonCliOptions): Promise<number>;
@@ -0,0 +1,139 @@
1
+ import { rmSync } from "node:fs";
2
+ import { mkdir, rm, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { appVersion } from "../core/app-version.js";
6
+ import { DaemonClient } from "../core/daemon-client.js";
7
+ import { defaultDaemonStatePath, ensureDaemon, probeDaemon, readDaemonState, resolveDaemonPort, } from "../core/daemon-lifecycle.js";
8
+ import { createWebServer } from "../web/server.js";
9
+ /**
10
+ * `nomoreide daemon [status|stop|restart] [--port=N]`.
11
+ *
12
+ * Bare `nomoreide daemon` runs the machine-global daemon in the foreground —
13
+ * the process `ensureDaemon()` spawns detached. It owns every spawned service
14
+ * and uses global state dirs (`~/.nomoreide/logs`, `~/.nomoreide`), so any
15
+ * session on the machine sees the same services and logs.
16
+ */
17
+ export async function runDaemonCli(args, options = {}) {
18
+ const stdout = options.stdout ?? ((line) => console.log(line));
19
+ const stderr = options.stderr ?? ((line) => console.error(line));
20
+ const statePath = options.statePath ?? defaultDaemonStatePath();
21
+ const subcommand = args.find((arg) => !arg.startsWith("--"));
22
+ const portArg = args.find((arg) => arg.startsWith("--port="));
23
+ const port = options.port ??
24
+ (portArg ? Number(portArg.slice("--port=".length)) : resolveDaemonPort());
25
+ if (subcommand === "status") {
26
+ return await printStatus(statePath, port, stdout);
27
+ }
28
+ if (subcommand === "stop") {
29
+ return await stopDaemon(statePath, port, stdout, stderr);
30
+ }
31
+ if (subcommand === "restart") {
32
+ const stopped = await stopDaemon(statePath, port, stdout, stderr);
33
+ if (stopped !== 0)
34
+ return stopped;
35
+ const result = await ensureDaemon({ statePath, port });
36
+ stdout(`NoMoreIDE daemon restarted: ${result.url} (pid ${result.pid})`);
37
+ return 0;
38
+ }
39
+ if (subcommand !== undefined) {
40
+ stderr("Usage: nomoreide daemon [status|stop|restart] [--port=N]");
41
+ return 1;
42
+ }
43
+ return await runDaemon(statePath, port, stderr);
44
+ }
45
+ async function runDaemon(statePath, port, stderr) {
46
+ const stateDir = join(homedir(), ".nomoreide");
47
+ let server;
48
+ try {
49
+ server = await createWebServer({
50
+ logDir: join(stateDir, "logs"),
51
+ cwd: process.cwd(),
52
+ port,
53
+ onDaemonShutdown: async () => {
54
+ await rm(statePath, { force: true });
55
+ process.exit(0);
56
+ },
57
+ }).start();
58
+ }
59
+ catch (error) {
60
+ const code = error.code;
61
+ if (code === "EADDRINUSE") {
62
+ // Spawn race: another daemon won the bind — exit quietly so the
63
+ // session that spawned us adopts the winner via its health poll.
64
+ stderr(`NoMoreIDE daemon already listening on port ${port}; exiting.`);
65
+ return 0;
66
+ }
67
+ throw error;
68
+ }
69
+ const state = {
70
+ pid: process.pid,
71
+ url: server.url,
72
+ port: server.port,
73
+ version: appVersion(),
74
+ startedAt: new Date().toISOString(),
75
+ };
76
+ await mkdir(dirname(statePath), { recursive: true });
77
+ await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
78
+ // ProcessManager's signal handlers stop services then re-raise; this exit
79
+ // hook only has to clear the state file so the next ensureDaemon respawns.
80
+ process.once("exit", () => {
81
+ try {
82
+ rmSync(statePath, { force: true });
83
+ }
84
+ catch {
85
+ // Best effort — a stale file is also caught by the pid-liveness check.
86
+ }
87
+ });
88
+ stderr(`NoMoreIDE daemon v${state.version}: ${server.url} (pid ${state.pid})`);
89
+ return await new Promise(() => {
90
+ // Runs until a signal or /api/daemon/shutdown exits the process.
91
+ });
92
+ }
93
+ async function printStatus(statePath, port, stdout) {
94
+ const state = await readDaemonState(statePath);
95
+ const url = state?.url ?? `http://127.0.0.1:${port}`;
96
+ const probe = await probeDaemon(url);
97
+ if (probe.kind !== "nomoreide") {
98
+ stdout(`NoMoreIDE daemon: not running (probed ${url})`);
99
+ return 1;
100
+ }
101
+ const version = probe.health.version ?? state?.version ?? "unknown";
102
+ const pid = probe.health.pid ?? state?.pid;
103
+ stdout(`NoMoreIDE daemon: running at ${url} (pid ${pid ?? "?"}, v${version})`);
104
+ const client = new DaemonClient(url);
105
+ const status = await client.status();
106
+ const services = Object.values(status.services);
107
+ const running = services.filter((service) => service.state === "running");
108
+ stdout(`Services: ${running.length} running / ${services.length} known`);
109
+ for (const service of running) {
110
+ stdout(` ${service.name} pid ${service.pid ?? "?"} ${service.url ?? ""}`);
111
+ }
112
+ return 0;
113
+ }
114
+ async function stopDaemon(statePath, port, stdout, stderr) {
115
+ const state = await readDaemonState(statePath);
116
+ const url = state?.url ?? `http://127.0.0.1:${port}`;
117
+ const probe = await probeDaemon(url);
118
+ if (probe.kind === "down") {
119
+ await rm(statePath, { force: true });
120
+ stdout("NoMoreIDE daemon is not running.");
121
+ return 0;
122
+ }
123
+ if (probe.kind === "foreign") {
124
+ stderr(`Port at ${url} is held by a non-NoMoreIDE process; not touching it.`);
125
+ return 1;
126
+ }
127
+ await new DaemonClient(url).shutdown();
128
+ const deadline = Date.now() + 10_000;
129
+ while (Date.now() < deadline) {
130
+ if ((await probeDaemon(url)).kind === "down") {
131
+ stdout("NoMoreIDE daemon stopped (all services shut down).");
132
+ return 0;
133
+ }
134
+ await new Promise((resolveSleep) => setTimeout(resolveSleep, 200));
135
+ }
136
+ stderr("Daemon did not exit within 10s; its services may still be stopping.");
137
+ return 1;
138
+ }
139
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Agent profiles on the CLI (ROR-64) — same core as the UI and MCP tools. */
2
+ export declare function runProfileCli(subcommand: string | undefined, args: string[], stdout: (line: string) => void): Promise<number>;
@@ -0,0 +1,167 @@
1
+ import { applyProfile, createRegistryTokenManager, deleteProfile, exportProfile, getProfile, importProfile, installProfileFromRegistry, listProfiles, previewProfileApply, publishProfileToRegistry, resolveRegistryApiBaseUrl, resolveRegistryApiToken, snapshotProfileFromAgent, } from "../core/agent-profiles/index.js";
2
+ import { AGENT_NAMES } from "../core/agent-env/index.js";
3
+ import { UsageError } from "./errors.js";
4
+ import { parseFlags } from "./flags.js";
5
+ const USAGE = [
6
+ "Usage: nomoreide profile <subcommand>",
7
+ " list saved profiles",
8
+ " show <name> full profile JSON",
9
+ " snapshot <agent> <name> [--description <text>]",
10
+ " apply <name> <agent> [--dry-run] [--skip-mcps a,b] [--skip-skills x,y]",
11
+ " export <name> [--output <path>] credential-redacted .tar.gz",
12
+ " import <archive> [--force] [--as <name>]",
13
+ " delete <name>",
14
+ " publish <name> --slug <slug> --title <title> [--version <v>] [--summary <text>]",
15
+ " install <slug> [--force] [--as <name>] install from the hosted registry",
16
+ ].join("\n");
17
+ /** Agent profiles on the CLI (ROR-64) — same core as the UI and MCP tools. */
18
+ export async function runProfileCli(subcommand, args, stdout) {
19
+ const cwd = process.cwd();
20
+ const flags = parseFlags(args);
21
+ const positional = args.filter((arg, index) => {
22
+ if (arg.startsWith("--"))
23
+ return false;
24
+ const previous = args[index - 1];
25
+ return !(previous?.startsWith("--") && !previous.includes("="));
26
+ });
27
+ const has = (flag) => args.includes(flag);
28
+ if (subcommand === undefined || subcommand === "list") {
29
+ const profiles = await listProfiles();
30
+ if (profiles.length === 0) {
31
+ stdout("No profiles yet. Create one with: nomoreide profile snapshot <agent> <name>");
32
+ return 0;
33
+ }
34
+ stdout("Name\tMCPs\tSkills\tUpdated\tDescription");
35
+ for (const profile of profiles) {
36
+ stdout(`${profile.name}\t${profile.mcpCount}\t${profile.skillCount}\t${profile.updatedAt}\t${profile.description ?? ""}`);
37
+ }
38
+ return 0;
39
+ }
40
+ if (subcommand === "show") {
41
+ const name = requirePositional(positional[0], "profile name");
42
+ stdout(JSON.stringify(await getProfile(name), null, 2));
43
+ return 0;
44
+ }
45
+ if (subcommand === "snapshot") {
46
+ const agent = requireAgent(positional[0]);
47
+ const name = requirePositional(positional[1], "profile name");
48
+ const profile = await snapshotProfileFromAgent({
49
+ agent,
50
+ name,
51
+ description: flags.description,
52
+ cwd,
53
+ });
54
+ stdout(`Snapshotted ${agent} into "${profile.name}" (${Object.keys(profile.mcps).length} MCPs, ${profile.skills.length} skills)`);
55
+ return 0;
56
+ }
57
+ if (subcommand === "apply") {
58
+ const name = requirePositional(positional[0], "profile name");
59
+ const agent = requireAgent(positional[1]);
60
+ if (has("--dry-run")) {
61
+ const preview = await previewProfileApply({ cwd, name, agent });
62
+ stdout("Item\tStatus");
63
+ for (const item of preview.items) {
64
+ const warnings = item.warnings.length > 0 ? ` (${item.warnings.join("; ")})` : "";
65
+ stdout(`${item.category} ${item.name}\t${item.status}${warnings}`);
66
+ }
67
+ if (preview.unresolvedCredentials.length > 0) {
68
+ stdout(`Unresolved credentials: ${preview.unresolvedCredentials.join(", ")}`);
69
+ }
70
+ return 0;
71
+ }
72
+ const result = await applyProfile({
73
+ cwd,
74
+ name,
75
+ agent,
76
+ skip: { mcps: splitList(flags.skipMcps), skills: splitList(flags.skipSkills) },
77
+ });
78
+ stdout(`Applied "${result.profile}" to ${result.agent}: ${result.mcpsApplied.length} MCPs, ${result.skillsApplied.length} skills` +
79
+ (result.skipped.length > 0 ? `, skipped ${result.skipped.join(", ")}` : ""));
80
+ for (const backup of result.backups)
81
+ stdout(`Backup: ${backup}`);
82
+ return 0;
83
+ }
84
+ if (subcommand === "export") {
85
+ const name = requirePositional(positional[0], "profile name");
86
+ const result = await exportProfile({ name, outputPath: flags.output, cwd });
87
+ stdout(`Exported to ${result.archivePath} (credentials redacted)`);
88
+ if (result.credentials.length > 0) {
89
+ stdout(`Importers must supply: ${result.credentials.map((spec) => spec.key).join(", ")}`);
90
+ }
91
+ return 0;
92
+ }
93
+ if (subcommand === "import") {
94
+ const archivePath = requirePositional(positional[0], "archive path");
95
+ const result = await importProfile({ archivePath, force: has("--force"), as: flags.as });
96
+ stdout(`Imported "${result.name}" (${result.mcpCount} MCPs, ${result.skillCount} skills)`);
97
+ reportMissingCredentials(result.missingCredentials, stdout);
98
+ return 0;
99
+ }
100
+ if (subcommand === "delete") {
101
+ const name = requirePositional(positional[0], "profile name");
102
+ await deleteProfile(name);
103
+ stdout(`Deleted profile "${name}"`);
104
+ return 0;
105
+ }
106
+ if (subcommand === "publish") {
107
+ const name = requirePositional(positional[0], "profile name");
108
+ if (!flags.slug || !flags.title)
109
+ throw new UsageError("--slug and --title are required");
110
+ const tokenManager = createRegistryTokenManager();
111
+ if ((await tokenManager.getAccessToken()) === null) {
112
+ throw new UsageError("Not signed in to the registry. Sign in from the web UI (Agent Environments) or set BRAINCTL_API_TOKEN.");
113
+ }
114
+ const result = await publishProfileToRegistry({
115
+ name,
116
+ slug: flags.slug,
117
+ title: flags.title,
118
+ summary: flags.summary,
119
+ version: flags.version,
120
+ cwd,
121
+ apiBaseUrl: await resolveRegistryApiBaseUrl(),
122
+ fetch: (input, init) => tokenManager.authenticatedFetch(typeof input === "string" ? input : input.toString(), init),
123
+ });
124
+ stdout(`Published "${result.slug}" v${result.version} to the registry (credentials redacted)`);
125
+ return 0;
126
+ }
127
+ if (subcommand === "install") {
128
+ const slug = requirePositional(positional[0], "registry slug");
129
+ const result = await installProfileFromRegistry({
130
+ slug,
131
+ force: has("--force"),
132
+ as: flags.as,
133
+ apiBaseUrl: await resolveRegistryApiBaseUrl(),
134
+ token: (await resolveRegistryApiToken())?.token,
135
+ });
136
+ stdout(`Installed "${result.name}" v${result.version} (${result.mcpCount} MCPs, ${result.skillCount} skills)`);
137
+ reportMissingCredentials(result.missingCredentials, stdout);
138
+ return 0;
139
+ }
140
+ throw new UsageError(USAGE);
141
+ }
142
+ function requirePositional(value, label) {
143
+ if (!value)
144
+ throw new UsageError(`${label} is required`);
145
+ return value;
146
+ }
147
+ function requireAgent(value) {
148
+ if (!value || !AGENT_NAMES.includes(value)) {
149
+ throw new UsageError(`agent is required (one of: ${AGENT_NAMES.join(", ")})`);
150
+ }
151
+ return value;
152
+ }
153
+ function splitList(value) {
154
+ if (!value)
155
+ return undefined;
156
+ const items = value
157
+ .split(",")
158
+ .map((item) => item.trim())
159
+ .filter(Boolean);
160
+ return items.length > 0 ? items : undefined;
161
+ }
162
+ function reportMissingCredentials(missing, stdout) {
163
+ if (missing.length === 0)
164
+ return;
165
+ stdout(`Credentials still needed (placeholders kept): ${missing.map((spec) => spec.key).join(", ")}`);
166
+ }
167
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/cli/profile.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export declare const pendingChangeSchema: z.ZodObject<{
18
18
  }, "strip", z.ZodTypeAny, {
19
19
  action: "remove" | "copy" | "move";
20
20
  name: string;
21
- category: "mcp" | "skill";
21
+ category: "skill" | "mcp";
22
22
  sourceAgent: "claude" | "codex" | "antigravity";
23
23
  sourceScope: "user" | "project";
24
24
  targetAgent?: "claude" | "codex" | "antigravity" | undefined;
@@ -26,7 +26,7 @@ export declare const pendingChangeSchema: z.ZodObject<{
26
26
  }, {
27
27
  action: "remove" | "copy" | "move";
28
28
  name: string;
29
- category: "mcp" | "skill";
29
+ category: "skill" | "mcp";
30
30
  sourceAgent: "claude" | "codex" | "antigravity";
31
31
  sourceScope?: "user" | "project" | undefined;
32
32
  targetAgent?: "claude" | "codex" | "antigravity" | undefined;
@@ -44,7 +44,7 @@ export declare const pendingChangesSchema: z.ZodArray<z.ZodObject<{
44
44
  }, "strip", z.ZodTypeAny, {
45
45
  action: "remove" | "copy" | "move";
46
46
  name: string;
47
- category: "mcp" | "skill";
47
+ category: "skill" | "mcp";
48
48
  sourceAgent: "claude" | "codex" | "antigravity";
49
49
  sourceScope: "user" | "project";
50
50
  targetAgent?: "claude" | "codex" | "antigravity" | undefined;
@@ -52,7 +52,7 @@ export declare const pendingChangesSchema: z.ZodArray<z.ZodObject<{
52
52
  }, {
53
53
  action: "remove" | "copy" | "move";
54
54
  name: string;
55
- category: "mcp" | "skill";
55
+ category: "skill" | "mcp";
56
56
  sourceAgent: "claude" | "codex" | "antigravity";
57
57
  sourceScope?: "user" | "project" | undefined;
58
58
  targetAgent?: "claude" | "codex" | "antigravity" | undefined;
@@ -1,5 +1,5 @@
1
1
  export declare const DEFAULT_REGISTRY_API_BASE_URL = "https://api.brainctl.net";
2
- export declare const DEFAULT_REGISTRY_FRONTEND_URL = "https://app.brainctl.net";
2
+ export declare const DEFAULT_REGISTRY_FRONTEND_URL = "https://www.brainctl.net";
3
3
  export type RegistryConfigKey = "apiBaseUrl" | "apiToken" | "apiRefreshToken" | "apiFrontendUrl";
4
4
  export interface RegistryConfig {
5
5
  apiBaseUrl?: string;