@wildo-ai/platform-core-shared 1.1.10 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/esm/core/resources/resources-operations.custom.shared.definitions.js.map +1 -1
  2. package/dist/esm/core/resources/resources-relationships.custom.shared.definitions.js.map +1 -1
  3. package/dist/esm/core/resources/resources-types.custom.shared.schemas.d.ts.map +1 -1
  4. package/dist/esm/core/resources/resources-types.custom.shared.schemas.js.map +1 -1
  5. package/dist/esm/dev-runtime/dependency-install-record.d.ts +111 -0
  6. package/dist/esm/dev-runtime/dependency-install-record.d.ts.map +1 -0
  7. package/dist/esm/dev-runtime/dependency-install-record.js +185 -0
  8. package/dist/esm/dev-runtime/dependency-install-record.js.map +1 -0
  9. package/dist/esm/dev-runtime/dev-runtime-command.d.ts +50 -0
  10. package/dist/esm/dev-runtime/dev-runtime-command.d.ts.map +1 -0
  11. package/dist/esm/dev-runtime/dev-runtime-command.js +147 -0
  12. package/dist/esm/dev-runtime/dev-runtime-command.js.map +1 -0
  13. package/dist/esm/dev-runtime/dev-runtime-processes.d.ts +47 -0
  14. package/dist/esm/dev-runtime/dev-runtime-processes.d.ts.map +1 -0
  15. package/dist/esm/dev-runtime/dev-runtime-processes.js +163 -0
  16. package/dist/esm/dev-runtime/dev-runtime-processes.js.map +1 -0
  17. package/dist/esm/dev-runtime/dev-runtime-signals.d.ts +54 -0
  18. package/dist/esm/dev-runtime/dev-runtime-signals.d.ts.map +1 -0
  19. package/dist/esm/dev-runtime/dev-runtime-signals.js +113 -0
  20. package/dist/esm/dev-runtime/dev-runtime-signals.js.map +1 -0
  21. package/dist/esm/dev-runtime/emitted-relative-specifiers.d.ts +14 -0
  22. package/dist/esm/dev-runtime/emitted-relative-specifiers.d.ts.map +1 -0
  23. package/dist/esm/dev-runtime/emitted-relative-specifiers.js +71 -0
  24. package/dist/esm/dev-runtime/emitted-relative-specifiers.js.map +1 -0
  25. package/dist/esm/dev-runtime/frontend-dev-runtime.d.ts +43 -0
  26. package/dist/esm/dev-runtime/frontend-dev-runtime.d.ts.map +1 -0
  27. package/dist/esm/dev-runtime/frontend-dev-runtime.js +42 -0
  28. package/dist/esm/dev-runtime/frontend-dev-runtime.js.map +1 -0
  29. package/dist/esm/dev-runtime/node-runtime-dev-supervisor.d.ts +233 -0
  30. package/dist/esm/dev-runtime/node-runtime-dev-supervisor.d.ts.map +1 -0
  31. package/dist/esm/dev-runtime/node-runtime-dev-supervisor.js +578 -0
  32. package/dist/esm/dev-runtime/node-runtime-dev-supervisor.js.map +1 -0
  33. package/dist/esm/dev-runtime/package-compile-loop.d.ts +125 -0
  34. package/dist/esm/dev-runtime/package-compile-loop.d.ts.map +1 -0
  35. package/dist/esm/dev-runtime/package-compile-loop.js +386 -0
  36. package/dist/esm/dev-runtime/package-compile-loop.js.map +1 -0
  37. package/dist/esm/dev-runtime.exports.d.ts +19 -0
  38. package/dist/esm/dev-runtime.exports.d.ts.map +1 -0
  39. package/dist/esm/dev-runtime.exports.js +19 -0
  40. package/dist/esm/dev-runtime.exports.js.map +1 -0
  41. package/dist/esm/index.d.ts +4 -0
  42. package/dist/esm/index.d.ts.map +1 -1
  43. package/dist/esm/index.js +4 -0
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/runtime/application-backend-env.contracts.d.ts +16 -2
  46. package/dist/esm/runtime/application-backend-env.contracts.d.ts.map +1 -1
  47. package/dist/esm/runtime/application-backend-env.contracts.js +20 -1
  48. package/dist/esm/runtime/application-backend-env.contracts.js.map +1 -1
  49. package/dist/esm/runtime/application-worker-env.contracts.d.ts +14 -4
  50. package/dist/esm/runtime/application-worker-env.contracts.d.ts.map +1 -1
  51. package/dist/esm/runtime/application-worker-env.contracts.js +12 -0
  52. package/dist/esm/runtime/application-worker-env.contracts.js.map +1 -1
  53. package/dist/esm/runtime/backend-start-outcome.contracts.d.ts +27 -0
  54. package/dist/esm/runtime/backend-start-outcome.contracts.d.ts.map +1 -1
  55. package/dist/esm/runtime/backend-start-outcome.contracts.js +34 -0
  56. package/dist/esm/runtime/backend-start-outcome.contracts.js.map +1 -1
  57. package/dist/esm/runtime/frontend-settings-hub-wiring.contracts.d.ts +28 -0
  58. package/dist/esm/runtime/frontend-settings-hub-wiring.contracts.d.ts.map +1 -0
  59. package/dist/esm/runtime/frontend-settings-hub-wiring.contracts.js +35 -0
  60. package/dist/esm/runtime/frontend-settings-hub-wiring.contracts.js.map +1 -0
  61. package/dist/esm/runtime/http-server-env.contracts.d.ts +14 -1
  62. package/dist/esm/runtime/http-server-env.contracts.d.ts.map +1 -1
  63. package/dist/esm/runtime/http-server-env.contracts.js +13 -0
  64. package/dist/esm/runtime/http-server-env.contracts.js.map +1 -1
  65. package/dist/esm/runtime/local-dev-runtime-signals.contracts.d.ts +239 -0
  66. package/dist/esm/runtime/local-dev-runtime-signals.contracts.d.ts.map +1 -0
  67. package/dist/esm/runtime/local-dev-runtime-signals.contracts.js +256 -0
  68. package/dist/esm/runtime/local-dev-runtime-signals.contracts.js.map +1 -0
  69. package/dist/esm/runtime/runtime-topology.contracts.js.map +1 -1
  70. package/dist/esm/security/authorizations/roles.custom.shared.definitions.js.map +1 -1
  71. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts +362 -36
  72. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.d.ts.map +1 -1
  73. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js +4 -3
  74. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.resources-config.schemas.js.map +1 -1
  75. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.d.ts +400 -37
  76. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.d.ts.map +1 -1
  77. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.js +107 -1
  78. package/dist/esm/wildo-application-executions/wildo-application-executions.custom.shared.schemas.js.map +1 -1
  79. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts +26 -26
  80. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.d.ts.map +1 -1
  81. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js +4 -3
  82. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.resources-config.schemas.js.map +1 -1
  83. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts +33 -27
  84. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.d.ts.map +1 -1
  85. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js +26 -2
  86. package/dist/esm/wildo-application-tasks/wildo-application-tasks.custom.shared.schemas.js.map +1 -1
  87. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.d.ts +3 -3
  88. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.d.ts.map +1 -1
  89. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.js +30 -42
  90. package/dist/esm/wildo-applications/wildo-applications.custom.shared.resources-config.schemas.js.map +1 -1
  91. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.d.ts +9 -9
  92. package/dist/esm/wildo-applications/wildo-applications.custom.shared.schemas.js.map +1 -1
  93. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.resources-config.schemas.js.map +1 -1
  94. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.d.ts +7 -7
  95. package/dist/esm/wildo-applications-versions/wildo-applications-versions.custom.shared.schemas.js.map +1 -1
  96. package/dist/esm/workbench/creation-drive.custom.shared.schemas.d.ts +52 -0
  97. package/dist/esm/workbench/creation-drive.custom.shared.schemas.d.ts.map +1 -0
  98. package/dist/esm/workbench/creation-drive.custom.shared.schemas.js +49 -0
  99. package/dist/esm/workbench/creation-drive.custom.shared.schemas.js.map +1 -0
  100. package/dist/esm/workbench/creation-journey-timeline.custom.shared.schemas.d.ts +183 -0
  101. package/dist/esm/workbench/creation-journey-timeline.custom.shared.schemas.d.ts.map +1 -0
  102. package/dist/esm/workbench/creation-journey-timeline.custom.shared.schemas.js +188 -0
  103. package/dist/esm/workbench/creation-journey-timeline.custom.shared.schemas.js.map +1 -0
  104. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.d.ts.map +1 -1
  105. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js +76 -0
  106. package/dist/esm/workbench/workbench-aspect-resources.custom.shared.schemas.js.map +1 -1
  107. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts +170 -7
  108. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.d.ts.map +1 -1
  109. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js +177 -7
  110. package/dist/esm/workbench/workbench-creation-console.custom.shared.schemas.js.map +1 -1
  111. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts +21 -3
  112. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.d.ts.map +1 -1
  113. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js +7 -0
  114. package/dist/esm/workbench/workbench-creation-conversation.custom.shared.schemas.js.map +1 -1
  115. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.d.ts.map +1 -1
  116. package/dist/esm/workbench/workbench-creation-dossier.custom.shared.schemas.js.map +1 -1
  117. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts +611 -405
  118. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.d.ts.map +1 -1
  119. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js +98 -17
  120. package/dist/esm/workbench/workbench-creation-plane.custom.shared.resources-config.schemas.js.map +1 -1
  121. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts +821 -240
  122. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.d.ts.map +1 -1
  123. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js +795 -41
  124. package/dist/esm/workbench/workbench-creation-plane.custom.shared.schemas.js.map +1 -1
  125. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts +34 -0
  126. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.d.ts.map +1 -1
  127. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js +31 -0
  128. package/dist/esm/workbench/workbench-domain-model.custom.shared.schemas.js.map +1 -1
  129. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts +14 -2
  130. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.d.ts.map +1 -1
  131. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js +25 -3
  132. package/dist/esm/workbench/workbench-resources-types.custom.shared.schemas.js.map +1 -1
  133. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts +353 -250
  134. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.d.ts.map +1 -1
  135. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js +1 -0
  136. package/dist/esm/workbench/workbench-resources.custom.shared.resources-config.schemas.js.map +1 -1
  137. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts +34 -29
  138. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.d.ts.map +1 -1
  139. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js +9 -5
  140. package/dist/esm/workbench/workbench-resources.custom.shared.schemas.js.map +1 -1
  141. package/dist/tsconfig.build.tsbuildinfo +1 -1
  142. package/package.json +13 -8
