@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.
- package/README.md +241 -0
- package/dist/Taskforce.d.ts +3 -0
- package/dist/Taskforce.js +3 -0
- package/dist/Taskforce.module.css +7587 -0
- package/dist/TaskforceCore.CategoryFallback.test.d.ts +1 -0
- package/dist/TaskforceCore.CategoryFallback.test.js +98 -0
- package/dist/TaskforceCore.d.ts +12 -0
- package/dist/TaskforceCore.js +729 -0
- package/dist/TaskforceCore.test.d.ts +1 -0
- package/dist/TaskforceCore.test.js +2132 -0
- package/dist/TaskforceScreenshot.d.ts +11 -0
- package/dist/TaskforceScreenshot.js +113 -0
- package/dist/TaskforceWidget.d.ts +6 -0
- package/dist/TaskforceWidget.js +101 -0
- package/dist/TaskforceWidget.test.d.ts +1 -0
- package/dist/TaskforceWidget.test.js +92 -0
- package/dist/UnsavedChangesRelaxed.test.d.ts +1 -0
- package/dist/UnsavedChangesRelaxed.test.js +16 -0
- package/dist/__tests__/localizationCatalogs.test.d.ts +1 -0
- package/dist/__tests__/localizationCatalogs.test.js +37 -0
- package/dist/__tests__/planParser.test.d.ts +1 -0
- package/dist/__tests__/planParser.test.js +183 -0
- package/dist/__tests__/releaseVersion.test.d.ts +1 -0
- package/dist/__tests__/releaseVersion.test.js +32 -0
- package/dist/__tests__/structuredCommentValidation.test.d.ts +1 -0
- package/dist/__tests__/structuredCommentValidation.test.js +31 -0
- package/dist/__tests__/structuredDocValidation.test.d.ts +1 -0
- package/dist/__tests__/structuredDocValidation.test.js +30 -0
- package/dist/__tests__/templateEngine.test.d.ts +1 -0
- package/dist/__tests__/templateEngine.test.js +150 -0
- package/dist/__tests__/templates.test.d.ts +1 -0
- package/dist/__tests__/templates.test.js +45 -0
- package/dist/__tests__/workflowDocumentFixtures.test.d.ts +1 -0
- package/dist/__tests__/workflowDocumentFixtures.test.js +78 -0
- package/dist/__tests__/workflowExportMatrix.test.d.ts +1 -0
- package/dist/__tests__/workflowExportMatrix.test.js +113 -0
- package/dist/__tests__/workflowExportSnapshots.test.d.ts +1 -0
- package/dist/__tests__/workflowExportSnapshots.test.js +28 -0
- package/dist/__tests__/workflowGeneration.test.d.ts +1 -0
- package/dist/__tests__/workflowGeneration.test.js +12 -0
- package/dist/__tests__/workflowSimulation.test.d.ts +1 -0
- package/dist/__tests__/workflowSimulation.test.js +113 -0
- package/dist/__tests__/workflowV2Policy.test.d.ts +1 -0
- package/dist/__tests__/workflowV2Policy.test.js +80 -0
- package/dist/api.d.ts +30 -0
- package/dist/api.js +85 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +217 -0
- package/dist/compat/priorityCompat.d.ts +2 -0
- package/dist/compat/priorityCompat.js +24 -0
- package/dist/components/features/DocumentGenerateModal.d.ts +9 -0
- package/dist/components/features/DocumentGenerateModal.js +114 -0
- package/dist/components/features/DocumentIndex.d.ts +19 -0
- package/dist/components/features/DocumentIndex.js +51 -0
- package/dist/components/features/DocumentViewer.d.ts +9 -0
- package/dist/components/features/DocumentViewer.js +253 -0
- package/dist/components/features/DocumentWorkspace.d.ts +21 -0
- package/dist/components/features/DocumentWorkspace.js +88 -0
- package/dist/components/features/TaskSettings.d.ts +209 -0
- package/dist/components/features/TaskSettings.js +500 -0
- package/dist/components/features/TaskSettings.test.d.ts +1 -0
- package/dist/components/features/TaskSettings.test.js +308 -0
- package/dist/components/features/settings/CategoryManager.d.ts +19 -0
- package/dist/components/features/settings/CategoryManager.js +113 -0
- package/dist/components/features/settings/TaxonomyEditor.d.ts +8 -0
- package/dist/components/features/settings/TaxonomyEditor.js +98 -0
- package/dist/components/features/settings/TaxonomyManager 2.d.ts +52 -0
- package/dist/components/features/settings/TaxonomyManager 2.js +75 -0
- package/dist/components/features/settings/TaxonomyManager.d.ts +54 -0
- package/dist/components/features/settings/TaxonomyManager.js +77 -0
- package/dist/components/features/settings/TypeManager.d.ts +10 -0
- package/dist/components/features/settings/TypeManager.js +50 -0
- package/dist/components/features/settings/WorkflowEditorPrototype.d.ts +15 -0
- package/dist/components/features/settings/WorkflowEditorPrototype.js +245 -0
- package/dist/components/task/TaskActionHeader.d.ts +20 -0
- package/dist/components/task/TaskActionHeader.js +13 -0
- package/dist/components/task/TaskCard.d.ts +47 -0
- package/dist/components/task/TaskCard.js +326 -0
- package/dist/components/task/TaskCard.test.d.ts +1 -0
- package/dist/components/task/TaskCard.test.js +95 -0
- package/dist/components/task/TaskContextUpload.d.ts +12 -0
- package/dist/components/task/TaskContextUpload.js +393 -0
- package/dist/components/task/TaskContextUpload.test.d.ts +1 -0
- package/dist/components/task/TaskContextUpload.test.js +189 -0
- package/dist/components/task/TaskForm.d.ts +105 -0
- package/dist/components/task/TaskForm.js +241 -0
- package/dist/components/task/TaskForm.test.d.ts +1 -0
- package/dist/components/task/TaskForm.test.js +288 -0
- package/dist/components/task/TaskKanban 2.d.ts +76 -0
- package/dist/components/task/TaskKanban 2.js +1004 -0
- package/dist/components/task/TaskKanban.d.ts +76 -0
- package/dist/components/task/TaskKanban.empty-column-drop.test.d.ts +1 -0
- package/dist/components/task/TaskKanban.empty-column-drop.test.js +66 -0
- package/dist/components/task/TaskKanban.js +1026 -0
- package/dist/components/task/TaskKanban.test.d.ts +1 -0
- package/dist/components/task/TaskKanban.test.js +46 -0
- package/dist/components/task/TaskList.d.ts +74 -0
- package/dist/components/task/TaskList.js +38 -0
- package/dist/components/task/TaskList.test.d.ts +1 -0
- package/dist/components/task/TaskList.test.js +270 -0
- package/dist/components/task/TaskScreenshotSection.d.ts +15 -0
- package/dist/components/task/TaskScreenshotSection.js +22 -0
- package/dist/components/ui/LevelSelector.d.ts +13 -0
- package/dist/components/ui/LevelSelector.js +25 -0
- package/dist/components/ui/LevelSelector.test.d.ts +1 -0
- package/dist/components/ui/LevelSelector.test.js +55 -0
- package/dist/components/ui/Markdown.d.ts +6 -0
- package/dist/components/ui/Markdown.js +94 -0
- package/dist/components/ui/Markdown.test.d.ts +1 -0
- package/dist/components/ui/Markdown.test.js +38 -0
- package/dist/components/ui/Modal.d.ts +16 -0
- package/dist/components/ui/Modal.js +49 -0
- package/dist/components/ui/MultiSelectFilter.d.ts +10 -0
- package/dist/components/ui/MultiSelectFilter.js +71 -0
- package/dist/components/ui/MultiSelectFilter.test.d.ts +1 -0
- package/dist/components/ui/MultiSelectFilter.test.js +74 -0
- package/dist/components/ui/TaxonomyDropdown.d.ts +17 -0
- package/dist/components/ui/TaxonomyDropdown.js +145 -0
- package/dist/components/ui/TaxonomyDropdown.test.d.ts +1 -0
- package/dist/components/ui/TaxonomyDropdown.test.js +130 -0
- package/dist/components/views/StandaloneLayout 2.d.ts +8 -0
- package/dist/components/views/StandaloneLayout 2.js +1660 -0
- package/dist/components/views/StandaloneLayout.d.ts +8 -0
- package/dist/components/views/StandaloneLayout.js +2117 -0
- package/dist/components/views/WidgetView.d.ts +8 -0
- package/dist/components/views/WidgetView.js +221 -0
- package/dist/config/envSchema.d.ts +28 -0
- package/dist/config/envSchema.js +374 -0
- package/dist/config/envSchema.test.d.ts +1 -0
- package/dist/config/envSchema.test.js +97 -0
- package/dist/config/surfaceBase.d.ts +2 -0
- package/dist/config/surfaceBase.js +8 -0
- package/dist/core/BulkUpdateFieldsPreview.test.d.ts +1 -0
- package/dist/core/BulkUpdateFieldsPreview.test.js +62 -0
- package/dist/core/CompletedAt.test.d.ts +1 -0
- package/dist/core/CompletedAt.test.js +44 -0
- package/dist/core/CreatedBy.test.d.ts +1 -0
- package/dist/core/CreatedBy.test.js +60 -0
- package/dist/core/EntitlementsPolicy.test.d.ts +1 -0
- package/dist/core/EntitlementsPolicy.test.js +145 -0
- package/dist/core/InitiativeTemplates.test.d.ts +1 -0
- package/dist/core/InitiativeTemplates.test.js +50 -0
- package/dist/core/ParentLifecycle.test.d.ts +1 -0
- package/dist/core/ParentLifecycle.test.js +98 -0
- package/dist/core/ScheduleFields.test.d.ts +1 -0
- package/dist/core/ScheduleFields.test.js +197 -0
- package/dist/core/SetupState.test.d.ts +1 -0
- package/dist/core/SetupState.test.js +113 -0
- package/dist/core/SystemAdmin.test.d.ts +1 -0
- package/dist/core/SystemAdmin.test.js +295 -0
- package/dist/core/TaskTaxonomyValidation.test.d.ts +1 -0
- package/dist/core/TaskTaxonomyValidation.test.js +64 -0
- package/dist/core/Taskforce.d.ts +1063 -0
- package/dist/core/Taskforce.ids.test.d.ts +1 -0
- package/dist/core/Taskforce.ids.test.js +168 -0
- package/dist/core/Taskforce.js +5981 -0
- package/dist/core/Taskforce.realtimeMutation.test.d.ts +1 -0
- package/dist/core/Taskforce.realtimeMutation.test.js +76 -0
- package/dist/core/WorkspaceDelete.test.d.ts +1 -0
- package/dist/core/WorkspaceDelete.test.js +140 -0
- package/dist/core/WorkspacePermissions.test.d.ts +1 -0
- package/dist/core/WorkspacePermissions.test.js +151 -0
- package/dist/core/WorkspacePlanMode.test.d.ts +1 -0
- package/dist/core/WorkspacePlanMode.test.js +104 -0
- package/dist/hooks/authGuardPolicy.d.ts +26 -0
- package/dist/hooks/authGuardPolicy.js +32 -0
- package/dist/hooks/authGuardPolicy.test.d.ts +1 -0
- package/dist/hooks/authGuardPolicy.test.js +76 -0
- package/dist/hooks/useDraggable.d.ts +12 -0
- package/dist/hooks/useDraggable.js +65 -0
- package/dist/hooks/useRealtimeSync.d.ts +24 -0
- package/dist/hooks/useRealtimeSync.js +275 -0
- package/dist/hooks/useRealtimeSync.test.d.ts +1 -0
- package/dist/hooks/useRealtimeSync.test.js +284 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +164 -0
- package/dist/hooks/useSyncOrchestrator.js +1427 -0
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.d.ts +1 -0
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +367 -0
- package/dist/hooks/useTaskforce.d.ts +727 -0
- package/dist/hooks/useTaskforce.js +4396 -0
- package/dist/hooks/useTaskforce.priority-filters.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.priority-filters.test.js +33 -0
- package/dist/hooks/useWorkspaceSyncController.d.ts +80 -0
- package/dist/hooks/useWorkspaceSyncController.js +598 -0
- package/dist/hooks/useWorkspaceSyncController.test.d.ts +1 -0
- package/dist/hooks/useWorkspaceSyncController.test.js +236 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +11 -0
- package/dist/localization/index.d.ts +8 -0
- package/dist/localization/index.js +81 -0
- package/dist/localization/locales/en-US.d.ts +151 -0
- package/dist/localization/locales/en-US.js +150 -0
- package/dist/localization/locales/es-419.d.ts +2 -0
- package/dist/localization/locales/es-419.js +150 -0
- package/dist/localization/locales/pt-BR.d.ts +2 -0
- package/dist/localization/locales/pt-BR.js +150 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +33 -0
- package/dist/mcp/optionResolution.d.ts +14 -0
- package/dist/mcp/optionResolution.js +126 -0
- package/dist/mcp/optionResolution.test.d.ts +1 -0
- package/dist/mcp/optionResolution.test.js +39 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +1793 -0
- package/dist/mcp/structuredCommentValidation.d.ts +6 -0
- package/dist/mcp/structuredCommentValidation.js +56 -0
- package/dist/mcp/structuredDocValidation.d.ts +6 -0
- package/dist/mcp/structuredDocValidation.js +75 -0
- package/dist/migrations/billingSchemaParity.test.d.ts +1 -0
- package/dist/migrations/billingSchemaParity.test.js +46 -0
- package/dist/migrations/clientMigrations.d.ts +9 -0
- package/dist/migrations/clientMigrations.js +74 -0
- package/dist/migrations/flags.d.ts +6 -0
- package/dist/migrations/flags.js +8 -0
- package/dist/migrations/taskMigrations.d.ts +71 -0
- package/dist/migrations/taskMigrations.js +236 -0
- package/dist/migrations/taskMigrations.test.d.ts +1 -0
- package/dist/migrations/taskMigrations.test.js +34 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +11 -0
- package/dist/migrations/taskSchemaMigrations.js +453 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +10 -0
- package/dist/plugins/vite.d.ts +19 -0
- package/dist/plugins/vite.js +271 -0
- package/dist/public/android-chrome-192x192.png +0 -0
- package/dist/public/android-chrome-512x512.png +0 -0
- package/dist/public/apple-touch-icon.png +0 -0
- package/dist/public/favicon-16x16.png +0 -0
- package/dist/public/favicon-32x32.png +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/favicon.png +0 -0
- package/dist/public/site.webmanifest +1 -0
- package/dist/public/taskforce.png +0 -0
- package/dist/resources/templates/WORKFLOW_V2_POLICY.md +55 -0
- package/dist/resources/templates/environments/aider.yaml +14 -0
- package/dist/resources/templates/environments/antigravity.yaml +10 -0
- package/dist/resources/templates/environments/claude.yaml +10 -0
- package/dist/resources/templates/environments/cline.yaml +10 -0
- package/dist/resources/templates/environments/codex.yaml +13 -0
- package/dist/resources/templates/environments/copilot.yaml +10 -0
- package/dist/resources/templates/environments/cursor.yaml +9 -0
- package/dist/resources/templates/environments/gemini.yaml +9 -0
- package/dist/resources/templates/environments/windsurf.yaml +10 -0
- package/dist/resources/templates/workflow-sources/README.md +9 -0
- package/dist/resources/templates/workflow-sources/workflowDocs.mjs +520 -0
- package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +1 -0
- package/dist/resources/templates/workflows/collaborate.yaml +104 -0
- package/dist/resources/templates/workflows/do.yaml +82 -0
- package/dist/resources/templates/workflows/evaluate.yaml +111 -0
- package/dist/resources/templates/workflows/execute.yaml +142 -0
- package/dist/resources/templates/workflows/plan.yaml +112 -0
- package/dist/resources/templates/workflows/review.yaml +109 -0
- package/dist/runtime/capabilities.d.ts +8 -0
- package/dist/runtime/capabilities.js +16 -0
- package/dist/security/virusScan.d.ts +16 -0
- package/dist/security/virusScan.js +83 -0
- package/dist/server/auth.d.ts +51 -0
- package/dist/server/auth.js +266 -0
- package/dist/server/auth.test.d.ts +1 -0
- package/dist/server/auth.test.js +111 -0
- package/dist/server/buildInfo.d.ts +7 -0
- package/dist/server/buildInfo.js +100 -0
- package/dist/server/buildInfo.test.d.ts +1 -0
- package/dist/server/buildInfo.test.js +29 -0
- package/dist/server/cors.d.ts +7 -0
- package/dist/server/cors.js +76 -0
- package/dist/server/cors.test.d.ts +1 -0
- package/dist/server/cors.test.js +71 -0
- package/dist/server/email.d.ts +28 -0
- package/dist/server/email.js +138 -0
- package/dist/server/email.test.d.ts +1 -0
- package/dist/server/email.test.js +113 -0
- package/dist/server/index.cookieProxy.test.d.ts +1 -0
- package/dist/server/index.cookieProxy.test.js +19 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.js +757 -0
- package/dist/server/index.rateLimit.test.d.ts +1 -0
- package/dist/server/index.rateLimit.test.js +13 -0
- package/dist/server/index.test.d.ts +1 -0
- package/dist/server/index.test.js +19 -0
- package/dist/server/rateLimit.d.ts +29 -0
- package/dist/server/rateLimit.js +99 -0
- package/dist/server/rateLimit.test.d.ts +1 -0
- package/dist/server/rateLimit.test.js +107 -0
- package/dist/server/realtimeSync.auth.test.d.ts +1 -0
- package/dist/server/realtimeSync.auth.test.js +62 -0
- package/dist/server/realtimeSync.replay.test.d.ts +1 -0
- package/dist/server/realtimeSync.replay.test.js +192 -0
- package/dist/server/realtimeSync.workspaceIsolation.test.d.ts +1 -0
- package/dist/server/realtimeSync.workspaceIsolation.test.js +101 -0
- package/dist/server/realtimeSyncWs.d.ts +30 -0
- package/dist/server/realtimeSyncWs.js +257 -0
- package/dist/server/routes.billing.d.ts +15 -0
- package/dist/server/routes.billing.js +991 -0
- package/dist/server/routes.billing.test.d.ts +1 -0
- package/dist/server/routes.billing.test.js +387 -0
- package/dist/server/routes.d.ts +72 -0
- package/dist/server/routes.js +4820 -0
- package/dist/server/routes.sync.d.ts +17 -0
- package/dist/server/routes.sync.integration.test.d.ts +1 -0
- package/dist/server/routes.sync.integration.test.js +470 -0
- package/dist/server/routes.sync.js +1141 -0
- package/dist/server/routes.test.d.ts +1 -0
- package/dist/server/routes.test.js +4945 -0
- package/dist/server/runtimeMode.d.ts +4 -0
- package/dist/server/runtimeMode.js +25 -0
- package/dist/server/runtimeMode.test.d.ts +1 -0
- package/dist/server/runtimeMode.test.js +26 -0
- package/dist/server/securityHeaders.d.ts +3 -0
- package/dist/server/securityHeaders.js +25 -0
- package/dist/server/securityHeaders.test.d.ts +1 -0
- package/dist/server/securityHeaders.test.js +32 -0
- package/dist/server/smtpTransport.d.ts +21 -0
- package/dist/server/smtpTransport.js +11 -0
- package/dist/server/start.d.ts +1 -0
- package/dist/server/start.js +17 -0
- package/dist/services/formatTransformers.d.ts +29 -0
- package/dist/services/formatTransformers.js +56 -0
- package/dist/services/templateEngine.d.ts +46 -0
- package/dist/services/templateEngine.js +148 -0
- package/dist/shared/runtimeContract.d.ts +12 -0
- package/dist/shared/runtimeContract.js +23 -0
- package/dist/shared/runtimeContract.test.d.ts +1 -0
- package/dist/shared/runtimeContract.test.js +23 -0
- package/dist/soak/preflight.cli.d.ts +1 -0
- package/dist/soak/preflight.cli.js +28 -0
- package/dist/soak/preflight.d.ts +26 -0
- package/dist/soak/preflight.js +113 -0
- package/dist/soak/preflight.test.d.ts +1 -0
- package/dist/soak/preflight.test.js +39 -0
- package/dist/soak/syncSoakHarness.d.ts +6 -0
- package/dist/soak/syncSoakHarness.js +10 -0
- package/dist/storage/createDatabaseAdapter.d.ts +2 -0
- package/dist/storage/createDatabaseAdapter.js +9 -0
- package/dist/storage/databaseAdapter.d.ts +22 -0
- package/dist/storage/databaseAdapter.js +1 -0
- package/dist/storage/documentIntegrity.d.ts +28 -0
- package/dist/storage/documentIntegrity.js +103 -0
- package/dist/storage/documentPurge.d.ts +14 -0
- package/dist/storage/documentPurge.js +46 -0
- package/dist/storage/documentRegistry.d.ts +39 -0
- package/dist/storage/documentRegistry.js +115 -0
- package/dist/storage/integritySchedule.d.ts +17 -0
- package/dist/storage/integritySchedule.js +62 -0
- package/dist/storage/objectStorage.d.ts +20 -0
- package/dist/storage/objectStorage.js +15 -0
- package/dist/storage/objectStorageClient.d.ts +18 -0
- package/dist/storage/objectStorageClient.js +301 -0
- package/dist/storage/objectStorageConfig.d.ts +2 -0
- package/dist/storage/objectStorageConfig.js +45 -0
- package/dist/storage/postgresAdapter.d.ts +20 -0
- package/dist/storage/postgresAdapter.js +204 -0
- package/dist/storage/postgresWorker.d.ts +1 -0
- package/dist/storage/postgresWorker.js +110 -0
- package/dist/storage/providerConfig.d.ts +6 -0
- package/dist/storage/providerConfig.js +11 -0
- package/dist/storage/sqliteAdapter.d.ts +14 -0
- package/dist/storage/sqliteAdapter.js +28 -0
- package/dist/storage/taskAssetStore.d.ts +56 -0
- package/dist/storage/taskAssetStore.js +297 -0
- package/dist/sync/cloudSyncApi.d.ts +47 -0
- package/dist/sync/cloudSyncApi.js +138 -0
- package/dist/sync/cloudSyncApi.test.d.ts +1 -0
- package/dist/sync/cloudSyncApi.test.js +54 -0
- package/dist/sync/encryptionService.d.ts +11 -0
- package/dist/sync/encryptionService.js +61 -0
- package/dist/sync/encryptionService.test.d.ts +1 -0
- package/dist/sync/encryptionService.test.js +52 -0
- package/dist/sync/realtimeFeature.d.ts +6 -0
- package/dist/sync/realtimeFeature.js +20 -0
- package/dist/sync/realtimeFeature.test.d.ts +1 -0
- package/dist/sync/realtimeFeature.test.js +30 -0
- package/dist/sync/realtimeReconcile.d.ts +30 -0
- package/dist/sync/realtimeReconcile.js +90 -0
- package/dist/sync/realtimeReconcile.test.d.ts +1 -0
- package/dist/sync/realtimeReconcile.test.js +43 -0
- package/dist/sync/syncService.d.ts +96 -0
- package/dist/sync/syncService.js +423 -0
- package/dist/sync/syncService.test.d.ts +1 -0
- package/dist/sync/syncService.test.js +484 -0
- package/dist/sync/workspaceSyncModel.d.ts +61 -0
- package/dist/sync/workspaceSyncModel.js +136 -0
- package/dist/sync/workspaceSyncModel.test.d.ts +1 -0
- package/dist/sync/workspaceSyncModel.test.js +73 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.js +15 -0
- package/dist/types.d.ts +157 -0
- package/dist/types.js +41 -0
- package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
- package/dist/ui/assets/index-0W5vyCpn.css +1 -0
- package/dist/ui/assets/index-MCZuNNfn.js +23 -0
- package/dist/ui/assets/logo_white_01-0Vx-iIIv.png +0 -0
- package/dist/ui/assets/taskforce-BxLPokNB.png +0 -0
- package/dist/ui/assets/vendor-dnd-BI1K77C1.js +5 -0
- package/dist/ui/assets/vendor-icons-ZFG3SGwo.js +1 -0
- package/dist/ui/assets/vendor-markdown-CKYkQHfj.js +29 -0
- package/dist/ui/assets/vendor-react-DdIDsh7f.js +9 -0
- package/dist/ui/assets/vendor-router-BtiNU7Dl.js +3 -0
- package/dist/ui/branding/logos/logo_black_01.png +0 -0
- package/dist/ui/branding/logos/logo_black_02.png +0 -0
- package/dist/ui/branding/logos/logo_white_01.png +0 -0
- package/dist/ui/branding/logos/logo_white_02.png +0 -0
- package/dist/ui/favicon/android-chrome-192x192.png +0 -0
- package/dist/ui/favicon/android-chrome-512x512.png +0 -0
- package/dist/ui/favicon/apple-touch-icon.png +0 -0
- package/dist/ui/favicon/favicon-16x16.png +0 -0
- package/dist/ui/favicon/favicon-32x32.png +0 -0
- package/dist/ui/favicon/favicon.ico +0 -0
- package/dist/ui/favicon/favicon.png +0 -0
- package/dist/ui/favicon/site.webmanifest +1 -0
- package/dist/ui/fonts/RussoOne-Regular.ttf +0 -0
- package/dist/ui/images/taskforce.png +0 -0
- package/dist/ui/index.html +19 -0
- package/dist/utils/checklistMarkdown.d.ts +9 -0
- package/dist/utils/checklistMarkdown.js +46 -0
- package/dist/utils/constants.d.ts +21 -0
- package/dist/utils/constants.icons.test.d.ts +1 -0
- package/dist/utils/constants.icons.test.js +40 -0
- package/dist/utils/constants.js +100 -0
- package/dist/utils/contextFiles.d.ts +8 -0
- package/dist/utils/contextFiles.js +54 -0
- package/dist/utils/formatting.d.ts +5 -0
- package/dist/utils/formatting.js +30 -0
- package/dist/utils/planParser.d.ts +22 -0
- package/dist/utils/planParser.js +151 -0
- package/dist/utils/taskDragZones.d.ts +8 -0
- package/dist/utils/taskDragZones.js +14 -0
- package/dist/utils/taskDragZones.test.d.ts +1 -0
- package/dist/utils/taskDragZones.test.js +14 -0
- package/dist/utils/taskHierarchy.d.ts +4 -0
- package/dist/utils/taskHierarchy.js +69 -0
- package/dist/utils/taskHierarchy.test.d.ts +1 -0
- package/dist/utils/taskHierarchy.test.js +38 -0
- package/dist/utils/taskParenting.d.ts +3 -0
- package/dist/utils/taskParenting.js +24 -0
- package/dist/utils/taskParenting.test.d.ts +1 -0
- package/dist/utils/taskParenting.test.js +21 -0
- package/dist/utils/taskRelations.d.ts +6 -0
- package/dist/utils/taskRelations.js +24 -0
- package/dist/utils/taskRelations.test.d.ts +1 -0
- package/dist/utils/taskRelations.test.js +34 -0
- package/dist/utils/taskUtils.d.ts +2 -0
- package/dist/utils/taskUtils.js +20 -0
- package/dist/utils/taskforceApiClient.d.ts +7 -0
- package/dist/utils/taskforceApiClient.js +42 -0
- package/dist/utils/workspaceIdentity.d.ts +8 -0
- package/dist/utils/workspaceIdentity.js +47 -0
- package/dist/utils/workspaceIdentity.test.d.ts +1 -0
- package/dist/utils/workspaceIdentity.test.js +32 -0
- package/dist/utils/workspaceLifecycle.d.ts +26 -0
- package/dist/utils/workspaceLifecycle.js +69 -0
- package/dist/utils/workspaceLifecycle.test.d.ts +1 -0
- package/dist/utils/workspaceLifecycle.test.js +64 -0
- package/package.json +133 -0
- package/scripts/check-compat-boundaries.js +48 -0
- package/scripts/check-env.ts +24 -0
- package/scripts/check-localization-strings.mjs +49 -0
- package/scripts/check-runtime-boundaries.mjs +44 -0
- package/scripts/debug-global.mjs +34 -0
- package/scripts/debug-server.mjs +36 -0
- package/scripts/export-sqlite-to-postgres.mjs +125 -0
- package/scripts/generate-env-example.ts +8 -0
- package/scripts/generate-workflow-templates.mjs +134 -0
- package/scripts/mcp-stdio-adapter.mjs +160 -0
- package/scripts/postinstall.js +60 -0
- package/scripts/release-version-lib.mjs +88 -0
- package/scripts/release-version.mjs +72 -0
- package/scripts/run-dev-proxy.sh +49 -0
- package/scripts/run-e2e-realtime.sh +16 -0
- package/scripts/run-smoke.sh +23 -0
- package/scripts/run-soak.sh +29 -0
- package/scripts/test-global.js +143 -0
- package/scripts/update-homebrew-formula.sh +38 -0
- package/src/resources/templates/WORKFLOW_V2_POLICY.md +55 -0
- package/src/resources/templates/environments/aider.yaml +14 -0
- package/src/resources/templates/environments/antigravity.yaml +10 -0
- package/src/resources/templates/environments/claude.yaml +10 -0
- package/src/resources/templates/environments/cline.yaml +10 -0
- package/src/resources/templates/environments/codex.yaml +13 -0
- package/src/resources/templates/environments/copilot.yaml +10 -0
- package/src/resources/templates/environments/cursor.yaml +9 -0
- package/src/resources/templates/environments/gemini.yaml +9 -0
- package/src/resources/templates/environments/windsurf.yaml +10 -0
- package/src/resources/templates/workflow-sources/README.md +9 -0
- package/src/resources/templates/workflow-sources/workflowDocs.mjs +520 -0
- package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +1 -0
- package/src/resources/templates/workflows/collaborate.yaml +104 -0
- package/src/resources/templates/workflows/do.yaml +82 -0
- package/src/resources/templates/workflows/evaluate.yaml +111 -0
- package/src/resources/templates/workflows/execute.yaml +142 -0
- package/src/resources/templates/workflows/plan.yaml +112 -0
- package/src/resources/templates/workflows/review.yaml +109 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taskforce Vite Plugin
|
|
3
|
+
*
|
|
4
|
+
* Handles task operations during development by reading/writing JSON files.
|
|
5
|
+
* Uses TaskforceCore for logic, acting as an HTTP adapter.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { TaskforceCore } from '../core/Taskforce.js';
|
|
11
|
+
import { createRoutes, matchRoute } from '../server/routes.js';
|
|
12
|
+
import { resolveDatabaseConfigFromEnv } from '../storage/providerConfig.js';
|
|
13
|
+
import { resolveObjectStorageConfigFromEnv } from '../storage/objectStorageConfig.js';
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = path.dirname(__filename);
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
import pkg from '../../package.json' with { type: 'json' };
|
|
18
|
+
const { version } = pkg;
|
|
19
|
+
/**
|
|
20
|
+
* Vite plugin for Taskforce file operations
|
|
21
|
+
*
|
|
22
|
+
* Uses project root (parent of frontend/) as base path for file operations.
|
|
23
|
+
* Default storage path: .taskforce/ (for AI agent accessibility)
|
|
24
|
+
*/
|
|
25
|
+
export function taskforcePlugin(options) {
|
|
26
|
+
console.log(`\x1b[35m[Taskforce] v${version} initialized${options?.mode ? ` (${options.mode})` : ''}\x1b[0m`);
|
|
27
|
+
const hostRoot = options?.hostRoot;
|
|
28
|
+
const mode = options?.mode || 'app';
|
|
29
|
+
// Project root detection:
|
|
30
|
+
// Priority 1: Use hostRoot if provided (for CLI usage)
|
|
31
|
+
// Priority 2: Use process.cwd() (for standalone projects)
|
|
32
|
+
let projectRoot;
|
|
33
|
+
if (hostRoot) {
|
|
34
|
+
projectRoot = hostRoot;
|
|
35
|
+
console.log('[Taskforce] Using provided host root:', projectRoot);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
projectRoot = process.cwd();
|
|
39
|
+
console.log('[Taskforce] Using current working directory:', projectRoot);
|
|
40
|
+
}
|
|
41
|
+
// Resolve to real path to handle symlinks
|
|
42
|
+
if (fs.existsSync(projectRoot)) {
|
|
43
|
+
projectRoot = fs.realpathSync(projectRoot);
|
|
44
|
+
}
|
|
45
|
+
const db = resolveDatabaseConfigFromEnv();
|
|
46
|
+
// Initialize Core
|
|
47
|
+
const core = new TaskforceCore({
|
|
48
|
+
projectRoot,
|
|
49
|
+
storagePath: options?.outputPath,
|
|
50
|
+
tenantId: process.env.TASKFORCE_TENANT_ID || 'default',
|
|
51
|
+
database: {
|
|
52
|
+
provider: db.provider,
|
|
53
|
+
connectionString: db.connectionString
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const { screenshotsDir, basePath } = core.getPaths();
|
|
57
|
+
return {
|
|
58
|
+
name: 'taskforce',
|
|
59
|
+
handleHotUpdate({ file, server }) {
|
|
60
|
+
if (file.startsWith(basePath) && (file.endsWith('.json') || file.endsWith('.md'))) {
|
|
61
|
+
server.ws.send({
|
|
62
|
+
type: 'custom',
|
|
63
|
+
event: 'taskforce:update',
|
|
64
|
+
data: { file }
|
|
65
|
+
});
|
|
66
|
+
return []; // Return empty array to stop HMR propagation/reload
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
configureServer(server) {
|
|
70
|
+
// Hot Module Replacement for Taskforce data
|
|
71
|
+
// Listen for changes in the storage directory and notify client
|
|
72
|
+
server.watcher.add(basePath);
|
|
73
|
+
server.watcher.on('change', (file) => {
|
|
74
|
+
if (file.startsWith(basePath) && (file.endsWith('.json') || file.endsWith('.md'))) {
|
|
75
|
+
server.ws.send({
|
|
76
|
+
type: 'custom',
|
|
77
|
+
event: 'taskforce:update',
|
|
78
|
+
data: { file }
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// 1. Serve static assets (favicon, logo) from package dist/public or project root
|
|
83
|
+
server.middlewares.use((req, res, next) => {
|
|
84
|
+
const url = req.url || '';
|
|
85
|
+
// FIX: Do not intercept requests for source files (e.g., /src/...)
|
|
86
|
+
// Vite needs to handle these to transform them into JS modules when imported.
|
|
87
|
+
// If we serve them as raw images here, the browser receives an image when it expects a module, causing MIME type errors.
|
|
88
|
+
if (url.startsWith('/src/') || url.startsWith('/node_modules/') || url.startsWith('/@')) {
|
|
89
|
+
return next();
|
|
90
|
+
}
|
|
91
|
+
// Check if the request is for our branded assets
|
|
92
|
+
if (url.includes('favicon.png') || url.includes('logo.svg') || url.includes('logo.png') || url.includes('logo.jpg') || url.includes('favicon.ico')) {
|
|
93
|
+
// Priority list for project assets
|
|
94
|
+
const projectAssets = [
|
|
95
|
+
'logo.svg',
|
|
96
|
+
'logo.png',
|
|
97
|
+
'logo.jpg',
|
|
98
|
+
'favicon.png',
|
|
99
|
+
'favicon.ico'
|
|
100
|
+
];
|
|
101
|
+
const requestedFile = path.basename(url.split('?')[0]);
|
|
102
|
+
// 1. Check PROJECT public/ folder (User's assets)
|
|
103
|
+
// We check for ANY of the supported assets if the request corresponds to our generic "logo" concept
|
|
104
|
+
// But to keep it simple, if they ask for /favicon.png, we look for favicon.png.
|
|
105
|
+
// However, we want to allow the frontend to blindly ask for "/logo.png" (or similar) and get the BEST available logo.
|
|
106
|
+
// Strategy:
|
|
107
|
+
// If request is specifically for "logo.svg" (or the generic logo endpoint we decide on), we try to find the best logo.
|
|
108
|
+
// If request is for "favicon.png", we try to find the best favicon.
|
|
109
|
+
const projectPublic = path.join(projectRoot, 'public');
|
|
110
|
+
if (fs.existsSync(projectPublic)) {
|
|
111
|
+
// If checking for the logo, try all logo variants
|
|
112
|
+
if (url.includes('logo')) {
|
|
113
|
+
// Try to find ANY logo
|
|
114
|
+
for (const asset of ['logo.svg', 'logo.png', 'logo.jpg']) {
|
|
115
|
+
const assetPath = path.join(projectPublic, asset);
|
|
116
|
+
if (fs.existsSync(assetPath)) {
|
|
117
|
+
const contentType = asset.endsWith('.svg') ? 'image/svg+xml' : (asset.endsWith('.png') ? 'image/png' : 'image/jpeg');
|
|
118
|
+
res.writeHead(200, { 'Content-Type': contentType });
|
|
119
|
+
fs.createReadStream(assetPath).pipe(res);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// If specific file requested (and not handled by above generic logo logic, or if we want exact match)
|
|
125
|
+
const exactPath = path.join(projectPublic, requestedFile);
|
|
126
|
+
if (fs.existsSync(exactPath)) {
|
|
127
|
+
const contentType = requestedFile.endsWith('.svg') ? 'image/svg+xml' : (requestedFile.endsWith('.png') ? 'image/png' : (requestedFile.endsWith('.ico') ? 'image/x-icon' : 'image/jpeg'));
|
|
128
|
+
res.writeHead(200, { 'Content-Type': contentType });
|
|
129
|
+
fs.createReadStream(exactPath).pipe(res);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// 2. Fallback to Taskforce Default Assets (in package)
|
|
134
|
+
// Determine where we are running from
|
|
135
|
+
let assetPath = '';
|
|
136
|
+
// Case 1: Development - look in new src/assets structure
|
|
137
|
+
const devAssets = path.resolve(__dirname, '../../src/assets');
|
|
138
|
+
// Case 2: Production (dist/plugins/vite.js) -> ../public
|
|
139
|
+
const prodPublic = path.resolve(__dirname, '../public');
|
|
140
|
+
// Map requested file to our available defaults
|
|
141
|
+
// We only have favicon.png and logo.svg in our defaults
|
|
142
|
+
let defaultFile = requestedFile;
|
|
143
|
+
if (requestedFile.includes('logo') && !requestedFile.endsWith('.svg'))
|
|
144
|
+
defaultFile = 'logo.svg';
|
|
145
|
+
// If they asked for logo.png/jpg but we only have logo.svg default, serve logo.svg?
|
|
146
|
+
// Browsers might complain about mime type mismatch if we serve svg for png request.
|
|
147
|
+
// Better to just serve what we have if it matches name.
|
|
148
|
+
if (defaultFile === 'logo.png' || defaultFile === 'logo.jpg')
|
|
149
|
+
defaultFile = 'logo.svg'; // Force svg for default logo
|
|
150
|
+
if (fs.existsSync(path.join(prodPublic, defaultFile))) {
|
|
151
|
+
assetPath = path.join(prodPublic, defaultFile);
|
|
152
|
+
}
|
|
153
|
+
else if (devAssets) {
|
|
154
|
+
// Check image and favicon folders in dev
|
|
155
|
+
const imgPath = path.join(devAssets, 'images', defaultFile);
|
|
156
|
+
const favPath = path.join(devAssets, 'favicon', defaultFile);
|
|
157
|
+
if (fs.existsSync(imgPath)) {
|
|
158
|
+
assetPath = imgPath;
|
|
159
|
+
}
|
|
160
|
+
else if (fs.existsSync(favPath)) {
|
|
161
|
+
assetPath = favPath;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (assetPath && fs.existsSync(assetPath)) {
|
|
165
|
+
// Ensure we send correct content-type for the file we are actually serving
|
|
166
|
+
const contentType = assetPath.endsWith('.svg') ? 'image/svg+xml' : 'image/png';
|
|
167
|
+
res.writeHead(200, { 'Content-Type': contentType });
|
|
168
|
+
fs.createReadStream(assetPath).pipe(res);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
next();
|
|
173
|
+
});
|
|
174
|
+
// 2. Serve standalone UI dashboard (high priority to avoid SPA catch-all)
|
|
175
|
+
server.middlewares.use(async (req, res, next) => {
|
|
176
|
+
// Parse URL to handle query params and trailing slashes
|
|
177
|
+
const urlObj = new URL(req.url || '', 'http://localhost');
|
|
178
|
+
const pathname = urlObj.pathname;
|
|
179
|
+
if (pathname === '/taskforce' || pathname === '/taskforce/') {
|
|
180
|
+
const html = `
|
|
181
|
+
<!DOCTYPE html>
|
|
182
|
+
<html lang="en">
|
|
183
|
+
<head>
|
|
184
|
+
<meta charset="UTF-8" />
|
|
185
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
186
|
+
<link rel="icon" type="image/png" href="/src/assets/favicon/favicon.png" />
|
|
187
|
+
<title>Taskforce Dashboard</title>
|
|
188
|
+
<style>
|
|
189
|
+
body { margin: 0; background: #0f0f1a; color: white; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }
|
|
190
|
+
#root { height: 100vh; overflow: hidden; }
|
|
191
|
+
</style>
|
|
192
|
+
</head>
|
|
193
|
+
<body>
|
|
194
|
+
<div id="root"></div>
|
|
195
|
+
<script type="module">
|
|
196
|
+
import React from 'react';
|
|
197
|
+
import ReactDOM from 'react-dom/client';
|
|
198
|
+
import { BrowserRouter } from 'react-router-dom';
|
|
199
|
+
import { TaskforceCore } from '@taskforcehq/taskforce';
|
|
200
|
+
|
|
201
|
+
const root = document.getElementById('root');
|
|
202
|
+
ReactDOM.createRoot(root).render(
|
|
203
|
+
React.createElement(React.StrictMode, null,
|
|
204
|
+
React.createElement(BrowserRouter, null,
|
|
205
|
+
React.createElement(TaskforceCore, {
|
|
206
|
+
mode: 'standalone',
|
|
207
|
+
config: {
|
|
208
|
+
categories: ['Feature', 'Bug', 'Research'],
|
|
209
|
+
theme: 'midnight'
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
)
|
|
213
|
+
)
|
|
214
|
+
);
|
|
215
|
+
</script>
|
|
216
|
+
</body>
|
|
217
|
+
</html>`;
|
|
218
|
+
try {
|
|
219
|
+
const transformedHtml = await server.transformIndexHtml(req.url || '', html);
|
|
220
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
221
|
+
res.end(transformedHtml);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
console.error('[Taskforce] Error rendering standalone page:', e);
|
|
226
|
+
res.writeHead(500);
|
|
227
|
+
res.end('Error rendering Taskforce dashboard');
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
next();
|
|
232
|
+
});
|
|
233
|
+
// 3. Register centralized API routes
|
|
234
|
+
const objectStorage = resolveObjectStorageConfigFromEnv(process.env);
|
|
235
|
+
const routes = createRoutes(core, {
|
|
236
|
+
objectStorage
|
|
237
|
+
});
|
|
238
|
+
// Use a single middleware to match all API routes
|
|
239
|
+
server.middlewares.use(async (req, res, next) => {
|
|
240
|
+
const url = new URL(req.url || '/', `http://localhost`);
|
|
241
|
+
const match = matchRoute(req.method || 'GET', url.pathname, routes);
|
|
242
|
+
if (match) {
|
|
243
|
+
try {
|
|
244
|
+
// Pass request context (like mode) via headers or req decoration if needed
|
|
245
|
+
// Ideally core logic is decoupled from request, but updateConfig reads paths again.
|
|
246
|
+
// We can decorate req for routes that need it.
|
|
247
|
+
res.req = req;
|
|
248
|
+
if (!req.headers['x-taskforce-mode']) {
|
|
249
|
+
req.headers['x-taskforce-mode'] = mode; // Inject mode for /config route
|
|
250
|
+
}
|
|
251
|
+
await match.handler(req, res, match.params);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.error('[Taskforce] API error:', error);
|
|
255
|
+
// Only send error response if headers haven't been sent
|
|
256
|
+
if (!res.headersSent) {
|
|
257
|
+
const statusCode = Number.isFinite(Number(error?.statusCode))
|
|
258
|
+
? Math.max(400, Math.min(599, Number(error.statusCode)))
|
|
259
|
+
: 500;
|
|
260
|
+
res.writeHead(statusCode, { 'Content-Type': 'application/json' });
|
|
261
|
+
res.end(JSON.stringify({ error: error.message }));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
next();
|
|
267
|
+
});
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
export default taskforcePlugin;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Taskforce Workflow v2 Policy
|
|
2
|
+
|
|
3
|
+
This note defines the canonical policy for v2 workflow templates and environment exports.
|
|
4
|
+
|
|
5
|
+
## 1) Dispatch Precedence
|
|
6
|
+
- Explicit slash command invocation wins over task `approach`.
|
|
7
|
+
- `/do` may route by `approach` when no conflicting explicit command is provided.
|
|
8
|
+
- `approachMap` should exist as a global default, with optional per-workflow override.
|
|
9
|
+
|
|
10
|
+
## 2) Required Tools Policy
|
|
11
|
+
- Use hybrid enforcement:
|
|
12
|
+
- Critical tools: `strict-fail`
|
|
13
|
+
- Non-critical tools: `warn-and-fallback`
|
|
14
|
+
- Define tools in `compat` as:
|
|
15
|
+
- `requiredToolsCritical`
|
|
16
|
+
- `requiredToolsOptional`
|
|
17
|
+
- Fallback behavior must be explicit in workflow content:
|
|
18
|
+
- Mutating workflows (`do`, `plan`) should stop and ask user when MCP is unavailable.
|
|
19
|
+
- Non-mutating workflows (`evaluate`, optionally `review`) may continue read-only with clear warning.
|
|
20
|
+
|
|
21
|
+
## 3) Status Transition Policy
|
|
22
|
+
- AI-managed statuses (default allowed): `task`, `on-hold`, `in-progress`, `review`.
|
|
23
|
+
- AI must not set `done` or `cancelled` unless the user explicitly instructs it.
|
|
24
|
+
- If AI moves status to `task` or `on-hold`, it must add comment justification via MCP.
|
|
25
|
+
- Structured workflow summary comments are validated at MCP `add_comment` time when known summary headings are used.
|
|
26
|
+
|
|
27
|
+
## 4) Compatibility Policy
|
|
28
|
+
- `compat.minTaskforceVersion` uses semver-aware comparisons.
|
|
29
|
+
- Workflow execution should fail fast if critical compatibility checks are not met.
|
|
30
|
+
|
|
31
|
+
## 5) MCP Availability Policy
|
|
32
|
+
- `contextPolicy.mcpUnavailableAction` is required.
|
|
33
|
+
- Recommended defaults:
|
|
34
|
+
- `do`, `plan`: `stop-and-request-user-action`
|
|
35
|
+
- `evaluate`, `review`: may allow warning-based read-only fallback (project policy dependent)
|
|
36
|
+
|
|
37
|
+
## 6) Artifact Path Policy
|
|
38
|
+
- Artifact paths must be project-root-relative.
|
|
39
|
+
- Do not write artifacts outside the project root by default.
|
|
40
|
+
- Optional artifacts should use `savePolicy: ask-before-save`.
|
|
41
|
+
- Structured docs saved under `.taskforce/task-data/{taskId}/*` should include required section headings; attachment is validated at MCP attach time.
|
|
42
|
+
|
|
43
|
+
## 7) Artifact Ownership
|
|
44
|
+
- Keep artifacts owned by the workflow that produces them:
|
|
45
|
+
- `plan` -> `implementationPlan`
|
|
46
|
+
- `execute` -> `walkthrough`
|
|
47
|
+
- `evaluate` -> `evaluationReport` (optional)
|
|
48
|
+
- `review` -> `reviewReport` (optional)
|
|
49
|
+
|
|
50
|
+
## 8) Template Maintenance Rule
|
|
51
|
+
- Keep workflow `toolPolicy`, `compat`, `dispatch`, and `contextPolicy` concise and machine-readable.
|
|
52
|
+
- Put explanatory operational details in `content.default`.
|
|
53
|
+
- Edit source definitions in `src/resources/templates/workflow-sources/workflowDocs.mjs`.
|
|
54
|
+
- Use `npm run gen:workflows` after edits to regenerate flattened workflow YAML files.
|
|
55
|
+
- Use `npm run check:workflows` to detect drift between source and generated files.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Workflow Template Sources
|
|
2
|
+
|
|
3
|
+
This directory is the source of truth for workflow template definitions.
|
|
4
|
+
|
|
5
|
+
- Edit `workflowDocs.mjs` to change workflow structure/content.
|
|
6
|
+
- Run `npm run gen:workflows` to regenerate flattened YAML files in `../workflows`.
|
|
7
|
+
- Use `npm run check:workflows` to verify generated files are up to date.
|
|
8
|
+
|
|
9
|
+
Do not manually edit files in `../workflows` unless you immediately regenerate from source.
|