@taskforcehq/taskforce 0.3.168

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 (492) hide show
  1. package/README.md +241 -0
  2. package/dist/Taskforce.d.ts +3 -0
  3. package/dist/Taskforce.js +3 -0
  4. package/dist/Taskforce.module.css +7587 -0
  5. package/dist/TaskforceCore.CategoryFallback.test.d.ts +1 -0
  6. package/dist/TaskforceCore.CategoryFallback.test.js +98 -0
  7. package/dist/TaskforceCore.d.ts +12 -0
  8. package/dist/TaskforceCore.js +729 -0
  9. package/dist/TaskforceCore.test.d.ts +1 -0
  10. package/dist/TaskforceCore.test.js +2132 -0
  11. package/dist/TaskforceScreenshot.d.ts +11 -0
  12. package/dist/TaskforceScreenshot.js +113 -0
  13. package/dist/TaskforceWidget.d.ts +6 -0
  14. package/dist/TaskforceWidget.js +101 -0
  15. package/dist/TaskforceWidget.test.d.ts +1 -0
  16. package/dist/TaskforceWidget.test.js +92 -0
  17. package/dist/UnsavedChangesRelaxed.test.d.ts +1 -0
  18. package/dist/UnsavedChangesRelaxed.test.js +16 -0
  19. package/dist/__tests__/localizationCatalogs.test.d.ts +1 -0
  20. package/dist/__tests__/localizationCatalogs.test.js +37 -0
  21. package/dist/__tests__/planParser.test.d.ts +1 -0
  22. package/dist/__tests__/planParser.test.js +183 -0
  23. package/dist/__tests__/releaseVersion.test.d.ts +1 -0
  24. package/dist/__tests__/releaseVersion.test.js +32 -0
  25. package/dist/__tests__/structuredCommentValidation.test.d.ts +1 -0
  26. package/dist/__tests__/structuredCommentValidation.test.js +31 -0
  27. package/dist/__tests__/structuredDocValidation.test.d.ts +1 -0
  28. package/dist/__tests__/structuredDocValidation.test.js +30 -0
  29. package/dist/__tests__/templateEngine.test.d.ts +1 -0
  30. package/dist/__tests__/templateEngine.test.js +150 -0
  31. package/dist/__tests__/templates.test.d.ts +1 -0
  32. package/dist/__tests__/templates.test.js +45 -0
  33. package/dist/__tests__/workflowDocumentFixtures.test.d.ts +1 -0
  34. package/dist/__tests__/workflowDocumentFixtures.test.js +78 -0
  35. package/dist/__tests__/workflowExportMatrix.test.d.ts +1 -0
  36. package/dist/__tests__/workflowExportMatrix.test.js +113 -0
  37. package/dist/__tests__/workflowExportSnapshots.test.d.ts +1 -0
  38. package/dist/__tests__/workflowExportSnapshots.test.js +28 -0
  39. package/dist/__tests__/workflowGeneration.test.d.ts +1 -0
  40. package/dist/__tests__/workflowGeneration.test.js +12 -0
  41. package/dist/__tests__/workflowSimulation.test.d.ts +1 -0
  42. package/dist/__tests__/workflowSimulation.test.js +113 -0
  43. package/dist/__tests__/workflowV2Policy.test.d.ts +1 -0
  44. package/dist/__tests__/workflowV2Policy.test.js +80 -0
  45. package/dist/api.d.ts +30 -0
  46. package/dist/api.js +85 -0
  47. package/dist/cli.d.ts +2 -0
  48. package/dist/cli.js +217 -0
  49. package/dist/compat/priorityCompat.d.ts +2 -0
  50. package/dist/compat/priorityCompat.js +24 -0
  51. package/dist/components/features/DocumentGenerateModal.d.ts +9 -0
  52. package/dist/components/features/DocumentGenerateModal.js +114 -0
  53. package/dist/components/features/DocumentIndex.d.ts +19 -0
  54. package/dist/components/features/DocumentIndex.js +51 -0
  55. package/dist/components/features/DocumentViewer.d.ts +9 -0
  56. package/dist/components/features/DocumentViewer.js +253 -0
  57. package/dist/components/features/DocumentWorkspace.d.ts +21 -0
  58. package/dist/components/features/DocumentWorkspace.js +88 -0
  59. package/dist/components/features/TaskSettings.d.ts +209 -0
  60. package/dist/components/features/TaskSettings.js +500 -0
  61. package/dist/components/features/TaskSettings.test.d.ts +1 -0
  62. package/dist/components/features/TaskSettings.test.js +308 -0
  63. package/dist/components/features/settings/CategoryManager.d.ts +19 -0
  64. package/dist/components/features/settings/CategoryManager.js +113 -0
  65. package/dist/components/features/settings/TaxonomyEditor.d.ts +8 -0
  66. package/dist/components/features/settings/TaxonomyEditor.js +98 -0
  67. package/dist/components/features/settings/TaxonomyManager 2.d.ts +52 -0
  68. package/dist/components/features/settings/TaxonomyManager 2.js +75 -0
  69. package/dist/components/features/settings/TaxonomyManager.d.ts +54 -0
  70. package/dist/components/features/settings/TaxonomyManager.js +77 -0
  71. package/dist/components/features/settings/TypeManager.d.ts +10 -0
  72. package/dist/components/features/settings/TypeManager.js +50 -0
  73. package/dist/components/features/settings/WorkflowEditorPrototype.d.ts +15 -0
  74. package/dist/components/features/settings/WorkflowEditorPrototype.js +245 -0
  75. package/dist/components/task/TaskActionHeader.d.ts +20 -0
  76. package/dist/components/task/TaskActionHeader.js +13 -0
  77. package/dist/components/task/TaskCard.d.ts +47 -0
  78. package/dist/components/task/TaskCard.js +326 -0
  79. package/dist/components/task/TaskCard.test.d.ts +1 -0
  80. package/dist/components/task/TaskCard.test.js +95 -0
  81. package/dist/components/task/TaskContextUpload.d.ts +12 -0
  82. package/dist/components/task/TaskContextUpload.js +393 -0
  83. package/dist/components/task/TaskContextUpload.test.d.ts +1 -0
  84. package/dist/components/task/TaskContextUpload.test.js +189 -0
  85. package/dist/components/task/TaskForm.d.ts +105 -0
  86. package/dist/components/task/TaskForm.js +241 -0
  87. package/dist/components/task/TaskForm.test.d.ts +1 -0
  88. package/dist/components/task/TaskForm.test.js +288 -0
  89. package/dist/components/task/TaskKanban 2.d.ts +76 -0
  90. package/dist/components/task/TaskKanban 2.js +1004 -0
  91. package/dist/components/task/TaskKanban.d.ts +76 -0
  92. package/dist/components/task/TaskKanban.empty-column-drop.test.d.ts +1 -0
  93. package/dist/components/task/TaskKanban.empty-column-drop.test.js +66 -0
  94. package/dist/components/task/TaskKanban.js +1026 -0
  95. package/dist/components/task/TaskKanban.test.d.ts +1 -0
  96. package/dist/components/task/TaskKanban.test.js +46 -0
  97. package/dist/components/task/TaskList.d.ts +74 -0
  98. package/dist/components/task/TaskList.js +38 -0
  99. package/dist/components/task/TaskList.test.d.ts +1 -0
  100. package/dist/components/task/TaskList.test.js +270 -0
  101. package/dist/components/task/TaskScreenshotSection.d.ts +15 -0
  102. package/dist/components/task/TaskScreenshotSection.js +22 -0
  103. package/dist/components/ui/LevelSelector.d.ts +13 -0
  104. package/dist/components/ui/LevelSelector.js +25 -0
  105. package/dist/components/ui/LevelSelector.test.d.ts +1 -0
  106. package/dist/components/ui/LevelSelector.test.js +55 -0
  107. package/dist/components/ui/Markdown.d.ts +6 -0
  108. package/dist/components/ui/Markdown.js +94 -0
  109. package/dist/components/ui/Markdown.test.d.ts +1 -0
  110. package/dist/components/ui/Markdown.test.js +38 -0
  111. package/dist/components/ui/Modal.d.ts +16 -0
  112. package/dist/components/ui/Modal.js +49 -0
  113. package/dist/components/ui/MultiSelectFilter.d.ts +10 -0
  114. package/dist/components/ui/MultiSelectFilter.js +71 -0
  115. package/dist/components/ui/MultiSelectFilter.test.d.ts +1 -0
  116. package/dist/components/ui/MultiSelectFilter.test.js +74 -0
  117. package/dist/components/ui/TaxonomyDropdown.d.ts +17 -0
  118. package/dist/components/ui/TaxonomyDropdown.js +145 -0
  119. package/dist/components/ui/TaxonomyDropdown.test.d.ts +1 -0
  120. package/dist/components/ui/TaxonomyDropdown.test.js +130 -0
  121. package/dist/components/views/StandaloneLayout 2.d.ts +8 -0
  122. package/dist/components/views/StandaloneLayout 2.js +1660 -0
  123. package/dist/components/views/StandaloneLayout.d.ts +8 -0
  124. package/dist/components/views/StandaloneLayout.js +2117 -0
  125. package/dist/components/views/WidgetView.d.ts +8 -0
  126. package/dist/components/views/WidgetView.js +221 -0
  127. package/dist/config/envSchema.d.ts +28 -0
  128. package/dist/config/envSchema.js +374 -0
  129. package/dist/config/envSchema.test.d.ts +1 -0
  130. package/dist/config/envSchema.test.js +97 -0
  131. package/dist/config/surfaceBase.d.ts +2 -0
  132. package/dist/config/surfaceBase.js +8 -0
  133. package/dist/core/BulkUpdateFieldsPreview.test.d.ts +1 -0
  134. package/dist/core/BulkUpdateFieldsPreview.test.js +62 -0
  135. package/dist/core/CompletedAt.test.d.ts +1 -0
  136. package/dist/core/CompletedAt.test.js +44 -0
  137. package/dist/core/CreatedBy.test.d.ts +1 -0
  138. package/dist/core/CreatedBy.test.js +60 -0
  139. package/dist/core/EntitlementsPolicy.test.d.ts +1 -0
  140. package/dist/core/EntitlementsPolicy.test.js +145 -0
  141. package/dist/core/InitiativeTemplates.test.d.ts +1 -0
  142. package/dist/core/InitiativeTemplates.test.js +50 -0
  143. package/dist/core/ParentLifecycle.test.d.ts +1 -0
  144. package/dist/core/ParentLifecycle.test.js +98 -0
  145. package/dist/core/ScheduleFields.test.d.ts +1 -0
  146. package/dist/core/ScheduleFields.test.js +197 -0
  147. package/dist/core/SetupState.test.d.ts +1 -0
  148. package/dist/core/SetupState.test.js +113 -0
  149. package/dist/core/SystemAdmin.test.d.ts +1 -0
  150. package/dist/core/SystemAdmin.test.js +295 -0
  151. package/dist/core/TaskTaxonomyValidation.test.d.ts +1 -0
  152. package/dist/core/TaskTaxonomyValidation.test.js +64 -0
  153. package/dist/core/Taskforce.d.ts +1063 -0
  154. package/dist/core/Taskforce.ids.test.d.ts +1 -0
  155. package/dist/core/Taskforce.ids.test.js +168 -0
  156. package/dist/core/Taskforce.js +5981 -0
  157. package/dist/core/Taskforce.realtimeMutation.test.d.ts +1 -0
  158. package/dist/core/Taskforce.realtimeMutation.test.js +76 -0
  159. package/dist/core/WorkspaceDelete.test.d.ts +1 -0
  160. package/dist/core/WorkspaceDelete.test.js +140 -0
  161. package/dist/core/WorkspacePermissions.test.d.ts +1 -0
  162. package/dist/core/WorkspacePermissions.test.js +151 -0
  163. package/dist/core/WorkspacePlanMode.test.d.ts +1 -0
  164. package/dist/core/WorkspacePlanMode.test.js +104 -0
  165. package/dist/hooks/authGuardPolicy.d.ts +26 -0
  166. package/dist/hooks/authGuardPolicy.js +32 -0
  167. package/dist/hooks/authGuardPolicy.test.d.ts +1 -0
  168. package/dist/hooks/authGuardPolicy.test.js +76 -0
  169. package/dist/hooks/useDraggable.d.ts +12 -0
  170. package/dist/hooks/useDraggable.js +65 -0
  171. package/dist/hooks/useRealtimeSync.d.ts +24 -0
  172. package/dist/hooks/useRealtimeSync.js +275 -0
  173. package/dist/hooks/useRealtimeSync.test.d.ts +1 -0
  174. package/dist/hooks/useRealtimeSync.test.js +284 -0
  175. package/dist/hooks/useSyncOrchestrator.d.ts +164 -0
  176. package/dist/hooks/useSyncOrchestrator.js +1427 -0
  177. package/dist/hooks/useSyncOrchestrator.retry-closure.test.d.ts +1 -0
  178. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +367 -0
  179. package/dist/hooks/useTaskforce.d.ts +727 -0
  180. package/dist/hooks/useTaskforce.js +4396 -0
  181. package/dist/hooks/useTaskforce.priority-filters.test.d.ts +1 -0
  182. package/dist/hooks/useTaskforce.priority-filters.test.js +33 -0
  183. package/dist/hooks/useWorkspaceSyncController.d.ts +80 -0
  184. package/dist/hooks/useWorkspaceSyncController.js +598 -0
  185. package/dist/hooks/useWorkspaceSyncController.test.d.ts +1 -0
  186. package/dist/hooks/useWorkspaceSyncController.test.js +236 -0
  187. package/dist/index.d.ts +12 -0
  188. package/dist/index.js +11 -0
  189. package/dist/localization/index.d.ts +8 -0
  190. package/dist/localization/index.js +81 -0
  191. package/dist/localization/locales/en-US.d.ts +151 -0
  192. package/dist/localization/locales/en-US.js +150 -0
  193. package/dist/localization/locales/es-419.d.ts +2 -0
  194. package/dist/localization/locales/es-419.js +150 -0
  195. package/dist/localization/locales/pt-BR.d.ts +2 -0
  196. package/dist/localization/locales/pt-BR.js +150 -0
  197. package/dist/main.d.ts +1 -0
  198. package/dist/main.js +33 -0
  199. package/dist/mcp/optionResolution.d.ts +14 -0
  200. package/dist/mcp/optionResolution.js +126 -0
  201. package/dist/mcp/optionResolution.test.d.ts +1 -0
  202. package/dist/mcp/optionResolution.test.js +39 -0
  203. package/dist/mcp/server.d.ts +1 -0
  204. package/dist/mcp/server.js +1793 -0
  205. package/dist/mcp/structuredCommentValidation.d.ts +6 -0
  206. package/dist/mcp/structuredCommentValidation.js +56 -0
  207. package/dist/mcp/structuredDocValidation.d.ts +6 -0
  208. package/dist/mcp/structuredDocValidation.js +75 -0
  209. package/dist/migrations/billingSchemaParity.test.d.ts +1 -0
  210. package/dist/migrations/billingSchemaParity.test.js +46 -0
  211. package/dist/migrations/clientMigrations.d.ts +9 -0
  212. package/dist/migrations/clientMigrations.js +74 -0
  213. package/dist/migrations/flags.d.ts +6 -0
  214. package/dist/migrations/flags.js +8 -0
  215. package/dist/migrations/taskMigrations.d.ts +71 -0
  216. package/dist/migrations/taskMigrations.js +236 -0
  217. package/dist/migrations/taskMigrations.test.d.ts +1 -0
  218. package/dist/migrations/taskMigrations.test.js +34 -0
  219. package/dist/migrations/taskSchemaMigrations.d.ts +11 -0
  220. package/dist/migrations/taskSchemaMigrations.js +453 -0
  221. package/dist/plugins/index.d.ts +10 -0
  222. package/dist/plugins/index.js +10 -0
  223. package/dist/plugins/vite.d.ts +19 -0
  224. package/dist/plugins/vite.js +271 -0
  225. package/dist/public/android-chrome-192x192.png +0 -0
  226. package/dist/public/android-chrome-512x512.png +0 -0
  227. package/dist/public/apple-touch-icon.png +0 -0
  228. package/dist/public/favicon-16x16.png +0 -0
  229. package/dist/public/favicon-32x32.png +0 -0
  230. package/dist/public/favicon.ico +0 -0
  231. package/dist/public/favicon.png +0 -0
  232. package/dist/public/site.webmanifest +1 -0
  233. package/dist/public/taskforce.png +0 -0
  234. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +55 -0
  235. package/dist/resources/templates/environments/aider.yaml +14 -0
  236. package/dist/resources/templates/environments/antigravity.yaml +10 -0
  237. package/dist/resources/templates/environments/claude.yaml +10 -0
  238. package/dist/resources/templates/environments/cline.yaml +10 -0
  239. package/dist/resources/templates/environments/codex.yaml +13 -0
  240. package/dist/resources/templates/environments/copilot.yaml +10 -0
  241. package/dist/resources/templates/environments/cursor.yaml +9 -0
  242. package/dist/resources/templates/environments/gemini.yaml +9 -0
  243. package/dist/resources/templates/environments/windsurf.yaml +10 -0
  244. package/dist/resources/templates/workflow-sources/README.md +9 -0
  245. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +520 -0
  246. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +1 -0
  247. package/dist/resources/templates/workflows/collaborate.yaml +104 -0
  248. package/dist/resources/templates/workflows/do.yaml +82 -0
  249. package/dist/resources/templates/workflows/evaluate.yaml +111 -0
  250. package/dist/resources/templates/workflows/execute.yaml +142 -0
  251. package/dist/resources/templates/workflows/plan.yaml +112 -0
  252. package/dist/resources/templates/workflows/review.yaml +109 -0
  253. package/dist/runtime/capabilities.d.ts +8 -0
  254. package/dist/runtime/capabilities.js +16 -0
  255. package/dist/security/virusScan.d.ts +16 -0
  256. package/dist/security/virusScan.js +83 -0
  257. package/dist/server/auth.d.ts +51 -0
  258. package/dist/server/auth.js +266 -0
  259. package/dist/server/auth.test.d.ts +1 -0
  260. package/dist/server/auth.test.js +111 -0
  261. package/dist/server/buildInfo.d.ts +7 -0
  262. package/dist/server/buildInfo.js +100 -0
  263. package/dist/server/buildInfo.test.d.ts +1 -0
  264. package/dist/server/buildInfo.test.js +29 -0
  265. package/dist/server/cors.d.ts +7 -0
  266. package/dist/server/cors.js +76 -0
  267. package/dist/server/cors.test.d.ts +1 -0
  268. package/dist/server/cors.test.js +71 -0
  269. package/dist/server/email.d.ts +28 -0
  270. package/dist/server/email.js +138 -0
  271. package/dist/server/email.test.d.ts +1 -0
  272. package/dist/server/email.test.js +113 -0
  273. package/dist/server/index.cookieProxy.test.d.ts +1 -0
  274. package/dist/server/index.cookieProxy.test.js +19 -0
  275. package/dist/server/index.d.ts +17 -0
  276. package/dist/server/index.js +757 -0
  277. package/dist/server/index.rateLimit.test.d.ts +1 -0
  278. package/dist/server/index.rateLimit.test.js +13 -0
  279. package/dist/server/index.test.d.ts +1 -0
  280. package/dist/server/index.test.js +19 -0
  281. package/dist/server/rateLimit.d.ts +29 -0
  282. package/dist/server/rateLimit.js +99 -0
  283. package/dist/server/rateLimit.test.d.ts +1 -0
  284. package/dist/server/rateLimit.test.js +107 -0
  285. package/dist/server/realtimeSync.auth.test.d.ts +1 -0
  286. package/dist/server/realtimeSync.auth.test.js +62 -0
  287. package/dist/server/realtimeSync.replay.test.d.ts +1 -0
  288. package/dist/server/realtimeSync.replay.test.js +192 -0
  289. package/dist/server/realtimeSync.workspaceIsolation.test.d.ts +1 -0
  290. package/dist/server/realtimeSync.workspaceIsolation.test.js +101 -0
  291. package/dist/server/realtimeSyncWs.d.ts +30 -0
  292. package/dist/server/realtimeSyncWs.js +257 -0
  293. package/dist/server/routes.billing.d.ts +15 -0
  294. package/dist/server/routes.billing.js +991 -0
  295. package/dist/server/routes.billing.test.d.ts +1 -0
  296. package/dist/server/routes.billing.test.js +387 -0
  297. package/dist/server/routes.d.ts +72 -0
  298. package/dist/server/routes.js +4820 -0
  299. package/dist/server/routes.sync.d.ts +17 -0
  300. package/dist/server/routes.sync.integration.test.d.ts +1 -0
  301. package/dist/server/routes.sync.integration.test.js +470 -0
  302. package/dist/server/routes.sync.js +1141 -0
  303. package/dist/server/routes.test.d.ts +1 -0
  304. package/dist/server/routes.test.js +4945 -0
  305. package/dist/server/runtimeMode.d.ts +4 -0
  306. package/dist/server/runtimeMode.js +25 -0
  307. package/dist/server/runtimeMode.test.d.ts +1 -0
  308. package/dist/server/runtimeMode.test.js +26 -0
  309. package/dist/server/securityHeaders.d.ts +3 -0
  310. package/dist/server/securityHeaders.js +25 -0
  311. package/dist/server/securityHeaders.test.d.ts +1 -0
  312. package/dist/server/securityHeaders.test.js +32 -0
  313. package/dist/server/smtpTransport.d.ts +21 -0
  314. package/dist/server/smtpTransport.js +11 -0
  315. package/dist/server/start.d.ts +1 -0
  316. package/dist/server/start.js +17 -0
  317. package/dist/services/formatTransformers.d.ts +29 -0
  318. package/dist/services/formatTransformers.js +56 -0
  319. package/dist/services/templateEngine.d.ts +46 -0
  320. package/dist/services/templateEngine.js +148 -0
  321. package/dist/shared/runtimeContract.d.ts +12 -0
  322. package/dist/shared/runtimeContract.js +23 -0
  323. package/dist/shared/runtimeContract.test.d.ts +1 -0
  324. package/dist/shared/runtimeContract.test.js +23 -0
  325. package/dist/soak/preflight.cli.d.ts +1 -0
  326. package/dist/soak/preflight.cli.js +28 -0
  327. package/dist/soak/preflight.d.ts +26 -0
  328. package/dist/soak/preflight.js +113 -0
  329. package/dist/soak/preflight.test.d.ts +1 -0
  330. package/dist/soak/preflight.test.js +39 -0
  331. package/dist/soak/syncSoakHarness.d.ts +6 -0
  332. package/dist/soak/syncSoakHarness.js +10 -0
  333. package/dist/storage/createDatabaseAdapter.d.ts +2 -0
  334. package/dist/storage/createDatabaseAdapter.js +9 -0
  335. package/dist/storage/databaseAdapter.d.ts +22 -0
  336. package/dist/storage/databaseAdapter.js +1 -0
  337. package/dist/storage/documentIntegrity.d.ts +28 -0
  338. package/dist/storage/documentIntegrity.js +103 -0
  339. package/dist/storage/documentPurge.d.ts +14 -0
  340. package/dist/storage/documentPurge.js +46 -0
  341. package/dist/storage/documentRegistry.d.ts +39 -0
  342. package/dist/storage/documentRegistry.js +115 -0
  343. package/dist/storage/integritySchedule.d.ts +17 -0
  344. package/dist/storage/integritySchedule.js +62 -0
  345. package/dist/storage/objectStorage.d.ts +20 -0
  346. package/dist/storage/objectStorage.js +15 -0
  347. package/dist/storage/objectStorageClient.d.ts +18 -0
  348. package/dist/storage/objectStorageClient.js +301 -0
  349. package/dist/storage/objectStorageConfig.d.ts +2 -0
  350. package/dist/storage/objectStorageConfig.js +45 -0
  351. package/dist/storage/postgresAdapter.d.ts +20 -0
  352. package/dist/storage/postgresAdapter.js +204 -0
  353. package/dist/storage/postgresWorker.d.ts +1 -0
  354. package/dist/storage/postgresWorker.js +110 -0
  355. package/dist/storage/providerConfig.d.ts +6 -0
  356. package/dist/storage/providerConfig.js +11 -0
  357. package/dist/storage/sqliteAdapter.d.ts +14 -0
  358. package/dist/storage/sqliteAdapter.js +28 -0
  359. package/dist/storage/taskAssetStore.d.ts +56 -0
  360. package/dist/storage/taskAssetStore.js +297 -0
  361. package/dist/sync/cloudSyncApi.d.ts +47 -0
  362. package/dist/sync/cloudSyncApi.js +138 -0
  363. package/dist/sync/cloudSyncApi.test.d.ts +1 -0
  364. package/dist/sync/cloudSyncApi.test.js +54 -0
  365. package/dist/sync/encryptionService.d.ts +11 -0
  366. package/dist/sync/encryptionService.js +61 -0
  367. package/dist/sync/encryptionService.test.d.ts +1 -0
  368. package/dist/sync/encryptionService.test.js +52 -0
  369. package/dist/sync/realtimeFeature.d.ts +6 -0
  370. package/dist/sync/realtimeFeature.js +20 -0
  371. package/dist/sync/realtimeFeature.test.d.ts +1 -0
  372. package/dist/sync/realtimeFeature.test.js +30 -0
  373. package/dist/sync/realtimeReconcile.d.ts +30 -0
  374. package/dist/sync/realtimeReconcile.js +90 -0
  375. package/dist/sync/realtimeReconcile.test.d.ts +1 -0
  376. package/dist/sync/realtimeReconcile.test.js +43 -0
  377. package/dist/sync/syncService.d.ts +96 -0
  378. package/dist/sync/syncService.js +423 -0
  379. package/dist/sync/syncService.test.d.ts +1 -0
  380. package/dist/sync/syncService.test.js +484 -0
  381. package/dist/sync/workspaceSyncModel.d.ts +61 -0
  382. package/dist/sync/workspaceSyncModel.js +136 -0
  383. package/dist/sync/workspaceSyncModel.test.d.ts +1 -0
  384. package/dist/sync/workspaceSyncModel.test.js +73 -0
  385. package/dist/test/setup.d.ts +1 -0
  386. package/dist/test/setup.js +15 -0
  387. package/dist/types.d.ts +157 -0
  388. package/dist/types.js +41 -0
  389. package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
  390. package/dist/ui/assets/index-0W5vyCpn.css +1 -0
  391. package/dist/ui/assets/index-MCZuNNfn.js +23 -0
  392. package/dist/ui/assets/logo_white_01-0Vx-iIIv.png +0 -0
  393. package/dist/ui/assets/taskforce-BxLPokNB.png +0 -0
  394. package/dist/ui/assets/vendor-dnd-BI1K77C1.js +5 -0
  395. package/dist/ui/assets/vendor-icons-ZFG3SGwo.js +1 -0
  396. package/dist/ui/assets/vendor-markdown-CKYkQHfj.js +29 -0
  397. package/dist/ui/assets/vendor-react-DdIDsh7f.js +9 -0
  398. package/dist/ui/assets/vendor-router-BtiNU7Dl.js +3 -0
  399. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  400. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  401. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  402. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  403. package/dist/ui/favicon/android-chrome-192x192.png +0 -0
  404. package/dist/ui/favicon/android-chrome-512x512.png +0 -0
  405. package/dist/ui/favicon/apple-touch-icon.png +0 -0
  406. package/dist/ui/favicon/favicon-16x16.png +0 -0
  407. package/dist/ui/favicon/favicon-32x32.png +0 -0
  408. package/dist/ui/favicon/favicon.ico +0 -0
  409. package/dist/ui/favicon/favicon.png +0 -0
  410. package/dist/ui/favicon/site.webmanifest +1 -0
  411. package/dist/ui/fonts/RussoOne-Regular.ttf +0 -0
  412. package/dist/ui/images/taskforce.png +0 -0
  413. package/dist/ui/index.html +19 -0
  414. package/dist/utils/checklistMarkdown.d.ts +9 -0
  415. package/dist/utils/checklistMarkdown.js +46 -0
  416. package/dist/utils/constants.d.ts +21 -0
  417. package/dist/utils/constants.icons.test.d.ts +1 -0
  418. package/dist/utils/constants.icons.test.js +40 -0
  419. package/dist/utils/constants.js +100 -0
  420. package/dist/utils/contextFiles.d.ts +8 -0
  421. package/dist/utils/contextFiles.js +54 -0
  422. package/dist/utils/formatting.d.ts +5 -0
  423. package/dist/utils/formatting.js +30 -0
  424. package/dist/utils/planParser.d.ts +22 -0
  425. package/dist/utils/planParser.js +151 -0
  426. package/dist/utils/taskDragZones.d.ts +8 -0
  427. package/dist/utils/taskDragZones.js +14 -0
  428. package/dist/utils/taskDragZones.test.d.ts +1 -0
  429. package/dist/utils/taskDragZones.test.js +14 -0
  430. package/dist/utils/taskHierarchy.d.ts +4 -0
  431. package/dist/utils/taskHierarchy.js +69 -0
  432. package/dist/utils/taskHierarchy.test.d.ts +1 -0
  433. package/dist/utils/taskHierarchy.test.js +38 -0
  434. package/dist/utils/taskParenting.d.ts +3 -0
  435. package/dist/utils/taskParenting.js +24 -0
  436. package/dist/utils/taskParenting.test.d.ts +1 -0
  437. package/dist/utils/taskParenting.test.js +21 -0
  438. package/dist/utils/taskRelations.d.ts +6 -0
  439. package/dist/utils/taskRelations.js +24 -0
  440. package/dist/utils/taskRelations.test.d.ts +1 -0
  441. package/dist/utils/taskRelations.test.js +34 -0
  442. package/dist/utils/taskUtils.d.ts +2 -0
  443. package/dist/utils/taskUtils.js +20 -0
  444. package/dist/utils/taskforceApiClient.d.ts +7 -0
  445. package/dist/utils/taskforceApiClient.js +42 -0
  446. package/dist/utils/workspaceIdentity.d.ts +8 -0
  447. package/dist/utils/workspaceIdentity.js +47 -0
  448. package/dist/utils/workspaceIdentity.test.d.ts +1 -0
  449. package/dist/utils/workspaceIdentity.test.js +32 -0
  450. package/dist/utils/workspaceLifecycle.d.ts +26 -0
  451. package/dist/utils/workspaceLifecycle.js +69 -0
  452. package/dist/utils/workspaceLifecycle.test.d.ts +1 -0
  453. package/dist/utils/workspaceLifecycle.test.js +64 -0
  454. package/package.json +133 -0
  455. package/scripts/check-compat-boundaries.js +48 -0
  456. package/scripts/check-env.ts +24 -0
  457. package/scripts/check-localization-strings.mjs +49 -0
  458. package/scripts/check-runtime-boundaries.mjs +44 -0
  459. package/scripts/debug-global.mjs +34 -0
  460. package/scripts/debug-server.mjs +36 -0
  461. package/scripts/export-sqlite-to-postgres.mjs +125 -0
  462. package/scripts/generate-env-example.ts +8 -0
  463. package/scripts/generate-workflow-templates.mjs +134 -0
  464. package/scripts/mcp-stdio-adapter.mjs +160 -0
  465. package/scripts/postinstall.js +60 -0
  466. package/scripts/release-version-lib.mjs +88 -0
  467. package/scripts/release-version.mjs +72 -0
  468. package/scripts/run-dev-proxy.sh +49 -0
  469. package/scripts/run-e2e-realtime.sh +16 -0
  470. package/scripts/run-smoke.sh +23 -0
  471. package/scripts/run-soak.sh +29 -0
  472. package/scripts/test-global.js +143 -0
  473. package/scripts/update-homebrew-formula.sh +38 -0
  474. package/src/resources/templates/WORKFLOW_V2_POLICY.md +55 -0
  475. package/src/resources/templates/environments/aider.yaml +14 -0
  476. package/src/resources/templates/environments/antigravity.yaml +10 -0
  477. package/src/resources/templates/environments/claude.yaml +10 -0
  478. package/src/resources/templates/environments/cline.yaml +10 -0
  479. package/src/resources/templates/environments/codex.yaml +13 -0
  480. package/src/resources/templates/environments/copilot.yaml +10 -0
  481. package/src/resources/templates/environments/cursor.yaml +9 -0
  482. package/src/resources/templates/environments/gemini.yaml +9 -0
  483. package/src/resources/templates/environments/windsurf.yaml +10 -0
  484. package/src/resources/templates/workflow-sources/README.md +9 -0
  485. package/src/resources/templates/workflow-sources/workflowDocs.mjs +520 -0
  486. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +1 -0
  487. package/src/resources/templates/workflows/collaborate.yaml +104 -0
  488. package/src/resources/templates/workflows/do.yaml +82 -0
  489. package/src/resources/templates/workflows/evaluate.yaml +111 -0
  490. package/src/resources/templates/workflows/execute.yaml +142 -0
  491. package/src/resources/templates/workflows/plan.yaml +112 -0
  492. package/src/resources/templates/workflows/review.yaml +109 -0
