@opencxh/domain 1.250.0 → 1.252.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -176,6 +176,17 @@ export interface AiToolDescriptor extends AiTool {
176
176
  * decides the suggest downgrade on this.
177
177
  */
178
178
  effect?: "internal" | "outward";
179
+ /**
180
+ * What this tool leaves behind for a human to finish. `"draft"` = it prepares something the
181
+ * user reviews and sends (a reply draft), which is exactly the deliverable of an
182
+ * `AssistantMode: "draft"` turn.
183
+ *
184
+ * Declaring it is what lets that mode keep the drafting tool and drop every other write
185
+ * *without naming any tool*: `effect: "internal"` is too wide — an internal note, an
186
+ * attribute and a work item are all internal, and a model asked to "write something" picks
187
+ * whichever one its description matched. See `tools/mode.ts` in the ai app.
188
+ */
189
+ produces?: "draft";
179
190
  }
180
191
  /**
181
192
  * Body of `POST /provider/ai-tools/invoke`. Replaces five inline structural types (the caller in
@@ -116,6 +116,44 @@ export interface SettingsPageConfig {
116
116
  */
117
117
  scopes?: SettingsScope[];
118
118
  }
119
+ /**
120
+ * One kind of connection on the Verbindingen page: the filter chip, and the form that
121
+ * opens when a row of that kind is clicked or created.
122
+ *
123
+ * Every connection is a `ManagedAccount` row, so one list can show them all. What one
124
+ * list cannot know is which app edits a row: the app whose provider issued the
125
+ * credential is not always the app that owns the form (an S3 bucket comes from
126
+ * `apps/s3`, which has no frontend — `apps/storage` draws it). So the owning UI
127
+ * declares which provider apps it speaks for, rather than the list guessing per
128
+ * provider and breaking at provider N+1.
129
+ */
130
+ export interface AccountKindConfig {
131
+ id: string;
132
+ /** Chip label — a translation key in the declaring app's namespace. */
133
+ displayName: string;
134
+ icon?: string;
135
+ /**
136
+ * Provider-app segments (`atob(providerId)` up to the colon) whose rows are this
137
+ * kind. **Empty claims the remainder**: the kind that owns the list itself declares
138
+ * no providers and takes every row nobody else claimed, so a new provider app shows
139
+ * up as a row on day one instead of disappearing.
140
+ */
141
+ providerApps: string[];
142
+ /**
143
+ * Federated resource that renders one row, as `{app}:{Component}`. Receives
144
+ * `{ id, onBack }`; `id` is `"create"` for a new one. Absent = the list draws its
145
+ * own detail, which is what the remainder kind wants: a communication account has
146
+ * capabilities, channels and signatures hanging off it that a stub form cannot show.
147
+ */
148
+ detail?: string;
149
+ /**
150
+ * Leave the kind out of the "new connection" menu. For rows that can only arrive
151
+ * through an OAuth hand-off, where a blank form would be a dead end.
152
+ */
153
+ createDisabled?: boolean;
154
+ /** Sorting hint for the chip row and the new-connection menu. */
155
+ order?: number;
156
+ }
119
157
  export interface ToastConfig {
120
158
  id: string;
121
159
  title?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencxh/domain",
3
- "version": "1.250.0",
3
+ "version": "1.252.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",