@wildo-ai/platform-core-shared 1.1.8 → 1.1.9
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/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js +26 -0
- package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts +88 -0
- package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js +89 -0
- package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts +11 -0
- package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js +11 -0
- package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts +14 -0
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js +16 -1
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts +104 -7
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js +124 -11
- package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts +3 -0
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts.map +1 -1
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js +7 -0
- package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js.map +1 -1
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts +7 -0
- package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { HumanDecision_FieldKind } from '@wildo-ai/saas-models';
|
|
3
|
+
import { ApplicationInterviewDepth } from '@wildo-ai/saas-models/meta-workflows';
|
|
2
4
|
import { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas.js';
|
|
3
5
|
/**
|
|
4
6
|
* The CREATION CONSOLE contract — how a coding-agent session (Claude Code, or any agent driving
|
|
@@ -139,11 +141,48 @@ export const CreationConsole_Question_Schema = z.object({
|
|
|
139
141
|
* no actions here: it is answered in the workbench, signed in as them. NULL when it is unrouted.
|
|
140
142
|
*/
|
|
141
143
|
routedToUserId: z.string().nullable(),
|
|
144
|
+
/**
|
|
145
|
+
* For an interview question (#2129): whether a SIMPLE interview asks it of the person
|
|
146
|
+
* (`isElicitationQuestionAskedInSimpleInterview` — an essential question, or one only the person may
|
|
147
|
+
* answer). FALSE means a simple interview proposes it instead (reviewed here, or assumed by an unattended round
|
|
148
|
+
* and listed to revisit). NULL for other kinds.
|
|
149
|
+
*/
|
|
150
|
+
askedInSimpleInterview: z.boolean().nullable(),
|
|
151
|
+
/**
|
|
152
|
+
* For an interview question (#2129): whether the companion may propose an answer when the person does
|
|
153
|
+
* not know (`POST /creation/interview/proposals`), recorded as an assumption. FALSE for a question only
|
|
154
|
+
* the person may answer; NULL for other kinds.
|
|
155
|
+
*/
|
|
156
|
+
proposable: z.boolean().nullable(),
|
|
157
|
+
/**
|
|
158
|
+
* For an interview question (#2129): it concerns a regulated domain, so a proposed answer to it is named to
|
|
159
|
+
* the person explicitly before it is kept. NULL for other kinds.
|
|
160
|
+
*/
|
|
161
|
+
regulatedDomain: z.boolean().nullable(),
|
|
162
|
+
/**
|
|
163
|
+
* For an item of the queue's `assumptions` (#2129): the assumed value. Answering the item records the
|
|
164
|
+
* person's own answer in its place. NULL on every item of `questions`.
|
|
165
|
+
*/
|
|
166
|
+
assumedAnswer: z.string().nullable(),
|
|
167
|
+
/** For an item of `assumptions`: what the proposal rested on, as the proposer said it. NULL otherwise. */
|
|
168
|
+
assumptionRationale: z.string().nullable(),
|
|
142
169
|
});
|
|
143
170
|
export const CreationConsole_QuestionQueue_Schema = z.object({
|
|
144
171
|
/** When the queue was read, ISO-8601. */
|
|
145
172
|
computedAt: z.string(),
|
|
173
|
+
/** Everything WAITING on the person — and nothing else: a consumer may count these as blocked work. */
|
|
146
174
|
questions: z.array(CreationConsole_Question_Schema),
|
|
175
|
+
/**
|
|
176
|
+
* Interview answers that are ASSUMPTIONS (#2129), each with its `assumedAnswer`. NOTHING waits on them —
|
|
177
|
+
* the run proceeds on each — so they are kept apart from `questions`: they are listed so the person can
|
|
178
|
+
* REVISIT one when they choose, and answering one records their own answer in its place.
|
|
179
|
+
*/
|
|
180
|
+
assumptions: z.array(CreationConsole_Question_Schema),
|
|
181
|
+
/**
|
|
182
|
+
* How deep this application's interviews go (#2129). NULL until the person chooses: a surface starting an
|
|
183
|
+
* interview asks first and records the choice with `POST /creation/interview/depth`.
|
|
184
|
+
*/
|
|
185
|
+
interviewDepth: z.enum(ApplicationInterviewDepth).nullable(),
|
|
147
186
|
});
|
|
148
187
|
/**
|
|
149
188
|
* One answer to one field. It carries its OWN author because a round is answered in one call while its
|
|
@@ -157,6 +196,56 @@ export const CreationConsole_Answer_Schema = z.object({
|
|
|
157
196
|
value: z.string().min(1),
|
|
158
197
|
/** Who gave THIS answer; overrides the request's `answeredByRef` for this field. Same vocabulary. */
|
|
159
198
|
answeredByRef: z.string().min(1).optional(),
|
|
199
|
+
/**
|
|
200
|
+
* `assumed` when the person did not know and let a PROPOSED answer stand (#2129) — the vocabulary
|
|
201
|
+
* `ApplicationCreatorInputAnswerStanding` in `saas-specifications`. Interview answers only; absent means
|
|
202
|
+
* the answer is decided. Validated by the companion, which refuses it for a question only the person may answer.
|
|
203
|
+
*/
|
|
204
|
+
standing: z.string().min(1).optional(),
|
|
205
|
+
/** The proposer's reason, carried with an assumed answer so the dossier shows what the assumption rests on. */
|
|
206
|
+
assumptionRationale: z.string().min(1).optional(),
|
|
207
|
+
});
|
|
208
|
+
/** `POST /creation/interview/depth` (#2129): record how deep this application's interviews go. */
|
|
209
|
+
export const CreationConsole_InterviewDepthRequest_Schema = z.object({
|
|
210
|
+
interviewDepth: z.enum(ApplicationInterviewDepth),
|
|
211
|
+
});
|
|
212
|
+
/**
|
|
213
|
+
* `POST /creation/interview/proposals` (#2129): propose answers to an interview's questions the person does
|
|
214
|
+
* not know. Nothing is written: the proposals come back for the person to review, and what they keep is sent
|
|
215
|
+
* through `POST /creation/questions/answer` with `standing: assumed`.
|
|
216
|
+
*/
|
|
217
|
+
export const CreationConsole_ProposalRequest_Schema = z.object({
|
|
218
|
+
playbookRef: z.string().min(1),
|
|
219
|
+
/** The opened instance the interview is for (#1609); absent for the step itself. */
|
|
220
|
+
instanceKey: z.string().min(1).optional(),
|
|
221
|
+
/**
|
|
222
|
+
* The questions to propose for. Absent: every unanswered question the application's interview depth does
|
|
223
|
+
* not ask of the person — the review step of a SIMPLE interview.
|
|
224
|
+
*/
|
|
225
|
+
questionRefs: z.array(z.string().min(1)).optional(),
|
|
226
|
+
});
|
|
227
|
+
export const CreationConsole_Proposal_Schema = z.object({
|
|
228
|
+
/**
|
|
229
|
+
* The queue item to answer it under, with `wildo creation answer <questionId>`. NULL when the step is not
|
|
230
|
+
* asking it right now (it cannot run yet), so there is no queue item to answer.
|
|
231
|
+
*/
|
|
232
|
+
questionId: z.string().min(1).nullable(),
|
|
233
|
+
questionRef: z.string().min(1),
|
|
234
|
+
question: z.string().min(1),
|
|
235
|
+
/** Only an interview question is proposed, so this is always the engine's field kind (unlike a queue item's `kind`). */
|
|
236
|
+
kind: z.enum(HumanDecision_FieldKind),
|
|
237
|
+
/** The proposed answer, as it would be stored (canonical for a confirm). */
|
|
238
|
+
value: z.string().min(1),
|
|
239
|
+
/** What in the person's answers it rests on — shown beside it, and stored with it if it stands. */
|
|
240
|
+
rationale: z.string().min(1),
|
|
241
|
+
/** It concerns a regulated domain (#2129): name it to the person explicitly before it is kept. */
|
|
242
|
+
regulatedDomain: z.boolean(),
|
|
243
|
+
});
|
|
244
|
+
export const CreationConsole_ProposalResponse_Schema = z.object({
|
|
245
|
+
playbookRef: z.string().min(1),
|
|
246
|
+
proposals: z.array(CreationConsole_Proposal_Schema),
|
|
247
|
+
/** Questions asked for that no admissible proposal came back for, each with the last refusal. Ask these of the person. */
|
|
248
|
+
unproposed: z.array(z.object({ questionRef: z.string().min(1), reason: z.string().min(1) })),
|
|
160
249
|
});
|
|
161
250
|
export const CreationConsole_AnswerRequest_Schema = z.object({
|
|
162
251
|
questionId: z.string().min(1),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-creation-console.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAE/H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,MAAM,CAAN,IAAY,2BAoBX;AApBD,WAAY,2BAA2B;IACrC;;;OAGG;IACH,8DAA+B,CAAA;IAC/B,+FAA+F;IAC/F,gFAAiD,CAAA;IACjD;;;OAGG;IACH,sDAAuB,CAAA;IACvB;;;;;OAKG;IACH,kEAAmC,CAAA;AACrC,CAAC,EApBW,2BAA2B,KAA3B,2BAA2B,QAoBtC;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,2BAUX;AAVD,WAAY,2BAA2B;IACrC,0BAA0B;IAC1B,gDAAiB,CAAA;IACjB;;;OAGG;IACH,kDAAmB,CAAA;IACnB,8EAA8E;IAC9E,gDAAiB,CAAA;AACnB,CAAC,EAVW,2BAA2B,KAA3B,2BAA2B,QAUtC;AAED,iGAAiG;AACjG,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3D,+BAA+B;IAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,4FAA4F;IAC5F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjC;;;;;OAKG;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,6DAA6D;IAC7D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD;;;OAGG;IACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IACzC,0GAA0G;IAC1G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,oDAAoD;IACpD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,8FAA8F;IAC9F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B;;;OAGG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,oDAAoD;IACpD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,yCAAyC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC;IACrD,qFAAqF;IACrF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrD;;;OAGG;IACH,uEAAuE;IACvE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,0FAA0F;IAC1F,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,6HAA6H;IAC7H,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,uGAAuG;IACvG,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3D,yCAAyC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC;CACpD,CAAC,CAAC;AAGH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,qGAAqG;IACrG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,wFAAwF;IACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IAC3C;;;;OAIG;IACH,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;IAC1D;;;;;;;;;;;;;OAaG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,WAAW,CAAC;IAChE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;IAC3C,4GAA4G;IAC5G,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE;IACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,gGAAgG;IAChG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,mGAAmG;IACnG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC;CAChD,CAAC,CAAC;AAGH,oGAAoG;AACpG,MAAM,UAAU,+BAA+B,CAAC,IAAiC,EAAE,KAAa;IAC9F,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,8BAA8B,CAAC,UAAkB;IAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1H,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC;AAExD,MAAM,UAAU,8BAA8B,CAAC,YAAoB,EAAE,UAAkB;IACrF,OAAO,GAAG,YAAY,IAAI,UAAU,EAAE,CAAC;AACzC,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,mEAAmE;IACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,sEAAsE;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC1C,+BAA+B;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC5C,OAAO,EAAE,mCAAmC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAGH,uGAAuG;AACvG,MAAM,UAAU,4BAA4B,CAAC,IAA0B;IACrE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,4BAA4B,CAAC,KAAK,CAAC,CAAC,MAAM;QAC9F,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;QAC/D,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,4BAA4B,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;QAC9G,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAEtE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\n\nimport { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas';\n\n/**\n * The CREATION CONSOLE contract — how a coding-agent session (Claude Code, or any agent driving\n * `wildo`) follows what the companion did and answers what the companion asks.\n *\n * ## Why a console needs its own contract beside the workbench's resources\n *\n * The companion is the master of application creation: it runs playbooks, dispatches coding\n * workers over ACP, runs judges and generation steps. The person drives it from a CONSOLE — the\n * coding-agent session they are already working in — and the workbench becomes the dashboard of\n * that state (Paul, 2026-09-25). Two things are then owed to the console:\n *\n * 1. FEEDBACK: what the companion did (a run completed or was refused, a dispatch settled, a judge\n * verdict) and what it now waits for.\n * 2. ANSWERS: every question the companion asks must be answerable from the console, once, and\n * the answer must reach the same service the workbench's own operation reaches.\n *\n * The facts already exist as creation-plane rows (Home's lines, the waiting runs, the parked coding\n * questions, the dossier). The workbench reaches them through the resource plane, which needs a\n * signed-in PERSON; a console reaches the companion through the local-token plane\n * (`/api/companion/*`), which is how every `wildo` verb already talks to it. This contract is that\n * plane's view of the SAME rows — no second derivation, and no second implementation of an answer:\n * each answer kind calls the companion service the matching workbench operation calls.\n *\n * ## Why the question queue is ONE list rather than one read per kind\n *\n * A person (or an agent acting for them) asks \"what is waiting on me?\" once. Four reads, each with\n * its own identity and answer route, is what makes a console skip one. So the companion folds the\n * four row kinds into one list with one identity scheme and one answer door, and says per question\n * which actions it admits — the console restates no policy.\n */\n\n/**\n * WHAT KIND of question a queued item is — which companion lane asked it, and so which service an\n * answer reaches.\n */\nexport enum CreationConsoleQuestionKind {\n /**\n * A playbook run SUSPENDED mid-derivation on a round of questions it cannot decide alone. One item\n * per round, carrying every question of the round: the run resumes on one answer to the round.\n */\n CLARIFICATION = 'clarification',\n /** A coding worker (an ACP session the companion dispatched) PARKED on a question it asked. */\n PARKED_CODING_QUESTION = 'parked-coding-question',\n /**\n * An interview question a step can run as soon as it is answered — the dossier entry the workbench\n * shows as \"asked of you now\". Answering lands `creator-inputs`; a commit accepts it.\n */\n INTERVIEW = 'interview',\n /**\n * A fact a drafted governed document still needs. LISTED so the queue is total over what waits on\n * the person, NOT answerable here: landing governance facts is a whole-document sitting that also\n * names the governance scope and who decided, and `compliance-is-derived-from-the-product.md`\n * holds that questionnaire where it is until the evidence tier exists. Answer it in the workbench.\n */\n GOVERNANCE_FACT = 'governance-fact',\n}\n\n/**\n * WHAT an answer does — the industry three-action model the playbook clarification already uses\n * (MCP elicitation's vocabulary), so every kind of question speaks it.\n */\nexport enum CreationConsoleAnswerAction {\n /** Give the answer(s). */\n ANSWER = 'answer',\n /**\n * Let the asking derivation decide and state its assumption. Clarifications only. May carry the answers\n * the person did give: the run then decides only the questions left unanswered.\n */\n DECLINE = 'decline',\n /** Abandon the run that asked. Clarifications and parked coding questions. */\n CANCEL = 'cancel',\n}\n\n/** One question inside a queued item — a clarification round carries several, the others one. */\nexport const CreationConsole_QuestionField_Schema = z.object({\n /** The ref an answer names. */\n ref: z.string().min(1),\n /** The question as a person reads it, verbatim from whoever asked. */\n question: z.string().min(1),\n /** Why it is asked — what cannot be decided without it. NULL when the asker states none. */\n why: z.string().min(1).nullable(),\n /**\n * The answer's shape, in the ASKER's own vocabulary — deliberately a string, because this field carries\n * two: `HumanDecision_FieldKind` (`free_text` | `choice` | `confirm`) for a playbook round, a parked run\n * and an interview question, and the governed-document questionnaire's answer kind for a governance\n * fact. One enum here would be false for one of them.\n */\n kind: z.string().min(1),\n /** The closed answer set for a `choice`; empty otherwise. */\n options: z.array(z.string()),\n});\nexport type CreationConsole_QuestionField = z.infer<typeof CreationConsole_QuestionField_Schema>;\n\nexport const CreationConsole_Question_Schema = z.object({\n /**\n * `<kind>:<creation-plane row id>`. Row ids are sanitized to `[a-zA-Z0-9_-]`, so the first `:`\n * always separates the kind — see {@link parseCreationConsoleQuestionId}.\n */\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n /** When it was asked, ISO-8601. NULL when the row records no instant (an interview question has none). */\n askedAt: z.string().nullable(),\n /** The playbook that asks, when a playbook asks. */\n playbookRef: z.string().nullable(),\n /** The build-plan task the asking coding run was working on, for a parked coding question. */\n taskRef: z.string().nullable(),\n /**\n * The opened INSTANCE of the step the question is asked for (#1609), for an interview question; NULL for\n * the step itself and for other kinds. An answer lands on that instance, so the reader must see which.\n */\n instanceKey: z.string().nullable(),\n /** The governed document, for a governance fact. */\n definitionRef: z.string().nullable(),\n /**\n * WHICH revision of the question the console read — the clarification's round, the parked run's\n * suspension ref. An answer must echo it: a run that has moved on to another question refuses an\n * answer written for the previous one (#1584, #1581) instead of applying it to the wrong question.\n * NULL for kinds that have no revision.\n */\n revision: z.string().nullable(),\n /** The questions to answer, in order. */\n fields: z.array(CreationConsole_QuestionField_Schema),\n /** What an answer may do for THIS item — empty when the console cannot answer it. */\n actions: z.array(z.enum(CreationConsoleAnswerAction)),\n /*\n * Facts that change what answering MEANS, for the reader to weigh first. Carried as facts rather\n * than as a sentence: the words belong to whoever renders them (`display-text-comes-from-i18n.md`).\n */\n /** The family a suspended run was producing when it stopped to ask. */\n producingFamily: z.string().nullable(),\n /** The suspended run was a dry run: answering it writes nothing. NULL for other kinds. */\n dryRun: z.boolean().nullable(),\n /** FALSE when the parked coding run cannot re-enter its own session, so an answer starts a new one. NULL for other kinds. */\n resumable: z.boolean().nullable(),\n /** Every family an interview answer feeds — what goes stale when it changes. Empty for other kinds. */\n affectsFamilies: z.array(z.string()),\n /**\n * The signed-in person a clarification is ROUTED to (#1751) — whoever started its run from the workbench\n * or the conversation. Only they may answer it, and the console carries no person, so such an item has\n * no actions here: it is answered in the workbench, signed in as them. NULL when it is unrouted.\n */\n routedToUserId: z.string().nullable(),\n});\nexport type CreationConsole_Question = z.infer<typeof CreationConsole_Question_Schema>;\n\nexport const CreationConsole_QuestionQueue_Schema = z.object({\n /** When the queue was read, ISO-8601. */\n computedAt: z.string(),\n questions: z.array(CreationConsole_Question_Schema),\n});\nexport type CreationConsole_QuestionQueue = z.infer<typeof CreationConsole_QuestionQueue_Schema>;\n\n/**\n * One answer to one field. It carries its OWN author because a round is answered in one call while its\n * fields may be answered by different parties (#1658): an agent derives one from a declared fact, the\n * person decides the next. With one author per request, a mixed round either stamped the person's name\n * on the agent's derivation or was refused as incomplete — the agent answering alone could not cover the\n * judgement half, and the resume refuses a round answered in part.\n */\nexport const CreationConsole_Answer_Schema = z.object({\n ref: z.string().min(1),\n value: z.string().min(1),\n /** Who gave THIS answer; overrides the request's `answeredByRef` for this field. Same vocabulary. */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_Answer = z.infer<typeof CreationConsole_Answer_Schema>;\n\nexport const CreationConsole_AnswerRequest_Schema = z.object({\n questionId: z.string().min(1),\n /** The `revision` of the item as it was READ. Required for the kinds that carry one. */\n revision: z.string().min(1).nullable().optional(),\n action: z.enum(CreationConsoleAnswerAction),\n /**\n * One entry per answered field, by its `ref`. Required for `answer`, which must cover every field.\n * A clarification's `decline` may carry the fields the person DID answer and delegates only the rest\n * (#1658), so one round can mix what a person decided with what they left to the run.\n */\n answers: z.array(CreationConsole_Answer_Schema).optional(),\n /**\n * WHO answered — recorded for EVERY kind (#1658): on an interview answer in the dossier, on a\n * clarification in the committed `DECISIONS.md`, on a parked coding answer in `CODING-ANSWERS.md`.\n * The local-token plane proves only that the caller\n * is on this machine — the same trust as a git commit author, which is what accepts the answer\n * anyway (`one-source-of-truth.md` rule 7) — so `wildo` sends the workspace's git identity as\n * `git:<email>` unless told otherwise, and an agent answering on its own sends `agent:<name>`. The\n * prefix matters because the same dossier field holds the workbench's signed-in user ids: it says\n * which door an answer came through. Required for an interview answer (the dossier cannot record\n * one without it); optional for the others, which then record nothing rather than a guess.\n *\n * The DEFAULT author of every answer in the request: an answer carrying its own `answeredByRef` keeps\n * it. A parked coding question and an interview answer are one field each, so the two cannot differ.\n */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_AnswerRequest = z.infer<typeof CreationConsole_AnswerRequest_Schema>;\n\nexport const CreationConsole_AnswerOutcome_Schema = z.looseObject({\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n action: z.enum(CreationConsoleAnswerAction),\n /** What the answering service returned — its own shape (a resumed run's outcome, a landed dossier file). */\n outcome: z.unknown(),\n});\nexport type CreationConsole_AnswerOutcome = z.infer<typeof CreationConsole_AnswerOutcome_Schema>;\n\n/**\n * One FEED line: a Home line (what happened, what is asked, what could come next) with the row it\n * points at attached, so a console reads a run's verdict or a dispatch's error without a second call.\n *\n * `at` is ISO-8601 here — this is a JSON contract, not a resource row.\n */\nexport const CreationConsole_FeedLine_Schema = z.object({\n lineId: z.string().min(1),\n section: z.enum(WorkbenchCreationHomeSection),\n kind: z.enum(WorkbenchCreationHomeLineKind),\n at: z.string().nullable(),\n playbookRef: z.string().nullable(),\n taskRef: z.string().nullable(),\n subject: z.string().nullable(),\n failed: z.boolean(),\n acceptable: z.boolean(),\n needsAnswers: z.boolean(),\n stuckReason: z.string().nullable(),\n targetResourceType: z.string().min(1),\n targetResourceId: z.string().min(1),\n /** The row the line points at, as the creation plane serves it. NULL when it has gone since. */\n target: z.record(z.string(), z.unknown()).nullable(),\n /** The queued question this line is about, when it is about exactly one — answer it by this id. */\n questionId: z.string().nullable(),\n});\nexport type CreationConsole_FeedLine = z.infer<typeof CreationConsole_FeedLine_Schema>;\n\nexport const CreationConsole_Feed_Schema = z.object({\n computedAt: z.string(),\n lines: z.array(CreationConsole_FeedLine_Schema),\n});\nexport type CreationConsole_Feed = z.infer<typeof CreationConsole_Feed_Schema>;\n\n/** The one identity rule, applied by the companion when it emits and when it resolves an answer. */\nexport function formatCreationConsoleQuestionId(kind: CreationConsoleQuestionKind, rowId: string): string {\n return `${kind}:${rowId}`;\n}\n\n/** The inverse of {@link formatCreationConsoleQuestionId}; `null` for anything that is not one. */\nexport function parseCreationConsoleQuestionId(questionId: string): { kind: CreationConsoleQuestionKind; rowId: string } | null {\n const separator = questionId.indexOf(':');\n if (separator <= 0 || separator === questionId.length - 1) return null;\n const kind = Object.values(CreationConsoleQuestionKind).find((candidate) => candidate === questionId.slice(0, separator));\n return kind ? { kind, rowId: questionId.slice(separator + 1) } : null;\n}\n\n/**\n * The workbench DEEP LINK (#1652): `?open=<resourceType>:<resourceId>` opens that creation-plane row\n * in the workbench's detail pane, the way clicking its Home line does. `wildo workbench open <ref>`\n * writes it; the workbench reads it once and drops it. One format, owned here, so the writer and the\n * reader cannot disagree about it.\n *\n * The FIRST `:` separates the two, because a resource type never contains one and a row id may.\n */\nexport const WORKBENCH_OPEN_DETAIL_QUERY_PARAM = 'open';\n\nexport function formatWorkbenchOpenDetailParam(resourceType: string, resourceId: string): string {\n return `${resourceType}:${resourceId}`;\n}\n\n/** The inverse of {@link formatWorkbenchOpenDetailParam}; `null` for anything that is not one. */\nexport function parseWorkbenchOpenDetailParam(value: string): { resourceType: string; resourceId: string } | null {\n const separator = value.indexOf(':');\n if (separator <= 0 || separator === value.length - 1) return null;\n return { resourceType: value.slice(0, separator), resourceId: value.slice(separator + 1) };\n}\n\n/**\n * The PULSE (#1657): a read cheap enough to poll every few seconds from a hook or a status line.\n *\n * Nothing in it is derived on request. `sequence` and `changedAt` move whenever the creation plane's\n * boards are invalidated (every mutation path ends there) or a watched board is republished;\n * `runsInFlight` is the process's own running-run count; `summary` is what the most recent FEED read\n * counted, with its instant — `null` until someone has read the feed, because computing it here would\n * make the pulse as slow as the feed. A poller compares pulses and reads the feed only when one moved.\n */\nexport const CreationConsole_PulseSummary_Schema = z.object({\n /** Lines in the ASKED section: questions waiting on the person. */\n asked: z.number().int().nonnegative(),\n /** Lines marked acceptable: finished work waiting to be committed. */\n acceptable: z.number().int().nonnegative(),\n /** SINCE lines that failed. */\n failed: z.number().int().nonnegative(),\n computedAt: z.string(),\n});\nexport type CreationConsole_PulseSummary = z.infer<typeof CreationConsole_PulseSummary_Schema>;\n\nexport const CreationConsole_Pulse_Schema = z.object({\n sequence: z.number().int().nonnegative(),\n changedAt: z.string().nullable(),\n runsInFlight: z.number().int().nonnegative(),\n summary: CreationConsole_PulseSummary_Schema.nullable(),\n});\nexport type CreationConsole_Pulse = z.infer<typeof CreationConsole_Pulse_Schema>;\n\n/** The pulse a feed's lines imply — one counting rule, used by the companion when it serves a feed. */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed): CreationConsole_PulseSummary {\n return {\n asked: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED).length,\n acceptable: feed.lines.filter((line) => line.acceptable).length,\n failed: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.SINCE && line.failed).length,\n computedAt: feed.computedAt,\n };\n}\n\n/**\n * Where a running dev companion says it listens (#1657) — `<app>/.wildo-saas/state/companion-endpoint.json`.\n *\n * Written by the companion once its server is up, beside `companion.token`, because the one party that\n * KNOWS the address is the process listening on it. It exists for callers that must answer in\n * milliseconds — the console's per-prompt hook and its status line — which cannot afford the CLI's own\n * address resolution (it evaluates the authored infrastructure config). The record may outlive the\n * process; a caller treats a refused connection as \"not running\", never the file's presence.\n */\nexport const COMPANION_ENDPOINT_FILE_NAME = 'companion-endpoint.json';\n\nexport const CompanionEndpointRecord_Schema = z.object({\n origin: z.string().url(),\n pid: z.number().int().positive(),\n startedAt: z.string(),\n});\nexport type CompanionEndpointRecord = z.infer<typeof CompanionEndpointRecord_Schema>;\n"]}
|
|
1
|
+
{"version":3,"file":"workbench-creation-console.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-console.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { HumanDecision_FieldKind } from '@wildo-ai/saas-models';\nimport { ApplicationInterviewDepth } from '@wildo-ai/saas-models/meta-workflows';\n\nimport { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas';\n\n/**\n * The CREATION CONSOLE contract — how a coding-agent session (Claude Code, or any agent driving\n * `wildo`) follows what the companion did and answers what the companion asks.\n *\n * ## Why a console needs its own contract beside the workbench's resources\n *\n * The companion is the master of application creation: it runs playbooks, dispatches coding\n * workers over ACP, runs judges and generation steps. The person drives it from a CONSOLE — the\n * coding-agent session they are already working in — and the workbench becomes the dashboard of\n * that state (Paul, 2026-09-25). Two things are then owed to the console:\n *\n * 1. FEEDBACK: what the companion did (a run completed or was refused, a dispatch settled, a judge\n * verdict) and what it now waits for.\n * 2. ANSWERS: every question the companion asks must be answerable from the console, once, and\n * the answer must reach the same service the workbench's own operation reaches.\n *\n * The facts already exist as creation-plane rows (Home's lines, the waiting runs, the parked coding\n * questions, the dossier). The workbench reaches them through the resource plane, which needs a\n * signed-in PERSON; a console reaches the companion through the local-token plane\n * (`/api/companion/*`), which is how every `wildo` verb already talks to it. This contract is that\n * plane's view of the SAME rows — no second derivation, and no second implementation of an answer:\n * each answer kind calls the companion service the matching workbench operation calls.\n *\n * ## Why the question queue is ONE list rather than one read per kind\n *\n * A person (or an agent acting for them) asks \"what is waiting on me?\" once. Four reads, each with\n * its own identity and answer route, is what makes a console skip one. So the companion folds the\n * four row kinds into one list with one identity scheme and one answer door, and says per question\n * which actions it admits — the console restates no policy.\n */\n\n/**\n * WHAT KIND of question a queued item is — which companion lane asked it, and so which service an\n * answer reaches.\n */\nexport enum CreationConsoleQuestionKind {\n /**\n * A playbook run SUSPENDED mid-derivation on a round of questions it cannot decide alone. One item\n * per round, carrying every question of the round: the run resumes on one answer to the round.\n */\n CLARIFICATION = 'clarification',\n /** A coding worker (an ACP session the companion dispatched) PARKED on a question it asked. */\n PARKED_CODING_QUESTION = 'parked-coding-question',\n /**\n * An interview question a step can run as soon as it is answered — the dossier entry the workbench\n * shows as \"asked of you now\". Answering lands `creator-inputs`; a commit accepts it.\n */\n INTERVIEW = 'interview',\n /**\n * A fact a drafted governed document still needs. LISTED so the queue is total over what waits on\n * the person, NOT answerable here: landing governance facts is a whole-document sitting that also\n * names the governance scope and who decided, and `compliance-is-derived-from-the-product.md`\n * holds that questionnaire where it is until the evidence tier exists. Answer it in the workbench.\n */\n GOVERNANCE_FACT = 'governance-fact',\n}\n\n/**\n * WHAT an answer does — the industry three-action model the playbook clarification already uses\n * (MCP elicitation's vocabulary), so every kind of question speaks it.\n */\nexport enum CreationConsoleAnswerAction {\n /** Give the answer(s). */\n ANSWER = 'answer',\n /**\n * Let the asking derivation decide and state its assumption. Clarifications only. May carry the answers\n * the person did give: the run then decides only the questions left unanswered.\n */\n DECLINE = 'decline',\n /** Abandon the run that asked. Clarifications and parked coding questions. */\n CANCEL = 'cancel',\n}\n\n/** One question inside a queued item — a clarification round carries several, the others one. */\nexport const CreationConsole_QuestionField_Schema = z.object({\n /** The ref an answer names. */\n ref: z.string().min(1),\n /** The question as a person reads it, verbatim from whoever asked. */\n question: z.string().min(1),\n /** Why it is asked — what cannot be decided without it. NULL when the asker states none. */\n why: z.string().min(1).nullable(),\n /**\n * The answer's shape, in the ASKER's own vocabulary — deliberately a string, because this field carries\n * two: `HumanDecision_FieldKind` (`free_text` | `choice` | `confirm`) for a playbook round, a parked run\n * and an interview question, and the governed-document questionnaire's answer kind for a governance\n * fact. One enum here would be false for one of them.\n */\n kind: z.string().min(1),\n /** The closed answer set for a `choice`; empty otherwise. */\n options: z.array(z.string()),\n});\nexport type CreationConsole_QuestionField = z.infer<typeof CreationConsole_QuestionField_Schema>;\n\nexport const CreationConsole_Question_Schema = z.object({\n /**\n * `<kind>:<creation-plane row id>`. Row ids are sanitized to `[a-zA-Z0-9_-]`, so the first `:`\n * always separates the kind — see {@link parseCreationConsoleQuestionId}.\n */\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n /** When it was asked, ISO-8601. NULL when the row records no instant (an interview question has none). */\n askedAt: z.string().nullable(),\n /** The playbook that asks, when a playbook asks. */\n playbookRef: z.string().nullable(),\n /** The build-plan task the asking coding run was working on, for a parked coding question. */\n taskRef: z.string().nullable(),\n /**\n * The opened INSTANCE of the step the question is asked for (#1609), for an interview question; NULL for\n * the step itself and for other kinds. An answer lands on that instance, so the reader must see which.\n */\n instanceKey: z.string().nullable(),\n /** The governed document, for a governance fact. */\n definitionRef: z.string().nullable(),\n /**\n * WHICH revision of the question the console read — the clarification's round, the parked run's\n * suspension ref. An answer must echo it: a run that has moved on to another question refuses an\n * answer written for the previous one (#1584, #1581) instead of applying it to the wrong question.\n * NULL for kinds that have no revision.\n */\n revision: z.string().nullable(),\n /** The questions to answer, in order. */\n fields: z.array(CreationConsole_QuestionField_Schema),\n /** What an answer may do for THIS item — empty when the console cannot answer it. */\n actions: z.array(z.enum(CreationConsoleAnswerAction)),\n /*\n * Facts that change what answering MEANS, for the reader to weigh first. Carried as facts rather\n * than as a sentence: the words belong to whoever renders them (`display-text-comes-from-i18n.md`).\n */\n /** The family a suspended run was producing when it stopped to ask. */\n producingFamily: z.string().nullable(),\n /** The suspended run was a dry run: answering it writes nothing. NULL for other kinds. */\n dryRun: z.boolean().nullable(),\n /** FALSE when the parked coding run cannot re-enter its own session, so an answer starts a new one. NULL for other kinds. */\n resumable: z.boolean().nullable(),\n /** Every family an interview answer feeds — what goes stale when it changes. Empty for other kinds. */\n affectsFamilies: z.array(z.string()),\n /**\n * The signed-in person a clarification is ROUTED to (#1751) — whoever started its run from the workbench\n * or the conversation. Only they may answer it, and the console carries no person, so such an item has\n * no actions here: it is answered in the workbench, signed in as them. NULL when it is unrouted.\n */\n routedToUserId: z.string().nullable(),\n /**\n * For an interview question (#2129): whether a SIMPLE interview asks it of the person\n * (`isElicitationQuestionAskedInSimpleInterview` — an essential question, or one only the person may\n * answer). FALSE means a simple interview proposes it instead (reviewed here, or assumed by an unattended round\n * and listed to revisit). NULL for other kinds.\n */\n askedInSimpleInterview: z.boolean().nullable(),\n /**\n * For an interview question (#2129): whether the companion may propose an answer when the person does\n * not know (`POST /creation/interview/proposals`), recorded as an assumption. FALSE for a question only\n * the person may answer; NULL for other kinds.\n */\n proposable: z.boolean().nullable(),\n /**\n * For an interview question (#2129): it concerns a regulated domain, so a proposed answer to it is named to\n * the person explicitly before it is kept. NULL for other kinds.\n */\n regulatedDomain: z.boolean().nullable(),\n /**\n * For an item of the queue's `assumptions` (#2129): the assumed value. Answering the item records the\n * person's own answer in its place. NULL on every item of `questions`.\n */\n assumedAnswer: z.string().nullable(),\n /** For an item of `assumptions`: what the proposal rested on, as the proposer said it. NULL otherwise. */\n assumptionRationale: z.string().nullable(),\n});\nexport type CreationConsole_Question = z.infer<typeof CreationConsole_Question_Schema>;\n\nexport const CreationConsole_QuestionQueue_Schema = z.object({\n /** When the queue was read, ISO-8601. */\n computedAt: z.string(),\n /** Everything WAITING on the person — and nothing else: a consumer may count these as blocked work. */\n questions: z.array(CreationConsole_Question_Schema),\n /**\n * Interview answers that are ASSUMPTIONS (#2129), each with its `assumedAnswer`. NOTHING waits on them —\n * the run proceeds on each — so they are kept apart from `questions`: they are listed so the person can\n * REVISIT one when they choose, and answering one records their own answer in its place.\n */\n assumptions: z.array(CreationConsole_Question_Schema),\n /**\n * How deep this application's interviews go (#2129). NULL until the person chooses: a surface starting an\n * interview asks first and records the choice with `POST /creation/interview/depth`.\n */\n interviewDepth: z.enum(ApplicationInterviewDepth).nullable(),\n});\nexport type CreationConsole_QuestionQueue = z.infer<typeof CreationConsole_QuestionQueue_Schema>;\n\n/**\n * One answer to one field. It carries its OWN author because a round is answered in one call while its\n * fields may be answered by different parties (#1658): an agent derives one from a declared fact, the\n * person decides the next. With one author per request, a mixed round either stamped the person's name\n * on the agent's derivation or was refused as incomplete — the agent answering alone could not cover the\n * judgement half, and the resume refuses a round answered in part.\n */\nexport const CreationConsole_Answer_Schema = z.object({\n ref: z.string().min(1),\n value: z.string().min(1),\n /** Who gave THIS answer; overrides the request's `answeredByRef` for this field. Same vocabulary. */\n answeredByRef: z.string().min(1).optional(),\n /**\n * `assumed` when the person did not know and let a PROPOSED answer stand (#2129) — the vocabulary\n * `ApplicationCreatorInputAnswerStanding` in `saas-specifications`. Interview answers only; absent means\n * the answer is decided. Validated by the companion, which refuses it for a question only the person may answer.\n */\n standing: z.string().min(1).optional(),\n /** The proposer's reason, carried with an assumed answer so the dossier shows what the assumption rests on. */\n assumptionRationale: z.string().min(1).optional(),\n});\nexport type CreationConsole_Answer = z.infer<typeof CreationConsole_Answer_Schema>;\n\n/** `POST /creation/interview/depth` (#2129): record how deep this application's interviews go. */\nexport const CreationConsole_InterviewDepthRequest_Schema = z.object({\n interviewDepth: z.enum(ApplicationInterviewDepth),\n});\nexport type CreationConsole_InterviewDepthRequest = z.infer<typeof CreationConsole_InterviewDepthRequest_Schema>;\n\n/**\n * `POST /creation/interview/proposals` (#2129): propose answers to an interview's questions the person does\n * not know. Nothing is written: the proposals come back for the person to review, and what they keep is sent\n * through `POST /creation/questions/answer` with `standing: assumed`.\n */\nexport const CreationConsole_ProposalRequest_Schema = z.object({\n playbookRef: z.string().min(1),\n /** The opened instance the interview is for (#1609); absent for the step itself. */\n instanceKey: z.string().min(1).optional(),\n /**\n * The questions to propose for. Absent: every unanswered question the application's interview depth does\n * not ask of the person — the review step of a SIMPLE interview.\n */\n questionRefs: z.array(z.string().min(1)).optional(),\n});\nexport type CreationConsole_ProposalRequest = z.infer<typeof CreationConsole_ProposalRequest_Schema>;\n\nexport const CreationConsole_Proposal_Schema = z.object({\n /**\n * The queue item to answer it under, with `wildo creation answer <questionId>`. NULL when the step is not\n * asking it right now (it cannot run yet), so there is no queue item to answer.\n */\n questionId: z.string().min(1).nullable(),\n questionRef: z.string().min(1),\n question: z.string().min(1),\n /** Only an interview question is proposed, so this is always the engine's field kind (unlike a queue item's `kind`). */\n kind: z.enum(HumanDecision_FieldKind),\n /** The proposed answer, as it would be stored (canonical for a confirm). */\n value: z.string().min(1),\n /** What in the person's answers it rests on — shown beside it, and stored with it if it stands. */\n rationale: z.string().min(1),\n /** It concerns a regulated domain (#2129): name it to the person explicitly before it is kept. */\n regulatedDomain: z.boolean(),\n});\nexport type CreationConsole_Proposal = z.infer<typeof CreationConsole_Proposal_Schema>;\n\nexport const CreationConsole_ProposalResponse_Schema = z.object({\n playbookRef: z.string().min(1),\n proposals: z.array(CreationConsole_Proposal_Schema),\n /** Questions asked for that no admissible proposal came back for, each with the last refusal. Ask these of the person. */\n unproposed: z.array(z.object({ questionRef: z.string().min(1), reason: z.string().min(1) })),\n});\nexport type CreationConsole_ProposalResponse = z.infer<typeof CreationConsole_ProposalResponse_Schema>;\n\nexport const CreationConsole_AnswerRequest_Schema = z.object({\n questionId: z.string().min(1),\n /** The `revision` of the item as it was READ. Required for the kinds that carry one. */\n revision: z.string().min(1).nullable().optional(),\n action: z.enum(CreationConsoleAnswerAction),\n /**\n * One entry per answered field, by its `ref`. Required for `answer`, which must cover every field.\n * A clarification's `decline` may carry the fields the person DID answer and delegates only the rest\n * (#1658), so one round can mix what a person decided with what they left to the run.\n */\n answers: z.array(CreationConsole_Answer_Schema).optional(),\n /**\n * WHO answered — recorded for EVERY kind (#1658): on an interview answer in the dossier, on a\n * clarification in the committed `DECISIONS.md`, on a parked coding answer in `CODING-ANSWERS.md`.\n * The local-token plane proves only that the caller\n * is on this machine — the same trust as a git commit author, which is what accepts the answer\n * anyway (`one-source-of-truth.md` rule 7) — so `wildo` sends the workspace's git identity as\n * `git:<email>` unless told otherwise, and an agent answering on its own sends `agent:<name>`. The\n * prefix matters because the same dossier field holds the workbench's signed-in user ids: it says\n * which door an answer came through. Required for an interview answer (the dossier cannot record\n * one without it); optional for the others, which then record nothing rather than a guess.\n *\n * The DEFAULT author of every answer in the request: an answer carrying its own `answeredByRef` keeps\n * it. A parked coding question and an interview answer are one field each, so the two cannot differ.\n */\n answeredByRef: z.string().min(1).optional(),\n});\nexport type CreationConsole_AnswerRequest = z.infer<typeof CreationConsole_AnswerRequest_Schema>;\n\nexport const CreationConsole_AnswerOutcome_Schema = z.looseObject({\n questionId: z.string().min(1),\n kind: z.enum(CreationConsoleQuestionKind),\n action: z.enum(CreationConsoleAnswerAction),\n /** What the answering service returned — its own shape (a resumed run's outcome, a landed dossier file). */\n outcome: z.unknown(),\n});\nexport type CreationConsole_AnswerOutcome = z.infer<typeof CreationConsole_AnswerOutcome_Schema>;\n\n/**\n * One FEED line: a Home line (what happened, what is asked, what could come next) with the row it\n * points at attached, so a console reads a run's verdict or a dispatch's error without a second call.\n *\n * `at` is ISO-8601 here — this is a JSON contract, not a resource row.\n */\nexport const CreationConsole_FeedLine_Schema = z.object({\n lineId: z.string().min(1),\n section: z.enum(WorkbenchCreationHomeSection),\n kind: z.enum(WorkbenchCreationHomeLineKind),\n at: z.string().nullable(),\n playbookRef: z.string().nullable(),\n taskRef: z.string().nullable(),\n subject: z.string().nullable(),\n failed: z.boolean(),\n acceptable: z.boolean(),\n needsAnswers: z.boolean(),\n stuckReason: z.string().nullable(),\n targetResourceType: z.string().min(1),\n targetResourceId: z.string().min(1),\n /** The row the line points at, as the creation plane serves it. NULL when it has gone since. */\n target: z.record(z.string(), z.unknown()).nullable(),\n /** The queued question this line is about, when it is about exactly one — answer it by this id. */\n questionId: z.string().nullable(),\n});\nexport type CreationConsole_FeedLine = z.infer<typeof CreationConsole_FeedLine_Schema>;\n\nexport const CreationConsole_Feed_Schema = z.object({\n computedAt: z.string(),\n lines: z.array(CreationConsole_FeedLine_Schema),\n});\nexport type CreationConsole_Feed = z.infer<typeof CreationConsole_Feed_Schema>;\n\n/** The one identity rule, applied by the companion when it emits and when it resolves an answer. */\nexport function formatCreationConsoleQuestionId(kind: CreationConsoleQuestionKind, rowId: string): string {\n return `${kind}:${rowId}`;\n}\n\n/** The inverse of {@link formatCreationConsoleQuestionId}; `null` for anything that is not one. */\nexport function parseCreationConsoleQuestionId(questionId: string): { kind: CreationConsoleQuestionKind; rowId: string } | null {\n const separator = questionId.indexOf(':');\n if (separator <= 0 || separator === questionId.length - 1) return null;\n const kind = Object.values(CreationConsoleQuestionKind).find((candidate) => candidate === questionId.slice(0, separator));\n return kind ? { kind, rowId: questionId.slice(separator + 1) } : null;\n}\n\n/**\n * The workbench DEEP LINK (#1652): `?open=<resourceType>:<resourceId>` opens that creation-plane row\n * in the workbench's detail pane, the way clicking its Home line does. `wildo workbench open <ref>`\n * writes it; the workbench reads it once and drops it. One format, owned here, so the writer and the\n * reader cannot disagree about it.\n *\n * The FIRST `:` separates the two, because a resource type never contains one and a row id may.\n */\nexport const WORKBENCH_OPEN_DETAIL_QUERY_PARAM = 'open';\n\nexport function formatWorkbenchOpenDetailParam(resourceType: string, resourceId: string): string {\n return `${resourceType}:${resourceId}`;\n}\n\n/** The inverse of {@link formatWorkbenchOpenDetailParam}; `null` for anything that is not one. */\nexport function parseWorkbenchOpenDetailParam(value: string): { resourceType: string; resourceId: string } | null {\n const separator = value.indexOf(':');\n if (separator <= 0 || separator === value.length - 1) return null;\n return { resourceType: value.slice(0, separator), resourceId: value.slice(separator + 1) };\n}\n\n/**\n * The PULSE (#1657): a read cheap enough to poll every few seconds from a hook or a status line.\n *\n * Nothing in it is derived on request. `sequence` and `changedAt` move whenever the creation plane's\n * boards are invalidated (every mutation path ends there) or a watched board is republished;\n * `runsInFlight` is the process's own running-run count; `summary` is what the most recent FEED read\n * counted, with its instant — `null` until someone has read the feed, because computing it here would\n * make the pulse as slow as the feed. A poller compares pulses and reads the feed only when one moved.\n */\nexport const CreationConsole_PulseSummary_Schema = z.object({\n /** Lines in the ASKED section: questions waiting on the person. */\n asked: z.number().int().nonnegative(),\n /** Lines marked acceptable: finished work waiting to be committed. */\n acceptable: z.number().int().nonnegative(),\n /** SINCE lines that failed. */\n failed: z.number().int().nonnegative(),\n computedAt: z.string(),\n});\nexport type CreationConsole_PulseSummary = z.infer<typeof CreationConsole_PulseSummary_Schema>;\n\nexport const CreationConsole_Pulse_Schema = z.object({\n sequence: z.number().int().nonnegative(),\n changedAt: z.string().nullable(),\n runsInFlight: z.number().int().nonnegative(),\n summary: CreationConsole_PulseSummary_Schema.nullable(),\n});\nexport type CreationConsole_Pulse = z.infer<typeof CreationConsole_Pulse_Schema>;\n\n/** The pulse a feed's lines imply — one counting rule, used by the companion when it serves a feed. */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed): CreationConsole_PulseSummary {\n return {\n asked: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED).length,\n acceptable: feed.lines.filter((line) => line.acceptable).length,\n failed: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.SINCE && line.failed).length,\n computedAt: feed.computedAt,\n };\n}\n\n/**\n * Where a running dev companion says it listens (#1657) — `<app>/.wildo-saas/state/companion-endpoint.json`.\n *\n * Written by the companion once its server is up, beside `companion.token`, because the one party that\n * KNOWS the address is the process listening on it. It exists for callers that must answer in\n * milliseconds — the console's per-prompt hook and its status line — which cannot afford the CLI's own\n * address resolution (it evaluates the authored infrastructure config). The record may outlive the\n * process; a caller treats a refused connection as \"not running\", never the file's presence.\n */\nexport const COMPANION_ENDPOINT_FILE_NAME = 'companion-endpoint.json';\n\nexport const CompanionEndpointRecord_Schema = z.object({\n origin: z.string().url(),\n pid: z.number().int().positive(),\n startedAt: z.string(),\n});\nexport type CompanionEndpointRecord = z.infer<typeof CompanionEndpointRecord_Schema>;\n"]}
|
|
@@ -142,6 +142,17 @@ export declare enum WorkbenchCreationConversationTool {
|
|
|
142
142
|
READ_DOSSIER = "creation_read_dossier",
|
|
143
143
|
/** Files one answer the creator gave, in their words. Reversible, so not approved. */
|
|
144
144
|
RECORD_ANSWER = "creation_record_answer",
|
|
145
|
+
/**
|
|
146
|
+
* Proposes answers to interview questions the creator does not know (#2129). One small model call and it
|
|
147
|
+
* writes nothing — the creator reviews each proposal, and what they keep is filed as an assumption — so it
|
|
148
|
+
* is not approved.
|
|
149
|
+
*/
|
|
150
|
+
PROPOSE_INTERVIEW_ANSWERS = "creation_propose_interview_answers",
|
|
151
|
+
/**
|
|
152
|
+
* Records how detailed this application's interviews are — quick or detailed (#2129) — as the person chose it.
|
|
153
|
+
* A dossier write, reversible like an answer, so not approved.
|
|
154
|
+
*/
|
|
155
|
+
SET_INTERVIEW_DEPTH = "creation_set_interview_depth",
|
|
145
156
|
/** Adds one build task to the plan. APPROVED first — the approval is the review of the task. */
|
|
146
157
|
PROPOSE_BUILD_TASK = "creation_propose_build_task",
|
|
147
158
|
/** Says what running a task would cost and what it reads. Free. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,0BAA0B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,8BAAoD,CAAC;AAEjH;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,8CAAuE,CAAC;AAE/H;;;;;;;GAOG;AACH,oBAAY,sCAAsC;IAChD;;;OAGG;IACH,IAAI,SAAS;IACb,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;;OAIG;IACH,MAAM,WAAW;IACjB,8EAA8E;IAC9E,QAAQ,aAAa;IACrB;;;;;;OAMG;IACH,SAAS,cAAc;IACvB;;;;OAIG;IACH,SAAS,cAAc;IACvB;;;;;;OAMG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;GAWG;AACH,oBAAY,iCAAiC;IAC3C,6GAA6G;IAC7G,sBAAsB,oCAAoC;IAC1D,yEAAyE;IACzE,aAAa,2BAA2B;IACxC,mFAAmF;IACnF,YAAY,0BAA0B;IACtC;;;OAGG;IACH,sBAAsB,oCAAoC;IAC1D;;;OAGG;IACH,mBAAmB,iCAAiC;IACpD,8FAA8F;IAC9F,UAAU,wBAAwB;IAClC;;;OAGG;IACH,oBAAoB,kCAAkC;IACtD;;;;OAIG;IACH,oBAAoB,kCAAkC;IACtD,gEAAgE;IAChE,mBAAmB,iCAAiC;IACpD,+FAA+F;IAC/F,QAAQ,sBAAsB;IAC9B,2EAA2E;IAC3E,YAAY,0BAA0B;IACtC,sFAAsF;IACtF,aAAa,2BAA2B;IACxC,gGAAgG;IAChG,kBAAkB,gCAAgC;IAClD,mEAAmE;IACnE,aAAa,2BAA2B;IACxC,kFAAkF;IAClF,aAAa,2BAA2B;IACxC,2EAA2E;IAC3E,WAAW,yBAAyB;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,IAAI,IAAI,iCAAiC,GAAG,sCAAsC;CAC7F,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sCAAsC,GAAG,MAAM,CAE9G;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qCAAqC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQtH;AAED;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,gCAAgC,CAAC;AAEtF,qFAAqF;AACrF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAE7F;AAED;;;GAGG;AACH,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,KAAK,IAAI,sCAAsC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7F,CAAC"}
|
|
1
|
+
{"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,0BAA0B,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,8BAAoD,CAAC;AAEjH;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,8CAAuE,CAAC;AAE/H;;;;;;;GAOG;AACH,oBAAY,sCAAsC;IAChD;;;OAGG;IACH,IAAI,SAAS;IACb,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;;OAIG;IACH,MAAM,WAAW;IACjB,8EAA8E;IAC9E,QAAQ,aAAa;IACrB;;;;;;OAMG;IACH,SAAS,cAAc;IACvB;;;;OAIG;IACH,SAAS,cAAc;IACvB;;;;;;OAMG;IACH,KAAK,UAAU;CAChB;AAED;;;;;;;;;;;GAWG;AACH,oBAAY,iCAAiC;IAC3C,6GAA6G;IAC7G,sBAAsB,oCAAoC;IAC1D,yEAAyE;IACzE,aAAa,2BAA2B;IACxC,mFAAmF;IACnF,YAAY,0BAA0B;IACtC;;;OAGG;IACH,sBAAsB,oCAAoC;IAC1D;;;OAGG;IACH,mBAAmB,iCAAiC;IACpD,8FAA8F;IAC9F,UAAU,wBAAwB;IAClC;;;OAGG;IACH,oBAAoB,kCAAkC;IACtD;;;;OAIG;IACH,oBAAoB,kCAAkC;IACtD,gEAAgE;IAChE,mBAAmB,iCAAiC;IACpD,+FAA+F;IAC/F,QAAQ,sBAAsB;IAC9B,2EAA2E;IAC3E,YAAY,0BAA0B;IACtC,sFAAsF;IACtF,aAAa,2BAA2B;IACxC;;;;OAIG;IACH,yBAAyB,uCAAuC;IAChE;;;OAGG;IACH,mBAAmB,iCAAiC;IACpD,gGAAgG;IAChG,kBAAkB,gCAAgC;IAClD,mEAAmE;IACnE,aAAa,2BAA2B;IACxC,kFAAkF;IAClF,aAAa,2BAA2B;IACxC,2EAA2E;IAC3E,WAAW,yBAAyB;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,IAAI,IAAI,iCAAiC,GAAG,sCAAsC;CAC7F,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sCAAsC,GAAG,MAAM,CAE9G;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qCAAqC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQtH;AAED;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,gCAAgC,CAAC;AAEtF,qFAAqF;AACrF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAE7F;AAED;;;GAGG;AACH,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,KAAK,IAAI,sCAAsC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7F,CAAC"}
|
|
@@ -144,6 +144,17 @@ export var WorkbenchCreationConversationTool;
|
|
|
144
144
|
WorkbenchCreationConversationTool["READ_DOSSIER"] = "creation_read_dossier";
|
|
145
145
|
/** Files one answer the creator gave, in their words. Reversible, so not approved. */
|
|
146
146
|
WorkbenchCreationConversationTool["RECORD_ANSWER"] = "creation_record_answer";
|
|
147
|
+
/**
|
|
148
|
+
* Proposes answers to interview questions the creator does not know (#2129). One small model call and it
|
|
149
|
+
* writes nothing — the creator reviews each proposal, and what they keep is filed as an assumption — so it
|
|
150
|
+
* is not approved.
|
|
151
|
+
*/
|
|
152
|
+
WorkbenchCreationConversationTool["PROPOSE_INTERVIEW_ANSWERS"] = "creation_propose_interview_answers";
|
|
153
|
+
/**
|
|
154
|
+
* Records how detailed this application's interviews are — quick or detailed (#2129) — as the person chose it.
|
|
155
|
+
* A dossier write, reversible like an answer, so not approved.
|
|
156
|
+
*/
|
|
157
|
+
WorkbenchCreationConversationTool["SET_INTERVIEW_DEPTH"] = "creation_set_interview_depth";
|
|
147
158
|
/** Adds one build task to the plan. APPROVED first — the approval is the review of the task. */
|
|
148
159
|
WorkbenchCreationConversationTool["PROPOSE_BUILD_TASK"] = "creation_propose_build_task";
|
|
149
160
|
/** Says what running a task would cost and what it reads. Free. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wCAAwC,GAAG,uBAAuB,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,mCAAmC,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+CAA+C,GAAG,OAAO,wCAAwC,EAAE,CAAC;AAEjH;;;;GAIG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,mBAAmB,+CAA+C,EAAE,CAAC;AAE/H;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,sCAsCX;AAtCD,WAAY,sCAAsC;IAChD;;;OAGG;IACH,uDAAa,CAAA;IACb,yFAAyF;IACzF,6DAAmB,CAAA;IACnB;;;;OAIG;IACH,2DAAiB,CAAA;IACjB,8EAA8E;IAC9E,+DAAqB,CAAA;IACrB;;;;;;OAMG;IACH,iEAAuB,CAAA;IACvB;;;;OAIG;IACH,iEAAuB,CAAA;IACvB;;;;;;OAMG;IACH,yDAAe,CAAA;AACjB,CAAC,EAtCW,sCAAsC,KAAtC,sCAAsC,QAsCjD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAN,IAAY,iCA8CX;AA9CD,WAAY,iCAAiC;IAC3C,6GAA6G;IAC7G,+FAA0D,CAAA;IAC1D,yEAAyE;IACzE,6EAAwC,CAAA;IACxC,mFAAmF;IACnF,2EAAsC,CAAA;IACtC;;;OAGG;IACH,+FAA0D,CAAA;IAC1D;;;OAGG;IACH,yFAAoD,CAAA;IACpD,8FAA8F;IAC9F,uEAAkC,CAAA;IAClC;;;OAGG;IACH,2FAAsD,CAAA;IACtD;;;;OAIG;IACH,2FAAsD,CAAA;IACtD,gEAAgE;IAChE,yFAAoD,CAAA;IACpD,+FAA+F;IAC/F,mEAA8B,CAAA;IAC9B,2EAA2E;IAC3E,2EAAsC,CAAA;IACtC,sFAAsF;IACtF,6EAAwC,CAAA;IACxC,gGAAgG;IAChG,uFAAkD,CAAA;IAClD,mEAAmE;IACnE,6EAAwC,CAAA;IACxC,kFAAkF;IAClF,6EAAwC,CAAA;IACxC,2EAA2E;IAC3E,yEAAoC,CAAA;AACtC,CAAC,EA9CW,iCAAiC,KAAjC,iCAAiC,QA8C5C;AA0BD,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAkD;IACpG,OAAO,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA2C;IAClF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAuD,EAAE,CAAC;QACvG,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAyE,EAAE,CAAC;YACzH,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wCAAwC,GAAG,6BAA6B,CAAC;AAEtF,qFAAqF;AACrF,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,IAAsB;IACnF,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;AACzF,CAAC","sourcesContent":["/**\n * The application-creation CONVERSATION's identity — the surface that replaces the three-view board\n * (#1454), shared for the same reason the board's is: the workbench declares the composite view,\n * the companion authors its labels, and neither can see the other's source. A string literal on\n * each side compiles and fails at runtime as a blank menubar item and a headless page, silently.\n *\n * ## What it is\n *\n * Paul, 2026-09-21: the workbench is \"primarily a chatbot, with some elements for details that are\n * displayed\" beside it; what the creator must PROVIDE is kept apart from what the system is DOING;\n * there is no user-facing journey in the playbook phases; and a free session is primordial. And\n * 2026-09-22: no two-zone split navigation, the destinations on the menubar. So this view is the\n * page: a stream and a composer, details opening OVER it as sheets, the workbench's destinations on\n * the menubar. The board stays reachable as a destination until this surface covers it, then\n * retires (#1454, Appendix 4, Step 9).\n *\n * This carries NO React and NO Node: it is a vocabulary, importable by a browser bundle and by a\n * daemon at once.\n */\n\n/**\n * The view's `ref` — the composite-view key, the launcher target, and the `/composite/<ref>` route.\n *\n * No dot, for the reason the board's ref records: both label readers split the whole path on `.`\n * and walk it, so a dotted ref nests its labels one level deeper than anything expects and\n * `tCompositeView` answers the empty string.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_VIEW_REF = 'creation-conversation';\n\n/**\n * The flows-actors SYSTEM the conversation talks to — the creation assistant the companion hosts\n * on the engine's conversational runtime (#1454, Step 4). Shared because the companion REGISTERS\n * it and the workbench DECLARES a view on it, and neither can see the other's source: a mismatch\n * would be a chat that lists no system and says `unavailable`, with nothing reporting why.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_SYSTEM_REF = 'application-creation.conversation';\n\n/**\n * The label path the view's title and description hang off — `composite_views.<this>.title`.\n * Derived by the engine's `buildApplicationViewTranslationRef` (`app.<ref>`) and restated here\n * because the companion cannot import a frontend package to compute it; the workbench's own test\n * asserts it against the engine's derivation.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_TRANSLATION_REF = `app.${WORKBENCH_CREATION_CONVERSATION_VIEW_REF}`;\n\n/**\n * The full label path every word on the conversation page hangs off —\n * `composite_views.app.creation-conversation`. A caller composes\n * `${WORKBENCH_CREATION_CONVERSATION_LABEL_ROOT}.${block}` and reads leaves off it with `useI18n`.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_LABEL_ROOT = `composite_views.${WORKBENCH_CREATION_CONVERSATION_TRANSLATION_REF}`;\n\n/**\n * The page's copy BLOCKS — the contract between the words the page reads and the words the companion\n * authors. A block added here stops the companion's label file compiling until it is authored; the\n * leaves inside a block are the page's business and a leaf nobody authored renders as its own key,\n * visibly (`display-text-comes-from-i18n.md`).\n *\n * One block per surface a reader meets, in the order they meet them.\n */\nexport enum WorkbenchCreationConversationCopyBlock {\n /**\n * HOME: the question the page opens on (\"what do you want to get done?\"), the \"since you were\n * last here\" lines, and the four outcomes (#1454, Step 3).\n */\n HOME = 'home',\n /** The thread switcher: the new-conversation affordance and how a thread's row reads. */\n THREADS = 'threads',\n /**\n * The STREAM: the assistant's name, the empty state, how a run card reads in each state\n * (running, landed, cut short, waiting), the \"filed under\" receipt, and the pointer to a question\n * asked elsewhere.\n */\n STREAM = 'stream',\n /** The COMPOSER: its placeholder, Send, and the suggestion chips above it. */\n COMPOSER = 'composer',\n /**\n * Every PLAYBOOK's words for a creator — a title and a one-line goal — keyed by its ref with dots\n * replaced by `__` (`sanitizeWorkbenchCreationPlaneIdentity`), because a label leaf may not\n * contain a dot: `top_down__vision-elicitation__title`, `…__goal`. The catalog's own `intent` is\n * an engineering paragraph; these are the words Home and the stream use for it. A companion test\n * holds the set equal to the compiled catalog (#1454, R13).\n */\n PLAYBOOKS = 'playbooks',\n /**\n * The INTERVIEW: a playbook's declared questions asked one per turn, as chat, with each answer\n * filed into the dossier (#1454, Step 5 — walk-through 1). Its intro line, the \"filed under\"\n * receipt, the yes/no chips, the all-answered line and the accept-and-run affordance.\n */\n INTERVIEW = 'interview',\n /**\n * The assistant's TOOLS in a creator's words — what the stream says while one runs, and what the\n * approval card asks before one that costs money or commits runs. Keyed by\n * {@link workbenchToolCopyLeaf}; authored per tool through {@link WorkbenchCreationConversationToolCopy},\n * which is total over {@link WorkbenchCreationConversationTool}, so a tool added without its words\n * stops the companion's label file compiling rather than rendering its identifier.\n */\n TOOLS = 'tools',\n}\n\n/**\n * The creation assistant's TOOLS — the function refs the companion registers and the workbench\n * words (#1454). Shared for the reason every identity in this file is: the companion declares the\n * tools, the workbench renders a status line and an approval card for each, and neither can see the\n * other's source. Until 2026-09-24 the refs lived only in the companion, so the stream printed them\n * verbatim (\"Looking things up (creation_read_dossier)…\") and the approval card showed the engine's\n * generic tool-name-and-arguments form.\n *\n * The values are the model-facing names: no dot (the runtime makes a ref identifier-safe on its way\n * to the model, and a ref with none survives that unchanged, so the name the browser receives on a\n * tool status or an approval IS this value).\n */\nexport enum WorkbenchCreationConversationTool {\n /** Reads which families are landed, refused or missing, which steps can run, which tasks are ready. Free. */\n READ_APPLICATION_STATE = 'creation_read_application_state',\n /** Reads one produced artifact so the assistant can discuss it. Free. */\n READ_ARTIFACT = 'creation_read_artifact',\n /** Starts a playbook run in the background. Costs model calls — APPROVED first. */\n RUN_PLAYBOOK = 'creation_run_playbook',\n /**\n * Opens a separate INSTANCE of a step for one purpose (a segment, a feature), recorded in the dossier and\n * committed (#1609). A decision about what the application builds — APPROVED first.\n */\n OPEN_PLAYBOOK_INSTANCE = 'creation_open_playbook_instance',\n /**\n * Opens a SECONDARY LINE beside the main line (#1608): develop one feature, named and with what it is for.\n * It is an opened instance of the line's entry composite, recorded and committed like one — APPROVED first.\n */\n OPEN_SECONDARY_LINE = 'creation_open_secondary_line',\n /** Reads the application's main line and the secondary lines open beside it (#1608). Free. */\n READ_LINES = 'creation_read_lines',\n /**\n * Closes a secondary line: completed, or abandoned (#1608). Recorded and committed; abandoning cancels its\n * waiting runs — APPROVED first.\n */\n CLOSE_SECONDARY_LINE = 'creation_close_secondary_line',\n /**\n * Opens a REFINEMENT line (#1608): refine families the application already holds, in place, named by the\n * call. Its own tool because what is approved differs from a feature: WHICH families get re-derived for the\n * whole application. Recorded and committed — APPROVED first.\n */\n OPEN_REFINEMENT_LINE = 'creation_open_refinement_line',\n /** Answers, declines or cancels a question a run stopped on. */\n ANSWER_RUN_QUESTION = 'creation_answer_run_question',\n /** Researches one objective on the public web. Costs a research-agent run — APPROVED first. */\n RESEARCH = 'creation_research',\n /** Reads a step's dossier: what is still needed from the creator. Free. */\n READ_DOSSIER = 'creation_read_dossier',\n /** Files one answer the creator gave, in their words. Reversible, so not approved. */\n RECORD_ANSWER = 'creation_record_answer',\n /** Adds one build task to the plan. APPROVED first — the approval is the review of the task. */\n PROPOSE_BUILD_TASK = 'creation_propose_build_task',\n /** Says what running a task would cost and what it reads. Free. */\n DESCRIBE_TASK = 'creation_describe_task',\n /** Runs a ready task on the coding agent. Costs a coding run — APPROVED first. */\n DISPATCH_TASK = 'creation_dispatch_task',\n /** Commits what a finished coding run wrote. A commit — APPROVED first. */\n ACCEPT_TASK = 'creation_accept_task',\n}\n\n/**\n * The words one tool carries. `working` is the stream's line while it runs. `askTitle` and `ask` are\n * the approval card's heading and sentence, present exactly for the tools that stop for approval;\n * `ask` takes `{subject}` — the playbook's title, the task's objective, or the research objective,\n * resolved by the card from the call's own arguments.\n */\nexport interface WorkbenchCreationConversationToolWords {\n readonly working: string;\n readonly askTitle?: string;\n readonly ask?: string;\n /**\n * The approval sentence used INSTEAD of `ask` when the call carries the argument that changes what is\n * approved (#1608): a secondary line opened with families it needs back, or one closed as abandoned. It\n * takes `{subject}` and `{detail}`, the card supplying the detail from the call's arguments, so the person\n * approves what is actually recorded rather than finding it behind \"Show the details\".\n */\n readonly askVariant?: string;\n}\n\n/** Every tool's words — total over the tool vocabulary, so a new tool cannot ship wordless. */\nexport type WorkbenchCreationConversationToolCopy = {\n readonly [tool in WorkbenchCreationConversationTool]: WorkbenchCreationConversationToolWords;\n};\n\n/** The leaf one tool word lives under inside the `TOOLS` block: `<toolRef>__<word>`. */\nexport function workbenchToolCopyLeaf(tool: string, word: keyof WorkbenchCreationConversationToolWords): string {\n return `${tool}__${word}`;\n}\n\n/**\n * The `TOOLS` block's flat leaves, from the per-tool words. A label leaf is a string, so the typed\n * per-tool shape is authored and this flattens it; the companion's label file is the one caller.\n */\nexport function flattenWorkbenchToolCopy(copy: WorkbenchCreationConversationToolCopy): Readonly<Record<string, string>> {\n const leaves: Record<string, string> = {};\n for (const [tool, words] of Object.entries(copy) as [string, WorkbenchCreationConversationToolWords][]) {\n for (const [word, text] of Object.entries(words) as [keyof WorkbenchCreationConversationToolWords, string | undefined][]) {\n if (text !== undefined) leaves[workbenchToolCopyLeaf(tool, word)] = text;\n }\n }\n return leaves;\n}\n\n/**\n * The playbook an UNTOUCHED application opens on, held as a conversation (decided by constraint,\n * #1454): the vision interview. Read from the catalog by ref, never restated — the companion's\n * playbook-words test pins that this ref is a compiled playbook, so a renamed catalog entry fails\n * a test rather than opening a blank interview.\n */\nexport const WORKBENCH_OPENING_INTERVIEW_PLAYBOOK_REF = 'top_down.vision-elicitation';\n\n/** The leaf a playbook's title or goal lives under, inside the `PLAYBOOKS` block. */\nexport function workbenchPlaybookCopyLeaf(playbookRef: string, word: 'title' | 'goal'): string {\n return `${playbookRef.replaceAll('.', '__').replace(/[^a-zA-Z0-9_-]/g, '-')}__${word}`;\n}\n\n/**\n * The authored copy, keyed by block — the type the companion's label file satisfies. Same shape and\n * same reasoning the retired board's copy type had (#1489: its blocks were re-homed per resource).\n */\nexport type WorkbenchCreationConversationCopyLabels = {\n readonly [block in WorkbenchCreationConversationCopyBlock]: Readonly<Record<string, string>>;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"workbench-creation-conversation.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-conversation.custom.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The application-creation CONVERSATION's identity — the surface that replaces the three-view board\n * (#1454), shared for the same reason the board's is: the workbench declares the composite view,\n * the companion authors its labels, and neither can see the other's source. A string literal on\n * each side compiles and fails at runtime as a blank menubar item and a headless page, silently.\n *\n * ## What it is\n *\n * Paul, 2026-09-21: the workbench is \"primarily a chatbot, with some elements for details that are\n * displayed\" beside it; what the creator must PROVIDE is kept apart from what the system is DOING;\n * there is no user-facing journey in the playbook phases; and a free session is primordial. And\n * 2026-09-22: no two-zone split navigation, the destinations on the menubar. So this view is the\n * page: a stream and a composer, details opening OVER it as sheets, the workbench's destinations on\n * the menubar. The board stays reachable as a destination until this surface covers it, then\n * retires (#1454, Appendix 4, Step 9).\n *\n * This carries NO React and NO Node: it is a vocabulary, importable by a browser bundle and by a\n * daemon at once.\n */\n\n/**\n * The view's `ref` — the composite-view key, the launcher target, and the `/composite/<ref>` route.\n *\n * No dot, for the reason the board's ref records: both label readers split the whole path on `.`\n * and walk it, so a dotted ref nests its labels one level deeper than anything expects and\n * `tCompositeView` answers the empty string.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_VIEW_REF = 'creation-conversation';\n\n/**\n * The flows-actors SYSTEM the conversation talks to — the creation assistant the companion hosts\n * on the engine's conversational runtime (#1454, Step 4). Shared because the companion REGISTERS\n * it and the workbench DECLARES a view on it, and neither can see the other's source: a mismatch\n * would be a chat that lists no system and says `unavailable`, with nothing reporting why.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_SYSTEM_REF = 'application-creation.conversation';\n\n/**\n * The label path the view's title and description hang off — `composite_views.<this>.title`.\n * Derived by the engine's `buildApplicationViewTranslationRef` (`app.<ref>`) and restated here\n * because the companion cannot import a frontend package to compute it; the workbench's own test\n * asserts it against the engine's derivation.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_TRANSLATION_REF = `app.${WORKBENCH_CREATION_CONVERSATION_VIEW_REF}`;\n\n/**\n * The full label path every word on the conversation page hangs off —\n * `composite_views.app.creation-conversation`. A caller composes\n * `${WORKBENCH_CREATION_CONVERSATION_LABEL_ROOT}.${block}` and reads leaves off it with `useI18n`.\n */\nexport const WORKBENCH_CREATION_CONVERSATION_LABEL_ROOT = `composite_views.${WORKBENCH_CREATION_CONVERSATION_TRANSLATION_REF}`;\n\n/**\n * The page's copy BLOCKS — the contract between the words the page reads and the words the companion\n * authors. A block added here stops the companion's label file compiling until it is authored; the\n * leaves inside a block are the page's business and a leaf nobody authored renders as its own key,\n * visibly (`display-text-comes-from-i18n.md`).\n *\n * One block per surface a reader meets, in the order they meet them.\n */\nexport enum WorkbenchCreationConversationCopyBlock {\n /**\n * HOME: the question the page opens on (\"what do you want to get done?\"), the \"since you were\n * last here\" lines, and the four outcomes (#1454, Step 3).\n */\n HOME = 'home',\n /** The thread switcher: the new-conversation affordance and how a thread's row reads. */\n THREADS = 'threads',\n /**\n * The STREAM: the assistant's name, the empty state, how a run card reads in each state\n * (running, landed, cut short, waiting), the \"filed under\" receipt, and the pointer to a question\n * asked elsewhere.\n */\n STREAM = 'stream',\n /** The COMPOSER: its placeholder, Send, and the suggestion chips above it. */\n COMPOSER = 'composer',\n /**\n * Every PLAYBOOK's words for a creator — a title and a one-line goal — keyed by its ref with dots\n * replaced by `__` (`sanitizeWorkbenchCreationPlaneIdentity`), because a label leaf may not\n * contain a dot: `top_down__vision-elicitation__title`, `…__goal`. The catalog's own `intent` is\n * an engineering paragraph; these are the words Home and the stream use for it. A companion test\n * holds the set equal to the compiled catalog (#1454, R13).\n */\n PLAYBOOKS = 'playbooks',\n /**\n * The INTERVIEW: a playbook's declared questions asked one per turn, as chat, with each answer\n * filed into the dossier (#1454, Step 5 — walk-through 1). Its intro line, the \"filed under\"\n * receipt, the yes/no chips, the all-answered line and the accept-and-run affordance.\n */\n INTERVIEW = 'interview',\n /**\n * The assistant's TOOLS in a creator's words — what the stream says while one runs, and what the\n * approval card asks before one that costs money or commits runs. Keyed by\n * {@link workbenchToolCopyLeaf}; authored per tool through {@link WorkbenchCreationConversationToolCopy},\n * which is total over {@link WorkbenchCreationConversationTool}, so a tool added without its words\n * stops the companion's label file compiling rather than rendering its identifier.\n */\n TOOLS = 'tools',\n}\n\n/**\n * The creation assistant's TOOLS — the function refs the companion registers and the workbench\n * words (#1454). Shared for the reason every identity in this file is: the companion declares the\n * tools, the workbench renders a status line and an approval card for each, and neither can see the\n * other's source. Until 2026-09-24 the refs lived only in the companion, so the stream printed them\n * verbatim (\"Looking things up (creation_read_dossier)…\") and the approval card showed the engine's\n * generic tool-name-and-arguments form.\n *\n * The values are the model-facing names: no dot (the runtime makes a ref identifier-safe on its way\n * to the model, and a ref with none survives that unchanged, so the name the browser receives on a\n * tool status or an approval IS this value).\n */\nexport enum WorkbenchCreationConversationTool {\n /** Reads which families are landed, refused or missing, which steps can run, which tasks are ready. Free. */\n READ_APPLICATION_STATE = 'creation_read_application_state',\n /** Reads one produced artifact so the assistant can discuss it. Free. */\n READ_ARTIFACT = 'creation_read_artifact',\n /** Starts a playbook run in the background. Costs model calls — APPROVED first. */\n RUN_PLAYBOOK = 'creation_run_playbook',\n /**\n * Opens a separate INSTANCE of a step for one purpose (a segment, a feature), recorded in the dossier and\n * committed (#1609). A decision about what the application builds — APPROVED first.\n */\n OPEN_PLAYBOOK_INSTANCE = 'creation_open_playbook_instance',\n /**\n * Opens a SECONDARY LINE beside the main line (#1608): develop one feature, named and with what it is for.\n * It is an opened instance of the line's entry composite, recorded and committed like one — APPROVED first.\n */\n OPEN_SECONDARY_LINE = 'creation_open_secondary_line',\n /** Reads the application's main line and the secondary lines open beside it (#1608). Free. */\n READ_LINES = 'creation_read_lines',\n /**\n * Closes a secondary line: completed, or abandoned (#1608). Recorded and committed; abandoning cancels its\n * waiting runs — APPROVED first.\n */\n CLOSE_SECONDARY_LINE = 'creation_close_secondary_line',\n /**\n * Opens a REFINEMENT line (#1608): refine families the application already holds, in place, named by the\n * call. Its own tool because what is approved differs from a feature: WHICH families get re-derived for the\n * whole application. Recorded and committed — APPROVED first.\n */\n OPEN_REFINEMENT_LINE = 'creation_open_refinement_line',\n /** Answers, declines or cancels a question a run stopped on. */\n ANSWER_RUN_QUESTION = 'creation_answer_run_question',\n /** Researches one objective on the public web. Costs a research-agent run — APPROVED first. */\n RESEARCH = 'creation_research',\n /** Reads a step's dossier: what is still needed from the creator. Free. */\n READ_DOSSIER = 'creation_read_dossier',\n /** Files one answer the creator gave, in their words. Reversible, so not approved. */\n RECORD_ANSWER = 'creation_record_answer',\n /**\n * Proposes answers to interview questions the creator does not know (#2129). One small model call and it\n * writes nothing — the creator reviews each proposal, and what they keep is filed as an assumption — so it\n * is not approved.\n */\n PROPOSE_INTERVIEW_ANSWERS = 'creation_propose_interview_answers',\n /**\n * Records how detailed this application's interviews are — quick or detailed (#2129) — as the person chose it.\n * A dossier write, reversible like an answer, so not approved.\n */\n SET_INTERVIEW_DEPTH = 'creation_set_interview_depth',\n /** Adds one build task to the plan. APPROVED first — the approval is the review of the task. */\n PROPOSE_BUILD_TASK = 'creation_propose_build_task',\n /** Says what running a task would cost and what it reads. Free. */\n DESCRIBE_TASK = 'creation_describe_task',\n /** Runs a ready task on the coding agent. Costs a coding run — APPROVED first. */\n DISPATCH_TASK = 'creation_dispatch_task',\n /** Commits what a finished coding run wrote. A commit — APPROVED first. */\n ACCEPT_TASK = 'creation_accept_task',\n}\n\n/**\n * The words one tool carries. `working` is the stream's line while it runs. `askTitle` and `ask` are\n * the approval card's heading and sentence, present exactly for the tools that stop for approval;\n * `ask` takes `{subject}` — the playbook's title, the task's objective, or the research objective,\n * resolved by the card from the call's own arguments.\n */\nexport interface WorkbenchCreationConversationToolWords {\n readonly working: string;\n readonly askTitle?: string;\n readonly ask?: string;\n /**\n * The approval sentence used INSTEAD of `ask` when the call carries the argument that changes what is\n * approved (#1608): a secondary line opened with families it needs back, or one closed as abandoned. It\n * takes `{subject}` and `{detail}`, the card supplying the detail from the call's arguments, so the person\n * approves what is actually recorded rather than finding it behind \"Show the details\".\n */\n readonly askVariant?: string;\n}\n\n/** Every tool's words — total over the tool vocabulary, so a new tool cannot ship wordless. */\nexport type WorkbenchCreationConversationToolCopy = {\n readonly [tool in WorkbenchCreationConversationTool]: WorkbenchCreationConversationToolWords;\n};\n\n/** The leaf one tool word lives under inside the `TOOLS` block: `<toolRef>__<word>`. */\nexport function workbenchToolCopyLeaf(tool: string, word: keyof WorkbenchCreationConversationToolWords): string {\n return `${tool}__${word}`;\n}\n\n/**\n * The `TOOLS` block's flat leaves, from the per-tool words. A label leaf is a string, so the typed\n * per-tool shape is authored and this flattens it; the companion's label file is the one caller.\n */\nexport function flattenWorkbenchToolCopy(copy: WorkbenchCreationConversationToolCopy): Readonly<Record<string, string>> {\n const leaves: Record<string, string> = {};\n for (const [tool, words] of Object.entries(copy) as [string, WorkbenchCreationConversationToolWords][]) {\n for (const [word, text] of Object.entries(words) as [keyof WorkbenchCreationConversationToolWords, string | undefined][]) {\n if (text !== undefined) leaves[workbenchToolCopyLeaf(tool, word)] = text;\n }\n }\n return leaves;\n}\n\n/**\n * The playbook an UNTOUCHED application opens on, held as a conversation (decided by constraint,\n * #1454): the vision interview. Read from the catalog by ref, never restated — the companion's\n * playbook-words test pins that this ref is a compiled playbook, so a renamed catalog entry fails\n * a test rather than opening a blank interview.\n */\nexport const WORKBENCH_OPENING_INTERVIEW_PLAYBOOK_REF = 'top_down.vision-elicitation';\n\n/** The leaf a playbook's title or goal lives under, inside the `PLAYBOOKS` block. */\nexport function workbenchPlaybookCopyLeaf(playbookRef: string, word: 'title' | 'goal'): string {\n return `${playbookRef.replaceAll('.', '__').replace(/[^a-zA-Z0-9_-]/g, '-')}__${word}`;\n}\n\n/**\n * The authored copy, keyed by block — the type the companion's label file satisfies. Same shape and\n * same reasoning the retired board's copy type had (#1489: its blocks were re-homed per resource).\n */\nexport type WorkbenchCreationConversationCopyLabels = {\n readonly [block in WorkbenchCreationConversationCopyBlock]: Readonly<Record<string, string>>;\n};\n"]}
|
package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts
CHANGED
|
@@ -164,6 +164,7 @@ export declare const workbenchBuildDispatchPlan_ResourceConfiguration_Initializa
|
|
|
164
164
|
readyTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
165
165
|
landedTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
166
166
|
unverifiableLandedTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
167
|
+
landedBeforeAnyRunTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
167
168
|
exhausted: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
168
169
|
stuckTasks: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodObject<{
|
|
169
170
|
taskRef: z.ZodString;
|
|
@@ -275,6 +276,7 @@ export declare const workbenchDossierEntries_ResourceConfiguration_Initializatio
|
|
|
275
276
|
options: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
276
277
|
position: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNumber>;
|
|
277
278
|
standing: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchDossierEntryStanding>>>;
|
|
279
|
+
optionsState: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").WorkbenchDossierEntryOptionsState>>>;
|
|
278
280
|
value: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
279
281
|
answeredAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodDate>>;
|
|
280
282
|
answeredByRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
@@ -285,6 +287,11 @@ export declare const workbenchDossierEntries_ResourceConfiguration_Initializatio
|
|
|
285
287
|
outOfDate: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
286
288
|
outOfDateStepRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
287
289
|
sharedWithPlaybookRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
290
|
+
askedInSimpleInterview: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
291
|
+
proposable: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
292
|
+
regulatedDomain: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
293
|
+
assumptionRationale: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
294
|
+
interviewDepth: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("@wildo-ai/saas-models/meta-workflows").ApplicationInterviewDepth>>>>;
|
|
288
295
|
}, z.core.$strip>>;
|
|
289
296
|
/**
|
|
290
297
|
* HOME's LINES (#1454): READ/LIST like every creation-plane projection, no write verb — a line is a
|
|
@@ -448,6 +455,7 @@ export declare const workbenchCreationPlane_ResourcesConfigurationsFactoryMap: {
|
|
|
448
455
|
readyTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
449
456
|
landedTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
450
457
|
unverifiableLandedTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
458
|
+
landedBeforeAnyRunTaskRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
451
459
|
exhausted: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
452
460
|
stuckTasks: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodObject<{
|
|
453
461
|
taskRef: z.ZodString;
|
|
@@ -549,6 +557,7 @@ export declare const workbenchCreationPlane_ResourcesConfigurationsFactoryMap: {
|
|
|
549
557
|
options: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
550
558
|
position: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNumber>;
|
|
551
559
|
standing: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof WorkbenchDossierEntryStanding>>>;
|
|
560
|
+
optionsState: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("./workbench-creation-plane.custom.shared.schemas").WorkbenchDossierEntryOptionsState>>>;
|
|
552
561
|
value: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
553
562
|
answeredAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodDate>>;
|
|
554
563
|
answeredByRef: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
@@ -559,6 +568,11 @@ export declare const workbenchCreationPlane_ResourcesConfigurationsFactoryMap: {
|
|
|
559
568
|
outOfDate: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
560
569
|
outOfDateStepRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
561
570
|
sharedWithPlaybookRefs: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodArray<z.ZodString>>;
|
|
571
|
+
askedInSimpleInterview: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
572
|
+
proposable: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
573
|
+
regulatedDomain: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodBoolean>;
|
|
574
|
+
assumptionRationale: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<z.ZodString>>;
|
|
575
|
+
interviewDepth: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodNullable<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof import("@wildo-ai/saas-models/meta-workflows").ApplicationInterviewDepth>>>>;
|
|
562
576
|
}, z.core.$strip>>;
|
|
563
577
|
workbenchCreationHomeLines: (resourcesRelationships: ResourceRelationship[]) => import("@wildo-ai/saas-models").ResourceConfiguration<any, WorkbenchCreationPlane_CoreOperations, z.ZodObject<{
|
|
564
578
|
workbenchCreationHomeLineId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
|
package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-creation-plane.custom.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,qBAAqB,EAMrB,0BAA0B,EAC1B,4BAA4B,EAE5B,oBAAoB,EAMrB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,qCAAqC,EAAE,MAAM,6CAA6C,CAAC;AACpG,OAAO,
|
|
1
|
+
{"version":3,"file":"workbench-creation-plane.custom.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js
CHANGED
|
@@ -4,7 +4,7 @@ import { CustomShared_ResourceType } from '../core/resources/resources-types.cus
|
|
|
4
4
|
import { WorkbenchShared_ResourceFieldIdentifier, WorkbenchShared_ResourceType, } from './workbench-resources-types.custom.shared.schemas.js';
|
|
5
5
|
import { WORKBENCH_INTROSPECTION_MAX_ROWS_PER_PAGE } from './workbench-resources.custom.shared.resources-config.schemas.js';
|
|
6
6
|
import { WorkbenchSpecificationArtifactConcern } from './workbench-resources.custom.shared.schemas.js';
|
|
7
|
-
import { Workbench_AcceptChangesOutcome_Schema, Workbench_AcceptChangesRequest_Schema, Workbench_BuildPlanAddTaskOutcome_Schema, Workbench_BuildPlanAddTaskRequest_Schema, Workbench_BuildPlanDispatchNextRequest_Schema, Workbench_BuildPlanDispatchTaskRequest_Schema, Workbench_BuildPlanDispatchOutcome_Schema, Workbench_BuildPlanTask_Schema, Workbench_Playbook_Schema, Workbench_PlaybookResumeRequest_Schema, Workbench_PlaybookRunOutcome_Schema, Workbench_PlaybookRunRequest_Schema, Workbench_RunWriteRecord_Schema, Workbench_RunWriteRevertOutcome_Schema, Workbench_RunWriteRevertRequest_Schema, Workbench_BuildDispatchPlan_Schema, Workbench_BuildDispatch_Schema, Workbench_GovernanceDocument_Schema, Workbench_GovernanceQuestion_Schema, Workbench_CodingLaneStatus_Schema, Workbench_CreationHomeLine_Schema, Workbench_CreationOutcome_Schema, Workbench_DossierAnswerOutcome_Schema, Workbench_DossierAnswerRequest_Schema, Workbench_DossierEntry_Schema, WorkbenchDossierEntries_Operations, WorkbenchDossierEntryStanding, Workbench_EmptyRequest_Schema, Workbench_GovernanceFactsLandingOutcome_Schema, Workbench_GovernanceFactsLandingRequest_Schema, WorkbenchGovernanceDocuments_Operations, Workbench_CodingRunCancelOutcome_Schema, Workbench_ParkedQuestionAnswerOutcome_Schema, Workbench_ParkedQuestionAnswerRequest_Schema, WorkbenchParkedCodingQuestions_Operations, Workbench_ApplicationSecret_Schema, Workbench_ApplicationSecretChangeOutcome_Schema, Workbench_ApplicationSecretSetRequest_Schema, WorkbenchApplicationSecrets_Operations, ApplicationSecretStanding, Workbench_PlaybookInterview_Schema, Workbench_RunWriteDiff_Schema, Workbench_TraceArtifact_Schema, Workbench_TraceArtifactRequest_Schema, Workbench_TraceSessionRecord_Schema, Workbench_TraceSessionsForTask_Schema, Workbench_TraceSessionsForTaskRequest_Schema, Workbench_TraceSessionUsage_Schema, WorkbenchTraceSessions_Operations, Workbench_ParkedCodingQuestion_Schema, Workbench_PlaybookRun_Schema, Workbench_WaitingPlaybookRun_Schema, Workbench_TraceSession_Schema, WorkbenchBuildPlanTasks_Operations, WorkbenchCreationPlaneBehavior, WorkbenchPlaybooks_Operations, WorkbenchRunWriteRecords_Operations, } from './workbench-creation-plane.custom.shared.schemas.js';
|
|
7
|
+
import { Workbench_AcceptChangesOutcome_Schema, Workbench_AcceptChangesRequest_Schema, Workbench_BuildPlanAddTaskOutcome_Schema, Workbench_BuildPlanAddTaskRequest_Schema, Workbench_BuildPlanDispatchNextRequest_Schema, Workbench_BuildPlanDispatchTaskRequest_Schema, Workbench_BuildPlanDispatchOutcome_Schema, Workbench_BuildPlanTask_Schema, Workbench_Playbook_Schema, Workbench_PlaybookResumeRequest_Schema, Workbench_PlaybookRunOutcome_Schema, Workbench_PlaybookRunRequest_Schema, Workbench_RunWriteRecord_Schema, Workbench_RunWriteRevertOutcome_Schema, Workbench_RunWriteRevertRequest_Schema, Workbench_BuildDispatchPlan_Schema, Workbench_BuildDispatch_Schema, Workbench_GovernanceDocument_Schema, Workbench_GovernanceQuestion_Schema, Workbench_CodingLaneStatus_Schema, Workbench_CreationHomeLine_Schema, Workbench_CreationOutcome_Schema, Workbench_DossierAnswerOutcome_Schema, Workbench_DossierAnswerRequest_Schema, Workbench_DossierInterviewDepthOutcome_Schema, Workbench_DossierInterviewDepthRequest_Schema, Workbench_DossierProposeOutcome_Schema, Workbench_DossierProposeRequest_Schema, Workbench_DossierEntry_Schema, WorkbenchDossierEntries_Operations, WorkbenchDossierEntryStanding, Workbench_EmptyRequest_Schema, Workbench_GovernanceFactsLandingOutcome_Schema, Workbench_GovernanceFactsLandingRequest_Schema, WorkbenchGovernanceDocuments_Operations, Workbench_CodingRunCancelOutcome_Schema, Workbench_ParkedQuestionAnswerOutcome_Schema, Workbench_ParkedQuestionAnswerRequest_Schema, WorkbenchParkedCodingQuestions_Operations, Workbench_ApplicationSecret_Schema, Workbench_ApplicationSecretChangeOutcome_Schema, Workbench_ApplicationSecretSetRequest_Schema, WorkbenchApplicationSecrets_Operations, ApplicationSecretStanding, Workbench_PlaybookInterview_Schema, Workbench_RunWriteDiff_Schema, Workbench_TraceArtifact_Schema, Workbench_TraceArtifactRequest_Schema, Workbench_TraceSessionRecord_Schema, Workbench_TraceSessionsForTask_Schema, Workbench_TraceSessionsForTaskRequest_Schema, Workbench_TraceSessionUsage_Schema, WorkbenchTraceSessions_Operations, Workbench_ParkedCodingQuestion_Schema, Workbench_PlaybookRun_Schema, Workbench_WaitingPlaybookRun_Schema, Workbench_TraceSession_Schema, WorkbenchBuildPlanTasks_Operations, WorkbenchCreationPlaneBehavior, WorkbenchPlaybooks_Operations, WorkbenchRunWriteRecords_Operations, } from './workbench-creation-plane.custom.shared.schemas.js';
|
|
8
8
|
/**
|
|
9
9
|
* Resource configurations for the CREATION PLANE — the four companion-runtime families the creation
|
|
10
10
|
* board consumes as resources (`workbench-creation-board-resources.md`, Phase 2; decides #166).
|
|
@@ -639,6 +639,21 @@ export const workbenchDossierEntries_ResourceConfiguration_InitializationFactory
|
|
|
639
639
|
customResponseDto: Workbench_DossierAnswerOutcome_Schema,
|
|
640
640
|
})],
|
|
641
641
|
},
|
|
642
|
+
/* #2129: proposing writes nothing, so it is READ-shaped — but it is one model call, so not the 30-second read budget. */
|
|
643
|
+
[WorkbenchDossierEntries_Operations.PROPOSE_ANSWERS]: {
|
|
644
|
+
variants: [createDispatchApiVariant({
|
|
645
|
+
requestDto: Workbench_DossierProposeRequest_Schema,
|
|
646
|
+
customResponseDto: Workbench_DossierProposeOutcome_Schema,
|
|
647
|
+
riskLevel: ResourceOperationRiskLevel.LOW,
|
|
648
|
+
resourceOperationLike: CoreResourceOperation.READ,
|
|
649
|
+
})],
|
|
650
|
+
},
|
|
651
|
+
[WorkbenchDossierEntries_Operations.SET_INTERVIEW_DEPTH]: {
|
|
652
|
+
variants: [createDispatchApiVariant({
|
|
653
|
+
requestDto: Workbench_DossierInterviewDepthRequest_Schema,
|
|
654
|
+
customResponseDto: Workbench_DossierInterviewDepthOutcome_Schema,
|
|
655
|
+
})],
|
|
656
|
+
},
|
|
642
657
|
},
|
|
643
658
|
});
|
|
644
659
|
/**
|