@meet-ai/cli 0.0.21 → 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.
- package/dist/index.js +324 -36
- 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`, {
|
|
@@ -17023,6 +17038,277 @@ var init_command16 = __esm(() => {
|
|
|
17023
17038
|
});
|
|
17024
17039
|
});
|
|
17025
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
|
+
|
|
17026
17312
|
// ../../node_modules/.bun/react@19.2.4/node_modules/react/cjs/react.development.js
|
|
17027
17313
|
var require_react_development = __commonJS((exports, module) => {
|
|
17028
17314
|
(function() {
|
|
@@ -17380,14 +17666,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
17380
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. ");
|
|
17381
17667
|
actScopeDepth = prevActScopeDepth;
|
|
17382
17668
|
}
|
|
17383
|
-
function recursivelyFlushAsyncActWork(returnValue,
|
|
17669
|
+
function recursivelyFlushAsyncActWork(returnValue, resolve4, reject) {
|
|
17384
17670
|
var queue = ReactSharedInternals.actQueue;
|
|
17385
17671
|
if (queue !== null)
|
|
17386
17672
|
if (queue.length !== 0)
|
|
17387
17673
|
try {
|
|
17388
17674
|
flushActQueue(queue);
|
|
17389
17675
|
enqueueTask(function() {
|
|
17390
|
-
return recursivelyFlushAsyncActWork(returnValue,
|
|
17676
|
+
return recursivelyFlushAsyncActWork(returnValue, resolve4, reject);
|
|
17391
17677
|
});
|
|
17392
17678
|
return;
|
|
17393
17679
|
} catch (error48) {
|
|
@@ -17395,7 +17681,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
17395
17681
|
}
|
|
17396
17682
|
else
|
|
17397
17683
|
ReactSharedInternals.actQueue = null;
|
|
17398
|
-
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) :
|
|
17684
|
+
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve4(returnValue);
|
|
17399
17685
|
}
|
|
17400
17686
|
function flushActQueue(queue) {
|
|
17401
17687
|
if (!isFlushing) {
|
|
@@ -17571,14 +17857,14 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
17571
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 () => ...);"));
|
|
17572
17858
|
});
|
|
17573
17859
|
return {
|
|
17574
|
-
then: function(
|
|
17860
|
+
then: function(resolve4, reject) {
|
|
17575
17861
|
didAwaitActCall = true;
|
|
17576
17862
|
thenable.then(function(returnValue) {
|
|
17577
17863
|
popActScope(prevActQueue, prevActScopeDepth);
|
|
17578
17864
|
if (prevActScopeDepth === 0) {
|
|
17579
17865
|
try {
|
|
17580
17866
|
flushActQueue(queue), enqueueTask(function() {
|
|
17581
|
-
return recursivelyFlushAsyncActWork(returnValue,
|
|
17867
|
+
return recursivelyFlushAsyncActWork(returnValue, resolve4, reject);
|
|
17582
17868
|
});
|
|
17583
17869
|
} catch (error$0) {
|
|
17584
17870
|
ReactSharedInternals.thrownErrors.push(error$0);
|
|
@@ -17589,7 +17875,7 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
17589
17875
|
reject(_thrownError);
|
|
17590
17876
|
}
|
|
17591
17877
|
} else
|
|
17592
|
-
|
|
17878
|
+
resolve4(returnValue);
|
|
17593
17879
|
}, function(error48) {
|
|
17594
17880
|
popActScope(prevActQueue, prevActScopeDepth);
|
|
17595
17881
|
0 < ReactSharedInternals.thrownErrors.length ? (error48 = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error48)) : reject(error48);
|
|
@@ -17605,11 +17891,11 @@ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix
|
|
|
17605
17891
|
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
17606
17892
|
throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
17607
17893
|
return {
|
|
17608
|
-
then: function(
|
|
17894
|
+
then: function(resolve4, reject) {
|
|
17609
17895
|
didAwaitActCall = true;
|
|
17610
17896
|
prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
|
|
17611
|
-
return recursivelyFlushAsyncActWork(returnValue$jscomp$0,
|
|
17612
|
-
})) :
|
|
17897
|
+
return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve4, reject);
|
|
17898
|
+
})) : resolve4(returnValue$jscomp$0);
|
|
17613
17899
|
}
|
|
17614
17900
|
};
|
|
17615
17901
|
};
|
|
@@ -23106,8 +23392,8 @@ It can also happen if the client has a browser extension installed which messes
|
|
|
23106
23392
|
currentEntangledActionThenable = {
|
|
23107
23393
|
status: "pending",
|
|
23108
23394
|
value: undefined,
|
|
23109
|
-
then: function(
|
|
23110
|
-
entangledListeners.push(
|
|
23395
|
+
then: function(resolve4) {
|
|
23396
|
+
entangledListeners.push(resolve4);
|
|
23111
23397
|
}
|
|
23112
23398
|
};
|
|
23113
23399
|
}
|
|
@@ -23131,8 +23417,8 @@ It can also happen if the client has a browser extension installed which messes
|
|
|
23131
23417
|
status: "pending",
|
|
23132
23418
|
value: null,
|
|
23133
23419
|
reason: null,
|
|
23134
|
-
then: function(
|
|
23135
|
-
listeners.push(
|
|
23420
|
+
then: function(resolve4) {
|
|
23421
|
+
listeners.push(resolve4);
|
|
23136
23422
|
}
|
|
23137
23423
|
};
|
|
23138
23424
|
thenable.then(function() {
|
|
@@ -53539,8 +53825,8 @@ class Ink {
|
|
|
53539
53825
|
}
|
|
53540
53826
|
}
|
|
53541
53827
|
async waitUntilExit() {
|
|
53542
|
-
this.exitPromise ||= new Promise((
|
|
53543
|
-
this.resolveExitPromise =
|
|
53828
|
+
this.exitPromise ||= new Promise((resolve4, reject) => {
|
|
53829
|
+
this.resolveExitPromise = resolve4;
|
|
53544
53830
|
this.rejectExitPromise = reject;
|
|
53545
53831
|
});
|
|
53546
53832
|
if (!this.beforeExitHandler) {
|
|
@@ -54514,10 +54800,10 @@ class TmuxClient {
|
|
|
54514
54800
|
"-S",
|
|
54515
54801
|
`-${lines}`
|
|
54516
54802
|
];
|
|
54517
|
-
return new Promise((
|
|
54803
|
+
return new Promise((resolve4) => {
|
|
54518
54804
|
execFileCb("tmux", args, { encoding: "utf8", timeout: 5000 }, (error48, stdout) => {
|
|
54519
54805
|
if (error48) {
|
|
54520
|
-
|
|
54806
|
+
resolve4([]);
|
|
54521
54807
|
return;
|
|
54522
54808
|
}
|
|
54523
54809
|
const result = stdout.split(`
|
|
@@ -54525,7 +54811,7 @@ class TmuxClient {
|
|
|
54525
54811
|
while (result.length > 0 && result[result.length - 1] === "") {
|
|
54526
54812
|
result.pop();
|
|
54527
54813
|
}
|
|
54528
|
-
|
|
54814
|
+
resolve4(result);
|
|
54529
54815
|
});
|
|
54530
54816
|
});
|
|
54531
54817
|
}
|
|
@@ -54562,8 +54848,8 @@ var init_tmux_client = __esm(() => {
|
|
|
54562
54848
|
|
|
54563
54849
|
// src/lib/process-manager.ts
|
|
54564
54850
|
import { mkdirSync as mkdirSync2, readFileSync as readFileSync6, writeFileSync as writeFileSync3, renameSync, lstatSync } from "node:fs";
|
|
54565
|
-
import { homedir as
|
|
54566
|
-
import { join as
|
|
54851
|
+
import { homedir as homedir4 } from "node:os";
|
|
54852
|
+
import { join as join4 } from "node:path";
|
|
54567
54853
|
function readRegistry() {
|
|
54568
54854
|
try {
|
|
54569
54855
|
const data = readFileSync6(REGISTRY_PATH, "utf8");
|
|
@@ -54582,7 +54868,7 @@ function writeRegistry(entries) {
|
|
|
54582
54868
|
} catch {
|
|
54583
54869
|
return;
|
|
54584
54870
|
}
|
|
54585
|
-
const tmpPath =
|
|
54871
|
+
const tmpPath = join4(REGISTRY_DIR, `sessions.${process.pid}.${Date.now()}.tmp`);
|
|
54586
54872
|
writeFileSync3(tmpPath, JSON.stringify(entries, null, 2), { mode: 384 });
|
|
54587
54873
|
renameSync(tmpPath, REGISTRY_PATH);
|
|
54588
54874
|
}
|
|
@@ -54785,8 +55071,8 @@ var init_process_manager = __esm(() => {
|
|
|
54785
55071
|
roomName: exports_external.string(),
|
|
54786
55072
|
createdAt: exports_external.string()
|
|
54787
55073
|
});
|
|
54788
|
-
REGISTRY_DIR =
|
|
54789
|
-
REGISTRY_PATH =
|
|
55074
|
+
REGISTRY_DIR = join4(homedir4(), ".meet-ai");
|
|
55075
|
+
REGISTRY_PATH = join4(REGISTRY_DIR, "sessions.json");
|
|
54790
55076
|
ENV_ALLOWLIST = [
|
|
54791
55077
|
"HOME",
|
|
54792
55078
|
"USER",
|
|
@@ -54802,32 +55088,32 @@ var init_process_manager = __esm(() => {
|
|
|
54802
55088
|
|
|
54803
55089
|
// src/spawner.ts
|
|
54804
55090
|
import { execSync } from "node:child_process";
|
|
54805
|
-
import { existsSync as
|
|
54806
|
-
import { homedir as
|
|
54807
|
-
import { join as
|
|
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";
|
|
54808
55094
|
function findClaudeCli() {
|
|
54809
55095
|
try {
|
|
54810
55096
|
const command = platform2() === "win32" ? "where claude" : "which claude";
|
|
54811
55097
|
const result = execSync(command, { encoding: "utf8", stdio: ["pipe", "pipe", "ignore"] }).trim();
|
|
54812
55098
|
const claudePath = result.split(`
|
|
54813
55099
|
`)[0].trim();
|
|
54814
|
-
if (claudePath &&
|
|
55100
|
+
if (claudePath && existsSync5(claudePath)) {
|
|
54815
55101
|
return claudePath;
|
|
54816
55102
|
}
|
|
54817
55103
|
} catch {}
|
|
54818
55104
|
const envPath = process.env.MEET_AI_CLAUDE_PATH;
|
|
54819
|
-
if (envPath &&
|
|
55105
|
+
if (envPath && existsSync5(envPath)) {
|
|
54820
55106
|
return envPath;
|
|
54821
55107
|
}
|
|
54822
|
-
const home =
|
|
55108
|
+
const home = homedir5();
|
|
54823
55109
|
const commonPaths = [
|
|
54824
|
-
|
|
55110
|
+
join5(home, ".bun", "bin", "claude"),
|
|
54825
55111
|
"/opt/homebrew/bin/claude",
|
|
54826
55112
|
"/usr/local/bin/claude",
|
|
54827
|
-
|
|
55113
|
+
join5(home, ".local", "bin", "claude")
|
|
54828
55114
|
];
|
|
54829
55115
|
for (const path of commonPaths) {
|
|
54830
|
-
if (
|
|
55116
|
+
if (existsSync5(path)) {
|
|
54831
55117
|
return path;
|
|
54832
55118
|
}
|
|
54833
55119
|
}
|
|
@@ -56033,7 +56319,7 @@ async function startDashboard(client, config2, options) {
|
|
|
56033
56319
|
cleanup();
|
|
56034
56320
|
}
|
|
56035
56321
|
var import_react31;
|
|
56036
|
-
var
|
|
56322
|
+
var init_usecase17 = __esm(async () => {
|
|
56037
56323
|
init_process_manager();
|
|
56038
56324
|
init_tmux_client();
|
|
56039
56325
|
init_spawner();
|
|
@@ -56050,7 +56336,7 @@ init_output();
|
|
|
56050
56336
|
var main = defineCommand({
|
|
56051
56337
|
meta: {
|
|
56052
56338
|
name: "meet-ai",
|
|
56053
|
-
version: "0.0.
|
|
56339
|
+
version: "0.0.22",
|
|
56054
56340
|
description: "CLI for meet-ai chat rooms — create rooms, send messages, and stream via WebSocket"
|
|
56055
56341
|
},
|
|
56056
56342
|
args: {
|
|
@@ -56072,7 +56358,9 @@ var main = defineCommand({
|
|
|
56072
56358
|
"download-attachment": () => Promise.resolve().then(() => (init_command9(), exports_command9)).then((m) => m.default),
|
|
56073
56359
|
"generate-key": () => Promise.resolve().then(() => (init_command10(), exports_command10)).then((m) => m.default),
|
|
56074
56360
|
hook: () => Promise.resolve().then(() => (init_command15(), exports_command15)).then((m) => m.default),
|
|
56075
|
-
"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)
|
|
56076
56364
|
},
|
|
56077
56365
|
async run({ args }) {
|
|
56078
56366
|
const hasSubcommand = process.argv.length > 2;
|
|
@@ -56081,7 +56369,7 @@ var main = defineCommand({
|
|
|
56081
56369
|
try {
|
|
56082
56370
|
const { getClient: getClient2 } = await Promise.resolve().then(() => (init_client_factory(), exports_client_factory));
|
|
56083
56371
|
const { getMeetAiConfig: getMeetAiConfig2 } = await Promise.resolve().then(() => (init_config(), exports_config));
|
|
56084
|
-
const { startDashboard: startDashboard2 } = await
|
|
56372
|
+
const { startDashboard: startDashboard2 } = await init_usecase17().then(() => exports_usecase2);
|
|
56085
56373
|
const client = getClient2();
|
|
56086
56374
|
const config2 = getMeetAiConfig2();
|
|
56087
56375
|
await startDashboard2(client, config2, { debug: args.debug });
|