@openscout/protocol 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -67,4 +67,7 @@ export * from "./chat-message-corrections.js";
67
67
  export * from "./chat-mentions.js";
68
68
  export * from "./agent-notifications.js";
69
69
  export * from "./mcp-core-tools.js";
70
+ export * from "./integrations.js";
71
+ export * from "./slack-manifest.js";
72
+ export * from "./room-listening.js";
70
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AAEnC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAE9C,cAAc,oBAAoB,CAAC;AAEnC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -67,3 +67,6 @@ export * from "./chat-message-corrections.js";
67
67
  export * from "./chat-mentions.js";
68
68
  export * from "./agent-notifications.js";
69
69
  export * from "./mcp-core-tools.js";
70
+ export * from "./integrations.js";
71
+ export * from "./slack-manifest.js";
72
+ export * from "./room-listening.js";
@@ -0,0 +1,106 @@
1
+ /** Token-free contracts for broker-owned, local Slack setup. */
2
+ export type SlackSetupState = "awaiting_workspace" | "awaiting_authority" | "awaiting_app" | "awaiting_credentials" | "ready_to_start";
3
+ export interface SlackProjectBinding {
4
+ agentId: string;
5
+ definitionId: string;
6
+ projectPath: string;
7
+ nodeId: string;
8
+ revision: number;
9
+ }
10
+ export interface SlackSetupRequest {
11
+ provider: "slack";
12
+ mode: "project_agent";
13
+ projectPath: string;
14
+ agentId?: string;
15
+ displayName?: string;
16
+ workspaceId?: string;
17
+ idempotencyKey?: string;
18
+ }
19
+ export interface SlackCredentialReference {
20
+ backend: "secret_cli" | "private_file";
21
+ appTokenKey: string;
22
+ botTokenKey: string;
23
+ }
24
+ export interface SlackInstallationCredentials {
25
+ reference: SlackCredentialReference;
26
+ botId: string;
27
+ botUserId: string;
28
+ verifiedAt: number;
29
+ allowedUserIds: string[];
30
+ allowedChannelIds: string[];
31
+ }
32
+ export interface SlackVerificationEvidence {
33
+ bindingRevision: number;
34
+ credentialVerifiedAt: number;
35
+ verifiedAt: number;
36
+ channelId: string;
37
+ threadTs: string;
38
+ first: {
39
+ eventId: string;
40
+ invocationId: string;
41
+ messageId: string;
42
+ resultDeliveredAt: number;
43
+ };
44
+ followUp: {
45
+ eventId: string;
46
+ invocationId: string;
47
+ messageId: string;
48
+ resultDeliveredAt: number;
49
+ };
50
+ }
51
+ export interface SlackSetupOperation {
52
+ id: string;
53
+ provider: "slack";
54
+ mode: "project_agent";
55
+ ownerRealmId: string;
56
+ binding: SlackProjectBinding;
57
+ displayName: string;
58
+ manifestHash: string;
59
+ workspaceId?: string;
60
+ /** Claimed by the operator; not yet validated with Slack. */
61
+ appId?: string;
62
+ authorityConfirmedAt?: number;
63
+ credentials?: SlackInstallationCredentials;
64
+ desiredState?: "running" | "paused" | "disconnected";
65
+ verification?: SlackVerificationEvidence;
66
+ workerError?: {
67
+ code: "worker_unavailable" | "worker_exited";
68
+ at: number;
69
+ };
70
+ state: SlackSetupState;
71
+ revision: number;
72
+ createdAt: number;
73
+ updatedAt: number;
74
+ }
75
+ export type SlackSetupResumeRequest = {
76
+ expectedRevision: number;
77
+ } & ({
78
+ action: "choose_workspace";
79
+ workspaceId: string;
80
+ } | {
81
+ action: "confirm_authority";
82
+ } | {
83
+ action: "register_app";
84
+ appId: string;
85
+ });
86
+ export interface SlackSetupReceipt {
87
+ operation: SlackSetupOperation;
88
+ nextAction: {
89
+ id: string;
90
+ kind: "choose_workspace" | "confirm_authority" | "create_or_connect_app" | "connect_secrets" | "start_worker" | "wait_for_worker" | "verify_integration" | "complete";
91
+ title: string;
92
+ };
93
+ /** Setup bookkeeping never implies a connected or verified integration. */
94
+ readiness: "not_connected" | "connected_unverified" | "verified";
95
+ eventQueue?: {
96
+ pending: number;
97
+ retrying: number;
98
+ };
99
+ worker?: {
100
+ generation: number;
101
+ state: "starting" | "connected" | "stopped" | "expired";
102
+ expiresAt: number;
103
+ updatedAt: number;
104
+ };
105
+ }
106
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../src/integrations.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,cAAc,GAAG,sBAAsB,GAAG,gBAAgB,CAAC;AAEvI,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,wBAAwB,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/F,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;CACnG;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrD,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,uBAAuB,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAAG,CACjE;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAC5C,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,UAAU,CAAC;QACtK,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,2EAA2E;IAC3E,SAAS,EAAE,eAAe,GAAG,sBAAsB,GAAG,UAAU,CAAC;IACjE,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAChI"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ /** Shared room HTTP bounds. Leave envelope/cursor/membership headroom below transport cap. */
2
+ export declare const ROOM_LISTENING_RESPONSE_BYTES: number;
3
+ export declare const ROOM_LISTENING_PAGE_BYTES: number;
4
+ export declare const ROOM_LISTENING_MESSAGE_BYTES: number;
5
+ //# sourceMappingURL=room-listening.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-listening.d.ts","sourceRoot":"","sources":["../src/room-listening.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,QAAkB,CAAC;AAC7D,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AACzD,eAAO,MAAM,4BAA4B,QAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Shared room HTTP bounds. Leave envelope/cursor/membership headroom below transport cap. */
2
+ export const ROOM_LISTENING_RESPONSE_BYTES = 4 * 1024 * 1024;
3
+ export const ROOM_LISTENING_PAGE_BYTES = 3 * 1024 * 1024;
4
+ export const ROOM_LISTENING_MESSAGE_BYTES = 64 * 1024;
@@ -39,6 +39,8 @@ export interface ScoutOwnedRuntimeHarness {
39
39
  * as a separate operator choice.
40
40
  */
41
41
  listed?: boolean;
42
+ /** Accept provider/extension model ids without inventing a Scout default. */
43
+ allowCustomModels?: boolean;
42
44
  default?: boolean;
43
45
  reasoningEfforts: readonly ScoutReasoningEffort[] | null;
44
46
  defaultReasoningEffort?: ScoutReasoningEffort | null;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-catalog-contract.d.ts","sourceRoot":"","sources":["../src/runtime-catalog-contract.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,eAAO,MAAM,0BAA0B,uGAEK,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAE/E,eAAO,MAAM,uBAAuB,gFAE1B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CASxF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,WAAW,+BAA+B;IAC9C,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,6BAA6B;IAC5C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrD,YAAY,CAAC,EAAE,6BAA6B,CAAC;CAC9C;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACzD,sBAAsB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrD,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAChD"}
1
+ {"version":3,"file":"runtime-catalog-contract.d.ts","sourceRoot":"","sources":["../src/runtime-catalog-contract.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,eAAO,MAAM,0BAA0B,uGAEK,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAE/E,eAAO,MAAM,uBAAuB,gFAE1B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAE1E,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CASxF,CAAC;AAEF,4EAA4E;AAC5E,MAAM,WAAW,+BAA+B;IAC9C,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,6BAA6B;IAC5C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrD,YAAY,CAAC,EAAE,6BAA6B,CAAC;CAC9C;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACzD,sBAAsB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrD,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-catalog.d.ts","sourceRoot":"","sources":["../src/runtime-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,wBAAwB,EAI9B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAIpC,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAyKlD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CAuCvF"}
1
+ {"version":3,"file":"runtime-catalog.d.ts","sourceRoot":"","sources":["../src/runtime-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,wBAAwB,EAI9B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAIpC,eAAO,MAAM,8BAA8B,MAAM,CAAC;AA6KlD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CAuCvF"}
@@ -1,6 +1,6 @@
1
1
  export declare const SCOUT_RUNTIME_CATALOG_DATA: {
2
2
  readonly schemaVersion: "openscout.runtime-catalog.v1";
3
- readonly revision: "2026-09-24.1";
3
+ readonly revision: "2026-10-01.1";
4
4
  readonly harnesses: readonly [{
5
5
  readonly id: "claude";
6
6
  readonly label: "Claude Code";
@@ -315,7 +315,8 @@ export declare const SCOUT_RUNTIME_CATALOG_DATA: {
315
315
  readonly id: "pi";
316
316
  readonly label: "Pi";
317
317
  readonly enabled: true;
318
- readonly reasoningEfforts: null;
318
+ readonly allowCustomModels: true;
319
+ readonly reasoningEfforts: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"];
319
320
  readonly models: readonly [];
320
321
  }, {
321
322
  readonly id: "devin";
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-catalog.generated.d.ts","sourceRoot":"","sources":["../src/runtime-catalog.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAic7B,CAAC"}
1
+ {"version":3,"file":"runtime-catalog.generated.d.ts","sourceRoot":"","sources":["../src/runtime-catalog.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0c7B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // Generated automatically from runtime-catalog.v1.json. Do not edit.
2
2
  export const SCOUT_RUNTIME_CATALOG_DATA = {
3
3
  "schemaVersion": "openscout.runtime-catalog.v1",
4
- "revision": "2026-09-24.1",
4
+ "revision": "2026-10-01.1",
5
5
  "harnesses": [
6
6
  {
7
7
  "id": "claude",
@@ -411,7 +411,16 @@ export const SCOUT_RUNTIME_CATALOG_DATA = {
411
411
  "id": "pi",
412
412
  "label": "Pi",
413
413
  "enabled": true,
414
- "reasoningEfforts": null,
414
+ "allowCustomModels": true,
415
+ "reasoningEfforts": [
416
+ "none",
417
+ "minimal",
418
+ "low",
419
+ "medium",
420
+ "high",
421
+ "xhigh",
422
+ "max"
423
+ ],
415
424
  "models": []
416
425
  },
417
426
  {
@@ -122,6 +122,9 @@ function harness(value, path, errors) {
122
122
  if (input.listed !== undefined && typeof input.listed !== "boolean") {
123
123
  errors.push(`${path}.listed must be boolean when provided`);
124
124
  }
125
+ if (input.allowCustomModels !== undefined && typeof input.allowCustomModels !== "boolean") {
126
+ errors.push(`${path}.allowCustomModels must be boolean when provided`);
127
+ }
125
128
  if (input.default === true && input.enabled !== true)
126
129
  errors.push(`${path} cannot be default while disabled`);
127
130
  const efforts = effortList(input.reasoningEfforts, `${path}.reasoningEfforts`, errors);
@@ -163,6 +166,7 @@ function harness(value, path, errors) {
163
166
  label,
164
167
  enabled: input.enabled,
165
168
  ...(typeof input.listed === "boolean" ? { listed: input.listed } : {}),
169
+ ...(typeof input.allowCustomModels === "boolean" ? { allowCustomModels: input.allowCustomModels } : {}),
166
170
  ...(input.default === true ? { default: true } : {}),
167
171
  reasoningEfforts: efforts,
168
172
  ...(defaultEffort && reasoningEfforts.has(defaultEffort)
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-execution.d.ts","sourceRoot":"","sources":["../src/runtime-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-execution.d.ts","sourceRoot":"","sources":["../src/runtime-execution.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export function isScoutRuntimeHarnessListed(harness, catalog = SCOUT_RUNTIME_CAT
22
22
  /** A harness accepts a model dimension iff the owned catalog lists at least one enabled model for it. */
23
23
  export function isModelSelectableHarness(harness, catalog = SCOUT_RUNTIME_CATALOG) {
24
24
  const entry = scoutRuntimeHarness(harness, catalog);
25
- return entry?.enabled === true && entry.models.some((model) => model.enabled);
25
+ return entry?.enabled === true && (entry.allowCustomModels === true || entry.models.some((model) => model.enabled));
26
26
  }
27
27
  export function scoutRuntimeDefaultHarness(catalog = SCOUT_RUNTIME_CATALOG) {
28
28
  return catalog.harnesses.find((entry) => entry.enabled && entry.default)?.id
@@ -348,7 +348,8 @@ export function validateScoutRuntimeTuple(input, catalog, ownedCatalog = SCOUT_R
348
348
  }
349
349
  else if (model && harness && catalog) {
350
350
  const known = catalog.models.find((candidate) => candidate.id.toLowerCase() === model.toLowerCase());
351
- if (known && !known.harnesses.includes(harness)) {
351
+ if (known && scoutRuntimeHarness(harness, ownedCatalog)?.allowCustomModels !== true
352
+ && !known.harnesses.includes(harness)) {
352
353
  issues.push({
353
354
  code: "model_harness_mismatch",
354
355
  dimension: "model",
@@ -0,0 +1,2 @@
1
+ export declare function slackAppManifest(appName?: string, mode?: "generic" | "project"): Record<string, unknown>;
2
+ //# sourceMappingURL=slack-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-manifest.d.ts","sourceRoot":"","sources":["../src/slack-manifest.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,OAAO,SAAU,EAAE,IAAI,GAAE,SAAS,GAAG,SAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDpH"}
@@ -0,0 +1,58 @@
1
+ export function slackAppManifest(appName = "Scout", mode = "generic") {
2
+ return {
3
+ display_information: {
4
+ name: appName,
5
+ description: mode === "project" ? `Reach the ${appName} project agent through Scout` : "Turn Slack requests into durable Scout coding work",
6
+ background_color: "#171717",
7
+ },
8
+ features: {
9
+ app_home: {
10
+ home_tab_enabled: false,
11
+ messages_tab_enabled: true,
12
+ messages_tab_read_only_enabled: false,
13
+ },
14
+ bot_user: {
15
+ display_name: appName,
16
+ always_online: false,
17
+ },
18
+ ...(mode === "generic" ? { slash_commands: [
19
+ {
20
+ command: "/scout",
21
+ description: "Start Scout work, optionally routed to a target or exact session",
22
+ usage_hint: "[@target|session:<id>] request",
23
+ should_escape: false,
24
+ },
25
+ {
26
+ command: "/scout-settings",
27
+ description: "Set the default project, branch, and harness for this channel",
28
+ should_escape: false,
29
+ },
30
+ ] } : {}),
31
+ },
32
+ oauth_config: {
33
+ scopes: {
34
+ bot: [
35
+ "app_mentions:read",
36
+ "channels:history",
37
+ "chat:write",
38
+ "files:read",
39
+ "groups:history",
40
+ "im:history",
41
+ "mpim:history",
42
+ "reactions:write",
43
+ "users:read",
44
+ ...(mode === "generic" ? ["commands"] : []),
45
+ ],
46
+ },
47
+ },
48
+ settings: {
49
+ event_subscriptions: {
50
+ bot_events: ["app_mention", "message.im"],
51
+ },
52
+ interactivity: { is_enabled: true },
53
+ org_deploy_enabled: false,
54
+ socket_mode_enabled: true,
55
+ token_rotation_enabled: false,
56
+ },
57
+ };
58
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openscout/protocol",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Typed protocol for the OpenScout local control plane",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -57,5 +57,5 @@
57
57
  "devDependencies": {
58
58
  "typescript": "^5"
59
59
  },
60
- "gitHead": "91120d89cc1aa05069631f0cf8b327b2206e5480"
60
+ "gitHead": "65d147203683d13f827837bb9c150d9d8a87b85e"
61
61
  }
package/src/index.ts CHANGED
@@ -71,3 +71,8 @@ export * from "./chat-mentions.js";
71
71
  export * from "./agent-notifications.js";
72
72
 
73
73
  export * from "./mcp-core-tools.js";
74
+
75
+ export * from "./integrations.js";
76
+ export * from "./slack-manifest.js";
77
+
78
+ export * from "./room-listening.js";
@@ -0,0 +1,86 @@
1
+ /** Token-free contracts for broker-owned, local Slack setup. */
2
+ export type SlackSetupState = "awaiting_workspace" | "awaiting_authority" | "awaiting_app" | "awaiting_credentials" | "ready_to_start";
3
+
4
+ export interface SlackProjectBinding {
5
+ agentId: string;
6
+ definitionId: string;
7
+ projectPath: string;
8
+ nodeId: string;
9
+ revision: number;
10
+ }
11
+
12
+ export interface SlackSetupRequest {
13
+ provider: "slack";
14
+ mode: "project_agent";
15
+ projectPath: string;
16
+ agentId?: string;
17
+ displayName?: string;
18
+ workspaceId?: string;
19
+ idempotencyKey?: string;
20
+ }
21
+
22
+ export interface SlackCredentialReference {
23
+ backend: "secret_cli" | "private_file";
24
+ appTokenKey: string;
25
+ botTokenKey: string;
26
+ }
27
+
28
+ export interface SlackInstallationCredentials {
29
+ reference: SlackCredentialReference;
30
+ botId: string;
31
+ botUserId: string;
32
+ verifiedAt: number;
33
+ allowedUserIds: string[];
34
+ allowedChannelIds: string[];
35
+ }
36
+
37
+ export interface SlackVerificationEvidence {
38
+ bindingRevision: number;
39
+ credentialVerifiedAt: number;
40
+ verifiedAt: number;
41
+ channelId: string;
42
+ threadTs: string;
43
+ first: { eventId: string; invocationId: string; messageId: string; resultDeliveredAt: number };
44
+ followUp: { eventId: string; invocationId: string; messageId: string; resultDeliveredAt: number };
45
+ }
46
+
47
+ export interface SlackSetupOperation {
48
+ id: string;
49
+ provider: "slack";
50
+ mode: "project_agent";
51
+ ownerRealmId: string;
52
+ binding: SlackProjectBinding;
53
+ displayName: string;
54
+ manifestHash: string;
55
+ workspaceId?: string;
56
+ /** Claimed by the operator; not yet validated with Slack. */
57
+ appId?: string;
58
+ authorityConfirmedAt?: number;
59
+ credentials?: SlackInstallationCredentials;
60
+ desiredState?: "running" | "paused" | "disconnected";
61
+ verification?: SlackVerificationEvidence;
62
+ workerError?: { code: "worker_unavailable" | "worker_exited"; at: number };
63
+ state: SlackSetupState;
64
+ revision: number;
65
+ createdAt: number;
66
+ updatedAt: number;
67
+ }
68
+
69
+ export type SlackSetupResumeRequest = { expectedRevision: number } & (
70
+ | { action: "choose_workspace"; workspaceId: string }
71
+ | { action: "confirm_authority" }
72
+ | { action: "register_app"; appId: string }
73
+ );
74
+
75
+ export interface SlackSetupReceipt {
76
+ operation: SlackSetupOperation;
77
+ nextAction: {
78
+ id: string;
79
+ kind: "choose_workspace" | "confirm_authority" | "create_or_connect_app" | "connect_secrets" | "start_worker" | "wait_for_worker" | "verify_integration" | "complete";
80
+ title: string;
81
+ };
82
+ /** Setup bookkeeping never implies a connected or verified integration. */
83
+ readiness: "not_connected" | "connected_unverified" | "verified";
84
+ eventQueue?: { pending: number; retrying: number };
85
+ worker?: { generation: number; state: "starting" | "connected" | "stopped" | "expired"; expiresAt: number; updatedAt: number };
86
+ }
@@ -0,0 +1,4 @@
1
+ /** Shared room HTTP bounds. Leave envelope/cursor/membership headroom below transport cap. */
2
+ export const ROOM_LISTENING_RESPONSE_BYTES = 4 * 1024 * 1024;
3
+ export const ROOM_LISTENING_PAGE_BYTES = 3 * 1024 * 1024;
4
+ export const ROOM_LISTENING_MESSAGE_BYTES = 64 * 1024;
@@ -62,6 +62,8 @@ export interface ScoutOwnedRuntimeHarness {
62
62
  * as a separate operator choice.
63
63
  */
64
64
  listed?: boolean;
65
+ /** Accept provider/extension model ids without inventing a Scout default. */
66
+ allowCustomModels?: boolean;
65
67
  default?: boolean;
66
68
  reasoningEfforts: readonly ScoutReasoningEffort[] | null;
67
69
  defaultReasoningEffort?: ScoutReasoningEffort | null;
@@ -2,7 +2,7 @@
2
2
 
3
3
  export const SCOUT_RUNTIME_CATALOG_DATA = {
4
4
  "schemaVersion": "openscout.runtime-catalog.v1",
5
- "revision": "2026-09-24.1",
5
+ "revision": "2026-10-01.1",
6
6
  "harnesses": [
7
7
  {
8
8
  "id": "claude",
@@ -412,7 +412,16 @@ export const SCOUT_RUNTIME_CATALOG_DATA = {
412
412
  "id": "pi",
413
413
  "label": "Pi",
414
414
  "enabled": true,
415
- "reasoningEfforts": null,
415
+ "allowCustomModels": true,
416
+ "reasoningEfforts": [
417
+ "none",
418
+ "minimal",
419
+ "low",
420
+ "medium",
421
+ "high",
422
+ "xhigh",
423
+ "max"
424
+ ],
416
425
  "models": []
417
426
  },
418
427
  {
@@ -134,6 +134,9 @@ function harness(value: unknown, path: string, errors: string[]): ScoutOwnedRunt
134
134
  if (input.listed !== undefined && typeof input.listed !== "boolean") {
135
135
  errors.push(`${path}.listed must be boolean when provided`);
136
136
  }
137
+ if (input.allowCustomModels !== undefined && typeof input.allowCustomModels !== "boolean") {
138
+ errors.push(`${path}.allowCustomModels must be boolean when provided`);
139
+ }
137
140
  if (input.default === true && input.enabled !== true) errors.push(`${path} cannot be default while disabled`);
138
141
  const efforts = effortList(input.reasoningEfforts, `${path}.reasoningEfforts`, errors);
139
142
  if (!id || !launchableHarnesses.has(id) || !label || typeof input.enabled !== "boolean" || efforts === undefined) {
@@ -171,6 +174,7 @@ function harness(value: unknown, path: string, errors: string[]): ScoutOwnedRunt
171
174
  label,
172
175
  enabled: input.enabled,
173
176
  ...(typeof input.listed === "boolean" ? { listed: input.listed } : {}),
177
+ ...(typeof input.allowCustomModels === "boolean" ? { allowCustomModels: input.allowCustomModels } : {}),
174
178
  ...(input.default === true ? { default: true } : {}),
175
179
  reasoningEfforts: efforts,
176
180
  ...(defaultEffort && reasoningEfforts.has(defaultEffort)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "openscout.runtime-catalog.v1",
3
- "revision": "2026-09-24.1",
3
+ "revision": "2026-10-01.1",
4
4
  "harnesses": [
5
5
  {
6
6
  "id": "claude",
@@ -84,7 +84,7 @@
84
84
  { "id": "opencode/laguna-s-2.1-free", "label": "Laguna S 2.1 (free)", "enabled": true, "family": "Laguna", "version": "S 2.1 Free" }
85
85
  ]
86
86
  },
87
- { "id": "pi", "label": "Pi", "enabled": true, "reasoningEfforts": null, "models": [] },
87
+ { "id": "pi", "label": "Pi", "enabled": true, "allowCustomModels": true, "reasoningEfforts": ["none", "minimal", "low", "medium", "high", "xhigh", "max"], "models": [] },
88
88
  {
89
89
  "id": "devin",
90
90
  "label": "Devin",
@@ -54,7 +54,7 @@ export function isModelSelectableHarness(
54
54
  catalog: ScoutOwnedRuntimeCatalog = SCOUT_RUNTIME_CATALOG,
55
55
  ): boolean {
56
56
  const entry = scoutRuntimeHarness(harness, catalog);
57
- return entry?.enabled === true && entry.models.some((model) => model.enabled);
57
+ return entry?.enabled === true && (entry.allowCustomModels === true || entry.models.some((model) => model.enabled));
58
58
  }
59
59
 
60
60
  export function scoutRuntimeDefaultHarness(
@@ -602,7 +602,8 @@ export function validateScoutRuntimeTuple(
602
602
  });
603
603
  } else if (model && harness && catalog) {
604
604
  const known = catalog.models.find((candidate) => candidate.id.toLowerCase() === model.toLowerCase());
605
- if (known && !known.harnesses.includes(harness as ScoutLaunchableHarness)) {
605
+ if (known && scoutRuntimeHarness(harness, ownedCatalog)?.allowCustomModels !== true
606
+ && !known.harnesses.includes(harness as ScoutLaunchableHarness)) {
606
607
  issues.push({
607
608
  code: "model_harness_mismatch",
608
609
  dimension: "model",
@@ -0,0 +1,59 @@
1
+ export function slackAppManifest(appName = "Scout", mode: "generic" | "project" = "generic"): Record<string, unknown> {
2
+ return {
3
+ display_information: {
4
+ name: appName,
5
+ description: mode === "project" ? `Reach the ${appName} project agent through Scout` : "Turn Slack requests into durable Scout coding work",
6
+ background_color: "#171717",
7
+ },
8
+ features: {
9
+ app_home: {
10
+ home_tab_enabled: false,
11
+ messages_tab_enabled: true,
12
+ messages_tab_read_only_enabled: false,
13
+ },
14
+ bot_user: {
15
+ display_name: appName,
16
+ always_online: false,
17
+ },
18
+ ...(mode === "generic" ? { slash_commands: [
19
+ {
20
+ command: "/scout",
21
+ description: "Start Scout work, optionally routed to a target or exact session",
22
+ usage_hint: "[@target|session:<id>] request",
23
+ should_escape: false,
24
+ },
25
+ {
26
+ command: "/scout-settings",
27
+ description: "Set the default project, branch, and harness for this channel",
28
+ should_escape: false,
29
+ },
30
+ ] } : {}),
31
+ },
32
+ oauth_config: {
33
+ scopes: {
34
+ bot: [
35
+ "app_mentions:read",
36
+ "channels:history",
37
+ "chat:write",
38
+ "files:read",
39
+ "groups:history",
40
+ "im:history",
41
+ "mpim:history",
42
+ "reactions:write",
43
+ "users:read",
44
+ ...(mode === "generic" ? ["commands"] : []),
45
+ ],
46
+ },
47
+ },
48
+ settings: {
49
+ event_subscriptions: {
50
+ bot_events: ["app_mention", "message.im"],
51
+ },
52
+ interactivity: { is_enabled: true },
53
+ org_deploy_enabled: false,
54
+ socket_mode_enabled: true,
55
+ token_rotation_enabled: false,
56
+ },
57
+ };
58
+ }
59
+