agent-relay 11.7.2 → 11.8.1

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 (59) hide show
  1. package/README.md +18 -3
  2. package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
  3. package/dist/cli/agent-relay-mcp.js +61 -1
  4. package/dist/cli/agent-relay-mcp.js.map +1 -1
  5. package/dist/cli/bootstrap.d.ts.map +1 -1
  6. package/dist/cli/bootstrap.js +2 -0
  7. package/dist/cli/bootstrap.js.map +1 -1
  8. package/dist/cli/commands/fleet-agent.d.ts +22 -5
  9. package/dist/cli/commands/fleet-agent.d.ts.map +1 -1
  10. package/dist/cli/commands/fleet-agent.js +0 -0
  11. package/dist/cli/commands/fleet-agent.js.map +1 -1
  12. package/dist/cli/commands/fleet.d.ts +3 -0
  13. package/dist/cli/commands/fleet.d.ts.map +1 -1
  14. package/dist/cli/commands/fleet.js +230 -55
  15. package/dist/cli/commands/fleet.js.map +1 -1
  16. package/dist/cli/commands/local-agent.d.ts.map +1 -1
  17. package/dist/cli/commands/local-agent.js +5 -1
  18. package/dist/cli/commands/local-agent.js.map +1 -1
  19. package/dist/cli/commands/observer.d.ts +28 -0
  20. package/dist/cli/commands/observer.d.ts.map +1 -0
  21. package/dist/cli/commands/observer.js +182 -0
  22. package/dist/cli/commands/observer.js.map +1 -0
  23. package/dist/cli/lib/attach-broker.d.ts.map +1 -1
  24. package/dist/cli/lib/attach-broker.js +6 -1
  25. package/dist/cli/lib/attach-broker.js.map +1 -1
  26. package/dist/cli/lib/attach-drive.d.ts +3 -11
  27. package/dist/cli/lib/attach-drive.d.ts.map +1 -1
  28. package/dist/cli/lib/attach-drive.js +5 -1
  29. package/dist/cli/lib/attach-drive.js.map +1 -1
  30. package/dist/cli/lib/attach-fleet-node.d.ts +7 -1
  31. package/dist/cli/lib/attach-fleet-node.d.ts.map +1 -1
  32. package/dist/cli/lib/attach-fleet-node.js +127 -19
  33. package/dist/cli/lib/attach-fleet-node.js.map +1 -1
  34. package/dist/cli/lib/attach-passthrough.d.ts +1 -0
  35. package/dist/cli/lib/attach-passthrough.d.ts.map +1 -1
  36. package/dist/cli/lib/attach-passthrough.js +5 -1
  37. package/dist/cli/lib/attach-passthrough.js.map +1 -1
  38. package/dist/cli/lib/attach-view.d.ts +3 -0
  39. package/dist/cli/lib/attach-view.d.ts.map +1 -1
  40. package/dist/cli/lib/attach-view.js +6 -1
  41. package/dist/cli/lib/attach-view.js.map +1 -1
  42. package/dist/cli/lib/attach.d.ts +2 -0
  43. package/dist/cli/lib/attach.d.ts.map +1 -1
  44. package/dist/cli/lib/attach.js +1 -1
  45. package/dist/cli/lib/attach.js.map +1 -1
  46. package/dist/cli/lib/broker-connection.d.ts +4 -0
  47. package/dist/cli/lib/broker-connection.d.ts.map +1 -1
  48. package/dist/cli/lib/broker-connection.js +1 -0
  49. package/dist/cli/lib/broker-connection.js.map +1 -1
  50. package/dist/cli/lib/node-provider-child.d.ts +2 -0
  51. package/dist/cli/lib/node-provider-child.d.ts.map +1 -1
  52. package/dist/cli/lib/node-provider-child.js +11 -0
  53. package/dist/cli/lib/node-provider-child.js.map +1 -1
  54. package/dist/cli/lib/observer-url.d.ts +32 -0
  55. package/dist/cli/lib/observer-url.d.ts.map +1 -0
  56. package/dist/cli/lib/observer-url.js +61 -0
  57. package/dist/cli/lib/observer-url.js.map +1 -0
  58. package/dist/index.cjs +389 -229
  59. package/package.json +9 -9
