@robbeverhelst/do 1.420.0 → 1.421.0

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.
Files changed (2) hide show
  1. package/dist/do.js +521 -177
  2. package/package.json +1 -1
package/dist/do.js CHANGED
@@ -14420,7 +14420,7 @@ var configError = (message) => new CliError("config", message, EXIT.CONFIG);
14420
14420
 
14421
14421
  // src/meta.ts
14422
14422
  var CLI_NAME = "do";
14423
- var VERSION = "1.420.0";
14423
+ var VERSION = "1.421.0";
14424
14424
  var API_PREFIX = "/api/v1";
14425
14425
  var DEFAULT_API_URL = "http://localhost:3001";
14426
14426
 
@@ -17695,12 +17695,23 @@ var agents = pgTable("agents", {
17695
17695
  gatewayConnectedAt: timestamp("gateway_connected_at", { withTimezone: true }),
17696
17696
  gatewaySeenAt: timestamp("gateway_seen_at", { withTimezone: true }),
17697
17697
  gatewayDisconnectedAt: timestamp("gateway_disconnected_at", { withTimezone: true }),
17698
+ kind: text("kind"),
17699
+ about: text("about"),
17700
+ machine: text("machine"),
17701
+ account: text("account"),
17702
+ status: text("status"),
17703
+ statusText: text("status_text"),
17704
+ statusAt: timestamp("status_at", { withTimezone: true }),
17698
17705
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
17699
17706
  updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
17700
17707
  }, (t) => [
17701
17708
  index("agents_tenant_idx").on(t.tenantId),
17702
- uniqueIndex("agents_tenant_name_live_idx").on(t.tenantId, sql`lower(${t.name})`).where(sql`${t.revokedAt} IS NULL`)
17709
+ uniqueIndex("agents_tenant_name_live_idx").on(t.tenantId, sql`lower(${t.name})`).where(sql`${t.revokedAt} IS NULL`),
17710
+ check2("agents_kind_chk", sql`${t.kind} IS NULL OR ${t.kind} IN ('assistant', 'agent', 'lane', 'session')`),
17711
+ check2("agents_status_chk", sql`${t.status} IS NULL OR ${t.status} IN ('working', 'waiting', 'idle')`)
17703
17712
  ]);
17713
+ var AGENT_STATUSES = ["working", "waiting", "idle"];
17714
+ var AGENT_KINDS = ["assistant", "agent", "lane", "session"];
17704
17715
 
17705
17716
  // ../../packages/schema/src/contracts/agents.ts
