@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.
@@ -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.23",
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": {