@knoflows/engine 0.1.0-alpha.0 → 0.1.0-alpha.10

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 (83) hide show
  1. package/README.md +2 -2
  2. package/dist/engine.js +33 -128
  3. package/dist/migrations/20260917165450_baseline/migration.sql +127 -0
  4. package/dist/migrations/20260917165450_baseline/snapshot.json +1212 -0
  5. package/dist/migrations/20260918025930_context_files/migration.sql +7 -0
  6. package/dist/migrations/20260918025930_context_files/snapshot.json +1275 -0
  7. package/dist/migrations/20260918074816_large_kate_bishop/migration.sql +8 -0
  8. package/dist/migrations/20260918074816_large_kate_bishop/snapshot.json +1338 -0
  9. package/package.json +19 -10
  10. package/static/assets/i18n/en.json +261 -14
  11. package/static/assets/i18n/es.json +261 -14
  12. package/static/{chunk-DLA1DsR_.js → chunk-2KSNHCgb.js} +1 -1
  13. package/static/chunk-3mppll1n.js +1 -0
  14. package/static/chunk-6BQlxALO.js +1 -0
  15. package/static/chunk-A4AkMf2s.js +1 -0
  16. package/static/chunk-B2hO-qT3.js +1 -0
  17. package/static/chunk-B8MrNxxk.js +1 -0
  18. package/static/chunk-BAc0DRm8.js +1 -0
  19. package/static/chunk-BFkZ796p.js +7 -0
  20. package/static/chunk-BNOYZq-b.js +1 -0
  21. package/static/chunk-BUuwGTt7.js +66 -0
  22. package/static/chunk-BVw7xkK9.js +1 -0
  23. package/static/chunk-BbcTWKT2.js +1 -0
  24. package/static/chunk-BhGgxvgu.js +1 -0
  25. package/static/chunk-BjZIiizu.js +1 -0
  26. package/static/chunk-CDWIMt6y.js +1 -0
  27. package/static/{chunk-B8aKNL-C.js → chunk-CEcbtdnK.js} +1 -1
  28. package/static/chunk-CJDp11v5.js +1 -0
  29. package/static/chunk-CJRNatUw.js +1 -0
  30. package/static/chunk-CWbxWv5I.js +1 -0
  31. package/static/chunk-Cd8F2jeN.js +1 -0
  32. package/static/chunk-Cf_xd8ER.js +1 -0
  33. package/static/chunk-CgqRVtSF.js +1 -0
  34. package/static/chunk-CxBYhrEj.js +1 -0
  35. package/static/chunk-D6YfO72h.js +1 -0
  36. package/static/chunk-DNOjVPY0.js +1 -0
  37. package/static/chunk-DQnMulwi.js +1 -0
  38. package/static/chunk-DblClAqu.js +1 -0
  39. package/static/chunk-DjibVmY7.js +1 -0
  40. package/static/chunk-DoXxOh8j.js +1 -0
  41. package/static/chunk-Ojn34cvU.js +1 -0
  42. package/static/chunk-W5GAgssE.js +1 -0
  43. package/static/chunk-XLpSkczx.js +1 -0
  44. package/static/chunk-cHfOiAJm.js +1 -0
  45. package/static/chunk-eSxb3-OU.js +1 -0
  46. package/static/chunk-hZzW00VR.js +1 -0
  47. package/static/chunk-jct1_zOr.js +1 -0
  48. package/static/chunk-mzyds3TS.js +1 -0
  49. package/static/chunk-tYnBYi0l.js +1 -0
  50. package/static/chunk-wbdetocK.js +5 -0
  51. package/static/index.html +6 -3
  52. package/static/main-MNK6ZYDO.js +249 -0
  53. package/static/styles-6MW3GE4V.css +1 -0
  54. package/static/chunk-8joH1h3C.js +0 -1
  55. package/static/chunk-B4A7hSM3.js +0 -1
  56. package/static/chunk-B5hULR_G.js +0 -1
  57. package/static/chunk-BNylhXVN.js +0 -1
  58. package/static/chunk-BV9svMMc.js +0 -1
  59. package/static/chunk-BX5sYPy1.js +0 -1
  60. package/static/chunk-Be6g3Cmv.js +0 -1
  61. package/static/chunk-Bgtkf8nM.js +0 -1
  62. package/static/chunk-Bl6kwpIK.js +0 -1
  63. package/static/chunk-BvDaTl4u.js +0 -1
  64. package/static/chunk-ByacugWF.js +0 -1
  65. package/static/chunk-CPYgCVHJ.js +0 -1
  66. package/static/chunk-CRPsjdw8.js +0 -1
  67. package/static/chunk-CZLubDvD.js +0 -1
  68. package/static/chunk-Cczqw9G5.js +0 -1
  69. package/static/chunk-CntkJjcW.js +0 -1
  70. package/static/chunk-Cuh7ppOq.js +0 -1
  71. package/static/chunk-Cv76Fxhr.js +0 -66
  72. package/static/chunk-D3rwM_uV.js +0 -7
  73. package/static/chunk-DHPxevqq.js +0 -1
  74. package/static/chunk-DYzjfNdD.js +0 -1
  75. package/static/chunk-DdSpqYCm.js +0 -5
  76. package/static/chunk-Di8Mt9Sl.js +0 -1
  77. package/static/chunk-Di_OsX8x.js +0 -1
  78. package/static/chunk-DlU8g0UO.js +0 -1
  79. package/static/chunk-DpU7iV6a.js +0 -1
  80. package/static/chunk-iJsU0w_6.js +0 -1
  81. package/static/chunk-mjUdDQQg.js +0 -1
  82. package/static/main-JSLBK4RN.js +0 -235
  83. package/static/styles-W2TNDHKW.css +0 -1
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@knoflows/engine",
3
- "version": "0.1.0-alpha.0",
3
+ "version": "0.1.0-alpha.10",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "bin": {
7
- "kno": "dist/engine.js"
7
+ "knoflows": "dist/engine.js"
8
8
  },
