@meet-ai/cli 0.0.20 → 0.0.22

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 (2) hide show
  1. package/dist/index.js +338 -40
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -14690,6 +14690,21 @@ function createClient(baseUrl, apiKey) {
14690
14690
  return res.text();
14691
14691
  });
14692
14692
  },
14693
+ async sendCommands(roomId, payload) {
14694
+ return withRetry(async () => {
14695
+ const res = await fetch(`${baseUrl}/api/rooms/${roomId}/commands`, {
14696
+ method: "POST",
14697
+ headers: headers(),
14698
+ body: payload
14699
+ });
14700
+ if (!res.ok) {
14701
+ const err2 = await res.json().catch(() => ({}));
14702
+ const msg = err2.error;
14703
+ throw new Error(typeof msg === "string" ? msg : msg ? JSON.stringify(msg) : `HTTP ${res.status}`);
14704
+ }
14705
+ return res.text();
14706
+ });
14707
+ },
14693
14708
  async sendTasks(roomId, payload) {
14694
14709
  return withRetry(async () => {
14695
14710
  const res = await fetch(`${baseUrl}/api/rooms/${roomId}/tasks`, {
@@ -16803,10 +16818,10 @@ var init_command15 = __esm(() => {
16803
16818
  });
16804
16819
 
16805
16820
  // src/commands/setup-hooks/usecase.ts
16806
- import { readFile, writeFile, mkdir } from "node:fs/promises";
16807
16821
  import { existsSync as existsSync2 } from "node:fs";
16808
- import { resolve as resolve2, dirname as dirname2 } from "node:path";
16822
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
16809
16823
  import { homedir as homedir2 } from "node:os";
16824
+ import { resolve as resolve2, dirname as dirname2 } from "node:path";
16810
16825
  function isMeetAiHook(entry) {
16811
16826
  return entry.hooks?.some((h) => typeof h.command === "string" && h.command.startsWith("meet-ai hook ")) ?? false;
16812
16827
  }
@@ -16848,6 +16863,16 @@ function mergeHooks(existing) {
16848
16863
  }
16849
16864
  }
16850
16865
  }
16866
+ for (const event of Object.keys(result)) {
16867
+ const newMatchers = MEET_AI_HOOKS[event] ?? [];
16868
+ result[event] = result[event].filter((m) => {
16869
+ if (!isMeetAiHook(m))
16870
+ return true;
16871
+ return newMatchers.some((nm) => nm.matcher === m.matcher);
16872
+ });
16873
+ if (result[event].length === 0)
16874
+ delete result[event];
16875
+ }
16851
16876
  return { merged: result, added };
16852
16877
  }
16853
16878
  function removeHooks(existing) {
@@ -16938,7 +16963,7 @@ var init_usecase14 = __esm(() => {
16938
16963
  {
16939
16964
  type: "command",
16940
16965
  command: "meet-ai hook plan-review",
16941
- timeout: 2592000
16966
+ timeout: 2147483
16942
16967
  }
16943
16968
  ]
16944
16969
  },
@@ -16953,7 +16978,7 @@ var init_usecase14 = __esm(() => {
16953
16978
  ]
16954
16979
  },
16955
16980
  {
16956
- matcher: ".*",
16981
+ matcher: "^(?!ExitPlanMode$|AskUserQuestion$).*",
16957
16982
  hooks: [
16958
16983
  {
16959
16984
  type: "command",
@@ -17013,6 +17038,277 @@ var init_command16 = __esm(() => {
17013
17038
  });
17014
17039
  });
17015
17040
 
17041
+ // src/commands/list-commands/usecase.ts
17042
+ import { existsSync as existsSync3 } from "node:fs";
17043
+ import { readFile as readFile2, readdir } from "node:fs/promises";
17044
+ import { homedir as homedir3 } from "node:os";
17045
+ import { join as join3, resolve as resolve3 } from "node:path";
17046
+ function parseYamlFrontmatter(content) {
17047
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
17048
+ if (!match)
17049
+ return null;
17050
+ const body = match[1];
17051
+ const nameMatch = body.match(/^name:\s*(.+)$/m);
17052
+ const descMatch = body.match(/^description:\s*(.+)$/m);
17053
+ return {
17054
+ name: nameMatch?.[1]?.trim(),
17055
+ description: descMatch?.[1]?.trim()
17056
+ };
17057
+ }
17058
+ async function readSkillsFromDir(baseDir, source, scope) {
17059
+ const skillsDir = join3(baseDir, "skills");
17060
+ if (!existsSync3(skillsDir))
17061
+ return [];
17062
+ let entries;
17063
+ try {
17064
+ entries = await readdir(skillsDir);
17065
+ } catch {
17066
+ return [];
17067
+ }
17068
+ const results = [];
17069
+ for (const entry of entries) {
17070
+ const skillFile = join3(skillsDir, entry, "SKILL.md");
17071
+ if (!existsSync3(skillFile))
17072
+ continue;
17073
+ try {
17074
+ const content = await readFile2(skillFile, "utf-8");
17075
+ const fm = parseYamlFrontmatter(content);
17076
+ if (!fm)
17077
+ continue;
17078
+ if (!fm.description)
17079
+ continue;
17080
+ results.push({
17081
+ name: fm.name ?? entry,
17082
+ description: fm.description,
17083
+ type: "skill",
17084
+ source,
17085
+ scope
17086
+ });
17087
+ } catch {}
17088
+ }
17089
+ return results;
17090
+ }
17091
+ async function readCommandsFromDir(commandsDir, source, scope) {
17092
+ if (!existsSync3(commandsDir))
17093
+ return [];
17094
+ const results = [];
17095
+ async function scanDir(dir) {
17096
+ let entries;
17097
+ try {
17098
+ entries = await readdir(dir, { withFileTypes: true });
17099
+ } catch {
17100
+ return;
17101
+ }
17102
+ for (const entry of entries) {
17103
+ const fullPath = join3(dir, entry.name);
17104
+ if (entry.isDirectory()) {
17105
+ await scanDir(fullPath);
17106
+ } else if (entry.isFile() && entry.name.endsWith(".md")) {
17107
+ try {
17108
+ const content = await readFile2(fullPath, "utf-8");
17109
+ const fm = parseYamlFrontmatter(content);
17110
+ if (!fm || !fm.description)
17111
+ continue;
17112
+ const fallbackName = entry.name.slice(0, -3);
17113
+ results.push({
17114
+ name: fm.name ?? fallbackName,
17115
+ description: fm.description,
17116
+ type: "command",
17117
+ source,
17118
+ scope
17119
+ });
17120
+ } catch {}
17121
+ }
17122
+ }
17123
+ }
17124
+ await scanDir(commandsDir);
17125
+ return results;
17126
+ }
17127
+ async function readSettings2(settingsPath) {
17128
+ if (!existsSync3(settingsPath))
17129
+ return {};
17130
+ try {
17131
+ const raw = await readFile2(settingsPath, "utf-8");
17132
+ return JSON.parse(raw.trim() || "{}");
17133
+ } catch {
17134
+ return {};
17135
+ }
17136
+ }
17137
+ async function readInstalledPlugins(pluginsFile) {
17138
+ if (!existsSync3(pluginsFile))
17139
+ return {};
17140
+ try {
17141
+ const raw = await readFile2(pluginsFile, "utf-8");
17142
+ const parsed = JSON.parse(raw);
17143
+ return parsed.plugins ?? {};
17144
+ } catch {
17145
+ return {};
17146
+ }
17147
+ }
17148
+ async function listCommands(options) {
17149
+ const projectPath = resolve3(options.projectPath ?? process.cwd());
17150
+ const userClaudeDir = options._userClaudeDir ?? join3(homedir3(), ".claude");
17151
+ const pluginsFile = options._pluginsFile ?? join3(homedir3(), ".claude", "plugins", "installed_plugins.json");
17152
+ const results = [];
17153
+ for (const cmd of BUILT_IN_COMMANDS) {
17154
+ results.push({ ...cmd, type: "command", source: "built-in", scope: "user" });
17155
+ }
17156
+ const userSkills = await readSkillsFromDir(userClaudeDir, "standalone", "user");
17157
+ results.push(...userSkills);
17158
+ const projectClaudeDir = join3(projectPath, ".claude");
17159
+ const projectSkills = await readSkillsFromDir(projectClaudeDir, "standalone", "project");
17160
+ results.push(...projectSkills);
17161
+ const userSettings = await readSettings2(join3(userClaudeDir, "settings.json"));
17162
+ const projectSettings = await readSettings2(join3(projectClaudeDir, "settings.json"));
17163
+ const userEnabled = userSettings.enabledPlugins ?? {};
17164
+ const projectEnabled = projectSettings.enabledPlugins ?? {};
17165
+ const enabledPlugins = new Map;
17166
+ for (const scopeName of Object.keys(userEnabled)) {
17167
+ enabledPlugins.set(scopeName, "user");
17168
+ }
17169
+ for (const scopeName of Object.keys(projectEnabled)) {
17170
+ enabledPlugins.set(scopeName, "project");
17171
+ }
17172
+ if (enabledPlugins.size > 0) {
17173
+ const installedPlugins = await readInstalledPlugins(pluginsFile);
17174
+ for (const [scopeName, pluginScope] of enabledPlugins) {
17175
+ const installations = installedPlugins[scopeName];
17176
+ if (!installations || installations.length === 0)
17177
+ continue;
17178
+ const { installPath } = installations[0];
17179
+ const source = `plugin:${scopeName}`;
17180
+ const pluginCommands = await readCommandsFromDir(join3(installPath, "commands"), source, pluginScope);
17181
+ results.push(...pluginCommands);
17182
+ const pluginSkills = await readSkillsFromDir(installPath, source, pluginScope);
17183
+ results.push(...pluginSkills);
17184
+ }
17185
+ }
17186
+ return results;
17187
+ }
17188
+ var BUILT_IN_COMMANDS;
17189
+ var init_usecase15 = __esm(() => {
17190
+ BUILT_IN_COMMANDS = [
17191
+ { name: "help", description: "Get help with using Claude Code" },
17192
+ { name: "model", description: "Switch AI model" },
17193
+ { name: "clear", description: "Clear conversation history" },
17194
+ { name: "compact", description: "Compact conversation context" },
17195
+ { name: "fast", description: "Toggle fast mode" },
17196
+ { name: "cost", description: "Show usage costs" },
17197
+ { name: "resume", description: "Resume previous session" }
17198
+ ];
17199
+ });
17200
+
17201
+ // src/commands/list-commands/command.ts
17202
+ var exports_command17 = {};
17203
+ __export(exports_command17, {
17204
+ default: () => command_default17
17205
+ });
17206
+ var command_default17;
17207
+ var init_command17 = __esm(() => {
17208
+ init_dist();
17209
+ init_usecase15();
17210
+ init_output();
17211
+ command_default17 = defineCommand({
17212
+ meta: {
17213
+ name: "list-commands",
17214
+ description: "List all available Claude Code slash commands and skills as JSON"
17215
+ },
17216
+ args: {
17217
+ "project-path": {
17218
+ type: "string",
17219
+ description: "Path to the project root (defaults to cwd)"
17220
+ }
17221
+ },
17222
+ async run({ args }) {
17223
+ try {
17224
+ const commands = await listCommands({
17225
+ projectPath: args["project-path"]
17226
+ });
17227
+ console.log(JSON.stringify(commands, null, 2));
17228
+ } catch (error48) {
17229
+ err(error48 instanceof Error ? error48.message : String(error48));
17230
+ process.exit(1);
17231
+ }
17232
+ }
17233
+ });
17234
+ });
17235
+
17236
+ // src/commands/send-commands/schema.ts
17237
+ var SendCommandsInput;
17238
+ var init_schema10 = __esm(() => {
17239
+ init_zod();
17240
+ SendCommandsInput = exports_external.object({
17241
+ roomId: exports_external.string().min(1, "Room ID is required").regex(/^[a-zA-Z0-9_-]+$/, "Room ID must contain only alphanumeric characters, hyphens, and underscores"),
17242
+ payload: exports_external.string().min(1, "JSON payload is required").refine((val) => {
17243
+ try {
17244
+ JSON.parse(val);
17245
+ return true;
17246
+ } catch {
17247
+ return false;
17248
+ }
17249
+ }, { message: "Payload must be valid JSON" })
17250
+ });
17251
+ });
17252
+
17253
+ // src/commands/send-commands/usecase.ts
17254
+ async function sendCommands(client, input) {
17255
+ const parsed = SendCommandsInput.parse(input);
17256
+ await client.sendCommands(parsed.roomId, parsed.payload);
17257
+ ok("Commands sent");
17258
+ }
17259
+ var init_usecase16 = __esm(() => {
17260
+ init_schema10();
17261
+ init_output();
17262
+ });
17263
+
17264
+ // src/commands/send-commands/command.ts
17265
+ var exports_command18 = {};
17266
+ __export(exports_command18, {
17267
+ default: () => command_default18
17268
+ });
17269
+ var command_default18;
17270
+ var init_command18 = __esm(() => {
17271
+ init_dist();
17272
+ init_client_factory();
17273
+ init_usecase16();
17274
+ init_output();
17275
+ command_default18 = defineCommand({
17276
+ meta: {
17277
+ name: "send-commands",
17278
+ description: "Send commands list to a room"
17279
+ },
17280
+ args: {
17281
+ roomId: {
17282
+ type: "positional",
17283
+ description: "Room ID to send commands to",
17284
+ required: true
17285
+ },
17286
+ payload: {
17287
+ type: "positional",
17288
+ description: "JSON commands payload",
17289
+ required: false
17290
+ }
17291
+ },
17292
+ async run({ args }) {
17293
+ try {
17294
+ const client = getClient();
17295
+ let payload = args.payload;
17296
+ if (!payload) {
17297
+ const chunks = [];
17298
+ for await (const chunk of process.stdin) {
17299
+ chunks.push(chunk);
17300
+ }
17301
+ payload = Buffer.concat(chunks).toString("utf8").trim();
17302
+ }
17303
+ await sendCommands(client, { roomId: args.roomId, payload });
17304
+ } catch (error48) {
17305
+ err(error48 instanceof Error ? error48.message : String(error48));
17306
+ process.exit(1);
17307
+ }
17308
+ }
17309
+ });
17310
+ });
17311
+
17016
17312
  // ../../node_modules/.bun/react@19.2.4/node_modules/react/cjs/react.development.js
17017
17313
  var require_react_development = __commonJS((exports, module) => {
17018
17314
  (function() {
@@ -17370,14 +17666,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
17370
17666
  prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
17371
17667
  actScopeDepth = prevActScopeDepth;
17372
17668
  }
17373
- function recursivelyFlushAsyncActWork(returnValue, resolve3, reject) {
17669
+ function recursivelyFlushAsyncActWork(returnValue, resolve4, reject) {
17374
17670
  var queue = ReactSharedInternals.actQueue;
17375
17671
  if (queue !== null)
17376
17672
  if (queue.length !== 0)
17377
17673
  try {
17378
17674
  flushActQueue(queue);
17379
17675
  enqueueTask(function() {
17380
- return recursivelyFlushAsyncActWork(returnValue, resolve3, reject);
17676
+ return recursivelyFlushAsyncActWork(returnValue, resolve4, reject);
17381
17677
  });
17382
17678
  return;
17383
17679
  } catch (error48) {
@@ -17385,7 +17681,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
17385
17681
  }
17386
17682
  else
17387
17683
  ReactSharedInternals.actQueue = null;
17388
- 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve3(returnValue);
17684
+ 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve4(returnValue);
17389
17685
  }
17390
17686
  function flushActQueue(queue) {
17391
17687
  if (!isFlushing) {
@@ -17561,14 +17857,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
17561
17857
  didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
17562
17858
  });
17563
17859
  return {
17564
- then: function(resolve3, reject) {
17860
+ then: function(resolve4, reject) {
17565
17861
  didAwaitActCall = true;
17566
17862
  thenable.then(function(returnValue) {
17567
17863
  popActScope(prevActQueue, prevActScopeDepth);
17568
17864
  if (prevActScopeDepth === 0) {
17569
17865
  try {
17570
17866
  flushActQueue(queue), enqueueTask(function() {
17571
- return recursivelyFlushAsyncActWork(returnValue, resolve3, reject);
17867
+ return recursivelyFlushAsyncActWork(returnValue, resolve4, reject);
17572
17868
  });
17573
17869
  } catch (error$0) {
17574
17870
  ReactSharedInternals.thrownErrors.push(error$0);
@@ -17579,7 +17875,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
17579
17875
  reject(_thrownError);
17580
17876
  }
17581
17877
  } else
17582
- resolve3(returnValue);
17878
+ resolve4(returnValue);
17583
17879
  }, function(error48) {
17584
17880
  popActScope(prevActQueue, prevActScopeDepth);
17585
17881
  0 < ReactSharedInternals.thrownErrors.length ? (error48 = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error48)) : reject(error48);
@@ -17595,11 +17891,11 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
17595
17891
  if (0 < ReactSharedInternals.thrownErrors.length)
17596
17892
  throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
17597
17893
  return {
17598
- then: function(resolve3, reject) {
17894
+ then: function(resolve4, reject) {
17599
17895
  didAwaitActCall = true;
17600
17896
  prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
17601
- return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve3, reject);
17602
- })) : resolve3(returnValue$jscomp$0);
17897
+ return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve4, reject);
17898
+ })) : resolve4(returnValue$jscomp$0);
17603
17899
  }
17604
17900
  };
17605
17901
  };
@@ -23096,8 +23392,8 @@ It can also happen if the client has a browser extension installed which messes
23096
23392
  currentEntangledActionThenable = {
23097
23393
  status: "pending",
23098
23394
  value: undefined,
23099
- then: function(resolve3) {
23100
- entangledListeners.push(resolve3);
23395
+ then: function(resolve4) {
23396
+ entangledListeners.push(resolve4);
23101
23397
  }
23102
23398
  };
23103
23399
  }
@@ -23121,8 +23417,8 @@ It can also happen if the client has a browser extension installed which messes
23121
23417
  status: "pending",
23122
23418
  value: null,
23123
23419
  reason: null,
23124
- then: function(resolve3) {
23125
- listeners.push(resolve3);
23420
+ then: function(resolve4) {
23421
+ listeners.push(resolve4);
23126
23422
  }
23127
23423
  };
23128
23424
  thenable.then(function() {
@@ -53529,8 +53825,8 @@ class Ink {
53529
53825
  }
53530
53826
  }
53531
53827
  async waitUntilExit() {
53532
- this.exitPromise ||= new Promise((resolve3, reject) => {
53533
- this.resolveExitPromise = resolve3;
53828
+ this.exitPromise ||= new Promise((resolve4, reject) => {
53829
+ this.resolveExitPromise = resolve4;
53534
53830
  this.rejectExitPromise = reject;
53535
53831
  });
53536
53832
  if (!this.beforeExitHandler) {
@@ -54504,10 +54800,10 @@ class TmuxClient {
54504
54800
  "-S",
54505
54801
  `-${lines}`
54506
54802
  ];
54507
- return new Promise((resolve3) => {
54803
+ return new Promise((resolve4) => {
54508
54804
  execFileCb("tmux", args, { encoding: "utf8", timeout: 5000 }, (error48, stdout) => {
54509
54805
  if (error48) {
54510
- resolve3([]);
54806
+ resolve4([]);
54511
54807
  return;
54512
54808
  }
54513
54809
  const result = stdout.split(`
@@ -54515,7 +54811,7 @@ class TmuxClient {
54515
54811
  while (result.length > 0 && result[result.length - 1] === "") {
54516
54812
  result.pop();
54517
54813
  }
54518
- resolve3(result);
54814
+ resolve4(result);
54519
54815
  });
54520
54816
  });
54521
54817
  }
@@ -54552,8 +54848,8 @@ var init_tmux_client = __esm(() => {
54552
54848
 
54553
54849
  // src/lib/process-manager.ts
54554
54850
  import { mkdirSync as mkdirSync2, readFileSync as readFileSync6, writeFileSync as writeFileSync3, renameSync, lstatSync } from "node:fs";
54555
- import { homedir as homedir3 } from "node:os";
54556
- import { join as join3 } from "node:path";
54851
+ import { homedir as homedir4 } from "node:os";
54852
+ import { join as join4 } from "node:path";
54557
54853
  function readRegistry() {
54558
54854
  try {
54559
54855
  const data = readFileSync6(REGISTRY_PATH, "utf8");
@@ -54572,7 +54868,7 @@ function writeRegistry(entries) {
54572
54868
  } catch {
54573
54869
  return;
54574
54870
  }
54575
- const tmpPath = join3(REGISTRY_DIR, `sessions.${process.pid}.${Date.now()}.tmp`);
54871
+ const tmpPath = join4(REGISTRY_DIR, `sessions.${process.pid}.${Date.now()}.tmp`);
54576
54872
  writeFileSync3(tmpPath, JSON.stringify(entries, null, 2), { mode: 384 });
54577
54873
  renameSync(tmpPath, REGISTRY_PATH);
54578
54874
  }
@@ -54775,8 +55071,8 @@ var init_process_manager = __esm(() => {
54775
55071
  roomName: exports_external.string(),
54776
55072
  createdAt: exports_external.string()
54777
55073
  });
54778
- REGISTRY_DIR = join3(homedir3(), ".meet-ai");
54779
- REGISTRY_PATH = join3(REGISTRY_DIR, "sessions.json");
55074
+ REGISTRY_DIR = join4(homedir4(), ".meet-ai");
55075
+ REGISTRY_PATH = join4(REGISTRY_DIR, "sessions.json");
54780
55076
  ENV_ALLOWLIST = [
54781
55077
  "HOME",
54782
55078
  "USER",
@@ -54792,32 +55088,32 @@ var init_process_manager = __esm(() => {
54792
55088
 
54793
55089
  // src/spawner.ts
54794
55090
  import { execSync } from "node:child_process";
54795
- import { existsSync as existsSync4 } from "node:fs";
54796
- import { homedir as homedir4, platform as platform2 } from "node:os";
54797
- import { join as join4 } from "node:path";
55091
+ import { existsSync as existsSync5 } from "node:fs";
55092
+ import { homedir as homedir5, platform as platform2 } from "node:os";
55093
+ import { join as join5 } from "node:path";
54798
55094
  function findClaudeCli() {
54799
55095
  try {
54800
55096
  const command = platform2() === "win32" ? "where claude" : "which claude";
54801
55097
  const result = execSync(command, { encoding: "utf8", stdio: ["pipe", "pipe", "ignore"] }).trim();
54802
55098
  const claudePath = result.split(`
54803
55099
  `)[0].trim();
54804
- if (claudePath && existsSync4(claudePath)) {
55100
+ if (claudePath && existsSync5(claudePath)) {
54805
55101
  return claudePath;
54806
55102
  }
54807
55103
  } catch {}
54808
55104
  const envPath = process.env.MEET_AI_CLAUDE_PATH;
54809
- if (envPath && existsSync4(envPath)) {
55105
+ if (envPath && existsSync5(envPath)) {
54810
55106
  return envPath;
54811
55107
  }
54812
- const home = homedir4();
55108
+ const home = homedir5();
54813
55109
  const commonPaths = [
54814
- join4(home, ".bun", "bin", "claude"),
55110
+ join5(home, ".bun", "bin", "claude"),
54815
55111
  "/opt/homebrew/bin/claude",
54816
55112
  "/usr/local/bin/claude",
54817
- join4(home, ".local", "bin", "claude")
55113
+ join5(home, ".local", "bin", "claude")
54818
55114
  ];
54819
55115
  for (const path of commonPaths) {
54820
- if (existsSync4(path)) {
55116
+ if (existsSync5(path)) {
54821
55117
  return path;
54822
55118
  }
54823
55119
  }
@@ -56023,7 +56319,7 @@ async function startDashboard(client, config2, options) {
56023
56319
  cleanup();
56024
56320
  }
56025
56321
  var import_react31;
56026
- var init_usecase15 = __esm(async () => {
56322
+ var init_usecase17 = __esm(async () => {
56027
56323
  init_process_manager();
56028
56324
  init_tmux_client();
56029
56325
  init_spawner();
@@ -56040,7 +56336,7 @@ init_output();
56040
56336
  var main = defineCommand({
56041
56337
  meta: {
56042
56338
  name: "meet-ai",
56043
- version: "0.0.20",
56339
+ version: "0.0.22",
56044
56340
  description: "CLI for meet-ai chat rooms — create rooms, send messages, and stream via WebSocket"
56045
56341
  },
56046
56342
  args: {
@@ -56062,7 +56358,9 @@ var main = defineCommand({
56062
56358
  "download-attachment": () => Promise.resolve().then(() => (init_command9(), exports_command9)).then((m) => m.default),
56063
56359
  "generate-key": () => Promise.resolve().then(() => (init_command10(), exports_command10)).then((m) => m.default),
56064
56360
  hook: () => Promise.resolve().then(() => (init_command15(), exports_command15)).then((m) => m.default),
56065
- "setup-hooks": () => Promise.resolve().then(() => (init_command16(), exports_command16)).then((m) => m.default)
56361
+ "setup-hooks": () => Promise.resolve().then(() => (init_command16(), exports_command16)).then((m) => m.default),
56362
+ "list-commands": () => Promise.resolve().then(() => (init_command17(), exports_command17)).then((m) => m.default),
56363
+ "send-commands": () => Promise.resolve().then(() => (init_command18(), exports_command18)).then((m) => m.default)
56066
56364
  },
56067
56365
  async run({ args }) {
56068
56366
  const hasSubcommand = process.argv.length > 2;
@@ -56071,7 +56369,7 @@ var main = defineCommand({
56071
56369
  try {
56072
56370
  const { getClient: getClient2 } = await Promise.resolve().then(() => (init_client_factory(), exports_client_factory));
56073
56371
  const { getMeetAiConfig: getMeetAiConfig2 } = await Promise.resolve().then(() => (init_config(), exports_config));
56074
- const { startDashboard: startDashboard2 } = await init_usecase15().then(() => exports_usecase2);
56372
+ const { startDashboard: startDashboard2 } = await init_usecase17().then(() => exports_usecase2);
56075
56373
  const client = getClient2();
56076
56374
  const config2 = getMeetAiConfig2();
56077
56375
  await startDashboard2(client, config2, { debug: args.debug });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meet-ai/cli",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "description": "CLI for meet-ai chat rooms — create rooms, send messages, and stream via WebSocket",
5
5
  "keywords": [
6
6
  "chat",