@cat-factory/app 0.138.1 → 0.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/app/components/board/AddTaskModal.vue +12 -39
  2. package/app/components/brainstorm/BrainstormWindow.vue +338 -374
  3. package/app/components/clarity/ClarityReviewWindow.vue +323 -353
  4. package/app/components/consensus/ConsensusSessionWindow.vue +138 -150
  5. package/app/components/docs/DocInterviewWindow.vue +108 -136
  6. package/app/components/documents/ContextDocumentPicker.vue +89 -70
  7. package/app/components/documents/RepoContextDocPicker.vue +277 -0
  8. package/app/components/followUp/FollowUpWindow.vue +3 -5
  9. package/app/components/forkDecision/ForkDecisionWindow.vue +1 -3
  10. package/app/components/gates/GateResultView.vue +3 -5
  11. package/app/components/github/RepoTreeBrowser.vue +19 -10
  12. package/app/components/humanTest/HumanTestWindow.vue +3 -5
  13. package/app/components/initiative/InitiativePlanningWindow.vue +89 -112
  14. package/app/components/initiative/InitiativeTrackerWindow.vue +389 -424
  15. package/app/components/panels/GenericStructuredResultView.vue +3 -5
  16. package/app/components/panels/MergerResultView.vue +3 -5
  17. package/app/components/panels/ResultWindowShell.vue +1 -1
  18. package/app/components/panels/inspector/TaskRunSettings.vue +16 -23
  19. package/app/components/pipeline/PipelineBuilder.vue +10 -0
  20. package/app/components/pipeline/PipelinePicker.vue +120 -0
  21. package/app/components/pipeline/PipelinePreview.vue +49 -0
  22. package/app/components/prReview/PrReviewWindow.vue +181 -205
  23. package/app/components/ralph/RalphLoopResultView.vue +3 -5
  24. package/app/components/requirements/RequirementsReviewWindow.vue +512 -557
  25. package/app/components/spec/ServiceSpecWindow.vue +235 -266
  26. package/app/components/testing/TestReportWindow.vue +4 -6
  27. package/app/components/visualConfirm/VisualConfirmationWindow.vue +3 -5
  28. package/app/composables/api/github.ts +8 -0
  29. package/app/composables/useContextLinking.spec.ts +138 -0
  30. package/app/composables/useContextLinking.ts +120 -8
  31. package/app/composables/useCopyToClipboard.spec.ts +27 -0
  32. package/app/composables/useCopyToClipboard.ts +17 -1
  33. package/app/composables/useResultView.ts +10 -21
  34. package/app/stores/github.ts +24 -0
  35. package/app/stores/pipelines.ts +9 -0
  36. package/app/utils/pipeline.ts +25 -1
  37. package/i18n/locales/de.json +20 -0
  38. package/i18n/locales/en.json +20 -0
  39. package/i18n/locales/es.json +20 -0
  40. package/i18n/locales/fr.json +20 -0
  41. package/i18n/locales/he.json +20 -0
  42. package/i18n/locales/it.json +20 -0
  43. package/i18n/locales/ja.json +20 -0
  44. package/i18n/locales/pl.json +20 -0
  45. package/i18n/locales/tr.json +20 -0
  46. package/i18n/locales/uk.json +20 -0
  47. package/package.json +2 -2
@@ -35,7 +35,7 @@ const agentConfig = useAgentConfigStore()
35
35
  const toast = useToast()
36
36
  const { t } = useI18n()
37
37
 
38
- const { linkPending } = useContextLinking()
38
+ const { linkPending, presentLinkFailures } = useContextLinking()
39
39
 
40
40
  const open = computed({
41
41
  get: () => ui.addTaskContainerId !== null,
@@ -292,24 +292,6 @@ const selectedModelPresetLabel = computed(() => {
292
292
  const selectablePipelines = computed(() =>
293
293
  pipelines.pipelines.filter((p) => pipelineAllowedForManualStart(p, frame.value, board.blocks)),
294
294
  )
295
- const pipelineMenu = computed(() => [
296
- [
297
- {
298
- label: t('board.addTask.chooseAtRunTime'),
299
- icon: 'i-lucide-rotate-ccw',
300
- onSelect: () => (pipelineId.value = ''),
301
- },
302
- ...selectablePipelines.value.map((p) => ({
303
- label: p.name,
304
- icon: 'i-lucide-workflow',
305
- onSelect: () => (pipelineId.value = p.id),
306
- })),
307
- ],
308
- ])
309
- const selectedPipelineLabel = computed(
310
- () => pipelines.getPipeline(pipelineId.value)?.name ?? t('board.addTask.chooseAtRunTime'),
311
- )
312
-
313
295
  // Picking the Ralph loop task type auto-selects its pipeline, so the per-task validation
314
296
  // command + iteration budget (contributed by the `ralph` agent) surface immediately — the
315
297
  // loop is meaningless without them, so "choose at run time" would be a dead end here.
@@ -578,14 +560,10 @@ async function add() {
578
560
  ...(technical.value ? { technical: true } : {}),
579
561
  })
580
562
  if (block) {
581
- const failed = await linkPending(block.id, pendingContext.value)
582
- if (failed > 0) {
583
- toast.add({
584
- title: t('board.addTask.linkFailed', { count: failed }, failed),
585
- icon: 'i-lucide-triangle-alert',
586
- color: 'warning',
587
- })
588
- }
563
+ // Surface the SPECIFIC cause of any attachment that couldn't be linked (a GitHub
564
+ // permission/visibility error, a not-found doc, …) instead of a bare count, plus a
565
+ // one-click "Copy details" for a bug report.
566
+ presentLinkFailures(await linkPending(block.id, pendingContext.value), block.id)
589
567
  }
590
568
  ui.closeAddTask()
591
569
  } catch (e) {
@@ -895,18 +873,13 @@ async function add() {
895
873
 
896
874
  <div class="grid grid-cols-2 gap-3">
897
875
  <UFormField :label="t('board.addTask.pipeline')">
898
- <UDropdownMenu :items="pipelineMenu" class="w-full">
899
- <UButton
900
- color="neutral"
901
- variant="subtle"
902
- size="sm"
903
- icon="i-lucide-workflow"
904
- trailing-icon="i-lucide-chevron-down"
905
- class="w-full justify-between"
906
- >
907
- {{ selectedPipelineLabel }}
908
- </UButton>
909
- </UDropdownMenu>
876
+ <PipelinePicker
877
+ :model-value="pipelineId"
878
+ :options="selectablePipelines"
879
+ :none-label="t('board.addTask.chooseAtRunTime')"
880
+ trigger-class="w-full justify-between"
881
+ @update:model-value="pipelineId = $event"
882
+ />
910
883
  </UFormField>
911
884
 
912
885
  <UFormField :label="t('board.addTask.mergePolicy')">