package/dist/index.cjs CHANGED
@@ -182,6 +182,7 @@ __export(index_exports, {
182
182
  MessageReadPredicate: () => MessageReadPredicate,
183
183
  OBSERVABILITY_UNAVAILABLE: () => OBSERVABILITY_UNAVAILABLE,
184
184
  RELAYCAST_SDK_VERSION: () => RELAYCAST_SDK_VERSION,
185
+ RELAY_OBSERVER_SCOPES: () => RELAY_OBSERVER_SCOPES,
185
186
  RELAY_SERVICE_FAILURE_MESSAGE: () => RELAY_SERVICE_FAILURE_MESSAGE,
186
187
  RelayCapabilityError: () => RelayCapabilityError,
187
188
  RelayError: () => RelayError,
@@ -214,6 +215,7 @@ __export(index_exports, {
214
215
  createLogger: () => createLogger,
215
216
  createNotifyHandler: () => createNotifyHandler,
216
217
  createObserverEventSource: () => createObserverEventSource,
218
+ createObserverToken: () => createObserverToken,
217
219
  createRealtimeClient: () => createRealtimeClient,
218
220
  createRequestEnvelope: () => createRequestEnvelope,
219
221
  createRequestHandler: () => createRequestHandler,
@@ -246,6 +248,7 @@ __export(index_exports, {
246
248
  isPlaceholderTargetFast: () => isPlaceholderTargetFast,
247
249
  isSpawnOrReleaseCommandFast: () => isSpawnOrReleaseCommandFast,
248
250
  isValidAgentName: () => isValidAgentName,
251
+ listObserverTokens: () => listObserverTokens,
249
252
  logAndTraceError: () => logAndTraceError,
250
253
  logRelayHandlerError: () => logRelayHandlerError,
251
254
  mapModelToCli: () => mapModelToCli,
@@ -280,6 +283,7 @@ __export(index_exports, {
280
283
  resolveAgentName: () => resolveAgentName,
281
284
  resolveAgentToken: () => resolveAgentToken,
282
285
  resolveCommand: () => resolveCommand,
286
+ revokeObserverToken: () => revokeObserverToken,
283
287
  routerLog: () => routerLog,
284
288
  safeRelayErrorMessage: () => safeRelayErrorMessage,
285
289
  stripAnsiFast: () => stripAnsiFast,
@@ -295,7 +299,7 @@ __export(index_exports, {
295
299
  module.exports = __toCommonJS(index_exports);
296
300
 
297
301
  // ../../node_modules/@relaycast/sdk/dist/version.js
298
- var SDK_VERSION = "8.0.6";
302
+ var SDK_VERSION = "8.1.3";
299
303
 
300
304
  // ../../node_modules/zod/v4/classic/external.js
301
305
  var external_exports = {};
@@ -14811,120 +14815,75 @@ function date4(params) {
14811
14815
  // ../../node_modules/zod/v4/classic/external.js
14812
14816
  config(en_default());
14813
14817
 
14814
- // ../../node_modules/@relaycast/types/dist/workspace.js
14815
- var WorkspaceSchema = external_exports.object({
14818
+ // ../../node_modules/@relaycast/types/dist/file.js
14819
+ var FileStatusSchema = external_exports.enum(["pending", "complete", "deleted"]);
14820
+ var FileRecordSchema = external_exports.object({
14816
14821
  id: external_exports.string(),
14817
- name: external_exports.string(),
14818
- system_prompt: external_exports.string().nullable(),
14819
- plan: external_exports.enum(["free", "pro", "enterprise"]),
14820
- created_at: external_exports.string(),
14821
- metadata: external_exports.record(external_exports.string(), external_exports.unknown()),
14822
- expires_at: external_exports.string().nullable().optional()
14823
- });
14824
- var CreateWorkspaceRequestSchema = external_exports.object({
14825
- name: external_exports.string(),
14826
- expires_in_seconds: external_exports.number().int().min(60).max(30 * 24 * 60 * 60).optional()
14827
- });
14828
- var CreateWorkspaceResponseSchema = external_exports.object({
14829
14822
  workspace_id: external_exports.string(),
14830
- api_key: external_exports.string().optional(),
14831
- created_at: external_exports.string(),
14832
- expires_at: external_exports.string().nullable().optional()
14833
- });
14834
- var WorkspaceLookupSchema = external_exports.object({
14835
- id: external_exports.string(),
14836
- name: external_exports.string(),
14823
+ uploaded_by: external_exports.string(),
14824
+ filename: external_exports.string(),
14825
+ content_type: external_exports.string(),
14826
+ size_bytes: external_exports.number(),
14827
+ storage_key: external_exports.string(),
14828
+ status: FileStatusSchema,
14837
14829
  created_at: external_exports.string()
14838
14830
  });
14839
- var UpdateWorkspaceRequestSchema = external_exports.object({
14840
- name: external_exports.string().optional(),
14841
- system_prompt: external_exports.string().nullable().optional()
14831
+ var UploadRequestSchema = external_exports.object({
14832
+ filename: external_exports.string(),
14833
+ content_type: external_exports.string(),
14834
+ size_bytes: external_exports.number()
14842
14835
  });
14843
- var SystemPromptSchema = external_exports.object({
14844
- prompt: external_exports.string(),
14845
- is_default: external_exports.boolean()
14836
+ var UploadResponseSchema = external_exports.object({
14837
+ id: external_exports.string(),
14838
+ upload_url: external_exports.string(),
14839
+ expires_at: external_exports.string()
14846
14840
  });
14847
- var SetSystemPromptRequestSchema = external_exports.object({
14848
- prompt: external_exports.string().nullable().optional(),
14849
- reset: external_exports.boolean().optional()
14841
+ var FileAttachmentSchema = external_exports.object({
14842
+ file_id: external_exports.string(),
14843
+ filename: external_exports.string(),
14844
+ content_type: external_exports.string(),
14845
+ size_bytes: external_exports.number()
14850
14846
  });
14851
- var ActivityItemSchema = external_exports.object({
14852
- type: external_exports.enum(["message", "dm"]),
14847
+ var FileInfoSchema = external_exports.object({
14853
14848
  id: external_exports.string(),
14854
- channel_id: external_exports.string().optional(),
14855
- channel_name: external_exports.string().optional(),
14856
- conversation_id: external_exports.string().optional(),
14857
- agent_name: external_exports.string(),
14858
- text: external_exports.string(),
14859
- created_at: external_exports.string()
14849
+ filename: external_exports.string(),
14850
+ content_type: external_exports.string(),
14851
+ size_bytes: external_exports.number(),
14852
+ status: FileStatusSchema.optional(),
14853
+ download_url: external_exports.string().nullable().optional(),
14854
+ uploaded_by: external_exports.string().optional(),
14855
+ created_at: external_exports.string().optional()
14860
14856
  });
14861
- var WorkspaceDmConversationSchema = external_exports.object({
14857
+ var CompleteUploadResponseSchema = external_exports.object({
14862
14858
  id: external_exports.string(),
14863
- channel_id: external_exports.string(),
14864
- type: external_exports.string(),
14865
- participants: external_exports.array(external_exports.string()),
14866
- last_message: external_exports.object({
14867
- text: external_exports.string(),
14868
- agent_id: external_exports.string(),
14869
- agent_name: external_exports.string(),
14870
- created_at: external_exports.string()
14871
- }).nullable(),
14872
- message_count: external_exports.number()
14873
- });
14874
- var TokenRotateResponseSchema = external_exports.object({
14875
- name: external_exports.string(),
14876
- token: external_exports.string()
14877
- });
14878
- var OBSERVER_SCOPES = [
14879
- "stream:read",
14880
- "messages:read",
14881
- "threads:read",
14882
- "dms:read",
14883
- "channels:read",
14884
- "search:read",
14885
- "agents:read",
14886
- "nodes:read",
14887
- "deliveries:read",
14888
- "activity:read",
14889
- "files:read",
14890
- "reactions:read"
14891
- ];
14892
- var ObserverTokenFiltersSchema = external_exports.object({
14893
- channel_ids: external_exports.array(external_exports.string()).optional(),
14894
- channel_names: external_exports.array(external_exports.string()).optional(),
14895
- include_dms: external_exports.boolean().optional(),
14896
- dm_conversation_ids: external_exports.array(external_exports.string()).optional(),
14897
- agent_ids: external_exports.array(external_exports.string()).optional(),
14898
- event_types: external_exports.array(external_exports.string()).optional(),
14899
- created_after: external_exports.string().optional()
14859
+ filename: external_exports.string(),
14860
+ content_type: external_exports.string(),
14861
+ size_bytes: external_exports.number(),
14862
+ download_url: external_exports.string()
14900
14863
  });
14901
- var CreateObserverTokenRequestSchema = external_exports.object({
14902
- name: external_exports.string(),
14903
- description: external_exports.string().nullable().optional(),
14904
- scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)).min(1),
14905
- filters: ObserverTokenFiltersSchema.optional(),
14906
- expires_at: external_exports.string().nullable().optional()
14864
+
14865
+ // ../../node_modules/@relaycast/types/dist/reaction.js
14866
+ var ReactionSchema = external_exports.object({
14867
+ id: external_exports.string(),
14868
+ message_id: external_exports.string(),
14869
+ agent_id: external_exports.string(),
14870
+ emoji: external_exports.string(),
14871
+ created_at: external_exports.string()
14907
14872
  });
14908
- var UpdateObserverTokenRequestSchema = external_exports.object({
14909
- name: external_exports.string().optional(),
14910
- description: external_exports.string().nullable().optional(),
14911
- scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)).min(1).optional(),
14912
- filters: ObserverTokenFiltersSchema.optional(),
14913
- expires_at: external_exports.string().nullable().optional()
14873
+ var AddReactionRequestSchema = external_exports.object({
14874
+ emoji: external_exports.string()
14914
14875
  });
14915
- var ObserverTokenSchema = external_exports.object({
14876
+ var AddedReactionSchema = external_exports.object({
14916
14877
  id: external_exports.string(),
14917
- name: external_exports.string(),
14918
- description: external_exports.string().nullable(),
14919
- scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)),
14920
- filters: ObserverTokenFiltersSchema,
14921
- status: external_exports.enum(["active", "revoked"]),
14922
- expires_at: external_exports.string().nullable(),
14923
- created_at: external_exports.string(),
14924
- updated_at: external_exports.string().nullable(),
14925
- revoked_at: external_exports.string().nullable(),
14926
- last_used_at: external_exports.string().nullable(),
14927
- token: external_exports.string().optional()
14878
+ message_id: external_exports.string(),
14879
+ agent_name: external_exports.string(),
14880
+ emoji: external_exports.string(),
14881
+ created_at: external_exports.string()
14882
+ });
14883
+ var ReactionGroupSchema = external_exports.object({
14884
+ emoji: external_exports.string(),
14885
+ count: external_exports.number(),
14886
+ agents: external_exports.array(external_exports.string())
14928
14887
  });
14929
14888
 
14930
14889
  // ../../node_modules/@relaycast/types/dist/agent.js
@@ -15007,131 +14966,6 @@ var ReleaseAgentRequestSchema = external_exports.object({
15007
14966
  delete_agent: external_exports.boolean().optional()
15008
14967
  });
15009
14968
 
15010
- // ../../node_modules/@relaycast/types/dist/channel.js
15011
- var ChannelMemberInfoSchema = external_exports.object({
15012
- agent_id: external_exports.string(),
15013
- agent_name: external_exports.string(),
15014
- role: external_exports.enum(["owner", "member"]),
15015
- joined_at: external_exports.string(),
15016
- is_muted: external_exports.boolean().optional()
15017
- });
15018
- var ChannelSchema = external_exports.object({
15019
- id: external_exports.string(),
15020
- name: external_exports.string(),
15021
- topic: external_exports.string().nullable(),
15022
- metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
15023
- created_by: external_exports.string().nullable().optional(),
15024
- created_at: external_exports.string(),
15025
- is_archived: external_exports.boolean().optional(),
15026
- member_count: external_exports.number().optional(),
15027
- members: external_exports.array(ChannelMemberInfoSchema).optional()
15028
- });
15029
- var ChannelMemberSchema = external_exports.object({
15030
- channel_id: external_exports.string(),
15031
- agent_id: external_exports.string(),
15032
- role: external_exports.enum(["owner", "member"]),
15033
- joined_at: external_exports.string(),
15034
- last_read_id: external_exports.string().nullable(),
15035
- is_muted: external_exports.boolean()
15036
- });
15037
- var CreateChannelRequestSchema = external_exports.object({
15038
- name: external_exports.string(),
15039
- topic: external_exports.string().nullable().optional(),
15040
- metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15041
- });
15042
- var UpdateChannelRequestSchema = external_exports.object({
15043
- topic: external_exports.string().nullable().optional(),
15044
- metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15045
- });
15046
- var InviteRequestSchema = external_exports.object({
15047
- agent_name: external_exports.string()
15048
- });
15049
- var JoinChannelResponseSchema = external_exports.object({
15050
- channel: external_exports.string(),
15051
- agent_id: external_exports.string(),
15052
- already_member: external_exports.boolean()
15053
- });
15054
- var InviteChannelResponseSchema = external_exports.object({
15055
- channel: external_exports.string(),
15056
- agent: external_exports.string()
15057
- });
15058
- var MuteChannelResponseSchema = external_exports.object({
15059
- channel: external_exports.string(),
15060
- agent_id: external_exports.string(),
15061
- muted: external_exports.boolean()
15062
- });
15063
-
15064
- // ../../node_modules/@relaycast/types/dist/file.js
15065
- var FileStatusSchema = external_exports.enum(["pending", "complete", "deleted"]);
15066
- var FileRecordSchema = external_exports.object({
15067
- id: external_exports.string(),
15068
- workspace_id: external_exports.string(),
15069
- uploaded_by: external_exports.string(),
15070
- filename: external_exports.string(),
15071
- content_type: external_exports.string(),
15072
- size_bytes: external_exports.number(),
15073
- storage_key: external_exports.string(),
15074
- status: FileStatusSchema,
15075
- created_at: external_exports.string()
15076
- });
15077
- var UploadRequestSchema = external_exports.object({
15078
- filename: external_exports.string(),
15079
- content_type: external_exports.string(),
15080
- size_bytes: external_exports.number()
15081
- });
15082
- var UploadResponseSchema = external_exports.object({
15083
- id: external_exports.string(),
15084
- upload_url: external_exports.string(),
15085
- expires_at: external_exports.string()
15086
- });
15087
- var FileAttachmentSchema = external_exports.object({
15088
- file_id: external_exports.string(),
15089
- filename: external_exports.string(),
15090
- content_type: external_exports.string(),
15091
- size_bytes: external_exports.number()
15092
- });
15093
- var FileInfoSchema = external_exports.object({
15094
- id: external_exports.string(),
15095
- filename: external_exports.string(),
15096
- content_type: external_exports.string(),
15097
- size_bytes: external_exports.number(),
15098
- status: FileStatusSchema.optional(),
15099
- download_url: external_exports.string().nullable().optional(),
15100
- uploaded_by: external_exports.string().optional(),
15101
- created_at: external_exports.string().optional()
15102
- });
15103
- var CompleteUploadResponseSchema = external_exports.object({
15104
- id: external_exports.string(),
15105
- filename: external_exports.string(),
15106
- content_type: external_exports.string(),
15107
- size_bytes: external_exports.number(),
15108
- download_url: external_exports.string()
15109
- });
15110
-
15111
- // ../../node_modules/@relaycast/types/dist/reaction.js
15112
- var ReactionSchema = external_exports.object({
15113
- id: external_exports.string(),
15114
- message_id: external_exports.string(),
15115
- agent_id: external_exports.string(),
15116
- emoji: external_exports.string(),
15117
- created_at: external_exports.string()
15118
- });
15119
- var AddReactionRequestSchema = external_exports.object({
15120
- emoji: external_exports.string()
15121
- });
15122
- var AddedReactionSchema = external_exports.object({
15123
- id: external_exports.string(),
15124
- message_id: external_exports.string(),
15125
- agent_name: external_exports.string(),
15126
- emoji: external_exports.string(),
15127
- created_at: external_exports.string()
15128
- });
15129
- var ReactionGroupSchema = external_exports.object({
15130
- emoji: external_exports.string(),
15131
- count: external_exports.number(),
15132
- agents: external_exports.array(external_exports.string())
15133
- });
15134
-
15135
14969
  // ../../node_modules/@relaycast/types/dist/message.js
15136
14970
  var HeaderBlockSchema = external_exports.object({
15137
14971
  type: external_exports.literal("header"),
@@ -15235,6 +15069,243 @@ var SearchMessageResultSchema = external_exports.object({
15235
15069
  created_at: external_exports.string(),
15236
15070
  relevance_score: external_exports.number()
15237
15071
  });
15072
+ var EffectiveMessageRetentionSchema = external_exports.discriminatedUnion("policy", [
15073
+ external_exports.object({
15074
+ policy: external_exports.literal("window"),
15075
+ message_ttl_days: external_exports.number().positive(),
15076
+ retained_since: external_exports.string(),
15077
+ source: external_exports.enum(["workspace_override", "deployment_default"])
15078
+ }),
15079
+ external_exports.object({
15080
+ policy: external_exports.literal("never_prune"),
15081
+ message_ttl_days: external_exports.null(),
15082
+ retained_since: external_exports.null(),
15083
+ source: external_exports.enum(["workspace_override", "deployment_default"])
15084
+ }),
15085
+ external_exports.object({
15086
+ policy: external_exports.literal("unknown"),
15087
+ message_ttl_days: external_exports.null(),
15088
+ retained_since: external_exports.null(),
15089
+ source: external_exports.literal("unknown"),
15090
+ reason: external_exports.enum(["boundary_unavailable", "workspace_unknown"])
15091
+ })
15092
+ ]);
15093
+ var SessionMessageSchema = external_exports.object({
15094
+ id: external_exports.string(),
15095
+ channel_id: external_exports.string(),
15096
+ channel_name: external_exports.string(),
15097
+ conversation_id: external_exports.string().nullable(),
15098
+ agent_id: external_exports.string(),
15099
+ agent_name: external_exports.string(),
15100
+ thread_id: external_exports.string().nullable(),
15101
+ text: external_exports.string(),
15102
+ blocks: external_exports.array(MessageBlockSchema).nullable(),
15103
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()),
15104
+ has_attachments: external_exports.boolean(),
15105
+ created_at: external_exports.string()
15106
+ });
15107
+ var SessionMessagesResultSchema = external_exports.object({
15108
+ session_ref: external_exports.string(),
15109
+ availability: external_exports.enum(["retained", "partial", "aged_out", "unknown"]),
15110
+ reason: external_exports.enum([
15111
+ "outside_retention_window",
15112
+ "boundary_unavailable",
15113
+ "workspace_unknown",
15114
+ "session_not_found",
15115
+ "query_failed",
15116
+ "response_invalid",
15117
+ "pre_migration_history_unknown"
15118
+ ]).optional(),
15119
+ retention: EffectiveMessageRetentionSchema,
15120
+ session_started_at: external_exports.string().nullable(),
15121
+ session_last_message_at: external_exports.string().nullable(),
15122
+ messages: external_exports.array(SessionMessageSchema),
15123
+ page: external_exports.object({
15124
+ next_cursor: external_exports.string().nullable(),
15125
+ has_more: external_exports.boolean()
15126
+ })
15127
+ }).superRefine((result, ctx) => {
15128
+ if (result.availability !== "unknown" && result.retention.policy === "unknown") {
15129
+ ctx.addIssue({
15130
+ code: "custom",
15131
+ path: ["availability"],
15132
+ message: "unknown retention cannot be presented as replayable"
15133
+ });
15134
+ }
15135
+ });
15136
+
15137
+ // ../../node_modules/@relaycast/types/dist/workspace.js
15138
+ var WorkspaceSchema = external_exports.object({
15139
+ id: external_exports.string(),
15140
+ name: external_exports.string(),
15141
+ system_prompt: external_exports.string().nullable(),
15142
+ plan: external_exports.enum(["free", "pro", "enterprise"]),
15143
+ created_at: external_exports.string(),
15144
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()),
15145
+ effective_retention: external_exports.object({
15146
+ messages: EffectiveMessageRetentionSchema
15147
+ }).optional(),
15148
+ expires_at: external_exports.string().nullable().optional()
15149
+ });
15150
+ var CreateWorkspaceRequestSchema = external_exports.object({
15151
+ name: external_exports.string(),
15152
+ expires_in_seconds: external_exports.number().int().min(60).max(30 * 24 * 60 * 60).optional()
15153
+ });
15154
+ var CreateWorkspaceResponseSchema = external_exports.object({
15155
+ workspace_id: external_exports.string(),
15156
+ api_key: external_exports.string().optional(),
15157
+ created_at: external_exports.string(),
15158
+ expires_at: external_exports.string().nullable().optional()
15159
+ });
15160
+ var WorkspaceLookupSchema = external_exports.object({
15161
+ id: external_exports.string(),
15162
+ name: external_exports.string(),
15163
+ created_at: external_exports.string()
15164
+ });
15165
+ var UpdateWorkspaceRequestSchema = external_exports.object({
15166
+ name: external_exports.string().optional(),
15167
+ system_prompt: external_exports.string().nullable().optional()
15168
+ });
15169
+ var SystemPromptSchema = external_exports.object({
15170
+ prompt: external_exports.string(),
15171
+ is_default: external_exports.boolean()
15172
+ });
15173
+ var SetSystemPromptRequestSchema = external_exports.object({
15174
+ prompt: external_exports.string().nullable().optional(),
15175
+ reset: external_exports.boolean().optional()
15176
+ });
15177
+ var ActivityItemSchema = external_exports.object({
15178
+ type: external_exports.enum(["message", "dm"]),
15179
+ id: external_exports.string(),
15180
+ channel_id: external_exports.string().optional(),
15181
+ channel_name: external_exports.string().optional(),
15182
+ conversation_id: external_exports.string().optional(),
15183
+ agent_name: external_exports.string(),
15184
+ text: external_exports.string(),
15185
+ created_at: external_exports.string()
15186
+ });
15187
+ var WorkspaceDmConversationSchema = external_exports.object({
15188
+ id: external_exports.string(),
15189
+ channel_id: external_exports.string(),
15190
+ type: external_exports.string(),
15191
+ participants: external_exports.array(external_exports.string()),
15192
+ last_message: external_exports.object({
15193
+ text: external_exports.string(),
15194
+ agent_id: external_exports.string(),
15195
+ agent_name: external_exports.string(),
15196
+ created_at: external_exports.string()
15197
+ }).nullable(),
15198
+ message_count: external_exports.number()
15199
+ });
15200
+ var TokenRotateResponseSchema = external_exports.object({
15201
+ name: external_exports.string(),
15202
+ token: external_exports.string()
15203
+ });
15204
+ var OBSERVER_SCOPES = [
15205
+ "stream:read",
15206
+ "messages:read",
15207
+ "threads:read",
15208
+ "dms:read",
15209
+ "channels:read",
15210
+ "search:read",
15211
+ "agents:read",
15212
+ "nodes:read",
15213
+ "deliveries:read",
15214
+ "activity:read",
15215
+ "files:read",
15216
+ "reactions:read"
15217
+ ];
15218
+ var ObserverTokenFiltersSchema = external_exports.object({
15219
+ channel_ids: external_exports.array(external_exports.string()).optional(),
15220
+ channel_names: external_exports.array(external_exports.string()).optional(),
15221
+ include_dms: external_exports.boolean().optional(),
15222
+ dm_conversation_ids: external_exports.array(external_exports.string()).optional(),
15223
+ agent_ids: external_exports.array(external_exports.string()).optional(),
15224
+ event_types: external_exports.array(external_exports.string()).optional(),
15225
+ created_after: external_exports.string().optional()
15226
+ });
15227
+ var CreateObserverTokenRequestSchema = external_exports.object({
15228
+ name: external_exports.string(),
15229
+ description: external_exports.string().nullable().optional(),
15230
+ scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)).min(1),
15231
+ filters: ObserverTokenFiltersSchema.optional(),
15232
+ expires_at: external_exports.string().nullable().optional()
15233
+ });
15234
+ var UpdateObserverTokenRequestSchema = external_exports.object({
15235
+ name: external_exports.string().optional(),
15236
+ description: external_exports.string().nullable().optional(),
15237
+ scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)).min(1).optional(),
15238
+ filters: ObserverTokenFiltersSchema.optional(),
15239
+ expires_at: external_exports.string().nullable().optional()
15240
+ });
15241
+ var ObserverTokenSchema = external_exports.object({
15242
+ id: external_exports.string(),
15243
+ name: external_exports.string(),
15244
+ description: external_exports.string().nullable(),
15245
+ scopes: external_exports.array(external_exports.enum(OBSERVER_SCOPES)),
15246
+ filters: ObserverTokenFiltersSchema,
15247
+ status: external_exports.enum(["active", "revoked"]),
15248
+ expires_at: external_exports.string().nullable(),
15249
+ created_at: external_exports.string(),
15250
+ updated_at: external_exports.string().nullable(),
15251
+ revoked_at: external_exports.string().nullable(),
15252
+ last_used_at: external_exports.string().nullable(),
15253
+ token: external_exports.string().optional()
15254
+ });
15255
+
15256
+ // ../../node_modules/@relaycast/types/dist/channel.js
15257
+ var ChannelMemberInfoSchema = external_exports.object({
15258
+ agent_id: external_exports.string(),
15259
+ agent_name: external_exports.string(),
15260
+ role: external_exports.enum(["owner", "member"]),
15261
+ joined_at: external_exports.string(),
15262
+ is_muted: external_exports.boolean().optional()
15263
+ });
15264
+ var ChannelSchema = external_exports.object({
15265
+ id: external_exports.string(),
15266
+ name: external_exports.string(),
15267
+ topic: external_exports.string().nullable(),
15268
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
15269
+ created_by: external_exports.string().nullable().optional(),
15270
+ created_at: external_exports.string(),
15271
+ is_archived: external_exports.boolean().optional(),
15272
+ member_count: external_exports.number().optional(),
15273
+ members: external_exports.array(ChannelMemberInfoSchema).optional()
15274
+ });
15275
+ var ChannelMemberSchema = external_exports.object({
15276
+ channel_id: external_exports.string(),
15277
+ agent_id: external_exports.string(),
15278
+ role: external_exports.enum(["owner", "member"]),
15279
+ joined_at: external_exports.string(),
15280
+ last_read_id: external_exports.string().nullable(),
15281
+ is_muted: external_exports.boolean()
15282
+ });
15283
+ var CreateChannelRequestSchema = external_exports.object({
15284
+ name: external_exports.string(),
15285
+ topic: external_exports.string().nullable().optional(),
15286
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15287
+ });
15288
+ var UpdateChannelRequestSchema = external_exports.object({
15289
+ topic: external_exports.string().nullable().optional(),
15290
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15291
+ });
15292
+ var InviteRequestSchema = external_exports.object({
15293
+ agent_name: external_exports.string()
15294
+ });
15295
+ var JoinChannelResponseSchema = external_exports.object({
15296
+ channel: external_exports.string(),
15297
+ agent_id: external_exports.string(),
15298
+ already_member: external_exports.boolean()
15299
+ });
15300
+ var InviteChannelResponseSchema = external_exports.object({
15301
+ channel: external_exports.string(),
15302
+ agent: external_exports.string()
15303
+ });
15304
+ var MuteChannelResponseSchema = external_exports.object({
15305
+ channel: external_exports.string(),
15306
+ agent_id: external_exports.string(),
15307
+ muted: external_exports.boolean()
15308
+ });
15238
15309
 
15239
15310
  // ../../node_modules/@relaycast/types/dist/receipt.js
15240
15311
  var ReadReceiptSchema = external_exports.object({
@@ -16021,6 +16092,19 @@ var FleetProviderIdentitySchema = external_exports.object({
16021
16092
  name: external_exports.string(),
16022
16093
  instance_id: external_exports.string()
16023
16094
  }).strict();
16095
+ var FleetRepoKeySchema = external_exports.string().min(3).max(201).regex(/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/, "repo key must use owner/name with no filesystem path or URL").refine((repoKey) => repoKey.split("/").every((segment) => segment !== "." && segment !== ".."), "repo key segments cannot be . or ..");
16096
+ var FleetLegacyRepoTagValueSchema = external_exports.string().min(1).max(201).regex(/^[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)?$/, "legacy repo tag must use name or owner/name with no filesystem path or URL").refine((repoKey) => repoKey.split("/").every((segment) => segment !== "." && segment !== ".."), "legacy repo tag segments cannot be . or ..");
16097
+ var FleetNodeTagSchema = external_exports.string().superRefine((tag, ctx) => {
16098
+ if (!tag.startsWith("repo:"))
16099
+ return;
16100
+ const parsed = FleetLegacyRepoTagValueSchema.safeParse(tag.slice("repo:".length));
16101
+ if (!parsed.success) {
16102
+ ctx.addIssue({
16103
+ code: "custom",
16104
+ message: "repo tag must use repo:<name> or repo:<owner/name> with no filesystem path or URL"
16105
+ });
16106
+ }
16107
+ });
16024
16108
  var FleetCapabilityAcceptanceSchema = external_exports.object({
16025
16109
  name: external_exports.string(),
16026
16110
  kind: FleetCapabilityKindSchema,
@@ -16050,7 +16134,10 @@ var FleetNodeRegisterMessageSchema = external_exports.object({
16050
16134
  capabilities: external_exports.array(FleetCapabilitySchema),
16051
16135
  // Provider-level capacity; the node figure is the aggregate across providers.
16052
16136
  max_agents: external_exports.number().int().nonnegative(),
16053
- tags: external_exports.array(external_exports.string()),
16137
+ tags: external_exports.array(FleetNodeTagSchema),
16138
+ // Placement-safe repository identities. The engine persists these as
16139
+ // `repo:<owner/name>` tags so existing node roster readers can consume them.
16140
+ repo_keys: external_exports.array(FleetRepoKeySchema).optional(),
16054
16141
  version: external_exports.string(),
16055
16142
  machine_id: external_exports.string().optional(),
16056
16143
  // Absent and null both mean a fresh node with no resume cursor.
@@ -17314,6 +17401,7 @@ var AgentClient = class {
17314
17401
  text,
17315
17402
  ...opts?.attachments ? { attachments: opts.attachments } : {},
17316
17403
  ...opts?.blocks ? { blocks: opts.blocks } : {},
17404
+ ...opts?.data !== void 0 ? { data: opts.data } : {},
17317
17405
  mode: opts?.mode ?? "wait"
17318
17406
  };
17319
17407
  return this.client.post(`/v1/channels/${encodeURIComponent(name)}/messages`, body, idempotencyHeaders(opts));
@@ -17338,7 +17426,8 @@ var AgentClient = class {
17338
17426
  async reply(id, text, opts) {
17339
17427
  const body = {
17340
17428
  text,
17341
- ...opts?.blocks ? { blocks: opts.blocks } : {}
17429
+ ...opts?.blocks ? { blocks: opts.blocks } : {},
17430
+ ...opts?.data !== void 0 ? { data: opts.data } : {}
17342
17431
  };
17343
17432
  return this.client.post(`/v1/messages/${encodeURIComponent(id)}/replies`, body, idempotencyHeaders(opts));
17344
17433
  }
@@ -17384,6 +17473,7 @@ var AgentClient = class {
17384
17473
  sendMessage: (conversationId, text, opts) => this.client.post(`/v1/dm/${encodeURIComponent(conversationId)}/messages`, {
17385
17474
  text,
17386
17475
  ...opts?.attachments ? { attachments: opts.attachments } : {},
17476
+ ...opts?.data !== void 0 ? { data: opts.data } : {},
17387
17477
  mode: opts?.mode ?? "wait"
17388
17478
  }, idempotencyHeaders(opts)),
17389
17479
  addParticipant: (conversationId, agent) => this.client.post(`/v1/dm/${encodeURIComponent(conversationId)}/participants`, { agentName: agent }),
@@ -18249,7 +18339,34 @@ var RelayCast = class _RelayCast {
18249
18339
  query.after = opts.after;
18250
18340
  return this.client.get(`/v1/messages/${encodeURIComponent(id)}/replies`, query);
18251
18341
  },
18252
- reactions: (id) => this.client.get(`/v1/messages/${encodeURIComponent(id)}/reactions`)
18342
+ reactions: (id) => this.client.get(`/v1/messages/${encodeURIComponent(id)}/reactions`),
18343
+ bySessionRef: async (sessionRef, opts) => {
18344
+ const query = {};
18345
+ if (opts?.limit != null)
18346
+ query.limit = String(opts.limit);
18347
+ if (opts?.after)
18348
+ query.after = opts.after;
18349
+ try {
18350
+ return await this.client.get(`/v1/sessions/${encodeURIComponent(sessionRef)}/messages`, query, { schema: SessionMessagesResultSchema });
18351
+ } catch (error51) {
18352
+ return {
18353
+ sessionRef,
18354
+ availability: "unknown",
18355
+ reason: error51 instanceof ZodError ? "response_invalid" : "query_failed",
18356
+ retention: {
18357
+ policy: "unknown",
18358
+ messageTtlDays: null,
18359
+ retainedSince: null,
18360
+ source: "unknown",
18361
+ reason: "boundary_unavailable"
18362
+ },
18363
+ sessionStartedAt: null,
18364
+ sessionLastMessageAt: null,
18365
+ messages: [],
18366
+ page: { nextCursor: null, hasMore: false }
18367
+ };
18368
+ }
18369
+ }
18253
18370
  };
18254
18371
  agents = {
18255
18372
  register: async (data) => {
@@ -21340,6 +21457,45 @@ var RelaycastMessagingClient = class {
21340
21457
 
21341
21458
  // ../sdk/dist/messaging/thin-client.js
21342
21459
  var RELAYCAST_SDK_VERSION = SDK_VERSION;
21460
+ var RELAY_OBSERVER_SCOPES = [
21461
+ "stream:read",
21462
+ "messages:read",
21463
+ "threads:read",
21464
+ "dms:read",
21465
+ "channels:read",
21466
+ "search:read",
21467
+ "agents:read",
21468
+ "nodes:read",
21469
+ "deliveries:read",
21470
+ "activity:read",
21471
+ "files:read",
21472
+ "reactions:read"
21473
+ ];
21474
+ function observerTokenClient(workspaceKey, options) {
21475
+ return new RelayCast(clientConfig(workspaceKey, options));
21476
+ }
21477
+ async function createObserverToken(options) {
21478
+ const client = observerTokenClient(options.workspaceKey, options);
21479
+ return client.observerTokens.create({
21480
+ name: options.name,
21481
+ ...options.description === void 0 ? {} : { description: options.description },
21482
+ scopes: [...options.scopes ?? RELAY_OBSERVER_SCOPES],
21483
+ // `include_dms` defaults to false server-side, but send it explicitly so the
21484
+ // token's stored filters record the decision rather than an absence.
21485
+ filters: {
21486
+ includeDms: options.filters?.includeDms === true,
21487
+ ...options.filters?.channelNames?.length ? { channelNames: options.filters.channelNames } : {},
21488
+ ...options.filters?.agentIds?.length ? { agentIds: options.filters.agentIds } : {}
21489
+ },
21490
+ ...options.expiresAt === void 0 ? {} : { expiresAt: options.expiresAt }
21491
+ });
21492
+ }
21493
+ async function listObserverTokens(options) {
21494
+ return observerTokenClient(options.workspaceKey, options).observerTokens.list();
21495
+ }
21496
+ async function revokeObserverToken(options) {
21497
+ await observerTokenClient(options.workspaceKey, options).observerTokens.revoke(options.id);
21498
+ }
21343
21499
  function pickTelemetryOverrides(options) {
21344
21500
  return {
21345
21501
  ...options.originActor === void 0 ? {} : { originActor: options.originActor },
@@ -24027,6 +24183,7 @@ function generateRequestId(prefix = "") {
24027
24183
  MessageReadPredicate,
24028
24184
  OBSERVABILITY_UNAVAILABLE,
24029
24185
  RELAYCAST_SDK_VERSION,
24186
+ RELAY_OBSERVER_SCOPES,
24030
24187
  RELAY_SERVICE_FAILURE_MESSAGE,
24031
24188
  RelayCapabilityError,
24032
24189
  RelayError,
@@ -24059,6 +24216,7 @@ function generateRequestId(prefix = "") {
24059
24216
  createLogger,
24060
24217
  createNotifyHandler,
24061
24218
  createObserverEventSource,
24219
+ createObserverToken,
24062
24220
  createRealtimeClient,
24063
24221
  createRequestEnvelope,
24064
24222
  createRequestHandler,
@@ -24091,6 +24249,7 @@ function generateRequestId(prefix = "") {
24091
24249
  isPlaceholderTargetFast,
24092
24250
  isSpawnOrReleaseCommandFast,
24093
24251
  isValidAgentName,
24252
+ listObserverTokens,
24094
24253
  logAndTraceError,
24095
24254
  logRelayHandlerError,
24096
24255
  mapModelToCli,
@@ -24125,6 +24284,7 @@ function generateRequestId(prefix = "") {
24125
24284
  resolveAgentName,
24126
24285
  resolveAgentToken,
24127
24286
  resolveCommand,
24287
+ revokeObserverToken,
24128
24288
  routerLog,
24129
24289
  safeRelayErrorMessage,
24130
24290
  stripAnsiFast,