17706
17717
  var agentSchema = createSelectSchema(agents, {
@@ -17709,6 +17720,13 @@ var agentSchema = createSelectSchema(agents, {
17709
17720
  gatewayConnectedAt: exports_coerce.date().nullable().default(null),
17710
17721
  gatewaySeenAt: exports_coerce.date().nullable().default(null),
17711
17722
  gatewayDisconnectedAt: exports_coerce.date().nullable().default(null),
17723
+ kind: string2().nullable().default(null),
17724
+ about: string2().nullable().default(null),
17725
+ machine: string2().nullable().default(null),
17726
+ account: string2().nullable().default(null),
17727
+ status: string2().nullable().default(null),
17728
+ statusText: string2().nullable().default(null),
17729
+ statusAt: exports_coerce.date().nullable().default(null),
17712
17730
  createdAt: exports_coerce.date(),
17713
17731
  updatedAt: exports_coerce.date()
17714
17732
  });
@@ -20618,6 +20636,175 @@ var agentPostOperations = defineOperations({
20618
20636
  }
20619
20637
  });
20620
20638
 
20639
+ // ../../packages/schema/src/db/agent-chat-threads.ts
20640
+ var agentChatThreads = pgTable("agent_chat_threads", {
20641
+ id: text("id").primaryKey(),
20642
+ tenantId: text("tenant_id").notNull().references(() => tenants.id),
20643
+ userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
20644
+ title: text("title"),
20645
+ slug: text("slug"),
20646
+ standing: boolean4("standing").notNull().default(false),
20647
+ push: text("push").notNull().default("all"),
20648
+ areaIds: text("area_ids").array().notNull().default([]),
20649
+ peopleCapture: boolean4("people_capture").notNull().default(true),
20650
+ kind: text("kind"),
20651
+ anchorType: text("anchor_type"),
20652
+ anchorId: text("anchor_id"),
20653
+ parentId: text("parent_id"),
20654
+ notifyLevel: text("notify_level"),
20655
+ icon: text("icon"),
20656
+ description: text("description"),
20657
+ memoryScope: text("memory_scope"),
20658
+ lastMessageAt: timestamp("last_message_at", { withTimezone: true }),
20659
+ archivedAt: timestamp("archived_at", { withTimezone: true }),
20660
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
20661
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
20662
+ }, (t) => [
20663
+ index("agent_chat_threads_member_idx").on(t.tenantId, t.userId, t.updatedAt),
20664
+ uniqueIndex("agent_chat_threads_slug_uniq").on(t.tenantId, t.userId, t.slug).where(sql`${t.slug} is not null`)
20665
+ ]);
20666
+ var agentChatTurns = pgTable("agent_chat_turns", {
20667
+ id: text("id").primaryKey(),
20668
+ tenantId: text("tenant_id").notNull().references(() => tenants.id),
20669
+ threadId: text("thread_id").notNull().references(() => agentChatThreads.id, { onDelete: "cascade" }),
20670
+ userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
20671
+ question: text("question").notNull(),
20672
+ context: jsonb("context").$type().notNull(),
20673
+ reply: text("reply").notNull().default(""),
20674
+ status: text("status").notNull().default("streaming"),
20675
+ error: text("error"),
20676
+ since: text("since"),
20677
+ changes: jsonb("changes").$type().notNull().default([]),
20678
+ confirmations: jsonb("confirmations").$type().notNull().default([]),
20679
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
20680
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
20681
+ }, (t) => [index("agent_chat_turns_thread_idx").on(t.threadId, t.createdAt)]);
20682
+ var agentChatPosts = pgTable("agent_chat_posts", {
20683
+ id: text("id").primaryKey(),
20684
+ tenantId: text("tenant_id").notNull().references(() => tenants.id),
20685
+ threadId: text("thread_id").notNull().references(() => agentChatThreads.id, { onDelete: "cascade" }),
20686
+ userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
20687
+ author: text("author").notNull(),
20688
+ agentId: text("agent_id").references(() => agents.id),
20689
+ externalId: text("external_id"),
20690
+ kind: text("kind").notNull().default("message"),
20691
+ level: text("level"),
20692
+ text: text("text").notNull().default(""),
20693
+ final: boolean4("final").notNull().default(true),
20694
+ replyToId: text("reply_to_id"),
20695
+ relayOfPostId: text("relay_of_post_id").references(() => agentChatPosts.id, {
20696
+ onDelete: "set null"
20697
+ }),
20698
+ runStatus: text("run_status"),
20699
+ brief: jsonb("brief").$type(),
20700
+ card: jsonb("card").$type(),
20701
+ digestKey: text("digest_key"),
20702
+ title: text("title"),
20703
+ runSteps: jsonb("run_steps").$type(),
20704
+ runEndedAt: timestamp("run_ended_at", { withTimezone: true }),
20705
+ prompt: jsonb("prompt").$type(),
20706
+ receipt: jsonb("receipt").$type(),
20707
+ attachments: jsonb("attachments").$type().notNull().default([]),
20708
+ context: jsonb("context").$type(),
20709
+ deliveredAt: timestamp("delivered_at", { withTimezone: true }),
20710
+ seenAt: timestamp("seen_at", { withTimezone: true }),
20711
+ readAt: timestamp("read_at", { withTimezone: true }),
20712
+ fallbackAt: timestamp("fallback_at", { withTimezone: true }),
20713
+ fallbackAckedAt: timestamp("fallback_acked_at", { withTimezone: true }),
20714
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
20715
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
20716
+ deletedAt: timestamp("deleted_at", { withTimezone: true })
20717
+ }, (t) => [
20718
+ index("agent_chat_posts_thread_idx").on(t.threadId, t.createdAt),
20719
+ uniqueIndex("agent_chat_posts_external_uniq").on(t.tenantId, t.agentId, t.externalId).where(sql`${t.externalId} is not null`),
20720
+ index("agent_chat_posts_undelivered_idx").on(t.tenantId, t.createdAt).where(sql`${t.author} = 'member' and ${t.deliveredAt} is null`),
20721
+ index("agent_chat_posts_needs_you_unseen_idx").on(t.tenantId, t.userId, t.createdAt).where(sql`${t.author} = 'agent' and ${t.level} = 'needs_you' and ${t.seenAt} is null and ${t.deletedAt} is null`)
20722
+ ]);
20723
+
20724
+ // ../../packages/schema/src/db/echo-handoffs.ts
20725
+ var ECHO_HANDOFF_STATES = ["sent", "seen", "picked", "done"];
20726
+ var echoHandoffs = pgTable("echo_handoffs", {
20727
+ id: text("id").primaryKey(),
20728
+ tenantId: text("tenant_id").notNull().references(() => tenants.id),
20729
+ userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
20730
+ key: text("key").notNull(),
20731
+ fromAgentId: text("from_agent_id").notNull().references(() => agents.id),
20732
+ toAgentId: text("to_agent_id").notNull().references(() => agents.id),
20733
+ what: text("what").notNull(),
20734
+ threadId: text("thread_id").references(() => agentChatThreads.id, { onDelete: "set null" }),
20735
+ state: text("state").notNull().default("sent"),
20736
+ sentAt: timestamp("sent_at", { withTimezone: true }).notNull(),
20737
+ seenAt: timestamp("seen_at", { withTimezone: true }),
20738
+ pickedAt: timestamp("picked_at", { withTimezone: true }),
20739
+ doneAt: timestamp("done_at", { withTimezone: true }),
20740
+ nudgedAt: timestamp("nudged_at", { withTimezone: true }),
20741
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
20742
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
20743
+ }, (t) => [
20744
+ index("echo_handoffs_member_idx").on(t.tenantId, t.userId),
20745
+ uniqueIndex("echo_handoffs_key_uniq").on(t.tenantId, t.userId, t.key),
20746
+ check2("echo_handoffs_state_chk", sql`${t.state} IN ('sent', 'seen', 'picked', 'done')`)
20747
+ ]);
20748
+
20749
+ // ../../packages/schema/src/contracts/echo-agents.ts
20750
+ var agentKindSchema = _enum2(AGENT_KINDS);
20751
+ var agentStatusSchema = _enum2(AGENT_STATUSES);
20752
+ var echoHandoffStateSchema = _enum2(ECHO_HANDOFF_STATES);
20753
+ var line4 = (max) => string2().trim().min(1).max(max);
20754
+ var agentProfileInputSchema = object({
20755
+ kind: agentKindSchema.nullish(),
20756
+ about: line4(160).nullish(),
20757
+ machine: line4(40).nullish(),
20758
+ account: line4(40).nullish(),
20759
+ status: agentStatusSchema.nullish(),
20760
+ statusText: line4(160).nullish()
20761
+ }).strict().refine((v) => Object.keys(v).length > 0, "send at least one field");
20762
+ var echoThreadRefSchema = object({
20763
+ id: string2(),
20764
+ title: string2().nullable(),
20765
+ slug: string2().nullable(),
20766
+ icon: string2().nullable()
20767
+ });
20768
+ var echoAgentSchema = object({
20769
+ id: ulidSchema,
20770
+ name: string2(),
20771
+ kind: agentKindSchema.nullable(),
20772
+ about: string2().nullable(),
20773
+ machine: string2().nullable(),
20774
+ account: string2().nullable(),
20775
+ status: agentStatusSchema.nullable(),
20776
+ statusText: string2().nullable(),
20777
+ statusAt: exports_coerce.date().nullable(),
20778
+ threads: array(echoThreadRefSchema),
20779
+ createdAt: exports_coerce.date()
20780
+ });
20781
+ var echoHandoffKeySchema = string2().regex(/^[a-z0-9][a-z0-9-]{0,59}$/, "lower-case letters, digits and dashes, at most 60");
20782
+ var echoHandoffSchema = object({
20783
+ id: ulidSchema,
20784
+ key: string2(),
20785
+ from: object({ id: string2(), name: string2() }),
20786
+ to: object({ id: string2(), name: string2() }),
20787
+ what: string2(),
20788
+ thread: echoThreadRefSchema.nullable(),
20789
+ state: echoHandoffStateSchema,
20790
+ sentAt: exports_coerce.date(),
20791
+ seenAt: exports_coerce.date().nullable(),
20792
+ pickedAt: exports_coerce.date().nullable(),
20793
+ doneAt: exports_coerce.date().nullable(),
20794
+ nudgedAt: exports_coerce.date().nullable(),
20795
+ updatedAt: exports_coerce.date()
20796
+ });
20797
+ var putEchoHandoffInputSchema = object({
20798
+ from: agentNameSchema,
20799
+ to: agentNameSchema,
20800
+ what: line4(300),
20801
+ thread: line4(40).nullish(),
20802
+ state: echoHandoffStateSchema.optional(),
20803
+ at: exports_coerce.date().optional()
20804
+ }).strict();
20805
+ var reassignEchoHandoffInputSchema = object({ to: ulidSchema }).strict();
20806
+ var echoHandoffKeyParamSchema = object({ key: echoHandoffKeySchema });
20807
+
20621
20808
  // ../../packages/schema/src/operations/agents.ts
20622
20809
  var agentOperations = defineOperations({
20623
20810
  list: {
@@ -20629,6 +20816,20 @@ var agentOperations = defineOperations({
20629
20816
  description: "The Space's live Agents (`id`, `name`), oldest first, to resolve an Agent by name.",
20630
20817
  status: 200,
20631
20818
  response: { description: "The Space's Agents.", list: true }
20819
+ },
20820
+ profile: {
20821
+ method: "patch",
20822
+ path: "/agents/{id}/profile",
20823
+ pathParams: { id: "The Agent's id (`GET /agents`)." },
20824
+ pathParamSchemas: { id: ulidSchema },
20825
+ scopes: ["agents:write"],
20826
+ tag: "Agents",
20827
+ summary: "Report an agent's profile and status",
20828
+ description: "What Echo \u203A Agents shows for the agent: its `kind` (`assistant`, `agent`, `lane` or `session`), `about` (a line on what it does), the `machine` and `account` it runs on, and its `status` (`working`, `waiting` or `idle`) with `statusText`, what it's on. An agent reports its own, or Echo for the agents it relays. A field sent replaces that one, null clears it; a new status stamps `statusAt`. An unknown or revoked id is a 404.",
20829
+ body: agentProfileInputSchema,
20830
+ status: 200,
20831
+ response: { description: "The Agent." },
20832
+ errors: { 400: true, 404: true }
20632
20833
  }
20633
20834
  });
20634
20835
 
@@ -28625,90 +28826,83 @@ var documentOperations = defineOperations({
28625
28826
  }
28626
28827
  });
28627
28828
 
28628
- // ../../packages/schema/src/db/agent-chat-threads.ts
28629
- var agentChatThreads = pgTable("agent_chat_threads", {
28630
- id: text("id").primaryKey(),
28631
- tenantId: text("tenant_id").notNull().references(() => tenants.id),
28632
- userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
28633
- title: text("title"),
28634
- slug: text("slug"),
28635
- standing: boolean4("standing").notNull().default(false),
28636
- push: text("push").notNull().default("all"),
28637
- areaIds: text("area_ids").array().notNull().default([]),
28638
- peopleCapture: boolean4("people_capture").notNull().default(true),
28639
- kind: text("kind"),
28640
- anchorType: text("anchor_type"),
28641
- anchorId: text("anchor_id"),
28642
- parentId: text("parent_id"),
28643
- notifyLevel: text("notify_level"),
28644
- icon: text("icon"),
28645
- description: text("description"),
28646
- memoryScope: text("memory_scope"),
28647
- lastMessageAt: timestamp("last_message_at", { withTimezone: true }),
28648
- archivedAt: timestamp("archived_at", { withTimezone: true }),
28649
- createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
28650
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
28651
- }, (t) => [
28652
- index("agent_chat_threads_member_idx").on(t.tenantId, t.userId, t.updatedAt),
28653
- uniqueIndex("agent_chat_threads_slug_uniq").on(t.tenantId, t.userId, t.slug).where(sql`${t.slug} is not null`)
28654
- ]);
28655
- var agentChatTurns = pgTable("agent_chat_turns", {
28656
- id: text("id").primaryKey(),
28657
- tenantId: text("tenant_id").notNull().references(() => tenants.id),
28658
- threadId: text("thread_id").notNull().references(() => agentChatThreads.id, { onDelete: "cascade" }),
28659
- userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
28660
- question: text("question").notNull(),
28661
- context: jsonb("context").$type().notNull(),
28662
- reply: text("reply").notNull().default(""),
28663
- status: text("status").notNull().default("streaming"),
28664
- error: text("error"),
28665
- since: text("since"),
28666
- changes: jsonb("changes").$type().notNull().default([]),
28667
- confirmations: jsonb("confirmations").$type().notNull().default([]),
28668
- createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
28669
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
28670
- }, (t) => [index("agent_chat_turns_thread_idx").on(t.threadId, t.createdAt)]);
28671
- var agentChatPosts = pgTable("agent_chat_posts", {
28672
- id: text("id").primaryKey(),
28673
- tenantId: text("tenant_id").notNull().references(() => tenants.id),
28674
- threadId: text("thread_id").notNull().references(() => agentChatThreads.id, { onDelete: "cascade" }),
28675
- userId: text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
28676
- author: text("author").notNull(),
28677
- agentId: text("agent_id").references(() => agents.id),
28678
- externalId: text("external_id"),
28679
- kind: text("kind").notNull().default("message"),
28680
- level: text("level"),
28681
- text: text("text").notNull().default(""),
28682
- final: boolean4("final").notNull().default(true),
28683
- replyToId: text("reply_to_id"),
28684
- relayOfPostId: text("relay_of_post_id").references(() => agentChatPosts.id, {
28685
- onDelete: "set null"
28686
- }),
28687
- runStatus: text("run_status"),
28688
- brief: jsonb("brief").$type(),
28689
- card: jsonb("card").$type(),
28690
- digestKey: text("digest_key"),
28691
- title: text("title"),
28692
- runSteps: jsonb("run_steps").$type(),
28693
- runEndedAt: timestamp("run_ended_at", { withTimezone: true }),
28694
- prompt: jsonb("prompt").$type(),
28695
- receipt: jsonb("receipt").$type(),
28696
- attachments: jsonb("attachments").$type().notNull().default([]),
28697
- context: jsonb("context").$type(),
28698
- deliveredAt: timestamp("delivered_at", { withTimezone: true }),
28699
- seenAt: timestamp("seen_at", { withTimezone: true }),
28700
- readAt: timestamp("read_at", { withTimezone: true }),
28701
- fallbackAt: timestamp("fallback_at", { withTimezone: true }),
28702
- fallbackAckedAt: timestamp("fallback_acked_at", { withTimezone: true }),
28703
- createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
28704
- updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
28705
- deletedAt: timestamp("deleted_at", { withTimezone: true })
28706
- }, (t) => [
28707
- index("agent_chat_posts_thread_idx").on(t.threadId, t.createdAt),
28708
- uniqueIndex("agent_chat_posts_external_uniq").on(t.tenantId, t.agentId, t.externalId).where(sql`${t.externalId} is not null`),
28709
- index("agent_chat_posts_undelivered_idx").on(t.tenantId, t.createdAt).where(sql`${t.author} = 'member' and ${t.deliveredAt} is null`),
28710
- index("agent_chat_posts_needs_you_unseen_idx").on(t.tenantId, t.userId, t.createdAt).where(sql`${t.author} = 'agent' and ${t.level} = 'needs_you' and ${t.seenAt} is null and ${t.deletedAt} is null`)
28711
- ]);
28829
+ // ../../packages/schema/src/operations/echo-handoffs.ts
28830
+ var NO_USER = "The key has no user identity (handoffs are per member).";
28831
+ var KEY = {
28832
+ key: {
28833
+ description: "The handoff's handle, the agent's own (`renovate-fold`): lower-case letters, digits and dashes.",
28834
+ pattern: "^[a-z0-9][a-z0-9-]{0,59}$"
28835
+ }
28836
+ };
28837
+ var KEY_SCHEMA = { key: echoHandoffKeySchema };
28838
+ var VIEW = "`{ id, key, from: { id, name }, to: { id, name }, what, thread: { id, title, slug, icon } | null, state, sentAt, seenAt, pickedAt, doneAt, nudgedAt }`";
28839
+ var echoHandoffOperations = defineOperations({
28840
+ list: {
28841
+ method: "get",
28842
+ path: "/echo/handoffs",
28843
+ scopes: ["agents:read"],
28844
+ tag: "Agents",
28845
+ summary: "List the handoffs",
28846
+ description: `The handoffs between the member's agents, the newest first: every one not done, and those done in the last day: ${VIEW}. \`nudgedAt\` says the member nudged the one it went to; a \`to\` the agent didn't set means the member gave it to someone else.`,
28847
+ status: 200,
28848
+ response: { description: "The handoffs.", list: true },
28849
+ errors: { 403: NO_USER }
28850
+ },
28851
+ put: {
28852
+ method: "put",
28853
+ path: "/echo/handoffs/{key}",
28854
+ pathParams: KEY,
28855
+ pathParamSchemas: KEY_SCHEMA,
28856
+ scopes: ["agents:write"],
28857
+ tag: "Agents",
28858
+ summary: "Declare a handoff or move it along",
28859
+ description: "Who it's `from` and `to` (Agent names), `what`, the member's standing `thread` it belongs to (by slug) and its `state`: `sent`, `seen`, `picked` or `done`. A new key starts as `sent` unless given; a new state stamps its time (`at`, default now) and clears a nudge. An unknown agent or thread is a 404.",
28860
+ body: putEchoHandoffInputSchema,
28861
+ status: 200,
28862
+ response: { description: "The handoff." },
28863
+ errors: { 400: true, 403: NO_USER, 404: "No such agent or thread." }
28864
+ },
28865
+ nudge: {
28866
+ method: "post",
28867
+ path: "/echo/handoffs/{key}/nudge",
28868
+ pathParams: KEY,
28869
+ pathParamSchemas: KEY_SCHEMA,
28870
+ scopes: ["agents:write"],
28871
+ tag: "Agents",
28872
+ summary: "Nudge the agent a handoff went to",
28873
+ description: "Stamps `nudgedAt`, which the agent reads until the handoff moves on. A handoff already picked up or done is a 409. An unknown key is a 404.",
28874
+ status: 200,
28875
+ response: { description: "The handoff." },
28876
+ errors: { 403: NO_USER, 404: true, 409: "It was picked up already." }
28877
+ },
28878
+ reassign: {
28879
+ method: "patch",
28880
+ path: "/echo/handoffs/{key}",
28881
+ pathParams: KEY,
28882
+ pathParamSchemas: KEY_SCHEMA,
28883
+ scopes: ["agents:write"],
28884
+ tag: "Agents",
28885
+ summary: "Give a handoff to another agent",
28886
+ description: "The member gives it to another of the Space's agents (`to`, its id): it starts over as `sent` to that one. A handoff already done is a 409; an unknown key or agent is a 404.",
28887
+ body: reassignEchoHandoffInputSchema,
28888
+ status: 200,
28889
+ response: { description: "The handoff." },
28890
+ errors: { 400: true, 403: NO_USER, 404: true, 409: "It's done." }
28891
+ },
28892
+ remove: {
28893
+ method: "delete",
28894
+ path: "/echo/handoffs/{key}",
28895
+ pathParams: KEY,
28896
+ pathParamSchemas: KEY_SCHEMA,
28897
+ scopes: ["agents:write"],
28898
+ tag: "Agents",
28899
+ summary: "Remove a handoff",
28900
+ description: "The agent drops the handoff. An unknown key is a 404.",
28901
+ status: 204,
28902
+ response: { description: "Removed." },
28903
+ errors: { 403: NO_USER, 404: true }
28904
+ }
28905
+ });
28712
28906
 
28713
28907
  // ../../packages/schema/src/db/echo-schedules.ts
28714
28908
  var ECHO_SCHEDULE_LEVELS = ["now", "today", "digest", "silent"];
@@ -28796,15 +28990,15 @@ var reportEchoScheduleRunInputSchema = object({
28796
28990
  var echoScheduleKeyParamSchema = object({ key: echoScheduleKeySchema });
28797
28991
 
28798
28992
  // ../../packages/schema/src/operations/echo-schedules.ts
28799
- var NO_USER = "The key has no user identity (scheduled posts are per member).";
28800
- var KEY = {
28993
+ var NO_USER2 = "The key has no user identity (scheduled posts are per member).";
28994
+ var KEY2 = {
28801
28995
  key: {
28802
28996
  description: "The job's handle, the agent's own (`wake`, `pings`): lower-case letters, digits and dashes.",
28803
28997
  pattern: "^[a-z0-9][a-z0-9-]{0,39}$"
28804
28998
  }
28805
28999
  };
28806
- var KEY_SCHEMA = { key: echoScheduleKeySchema };
28807
- var VIEW = "`{ id, key, name, thread: { id, title, slug, icon }, agentId, desk, times, everyMinutes, weekdays, level, levelNote, paused, runRequested, lastRunAt, lastStatus, lastNote }`";
29000
+ var KEY_SCHEMA2 = { key: echoScheduleKeySchema };
29001
+ var VIEW2 = "`{ id, key, name, thread: { id, title, slug, icon }, agentId, desk, times, everyMinutes, weekdays, level, levelNote, paused, runRequested, lastRunAt, lastStatus, lastNote }`";
28808
29002
  var echoScheduleOperations = defineOperations({
28809
29003
  list: {
28810
29004
  method: "get",
@@ -28812,16 +29006,16 @@ var echoScheduleOperations = defineOperations({
28812
29006
  scopes: ["agents:read"],
28813
29007
  tag: "Agents",
28814
29008
  summary: "List the scheduled posts",
28815
- description: `Every job that posts into the member's threads on a clock, by name: ${VIEW}. \`times\` are \`HH:MM\` on the member's wall clock; with \`everyMinutes\` the job repeats from the first until midnight; \`weekdays\` are ISO (1 = Monday), empty for every day. \`level\` says how its posts land (\`now\` pushes, \`today\` a card in its thread, \`digest\` folded into one line, \`silent\` only in its history). A \`paused\` job doesn't run; \`runRequested\` asks for a run now.`,
29009
+ description: `Every job that posts into the member's threads on a clock, by name: ${VIEW2}. \`times\` are \`HH:MM\` on the member's wall clock; with \`everyMinutes\` the job repeats from the first until midnight; \`weekdays\` are ISO (1 = Monday), empty for every day. \`level\` says how its posts land (\`now\` pushes, \`today\` a card in its thread, \`digest\` folded into one line, \`silent\` only in its history). A \`paused\` job doesn't run; \`runRequested\` asks for a run now.`,
28816
29010
  status: 200,
28817
29011
  response: { description: "The scheduled posts.", list: true },
28818
- errors: { 403: NO_USER }
29012
+ errors: { 403: NO_USER2 }
28819
29013
  },
28820
29014
  put: {
28821
29015
  method: "put",
28822
29016
  path: "/echo/schedules/{key}",
28823
- pathParams: KEY,
28824
- pathParamSchemas: KEY_SCHEMA,
29017
+ pathParams: KEY2,
29018
+ pathParamSchemas: KEY_SCHEMA2,
28825
29019
  scopes: ["agents:write"],
28826
29020
  tag: "Agents",
28827
29021
  summary: "Declare a scheduled post",
@@ -28829,13 +29023,13 @@ var echoScheduleOperations = defineOperations({
28829
29023
  body: putEchoScheduleInputSchema,
28830
29024
  status: 200,
28831
29025
  response: { description: "The scheduled post." },
28832
- errors: { 400: true, 403: NO_USER, 404: "No such thread." }
29026
+ errors: { 400: true, 403: NO_USER2, 404: "No such thread." }
28833
29027
  },
28834
29028
  update: {
28835
29029
  method: "patch",
28836
29030
  path: "/echo/schedules/{key}",
28837
- pathParams: KEY,
28838
- pathParamSchemas: KEY_SCHEMA,
29031
+ pathParams: KEY2,
29032
+ pathParamSchemas: KEY_SCHEMA2,
28839
29033
  scopes: ["agents:write"],
28840
29034
  tag: "Agents",
28841
29035
  summary: "Change a scheduled post's level or pause it",
@@ -28843,26 +29037,26 @@ var echoScheduleOperations = defineOperations({
28843
29037
  body: updateEchoScheduleInputSchema,
28844
29038
  status: 200,
28845
29039
  response: { description: "The scheduled post." },
28846
- errors: { 400: true, 403: NO_USER, 404: true }
29040
+ errors: { 400: true, 403: NO_USER2, 404: true }
28847
29041
  },
28848
29042
  runNow: {
28849
29043
  method: "post",
28850
29044
  path: "/echo/schedules/{key}/run",
28851
- pathParams: KEY,
28852
- pathParamSchemas: KEY_SCHEMA,
29045
+ pathParams: KEY2,
29046
+ pathParamSchemas: KEY_SCHEMA2,
28853
29047
  scopes: ["agents:write"],
28854
29048
  tag: "Agents",
28855
29049
  summary: "Ask for a scheduled post now",
28856
29050
  description: "Asks the agent to run the job now: it reads `runRequested` on the job until it reports the run. A paused job is a 409. An unknown key is a 404.",
28857
29051
  status: 200,
28858
29052
  response: { description: "The scheduled post." },
28859
- errors: { 403: NO_USER, 404: true, 409: "The job is paused." }
29053
+ errors: { 403: NO_USER2, 404: true, 409: "The job is paused." }
28860
29054
  },
28861
29055
  report: {
28862
29056
  method: "post",
28863
29057
  path: "/echo/schedules/{key}/runs",
28864
- pathParams: KEY,
28865
- pathParamSchemas: KEY_SCHEMA,
29058
+ pathParams: KEY2,
29059
+ pathParamSchemas: KEY_SCHEMA2,
28866
29060
  scopes: ["agents:write"],
28867
29061
  tag: "Agents",
28868
29062
  summary: "Report a scheduled post's run",
@@ -28870,20 +29064,20 @@ var echoScheduleOperations = defineOperations({
28870
29064
  body: reportEchoScheduleRunInputSchema,
28871
29065
  status: 200,
28872
29066
  response: { description: "The scheduled post." },
28873
- errors: { 400: true, 403: NO_USER, 404: true }
29067
+ errors: { 400: true, 403: NO_USER2, 404: true }
28874
29068
  },
28875
29069
  remove: {
28876
29070
  method: "delete",
28877
29071
  path: "/echo/schedules/{key}",
28878
- pathParams: KEY,
28879
- pathParamSchemas: KEY_SCHEMA,
29072
+ pathParams: KEY2,
29073
+ pathParamSchemas: KEY_SCHEMA2,
28880
29074
  scopes: ["agents:write"],
28881
29075
  tag: "Agents",
28882
29076
  summary: "Remove a scheduled post",
28883
29077
  description: "The agent no longer runs the job. An unknown key is a 404.",
28884
29078
  status: 204,
28885
29079
  response: { description: "Removed." },
28886
- errors: { 403: NO_USER, 404: true }
29080
+ errors: { 403: NO_USER2, 404: true }
28887
29081
  }
28888
29082
  });
28889
29083
 
@@ -29087,7 +29281,7 @@ var createEchoThreadInputSchema = object({
29087
29281
  }).strict();
29088
29282
 
29089
29283
  // ../../packages/schema/src/operations/echo-threads.ts
29090
- var NO_USER2 = "The key has no user identity (threads are per member).";
29284
+ var NO_USER3 = "The key has no user identity (threads are per member).";
29091
29285
  var echoThreadOperations = defineOperations({
29092
29286
  list: {
29093
29287
  method: "get",
@@ -29108,7 +29302,7 @@ var echoThreadOperations = defineOperations({
29108
29302
  querySchema: echoThreadsQuerySchema,
29109
29303
  status: 200,
29110
29304
  response: { description: "The member's threads.", list: true },
29111
- errors: { 400: true, 403: NO_USER2 }
29305
+ errors: { 400: true, 403: NO_USER3 }
29112
29306
  },
29113
29307
  create: {
29114
29308
  method: "post",
@@ -29121,7 +29315,7 @@ var echoThreadOperations = defineOperations({
29121
29315
  bodyOptional: true,
29122
29316
  status: 201,
29123
29317
  response: { description: "The new current thread." },
29124
- errors: { 403: NO_USER2 }
29318
+ errors: { 403: NO_USER3 }
29125
29319
  },
29126
29320
  current: {
29127
29321
  method: "get",
@@ -29132,7 +29326,7 @@ var echoThreadOperations = defineOperations({
29132
29326
  description: "The thread the agent panel opens on (the most recently used), with its turns oldest first: question, reply, `status` (`streaming` | `done` | `error` | `cancelled`), the change-feed cursor `since`, the changes and the confirmations. `{ thread: null }` before the first.",
29133
29327
  status: 200,
29134
29328
  response: { description: "`{ thread }`." },
29135
- errors: { 403: NO_USER2 }
29329
+ errors: { 403: NO_USER3 }
29136
29330
  },
29137
29331
  briefs: {
29138
29332
  method: "get",
@@ -29152,7 +29346,7 @@ var echoThreadOperations = defineOperations({
29152
29346
  querySchema: echoBriefsQuerySchema,
29153
29347
  status: 200,
29154
29348
  response: { description: "`{ briefs }`." },
29155
- errors: { 400: true, 403: NO_USER2 }
29349
+ errors: { 400: true, 403: NO_USER3 }
29156
29350
  },
29157
29351
  get: {
29158
29352
  method: "get",
@@ -29163,7 +29357,7 @@ var echoThreadOperations = defineOperations({
29163
29357
  description: "One of the member's threads with its turns, oldest first. Another member's thread is a 404.",
29164
29358
  status: 200,
29165
29359
  response: { description: "The thread." },
29166
- errors: { 403: NO_USER2, 404: true }
29360
+ errors: { 403: NO_USER3, 404: true }
29167
29361
  },
29168
29362
  update: {
29169
29363
  method: "patch",
@@ -29175,7 +29369,7 @@ var echoThreadOperations = defineOperations({
29175
29369
  body: updateEchoThreadInputSchema,
29176
29370
  status: 200,
29177
29371
  response: { description: "The thread as the list shows it, with its `push`." },
29178
- errors: { 400: true, 403: NO_USER2, 404: true }
29372
+ errors: { 400: true, 403: NO_USER3, 404: true }
29179
29373
  },
29180
29374
  addStanding: {
29181
29375
  method: "post",
@@ -29187,7 +29381,7 @@ var echoThreadOperations = defineOperations({
29187
29381
  body: createStandingThreadInputSchema,
29188
29382
  status: 201,
29189
29383
  response: { description: "The standing thread." },
29190
- errors: { 400: true, 403: NO_USER2, 409: true }
29384
+ errors: { 400: true, 403: NO_USER3, 409: true }
29191
29385
  }
29192
29386
  });
29193
29387
 
@@ -46546,6 +46740,41 @@ var commands = [
46546
46740
  },
46547
46741
  run: readOperation(agentOperations.list, renderList, {}, { paged: true })
46548
46742
  },
46743
+ {
46744
+ spec: {
46745
+ path: ["agents", "profile"],
46746
+ summary: "Report an agent's profile and status for Echo \u203A Agents (its own, or one Echo relays).",
46747
+ args: [{ name: "agent", required: true, description: "The Agent: its id or name." }],
46748
+ flags: [
46749
+ { name: "kind", type: "string", description: "assistant, agent, lane or session." },
46750
+ { name: "about", type: "string", description: "A line on what it does." },
46751
+ { name: "machine", type: "string", description: "The machine it runs on." },
46752
+ { name: "account", type: "string", description: "The account it runs on." },
46753
+ { name: "status", type: "string", description: "working, waiting or idle." },
46754
+ { name: "on", type: "string", description: "What it's on (Deploying v1.365)." }
46755
+ ],
46756
+ scopes: [...agentOperations.profile.scopes],
46757
+ returns: "Agent",
46758
+ notes: "Only the fields sent change; a status or what it's on stamps statusAt."
46759
+ },
46760
+ run: async ({ args, flags, requireClient }) => {
46761
+ const client = requireClient();
46762
+ const sent = Object.entries({
46763
+ kind: flagString(flags, "kind"),
46764
+ about: flagString(flags, "about"),
46765
+ machine: flagString(flags, "machine"),
46766
+ account: flagString(flags, "account"),
46767
+ status: flagString(flags, "status"),
46768
+ statusText: flagString(flags, "on")
46769
+ }).filter(([, v]) => v !== undefined);
46770
+ const body = parseInput(agentProfileInputSchema, Object.fromEntries(sent));
46771
+ const id = await resolveAgentId(client, requireArg(args, 0, "agent"));
46772
+ return {
46773
+ data: await client.patch(pathOf(agentOperations.profile, { id }), body),
46774
+ render: renderRecord
46775
+ };
46776
+ }
46777
+ },
46549
46778
  {
46550
46779
  spec: {
46551
46780
  path: ["agent", "connection", "get"],
@@ -50674,11 +50903,125 @@ var commands16 = [
50674
50903
  }
50675
50904
  ];
50676
50905
 
50906
+ // src/commands/echo-handoffs.ts
50907
+ var STATES = ["sent", "seen", "picked", "done"];
50908
+ var KEY_ARG = {
50909
+ name: "key",
50910
+ required: true,
50911
+ description: "The handoff's handle (`renovate-fold`): lower-case letters, digits and dashes."
50912
+ };
50913
+ var keyPath = (op, args) => pathOf(op, { key: requireArg(args, 0, "handoff key") });
50914
+ var commands17 = [
50915
+ {
50916
+ spec: {
50917
+ path: ["echo", "handoffs", "list"],
50918
+ summary: "List the handoffs between your agents: every one not done, and today's done.",
50919
+ args: [],
50920
+ flags: [],
50921
+ scopes: [...echoHandoffOperations.list.scopes],
50922
+ returns: "EchoHandoff[]",
50923
+ notes: "nudgedAt says you nudged the one it went to."
50924
+ },
50925
+ run: async ({ requireClient }) => ({
50926
+ data: await requireClient().getPage(pathOf(echoHandoffOperations.list)),
50927
+ render: renderList
50928
+ })
50929
+ },
50930
+ {
50931
+ spec: {
50932
+ path: ["echo", "handoffs", "set"],
50933
+ summary: "Declare a handoff, or move it along (the agent's): a new key starts it as sent.",
50934
+ args: [KEY_ARG],
50935
+ flags: [
50936
+ { name: "from", type: "string", description: "The agent handing it over, by name." },
50937
+ { name: "to", type: "string", description: "The agent it goes to, by name." },
50938
+ { name: "what", type: "string", description: "What's handed over." },
50939
+ { name: "thread", type: "string", description: "The standing thread it belongs to." },
50940
+ { name: "state", type: "string", description: "sent, seen, picked or done." },
50941
+ { name: "at", type: "string", description: "When it got there (ISO); default now." }
50942
+ ],
50943
+ scopes: [...echoHandoffOperations.put.scopes],
50944
+ returns: "EchoHandoff",
50945
+ notes: "A new state stamps its time and clears a nudge. An unknown agent or thread is a 404."
50946
+ },
50947
+ run: async ({ args, flags, requireClient }) => {
50948
+ const from = flagString(flags, "from");
50949
+ const to = flagString(flags, "to");
50950
+ const what = flagString(flags, "what");
50951
+ if (!from || !to || !what)
50952
+ throw usageError("--from, --to and --what are required");
50953
+ const thread = flagString(flags, "thread");
50954
+ const state = flagString(flags, "state");
50955
+ const at = flagString(flags, "at");
50956
+ if (state && !STATES.includes(state))
50957
+ throw usageError(`--state is one of ${STATES.join(", ")}`);
50958
+ return {
50959
+ data: await requireClient().put(keyPath(echoHandoffOperations.put, args), {
50960
+ from,
50961
+ to,
50962
+ what,
50963
+ ...thread ? { thread } : {},
50964
+ ...state ? { state } : {},
50965
+ ...at ? { at } : {}
50966
+ }),
50967
+ render: renderRecord
50968
+ };
50969
+ }
50970
+ },
50971
+ {
50972
+ spec: {
50973
+ path: ["echo", "handoffs", "nudge"],
50974
+ summary: "Nudge the agent a handoff went to.",
50975
+ args: [KEY_ARG],
50976
+ flags: [],
50977
+ scopes: [...echoHandoffOperations.nudge.scopes],
50978
+ returns: "EchoHandoff",
50979
+ notes: "One picked up or done already is a 409."
50980
+ },
50981
+ run: async ({ args, requireClient }) => ({
50982
+ data: await requireClient().post(keyPath(echoHandoffOperations.nudge, args), {}),
50983
+ render: renderRecord
50984
+ })
50985
+ },
50986
+ {
50987
+ spec: {
50988
+ path: ["echo", "handoffs", "give"],
50989
+ summary: "Give a handoff to another agent: it starts over as sent to them.",
50990
+ args: [KEY_ARG, { name: "to", required: true, description: "The agent's id." }],
50991
+ flags: [],
50992
+ scopes: [...echoHandoffOperations.reassign.scopes],
50993
+ returns: "EchoHandoff",
50994
+ notes: "One done already is a 409. See `do agents list` for the ids."
50995
+ },
50996
+ run: async ({ args, requireClient }) => ({
50997
+ data: await requireClient().patch(keyPath(echoHandoffOperations.reassign, args), {
50998
+ to: requireArg(args, 1, "agent id")
50999
+ }),
51000
+ render: renderRecord
51001
+ })
51002
+ },
51003
+ {
51004
+ spec: {
51005
+ path: ["echo", "handoffs", "rm"],
51006
+ summary: "Remove a handoff (the agent drops it).",
51007
+ args: [KEY_ARG],
51008
+ flags: [],
51009
+ scopes: [...echoHandoffOperations.remove.scopes],
51010
+ returns: "nothing",
51011
+ notes: "An unknown key is a 404."
51012
+ },
51013
+ run: async ({ args, requireClient }) => {
51014
+ await requireClient().delete(keyPath(echoHandoffOperations.remove, args));
51015
+ return { data: { removed: requireArg(args, 0, "handoff key") }, render: renderRecord };
51016
+ }
51017
+ }
51018
+ ];
51019
+
50677
51020
  // src/commands/echo-schedules.ts
50678
51021
  var LEVELS = ["now", "today", "digest", "silent"];
50679
51022
  var STATUSES = ["ok", "failed", "unanswered"];
50680
51023
  var DAYS = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
50681
- var KEY_ARG = {
51024
+ var KEY_ARG2 = {
50682
51025
  name: "key",
50683
51026
  required: true,
50684
51027
  description: "The job's handle (`wake`, `pings`): lower-case letters, digits and dashes."
@@ -50696,8 +51039,8 @@ function weekdaysOf(days) {
50696
51039
  return i + 1;
50697
51040
  });
50698
51041
  }
50699
- var keyPath = (op, args) => pathOf(op, { key: requireArg(args, 0, "job key") });
50700
- var commands17 = [
51042
+ var keyPath2 = (op, args) => pathOf(op, { key: requireArg(args, 0, "job key") });
51043
+ var commands18 = [
50701
51044
  {
50702
51045
  spec: {
50703
51046
  path: ["echo", "schedules", "list"],
@@ -50717,7 +51060,7 @@ var commands17 = [
50717
51060
  spec: {
50718
51061
  path: ["echo", "schedules", "set"],
50719
51062
  summary: "Declare a scheduled post (the agent's): a new key makes it, a known key updates it.",
50720
- args: [KEY_ARG],
51063
+ args: [KEY_ARG2],
50721
51064
  flags: [
50722
51065
  { name: "name", type: "string", description: "What it's called (Wake message)." },
50723
51066
  {
@@ -50760,7 +51103,7 @@ var commands17 = [
50760
51103
  const level = flagString(flags, "level");
50761
51104
  const note = flagString(flags, "note");
50762
51105
  return {
50763
- data: await requireClient().put(keyPath(echoScheduleOperations.put, args), {
51106
+ data: await requireClient().put(keyPath2(echoScheduleOperations.put, args), {
50764
51107
  name,
50765
51108
  thread,
50766
51109
  times: at.split(",").map((t) => t.trim()),
@@ -50779,7 +51122,7 @@ var commands17 = [
50779
51122
  path: ["echo", "schedules", "level"],
50780
51123
  summary: "Set how a scheduled post lands: now, today, digest or silent.",
50781
51124
  args: [
50782
- KEY_ARG,
51125
+ KEY_ARG2,
50783
51126
  { name: "level", required: true, description: "now, today, digest or silent." }
50784
51127
  ],
50785
51128
  flags: [],
@@ -50788,7 +51131,7 @@ var commands17 = [
50788
51131
  notes: "now pushes; today is a card in its thread; digest folds into one line; silent stays in its history."
50789
51132
  },
50790
51133
  run: async ({ args, requireClient }) => ({
50791
- data: await requireClient().patch(keyPath(echoScheduleOperations.update, args), {
51134
+ data: await requireClient().patch(keyPath2(echoScheduleOperations.update, args), {
50792
51135
  level: oneOf(requireArg(args, 1, "level"), LEVELS, "level")
50793
51136
  }),
50794
51137
  render: renderRecord
@@ -50798,14 +51141,14 @@ var commands17 = [
50798
51141
  spec: {
50799
51142
  path: ["echo", "schedules", verb],
50800
51143
  summary: verb === "pause" ? "Pause a scheduled post: the agent skips it." : "Resume a paused scheduled post.",
50801
- args: [KEY_ARG],
51144
+ args: [KEY_ARG2],
50802
51145
  flags: [],
50803
51146
  scopes: [...echoScheduleOperations.update.scopes],
50804
51147
  returns: "EchoSchedule",
50805
51148
  notes: "An unknown key is a 404."
50806
51149
  },
50807
51150
  run: async ({ args, requireClient }) => ({
50808
- data: await requireClient().patch(keyPath(echoScheduleOperations.update, args), {
51151
+ data: await requireClient().patch(keyPath2(echoScheduleOperations.update, args), {
50809
51152
  paused: verb === "pause"
50810
51153
  }),
50811
51154
  render: renderRecord
@@ -50815,14 +51158,14 @@ var commands17 = [
50815
51158
  spec: {
50816
51159
  path: ["echo", "schedules", "run"],
50817
51160
  summary: "Ask the agent to run a scheduled post now.",
50818
- args: [KEY_ARG],
51161
+ args: [KEY_ARG2],
50819
51162
  flags: [],
50820
51163
  scopes: [...echoScheduleOperations.runNow.scopes],
50821
51164
  returns: "EchoSchedule",
50822
51165
  notes: "The job reads runRequested until the agent reports a run. A paused job is a 409."
50823
51166
  },
50824
51167
  run: async ({ args, requireClient }) => ({
50825
- data: await requireClient().post(keyPath(echoScheduleOperations.runNow, args), {}),
51168
+ data: await requireClient().post(keyPath2(echoScheduleOperations.runNow, args), {}),
50826
51169
  render: renderRecord
50827
51170
  })
50828
51171
  },
@@ -50830,7 +51173,7 @@ var commands17 = [
50830
51173
  spec: {
50831
51174
  path: ["echo", "schedules", "ran"],
50832
51175
  summary: "Report a scheduled post's run (the agent's): ok, failed or unanswered.",
50833
- args: [KEY_ARG, { name: "status", required: true, description: "ok, failed or unanswered." }],
51176
+ args: [KEY_ARG2, { name: "status", required: true, description: "ok, failed or unanswered." }],
50834
51177
  flags: [
50835
51178
  { name: "note", type: "string", description: "A word on the run (2 differences)." },
50836
51179
  { name: "at", type: "string", description: "When it ran (ISO); default now." }
@@ -50843,7 +51186,7 @@ var commands17 = [
50843
51186
  const note = flagString(flags, "note");
50844
51187
  const at = flagString(flags, "at");
50845
51188
  return {
50846
- data: await requireClient().post(keyPath(echoScheduleOperations.report, args), {
51189
+ data: await requireClient().post(keyPath2(echoScheduleOperations.report, args), {
50847
51190
  status: oneOf(requireArg(args, 1, "status"), STATUSES, "status"),
50848
51191
  ...note ? { note } : {},
50849
51192
  ...at ? { at } : {}
@@ -50856,14 +51199,14 @@ var commands17 = [
50856
51199
  spec: {
50857
51200
  path: ["echo", "schedules", "rm"],
50858
51201
  summary: "Remove a scheduled post (the agent no longer runs it).",
50859
- args: [KEY_ARG],
51202
+ args: [KEY_ARG2],
50860
51203
  flags: [],
50861
51204
  scopes: [...echoScheduleOperations.remove.scopes],
50862
51205
  returns: "nothing",
50863
51206
  notes: "An unknown key is a 404."
50864
51207
  },
50865
51208
  run: async ({ args, requireClient }) => {
50866
- await requireClient().delete(keyPath(echoScheduleOperations.remove, args));
51209
+ await requireClient().delete(keyPath2(echoScheduleOperations.remove, args));
50867
51210
  return { data: { removed: requireArg(args, 0, "job key") }, render: renderRecord };
50868
51211
  }
50869
51212
  }
@@ -50872,7 +51215,7 @@ var commands17 = [
50872
51215
  // src/commands/files.ts
50873
51216
  import { readFileSync as readFileSync5, writeFileSync as writeFileSync2 } from "fs";
50874
51217
  import { basename as basename2 } from "path";
50875
- var commands18 = [
51218
+ var commands19 = [
50876
51219
  {
50877
51220
  spec: {
50878
51221
  path: ["files", "list"],
@@ -51042,7 +51385,7 @@ var commands18 = [
51042
51385
  ];
51043
51386
 
51044
51387
  // src/commands/food.ts
51045
- var commands19 = [
51388
+ var commands20 = [
51046
51389
  {
51047
51390
  spec: {
51048
51391
  path: ["foods", "search"],
@@ -51597,7 +51940,7 @@ var commands19 = [
51597
51940
  // src/commands/guest-lists.ts
51598
51941
  import { writeFileSync as writeFileSync3 } from "fs";
51599
51942
  import { basename as basename3 } from "path";
51600
- var commands20 = [
51943
+ var commands21 = [
51601
51944
  {
51602
51945
  spec: {
51603
51946
  path: ["guest-lists", "overview"],
@@ -51687,7 +52030,7 @@ var commands20 = [
51687
52030
  ];
51688
52031
 
51689
52032
  // src/commands/guests.ts
51690
- var commands21 = [
52033
+ var commands22 = [
51691
52034
  {
51692
52035
  spec: {
51693
52036
  path: ["guests", "sent"],
@@ -51772,7 +52115,7 @@ function renderItems(data, mode) {
51772
52115
  var habitArg = { name: "id", required: true, description: "The checklist habit's ULID." };
51773
52116
  var itemArg = { name: "item-id", required: true, description: "The item's ULID." };
51774
52117
  var NOT_CHECKLIST = "A habit that isn't a checklist answers 409.";
51775
- var commands22 = [
52118
+ var commands23 = [
51776
52119
  {
51777
52120
  spec: {
51778
52121
  path: ["habit", "items"],
@@ -52126,7 +52469,7 @@ function seasonFromFlags(flags) {
52126
52469
  const season = flagString(flags, "season");
52127
52470
  return season === undefined ? {} : { activeMonths: seasonFromFlag(season) };
52128
52471
  }
52129
- var commands23 = [
52472
+ var commands24 = [
52130
52473
  {
52131
52474
  spec: {
52132
52475
  path: ["habits", "create"],
@@ -53375,7 +53718,7 @@ function healthRecordHandlers() {
53375
53718
  }
53376
53719
  return out;
53377
53720
  }
53378
- var commands24 = pairCommands(HEALTH_COMMAND_SPECS, {
53721
+ var commands25 = pairCommands(HEALTH_COMMAND_SPECS, {
53379
53722
  ...healthRecordHandlers(),
53380
53723
  "health record": async ({ flags, requireClient }) => {
53381
53724
  const body = parseInput(logHealthInputSchema, readDataFlag(flags));
@@ -53690,7 +54033,7 @@ var commands24 = pairCommands(HEALTH_COMMAND_SPECS, {
53690
54033
  });
53691
54034
 
53692
54035
  // src/commands/house.ts
53693
- var commands25 = [
54036
+ var commands26 = [
53694
54037
  {
53695
54038
  spec: {
53696
54039
  path: ["house"],
@@ -53972,7 +54315,7 @@ function renderSorting(data, _mode) {
53972
54315
  ].join(`
53973
54316
  `);
53974
54317
  }
53975
- var commands26 = [
54318
+ var commands27 = [
53976
54319
  defineCommand({
53977
54320
  operation: inboxOperations.list,
53978
54321
  path: ["inbox"],
@@ -54064,7 +54407,7 @@ var commands26 = [
54064
54407
  ];
54065
54408
 
54066
54409
  // src/commands/incidents.ts
54067
- var commands27 = [
54410
+ var commands28 = [
54068
54411
  {
54069
54412
  spec: {
54070
54413
  path: ["incidents", "open"],
@@ -54293,7 +54636,7 @@ function journalDateArg(args, verb) {
54293
54636
  }
54294
54637
  return date;
54295
54638
  }
54296
- var commands28 = [
54639
+ var commands29 = [
54297
54640
  defineCommand({
54298
54641
  operation: journalOperations.day,
54299
54642
  path: ["journal", "day"],
@@ -54856,7 +55199,7 @@ function renderCreatedKey(data, mode) {
54856
55199
  ].join(`
54857
55200
  `);
54858
55201
  }
54859
- var commands29 = [
55202
+ var commands30 = [
54860
55203
  {
54861
55204
  spec: {
54862
55205
  path: ["keys", "list"],
@@ -54992,7 +55335,7 @@ var KIND_FLAG2 = {
54992
55335
  type: "string",
54993
55336
  description: "The kind of an unknown word (pages, eggs, health, note, or a word taught before); remembered for the Space."
54994
55337
  };
54995
- var commands30 = [
55338
+ var commands31 = [
54996
55339
  {
54997
55340
  spec: {
54998
55341
  path: ["log"],
@@ -55067,7 +55410,7 @@ var commands30 = [
55067
55410
  ];
55068
55411
 
55069
55412
  // src/commands/mail-campaigns.ts
55070
- var commands31 = [
55413
+ var commands32 = [
55071
55414
  {
55072
55415
  spec: {
55073
55416
  path: ["mail-campaigns", "list"],
@@ -55382,7 +55725,7 @@ async function serveMcp(io, target) {
55382
55725
  }
55383
55726
 
55384
55727
  // src/commands/mcp.ts
55385
- var commands32 = [
55728
+ var commands33 = [
55386
55729
  {
55387
55730
  spec: {
55388
55731
  path: ["mcp"],
@@ -55427,7 +55770,7 @@ var commands32 = [
55427
55770
  ];
55428
55771
 
55429
55772
  // src/commands/members.ts
55430
- var commands33 = [
55773
+ var commands34 = [
55431
55774
  {
55432
55775
  spec: {
55433
55776
  path: ["invite", "create"],
@@ -55552,7 +55895,7 @@ var commands33 = [
55552
55895
  ];
55553
55896
 
55554
55897
  // src/commands/metrics.ts
55555
- var commands34 = [
55898
+ var commands35 = [
55556
55899
  {
55557
55900
  spec: {
55558
55901
  path: ["metrics", "list"],
@@ -55680,7 +56023,7 @@ async function setModuleVisibility(args, requireClient, on) {
55680
56023
  render: renderRecord
55681
56024
  };
55682
56025
  }
55683
- var commands35 = [
56026
+ var commands36 = [
55684
56027
  {
55685
56028
  spec: {
55686
56029
  path: ["modules", "list"],
@@ -55909,7 +56252,7 @@ function shareFlag(flags) {
55909
56252
  function localMonth(now) {
55910
56253
  return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}`;
55911
56254
  }
55912
- var commands36 = [
56255
+ var commands37 = [
55913
56256
  defineCommand({
55914
56257
  operation: moneyOperations.listAccounts,
55915
56258
  path: ["money", "accounts"],
@@ -57078,7 +57421,7 @@ var commands36 = [
57078
57421
  ];
57079
57422
 
57080
57423
  // src/commands/notes.ts
57081
- var commands37 = [
57424
+ var commands38 = [
57082
57425
  {
57083
57426
  spec: {
57084
57427
  path: ["notes", "backlinks"],
@@ -57200,7 +57543,7 @@ var commands37 = [
57200
57543
  ];
57201
57544
 
57202
57545
  // src/commands/orca.ts
57203
- var commands38 = [
57546
+ var commands39 = [
57204
57547
  {
57205
57548
  spec: {
57206
57549
  path: ["orca", "list"],
@@ -57566,7 +57909,7 @@ function linkBody(args) {
57566
57909
  return parseInput(familyTreeLinkInputSchema, { kind, a: ref, b: other });
57567
57910
  throw usageError("the kind is parent, child or partner");
57568
57911
  }
57569
- var commands39 = [
57912
+ var commands40 = [
57570
57913
  {
57571
57914
  spec: {
57572
57915
  path: ["people", "propose"],
@@ -58255,7 +58598,7 @@ var commands39 = [
58255
58598
 
58256
58599
  // src/commands/places.ts
58257
58600
  import { readFileSync as readFileSync10 } from "fs";
58258
- var commands40 = [
58601
+ var commands41 = [
58259
58602
  {
58260
58603
  spec: {
58261
58604
  path: ["places", "import"],
@@ -58312,7 +58655,7 @@ async function planDecision({ args, requireClient }, verb) {
58312
58655
  render: renderPlan
58313
58656
  };
58314
58657
  }
58315
- var commands41 = [
58658
+ var commands42 = [
58316
58659
  {
58317
58660
  spec: {
58318
58661
  path: ["plans", "list"],
@@ -58539,7 +58882,7 @@ var commands41 = [
58539
58882
  ];
58540
58883
 
58541
58884
  // src/commands/presets.ts
58542
- var commands42 = [
58885
+ var commands43 = [
58543
58886
  {
58544
58887
  spec: {
58545
58888
  path: ["presets", "list"],
@@ -58636,7 +58979,7 @@ function renderReviewSummary(data, mode) {
58636
58979
  return out.join(`
58637
58980
  `);
58638
58981
  }
58639
- var commands43 = [
58982
+ var commands44 = [
58640
58983
  {
58641
58984
  spec: {
58642
58985
  path: ["progress"],
@@ -58845,7 +59188,7 @@ function renderUpdates(data, mode) {
58845
59188
  return updates.map((u) => updateLine(u, mode)).join(`
58846
59189
  `);
58847
59190
  }
58848
- var commands44 = [
59191
+ var commands45 = [
58849
59192
  defineCommand({
58850
59193
  operation: projectOperations.update,
58851
59194
  path: ["projects", "set"],
@@ -59442,7 +59785,7 @@ var routineCommands = [
59442
59785
  }
59443
59786
  }
59444
59787
  ];
59445
- var commands45 = [
59788
+ var commands46 = [
59446
59789
  ...routineCommands,
59447
59790
  {
59448
59791
  spec: {
@@ -59565,7 +59908,7 @@ var commands45 = [
59565
59908
  ];
59566
59909
 
59567
59910
  // src/commands/rsvp-answers.ts
59568
- var commands46 = [
59911
+ var commands47 = [
59569
59912
  {
59570
59913
  spec: {
59571
59914
  path: ["rsvp-answers", "list"],
@@ -59619,7 +59962,7 @@ var commands46 = [
59619
59962
  ];
59620
59963
 
59621
59964
  // src/commands/rsvp-links.ts
59622
- var commands47 = [
59965
+ var commands48 = [
59623
59966
  {
59624
59967
  spec: {
59625
59968
  path: ["rsvp-links", "list"],
@@ -59715,7 +60058,7 @@ var commands47 = [
59715
60058
  ];
59716
60059
 
59717
60060
  // src/commands/rsvp-questions.ts
59718
- var commands48 = [
60061
+ var commands49 = [
59719
60062
  {
59720
60063
  spec: {
59721
60064
  path: ["rsvp-questions", "presets"],
@@ -60287,7 +60630,7 @@ function sessionFlags(flags) {
60287
60630
  body.occurredOn = on;
60288
60631
  return body;
60289
60632
  }
60290
- var commands49 = [
60633
+ var commands50 = [
60291
60634
  {
60292
60635
  spec: {
60293
60636
  path: ["runs", "change"],
@@ -60604,7 +60947,7 @@ var commands49 = [
60604
60947
  ];
60605
60948
 
60606
60949
  // src/commands/search.ts
60607
- var commands50 = [
60950
+ var commands51 = [
60608
60951
  {
60609
60952
  spec: {
60610
60953
  path: ["search"],
@@ -60637,7 +60980,7 @@ var commands50 = [
60637
60980
  ];
60638
60981
 
60639
60982
  // src/commands/seating-proposals.ts
60640
- var commands51 = [
60983
+ var commands52 = [
60641
60984
  {
60642
60985
  spec: {
60643
60986
  path: ["seating-proposals", "list"],
@@ -60724,7 +61067,7 @@ var commands51 = [
60724
61067
  ];
60725
61068
 
60726
61069
  // src/commands/sensors.ts
60727
- var commands52 = [
61070
+ var commands53 = [
60728
61071
  {
60729
61072
  spec: {
60730
61073
  path: ["sensors", "status"],
@@ -60884,7 +61227,7 @@ var commands52 = [
60884
61227
  ];
60885
61228
 
60886
61229
  // src/commands/settings.ts
60887
- var commands53 = [
61230
+ var commands54 = [
60888
61231
  {
60889
61232
  spec: {
60890
61233
  path: ["settings", "get"],
@@ -60918,7 +61261,7 @@ var commands53 = [
60918
61261
  ];
60919
61262
 
60920
61263
  // src/commands/sharing.ts
60921
- var commands54 = [
61264
+ var commands55 = [
60922
61265
  {
60923
61266
  spec: {
60924
61267
  path: ["share"],
@@ -61051,7 +61394,7 @@ var commands54 = [
61051
61394
  ];
61052
61395
 
61053
61396
  // src/commands/space.ts
61054
- var commands55 = [
61397
+ var commands56 = [
61055
61398
  {
61056
61399
  spec: {
61057
61400
  path: ["space", "address"],
@@ -61107,7 +61450,7 @@ var commands55 = [
61107
61450
  ];
61108
61451
 
61109
61452
  // src/commands/tap-tags.ts
61110
- var commands56 = [
61453
+ var commands57 = [
61111
61454
  {
61112
61455
  spec: {
61113
61456
  path: ["tap-tags", "tap"],
@@ -61135,7 +61478,7 @@ var BY = {
61135
61478
  type: "string",
61136
61479
  description: "The blocking task's ref (DO-147) or ULID."
61137
61480
  };
61138
- var commands57 = [
61481
+ var commands58 = [
61139
61482
  defineCommand({
61140
61483
  operation: taskBlockOperations.addBlocker,
61141
61484
  path: ["tasks", "block"],
@@ -61201,7 +61544,7 @@ function renderSeries(data, mode) {
61201
61544
  }).join(`
61202
61545
  `);
61203
61546
  }
61204
- var commands58 = [
61547
+ var commands59 = [
61205
61548
  defineCommand({
61206
61549
  operation: taskSeriesOperations.make,
61207
61550
  path: ["tasks", "make-series"],
@@ -61356,7 +61699,7 @@ function repeatFromFlags(flags) {
61356
61699
  out.anchor = "from_completion";
61357
61700
  return out;
61358
61701
  }
61359
- var commands59 = [
61702
+ var commands60 = [
61360
61703
  {
61361
61704
  spec: {
61362
61705
  path: ["capture"],
@@ -61814,7 +62157,7 @@ var commands59 = [
61814
62157
  ];
61815
62158
 
61816
62159
  // src/commands/time-blocks.ts
61817
- var commands60 = [
62160
+ var commands61 = [
61818
62161
  {
61819
62162
  spec: {
61820
62163
  path: ["time-blocks", "record"],
@@ -62006,7 +62349,7 @@ function renderLandedCounts(data, mode) {
62006
62349
  return out.join(`
62007
62350
  `);
62008
62351
  }
62009
- var commands61 = [
62352
+ var commands62 = [
62010
62353
  {
62011
62354
  spec: {
62012
62355
  path: ["today"],
@@ -62378,7 +62721,7 @@ function renderViews(data, mode) {
62378
62721
  function renderView(data, mode) {
62379
62722
  return renderViews([data], mode);
62380
62723
  }
62381
- var commands62 = [
62724
+ var commands63 = [
62382
62725
  defineCommand({
62383
62726
  operation: workViewOperations.list,
62384
62727
  path: ["views", "list"],
@@ -62497,7 +62840,7 @@ var commands62 = [
62497
62840
  ];
62498
62841
 
62499
62842
  // src/commands/worktree-links.ts
62500
- var commands63 = [
62843
+ var commands64 = [
62501
62844
  {
62502
62845
  spec: {
62503
62846
  path: ["worktree-links", "list"],
@@ -62666,7 +63009,8 @@ var FEATURE_COMMANDS = [
62666
63009
  ...commands60,
62667
63010
  ...commands61,
62668
63011
  ...commands62,
62669
- ...commands63
63012
+ ...commands63,
63013
+ ...commands64
62670
63014
  ];
62671
63015
 
62672
63016
  // src/registry.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robbeverhelst/do",
3
- "version": "1.420.0",
3
+ "version": "1.421.0",
4
4
  "private": false,
5
5
  "description": "do — the agent-drivable CLI over the public /api/v1 surface",
6
6
  "homepage": "https://github.com/robbeverhelst/do/tree/main/apps/cli",