@hotmeshio/long-tail 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +262 -0
- package/build/examples/external-mcp-server/server.d.ts +17 -0
- package/build/examples/external-mcp-server/server.js +116 -0
- package/build/examples/index.d.ts +2 -0
- package/build/examples/index.js +7 -0
- package/build/examples/seed.d.ts +5 -0
- package/build/examples/seed.js +221 -0
- package/build/examples/types/envelopes.d.ts +34 -0
- package/build/examples/types/envelopes.js +8 -0
- package/build/examples/types/index.d.ts +10 -0
- package/build/examples/types/index.js +9 -0
- package/build/examples/types/resolvers.d.ts +27 -0
- package/build/examples/types/resolvers.js +9 -0
- package/build/examples/workers.d.ts +10 -0
- package/build/examples/workers.js +49 -0
- package/build/examples/workflows/basic-echo/activities.d.ts +20 -0
- package/build/examples/workflows/basic-echo/activities.js +55 -0
- package/build/examples/workflows/basic-echo/index.d.ts +14 -0
- package/build/examples/workflows/basic-echo/index.js +66 -0
- package/build/examples/workflows/kitchen-sink/activities.d.ts +40 -0
- package/build/examples/workflows/kitchen-sink/activities.js +46 -0
- package/build/examples/workflows/kitchen-sink/index.d.ts +22 -0
- package/build/examples/workflows/kitchen-sink/index.js +123 -0
- package/build/examples/workflows/review-content/activities.d.ts +10 -0
- package/build/examples/workflows/review-content/activities.js +44 -0
- package/build/examples/workflows/review-content/index.d.ts +10 -0
- package/build/examples/workflows/review-content/index.js +95 -0
- package/build/examples/workflows/review-content/types.d.ts +28 -0
- package/build/examples/workflows/review-content/types.js +2 -0
- package/build/index.d.ts +37 -0
- package/build/index.js +151 -0
- package/build/modules/auth.d.ts +58 -0
- package/build/modules/auth.js +163 -0
- package/build/modules/config.d.ts +19 -0
- package/build/modules/config.js +26 -0
- package/build/modules/defaults.d.ts +58 -0
- package/build/modules/defaults.js +95 -0
- package/build/modules/ltconfig.d.ts +21 -0
- package/build/modules/ltconfig.js +110 -0
- package/build/modules/maintenance.d.ts +18 -0
- package/build/modules/maintenance.js +47 -0
- package/build/routes/auth.d.ts +2 -0
- package/build/routes/auth.js +48 -0
- package/build/routes/bot-accounts.d.ts +2 -0
- package/build/routes/bot-accounts.js +280 -0
- package/build/routes/controlplane.d.ts +2 -0
- package/build/routes/controlplane.js +144 -0
- package/build/routes/dba.d.ts +2 -0
- package/build/routes/dba.js +86 -0
- package/build/routes/delegation.d.ts +2 -0
- package/build/routes/delegation.js +81 -0
- package/build/routes/escalations/bulk.d.ts +2 -0
- package/build/routes/escalations/bulk.js +324 -0
- package/build/routes/escalations/helpers.d.ts +5 -0
- package/build/routes/escalations/helpers.js +48 -0
- package/build/routes/escalations/index.d.ts +2 -0
- package/build/routes/escalations/index.js +20 -0
- package/build/routes/escalations/list.d.ts +2 -0
- package/build/routes/escalations/list.js +140 -0
- package/build/routes/escalations/resolve.d.ts +2 -0
- package/build/routes/escalations/resolve.js +240 -0
- package/build/routes/escalations/single.d.ts +2 -0
- package/build/routes/escalations/single.js +195 -0
- package/build/routes/exports.d.ts +2 -0
- package/build/routes/exports.js +163 -0
- package/build/routes/files.d.ts +2 -0
- package/build/routes/files.js +47 -0
- package/build/routes/index.d.ts +2 -0
- package/build/routes/index.js +52 -0
- package/build/routes/insight.d.ts +2 -0
- package/build/routes/insight.js +58 -0
- package/build/routes/maintenance.d.ts +2 -0
- package/build/routes/maintenance.js +38 -0
- package/build/routes/mcp-runs.d.ts +2 -0
- package/build/routes/mcp-runs.js +85 -0
- package/build/routes/mcp.d.ts +2 -0
- package/build/routes/mcp.js +264 -0
- package/build/routes/namespaces.d.ts +2 -0
- package/build/routes/namespaces.js +71 -0
- package/build/routes/oauth.d.ts +7 -0
- package/build/routes/oauth.js +217 -0
- package/build/routes/resolve.d.ts +9 -0
- package/build/routes/resolve.js +19 -0
- package/build/routes/roles.d.ts +2 -0
- package/build/routes/roles.js +195 -0
- package/build/routes/settings.d.ts +2 -0
- package/build/routes/settings.js +35 -0
- package/build/routes/tasks.d.ts +2 -0
- package/build/routes/tasks.js +133 -0
- package/build/routes/users.d.ts +2 -0
- package/build/routes/users.js +206 -0
- package/build/routes/workflows/config.d.ts +2 -0
- package/build/routes/workflows/config.js +123 -0
- package/build/routes/workflows/discovery.d.ts +2 -0
- package/build/routes/workflows/discovery.js +146 -0
- package/build/routes/workflows/index.d.ts +2 -0
- package/build/routes/workflows/index.js +18 -0
- package/build/routes/workflows/invocation.d.ts +2 -0
- package/build/routes/workflows/invocation.js +162 -0
- package/build/routes/yaml-workflows/crud.d.ts +2 -0
- package/build/routes/yaml-workflows/crud.js +276 -0
- package/build/routes/yaml-workflows/deployment.d.ts +2 -0
- package/build/routes/yaml-workflows/deployment.js +179 -0
- package/build/routes/yaml-workflows/helpers.d.ts +2 -0
- package/build/routes/yaml-workflows/helpers.js +8 -0
- package/build/routes/yaml-workflows/index.d.ts +2 -0
- package/build/routes/yaml-workflows/index.js +21 -0
- package/build/routes/yaml-workflows/versions.d.ts +2 -0
- package/build/routes/yaml-workflows/versions.js +116 -0
- package/build/scripts/process-helpers.d.ts +11 -0
- package/build/scripts/process-helpers.js +59 -0
- package/build/scripts/process.d.ts +18 -0
- package/build/scripts/process.js +191 -0
- package/build/scripts/token.d.ts +13 -0
- package/build/scripts/token.js +42 -0
- package/build/services/auth/bot-api-key.d.ts +32 -0
- package/build/services/auth/bot-api-key.js +112 -0
- package/build/services/auth/delegation.d.ts +20 -0
- package/build/services/auth/delegation.js +53 -0
- package/build/services/auth/service-token.d.ts +23 -0
- package/build/services/auth/service-token.js +105 -0
- package/build/services/config/cache.d.ts +2 -0
- package/build/services/config/cache.js +24 -0
- package/build/services/config/index.d.ts +4 -0
- package/build/services/config/index.js +13 -0
- package/build/services/config/provider.d.ts +2 -0
- package/build/services/config/provider.js +30 -0
- package/build/services/config/read.d.ts +3 -0
- package/build/services/config/read.js +68 -0
- package/build/services/config/sql.d.ts +14 -0
- package/build/services/config/sql.js +58 -0
- package/build/services/config/write.d.ts +5 -0
- package/build/services/config/write.js +61 -0
- package/build/services/controlplane/index.d.ts +47 -0
- package/build/services/controlplane/index.js +124 -0
- package/build/services/controlplane/quorum-bridge.d.ts +15 -0
- package/build/services/controlplane/quorum-bridge.js +62 -0
- package/build/services/controlplane/sql.d.ts +21 -0
- package/build/services/controlplane/sql.js +70 -0
- package/build/services/controlplane/types.d.ts +13 -0
- package/build/services/controlplane/types.js +3 -0
- package/build/services/cron/index.d.ts +46 -0
- package/build/services/cron/index.js +199 -0
- package/build/services/db/index.d.ts +3 -0
- package/build/services/db/index.js +19 -0
- package/build/services/db/migrate.d.ts +1 -0
- package/build/services/db/migrate.js +78 -0
- package/build/services/dba.d.ts +28 -0
- package/build/services/dba.js +32 -0
- package/build/services/escalation/bulk.d.ts +27 -0
- package/build/services/escalation/bulk.js +57 -0
- package/build/services/escalation/crud.d.ts +47 -0
- package/build/services/escalation/crud.js +150 -0
- package/build/services/escalation/index.d.ts +4 -0
- package/build/services/escalation/index.js +20 -0
- package/build/services/escalation/queries.d.ts +37 -0
- package/build/services/escalation/queries.js +163 -0
- package/build/services/escalation/sql.d.ts +21 -0
- package/build/services/escalation/sql.js +135 -0
- package/build/services/escalation/types.d.ts +43 -0
- package/build/services/escalation/types.js +13 -0
- package/build/services/escalation-strategy/default.d.ts +12 -0
- package/build/services/escalation-strategy/default.js +17 -0
- package/build/services/escalation-strategy/index.d.ts +21 -0
- package/build/services/escalation-strategy/index.js +32 -0
- package/build/services/escalation-strategy/mcp.d.ts +13 -0
- package/build/services/escalation-strategy/mcp.js +51 -0
- package/build/services/events/index.d.ts +37 -0
- package/build/services/events/index.js +64 -0
- package/build/services/events/memory.d.ts +27 -0
- package/build/services/events/memory.js +40 -0
- package/build/services/events/nats.d.ts +29 -0
- package/build/services/events/nats.js +50 -0
- package/build/services/events/publish.d.ts +72 -0
- package/build/services/events/publish.js +106 -0
- package/build/services/events/socketio.d.ts +33 -0
- package/build/services/events/socketio.js +70 -0
- package/build/services/export/client.d.ts +2 -0
- package/build/services/export/client.js +16 -0
- package/build/services/export/index.d.ts +39 -0
- package/build/services/export/index.js +158 -0
- package/build/services/export/post-process.d.ts +16 -0
- package/build/services/export/post-process.js +133 -0
- package/build/services/export/types.d.ts +25 -0
- package/build/services/export/types.js +2 -0
- package/build/services/hotmesh-utils.d.ts +61 -0
- package/build/services/hotmesh-utils.js +204 -0
- package/build/services/iam/activity.d.ts +52 -0
- package/build/services/iam/activity.js +59 -0
- package/build/services/iam/bots.d.ts +83 -0
- package/build/services/iam/bots.js +157 -0
- package/build/services/iam/context.d.ts +14 -0
- package/build/services/iam/context.js +61 -0
- package/build/services/iam/credentials.d.ts +42 -0
- package/build/services/iam/credentials.js +86 -0
- package/build/services/iam/envelope.d.ts +10 -0
- package/build/services/iam/envelope.js +32 -0
- package/build/services/iam/ephemeral.d.ts +50 -0
- package/build/services/iam/ephemeral.js +131 -0
- package/build/services/iam/index.d.ts +19 -0
- package/build/services/iam/index.js +37 -0
- package/build/services/iam/principal.d.ts +12 -0
- package/build/services/iam/principal.js +53 -0
- package/build/services/iam/resolve.d.ts +48 -0
- package/build/services/iam/resolve.js +89 -0
- package/build/services/insight/index.d.ts +30 -0
- package/build/services/insight/index.js +81 -0
- package/build/services/insight/prompts.d.ts +4 -0
- package/build/services/insight/prompts.js +15 -0
- package/build/services/interceptor/activities/config.d.ts +21 -0
- package/build/services/interceptor/activities/config.js +26 -0
- package/build/services/interceptor/activities/escalation.d.ts +58 -0
- package/build/services/interceptor/activities/escalation.js +110 -0
- package/build/services/interceptor/activities/index.d.ts +4 -0
- package/build/services/interceptor/activities/index.js +23 -0
- package/build/services/interceptor/activities/task.d.ts +65 -0
- package/build/services/interceptor/activities/task.js +168 -0
- package/build/services/interceptor/activities/workflow.d.ts +26 -0
- package/build/services/interceptor/activities/workflow.js +41 -0
- package/build/services/interceptor/activity-interceptor.d.ts +32 -0
- package/build/services/interceptor/activity-interceptor.js +86 -0
- package/build/services/interceptor/completion.d.ts +16 -0
- package/build/services/interceptor/completion.js +149 -0
- package/build/services/interceptor/context.d.ts +11 -0
- package/build/services/interceptor/context.js +20 -0
- package/build/services/interceptor/escalation.d.ts +26 -0
- package/build/services/interceptor/escalation.js +150 -0
- package/build/services/interceptor/index.d.ts +45 -0
- package/build/services/interceptor/index.js +160 -0
- package/build/services/interceptor/lifecycle.d.ts +44 -0
- package/build/services/interceptor/lifecycle.js +174 -0
- package/build/services/interceptor/state.d.ts +22 -0
- package/build/services/interceptor/state.js +36 -0
- package/build/services/interceptor/types.d.ts +43 -0
- package/build/services/interceptor/types.js +3 -0
- package/build/services/llm/detect.d.ts +16 -0
- package/build/services/llm/detect.js +33 -0
- package/build/services/llm/index.d.ts +34 -0
- package/build/services/llm/index.js +106 -0
- package/build/services/llm/providers/anthropic.d.ts +11 -0
- package/build/services/llm/providers/anthropic.js +85 -0
- package/build/services/llm/providers/openai.d.ts +9 -0
- package/build/services/llm/providers/openai.js +46 -0
- package/build/services/llm/translate.d.ts +66 -0
- package/build/services/llm/translate.js +192 -0
- package/build/services/llm/types.d.ts +64 -0
- package/build/services/llm/types.js +8 -0
- package/build/services/logger/index.d.ts +32 -0
- package/build/services/logger/index.js +69 -0
- package/build/services/logger/pino.d.ts +24 -0
- package/build/services/logger/pino.js +59 -0
- package/build/services/maintenance/index.d.ts +43 -0
- package/build/services/maintenance/index.js +183 -0
- package/build/services/mcp/adapter.d.ts +23 -0
- package/build/services/mcp/adapter.js +119 -0
- package/build/services/mcp/client/connection.d.ts +46 -0
- package/build/services/mcp/client/connection.js +280 -0
- package/build/services/mcp/client/index.d.ts +2 -0
- package/build/services/mcp/client/index.js +16 -0
- package/build/services/mcp/client/tools.d.ts +22 -0
- package/build/services/mcp/client/tools.js +118 -0
- package/build/services/mcp/db-server/index.d.ts +25 -0
- package/build/services/mcp/db-server/index.js +49 -0
- package/build/services/mcp/db-server/schemas.d.ts +52 -0
- package/build/services/mcp/db-server/schemas.js +34 -0
- package/build/services/mcp/db-server/tools.d.ts +5 -0
- package/build/services/mcp/db-server/tools.js +224 -0
- package/build/services/mcp/db.d.ts +26 -0
- package/build/services/mcp/db.js +141 -0
- package/build/services/mcp/index.d.ts +25 -0
- package/build/services/mcp/index.js +47 -0
- package/build/services/mcp/playwright-server/index.d.ts +14 -0
- package/build/services/mcp/playwright-server/index.js +25 -0
- package/build/services/mcp/playwright-server/lifecycle.d.ts +7 -0
- package/build/services/mcp/playwright-server/lifecycle.js +63 -0
- package/build/services/mcp/playwright-server/schemas.d.ts +81 -0
- package/build/services/mcp/playwright-server/schemas.js +48 -0
- package/build/services/mcp/playwright-server/tools.d.ts +2 -0
- package/build/services/mcp/playwright-server/tools.js +224 -0
- package/build/services/mcp/server.d.ts +26 -0
- package/build/services/mcp/server.js +286 -0
- package/build/services/mcp/sql.d.ts +12 -0
- package/build/services/mcp/sql.js +59 -0
- package/build/services/mcp/types.d.ts +17 -0
- package/build/services/mcp/types.js +3 -0
- package/build/services/mcp/vision-server.d.ts +15 -0
- package/build/services/mcp/vision-server.js +214 -0
- package/build/services/mcp/workflow-compiler-server.d.ts +15 -0
- package/build/services/mcp/workflow-compiler-server.js +206 -0
- package/build/services/mcp/workflow-server.d.ts +24 -0
- package/build/services/mcp/workflow-server.js +230 -0
- package/build/services/mcp-runs/enrichment.d.ts +12 -0
- package/build/services/mcp-runs/enrichment.js +39 -0
- package/build/services/mcp-runs/events.d.ts +6 -0
- package/build/services/mcp-runs/events.js +126 -0
- package/build/services/mcp-runs/execution-builder.d.ts +12 -0
- package/build/services/mcp-runs/execution-builder.js +100 -0
- package/build/services/mcp-runs/index.d.ts +4 -0
- package/build/services/mcp-runs/index.js +8 -0
- package/build/services/mcp-runs/queries.d.ts +28 -0
- package/build/services/mcp-runs/queries.js +71 -0
- package/build/services/mcp-runs/sql.d.ts +4 -0
- package/build/services/mcp-runs/sql.js +17 -0
- package/build/services/mcp-runs/types.d.ts +65 -0
- package/build/services/mcp-runs/types.js +2 -0
- package/build/services/namespace/index.d.ts +17 -0
- package/build/services/namespace/index.js +41 -0
- package/build/services/namespace/sql.d.ts +4 -0
- package/build/services/namespace/sql.js +23 -0
- package/build/services/namespace/types.d.ts +11 -0
- package/build/services/namespace/types.js +3 -0
- package/build/services/oauth/crypto.d.ts +19 -0
- package/build/services/oauth/crypto.js +95 -0
- package/build/services/oauth/db.d.ts +20 -0
- package/build/services/oauth/db.js +140 -0
- package/build/services/oauth/index.d.ts +12 -0
- package/build/services/oauth/index.js +77 -0
- package/build/services/oauth/providers/anthropic.d.ts +3 -0
- package/build/services/oauth/providers/anthropic.js +111 -0
- package/build/services/oauth/providers/github.d.ts +3 -0
- package/build/services/oauth/providers/github.js +46 -0
- package/build/services/oauth/providers/google.d.ts +3 -0
- package/build/services/oauth/providers/google.js +44 -0
- package/build/services/oauth/providers/index.d.ts +2 -0
- package/build/services/oauth/providers/index.js +7 -0
- package/build/services/oauth/providers/microsoft.d.ts +3 -0
- package/build/services/oauth/providers/microsoft.js +46 -0
- package/build/services/oauth/providers/mock.d.ts +3 -0
- package/build/services/oauth/providers/mock.js +76 -0
- package/build/services/oauth/providers/registry.d.ts +8 -0
- package/build/services/oauth/providers/registry.js +46 -0
- package/build/services/oauth/providers/types.d.ts +13 -0
- package/build/services/oauth/providers/types.js +2 -0
- package/build/services/oauth/state.d.ts +30 -0
- package/build/services/oauth/state.js +83 -0
- package/build/services/orchestrator/index.d.ts +23 -0
- package/build/services/orchestrator/index.js +156 -0
- package/build/services/orchestrator/types.d.ts +15 -0
- package/build/services/orchestrator/types.js +3 -0
- package/build/services/role/index.d.ts +47 -0
- package/build/services/role/index.js +136 -0
- package/build/services/role/sql.d.ts +14 -0
- package/build/services/role/sql.js +80 -0
- package/build/services/role/types.d.ts +11 -0
- package/build/services/role/types.js +3 -0
- package/build/services/storage/index.d.ts +12 -0
- package/build/services/storage/index.js +31 -0
- package/build/services/storage/local.d.ts +26 -0
- package/build/services/storage/local.js +129 -0
- package/build/services/storage/s3.d.ts +31 -0
- package/build/services/storage/s3.js +180 -0
- package/build/services/storage/types.d.ts +41 -0
- package/build/services/storage/types.js +2 -0
- package/build/services/task/crud.d.ts +21 -0
- package/build/services/task/crud.js +123 -0
- package/build/services/task/index.d.ts +4 -0
- package/build/services/task/index.js +20 -0
- package/build/services/task/process.d.ts +14 -0
- package/build/services/task/process.js +98 -0
- package/build/services/task/resolve.d.ts +12 -0
- package/build/services/task/resolve.js +49 -0
- package/build/services/task/sql.d.ts +19 -0
- package/build/services/task/sql.js +92 -0
- package/build/services/task/types.d.ts +56 -0
- package/build/services/task/types.js +9 -0
- package/build/services/telemetry/honeycomb.d.ts +53 -0
- package/build/services/telemetry/honeycomb.js +79 -0
- package/build/services/telemetry/index.d.ts +46 -0
- package/build/services/telemetry/index.js +68 -0
- package/build/services/user/auth.d.ts +7 -0
- package/build/services/user/auth.js +26 -0
- package/build/services/user/crud.d.ts +19 -0
- package/build/services/user/crud.js +151 -0
- package/build/services/user/index.d.ts +5 -0
- package/build/services/user/index.js +26 -0
- package/build/services/user/rbac.d.ts +15 -0
- package/build/services/user/rbac.js +32 -0
- package/build/services/user/roles.d.ts +7 -0
- package/build/services/user/roles.js +42 -0
- package/build/services/user/sql.d.ts +22 -0
- package/build/services/user/sql.js +45 -0
- package/build/services/user/types.d.ts +23 -0
- package/build/services/user/types.js +4 -0
- package/build/services/workers/registry.d.ts +10 -0
- package/build/services/workers/registry.js +26 -0
- package/build/services/workflow-invocation.d.ts +46 -0
- package/build/services/workflow-invocation.js +184 -0
- package/build/services/yaml-workflow/db-utils.d.ts +25 -0
- package/build/services/yaml-workflow/db-utils.js +93 -0
- package/build/services/yaml-workflow/db.d.ts +27 -0
- package/build/services/yaml-workflow/db.js +196 -0
- package/build/services/yaml-workflow/deployer-helpers.d.ts +13 -0
- package/build/services/yaml-workflow/deployer-helpers.js +133 -0
- package/build/services/yaml-workflow/deployer.d.ts +54 -0
- package/build/services/yaml-workflow/deployer.js +203 -0
- package/build/services/yaml-workflow/generator.d.ts +21 -0
- package/build/services/yaml-workflow/generator.js +117 -0
- package/build/services/yaml-workflow/index.d.ts +4 -0
- package/build/services/yaml-workflow/index.js +20 -0
- package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +48 -0
- package/build/services/yaml-workflow/input-analyzer-helpers.js +183 -0
- package/build/services/yaml-workflow/input-analyzer.d.ts +30 -0
- package/build/services/yaml-workflow/input-analyzer.js +109 -0
- package/build/services/yaml-workflow/pattern-detector/array-source.d.ts +22 -0
- package/build/services/yaml-workflow/pattern-detector/array-source.js +120 -0
- package/build/services/yaml-workflow/pattern-detector/collapse.d.ts +27 -0
- package/build/services/yaml-workflow/pattern-detector/collapse.js +92 -0
- package/build/services/yaml-workflow/pattern-detector/index.d.ts +18 -0
- package/build/services/yaml-workflow/pattern-detector/index.js +22 -0
- package/build/services/yaml-workflow/pattern-detector/run-detection.d.ts +28 -0
- package/build/services/yaml-workflow/pattern-detector/run-detection.js +81 -0
- package/build/services/yaml-workflow/pattern-detector/types.d.ts +29 -0
- package/build/services/yaml-workflow/pattern-detector/types.js +8 -0
- package/build/services/yaml-workflow/pipeline/analyze.d.ts +11 -0
- package/build/services/yaml-workflow/pipeline/analyze.js +64 -0
- package/build/services/yaml-workflow/pipeline/build/dag.d.ts +25 -0
- package/build/services/yaml-workflow/pipeline/build/dag.js +254 -0
- package/build/services/yaml-workflow/pipeline/build/index.d.ts +20 -0
- package/build/services/yaml-workflow/pipeline/build/index.js +115 -0
- package/build/services/yaml-workflow/pipeline/build/iteration.d.ts +25 -0
- package/build/services/yaml-workflow/pipeline/build/iteration.js +231 -0
- package/build/services/yaml-workflow/pipeline/build/metadata.d.ts +15 -0
- package/build/services/yaml-workflow/pipeline/build/metadata.js +126 -0
- package/build/services/yaml-workflow/pipeline/build/transform.d.ts +17 -0
- package/build/services/yaml-workflow/pipeline/build/transform.js +94 -0
- package/build/services/yaml-workflow/pipeline/build/utils.d.ts +22 -0
- package/build/services/yaml-workflow/pipeline/build/utils.js +129 -0
- package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +9 -0
- package/build/services/yaml-workflow/pipeline/build/wiring.js +148 -0
- package/build/services/yaml-workflow/pipeline/compile/index.d.ts +17 -0
- package/build/services/yaml-workflow/pipeline/compile/index.js +64 -0
- package/build/services/yaml-workflow/pipeline/compile/llm-call.d.ts +14 -0
- package/build/services/yaml-workflow/pipeline/compile/llm-call.js +153 -0
- package/build/services/yaml-workflow/pipeline/compile/parse-plan.d.ts +12 -0
- package/build/services/yaml-workflow/pipeline/compile/parse-plan.js +88 -0
- package/build/services/yaml-workflow/pipeline/compile/summarize.d.ts +39 -0
- package/build/services/yaml-workflow/pipeline/compile/summarize.js +174 -0
- package/build/services/yaml-workflow/pipeline/extract-helpers.d.ts +42 -0
- package/build/services/yaml-workflow/pipeline/extract-helpers.js +88 -0
- package/build/services/yaml-workflow/pipeline/extract.d.ts +24 -0
- package/build/services/yaml-workflow/pipeline/extract.js +235 -0
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +15 -0
- package/build/services/yaml-workflow/pipeline/prompts.js +254 -0
- package/build/services/yaml-workflow/pipeline/validate.d.ts +12 -0
- package/build/services/yaml-workflow/pipeline/validate.js +111 -0
- package/build/services/yaml-workflow/sql.d.ts +19 -0
- package/build/services/yaml-workflow/sql.js +83 -0
- package/build/services/yaml-workflow/types.d.ts +223 -0
- package/build/services/yaml-workflow/types.js +8 -0
- package/build/services/yaml-workflow/workers/callbacks.d.ts +17 -0
- package/build/services/yaml-workflow/workers/callbacks.js +194 -0
- package/build/services/yaml-workflow/workers/events.d.ts +7 -0
- package/build/services/yaml-workflow/workers/events.js +49 -0
- package/build/services/yaml-workflow/workers/index.d.ts +4 -0
- package/build/services/yaml-workflow/workers/index.js +15 -0
- package/build/services/yaml-workflow/workers/register.d.ts +15 -0
- package/build/services/yaml-workflow/workers/register.js +233 -0
- package/build/services/yaml-workflow/workers/scope.d.ts +13 -0
- package/build/services/yaml-workflow/workers/scope.js +37 -0
- package/build/start/adapters.d.ts +6 -0
- package/build/start/adapters.js +80 -0
- package/build/start/config.d.ts +10 -0
- package/build/start/config.js +88 -0
- package/build/start/index.d.ts +21 -0
- package/build/start/index.js +87 -0
- package/build/start/server.d.ts +6 -0
- package/build/start/server.js +46 -0
- package/build/start/workers.d.ts +32 -0
- package/build/start/workers.js +144 -0
- package/build/system/activities/claude-code.d.ts +56 -0
- package/build/system/activities/claude-code.js +258 -0
- package/build/system/activities/file-storage.d.ts +31 -0
- package/build/system/activities/file-storage.js +71 -0
- package/build/system/activities/http.d.ts +27 -0
- package/build/system/activities/http.js +56 -0
- package/build/system/activities/oauth.d.ts +39 -0
- package/build/system/activities/oauth.js +33 -0
- package/build/system/activities/triage/cache.d.ts +7 -0
- package/build/system/activities/triage/cache.js +10 -0
- package/build/system/activities/triage/context.d.ts +21 -0
- package/build/system/activities/triage/context.js +92 -0
- package/build/system/activities/triage/discovery.d.ts +25 -0
- package/build/system/activities/triage/discovery.js +170 -0
- package/build/system/activities/triage/index.d.ts +5 -0
- package/build/system/activities/triage/index.js +22 -0
- package/build/system/activities/triage/llm.d.ts +9 -0
- package/build/system/activities/triage/llm.js +34 -0
- package/build/system/activities/triage/tools.d.ts +24 -0
- package/build/system/activities/triage/tools.js +178 -0
- package/build/system/index.d.ts +16 -0
- package/build/system/index.js +100 -0
- package/build/system/mcp-servers/claude-code.d.ts +17 -0
- package/build/system/mcp-servers/claude-code.js +110 -0
- package/build/system/mcp-servers/db-query/index.d.ts +25 -0
- package/build/system/mcp-servers/db-query/index.js +49 -0
- package/build/system/mcp-servers/db-query/schemas.d.ts +52 -0
- package/build/system/mcp-servers/db-query/schemas.js +34 -0
- package/build/system/mcp-servers/db-query/tools.d.ts +5 -0
- package/build/system/mcp-servers/db-query/tools.js +224 -0
- package/build/system/mcp-servers/document-vision.d.ts +15 -0
- package/build/system/mcp-servers/document-vision.js +228 -0
- package/build/system/mcp-servers/file-storage.d.ts +4 -0
- package/build/system/mcp-servers/file-storage.js +101 -0
- package/build/system/mcp-servers/http-fetch.d.ts +4 -0
- package/build/system/mcp-servers/http-fetch.js +100 -0
- package/build/system/mcp-servers/human-queue.d.ts +26 -0
- package/build/system/mcp-servers/human-queue.js +287 -0
- package/build/system/mcp-servers/oauth.d.ts +11 -0
- package/build/system/mcp-servers/oauth.js +100 -0
- package/build/system/mcp-servers/playwright/browser-lifecycle.d.ts +26 -0
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +125 -0
- package/build/system/mcp-servers/playwright/index.d.ts +25 -0
- package/build/system/mcp-servers/playwright/index.js +42 -0
- package/build/system/mcp-servers/playwright/schemas.d.ts +383 -0
- package/build/system/mcp-servers/playwright/schemas.js +87 -0
- package/build/system/mcp-servers/playwright/tools-atomic.d.ts +2 -0
- package/build/system/mcp-servers/playwright/tools-atomic.js +9 -0
- package/build/system/mcp-servers/playwright/tools-navigation.d.ts +2 -0
- package/build/system/mcp-servers/playwright/tools-navigation.js +140 -0
- package/build/system/mcp-servers/playwright/tools-page-interaction.d.ts +2 -0
- package/build/system/mcp-servers/playwright/tools-page-interaction.js +162 -0
- package/build/system/mcp-servers/playwright/tools-run-script.d.ts +2 -0
- package/build/system/mcp-servers/playwright/tools-run-script.js +190 -0
- package/build/system/mcp-servers/playwright/types.d.ts +8 -0
- package/build/system/mcp-servers/playwright/types.js +30 -0
- package/build/system/mcp-servers/playwright-cli/helpers.d.ts +11 -0
- package/build/system/mcp-servers/playwright-cli/helpers.js +20 -0
- package/build/system/mcp-servers/playwright-cli/index.d.ts +4 -0
- package/build/system/mcp-servers/playwright-cli/index.js +15 -0
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +219 -0
- package/build/system/mcp-servers/playwright-cli/schemas.js +75 -0
- package/build/system/mcp-servers/playwright-cli/tools-auth.d.ts +2 -0
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +183 -0
- package/build/system/mcp-servers/playwright-cli/tools-capture.d.ts +2 -0
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +267 -0
- package/build/system/mcp-servers/prompts.d.ts +4 -0
- package/build/system/mcp-servers/prompts.js +10 -0
- package/build/system/mcp-servers/workflow-compiler.d.ts +15 -0
- package/build/system/mcp-servers/workflow-compiler.js +230 -0
- package/build/system/mcp-servers/workflow.d.ts +24 -0
- package/build/system/mcp-servers/workflow.js +231 -0
- package/build/system/seed/index.d.ts +7 -0
- package/build/system/seed/index.js +36 -0
- package/build/system/seed/server-definitions.d.ts +1460 -0
- package/build/system/seed/server-definitions.js +160 -0
- package/build/system/seed/tool-manifests-browser.d.ts +577 -0
- package/build/system/seed/tool-manifests-browser.js +158 -0
- package/build/system/seed/tool-manifests-data.d.ts +322 -0
- package/build/system/seed/tool-manifests-data.js +173 -0
- package/build/system/seed/tool-manifests-escalation.d.ts +173 -0
- package/build/system/seed/tool-manifests-escalation.js +76 -0
- package/build/system/seed/tool-manifests-workflows.d.ts +211 -0
- package/build/system/seed/tool-manifests-workflows.js +136 -0
- package/build/system/workflows/mcp-deterministic/activities.d.ts +6 -0
- package/build/system/workflows/mcp-deterministic/activities.js +56 -0
- package/build/system/workflows/mcp-deterministic/index.d.ts +9 -0
- package/build/system/workflows/mcp-deterministic/index.js +72 -0
- package/build/system/workflows/mcp-query/activities/caches.d.ts +7 -0
- package/build/system/workflows/mcp-query/activities/caches.js +10 -0
- package/build/system/workflows/mcp-query/activities/discovery.d.ts +31 -0
- package/build/system/workflows/mcp-query/activities/discovery.js +172 -0
- package/build/system/workflows/mcp-query/activities/index.d.ts +4 -0
- package/build/system/workflows/mcp-query/activities/index.js +13 -0
- package/build/system/workflows/mcp-query/activities/llm.d.ts +8 -0
- package/build/system/workflows/mcp-query/activities/llm.js +33 -0
- package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +5 -0
- package/build/system/workflows/mcp-query/activities/tool-executor.js +112 -0
- package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +14 -0
- package/build/system/workflows/mcp-query/activities/tool-loader.js +93 -0
- package/build/system/workflows/mcp-query/index.d.ts +14 -0
- package/build/system/workflows/mcp-query/index.js +227 -0
- package/build/system/workflows/mcp-query/prompts.d.ts +4 -0
- package/build/system/workflows/mcp-query/prompts.js +101 -0
- package/build/system/workflows/mcp-query/strategy-advisors.d.ts +14 -0
- package/build/system/workflows/mcp-query/strategy-advisors.js +109 -0
- package/build/system/workflows/mcp-query/types.d.ts +10 -0
- package/build/system/workflows/mcp-query/types.js +3 -0
- package/build/system/workflows/mcp-query-router/activities.d.ts +6 -0
- package/build/system/workflows/mcp-query-router/activities.js +12 -0
- package/build/system/workflows/mcp-query-router/index.d.ts +13 -0
- package/build/system/workflows/mcp-query-router/index.js +107 -0
- package/build/system/workflows/mcp-query-router/prompts.d.ts +1 -0
- package/build/system/workflows/mcp-query-router/prompts.js +8 -0
- package/build/system/workflows/mcp-triage/index.d.ts +31 -0
- package/build/system/workflows/mcp-triage/index.js +222 -0
- package/build/system/workflows/mcp-triage/prompts.d.ts +7 -0
- package/build/system/workflows/mcp-triage/prompts.js +159 -0
- package/build/system/workflows/mcp-triage/response-builders.d.ts +17 -0
- package/build/system/workflows/mcp-triage/response-builders.js +96 -0
- package/build/system/workflows/mcp-triage/response.d.ts +8 -0
- package/build/system/workflows/mcp-triage/response.js +157 -0
- package/build/system/workflows/mcp-triage/types.d.ts +20 -0
- package/build/system/workflows/mcp-triage/types.js +3 -0
- package/build/system/workflows/mcp-triage-deterministic/activities.d.ts +4 -0
- package/build/system/workflows/mcp-triage-deterministic/activities.js +8 -0
- package/build/system/workflows/mcp-triage-deterministic/index.d.ts +12 -0
- package/build/system/workflows/mcp-triage-deterministic/index.js +83 -0
- package/build/system/workflows/mcp-triage-router/activities.d.ts +9 -0
- package/build/system/workflows/mcp-triage-router/activities.js +15 -0
- package/build/system/workflows/mcp-triage-router/index.d.ts +13 -0
- package/build/system/workflows/mcp-triage-router/index.js +122 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/build/types/auth.d.ts +34 -0
- package/build/types/auth.js +2 -0
- package/build/types/config.d.ts +48 -0
- package/build/types/config.js +2 -0
- package/build/types/delegation.d.ts +41 -0
- package/build/types/delegation.js +2 -0
- package/build/types/discovery.d.ts +12 -0
- package/build/types/discovery.js +3 -0
- package/build/types/envelope.d.ts +53 -0
- package/build/types/envelope.js +2 -0
- package/build/types/escalation-strategy.d.ts +37 -0
- package/build/types/escalation-strategy.js +2 -0
- package/build/types/escalation.d.ts +39 -0
- package/build/types/escalation.js +21 -0
- package/build/types/events.d.ts +65 -0
- package/build/types/events.js +2 -0
- package/build/types/export.d.ts +78 -0
- package/build/types/export.js +11 -0
- package/build/types/index.d.ts +21 -0
- package/build/types/index.js +6 -0
- package/build/types/logger.d.ts +26 -0
- package/build/types/logger.js +2 -0
- package/build/types/maintenance.d.ts +24 -0
- package/build/types/maintenance.js +2 -0
- package/build/types/mcp.d.ts +80 -0
- package/build/types/mcp.js +2 -0
- package/build/types/oauth.d.ts +74 -0
- package/build/types/oauth.js +2 -0
- package/build/types/startup.d.ts +110 -0
- package/build/types/startup.js +2 -0
- package/build/types/task.d.ts +39 -0
- package/build/types/task.js +2 -0
- package/build/types/telemetry.d.ts +32 -0
- package/build/types/telemetry.js +2 -0
- package/build/types/tool-context.d.ts +68 -0
- package/build/types/tool-context.js +14 -0
- package/build/types/user.d.ts +18 -0
- package/build/types/user.js +2 -0
- package/build/types/workflow.d.ts +35 -0
- package/build/types/workflow.js +2 -0
- package/build/types/yaml-workflow.d.ts +101 -0
- package/build/types/yaml-workflow.js +5 -0
- package/build/vitest.config.d.ts +2 -0
- package/build/vitest.config.js +32 -0
- package/build/vitest.integration.config.d.ts +2 -0
- package/build/vitest.integration.config.js +25 -0
- package/build/workers/index.d.ts +6 -0
- package/build/workers/index.js +20 -0
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +2 -0
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +2 -0
- package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js.map +1 -0
- package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +2 -0
- package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js.map +1 -0
- package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +2 -0
- package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js.map +1 -0
- package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +2 -0
- package/dashboard/dist/assets/CopyableId-CBdxWfp8.js.map +1 -0
- package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +2 -0
- package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +2 -0
- package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js.map +1 -0
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js +2 -0
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +1 -0
- package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +2 -0
- package/dashboard/dist/assets/EmptyState-2CmV-IaS.js.map +1 -0
- package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +2 -0
- package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js.map +1 -0
- package/dashboard/dist/assets/EventTable-B01oJf6Y.js +2 -0
- package/dashboard/dist/assets/EventTable-B01oJf6Y.js.map +1 -0
- package/dashboard/dist/assets/Field-DuFBAYhu.js +2 -0
- package/dashboard/dist/assets/Field-DuFBAYhu.js.map +1 -0
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js.map +1 -0
- package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +2 -0
- package/dashboard/dist/assets/McpOverview-JkvRcX2e.js.map +1 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +2 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +1 -0
- package/dashboard/dist/assets/Modal-B4rbIVAn.js +2 -0
- package/dashboard/dist/assets/Modal-B4rbIVAn.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js +2 -0
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js.map +1 -0
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +1 -0
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +1 -0
- package/dashboard/dist/assets/RolePill-BTPa8L-P.js +2 -0
- package/dashboard/dist/assets/RolePill-BTPa8L-P.js.map +1 -0
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js +2 -0
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js.map +1 -0
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +4 -0
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +1 -0
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js.map +1 -0
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +2 -0
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +1 -0
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js.map +1 -0
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +1 -0
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +2 -0
- package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js.map +1 -0
- package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +2 -0
- package/dashboard/dist/assets/TasksListPage-C_QF23c1.js.map +1 -0
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +2 -0
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +1 -0
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +2 -0
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +1 -0
- package/dashboard/dist/assets/UserName-DaP4YAKr.js +2 -0
- package/dashboard/dist/assets/UserName-DaP4YAKr.js.map +1 -0
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +5 -0
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +1 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +2 -0
- package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js.map +1 -0
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +3 -0
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +1 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +1 -0
- package/dashboard/dist/assets/bots-BkKVMbUW.js +2 -0
- package/dashboard/dist/assets/bots-BkKVMbUW.js.map +1 -0
- package/dashboard/dist/assets/constants-CgaZfe5d.js +2 -0
- package/dashboard/dist/assets/constants-CgaZfe5d.js.map +1 -0
- package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +2 -0
- package/dashboard/dist/assets/escalation-columns-D6aqStaY.js.map +1 -0
- package/dashboard/dist/assets/escalation-qalymbKB.js +2 -0
- package/dashboard/dist/assets/escalation-qalymbKB.js.map +1 -0
- package/dashboard/dist/assets/format-gXZXQ-HJ.js +2 -0
- package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +1 -0
- package/dashboard/dist/assets/helpers-0gSleuzT.js +2 -0
- package/dashboard/dist/assets/helpers-0gSleuzT.js.map +1 -0
- package/dashboard/dist/assets/index-BWvMHed7.js +6 -0
- package/dashboard/dist/assets/index-BWvMHed7.js.map +1 -0
- package/dashboard/dist/assets/index-BaszoPO_.css +1 -0
- package/dashboard/dist/assets/index-Cn2jyj9A.js +2 -0
- package/dashboard/dist/assets/index-Cn2jyj9A.js.map +1 -0
- package/dashboard/dist/assets/index-D8VH6K8B.js +54 -0
- package/dashboard/dist/assets/index-D8VH6K8B.js.map +1 -0
- package/dashboard/dist/assets/index-D9SYwJsi.js +3 -0
- package/dashboard/dist/assets/index-D9SYwJsi.js.map +1 -0
- package/dashboard/dist/assets/index-DTPzZr_X.js +2 -0
- package/dashboard/dist/assets/index-DTPzZr_X.js.map +1 -0
- package/dashboard/dist/assets/index-D_6AB5BE.js +2 -0
- package/dashboard/dist/assets/index-D_6AB5BE.js.map +1 -0
- package/dashboard/dist/assets/index-S9Ks2Lj2.js +2 -0
- package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +1 -0
- package/dashboard/dist/assets/index-X85K5bHC.js +17 -0
- package/dashboard/dist/assets/index-X85K5bHC.js.map +1 -0
- package/dashboard/dist/assets/index-rjmgHlSH.js +2 -0
- package/dashboard/dist/assets/index-rjmgHlSH.js.map +1 -0
- package/dashboard/dist/assets/mcp-blCW6IL7.js +2 -0
- package/dashboard/dist/assets/mcp-blCW6IL7.js.map +1 -0
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +2 -0
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +1 -0
- package/dashboard/dist/assets/mcp-runs-ChPbpvXK.js +2 -0
- package/dashboard/dist/assets/mcp-runs-ChPbpvXK.js.map +1 -0
- package/dashboard/dist/assets/namespaces-BgbaC3ow.js +2 -0
- package/dashboard/dist/assets/namespaces-BgbaC3ow.js.map +1 -0
- package/dashboard/dist/assets/roles-ZNrqqnQl.js +2 -0
- package/dashboard/dist/assets/roles-ZNrqqnQl.js.map +1 -0
- package/dashboard/dist/assets/settings-eBRSE0mQ.js +2 -0
- package/dashboard/dist/assets/settings-eBRSE0mQ.js.map +1 -0
- package/dashboard/dist/assets/tasks-tRqClPns.js +2 -0
- package/dashboard/dist/assets/tasks-tRqClPns.js.map +1 -0
- package/dashboard/dist/assets/useFilterParams-BaXUAkYK.js +2 -0
- package/dashboard/dist/assets/useFilterParams-BaXUAkYK.js.map +1 -0
- package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js +2 -0
- package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js.map +1 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js +2 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js.map +1 -0
- package/dashboard/dist/assets/users-tMvNyOo8.js +2 -0
- package/dashboard/dist/assets/users-tMvNyOo8.js.map +1 -0
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js +292 -0
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +22 -0
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +1 -0
- package/dashboard/dist/assets/workflows-Cc4VHcrp.js +2 -0
- package/dashboard/dist/assets/workflows-Cc4VHcrp.js.map +1 -0
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +1 -0
- package/dashboard/dist/index.html +20 -0
- package/dashboard/dist/logo512.png +0 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge-TlC4jiig.js","sources":["../../src/components/common/display/StatusBadge.tsx"],"sourcesContent":["import type { LTTaskStatus, LTEscalationStatus } from '../../../api/types';\n\ntype Status = LTTaskStatus | LTEscalationStatus | string;\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-status-pending',\n in_progress: 'bg-status-active animate-pulse',\n completed: 'bg-status-success',\n resolved: 'bg-status-success',\n needs_intervention: 'bg-status-error',\n failed: 'bg-status-error',\n cancelled: 'bg-accent-muted',\n draft: 'bg-status-pending',\n deployed: 'bg-status-active',\n active: 'bg-status-success',\n archived: 'bg-text-tertiary',\n};\n\nconst statusLabels: Record<string, string> = {\n pending: 'Pending',\n in_progress: 'In Progress',\n completed: 'Completed',\n resolved: 'Resolved',\n needs_intervention: 'Needs Intervention',\n failed: 'Failed',\n cancelled: 'Cancelled',\n draft: 'Draft',\n deployed: 'Deployed',\n active: 'Active',\n archived: 'Archived',\n};\n\nexport function StatusBadge({ status }: { status: Status }) {\n const dotClass = statusStyles[status] ?? 'bg-status-pending';\n const label = statusLabels[status] ?? status;\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full ${dotClass}`} />\n <span className=\"text-xs text-text-secondary\">{label}</span>\n </span>\n );\n}\n"],"names":["statusStyles","statusLabels","StatusBadge","status","dotClass","label","jsxs","jsx"],"mappings":"+CAIA,MAAMA,EAAuC,CAC3C,QAAS,oBACT,YAAa,iCACb,UAAW,oBACX,SAAU,oBACV,mBAAoB,kBACpB,OAAQ,kBACR,UAAW,kBACX,MAAO,oBACP,SAAU,mBACV,OAAQ,oBACR,SAAU,kBACZ,EAEMC,EAAuC,CAC3C,QAAS,UACT,YAAa,cACb,UAAW,YACX,SAAU,WACV,mBAAoB,qBACpB,OAAQ,SACR,UAAW,YACX,MAAO,QACP,SAAU,WACV,OAAQ,SACR,SAAU,UACZ,EAEO,SAASC,EAAY,CAAE,OAAAC,GAA8B,CAC1D,MAAMC,EAAWJ,EAAaG,CAAM,GAAK,oBACnCE,EAAQJ,EAAaE,CAAM,GAAKA,EAEtC,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAW,wBAAwBH,CAAQ,GAAI,EACrDG,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAF,CAAA,CAAM,CAAA,EACvD,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./vendor-query-B2UbickB.js";const d=[10,25,50,100];function o({page:t,totalPages:r,onPageChange:l,total:n,pageSize:c,onPageSizeChange:i}){if(n===0)return null;const a=(t-1)*c+1,x=Math.min(t*c,n);return s.jsxs("div",{className:"flex items-center justify-between pt-4",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("p",{className:"text-xs text-text-tertiary",children:[a,"–",x," of ",n]}),i&&s.jsx("select",{value:c,onChange:e=>i(parseInt(e.target.value)),className:"select text-xs py-1",children:d.map(e=>s.jsxs("option",{value:e,children:[e," / page"]},e))})]}),r>1&&s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx("button",{onClick:()=>l(t-1),disabled:t<=1,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Previous"}),s.jsxs("span",{className:"px-3 text-xs text-text-secondary",children:[t," / ",r]}),s.jsx("button",{onClick:()=>l(t+1),disabled:t>=r,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Next"})]})]})}function m(t){return t.total===0?null:s.jsx("div",{className:"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4",style:{bottom:"calc(var(--feed-height, 0px) - 8px)"},children:s.jsx(o,{...t})})}export{m as S};
|
|
2
|
+
//# sourceMappingURL=StickyPagination-F9FZsRy9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StickyPagination-F9FZsRy9.js","sources":["../../src/components/common/data/Pagination.tsx","../../src/components/common/data/StickyPagination.tsx"],"sourcesContent":["const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\ninterface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n total,\n pageSize,\n onPageSizeChange,\n}: PaginationProps) {\n if (total === 0) return null;\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(page * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n {start}–{end} of {total}\n </p>\n {onPageSizeChange && (\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZE_OPTIONS.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n </div>\n {totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n <span className=\"px-3 text-xs text-text-secondary\">\n {page} / {totalPages}\n </span>\n <button\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { Pagination } from './Pagination';\n\ninterface StickyPaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function StickyPagination(props: StickyPaginationProps) {\n if (props.total === 0) return null;\n\n return (\n <div className=\"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }}>\n <Pagination {...props} />\n </div>\n );\n}\n"],"names":["PAGE_SIZE_OPTIONS","Pagination","page","totalPages","onPageChange","total","pageSize","onPageSizeChange","start","end","jsxs","jsx","size","StickyPagination","props"],"mappings":"+CAAA,MAAMA,EAAoB,CAAC,GAAI,GAAI,GAAI,GAAG,EAWnC,SAASC,EAAW,CACzB,KAAAC,EACA,WAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,iBAAAC,CACF,EAAoB,CAClB,GAAIF,IAAU,EAAG,OAAO,KAExB,MAAMG,GAASN,EAAO,GAAKI,EAAW,EAChCG,EAAM,KAAK,IAAIP,EAAOI,EAAUD,CAAK,EAE3C,OACEK,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CAAE,UAAU,6BACV,SAAA,CAAAF,EAAM,IAAQC,EAAI,OAAKJ,CAAA,EAC1B,EACCE,GACCI,EAAAA,IAAC,SAAA,CACC,MAAOL,EACP,SAAW,GAAMC,EAAiB,SAAS,EAAE,OAAO,KAAK,CAAC,EAC1D,UAAU,sBAET,WAAkB,IAAKK,GACtBF,OAAC,SAAA,CAAkB,MAAOE,EACvB,SAAA,CAAAA,EAAK,SAAA,CAAA,EADKA,CAEb,CACD,CAAA,CAAA,CACH,EAEJ,EACCT,EAAa,GACZO,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMP,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQ,EAClB,UAAU,oEACX,SAAA,UAAA,CAAA,EAGDQ,EAAAA,KAAC,OAAA,CAAK,UAAU,mCACb,SAAA,CAAAR,EAAK,MAAIC,CAAA,EACZ,EACAQ,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMP,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQC,EAClB,UAAU,oEACX,SAAA,MAAA,CAAA,CAED,CAAA,CACF,CAAA,EAEJ,CAEJ,CCxDO,SAASU,EAAiBC,EAA8B,CAC7D,OAAIA,EAAM,QAAU,EAAU,KAG5BH,EAAAA,IAAC,MAAA,CAAI,UAAU,8FAA8F,MAAO,CAAE,OAAQ,qCAAA,EAC5H,SAAAA,EAAAA,IAACV,EAAA,CAAY,GAAGa,EAAO,EACzB,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,a as R}from"./vendor-query-B2UbickB.js";import{J as w,C as W}from"./index-D8VH6K8B.js";import{S as K}from"./StatusBadge-TlC4jiig.js";import{f as E,b as V}from"./format-gXZXQ-HJ.js";import{L as P}from"./vendor-react-Cw8Gy8NJ.js";const j={activity:{bar:"bg-blue-500",outline:"border-blue-500 bg-transparent",text:"text-blue-500",label:"Activities"},signal:{bar:"bg-emerald-500",outline:"border-emerald-500 bg-transparent",text:"text-emerald-500",label:"Signals"},timer:{bar:"bg-status-warning",outline:"border-status-warning bg-transparent",text:"text-status-warning",label:"Timers"},child_workflow:{bar:"bg-violet-500",outline:"border-violet-500 bg-transparent",text:"text-violet-500",label:"Child Workflows"}},B="bg-stripes animate-pulse opacity-70",J=new Set(["callLLM","callDbTool","callVisionTool","callMcpTool","getDBTools","getVisionTools"]);function Y(s,r){if(s.length<=r)return s;const d=Math.floor((r-1)/2);return`${s.slice(0,d)}…${s.slice(s.length-d)}`}function F(s){const r=[],d=new Map,f=new Map;for(const x of s){const i=x.attributes.timeline_key;if(!i)continue;const o=x.event_type;o==="activity_task_scheduled"||o==="timer_started"||o==="child_workflow_execution_started"||o==="signal_wait_started"?d.set(i,x):f.set(i,x)}const m=new Set;for(const x of s){const i=x.attributes.timeline_key;if(i&&m.has(i))continue;i&&m.add(i);const o=i?d.get(i):void 0,g=i?f.get(i):void 0,c=g||o||x,u=c.category,_=c.attributes.activity_type||c.attributes.signal_name||c.attributes.child_workflow_id||c.event_type,h=o||c,p=g,N=new Date(h.event_time).getTime();let b=null,y=null,k=!1;p?(b=new Date(p.event_time).getTime(),y=p.duration_ms??b-N):c.duration_ms!==null?(y=c.duration_ms,b=N+y):k=!0,r.push({category:u,name:_||c.event_type,startTime:N,endTime:b,duration:y,eventId:c.event_id,pending:k})}return r}function A(s){if(!s)return null;try{return JSON.parse(s)}catch{return s}}function G({event:s,childTask:r,pending:d=!1,onClose:f}){const m=r?A(r.envelope):null,x=r?A(r.data):null;return t.jsxs("div",{className:"p-4 bg-surface-sunken rounded-md space-y-4",children:[t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("p",{className:"font-mono font-medium text-sm text-text-primary",children:s.attributes.activity_type??s.attributes.signal_name??s.attributes.child_workflow_id??s.event_type}),d&&t.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-warning/15 text-status-warning",children:[t.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"}),"Pending"]})]}),f&&t.jsx("button",{onClick:f,className:"text-text-tertiary hover:text-text-primary text-xs",children:"Close"})]}),t.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[s.attributes.activity_type&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Activity"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:s.attributes.activity_type})]}),t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Kind"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:s.attributes.kind})]}),s.duration_ms!==null&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Duration"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:E(s.duration_ms)})]}),t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Time"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:new Date(s.event_time).toLocaleString()})]}),s.attributes.signal_name&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Signal"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:s.attributes.signal_name})]}),s.attributes.awaited!==void 0&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Awaited"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:s.attributes.awaited?"Yes":"No (fire-and-forget)"})]}),s.attributes.timeline_key&&t.jsxs("div",{className:"col-span-2",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Timeline Key"}),t.jsx("p",{className:"text-xs font-mono text-text-primary truncate",title:s.attributes.timeline_key,children:s.attributes.timeline_key})]}),s.attributes.execution_index!==void 0&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Exec Index"}),t.jsx("p",{className:"text-xs font-mono text-text-primary",children:s.attributes.execution_index})]}),s.attributes.scheduled_event_id!=null&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Scheduled Event"}),t.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["#",s.attributes.scheduled_event_id]})]}),s.attributes.wait_event_id!=null&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Wait Started"}),t.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["Event #",s.attributes.wait_event_id]})]}),s.attributes.initiated_event_id!=null&&t.jsxs("div",{children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Initiated Event"}),t.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["#",s.attributes.initiated_event_id]})]})]}),!r&&s.attributes.child_workflow_id&&t.jsx("div",{className:"border-t border-surface-border pt-3",children:t.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[t.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"}),t.jsx(P,{to:`/workflows/executions/${s.attributes.child_workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:i=>i.stopPropagation(),children:s.attributes.child_workflow_id})]})}),r&&t.jsxs("div",{className:"space-y-3 border-t border-surface-border pt-3",children:[t.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[t.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"}),t.jsx(P,{to:`/workflows/executions/${r.workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:i=>i.stopPropagation(),children:r.workflow_id}),t.jsx(K,{status:r.status}),r.completed_at&&t.jsxs("span",{className:"text-[10px] text-text-tertiary",children:["Completed ",V(r.completed_at)]})]}),(m!=null||x!=null)&&t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[m!=null?t.jsx(w,{data:m,label:"Input (Envelope)",variant:"panel"}):t.jsx("div",{}),x!=null?t.jsx(w,{data:x,label:"Output (Result)",variant:"panel"}):t.jsx("div",{})]})]}),(()=>{const i=s.attributes.input,o=s.attributes.result,g=s.category==="signal",c=s.category==="activity",u=s.category==="child_workflow",_=i!==void 0&&(c||u),h=!r&&o!==void 0&&(c||u),p=s.attributes.activity_type==="ltSignalParent"?"Signal Payload":"Result";return _||h?t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[_?t.jsx(w,{data:i,label:"Input",variant:"panel"}):t.jsx("div",{}),h?t.jsx(w,{data:o,label:p,variant:"panel"}):t.jsx("div",{})]}):g&&i!==void 0?t.jsx(w,{data:i,label:"Signal Payload",variant:"panel"}):null})(),s.attributes.failure!==void 0&&t.jsx(w,{data:s.attributes.failure,label:"Failure"}),(()=>{const{kind:i,activity_type:o,result:g,timeline_key:c,execution_index:u,signal_name:_,input:h,child_workflow_id:p,awaited:N,wait_event_id:b,scheduled_event_id:y,initiated_event_id:k,failure:I,trace_id:C,span_id:M,...S}=s.attributes;return Object.keys(S).length>0?t.jsx(w,{data:S,label:"Attributes"}):null})()]})}function X({events:s,childTasks:r,outline:d}){const[f,m]=R.useState(new Set),i=s.filter(e=>e.category!=="workflow");if(i.length===0)return null;const o=F(i);if(o.length===0)return null;const g=Date.now(),c=o.flatMap(e=>{const a=[e.startTime];return e.endTime?a.push(e.endTime):a.push(g),a}),u=Math.min(...c),h=Math.max(...c)-u||1,p=new Map;for(const e of o){const a=`${e.category}:${e.name}`,l=e.startTime-u,v=(e.endTime?e.endTime-u:g-u)-l,$={eventId:e.eventId,startPct:l/h*100,widthPct:Math.max(v/h*100,.5),duration:e.duration,label:`${e.name} — ${e.duration!==null?E(e.duration):"pending"} — ${new Date(e.startTime).toLocaleTimeString()}`,eventTime:new Date(e.startTime).toISOString(),pending:e.pending};p.has(a)||p.set(a,{name:e.name,category:e.category,segments:[]}),p.get(a).segments.push($)}const N=Array.from(p.values()),b=5,y=Array.from({length:b+1},(e,a)=>({pct:a/b*100,label:E(Math.round(a/b*h))})),k=[...new Set(o.map(e=>e.category))],I=e=>{if(!(r!=null&&r.length))return;const a=e.attributes.activity_type;if(a)return r.find(l=>l.workflow_type===a)},C=e=>{m(a=>{const l=new Set(a);return l.has(e)?l.delete(e):l.add(e),l})},M=o.map(e=>e.eventId),S=M.length>0&&M.every(e=>f.has(e)),D=()=>{m(S?new Set:new Set(M))},L=e=>e.segments.filter(a=>f.has(a.eventId)).map(a=>i.find(l=>l.event_id===a.eventId)).filter(Boolean),T=(e,a)=>{var l,n;return a?B:d?((l=j[e])==null?void 0:l.outline)??"border-text-tertiary bg-transparent":((n=j[e])==null?void 0:n.bar)??"bg-text-tertiary"},O=e=>{var a;return d?((a=j[e])==null?void 0:a.text)??"text-text-tertiary":"text-white"};return t.jsxs("div",{className:"px-6 py-6 mb-6",children:[t.jsxs("div",{className:"flex items-center gap-4 mb-4 flex-wrap",children:[t.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Execution Timeline"}),t.jsx("button",{onClick:D,className:"text-[10px] text-accent hover:underline",children:S?"Collapse all":"Expand all"}),t.jsxs("div",{className:"flex items-center gap-3 ml-auto",children:[k.map(e=>{var a,l,n;return t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("span",{className:`w-2 h-2 rounded-full ${d?`border ${((a=j[e])==null?void 0:a.outline)??"border-text-tertiary"}`:((l=j[e])==null?void 0:l.bar)??"bg-text-tertiary"}`}),t.jsx("span",{className:"text-[9px] text-text-tertiary",children:((n=j[e])==null?void 0:n.label)??e})]},e)}),o.some(e=>e.pending)&&t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-status-warning animate-pulse"}),t.jsx("span",{className:"text-[9px] text-text-tertiary",children:"Pending"})]})]})]}),t.jsxs("div",{className:"flex",children:[t.jsx("div",{className:"w-56 shrink-0"}),t.jsx("div",{className:"flex-1 relative h-6 border-b border-surface-border",children:y.map(e=>t.jsx("span",{className:"absolute text-[9px] font-mono text-text-tertiary -translate-x-1/2 bottom-1",style:{left:`${e.pct}%`},children:e.label},e.pct))})]}),N.map(e=>{const a=L(e),l=j[e.category];return t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center border-b border-surface-border",children:[t.jsxs("div",{className:"w-56 shrink-0 py-3 pr-4 flex items-center gap-2",children:[t.jsx("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${(l==null?void 0:l.bar)??"bg-text-tertiary"}`}),t.jsx("p",{className:"text-xs font-mono text-text-secondary whitespace-nowrap overflow-hidden",title:e.name,children:Y(e.name,28)}),J.has(e.name)&&t.jsx("span",{className:"shrink-0 text-accent/60",title:"MCP tool interaction",children:t.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:t.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})})]}),t.jsxs("div",{className:"flex-1 relative h-10",children:[y.map(n=>t.jsx("div",{className:"absolute top-0 bottom-0 w-px bg-surface-border opacity-30",style:{left:`${n.pct}%`}},n.pct)),e.segments.map(n=>t.jsx("div",{className:`absolute top-2 h-6 rounded-sm cursor-pointer transition-all duration-200 ${d?"border-2":""} ${f.has(n.eventId)?`${T(e.category,n.pending)} ring-2 ring-accent ring-offset-1`:`${T(e.category,n.pending)} hover:opacity-80`}`,style:{left:`${n.startPct}%`,width:`${n.widthPct}%`,minWidth:"4px"},title:n.label,onClick:()=>C(n.eventId),children:n.widthPct>8&&t.jsx("span",{className:`absolute inset-0 flex items-center px-1.5 text-[9px] font-mono ${O(e.category)} truncate`,children:n.duration!==null?E(n.duration):"pending"})},n.eventId))]})]}),e.segments.map(n=>{const v=a.find($=>$.event_id===n.eventId);return t.jsx(W,{open:!!v,children:v?t.jsx("div",{className:"py-3",children:t.jsx(G,{event:v,childTask:I(v),pending:n.pending,onClose:()=>C(v.event_id)})}):null},n.eventId)})]},`${e.category}:${e.name}`)})]})}export{G as E,X as S};
|
|
2
|
+
//# sourceMappingURL=SwimlaneTimeline-7SiwATsZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwimlaneTimeline-7SiwATsZ.js","sources":["../../src/pages/workflows/workflow-execution/utils.ts","../../src/pages/workflows/workflow-execution/EventDetailPanel.tsx","../../src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx"],"sourcesContent":["export { formatDuration, formatDateTime } from '../../../lib/format';\n\nimport type { WorkflowExecutionEvent } from '../../../api/types';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface Segment {\n eventId: number;\n startPct: number;\n widthPct: number;\n duration: number | null;\n label: string;\n eventTime: string;\n pending: boolean;\n}\n\nexport interface Lane {\n name: string;\n category: string;\n segments: Segment[];\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────\n\nexport const CATEGORY_COLORS: Record<string, { bar: string; outline: string; text: string; label: string }> = {\n activity: { bar: 'bg-blue-500', outline: 'border-blue-500 bg-transparent', text: 'text-blue-500', label: 'Activities' },\n signal: { bar: 'bg-emerald-500', outline: 'border-emerald-500 bg-transparent', text: 'text-emerald-500', label: 'Signals' },\n timer: { bar: 'bg-status-warning', outline: 'border-status-warning bg-transparent', text: 'text-status-warning', label: 'Timers' },\n child_workflow: { bar: 'bg-violet-500', outline: 'border-violet-500 bg-transparent', text: 'text-violet-500', label: 'Child Workflows' },\n};\n\nexport const PENDING_CLASS = 'bg-stripes animate-pulse opacity-70';\n\n/** Activity names that indicate LLM/MCP tool interaction */\nexport const MCP_ACTIVITY_NAMES = new Set([\n 'callLLM', 'callDbTool', 'callVisionTool', 'callMcpTool', 'getDBTools', 'getVisionTools',\n]);\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Truncate a string in the middle, keeping the start and end visible. */\nexport function middleTruncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n const keep = Math.floor((maxLen - 1) / 2);\n return `${str.slice(0, keep)}…${str.slice(str.length - keep)}`;\n}\n\nexport interface TimelineSpan {\n category: string;\n name: string;\n startTime: number;\n endTime: number | null;\n duration: number | null;\n eventId: number;\n pending: boolean;\n}\n\n/**\n * Group paired events (scheduled→completed, started→fired, wait→signaled)\n * into a single span using timeline_key, or treat standalone events as points.\n */\nexport function buildTimelineSpans(events: WorkflowExecutionEvent[]): TimelineSpan[] {\n const spans: TimelineSpan[] = [];\n\n // Index scheduled/started events by timeline_key for pairing\n const startedMap = new Map<string, WorkflowExecutionEvent>();\n const completedMap = new Map<string, WorkflowExecutionEvent>();\n\n for (const evt of events) {\n const tlKey = evt.attributes.timeline_key;\n if (!tlKey) continue;\n const type = evt.event_type;\n\n if (type === 'activity_task_scheduled'\n || type === 'timer_started'\n || type === 'child_workflow_execution_started'\n || type === 'signal_wait_started') {\n startedMap.set(tlKey, evt);\n } else {\n completedMap.set(tlKey, evt);\n }\n }\n\n // Build spans from pairs\n const seen = new Set<string>();\n\n for (const evt of events) {\n const tlKey = evt.attributes.timeline_key;\n\n // Skip if no timeline_key or already processed\n if (tlKey && seen.has(tlKey)) continue;\n if (tlKey) seen.add(tlKey);\n\n const started = tlKey ? startedMap.get(tlKey) : undefined;\n const completed = tlKey ? completedMap.get(tlKey) : undefined;\n\n // Determine the representative event for this span\n const primary = completed || started || evt;\n const cat = primary.category;\n const name = primary.attributes.activity_type\n || primary.attributes.signal_name\n || primary.attributes.child_workflow_id\n || primary.event_type;\n\n const startEvt = started || primary;\n const endEvt = completed;\n\n const startMs = new Date(startEvt.event_time).getTime();\n let endMs: number | null = null;\n let dur: number | null = null;\n let pending = false;\n\n if (endEvt) {\n endMs = new Date(endEvt.event_time).getTime();\n dur = endEvt.duration_ms ?? (endMs - startMs);\n } else if (primary.duration_ms !== null) {\n dur = primary.duration_ms;\n endMs = startMs + dur;\n } else {\n // Pending — no completion event\n pending = true;\n }\n\n spans.push({\n category: cat,\n name: name || primary.event_type,\n startTime: startMs,\n endTime: endMs,\n duration: dur,\n eventId: primary.event_id,\n pending,\n });\n }\n\n return spans;\n}\n","import { Link } from 'react-router-dom';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { formatDuration, formatDateTime } from './utils';\n\ninterface EventDetailPanelProps {\n event: WorkflowExecutionEvent;\n childTask?: LTTaskRecord;\n /** When true, show a \"Pending\" badge. Caller determines this from the full event list. */\n pending?: boolean;\n onClose?: () => void;\n}\n\nfunction safeParseJson(raw: string | null | undefined): unknown {\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\n/**\n * Reusable detail panel for a workflow execution event.\n * Renders inline wherever placed — used by both SwimlaneTimeline\n * (below the lane row) and EventTable (below the event row).\n *\n * Shows rich detail for all event categories:\n * - Activities: activity_type, result, scheduled_event_id\n * - Signals: signal_name, payload, wait_event_id\n * - Timers: duration\n * - Child workflows: child_workflow_id link, awaited badge, result\n */\nexport function EventDetailPanel({ event, childTask, pending = false, onClose }: EventDetailPanelProps) {\n const childInput = childTask ? safeParseJson(childTask.envelope) : null;\n const childOutput = childTask ? safeParseJson(childTask.data) : null;\n\n return (\n <div className=\"p-4 bg-surface-sunken rounded-md space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <p className=\"font-mono font-medium text-sm text-text-primary\">\n {event.attributes.activity_type\n ?? event.attributes.signal_name\n ?? event.attributes.child_workflow_id\n ?? event.event_type}\n </p>\n {pending && (\n <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-warning/15 text-status-warning\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n Pending\n </span>\n )}\n </div>\n {onClose && (\n <button\n onClick={onClose}\n className=\"text-text-tertiary hover:text-text-primary text-xs\"\n >\n Close\n </button>\n )}\n </div>\n\n {/* Metadata grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {event.attributes.activity_type && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Activity\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.activity_type}\n </p>\n </div>\n )}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Kind\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.kind}\n </p>\n </div>\n {event.duration_ms !== null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Duration\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {formatDuration(event.duration_ms)}\n </p>\n </div>\n )}\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Time\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {new Date(event.event_time).toLocaleString()}\n </p>\n </div>\n\n {/* Signal-specific: signal name */}\n {event.attributes.signal_name && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Signal\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.signal_name}\n </p>\n </div>\n )}\n\n {/* Child workflow: awaited badge */}\n {event.attributes.awaited !== undefined && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Awaited\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.awaited ? 'Yes' : 'No (fire-and-forget)'}\n </p>\n </div>\n )}\n\n {/* Timeline key */}\n {event.attributes.timeline_key && (\n <div className=\"col-span-2\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Timeline Key\n </p>\n <p className=\"text-xs font-mono text-text-primary truncate\" title={event.attributes.timeline_key}>\n {event.attributes.timeline_key}\n </p>\n </div>\n )}\n\n {/* Execution index */}\n {event.attributes.execution_index !== undefined && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Exec Index\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n {event.attributes.execution_index}\n </p>\n </div>\n )}\n\n {/* Back-references */}\n {event.attributes.scheduled_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Scheduled Event\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n #{event.attributes.scheduled_event_id}\n </p>\n </div>\n )}\n {event.attributes.wait_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Wait Started\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n Event #{event.attributes.wait_event_id}\n </p>\n </div>\n )}\n {event.attributes.initiated_event_id != null && (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Initiated Event\n </p>\n <p className=\"text-xs font-mono text-text-primary\">\n #{event.attributes.initiated_event_id}\n </p>\n </div>\n )}\n </div>\n\n {/* Child workflow link — from event attributes (no matching task record) */}\n {!childTask && event.attributes.child_workflow_id && (\n <div className=\"border-t border-surface-border pt-3\">\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Child Workflow\n </span>\n <Link\n to={`/workflows/executions/${event.attributes.child_workflow_id}`}\n className=\"text-xs font-mono text-accent hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n {event.attributes.child_workflow_id}\n </Link>\n </div>\n </div>\n )}\n\n {/* Child workflow section — from matched task record */}\n {childTask && (\n <div className=\"space-y-3 border-t border-surface-border pt-3\">\n {/* Child link + status */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Child Workflow\n </span>\n <Link\n to={`/workflows/executions/${childTask.workflow_id}`}\n className=\"text-xs font-mono text-accent hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n {childTask.workflow_id}\n </Link>\n <StatusBadge status={childTask.status} />\n {childTask.completed_at && (\n <span className=\"text-[10px] text-text-tertiary\">\n Completed {formatDateTime(childTask.completed_at)}\n </span>\n )}\n </div>\n\n {/* Input / Output side-by-side */}\n {(childInput != null || childOutput != null) && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {childInput != null ? (\n <JsonViewer data={childInput} label=\"Input (Envelope)\" variant=\"panel\" />\n ) : <div />}\n {childOutput != null ? (\n <JsonViewer data={childOutput} label=\"Output (Result)\" variant=\"panel\" />\n ) : <div />}\n </div>\n )}\n </div>\n )}\n\n {/* Input / Result side-by-side for activities and child workflows */}\n {(() => {\n const input = event.attributes.input;\n const result = event.attributes.result;\n const isSignal = event.category === 'signal';\n const isActivity = event.category === 'activity';\n const isChild = event.category === 'child_workflow';\n const hasInput = input !== undefined && (isActivity || isChild);\n const hasResult = !childTask && result !== undefined && (isActivity || isChild);\n const resultLabel = event.attributes.activity_type === 'ltSignalParent' ? 'Signal Payload' : 'Result';\n\n if (hasInput || hasResult) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {hasInput ? (\n <JsonViewer data={input} label=\"Input\" variant=\"panel\" />\n ) : <div />}\n {hasResult ? (\n <JsonViewer data={result} label={resultLabel} variant=\"panel\" />\n ) : <div />}\n </div>\n );\n }\n\n // Signal payload — standalone (no result pairing)\n if (isSignal && input !== undefined) {\n return <JsonViewer data={input} label=\"Signal Payload\" variant=\"panel\" />;\n }\n\n return null;\n })()}\n\n {/* Failure detail */}\n {event.attributes.failure !== undefined && (\n <JsonViewer data={event.attributes.failure} label=\"Failure\" />\n )}\n\n {/* Remaining attributes (exclude the fields shown above) */}\n {(() => {\n const {\n kind,\n activity_type,\n result,\n timeline_key,\n execution_index,\n signal_name,\n input,\n child_workflow_id,\n awaited,\n wait_event_id,\n scheduled_event_id,\n initiated_event_id,\n failure,\n trace_id,\n span_id,\n ...rest\n } = event.attributes;\n return Object.keys(rest).length > 0 ? (\n <JsonViewer data={rest} label=\"Attributes\" />\n ) : null;\n })()}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { EventDetailPanel } from './EventDetailPanel';\nimport {\n formatDuration,\n middleTruncate,\n buildTimelineSpans,\n CATEGORY_COLORS,\n PENDING_CLASS,\n MCP_ACTIVITY_NAMES,\n} from './utils';\nimport type { Segment, Lane } from './utils';\n\ninterface SwimlaneTimelineProps {\n events: WorkflowExecutionEvent[];\n childTasks?: LTTaskRecord[];\n /** Use outline-style bars (border + transparent fill) instead of solid fills */\n outline?: boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function SwimlaneTimeline({ events, childTasks, outline }: SwimlaneTimelineProps) {\n const [selectedEvents, setSelectedEvents] = useState<Set<number>>(new Set());\n\n // Filter out workflow-level events (started/completed) — they aren't operations\n const timelineEvents = events.filter(\n (e) => e.category !== 'workflow',\n );\n\n // Show all activities (user + system), signals, timers, and child workflows.\n const displayEvents = timelineEvents;\n\n if (displayEvents.length === 0) return null;\n\n const spans = buildTimelineSpans(displayEvents);\n if (spans.length === 0) return null;\n\n // Compute time axis bounds\n const now = Date.now();\n const allTimes = spans.flatMap((s) => {\n const times = [s.startTime];\n if (s.endTime) times.push(s.endTime);\n else times.push(now); // pending extends to now\n return times;\n });\n const timeMin = Math.min(...allTimes);\n const timeMax = Math.max(...allTimes);\n const totalSpan = timeMax - timeMin || 1;\n\n // Group spans into lanes by \"category:name\"\n const laneMap = new Map<string, { name: string; category: string; segments: Segment[] }>();\n\n for (const span of spans) {\n const laneKey = `${span.category}:${span.name}`;\n const startOffset = span.startTime - timeMin;\n const endOffset = span.endTime ? span.endTime - timeMin : (now - timeMin);\n const widthMs = endOffset - startOffset;\n\n const segment: Segment = {\n eventId: span.eventId,\n startPct: (startOffset / totalSpan) * 100,\n widthPct: Math.max((widthMs / totalSpan) * 100, 0.5),\n duration: span.duration,\n label: `${span.name} — ${span.duration !== null ? formatDuration(span.duration) : 'pending'} — ${new Date(span.startTime).toLocaleTimeString()}`,\n eventTime: new Date(span.startTime).toISOString(),\n pending: span.pending,\n };\n\n if (!laneMap.has(laneKey)) {\n laneMap.set(laneKey, { name: span.name, category: span.category, segments: [] });\n }\n laneMap.get(laneKey)!.segments.push(segment);\n }\n\n const lanes: Lane[] = Array.from(laneMap.values());\n\n // Time axis ticks\n const tickCount = 5;\n const ticks = Array.from({ length: tickCount + 1 }, (_, i) => ({\n pct: (i / tickCount) * 100,\n label: formatDuration(Math.round((i / tickCount) * totalSpan)),\n }));\n\n // Active categories for legend\n const activeCategories = [...new Set(spans.map((s) => s.category))];\n\n /** Find a matching child task for an event */\n const findChildTask = (evt: WorkflowExecutionEvent): LTTaskRecord | undefined => {\n if (!childTasks?.length) return undefined;\n const activityType = evt.attributes.activity_type;\n if (!activityType) return undefined;\n return childTasks.find((t) => t.workflow_type === activityType);\n };\n\n const toggleEvent = (id: number) => {\n setSelectedEvents((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const allEventIds = spans.map((s) => s.eventId);\n const allExpanded = allEventIds.length > 0 && allEventIds.every((id) => selectedEvents.has(id));\n\n const toggleAll = () => {\n if (allExpanded) {\n setSelectedEvents(new Set());\n } else {\n setSelectedEvents(new Set(allEventIds));\n }\n };\n\n /** Find all selected events that live in this lane */\n const selectedEvtsForLane = (lane: Lane): WorkflowExecutionEvent[] => {\n return lane.segments\n .filter((s) => selectedEvents.has(s.eventId))\n .map((s) => displayEvents.find((e) => e.event_id === s.eventId)!)\n .filter(Boolean);\n };\n\n const barColor = (cat: string, pending: boolean) => {\n if (pending) return PENDING_CLASS;\n if (outline) return CATEGORY_COLORS[cat]?.outline ?? 'border-text-tertiary bg-transparent';\n return CATEGORY_COLORS[cat]?.bar ?? 'bg-text-tertiary';\n };\n\n const textColor = (cat: string) => {\n if (outline) return CATEGORY_COLORS[cat]?.text ?? 'text-text-tertiary';\n return 'text-white';\n };\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n <div className=\"flex items-center gap-4 mb-4 flex-wrap\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Execution Timeline\n </p>\n <button onClick={toggleAll} className=\"text-[10px] text-accent hover:underline\">\n {allExpanded ? 'Collapse all' : 'Expand all'}\n </button>\n\n {/* Legend */}\n <div className=\"flex items-center gap-3 ml-auto\">\n {activeCategories.map((cat) => (\n <div key={cat} className=\"flex items-center gap-1\">\n <span className={`w-2 h-2 rounded-full ${outline ? `border ${CATEGORY_COLORS[cat]?.outline ?? 'border-text-tertiary'}` : CATEGORY_COLORS[cat]?.bar ?? 'bg-text-tertiary'}`} />\n <span className=\"text-[9px] text-text-tertiary\">\n {CATEGORY_COLORS[cat]?.label ?? cat}\n </span>\n </div>\n ))}\n {spans.some((s) => s.pending) && (\n <div className=\"flex items-center gap-1\">\n <span className=\"w-2 h-2 rounded-full bg-status-warning animate-pulse\" />\n <span className=\"text-[9px] text-text-tertiary\">Pending</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Time axis */}\n <div className=\"flex\">\n <div className=\"w-56 shrink-0\" />\n <div className=\"flex-1 relative h-6 border-b border-surface-border\">\n {ticks.map((tick) => (\n <span\n key={tick.pct}\n className=\"absolute text-[9px] font-mono text-text-tertiary -translate-x-1/2 bottom-1\"\n style={{ left: `${tick.pct}%` }}\n >\n {tick.label}\n </span>\n ))}\n </div>\n </div>\n\n {/* Lanes */}\n {lanes.map((lane) => {\n const expandedEvts = selectedEvtsForLane(lane);\n const catColor = CATEGORY_COLORS[lane.category];\n\n return (\n <div key={`${lane.category}:${lane.name}`}>\n {/* Lane row */}\n <div className=\"flex items-center border-b border-surface-border\">\n <div className=\"w-56 shrink-0 py-3 pr-4 flex items-center gap-2\">\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${catColor?.bar ?? 'bg-text-tertiary'}`} />\n <p\n className=\"text-xs font-mono text-text-secondary whitespace-nowrap overflow-hidden\"\n title={lane.name}\n >\n {middleTruncate(lane.name, 28)}\n </p>\n {MCP_ACTIVITY_NAMES.has(lane.name) && (\n <span className=\"shrink-0 text-accent/60\" title=\"MCP tool interaction\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n )}\n </div>\n\n <div className=\"flex-1 relative h-10\">\n {ticks.map((tick) => (\n <div\n key={tick.pct}\n className=\"absolute top-0 bottom-0 w-px bg-surface-border opacity-30\"\n style={{ left: `${tick.pct}%` }}\n />\n ))}\n\n {lane.segments.map((seg) => (\n <div\n key={seg.eventId}\n className={`absolute top-2 h-6 rounded-sm cursor-pointer transition-all duration-200 ${outline ? 'border-2' : ''} ${\n selectedEvents.has(seg.eventId)\n ? `${barColor(lane.category, seg.pending)} ring-2 ring-accent ring-offset-1`\n : `${barColor(lane.category, seg.pending)} hover:opacity-80`\n }`}\n style={{\n left: `${seg.startPct}%`,\n width: `${seg.widthPct}%`,\n minWidth: '4px',\n }}\n title={seg.label}\n onClick={() => toggleEvent(seg.eventId)}\n >\n {seg.widthPct > 8 && (\n <span className={`absolute inset-0 flex items-center px-1.5 text-[9px] font-mono ${textColor(lane.category)} truncate`}>\n {seg.duration !== null ? formatDuration(seg.duration) : 'pending'}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Inline detail panels */}\n {lane.segments.map((seg) => {\n const evt = expandedEvts.find((e) => e.event_id === seg.eventId);\n return (\n <Collapsible key={seg.eventId} open={!!evt}>\n {evt ? (\n <div className=\"py-3\">\n <EventDetailPanel\n event={evt}\n childTask={findChildTask(evt)}\n pending={seg.pending}\n onClose={() => toggleEvent(evt.event_id)}\n />\n </div>\n ) : null}\n </Collapsible>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","PENDING_CLASS","MCP_ACTIVITY_NAMES","middleTruncate","str","maxLen","keep","buildTimelineSpans","events","spans","startedMap","completedMap","evt","tlKey","type","seen","started","completed","primary","cat","name","startEvt","endEvt","startMs","endMs","dur","pending","safeParseJson","raw","EventDetailPanel","event","childTask","onClose","childInput","childOutput","jsxs","jsx","formatDuration","Link","e","StatusBadge","formatDateTime","JsonViewer","input","result","isSignal","isActivity","isChild","hasInput","hasResult","resultLabel","kind","activity_type","timeline_key","execution_index","signal_name","child_workflow_id","awaited","wait_event_id","scheduled_event_id","initiated_event_id","failure","trace_id","span_id","rest","SwimlaneTimeline","childTasks","outline","selectedEvents","setSelectedEvents","useState","displayEvents","now","allTimes","s","times","timeMin","totalSpan","laneMap","span","laneKey","startOffset","widthMs","segment","lanes","tickCount","ticks","_","i","activeCategories","findChildTask","activityType","t","toggleEvent","id","prev","next","allEventIds","allExpanded","toggleAll","selectedEvtsForLane","lane","barColor","_a","_b","textColor","tick","expandedEvts","catColor","seg","Collapsible"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./vendor-query-B2UbickB.js";import{d as c}from"./tasks-tRqClPns.js";import{S as x}from"./StatusBadge-TlC4jiig.js";import{P as m}from"./PriorityBadge-DfQY9St9.js";import{F as a}from"./Field-DuFBAYhu.js";import{S as o,J as r}from"./index-D8VH6K8B.js";import{P as p}from"./PageHeader-CpWFly5S.js";import{d as j,L as u}from"./vendor-react-Cw8Gy8NJ.js";import"./vendor-icons-ZTAKVwGc.js";function f({items:l}){return l.length===0?null:e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border"}),e.jsx("div",{className:"space-y-0",children:l.map(s=>e.jsxs("div",{className:"relative flex gap-4 py-3",children:[e.jsx("div",{className:"relative z-10 mt-1",children:e.jsx("div",{className:`w-[15px] h-[15px] rounded-full border-2 ${s.category==="system"?"border-accent-muted bg-surface-raised":"border-accent bg-accent"}`})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("p",{className:"text-sm text-text-primary",children:s.label}),s.timestamp&&e.jsx("time",{className:"text-[10px] text-text-tertiary font-mono shrink-0",children:new Date(s.timestamp).toLocaleTimeString()})]}),s.detail&&e.jsx("div",{className:"mt-1",children:s.detail})]})]},s.id))})]})}function _(){const{id:l}=j(),{data:s,isLoading:n}=c(l);if(n)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!s)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Task not found."});const i=(s.milestones??[]).map((t,d)=>({id:d,label:t.name,timestamp:t.created_at,detail:e.jsx("span",{className:"text-xs text-text-secondary font-mono",children:typeof t.value=="object"?JSON.stringify(t.value):String(t.value)}),category:"user"}));return e.jsxs("div",{children:[e.jsx(p,{title:"Task Detail"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-12",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-10",children:[e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-6",children:[e.jsx(a,{label:"Status",value:e.jsx(x,{status:s.status})}),e.jsx(a,{label:"Priority",value:e.jsx(m,{priority:s.priority})}),e.jsx(a,{label:"Workflow Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.workflow_type})}),e.jsx(a,{label:"LT Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.lt_type})}),e.jsx(a,{label:"Task Queue",value:e.jsx("span",{className:"font-mono text-xs",children:s.task_queue})}),e.jsx(a,{label:"Workflow ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.workflow_id})}),e.jsx(a,{label:"Started",value:s.started_at?new Date(s.started_at).toLocaleString():"—"}),e.jsx(a,{label:"Completed",value:s.completed_at?new Date(s.completed_at).toLocaleString():"—"}),e.jsx(a,{label:"Signal ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.signal_id})})]}),s.error&&e.jsxs("div",{children:[e.jsx(o,{className:"mb-2 text-status-error",children:"Error"}),e.jsx("p",{className:"text-sm text-text-primary font-mono",children:s.error})]}),i.length>0&&e.jsxs("div",{children:[e.jsx(o,{className:"mb-4",children:"Milestones"}),e.jsx(f,{items:i})]}),e.jsx(u,{to:`/workflows/executions/${s.workflow_id}`,className:"btn-secondary inline-block text-xs",children:"View Workflow Execution"})]}),e.jsxs("div",{className:"space-y-8",children:[e.jsx(r,{data:s.envelope,label:"Envelope"}),s.metadata&&e.jsx(r,{data:s.metadata,label:"Metadata"}),s.data&&e.jsx(r,{data:s.data,label:"Result Data"})]})]})]})}export{_ as TaskDetailPage};
|
|
2
|
+
//# sourceMappingURL=TaskDetailPage-CbPVTakt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskDetailPage-CbPVTakt.js","sources":["../../src/components/common/display/Timeline.tsx","../../src/pages/workflows/TaskDetailPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport interface TimelineItem {\n id: string | number;\n label: string;\n timestamp?: string;\n detail?: ReactNode;\n category?: 'system' | 'user';\n}\n\nexport function Timeline({ items }: { items: TimelineItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border\" />\n\n <div className=\"space-y-0\">\n {items.map((item) => (\n <div key={item.id} className=\"relative flex gap-4 py-3\">\n {/* Dot */}\n <div className=\"relative z-10 mt-1\">\n <div\n className={`w-[15px] h-[15px] rounded-full border-2 ${\n item.category === 'system'\n ? 'border-accent-muted bg-surface-raised'\n : 'border-accent bg-accent'\n }`}\n />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-3\">\n <p className=\"text-sm text-text-primary\">{item.label}</p>\n {item.timestamp && (\n <time className=\"text-[10px] text-text-tertiary font-mono shrink-0\">\n {new Date(item.timestamp).toLocaleTimeString()}\n </time>\n )}\n </div>\n {item.detail && <div className=\"mt-1\">{item.detail}</div>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useParams, Link } from 'react-router-dom';\nimport { useTask } from '../../api/tasks';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { Field } from '../../components/common/data/Field';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { SectionLabel } from '../../components/common/layout/SectionLabel';\nimport { Timeline, type TimelineItem } from '../../components/common/display/Timeline';\n\nexport function TaskDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { data: task, isLoading } = useTask(id!);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!task) {\n return <p className=\"text-sm text-text-secondary\">Task not found.</p>;\n }\n\n const milestoneItems: TimelineItem[] = (task.milestones ?? []).map((m, i) => ({\n id: i,\n label: m.name,\n timestamp: m.created_at,\n detail: (\n <span className=\"text-xs text-text-secondary font-mono\">\n {typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value)}\n </span>\n ),\n category: 'user' as const,\n }));\n\n return (\n <div>\n <PageHeader title=\"Task Detail\" />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n {/* Left column — metadata */}\n <div className=\"lg:col-span-2 space-y-10\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-6\">\n <Field label=\"Status\" value={<StatusBadge status={task.status} />} />\n <Field label=\"Priority\" value={<PriorityBadge priority={task.priority} />} />\n <Field label=\"Workflow Type\" value={<span className=\"font-mono text-xs\">{task.workflow_type}</span>} />\n <Field label=\"LT Type\" value={<span className=\"font-mono text-xs\">{task.lt_type}</span>} />\n <Field label=\"Task Queue\" value={<span className=\"font-mono text-xs\">{task.task_queue}</span>} />\n <Field label=\"Workflow ID\" value={<span className=\"font-mono text-xs break-all\">{task.workflow_id}</span>} />\n <Field label=\"Started\" value={task.started_at ? new Date(task.started_at).toLocaleString() : '—'} />\n <Field label=\"Completed\" value={task.completed_at ? new Date(task.completed_at).toLocaleString() : '—'} />\n <Field label=\"Signal ID\" value={<span className=\"font-mono text-xs break-all\">{task.signal_id}</span>} />\n </div>\n\n {task.error && (\n <div>\n <SectionLabel className=\"mb-2 text-status-error\">Error</SectionLabel>\n <p className=\"text-sm text-text-primary font-mono\">{task.error}</p>\n </div>\n )}\n\n {milestoneItems.length > 0 && (\n <div>\n <SectionLabel className=\"mb-4\">Milestones</SectionLabel>\n <Timeline items={milestoneItems} />\n </div>\n )}\n\n <Link\n to={`/workflows/executions/${task.workflow_id}`}\n className=\"btn-secondary inline-block text-xs\"\n >\n View Workflow Execution\n </Link>\n </div>\n\n {/* Right column — payloads */}\n <div className=\"space-y-8\">\n <JsonViewer data={task.envelope} label=\"Envelope\" />\n {task.metadata && <JsonViewer data={task.metadata} label=\"Metadata\" />}\n {task.data && <JsonViewer data={task.data} label=\"Result Data\" />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Timeline","items","jsxs","jsx","item","TaskDetailPage","id","useParams","task","isLoading","useTask","milestoneItems","m","i","PageHeader","Field","StatusBadge","PriorityBadge","SectionLabel","Link","JsonViewer"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t}from"./vendor-query-B2UbickB.js";import{R as o}from"./vendor-icons-ZTAKVwGc.js";function p({queue:e,size:s="sm"}){const n=s==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",a=s==="md"?"w-3 h-3":"w-2.5 h-2.5";return t.jsxs("span",{className:`inline-flex items-center ${n} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`,children:[t.jsx(o,{className:`${a} shrink-0 text-accent/75`}),e]})}export{p as T};
|
|
2
|
+
//# sourceMappingURL=TaskQueuePill-awmtb0qw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskQueuePill-awmtb0qw.js","sources":["../../src/components/common/display/TaskQueuePill.tsx"],"sourcesContent":["import { Radio } from 'lucide-react';\n\ninterface TaskQueuePillProps {\n queue: string;\n size?: 'sm' | 'md';\n}\n\nexport function TaskQueuePill({ queue, size = 'sm' }: TaskQueuePillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-[11px] gap-1.5'\n : 'px-2 py-0.5 text-[10px] gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`}>\n <Radio className={`${iconClass} shrink-0 text-accent/75`} />\n {queue}\n </span>\n );\n}\n"],"names":["TaskQueuePill","queue","size","sizeClass","iconClass","jsxs","jsx","Radio"],"mappings":"8FAOO,SAASA,EAAc,CAAE,MAAAC,EAAO,KAAAC,EAAO,MAA4B,CACxE,MAAMC,EAAYD,IAAS,KACvB,oCACA,gCACEE,EAAYF,IAAS,KAAO,UAAY,cAE9C,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,6DACpD,SAAA,CAAAG,EAAAA,IAACC,EAAA,CAAM,UAAW,GAAGH,CAAS,2BAA4B,EACzDH,CAAA,EACH,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t}from"./vendor-query-B2UbickB.js";import{c as u}from"./tasks-tRqClPns.js";import{u as g}from"./workflows-Cc4VHcrp.js";import{u as w}from"./useFilterParams-BaXUAkYK.js";import{D as y}from"./DataTable-BDn1WBHS.js";import{S as k}from"./StatusBadge-TlC4jiig.js";import{P as c}from"./PriorityBadge-DfQY9St9.js";import{T as n}from"./TimeAgo-UPG6DoH8.js";import{S as x}from"./StickyPagination-F9FZsRy9.js";import{F as b,b as p}from"./FilterBar-Ck4K4rzu.js";import{P}from"./PageHeader-CpWFly5S.js";import{W as _}from"./WorkflowPill-CCDSVaQj.js";import{b as j}from"./vendor-react-Cw8Gy8NJ.js";import"./index-D8VH6K8B.js";import"./vendor-icons-ZTAKVwGc.js";import"./EmptyState-2CmV-IaS.js";import"./format-gXZXQ-HJ.js";const v=[{value:"pending",label:"Pending"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"},{value:"needs_intervention",label:"Needs Intervention"},{value:"cancelled",label:"Cancelled"}],S=[{key:"status",label:"Status",render:e=>t.jsx(k,{status:e.status}),className:"w-40"},{key:"workflow_type",label:"Workflow Type",render:e=>t.jsx(_,{type:e.workflow_type})},{key:"lt_type",label:"LT Type",render:e=>t.jsx("span",{className:"text-text-secondary text-xs",children:e.lt_type})},{key:"priority",label:"Priority",render:e=>t.jsx(c,{priority:e.priority}),className:"w-20"},{key:"started_at",label:"Started",render:e=>t.jsx(n,{date:e.started_at}),className:"w-28"},{key:"updated_at",label:"Updated",render:e=>t.jsx(n,{date:e.updated_at}),className:"w-28"}];function U(){const e=j(),{filters:r,setFilter:l,pagination:s}=w({filters:{status:"",workflow_type:""}}),{data:m}=g(),d=[...new Set((m??[]).map(a=>a.workflow_type))].sort(),{data:o,isLoading:f}=u({status:r.status||void 0,workflow_type:r.workflow_type||void 0,limit:s.pageSize,offset:s.offset}),i=(o==null?void 0:o.total)??0;return t.jsxs("div",{children:[t.jsx(P,{title:"Tasks"}),t.jsxs(b,{children:[t.jsx(p,{label:"Status",value:r.status,onChange:a=>l("status",a),options:v}),t.jsx(p,{label:"Workflow Type",value:r.workflow_type,onChange:a=>l("workflow_type",a),options:d.map(a=>({value:a,label:a}))})]}),t.jsx(y,{columns:S,data:(o==null?void 0:o.tasks)??[],keyFn:a=>a.id,onRowClick:a=>e(`/workflows/tasks/detail/${a.id}`),isLoading:f,emptyMessage:"No tasks found"}),t.jsx(x,{page:s.page,totalPages:s.totalPages(i),onPageChange:s.setPage,total:i,pageSize:s.pageSize,onPageSizeChange:s.setPageSize})]})}export{U as TasksListPage};
|
|
2
|
+
//# sourceMappingURL=TasksListPage-C_QF23c1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TasksListPage-C_QF23c1.js","sources":["../../src/pages/workflows/TasksListPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useTasks } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport type { LTTaskRecord } from '../../api/types';\n\nconst statusOptions = [\n { value: 'pending', label: 'Pending' },\n { value: 'in_progress', label: 'In Progress' },\n { value: 'completed', label: 'Completed' },\n { value: 'needs_intervention', label: 'Needs Intervention' },\n { value: 'cancelled', label: 'Cancelled' },\n];\n\nconst columns: Column<LTTaskRecord>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-40',\n },\n {\n key: 'workflow_type',\n label: 'Workflow Type',\n render: (row) => <WorkflowPill type={row.workflow_type} />,\n },\n {\n key: 'lt_type',\n label: 'LT Type',\n render: (row) => (\n <span className=\"text-text-secondary text-xs\">{row.lt_type}</span>\n ),\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.started_at} />,\n className: 'w-28',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimeAgo date={row.updated_at} />,\n className: 'w-28',\n },\n];\n\nexport function TasksListPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', workflow_type: '' },\n });\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading } = useTasks({\n status: filters.status || undefined,\n workflow_type: filters.workflow_type || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Tasks\" />\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.tasks ?? []}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/workflows/tasks/detail/${row.id}`)}\n isLoading={isLoading}\n emptyMessage=\"No tasks found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["statusOptions","columns","row","StatusBadge","WorkflowPill","jsx","PriorityBadge","TimeAgo","TasksListPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","useTasks","total","PageHeader","FilterBar","FilterSelect","v","t","DataTable","StickyPagination"],"mappings":"ktBAcA,MAAMA,EAAgB,CACpB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,cAAe,MAAO,aAAA,EAC/B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,qBAAsB,MAAO,oBAAA,EACtC,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEMC,EAAkC,CACtC,CACE,IAAK,SACL,MAAO,SACP,OAASC,SAASC,EAAA,CAAY,OAAQD,EAAI,OAAQ,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,gBACL,MAAO,gBACP,OAASA,SAASE,EAAA,CAAa,KAAMF,EAAI,aAAA,CAAe,CAAA,EAE1D,CACE,IAAK,UACL,MAAO,UACP,OAASA,GACPG,EAAAA,IAAC,QAAK,UAAU,8BAA+B,WAAI,OAAA,CAAQ,CAAA,EAG/D,CACE,IAAK,WACL,MAAO,WACP,OAASH,SAASI,EAAA,CAAc,SAAUJ,EAAI,SAAU,EACxD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,CAEf,EAEO,SAASM,GAAgB,CAC9B,MAAMC,EAAWC,EAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,cAAe,EAAA,CAAG,CAC1C,EAEK,CAAE,KAAMC,CAAA,EAAYC,EAAA,EACpBC,EAAgB,CAAC,GAAG,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,CAAC,EAAE,KAAA,EAE1E,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAS,CACnC,OAAQV,EAAQ,QAAU,OAC1B,cAAeA,EAAQ,eAAiB,OACxC,MAAOE,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKS,GAAQH,GAAA,YAAAA,EAAM,QAAS,EAE7B,cACG,MAAA,CACC,SAAA,CAAAd,EAAAA,IAACkB,EAAA,CAAW,MAAM,OAAA,CAAQ,SAEzBC,EAAA,CACC,SAAA,CAAAnB,EAAAA,IAACoB,EAAA,CACC,MAAM,SACN,MAAOd,EAAQ,OACf,SAAWe,GAAMd,EAAU,SAAUc,CAAC,EACtC,QAAS1B,CAAA,CAAA,EAEXK,EAAAA,IAACoB,EAAA,CACC,MAAM,gBACN,MAAOd,EAAQ,cACf,SAAWe,GAAMd,EAAU,gBAAiBc,CAAC,EAC7C,QAAST,EAAc,IAAKU,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,CAAA,CAC5D,EACF,EAEAtB,EAAAA,IAACuB,EAAA,CACC,QAAA3B,EACA,MAAMkB,GAAA,YAAAA,EAAM,QAAS,CAAA,EACrB,MAAQjB,GAAQA,EAAI,GACpB,WAAaA,GAAQO,EAAS,2BAA2BP,EAAI,EAAE,EAAE,EACjE,UAAAkB,EACA,aAAa,gBAAA,CAAA,EAGff,EAAAA,IAACwB,EAAA,CACC,KAAMhB,EAAW,KACjB,WAAYA,EAAW,WAAWS,CAAK,EACvC,aAAcT,EAAW,QACzB,MAAAS,EACA,SAAUT,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,j as i}from"./vendor-query-B2UbickB.js";import{c as n}from"./format-gXZXQ-HJ.js";function x({date:t,className:r=""}){const[,s]=e.useState(0);return e.useEffect(()=>{const a=setInterval(()=>s(o=>o+1),3e4);return()=>clearInterval(a)},[]),i.jsx("time",{dateTime:t,title:new Date(t).toLocaleString(),className:`text-xs text-text-tertiary ${r}`,children:n(t)})}export{x as T};
|
|
2
|
+
//# sourceMappingURL=TimeAgo-UPG6DoH8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeAgo-UPG6DoH8.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { formatTimeAgo } from '../../../lib/format';\n\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n const [, setTick] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => setTick((t) => t + 1), 30_000);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <time\n dateTime={date}\n title={new Date(date).toLocaleString()}\n className={`text-xs text-text-tertiary ${className}`}\n >\n {formatTimeAgo(date)}\n </time>\n );\n}\n"],"names":["TimeAgo","date","className","setTick","useState","useEffect","interval","t","jsx"],"mappings":"+FAGO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,KAAM,EAAGC,CAAO,EAAIC,EAAAA,SAAS,CAAC,EAE9BC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,YAAY,IAAMH,EAASI,GAAMA,EAAI,CAAC,EAAG,GAAM,EAChE,MAAO,IAAM,cAAcD,CAAQ,CACrC,EAAG,CAAA,CAAE,EAGHE,EAAAA,IAAC,OAAA,CACC,SAAUP,EACV,MAAO,IAAI,KAAKA,CAAI,EAAE,eAAA,EACtB,UAAW,8BAA8BC,CAAS,GAEjD,WAAcD,CAAI,CAAA,CAAA,CAGzB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./vendor-query-B2UbickB.js";import{T as s}from"./TimeAgo-UPG6DoH8.js";function i({date:t}){return e.jsxs("div",{children:[e.jsx(s,{date:t}),e.jsxs("p",{className:"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(t).toISOString().replace("T"," ").slice(0,19)," UTC"]})]})}export{i as T};
|
|
2
|
+
//# sourceMappingURL=TimestampCell-DoWMKg6w.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimestampCell-DoWMKg6w.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { TimeAgo } from './TimeAgo';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <TimeAgo date={date} />\n <p className=\"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsx","TimeAgo","jsxs"],"mappings":"yFAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,cACG,MAAA,CACC,SAAA,CAAAC,MAACC,GAAQ,KAAAF,EAAY,EACrBG,EAAAA,KAAC,IAAA,CAAE,UAAU,oEACV,SAAA,CAAA,IAAI,KAAKH,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,CAC/D,CAAA,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as r}from"./vendor-query-B2UbickB.js";import{a as t}from"./users-tMvNyOo8.js";function m({userId:a,fallback:s}){const{data:e}=t(a);return e?r.jsx(r.Fragment,{children:e.display_name||e.email||e.external_id}):r.jsx(r.Fragment,{children:s??`${a.slice(0,8)}…`})}export{m as U};
|
|
2
|
+
//# sourceMappingURL=UserName-DaP4YAKr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserName-DaP4YAKr.js","sources":["../../src/components/common/display/UserName.tsx"],"sourcesContent":["import { useUser } from '../../../api/users';\n\n/**\n * Resolves a user ID to their display name (or email, or truncated ID as fallback).\n * Renders inline — suitable for use inside <span>, <p>, etc.\n */\nexport function UserName({ userId, fallback }: { userId: string; fallback?: string }) {\n const { data: resolved } = useUser(userId);\n\n if (resolved) {\n return <>{resolved.display_name || resolved.email || resolved.external_id}</>;\n }\n\n // Still loading or no record — show fallback or truncated ID\n return <>{fallback ?? `${userId.slice(0, 8)}…`}</>;\n}\n"],"names":["UserName","userId","fallback","resolved","useUser","jsx","Fragment"],"mappings":"uFAMO,SAASA,EAAS,CAAE,OAAAC,EAAQ,SAAAC,GAAmD,CACpF,KAAM,CAAE,KAAMC,GAAaC,EAAQH,CAAM,EAEzC,OAAIE,oBACQ,SAAAA,EAAS,cAAgBA,EAAS,OAASA,EAAS,YAAY,EAIrEE,EAAAA,IAAAC,EAAAA,SAAA,CAAG,YAAY,GAAGL,EAAO,MAAM,EAAG,CAAC,CAAC,GAAA,CAAI,CACjD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as N,j as e}from"./vendor-query-B2UbickB.js";import{X as I}from"./vendor-icons-ZTAKVwGc.js";import{C as R}from"./CollapsibleSection-Cxk4wvjT.js";import{J as S,S as _}from"./index-D8VH6K8B.js";function $(t){return t.toLowerCase().replace(/[^a-z0-9-]/g,"").replace(/^-|-$/g,"")}function K({tags:t,onChange:l,placeholder:x="Add tag...",compact:u}){const[a,i]=N.useState(""),p=N.useRef(null),o=s=>{const r=$(s);r&&!t.includes(r)&&l([...t,r]),i("")},n=s=>{l(t.filter(r=>r!==s))},m=s=>{s.key==="Enter"||s.key===","?(s.preventDefault(),o(a)):s.key==="Backspace"&&!a&&t.length>0&&n(t[t.length-1])};return e.jsxs("div",{className:u?"flex flex-wrap items-center gap-1.5":"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary cursor-text",onClick:()=>{var s;return(s=p.current)==null?void 0:s.focus()},children:[t.map(s=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[s,e.jsx("button",{type:"button",onClick:r=>{r.stopPropagation(),n(s)},className:"hover:text-status-error transition-colors",children:e.jsx(I,{className:"w-2.5 h-2.5"})})]},s)),e.jsx("input",{ref:p,type:"text",value:a,onChange:s=>i(s.target.value),onKeyDown:m,onBlur:()=>{a.trim()&&o(a)},placeholder:t.length===0?x:"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"})]})}const L={dynamic:{bg:"bg-status-success/10",text:"text-status-success",label:"Dynamic"},fixed:{bg:"bg-surface-sunken",text:"text-text-tertiary",label:"Fixed"},wired:{bg:"bg-blue-500/10",text:"text-blue-500",label:"Wired"}};function z({classification:t}){const l=L[t]||L.fixed;return e.jsx("span",{className:`px-1.5 py-0.5 text-[9px] font-medium rounded ${l.bg} ${l.text}`,children:l.label})}function F({fields:t,onChange:l,editing:x}){const[u,a]=N.useState(null),i=(s,r)=>{const d=t.map((c,f)=>f===s?{...c,...r}:c);l(d)},p=s=>{const r=t[s],d=r.classification==="dynamic"?"fixed":"dynamic",c={classification:d};d==="fixed"&&r.default===void 0&&(c.default=r.type==="string"?"":r.type==="number"?0:r.type==="boolean"?!1:null),i(s,c)},o=s=>{l(t.filter((r,d)=>d!==s))};if(t.length===0)return e.jsx("div",{className:"py-4 text-center",children:e.jsx("p",{className:"text-xs text-text-tertiary",children:"No input fields detected from the execution."})});const n=t.filter(s=>s.classification==="dynamic"),m=t.filter(s=>s.classification==="fixed");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 text-[10px] text-text-tertiary",children:[e.jsxs("span",{children:[n.length," dynamic (user provides)"]}),e.jsxs("span",{children:[m.length," fixed (defaults from execution)"]})]}),n.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-status-success/70 mb-2",children:"Dynamic Inputs (required at invocation)"}),e.jsx("div",{className:"space-y-1",children:n.map(s=>{const r=t.indexOf(s),d=u===s.key;return e.jsx(O,{field:s,editing:x,expanded:d,onToggleExpand:()=>a(d?null:s.key),onToggleClassification:()=>p(r),onUpdate:c=>i(r,c),onRemove:()=>o(r)},s.key)})})]}),m.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Fixed Defaults (from execution)"}),e.jsx("div",{className:"space-y-1",children:m.map(s=>{const r=t.indexOf(s),d=u===s.key;return e.jsx(O,{field:s,editing:x,expanded:d,onToggleExpand:()=>a(d?null:s.key),onToggleClassification:()=>p(r),onUpdate:c=>i(r,c),onRemove:()=>o(r)},s.key)})})]})]})}function O({field:t,editing:l,expanded:x,onToggleExpand:u,onToggleClassification:a,onUpdate:i,onRemove:p}){return e.jsxs("div",{className:"border border-surface-border rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:u,className:"w-full flex items-center gap-2 px-3 py-2 hover:bg-surface-hover/50 transition-colors",children:[e.jsx("span",{className:"font-mono text-xs text-text-primary",children:t.key}),e.jsx("span",{className:"text-[9px] text-text-tertiary",children:t.type}),e.jsx(z,{classification:t.classification}),t.default!==void 0&&e.jsxs("span",{className:"text-[9px] font-mono text-text-tertiary truncate max-w-[120px]",children:["= ",JSON.stringify(t.default)]}),e.jsx("span",{className:"text-[9px] text-text-tertiary ml-auto truncate max-w-[150px]",children:t.source_tool}),e.jsx("svg",{className:`w-3 h-3 text-text-tertiary shrink-0 transition-transform ${x?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),x&&e.jsxs("div",{className:"px-3 pb-3 pt-1 border-t border-surface-border/50 space-y-2",children:[e.jsx("p",{className:"text-[10px] text-text-tertiary",children:t.description}),l&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),e.jsx("input",{type:"text",value:t.description,onChange:o=>i({description:o.target.value}),className:"input text-[11px] w-full mt-0.5"})]}),t.classification==="fixed"&&e.jsxs("div",{children:[e.jsx("label",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Default Value"}),e.jsx("input",{type:"text",value:t.default!==void 0?typeof t.default=="string"?t.default:JSON.stringify(t.default):"",onChange:o=>{let n=o.target.value;if(t.type==="number")n=Number(n)||0;else if(t.type==="boolean")n=n==="true";else try{n=JSON.parse(n)}catch{}i({default:n})},className:"input text-[11px] font-mono w-full mt-0.5"})]}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx("button",{type:"button",onClick:a,className:"text-[10px] text-accent hover:underline",children:t.classification==="dynamic"?"Make fixed (add default)":"Make dynamic (require input)"}),e.jsx("button",{type:"button",onClick:p,className:"text-[10px] text-status-error hover:underline ml-auto",children:"Remove"})]})]})]})]})}function H({wf:t,resolvedInputSchema:l,resolvedOutputSchema:x,resolvedYaml:u,configEditing:a,setConfigEditing:i,canEditConfig:p,yamlDraft:o,setYamlDraft:n,inputSchemaDraft:m,setInputSchemaDraft:s,outputSchemaDraft:r,setOutputSchemaDraft:d,inputFieldMetaDraft:c,setInputFieldMetaDraft:f,onSave:b,onCancel:j,updateMutation:y,yamlTextareaRef:v,isCollapsed:g,onToggle:A,schemasGrid:E}){const k=c.length>0,[C,T]=N.useState(!1);return e.jsx(R,{sectionKey:"config",title:"Configuration",isCollapsed:g,onToggle:A,children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("a",{href:"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-accent hover:underline flex items-center gap-1",children:[e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"})}),"YAML Guide"]}),a&&k&&e.jsx("button",{type:"button",onClick:()=>T(!C),className:"text-[10px] text-text-tertiary hover:text-text-primary",children:C?"Visual editor":"Advanced (JSON)"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[p&&!a&&e.jsx("button",{onClick:()=>{i(!0),setTimeout(()=>{var h;return(h=v.current)==null?void 0:h.focus()},50)},className:"text-[10px] text-accent hover:underline",children:"Edit"}),a&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:j,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:b,disabled:y.isPending||o===t.yaml_content&&m===JSON.stringify(t.input_schema,null,2)&&r===JSON.stringify(t.output_schema,null,2),className:"text-[10px] text-accent hover:underline disabled:opacity-40 disabled:no-underline",children:y.isPending?"Saving...":"Save"})]})]})]}),y.error&&e.jsx("p",{className:"text-xs text-status-error",children:y.error.message}),e.jsxs("div",{className:E?"grid grid-cols-1 lg:grid-cols-2 gap-6":"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input Schema"}),a&&k&&!C?e.jsx(F,{fields:c,onChange:f,editing:a}):a?e.jsx("textarea",{value:m,onChange:h=>s(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(m.split(`
|
|
2
|
+
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1}):k?e.jsx(F,{fields:c,onChange:()=>{},editing:!1}):e.jsx(S,{data:l??{},label:""})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Output Schema"}),a?e.jsx("textarea",{value:r,onChange:h=>d(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(r.split(`
|
|
3
|
+
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1}):e.jsx(S,{data:x??{},label:""})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"YAML Definition"}),a?e.jsx("textarea",{ref:v,value:o,onChange:h=>n(h.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:o.split(`
|
|
4
|
+
`).length+1,style:{fieldSizing:"content"},spellCheck:!1}):e.jsx("pre",{className:"p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-secondary overflow-x-auto whitespace-pre",children:u??t.yaml_content})]})]})})}const w=["draft","active","archived"],J={draft:"Draft",active:"Active",archived:"Archived"},D={draft:{filled:"bg-status-draft border-status-draft",line:"bg-status-draft/30"},active:{filled:"bg-status-success border-status-success",line:"bg-status-success/30"},archived:{filled:"bg-text-tertiary border-text-tertiary",line:"bg-text-tertiary/30"}};function U({status:t,sourceWorkflowId:l,contentVersion:x,deployedContentVersion:u,onDeploy:a,onArchive:i,onDelete:p,onRegenerate:o,isPending:n,error:m}){const s=t==="deployed"?"active":t,r=w.indexOf(s),d=x!=null&&x>(u??0);return e.jsxs("div",{children:[e.jsx(_,{className:"mb-4",children:"Lifecycle"}),d&&s!=="draft"&&s!=="archived"&&e.jsxs("div",{className:"mb-4 px-3 py-2 rounded-md bg-status-pending/10 border border-status-pending/30",children:[e.jsx("p",{className:"text-[10px] font-semibold text-status-pending mb-1",children:"YAML modified"}),e.jsxs("p",{className:"text-[10px] text-text-secondary leading-relaxed",children:["v",x," edited since deploy (v",u,"). Redeploy to apply changes."]}),e.jsx("button",{onClick:a,disabled:n,className:"mt-1.5 text-[10px] font-medium text-status-pending hover:underline",children:n?"Deploying...":"Deploy now"})]}),e.jsx("div",{className:"space-y-0",children:w.map((c,f)=>{const b=c===s,j=f<r,y=f>r,v=f===w.length-1,g=D[c];return e.jsxs("div",{className:"flex items-stretch gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center w-5 shrink-0",children:[e.jsx("span",{className:`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${b||j?g.filled:"bg-surface-sunken border-surface-border"}`}),!v&&e.jsx("span",{className:`w-px flex-1 ${j?g.line:"bg-surface-border"}`})]}),e.jsxs("div",{className:`pb-5 ${v?"pb-0":""}`,children:[e.jsx("p",{className:`text-xs font-medium ${b?"text-text-primary":y?"text-text-tertiary":"text-text-secondary"}`,children:J[c]}),b&&c==="draft"&&e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[e.jsx("button",{onClick:a,disabled:n,className:"btn-primary text-[11px] px-3 py-1",children:n?"Deploying...":"Deploy"}),l&&e.jsx("button",{onClick:o,disabled:n,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Regenerate"})]}),b&&c==="active"&&e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[e.jsx("button",{onClick:i,disabled:n,className:"text-[11px] text-text-tertiary hover:text-status-error",children:"Archive"}),l&&e.jsx("button",{onClick:o,disabled:n,className:"text-[10px] text-text-tertiary hover:text-text-primary",children:"Regenerate"})]})]})]},c)})}),x!=null&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-surface-border",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Content Version"}),e.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["v",x,u!=null&&e.jsxs("span",{className:"text-text-tertiary ml-1.5",children:["(deployed: v",u,")"]})]})]}),(t==="draft"||t==="archived")&&e.jsx("div",{className:"mt-4 pt-4 border-t border-surface-border",children:e.jsx("button",{onClick:p,disabled:n,className:"text-[11px] text-status-error hover:underline",children:"Delete workflow tool"})}),m&&e.jsx("p",{className:"mt-3 text-[11px] text-status-error",children:m})]})}function W({versionsData:t,searchParams:l,setSearchParams:x,currentVersion:u,viewingVersion:a}){return e.jsxs("div",{children:[e.jsx(_,{className:"mb-3",children:"Version History"}),e.jsx("div",{className:"space-y-1",children:t.versions.map(i=>{const p=i.version===u,o=a===i.version;return e.jsxs("button",{type:"button",onClick:()=>{const n=new URLSearchParams(l);p?n.delete("version"):n.set("version",String(i.version)),x(n)},className:`w-full text-left px-2 py-1.5 rounded text-xs transition-colors ${o?"bg-accent/10 text-accent":"text-text-secondary hover:bg-surface-sunken hover:text-text-primary"}`,children:[e.jsxs("span",{className:"font-mono font-medium",children:["v",i.version]}),p&&e.jsx("span",{className:"text-text-tertiary ml-1",children:"(current)"}),i.change_summary&&e.jsx("p",{className:"text-[10px] text-text-tertiary truncate mt-0.5",children:i.change_summary})]},i.version)})})]})}export{H as C,U as L,K as T,W as V};
|
|
5
|
+
//# sourceMappingURL=VersionHistory-Bt7WBr6m.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VersionHistory-Bt7WBr6m.js","sources":["../../src/components/common/form/TagInput.tsx","../../src/pages/workflows/yaml-workflow-detail/InputSchemaEditor.tsx","../../src/pages/workflows/yaml-workflow-detail/ConfigurationSection.tsx","../../src/pages/workflows/yaml-workflow-detail/LifecycleSidebar.tsx","../../src/pages/workflows/yaml-workflow-detail/VersionHistory.tsx"],"sourcesContent":["import { useState, useRef, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\n\ninterface TagInputProps {\n tags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n /** Show as compact inline pills (no border wrapper) */\n compact?: boolean;\n}\n\nfunction sanitizeTag(raw: string): string {\n return raw.toLowerCase().replace(/[^a-z0-9-]/g, '').replace(/^-|-$/g, '');\n}\n\nexport function TagInput({ tags, onChange, placeholder = 'Add tag...', compact }: TagInputProps) {\n const [input, setInput] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const addTag = (raw: string) => {\n const tag = sanitizeTag(raw);\n if (tag && !tags.includes(tag)) {\n onChange([...tags, tag]);\n }\n setInput('');\n };\n\n const removeTag = (tag: string) => {\n onChange(tags.filter((t) => t !== tag));\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag(input);\n } else if (e.key === 'Backspace' && !input && tags.length > 0) {\n removeTag(tags[tags.length - 1]);\n }\n };\n\n return (\n <div\n className={\n compact\n ? 'flex flex-wrap items-center gap-1.5'\n : 'flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary cursor-text'\n }\n onClick={() => inputRef.current?.focus()}\n >\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {tag}\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); removeTag(tag); }}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => { if (input.trim()) addTag(input); }}\n placeholder={tags.length === 0 ? placeholder : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { InputFieldMeta } from '../../../api/types';\n\ninterface InputSchemaEditorProps {\n fields: InputFieldMeta[];\n onChange: (fields: InputFieldMeta[]) => void;\n editing: boolean;\n}\n\nconst CLASSIFICATION_STYLES: Record<string, { bg: string; text: string; label: string }> = {\n dynamic: { bg: 'bg-status-success/10', text: 'text-status-success', label: 'Dynamic' },\n fixed: { bg: 'bg-surface-sunken', text: 'text-text-tertiary', label: 'Fixed' },\n wired: { bg: 'bg-blue-500/10', text: 'text-blue-500', label: 'Wired' },\n};\n\nfunction ClassificationBadge({ classification }: { classification: string }) {\n const style = CLASSIFICATION_STYLES[classification] || CLASSIFICATION_STYLES.fixed;\n return (\n <span className={`px-1.5 py-0.5 text-[9px] font-medium rounded ${style.bg} ${style.text}`}>\n {style.label}\n </span>\n );\n}\n\nexport function InputSchemaEditor({ fields, onChange, editing }: InputSchemaEditorProps) {\n const [expandedField, setExpandedField] = useState<string | null>(null);\n\n const updateField = (index: number, updates: Partial<InputFieldMeta>) => {\n const next = fields.map((f, i) => i === index ? { ...f, ...updates } : f);\n onChange(next);\n };\n\n const toggleClassification = (index: number) => {\n const field = fields[index];\n const nextClass = field.classification === 'dynamic' ? 'fixed' : 'dynamic';\n const updates: Partial<InputFieldMeta> = { classification: nextClass };\n if (nextClass === 'fixed' && field.default === undefined) {\n // Set a sensible default when switching to fixed\n updates.default = field.type === 'string' ? '' : field.type === 'number' ? 0 : field.type === 'boolean' ? false : null;\n }\n updateField(index, updates);\n };\n\n const removeField = (index: number) => {\n onChange(fields.filter((_, i) => i !== index));\n };\n\n if (fields.length === 0) {\n return (\n <div className=\"py-4 text-center\">\n <p className=\"text-xs text-text-tertiary\">No input fields detected from the execution.</p>\n </div>\n );\n }\n\n const dynamicFields = fields.filter(f => f.classification === 'dynamic');\n const fixedFields = fields.filter(f => f.classification === 'fixed');\n\n return (\n <div className=\"space-y-4\">\n {/* Summary */}\n <div className=\"flex items-center gap-3 text-[10px] text-text-tertiary\">\n <span>{dynamicFields.length} dynamic (user provides)</span>\n <span>{fixedFields.length} fixed (defaults from execution)</span>\n </div>\n\n {/* Dynamic fields */}\n {dynamicFields.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-status-success/70 mb-2\">\n Dynamic Inputs (required at invocation)\n </p>\n <div className=\"space-y-1\">\n {dynamicFields.map((field) => {\n const index = fields.indexOf(field);\n const isExpanded = expandedField === field.key;\n return (\n <FieldRow\n key={field.key}\n field={field}\n editing={editing}\n expanded={isExpanded}\n onToggleExpand={() => setExpandedField(isExpanded ? null : field.key)}\n onToggleClassification={() => toggleClassification(index)}\n onUpdate={(updates) => updateField(index, updates)}\n onRemove={() => removeField(index)}\n />\n );\n })}\n </div>\n </div>\n )}\n\n {/* Fixed fields */}\n {fixedFields.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Fixed Defaults (from execution)\n </p>\n <div className=\"space-y-1\">\n {fixedFields.map((field) => {\n const index = fields.indexOf(field);\n const isExpanded = expandedField === field.key;\n return (\n <FieldRow\n key={field.key}\n field={field}\n editing={editing}\n expanded={isExpanded}\n onToggleExpand={() => setExpandedField(isExpanded ? null : field.key)}\n onToggleClassification={() => toggleClassification(index)}\n onUpdate={(updates) => updateField(index, updates)}\n onRemove={() => removeField(index)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ── Field Row ────────────────────────────────────────────────────────────────\n\nfunction FieldRow({\n field,\n editing,\n expanded,\n onToggleExpand,\n onToggleClassification,\n onUpdate,\n onRemove,\n}: {\n field: InputFieldMeta;\n editing: boolean;\n expanded: boolean;\n onToggleExpand: () => void;\n onToggleClassification: () => void;\n onUpdate: (updates: Partial<InputFieldMeta>) => void;\n onRemove: () => void;\n}) {\n return (\n <div className=\"border border-surface-border rounded-lg overflow-hidden\">\n <button\n type=\"button\"\n onClick={onToggleExpand}\n className=\"w-full flex items-center gap-2 px-3 py-2 hover:bg-surface-hover/50 transition-colors\"\n >\n <span className=\"font-mono text-xs text-text-primary\">{field.key}</span>\n <span className=\"text-[9px] text-text-tertiary\">{field.type}</span>\n <ClassificationBadge classification={field.classification} />\n {field.default !== undefined && (\n <span className=\"text-[9px] font-mono text-text-tertiary truncate max-w-[120px]\">\n = {JSON.stringify(field.default)}\n </span>\n )}\n <span className=\"text-[9px] text-text-tertiary ml-auto truncate max-w-[150px]\">\n {field.source_tool}\n </span>\n <svg\n className={`w-3 h-3 text-text-tertiary shrink-0 transition-transform ${expanded ? 'rotate-180' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {expanded && (\n <div className=\"px-3 pb-3 pt-1 border-t border-surface-border/50 space-y-2\">\n <p className=\"text-[10px] text-text-tertiary\">{field.description}</p>\n\n {editing && (\n <div className=\"space-y-2\">\n {/* Description */}\n <div>\n <label className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary\">Description</label>\n <input\n type=\"text\"\n value={field.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n className=\"input text-[11px] w-full mt-0.5\"\n />\n </div>\n\n {/* Default value (for fixed fields) */}\n {field.classification === 'fixed' && (\n <div>\n <label className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary\">Default Value</label>\n <input\n type=\"text\"\n value={field.default !== undefined ? (typeof field.default === 'string' ? field.default : JSON.stringify(field.default)) : ''}\n onChange={(e) => {\n let val: unknown = e.target.value;\n if (field.type === 'number') val = Number(val) || 0;\n else if (field.type === 'boolean') val = val === 'true';\n else { try { val = JSON.parse(val as string); } catch { /* keep as string */ } }\n onUpdate({ default: val });\n }}\n className=\"input text-[11px] font-mono w-full mt-0.5\"\n />\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={onToggleClassification}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {field.classification === 'dynamic' ? 'Make fixed (add default)' : 'Make dynamic (require input)'}\n </button>\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-[10px] text-status-error hover:underline ml-auto\"\n >\n Remove\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { CollapsibleSection } from '../../../components/common/layout/CollapsibleSection';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { InputSchemaEditor } from './InputSchemaEditor';\nimport type { InputFieldMeta } from '../../../api/types';\n\nexport function ConfigurationSection({\n wf,\n resolvedInputSchema,\n resolvedOutputSchema,\n resolvedYaml,\n configEditing,\n setConfigEditing,\n canEditConfig,\n yamlDraft,\n setYamlDraft,\n inputSchemaDraft,\n setInputSchemaDraft,\n outputSchemaDraft,\n setOutputSchemaDraft,\n inputFieldMetaDraft,\n setInputFieldMetaDraft,\n onSave,\n onCancel,\n updateMutation,\n yamlTextareaRef,\n isCollapsed,\n onToggle,\n schemasGrid,\n}: {\n wf: any;\n resolvedInputSchema: any;\n resolvedOutputSchema: any;\n resolvedYaml: string | undefined;\n configEditing: boolean;\n setConfigEditing: (v: boolean) => void;\n canEditConfig: boolean;\n yamlDraft: string;\n setYamlDraft: (v: string) => void;\n inputSchemaDraft: string;\n setInputSchemaDraft: (v: string) => void;\n outputSchemaDraft: string;\n setOutputSchemaDraft: (v: string) => void;\n inputFieldMetaDraft: InputFieldMeta[];\n setInputFieldMetaDraft: (v: InputFieldMeta[]) => void;\n onSave: () => void;\n onCancel: () => void;\n updateMutation: any;\n yamlTextareaRef: React.RefObject<HTMLTextAreaElement | null>;\n isCollapsed: boolean;\n onToggle: (key: string) => void;\n /** Render input/output schemas side-by-side in a 2-column grid. */\n schemasGrid?: boolean;\n}) {\n const hasFieldMeta = inputFieldMetaDraft.length > 0;\n const [advancedMode, setAdvancedMode] = useState(false);\n\n return (\n <CollapsibleSection sectionKey=\"config\" title=\"Configuration\" isCollapsed={isCollapsed} onToggle={onToggle} >\n <div className=\"space-y-6\">\n {/* Edit / Save / Cancel controls */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <a\n href=\"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[10px] text-accent hover:underline flex items-center gap-1\"\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n YAML Guide\n </a>\n {configEditing && hasFieldMeta && (\n <button\n type=\"button\"\n onClick={() => setAdvancedMode(!advancedMode)}\n className=\"text-[10px] text-text-tertiary hover:text-text-primary\"\n >\n {advancedMode ? 'Visual editor' : 'Advanced (JSON)'}\n </button>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {canEditConfig && !configEditing && (\n <button\n onClick={() => { setConfigEditing(true); setTimeout(() => yamlTextareaRef.current?.focus(), 50); }}\n className=\"text-[10px] text-accent hover:underline\"\n >\n Edit\n </button>\n )}\n {configEditing && (\n <>\n <button onClick={onCancel} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Cancel\n </button>\n <button\n onClick={onSave}\n disabled={updateMutation.isPending || (\n yamlDraft === wf.yaml_content\n && inputSchemaDraft === JSON.stringify(wf.input_schema, null, 2)\n && outputSchemaDraft === JSON.stringify(wf.output_schema, null, 2)\n )}\n className=\"text-[10px] text-accent hover:underline disabled:opacity-40 disabled:no-underline\"\n >\n {updateMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {updateMutation.error && (\n <p className=\"text-xs text-status-error\">{updateMutation.error.message}</p>\n )}\n\n {/* Input + Output Schemas */}\n <div className={schemasGrid ? 'grid grid-cols-1 lg:grid-cols-2 gap-6' : 'space-y-6'}>\n {/* Input Schema — visual editor or raw JSON */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Input Schema</h4>\n\n {configEditing && hasFieldMeta && !advancedMode ? (\n <InputSchemaEditor\n fields={inputFieldMetaDraft}\n onChange={setInputFieldMetaDraft}\n editing={configEditing}\n />\n ) : configEditing ? (\n <textarea\n value={inputSchemaDraft}\n onChange={(e) => setInputSchemaDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={Math.max(inputSchemaDraft.split('\\n').length + 1, 6)}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : hasFieldMeta ? (\n <InputSchemaEditor\n fields={inputFieldMetaDraft}\n onChange={() => {}}\n editing={false}\n />\n ) : (\n <JsonViewer data={resolvedInputSchema ?? {}} label=\"\" />\n )}\n </div>\n\n {/* Output Schema */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">Output Schema</h4>\n {configEditing ? (\n <textarea\n value={outputSchemaDraft}\n onChange={(e) => setOutputSchemaDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={Math.max(outputSchemaDraft.split('\\n').length + 1, 6)}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : (\n <JsonViewer data={resolvedOutputSchema ?? {}} label=\"\" />\n )}\n </div>\n </div>\n\n {/* YAML Definition */}\n <div>\n <h4 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">YAML Definition</h4>\n {configEditing ? (\n <textarea\n ref={yamlTextareaRef}\n value={yamlDraft}\n onChange={(e) => setYamlDraft(e.target.value)}\n className=\"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden\"\n rows={yamlDraft.split('\\n').length + 1}\n style={{ fieldSizing: 'content' } as React.CSSProperties}\n spellCheck={false}\n />\n ) : (\n <pre className=\"p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-secondary overflow-x-auto whitespace-pre\">\n {resolvedYaml ?? wf.yaml_content}\n </pre>\n )}\n </div>\n </div>\n </CollapsibleSection>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\n\nconst LIFECYCLE_STEPS = ['draft', 'active', 'archived'] as const;\nconst LIFECYCLE_LABELS: Record<string, string> = {\n draft: 'Draft',\n active: 'Active',\n archived: 'Archived',\n};\n\nconst LIFECYCLE_COLORS: Record<string, { filled: string; line: string }> = {\n draft: { filled: 'bg-status-draft border-status-draft', line: 'bg-status-draft/30' },\n active: { filled: 'bg-status-success border-status-success', line: 'bg-status-success/30' },\n archived: { filled: 'bg-text-tertiary border-text-tertiary', line: 'bg-text-tertiary/30' },\n};\n\nexport function LifecycleSidebar({\n status,\n sourceWorkflowId,\n contentVersion,\n deployedContentVersion,\n onDeploy,\n onArchive,\n onDelete,\n onRegenerate,\n isPending,\n error,\n}: {\n status: string;\n sourceWorkflowId?: string | null;\n contentVersion?: number;\n deployedContentVersion?: number | null;\n onDeploy: () => void;\n onArchive: () => void;\n onDelete: () => void;\n onRegenerate: () => void;\n isPending: boolean;\n error?: string;\n}) {\n // Treat 'deployed' as 'active' since deploy now auto-activates\n const effectiveStatus = status === 'deployed' ? 'active' : status;\n const currentIdx = LIFECYCLE_STEPS.indexOf(effectiveStatus as any);\n const needsRedeploy = contentVersion != null && contentVersion > (deployedContentVersion ?? 0);\n\n return (\n <div>\n <SectionLabel className=\"mb-4\">Lifecycle</SectionLabel>\n\n {/* Out-of-sync warning */}\n {needsRedeploy && effectiveStatus !== 'draft' && effectiveStatus !== 'archived' && (\n <div className=\"mb-4 px-3 py-2 rounded-md bg-status-pending/10 border border-status-pending/30\">\n <p className=\"text-[10px] font-semibold text-status-pending mb-1\">YAML modified</p>\n <p className=\"text-[10px] text-text-secondary leading-relaxed\">\n v{contentVersion} edited since deploy (v{deployedContentVersion}). Redeploy to apply changes.\n </p>\n <button onClick={onDeploy} disabled={isPending} className=\"mt-1.5 text-[10px] font-medium text-status-pending hover:underline\">\n {isPending ? 'Deploying...' : 'Deploy now'}\n </button>\n </div>\n )}\n\n {/* Step sequence */}\n <div className=\"space-y-0\">\n {LIFECYCLE_STEPS.map((step, idx) => {\n const isCurrent = step === effectiveStatus;\n const isDone = idx < currentIdx;\n const isFuture = idx > currentIdx;\n const isLast = idx === LIFECYCLE_STEPS.length - 1;\n const colors = LIFECYCLE_COLORS[step];\n\n return (\n <div key={step} className=\"flex items-stretch gap-3\">\n {/* Vertical track */}\n <div className=\"flex flex-col items-center w-5 shrink-0\">\n <span\n className={`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${\n isCurrent || isDone\n ? colors.filled\n : 'bg-surface-sunken border-surface-border'\n }`}\n />\n {!isLast && (\n <span className={`w-px flex-1 ${isDone ? colors.line : 'bg-surface-border'}`} />\n )}\n </div>\n\n {/* Label + action */}\n <div className={`pb-5 ${isLast ? 'pb-0' : ''}`}>\n <p className={`text-xs font-medium ${isCurrent ? 'text-text-primary' : isFuture ? 'text-text-tertiary' : 'text-text-secondary'}`}>\n {LIFECYCLE_LABELS[step]}\n </p>\n {/* Show the next-step action */}\n {isCurrent && step === 'draft' && (\n <div className=\"mt-2 flex items-center gap-2\">\n <button onClick={onDeploy} disabled={isPending} className=\"btn-primary text-[11px] px-3 py-1\">\n {isPending ? 'Deploying...' : 'Deploy'}\n </button>\n {sourceWorkflowId && (\n <button onClick={onRegenerate} disabled={isPending} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Regenerate\n </button>\n )}\n </div>\n )}\n {isCurrent && step === 'active' && (\n <div className=\"mt-2 flex items-center gap-2\">\n <button onClick={onArchive} disabled={isPending} className=\"text-[11px] text-text-tertiary hover:text-status-error\">\n Archive\n </button>\n {sourceWorkflowId && (\n <button onClick={onRegenerate} disabled={isPending} className=\"text-[10px] text-text-tertiary hover:text-text-primary\">\n Regenerate\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Version info */}\n {contentVersion != null && (\n <div className=\"mt-4 pt-4 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Content Version</p>\n <p className=\"text-xs font-mono text-text-primary\">\n v{contentVersion}\n {deployedContentVersion != null && (\n <span className=\"text-text-tertiary ml-1.5\">(deployed: v{deployedContentVersion})</span>\n )}\n </p>\n </div>\n )}\n\n {/* Delete -- only for draft/archived */}\n {(status === 'draft' || status === 'archived') && (\n <div className=\"mt-4 pt-4 border-t border-surface-border\">\n <button onClick={onDelete} disabled={isPending} className=\"text-[11px] text-status-error hover:underline\">\n Delete workflow tool\n </button>\n </div>\n )}\n\n {error && <p className=\"mt-3 text-[11px] text-status-error\">{error}</p>}\n </div>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\n\nexport function VersionHistory({\n versionsData,\n searchParams,\n setSearchParams,\n currentVersion,\n viewingVersion,\n}: {\n versionsData: any;\n searchParams: URLSearchParams;\n setSearchParams: (v: URLSearchParams) => void;\n currentVersion: number;\n viewingVersion: number | null;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-3\">Version History</SectionLabel>\n <div className=\"space-y-1\">\n {versionsData.versions.map((v: any) => {\n const isCurrent = v.version === currentVersion;\n const isViewing = viewingVersion === v.version;\n return (\n <button\n key={v.version}\n type=\"button\"\n onClick={() => {\n const next = new URLSearchParams(searchParams);\n if (isCurrent) next.delete('version');\n else next.set('version', String(v.version));\n setSearchParams(next);\n }}\n className={`w-full text-left px-2 py-1.5 rounded text-xs transition-colors ${\n isViewing\n ? 'bg-accent/10 text-accent'\n : 'text-text-secondary hover:bg-surface-sunken hover:text-text-primary'\n }`}\n >\n <span className=\"font-mono font-medium\">v{v.version}</span>\n {isCurrent && <span className=\"text-text-tertiary ml-1\">(current)</span>}\n {v.change_summary && (\n <p className=\"text-[10px] text-text-tertiary truncate mt-0.5\">{v.change_summary}</p>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["sanitizeTag","raw","TagInput","tags","onChange","placeholder","compact","input","setInput","useState","inputRef","useRef","addTag","tag","removeTag","t","handleKeyDown","e","jsxs","_a","jsx","X","CLASSIFICATION_STYLES","ClassificationBadge","classification","style","InputSchemaEditor","fields","editing","expandedField","setExpandedField","updateField","index","updates","next","f","i","toggleClassification","field","nextClass","removeField","_","dynamicFields","fixedFields","isExpanded","FieldRow","expanded","onToggleExpand","onToggleClassification","onUpdate","onRemove","val","ConfigurationSection","wf","resolvedInputSchema","resolvedOutputSchema","resolvedYaml","configEditing","setConfigEditing","canEditConfig","yamlDraft","setYamlDraft","inputSchemaDraft","setInputSchemaDraft","outputSchemaDraft","setOutputSchemaDraft","inputFieldMetaDraft","setInputFieldMetaDraft","onSave","onCancel","updateMutation","yamlTextareaRef","isCollapsed","onToggle","schemasGrid","hasFieldMeta","advancedMode","setAdvancedMode","CollapsibleSection","Fragment","JsonViewer","LIFECYCLE_STEPS","LIFECYCLE_LABELS","LIFECYCLE_COLORS","LifecycleSidebar","status","sourceWorkflowId","contentVersion","deployedContentVersion","onDeploy","onArchive","onDelete","onRegenerate","isPending","error","effectiveStatus","currentIdx","needsRedeploy","SectionLabel","step","idx","isCurrent","isDone","isFuture","isLast","colors","VersionHistory","versionsData","searchParams","setSearchParams","currentVersion","viewingVersion","v","isViewing"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as g,j as e}from"./vendor-query-B2UbickB.js";import{a as W,g as I}from"./workflows-Cc4VHcrp.js";import{b as S}from"./useNatsEvents-Xr43X1fG.js";import{u as $,E as L}from"./EventTable-B01oJf6Y.js";import{b as M,e as P}from"./tasks-tRqClPns.js";import{J as N,b as R}from"./index-D8VH6K8B.js";import{P as A}from"./PageHeader-CpWFly5S.js";import{C as k}from"./CollapsibleSection-Cxk4wvjT.js";import{S as T}from"./StatusBadge-TlC4jiig.js";import{b as _,f as z}from"./format-gXZXQ-HJ.js";import{L as v,d as B,u as H,b as K}from"./vendor-react-Cw8Gy8NJ.js";import{S as O}from"./SwimlaneTimeline-7SiwATsZ.js";import"./FilterBar-Ck4K4rzu.js";import"./vendor-icons-ZTAKVwGc.js";function d({label:t,value:r,mono:a,truncate:s}){return e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:t}),e.jsx("p",{className:`text-xs text-text-primary ${a?"font-mono":""} ${s?"truncate":""}`,title:s?r:void 0,children:r})]})}function Q(t){const r=t.lastIndexOf("-");return r<=0?{taskQueue:t,workflowType:t}:{taskQueue:t.substring(0,r),workflowType:t.substring(r+1)}}function D({execution:t,task:r,escalations:a,hasToolCalls:s,onAction:m}){const[l,u]=g.useState(!1),n=g.useRef(null);g.useEffect(()=>{if(!l)return;const i=j=>{n.current&&!n.current.contains(j.target)&&u(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[l]);const x=r&&r.workflow_id===t.workflow_id?r.parent_workflow_id:null,p=t.status!=="completed"&&t.status!=="failed",{taskQueue:f,workflowType:h}=Q(t.workflow_type);return e.jsxs("div",{className:"px-6 py-6 mb-6",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-5",children:[e.jsx("h2",{className:"text-lg font-medium text-text-primary font-mono truncate flex-1",children:t.workflow_id}),e.jsx(T,{status:t.status}),m&&e.jsxs("div",{className:"relative",ref:n,children:[e.jsx("button",{onClick:()=>u(!l),className:"btn-primary text-xs",children:"Actions"}),l&&e.jsxs("div",{className:"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10",children:[e.jsx("button",{onClick:()=>{m("restart"),u(!1)},className:"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover",children:"Restart Workflow"}),p&&e.jsx("button",{onClick:()=>{m("terminate"),u(!1)},className:"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover",children:"Terminate"}),s&&e.jsx(v,{to:`/mcp/queries/${t.workflow_id}?step=3`,className:"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover",onClick:()=>u(!1),children:"Compile into Pipeline"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8",children:[e.jsx(d,{label:"Workflow Type",value:h,mono:!0}),e.jsx(d,{label:"Task Queue",value:f,mono:!0}),e.jsx(d,{label:"Start Time",value:_(t.start_time)}),e.jsx(d,{label:"End Time",value:_(t.close_time)}),e.jsx(d,{label:"Duration",value:z(t.duration_ms),mono:!0}),e.jsx(d,{label:"History Size",value:`${t.summary.total_events} events`}),e.jsx(d,{label:"Activities",value:`${t.summary.activities.completed} / ${t.summary.activities.total}`}),e.jsx(d,{label:"Run ID",value:t.workflow_id,mono:!0,truncate:!0})]}),(x||r||a&&a.length>0)&&e.jsxs("div",{className:"mt-5 pt-4 border-t border-surface-border space-y-3",children:[x&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0",children:"Parent"}),e.jsx(v,{to:`/workflows/executions/${x}`,className:"text-xs font-mono text-accent hover:underline truncate",title:x,children:x})]}),!1,a&&a.length>0&&e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5",children:a.length===1?"Escalation":"Escalations"}),e.jsx("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:a.map(i=>e.jsxs(v,{to:`/escalations/detail/${i.id}`,className:"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline",children:[e.jsx("span",{children:i.type}),e.jsx(T,{status:i.status})]},i.id))})]})]})]})}function J(t){var s;const r=t.events.find(m=>m.event_type==="workflow_execution_started"),a=(s=r==null?void 0:r.attributes)==null?void 0:s.input;return a&&typeof a=="object"?a:null}function V({execution:t}){const r=J(t),a=t.result,s=(a==null?void 0:a.data)??a??null;return!r&&!s?null:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[r!==null&&e.jsx("div",{children:e.jsx(N,{data:r,label:"Input Envelope"})}),s!==null&&e.jsx("div",{children:e.jsx(N,{data:s,label:"Result"})})]})}function le(){const{workflowId:t}=B(),{pathname:r}=H();S(t);const a=r.startsWith("/workflows/durable/")?"Durable Execution":"Certified Execution",{data:s,isLoading:m,error:l}=W(t),{data:u}=M(t),{data:n}=P(t),{data:w}=R(t),x=K(),p=I(),{isCollapsed:f,toggle:h}=$("workflow-execution"),i=c=>{var o;if(c==="terminate")confirm("Are you sure you want to terminate this workflow?")&&p.mutate(t);else if(c==="restart"&&s){const E=s.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/,""),b=s.events.find(C=>C.event_type==="workflow_execution_started"),y=(o=b==null?void 0:b.attributes)==null?void 0:o.input;y&&sessionStorage.setItem("lt:invoke:prefill",JSON.stringify(y)),x(`/workflows/start?type=${encodeURIComponent(E)}&mode=now`)}};if(m)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-64"}),e.jsx("div",{className:"h-60 bg-surface-sunken rounded"})]});if(l||!s){const c=(l==null?void 0:l.message)??"",o=c.includes("expired")||c.includes("no longer available");return e.jsxs("div",{children:[e.jsx(v,{to:"/workflows/executions",className:"text-xs text-text-tertiary hover:text-text-primary",children:"← Workflows"}),e.jsxs("div",{className:"mt-4 text-center py-8",children:[e.jsx("p",{className:"text-sm text-text-primary mb-1",children:o?"Execution data is no longer available":l?"Unable to load execution":"Execution not found"}),e.jsx("p",{className:"text-xs text-text-tertiary",children:o?"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.":c||"The workflow could not be resolved."})]})]})}const j=s.status==="completed"&&s.events.some(c=>{if(c.event_type!=="activity_task_completed")return!1;const o=c.attributes.activity_type;return o==="callDbTool"||o==="callVisionTool"||o==="callMcpTool"||(o==null?void 0:o.startsWith("mcp_"))});return e.jsxs("div",{children:[e.jsx(A,{title:a,actions:j?e.jsxs(v,{to:`/mcp/queries/${t}?step=3`,className:"group flex items-center gap-2 text-left",children:[e.jsx("span",{className:"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0",children:e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})}),e.jsxs("span",{className:"text-xs text-text-secondary group-hover:text-text-primary transition-colors",children:["This execution used MCP tools."," ",e.jsx("span",{className:"text-accent group-hover:underline",children:"Compile into Pipeline"})]})]}):void 0}),e.jsx(D,{execution:s,task:u,childTasks:n==null?void 0:n.tasks,escalations:w==null?void 0:w.escalations,hasToolCalls:j,onAction:i}),p.error&&e.jsx("div",{className:"py-3 mb-6",children:e.jsxs("p",{className:"text-xs text-status-error",children:["Terminate failed: ",p.error.message]})}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(k,{title:"Details",sectionKey:"details",isCollapsed:f("details"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(V,{execution:s})}),e.jsx(k,{title:"Execution Timeline",sectionKey:"timeline",isCollapsed:f("timeline"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(O,{events:s.events,childTasks:n==null?void 0:n.tasks})}),e.jsx(k,{title:"Events",sectionKey:"events",isCollapsed:f("events"),onToggle:h,contentClassName:"mt-4 ml-9",children:e.jsx(L,{events:s.events,childTasks:n==null?void 0:n.tasks})})]})]})}export{le as WorkflowExecutionPage};
|
|
2
|
+
//# sourceMappingURL=WorkflowExecutionPage-DjtAQ3hy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowExecutionPage-DjtAQ3hy.js","sources":["../../src/pages/workflows/workflow-execution/ExecutionHeader.tsx","../../src/pages/workflows/workflow-execution/ExecutionInputResult.tsx","../../src/pages/workflows/WorkflowExecutionPage.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecution, LTTaskRecord, LTEscalationRecord } from '../../../api/types';\nimport { formatDuration, formatDateTime } from './utils';\n\nfunction MetadataField({\n label,\n value,\n mono,\n truncate,\n}: {\n label: string;\n value: string;\n mono?: boolean;\n truncate?: boolean;\n}) {\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {label}\n </p>\n <p\n className={`text-xs text-text-primary ${mono ? 'font-mono' : ''} ${truncate ? 'truncate' : ''}`}\n title={truncate ? value : undefined}\n >\n {value}\n </p>\n </div>\n );\n}\n\n/**\n * Split a HotMesh compound entity key (taskQueue-workflowName) on the last '-'.\n * Workflow names are camelCase, so the last segment is always the workflow type.\n */\nfunction splitEntityKey(compound: string): { taskQueue: string; workflowType: string } {\n const lastDash = compound.lastIndexOf('-');\n if (lastDash <= 0) return { taskQueue: compound, workflowType: compound };\n return {\n taskQueue: compound.substring(0, lastDash),\n workflowType: compound.substring(lastDash + 1),\n };\n}\n\ninterface ExecutionHeaderProps {\n execution: WorkflowExecution;\n task?: LTTaskRecord | null;\n childTasks?: LTTaskRecord[];\n escalations?: LTEscalationRecord[];\n hasToolCalls?: boolean;\n onAction?: (action: 'restart' | 'terminate') => void;\n}\n\nexport function ExecutionHeader({ execution, task, escalations, hasToolCalls, onAction }: ExecutionHeaderProps) {\n const [actionsOpen, setActionsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n if (!actionsOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\n setActionsOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [actionsOpen]);\n\n // Determine parent relationship\n const isLeaf = task && task.workflow_id === execution.workflow_id;\n const parentWorkflowId = isLeaf ? task.parent_workflow_id : null;\n\n const isRunning = execution.status !== 'completed' && execution.status !== 'failed';\n\n // Split compound HotMesh keys into separate task queue / workflow type\n const { taskQueue, workflowType } = splitEntityKey(execution.workflow_type);\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n <div className=\"flex items-center gap-4 mb-5\">\n <h2 className=\"text-lg font-medium text-text-primary font-mono truncate flex-1\">\n {execution.workflow_id}\n </h2>\n <StatusBadge status={execution.status} />\n {onAction && (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={() => setActionsOpen(!actionsOpen)}\n className=\"btn-primary text-xs\"\n >\n Actions\n </button>\n {actionsOpen && (\n <div className=\"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10\">\n <button\n onClick={() => {\n onAction('restart');\n setActionsOpen(false);\n }}\n className=\"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover\"\n >\n Restart Workflow\n </button>\n {isRunning && (\n <button\n onClick={() => {\n onAction('terminate');\n setActionsOpen(false);\n }}\n className=\"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover\"\n >\n Terminate\n </button>\n )}\n {hasToolCalls && (\n <Link\n to={`/mcp/queries/${execution.workflow_id}?step=3`}\n className=\"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover\"\n onClick={() => setActionsOpen(false)}\n >\n Compile into Pipeline\n </Link>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8\">\n <MetadataField label=\"Workflow Type\" value={workflowType} mono />\n <MetadataField label=\"Task Queue\" value={taskQueue} mono />\n <MetadataField label=\"Start Time\" value={formatDateTime(execution.start_time)} />\n <MetadataField label=\"End Time\" value={formatDateTime(execution.close_time)} />\n <MetadataField\n label=\"Duration\"\n value={formatDuration(execution.duration_ms)}\n mono\n />\n <MetadataField\n label=\"History Size\"\n value={`${execution.summary.total_events} events`}\n />\n <MetadataField\n label=\"Activities\"\n value={`${execution.summary.activities.completed} / ${execution.summary.activities.total}`}\n />\n <MetadataField\n label=\"Run ID\"\n value={execution.workflow_id}\n mono\n truncate\n />\n </div>\n\n {/* Related links */}\n {(parentWorkflowId || task || (escalations && escalations.length > 0)) && (\n <div className=\"mt-5 pt-4 border-t border-surface-border space-y-3\">\n {/* Parent navigation */}\n {parentWorkflowId && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Parent\n </span>\n <Link\n to={`/workflows/executions/${parentWorkflowId}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n title={parentWorkflowId}\n >\n {parentWorkflowId}\n </Link>\n </div>\n )}\n\n {/* Process link — deep-links to process list filtered by this workflow */}\n {false && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Process\n </span>\n <Link\n to={`/processes/all?search=${encodeURIComponent(execution.workflow_id)}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n >\n Find in Processes\n </Link>\n </div>\n )}\n\n {/* Escalation links */}\n {escalations && escalations.length > 0 && (\n <div className=\"flex items-start gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5\">\n {escalations.length === 1 ? 'Escalation' : 'Escalations'}\n </span>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {escalations.map((esc) => (\n <Link\n key={esc.id}\n to={`/escalations/detail/${esc.id}`}\n className=\"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline\"\n >\n <span>{esc.type}</span>\n <StatusBadge status={esc.status} />\n </Link>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport type { WorkflowExecution } from '../../../api/types';\n\ninterface ExecutionInputResultProps {\n execution: WorkflowExecution;\n}\n\n/**\n * Extract the workflow input envelope from the workflow_execution_started event.\n * HotMesh 0.13.0+ includes the actual trigger arguments (the envelope passed\n * to startWorkflow) in the start event's `input` attribute.\n */\nfunction extractInput(execution: WorkflowExecution): Record<string, unknown> | null {\n const startEvent = execution.events.find(\n (e) => e.event_type === 'workflow_execution_started',\n );\n const input = (startEvent?.attributes as any)?.input;\n return input && typeof input === 'object' ? input : null;\n}\n\nexport function ExecutionInputResult({ execution }: ExecutionInputResultProps) {\n const input = extractInput(execution);\n\n // Result: unwrap the workflow return — the `data` field is what LT users care about\n const rawResult = execution.result as Record<string, unknown> | null | undefined;\n const result = rawResult?.data ?? rawResult ?? null;\n\n if (!input && !result) return null;\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n {input !== null && (\n <div>\n <JsonViewer data={input} label=\"Input Envelope\" />\n </div>\n )}\n {result !== null && (\n <div>\n <JsonViewer data={result} label=\"Result\" />\n </div>\n )}\n </div>\n );\n}\n","import { useParams, useLocation, useNavigate, Link } from 'react-router-dom';\nimport { useWorkflowExecution, useTerminateWorkflow } from '../../api/workflows';\nimport { useWorkflowDetailEvents } from '../../hooks/useNatsEvents';\nimport { useCollapsedSections } from '../../hooks/useCollapsedSections';\nimport { useTaskByWorkflowId, useChildTasks } from '../../api/tasks';\nimport { useEscalationsByWorkflowId } from '../../api/escalations';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { CollapsibleSection } from '../../components/common/layout/CollapsibleSection';\n\nimport { ExecutionHeader } from './workflow-execution/ExecutionHeader';\nimport { ExecutionInputResult } from './workflow-execution/ExecutionInputResult';\nimport { SwimlaneTimeline } from './workflow-execution/SwimlaneTimeline';\nimport { EventTable } from './workflow-execution/EventTable';\nexport function WorkflowExecutionPage() {\n const { workflowId } = useParams<{ workflowId: string }>();\n const { pathname } = useLocation();\n useWorkflowDetailEvents(workflowId);\n\n const executionTitle = pathname.startsWith('/workflows/durable/')\n ? 'Durable Execution'\n : 'Certified Execution';\n const { data: execution, isLoading, error } = useWorkflowExecution(workflowId!);\n const { data: task } = useTaskByWorkflowId(workflowId!);\n const { data: childTasksData } = useChildTasks(workflowId!);\n const { data: escalationsData } = useEscalationsByWorkflowId(workflowId);\n const navigate = useNavigate();\n const terminateMutation = useTerminateWorkflow();\n const { isCollapsed, toggle } = useCollapsedSections('workflow-execution');\n\n const handleAction = (action: 'restart' | 'terminate') => {\n if (action === 'terminate') {\n if (confirm('Are you sure you want to terminate this workflow?')) {\n terminateMutation.mutate(workflowId!);\n }\n } else if (action === 'restart' && execution) {\n // Extract entity from workflow_id (format: {entity}-{guid})\n const entity = execution.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/, '');\n // Extract original input from the started event\n const startEvent = execution.events.find((e) => e.event_type === 'workflow_execution_started');\n const input = (startEvent?.attributes as any)?.input;\n if (input) {\n sessionStorage.setItem('lt:invoke:prefill', JSON.stringify(input));\n }\n navigate(`/workflows/start?type=${encodeURIComponent(entity)}&mode=now`);\n }\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (error || !execution) {\n const msg = (error as Error)?.message ?? '';\n const isExpired = msg.includes('expired') || msg.includes('no longer available');\n\n return (\n <div>\n <Link to=\"/workflows/executions\" className=\"text-xs text-text-tertiary hover:text-text-primary\">\n ← Workflows\n </Link>\n <div className=\"mt-4 text-center py-8\">\n <p className=\"text-sm text-text-primary mb-1\">\n {isExpired\n ? 'Execution data is no longer available'\n : error\n ? 'Unable to load execution'\n : 'Execution not found'}\n </p>\n <p className=\"text-xs text-text-tertiary\">\n {isExpired\n ? \"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.\"\n : msg || 'The workflow could not be resolved.'}\n </p>\n </div>\n </div>\n );\n }\n\n const hasToolCalls = execution.status === 'completed' && execution.events.some(\n (e) => {\n if (e.event_type !== 'activity_task_completed') return false;\n const actType = (e.attributes as any).activity_type;\n return actType === 'callDbTool' || actType === 'callVisionTool' || actType === 'callMcpTool' || actType?.startsWith('mcp_');\n },\n );\n\n return (\n <div>\n <PageHeader\n title={executionTitle}\n actions={\n hasToolCalls ? (\n <Link\n to={`/mcp/queries/${workflowId}?step=3`}\n className=\"group flex items-center gap-2 text-left\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n <span className=\"text-xs text-text-secondary group-hover:text-text-primary transition-colors\">\n This execution used MCP tools.{' '}\n <span className=\"text-accent group-hover:underline\">Compile into Pipeline</span>\n </span>\n </Link>\n ) : undefined\n }\n />\n\n <ExecutionHeader\n execution={execution}\n task={task}\n childTasks={childTasksData?.tasks}\n escalations={escalationsData?.escalations}\n hasToolCalls={hasToolCalls}\n onAction={handleAction}\n />\n\n {terminateMutation.error && (\n <div className=\"py-3 mb-6\">\n <p className=\"text-xs text-status-error\">\n Terminate failed: {terminateMutation.error.message}\n </p>\n </div>\n )}\n\n\n <div className=\"space-y-6\">\n <CollapsibleSection title=\"Details\" sectionKey=\"details\" isCollapsed={isCollapsed('details')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <ExecutionInputResult execution={execution} />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Execution Timeline\" sectionKey=\"timeline\" isCollapsed={isCollapsed('timeline')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <SwimlaneTimeline\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Events\" sectionKey=\"events\" isCollapsed={isCollapsed('events')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <EventTable\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n </div>\n </div>\n );\n}\n"],"names":["MetadataField","label","value","mono","truncate","jsx","splitEntityKey","compound","lastDash","ExecutionHeader","execution","task","escalations","hasToolCalls","onAction","actionsOpen","setActionsOpen","useState","dropdownRef","useRef","useEffect","handler","e","parentWorkflowId","isRunning","taskQueue","workflowType","jsxs","StatusBadge","Link","formatDateTime","formatDuration","esc","extractInput","startEvent","input","_a","ExecutionInputResult","rawResult","result","JsonViewer","WorkflowExecutionPage","workflowId","useParams","pathname","useLocation","useWorkflowDetailEvents","executionTitle","isLoading","error","useWorkflowExecution","useTaskByWorkflowId","childTasksData","useChildTasks","escalationsData","useEscalationsByWorkflowId","navigate","useNavigate","terminateMutation","useTerminateWorkflow","isCollapsed","toggle","useCollapsedSections","handleAction","action","entity","msg","isExpired","actType","PageHeader","CollapsibleSection","SwimlaneTimeline","EventTable"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as o}from"./vendor-query-B2UbickB.js";import{q as r,d as l}from"./vendor-icons-ZTAKVwGc.js";function i({type:n,size:s="sm",certified:t}){const e=s==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",c=s==="md"?"w-3 h-3":"w-2.5 h-2.5",a=t?r:l,x=t?"text-status-success":"text-accent/75";return o.jsxs("span",{className:`inline-flex items-center ${e} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`,children:[o.jsx(a,{className:`${c} shrink-0 ${x}`}),n]})}export{i as W};
|
|
2
|
+
//# sourceMappingURL=WorkflowPill-CCDSVaQj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowPill-CCDSVaQj.js","sources":["../../src/components/common/display/WorkflowPill.tsx"],"sourcesContent":["import { Workflow, ShieldCheck } from 'lucide-react';\n\ninterface WorkflowPillProps {\n type: string;\n size?: 'sm' | 'md';\n certified?: boolean;\n}\n\nexport function WorkflowPill({ type, size = 'sm', certified }: WorkflowPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-[11px] gap-1.5'\n : 'px-2 py-0.5 text-[10px] gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n const Icon = certified ? ShieldCheck : Workflow;\n const iconColor = certified ? 'text-status-success' : 'text-accent/75';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono bg-accent/[0.06] text-text-secondary rounded-lg`}>\n <Icon className={`${iconClass} shrink-0 ${iconColor}`} />\n {type}\n </span>\n );\n}\n"],"names":["WorkflowPill","type","size","certified","sizeClass","iconClass","Icon","ShieldCheck","Workflow","iconColor","jsxs","jsx"],"mappings":"qGAQO,SAASA,EAAa,CAAE,KAAAC,EAAM,KAAAC,EAAO,KAAM,UAAAC,GAAgC,CAChF,MAAMC,EAAYF,IAAS,KACvB,oCACA,gCACEG,EAAYH,IAAS,KAAO,UAAY,cAExCI,EAAOH,EAAYI,EAAcC,EACjCC,EAAYN,EAAY,sBAAwB,iBAEtD,OACEO,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BN,CAAS,6DACpD,SAAA,CAAAO,MAACL,GAAK,UAAW,GAAGD,CAAS,aAAaI,CAAS,GAAI,EACtDR,CAAA,EACH,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as p,j as s}from"./vendor-query-B2UbickB.js";import{T as b}from"./TimestampCell-DoWMKg6w.js";import{u as N,b as F}from"./workflows-Cc4VHcrp.js";import{f as P}from"./index-D8VH6K8B.js";import{a as R}from"./useNatsEvents-Xr43X1fG.js";import{u as $}from"./useFilterParams-BaXUAkYK.js";import{D as A}from"./DataTable-BDn1WBHS.js";import{W}from"./WorkflowPill-CCDSVaQj.js";import{P as z}from"./PageHeader-CpWFly5S.js";import{F as D,b as x}from"./FilterBar-Ck4K4rzu.js";import{S as E}from"./StickyPagination-F9FZsRy9.js";import{R as I,a as y}from"./RowActions-Dg-Fsm5O.js";import{F as M,S as U}from"./vendor-icons-ZTAKVwGc.js";import{b as L}from"./vendor-react-Cw8Gy8NJ.js";import"./TimeAgo-UPG6DoH8.js";import"./format-gXZXQ-HJ.js";import"./EmptyState-2CmV-IaS.js";const O={running:"in_progress",completed:"completed",failed:"failed"},B={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},G={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function H(d,l,m,a,o){return[{key:"workflow_id",label:"Workflow ID / Type",render:e=>{const i=B[O[e.status]??e.status]??"bg-status-pending",f=e.status==="running"?" animate-pulse":"";return s.jsxs("div",{className:"flex items-start gap-2 min-w-0",children:[s.jsx("span",{className:`w-[9px] h-[9px] shrink-0 rounded-full mt-1 ${i}${f}`,title:e.status}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"font-mono text-xs text-text-primary truncate block",children:e.workflow_id}),s.jsx("div",{className:"mt-0.5",children:s.jsx(W,{type:e.entity,certified:o.has(e.entity)})})]})]})}},{key:"created_at",label:"Created",render:e=>s.jsx(b,{date:e.created_at}),className:"w-40",sortable:!0},{key:"updated_at",label:"Updated",render:e=>s.jsx(b,{date:e.updated_at}),className:"w-40",sortable:!0},{key:"actions",label:"",render:e=>s.jsxs(I,{children:[s.jsx(y,{icon:M,title:`Filter by ${e.entity}`,onClick:()=>d(e.entity)}),s.jsx("button",{onClick:i=>{i.stopPropagation(),l(e.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${e.status}`,children:s.jsx("svg",{className:`w-[18px] h-[18px] ${G[e.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"currentColor",children:s.jsx("circle",{cx:"12",cy:"12",r:"6"})})}),m&&s.jsx(y,{icon:U,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.entity)}`)})]}),className:"w-24 text-right"}]}function ce({tier:d="all"}){R();const l=L(),{isSuperAdmin:m}=P(),{filters:a,setFilter:o,pagination:e,sort:i,setSort:f}=$({filters:{search:"",entity:"",status:"",tier:d}}),n=a.tier||"all",h=n==="certified"?"true":n==="durable"?"false":void 0,{data:c}=N(),w=p.useMemo(()=>new Set((c??[]).map(t=>t.workflow_type)),[c]),v=H(t=>o("entity",t),t=>o("status",t),m,l,w),[u,k]=p.useState(a.search);p.useEffect(()=>{if(u===a.search)return;const t=setTimeout(()=>o("search",u),300);return()=>clearTimeout(t)},[u,o,a.search]);const{data:r,isLoading:j}=F({limit:e.pageSize,offset:e.offset,entity:a.entity||void 0,search:a.search||void 0,status:a.status||void 0,sort_by:i.sort_by||void 0,order:i.sort_by?i.order:void 0,registered:h}),g=(r==null?void 0:r.total)??0,S=(r==null?void 0:r.jobs)??[],C=p.useMemo(()=>[...new Set((c??[]).map(t=>t.workflow_type))].sort(),[c]),_="Durable Executions",T=n==="certified"?"No certified workflow executions found":n==="durable"?"No durable workflow executions found":"No workflow executions found";return s.jsxs("div",{children:[s.jsx(z,{title:_}),s.jsxs(D,{children:[s.jsx("input",{type:"text",placeholder:"Search workflow ID...",value:u,onChange:t=>k(t.target.value),className:"input text-[11px] py-1 px-2 w-56"}),s.jsx(x,{label:"Type",value:a.entity,onChange:t=>o("entity",t),options:C.map(t=>({value:t,label:t}))}),s.jsx(x,{label:"Status",value:a.status,onChange:t=>o("status",t),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]}),s.jsx(x,{label:"Tier",value:a.tier==="all"?"":a.tier,onChange:t=>o("tier",t||"all"),options:[{value:"certified",label:"Certified"},{value:"durable",label:"Durable"}]})]}),s.jsx(A,{columns:v,data:S,keyFn:t=>t.workflow_id,onRowClick:t=>l(`/workflows/executions/${t.workflow_id}`),isLoading:j,emptyMessage:T,sort:i,onSort:f}),s.jsx(E,{page:e.page,totalPages:e.totalPages(g),onPageChange:e.setPage,total:g,pageSize:e.pageSize,onPageSizeChange:e.setPageSize})]})}export{ce as WorkflowsDashboard};
|
|
2
|
+
//# sourceMappingURL=WorkflowsDashboard-D8z9uBNB.js.map
|