@@ -0,0 +1,82 @@
1
+ version: 2
2
+ name: do
3
+ description: Dispatcher workflow that routes to specialized workflows based on slash command and approach.
4
+ type: workflow
5
+ metadata:
6
+ alwaysApply: true
7
+ dispatch:
8
+ aliases:
9
+ - /do
10
+ - "-d"
11
+ routeByApproach: true
12
+ approachMap:
13
+ evaluate: evaluate
14
+ collaborate: collaborate
15
+ plan: plan
16
+ review: review
17
+ implement: execute
18
+ default: execute
19
+ compat:
20
+ minTaskforceVersion: 0.3.13-beta.2
21
+ requiredToolsCritical:
22
+ - "{{MCP_PREFIX}}get_task"
23
+ requiredToolsOptional:
24
+ - "{{MCP_PREFIX}}list_tasks"
25
+ - "{{MCP_PREFIX}}search_tasks"
26
+ - "{{MCP_PREFIX}}attach_context_file"
27
+ - "{{MCP_PREFIX}}save_task_attachment"
28
+ toolPolicy:
29
+ requiredToolsPolicy:
30
+ critical: strict-fail
31
+ nonCritical: warn-and-fallback
32
+ criticalTools:
33
+ - "{{MCP_PREFIX}}get_task"
34
+ statusTransitions:
35
+ allowedStatuses:
36
+ - task
37
+ - on-hold
38
+ - in-progress
39
+ - review
40
+ forbiddenStatuses:
41
+ - done
42
+ - cancelled
43
+ contextPolicy:
44
+ sourcePriority:
45
+ - mcp
46
+ mcp:
47
+ knownTaskIdTool: "{{MCP_PREFIX}}get_task"
48
+ unknownTaskIdTools:
49
+ - "{{MCP_PREFIX}}list_tasks"
50
+ - "{{MCP_PREFIX}}search_tasks"
51
+ mcpUnavailableAction: stop-and-request-user-action
52
+ prompts:
53
+ startupChecklist: |-
54
+ 1. [ ] **Task Loaded**: [ID] (Status: [Status])
55
+ 2. [ ] **Dispatch Target**: [evaluate | collaborate | plan | review | execute]
56
+ handoffChecklist: |-
57
+ - [ ] Dispatch target selected per slash-command precedence
58
+ - [ ] Routed to target workflow and exited dispatcher
59
+ content:
60
+ default: |-
61
+ # Taskforce Do Dispatcher (v2)
62
+
63
+ > **DISPATCH protocol**:
64
+ > 1. **MCP-first load**:
65
+ > - If task ID is known, call `{{MCP_PREFIX}}get_task`.
66
+ > - If task ID is unknown, use `{{MCP_PREFIX}}list_tasks` / `{{MCP_PREFIX}}search_tasks` to identify it.
67
+ > - If MCP is unavailable, stop and request user action.
68
+ > 2. Print `prompts.startupChecklist`.
69
+
70
+ ---
71
+
72
+ ## Routing Rules
73
+ 1. Slash command wins over approach routing.
74
+ 2. If user explicitly invokes:
75
+ - `/evaluate` -> route to `evaluate`
76
+ - `/collaborate` -> route to `collaborate`
77
+ - `/plan` -> route to `plan`
78
+ - `/review` -> route to `review`
79
+ - `/execute` -> route to `execute`
80
+ 3. If user invokes `/do`, route by `dispatch.approachMap` when task approach is mapped.
81
+ 4. If no mapped approach exists, route to `dispatch.default` (`execute`).
82
+ 5. After routing, print `prompts.handoffChecklist` and stop. Do not run execution phases in this workflow.
@@ -0,0 +1,111 @@
1
+ version: 2
2
+ name: evaluate
3
+ description: Evaluation workflow for strategic analysis, scoring, and recommendation.
4
+ type: workflow
5
+ metadata:
6
+ alwaysApply: false
7
+ dispatch:
8
+ aliases:
9
+ - /evaluate
10
+ - "-e"
11
+ default: evaluate
12
+ compat:
13
+ minTaskforceVersion: 0.3.13-beta.2
14
+ requiredToolsCritical:
15
+ - "{{MCP_PREFIX}}get_task"
16
+ - "{{MCP_PREFIX}}update_task"
17
+ - "{{MCP_PREFIX}}add_comment"
18
+ requiredToolsOptional:
19
+ - "{{MCP_PREFIX}}list_tasks"
20
+ - "{{MCP_PREFIX}}search_tasks"
21
+ - "{{MCP_PREFIX}}get_config"
22
+ - "{{MCP_PREFIX}}attach_context_file"
23
+ - "{{MCP_PREFIX}}save_task_attachment"
24
+ toolPolicy:
25
+ requiredToolsPolicy:
26
+ critical: strict-fail
27
+ nonCritical: warn-and-fallback
28
+ criticalTools:
29
+ - "{{MCP_PREFIX}}get_task"
30
+ - "{{MCP_PREFIX}}update_task"
31
+ - "{{MCP_PREFIX}}add_comment"
32
+ forbiddenTools:
33
+ - "{{MCP_PREFIX}}archive_task"
34
+ statusTransitions:
35
+ allowedStatuses:
36
+ - task
37
+ - on-hold
38
+ - in-progress
39
+ - review
40
+ forbiddenStatuses:
41
+ - done
42
+ - cancelled
43
+ artifacts:
44
+ evaluationReport:
45
+ path: .taskforce/task-data/{taskId}/attachments/evaluation.md
46
+ required: false
47
+ savePolicy: ask-before-save
48
+ contextPolicy:
49
+ sourcePriority:
50
+ - mcp
51
+ mcp:
52
+ knownTaskIdTool: "{{MCP_PREFIX}}get_task"
53
+ unknownTaskIdTools:
54
+ - "{{MCP_PREFIX}}list_tasks"
55
+ - "{{MCP_PREFIX}}search_tasks"
56
+ mcpUnavailableAction: stop-and-request-user-action
57
+ prompts:
58
+ startupChecklist: |-
59
+ 1. [ ] **Task Loaded**: [ID] (Status: [Status])
60
+ 2. [ ] **Mode**: [evaluate]
61
+ 3. [ ] **Specialists Loaded**: [List names or 'None']
62
+ optionalArtifactPrompt: I prepared the evaluation in-screen. Save as `{path}` and attach it to this task context?
63
+ content:
64
+ default: |-
65
+ # Taskforce Evaluate Workflow (v2)
66
+
67
+ > **EVALUATION protocol**:
68
+ > 1. **MCP-first load**:
69
+ > - If task ID is known, call `{{MCP_PREFIX}}get_task`.
70
+ > - If task ID is unknown, use `{{MCP_PREFIX}}list_tasks` / `{{MCP_PREFIX}}search_tasks` to identify it.
71
+ > - If MCP is unavailable, stop and request user action.
72
+ > 2. Print `prompts.startupChecklist`.
73
+
74
+ ---
75
+
76
+ ## 1. Strategic Analysis
77
+
78
+ 1. Validate the problem and business/user impact.
79
+ 2. Evaluate alternatives and opportunity cost.
80
+ 3. Score value and risk with explicit reasoning.
81
+ 4. Recommend: Proceed, Pivot, or Kill.
82
+
83
+ ## 2. Task Updates
84
+
85
+ 1. Use `{{MCP_PREFIX}}update_task` to adjust priority/status only within allowed statuses.
86
+ - If setting status to `task` or `on-hold`, add explicit comment justification using `{{MCP_PREFIX}}add_comment`.
87
+ 2. Present a structured evaluation in-screen using this exact structure:
88
+ - `## Evaluation Summary`
89
+ - `### Recommendation (Proceed | Pivot | Kill)`
90
+ - `### Value Score (1-5)`
91
+ - `### Risk Score (1-5)`
92
+ - `### Alternatives Considered`
93
+ - `### Key Tradeoffs`
94
+ - `### Next Step`
95
+ 3. Add a concise evaluation summary comment via `{{MCP_PREFIX}}add_comment` using this exact structure:
96
+ - `## Evaluation Summary`
97
+ - `### Recommendation (Proceed | Pivot | Kill)`
98
+ - `### Value Score (1-5)`
99
+ - `### Risk Score (1-5)`
100
+ - `### Next Step`
101
+ 4. Ask whether to save as `{artifacts.evaluationReport.path}`.
102
+ 5. If user confirms, persist task-specific content via `{{MCP_PREFIX}}save_task_attachment` using `filename: "evaluation.md"`.
103
+ - Use `{{MCP_PREFIX}}attach_context_file` only for linking existing files/URLs (for example, shared docs under `docs/`).
104
+ 6. Never set `done` or `cancelled`, and never call `{{MCP_PREFIX}}archive_task`, unless explicitly instructed by the user.
105
+
106
+ ## 3. Optional Report Artifact
107
+
108
+ 1. Use report files only when user opts in.
109
+ 2. Save to `.taskforce/task-data/{taskId}/attachments/evaluation.md` and attach to task context when approved.
110
+ - If the document is not task-specific, store it under `docs/` and optionally link it with `{{MCP_PREFIX}}attach_context_file`.
111
+ 3. Stop.
@@ -0,0 +1,142 @@
1
+ version: 2
2
+ name: execute
3
+ description: Implementation workflow with MCP-first loading and status safety constraints.
4
+ type: workflow
5
+ metadata:
6
+ alwaysApply: true
7
+ dispatch:
8
+ aliases:
9
+ - /execute
10
+ - "-x"
11
+ routeByApproach: false
12
+ default: execute
13
+ compat:
14
+ minTaskforceVersion: 0.3.13-beta.2
15
+ requiredToolsCritical:
16
+ - "{{MCP_PREFIX}}get_task"
17
+ - "{{MCP_PREFIX}}update_task"
18
+ - "{{MCP_PREFIX}}add_comment"
19
+ requiredToolsOptional:
20
+ - "{{MCP_PREFIX}}list_tasks"
21
+ - "{{MCP_PREFIX}}search_tasks"
22
+ - "{{MCP_PREFIX}}get_config"
23
+ - "{{MCP_PREFIX}}create_task"
24
+ - "{{MCP_PREFIX}}attach_context_file"
25
+ - "{{MCP_PREFIX}}save_task_attachment"
26
+ toolPolicy:
27
+ requiredToolsPolicy:
28
+ critical: strict-fail
29
+ nonCritical: warn-and-fallback
30
+ criticalTools:
31
+ - "{{MCP_PREFIX}}get_task"
32
+ - "{{MCP_PREFIX}}update_task"
33
+ - "{{MCP_PREFIX}}add_comment"
34
+ forbiddenTools:
35
+ - "{{MCP_PREFIX}}archive_task"
36
+ statusTransitions:
37
+ allowedStatuses:
38
+ - task
39
+ - on-hold
40
+ - in-progress
41
+ - review
42
+ forbiddenStatuses:
43
+ - done
44
+ - cancelled
45
+ artifacts:
46
+ walkthrough:
47
+ path: walkthrough.md
48
+ required: true
49
+ contextPolicy:
50
+ sourcePriority:
51
+ - mcp
52
+ mcp:
53
+ knownTaskIdTool: "{{MCP_PREFIX}}get_task"
54
+ unknownTaskIdTools:
55
+ - "{{MCP_PREFIX}}list_tasks"
56
+ - "{{MCP_PREFIX}}search_tasks"
57
+ mcpUnavailableAction: stop-and-request-user-action
58
+ prompts:
59
+ startupChecklist: |-
60
+ 1. [ ] **Task Loaded**: [ID] (Status: [Status])
61
+ 2. [ ] **Mode**: [execute]
62
+ 3. [ ] **Specialists Loaded**: [List names or 'None']
63
+ handoffChecklist: |-
64
+ - [ ] Status set to `review` unless user explicitly requested another allowed status
65
+ - [ ] Summary comment added with `{{MCP_PREFIX}}add_comment`
66
+ - [ ] `walkthrough.md` updated
67
+ - [ ] Parent/child links changed only when explicitly requested
68
+ - [ ] Did NOT call `{{MCP_PREFIX}}archive_task`
69
+ - [ ] Did NOT set `done` or `cancelled` unless explicitly instructed
70
+ content:
71
+ default: |-
72
+ # Taskforce Execute Workflow (v2)
73
+
74
+ > **EXECUTION protocol**:
75
+ > 1. **MCP-first load**:
76
+ > - If task ID is known, call `{{MCP_PREFIX}}get_task`.
77
+ > - If task ID is unknown, use `{{MCP_PREFIX}}list_tasks` / `{{MCP_PREFIX}}search_tasks` to identify it.
78
+ > - If MCP is unavailable, stop and request user action.
79
+ > 2. Print `prompts.startupChecklist`.
80
+
81
+ ---
82
+
83
+ ## 1. Startup (Mandatory)
84
+
85
+ 1. **Load specialists**:
86
+ - Read the task `specialists` array.
87
+ - Read specialist instructions exported for the active environment.
88
+ - Acknowledge specialist constraints before implementation.
89
+
90
+ ---
91
+
92
+ ## 2. Execute Mode
93
+ **Goal**: Execute and verify changes safely.
94
+
95
+ ### Phase A: Preparation
96
+ 1. **Complexity gate**:
97
+ - If task complexity is `3` to `5`, create or refresh `implementation_plan.md` before major code edits.
98
+ - If complexity is below `3`, planning is optional.
99
+ 2. **Task management mode gate (required before task mutations)**:
100
+ - Choose exactly one mode and state it explicitly: `checklist_mode` or `decompose_mode`.
101
+ - Default to `checklist_mode` for linear/short execution.
102
+ - Use `decompose_mode` only when at least one is true:
103
+ - multi-system or multi-owner work
104
+ - meaningful parallelization
105
+ - expected duration > 1 day
106
+ - explicit dependency/risk tracking is needed
107
+ - user explicitly asks for subtasks
108
+ 3. **Owner strategy gate (required before task creation/update)**:
109
+ - Set ownership explicitly with `owner` (alias of `assignee`): `user`, `agent`, or `unassigned`.
110
+ - If user console/credential action is required, set `owner=user`.
111
+ - If AI can execute independently, set `owner=agent`.
112
+ - If unclear, set `owner=unassigned` and add a clarification note.
113
+ 4. **Preflight confirmation gate (required before creating multiple tasks)**:
114
+ - Confirm mode: `checklist_mode` vs `decompose_mode`.
115
+ - Confirm owner default: `user` / `agent` / `mixed`.
116
+ - Confirm whether assignment should be set immediately.
117
+ 5. **Config gate**:
118
+ - Before setting category/type/priority/approach/status/complexity, call `{{MCP_PREFIX}}get_config`.
119
+ 6. **Set active state**:
120
+ - Set status to `in-progress` with `{{MCP_PREFIX}}update_task`.
121
+
122
+ ### Phase B: Execution
123
+ 1. Implement code changes.
124
+ 2. Run validation steps (automated tests + manual checks as needed).
125
+ 3. If user requests relationship work:
126
+ - Link/unlink/re-parent using `{{MCP_PREFIX}}update_task` (`parentTaskId`).
127
+ - Create child tasks using `{{MCP_PREFIX}}create_task` with `parentTaskId` set.
128
+ - Every created child task must include explicit `owner`/`assignee`.
129
+ - Re-parent only after explicit user confirmation.
130
+ 4. If blocked, switch to Collaborate mode and capture blocker context.
131
+
132
+ ### Phase C: Handover
133
+ 1. Update `walkthrough.md` with:
134
+ - What changed
135
+ - Validation evidence
136
+ - Remaining risks
137
+ 2. Add summary comment with `{{MCP_PREFIX}}add_comment`.
138
+ 3. Set status to `review` via `{{MCP_PREFIX}}update_task` unless user explicitly requests another allowed status (`task`, `on-hold`, `in-progress`, `review`).
139
+ - If setting status to `task` or `on-hold`, add explicit comment justification using `{{MCP_PREFIX}}add_comment`.
140
+ 4. Never set `done` or `cancelled`, and never call `{{MCP_PREFIX}}archive_task`, unless explicitly instructed by the user.
141
+ 5. Do not auto-set parent tasks to `done` or `cancelled` due to child changes; only do so if user explicitly instructs.
142
+ 6. Print `prompts.handoffChecklist` and stop.
@@ -0,0 +1,112 @@
1
+ version: 2
2
+ name: plan
3
+ description: Planning workflow for implementation strategy and verification design.
4
+ type: workflow
5
+ metadata:
6
+ alwaysApply: false
7
+ dispatch:
8
+ aliases:
9
+ - /plan
10
+ - "-p"
11
+ default: plan
12
+ compat:
13
+ minTaskforceVersion: 0.3.13-beta.2
14
+ requiredToolsCritical:
15
+ - "{{MCP_PREFIX}}get_task"
16
+ - "{{MCP_PREFIX}}update_task"
17
+ - "{{MCP_PREFIX}}add_comment"
18
+ requiredToolsOptional:
19
+ - "{{MCP_PREFIX}}list_tasks"
20
+ - "{{MCP_PREFIX}}search_tasks"
21
+ - "{{MCP_PREFIX}}get_config"
22
+ - "{{MCP_PREFIX}}attach_context_file"
23
+ - "{{MCP_PREFIX}}save_task_attachment"
24
+ toolPolicy:
25
+ requiredToolsPolicy:
26
+ critical: strict-fail
27
+ nonCritical: warn-and-fallback
28
+ criticalTools:
29
+ - "{{MCP_PREFIX}}get_task"
30
+ - "{{MCP_PREFIX}}update_task"
31
+ - "{{MCP_PREFIX}}add_comment"
32
+ forbiddenTools:
33
+ - "{{MCP_PREFIX}}archive_task"
34
+ statusTransitions:
35
+ allowedStatuses:
36
+ - task
37
+ - on-hold
38
+ - in-progress
39
+ - review
40
+ forbiddenStatuses:
41
+ - done
42
+ - cancelled
43
+ artifacts:
44
+ implementationPlan:
45
+ path: .taskforce/task-data/{taskId}/attachments/implementation-plan.md
46
+ required: false
47
+ savePolicy: ask-before-save
48
+ contextPolicy:
49
+ sourcePriority:
50
+ - mcp
51
+ mcp:
52
+ knownTaskIdTool: "{{MCP_PREFIX}}get_task"
53
+ unknownTaskIdTools:
54
+ - "{{MCP_PREFIX}}list_tasks"
55
+ - "{{MCP_PREFIX}}search_tasks"
56
+ mcpUnavailableAction: stop-and-request-user-action
57
+ prompts:
58
+ startupChecklist: |-
59
+ 1. [ ] **Task Loaded**: [ID] (Status: [Status])
60
+ 2. [ ] **Mode**: [plan]
61
+ 3. [ ] **Specialists Loaded**: [List names or 'None']
62
+ optionalArtifactPrompt: I prepared the implementation plan in-screen. Save as `{path}` and attach it to this task context?
63
+ handoffPrompt: Planning complete. Review the in-screen plan, then run `/do <id>` to execute.
64
+ content:
65
+ default: |-
66
+ # Taskforce Plan Workflow (v2)
67
+
68
+ > **PLANNING protocol**:
69
+ > 1. **MCP-first load**:
70
+ > - If task ID is known, call `{{MCP_PREFIX}}get_task`.
71
+ > - If task ID is unknown, use `{{MCP_PREFIX}}list_tasks` / `{{MCP_PREFIX}}search_tasks` to identify it.
72
+ > - If MCP is unavailable, stop and request user action.
73
+ > 2. Print `prompts.startupChecklist`.
74
+
75
+ ---
76
+
77
+ ## 1. Startup (Mandatory)
78
+
79
+ 1. Call `{{MCP_PREFIX}}get_config` before setting category/type/priority/approach/status/complexity.
80
+ 2. Set status to `in-progress` via `{{MCP_PREFIX}}update_task`.
81
+ 3. Load specialist instructions for the active environment and acknowledge constraints.
82
+ 4. Load all relevant context sources tied to the task.
83
+
84
+ ---
85
+
86
+ ## 2. Planning Deliverable
87
+
88
+ 0. Choose and record task management mode for follow-on execution:
89
+ - `checklist_mode` (single parent + in-task checklist) for linear short work.
90
+ - `decompose_mode` (child tasks) only when dependencies/parallelism/risk tracking justify decomposition.
91
+ - Record owner strategy: `user`, `agent`, or `mixed`.
92
+
93
+ 1. Define file-level change plan (exact files and intended changes).
94
+ 2. Identify compatibility and regression risks.
95
+ 3. Define automated and manual verification steps.
96
+ 4. Present the implementation plan in-screen using this exact structure:
97
+ - `## Implementation Plan`
98
+ - `### Goal`
99
+ - `### Change Plan`
100
+ - `### Risk Analysis`
101
+ - `### Verification Checklist`
102
+ 5. Add a concise planning summary comment via `{{MCP_PREFIX}}add_comment` using this exact structure:
103
+ - `## Plan Summary`
104
+ - `### Goal`
105
+ - `### Scope`
106
+ - `### Next Action`
107
+ 6. Ask whether to save as `{artifacts.implementationPlan.path}`.
108
+ 7. If user confirms, persist task-specific content via `{{MCP_PREFIX}}save_task_attachment` using `filename: "implementation-plan.md"`.
109
+ - Use `{{MCP_PREFIX}}attach_context_file` only for linking existing files/URLs (for example, shared docs under `docs/`).
110
+ 8. If setting status to `task` or `on-hold`, add explicit comment justification using `{{MCP_PREFIX}}add_comment`.
111
+ 9. Never set `done` or `cancelled`, and never call `{{MCP_PREFIX}}archive_task`, unless explicitly instructed by the user.
112
+ 10. Print `prompts.handoffPrompt` and stop.
@@ -0,0 +1,109 @@
1
+ version: 2
2
+ name: review
3
+ description: Review workflow for QA analysis and pass/warn/fail handoff.
4
+ type: workflow
5
+ metadata:
6
+ alwaysApply: false
7
+ dispatch:
8
+ aliases:
9
+ - /review
10
+ - "-r"
11
+ default: review
12
+ compat:
13
+ minTaskforceVersion: 0.3.13-beta.2
14
+ requiredToolsCritical:
15
+ - "{{MCP_PREFIX}}get_task"
16
+ - "{{MCP_PREFIX}}add_comment"
17
+ requiredToolsOptional:
18
+ - "{{MCP_PREFIX}}list_tasks"
19
+ - "{{MCP_PREFIX}}search_tasks"
20
+ - "{{MCP_PREFIX}}update_task"
21
+ - "{{MCP_PREFIX}}attach_context_file"
22
+ - "{{MCP_PREFIX}}save_task_attachment"
23
+ toolPolicy:
24
+ requiredToolsPolicy:
25
+ critical: strict-fail
26
+ nonCritical: warn-and-fallback
27
+ criticalTools:
28
+ - "{{MCP_PREFIX}}get_task"
29
+ - "{{MCP_PREFIX}}add_comment"
30
+ forbiddenTools:
31
+ - "{{MCP_PREFIX}}archive_task"
32
+ statusTransitions:
33
+ allowedStatuses:
34
+ - task
35
+ - on-hold
36
+ - in-progress
37
+ - review
38
+ forbiddenStatuses:
39
+ - done
40
+ - cancelled
41
+ artifacts:
42
+ reviewReport:
43
+ path: .taskforce/task-data/{taskId}/attachments/review.md
44
+ required: false
45
+ savePolicy: ask-before-save
46
+ contextPolicy:
47
+ sourcePriority:
48
+ - mcp
49
+ mcp:
50
+ knownTaskIdTool: "{{MCP_PREFIX}}get_task"
51
+ unknownTaskIdTools:
52
+ - "{{MCP_PREFIX}}list_tasks"
53
+ - "{{MCP_PREFIX}}search_tasks"
54
+ mcpUnavailableAction: stop-and-request-user-action
55
+ prompts:
56
+ startupChecklist: |-
57
+ 1. [ ] **Task Loaded**: [ID] (Status: [Status])
58
+ 2. [ ] **Mode**: [review]
59
+ 3. [ ] **Specialists Loaded**: [List names or 'None']
60
+ optionalArtifactPrompt: I prepared the review in-screen. Save as `{path}` and attach it to this task context?
61
+ content:
62
+ default: |-
63
+ # Taskforce Review Workflow (v2)
64
+
65
+ > **REVIEW protocol**:
66
+ > 1. **MCP-first load**:
67
+ > - If task ID is known, call `{{MCP_PREFIX}}get_task`.
68
+ > - If task ID is unknown, use `{{MCP_PREFIX}}list_tasks` / `{{MCP_PREFIX}}search_tasks` to identify it.
69
+ > - If MCP is unavailable, stop and request user action.
70
+ > 2. Print `prompts.startupChecklist`.
71
+
72
+ ---
73
+
74
+ ## 1. Review Analysis
75
+
76
+ 1. Identify the review target (plan, code, docs, or mixed artifacts).
77
+ 2. Perform QA pass:
78
+ - risk and safety check
79
+ - regression check
80
+ - standards compliance
81
+ 3. Produce verdict: PASS / WARN / FAIL with actionable findings.
82
+
83
+ ## 2. Task Updates
84
+
85
+ 1. Present a structured review in-screen using this exact structure:
86
+ - `## Review Verdict`
87
+ - `### Verdict (PASS | WARN | FAIL)`
88
+ - `### Findings`
89
+ - `### Regression Risks`
90
+ - `### Required Fixes`
91
+ - `### Recommended Next Status`
92
+ 2. Add a concise review summary comment via `{{MCP_PREFIX}}add_comment` using this exact structure:
93
+ - `## Review Summary`
94
+ - `### Verdict (PASS | WARN | FAIL)`
95
+ - `### Findings`
96
+ - `### Next Status`
97
+ 3. Ask whether to save as `{artifacts.reviewReport.path}`.
98
+ 4. If user confirms, persist task-specific content via `{{MCP_PREFIX}}save_task_attachment` using `filename: "review.md"`.
99
+ - Use `{{MCP_PREFIX}}attach_context_file` only for linking existing files/URLs (for example, shared docs under `docs/`).
100
+ 5. Keep status within allowed statuses (`task`, `on-hold`, `in-progress`, `review`) unless user explicitly instructs otherwise.
101
+ - If setting status to `task` or `on-hold`, add explicit comment justification using `{{MCP_PREFIX}}add_comment`.
102
+ 6. Never set `done` or `cancelled`, and never call `{{MCP_PREFIX}}archive_task`, unless explicitly instructed by the user.
103
+
104
+ ## 3. Optional Report Artifact
105
+
106
+ 1. Use report files only when user opts in.
107
+ 2. Save to `.taskforce/task-data/{taskId}/attachments/review.md` and attach to task context when approved.
108
+ - If the document is not task-specific, store it under `docs/` and optionally link it with `{{MCP_PREFIX}}attach_context_file`.
109
+ 3. Stop.
@@ -0,0 +1,8 @@
1
+ export type RuntimeMode = 'local' | 'cloud';
2
+ export interface RuntimeCapabilities {
3
+ runtimeMode: RuntimeMode;
4
+ supportsCloudAuth: boolean;
5
+ supportsAdminManagedSetupOverrides: boolean;
6
+ supportsPackageScriptSetupOverrides: boolean;
7
+ }
8
+ export declare function getRuntimeCapabilities(runtimeMode: RuntimeMode): RuntimeCapabilities;
@@ -0,0 +1,16 @@
1
+ export function getRuntimeCapabilities(runtimeMode) {
2
+ if (runtimeMode === 'cloud') {
3
+ return {
4
+ runtimeMode,
5
+ supportsCloudAuth: true,
6
+ supportsAdminManagedSetupOverrides: true,
7
+ supportsPackageScriptSetupOverrides: false
8
+ };
9
+ }
10
+ return {
11
+ runtimeMode: 'local',
12
+ supportsCloudAuth: false,
13
+ supportsAdminManagedSetupOverrides: false,
14
+ supportsPackageScriptSetupOverrides: true
15
+ };
16
+ }
@@ -0,0 +1,16 @@
1
+ export type VirusScanProvider = 'none' | 'clamav';
2
+ export type VirusScanVerdict = 'pending' | 'clean' | 'infected' | 'error';
3
+ export interface VirusScanResult {
4
+ verdict: VirusScanVerdict;
5
+ engine: VirusScanProvider;
6
+ details?: string;
7
+ }
8
+ export interface VirusScanConfig {
9
+ provider: VirusScanProvider;
10
+ clamavHost?: string;
11
+ clamavPort?: number;
12
+ failClosed: boolean;
13
+ timeoutMs: number;
14
+ }
15
+ export declare function resolveVirusScanConfigFromEnv(env?: NodeJS.ProcessEnv): VirusScanConfig;
16
+ export declare function scanBufferForThreats(buffer: Buffer, config: VirusScanConfig): Promise<VirusScanResult>;
@@ -0,0 +1,83 @@
1
+ import * as net from 'net';
2
+ function readPositiveInteger(value, fallback) {
3
+ const parsed = Number.parseInt(String(value || '').trim(), 10);
4
+ if (!Number.isFinite(parsed) || parsed <= 0)
5
+ return fallback;
6
+ return parsed;
7
+ }
8
+ export function resolveVirusScanConfigFromEnv(env = process.env) {
9
+ const providerRaw = String(env.TASKFORCE_VIRUS_SCAN_PROVIDER || 'none').trim().toLowerCase();
10
+ const provider = providerRaw === 'clamav' ? 'clamav' : 'none';
11
+ const failClosed = String(env.TASKFORCE_VIRUS_SCAN_FAIL_CLOSED || '').trim().toLowerCase() === 'true';
12
+ const timeoutMs = readPositiveInteger(env.TASKFORCE_VIRUS_SCAN_TIMEOUT_MS, 15_000);
13
+ const clamavHost = String(env.TASKFORCE_CLAMAV_HOST || '127.0.0.1').trim();
14
+ const clamavPort = readPositiveInteger(env.TASKFORCE_CLAMAV_PORT, 3310);
15
+ return {
16
+ provider,
17
+ clamavHost,
18
+ clamavPort,
19
+ failClosed,
20
+ timeoutMs
21
+ };
22
+ }
23
+ async function scanWithClamav(buffer, config) {
24
+ const host = String(config.clamavHost || '').trim() || '127.0.0.1';
25
+ const port = Number(config.clamavPort || 3310);
26
+ return new Promise((resolve) => {
27
+ const socket = net.createConnection({ host, port });
28
+ const timeout = setTimeout(() => {
29
+ socket.destroy(new Error('Virus scan timed out.'));
30
+ }, config.timeoutMs);
31
+ let response = '';
32
+ let settled = false;
33
+ const settle = (result) => {
34
+ if (settled)
35
+ return;
36
+ settled = true;
37
+ clearTimeout(timeout);
38
+ resolve(result);
39
+ };
40
+ socket.on('connect', () => {
41
+ // ClamAV INSTREAM protocol: zINSTREAM\0 + [len][chunk]... + [0]
42
+ socket.write(Buffer.from('zINSTREAM\0', 'utf8'));
43
+ const chunkSize = 64 * 1024;
44
+ let offset = 0;
45
+ while (offset < buffer.length) {
46
+ const end = Math.min(offset + chunkSize, buffer.length);
47
+ const chunk = buffer.subarray(offset, end);
48
+ const length = Buffer.alloc(4);
49
+ length.writeUInt32BE(chunk.length, 0);
50
+ socket.write(length);
51
+ socket.write(chunk);
52
+ offset = end;
53
+ }
54
+ const zero = Buffer.alloc(4);
55
+ zero.writeUInt32BE(0, 0);
56
+ socket.write(zero);
57
+ });
58
+ socket.on('data', (data) => {
59
+ response += data.toString('utf8');
60
+ });
61
+ socket.on('end', () => {
62
+ const normalized = response.trim();
63
+ if (/FOUND$/i.test(normalized)) {
64
+ settle({ verdict: 'infected', engine: 'clamav', details: normalized });
65
+ return;
66
+ }
67
+ if (/OK$/i.test(normalized)) {
68
+ settle({ verdict: 'clean', engine: 'clamav', details: normalized });
69
+ return;
70
+ }
71
+ settle({ verdict: 'error', engine: 'clamav', details: normalized || 'Unknown ClamAV response.' });
72
+ });
73
+ socket.on('error', (error) => {
74
+ settle({ verdict: 'error', engine: 'clamav', details: String(error.message || error) });
75
+ });
76
+ });
77
+ }
78
+ export async function scanBufferForThreats(buffer, config) {
79
+ if (config.provider === 'none') {
80
+ return { verdict: 'clean', engine: 'none', details: 'Virus scanning disabled.' };
81
+ }
82
+ return scanWithClamav(buffer, config);
83
+ }