@knoflows/engine 0.1.0-alpha.5 → 0.1.0-alpha.8

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 (62) hide show
  1. package/README.md +1 -1
  2. package/dist/engine.js +21 -19
  3. package/package.json +8 -4
  4. package/static/assets/i18n/en.json +109 -11
  5. package/static/assets/i18n/es.json +109 -11
  6. package/static/{chunk-BnjE7sDc.js → chunk-BEvII7Hn.js} +1 -1
  7. package/static/chunk-BIFLxIMS.js +66 -0
  8. package/static/chunk-BQgEbMSp.js +1 -0
  9. package/static/chunk-BYIP8zBR.js +1 -0
  10. package/static/chunk-BiLgez1m.js +1 -0
  11. package/static/chunk-BnnoOI-1.js +1 -0
  12. package/static/chunk-BrJS_1Y1.js +1 -0
  13. package/static/chunk-CB7iIlL9.js +1 -0
  14. package/static/chunk-CL0Sh0Qb.js +1 -0
  15. package/static/chunk-CNj32s8G.js +1 -0
  16. package/static/chunk-CQ708Y6F.js +1 -0
  17. package/static/chunk-CoKTfrti.js +1 -0
  18. package/static/{chunk-BqWiMcNp.js → chunk-Cuaj1Fgz.js} +1 -1
  19. package/static/chunk-CxgNB2C8.js +1 -0
  20. package/static/chunk-DO1B2M6l.js +1 -0
  21. package/static/chunk-DTLDtzu5.js +1 -0
  22. package/static/chunk-Dc_LNQ-q.js +1 -0
  23. package/static/chunk-DflfYru0.js +1 -0
  24. package/static/{chunk-CECejZs9.js → chunk-DjiFAEo3.js} +1 -1
  25. package/static/{chunk-D6KYmz2w.js → chunk-Dqtz3Iow.js} +1 -1
  26. package/static/chunk-DrlNmyyx.js +7 -0
  27. package/static/chunk-G2CzeazF.js +1 -0
  28. package/static/chunk-He--f9Sf.js +1 -0
  29. package/static/chunk-JcYd5MYJ.js +5 -0
  30. package/static/chunk-MRIst_Tv.js +1 -0
  31. package/static/{chunk-DS5k0b_s.js → chunk-Xv2Lx0k9.js} +1 -1
  32. package/static/{chunk-B4PXIvtd.js → chunk-bi3jOaJV.js} +1 -1
  33. package/static/chunk-fPx6gQSM.js +1 -0
  34. package/static/chunk-g1iNEPSG.js +1 -0
  35. package/static/chunk-mmWflnUN.js +1 -0
  36. package/static/index.html +2 -2
  37. package/static/main-R7YQQZVK.js +249 -0
  38. package/static/chunk--cAlvNjP.js +0 -1
  39. package/static/chunk-3tEYpnqu.js +0 -1
  40. package/static/chunk-4TrlkpZx.js +0 -1
  41. package/static/chunk-99HzEG7y.js +0 -1
  42. package/static/chunk-BEPCHPAV.js +0 -1
  43. package/static/chunk-BJ_zTxjo.js +0 -1
  44. package/static/chunk-BaL0hYvK.js +0 -1
  45. package/static/chunk-BvGpCrD9.js +0 -7
  46. package/static/chunk-Byfh9OPw.js +0 -1
  47. package/static/chunk-C5kOvUkS.js +0 -1
  48. package/static/chunk-C67ITweo.js +0 -1
  49. package/static/chunk-CWRAmEOi.js +0 -1
  50. package/static/chunk-Ca9rxJZS.js +0 -1
  51. package/static/chunk-CbG3rfKf.js +0 -66
  52. package/static/chunk-Cdhqfnmn.js +0 -1
  53. package/static/chunk-Cgq1n6kP.js +0 -1
  54. package/static/chunk-CpxvtoPc.js +0 -1
  55. package/static/chunk-DGw7ID-A.js +0 -1
  56. package/static/chunk-DZ8K8fY1.js +0 -1
  57. package/static/chunk-DrMwVUpq.js +0 -1
  58. package/static/chunk-VW6e_Kls.js +0 -1
  59. package/static/chunk-jDfyi4_G.js +0 -1
  60. package/static/chunk-qdbp1qcP.js +0 -1
  61. package/static/chunk-smuNKEab.js +0 -5
  62. package/static/main-5C7K2447.js +0 -249
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knoflows/engine",
3
- "version": "0.1.0-alpha.5",
3
+ "version": "0.1.0-alpha.8",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "bin": {
@@ -27,13 +27,17 @@
27
27
  "test:repos": "tsx src/persistence/test/repo-test.ts",
28
28
  "test:providers": "tsx src/providers/test/provider-test.ts",
29
29
  "test:secrets": "tsx src/secrets/secret-store.test.ts",
30
- "test:jira": "tsx src/providers/ticket/adf.test.ts && tsx src/providers/ticket/jira-ticket-provider.test.ts",
30
+ "test:jira": "tsx src/providers/ticket/adf.test.ts && tsx src/providers/ticket/jira-ticket-provider.test.ts && tsx src/providers/query-templates/jira-query-templates.test.ts",
31
+ "test:confluence": "tsx src/providers/documentation/confluence-documentation-provider.test.ts",
32
+ "test:github": "tsx src/providers/ticket/github-issues-provider.test.ts",
31
33
  "test:bitbucket": "tsx src/providers/repo/bitbucket-repo-provider.test.ts",
34
+ "test:registry": "tsx src/providers/provider-registry.service.test.ts",
32
35
  "test:claude-agent": "tsx src/providers/agent/claude-agent-provider.test.ts",
33
36
  "test:cursor-agent": "tsx src/providers/agent/cursor-agent-provider.test.ts",
37
+ "test:preview-models": "tsx src/providers/agent/preview-models.test.ts",
34
38
  "test:provider-status": "tsx src/providers/provider-status.test.ts",
35
- "test:runner": "tsx src/runner/test/resolve-view-subjects.test.ts && tsx src/runner/test/workflow-runner.agent-interaction.test.ts && tsx src/runner/test/workflow-runner.git-shell-provider.test.ts && tsx src/runner/test/workflow-runner.loop-subworkflow.test.ts && tsx src/runner/test/workflow-runner.batch-aggregate.test.ts && tsx src/runner/test/workflow-runner.agent-output-validation.test.ts",
36
- "test:api": "tsx src/api/test/api-test.ts && tsx src/api/test/boot-empty-secrets.test.ts && tsx src/api/test/providers-status.test.ts && tsx src/api/test/settings.test.ts && tsx src/api/test/query-templates.test.ts && tsx src/api/test/view-binding-shortcuts.test.ts",
39
+ "test:runner": "tsx src/runner/test/resolve-view-subjects.test.ts && tsx src/runner/test/workflow-runner.agent-interaction.test.ts && tsx src/runner/test/workflow-runner.git-shell-provider.test.ts && tsx src/runner/test/workflow-runner.loop-subworkflow.test.ts && tsx src/runner/test/workflow-runner.batch-aggregate.test.ts && tsx src/runner/test/workflow-runner.agent-output-validation.test.ts && tsx src/runner/test/workflow-runner.extended-action.test.ts && tsx src/runner/test/workflow-runner.registry-dispatch.test.ts",
40
+ "test:api": "tsx src/api/test/api-test.ts && tsx src/api/test/boot-empty-secrets.test.ts && tsx src/api/test/providers-status.test.ts && tsx src/api/test/settings.test.ts && tsx src/api/test/preview-models.test.ts && tsx src/api/test/query-templates.test.ts && tsx src/api/test/extended-actions.test.ts && tsx src/api/test/view-binding-shortcuts.test.ts",
37
41
  "test:workflows-ids": "tsx src/api/workflows/assign-missing-ids.test.ts",
38
42
  "test:listen-port": "tsx src/listen-port.test.ts",
39
43
  "test:spa-fallback": "tsx src/static/spa-fallback.test.ts"
@@ -6,8 +6,32 @@
6
6
  "nav.views": "Views",
7
7
  "nav.shortcuts": "Shortcuts",
8
8
  "nav.settings": "Settings",
9
- "shell.jobsWaiting": "Jobs waiting on you",
9
+ "shell.jobs": "Jobs",
10
10
  "shell.manage": "Manage",
11
+ "manage.tab.workflows": "Workflows",
12
+ "manage.tab.views": "Views & Shortcuts",
13
+ "manage.tab.providers": "Providers",
14
+ "manage.tab.preferences": "Preferences",
15
+ "manage.preferences.title": "Preferences",
16
+ "manage.preferences.body": "Engine preferences such as scheduler concurrency, worktree cleanup, and the default agent will live here.",
17
+ "manage.views.title": "Views & Shortcuts",
18
+ "manage.views.createView": "Create a View",
19
+ "manage.views.createShortcut": "Create a Shortcut",
20
+ "manage.views.emptyState": "No views or shortcuts yet. Create one to get started.",
21
+ "manage.views.column.name": "Name",
22
+ "manage.views.column.type": "Type",
23
+ "manage.views.column.workflow": "Bound workflow",
24
+ "manage.views.column.subjectType": "Subject type",
25
+ "manage.views.column.actions": "Actions",
26
+ "manage.views.type.view": "View",
27
+ "manage.views.type.shortcut": "Shortcut",
28
+ "manage.views.noSubjectType": "—",
29
+ "manage.views.edit": "Edit",
30
+ "manage.views.delete": "Delete",
31
+ "manage.views.deleteConfirmView": "Are you sure you want to delete this view?",
32
+ "manage.views.deleteConfirmShortcut": "Are you sure you want to delete this shortcut?",
33
+ "manage.views.deleteFailed": "Failed to delete",
34
+ "manage.views.loadFailed": "Failed to load views and shortcuts",
11
35
  "shell.group.tickets": "Tickets",
12
36
  "shell.group.pullRequests": "Pull Requests",
13
37
  "shell.group.documentation": "Documentation",
@@ -23,8 +47,8 @@
23
47
  "common.cancel": "Cancel",
24
48
  "common.loading": "Loading…",
25
49
  "common.errorGeneric": "Something went wrong",
26
- "jobs.title": "Kno — Start a Job",
27
- "jobs.lede": "Pick a single-cardinality workflow and start a Job. Watching and resume live on the Job detail page.",
50
+ "jobs.title": "Knoflows — Start a Job",
51
+ "jobs.lede": "Pick a workflow that runs one item at a time and start a Job. Watching and resume live on the Job detail page.",
28
52
  "jobs.start.heading": "Start a Job",
29
53
  "jobs.start.workflow": "Workflow",
30
54
  "jobs.start.subjectId": "subjectId",
@@ -89,6 +113,10 @@
89
113
  "jobs.list.empty": "No jobs match these filters.",
90
114
  "jobs.list.loadFailed": "Failed to load jobs",
91
115
  "jobs.list.filterAll": "All",
116
+ "jobs.list.running": "Currently Running",
117
+ "jobs.list.history": "History",
118
+ "jobs.list.runningEmpty": "No jobs are running.",
119
+ "jobs.list.historyEmpty": "No jobs match these filters.",
92
120
  "workflow-editor.titleNew": "New workflow",
93
121
  "workflow-editor.titleEdit": "Edit workflow · {{id}}",
94
122
  "workflow-editor.backToJobs": "Back to jobs",
@@ -97,15 +125,16 @@
97
125
  "workflow-editor.basics": "Basics",
98
126
  "workflow-editor.name": "Workflow name",
99
127
  "workflow-editor.appliesTo": "Runs on",
100
- "workflow-editor.cardinality.label": "Launch mode",
128
+ "workflow-editor.subjectHandling.label": "Items",
101
129
  "workflow-editor.description": "Description",
102
130
  "workflow-editor.subjectType.none": "Nothing, standalone workflow",
103
131
  "workflow-editor.subjectType.ticket": "Ticket",
104
132
  "workflow-editor.subjectType.pull_request": "Pull request",
105
133
  "workflow-editor.subjectType.documentation": "Documentation",
106
- "workflow-editor.cardinality.single": "Single",
107
- "workflow-editor.cardinality.batch": "Batch",
108
- "workflow-editor.cardinality.aggregate": "Aggregate",
134
+ "workflow-editor.subjectHandling.per-subject": "One at a time",
135
+ "workflow-editor.subjectHandling.collection": "As a group",
136
+ "workflow-editor.subjectHandling.help.per-subject": "Steps work on a single item. You can start one row, or run many independently with one notification when you run in bulk.",
137
+ "workflow-editor.subjectHandling.help.collection": "Steps see the whole selected set and produce one combined result.",
109
138
  "workflow-editor.notificationPolicy": "Notification policy",
110
139
  "workflow-editor.trigger.on_fail": "On failure",
111
140
  "workflow-editor.trigger.on_complete": "On completion",
@@ -130,10 +159,11 @@
130
159
  "step-list.moveDown": "Down",
131
160
  "step-list.remove": "Remove",
132
161
  "step-list.addStep": "Add step",
162
+ "step-list.unnamed": "Untitled",
133
163
  "step-list.name": "Name",
134
164
  "step-list.id": "Id",
135
165
  "step-list.idHint": "Generated from the step name — edit it directly if you want a different reference.",
136
- "step-list.objective": "Objective",
166
+ "step-list.objective": "Prompt",
137
167
  "step-list.knowledgeScope": "Knowledge scope",
138
168
  "step-list.knowledgeScopeHint": "Leave all unchecked to omit (all tiers).",
139
169
  "step-list.outputFormat.label": "Output format",
@@ -180,6 +210,20 @@
180
210
  "step-list.providerAction.post_comment": "Post comment",
181
211
  "step-list.providerAction.update_status": "Update status",
182
212
  "step-list.providerAction.get_content": "Get content",
213
+ "step-list.extendedAction.mode": "Action source",
214
+ "step-list.extendedAction.portable": "Portable action",
215
+ "step-list.extendedAction.extended": "Use an extended action",
216
+ "step-list.extendedAction.provider": "Provider",
217
+ "step-list.extendedAction.action": "Extended action",
218
+ "step-list.extendedAction.none": "Select an action",
219
+ "step-list.extendedAction.empty": "This provider has no extended actions",
220
+ "step-list.extendedAction.mismatch": "Requires {{required}} — {{active}} is currently configured",
221
+ "step-list.target.toggle": "Target a different subject",
222
+ "step-list.target.subjectType": "Subject type",
223
+ "step-list.target.source": "Provider instance",
224
+ "step-list.target.sourcePlaceholder": "Select an instance",
225
+ "step-list.target.subjectId": "Subject id",
226
+ "step-list.target.subjectIdHint": "Usually an interpolated reference to an earlier step, e.g. resolve-key",
183
227
  "step-list.knowledgeTier.user": "User",
184
228
  "step-list.knowledgeTier.organization": "Organization",
185
229
  "step-list.knowledgeTier.project": "Project",
@@ -189,7 +233,50 @@
189
233
  "step-list.onMaxIterations.continue": "Continue",
190
234
  "step-list.onMaxIterations.ask_human": "Ask human",
191
235
  "settings.title": "Settings",
192
- "settings.lede": "Choose which providers Kno uses, and store API keys. Keys take effect immediately; switching an implementation requires a restart.",
236
+ "settings.lede": "Configure provider instances and store API keys. Adding or changing an instance requires a restart; the default agent can be changed immediately.",
237
+ "settings.addProvider": "Add provider",
238
+ "settings.editProvider": "Edit provider",
239
+ "settings.addInstance": "Add provider instance",
240
+ "settings.addInstance.submit": "Add instance",
241
+ "settings.removeInstance": "Remove",
242
+ "settings.edit": "Edit",
243
+ "settings.delete": "Delete",
244
+ "settings.deleteConfirm": "Are you sure you want to delete this provider instance?",
245
+ "settings.kind.label": "Kind",
246
+ "settings.kind.subject": "Subject provider",
247
+ "settings.kind.agent": "Agent",
248
+ "settings.type.label": "Type",
249
+ "settings.typeOption.jira": "Jira",
250
+ "settings.typeOption.bitbucket": "Bitbucket",
251
+ "settings.typeOption.github": "GitHub Issues",
252
+ "settings.typeOption.confluence": "Confluence",
253
+ "settings.typeOption.manualTicket": "Manual (Ticket)",
254
+ "settings.typeOption.manualDocumentation": "Manual (Documentation)",
255
+ "settings.typeOption.claude": "Claude",
256
+ "settings.typeOption.cursor": "Cursor",
257
+ "settings.subjectType.label": "Subject type",
258
+ "settings.instanceId": "Instance id",
259
+ "settings.instanceIdHint": "Generated from the display name — edit it directly if you want a different id.",
260
+ "settings.displayName": "Display name",
261
+ "settings.displayNameRequired": "Display name is required",
262
+ "settings.defaultAgent.label": "Default agent",
263
+ "settings.defaultAgent.toggle": "Set as default agent",
264
+ "settings.column.displayName": "Display name",
265
+ "settings.column.type": "Type",
266
+ "settings.column.expiresOn": "Expires on",
267
+ "settings.column.default": "Default",
268
+ "settings.column.actions": "Actions",
269
+ "settings.expiresOn.label": "Expires on",
270
+ "settings.expiresOn.hint": "A manual reminder only — Knoflows does not check this date with the provider.",
271
+ "settings.ticket.github": "GitHub Issues",
272
+ "settings.github.username": "GitHub username",
273
+ "step-list.agentInstance.label": "Agent",
274
+ "step-list.agentInstance.default": "Use default agent",
275
+ "views.editor.instance": "Provider instance",
276
+ "views.editor.instancePlaceholder": "Select a provider instance",
277
+ "views.editor.instanceNeeded": "This view has no provider instance. Pick one to finish setup.",
278
+ "views.editor.noEligibleInstances": "No configured providers support this workflow's subject type — add one in Manage → Providers first",
279
+ "views.editor.pickInstance": "Pick a provider instance",
193
280
  "settings.section.ticket": "Ticket tracking",
194
281
  "settings.section.repo": "Repository hosting",
195
282
  "settings.section.agent": "Coding agent",
@@ -204,6 +291,8 @@
204
291
  "settings.agent.cursor": "Cursor",
205
292
  "settings.jira.baseUrl": "Jira base URL",
206
293
  "settings.jira.email": "Jira email",
294
+ "settings.confluence.baseUrl": "Confluence base URL",
295
+ "settings.confluence.email": "Confluence email",
207
296
  "settings.bitbucket.baseUrl": "Bitbucket base URL",
208
297
  "settings.bitbucket.email": "Bitbucket email",
209
298
  "settings.bitbucket.workspace": "Bitbucket workspace",
@@ -211,10 +300,19 @@
211
300
  "settings.apiKey.configured": "Configured ✓",
212
301
  "settings.apiKey.notConfigured": "Not configured",
213
302
  "settings.apiKey.placeholder": "Enter a new key to replace the stored value",
303
+ "settings.apiKey.placeholderCreate": "API key",
304
+ "settings.apiKey.placeholderEdit": "Leave blank to keep the current key",
305
+ "settings.apiKey.required": "API key is required",
214
306
  "settings.apiKey.set": "Set key",
215
307
  "settings.apiKey.setSuccess": "API key saved",
216
308
  "settings.apiKey.setFailed": "Failed to save API key",
217
- "settings.restartRequired.message": "Some changes require restarting Kno to take effect",
309
+ "settings.apiKey.setFailedAfterSave": "Provider saved, but the API key could not be stored. Enter the key again to finish setup.",
310
+ "settings.model.label": "Default model",
311
+ "settings.model.placeholder": "Provider default",
312
+ "settings.model.fetch": "Fetch available models",
313
+ "settings.model.fetchFailed": "Could not fetch models",
314
+ "settings.model.hint": "Leave unset to use the provider's own default. Fetch after entering an API key.",
315
+ "settings.restartRequired.message": "Some changes require restarting Knoflows to take effect",
218
316
  "settings.saveSuccess": "Settings saved",
219
317
  "settings.saveFailed": "Failed to save settings",
220
318
  "settings.validation": "Validation",
@@ -225,7 +323,7 @@
225
323
  "workflows.list.emptyCreateButton": "Create your first workflow",
226
324
  "workflows.list.stepCount": "{{count}} steps",
227
325
  "workflows.list.noDescription": "No description",
228
- "workflows.list.filterByLaunchMode": "Filter by launch mode",
326
+ "workflows.list.filterBySubjectHandling": "Filter by items",
229
327
  "workflows.list.filterAll": "All",
230
328
  "workflows.list.edit": "Edit",
231
329
  "workflows.list.delete": "Delete",
@@ -6,8 +6,32 @@
6
6
  "nav.views": "Vistas",
7
7
  "nav.shortcuts": "Atajos",
8
8
  "nav.settings": "Ajustes",
9
- "shell.jobsWaiting": "Trabajos esperándote",
9
+ "shell.jobs": "Trabajos",
10
10
  "shell.manage": "Administrar",
11
+ "manage.tab.workflows": "Flujos",
12
+ "manage.tab.views": "Vistas y atajos",
13
+ "manage.tab.providers": "Proveedores",
14
+ "manage.tab.preferences": "Preferencias",
15
+ "manage.preferences.title": "Preferencias",
16
+ "manage.preferences.body": "Las preferencias del motor, como el límite de concurrencia del programador, la política de limpieza de worktrees y el agente predeterminado, vivirán aquí.",
17
+ "manage.views.title": "Vistas y atajos",
18
+ "manage.views.createView": "Crear una vista",
19
+ "manage.views.createShortcut": "Crear un atajo",
20
+ "manage.views.emptyState": "Aún no hay vistas ni atajos. Crea uno para empezar.",
21
+ "manage.views.column.name": "Nombre",
22
+ "manage.views.column.type": "Tipo",
23
+ "manage.views.column.workflow": "Flujo asociado",
24
+ "manage.views.column.subjectType": "Tipo de sujeto",
25
+ "manage.views.column.actions": "Acciones",
26
+ "manage.views.type.view": "Vista",
27
+ "manage.views.type.shortcut": "Atajo",
28
+ "manage.views.noSubjectType": "—",
29
+ "manage.views.edit": "Editar",
30
+ "manage.views.delete": "Eliminar",
31
+ "manage.views.deleteConfirmView": "¿Seguro que quieres eliminar esta vista?",
32
+ "manage.views.deleteConfirmShortcut": "¿Seguro que quieres eliminar este atajo?",
33
+ "manage.views.deleteFailed": "No se pudo eliminar",
34
+ "manage.views.loadFailed": "No se pudieron cargar las vistas y los atajos",
11
35
  "shell.group.tickets": "Tickets",
12
36
  "shell.group.pullRequests": "Pull requests",
13
37
  "shell.group.documentation": "Documentación",
@@ -23,8 +47,8 @@
23
47
  "common.cancel": "Cancelar",
24
48
  "common.loading": "Cargando…",
25
49
  "common.errorGeneric": "Algo salió mal",
26
- "jobs.title": "Kno — Iniciar un trabajo",
27
- "jobs.lede": "Elige un flujo de cardinalidad única e inicia un trabajo. La observación y la reanudación viven en la página de detalle del trabajo.",
50
+ "jobs.title": "Knoflows — Iniciar un trabajo",
51
+ "jobs.lede": "Elige un flujo que trabaja de uno en uno e inicia un trabajo. La observación y la reanudación viven en la página de detalle del trabajo.",
28
52
  "jobs.start.heading": "Iniciar un trabajo",
29
53
  "jobs.start.workflow": "Flujo de trabajo",
30
54
  "jobs.start.subjectId": "subjectId",
@@ -89,6 +113,10 @@
89
113
  "jobs.list.empty": "Ningún trabajo coincide con estos filtros.",
90
114
  "jobs.list.loadFailed": "No se pudieron cargar los trabajos",
91
115
  "jobs.list.filterAll": "Todos",
116
+ "jobs.list.running": "En ejecución",
117
+ "jobs.list.history": "Historial",
118
+ "jobs.list.runningEmpty": "No hay trabajos en ejecución.",
119
+ "jobs.list.historyEmpty": "Ningún trabajo coincide con estos filtros.",
92
120
  "workflow-editor.loading": "Cargando…",
93
121
  "workflow-editor.titleNew": "Nuevo flujo",
94
122
  "workflow-editor.titleEdit": "Editar flujo · {{id}}",
@@ -97,15 +125,16 @@
97
125
  "workflow-editor.basics": "Básicos",
98
126
  "workflow-editor.name": "name",
99
127
  "workflow-editor.appliesTo": "appliesTo",
100
- "workflow-editor.cardinality.label": "cardinality",
128
+ "workflow-editor.subjectHandling.label": "Elementos",
101
129
  "workflow-editor.description": "description",
102
130
  "workflow-editor.subjectType.none": "none",
103
131
  "workflow-editor.subjectType.ticket": "ticket",
104
132
  "workflow-editor.subjectType.pull_request": "pull_request",
105
133
  "workflow-editor.subjectType.documentation": "documentation",
106
- "workflow-editor.cardinality.single": "single",
107
- "workflow-editor.cardinality.batch": "batch",
108
- "workflow-editor.cardinality.aggregate": "aggregate",
134
+ "workflow-editor.subjectHandling.per-subject": "De uno en uno",
135
+ "workflow-editor.subjectHandling.collection": "En conjunto",
136
+ "workflow-editor.subjectHandling.help.per-subject": "Los pasos trabajan sobre un solo elemento. Puedes iniciar una fila, o ejecutar varios de forma independiente con una notificación cuando lanzas en lote.",
137
+ "workflow-editor.subjectHandling.help.collection": "Los pasos ven todo el conjunto seleccionado y producen un resultado combinado.",
109
138
  "workflow-editor.notificationPolicy": "Política de notificaciones",
110
139
  "workflow-editor.trigger.on_fail": "on_fail",
111
140
  "workflow-editor.trigger.on_complete": "on_complete",
@@ -130,10 +159,11 @@
130
159
  "step-list.moveDown": "Bajar",
131
160
  "step-list.remove": "Eliminar",
132
161
  "step-list.addStep": "Añadir paso",
162
+ "step-list.unnamed": "Sin nombre",
133
163
  "step-list.name": "Nombre",
134
164
  "step-list.id": "Id",
135
165
  "step-list.idHint": "Se genera a partir del nombre del paso — edítalo directamente si quieres otra referencia.",
136
- "step-list.objective": "Objetivo",
166
+ "step-list.objective": "Prompt",
137
167
  "step-list.knowledgeScope": "Alcance de conocimiento",
138
168
  "step-list.knowledgeScopeHint": "Déjalos sin marcar para omitir (todos los niveles).",
139
169
  "step-list.outputFormat.label": "Formato de salida",
@@ -180,6 +210,20 @@
180
210
  "step-list.providerAction.post_comment": "post_comment",
181
211
  "step-list.providerAction.update_status": "update_status",
182
212
  "step-list.providerAction.get_content": "get_content",
213
+ "step-list.extendedAction.mode": "Origen de la acción",
214
+ "step-list.extendedAction.portable": "Acción portable",
215
+ "step-list.extendedAction.extended": "Usar una acción extendida",
216
+ "step-list.extendedAction.provider": "Proveedor",
217
+ "step-list.extendedAction.action": "Acción extendida",
218
+ "step-list.extendedAction.none": "Elige una acción",
219
+ "step-list.extendedAction.empty": "Este proveedor no tiene acciones extendidas",
220
+ "step-list.extendedAction.mismatch": "Requiere {{required}} — {{active}} está configurado ahora",
221
+ "step-list.target.toggle": "Apuntar a otro sujeto",
222
+ "step-list.target.subjectType": "Tipo de sujeto",
223
+ "step-list.target.source": "Instancia de proveedor",
224
+ "step-list.target.sourcePlaceholder": "Elige una instancia",
225
+ "step-list.target.subjectId": "Id del sujeto",
226
+ "step-list.target.subjectIdHint": "Suele ser una referencia interpolada a un paso anterior, p. ej. resolve-key",
183
227
  "step-list.knowledgeTier.user": "user",
184
228
  "step-list.knowledgeTier.organization": "organization",
185
229
  "step-list.knowledgeTier.project": "project",
@@ -189,7 +233,50 @@
189
233
  "step-list.onMaxIterations.continue": "continue",
190
234
  "step-list.onMaxIterations.ask_human": "ask_human",
191
235
  "settings.title": "Ajustes",
192
- "settings.lede": "Elige qué proveedores usa Kno y guarda las claves de API. Las claves aplican de inmediato; cambiar una implementación requiere reiniciar.",
236
+ "settings.lede": "Configura instancias de proveedores y guarda claves de API. Añadir o cambiar una instancia requiere reiniciar; el agente predeterminado se puede cambiar de inmediato.",
237
+ "settings.addProvider": "Añadir proveedor",
238
+ "settings.editProvider": "Editar proveedor",
239
+ "settings.addInstance": "Añadir instancia de proveedor",
240
+ "settings.addInstance.submit": "Añadir instancia",
241
+ "settings.removeInstance": "Quitar",
242
+ "settings.edit": "Editar",
243
+ "settings.delete": "Eliminar",
244
+ "settings.deleteConfirm": "¿Seguro que quieres eliminar esta instancia de proveedor?",
245
+ "settings.kind.label": "Tipo de instancia",
246
+ "settings.kind.subject": "Proveedor de sujetos",
247
+ "settings.kind.agent": "Agente",
248
+ "settings.type.label": "Tipo",
249
+ "settings.typeOption.jira": "Jira",
250
+ "settings.typeOption.bitbucket": "Bitbucket",
251
+ "settings.typeOption.github": "GitHub Issues",
252
+ "settings.typeOption.confluence": "Confluence",
253
+ "settings.typeOption.manualTicket": "Manual (ticket)",
254
+ "settings.typeOption.manualDocumentation": "Manual (documentación)",
255
+ "settings.typeOption.claude": "Claude",
256
+ "settings.typeOption.cursor": "Cursor",
257
+ "settings.subjectType.label": "Tipo de sujeto",
258
+ "settings.instanceId": "Id de instancia",
259
+ "settings.instanceIdHint": "Se genera a partir del nombre visible — edítalo directamente si quieres otro id.",
260
+ "settings.displayName": "Nombre visible",
261
+ "settings.displayNameRequired": "El nombre visible es obligatorio",
262
+ "settings.defaultAgent.label": "Agente predeterminado",
263
+ "settings.defaultAgent.toggle": "Establecer como agente predeterminado",
264
+ "settings.column.displayName": "Nombre visible",
265
+ "settings.column.type": "Tipo",
266
+ "settings.column.expiresOn": "Caduca el",
267
+ "settings.column.default": "Predeterminado",
268
+ "settings.column.actions": "Acciones",
269
+ "settings.expiresOn.label": "Caduca el",
270
+ "settings.expiresOn.hint": "Solo un recordatorio manual — Knoflows no comprueba esta fecha con el proveedor.",
271
+ "settings.ticket.github": "GitHub Issues",
272
+ "settings.github.username": "Usuario de GitHub",
273
+ "step-list.agentInstance.label": "Agente",
274
+ "step-list.agentInstance.default": "Usar el agente predeterminado",
275
+ "views.editor.instance": "Instancia de proveedor",
276
+ "views.editor.instancePlaceholder": "Selecciona una instancia de proveedor",
277
+ "views.editor.instanceNeeded": "Esta vista no tiene instancia de proveedor. Elige una para terminar la configuración.",
278
+ "views.editor.noEligibleInstances": "Ningún proveedor configurado admite el tipo de sujeto de este flujo — añade uno en Administrar → Proveedores primero",
279
+ "views.editor.pickInstance": "Elige una instancia de proveedor",
193
280
  "settings.section.ticket": "Seguimiento de tickets",
194
281
  "settings.section.repo": "Alojamiento de repositorios",
195
282
  "settings.section.agent": "Agente de código",
@@ -204,6 +291,8 @@
204
291
  "settings.agent.cursor": "Cursor",
205
292
  "settings.jira.baseUrl": "URL base de Jira",
206
293
  "settings.jira.email": "Correo de Jira",
294
+ "settings.confluence.baseUrl": "URL base de Confluence",
295
+ "settings.confluence.email": "Correo de Confluence",
207
296
  "settings.bitbucket.baseUrl": "URL base de Bitbucket",
208
297
  "settings.bitbucket.email": "Correo de Bitbucket",
209
298
  "settings.bitbucket.workspace": "Espacio de trabajo de Bitbucket",
@@ -211,10 +300,19 @@
211
300
  "settings.apiKey.configured": "Configurada ✓",
212
301
  "settings.apiKey.notConfigured": "No configurada",
213
302
  "settings.apiKey.placeholder": "Introduce una clave nueva para reemplazar la guardada",
303
+ "settings.apiKey.placeholderCreate": "Clave de API",
304
+ "settings.apiKey.placeholderEdit": "Déjalo en blanco para conservar la clave actual",
305
+ "settings.apiKey.required": "La clave de API es obligatoria",
214
306
  "settings.apiKey.set": "Guardar clave",
215
307
  "settings.apiKey.setSuccess": "Clave de API guardada",
216
308
  "settings.apiKey.setFailed": "No se pudo guardar la clave de API",
217
- "settings.restartRequired.message": "Algunos cambios requieren reiniciar Kno para aplicarse",
309
+ "settings.apiKey.setFailedAfterSave": "El proveedor se guardó, pero no se pudo almacenar la clave de API. Introdúcela de nuevo para terminar la configuración.",
310
+ "settings.model.label": "Modelo predeterminado",
311
+ "settings.model.placeholder": "Predeterminado del proveedor",
312
+ "settings.model.fetch": "Obtener modelos disponibles",
313
+ "settings.model.fetchFailed": "No se pudieron obtener los modelos",
314
+ "settings.model.hint": "Déjalo vacío para usar el predeterminado del proveedor. Obtén la lista después de introducir una clave de API.",
315
+ "settings.restartRequired.message": "Algunos cambios requieren reiniciar Knoflows para aplicarse",
218
316
  "settings.saveSuccess": "Ajustes guardados",
219
317
  "settings.saveFailed": "No se pudieron guardar los ajustes",
220
318
  "settings.validation": "Validación",
@@ -225,7 +323,7 @@
225
323
  "workflows.list.emptyCreateButton": "Crea tu primer flujo",
226
324
  "workflows.list.stepCount": "{{count}} pasos",
227
325
  "workflows.list.noDescription": "Sin descripción",
228
- "workflows.list.filterByLaunchMode": "Filtrar por modo de lanzamiento",
326
+ "workflows.list.filterBySubjectHandling": "Filtrar por elementos",
229
327
  "workflows.list.filterAll": "Todos",
230
328
  "workflows.list.edit": "Editar",
231
329
  "workflows.list.delete": "Eliminar",
@@ -1 +1 @@
1
- import {W,I}from'./chunk-CECejZs9.js';import {d as dr,c as ca,r as rr,o as oa,s as sr,V as Vn,p as pa}from'./chunk-BaL0hYvK.js';import {C,U as U$1,b as at,a0 as $0,q as qo,X as rd,Y as Bw,a9 as Ng,aa as rs,ab as Dg,R as Rt,Q as QE,F as Fn,M as Mt,f as ec,m as bD,A as _D,g as _i,v as vw,h as Rw,K as Kc,p as gI,P as Ph,O as Ow,B as VD,N as ND,w as ch,y as xD,a5 as ah,a3 as xw,u as nl}from'./main-5C7K2447.js';var q=new Set(["completed","failed","cancelled"]);function G(e){return q.has(e)}function et(e){let o=e.stepHistory.find(t=>t.status==="running");if(o)return o;if((e.status==="waiting_for_human"||e.status==="waiting_for_children")&&e.currentStepExecutionId){let t=e.stepHistory.find(n=>n.id===e.currentStepExecutionId);if(t)return t}return G(e.status)&&e.stepHistory.length>0?e.stepHistory[e.stepHistory.length-1]??null:null}function it(e,o){let t=new Map;for(let n of o)t.set(n.stepDefinitionId,n);return e.map(n=>{let d=t.get(n.id)??null;return {definition:n,execution:d,reached:d!=null}})}function U(e){if(!e)return null;if(e.mode==="single"){let t=e.subject;return `${t.id} \xB7 ${t.title}`}let o=e.subjects.length;if(o===0)return null;if(o===1){let t=e.subjects[0];return `${t.id} \xB7 ${t.title}`}return `${o} subjects`}var Q=e=>["/jobs",e],V=(e,o)=>o.id;function X(e,o){e&1&&(_i(0,"p",0),vw(1),Rw(2,"transloco"),Kc()),e&2&&(gI(),Ph(Ow(2,1,"common.loading")));}function Y(e,o){if(e&1&&(_i(0,"p",1),vw(1),Kc()),e&2){let t=VD();gI(),Ph(t.loadError());}}function Z(e,o){if(e&1&&(_i(0,"tr")(1,"td")(2,"a",3),vw(3),Kc()(),_i(4,"td")(5,"nz-tag"),vw(6),Rw(7,"transloco"),Kc()(),_i(8,"td")(9,"span"),vw(10),Kc()(),_i(11,"td")(12,"span"),vw(13),Kc()(),_i(14,"td")(15,"span"),vw(16),Kc()()()),e&2){let t=o.$implicit,n=VD(2);ah("data-testid","job-row-"+t.id),gI(2),ch("routerLink",xw(14,Q,t.id)),ah("data-testid","job-link-"+t.id),gI(),nl(" ",t.id," "),gI(2),ah("data-testid","job-status-"+t.id),gI(),Ph(Ow(7,12,n.statusKey(t.status))),gI(3),ah("data-testid","job-subject-"+t.id),gI(),Ph(n.subjectText(t)),gI(2),ah("data-testid","job-started-"+t.id),gI(),Ph(t.createdAt),gI(2),ah("data-testid","job-completed-"+t.id),gI(),Ph(t.completedAt??"\u2014");}}function tt(e,o){if(e&1&&(_i(0,"nz-table",2)(1,"thead")(2,"tr")(3,"th"),vw(4),Rw(5,"transloco"),Kc(),_i(6,"th"),vw(7),Rw(8,"transloco"),Kc(),_i(9,"th"),vw(10),Rw(11,"transloco"),Kc(),_i(12,"th"),vw(13),Rw(14,"transloco"),Kc(),_i(15,"th"),vw(16),Rw(17,"transloco"),Kc()()(),_i(18,"tbody"),ND(19,Z,17,16,"tr",null,V),Kc()()),e&2){let t=VD();ch("nzData",t.displayJobs())("nzFrontPagination",false)("nzShowPagination",false)("nzSize","middle"),gI(4),Ph(Ow(5,9,"jobs.table.column.id")),gI(3),Ph(Ow(8,11,"jobs.table.column.status")),gI(3),Ph(Ow(11,13,"jobs.table.column.subject")),gI(3),Ph(Ow(14,15,"jobs.table.column.started")),gI(3),Ph(Ow(17,17,"jobs.table.column.completed")),gI(3),xD(t.displayJobs());}}var vt=(()=>{class e{constructor(){this.jobsApi=C(U$1),this.destroyRef=C(at),this.jobs=$0(null),this.jobIds=$0([]),this.loaded=qo([]),this.loading=qo(false),this.loadError=qo(null),rd(()=>{let t=this.jobs(),n=this.jobIds();if(t!=null){Bw(()=>{this.loaded.set([]),this.loading.set(false),this.loadError.set(null);});return}if(n.length===0){Bw(()=>{this.loaded.set([]),this.loading.set(false);});return}Bw(()=>{this.loading.set(true),this.loadError.set(null),Ng(n.map(d=>this.jobsApi.get(d).pipe(rs(()=>Dg(null))))).pipe(Rt(this.destroyRef)).subscribe({next:d=>{this.loaded.set(d.filter(W=>W!=null)),this.loading.set(false);},error:()=>{this.loading.set(false),this.loadError.set("Failed to load jobs");}});});});}displayJobs(){let t=this.jobs();return t??this.loaded()}statusKey(t){return `jobs.status.${t}`}subjectText(t){return U(t.subjectContext)??"\u2014"}static{this.\u0275fac=function(n){return new(n||e)};}static{this.\u0275cmp=QE({type:e,selectors:[["app-job-status-table"]],inputs:{jobs:[1,"jobs"],jobIds:[1,"jobIds"]},decls:3,vars:1,consts:[["data-testid","job-status-loading"],["data-testid","job-status-error",1,"error"],["data-testid","job-status-table",3,"nzData","nzFrontPagination","nzShowPagination","nzSize"],[3,"routerLink"]],template:function(n,d){n&1&&bD(0,X,3,3,"p",0)(1,Y,2,1,"p",1)(2,tt,21,19,"nz-table",2),n&2&&_D(d.loading()&&d.jobs()==null?0:d.loadError()?1:2);},dependencies:[Fn,Mt,dr,ca,rr,oa,sr,Vn,pa,W,I,ec],styles:[".error[_ngcontent-%COMP%]{color:#9f1239}[_nghost-%COMP%] .ant-table-tbody>tr>td{white-space:normal;vertical-align:top}"]});}}return e})();export{G,U,et as e,it as i,vt as v};
1
+ import {W,I}from'./chunk-DjiFAEo3.js';import {A as Ad,H as Hl,$ as $d,a as Al,V as Vd,b as Ai,X as Xl}from'./chunk-g1iNEPSG.js';import {C,U as U$1,b as at,a0 as $0,q as qo,X as rd,Y as Bw,a9 as Ng,aa as Xi,ab as Dg,u as ue,Q as QE,M as Mi,L as Ln,K as Kt,m as bD,B as _D,f as _i,v as vw,R as Rw,g as Kc,p as gI,P as Ph,O as Ow,E as VD,N as ND,x as ch,A as xD,a5 as ah,a3 as xw,w as nl}from'./main-R7YQQZVK.js';var q=new Set(["completed","failed","cancelled"]);function G(e){return q.has(e)}function et(e){let o=e.stepHistory.find(t=>t.status==="running");if(o)return o;if((e.status==="waiting_for_human"||e.status==="waiting_for_children")&&e.currentStepExecutionId){let t=e.stepHistory.find(n=>n.id===e.currentStepExecutionId);if(t)return t}return G(e.status)&&e.stepHistory.length>0?e.stepHistory[e.stepHistory.length-1]??null:null}function it(e,o){let t=new Map;for(let n of o)t.set(n.stepDefinitionId,n);return e.map(n=>{let d=t.get(n.id)??null;return {definition:n,execution:d,reached:d!=null}})}function U(e){if(!e)return null;if(e.mode==="single"){let t=e.subject;return `${t.id} \xB7 ${t.title}`}let o=e.subjects.length;if(o===0)return null;if(o===1){let t=e.subjects[0];return `${t.id} \xB7 ${t.title}`}return `${o} subjects`}var Q=e=>["/jobs",e],V=(e,o)=>o.id;function X(e,o){e&1&&(_i(0,"p",0),vw(1),Rw(2,"transloco"),Kc()),e&2&&(gI(),Ph(Ow(2,1,"common.loading")));}function Y(e,o){if(e&1&&(_i(0,"p",1),vw(1),Kc()),e&2){let t=VD();gI(),Ph(t.loadError());}}function Z(e,o){if(e&1&&(_i(0,"tr")(1,"td")(2,"a",3),vw(3),Kc()(),_i(4,"td")(5,"nz-tag"),vw(6),Rw(7,"transloco"),Kc()(),_i(8,"td")(9,"span"),vw(10),Kc()(),_i(11,"td")(12,"span"),vw(13),Kc()(),_i(14,"td")(15,"span"),vw(16),Kc()()()),e&2){let t=o.$implicit,n=VD(2);ah("data-testid","job-row-"+t.id),gI(2),ch("routerLink",xw(14,Q,t.id)),ah("data-testid","job-link-"+t.id),gI(),nl(" ",t.id," "),gI(2),ah("data-testid","job-status-"+t.id),gI(),Ph(Ow(7,12,n.statusKey(t.status))),gI(3),ah("data-testid","job-subject-"+t.id),gI(),Ph(n.subjectText(t)),gI(2),ah("data-testid","job-started-"+t.id),gI(),Ph(t.createdAt),gI(2),ah("data-testid","job-completed-"+t.id),gI(),Ph(t.completedAt??"\u2014");}}function tt(e,o){if(e&1&&(_i(0,"nz-table",2)(1,"thead")(2,"tr")(3,"th"),vw(4),Rw(5,"transloco"),Kc(),_i(6,"th"),vw(7),Rw(8,"transloco"),Kc(),_i(9,"th"),vw(10),Rw(11,"transloco"),Kc(),_i(12,"th"),vw(13),Rw(14,"transloco"),Kc(),_i(15,"th"),vw(16),Rw(17,"transloco"),Kc()()(),_i(18,"tbody"),ND(19,Z,17,16,"tr",null,V),Kc()()),e&2){let t=VD();ch("nzData",t.displayJobs())("nzFrontPagination",false)("nzShowPagination",false)("nzSize","middle"),gI(4),Ph(Ow(5,9,"jobs.table.column.id")),gI(3),Ph(Ow(8,11,"jobs.table.column.status")),gI(3),Ph(Ow(11,13,"jobs.table.column.subject")),gI(3),Ph(Ow(14,15,"jobs.table.column.started")),gI(3),Ph(Ow(17,17,"jobs.table.column.completed")),gI(3),xD(t.displayJobs());}}var vt=(()=>{class e{constructor(){this.jobsApi=C(U$1),this.destroyRef=C(at),this.jobs=$0(null),this.jobIds=$0([]),this.loaded=qo([]),this.loading=qo(false),this.loadError=qo(null),rd(()=>{let t=this.jobs(),n=this.jobIds();if(t!=null){Bw(()=>{this.loaded.set([]),this.loading.set(false),this.loadError.set(null);});return}if(n.length===0){Bw(()=>{this.loaded.set([]),this.loading.set(false);});return}Bw(()=>{this.loading.set(true),this.loadError.set(null),Ng(n.map(d=>this.jobsApi.get(d).pipe(Xi(()=>Dg(null))))).pipe(ue(this.destroyRef)).subscribe({next:d=>{this.loaded.set(d.filter(W=>W!=null)),this.loading.set(false);},error:()=>{this.loading.set(false),this.loadError.set("Failed to load jobs");}});});});}displayJobs(){let t=this.jobs();return t??this.loaded()}statusKey(t){return `jobs.status.${t}`}subjectText(t){return U(t.subjectContext)??"\u2014"}static{this.\u0275fac=function(n){return new(n||e)};}static{this.\u0275cmp=QE({type:e,selectors:[["app-job-status-table"]],inputs:{jobs:[1,"jobs"],jobIds:[1,"jobIds"]},decls:3,vars:1,consts:[["data-testid","job-status-loading"],["data-testid","job-status-error",1,"error"],["data-testid","job-status-table",3,"nzData","nzFrontPagination","nzShowPagination","nzSize"],[3,"routerLink"]],template:function(n,d){n&1&&bD(0,X,3,3,"p",0)(1,Y,2,1,"p",1)(2,tt,21,19,"nz-table",2),n&2&&_D(d.loading()&&d.jobs()==null?0:d.loadError()?1:2);},dependencies:[Mi,Ln,Ad,Hl,$d,Al,Vd,Ai,Xl,W,I,Kt],styles:[".error[_ngcontent-%COMP%]{color:#9f1239}[_nghost-%COMP%] .ant-table-tbody>tr>td{white-space:normal;vertical-align:top}"]});}}return e})();export{G,U,et as e,it as i,vt as v};