@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.
- package/dist/index.js +338 -40
- 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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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)) :
|
|
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(
|
|
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,
|
|
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
|
-
|
|
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(
|
|
17894
|
+
then: function(resolve4, reject) {
|
|
17599
17895
|
didAwaitActCall = true;
|
|
17600
17896
|
prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
|
|
17601
|
-
return recursivelyFlushAsyncActWork(returnValue$jscomp$0,
|
|
17602
|
-
})) :
|
|
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(
|
|
23100
|
-
entangledListeners.push(
|
|
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(
|
|
23125
|
-
listeners.push(
|
|
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((
|
|
53533
|
-
this.resolveExitPromise =
|
|
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((
|
|
54803
|
+
return new Promise((resolve4) => {
|
|
54508
54804
|
execFileCb("tmux", args, { encoding: "utf8", timeout: 5000 }, (error48, stdout) => {
|
|
54509
54805
|
if (error48) {
|
|
54510
|
-
|
|
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
|
-
|
|
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
|
|
54556
|
-
import { join as
|
|
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 =
|
|
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 =
|
|
54779
|
-
REGISTRY_PATH =
|
|
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
|
|
54796
|
-
import { homedir as
|
|
54797
|
-
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";
|
|
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 &&
|
|
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 &&
|
|
55105
|
+
if (envPath && existsSync5(envPath)) {
|
|
54810
55106
|
return envPath;
|
|
54811
55107
|
}
|
|
54812
|
-
const home =
|
|
55108
|
+
const home = homedir5();
|
|
54813
55109
|
const commonPaths = [
|
|
54814
|
-
|
|
55110
|
+
join5(home, ".bun", "bin", "claude"),
|
|
54815
55111
|
"/opt/homebrew/bin/claude",
|
|
54816
55112
|
"/usr/local/bin/claude",
|
|
54817
|
-
|
|
55113
|
+
join5(home, ".local", "bin", "claude")
|
|
54818
55114
|
];
|
|
54819
55115
|
for (const path of commonPaths) {
|
|
54820
|
-
if (
|
|
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
|
|
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.
|
|
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
|
|
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 });
|