@cat-factory/app 0.180.0 → 0.181.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.
- package/README.md +4 -1
- package/app/components/documents/TaskContextDocs.vue +20 -4
- package/app/components/initiative/InitiativePlanningWindow.vue +115 -71
- package/app/components/initiative/InitiativeTrackerWindow.vue +408 -366
- package/app/components/tasks/TaskContextIssues.vue +22 -4
- package/app/composables/useResultViewRunMeta.spec.ts +74 -0
- package/app/composables/useResultViewRunMeta.ts +98 -0
- package/app/docs/consumer-extensions.md +11 -10
- package/app/modular/panels/inspector.logic.spec.ts +12 -5
- package/app/modular/panels/inspector.logic.ts +14 -5
- package/i18n/locales/de.json +5 -1
- package/i18n/locales/en.json +5 -1
- package/i18n/locales/es.json +5 -1
- package/i18n/locales/fr.json +5 -1
- package/i18n/locales/he.json +5 -1
- package/i18n/locales/it.json +5 -1
- package/i18n/locales/ja.json +5 -1
- package/i18n/locales/pl.json +5 -1
- package/i18n/locales/tr.json +5 -1
- package/i18n/locales/uk.json +5 -1
- package/package.json +1 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
// Inspector section for a task block: the tracker issues (Jira,
|
|
3
|
-
// attached to it as agent context.
|
|
2
|
+
// Inspector section for a task OR initiative block: the tracker issues (Jira,
|
|
3
|
+
// GitHub Issues, …) attached to it as agent context. An initiative takes the same
|
|
4
|
+
// attachments (the create-initiative modal stages them exactly as the add-task one
|
|
5
|
+
// does) and its whole planning pipeline reads them, so it gets the same section —
|
|
6
|
+
// only the prose differs, which is why the hint/empty copy is level-keyed below.
|
|
7
|
+
// Attaching uses the SAME inline picker as task
|
|
4
8
|
// creation (source selector + in-repo search + paste-by-reference —
|
|
5
9
|
// ContextIssuePicker), NOT the old dropdown that opened a second, page-level
|
|
6
10
|
// "Import an issue…" modal on top of the inspector (stacked page-level modals
|
|
@@ -28,6 +32,20 @@ onMounted(() => {
|
|
|
28
32
|
})
|
|
29
33
|
|
|
30
34
|
const linked = computed(() => tasks.tasksForBlock(props.block.id))
|
|
35
|
+
|
|
36
|
+
// Two STATIC literal keys per string, picked by level — the copy names what reads the issue
|
|
37
|
+
// (the agents implementing a task vs the pipeline that plans an initiative), which is the
|
|
38
|
+
// whole point of the hint. Assembling one key from `block.level` would defeat the typed
|
|
39
|
+
// message-key check for a two-member choice that gains nothing from being dynamic.
|
|
40
|
+
const isInitiative = computed(() => props.block.level === 'initiative')
|
|
41
|
+
const hint = computed(() =>
|
|
42
|
+
isInitiative.value ? t('tasks.contextIssues.hintInitiative') : t('tasks.contextIssues.hint'),
|
|
43
|
+
)
|
|
44
|
+
const emptyHint = computed(() =>
|
|
45
|
+
isInitiative.value
|
|
46
|
+
? t('tasks.contextIssues.emptyHintInitiative')
|
|
47
|
+
: t('tasks.contextIssues.emptyHint'),
|
|
48
|
+
)
|
|
31
49
|
// Already-linked issues, so the inline picker filters them out / never re-offers them.
|
|
32
50
|
const chosenKeys = computed(() =>
|
|
33
51
|
linked.value.map((issue) =>
|
|
@@ -71,7 +89,7 @@ async function attach(item: PendingContext) {
|
|
|
71
89
|
<InspectorSection
|
|
72
90
|
v-if="tasks.available"
|
|
73
91
|
:title="t('tasks.contextIssues.title')"
|
|
74
|
-
:hint="
|
|
92
|
+
:hint="hint"
|
|
75
93
|
:count="linked.length"
|
|
76
94
|
>
|
|
77
95
|
<template #actions>
|
|
@@ -133,7 +151,7 @@ async function attach(item: PendingContext) {
|
|
|
133
151
|
</a>
|
|
134
152
|
</div>
|
|
135
153
|
<p v-else class="text-[11px] text-slate-500">
|
|
136
|
-
{{
|
|
154
|
+
{{ emptyHint }}
|
|
137
155
|
</p>
|
|
138
156
|
</InspectorSection>
|
|
139
157
|
</template>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import type { PipelineStep } from '~/types/execution'
|
|
3
|
+
import { resultViewStepIndex } from '~/composables/useResultViewRunMeta'
|
|
4
|
+
|
|
5
|
+
// The off-path fallback: which step a result window reports run metadata for when it was opened
|
|
6
|
+
// from a board card / the inspector rather than from the run's timeline. The precedence exists
|
|
7
|
+
// because a window's kind set can mix model-running steps with bookkeeping ones — the initiative
|
|
8
|
+
// tracker is registered for the analyst, the planner AND `initiative-committer`, which runs no
|
|
9
|
+
// model — so "the most recent one" alone would anchor on the step with no telemetry.
|
|
10
|
+
|
|
11
|
+
function step(agentKind: string, overrides: Partial<PipelineStep> = {}): PipelineStep {
|
|
12
|
+
return { agentKind, state: 'pending', ...overrides } as PipelineStep
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** A step that recorded model calls (the shape `attachStepMetrics` folds onto the run). */
|
|
16
|
+
function metered(agentKind: string, calls: number, startedAt = 1_000): PipelineStep {
|
|
17
|
+
return step(agentKind, { startedAt, metrics: { calls } as PipelineStep['metrics'] })
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe('resultViewStepIndex', () => {
|
|
21
|
+
it('is null when no step declares the view', () => {
|
|
22
|
+
const steps = [step('coder'), step('tester')]
|
|
23
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBeNull()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('falls back to the first declaring step before the run reaches any of them', () => {
|
|
27
|
+
const steps = [
|
|
28
|
+
step('initiative-interviewer'),
|
|
29
|
+
step('initiative-analyst'),
|
|
30
|
+
step('initiative-planner'),
|
|
31
|
+
]
|
|
32
|
+
// Index 1 — the analyst; the interviewer declares the PLANNING window, not the tracker.
|
|
33
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBe(1)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('prefers the last started step while the run is mid-flight with no telemetry yet', () => {
|
|
37
|
+
const steps = [
|
|
38
|
+
step('initiative-interviewer', { startedAt: 10 }),
|
|
39
|
+
step('initiative-analyst', { startedAt: 20 }),
|
|
40
|
+
step('initiative-planner'),
|
|
41
|
+
]
|
|
42
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBe(1)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('prefers the last step that actually ran a model over a later bookkeeping step', () => {
|
|
46
|
+
const steps = [
|
|
47
|
+
metered('initiative-interviewer', 4),
|
|
48
|
+
metered('initiative-analyst', 12),
|
|
49
|
+
metered('initiative-planner', 31),
|
|
50
|
+
// Runs no model, so it records no calls — and must not shadow the planner's telemetry.
|
|
51
|
+
step('initiative-committer', { startedAt: 2_000 }),
|
|
52
|
+
]
|
|
53
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBe(2)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it('ignores a metered step belonging to another window', () => {
|
|
57
|
+
const steps = [metered('initiative-interviewer', 9), step('initiative-analyst')]
|
|
58
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBe(1)
|
|
59
|
+
expect(resultViewStepIndex(steps, 'initiative-planning')).toBe(0)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('treats a zero-call rollup as unmetered', () => {
|
|
63
|
+
const steps = [
|
|
64
|
+
metered('initiative-analyst', 5),
|
|
65
|
+
step('initiative-planner', {
|
|
66
|
+
startedAt: 3_000,
|
|
67
|
+
metrics: { calls: 0 } as PipelineStep['metrics'],
|
|
68
|
+
}),
|
|
69
|
+
]
|
|
70
|
+
// The analyst keeps the tier-1 match: a rollup that recorded nothing is not telemetry, so
|
|
71
|
+
// the later step doesn't shadow it just for having a `metrics` object.
|
|
72
|
+
expect(resultViewStepIndex(steps, 'initiative-tracker')).toBe(0)
|
|
73
|
+
})
|
|
74
|
+
})
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { computed } from 'vue'
|
|
2
|
+
import type { ExecutionInstance, PipelineStep } from '~/types/execution'
|
|
3
|
+
import { agentKindMeta } from '~/utils/catalog'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the `StepRunMeta` prop bundle for a dedicated result window, for BOTH of the ways
|
|
7
|
+
* such a window opens (see `stores/ui/resultViews.ts`):
|
|
8
|
+
*
|
|
9
|
+
* - the PIPELINE path (`dispatchStepView`), which carries `instanceId` + `stepIndex` — the step
|
|
10
|
+
* is exactly the one that was clicked, as every step-backed window already assumes; and
|
|
11
|
+
* - an OFF-PATH open (`ui.openInitiativeTracker`, `ui.openInitiativePlanning`, …), which carries
|
|
12
|
+
* only a block id, because the human entered from the board card or the inspector rather than
|
|
13
|
+
* from the run's timeline.
|
|
14
|
+
*
|
|
15
|
+
* Windows that are reachable BOTH ways used to fall back to no metadata at all on the second
|
|
16
|
+
* route, which is how the initiative windows ended up with no run details, no model and no token
|
|
17
|
+
* telemetry — on the entry point people actually use. The fallback resolves the block's live run
|
|
18
|
+
* and picks the step this window represents, so the two routes report the same facts.
|
|
19
|
+
*/
|
|
20
|
+
export function useResultViewRunMeta(
|
|
21
|
+
viewId: string,
|
|
22
|
+
source: {
|
|
23
|
+
blockId: () => string | null
|
|
24
|
+
instanceId: () => string | null
|
|
25
|
+
stepIndex: () => number | null
|
|
26
|
+
},
|
|
27
|
+
) {
|
|
28
|
+
const execution = useExecutionStore()
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The run the metadata describes: the dispatched one on the pipeline path, else the block's
|
|
32
|
+
* live run. Read reactively rather than resolved once at open time, so a window left open
|
|
33
|
+
* across a run start/advance follows it instead of freezing on whatever existed at mount.
|
|
34
|
+
*/
|
|
35
|
+
const instance = computed<ExecutionInstance | null>(() => {
|
|
36
|
+
const id = source.instanceId()
|
|
37
|
+
if (id !== null) return execution.getInstance(id) ?? null
|
|
38
|
+
const blockId = source.blockId()
|
|
39
|
+
return blockId ? (execution.getByBlock(blockId) ?? null) : null
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
const stepNumber = computed<number | null>(() => {
|
|
43
|
+
const index = source.stepIndex()
|
|
44
|
+
if (index !== null) return index
|
|
45
|
+
return instance.value ? resultViewStepIndex(instance.value.steps, viewId) : null
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
const step = computed<PipelineStep | null>(() => {
|
|
49
|
+
const index = stepNumber.value
|
|
50
|
+
if (index === null) return null
|
|
51
|
+
return instance.value?.steps[index] ?? null
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
instance,
|
|
56
|
+
step,
|
|
57
|
+
/** The run id, for the copyable field + the "View all calls" observability link. */
|
|
58
|
+
instanceId: computed(() => instance.value?.id),
|
|
59
|
+
/** 1-based position, as `StepRunMeta` renders it ("N of M"). */
|
|
60
|
+
position: computed(() => (stepNumber.value === null ? undefined : stepNumber.value + 1)),
|
|
61
|
+
totalSteps: computed(() => instance.value?.steps.length),
|
|
62
|
+
runFailed: computed(() => instance.value?.status === 'failed'),
|
|
63
|
+
failureAt: computed(() => instance.value?.failure?.occurredAt),
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The step an off-path open should report, among the run's steps whose agent kind declares
|
|
69
|
+
* `viewId` as its dedicated result view (the same `resultView` seam `dispatchStepView` routes
|
|
70
|
+
* on, so the mapping can never drift from the window registry).
|
|
71
|
+
*
|
|
72
|
+
* Precedence, most to least specific:
|
|
73
|
+
*
|
|
74
|
+
* 1. the last step that has actually RUN A MODEL. A window's kind set can span both model-running
|
|
75
|
+
* steps and bookkeeping ones — the initiative tracker is registered for the analyst and the
|
|
76
|
+
* planner but also for `initiative-committer`, which runs no model — and anchoring on the last
|
|
77
|
+
* STARTED step alone would hand a human who opened the window for its telemetry the one step
|
|
78
|
+
* guaranteed to have none.
|
|
79
|
+
* 2. the last started step, so a run mid-flight (or one whose telemetry sink isn't wired) still
|
|
80
|
+
* reports timing, model and run id rather than nothing.
|
|
81
|
+
* 3. the first declaring step, so a run that hasn't reached any of them yet still names which
|
|
82
|
+
* step is coming and how far into the pipeline it sits.
|
|
83
|
+
*
|
|
84
|
+
* Null when the run declares none — the caller hides the sidebar rather than rendering an empty one.
|
|
85
|
+
*/
|
|
86
|
+
export function resultViewStepIndex(steps: readonly PipelineStep[], viewId: string): number | null {
|
|
87
|
+
let first: number | null = null
|
|
88
|
+
let lastStarted: number | null = null
|
|
89
|
+
let lastMetered: number | null = null
|
|
90
|
+
for (let i = 0; i < steps.length; i++) {
|
|
91
|
+
const step = steps[i]
|
|
92
|
+
if (!step || agentKindMeta(step.agentKind).resultView !== viewId) continue
|
|
93
|
+
if (first === null) first = i
|
|
94
|
+
if (step.startedAt != null) lastStarted = i
|
|
95
|
+
if ((step.metrics?.calls ?? 0) > 0) lastMetered = i
|
|
96
|
+
}
|
|
97
|
+
return lastMetered ?? lastStarted ?? first
|
|
98
|
+
}
|
|
@@ -170,16 +170,17 @@ re-deriving the "which run is this / how did the model do" facts. **Composables*
|
|
|
170
170
|
**components** must be named through the `#components` virtual module (see the boxed note
|
|
171
171
|
below). Compose these:
|
|
172
172
|
|
|
173
|
-
| Building block
|
|
174
|
-
|
|
|
175
|
-
| `ResultWindowShell`
|
|
176
|
-
| `StepRunMeta`
|
|
177
|
-
| `MarkdownProse`
|
|
178
|
-
| `CopyButton`
|
|
179
|
-
| `InspectorSection`
|
|
180
|
-
| `useResultView(id)`
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
173
|
+
| Building block | Reference it as | What it gives you |
|
|
174
|
+
| ----------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
175
|
+
| `ResultWindowShell` | `#components` → `PanelsResultWindowShell` | The shared modal chrome for a result window — backdrop, header (icon/title/subtitle), a `#header-extras` slot, close button, and the modal _behaviour_ (focus-trap + return, body-scroll lock, shared-stack Escape via `useModalBehavior`). Pass `stepRef` to surface the shared "restart from here" control. |
|
|
176
|
+
| `StepRunMeta` | `#components` → `PanelsStepRunMeta` | **The shared run-details metadata block** every agent window reuses: step position, live duration, model, run id, and the LLM model-activity rollup. Drop it into your window's sidebar — never reinvent run metadata. |
|
|
177
|
+
| `MarkdownProse` | `#components` → `CommonMarkdownProse` | Render an agent's prose output as markdown. |
|
|
178
|
+
| `CopyButton` | `#components` → `CommonCopyButton` | The shared copy-to-clipboard affordance. |
|
|
179
|
+
| `InspectorSection` | `#components` → `PanelsInspectorSection` | The collapsible inspector-section shell (chevron header, count, hint) so a consumer panel reads like a built-in one. |
|
|
180
|
+
| `useResultView(id)` | auto-imported | The window seam contract: `{ open, blockId, instanceId, stepIndex, close }` (+ an `onOpen` loader for windows that fetch, and an `onClose` flush). Escape is owned by the shell, not here. |
|
|
181
|
+
| `useResultViewRunMeta(id, …)` | auto-imported | The `StepRunMeta` prop bundle (`{ step, instanceId, position, totalSteps, runFailed, failureAt }`), resolved for BOTH ways a window opens. A window reachable off-path — from a board card or the inspector — carries no `stepIndex`, so wiring `StepRunMeta` straight off `useResultView` leaves it blank on exactly that route; this resolves the block's live run and the step your view id declares instead. |
|
|
182
|
+
| `usePanelSubject<T>()` | `@modular-vue/core` | Read the block injected into an inspector panel by `<PanelsOutlet>`. |
|
|
183
|
+
| `useAppOverlays()` | auto-imported | Open / close your own top-level overlays: `{ open(id, subject?), close(), active }`. The store-free seam a nav `run` closure uses to open an `appOverlays`-slot component (see "Top-level overlays"). |
|
|
183
184
|
|
|
184
185
|
> **Reference layer components through `#components`, not bare tags.** Nuxt auto-registers a
|
|
185
186
|
> layer's components under a **path-derived** name (`components/panels/ResultWindowShell.vue`
|
|
@@ -98,11 +98,18 @@ describe('inspector panel group', () => {
|
|
|
98
98
|
expect(visibleIds(block('epic'))).toEqual(['epic-children'])
|
|
99
99
|
})
|
|
100
100
|
|
|
101
|
-
// An initiative
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
// An initiative shares two of the task body's panels: the CONTEXT sections (the
|
|
102
|
+
// create-initiative modal attaches the same documents/issues, and the planning pipeline reads
|
|
103
|
+
// them, so the inspector must surface them) and the execution panel (planning is an ordinary
|
|
104
|
+
// run — and that panel carries the only Stop / Discard-run controls that unwedge a stalled
|
|
105
|
+
// one). Order is pinned too: identity + controls, the context it was given, then the run.
|
|
106
|
+
it('an initiative shows its inspector, then the shared context + execution panels', () => {
|
|
107
|
+
expect(visibleIds(block('initiative'))).toEqual([
|
|
108
|
+
'initiative-inspector',
|
|
109
|
+
'task-context-docs',
|
|
110
|
+
'task-context-issues',
|
|
111
|
+
'task-execution',
|
|
112
|
+
])
|
|
106
113
|
})
|
|
107
114
|
|
|
108
115
|
it('no subject selected resolves to no panels', () => {
|
|
@@ -82,6 +82,14 @@ const isFrame = (b: Block) => b.level === 'frame'
|
|
|
82
82
|
* Before this it had no run surface at all, which is why a stuck plan was a dead end.
|
|
83
83
|
*/
|
|
84
84
|
const hasRuns = (b: Block) => isTask(b) || b.level === 'initiative'
|
|
85
|
+
/**
|
|
86
|
+
* A block that carries attached CONTEXT (imported documents + tracker issues). The
|
|
87
|
+
* create-initiative modal stages the same attachments the add-task modal does and links them
|
|
88
|
+
* to the initiative block, and the whole planning pipeline reads them — so an initiative
|
|
89
|
+
* whose inspector never showed them left the user with no evidence the attachment landed and
|
|
90
|
+
* no way to reach the source. Same panels, same store reads (both are keyed by block id only).
|
|
91
|
+
*/
|
|
92
|
+
const takesContext = (b: Block) => isTask(b) || b.level === 'initiative'
|
|
85
93
|
/** frame OR module — the "container" panels. */
|
|
86
94
|
const isContainer = (b: Block) => b.level === 'frame' || b.level === 'module'
|
|
87
95
|
/**
|
|
@@ -111,8 +119,9 @@ const isDeployableFrame = (b: Block) => isFrame(b) && b.type !== 'document'
|
|
|
111
119
|
* extensibility value.
|
|
112
120
|
*/
|
|
113
121
|
export const INSPECTOR_PANEL_SPECS: readonly InspectorPanelSpec[] = [
|
|
114
|
-
|
|
115
|
-
{ id: 'task-context-
|
|
122
|
+
// Shared with the initiative body — an initiative takes the same attachments a task does.
|
|
123
|
+
{ id: 'task-context-docs', order: 10, when: takesContext },
|
|
124
|
+
{ id: 'task-context-issues', order: 20, when: takesContext },
|
|
116
125
|
{ id: 'recurring-schedule', order: 30, when: isTask },
|
|
117
126
|
// Shared with the initiative body — the panel renders a RUN, and an initiative has one.
|
|
118
127
|
{ id: 'task-execution', order: 40, when: hasRuns },
|
|
@@ -133,8 +142,8 @@ export const INSPECTOR_PANEL_SPECS: readonly InspectorPanelSpec[] = [
|
|
|
133
142
|
// test-infra and release-health panels above it.
|
|
134
143
|
{ id: 'service-validation-checks', order: 180, when: isDeployableFrame },
|
|
135
144
|
{ id: 'epic-children', order: 200, when: (b) => b.level === 'epic' },
|
|
136
|
-
// Ordered
|
|
137
|
-
//
|
|
145
|
+
// Ordered FIRST so an initiative reads the way a task does: its own identity + controls, then
|
|
146
|
+
// the context it was given (10/20), then the run detail (40). Levels never overlap, so this
|
|
138
147
|
// number only ever competes with the task ids the initiative body doesn't render.
|
|
139
|
-
{ id: 'initiative-inspector', order:
|
|
148
|
+
{ id: 'initiative-inspector', order: 5, when: (b) => b.level === 'initiative' },
|
|
140
149
|
]
|
package/i18n/locales/de.json
CHANGED
|
@@ -3336,10 +3336,12 @@
|
|
|
3336
3336
|
"taskDocs": {
|
|
3337
3337
|
"heading": "Kontextdokumente",
|
|
3338
3338
|
"hint": "Dokumente, die dieser Aufgabe als Kontext angehängt sind. Ihr Inhalt wird den Agents gegeben, die an der Aufgabe arbeiten.",
|
|
3339
|
+
"hintInitiative": "Dokumente, die dieser Initiative als Kontext angehängt sind. Ihr Inhalt wird den Planungsagenten gegeben, die den Plan entwerfen.",
|
|
3339
3340
|
"attach": "Anhängen",
|
|
3340
3341
|
"connectSource": "Quelle verbinden",
|
|
3341
3342
|
"connectSourceNamed": "{source} verbinden",
|
|
3342
3343
|
"empty": "Hängen Sie eine Anforderung, ein RFC oder ein PRD an, damit Agents es beim Umsetzen dieser Aufgabe sehen.",
|
|
3344
|
+
"emptyInitiative": "Hängen Sie eine Anforderung, ein RFC oder ein PRD an, damit die Planungsagenten es beim Entwerfen dieser Initiative lesen.",
|
|
3343
3345
|
"attached": "Dokument angehängt"
|
|
3344
3346
|
},
|
|
3345
3347
|
"templates": {
|
|
@@ -3382,11 +3384,13 @@
|
|
|
3382
3384
|
"contextIssues": {
|
|
3383
3385
|
"title": "Kontext-Issues",
|
|
3384
3386
|
"hint": "Tracker-Issues, die dieser Aufgabe als Kontext angehängt sind. Ihr Inhalt wird den Agents gegeben, die an der Aufgabe arbeiten.",
|
|
3387
|
+
"hintInitiative": "Tracker-Issues, die dieser Initiative als Kontext angehängt sind. Ihr Inhalt wird den Planungsagenten gegeben, die den Plan entwerfen.",
|
|
3385
3388
|
"attach": "Anhängen",
|
|
3386
3389
|
"connectSource": "Quelle verbinden",
|
|
3387
3390
|
"connectSourceNamed": "{source} verbinden",
|
|
3388
3391
|
"attached": "Issue angehängt",
|
|
3389
|
-
"emptyHint": "Hängen Sie ein Jira-Issue an, damit Agents seine Beschreibung und Kommentare beim Umsetzen dieser Aufgabe sehen."
|
|
3392
|
+
"emptyHint": "Hängen Sie ein Jira-Issue an, damit Agents seine Beschreibung und Kommentare beim Umsetzen dieser Aufgabe sehen.",
|
|
3393
|
+
"emptyHintInitiative": "Hängen Sie ein Jira-Issue an, damit die Planungsagenten seine Beschreibung und Kommentare beim Entwerfen dieser Initiative sehen."
|
|
3390
3394
|
},
|
|
3391
3395
|
"import": {
|
|
3392
3396
|
"titleCreate": "Aufgabe aus Issue erstellen",
|
package/i18n/locales/en.json
CHANGED
|
@@ -3756,10 +3756,12 @@
|
|
|
3756
3756
|
"taskDocs": {
|
|
3757
3757
|
"heading": "Context documents",
|
|
3758
3758
|
"hint": "Documents attached to this task as context. Their content is given to the agents that work on the task.",
|
|
3759
|
+
"hintInitiative": "Documents attached to this initiative as context. Their content is given to the planning agents that shape it.",
|
|
3759
3760
|
"attach": "Attach",
|
|
3760
3761
|
"connectSource": "Connect a source",
|
|
3761
3762
|
"connectSourceNamed": "Connect {source}",
|
|
3762
3763
|
"empty": "Attach a requirement, RFC or PRD so agents see it while implementing this task.",
|
|
3764
|
+
"emptyInitiative": "Attach a requirement, RFC or PRD so the planning agents read it while shaping this initiative.",
|
|
3763
3765
|
"attached": "Document attached"
|
|
3764
3766
|
},
|
|
3765
3767
|
"templates": {
|
|
@@ -3802,11 +3804,13 @@
|
|
|
3802
3804
|
"contextIssues": {
|
|
3803
3805
|
"title": "Context issues",
|
|
3804
3806
|
"hint": "Tracker issues attached to this task as context. Their content is given to the agents that work on the task.",
|
|
3807
|
+
"hintInitiative": "Tracker issues attached to this initiative as context. Their content is given to the planning agents that shape it.",
|
|
3805
3808
|
"attach": "Attach",
|
|
3806
3809
|
"connectSource": "Connect a source",
|
|
3807
3810
|
"connectSourceNamed": "Connect {source}",
|
|
3808
3811
|
"attached": "Issue attached",
|
|
3809
|
-
"emptyHint": "Attach a Jira issue so agents see its description and comments while implementing this task."
|
|
3812
|
+
"emptyHint": "Attach a Jira issue so agents see its description and comments while implementing this task.",
|
|
3813
|
+
"emptyHintInitiative": "Attach a Jira issue so the planning agents see its description and comments while shaping this initiative."
|
|
3810
3814
|
},
|
|
3811
3815
|
"import": {
|
|
3812
3816
|
"titleCreate": "Create task from issue",
|
package/i18n/locales/es.json
CHANGED
|
@@ -3648,10 +3648,12 @@
|
|
|
3648
3648
|
"taskDocs": {
|
|
3649
3649
|
"heading": "Documentos de contexto",
|
|
3650
3650
|
"hint": "Documentos adjuntos a esta tarea como contexto. Su contenido se entrega a los agentes que trabajan en la tarea.",
|
|
3651
|
+
"hintInitiative": "Documentos adjuntos a esta iniciativa como contexto. Su contenido se entrega a los agentes de planificación que redactan el plan.",
|
|
3651
3652
|
"attach": "Adjuntar",
|
|
3652
3653
|
"connectSource": "Conectar una fuente",
|
|
3653
3654
|
"connectSourceNamed": "Conectar {source}",
|
|
3654
3655
|
"empty": "Adjunta un requisito, RFC o PRD para que los agentes lo vean mientras implementan esta tarea.",
|
|
3656
|
+
"emptyInitiative": "Adjunta un requisito, RFC o PRD para que los agentes de planificación lo lean al redactar esta iniciativa.",
|
|
3655
3657
|
"attached": "Documento adjuntado"
|
|
3656
3658
|
},
|
|
3657
3659
|
"templates": {
|
|
@@ -3694,11 +3696,13 @@
|
|
|
3694
3696
|
"contextIssues": {
|
|
3695
3697
|
"title": "Incidencias de contexto",
|
|
3696
3698
|
"hint": "Incidencias del tracker adjuntas a esta tarea como contexto. Su contenido se entrega a los agentes que trabajan en la tarea.",
|
|
3699
|
+
"hintInitiative": "Incidencias del tracker adjuntas a esta iniciativa como contexto. Su contenido se entrega a los agentes de planificación que redactan el plan.",
|
|
3697
3700
|
"attach": "Adjuntar",
|
|
3698
3701
|
"connectSource": "Conectar una fuente",
|
|
3699
3702
|
"connectSourceNamed": "Conectar {source}",
|
|
3700
3703
|
"attached": "Incidencia adjuntada",
|
|
3701
|
-
"emptyHint": "Adjunta una incidencia de Jira para que los agentes vean su descripción y comentarios al implementar esta tarea."
|
|
3704
|
+
"emptyHint": "Adjunta una incidencia de Jira para que los agentes vean su descripción y comentarios al implementar esta tarea.",
|
|
3705
|
+
"emptyHintInitiative": "Adjunta una incidencia de Jira para que los agentes de planificación vean su descripción y comentarios al redactar esta iniciativa."
|
|
3702
3706
|
},
|
|
3703
3707
|
"import": {
|
|
3704
3708
|
"titleCreate": "Crear tarea desde incidencia",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -3648,10 +3648,12 @@
|
|
|
3648
3648
|
"taskDocs": {
|
|
3649
3649
|
"heading": "Documents de contexte",
|
|
3650
3650
|
"hint": "Documents joints à cette tâche comme contexte. Leur contenu est fourni aux agents qui travaillent sur la tâche.",
|
|
3651
|
+
"hintInitiative": "Documents joints à cette initiative comme contexte. Leur contenu est fourni aux agents de planification qui rédigent le plan.",
|
|
3651
3652
|
"attach": "Joindre",
|
|
3652
3653
|
"connectSource": "Connecter une source",
|
|
3653
3654
|
"connectSourceNamed": "Connecter {source}",
|
|
3654
3655
|
"empty": "Joignez une exigence, un RFC ou un PRD pour que les agents le voient pendant l'implémentation de cette tâche.",
|
|
3656
|
+
"emptyInitiative": "Joignez une exigence, une RFC ou un PRD pour que les agents de planification le lisent en rédigeant cette initiative.",
|
|
3655
3657
|
"attached": "Document joint"
|
|
3656
3658
|
},
|
|
3657
3659
|
"templates": {
|
|
@@ -3694,11 +3696,13 @@
|
|
|
3694
3696
|
"contextIssues": {
|
|
3695
3697
|
"title": "Tickets de contexte",
|
|
3696
3698
|
"hint": "Tickets du tracker joints à cette tâche comme contexte. Leur contenu est fourni aux agents qui travaillent sur la tâche.",
|
|
3699
|
+
"hintInitiative": "Tickets du tracker joints à cette initiative comme contexte. Leur contenu est fourni aux agents de planification qui rédigent le plan.",
|
|
3697
3700
|
"attach": "Joindre",
|
|
3698
3701
|
"connectSource": "Connecter une source",
|
|
3699
3702
|
"connectSourceNamed": "Connecter {source}",
|
|
3700
3703
|
"attached": "Ticket joint",
|
|
3701
|
-
"emptyHint": "Joignez un ticket Jira pour que les agents voient sa description et ses commentaires lors de l'implémentation de cette tâche."
|
|
3704
|
+
"emptyHint": "Joignez un ticket Jira pour que les agents voient sa description et ses commentaires lors de l'implémentation de cette tâche.",
|
|
3705
|
+
"emptyHintInitiative": "Joignez un ticket Jira pour que les agents de planification voient sa description et ses commentaires en rédigeant cette initiative."
|
|
3702
3706
|
},
|
|
3703
3707
|
"import": {
|
|
3704
3708
|
"titleCreate": "Créer une tâche à partir d'un ticket",
|
package/i18n/locales/he.json
CHANGED
|
@@ -3659,10 +3659,12 @@
|
|
|
3659
3659
|
"taskDocs": {
|
|
3660
3660
|
"heading": "מסמכי הקשר",
|
|
3661
3661
|
"hint": "מסמכים המצורפים למשימה זו כהקשר. תוכנם נמסר לסוכנים שעובדים על המשימה.",
|
|
3662
|
+
"hintInitiative": "מסמכים המצורפים ליוזמה זו כהקשר. תוכנם נמסר לסוכני התכנון שמגבשים את התוכנית.",
|
|
3662
3663
|
"attach": "צרף",
|
|
3663
3664
|
"connectSource": "חבר מקור",
|
|
3664
3665
|
"connectSourceNamed": "חבר את {source}",
|
|
3665
3666
|
"empty": "צרף דרישה, RFC או PRD כדי שהסוכנים יראו אותם בעת מימוש משימה זו.",
|
|
3667
|
+
"emptyInitiative": "צרף דרישה, RFC או PRD כדי שסוכני התכנון יקראו אותם בעת גיבוש יוזמה זו.",
|
|
3666
3668
|
"attached": "המסמך צורף"
|
|
3667
3669
|
},
|
|
3668
3670
|
"templates": {
|
|
@@ -3705,11 +3707,13 @@
|
|
|
3705
3707
|
"contextIssues": {
|
|
3706
3708
|
"title": "ניושני הקשר",
|
|
3707
3709
|
"hint": "כרטיסי ה-tracker המצורפים למשימה זו כהקשר. תוכנם נמסר לסוכנים שעובדים על המשימה.",
|
|
3710
|
+
"hintInitiative": "כרטיסי ה-tracker המצורפים ליוזמה זו כהקשר. תוכנם נמסר לסוכני התכנון שמגבשים את התוכנית.",
|
|
3708
3711
|
"attach": "צרף",
|
|
3709
3712
|
"connectSource": "חבר מקור",
|
|
3710
3713
|
"connectSourceNamed": "חבר את {source}",
|
|
3711
3714
|
"attached": "הניושן צורף",
|
|
3712
|
-
"emptyHint": "צרף ניושן Jira כדי שסוכנים יראו את התיאור וההערות שלו בעת מימוש משימה זו."
|
|
3715
|
+
"emptyHint": "צרף ניושן Jira כדי שסוכנים יראו את התיאור וההערות שלו בעת מימוש משימה זו.",
|
|
3716
|
+
"emptyHintInitiative": "צרף ניושן Jira כדי שסוכני התכנון יראו את התיאור וההערות שלו בעת גיבוש יוזמה זו."
|
|
3713
3717
|
},
|
|
3714
3718
|
"import": {
|
|
3715
3719
|
"titleCreate": "צור משימה מניושן",
|
package/i18n/locales/it.json
CHANGED
|
@@ -3336,10 +3336,12 @@
|
|
|
3336
3336
|
"taskDocs": {
|
|
3337
3337
|
"heading": "Documenti di contesto",
|
|
3338
3338
|
"hint": "Documenti allegati a questa attività come contesto. Il loro contenuto viene fornito agli agenti che lavorano sull'attività.",
|
|
3339
|
+
"hintInitiative": "Documenti allegati a questa iniziativa come contesto. Il loro contenuto viene fornito agli agenti di pianificazione che redigono il piano.",
|
|
3339
3340
|
"attach": "Allega",
|
|
3340
3341
|
"connectSource": "Collega una fonte",
|
|
3341
3342
|
"connectSourceNamed": "Collega {source}",
|
|
3342
3343
|
"empty": "Allega un requisito, un RFC o un PRD così gli agenti lo vedono durante l'implementazione di questa attività.",
|
|
3344
|
+
"emptyInitiative": "Allega un requisito, un RFC o un PRD così gli agenti di pianificazione lo leggono mentre redigono questa iniziativa.",
|
|
3343
3345
|
"attached": "Documento allegato"
|
|
3344
3346
|
},
|
|
3345
3347
|
"templates": {
|
|
@@ -3382,11 +3384,13 @@
|
|
|
3382
3384
|
"contextIssues": {
|
|
3383
3385
|
"title": "Issue di contesto",
|
|
3384
3386
|
"hint": "Issue del tracker allegate a questa attività come contesto. Il loro contenuto viene fornito agli agenti che lavorano sull'attività.",
|
|
3387
|
+
"hintInitiative": "Issue del tracker allegate a questa iniziativa come contesto. Il loro contenuto viene fornito agli agenti di pianificazione che redigono il piano.",
|
|
3385
3388
|
"attach": "Allega",
|
|
3386
3389
|
"connectSource": "Collega una fonte",
|
|
3387
3390
|
"connectSourceNamed": "Collega {source}",
|
|
3388
3391
|
"attached": "Issue allegata",
|
|
3389
|
-
"emptyHint": "Allega una issue Jira così gli agenti vedono la sua descrizione e i commenti durante l'implementazione di questa attività."
|
|
3392
|
+
"emptyHint": "Allega una issue Jira così gli agenti vedono la sua descrizione e i commenti durante l'implementazione di questa attività.",
|
|
3393
|
+
"emptyHintInitiative": "Allega una issue Jira così gli agenti di pianificazione vedono la sua descrizione e i commenti mentre redigono questa iniziativa."
|
|
3390
3394
|
},
|
|
3391
3395
|
"import": {
|
|
3392
3396
|
"titleCreate": "Crea attività da una issue",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -3660,10 +3660,12 @@
|
|
|
3660
3660
|
"taskDocs": {
|
|
3661
3661
|
"heading": "コンテキストドキュメント",
|
|
3662
3662
|
"hint": "このタスクにコンテキストとして添付されたドキュメント。その内容はタスクに取り組むエージェントに渡されます。",
|
|
3663
|
+
"hintInitiative": "このイニシアチブにコンテキストとして添付されたドキュメント。その内容は計画を作成する計画エージェントに渡されます。",
|
|
3663
3664
|
"attach": "添付",
|
|
3664
3665
|
"connectSource": "ソースを接続",
|
|
3665
3666
|
"connectSourceNamed": "{source} を接続",
|
|
3666
3667
|
"empty": "要件、RFC、PRD を添付すると、このタスクの実装中にエージェントが参照できます。",
|
|
3668
|
+
"emptyInitiative": "要件、RFC、PRD を添付すると、このイニシアチブの計画作成中に計画エージェントが参照できます。",
|
|
3667
3669
|
"attached": "ドキュメントを添付しました"
|
|
3668
3670
|
},
|
|
3669
3671
|
"templates": {
|
|
@@ -3706,11 +3708,13 @@
|
|
|
3706
3708
|
"contextIssues": {
|
|
3707
3709
|
"title": "コンテキスト課題",
|
|
3708
3710
|
"hint": "このタスクにコンテキストとして添付されたトラッカーの課題。その内容はタスクに取り組むエージェントに渡されます。",
|
|
3711
|
+
"hintInitiative": "このイニシアチブにコンテキストとして添付されたトラッカーの課題。その内容は計画を作成する計画エージェントに渡されます。",
|
|
3709
3712
|
"attach": "添付",
|
|
3710
3713
|
"connectSource": "ソースを接続",
|
|
3711
3714
|
"connectSourceNamed": "{source} を接続",
|
|
3712
3715
|
"attached": "課題を添付しました",
|
|
3713
|
-
"emptyHint": "Jira 課題を添付すると、このタスクの実装中にエージェントがその説明とコメントを参照できます。"
|
|
3716
|
+
"emptyHint": "Jira 課題を添付すると、このタスクの実装中にエージェントがその説明とコメントを参照できます。",
|
|
3717
|
+
"emptyHintInitiative": "Jira 課題を添付すると、このイニシアチブの計画作成中に計画エージェントがその説明とコメントを参照できます。"
|
|
3714
3718
|
},
|
|
3715
3719
|
"import": {
|
|
3716
3720
|
"titleCreate": "課題からタスクを作成",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -3648,10 +3648,12 @@
|
|
|
3648
3648
|
"taskDocs": {
|
|
3649
3649
|
"heading": "Dokumenty kontekstowe",
|
|
3650
3650
|
"hint": "Dokumenty dołączone do tego zadania jako kontekst. Ich treść trafia do agentów pracujących nad zadaniem.",
|
|
3651
|
+
"hintInitiative": "Dokumenty dołączone do tej inicjatywy jako kontekst. Ich treść trafia do agentów planowania tworzących plan.",
|
|
3651
3652
|
"attach": "Dołącz",
|
|
3652
3653
|
"connectSource": "Połącz źródło",
|
|
3653
3654
|
"connectSourceNamed": "Połącz {source}",
|
|
3654
3655
|
"empty": "Dołącz wymaganie, dokument RFC lub PRD, aby agenci widzieli je podczas realizacji tego zadania.",
|
|
3656
|
+
"emptyInitiative": "Dołącz wymaganie, dokument RFC lub PRD, aby agenci planowania przeczytali je podczas tworzenia planu tej inicjatywy.",
|
|
3655
3657
|
"attached": "Dokument dołączony"
|
|
3656
3658
|
},
|
|
3657
3659
|
"templates": {
|
|
@@ -3694,11 +3696,13 @@
|
|
|
3694
3696
|
"contextIssues": {
|
|
3695
3697
|
"title": "Zgłoszenia kontekstowe",
|
|
3696
3698
|
"hint": "Zgłoszenia z trackera dołączone do tego zadania jako kontekst. Ich treść trafia do agentów pracujących nad zadaniem.",
|
|
3699
|
+
"hintInitiative": "Zgłoszenia z trackera dołączone do tej inicjatywy jako kontekst. Ich treść trafia do agentów planowania tworzących plan.",
|
|
3697
3700
|
"attach": "Dołącz",
|
|
3698
3701
|
"connectSource": "Połącz źródło",
|
|
3699
3702
|
"connectSourceNamed": "Połącz {source}",
|
|
3700
3703
|
"attached": "Dołączono zgłoszenie",
|
|
3701
|
-
"emptyHint": "Dołącz zgłoszenie Jira, aby agenci widzieli jego opis i komentarze podczas realizacji tego zadania."
|
|
3704
|
+
"emptyHint": "Dołącz zgłoszenie Jira, aby agenci widzieli jego opis i komentarze podczas realizacji tego zadania.",
|
|
3705
|
+
"emptyHintInitiative": "Dołącz zgłoszenie Jira, aby agenci planowania widzieli jego opis i komentarze podczas tworzenia planu tej inicjatywy."
|
|
3702
3706
|
},
|
|
3703
3707
|
"import": {
|
|
3704
3708
|
"titleCreate": "Utwórz zadanie ze zgłoszenia",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -3660,10 +3660,12 @@
|
|
|
3660
3660
|
"taskDocs": {
|
|
3661
3661
|
"heading": "Bağlam belgeleri",
|
|
3662
3662
|
"hint": "Bu göreve bağlam olarak eklenen belgeler. İçerikleri görev üzerinde çalışan ajanlara iletilir.",
|
|
3663
|
+
"hintInitiative": "Bu girişime bağlam olarak eklenen belgeler. İçerikleri planı hazırlayan planlama ajanlarına iletilir.",
|
|
3663
3664
|
"attach": "Ekle",
|
|
3664
3665
|
"connectSource": "Bir kaynak bağla",
|
|
3665
3666
|
"connectSourceNamed": "{source} bağla",
|
|
3666
3667
|
"empty": "Agentların bu görevi uygularken görebilmesi için bir gereksinim, RFC veya PRD ekle.",
|
|
3668
|
+
"emptyInitiative": "Planlama ajanlarının bu girişimin planını hazırlarken okuyabilmesi için bir gereksinim, RFC veya PRD ekle.",
|
|
3667
3669
|
"attached": "Belge eklendi"
|
|
3668
3670
|
},
|
|
3669
3671
|
"templates": {
|
|
@@ -3706,11 +3708,13 @@
|
|
|
3706
3708
|
"contextIssues": {
|
|
3707
3709
|
"title": "Bağlam sorunları",
|
|
3708
3710
|
"hint": "Bu göreve bağlam olarak eklenen tracker sorunları. İçerikleri görev üzerinde çalışan ajanlara iletilir.",
|
|
3711
|
+
"hintInitiative": "Bu girişime bağlam olarak eklenen tracker sorunları. İçerikleri planı hazırlayan planlama ajanlarına iletilir.",
|
|
3709
3712
|
"attach": "Ekle",
|
|
3710
3713
|
"connectSource": "Bir kaynak bağla",
|
|
3711
3714
|
"connectSourceNamed": "{source} bağla",
|
|
3712
3715
|
"attached": "Sorun eklendi",
|
|
3713
|
-
"emptyHint": "Agentların bu görevi uygularken açıklamasını ve yorumlarını görebilmesi için bir Jira sorunu ekle."
|
|
3716
|
+
"emptyHint": "Agentların bu görevi uygularken açıklamasını ve yorumlarını görebilmesi için bir Jira sorunu ekle.",
|
|
3717
|
+
"emptyHintInitiative": "Planlama ajanlarının bu girişimin planını hazırlarken açıklamasını ve yorumlarını görebilmesi için bir Jira sorunu ekle."
|
|
3714
3718
|
},
|
|
3715
3719
|
"import": {
|
|
3716
3720
|
"titleCreate": "Sorundan görev oluştur",
|