9
9
  "files": [
10
10
  "dist/engine.js",
11
+ "dist/migrations",
11
12
  "static",
12
13
  "README.md",
13
14
  "LICENSE"
@@ -22,42 +23,50 @@
22
23
  "typecheck": "tsc --noEmit -p tsconfig.json",
23
24
  "build:release": "tsc -p tsconfig.json && node ../../scripts/bundle-engine.mjs",
24
25
  "prepublishOnly": "node ../../scripts/smoke-engine.mjs",
25
- "db:push": "drizzle-kit push",
26
+ "db:generate": "drizzle-kit generate",
26
27
  "set-secret": "tsx scripts/set-secret.ts",
27
28
  "test:repos": "tsx src/persistence/test/repo-test.ts",
29
+ "test:migrations": "tsx src/persistence/test/migrate.test.ts",
28
30
  "test:providers": "tsx src/providers/test/provider-test.ts",
29
31
  "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",
32
+ "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",
33
+ "test:confluence": "tsx src/providers/documentation/confluence-documentation-provider.test.ts",
34
+ "test:github": "tsx src/providers/ticket/github-issues-provider.test.ts",
31
35
  "test:bitbucket": "tsx src/providers/repo/bitbucket-repo-provider.test.ts",
36
+ "test:registry": "tsx src/providers/provider-registry.service.test.ts",
32
37
  "test:claude-agent": "tsx src/providers/agent/claude-agent-provider.test.ts",
33
38
  "test:cursor-agent": "tsx src/providers/agent/cursor-agent-provider.test.ts",
39
+ "test:preview-models": "tsx src/providers/agent/preview-models.test.ts",
34
40
  "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",
37
- "test:workflows-ids": "tsx src/api/workflows/assign-missing-ids.test.ts"
41
+ "test:runner": "tsx src/git/worktree-paths.test.ts && 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 && tsx src/runner/test/workflow-runner.retry.test.ts && tsx src/runner/test/workflow-runner.cancel.test.ts && tsx src/runner/test/resolve-context-files.test.ts && tsx src/runner/test/workflow-runner.context-files.test.ts && tsx src/runner/test/workflow-runner.worktrees.test.ts",
42
+ "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 && tsx src/api/test/workflow-library.test.ts && tsx src/api/test/context-files.test.ts && tsx src/api/test/filesystem.test.ts && tsx src/api/test/local-repositories.test.ts",
43
+ "test:workflows-ids": "tsx src/api/workflows/assign-missing-ids.test.ts",
44
+ "test:listen-port": "tsx src/listen-port.test.ts",
45
+ "test:spa-fallback": "tsx src/static/spa-fallback.test.ts"
38
46
  },
39
47
  "dependencies": {
40
48
  "@anthropic-ai/claude-agent-sdk": "^0.3.243",
41
49
  "@asteasolutions/zod-to-openapi": "^9.1.0",
42
50
  "@cursor/sdk": "^1.0.28",
43
- "@knoflows/shared": "^0.1.0",
44
51
  "@napi-rs/keyring": "^1.3.0",
45
52
  "@nestjs/common": "^11.1.0",
46
53
  "@nestjs/core": "^11.1.0",
47
54
  "@nestjs/platform-express": "^11.1.0",
48
- "@nestjs/testing": "^11.1.28",
49
55
  "@scalar/nestjs-api-reference": "^1.2.12",
50
56
  "drizzle-orm": "^1.0.0-rc.4",
51
57
  "reflect-metadata": "^0.2.0",
52
58
  "rxjs": "^7.0.0",
53
- "supertest": "^7.2.2"
59
+ "zod": "^4.0.0"
54
60
  },
