@alook/cli 0.0.23 → 0.0.24
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 +317 -34
- package/dist/meeting-runner.js +562 -0
- package/dist/session-runner.js +112 -4
- package/package.json +3 -2
package/dist/session-runner.js
CHANGED
|
@@ -42,6 +42,18 @@ var TASK_TYPES = {
|
|
|
42
42
|
var POLL_INTERVAL_MS = Number(process.env.POLL_INTERVAL_MS) || 3000;
|
|
43
43
|
var OFFLINE_THRESHOLD_MS = Number(process.env.OFFLINE_THRESHOLD_MS) || 9000;
|
|
44
44
|
var EVENT_POLL_INTERVAL_MS = Number(process.env.EVENT_POLL_INTERVAL_MS) || 2000;
|
|
45
|
+
var MeetingStatus = {
|
|
46
|
+
PENDING: "pending",
|
|
47
|
+
SCHEDULED: "scheduled",
|
|
48
|
+
JOINING: "joining",
|
|
49
|
+
RECORDING: "recording",
|
|
50
|
+
COMPLETED: "completed",
|
|
51
|
+
FAILED: "failed"
|
|
52
|
+
};
|
|
53
|
+
var TERMINAL_MEETING_STATUSES = [
|
|
54
|
+
MeetingStatus.COMPLETED,
|
|
55
|
+
MeetingStatus.FAILED
|
|
56
|
+
];
|
|
45
57
|
var DEV_WEB_URL = process.env.ALOOK_SERVER_URL || "http://localhost:3000";
|
|
46
58
|
var DEV_WS_DO_URL = process.env.DEV_WS_DO_URL || "http://localhost:8789";
|
|
47
59
|
var DEV_EMAIL_WORKER_URL = process.env.DEV_EMAIL_WORKER_URL || "http://localhost:8787";
|
|
@@ -13648,11 +13660,18 @@ var PollRequestSchema = exports_external.object({
|
|
|
13648
13660
|
max_tasks: exports_external.number().int().min(1).default(1),
|
|
13649
13661
|
cli_version: exports_external.string().optional()
|
|
13650
13662
|
});
|
|
13663
|
+
var FileRequestItemSchema = exports_external.object({
|
|
13664
|
+
id: exports_external.string(),
|
|
13665
|
+
agent_id: exports_external.string(),
|
|
13666
|
+
request_type: exports_external.enum(["tree", "read"]),
|
|
13667
|
+
path: exports_external.string()
|
|
13668
|
+
});
|
|
13651
13669
|
var PollResponseSchema = exports_external.object({
|
|
13652
13670
|
tasks: exports_external.array(TaskApiSchema),
|
|
13653
13671
|
evicted: exports_external.boolean().optional(),
|
|
13654
13672
|
pending_update: exports_external.object({ version: exports_external.string() }).optional(),
|
|
13655
|
-
pending_rescan: exports_external.boolean().optional()
|
|
13673
|
+
pending_rescan: exports_external.boolean().optional(),
|
|
13674
|
+
file_requests: exports_external.array(FileRequestItemSchema).optional()
|
|
13656
13675
|
});
|
|
13657
13676
|
var RegisterResponseSchema = exports_external.object({
|
|
13658
13677
|
runtimes: exports_external.array(exports_external.object({ id: exports_external.string() }))
|
|
@@ -13777,7 +13796,8 @@ var UpdateAgentRequestSchema = exports_external.object({
|
|
|
13777
13796
|
visibility: exports_external.enum(["public", "private"]).optional()
|
|
13778
13797
|
}).refine((v) => v.name !== undefined || v.description !== undefined || v.instructions !== undefined || v.runtime_id !== undefined || v.runtime_config !== undefined || v.visibility !== undefined, { message: "at least one field is required" });
|
|
13779
13798
|
var CreateConversationRequestSchema = exports_external.object({
|
|
13780
|
-
agent_id: exports_external.string().min(1, "agent_id is required")
|
|
13799
|
+
agent_id: exports_external.string().min(1, "agent_id is required"),
|
|
13800
|
+
channel: exports_external.string().optional()
|
|
13781
13801
|
});
|
|
13782
13802
|
var CreateMessageRequestSchema = exports_external.object({
|
|
13783
13803
|
content: exports_external.string().min(1, "content is required")
|
|
@@ -13805,6 +13825,13 @@ var SendEmailRequestSchema = exports_external.object({
|
|
|
13805
13825
|
var UpdateEmailStatusRequestSchema = exports_external.object({
|
|
13806
13826
|
status: exports_external.enum(["unread", "read", "archived"])
|
|
13807
13827
|
});
|
|
13828
|
+
var MeetingInfoSchema = exports_external.object({
|
|
13829
|
+
title: exports_external.string(),
|
|
13830
|
+
meetingUrl: exports_external.string(),
|
|
13831
|
+
startTime: exports_external.string().nullable(),
|
|
13832
|
+
endTime: exports_external.string().nullable(),
|
|
13833
|
+
attendees: exports_external.array(exports_external.object({ name: exports_external.string(), email: exports_external.string() }))
|
|
13834
|
+
});
|
|
13808
13835
|
var EmailNotifyRequestSchema = exports_external.object({
|
|
13809
13836
|
agentId: exports_external.string().min(1),
|
|
13810
13837
|
workspaceId: exports_external.string().min(1),
|
|
@@ -13816,7 +13843,8 @@ var EmailNotifyRequestSchema = exports_external.object({
|
|
|
13816
13843
|
forwarded: exports_external.boolean().optional().default(false),
|
|
13817
13844
|
messageId: exports_external.string().optional().default(""),
|
|
13818
13845
|
inReplyTo: exports_external.string().optional().default(""),
|
|
13819
|
-
references: exports_external.string().optional().default("")
|
|
13846
|
+
references: exports_external.string().optional().default(""),
|
|
13847
|
+
meetingInfo: MeetingInfoSchema.nullable().optional()
|
|
13820
13848
|
});
|
|
13821
13849
|
var CreateEmailAccountSchema = exports_external.object({
|
|
13822
13850
|
emailAddress: exports_external.string().email("valid email required"),
|
|
@@ -13877,6 +13905,25 @@ var DeleteWorkspaceRequestSchema = exports_external.object({
|
|
|
13877
13905
|
var GrantAgentAccessRequestSchema = exports_external.object({
|
|
13878
13906
|
user_id: exports_external.string().min(1, "user_id is required")
|
|
13879
13907
|
});
|
|
13908
|
+
var WorkspaceFileBrowseRequestSchema = exports_external.object({
|
|
13909
|
+
request_type: exports_external.enum(["tree", "read"]),
|
|
13910
|
+
path: exports_external.string().default(".")
|
|
13911
|
+
});
|
|
13912
|
+
var WorkspaceFileEntrySchema = exports_external.object({
|
|
13913
|
+
name: exports_external.string(),
|
|
13914
|
+
path: exports_external.string(),
|
|
13915
|
+
isDirectory: exports_external.boolean(),
|
|
13916
|
+
size: exports_external.number(),
|
|
13917
|
+
modifiedAt: exports_external.string()
|
|
13918
|
+
});
|
|
13919
|
+
var WorkspaceFileReportSchema = exports_external.object({
|
|
13920
|
+
request_id: exports_external.string().min(1),
|
|
13921
|
+
entries: exports_external.array(WorkspaceFileEntrySchema).optional(),
|
|
13922
|
+
content: exports_external.string().nullable().optional(),
|
|
13923
|
+
isBinary: exports_external.boolean().optional(),
|
|
13924
|
+
error: exports_external.string().optional(),
|
|
13925
|
+
path: exports_external.string()
|
|
13926
|
+
});
|
|
13880
13927
|
// ../../node_modules/.pnpm/drizzle-orm@0.45.2_@cloudflare+workers-types@4.20260426.1_@opentelemetry+api@1.9.1_bun-types@1.3.13_kysely@0.28.16/node_modules/drizzle-orm/entity.js
|
|
13881
13928
|
var entityKind = Symbol.for("drizzle:entityKind");
|
|
13882
13929
|
var hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
|
|
@@ -15407,6 +15454,15 @@ var agentWhitelist = sqliteTable("agent_whitelist", {
|
|
|
15407
15454
|
foreignColumns: [agent.id, agent.workspaceId]
|
|
15408
15455
|
}).onDelete("cascade")
|
|
15409
15456
|
]);
|
|
15457
|
+
var channel = sqliteTable("channel", {
|
|
15458
|
+
id: text("id").primaryKey().$defaultFn(() => "ch_" + nanoid3()),
|
|
15459
|
+
workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
|
|
15460
|
+
name: text("name").notNull(),
|
|
15461
|
+
createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
|
|
15462
|
+
}, (t) => [
|
|
15463
|
+
unique("channel_workspace_name").on(t.workspaceId, t.name),
|
|
15464
|
+
index("idx_channel_workspace").on(t.workspaceId)
|
|
15465
|
+
]);
|
|
15410
15466
|
var conversation = sqliteTable("conversation", {
|
|
15411
15467
|
id: text("id").primaryKey().$defaultFn(() => nanoid3()),
|
|
15412
15468
|
workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
|
|
@@ -15414,6 +15470,7 @@ var conversation = sqliteTable("conversation", {
|
|
|
15414
15470
|
userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
|
|
15415
15471
|
title: text("title").notNull().default(""),
|
|
15416
15472
|
type: text("type").notNull().default(TASK_TYPES.USER_DM_MESSAGE),
|
|
15473
|
+
channel: text("channel").notNull().default("default"),
|
|
15417
15474
|
createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
|
|
15418
15475
|
}, (t) => [
|
|
15419
15476
|
foreignKey({
|
|
@@ -15567,6 +15624,33 @@ var agentEmailAccount = sqliteTable("agent_email_account", {
|
|
|
15567
15624
|
foreignColumns: [agent.id, agent.workspaceId]
|
|
15568
15625
|
}).onDelete("cascade")
|
|
15569
15626
|
]);
|
|
15627
|
+
var meetingSession = sqliteTable("meeting_session", {
|
|
15628
|
+
id: text("id").primaryKey().$defaultFn(() => "ms_" + nanoid3()),
|
|
15629
|
+
agentId: text("agent_id").notNull(),
|
|
15630
|
+
workspaceId: text("workspace_id").notNull(),
|
|
15631
|
+
title: text("title").notNull().default(""),
|
|
15632
|
+
meetingUrl: text("meeting_url").notNull(),
|
|
15633
|
+
status: text("status").notNull().default("scheduled"),
|
|
15634
|
+
fromEmail: text("from_email"),
|
|
15635
|
+
isWhitelisted: integer2("is_whitelisted", { mode: "boolean" }).notNull().default(true),
|
|
15636
|
+
participants: text("participants", { mode: "json" }).$type().notNull().default([]),
|
|
15637
|
+
scheduledAt: text("scheduled_at"),
|
|
15638
|
+
startedAt: text("started_at"),
|
|
15639
|
+
completedAt: text("completed_at"),
|
|
15640
|
+
transcriptR2Key: text("transcript_r2_key"),
|
|
15641
|
+
summary: text("summary"),
|
|
15642
|
+
error: text("error"),
|
|
15643
|
+
workerSessionId: text("worker_session_id"),
|
|
15644
|
+
createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()),
|
|
15645
|
+
updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString())
|
|
15646
|
+
}, (t) => [
|
|
15647
|
+
index("idx_meeting_session_agent_ws").on(t.agentId, t.workspaceId),
|
|
15648
|
+
index("idx_meeting_session_status").on(t.status),
|
|
15649
|
+
foreignKey({
|
|
15650
|
+
columns: [t.agentId, t.workspaceId],
|
|
15651
|
+
foreignColumns: [agent.id, agent.workspaceId]
|
|
15652
|
+
}).onDelete("cascade")
|
|
15653
|
+
]);
|
|
15570
15654
|
var machineToken = sqliteTable("machine_token", {
|
|
15571
15655
|
id: text("id").primaryKey().$defaultFn(() => nanoid3()),
|
|
15572
15656
|
userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
|
|
@@ -15577,6 +15661,17 @@ var machineToken = sqliteTable("machine_token", {
|
|
|
15577
15661
|
lastUsedAt: text("last_used_at"),
|
|
15578
15662
|
createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
|
|
15579
15663
|
}, (t) => [index("idx_machine_token").on(t.token)]);
|
|
15664
|
+
var workspaceFileRequest = sqliteTable("workspace_file_request", {
|
|
15665
|
+
id: text("id").primaryKey().$defaultFn(() => "wfr_" + nanoid3()),
|
|
15666
|
+
workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
|
|
15667
|
+
agentId: text("agent_id").notNull(),
|
|
15668
|
+
requestType: text("request_type").notNull(),
|
|
15669
|
+
path: text("path").notNull().default("."),
|
|
15670
|
+
status: text("status").notNull().default("pending"),
|
|
15671
|
+
result: text("result"),
|
|
15672
|
+
createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()),
|
|
15673
|
+
updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString())
|
|
15674
|
+
}, (t) => [index("idx_wfr_workspace_status").on(t.workspaceId, t.status)]);
|
|
15580
15675
|
// ../shared/src/db/queries/task.ts
|
|
15581
15676
|
var DEFAULT_STALE_SECONDS = Number(process.env.ALOOK_STALE_DISPATCH_TIMEOUT_S) || 20;
|
|
15582
15677
|
var DEFAULT_STALE_RUNNING_SECONDS = Number(process.env.ALOOK_STALE_RUNNING_TIMEOUT_S) || 3600;
|
|
@@ -15657,7 +15752,8 @@ class DaemonClient {
|
|
|
15657
15752
|
tasks: resp.tasks,
|
|
15658
15753
|
evicted: resp.evicted ?? false,
|
|
15659
15754
|
pending_update: resp.pending_update,
|
|
15660
|
-
pending_rescan: resp.pending_rescan
|
|
15755
|
+
pending_rescan: resp.pending_rescan,
|
|
15756
|
+
file_requests: resp.file_requests
|
|
15661
15757
|
};
|
|
15662
15758
|
}
|
|
15663
15759
|
startTask(token, taskId) {
|
|
@@ -15704,6 +15800,18 @@ class DaemonClient {
|
|
|
15704
15800
|
reportMessages(token, taskId, messages) {
|
|
15705
15801
|
return this.request("POST", `/api/daemon/tasks/${taskId}/messages`, token, { messages });
|
|
15706
15802
|
}
|
|
15803
|
+
reportFileData(token, body) {
|
|
15804
|
+
return this.request("POST", "/api/daemon/workspace/report", token, body);
|
|
15805
|
+
}
|
|
15806
|
+
async claimMeetings(token, daemonId) {
|
|
15807
|
+
const raw = await this.request("POST", "/api/daemon/meetings/claim", token, { daemon_id: daemonId });
|
|
15808
|
+
return raw.map((m) => ({
|
|
15809
|
+
id: m.id,
|
|
15810
|
+
meetingUrl: m.meeting_url,
|
|
15811
|
+
participants: m.participants,
|
|
15812
|
+
workspaceId: m.workspace_id
|
|
15813
|
+
}));
|
|
15814
|
+
}
|
|
15707
15815
|
}
|
|
15708
15816
|
|
|
15709
15817
|
// daemon/agent/claude.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alook/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.24",
|
|
4
4
|
"description": "Alook CLI — Enable Your Person Colleague",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/alookai/alook#readme",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"dev": "bun run src/index.ts",
|
|
41
|
-
"build": "bun build src/index.ts --outdir dist --target node --format esm --external citty --external commander --external postal-mime && bun build daemon/session-runner.ts --outdir dist --target node --format esm --external citty --external commander --external postal-mime && node scripts/prepare-dist.mjs",
|
|
41
|
+
"build": "bun build src/index.ts --outdir dist --target node --format esm --external citty --external commander --external postal-mime --external playwright-core && bun build daemon/session-runner.ts --outdir dist --target node --format esm --external citty --external commander --external postal-mime && bun build daemon/meeting-runner.ts --outdir dist --target node --format esm --external playwright-core && node scripts/prepare-dist.mjs",
|
|
42
42
|
"prepack": "pnpm run build",
|
|
43
43
|
"test": "vitest run",
|
|
44
44
|
"typecheck": "tsc --noEmit -p tsconfig.build.json"
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"citty": "^0.2.2",
|
|
48
48
|
"commander": "^14.0.3",
|
|
49
|
+
"playwright-core": "^1.59.1",
|
|
49
50
|
"postal-mime": "^2.7.4"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|