lorenz 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 +201 -0
- package/NOTICE +13 -0
- package/README.md +774 -0
- package/RELEASE-MANIFEST.json +211 -0
- package/apps/cli/bin/lorenz.js +25 -0
- package/apps/cli/dist/bin/cli.d.ts +3 -0
- package/apps/cli/dist/bin/cli.d.ts.map +1 -0
- package/apps/cli/dist/bin/cli.js +4 -0
- package/apps/cli/dist/bin/cli.js.map +1 -0
- package/apps/cli/dist/daemon.d.ts +76 -0
- package/apps/cli/dist/daemon.d.ts.map +1 -0
- package/apps/cli/dist/daemon.js +189 -0
- package/apps/cli/dist/daemon.js.map +1 -0
- package/apps/cli/dist/doctor.d.ts +40 -0
- package/apps/cli/dist/doctor.d.ts.map +1 -0
- package/apps/cli/dist/doctor.js +590 -0
- package/apps/cli/dist/doctor.js.map +1 -0
- package/apps/cli/dist/index.d.ts +32 -0
- package/apps/cli/dist/index.d.ts.map +1 -0
- package/apps/cli/dist/index.js +26 -0
- package/apps/cli/dist/index.js.map +1 -0
- package/apps/cli/dist/main.d.ts +40 -0
- package/apps/cli/dist/main.d.ts.map +1 -0
- package/apps/cli/dist/main.js +259 -0
- package/apps/cli/dist/main.js.map +1 -0
- package/apps/cli/dist/runs.d.ts +31 -0
- package/apps/cli/dist/runs.d.ts.map +1 -0
- package/apps/cli/dist/runs.js +281 -0
- package/apps/cli/dist/runs.js.map +1 -0
- package/apps/cli/dist/workerDriverLoader.d.ts +64 -0
- package/apps/cli/dist/workerDriverLoader.d.ts.map +1 -0
- package/apps/cli/dist/workerDriverLoader.js +211 -0
- package/apps/cli/dist/workerDriverLoader.js.map +1 -0
- package/apps/cli/package.json +57 -0
- package/apps/symphony-dashboard/dist/assets/index-B3owF3jd.css +1 -0
- package/apps/symphony-dashboard/dist/assets/index-DQ6XlL0d.js +227 -0
- package/apps/symphony-dashboard/dist/index.html +18 -0
- package/bin/lorenz +16 -0
- package/extensions/docker-worker/dist/index.d.ts +92 -0
- package/extensions/docker-worker/dist/index.d.ts.map +1 -0
- package/extensions/docker-worker/dist/index.js +283 -0
- package/extensions/docker-worker/dist/index.js.map +1 -0
- package/extensions/docker-worker/package.json +14 -0
- package/extensions/jira-tracker/dist/client.d.ts +50 -0
- package/extensions/jira-tracker/dist/client.d.ts.map +1 -0
- package/extensions/jira-tracker/dist/client.js +619 -0
- package/extensions/jira-tracker/dist/client.js.map +1 -0
- package/extensions/jira-tracker/dist/index.d.ts +5 -0
- package/extensions/jira-tracker/dist/index.d.ts.map +1 -0
- package/extensions/jira-tracker/dist/index.js +5 -0
- package/extensions/jira-tracker/dist/index.js.map +1 -0
- package/extensions/jira-tracker/dist/options.d.ts +38 -0
- package/extensions/jira-tracker/dist/options.d.ts.map +1 -0
- package/extensions/jira-tracker/dist/options.js +61 -0
- package/extensions/jira-tracker/dist/options.js.map +1 -0
- package/extensions/jira-tracker/dist/provider.d.ts +6 -0
- package/extensions/jira-tracker/dist/provider.d.ts.map +1 -0
- package/extensions/jira-tracker/dist/provider.js +178 -0
- package/extensions/jira-tracker/dist/provider.js.map +1 -0
- package/extensions/jira-tracker/dist/register.d.ts +10 -0
- package/extensions/jira-tracker/dist/register.d.ts.map +1 -0
- package/extensions/jira-tracker/dist/register.js +15 -0
- package/extensions/jira-tracker/dist/register.js.map +1 -0
- package/extensions/jira-tracker/package.json +16 -0
- package/extensions/linear-tracker/dist/client.d.ts +82 -0
- package/extensions/linear-tracker/dist/client.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/client.js +622 -0
- package/extensions/linear-tracker/dist/client.js.map +1 -0
- package/extensions/linear-tracker/dist/index.d.ts +8 -0
- package/extensions/linear-tracker/dist/index.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/index.js +7 -0
- package/extensions/linear-tracker/dist/index.js.map +1 -0
- package/extensions/linear-tracker/dist/options.d.ts +32 -0
- package/extensions/linear-tracker/dist/options.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/options.js +59 -0
- package/extensions/linear-tracker/dist/options.js.map +1 -0
- package/extensions/linear-tracker/dist/provider.d.ts +4 -0
- package/extensions/linear-tracker/dist/provider.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/provider.js +58 -0
- package/extensions/linear-tracker/dist/provider.js.map +1 -0
- package/extensions/linear-tracker/dist/register.d.ts +11 -0
- package/extensions/linear-tracker/dist/register.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/register.js +19 -0
- package/extensions/linear-tracker/dist/register.js.map +1 -0
- package/extensions/linear-tracker/dist/toolOps.d.ts +8 -0
- package/extensions/linear-tracker/dist/toolOps.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/toolOps.js +160 -0
- package/extensions/linear-tracker/dist/toolOps.js.map +1 -0
- package/extensions/linear-tracker/dist/tools.d.ts +7 -0
- package/extensions/linear-tracker/dist/tools.d.ts.map +1 -0
- package/extensions/linear-tracker/dist/tools.js +210 -0
- package/extensions/linear-tracker/dist/tools.js.map +1 -0
- package/extensions/linear-tracker/package.json +18 -0
- package/extensions/local-tracker/dist/boardStore.d.ts +116 -0
- package/extensions/local-tracker/dist/boardStore.d.ts.map +1 -0
- package/extensions/local-tracker/dist/boardStore.js +475 -0
- package/extensions/local-tracker/dist/boardStore.js.map +1 -0
- package/extensions/local-tracker/dist/client.d.ts +14 -0
- package/extensions/local-tracker/dist/client.d.ts.map +1 -0
- package/extensions/local-tracker/dist/client.js +27 -0
- package/extensions/local-tracker/dist/client.js.map +1 -0
- package/extensions/local-tracker/dist/index.d.ts +7 -0
- package/extensions/local-tracker/dist/index.d.ts.map +1 -0
- package/extensions/local-tracker/dist/index.js +7 -0
- package/extensions/local-tracker/dist/index.js.map +1 -0
- package/extensions/local-tracker/dist/options.d.ts +31 -0
- package/extensions/local-tracker/dist/options.d.ts.map +1 -0
- package/extensions/local-tracker/dist/options.js +69 -0
- package/extensions/local-tracker/dist/options.js.map +1 -0
- package/extensions/local-tracker/dist/provider.d.ts +9 -0
- package/extensions/local-tracker/dist/provider.d.ts.map +1 -0
- package/extensions/local-tracker/dist/provider.js +35 -0
- package/extensions/local-tracker/dist/provider.js.map +1 -0
- package/extensions/local-tracker/dist/register.d.ts +11 -0
- package/extensions/local-tracker/dist/register.d.ts.map +1 -0
- package/extensions/local-tracker/dist/register.js +19 -0
- package/extensions/local-tracker/dist/register.js.map +1 -0
- package/extensions/local-tracker/dist/resolveBoardDir.d.ts +24 -0
- package/extensions/local-tracker/dist/resolveBoardDir.d.ts.map +1 -0
- package/extensions/local-tracker/dist/resolveBoardDir.js +39 -0
- package/extensions/local-tracker/dist/resolveBoardDir.js.map +1 -0
- package/extensions/local-tracker/dist/toolOps.d.ts +9 -0
- package/extensions/local-tracker/dist/toolOps.d.ts.map +1 -0
- package/extensions/local-tracker/dist/toolOps.js +86 -0
- package/extensions/local-tracker/dist/toolOps.js.map +1 -0
- package/extensions/local-tracker/dist/tools.d.ts +7 -0
- package/extensions/local-tracker/dist/tools.d.ts.map +1 -0
- package/extensions/local-tracker/dist/tools.js +170 -0
- package/extensions/local-tracker/dist/tools.js.map +1 -0
- package/extensions/local-tracker/package.json +18 -0
- package/extensions/memory-tracker/dist/index.d.ts +24 -0
- package/extensions/memory-tracker/dist/index.d.ts.map +1 -0
- package/extensions/memory-tracker/dist/index.js +110 -0
- package/extensions/memory-tracker/dist/index.js.map +1 -0
- package/extensions/memory-tracker/package.json +16 -0
- package/extensions/slack-tracker/dist/client.d.ts +88 -0
- package/extensions/slack-tracker/dist/client.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/client.js +246 -0
- package/extensions/slack-tracker/dist/client.js.map +1 -0
- package/extensions/slack-tracker/dist/inMemoryTransport.d.ts +42 -0
- package/extensions/slack-tracker/dist/inMemoryTransport.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/inMemoryTransport.js +104 -0
- package/extensions/slack-tracker/dist/inMemoryTransport.js.map +1 -0
- package/extensions/slack-tracker/dist/index.d.ts +15 -0
- package/extensions/slack-tracker/dist/index.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/index.js +11 -0
- package/extensions/slack-tracker/dist/index.js.map +1 -0
- package/extensions/slack-tracker/dist/mapping.d.ts +27 -0
- package/extensions/slack-tracker/dist/mapping.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/mapping.js +109 -0
- package/extensions/slack-tracker/dist/mapping.js.map +1 -0
- package/extensions/slack-tracker/dist/operations.d.ts +41 -0
- package/extensions/slack-tracker/dist/operations.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/operations.js +97 -0
- package/extensions/slack-tracker/dist/operations.js.map +1 -0
- package/extensions/slack-tracker/dist/options.d.ts +30 -0
- package/extensions/slack-tracker/dist/options.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/options.js +49 -0
- package/extensions/slack-tracker/dist/options.js.map +1 -0
- package/extensions/slack-tracker/dist/provider.d.ts +9 -0
- package/extensions/slack-tracker/dist/provider.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/provider.js +74 -0
- package/extensions/slack-tracker/dist/provider.js.map +1 -0
- package/extensions/slack-tracker/dist/register.d.ts +11 -0
- package/extensions/slack-tracker/dist/register.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/register.js +19 -0
- package/extensions/slack-tracker/dist/register.js.map +1 -0
- package/extensions/slack-tracker/dist/threadState.d.ts +52 -0
- package/extensions/slack-tracker/dist/threadState.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/threadState.js +192 -0
- package/extensions/slack-tracker/dist/threadState.js.map +1 -0
- package/extensions/slack-tracker/dist/toolOps.d.ts +13 -0
- package/extensions/slack-tracker/dist/toolOps.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/toolOps.js +76 -0
- package/extensions/slack-tracker/dist/toolOps.js.map +1 -0
- package/extensions/slack-tracker/dist/tools.d.ts +8 -0
- package/extensions/slack-tracker/dist/tools.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/tools.js +266 -0
- package/extensions/slack-tracker/dist/tools.js.map +1 -0
- package/extensions/slack-tracker/dist/transport.d.ts +63 -0
- package/extensions/slack-tracker/dist/transport.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/transport.js +2 -0
- package/extensions/slack-tracker/dist/transport.js.map +1 -0
- package/extensions/slack-tracker/dist/webTransport.d.ts +44 -0
- package/extensions/slack-tracker/dist/webTransport.d.ts.map +1 -0
- package/extensions/slack-tracker/dist/webTransport.js +402 -0
- package/extensions/slack-tracker/dist/webTransport.js.map +1 -0
- package/extensions/slack-tracker/package.json +17 -0
- package/package.json +89 -0
- package/packages/acp/dist/childProcess.d.ts +4 -0
- package/packages/acp/dist/childProcess.d.ts.map +1 -0
- package/packages/acp/dist/childProcess.js +33 -0
- package/packages/acp/dist/childProcess.js.map +1 -0
- package/packages/acp/dist/index.d.ts +70 -0
- package/packages/acp/dist/index.d.ts.map +1 -0
- package/packages/acp/dist/index.js +701 -0
- package/packages/acp/dist/index.js.map +1 -0
- package/packages/acp/dist/options.d.ts +24 -0
- package/packages/acp/dist/options.d.ts.map +1 -0
- package/packages/acp/dist/options.js +92 -0
- package/packages/acp/dist/options.js.map +1 -0
- package/packages/acp/dist/toml.d.ts +2 -0
- package/packages/acp/dist/toml.d.ts.map +1 -0
- package/packages/acp/dist/toml.js +51 -0
- package/packages/acp/dist/toml.js.map +1 -0
- package/packages/acp/package.json +24 -0
- package/packages/agent-runner/dist/index.d.ts +58 -0
- package/packages/agent-runner/dist/index.d.ts.map +1 -0
- package/packages/agent-runner/dist/index.js +288 -0
- package/packages/agent-runner/dist/index.js.map +1 -0
- package/packages/agent-runner/package.json +19 -0
- package/packages/agent-sdk/dist/index.d.ts +2 -0
- package/packages/agent-sdk/dist/index.d.ts.map +1 -0
- package/packages/agent-sdk/dist/index.js +2 -0
- package/packages/agent-sdk/dist/index.js.map +1 -0
- package/packages/agent-sdk/dist/provider.d.ts +66 -0
- package/packages/agent-sdk/dist/provider.d.ts.map +1 -0
- package/packages/agent-sdk/dist/provider.js +38 -0
- package/packages/agent-sdk/dist/provider.js.map +1 -0
- package/packages/agent-sdk/package.json +14 -0
- package/packages/cli-kit/dist/index.d.ts +20 -0
- package/packages/cli-kit/dist/index.d.ts.map +1 -0
- package/packages/cli-kit/dist/index.js +72 -0
- package/packages/cli-kit/dist/index.js.map +1 -0
- package/packages/cli-kit/package.json +14 -0
- package/packages/config/dist/aliases.d.ts +10 -0
- package/packages/config/dist/aliases.d.ts.map +1 -0
- package/packages/config/dist/aliases.js +153 -0
- package/packages/config/dist/aliases.js.map +1 -0
- package/packages/config/dist/defaults.d.ts +12 -0
- package/packages/config/dist/defaults.d.ts.map +1 -0
- package/packages/config/dist/defaults.js +78 -0
- package/packages/config/dist/defaults.js.map +1 -0
- package/packages/config/dist/errors.d.ts +3 -0
- package/packages/config/dist/errors.d.ts.map +1 -0
- package/packages/config/dist/errors.js +56 -0
- package/packages/config/dist/errors.js.map +1 -0
- package/packages/config/dist/index.d.ts +5 -0
- package/packages/config/dist/index.d.ts.map +1 -0
- package/packages/config/dist/index.js +4 -0
- package/packages/config/dist/index.js.map +1 -0
- package/packages/config/dist/leaf-utils.d.ts +3 -0
- package/packages/config/dist/leaf-utils.d.ts.map +1 -0
- package/packages/config/dist/leaf-utils.js +9 -0
- package/packages/config/dist/leaf-utils.js.map +1 -0
- package/packages/config/dist/parse.d.ts +11 -0
- package/packages/config/dist/parse.d.ts.map +1 -0
- package/packages/config/dist/parse.js +821 -0
- package/packages/config/dist/parse.js.map +1 -0
- package/packages/config/dist/schemas.d.ts +214 -0
- package/packages/config/dist/schemas.d.ts.map +1 -0
- package/packages/config/dist/schemas.js +248 -0
- package/packages/config/dist/schemas.js.map +1 -0
- package/packages/config/package.json +19 -0
- package/packages/dispatch/dist/index.d.ts +22 -0
- package/packages/dispatch/dist/index.d.ts.map +1 -0
- package/packages/dispatch/dist/index.js +117 -0
- package/packages/dispatch/dist/index.js.map +1 -0
- package/packages/dispatch/package.json +16 -0
- package/packages/dispatch-coordinator/dist/coordinator.d.ts +158 -0
- package/packages/dispatch-coordinator/dist/coordinator.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/coordinator.js +529 -0
- package/packages/dispatch-coordinator/dist/coordinator.js.map +1 -0
- package/packages/dispatch-coordinator/dist/gate.d.ts +24 -0
- package/packages/dispatch-coordinator/dist/gate.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/gate.js +47 -0
- package/packages/dispatch-coordinator/dist/gate.js.map +1 -0
- package/packages/dispatch-coordinator/dist/index.d.ts +6 -0
- package/packages/dispatch-coordinator/dist/index.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/index.js +16 -0
- package/packages/dispatch-coordinator/dist/index.js.map +1 -0
- package/packages/dispatch-coordinator/dist/mcpEndpointManager.d.ts +28 -0
- package/packages/dispatch-coordinator/dist/mcpEndpointManager.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/mcpEndpointManager.js +54 -0
- package/packages/dispatch-coordinator/dist/mcpEndpointManager.js.map +1 -0
- package/packages/dispatch-coordinator/dist/nullEndpointManager.d.ts +18 -0
- package/packages/dispatch-coordinator/dist/nullEndpointManager.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/nullEndpointManager.js +40 -0
- package/packages/dispatch-coordinator/dist/nullEndpointManager.js.map +1 -0
- package/packages/dispatch-coordinator/dist/types.d.ts +119 -0
- package/packages/dispatch-coordinator/dist/types.d.ts.map +1 -0
- package/packages/dispatch-coordinator/dist/types.js +17 -0
- package/packages/dispatch-coordinator/dist/types.js.map +1 -0
- package/packages/dispatch-coordinator/package.json +16 -0
- package/packages/domain/dist/index.d.ts +775 -0
- package/packages/domain/dist/index.d.ts.map +1 -0
- package/packages/domain/dist/index.js +124 -0
- package/packages/domain/dist/index.js.map +1 -0
- package/packages/domain/package.json +14 -0
- package/packages/humanize/dist/index.d.ts +4 -0
- package/packages/humanize/dist/index.d.ts.map +1 -0
- package/packages/humanize/dist/index.js +347 -0
- package/packages/humanize/dist/index.js.map +1 -0
- package/packages/humanize/package.json +11 -0
- package/packages/issue/dist/index.d.ts +7 -0
- package/packages/issue/dist/index.d.ts.map +1 -0
- package/packages/issue/dist/index.js +147 -0
- package/packages/issue/dist/index.js.map +1 -0
- package/packages/issue/package.json +14 -0
- package/packages/log-file/dist/index.d.ts +10 -0
- package/packages/log-file/dist/index.d.ts.map +1 -0
- package/packages/log-file/dist/index.js +200 -0
- package/packages/log-file/dist/index.js.map +1 -0
- package/packages/log-file/package.json +15 -0
- package/packages/mcp/dist/agentEndpoint.d.ts +31 -0
- package/packages/mcp/dist/agentEndpoint.d.ts.map +1 -0
- package/packages/mcp/dist/agentEndpoint.js +270 -0
- package/packages/mcp/dist/agentEndpoint.js.map +1 -0
- package/packages/mcp/dist/auth.d.ts +7 -0
- package/packages/mcp/dist/auth.d.ts.map +1 -0
- package/packages/mcp/dist/auth.js +48 -0
- package/packages/mcp/dist/auth.js.map +1 -0
- package/packages/mcp/dist/filter.d.ts +70 -0
- package/packages/mcp/dist/filter.d.ts.map +1 -0
- package/packages/mcp/dist/filter.js +231 -0
- package/packages/mcp/dist/filter.js.map +1 -0
- package/packages/mcp/dist/index.d.ts +7 -0
- package/packages/mcp/dist/index.d.ts.map +1 -0
- package/packages/mcp/dist/index.js +5 -0
- package/packages/mcp/dist/index.js.map +1 -0
- package/packages/mcp/dist/server.d.ts +31 -0
- package/packages/mcp/dist/server.d.ts.map +1 -0
- package/packages/mcp/dist/server.js +176 -0
- package/packages/mcp/dist/server.js.map +1 -0
- package/packages/mcp/dist/tools/linear.d.ts +5 -0
- package/packages/mcp/dist/tools/linear.d.ts.map +1 -0
- package/packages/mcp/dist/tools/linear.js +192 -0
- package/packages/mcp/dist/tools/linear.js.map +1 -0
- package/packages/mcp/dist/tools/local.d.ts +5 -0
- package/packages/mcp/dist/tools/local.d.ts.map +1 -0
- package/packages/mcp/dist/tools/local.js +161 -0
- package/packages/mcp/dist/tools/local.js.map +1 -0
- package/packages/mcp/dist/tools/result.d.ts +5 -0
- package/packages/mcp/dist/tools/result.d.ts.map +1 -0
- package/packages/mcp/dist/tools/result.js +15 -0
- package/packages/mcp/dist/tools/result.js.map +1 -0
- package/packages/mcp/dist/tools.d.ts +14 -0
- package/packages/mcp/dist/tools.d.ts.map +1 -0
- package/packages/mcp/dist/tools.js +58 -0
- package/packages/mcp/dist/tools.js.map +1 -0
- package/packages/mcp/package.json +20 -0
- package/packages/orchestrator/dist/index.d.ts +171 -0
- package/packages/orchestrator/dist/index.d.ts.map +1 -0
- package/packages/orchestrator/dist/index.js +524 -0
- package/packages/orchestrator/dist/index.js.map +1 -0
- package/packages/orchestrator/package.json +18 -0
- package/packages/policies/dist/index.d.ts +11 -0
- package/packages/policies/dist/index.d.ts.map +1 -0
- package/packages/policies/dist/index.js +6 -0
- package/packages/policies/dist/index.js.map +1 -0
- package/packages/policies/dist/reconciliation.d.ts +5 -0
- package/packages/policies/dist/reconciliation.d.ts.map +1 -0
- package/packages/policies/dist/reconciliation.js +17 -0
- package/packages/policies/dist/reconciliation.js.map +1 -0
- package/packages/policies/dist/resume.d.ts +14 -0
- package/packages/policies/dist/resume.d.ts.map +1 -0
- package/packages/policies/dist/resume.js +7 -0
- package/packages/policies/dist/resume.js.map +1 -0
- package/packages/policies/dist/retry.d.ts +4 -0
- package/packages/policies/dist/retry.d.ts.map +1 -0
- package/packages/policies/dist/retry.js +7 -0
- package/packages/policies/dist/retry.js.map +1 -0
- package/packages/policies/dist/stopReason.d.ts +4 -0
- package/packages/policies/dist/stopReason.d.ts.map +1 -0
- package/packages/policies/dist/stopReason.js +11 -0
- package/packages/policies/dist/stopReason.js.map +1 -0
- package/packages/policies/dist/usage.d.ts +14 -0
- package/packages/policies/dist/usage.d.ts.map +1 -0
- package/packages/policies/dist/usage.js +38 -0
- package/packages/policies/dist/usage.js.map +1 -0
- package/packages/policies/dist/workerHost.d.ts +8 -0
- package/packages/policies/dist/workerHost.d.ts.map +1 -0
- package/packages/policies/dist/workerHost.js +20 -0
- package/packages/policies/dist/workerHost.js.map +1 -0
- package/packages/policies/package.json +21 -0
- package/packages/presenter/dist/index.d.ts +81 -0
- package/packages/presenter/dist/index.d.ts.map +1 -0
- package/packages/presenter/dist/index.js +421 -0
- package/packages/presenter/dist/index.js.map +1 -0
- package/packages/presenter/package.json +16 -0
- package/packages/projections/dist/index.d.ts +10 -0
- package/packages/projections/dist/index.d.ts.map +1 -0
- package/packages/projections/dist/index.js +30 -0
- package/packages/projections/dist/index.js.map +1 -0
- package/packages/projections/package.json +15 -0
- package/packages/prompt/dist/index.d.ts +9 -0
- package/packages/prompt/dist/index.d.ts.map +1 -0
- package/packages/prompt/dist/index.js +71 -0
- package/packages/prompt/dist/index.js.map +1 -0
- package/packages/prompt/package.json +16 -0
- package/packages/retry-scheduler/dist/index.d.ts +12 -0
- package/packages/retry-scheduler/dist/index.d.ts.map +1 -0
- package/packages/retry-scheduler/dist/index.js +39 -0
- package/packages/retry-scheduler/dist/index.js.map +1 -0
- package/packages/retry-scheduler/package.json +15 -0
- package/packages/runtime/dist/index.d.ts +157 -0
- package/packages/runtime/dist/index.d.ts.map +1 -0
- package/packages/runtime/dist/index.js +1074 -0
- package/packages/runtime/dist/index.js.map +1 -0
- package/packages/runtime/package.json +26 -0
- package/packages/runtime-events/dist/index.d.ts +110 -0
- package/packages/runtime-events/dist/index.d.ts.map +1 -0
- package/packages/runtime-events/dist/index.js +25 -0
- package/packages/runtime-events/dist/index.js.map +1 -0
- package/packages/runtime-events/package.json +14 -0
- package/packages/server/dist/index.d.ts +25 -0
- package/packages/server/dist/index.d.ts.map +1 -0
- package/packages/server/dist/index.js +213 -0
- package/packages/server/dist/index.js.map +1 -0
- package/packages/server/dist/issue-store.d.ts +26 -0
- package/packages/server/dist/issue-store.d.ts.map +1 -0
- package/packages/server/dist/issue-store.js +88 -0
- package/packages/server/dist/issue-store.js.map +1 -0
- package/packages/server/dist/path-params.d.ts +6 -0
- package/packages/server/dist/path-params.d.ts.map +1 -0
- package/packages/server/dist/path-params.js +15 -0
- package/packages/server/dist/path-params.js.map +1 -0
- package/packages/server/dist/source.d.ts +12 -0
- package/packages/server/dist/source.d.ts.map +1 -0
- package/packages/server/dist/source.js +2 -0
- package/packages/server/dist/source.js.map +1 -0
- package/packages/server/dist/trace-routes.d.ts +21 -0
- package/packages/server/dist/trace-routes.d.ts.map +1 -0
- package/packages/server/dist/trace-routes.js +66 -0
- package/packages/server/dist/trace-routes.js.map +1 -0
- package/packages/server/dist/ws.d.ts +18 -0
- package/packages/server/dist/ws.d.ts.map +1 -0
- package/packages/server/dist/ws.js +168 -0
- package/packages/server/dist/ws.js.map +1 -0
- package/packages/server/package.json +22 -0
- package/packages/ssh/dist/index.d.ts +33 -0
- package/packages/ssh/dist/index.d.ts.map +1 -0
- package/packages/ssh/dist/index.js +281 -0
- package/packages/ssh/dist/index.js.map +1 -0
- package/packages/ssh/package.json +15 -0
- package/packages/static-worker/dist/index.d.ts +73 -0
- package/packages/static-worker/dist/index.d.ts.map +1 -0
- package/packages/static-worker/dist/index.js +150 -0
- package/packages/static-worker/dist/index.js.map +1 -0
- package/packages/static-worker/package.json +14 -0
- package/packages/tool-sdk/dist/filter.d.ts +70 -0
- package/packages/tool-sdk/dist/filter.d.ts.map +1 -0
- package/packages/tool-sdk/dist/filter.js +231 -0
- package/packages/tool-sdk/dist/filter.js.map +1 -0
- package/packages/tool-sdk/dist/index.d.ts +6 -0
- package/packages/tool-sdk/dist/index.d.ts.map +1 -0
- package/packages/tool-sdk/dist/index.js +4 -0
- package/packages/tool-sdk/dist/index.js.map +1 -0
- package/packages/tool-sdk/dist/provider.d.ts +51 -0
- package/packages/tool-sdk/dist/provider.d.ts.map +1 -0
- package/packages/tool-sdk/dist/provider.js +2 -0
- package/packages/tool-sdk/dist/provider.js.map +1 -0
- package/packages/tool-sdk/dist/registry.d.ts +35 -0
- package/packages/tool-sdk/dist/registry.d.ts.map +1 -0
- package/packages/tool-sdk/dist/registry.js +85 -0
- package/packages/tool-sdk/dist/registry.js.map +1 -0
- package/packages/tool-sdk/dist/result.d.ts +5 -0
- package/packages/tool-sdk/dist/result.d.ts.map +1 -0
- package/packages/tool-sdk/dist/result.js +15 -0
- package/packages/tool-sdk/dist/result.js.map +1 -0
- package/packages/tool-sdk/package.json +14 -0
- package/packages/traceviz-emitter/dist/index.d.ts +19 -0
- package/packages/traceviz-emitter/dist/index.d.ts.map +1 -0
- package/packages/traceviz-emitter/dist/index.js +97 -0
- package/packages/traceviz-emitter/dist/index.js.map +1 -0
- package/packages/traceviz-emitter/package.json +17 -0
- package/packages/traceviz-server/dist/index.d.ts +14 -0
- package/packages/traceviz-server/dist/index.d.ts.map +1 -0
- package/packages/traceviz-server/dist/index.js +10 -0
- package/packages/traceviz-server/dist/index.js.map +1 -0
- package/packages/traceviz-server/dist/models/api.d.ts +51 -0
- package/packages/traceviz-server/dist/models/api.d.ts.map +1 -0
- package/packages/traceviz-server/dist/models/api.js +5 -0
- package/packages/traceviz-server/dist/models/api.js.map +1 -0
- package/packages/traceviz-server/dist/models/display-events.d.ts +58 -0
- package/packages/traceviz-server/dist/models/display-events.d.ts.map +1 -0
- package/packages/traceviz-server/dist/models/display-events.js +6 -0
- package/packages/traceviz-server/dist/models/display-events.js.map +1 -0
- package/packages/traceviz-server/dist/parser.d.ts +14 -0
- package/packages/traceviz-server/dist/parser.d.ts.map +1 -0
- package/packages/traceviz-server/dist/parser.js +363 -0
- package/packages/traceviz-server/dist/parser.js.map +1 -0
- package/packages/traceviz-server/dist/stats.d.ts +7 -0
- package/packages/traceviz-server/dist/stats.d.ts.map +1 -0
- package/packages/traceviz-server/dist/stats.js +81 -0
- package/packages/traceviz-server/dist/stats.js.map +1 -0
- package/packages/traceviz-server/dist/watcher.d.ts +54 -0
- package/packages/traceviz-server/dist/watcher.d.ts.map +1 -0
- package/packages/traceviz-server/dist/watcher.js +368 -0
- package/packages/traceviz-server/dist/watcher.js.map +1 -0
- package/packages/traceviz-server/package.json +16 -0
- package/packages/tracker-sdk/dist/index.d.ts +5 -0
- package/packages/tracker-sdk/dist/index.d.ts.map +1 -0
- package/packages/tracker-sdk/dist/index.js +4 -0
- package/packages/tracker-sdk/dist/index.js.map +1 -0
- package/packages/tracker-sdk/dist/options.d.ts +20 -0
- package/packages/tracker-sdk/dist/options.d.ts.map +1 -0
- package/packages/tracker-sdk/dist/options.js +46 -0
- package/packages/tracker-sdk/dist/options.js.map +1 -0
- package/packages/tracker-sdk/dist/provider.d.ts +104 -0
- package/packages/tracker-sdk/dist/provider.d.ts.map +1 -0
- package/packages/tracker-sdk/dist/provider.js +2 -0
- package/packages/tracker-sdk/dist/provider.js.map +1 -0
- package/packages/tracker-sdk/dist/registry.d.ts +26 -0
- package/packages/tracker-sdk/dist/registry.d.ts.map +1 -0
- package/packages/tracker-sdk/dist/registry.js +52 -0
- package/packages/tracker-sdk/dist/registry.js.map +1 -0
- package/packages/tracker-sdk/dist/toolPack.d.ts +10 -0
- package/packages/tracker-sdk/dist/toolPack.d.ts.map +1 -0
- package/packages/tracker-sdk/dist/toolPack.js +185 -0
- package/packages/tracker-sdk/dist/toolPack.js.map +1 -0
- package/packages/tracker-sdk/package.json +15 -0
- package/packages/tui/dist/index.d.ts +35 -0
- package/packages/tui/dist/index.d.ts.map +1 -0
- package/packages/tui/dist/index.js +354 -0
- package/packages/tui/dist/index.js.map +1 -0
- package/packages/tui/package.json +18 -0
- package/packages/worker-host-pool/dist/index.d.ts +33 -0
- package/packages/worker-host-pool/dist/index.d.ts.map +1 -0
- package/packages/worker-host-pool/dist/index.js +311 -0
- package/packages/worker-host-pool/dist/index.js.map +1 -0
- package/packages/worker-host-pool/package.json +14 -0
- package/packages/worker-pool/dist/index.d.ts +6 -0
- package/packages/worker-pool/dist/index.d.ts.map +1 -0
- package/packages/worker-pool/dist/index.js +15 -0
- package/packages/worker-pool/dist/index.js.map +1 -0
- package/packages/worker-pool/dist/lease.d.ts +36 -0
- package/packages/worker-pool/dist/lease.d.ts.map +1 -0
- package/packages/worker-pool/dist/lease.js +53 -0
- package/packages/worker-pool/dist/lease.js.map +1 -0
- package/packages/worker-pool/dist/ledger.d.ts +51 -0
- package/packages/worker-pool/dist/ledger.d.ts.map +1 -0
- package/packages/worker-pool/dist/ledger.js +165 -0
- package/packages/worker-pool/dist/ledger.js.map +1 -0
- package/packages/worker-pool/dist/mutex.d.ts +10 -0
- package/packages/worker-pool/dist/mutex.d.ts.map +1 -0
- package/packages/worker-pool/dist/mutex.js +22 -0
- package/packages/worker-pool/dist/mutex.js.map +1 -0
- package/packages/worker-pool/dist/pool.d.ts +33 -0
- package/packages/worker-pool/dist/pool.d.ts.map +1 -0
- package/packages/worker-pool/dist/pool.js +1727 -0
- package/packages/worker-pool/dist/pool.js.map +1 -0
- package/packages/worker-pool/dist/reaper.d.ts +94 -0
- package/packages/worker-pool/dist/reaper.d.ts.map +1 -0
- package/packages/worker-pool/dist/reaper.js +295 -0
- package/packages/worker-pool/dist/reaper.js.map +1 -0
- package/packages/worker-pool/dist/types.d.ts +249 -0
- package/packages/worker-pool/dist/types.d.ts.map +1 -0
- package/packages/worker-pool/dist/types.js +2 -0
- package/packages/worker-pool/dist/types.js.map +1 -0
- package/packages/worker-pool/package.json +16 -0
- package/packages/worker-sdk/dist/conformance.d.ts +64 -0
- package/packages/worker-sdk/dist/conformance.d.ts.map +1 -0
- package/packages/worker-sdk/dist/conformance.js +109 -0
- package/packages/worker-sdk/dist/conformance.js.map +1 -0
- package/packages/worker-sdk/dist/fake.d.ts +76 -0
- package/packages/worker-sdk/dist/fake.d.ts.map +1 -0
- package/packages/worker-sdk/dist/fake.js +142 -0
- package/packages/worker-sdk/dist/fake.js.map +1 -0
- package/packages/worker-sdk/dist/index.d.ts +5 -0
- package/packages/worker-sdk/dist/index.d.ts.map +1 -0
- package/packages/worker-sdk/dist/index.js +10 -0
- package/packages/worker-sdk/dist/index.js.map +1 -0
- package/packages/worker-sdk/dist/module.d.ts +46 -0
- package/packages/worker-sdk/dist/module.d.ts.map +1 -0
- package/packages/worker-sdk/dist/module.js +59 -0
- package/packages/worker-sdk/dist/module.js.map +1 -0
- package/packages/worker-sdk/dist/registry.d.ts +24 -0
- package/packages/worker-sdk/dist/registry.d.ts.map +1 -0
- package/packages/worker-sdk/dist/registry.js +49 -0
- package/packages/worker-sdk/dist/registry.js.map +1 -0
- package/packages/worker-sdk/dist/types.d.ts +138 -0
- package/packages/worker-sdk/dist/types.d.ts.map +1 -0
- package/packages/worker-sdk/dist/types.js +21 -0
- package/packages/worker-sdk/dist/types.js.map +1 -0
- package/packages/worker-sdk/package.json +15 -0
- package/packages/workflow/dist/index.d.ts +33 -0
- package/packages/workflow/dist/index.d.ts.map +1 -0
- package/packages/workflow/dist/index.js +125 -0
- package/packages/workflow/dist/index.js.map +1 -0
- package/packages/workflow/package.json +19 -0
- package/packages/workspace/dist/index.d.ts +70 -0
- package/packages/workspace/dist/index.d.ts.map +1 -0
- package/packages/workspace/dist/index.js +1016 -0
- package/packages/workspace/dist/index.js.map +1 -0
- package/packages/workspace/package.json +17 -0
- package/runtime-deps/anthropic-claude-agent-sdk/LICENSE.md +1 -0
- package/runtime-deps/anthropic-claude-agent-sdk/README.md +65 -0
- package/runtime-deps/anthropic-claude-agent-sdk/agentSdkTypes.d.ts +1 -0
- package/runtime-deps/anthropic-claude-agent-sdk/assistant.d.ts +135 -0
- package/runtime-deps/anthropic-claude-agent-sdk/assistant.mjs +190 -0
- package/runtime-deps/anthropic-claude-agent-sdk/bridge.d.ts +231 -0
- package/runtime-deps/anthropic-claude-agent-sdk/bridge.mjs +168 -0
- package/runtime-deps/anthropic-claude-agent-sdk/browser-sdk.d.ts +53 -0
- package/runtime-deps/anthropic-claude-agent-sdk/browser-sdk.js +93 -0
- package/runtime-deps/anthropic-claude-agent-sdk/extractFromBunfs.d.ts +1 -0
- package/runtime-deps/anthropic-claude-agent-sdk/extractFromBunfs.js +156 -0
- package/runtime-deps/anthropic-claude-agent-sdk/manifest.json +47 -0
- package/runtime-deps/anthropic-claude-agent-sdk/manifest.zst.json +55 -0
- package/runtime-deps/anthropic-claude-agent-sdk/node_modules/.bin/anthropic-ai-sdk +21 -0
- package/runtime-deps/anthropic-claude-agent-sdk/package.json +81 -0
- package/runtime-deps/anthropic-claude-agent-sdk/sdk-tools.d.ts +3170 -0
- package/runtime-deps/anthropic-claude-agent-sdk/sdk.d.ts +6000 -0
- package/runtime-deps/anthropic-claude-agent-sdk/sdk.mjs +119 -0
- package/runtime-deps/openai-codex/README.md +60 -0
- package/runtime-deps/openai-codex/bin/codex.js +229 -0
- package/runtime-deps/openai-codex/bin/rg +79 -0
- package/runtime-deps/openai-codex/package.json +22 -0
- package/vendor/claude-agent-acp/dist/acp-agent.d.ts +239 -0
- package/vendor/claude-agent-acp/dist/acp-agent.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/acp-agent.js +2693 -0
- package/vendor/claude-agent-acp/dist/bundle.js +41230 -0
- package/vendor/claude-agent-acp/dist/index.d.ts +3 -0
- package/vendor/claude-agent-acp/dist/index.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/index.js +67 -0
- package/vendor/claude-agent-acp/dist/lib.d.ts +6 -0
- package/vendor/claude-agent-acp/dist/lib.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/lib.js +5 -0
- package/vendor/claude-agent-acp/dist/settings.d.ts +68 -0
- package/vendor/claude-agent-acp/dist/settings.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/settings.js +182 -0
- package/vendor/claude-agent-acp/dist/tools.d.ts +103 -0
- package/vendor/claude-agent-acp/dist/tools.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/tools.js +713 -0
- package/vendor/claude-agent-acp/dist/utils.d.ts +16 -0
- package/vendor/claude-agent-acp/dist/utils.d.ts.map +1 -0
- package/vendor/claude-agent-acp/dist/utils.js +83 -0
- package/vendor/claude-agent-acp/package.json +23 -0
- package/vendor/codex-acp/dist/index.js +21280 -0
- package/vendor/codex-acp/package.json +17 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { errorMessage, isRecord } from "@lorenz/domain";
|
|
2
|
+
import { isBotMention } from "./mapping.js";
|
|
3
|
+
import { slackEndpoint, slackTrackerOptions } from "./options.js";
|
|
4
|
+
// Generous safety cap on conversations.history pages. The normal terminal condition is Slack
|
|
5
|
+
// returning no next_cursor (full history exhausted). This cap only exists to bound a pathological
|
|
6
|
+
// non-terminating cursor; reaching it while a cursor is STILL present is an anomaly we surface as a
|
|
7
|
+
// loud truncation warning rather than silently dropping older mentions. At limit=200 this covers
|
|
8
|
+
// ~100k messages per channel per poll.
|
|
9
|
+
const MAX_HISTORY_PAGES = 500;
|
|
10
|
+
const MAX_RETRIES = 4;
|
|
11
|
+
/**
|
|
12
|
+
* Upper bound on a single retry sleep, including Retry-After-driven ones. Slack's real
|
|
13
|
+
* Retry-After values are short; an unbounded header (or a far-future HTTP-date injected by an
|
|
14
|
+
* intermediary) must not park the poll loop or an agent tool call on an un-abortable timer.
|
|
15
|
+
*/
|
|
16
|
+
const MAX_RETRY_DELAY_MS = 60_000;
|
|
17
|
+
/**
|
|
18
|
+
* Workspace base URLs (auth.test `url`) keyed by endpoint+token and shared across transport
|
|
19
|
+
* instances: the tool packs construct a fresh transport per call, and the workspace URL never
|
|
20
|
+
* changes over a token's lifetime.
|
|
21
|
+
*/
|
|
22
|
+
const teamUrlByAuth = new Map();
|
|
23
|
+
const defaultSleep = async (delayMs) => new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
24
|
+
export class SlackWebTransport {
|
|
25
|
+
fetchImpl;
|
|
26
|
+
sleep;
|
|
27
|
+
logger;
|
|
28
|
+
endpoint;
|
|
29
|
+
token;
|
|
30
|
+
botUserId;
|
|
31
|
+
maxHistoryPages;
|
|
32
|
+
warnedNoBotUserId = false;
|
|
33
|
+
constructor(settings, fetchImpl = fetch, sleep = defaultSleep, logger = { warn: (message) => console.warn(message) }, options = {}) {
|
|
34
|
+
this.fetchImpl = fetchImpl;
|
|
35
|
+
this.sleep = sleep;
|
|
36
|
+
this.logger = logger;
|
|
37
|
+
this.endpoint = slackEndpoint(settings);
|
|
38
|
+
this.token = settings.tracker.apiKey ?? "";
|
|
39
|
+
this.botUserId = slackTrackerOptions(settings).botUserId;
|
|
40
|
+
this.maxHistoryPages = options.maxHistoryPages ?? MAX_HISTORY_PAGES;
|
|
41
|
+
}
|
|
42
|
+
async listMentions(channels) {
|
|
43
|
+
return (await this.scanChannels(channels)).mentions;
|
|
44
|
+
}
|
|
45
|
+
async scanChannels(channels) {
|
|
46
|
+
// Each poll scans recent conversations.history from newest backward (no oldest/latest
|
|
47
|
+
// watermark). A per-channel incremental watermark is a DEFERRED enhancement: a naive
|
|
48
|
+
// time-watermark would regress re-discovery of undispatched active issues, because the runtime
|
|
49
|
+
// re-surfaces an active-but-undispatched Todo/In Progress issue via the candidate poll, and a
|
|
50
|
+
// watermark that advanced past it would stop re-surfacing it so it would never be picked up.
|
|
51
|
+
// Doing this safely needs a stateful open-issue registry, tracked separately. The conservative
|
|
52
|
+
// poll interval (WORKFLOW.slack.md polling.interval_ms) plus the 429/Retry-After backoff bound
|
|
53
|
+
// the rate-limit pressure in the meantime.
|
|
54
|
+
//
|
|
55
|
+
// Fail closed: with no bot user id configured, the any-mention fallback would treat every
|
|
56
|
+
// human-to-human <@U...> mention in a watched channel as an issue and expose that text to
|
|
57
|
+
// workers. The production transport must never do that, so match nothing and warn once.
|
|
58
|
+
if (!this.botUserId || this.botUserId.trim() === "") {
|
|
59
|
+
if (!this.warnedNoBotUserId) {
|
|
60
|
+
this.warnedNoBotUserId = true;
|
|
61
|
+
this.logger.warn("slack tracker: bot_user_id (SLACK_BOT_USER_ID) is not set; refusing to scan mentions " +
|
|
62
|
+
"(fail closed). Set tracker.bot_user_id so only the bot's own mentions create issues.");
|
|
63
|
+
}
|
|
64
|
+
return { mentions: [], threadedRoots: [] };
|
|
65
|
+
}
|
|
66
|
+
// Channels are scanned CONCURRENTLY: Slack rate-limits conversations.history per channel,
|
|
67
|
+
// and the per-channel isolation below makes the scans independent, so poll wall-time is the
|
|
68
|
+
// slowest single channel rather than the sum of every channel's pagination and backoff.
|
|
69
|
+
const results = await Promise.all(channels.map(async (channel) => {
|
|
70
|
+
// Isolate per-channel failures: a single unreadable channel (e.g. not_in_channel,
|
|
71
|
+
// missing_scope, or a persistent 429) must not blind candidate discovery across the
|
|
72
|
+
// other channels. Skip-and-log the bad channel and keep the rest.
|
|
73
|
+
//
|
|
74
|
+
// Crucially, a channel's results are buffered and only merged once that channel's scan
|
|
75
|
+
// COMPLETES (Slack exhausts its history, or we hit the page-cap truncation bound which is
|
|
76
|
+
// loudly surfaced in the scan). If pagination fails partway through, the partial buffer
|
|
77
|
+
// is DISCARDED: a partial scan must never masquerade as a complete one, because every
|
|
78
|
+
// mention beyond the failed page would otherwise vanish silently from candidate discovery
|
|
79
|
+
// and terminal cleanup.
|
|
80
|
+
try {
|
|
81
|
+
return { channel, scan: await this.scanChannel(channel) };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// A page failed after the transport's own retries: treat the whole channel as failed
|
|
85
|
+
// and discard its partial buffer. One bad channel must not abort the others.
|
|
86
|
+
const message = errorMessage(error);
|
|
87
|
+
this.logger.warn(`slack tracker: channel ${channel} scan failed before completing; discarding its ` +
|
|
88
|
+
`partial results this poll: ${message}`);
|
|
89
|
+
return { channel, failure: message };
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
const out = { mentions: [], threadedRoots: [] };
|
|
93
|
+
const failures = [];
|
|
94
|
+
for (const result of results) {
|
|
95
|
+
if ("scan" in result) {
|
|
96
|
+
out.mentions.push(...result.scan.mentions);
|
|
97
|
+
out.threadedRoots.push(...result.scan.threadedRoots);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
failures.push(`${result.channel}: ${result.failure}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// If there were channels to scan but NONE completed, surface the failure (preserving the
|
|
104
|
+
// reject contract the runtime relies on for poll_error) rather than silently reporting a
|
|
105
|
+
// healthy-looking partial/empty result.
|
|
106
|
+
if (failures.length > 0 && failures.length === channels.length) {
|
|
107
|
+
throw new Error(`slack conversations.history failed for all channels: ${failures.join("; ")}`);
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
/** Scan one channel's full root-message history; throws when pagination fails partway. */
|
|
112
|
+
async scanChannel(channel) {
|
|
113
|
+
const buffer = { mentions: [], threadedRoots: [] };
|
|
114
|
+
let cursor;
|
|
115
|
+
// Page until Slack stops returning a next_cursor: full exhaustion is the normal terminal
|
|
116
|
+
// condition. The page count only guards against a pathological non-terminating cursor.
|
|
117
|
+
for (let page = 0; page < this.maxHistoryPages; page += 1) {
|
|
118
|
+
const params = { channel, limit: "200" };
|
|
119
|
+
if (cursor)
|
|
120
|
+
params.cursor = cursor;
|
|
121
|
+
const body = await this.get("conversations.history", params);
|
|
122
|
+
const messages = Array.isArray(body.messages) ? body.messages : [];
|
|
123
|
+
for (const m of messages) {
|
|
124
|
+
if (typeof m.ts !== "string")
|
|
125
|
+
continue;
|
|
126
|
+
if (isBotMention(m.text ?? "", this.botUserId)) {
|
|
127
|
+
buffer.mentions.push(toMessage(channel, m, this.botUserId));
|
|
128
|
+
}
|
|
129
|
+
else if ((m.reply_count ?? 0) > 0) {
|
|
130
|
+
// Non-mention roots that carry a thread: candidates for reply-mention tracking.
|
|
131
|
+
buffer.threadedRoots.push(toMessage(channel, m, this.botUserId));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
cursor = nextCursor(body);
|
|
135
|
+
if (!cursor)
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
// Hitting the safety cap with a cursor STILL present means we stopped before exhausting the
|
|
139
|
+
// channel's history. Older bot mentions beyond this point are silently invisible to candidate
|
|
140
|
+
// discovery and terminal cleanup, so make the truncation loud rather than dropping them
|
|
141
|
+
// quietly. Truncation is an intentional, surfaced bound, so the scan still counts as
|
|
142
|
+
// complete-enough: we keep the buffer collected up to the cap.
|
|
143
|
+
if (cursor) {
|
|
144
|
+
this.logger.warn(`slack tracker: channel ${channel} history scan hit the ${this.maxHistoryPages}-page ` +
|
|
145
|
+
"safety cap with more pages remaining; truncating scan. Older bot mentions in this " +
|
|
146
|
+
"channel may be missed this poll.");
|
|
147
|
+
}
|
|
148
|
+
return buffer;
|
|
149
|
+
}
|
|
150
|
+
async teamUrl() {
|
|
151
|
+
const cacheKey = `${this.endpoint}${this.token}`;
|
|
152
|
+
const cached = teamUrlByAuth.get(cacheKey);
|
|
153
|
+
if (cached !== undefined)
|
|
154
|
+
return cached;
|
|
155
|
+
try {
|
|
156
|
+
const body = await this.get("auth.test", {});
|
|
157
|
+
const url = typeof body.url === "string" && body.url !== "" ? body.url.replace(/\/+$/, "") : null;
|
|
158
|
+
teamUrlByAuth.set(cacheKey, url);
|
|
159
|
+
return url;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Permalinks are decoration: never let a transient auth.test failure break a read path,
|
|
163
|
+
// and don't cache the failure so a later call can succeed.
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async getMessage(channel, ts) {
|
|
168
|
+
const body = await this.get("conversations.history", {
|
|
169
|
+
channel,
|
|
170
|
+
latest: ts,
|
|
171
|
+
inclusive: "true",
|
|
172
|
+
limit: "1",
|
|
173
|
+
});
|
|
174
|
+
const messages = Array.isArray(body.messages) ? body.messages : [];
|
|
175
|
+
const found = messages.find((m) => m.ts === ts);
|
|
176
|
+
return found ? toMessage(channel, found, this.botUserId) : null;
|
|
177
|
+
}
|
|
178
|
+
async getUser(userId) {
|
|
179
|
+
let body;
|
|
180
|
+
try {
|
|
181
|
+
body = await this.get("users.info", { user: userId });
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// An unknown or unreadable user resolves to null rather than failing the caller's read.
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
const user = body.user;
|
|
188
|
+
if (!isRecord(user) || typeof user.id !== "string")
|
|
189
|
+
return null;
|
|
190
|
+
const profile = isRecord(user.profile) ? user.profile : {};
|
|
191
|
+
return {
|
|
192
|
+
id: user.id,
|
|
193
|
+
...(typeof user.name === "string" ? { name: user.name } : {}),
|
|
194
|
+
...(typeof user.real_name === "string" ? { realName: user.real_name } : {}),
|
|
195
|
+
...(typeof profile.display_name === "string" && profile.display_name !== ""
|
|
196
|
+
? { displayName: profile.display_name }
|
|
197
|
+
: {}),
|
|
198
|
+
...(typeof user.is_bot === "boolean" ? { isBot: user.is_bot } : {}),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async listAround(channel, ts, window) {
|
|
202
|
+
// Two bounded history reads around the anchor: at-or-before it (latest+inclusive walks
|
|
203
|
+
// backwards from the anchor) and strictly after it (oldest exclusive). Both are pure reads.
|
|
204
|
+
const [beforeBody, afterBody] = await Promise.all([
|
|
205
|
+
window.before > 0
|
|
206
|
+
? this.get("conversations.history", {
|
|
207
|
+
channel,
|
|
208
|
+
latest: ts,
|
|
209
|
+
inclusive: "true",
|
|
210
|
+
limit: String(window.before),
|
|
211
|
+
})
|
|
212
|
+
: Promise.resolve({}),
|
|
213
|
+
window.after > 0
|
|
214
|
+
? this.get("conversations.history", {
|
|
215
|
+
channel,
|
|
216
|
+
oldest: ts,
|
|
217
|
+
inclusive: "false",
|
|
218
|
+
limit: String(window.after),
|
|
219
|
+
})
|
|
220
|
+
: Promise.resolve({}),
|
|
221
|
+
]);
|
|
222
|
+
const collect = (body) => (Array.isArray(body.messages) ? body.messages : [])
|
|
223
|
+
.filter((m) => typeof m.ts === "string")
|
|
224
|
+
.map((m) => toMessage(channel, m, this.botUserId));
|
|
225
|
+
const merged = new Map();
|
|
226
|
+
for (const message of [...collect(beforeBody), ...collect(afterBody)]) {
|
|
227
|
+
merged.set(message.ts, message);
|
|
228
|
+
}
|
|
229
|
+
return [...merged.values()].sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));
|
|
230
|
+
}
|
|
231
|
+
async getThread(channel, ts) {
|
|
232
|
+
// conversations.replies returns the parent (root) message FIRST followed by its replies. Page
|
|
233
|
+
// through next_cursor like listMentions (a pure read, safe to retry on 429/5xx) and drop the
|
|
234
|
+
// parent (the message whose ts === the thread ts) so only the replies are returned.
|
|
235
|
+
const out = [];
|
|
236
|
+
let cursor;
|
|
237
|
+
for (let page = 0; page < this.maxHistoryPages; page += 1) {
|
|
238
|
+
const params = { channel, ts, limit: "200" };
|
|
239
|
+
if (cursor)
|
|
240
|
+
params.cursor = cursor;
|
|
241
|
+
const body = await this.get("conversations.replies", params);
|
|
242
|
+
const messages = Array.isArray(body.messages) ? body.messages : [];
|
|
243
|
+
for (const m of messages) {
|
|
244
|
+
if (typeof m.ts !== "string")
|
|
245
|
+
continue;
|
|
246
|
+
if (m.ts === ts)
|
|
247
|
+
continue;
|
|
248
|
+
out.push(toThreadReply(m));
|
|
249
|
+
}
|
|
250
|
+
cursor = nextCursor(body);
|
|
251
|
+
if (!cursor)
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
// Same loud-truncation contract as the history scan: a silently partial thread would let a
|
|
255
|
+
// continuation agent recover incomplete progress notes with no signal anything was dropped.
|
|
256
|
+
if (cursor) {
|
|
257
|
+
this.logger.warn(`slack tracker: thread ${channel}:${ts} hit the ${this.maxHistoryPages}-page safety cap ` +
|
|
258
|
+
"with more replies remaining; returning a truncated thread.");
|
|
259
|
+
}
|
|
260
|
+
return out;
|
|
261
|
+
}
|
|
262
|
+
async addReaction(channel, ts, name) {
|
|
263
|
+
// reactions.add is idempotent: re-applying an already-present reaction is harmless (Slack
|
|
264
|
+
// returns already_reacted, which parse() treats as success), so retrying on an ambiguous 5xx
|
|
265
|
+
// cannot corrupt state.
|
|
266
|
+
await this.post("reactions.add", { channel, timestamp: ts, name }, { idempotent: true });
|
|
267
|
+
}
|
|
268
|
+
async removeReaction(channel, ts, name) {
|
|
269
|
+
// reactions.remove is idempotent: removing an already-absent reaction is harmless (Slack
|
|
270
|
+
// returns no_reaction, which parse() treats as success), so retrying on a 5xx is safe.
|
|
271
|
+
await this.post("reactions.remove", { channel, timestamp: ts, name }, { idempotent: true });
|
|
272
|
+
}
|
|
273
|
+
async postReply(channel, threadTs, body) {
|
|
274
|
+
// chat.postMessage is NOT idempotent: a retry posts a DUPLICATE reply. It may retry only on a
|
|
275
|
+
// 429 (rejected before processing), never on an ambiguous 5xx where the reply may have applied.
|
|
276
|
+
await this.post("chat.postMessage", { channel, thread_ts: threadTs, text: body }, {
|
|
277
|
+
idempotent: false,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
async get(method, params) {
|
|
281
|
+
const url = `${this.endpoint}/${method}?${new URLSearchParams(params).toString()}`;
|
|
282
|
+
// GET (conversations.history) is a pure read: safe to retry on both 429 and 5xx.
|
|
283
|
+
const response = await this.fetchWithRetry(method, async () => this.fetchImpl(url, {
|
|
284
|
+
method: "GET",
|
|
285
|
+
headers: { authorization: `Bearer ${this.token}` },
|
|
286
|
+
signal: AbortSignal.timeout(30_000),
|
|
287
|
+
}), { idempotent: true });
|
|
288
|
+
return this.parse(method, response);
|
|
289
|
+
}
|
|
290
|
+
async post(method, params, options) {
|
|
291
|
+
const response = await this.fetchWithRetry(method, async () => this.fetchImpl(`${this.endpoint}/${method}`, {
|
|
292
|
+
method: "POST",
|
|
293
|
+
headers: {
|
|
294
|
+
authorization: `Bearer ${this.token}`,
|
|
295
|
+
"content-type": "application/json; charset=utf-8",
|
|
296
|
+
},
|
|
297
|
+
body: JSON.stringify(params),
|
|
298
|
+
signal: AbortSignal.timeout(30_000),
|
|
299
|
+
}), options);
|
|
300
|
+
return this.parse(method, response);
|
|
301
|
+
}
|
|
302
|
+
async fetchWithRetry(method, send, options) {
|
|
303
|
+
for (let retryCount = 0;; retryCount += 1) {
|
|
304
|
+
let response;
|
|
305
|
+
try {
|
|
306
|
+
response = await send();
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
throw new Error(`slack ${method} request failed: ${errorMessage(error)}`, {
|
|
310
|
+
cause: error,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
// A non-idempotent write (chat.postMessage) may retry only on a 429, which Slack rejects
|
|
314
|
+
// BEFORE processing the request - so no reply was posted and a retry cannot duplicate it.
|
|
315
|
+
// An ambiguous 5xx (the reply may have already been delivered) must NOT be retried.
|
|
316
|
+
const canRetry = options.idempotent ? isRetryable(response.status) : response.status === 429;
|
|
317
|
+
if (!canRetry || retryCount >= MAX_RETRIES) {
|
|
318
|
+
if (isRetryable(response.status)) {
|
|
319
|
+
throw new Error(`slack ${method} failed: status ${response.status}`);
|
|
320
|
+
}
|
|
321
|
+
return response;
|
|
322
|
+
}
|
|
323
|
+
await this.sleep(retryDelayMs(response.headers, retryCount));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
async parse(method, response) {
|
|
327
|
+
let body;
|
|
328
|
+
try {
|
|
329
|
+
body = (await response.json());
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
throw new Error(`slack ${method} returned a non-JSON response (HTTP ${response.status})`);
|
|
333
|
+
}
|
|
334
|
+
if (body.ok !== true) {
|
|
335
|
+
const reason = typeof body.error === "string" ? body.error : String(response.status);
|
|
336
|
+
// Benign Slack errors that mean the write's GOAL is already satisfied are treated as success.
|
|
337
|
+
// This matters for idempotent retries: when an ambiguous 5xx actually applied the write, the
|
|
338
|
+
// retry sees these "already done" errors and must resolve cleanly rather than report a failure
|
|
339
|
+
// while the target state is in fact present (which would let the next poll observe a phantom
|
|
340
|
+
// advanced/terminal status). reactions.add: already_reacted means the reaction is present
|
|
341
|
+
// (the goal). reactions.remove: no_reaction means the reaction is already absent (the goal).
|
|
342
|
+
if (method === "reactions.add" && reason === "already_reacted")
|
|
343
|
+
return body;
|
|
344
|
+
if (method === "reactions.remove" && reason === "no_reaction")
|
|
345
|
+
return body;
|
|
346
|
+
throw new Error(`slack ${method} failed: ${reason}`);
|
|
347
|
+
}
|
|
348
|
+
return body;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
function isRetryable(status) {
|
|
352
|
+
return status === 429 || status >= 500;
|
|
353
|
+
}
|
|
354
|
+
function retryDelayMs(headers, retryCount) {
|
|
355
|
+
const retryAfter = headers.get("retry-after");
|
|
356
|
+
if (retryAfter !== null) {
|
|
357
|
+
const seconds = Number(retryAfter.trim());
|
|
358
|
+
if (Number.isInteger(seconds) && seconds >= 0) {
|
|
359
|
+
return Math.min(seconds * 1000, MAX_RETRY_DELAY_MS);
|
|
360
|
+
}
|
|
361
|
+
const dateMs = Date.parse(retryAfter.trim());
|
|
362
|
+
if (!Number.isNaN(dateMs)) {
|
|
363
|
+
return Math.min(Math.max(0, dateMs - Date.now()), MAX_RETRY_DELAY_MS);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return Math.min(1_000 * 2 ** retryCount, 30_000);
|
|
367
|
+
}
|
|
368
|
+
function nextCursor(body) {
|
|
369
|
+
const meta = body.response_metadata;
|
|
370
|
+
if (typeof meta !== "object" || meta === null)
|
|
371
|
+
return undefined;
|
|
372
|
+
const cursor = meta.next_cursor;
|
|
373
|
+
if (typeof cursor !== "string" || cursor === "")
|
|
374
|
+
return undefined;
|
|
375
|
+
return cursor;
|
|
376
|
+
}
|
|
377
|
+
function toMessage(channel, m, botUserId) {
|
|
378
|
+
const botReacted = botUserId !== undefined &&
|
|
379
|
+
(m.reactions ?? []).some((r) => Array.isArray(r.users) && r.users.includes(botUserId));
|
|
380
|
+
return {
|
|
381
|
+
channel,
|
|
382
|
+
ts: m.ts ?? "",
|
|
383
|
+
text: m.text ?? "",
|
|
384
|
+
...(typeof m.user === "string" ? { user: m.user } : {}),
|
|
385
|
+
reactions: (m.reactions ?? [])
|
|
386
|
+
.map((r) => r.name)
|
|
387
|
+
.filter((n) => typeof n === "string"),
|
|
388
|
+
...(typeof m.reply_count === "number" && m.reply_count > 0
|
|
389
|
+
? { replyCount: m.reply_count }
|
|
390
|
+
: {}),
|
|
391
|
+
...(typeof m.latest_reply === "string" ? { latestReply: m.latest_reply } : {}),
|
|
392
|
+
...(botReacted ? { botReacted: true } : {}),
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
function toThreadReply(m) {
|
|
396
|
+
// exactOptionalPropertyTypes: only set `user` when present rather than assigning undefined.
|
|
397
|
+
const reply = { ts: m.ts ?? "", text: m.text ?? "" };
|
|
398
|
+
if (typeof m.user === "string")
|
|
399
|
+
reply.user = m.user;
|
|
400
|
+
return reply;
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=webTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webTransport.js","sourceRoot":"","sources":["../src/webTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lorenz/slack-tracker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@lorenz/domain": "file:../../packages/domain",
|
|
13
|
+
"@lorenz/issue": "file:../../packages/issue",
|
|
14
|
+
"@lorenz/tool-sdk": "file:../../packages/tool-sdk",
|
|
15
|
+
"@lorenz/tracker-sdk": "file:../../packages/tracker-sdk"
|
|
16
|
+
}
|
|
17
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lorenz",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Lorenz is a control plane for dispatching and structuring order across dynamic agent systems.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/ryanlyn/symphony.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/ryanlyn/symphony#readme",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"bin": {
|
|
13
|
+
"lorenz": "./bin/lorenz"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"start": "node ./node_modules/@lorenz/cli/dist/bin/cli.js"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@agentclientprotocol/claude-agent-acp": "file:vendor/claude-agent-acp",
|
|
20
|
+
"@agentclientprotocol/codex-acp": "file:vendor/codex-acp",
|
|
21
|
+
"@agentclientprotocol/sdk": "^0.21.0",
|
|
22
|
+
"@anthropic-ai/claude-agent-sdk": "file:runtime-deps/anthropic-claude-agent-sdk",
|
|
23
|
+
"@hono/node-server": "^1.19.14",
|
|
24
|
+
"@hono/node-ws": "^1.1.1",
|
|
25
|
+
"@linear/sdk": "^84.0.0",
|
|
26
|
+
"@lorenz/acp": "file:packages/acp",
|
|
27
|
+
"@lorenz/agent-runner": "file:packages/agent-runner",
|
|
28
|
+
"@lorenz/agent-sdk": "file:packages/agent-sdk",
|
|
29
|
+
"@lorenz/cli": "file:apps/cli",
|
|
30
|
+
"@lorenz/cli-kit": "file:packages/cli-kit",
|
|
31
|
+
"@lorenz/config": "file:packages/config",
|
|
32
|
+
"@lorenz/dispatch": "file:packages/dispatch",
|
|
33
|
+
"@lorenz/dispatch-coordinator": "file:packages/dispatch-coordinator",
|
|
34
|
+
"@lorenz/docker-worker": "file:extensions/docker-worker",
|
|
35
|
+
"@lorenz/domain": "file:packages/domain",
|
|
36
|
+
"@lorenz/humanize": "file:packages/humanize",
|
|
37
|
+
"@lorenz/issue": "file:packages/issue",
|
|
38
|
+
"@lorenz/jira-tracker": "file:extensions/jira-tracker",
|
|
39
|
+
"@lorenz/linear-tracker": "file:extensions/linear-tracker",
|
|
40
|
+
"@lorenz/local-tracker": "file:extensions/local-tracker",
|
|
41
|
+
"@lorenz/log-file": "file:packages/log-file",
|
|
42
|
+
"@lorenz/mcp": "file:packages/mcp",
|
|
43
|
+
"@lorenz/memory-tracker": "file:extensions/memory-tracker",
|
|
44
|
+
"@lorenz/orchestrator": "file:packages/orchestrator",
|
|
45
|
+
"@lorenz/policies": "file:packages/policies",
|
|
46
|
+
"@lorenz/presenter": "file:packages/presenter",
|
|
47
|
+
"@lorenz/projections": "file:packages/projections",
|
|
48
|
+
"@lorenz/prompt": "file:packages/prompt",
|
|
49
|
+
"@lorenz/retry-scheduler": "file:packages/retry-scheduler",
|
|
50
|
+
"@lorenz/runtime": "file:packages/runtime",
|
|
51
|
+
"@lorenz/runtime-events": "file:packages/runtime-events",
|
|
52
|
+
"@lorenz/server": "file:packages/server",
|
|
53
|
+
"@lorenz/slack-tracker": "file:extensions/slack-tracker",
|
|
54
|
+
"@lorenz/ssh": "file:packages/ssh",
|
|
55
|
+
"@lorenz/static-worker": "file:packages/static-worker",
|
|
56
|
+
"@lorenz/tool-sdk": "file:packages/tool-sdk",
|
|
57
|
+
"@lorenz/traceviz-emitter": "file:packages/traceviz-emitter",
|
|
58
|
+
"@lorenz/traceviz-server": "file:packages/traceviz-server",
|
|
59
|
+
"@lorenz/tracker-sdk": "file:packages/tracker-sdk",
|
|
60
|
+
"@lorenz/tui": "file:packages/tui",
|
|
61
|
+
"@lorenz/worker-host-pool": "file:packages/worker-host-pool",
|
|
62
|
+
"@lorenz/worker-pool": "file:packages/worker-pool",
|
|
63
|
+
"@lorenz/worker-sdk": "file:packages/worker-sdk",
|
|
64
|
+
"@lorenz/workflow": "file:packages/workflow",
|
|
65
|
+
"@lorenz/workspace": "file:packages/workspace",
|
|
66
|
+
"@openai/codex": "file:runtime-deps/openai-codex",
|
|
67
|
+
"better-sqlite3": "^12.10.0",
|
|
68
|
+
"commander": "^14.0.3",
|
|
69
|
+
"diff": "^8.0.3",
|
|
70
|
+
"execa": "^9.6.1",
|
|
71
|
+
"hono": "^4.12.18",
|
|
72
|
+
"ink": "^7.0.1",
|
|
73
|
+
"liquidjs": "^10.21.1",
|
|
74
|
+
"open": "^11.0.0",
|
|
75
|
+
"pino": "^9.14.0",
|
|
76
|
+
"pino-roll": "^3.1.0",
|
|
77
|
+
"react": "^19.2.5",
|
|
78
|
+
"ts-pattern": "^5.9.0",
|
|
79
|
+
"vscode-jsonrpc": "^8.2.1",
|
|
80
|
+
"yaml": "^2.8.0",
|
|
81
|
+
"zod": "^4.4.3"
|
|
82
|
+
},
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": ">=24"
|
|
85
|
+
},
|
|
86
|
+
"publishConfig": {
|
|
87
|
+
"access": "public"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
2
|
+
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T>;
|
|
3
|
+
export declare function stopChild(child: ChildProcessWithoutNullStreams): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=childProcess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childProcess.d.ts","sourceRoot":"","sources":["../src/childProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAepF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export async function withTimeout(promise, timeoutMs, message) {
|
|
2
|
+
let timer = null;
|
|
3
|
+
try {
|
|
4
|
+
return await Promise.race([
|
|
5
|
+
promise,
|
|
6
|
+
new Promise((_resolve, reject) => {
|
|
7
|
+
timer = setTimeout(() => reject(new Error(message)), timeoutMs);
|
|
8
|
+
}),
|
|
9
|
+
]);
|
|
10
|
+
}
|
|
11
|
+
finally {
|
|
12
|
+
if (timer)
|
|
13
|
+
clearTimeout(timer);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function stopChild(child) {
|
|
17
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
18
|
+
return;
|
|
19
|
+
await new Promise((resolve) => {
|
|
20
|
+
let closed = false;
|
|
21
|
+
const timer = setTimeout(() => {
|
|
22
|
+
if (!closed)
|
|
23
|
+
child.kill("SIGKILL");
|
|
24
|
+
}, 1_000);
|
|
25
|
+
child.once("close", () => {
|
|
26
|
+
closed = true;
|
|
27
|
+
clearTimeout(timer);
|
|
28
|
+
resolve();
|
|
29
|
+
});
|
|
30
|
+
child.kill("SIGTERM");
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=childProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childProcess.js","sourceRoot":"","sources":["../src/childProcess.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,OAAe;IAEf,IAAI,KAAK,GAA0B,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,OAAO;YACP,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;gBACtC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAClE,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqC;IACnE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO;IAEjE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,MAAM,GAAG,IAAI,CAAC;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
|