55
61
  "devDependencies": {
62
+ "@knoflows/shared": "^0.1.0",
56
63
  "@nestjs/cli": "^11.0.0",
64
+ "@nestjs/testing": "^11.1.28",
57
65
  "@types/node": "^22.0.0",
58
66
  "@types/supertest": "^7.2.1",
59
67
  "drizzle-kit": "^1.0.0-rc.4",
60
68
  "esbuild": "^0.25.12",
69
+ "supertest": "^7.2.2",
61
70
  "tsx": "^4.19.0",
62
71
  "typescript": "^6.0.0"
63
72
  }
@@ -4,15 +4,117 @@
4
4
  "nav.newWorkflow": "New workflow",
5
5
  "nav.workflows": "Workflows",
6
6
  "nav.views": "Views",
7
+ "nav.shortcuts": "Shortcuts",
7
8
  "nav.settings": "Settings",
9
+ "shell.jobs": "Jobs",
10
+ "shell.manage": "Manage",
11
+ "manage.tab.workflows": "Workflows",
12
+ "manage.tab.views": "Views & Shortcuts",
13
+ "manage.tab.providers": "Providers",
14
+ "manage.tab.contextFiles": "Context Files",
15
+ "manage.tab.localRepositories": "Local Repositories",
16
+ "manage.tab.worktrees": "Worktrees",
17
+ "manage.tab.preferences": "Preferences",
18
+ "manage.preferences.title": "Preferences",
19
+ "manage.preferences.body": "Engine preferences such as scheduler concurrency, worktree cleanup, and the default agent will live here.",
20
+ "context-files.title": "Context Files",
21
+ "context-files.selectTitle": "Select context files",
22
+ "context-files.emptyState": "No context files yet. Add one to attach to agent steps.",
23
+ "context-files.create": "Add context file",
24
+ "context-files.edit": "Edit",
25
+ "context-files.delete": "Delete",
26
+ "context-files.deleteConfirm": "Delete this context file?",
27
+ "context-files.column.name": "Name",
28
+ "context-files.column.tier": "Tier",
29
+ "context-files.column.path": "Path",
30
+ "context-files.column.description": "Description",
31
+ "context-files.column.actions": "Actions",
32
+ "context-files.form.name": "Name",
33
+ "context-files.form.tier": "Tier",
34
+ "context-files.form.path": "Path",
35
+ "context-files.form.pathHint": "Browse to a file on this machine, or enter its absolute path. The file is read immediately to confirm it exists.",
36
+ "context-files.form.description": "Description",
37
+ "context-files.form.save": "Save",
38
+ "context-files.form.cancel": "Cancel",
39
+ "context-files.form.add": "Add",
40
+ "context-files.loadFailed": "Failed to load context files",
41
+ "context-files.saveFailed": "Failed to save context file",
42
+ "context-files.deleteFailed": "Failed to delete context file",
43
+ "context-files.tier.user": "User",
44
+ "context-files.tier.organization": "Organization",
45
+ "context-files.tier.project": "Project",
46
+ "local-repos.title": "Local Repositories",
47
+ "local-repos.emptyState": "No local repositories yet. Add one so workflows can pick a repo at launch.",
48
+ "local-repos.create": "Add local repository",
49
+ "local-repos.edit": "Edit",
50
+ "local-repos.delete": "Delete",
51
+ "local-repos.deleteConfirm": "Delete this local repository?",
52
+ "local-repos.column.name": "Name",
53
+ "local-repos.column.localPath": "Repository path",
54
+ "local-repos.column.worktreeBasePath": "Worktree base",
55
+ "local-repos.column.actions": "Actions",
56
+ "local-repos.form.name": "Name",
57
+ "local-repos.form.localPath": "Repository path",
58
+ "local-repos.form.worktreeBasePath": "Worktree base path (optional)",
59
+ "local-repos.form.worktreeBaseHint": "Defaults to a sibling folder next to the repository. Do not nest worktrees inside the repo itself.",
60
+ "local-repos.loadFailed": "Failed to load local repositories",
61
+ "local-repos.saveFailed": "Failed to save local repository",
62
+ "local-repos.deleteFailed": "Failed to delete local repository",
63
+ "worktrees.title": "Worktrees",
64
+ "worktrees.emptyState": "No live worktrees. They appear here after a Job creates one.",
65
+ "worktrees.deleteSelected": "Delete selected worktrees",
66
+ "worktrees.activeWarning": "A selected worktree belongs to a Job that is still running. Delete it only after the Job finishes.",
67
+ "worktrees.loadFailed": "Failed to load worktrees",
68
+ "worktrees.deleteFailed": "Failed to delete worktrees",
69
+ "worktrees.column.job": "Job",
70
+ "worktrees.column.repository": "Repository",
71
+ "worktrees.column.branch": "Branch",
72
+ "worktrees.column.path": "Path",
73
+ "worktrees.column.status": "Status",
74
+ "worktrees.column.created": "Created",
75
+ "workflow-input.localRepositoryPlaceholder": "Select a local repository",
76
+ "file-browser.emptySelection": "No file selected",
77
+ "file-browser.emptySelectionDirectory": "No folder selected",
78
+ "file-browser.enterManually": "Or enter path manually",
79
+ "file-browser.browse": "Browse for a file",
80
+ "file-browser.browseDirectory": "Browse for a folder",
81
+ "file-browser.useFolder": "Use this folder",
82
+ "file-browser.loadFailed": "Failed to list this directory",
83
+ "manage.views.title": "Views & Shortcuts",
84
+ "manage.views.createView": "Create a View",
85
+ "manage.views.createShortcut": "Create a Shortcut",
86
+ "manage.views.emptyState": "No views or shortcuts yet. Create one to get started.",
87
+ "manage.views.column.name": "Name",
88
+ "manage.views.column.type": "Type",
89
+ "manage.views.column.workflow": "Bound workflow",
90
+ "manage.views.column.subjectType": "Subject type",
91
+ "manage.views.column.actions": "Actions",
92
+ "manage.views.type.view": "View",
93
+ "manage.views.type.shortcut": "Shortcut",
94
+ "manage.views.noSubjectType": "—",
95
+ "manage.views.edit": "Edit",
96
+ "manage.views.delete": "Delete",
97
+ "manage.views.deleteConfirmView": "Are you sure you want to delete this view?",
98
+ "manage.views.deleteConfirmShortcut": "Are you sure you want to delete this shortcut?",
99
+ "manage.views.deleteFailed": "Failed to delete",
100
+ "manage.views.loadFailed": "Failed to load views and shortcuts",
101
+ "shell.group.tickets": "Tickets",
102
+ "shell.group.pullRequests": "Pull Requests",
103
+ "shell.group.documentation": "Documentation",
104
+ "shell.shortcuts": "Shortcuts",
105
+ "shell.provider.jira": "Jira",
106
+ "shell.provider.bitbucket": "Bitbucket",
107
+ "shell.empty.title": "Welcome to knoflows",
108
+ "shell.empty.body": "Views and shortcuts appear here once you configure a provider in Settings and save at least one.",
109
+ "shell.empty.settingsLink": "Open Settings",
8
110
  "nav.language": "Language",
