@xfey/tutti 0.1.111 → 0.1.113

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 (67) hide show
  1. package/dist/approvals/decision-command.d.ts +2 -2
  2. package/dist/chat-assistant/index.d.ts +1 -1
  3. package/dist/chat-assistant/index.js +19 -6
  4. package/dist/collaboration-ingestion/clarification.d.ts +25 -0
  5. package/dist/collaboration-ingestion/clarification.js +63 -0
  6. package/dist/collaboration-ingestion/external-source.d.ts +2 -0
  7. package/dist/collaboration-ingestion/external-source.js +35 -0
  8. package/dist/collaboration-ingestion/index.d.ts +2 -0
  9. package/dist/collaboration-ingestion/index.js +2 -0
  10. package/dist/collaboration-ingestion/platform-clarification.d.ts +10 -0
  11. package/dist/collaboration-ingestion/platform-clarification.js +42 -0
  12. package/dist/collaboration-state/clarification-messages.js +3 -2
  13. package/dist/collaboration-state/clarification-records.d.ts +1 -1
  14. package/dist/collaboration-state/clarification-records.js +7 -5
  15. package/dist/collaboration-state/clarification-rounds.js +5 -5
  16. package/dist/collaboration-state/clarification-snapshot.d.ts +228 -0
  17. package/dist/collaboration-state/clarification-snapshot.js +29 -0
  18. package/dist/collaboration-state/clarification-successors.js +6 -6
  19. package/dist/collaboration-state/index.d.ts +1 -0
  20. package/dist/collaboration-state/index.js +1 -0
  21. package/dist/collaboration-state/run-recording.js +1 -1
  22. package/dist/collaboration-state/task-compile-context.d.ts +1 -1
  23. package/dist/collaboration-state/types.d.ts +1 -0
  24. package/dist/control-plane/clarification-commands.d.ts +3 -2
  25. package/dist/control-plane/clarification-commands.js +13 -4
  26. package/dist/control-plane/follow-up-context.js +8 -14
  27. package/dist/control-plane/index.d.ts +3 -2
  28. package/dist/control-plane/task-compile-clarification-context.js +7 -2
  29. package/dist/control-plane/types.d.ts +1 -0
  30. package/dist/control-plane/workflows/openai.js +5 -4
  31. package/dist/platform-outbound/repository.js +83 -4
  32. package/dist/server-shell/cli/host-lifecycle.js +1 -0
  33. package/dist/server-shell/cli/host-server-runtime.d.ts +2 -1
  34. package/dist/server-shell/cli/host-server-runtime.js +4 -2
  35. package/dist/server-shell/cli/relay-registration.js +1 -0
  36. package/dist/server-shell/http/host-tunnel.d.ts +2 -1
  37. package/dist/server-shell/http/host-tunnel.js +4 -1
  38. package/dist/server-shell/http/integration-clarification-dispatch.d.ts +6 -0
  39. package/dist/server-shell/http/integration-clarification-dispatch.js +43 -0
  40. package/dist/server-shell/http/routes/project-api/clarification-routes.js +16 -42
  41. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +2 -0
  42. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +1 -0
  43. package/dist/server-shell/http/routes/project-api/openapi.d.ts +3 -0
  44. package/dist/server-shell/http/routes/project-api/schemas.d.ts +1 -0
  45. package/migrations/0022_clarification_projection_cursors.sql +7 -0
  46. package/node_modules/@tutti/relay-client/dist/host-control.d.ts +1 -0
  47. package/node_modules/@tutti/relay-client/dist/host-control.js +3 -0
  48. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +13 -1
  49. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.js +9 -2
  50. package/node_modules/@tutti/shared/dist/schemas/internal/index.d.ts +2 -0
  51. package/node_modules/@tutti/shared/dist/schemas/internal/index.js +2 -0
  52. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification-content.d.ts +15 -0
  53. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification-content.js +24 -0
  54. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification.d.ts +354 -0
  55. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification.js +94 -0
  56. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.d.ts +89 -3
  57. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.js +15 -3
  58. package/node_modules/@tutti/shared/dist/utils/clarification-participants.d.ts +4 -0
  59. package/node_modules/@tutti/shared/dist/utils/clarification-participants.js +11 -0
  60. package/node_modules/@tutti/shared/dist/utils/index.d.ts +1 -0
  61. package/node_modules/@tutti/shared/dist/utils/index.js +1 -0
  62. package/package.json +1 -1
  63. package/prompts/procedures/follow-up-check.md +4 -4
  64. package/web/assets/{homepage-motion-scene-TmkKf8wQ.js → homepage-motion-scene-BwdH6Iss.js} +1 -1
  65. package/web/assets/index-B29RuNsd.js +69 -0
  66. package/web/index.html +1 -1
  67. package/web/assets/index-B1oL1p9_.js +0 -69