@@ -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":"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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 /**\n * What each COMPUTED option stands for (#2337), index-aligned with `options` — shown beside it, so a person\n * choosing \"Groundwork [keep-despite-conflict]\" sees the conflict it summarizes. Absent when the options are\n * authored, or when the asker computes none.\n */\n optionDetails: z.array(z.string()).optional(),\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 /**\n * Questions waiting on the person: the length of the queue `GET /creation/questions` serves, which is what\n * `wildo creation questions` lists (#2412). Counted from the QUEUE, never from the feed's ASKED lines: those also\n * carry the plan-stuck lines below, and a count taken from them said \"6 questions waiting\" over an empty queue.\n */\n questions: z.number().int().nonnegative(),\n /** ASKED lines saying the plan can dispatch nothing until a task is unblocked — waiting on the person, not a question. */\n stuckTasks: 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/**\n * The pulse a feed read implies — one counting rule, used by the companion when it serves a feed. `questionCount` is\n * the question queue's length, read by the companion from the same source as `GET /creation/questions` (#2412).\n */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed, questionCount: number): CreationConsole_PulseSummary {\n return {\n questions: questionCount,\n stuckTasks: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED && line.kind === WorkbenchCreationHomeLineKind.UNBLOCK_THE_PLAN).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 { MetaWorkflow_ElicitationNonAnswer, ApplicationInterviewDepth } from '@wildo-ai/saas-models/meta-workflows';\n\nimport { WorkbenchCreationHomeLineKind, WorkbenchCreationHomeSection } from './workbench-creation-plane.custom.shared.schemas';\nimport { WorkbenchShared_ResourceType } from './workbench-resources-types.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 WITH A VALUE here: landing governance facts is a whole-document sitting that\n * also 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. It\n * may be DEFERRED from here (#3437, `admittedNonAnswers`): a deferral asserts nothing about the document.\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/**\n * WHERE a queued item can be answered (#3242). Stated rather than left for a reader to infer from an empty\n * `actions` list: on app-creation-test-007 an agent driving creation through the CLI took a governed-document\n * fact for a console question, sent `wildo creation answer`, and was refused, while the feed kept asking.\n */\nexport enum CreationConsoleAnswerSurface {\n /** `wildo creation answer` answers it: `actions` names what an answer may do. */\n CONSOLE = 'console',\n /**\n * Only the workbench can answer it WITH A VALUE, and `actions` is empty: a governed-document fact (a\n * whole-document sitting that names the governance scope and who decided), or a clarification routed to the\n * signed-in person who started its run. `workbenchDetail` names the row that answers it. A non-answer the\n * item admits (`admittedNonAnswers`, #3437) is still sent from the console.\n */\n WORKBENCH = 'workbench',\n}\n\n/** The surface a queued item is answered from, derived from what the console may do with it — one rule, for every producer. */\nexport function creationConsoleAnswerSurfaceOf(actions: readonly CreationConsoleAnswerAction[]): CreationConsoleAnswerSurface {\n return actions.length > 0 ? CreationConsoleAnswerSurface.CONSOLE : CreationConsoleAnswerSurface.WORKBENCH;\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 /**\n * What each COMPUTED option stands for (#2337), index-aligned with `options` — shown beside it, so a person\n * choosing \"Groundwork [keep-despite-conflict]\" sees the conflict it summarizes. Absent when the options are\n * authored, or when the asker computes none.\n */\n optionDetails: z.array(z.string()).optional(),\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 * The ways THIS item may be answered WITHOUT a value (#3437), sent as an `answer` whose fields carry `nonAnswer` +\n * `reason`: for an interview question, what its playbook declares (`admittedElicitationNonAnswers`: none unless\n * declared, and never for one only the person may answer); `deferred` alone for a governed-document fact. Admitted from the console even when `answerableFrom` is\n * `workbench`: deferring a fact names no governance scope and asserts nothing, so it needs nothing the console lacks.\n * Empty for every other kind.\n */\n admittedNonAnswers: z.array(z.enum(MetaWorkflow_ElicitationNonAnswer)),\n /** Where it is answered (#3242): `workbench` exactly when `actions` is empty — {@link creationConsoleAnswerSurfaceOf}. */\n answerableFrom: z.enum(CreationConsoleAnswerSurface),\n /**\n * For an item answered in the workbench, the row that answers it there — what `wildo workbench open\n * <questionId>` opens (the governed document's questionnaire, or the routed run). NULL for a console item.\n */\n workbenchDetail: z.object({ resourceType: z.enum(WorkbenchShared_ResourceType), resourceId: z.string().min(1) }).nullable(),\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 /**\n * For an item of `withoutAnswer` (#3437): how the person answered WITHOUT a value (a governed-document fact can only\n * be deferred). NULL on every other item.\n */\n nonAnswer: z.enum(MetaWorkflow_ElicitationNonAnswer).nullable(),\n /** For an item of `withoutAnswer`: the person's reason, in their words. NULL otherwise. */\n nonAnswerReason: 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 * Questions the person answered WITHOUT a value (#3437): said not to apply, or deferred (not decided yet), each with\n * its reason. Nothing waits on them, so they are kept apart from `questions`; they are listed to revisit, and\n * answering one records an answer (or the other non-answer) in its place.\n */\n withoutAnswer: 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 /** The answer. Absent exactly when `nonAnswer` is given: a question is answered with a value or without one, never both. */\n value: z.string().min(1).optional(),\n /**\n * Answer WITHOUT a value (#3437): `not_applicable` (the question does not concern this application) or `deferred`\n * (it does, and is not decided yet). The item's `admittedNonAnswers` says which it takes: what an interview question's\n * playbook declares; only `deferred` for a governed-document fact (\"does not apply\" to a fact is its questionnaire's\n * own answer, offered only where the blueprint allows it).\n */\n nonAnswer: z.enum(MetaWorkflow_ElicitationNonAnswer).optional(),\n /** Why — required with `nonAnswer`, refused without it. */\n reason: z.string().min(1).optional(),\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}).superRefine((answer, context) => {\n if ((answer.value === undefined) === (answer.nonAnswer === undefined)) {\n context.addIssue({ code: 'custom', path: ['value'], message: 'Give either `value` or `nonAnswer` (with a `reason`), and not both.' });\n }\n if ((answer.nonAnswer === undefined) !== (answer.reason === undefined)) {\n context.addIssue({ code: 'custom', path: ['reason'], message: '`reason` goes with `nonAnswer`, and `nonAnswer` needs one.' });\n }\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 * (dead-plan-citation: both are files the companion writes into the workspace, not plans)\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\n/**\n * A specification the companion refused to serve (#3210, #3211): its factory refused the definition, so it is absent\n * from everything the companion reads, and every other specification keeps serving. The JSON shape of\n * `SpecificationDefinitionFault` in `@wildo-ai/saas-specifications`; `kind` is a `SpecificationDefinitionKind` value,\n * typed as a string here because this package does not depend on the one that owns that vocabulary.\n */\nexport const CreationConsole_SpecificationFault_Schema = z.object({\n kind: z.string().min(1),\n /** The specification's identity as its factory knows it — a resource type, or `resources.<type>.<viewRef>`. */\n key: z.string(),\n /** The validator's message, verbatim: it names the field and the remedy. */\n message: z.string().min(1),\n /** The authored file and line the factory was called from, when the stack carries one. */\n authoredFrame: z.string().nullable(),\n});\nexport type CreationConsole_SpecificationFault = z.infer<typeof CreationConsole_SpecificationFault_Schema>;\n\n/**\n * A module of the specifications package the companion could not evaluate (#3258): its body threw for a reason no\n * factory refusal covers (a `TypeError` at import, a missing file, a syntax error), so it serves nothing, and every\n * other module keeps serving. The JSON shape of `SpecificationModuleFault` in `@wildo-ai/saas-specifications`, with the\n * module named relative to the application root. `reading` is a `SpecificationModuleFaultReading` value, typed as a\n * string here because this package does not depend on the one that owns that vocabulary: `possibly-stale-build` (code\n * could not run — check the builds of the packages it imports before reading it as the module being wrong) or\n * `authoring-error` (the module itself is wrong).\n */\nexport const CreationConsole_SpecificationModuleFault_Schema = z.object({\n modulePath: z.string().min(1),\n /** The error's name (`TypeError`, `SyntaxError`, `Error`, …). */\n errorName: z.string().min(1),\n message: z.string(),\n reading: z.string().min(1),\n /** The authored line that threw, when the stack carries one. */\n authoredFrame: z.string().nullable(),\n /** The failed modules this one imports: it is judged by them. Optional only for a console that reads an older companion. */\n causedBy: z.array(z.string()).optional(),\n /** The specifications it left unavailable, in words. Optional only for a console that reads an older companion. */\n withheldSpecifications: z.array(z.string()).optional(),\n});\nexport type CreationConsole_SpecificationModuleFault = z.infer<typeof CreationConsole_SpecificationModuleFault_Schema>;\n\n/**\n * A backend that does not run the current tree, so the build lane dispatches nothing new (#2405, #3215): the companion's\n * `ApplicationBootFailure`. `cause` is an `ApplicationBootFailureCause` value, typed as a string here because the\n * companion owns that vocabulary; `remedy` is already worded for it (a task to fix, or the dev stack's repair).\n */\nexport const CreationConsole_BootFailure_Schema = z.object({\n serviceIdentifier: z.string().min(1),\n cause: z.string().min(1),\n /** The backend's own refusal, verbatim, when it recorded one. */\n message: z.string().nullable(),\n remedy: z.string().min(1),\n failedAt: z.string(),\n});\nexport type CreationConsole_BootFailure = z.infer<typeof CreationConsole_BootFailure_Schema>;\n\nexport const CreationConsole_Feed_Schema = z.object({\n computedAt: z.string(),\n lines: z.array(CreationConsole_FeedLine_Schema),\n /**\n * What the application's specifications package could not supply (#3210, #3211). `faults` names each refused\n * specification; `loadError` is set when the package could not be evaluated at all, in which case `lines` holds\n * only what could be derived without it. Both empty on a healthy tree. Carried by the feed because a refused\n * specification is otherwise silent: the board, the build plan and the wave keep working without it.\n */\n specifications: z.object({\n faults: z.array(CreationConsole_SpecificationFault_Schema),\n /**\n * The modules that could not be evaluated (#3258), in evaluation order; a module that imports a failed one names it\n * in `causedBy`. Optional only for a console that reads an older companion; this companion always sends it.\n */\n moduleFaults: z.array(CreationConsole_SpecificationModuleFault_Schema).optional(),\n loadError: z.string().nullable(),\n }),\n /**\n * Why the build lane is HOLDING dispatch right now (#3215): every backend that does not run the current tree, read the\n * way the wave reads it before each slot. Empty while dispatch may proceed. Carried by the feed because a held build\n * is otherwise silent: the wave pauses with nothing in flight and no line says why. Optional only for a console that\n * reads an older companion, which does not send it; this companion always does.\n */\n buildHold: z.object({\n bootFailures: z.array(CreationConsole_BootFailure_Schema),\n /**\n * The build lane still owes a repair of a start the application's own code refused (#3204), and runs it itself: an\n * unattended drive lets the lane run instead of stopping on the hold. Absent or false once the round's repairs are\n * spent, for a dev-stack cause no code fixes, and from a companion older than the repair.\n */\n startupRepairOwed: z.boolean().optional(),\n }).optional(),\n /**\n * What the build lane is doing between dispatches (#3206): when the running wave started, whether a stop was asked,\n * and the current slot's preparation in words (\"selected X, preparing dispatch since T (step)\"), or NULL between slots.\n * Optional for the reason `buildHold` is.\n */\n buildPreparation: z.object({\n waveStartedAt: z.string().nullable(),\n stopRequestedAt: z.string().nullable(),\n /**\n * Since when a person's `wildo build stop` holds the build: nothing starts on its own (the build lane's selector, the\n * loop, the usage-limit resume are refused) until a person runs `wildo build run`. NULL when nothing holds it;\n * absent from a companion older than the hold.\n */\n heldByStopSince: z.string().nullable().optional(),\n preparing: z.string().nullable(),\n }).optional(),\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 /**\n * Questions waiting on the person: the length of the queue `GET /creation/questions` serves, which is what\n * `wildo creation questions` lists (#2412). Counted from the QUEUE, never from the feed's ASKED lines: those also\n * carry the plan-stuck lines below, and a count taken from them said \"6 questions waiting\" over an empty queue.\n */\n questions: z.number().int().nonnegative(),\n /**\n * ASKED lines saying the plan can dispatch nothing until something is unblocked: a stuck task, or a specifications module\n * that fails (#3258). Waiting on the person, not a question. The wire name predates the second kind.\n */\n stuckTasks: 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/**\n * The pulse a feed read implies — one counting rule, used by the companion when it serves a feed. `questionCount` is\n * the question queue's length, read by the companion from the same source as `GET /creation/questions` (#2412).\n */\nexport function summarizeCreationConsoleFeed(feed: CreationConsole_Feed, questionCount: number): CreationConsole_PulseSummary {\n return {\n questions: questionCount,\n // A module holding the plan with no stuck task is the same news: said nowhere else in the prompt hook or the status line (#3258).\n stuckTasks: feed.lines.filter((line) => line.section === WorkbenchCreationHomeSection.ASKED\n && (line.kind === WorkbenchCreationHomeLineKind.UNBLOCK_THE_PLAN || line.kind === WorkbenchCreationHomeLineKind.SPECIFICATION_FAULT_HOLDS_THE_PLAN)).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"]}
@@ -149,6 +149,13 @@ export declare enum WorkbenchCreationConversationTool {
149
149
  READ_DOSSIER = "creation_read_dossier",
150
150
  /** Files one answer the creator gave, in their words. Reversible, so not approved. */
151
151
  RECORD_ANSWER = "creation_record_answer",
152
+ /**
153
+ * Asks the creator several of a step's questions at once, as one form (#2731). The engine's question tool
154
+ * (`askPersonTool`): the turn pauses until the creator answers through the form or declines, and the answers come
155
+ * back to the assistant, which files each with `RECORD_ANSWER`. Not an approval: only an answer or a decline settles
156
+ * it, so the workbench draws it as the engine's question card rather than an approval sentence.
157
+ */
158
+ ASK_PERSON = "creation_ask_person",
152
159
  /**
153
160
  * Proposes answers to interview questions the creator does not know (#2129). One small model call and it
154
161
  * writes nothing — the creator reviews each proposal, and what they keep is filed as an assumption — so it
@@ -170,12 +177,17 @@ export declare enum WorkbenchCreationConversationTool {
170
177
  ACCEPT_TASK = "creation_accept_task"
171
178
  }
172
179
  /**
173
- * The words one tool carries. `working` is the stream's line while it runs. `askTitle` and `ask` are
174
- * the approval card's heading and sentence, present exactly for the tools that stop for approval;
175
- * `ask` takes `{subject}` — the playbook's title, the task's objective, or the research objective,
180
+ * The words one tool carries. `title` heads the call's card in the stream at any phase; `working` is the stream's line
181
+ * while it runs. `askTitle` and `ask` are the approval card's heading and sentence, present exactly for the tools that
182
+ * stop for approval; `ask` takes `{subject}` — the playbook's title, the task's objective, or the research objective,
176
183
  * resolved by the card from the call's own arguments.
177
184
  */
178
185
  export interface WorkbenchCreationConversationToolWords {
186
+ /**
187
+ * What the call is about, as its card's heading — read when it is running AND after it finished, so it must not say
188
+ * it is running (#2525 review M6: the working words titled finished cards, which then read as running forever).
189
+ */
190
+ readonly title: string;
179
191
  readonly working: string;
180
192
  readonly askTitle?: string;
181
193
  readonly ask?: string;
@@ -186,6 +198,12 @@ export interface WorkbenchCreationConversationToolWords {
186
198
  * approves what is actually recorded rather than finding it behind "Show the details".
187
199
  */
188
200
  readonly askVariant?: string;
201
+ /**
202
+ * The approval sentence for a secondary line that needs the firm's method (#2305): opening it also arranges the
203
+ * application as an operator serving client organizations, so the person approves the structure, not only the family
204
+ * id. Takes `{subject}` and `{detail}` like {@link askVariant}; chosen by the card's `askWordFor`.
205
+ */
206
+ readonly askFirmVariant?: string;
189
207
  }
190
208
  /** Every tool's words — total over the tool vocabulary, so a new tool cannot ship wordless. */
191
209
  export type WorkbenchCreationConversationToolCopy = {
@@ -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;IACf;;;;;OAKG;IACH,aAAa,kBAAkB;CAChC;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"}
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":"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"}
@@ -151,6 +151,13 @@ export var WorkbenchCreationConversationTool;
151
151
  WorkbenchCreationConversationTool["READ_DOSSIER"] = "creation_read_dossier";
152
152
  /** Files one answer the creator gave, in their words. Reversible, so not approved. */
153
153
  WorkbenchCreationConversationTool["RECORD_ANSWER"] = "creation_record_answer";
154
+ /**
155
+ * Asks the creator several of a step's questions at once, as one form (#2731). The engine's question tool
156
+ * (`askPersonTool`): the turn pauses until the creator answers through the form or declines, and the answers come
157
+ * back to the assistant, which files each with `RECORD_ANSWER`. Not an approval: only an answer or a decline settles
158
+ * it, so the workbench draws it as the engine's question card rather than an approval sentence.
159
+ */
160
+ WorkbenchCreationConversationTool["ASK_PERSON"] = "creation_ask_person";
154
161
  /**
155
162
  * Proposes answers to interview questions the creator does not know (#2129). One small model call and it
156
163
  * writes nothing — the creator reviews each proposal, and what they keep is filed as an assumption — so it
@@ -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,sCA6CX;AA7CD,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;IACf;;;;;OAKG;IACH,yEAA+B,CAAA;AACjC,CAAC,EA7CW,sCAAsC,KAAtC,sCAAsC,QA6CjD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAN,IAAY,iCAyDX;AAzDD,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;;;;OAIG;IACH,qGAAgE,CAAA;IAChE;;;OAGG;IACH,yFAAoD,CAAA;IACpD,gGAAgG;IAChG,uFAAkD,CAAA;IAClD,mEAAmE;IACnE,6EAAwC,CAAA;IACxC,kFAAkF;IAClF,6EAAwC,CAAA;IACxC,2EAA2E;IAC3E,yEAAoC,CAAA;AACtC,CAAC,EAzDW,iCAAiC,KAAjC,iCAAiC,QAyD5C;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 * The application CODE SURFACES a step's output can be dated by, in a creator's words (#2506), keyed by the\n * surface's own value (`resource-declarations`). A stale output names the surface that moved beside the families\n * that did, and the board renders it through the same title lookup. The vocabulary is `ApplicationCodeSurface` in\n * `saas-specifications`, which this package never depends on; a companion test holds the block total over it.\n */\n CODE_SURFACES = 'code_surfaces',\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"]}
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 * The application CODE SURFACES a step's output can be dated by, in a creator's words (#2506), keyed by the\n * surface's own value (`resource-declarations`). A stale output names the surface that moved beside the families\n * that did, and the board renders it through the same title lookup. The vocabulary is `ApplicationCodeSurface` in\n * `saas-specifications`, which this package never depends on; a companion test holds the block total over it.\n */\n CODE_SURFACES = 'code_surfaces',\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 * Asks the creator several of a step's questions at once, as one form (#2731). The engine's question tool\n * (`askPersonTool`): the turn pauses until the creator answers through the form or declines, and the answers come\n * back to the assistant, which files each with `RECORD_ANSWER`. Not an approval: only an answer or a decline settles\n * it, so the workbench draws it as the engine's question card rather than an approval sentence.\n */\n ASK_PERSON = 'creation_ask_person',\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. `title` heads the call's card in the stream at any phase; `working` is the stream's line\n * while it runs. `askTitle` and `ask` are the approval card's heading and sentence, present exactly for the tools that\n * stop for approval; `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 /**\n * What the call is about, as its card's heading — read when it is running AND after it finished, so it must not say\n * it is running (#2525 review M6: the working words titled finished cards, which then read as running forever).\n */\n readonly title: string;\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 * The approval sentence for a secondary line that needs the firm's method (#2305): opening it also arranges the\n * application as an operator serving client organizations, so the person approves the structure, not only the family\n * id. Takes `{subject}` and `{detail}` like {@link askVariant}; chosen by the card's `askWordFor`.\n */\n readonly askFirmVariant?: 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 +1 @@
1
- {"version":3,"file":"workbench-creation-dossier.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-dossier.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mCAAmC,qBAAqB,CAAC;AACtE,eAAO,MAAM,0CAA0C,yBAA+C,CAAC;AACvG,eAAO,MAAM,qCAAqC,yCAAkE,CAAC;AAErH;;;;;GAKG;AACH,oBAAY,+BAA+B;IACzC,qFAAqF;IACrF,SAAS,cAAc;IACvB,yFAAyF;IACzF,UAAU,eAAe;IACzB,mGAAmG;IACnG,OAAO,YAAY;CACpB;AAED,eAAO,MAAM,uCAAuC,EAAE,SAAS,+BAA+B,EAC9C,CAAC;AAEjD,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,OAAO,IAAI,+BAA+B,GAAG;QACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;CACF,CAAC;AAEF,kHAAkH;AAClH,oBAAY,iCAAiC;IAC3C,oGAAoG;IACpG,SAAS,cAAc;IACvB,2GAA2G;IAC3G,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,EAAE,KAAK,IAAI,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxF,CAAC"}
1
+ {"version":3,"file":"workbench-creation-dossier.custom.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/workbench/workbench-creation-dossier.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mCAAmC,qBAAqB,CAAC;AACtE,eAAO,MAAM,0CAA0C,yBAA+C,CAAC;AACvG,eAAO,MAAM,qCAAqC,yCAAkE,CAAC;AAErH;;;;;GAKG;AACH,oBAAY,+BAA+B;IACzC,qFAAqF;IACrF,SAAS,cAAc;IACvB,yFAAyF;IACzF,UAAU,eAAe;IACzB,mGAAmG;IACnG,OAAO,YAAY;CACpB;AAED,eAAO,MAAM,uCAAuC,EAAE,SAAS,+BAA+B,EAC9C,CAAC;AAEjD,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,OAAO,IAAI,+BAA+B,GAAG;QACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B;CACF,CAAC;AAEF,kHAAkH;AAClH,oBAAY,iCAAiC;IAC3C,oGAAoG;IACpG,SAAS,cAAc;IACvB,2GAA2G;IAC3G,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,EAAE,KAAK,IAAI,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"workbench-creation-dossier.custom.shared.schemas.js","sourceRoot":"","sources":["../../../../src/workbench/workbench-creation-dossier.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,kBAAkB,CAAC;AACtE,MAAM,CAAC,MAAM,0CAA0C,GAAG,OAAO,mCAAmC,EAAE,CAAC;AACvG,MAAM,CAAC,MAAM,qCAAqC,GAAG,mBAAmB,0CAA0C,EAAE,CAAC;AAErH;;;;;GAKG;AACH,MAAM,CAAN,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACzC,qFAAqF;IACrF,0DAAuB,CAAA;IACvB,yFAAyF;IACzF,4DAAyB,CAAA;IACzB,mGAAmG;IACnG,sDAAmB,CAAA;AACrB,CAAC,EAPW,+BAA+B,KAA/B,+BAA+B,QAO1C;AAED,MAAM,CAAC,MAAM,uCAAuC,GAClD,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AASjD,kHAAkH;AAClH,MAAM,CAAN,IAAY,iCAKX;AALD,WAAY,iCAAiC;IAC3C,oGAAoG;IACpG,4DAAuB,CAAA;IACvB,2GAA2G;IAC3G,8DAAyB,CAAA;AAC3B,CAAC,EALW,iCAAiC,KAAjC,iCAAiC,QAK5C","sourcesContent":["/**\n * THE DOSSIER page — \"What you told us\" (#1454, Step 6): everything the creator was asked, by a\n * playbook interview or by a governed document, with their answer or the gap; and what the product\n * answers for them.\n *\n * Three sources, one page, and the page STORES nothing: the interview half is `workbenchDossierEntries`,\n * the governance half is `workbenchGovernanceQuestions` (each row carrying its standing), and the\n * derived facts are the governed documents' own `derivedFactRefs`. Each source is one embedded\n * resource LIST, so the filters are the resources' own: standing as the quick-filter tabs, and\n * `askedNow` — what blocks something now — as a declared filter.\n *\n * Same contract shape as the conversation view beside it: a view ref with no dot, a translation ref\n * under `app.`, and typed copy blocks the companion's label file must satisfy.\n */\nexport const WORKBENCH_CREATION_DOSSIER_VIEW_REF = 'creation-dossier';\nexport const WORKBENCH_CREATION_DOSSIER_TRANSLATION_REF = `app.${WORKBENCH_CREATION_DOSSIER_VIEW_REF}`;\nexport const WORKBENCH_CREATION_DOSSIER_LABEL_ROOT = `composite_views.${WORKBENCH_CREATION_DOSSIER_TRANSLATION_REF}`;\n\n/**\n * The dossier page's SECTIONS — one per source, each an embedded resource LIST rendered by the engine\n * (#1454, Step 6, reworked 2026-09-22 onto the composite-view section contract the board uses).\n * Filters and standing words are the resources' own (`quickFilterField`, `system_enums`); the page\n * authors only the three section headings and the row actions' words.\n */\nexport enum WorkbenchCreationDossierSection {\n /** `workbenchDossierEntries`: every interview question, answered or still needed. */\n INTERVIEW = 'interview',\n /** `workbenchGovernanceQuestions`: every governed-document question a person answers. */\n GOVERNANCE = 'governance',\n /** `workbenchGovernanceDocuments`: each document with the facts the product establishes for it. */\n PRODUCT = 'product',\n}\n\nexport const WORKBENCH_CREATION_DOSSIER_SECTION_REFS: readonly WorkbenchCreationDossierSection[] =\n Object.values(WorkbenchCreationDossierSection);\n\nexport type WorkbenchCreationDossierSectionLabels = {\n readonly [section in WorkbenchCreationDossierSection]: {\n readonly title: string;\n readonly description: string;\n };\n};\n\n/** The row ACTIONS' copy blocks — the words the two question resources' summary rows show beside their fields. */\nexport enum WorkbenchCreationDossierCopyBlock {\n /** One interview entry: the way in (answer / change), who asks it, whether the step can run now. */\n INTERVIEW = 'interview',\n /** One governed-document question: the way in, whether a draft waits on it, whether a reviewer is owed. */\n GOVERNANCE = 'governance',\n}\n\nexport type WorkbenchCreationDossierCopyLabels = {\n readonly [block in WorkbenchCreationDossierCopyBlock]: Readonly<Record<string, string>>;\n};\n"]}
1
+ {"version":3,"file":"workbench-creation-dossier.custom.shared.schemas.js","sourceRoot":"","sources":["../../../src/workbench/workbench-creation-dossier.custom.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,kBAAkB,CAAC;AACtE,MAAM,CAAC,MAAM,0CAA0C,GAAG,OAAO,mCAAmC,EAAE,CAAC;AACvG,MAAM,CAAC,MAAM,qCAAqC,GAAG,mBAAmB,0CAA0C,EAAE,CAAC;AAErH;;;;;GAKG;AACH,MAAM,CAAN,IAAY,+BAOX;AAPD,WAAY,+BAA+B;IACzC,qFAAqF;IACrF,0DAAuB,CAAA;IACvB,yFAAyF;IACzF,4DAAyB,CAAA;IACzB,mGAAmG;IACnG,sDAAmB,CAAA;AACrB,CAAC,EAPW,+BAA+B,KAA/B,+BAA+B,QAO1C;AAED,MAAM,CAAC,MAAM,uCAAuC,GAClD,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AASjD,kHAAkH;AAClH,MAAM,CAAN,IAAY,iCAKX;AALD,WAAY,iCAAiC;IAC3C,oGAAoG;IACpG,4DAAuB,CAAA;IACvB,2GAA2G;IAC3G,8DAAyB,CAAA;AAC3B,CAAC,EALW,iCAAiC,KAAjC,iCAAiC,QAK5C","sourcesContent":["/**\n * THE DOSSIER page — \"What you told us\" (#1454, Step 6): everything the creator was asked, by a\n * playbook interview or by a governed document, with their answer or the gap; and what the product\n * answers for them.\n *\n * Three sources, one page, and the page STORES nothing: the interview half is `workbenchDossierEntries`,\n * the governance half is `workbenchGovernanceQuestions` (each row carrying its standing), and the\n * derived facts are the governed documents' own `derivedFactRefs`. Each source is one embedded\n * resource LIST, so the filters are the resources' own: standing as the quick-filter tabs, and\n * `askedNow` — what blocks something now — as a declared filter.\n *\n * Same contract shape as the conversation view beside it: a view ref with no dot, a translation ref\n * under `app.`, and typed copy blocks the companion's label file must satisfy.\n */\nexport const WORKBENCH_CREATION_DOSSIER_VIEW_REF = 'creation-dossier';\nexport const WORKBENCH_CREATION_DOSSIER_TRANSLATION_REF = `app.${WORKBENCH_CREATION_DOSSIER_VIEW_REF}`;\nexport const WORKBENCH_CREATION_DOSSIER_LABEL_ROOT = `composite_views.${WORKBENCH_CREATION_DOSSIER_TRANSLATION_REF}`;\n\n/**\n * The dossier page's SECTIONS — one per source, each an embedded resource LIST rendered by the engine\n * (#1454, Step 6, reworked 2026-09-22 onto the composite-view section contract the board uses).\n * Filters and standing words are the resources' own (`quickFilterField`, `system_enums`); the page\n * authors only the three section headings and the row actions' words.\n */\nexport enum WorkbenchCreationDossierSection {\n /** `workbenchDossierEntries`: every interview question, answered or still needed. */\n INTERVIEW = 'interview',\n /** `workbenchGovernanceQuestions`: every governed-document question a person answers. */\n GOVERNANCE = 'governance',\n /** `workbenchGovernanceDocuments`: each document with the facts the product establishes for it. */\n PRODUCT = 'product',\n}\n\nexport const WORKBENCH_CREATION_DOSSIER_SECTION_REFS: readonly WorkbenchCreationDossierSection[] =\n Object.values(WorkbenchCreationDossierSection);\n\nexport type WorkbenchCreationDossierSectionLabels = {\n readonly [section in WorkbenchCreationDossierSection]: {\n readonly title: string;\n readonly description: string;\n };\n};\n\n/** The row ACTIONS' copy blocks — the words the two question resources' summary rows show beside their fields. */\nexport enum WorkbenchCreationDossierCopyBlock {\n /** One interview entry: the way in (answer / change), who asks it, whether the step can run now. */\n INTERVIEW = 'interview',\n /** One governed-document question: the way in, whether a draft waits on it, whether a reviewer is owed. */\n GOVERNANCE = 'governance',\n}\n\nexport type WorkbenchCreationDossierCopyLabels = {\n readonly [block in WorkbenchCreationDossierCopyBlock]: Readonly<Record<string, string>>;\n};\n"]}