9
111
  "nav.localeCheck": "Locale check",
10
112
  "common.save": "Save",
11
113
  "common.cancel": "Cancel",
12
114
  "common.loading": "Loading…",
13
115
  "common.errorGeneric": "Something went wrong",
14
- "jobs.title": "Kno — Start a Job",
15
- "jobs.lede": "Pick a single-cardinality workflow and start a Job. Watching and resume live on the Job detail page.",
116
+ "jobs.title": "Knoflows — Start a Job",
117
+ "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.",
16
118
  "jobs.start.heading": "Start a Job",
17
119
  "jobs.start.workflow": "Workflow",
18
120
  "jobs.start.subjectId": "subjectId",
@@ -39,6 +141,9 @@
39
141
  "jobs.errors.subjectIdRequired": "subjectId is required for this workflow",
40
142
  "jobs.errors.startFailed": "Failed to start job",
41
143
  "jobs.errors.resumeFailed": "Failed to resume job",
144
+ "jobs.errors.retryFailed": "Failed to retry job",
145
+ "jobs.errors.retryStepFailed": "Failed to retry step",
146
+ "jobs.errors.cancelFailed": "Failed to cancel job",
42
147
  "jobs.errors.refreshFailed": "Failed to refresh job",
43
148
  "jobs.detail.backToStart": "Back to jobs",
44
149
  "jobs.detail.loadFailed": "Failed to load job",
@@ -46,6 +151,13 @@
46
151
  "jobs.detail.workflowMissing": "Workflow definition is unavailable; step list cannot be shown.",
47
152
  "jobs.detail.queued": "Queued — waiting for the first step to start.",
48
153
  "jobs.detail.jumpToCurrent": "Jump to current step",
