@cat-factory/app 0.26.4 → 0.26.6

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.
@@ -114,7 +114,9 @@ function buildManifestPayload(): {
114
114
  const template = descriptor.value?.manifestTemplate
115
115
  if (!template) return null
116
116
  const base = descriptor.value?.savedManifest ?? template
117
- const manifest: Record<string, unknown> = structuredClone(base)
117
+ // `base` is a Vue reactive proxy, which structuredClone refuses (DataCloneError). The
118
+ // manifest is plain JSON config, so a JSON round-trip both unwraps the proxy and deep-clones.
119
+ const manifest: Record<string, unknown> = JSON.parse(JSON.stringify(base))
118
120
  const providerConfig: Record<string, unknown> = {
119
121
  ...(manifest.providerConfig as Record<string, unknown> | undefined),
120
122
  }
@@ -1,11 +1,11 @@
1
1
  <script setup lang="ts">
2
- // Import an issue from a connected task source (by key or URL) and review the
3
- // issues already imported into the workspace. An imported issue can be attached
4
- // to an existing task for context from the inspector (see TaskContextIssues.vue),
5
- // or turned into a new board task here: pick a container (service frame or module),
6
- // then click an issue to open the prefilled add-task form (title seeded, issue
7
- // staged as linked context) where the user confirms the pipeline / presets before
8
- // creating it. A separate icon button on each row opens the issue on GitHub.
2
+ // Import an issue from a connected task source (by key or URL). An imported issue
3
+ // can be attached to an existing task for context from the inspector (see
4
+ // TaskContextIssues.vue), or turned into a new board task here: pick a container
5
+ // (service frame or module), then click a search hit to open the prefilled
6
+ // add-task form (title seeded, issue staged as linked context) where the user
7
+ // confirms the pipeline / presets before creating it. A separate icon button on
8
+ // each row opens the issue on GitHub.
9
9
  import type { TaskSearchResult, TaskSourceKind } from '~/types/domain'
10
10
  import type { AddTaskPrefill } from '~/stores/ui'
11
11
 
@@ -85,10 +85,6 @@ const freshHits = computed(() =>
85
85
  searchResults.value.filter((r) => !importedIds.value.has(r.externalId)),
86
86
  )
87
87
 
88
- const sourceTasks = computed(() =>
89
- source.value ? tasks.tasks.filter((t) => t.source === source.value) : [],
90
- )
91
-
92
88
  // Containers a new task can be created in: every service frame and module on the
93
89
  // board. Modules are labelled with their parent frame so the choice is unambiguous.
94
90
  const containerItems = computed(() =>
@@ -262,7 +258,7 @@ async function doSpawnEpic() {
262
258
  <!-- Container for epic children when spawning from a pasted ref (the shared
263
259
  "Create tasks in" selector below covers the search-results case). -->
264
260
  <UFormField
265
- v-if="containerItems.length && !freshHits.length && !sourceTasks.length"
261
+ v-if="containerItems.length && !freshHits.length"
266
262
  label="Epic children container"
267
263
  class="w-72"
268
264
  >
@@ -288,7 +284,7 @@ async function doSpawnEpic() {
288
284
 
289
285
  <!-- Shared target container for every "Create task" action below. -->
290
286
  <UFormField
291
- v-if="containerItems.length && (freshHits.length || sourceTasks.length)"
287
+ v-if="containerItems.length && freshHits.length"
292
288
  label="Create tasks in"
293
289
  class="w-72"
294
290
  >
@@ -300,7 +296,7 @@ async function doSpawnEpic() {
300
296
  />
301
297
  </UFormField>
302
298
  <p
303
- v-else-if="!containerItems.length && (freshHits.length || sourceTasks.length)"
299
+ v-else-if="!containerItems.length && freshHits.length"
304
300
  class="text-[11px] text-slate-500"
305
301
  >
306
302
  Add a service frame to the board first to create tasks from issues.
@@ -352,52 +348,11 @@ async function doSpawnEpic() {
352
348
  </div>
353
349
  </div>
354
350
 
355
- <!-- List of already-imported issues -->
356
- <div v-if="sourceTasks.length" class="space-y-2">
357
- <h3 class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
358
- Imported issues
359
- </h3>
360
- <div
361
- v-for="task in sourceTasks"
362
- :key="`${task.source}:${task.externalId}`"
363
- class="flex items-start justify-between gap-2 rounded-lg border border-slate-800 bg-slate-900/60 p-3 transition-colors hover:border-primary-500/60 hover:bg-slate-900"
364
- >
365
- <button
366
- type="button"
367
- class="min-w-0 flex-1 text-left disabled:cursor-not-allowed disabled:opacity-60"
368
- :disabled="!containerId"
369
- :title="containerId ? 'Create a task from this issue' : 'Pick a container first'"
370
- @click="selectIssue(task, false)"
371
- >
372
- <span class="block truncate text-sm font-medium text-white">
373
- {{ task.externalId }} · {{ task.title }}
374
- </span>
375
- <span class="mt-0.5 line-clamp-2 block text-xs text-slate-500">{{
376
- task.excerpt
377
- }}</span>
378
- </button>
379
- <div class="flex shrink-0 items-center gap-2">
380
- <UBadge color="neutral" variant="soft" size="xs">
381
- {{ task.status }}
382
- </UBadge>
383
- <UButton
384
- color="neutral"
385
- variant="ghost"
386
- size="xs"
387
- icon="i-lucide-external-link"
388
- :to="task.url"
389
- target="_blank"
390
- rel="noopener"
391
- :aria-label="`View ${task.externalId} on GitHub`"
392
- />
393
- </div>
394
- </div>
395
- </div>
396
351
  <p
397
- v-else-if="!freshHits.length && !searchQuery.trim()"
352
+ v-if="!freshHits.length && !searchQuery.trim()"
398
353
  class="text-center text-xs text-slate-500"
399
354
  >
400
- No issues imported yet. Search above, or paste an issue URL/key to import one.
355
+ Search above, or paste an issue URL/key to create a task from it.
401
356
  </p>
402
357
  </div>
403
358
  </template>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.26.4",
3
+ "version": "0.26.6",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",