@@ -0,0 +1,354 @@
1
+ import { type Static } from "@sinclair/typebox";
2
+ import type { SubmitClarificationRoundResponse } from "../api/types.js";
3
+ export declare const INTEGRATION_CLARIFICATION_TUNNEL_PATH = "/internal/integration/v1/clarification";
4
+ export declare const INTEGRATION_CLARIFICATION_CONTROL_PATH = "/integration-control/v1/projects/:relayProjectRef/clarification";
5
+ export declare const IntegrationClarificationRequestSchema: import("@sinclair/typebox").TObject<{
6
+ protocol_version: import("@sinclair/typebox").TLiteral<1>;
7
+ command_id: import("@sinclair/typebox").TString;
8
+ relay_project_ref: import("@sinclair/typebox").TString;
9
+ binding_ref: import("@sinclair/typebox").TString;
10
+ operation_ref: import("@sinclair/typebox").TString;
11
+ conversation: import("@sinclair/typebox").TObject<{
12
+ installation: import("@sinclair/typebox").TObject<{
13
+ platform: import("@sinclair/typebox").TString;
14
+ installation_ref: import("@sinclair/typebox").TString;
15
+ }>;
16
+ conversation_ref: import("@sinclair/typebox").TString;
17
+ thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
18
+ parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
19
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
20
+ }>;
21
+ external_subject: import("@sinclair/typebox").TObject<{
22
+ installation: import("@sinclair/typebox").TObject<{
23
+ platform: import("@sinclair/typebox").TString;
24
+ installation_ref: import("@sinclair/typebox").TString;
25
+ }>;
26
+ subject_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human">, import("@sinclair/typebox").TLiteral<"bot">, import("@sinclair/typebox").TLiteral<"app">, import("@sinclair/typebox").TLiteral<"system">]>;
27
+ subject_ref: import("@sinclair/typebox").TString;
28
+ }>;
29
+ origin: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
30
+ kind: import("@sinclair/typebox").TLiteral<"development_operator">;
31
+ }>, import("@sinclair/typebox").TObject<{
32
+ kind: import("@sinclair/typebox").TLiteral<"card_callback">;
33
+ message_ref: import("@sinclair/typebox").TString;
34
+ action_ref: import("@sinclair/typebox").TString;
35
+ }>]>;
36
+ operation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
37
+ kind: import("@sinclair/typebox").TLiteral<"query">;
38
+ round_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
39
+ }>, import("@sinclair/typebox").TObject<{
40
+ kind: import("@sinclair/typebox").TLiteral<"submit">;
41
+ round_id: import("@sinclair/typebox").TString;
42
+ expected_answer_revision: import("@sinclair/typebox").TInteger;
43
+ }>]>;
44
+ }>;
45
+ export declare const TrustedClarificationCommandSchema: import("@sinclair/typebox").TObject<{
46
+ actor: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
47
+ kind: import("@sinclair/typebox").TLiteral<"human">;
48
+ account_ref: import("@sinclair/typebox").TString;
49
+ display_name: import("@sinclair/typebox").TString;
50
+ membership: import("@sinclair/typebox").TObject<{
51
+ relay_project_ref: import("@sinclair/typebox").TString;
52
+ label: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"member">]>;
53
+ }>;
54
+ channel: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"platform_chat">, import("@sinclair/typebox").TLiteral<"platform_h5">, import("@sinclair/typebox").TLiteral<"platform_card_callback">, import("@sinclair/typebox").TLiteral<"platform_document_sync">]>;
55
+ external_subject: import("@sinclair/typebox").TObject<{
56
+ installation: import("@sinclair/typebox").TObject<{
57
+ platform: import("@sinclair/typebox").TString;
58
+ installation_ref: import("@sinclair/typebox").TString;
59
+ }>;
60
+ subject_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human">, import("@sinclair/typebox").TLiteral<"bot">, import("@sinclair/typebox").TLiteral<"app">, import("@sinclair/typebox").TLiteral<"system">]>;
61
+ subject_ref: import("@sinclair/typebox").TString;
62
+ }>;
63
+ binding_ref: import("@sinclair/typebox").TString;
64
+ verified_at: import("@sinclair/typebox").TString;
65
+ }>, import("@sinclair/typebox").TObject<{
66
+ kind: import("@sinclair/typebox").TLiteral<"bot">;
67
+ purpose: import("@sinclair/typebox").TLiteral<"development_operator">;
68
+ channel: import("@sinclair/typebox").TLiteral<"platform_chat">;
69
+ account_ref: import("@sinclair/typebox").TString;
70
+ display_name: import("@sinclair/typebox").TString;
71
+ membership: import("@sinclair/typebox").TObject<{
72
+ relay_project_ref: import("@sinclair/typebox").TString;
73
+ label: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"member">]>;
74
+ }>;
75
+ external_subject: import("@sinclair/typebox").TObject<{
76
+ installation: import("@sinclair/typebox").TObject<{
77
+ platform: import("@sinclair/typebox").TString;
78
+ installation_ref: import("@sinclair/typebox").TString;
79
+ }>;
80
+ subject_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human">, import("@sinclair/typebox").TLiteral<"bot">, import("@sinclair/typebox").TLiteral<"app">, import("@sinclair/typebox").TLiteral<"system">]>;
81
+ subject_ref: import("@sinclair/typebox").TString;
82
+ }>;
83
+ binding_ref: import("@sinclair/typebox").TString;
84
+ verified_at: import("@sinclair/typebox").TString;
85
+ }>]>;
86
+ protocol_version: import("@sinclair/typebox").TLiteral<1>;
87
+ command_id: import("@sinclair/typebox").TString;
88
+ relay_project_ref: import("@sinclair/typebox").TString;
89
+ binding_ref: import("@sinclair/typebox").TString;
90
+ operation_ref: import("@sinclair/typebox").TString;
91
+ conversation: import("@sinclair/typebox").TObject<{
92
+ installation: import("@sinclair/typebox").TObject<{
93
+ platform: import("@sinclair/typebox").TString;
94
+ installation_ref: import("@sinclair/typebox").TString;
95
+ }>;
96
+ conversation_ref: import("@sinclair/typebox").TString;
97
+ thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
98
+ parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
99
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
100
+ }>;
101
+ external_subject: import("@sinclair/typebox").TObject<{
102
+ installation: import("@sinclair/typebox").TObject<{
103
+ platform: import("@sinclair/typebox").TString;
104
+ installation_ref: import("@sinclair/typebox").TString;
105
+ }>;
106
+ subject_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human">, import("@sinclair/typebox").TLiteral<"bot">, import("@sinclair/typebox").TLiteral<"app">, import("@sinclair/typebox").TLiteral<"system">]>;
107
+ subject_ref: import("@sinclair/typebox").TString;
108
+ }>;
109
+ origin: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
110
+ kind: import("@sinclair/typebox").TLiteral<"development_operator">;
111
+ }>, import("@sinclair/typebox").TObject<{
112
+ kind: import("@sinclair/typebox").TLiteral<"card_callback">;
113
+ message_ref: import("@sinclair/typebox").TString;
114
+ action_ref: import("@sinclair/typebox").TString;
115
+ }>]>;
116
+ operation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
117
+ kind: import("@sinclair/typebox").TLiteral<"query">;
118
+ round_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
119
+ }>, import("@sinclair/typebox").TObject<{
120
+ kind: import("@sinclair/typebox").TLiteral<"submit">;
121
+ round_id: import("@sinclair/typebox").TString;
122
+ expected_answer_revision: import("@sinclair/typebox").TInteger;
123
+ }>]>;
124
+ }>;
125
+ export declare const IntegrationClarificationResponseSchema: import("@sinclair/typebox").TObject<{
126
+ protocol_version: import("@sinclair/typebox").TLiteral<1>;
127
+ disposition: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
128
+ kind: import("@sinclair/typebox").TLiteral<"queried">;
129
+ active: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
130
+ state: import("@sinclair/typebox").TLiteral<"none">;
131
+ }>, import("@sinclair/typebox").TObject<{
132
+ state: import("@sinclair/typebox").TLiteral<"active">;
133
+ thread: import("@sinclair/typebox").TObject<{
134
+ id: import("@sinclair/typebox").TString;
135
+ owner: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
136
+ kind: import("@sinclair/typebox").TLiteral<"task_compile">;
137
+ workflow_ref: import("@sinclair/typebox").TString;
138
+ }>, import("@sinclair/typebox").TObject<{
139
+ kind: import("@sinclair/typebox").TLiteral<"task">;
140
+ task_id: import("@sinclair/typebox").TString;
141
+ }>]>;
142
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"closed">]>;
143
+ current_round_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
144
+ created_from_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
145
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
146
+ created_at: import("@sinclair/typebox").TString;
147
+ updated_at: import("@sinclair/typebox").TString;
148
+ }>;
149
+ round: import("@sinclair/typebox").TObject<{
150
+ id: import("@sinclair/typebox").TString;
151
+ thread_id: import("@sinclair/typebox").TString;
152
+ round_index: import("@sinclair/typebox").TInteger;
153
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"sealed">]>;
154
+ request_payload: import("@sinclair/typebox").TObject<{
155
+ summary: import("@sinclair/typebox").TString;
156
+ request: import("@sinclair/typebox").TString;
157
+ interaction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
158
+ kind: import("@sinclair/typebox").TLiteral<"freeform">;
159
+ purpose: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"clarify_requirement">, import("@sinclair/typebox").TLiteral<"confirm_risk">]>;
160
+ prompt: import("@sinclair/typebox").TObject<{
161
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
162
+ summary: import("@sinclair/typebox").TString;
163
+ request: import("@sinclair/typebox").TString;
164
+ }>;
165
+ subject: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
166
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"task">, import("@sinclair/typebox").TLiteral<"deployment_target">, import("@sinclair/typebox").TLiteral<"project_context">]>;
167
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
168
+ summary: import("@sinclair/typebox").TString;
169
+ }>>;
170
+ expires_when: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"current_run_only">, import("@sinclair/typebox").TLiteral<"until_task_contract_changes">]>>;
171
+ }>>;
172
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
+ related_refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
174
+ ref_kind: import("@sinclair/typebox").TLiteral<"project_doc">;
175
+ path: import("@sinclair/typebox").TString;
176
+ }>, import("@sinclair/typebox").TObject<{
177
+ ref_kind: import("@sinclair/typebox").TLiteral<"directory_readme">;
178
+ path: import("@sinclair/typebox").TString;
179
+ }>, import("@sinclair/typebox").TObject<{
180
+ ref_kind: import("@sinclair/typebox").TLiteral<"task_detail">;
181
+ task_id: import("@sinclair/typebox").TString;
182
+ }>, import("@sinclair/typebox").TObject<{
183
+ ref_kind: import("@sinclair/typebox").TLiteral<"worklist">;
184
+ module_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
185
+ task_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
186
+ }>, import("@sinclair/typebox").TObject<{
187
+ ref_kind: import("@sinclair/typebox").TLiteral<"scratchpad">;
188
+ id: import("@sinclair/typebox").TLiteral<"current">;
189
+ }>, import("@sinclair/typebox").TObject<{
190
+ ref_kind: import("@sinclair/typebox").TLiteral<"clarification_round">;
191
+ clarification_round_ref: import("@sinclair/typebox").TString;
192
+ }>, import("@sinclair/typebox").TObject<{
193
+ ref_kind: import("@sinclair/typebox").TLiteral<"chat_messages">;
194
+ message_refs: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
195
+ }>, import("@sinclair/typebox").TObject<{
196
+ ref_kind: import("@sinclair/typebox").TLiteral<"repo_paths">;
197
+ paths: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
198
+ }>, import("@sinclair/typebox").TObject<{
199
+ ref_kind: import("@sinclair/typebox").TLiteral<"recovery_summary">;
200
+ recovery_summary_id: import("@sinclair/typebox").TString;
201
+ }>]>>>;
202
+ }>;
203
+ card_message_id: import("@sinclair/typebox").TString;
204
+ opening_message_id: import("@sinclair/typebox").TString;
205
+ answer_revision: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
206
+ submitted_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
207
+ submitted_message_refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
208
+ successor_status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"not_materialized">, import("@sinclair/typebox").TLiteral<"materialized">]>;
209
+ successor_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
210
+ kind: import("@sinclair/typebox").TLiteral<"next_round">;
211
+ clarification_round_ref: import("@sinclair/typebox").TString;
212
+ }>, import("@sinclair/typebox").TObject<{
213
+ kind: import("@sinclair/typebox").TLiteral<"run">;
214
+ activity_ref: import("@sinclair/typebox").TString;
215
+ }>, import("@sinclair/typebox").TObject<{
216
+ kind: import("@sinclair/typebox").TLiteral<"chain_closed">;
217
+ }>, import("@sinclair/typebox").TObject<{
218
+ kind: import("@sinclair/typebox").TLiteral<"proposal_applied">;
219
+ workflow_ref: import("@sinclair/typebox").TString;
220
+ }>]>>;
221
+ capabilities: import("@sinclair/typebox").TObject<{
222
+ send_message: import("@sinclair/typebox").TBoolean;
223
+ submit: import("@sinclair/typebox").TBoolean;
224
+ }>;
225
+ created_at: import("@sinclair/typebox").TString;
226
+ updated_at: import("@sinclair/typebox").TString;
227
+ }>;
228
+ }>]>;
229
+ selected: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
230
+ thread: import("@sinclair/typebox").TObject<{
231
+ id: import("@sinclair/typebox").TString;
232
+ owner: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
233
+ kind: import("@sinclair/typebox").TLiteral<"task_compile">;
234
+ workflow_ref: import("@sinclair/typebox").TString;
235
+ }>, import("@sinclair/typebox").TObject<{
236
+ kind: import("@sinclair/typebox").TLiteral<"task">;
237
+ task_id: import("@sinclair/typebox").TString;
238
+ }>]>;
239
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"closed">]>;
240
+ current_round_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
241
+ created_from_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
242
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
243
+ created_at: import("@sinclair/typebox").TString;
244
+ updated_at: import("@sinclair/typebox").TString;
245
+ }>;
246
+ round: import("@sinclair/typebox").TObject<{
247
+ id: import("@sinclair/typebox").TString;
248
+ thread_id: import("@sinclair/typebox").TString;
249
+ round_index: import("@sinclair/typebox").TInteger;
250
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"sealed">]>;
251
+ request_payload: import("@sinclair/typebox").TObject<{
252
+ summary: import("@sinclair/typebox").TString;
253
+ request: import("@sinclair/typebox").TString;
254
+ interaction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
255
+ kind: import("@sinclair/typebox").TLiteral<"freeform">;
256
+ purpose: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"clarify_requirement">, import("@sinclair/typebox").TLiteral<"confirm_risk">]>;
257
+ prompt: import("@sinclair/typebox").TObject<{
258
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
259
+ summary: import("@sinclair/typebox").TString;
260
+ request: import("@sinclair/typebox").TString;
261
+ }>;
262
+ subject: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
263
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"task">, import("@sinclair/typebox").TLiteral<"deployment_target">, import("@sinclair/typebox").TLiteral<"project_context">]>;
264
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
265
+ summary: import("@sinclair/typebox").TString;
266
+ }>>;
267
+ expires_when: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"current_run_only">, import("@sinclair/typebox").TLiteral<"until_task_contract_changes">]>>;
268
+ }>>;
269
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
270
+ related_refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
271
+ ref_kind: import("@sinclair/typebox").TLiteral<"project_doc">;
272
+ path: import("@sinclair/typebox").TString;
273
+ }>, import("@sinclair/typebox").TObject<{
274
+ ref_kind: import("@sinclair/typebox").TLiteral<"directory_readme">;
275
+ path: import("@sinclair/typebox").TString;
276
+ }>, import("@sinclair/typebox").TObject<{
277
+ ref_kind: import("@sinclair/typebox").TLiteral<"task_detail">;
278
+ task_id: import("@sinclair/typebox").TString;
279
+ }>, import("@sinclair/typebox").TObject<{
280
+ ref_kind: import("@sinclair/typebox").TLiteral<"worklist">;
281
+ module_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
282
+ task_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
283
+ }>, import("@sinclair/typebox").TObject<{
284
+ ref_kind: import("@sinclair/typebox").TLiteral<"scratchpad">;
285
+ id: import("@sinclair/typebox").TLiteral<"current">;
286
+ }>, import("@sinclair/typebox").TObject<{
287
+ ref_kind: import("@sinclair/typebox").TLiteral<"clarification_round">;
288
+ clarification_round_ref: import("@sinclair/typebox").TString;
289
+ }>, import("@sinclair/typebox").TObject<{
290
+ ref_kind: import("@sinclair/typebox").TLiteral<"chat_messages">;
291
+ message_refs: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
292
+ }>, import("@sinclair/typebox").TObject<{
293
+ ref_kind: import("@sinclair/typebox").TLiteral<"repo_paths">;
294
+ paths: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
295
+ }>, import("@sinclair/typebox").TObject<{
296
+ ref_kind: import("@sinclair/typebox").TLiteral<"recovery_summary">;
297
+ recovery_summary_id: import("@sinclair/typebox").TString;
298
+ }>]>>>;
299
+ }>;
300
+ card_message_id: import("@sinclair/typebox").TString;
301
+ opening_message_id: import("@sinclair/typebox").TString;
302
+ answer_revision: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
303
+ submitted_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
304
+ submitted_message_refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
305
+ successor_status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"not_materialized">, import("@sinclair/typebox").TLiteral<"materialized">]>;
306
+ successor_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
307
+ kind: import("@sinclair/typebox").TLiteral<"next_round">;
308
+ clarification_round_ref: import("@sinclair/typebox").TString;
309
+ }>, import("@sinclair/typebox").TObject<{
310
+ kind: import("@sinclair/typebox").TLiteral<"run">;
311
+ activity_ref: import("@sinclair/typebox").TString;
312
+ }>, import("@sinclair/typebox").TObject<{
313
+ kind: import("@sinclair/typebox").TLiteral<"chain_closed">;
314
+ }>, import("@sinclair/typebox").TObject<{
315
+ kind: import("@sinclair/typebox").TLiteral<"proposal_applied">;
316
+ workflow_ref: import("@sinclair/typebox").TString;
317
+ }>]>>;
318
+ capabilities: import("@sinclair/typebox").TObject<{
319
+ send_message: import("@sinclair/typebox").TBoolean;
320
+ submit: import("@sinclair/typebox").TBoolean;
321
+ }>;
322
+ created_at: import("@sinclair/typebox").TString;
323
+ updated_at: import("@sinclair/typebox").TString;
324
+ }>;
325
+ }>>;
326
+ }>, import("@sinclair/typebox").TObject<{
327
+ kind: import("@sinclair/typebox").TLiteral<"submitted">;
328
+ response: import("@sinclair/typebox").TSchema;
329
+ }>, import("@sinclair/typebox").TObject<{
330
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"invalid">, import("@sinclair/typebox").TLiteral<"unauthorized">]>;
331
+ reason_code: import("@sinclair/typebox").TString;
332
+ }>, import("@sinclair/typebox").TObject<{
333
+ kind: import("@sinclair/typebox").TLiteral<"unavailable">;
334
+ retryable: import("@sinclair/typebox").TBoolean;
335
+ reason_code: import("@sinclair/typebox").TString;
336
+ }>]>;
337
+ }>;
338
+ export type IntegrationClarificationRequest = Static<typeof IntegrationClarificationRequestSchema>;
339
+ export type TrustedClarificationCommand = Static<typeof TrustedClarificationCommandSchema>;
340
+ type StaticResponse = Static<typeof IntegrationClarificationResponseSchema>;
341
+ export type IntegrationClarificationResponse = {
342
+ protocol_version: 1;
343
+ disposition: Exclude<StaticResponse["disposition"], {
344
+ kind: "submitted";
345
+ }> | {
346
+ kind: "submitted";
347
+ response: SubmitClarificationRoundResponse;
348
+ };
349
+ };
350
+ export declare function isIntegrationClarificationRequest(value: unknown): value is IntegrationClarificationRequest;
351
+ export declare function isTrustedClarificationCommand(value: unknown): value is TrustedClarificationCommand;
352
+ export declare function isIntegrationClarificationResponse(value: unknown): value is IntegrationClarificationResponse;
353
+ export {};
354
+ //# sourceMappingURL=platform-clarification.d.ts.map
@@ -0,0 +1,94 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { Value } from "@sinclair/typebox/value";
3
+ import { ClarificationRoundRefSchema, IdempotencyKeySchema, RelayProjectRefSchema, } from "../domain/index.js";
4
+ import { ActiveClarificationProjectionSchema, GetClarificationRoundResponseSchema, SubmitClarificationRoundResponseSchema, } from "../api/clarifications.js";
5
+ import { ExternalObjectRefSchema, ExternalSubjectLocatorSchema, IntegrationOwnedRefSchema, PlatformConversationLocatorSchema, TrustedDevelopmentBotActorContextSchema, TrustedHumanIntegrationActorContextSchema, } from "./platform-integration.js";
6
+ export const INTEGRATION_CLARIFICATION_TUNNEL_PATH = "/internal/integration/v1/clarification";
7
+ export const INTEGRATION_CLARIFICATION_CONTROL_PATH = "/integration-control/v1/projects/:relayProjectRef/clarification";
8
+ const requestProperties = {
9
+ protocol_version: Type.Literal(1),
10
+ command_id: IdempotencyKeySchema,
11
+ relay_project_ref: RelayProjectRefSchema,
12
+ binding_ref: IntegrationOwnedRefSchema,
13
+ operation_ref: IntegrationOwnedRefSchema,
14
+ conversation: PlatformConversationLocatorSchema,
15
+ external_subject: ExternalSubjectLocatorSchema,
16
+ origin: Type.Union([
17
+ Type.Object({ kind: Type.Literal("development_operator") }, { additionalProperties: false }),
18
+ Type.Object({
19
+ kind: Type.Literal("card_callback"),
20
+ message_ref: ExternalObjectRefSchema,
21
+ action_ref: IntegrationOwnedRefSchema,
22
+ }, { additionalProperties: false }),
23
+ ]),
24
+ operation: Type.Union([
25
+ Type.Object({ kind: Type.Literal("query"), round_id: Type.Optional(ClarificationRoundRefSchema) }, { additionalProperties: false }),
26
+ Type.Object({
27
+ kind: Type.Literal("submit"),
28
+ round_id: ClarificationRoundRefSchema,
29
+ expected_answer_revision: Type.Integer({ minimum: 0 }),
30
+ }, { additionalProperties: false }),
31
+ ]),
32
+ };
33
+ export const IntegrationClarificationRequestSchema = Type.Object(requestProperties, {
34
+ additionalProperties: false,
35
+ });
36
+ export const TrustedClarificationCommandSchema = Type.Object({
37
+ ...requestProperties,
38
+ actor: Type.Union([
39
+ TrustedHumanIntegrationActorContextSchema,
40
+ TrustedDevelopmentBotActorContextSchema,
41
+ ]),
42
+ }, { additionalProperties: false });
43
+ export const IntegrationClarificationResponseSchema = Type.Object({
44
+ protocol_version: Type.Literal(1),
45
+ disposition: Type.Union([
46
+ Type.Object({
47
+ kind: Type.Literal("queried"),
48
+ active: ActiveClarificationProjectionSchema,
49
+ selected: Type.Optional(GetClarificationRoundResponseSchema),
50
+ }, { additionalProperties: false }),
51
+ Type.Object({ kind: Type.Literal("submitted"), response: SubmitClarificationRoundResponseSchema }, { additionalProperties: false }),
52
+ Type.Object({
53
+ kind: Type.Union([Type.Literal("invalid"), Type.Literal("unauthorized")]),
54
+ reason_code: Type.String({ minLength: 1, maxLength: 128 }),
55
+ }, { additionalProperties: false }),
56
+ Type.Object({
57
+ kind: Type.Literal("unavailable"),
58
+ retryable: Type.Boolean(),
59
+ reason_code: Type.String({ minLength: 1, maxLength: 128 }),
60
+ }, { additionalProperties: false }),
61
+ ]),
62
+ }, { additionalProperties: false });
63
+ function validRequest(value) {
64
+ const installation = value.conversation.installation;
65
+ const subject = value.external_subject;
66
+ return (installation.platform === "feishu" &&
67
+ subject.installation.platform === installation.platform &&
68
+ subject.installation.installation_ref === installation.installation_ref &&
69
+ (value.origin.kind === "development_operator"
70
+ ? subject.subject_kind === "bot"
71
+ : subject.subject_kind === "human" && value.operation.kind === "submit"));
72
+ }
73
+ export function isIntegrationClarificationRequest(value) {
74
+ return Value.Check(IntegrationClarificationRequestSchema, value) && validRequest(value);
75
+ }
76
+ export function isTrustedClarificationCommand(value) {
77
+ if (!Value.Check(TrustedClarificationCommandSchema, value) || !validRequest(value))
78
+ return false;
79
+ const actor = value.actor;
80
+ return (actor.binding_ref === value.binding_ref &&
81
+ actor.membership.relay_project_ref === value.relay_project_ref &&
82
+ actor.external_subject.subject_ref === value.external_subject.subject_ref &&
83
+ actor.external_subject.subject_kind === value.external_subject.subject_kind &&
84
+ actor.external_subject.installation.platform === value.conversation.installation.platform &&
85
+ actor.external_subject.installation.installation_ref ===
86
+ value.conversation.installation.installation_ref &&
87
+ (value.origin.kind === "development_operator"
88
+ ? actor.kind === "bot" && actor.membership.label === "member"
89
+ : actor.kind === "human" && actor.channel === "platform_card_callback"));
90
+ }
91
+ export function isIntegrationClarificationResponse(value) {
92
+ return Value.Check(IntegrationClarificationResponseSchema, value);
93
+ }
94
+ //# sourceMappingURL=platform-clarification.js.map