154
+ "jobs.detail.retryWorkflow": "Retry entire workflow",
155
+ "jobs.detail.retryStep": "Retry this step",
156
+ "jobs.detail.retrying": "Retrying…",
157
+ "jobs.detail.cancel": "Cancel",
158
+ "jobs.detail.cancelling": "Cancelling…",
159
+ "jobs.detail.worktree": "Worktree",
160
+ "jobs.detail.worktreeDeleted": "Worktree deleted",
49
161
  "jobs.detail.stepsHeading": "Steps",
50
162
  "jobs.detail.noStepSelected": "Select a step to inspect its output.",
51
163
  "jobs.detail.loopBack": "Back to loop",
@@ -69,6 +181,9 @@
69
181
  "jobs.table.column.subject": "Subject",
70
182
  "jobs.table.column.started": "Started",
71
183
  "jobs.table.column.completed": "Completed",
184
+ "jobs.table.column.actions": "Actions",
185
+ "jobs.table.retry": "Retry",
186
+ "jobs.table.cancel": "Cancel",
72
187
  "jobs.list.title": "Jobs",
73
188
  "jobs.list.filterByStatus": "Filter by status",
74
189
  "jobs.list.filterByWorkflow": "Filter by workflow",
@@ -77,23 +192,28 @@
77
192
  "jobs.list.empty": "No jobs match these filters.",
78
193
  "jobs.list.loadFailed": "Failed to load jobs",
79
194
  "jobs.list.filterAll": "All",
195
+ "jobs.list.running": "Currently Running",
196
+ "jobs.list.history": "History",
197
+ "jobs.list.runningEmpty": "No jobs are running.",
198
+ "jobs.list.historyEmpty": "No jobs match these filters.",
80
199
  "workflow-editor.titleNew": "New workflow",
81
200
  "workflow-editor.titleEdit": "Edit workflow · {{id}}",
82
- "workflow-editor.backToJobs": "Back to jobs",
201
+ "workflow-editor.backToWorkflows": "Back to workflows",
83
202
  "workflow-editor.loading": "Loading…",
84
203
  "workflow-editor.validation": "Validation",
85
204
  "workflow-editor.basics": "Basics",
86
205
  "workflow-editor.name": "Workflow name",
87
206
  "workflow-editor.appliesTo": "Runs on",
88
- "workflow-editor.cardinality.label": "Launch mode",
207
+ "workflow-editor.subjectHandling.label": "Items",
89
208
  "workflow-editor.description": "Description",
90
209
  "workflow-editor.subjectType.none": "Nothing, standalone workflow",
91
210
  "workflow-editor.subjectType.ticket": "Ticket",
92
211
  "workflow-editor.subjectType.pull_request": "Pull request",
93
212
  "workflow-editor.subjectType.documentation": "Documentation",
94
- "workflow-editor.cardinality.single": "Single",
95
- "workflow-editor.cardinality.batch": "Batch",
96
- "workflow-editor.cardinality.aggregate": "Aggregate",
213
+ "workflow-editor.subjectHandling.per-subject": "One at a time",
214
+ "workflow-editor.subjectHandling.collection": "As a group",
215
+ "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.",
216
+ "workflow-editor.subjectHandling.help.collection": "Steps see the whole selected set and produce one combined result.",
97
217
  "workflow-editor.notificationPolicy": "Notification policy",
98
218
  "workflow-editor.trigger.on_fail": "On failure",
99
219
  "workflow-editor.trigger.on_complete": "On completion",
@@ -107,6 +227,7 @@
107
227
  "workflow-editor.inputType.number": "Number",
108
228
  "workflow-editor.inputType.boolean": "Boolean",
109
229
  "workflow-editor.inputType.select": "Select",
230
+ "workflow-editor.inputType.localRepository": "Local repository",
110
231
  "workflow-editor.required": "Required",
111
232
  "workflow-editor.remove": "Remove",
112
233
  "workflow-editor.addInputField": "Add input field",
@@ -118,12 +239,14 @@
118
239
  "step-list.moveDown": "Down",
119
240
  "step-list.remove": "Remove",
120
241
  "step-list.addStep": "Add step",
242
+ "step-list.unnamed": "Untitled",
121
243
  "step-list.name": "Name",
122
244
  "step-list.id": "Id",
123
245
  "step-list.idHint": "Generated from the step name — edit it directly if you want a different reference.",
124
- "step-list.objective": "Objective",
125
- "step-list.knowledgeScope": "Knowledge scope",
126
- "step-list.knowledgeScopeHint": "Leave all unchecked to omit (all tiers).",
246
+ "step-list.objective": "Prompt",
247
+ "step-list.contextFiles": "Context Files",
248
+ "step-list.contextFilesEmpty": "None selected",
249
+ "step-list.selectContextFiles": "Select context files",
127
250
  "step-list.outputFormat.label": "Output format",
