@alook/cli 0.0.23 → 0.0.25

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() }))
@@ -13661,7 +13680,6 @@ var DaemonRuntimeItemSchema = exports_external.object({
13661
13680
  type: exports_external.string().optional(),
13662
13681
  provider: exports_external.string().optional(),
13663
13682
  runtime_mode: exports_external.string().optional(),
13664
- name: exports_external.string().optional(),
13665
13683
  version: exports_external.string().optional(),
13666
13684
  status: exports_external.string().optional(),
13667
13685
  model: exports_external.string().optional()
@@ -13777,7 +13795,8 @@ var UpdateAgentRequestSchema = exports_external.object({
13777
13795
  visibility: exports_external.enum(["public", "private"]).optional()
13778
13796
  }).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
13797
  var CreateConversationRequestSchema = exports_external.object({
13780
- agent_id: exports_external.string().min(1, "agent_id is required")
13798
+ agent_id: exports_external.string().min(1, "agent_id is required"),
13799
+ channel: exports_external.string().optional()
13781
13800
  });
13782
13801
  var CreateMessageRequestSchema = exports_external.object({
13783
13802
  content: exports_external.string().min(1, "content is required")
@@ -13805,6 +13824,13 @@ var SendEmailRequestSchema = exports_external.object({
13805
13824
  var UpdateEmailStatusRequestSchema = exports_external.object({
13806
13825
  status: exports_external.enum(["unread", "read", "archived"])
13807
13826
  });
13827
+ var MeetingInfoSchema = exports_external.object({
13828
+ title: exports_external.string(),
13829
+ meetingUrl: exports_external.string(),
13830
+ startTime: exports_external.string().nullable(),
13831
+ endTime: exports_external.string().nullable(),
13832
+ attendees: exports_external.array(exports_external.object({ name: exports_external.string(), email: exports_external.string() }))
13833
+ });
13808
13834
  var EmailNotifyRequestSchema = exports_external.object({
13809
13835
  agentId: exports_external.string().min(1),
13810
13836
  workspaceId: exports_external.string().min(1),
@@ -13816,7 +13842,8 @@ var EmailNotifyRequestSchema = exports_external.object({
13816
13842
  forwarded: exports_external.boolean().optional().default(false),
13817
13843
  messageId: exports_external.string().optional().default(""),
13818
13844
  inReplyTo: exports_external.string().optional().default(""),
13819
- references: exports_external.string().optional().default("")
13845
+ references: exports_external.string().optional().default(""),
13846
+ meetingInfo: MeetingInfoSchema.nullable().optional()
13820
13847
  });
13821
13848
  var CreateEmailAccountSchema = exports_external.object({
13822
13849
  emailAddress: exports_external.string().email("valid email required"),
@@ -13877,6 +13904,25 @@ var DeleteWorkspaceRequestSchema = exports_external.object({
13877
13904
  var GrantAgentAccessRequestSchema = exports_external.object({
13878
13905
  user_id: exports_external.string().min(1, "user_id is required")
13879
13906
  });
13907
+ var WorkspaceFileBrowseRequestSchema = exports_external.object({
13908
+ request_type: exports_external.enum(["tree", "read"]),
13909
+ path: exports_external.string().default(".")
13910
+ });
13911
+ var WorkspaceFileEntrySchema = exports_external.object({
13912
+ name: exports_external.string(),
13913
+ path: exports_external.string(),
13914
+ isDirectory: exports_external.boolean(),
13915
+ size: exports_external.number(),
13916
+ modifiedAt: exports_external.string()
13917
+ });
13918
+ var WorkspaceFileReportSchema = exports_external.object({
13919
+ request_id: exports_external.string().min(1),
13920
+ entries: exports_external.array(WorkspaceFileEntrySchema).optional(),
13921
+ content: exports_external.string().nullable().optional(),
13922
+ isBinary: exports_external.boolean().optional(),
13923
+ error: exports_external.string().optional(),
13924
+ path: exports_external.string()
13925
+ });
13880
13926
  // ../../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
13927
  var entityKind = Symbol.for("drizzle:entityKind");
13882
13928
  var hasOwnEntityKind = Symbol.for("drizzle:hasOwnEntityKind");
@@ -15364,7 +15410,6 @@ var agentRuntime = sqliteTable("agent_runtime", {
15364
15410
  id: text("id").primaryKey().$defaultFn(() => nanoid3()),
15365
15411
  workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
15366
15412
  daemonId: text("daemon_id").notNull(),
15367
- name: text("name").notNull().default(""),
15368
15413
  runtimeMode: text("runtime_mode").notNull().default("local"),
15369
15414
  provider: text("provider").notNull(),
15370
15415
  deviceInfo: text("device_info").notNull().default(""),
@@ -15407,6 +15452,15 @@ var agentWhitelist = sqliteTable("agent_whitelist", {
15407
15452
  foreignColumns: [agent.id, agent.workspaceId]
15408
15453
  }).onDelete("cascade")
15409
15454
  ]);
15455
+ var channel = sqliteTable("channel", {
15456
+ id: text("id").primaryKey().$defaultFn(() => "ch_" + nanoid3()),
15457
+ workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
15458
+ name: text("name").notNull(),
15459
+ createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
15460
+ }, (t) => [
15461
+ unique("channel_workspace_name").on(t.workspaceId, t.name),
15462
+ index("idx_channel_workspace").on(t.workspaceId)
15463
+ ]);
15410
15464
  var conversation = sqliteTable("conversation", {
15411
15465
  id: text("id").primaryKey().$defaultFn(() => nanoid3()),
15412
15466
  workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
@@ -15414,6 +15468,7 @@ var conversation = sqliteTable("conversation", {
15414
15468
  userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
15415
15469
  title: text("title").notNull().default(""),
15416
15470
  type: text("type").notNull().default(TASK_TYPES.USER_DM_MESSAGE),
15471
+ channel: text("channel").notNull().default("default"),
15417
15472
  createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
15418
15473
  }, (t) => [
15419
15474
  foreignKey({
@@ -15567,6 +15622,33 @@ var agentEmailAccount = sqliteTable("agent_email_account", {
15567
15622
  foreignColumns: [agent.id, agent.workspaceId]
15568
15623
  }).onDelete("cascade")
15569
15624
  ]);
15625
+ var meetingSession = sqliteTable("meeting_session", {
15626
+ id: text("id").primaryKey().$defaultFn(() => "ms_" + nanoid3()),
15627
+ agentId: text("agent_id").notNull(),
15628
+ workspaceId: text("workspace_id").notNull(),
15629
+ title: text("title").notNull().default(""),
15630
+ meetingUrl: text("meeting_url").notNull(),
15631
+ status: text("status").notNull().default("scheduled"),
15632
+ fromEmail: text("from_email"),
15633
+ isWhitelisted: integer2("is_whitelisted", { mode: "boolean" }).notNull().default(true),
15634
+ participants: text("participants", { mode: "json" }).$type().notNull().default([]),
15635
+ scheduledAt: text("scheduled_at"),
15636
+ startedAt: text("started_at"),
15637
+ completedAt: text("completed_at"),
15638
+ transcriptR2Key: text("transcript_r2_key"),
15639
+ summary: text("summary"),
15640
+ error: text("error"),
15641
+ workerSessionId: text("worker_session_id"),
15642
+ createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()),
15643
+ updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString())
15644
+ }, (t) => [
15645
+ index("idx_meeting_session_agent_ws").on(t.agentId, t.workspaceId),
15646
+ index("idx_meeting_session_status").on(t.status),
15647
+ foreignKey({
15648
+ columns: [t.agentId, t.workspaceId],
15649
+ foreignColumns: [agent.id, agent.workspaceId]
15650
+ }).onDelete("cascade")
15651
+ ]);
15570
15652
  var machineToken = sqliteTable("machine_token", {
15571
15653
  id: text("id").primaryKey().$defaultFn(() => nanoid3()),
15572
15654
  userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
@@ -15577,6 +15659,17 @@ var machineToken = sqliteTable("machine_token", {
15577
15659
  lastUsedAt: text("last_used_at"),
15578
15660
  createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString())
15579
15661
  }, (t) => [index("idx_machine_token").on(t.token)]);
15662
+ var workspaceFileRequest = sqliteTable("workspace_file_request", {
15663
+ id: text("id").primaryKey().$defaultFn(() => "wfr_" + nanoid3()),
15664
+ workspaceId: text("workspace_id").notNull().references(() => workspace.id, { onDelete: "cascade" }),
15665
+ agentId: text("agent_id").notNull(),
15666
+ requestType: text("request_type").notNull(),
15667
+ path: text("path").notNull().default("."),
15668
+ status: text("status").notNull().default("pending"),
15669
+ result: text("result"),
15670
+ createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()),
15671
+ updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString())
15672
+ }, (t) => [index("idx_wfr_workspace_status").on(t.workspaceId, t.status)]);
15580
15673
  // ../shared/src/db/queries/task.ts
15581
15674
  var DEFAULT_STALE_SECONDS = Number(process.env.ALOOK_STALE_DISPATCH_TIMEOUT_S) || 20;
15582
15675
  var DEFAULT_STALE_RUNNING_SECONDS = Number(process.env.ALOOK_STALE_RUNNING_TIMEOUT_S) || 3600;
@@ -15657,7 +15750,8 @@ class DaemonClient {
15657
15750
  tasks: resp.tasks,
15658
15751
  evicted: resp.evicted ?? false,
15659
15752
  pending_update: resp.pending_update,
15660
- pending_rescan: resp.pending_rescan
15753
+ pending_rescan: resp.pending_rescan,
15754
+ file_requests: resp.file_requests
15661
15755
  };
15662
15756
  }
15663
15757
  startTask(token, taskId) {
@@ -15704,6 +15798,18 @@ class DaemonClient {
15704
15798
  reportMessages(token, taskId, messages) {
15705
15799
  return this.request("POST", `/api/daemon/tasks/${taskId}/messages`, token, { messages });
15706
15800
  }
15801
+ reportFileData(token, body) {
15802
+ return this.request("POST", "/api/daemon/workspace/report", token, body);
15803
+ }
15804
+ async claimMeetings(token, daemonId) {
15805
+ const raw = await this.request("POST", "/api/daemon/meetings/claim", token, { daemon_id: daemonId });
15806
+ return raw.map((m) => ({
15807
+ id: m.id,
15808
+ meetingUrl: m.meeting_url,
15809
+ participants: m.participants,
15810
+ workspaceId: m.workspace_id
15811
+ }));
15812
+ }
15707
15813
  }
15708
15814
 
15709
15815
  // 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.25",
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": {