128
251
  "step-list.interaction.label": "Interaction",
129
252
  "step-list.notify": "Notify",
@@ -163,11 +286,32 @@
163
286
  "step-list.gitOperation.create_branch": "Create branch",
164
287
  "step-list.gitOperation.commit": "Commit",
165
288
  "step-list.gitOperation.push": "Push",
289
+ "step-list.createWorktree.mode": "Mode",
290
+ "step-list.createWorktree.newBranch": "New branch",
291
+ "step-list.createWorktree.existingBranch": "Existing branch",
292
+ "step-list.createWorktree.repoPath": "Repository path",
293
+ "step-list.createWorktree.baseBranch": "Base branch",
294
+ "step-list.createWorktree.branchName": "Branch name",
295
+ "step-list.createWorktree.branch": "Branch",
166
296
  "step-list.providerAction.get_subject": "Get subject",
167
297
  "step-list.providerAction.get_comments": "Get comments",
168
298
  "step-list.providerAction.post_comment": "Post comment",
169
299
  "step-list.providerAction.update_status": "Update status",
170
300
  "step-list.providerAction.get_content": "Get content",
301
+ "step-list.extendedAction.mode": "Action source",
302
+ "step-list.extendedAction.portable": "Portable action",
303
+ "step-list.extendedAction.extended": "Use an extended action",
304
+ "step-list.extendedAction.provider": "Provider",
305
+ "step-list.extendedAction.action": "Extended action",
306
+ "step-list.extendedAction.none": "Select an action",
307
+ "step-list.extendedAction.empty": "This provider has no extended actions",
308
+ "step-list.extendedAction.mismatch": "Requires {{required}} — {{active}} is currently configured",
309
+ "step-list.target.toggle": "Target a different subject",
310
+ "step-list.target.subjectType": "Subject type",
311
+ "step-list.target.source": "Provider instance",
312
+ "step-list.target.sourcePlaceholder": "Select an instance",
313
+ "step-list.target.subjectId": "Subject id",
314
+ "step-list.target.subjectIdHint": "Usually an interpolated reference to an earlier step, e.g. resolve-key",
171
315
  "step-list.knowledgeTier.user": "User",
172
316
  "step-list.knowledgeTier.organization": "Organization",
173
317
  "step-list.knowledgeTier.project": "Project",
@@ -177,7 +321,50 @@
177
321
  "step-list.onMaxIterations.continue": "Continue",
178
322
  "step-list.onMaxIterations.ask_human": "Ask human",
179
323
  "settings.title": "Settings",
180
- "settings.lede": "Choose which providers Kno uses, and store API keys. Keys take effect immediately; switching an implementation requires a restart.",
324
+ "settings.lede": "Configure provider instances and store API keys. Adding or changing an instance requires a restart; the default agent can be changed immediately.",
325
+ "settings.addProvider": "Add provider",
326
+ "settings.editProvider": "Edit provider",
327
+ "settings.addInstance": "Add provider instance",
328
+ "settings.addInstance.submit": "Add instance",
329
+ "settings.removeInstance": "Remove",
330
+ "settings.edit": "Edit",
331
+ "settings.delete": "Delete",
332
+ "settings.deleteConfirm": "Are you sure you want to delete this provider instance?",
333
+ "settings.kind.label": "Kind",
334
+ "settings.kind.subject": "Subject provider",
335
+ "settings.kind.agent": "Agent",
336
+ "settings.type.label": "Type",
337
+ "settings.typeOption.jira": "Jira",
338
+ "settings.typeOption.bitbucket": "Bitbucket",
339
+ "settings.typeOption.github": "GitHub Issues",
340
+ "settings.typeOption.confluence": "Confluence",
341
+ "settings.typeOption.manualTicket": "Manual (Ticket)",
342
+ "settings.typeOption.manualDocumentation": "Manual (Documentation)",
343
+ "settings.typeOption.claude": "Claude",
344
+ "settings.typeOption.cursor": "Cursor",
345
+ "settings.subjectType.label": "Subject type",
346
+ "settings.instanceId": "Instance id",
347
+ "settings.instanceIdHint": "Generated from the display name — edit it directly if you want a different id.",
348
+ "settings.displayName": "Display name",
349
+ "settings.displayNameRequired": "Display name is required",
350
+ "settings.defaultAgent.label": "Default agent",
351
+ "settings.defaultAgent.toggle": "Set as default agent",
352
+ "settings.column.displayName": "Display name",
353
+ "settings.column.type": "Type",
354
+ "settings.column.expiresOn": "Expires on",
355
+ "settings.column.default": "Default",
356
+ "settings.column.actions": "Actions",
357
+ "settings.expiresOn.label": "Expires on",
358
+ "settings.expiresOn.hint": "A manual reminder only — Knoflows does not check this date with the provider.",
359
+ "settings.ticket.github": "GitHub Issues",
360
+ "settings.github.username": "GitHub username",
361
+ "step-list.agentInstance.label": "Agent",
362
+ "step-list.agentInstance.default": "Use default agent",
363
+ "views.editor.instance": "Provider instance",
364
+ "views.editor.instancePlaceholder": "Select a provider instance",
365
+ "views.editor.instanceNeeded": "This view has no provider instance. Pick one to finish setup.",
366
+ "views.editor.noEligibleInstances": "No configured providers support this workflow's subject type — add one in Manage → Providers first",
367
+ "views.editor.pickInstance": "Pick a provider instance",
181
368
  "settings.section.ticket": "Ticket tracking",
182
369
  "settings.section.repo": "Repository hosting",
183
370
  "settings.section.agent": "Coding agent",
@@ -192,6 +379,8 @@
192
379
  "settings.agent.cursor": "Cursor",
193
380
  "settings.jira.baseUrl": "Jira base URL",
194
381
  "settings.jira.email": "Jira email",
382
+ "settings.confluence.baseUrl": "Confluence base URL",
383
+ "settings.confluence.email": "Confluence email",
195
384
  "settings.bitbucket.baseUrl": "Bitbucket base URL",
196
385
  "settings.bitbucket.email": "Bitbucket email",
197
386
  "settings.bitbucket.workspace": "Bitbucket workspace",
@@ -199,21 +388,32 @@
199
388
  "settings.apiKey.configured": "Configured ✓",
200
389
  "settings.apiKey.notConfigured": "Not configured",
201
390
  "settings.apiKey.placeholder": "Enter a new key to replace the stored value",
391
+ "settings.apiKey.placeholderCreate": "API key",
392
+ "settings.apiKey.placeholderEdit": "Leave blank to keep the current key",
393
+ "settings.apiKey.required": "API key is required",
202
394
  "settings.apiKey.set": "Set key",
203
395
  "settings.apiKey.setSuccess": "API key saved",
204
396
  "settings.apiKey.setFailed": "Failed to save API key",
205
- "settings.restartRequired.message": "Some changes require restarting Kno to take effect",
397
+ "settings.apiKey.setFailedAfterSave": "Provider saved, but the API key could not be stored. Enter the key again to finish setup.",
398
+ "settings.model.label": "Default model",
399
+ "settings.model.placeholder": "Provider default",
400
+ "settings.model.fetch": "Fetch available models",
401
+ "settings.model.fetchFailed": "Could not fetch models",
402
+ "settings.model.hint": "Leave unset to use the provider's own default. Fetch after entering an API key.",
403
+ "settings.restartRequired.message": "Some changes require restarting Knoflows to take effect",
206
404
  "settings.saveSuccess": "Settings saved",
207
405
  "settings.saveFailed": "Failed to save settings",
208
406
  "settings.validation": "Validation",
209
407
  "settings.loadFailed": "Failed to load settings",
210
408
  "workflows.list.title": "Workflows",
211
409
  "workflows.list.createButton": "Create workflow",
410
+ "workflows.list.browseLibrary": "Browse library",
212
411
  "workflows.list.emptyState": "No workflows yet. Create one to get started.",
213
412
  "workflows.list.emptyCreateButton": "Create your first workflow",
413
+ "workflows.list.emptyBrowseLibrary": "Browse the library",
214
414
  "workflows.list.stepCount": "{{count}} steps",
215
415
  "workflows.list.noDescription": "No description",
216
- "workflows.list.filterByLaunchMode": "Filter by launch mode",
416
+ "workflows.list.filterBySubjectHandling": "Filter by items",
217
417
  "workflows.list.filterAll": "All",
218
418
  "workflows.list.edit": "Edit",
219
419
  "workflows.list.delete": "Delete",
@@ -224,6 +424,17 @@
224
424
  "workflows.list.column.steps": "Steps",
225
425
  "workflows.list.column.actions": "Actions",
226
426
  "workflows.list.loadFailed": "Failed to load workflows",
427
+ "workflow-library.title": "Workflow library",
428
+ "workflow-library.lede": "Copy an example into your workspace. Once added, it is yours to edit.",
429
+ "workflow-library.source.example": "Example",
430
+ "workflow-library.source.community": "Community",
431
+ "workflow-library.source.official": "Official",
432
+ "workflow-library.previewSteps": "Preview steps",
433
+ "workflow-library.hideSteps": "Hide steps",
434
+ "workflow-library.add": "Add to my workflows",
435
+ "workflow-library.adding": "Adding…",
436
+ "workflow-library.loadFailed": "Failed to load the workflow library",
437
+ "workflow-library.addFailed": "Failed to add this workflow",
227
438
  "views.list.title": "Views",
228
439
  "views.list.createButton": "Create view",
229
440
  "views.list.emptyState": "No views yet. Create one to get started.",
@@ -235,15 +446,24 @@
235
446
  "views.list.loadFailed": "Failed to load views",
236
447
  "views.list.column.name": "Name",
237
448
  "views.list.column.subjectType": "Subject type",
449
+ "views.list.column.workflow": "Workflow",
238
450
  "views.list.column.query": "Query",
239
451
  "views.list.column.actions": "Actions",
240
452
  "views.editor.titleNew": "New view",
241
453
  "views.editor.titleEdit": "Edit view · {{id}}",
242
454
  "views.editor.backToList": "Back to views",
243
455
  "views.editor.name": "Name",
456
+ "views.editor.workflow": "Workflow",
244
457
  "views.editor.subjectType": "Subject type",
245
458
  "views.editor.query": "Query (JSON)",
246
- "views.editor.queryHint": "Raw provider filter object. A query builder comes later.",
459
+ "views.editor.queryHint": "Raw provider filter object. Use this when no template covers what you need.",
460
+ "views.editor.queryMode": "Query",
461
+ "views.editor.queryMode.template": "Template",
462
+ "views.editor.queryMode.raw": "Raw JSON",
463
+ "views.editor.template": "Template",
464
+ "views.editor.pickTemplate": "Choose a query template, or switch to raw JSON",
465
+ "views.editor.missingParam": "{{label}} is required",
466
+ "views.editor.resolveFailed": "Failed to resolve query template",
247
467
  "views.editor.invalidJson": "Query must be a JSON object",
248
468
  "views.editor.validation": "Validation",
249
469
  "views.editor.created": "View created",
@@ -273,14 +493,41 @@
273
493
  "views.detail.start": "Start",
274
494
  "views.detail.rowStartWorkflow": "Single workflow for row start",
275
495
  "views.detail.emptySubjects": "No subjects currently match this view.",
496
+ "runnableTable.column.item": "Item",
497
+ "runnableTable.column.latestRun": "Latest run",
498
+ "runnableTable.column.actions": "Actions",
499
+ "runnableTable.run": "Run",
500
+ "runnableTable.runSelected": "Run selected ({{count}})",
501
+ "runnableTable.neverRun": "Never run",
502
+ "shortcuts.list.title": "Shortcuts",
503
+ "shortcuts.list.createButton": "Create shortcut",
504
+ "shortcuts.list.emptyState": "No shortcuts yet. Create one to run a subject-less workflow with saved inputs.",
505
+ "shortcuts.list.emptyCreateButton": "Create your first shortcut",
506
+ "shortcuts.list.loadFailed": "Failed to load shortcuts",
507
+ "shortcuts.list.runFailed": "Failed to start shortcut",
508
+ "shortcuts.list.deleteFailed": "Failed to delete shortcut",
509
+ "shortcuts.editor.titleNew": "New shortcut",
510
+ "shortcuts.editor.titleEdit": "Edit shortcut · {{id}}",
511
+ "shortcuts.editor.backToList": "Back to shortcuts",
512
+ "shortcuts.editor.name": "Name",
513
+ "shortcuts.editor.workflow": "Workflow",
514
+ "shortcuts.editor.validation": "Validation",
515
+ "shortcuts.editor.created": "Shortcut created",
516
+ "shortcuts.editor.saved": "Shortcut saved",
517
+ "shortcuts.editor.saveFailed": "Failed to save shortcut",
518
+ "shortcuts.editor.loadFailed": "Failed to load shortcut",
276
519
  "batches.detail.backHint": "Back to views",
277
520
  "batches.detail.loadFailed": "Failed to load batch",
278
521
  "batches.detail.subjectCount": "{{count}} subjects",
279
522
  "batches.detail.membersHeading": "Member jobs",
523
+ "batches.detail.cancel": "Cancel batch",
524
+ "batches.detail.cancelling": "Cancelling…",
525
+ "batches.errors.cancelFailed": "Failed to cancel batch",
280
526
  "batches.status.running": "Running",
281
527
  "batches.status.completed": "Completed",
282
528
  "batches.status.completed_with_issues": "Completed with issues",
283
529
  "batches.status.failed": "Failed",
530
+ "batches.status.cancelled": "Cancelled",
284
531
  "batches.triggeredBy.schedule": "Schedule",
285
532
  "batches.triggeredBy.view_bulk": "View (all matching)",
286
533
  "batches.triggeredBy.multiselect": "Multiselect"