@probelabs/visor 0.1.187 → 0.1.188-ee
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/dist/{140.index.js → 102.index.js} +3 -3
- package/dist/{85.index.js → 663.index.js} +15 -15
- package/dist/{142.index.js → 736.index.js} +36 -36
- package/dist/{676.index.js → 840.index.js} +12 -12
- package/dist/{223.index.js → 961.index.js} +16 -16
- package/dist/action-cli-bridge.d.ts.map +1 -1
- package/dist/agent-protocol/a2a-frontend.d.ts.map +1 -1
- package/dist/agent-protocol/index.d.ts.map +1 -1
- package/dist/agent-protocol/push-notification-manager.d.ts.map +1 -1
- package/dist/agent-protocol/state-transitions.d.ts.map +1 -1
- package/dist/agent-protocol/task-evaluator.d.ts.map +1 -1
- package/dist/agent-protocol/task-live-update-slack.d.ts.map +1 -1
- package/dist/agent-protocol/task-live-update-teams.d.ts.map +1 -1
- package/dist/agent-protocol/task-live-update-telegram.d.ts.map +1 -1
- package/dist/agent-protocol/task-live-updates.d.ts.map +1 -1
- package/dist/agent-protocol/task-progress-tool.d.ts.map +1 -1
- package/dist/agent-protocol/task-queue.d.ts.map +1 -1
- package/dist/agent-protocol/task-store.d.ts.map +1 -1
- package/dist/agent-protocol/task-stream-manager.d.ts.map +1 -1
- package/dist/agent-protocol/task-trace-resolution.d.ts.map +1 -1
- package/dist/agent-protocol/tasks-cli-handler.d.ts.map +1 -1
- package/dist/agent-protocol/tasks-tui.d.ts.map +1 -1
- package/dist/agent-protocol/trace-serializer.d.ts.map +1 -1
- package/dist/agent-protocol/track-execution.d.ts.map +1 -1
- package/dist/agent-protocol/types.d.ts.map +1 -1
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/check-execution-engine.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/config/cli-handler.d.ts.map +1 -1
- package/dist/config/config-reloader.d.ts.map +1 -1
- package/dist/config/config-snapshot-store.d.ts.map +1 -1
- package/dist/config/config-watcher.d.ts.map +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/cron-scheduler.d.ts.map +1 -1
- package/dist/debug-visualizer/debug-span-exporter.d.ts.map +1 -1
- package/dist/debug-visualizer/trace-reader.d.ts.map +1 -1
- package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
- package/dist/dependency-resolver.d.ts.map +1 -1
- package/dist/email/adapter.d.ts.map +1 -1
- package/dist/email/client.d.ts.map +1 -1
- package/dist/email/markdown.d.ts.map +1 -1
- package/dist/email/polling-runner.d.ts.map +1 -1
- package/dist/engine/on-finish/orchestrator.d.ts.map +1 -1
- package/dist/engine/on-finish/utils.d.ts.map +1 -1
- package/dist/enterprise/license/validator.d.ts +39 -0
- package/dist/enterprise/license/validator.d.ts.map +1 -0
- package/dist/enterprise/loader.d.ts +25 -0
- package/dist/enterprise/loader.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-compiler.d.ts +37 -0
- package/dist/enterprise/policy/opa-compiler.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-http-evaluator.d.ts +36 -0
- package/dist/enterprise/policy/opa-http-evaluator.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-policy-engine.d.ts +48 -0
- package/dist/enterprise/policy/opa-policy-engine.d.ts.map +1 -0
- package/dist/enterprise/policy/opa-wasm-evaluator.d.ts +34 -0
- package/dist/enterprise/policy/opa-wasm-evaluator.d.ts.map +1 -0
- package/dist/enterprise/policy/policy-input-builder.d.ts +122 -0
- package/dist/enterprise/policy/policy-input-builder.d.ts.map +1 -0
- package/dist/enterprise/scheduler/knex-store.d.ts +47 -0
- package/dist/enterprise/scheduler/knex-store.d.ts.map +1 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -1
- package/dist/event-bus/types.d.ts.map +1 -1
- package/dist/event-mapper.d.ts.map +1 -1
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/footer.d.ts.map +1 -1
- package/dist/frontends/email-frontend.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts.map +1 -1
- package/dist/frontends/host.d.ts.map +1 -1
- package/dist/frontends/ndjson-sink.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts.map +1 -1
- package/dist/frontends/teams-frontend.d.ts.map +1 -1
- package/dist/frontends/telegram-frontend.d.ts.map +1 -1
- package/dist/frontends/whatsapp-frontend.d.ts.map +1 -1
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/git-repository-analyzer.d.ts.map +1 -1
- package/dist/github-auth.d.ts.map +1 -1
- package/dist/github-check-service.d.ts.map +1 -1
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/github-reactions.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9989 -8155
- package/dist/issue-filter.d.ts.map +1 -1
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/mcp-job-manager.d.ts.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/policy/default-engine.d.ts.map +1 -1
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/policy-check-command.d.ts.map +1 -1
- package/dist/policy/types.d.ts.map +1 -1
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/dist/pr-detector.d.ts.map +1 -1
- package/dist/providers/a2a-check-provider.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/api-tool-executor.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
- package/dist/providers/claude-code-types.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts.map +1 -1
- package/dist/providers/git-checkout-provider.d.ts.map +1 -1
- package/dist/providers/github-ops-provider.d.ts.map +1 -1
- package/dist/providers/http-check-provider.d.ts.map +1 -1
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/http-input-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/mcp-tools.d.ts.map +1 -1
- package/dist/providers/memory-check-provider.d.ts.map +1 -1
- package/dist/providers/noop-check-provider.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts.map +1 -1
- package/dist/providers/utcp-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-tool-executor.d.ts.map +1 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/runners/config-reload-runtime.d.ts.map +1 -1
- package/dist/runners/graceful-restart.d.ts.map +1 -1
- package/dist/runners/mcp-server-runner.d.ts.map +1 -1
- package/dist/runners/process-cli-handler.d.ts.map +1 -1
- package/dist/runners/process-discovery.d.ts.map +1 -1
- package/dist/runners/runner-factory.d.ts.map +1 -1
- package/dist/runners/runner-host.d.ts.map +1 -1
- package/dist/runners/runner.d.ts.map +1 -1
- package/dist/runners/telemetry-init.d.ts.map +1 -1
- package/dist/sandbox/bubblewrap-sandbox.d.ts.map +1 -1
- package/dist/sandbox/cache-volume-manager.d.ts.map +1 -1
- package/dist/sandbox/check-runner.d.ts.map +1 -1
- package/dist/sandbox/compose-generator.d.ts.map +1 -1
- package/dist/sandbox/docker-compose-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-image-sandbox.d.ts.map +1 -1
- package/dist/sandbox/env-filter.d.ts.map +1 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/sandbox-manager.d.ts.map +1 -1
- package/dist/sandbox/sandbox-telemetry.d.ts.map +1 -1
- package/dist/sandbox/seatbelt-sandbox.d.ts.map +1 -1
- package/dist/sandbox/trace-ingester.d.ts.map +1 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/scheduler/cli-handler.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/message-trigger.d.ts.map +1 -1
- package/dist/scheduler/schedule-parser.d.ts.map +1 -1
- package/dist/scheduler/schedule-store.d.ts.map +1 -1
- package/dist/scheduler/schedule-tool.d.ts.map +1 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/store/index.d.ts.map +1 -1
- package/dist/scheduler/store/json-migrator.d.ts.map +1 -1
- package/dist/scheduler/store/sqlite-store.d.ts.map +1 -1
- package/dist/scheduler/store/types.d.ts.map +1 -1
- package/dist/sdk/a2a-frontend-7EGXSULE.mjs +1751 -0
- package/dist/sdk/a2a-frontend-7EGXSULE.mjs.map +1 -0
- package/dist/sdk/{a2a-frontend-XCQ4CQUF.mjs → a2a-frontend-QVKJ7MVW.mjs} +3 -3
- package/dist/sdk/check-provider-registry-IGNTM4MW.mjs +32 -0
- package/dist/sdk/{check-provider-registry-2D3MCWP3.mjs → check-provider-registry-QUUL6JI2.mjs} +6 -6
- package/dist/sdk/chunk-6DDNEBZ7.mjs +6119 -0
- package/dist/sdk/chunk-6DDNEBZ7.mjs.map +1 -0
- package/dist/sdk/{chunk-B2LQT6QU.mjs → chunk-6LQEODDA.mjs} +2 -2
- package/dist/sdk/chunk-6LQEODDA.mjs.map +1 -0
- package/dist/sdk/{chunk-S3GSZRYC.mjs → chunk-7XKHFRPN.mjs} +2 -2
- package/dist/sdk/{chunk-VS3JE2DL.mjs → chunk-BBLBZVWC.mjs} +3 -3
- package/dist/sdk/chunk-D6O5SCPC.mjs +621 -0
- package/dist/sdk/chunk-D6O5SCPC.mjs.map +1 -0
- package/dist/sdk/chunk-H2ZWNJJO.mjs +204 -0
- package/dist/sdk/chunk-H2ZWNJJO.mjs.map +1 -0
- package/dist/sdk/chunk-HMVD3AEC.mjs +47064 -0
- package/dist/sdk/chunk-HMVD3AEC.mjs.map +1 -0
- package/dist/sdk/{chunk-TGQBEM3Y.mjs → chunk-HQCCT6WP.mjs} +203 -203
- package/dist/sdk/chunk-HQCCT6WP.mjs.map +1 -0
- package/dist/sdk/chunk-IY5PQ5EN.mjs +1724 -0
- package/dist/sdk/chunk-IY5PQ5EN.mjs.map +1 -0
- package/dist/sdk/chunk-PDQTEBOJ.mjs +213 -0
- package/dist/sdk/chunk-PDQTEBOJ.mjs.map +1 -0
- package/dist/sdk/chunk-PUHU6UY6.mjs +391 -0
- package/dist/sdk/chunk-PUHU6UY6.mjs.map +1 -0
- package/dist/sdk/chunk-PZADRRLX.mjs +739 -0
- package/dist/sdk/chunk-PZADRRLX.mjs.map +1 -0
- package/dist/sdk/{chunk-YETG675X.mjs → chunk-QLT42TX7.mjs} +2 -2
- package/dist/sdk/chunk-RQDLVMER.mjs +1507 -0
- package/dist/sdk/chunk-RQDLVMER.mjs.map +1 -0
- package/dist/sdk/chunk-TSX3YS3F.mjs +825 -0
- package/dist/sdk/chunk-TSX3YS3F.mjs.map +1 -0
- package/dist/sdk/chunk-WZQMTD7W.mjs +33 -0
- package/dist/sdk/chunk-WZQMTD7W.mjs.map +1 -0
- package/dist/sdk/chunk-XXAEN5KU.mjs +197 -0
- package/dist/sdk/chunk-XXAEN5KU.mjs.map +1 -0
- package/dist/sdk/chunk-ZCBVXBKG.mjs +1150 -0
- package/dist/sdk/chunk-ZCBVXBKG.mjs.map +1 -0
- package/dist/sdk/config-BI5ZXG6D.mjs +16 -0
- package/dist/sdk/dist-NERCHNRR.mjs +7955 -0
- package/dist/sdk/dist-NERCHNRR.mjs.map +1 -0
- package/dist/sdk/{dist-VBYEFQ6T.mjs → dist-YLO6HUFD.mjs} +311 -85
- package/dist/sdk/dist-YLO6HUFD.mjs.map +1 -0
- package/dist/sdk/{email-frontend-AE5TYWNC.mjs → email-frontend-6O454VL5.mjs} +2 -2
- package/dist/sdk/email-frontend-JE7H3LBC.mjs +701 -0
- package/dist/sdk/email-frontend-JE7H3LBC.mjs.map +1 -0
- package/dist/sdk/{failure-condition-evaluator-66PWLV3D.mjs → failure-condition-evaluator-7WHZUYDC.mjs} +4 -4
- package/dist/sdk/failure-condition-evaluator-USY3ISVA.mjs +18 -0
- package/dist/sdk/{github-frontend-BBFKCY4M.mjs → github-frontend-2T5PWYD5.mjs} +4 -4
- package/dist/sdk/github-frontend-RGK4DPRI.mjs +1394 -0
- package/dist/sdk/github-frontend-RGK4DPRI.mjs.map +1 -0
- package/dist/sdk/{host-UQRZDLT7.mjs → host-UZESVA6Z.mjs} +4 -4
- package/dist/sdk/host-YWXWROIE.mjs +87 -0
- package/dist/sdk/host-YWXWROIE.mjs.map +1 -0
- package/dist/sdk/knex-store-KCMFAMH5.mjs +527 -0
- package/dist/sdk/knex-store-KCMFAMH5.mjs.map +1 -0
- package/dist/sdk/loader-35YWX5UQ.mjs +89 -0
- package/dist/sdk/loader-35YWX5UQ.mjs.map +1 -0
- package/dist/sdk/opa-policy-engine-FY5D45YS.mjs +655 -0
- package/dist/sdk/opa-policy-engine-FY5D45YS.mjs.map +1 -0
- package/dist/sdk/{routing-Q647KUMO.mjs → routing-PHHRW2C7.mjs} +5 -5
- package/dist/sdk/routing-TYXT3STD.mjs +26 -0
- package/dist/sdk/schedule-tool-ITD445EO.mjs +38 -0
- package/dist/sdk/schedule-tool-ITD445EO.mjs.map +1 -0
- package/dist/sdk/{schedule-tool-WMGSM6IT.mjs → schedule-tool-ODMIDBMT.mjs} +6 -6
- package/dist/sdk/schedule-tool-ODMIDBMT.mjs.map +1 -0
- package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs +42 -0
- package/dist/sdk/schedule-tool-handler-5WPHFBOG.mjs.map +1 -0
- package/dist/sdk/{schedule-tool-handler-JMDHCGZ2.mjs → schedule-tool-handler-IQSKBFLS.mjs} +6 -6
- package/dist/sdk/schedule-tool-handler-IQSKBFLS.mjs.map +1 -0
- package/dist/sdk/sdk.js +2290 -916
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +5 -5
- package/dist/sdk/session-registry-6PV6SGEJ.mjs +10 -0
- package/dist/sdk/session-registry-6PV6SGEJ.mjs.map +1 -0
- package/dist/sdk/slack-frontend-H7PX5GE7.mjs +985 -0
- package/dist/sdk/slack-frontend-H7PX5GE7.mjs.map +1 -0
- package/dist/sdk/task-evaluator-H3BXC7SE.mjs +263 -0
- package/dist/sdk/task-evaluator-H3BXC7SE.mjs.map +1 -0
- package/dist/sdk/teams-frontend-HCT4MTY4.mjs +342 -0
- package/dist/sdk/teams-frontend-HCT4MTY4.mjs.map +1 -0
- package/dist/sdk/telegram-frontend-YQRYDKPN.mjs +586 -0
- package/dist/sdk/telegram-frontend-YQRYDKPN.mjs.map +1 -0
- package/dist/sdk/{trace-helpers-AIUGQLK5.mjs → trace-helpers-AM2QE5UZ.mjs} +3 -3
- package/dist/sdk/trace-helpers-AM2QE5UZ.mjs.map +1 -0
- package/dist/sdk/trace-helpers-OMF4C24T.mjs +31 -0
- package/dist/sdk/trace-helpers-OMF4C24T.mjs.map +1 -0
- package/dist/sdk/trace-reader-OVE4DL2D.mjs +270 -0
- package/dist/sdk/trace-reader-OVE4DL2D.mjs.map +1 -0
- package/dist/sdk/trace-serializer-EBHTHZYT.mjs +24 -0
- package/dist/sdk/trace-serializer-EBHTHZYT.mjs.map +1 -0
- package/dist/sdk/track-execution-BULXL2XD.mjs +249 -0
- package/dist/sdk/track-execution-BULXL2XD.mjs.map +1 -0
- package/dist/sdk/{track-execution-CFRZXMEC.mjs → track-execution-VJJVJH6K.mjs} +2 -2
- package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs +16 -0
- package/dist/sdk/utcp-check-provider-Q4PD5EP2.mjs.map +1 -0
- package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
- package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
- package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs +438 -0
- package/dist/sdk/whatsapp-frontend-72XEIUIR.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs +32 -0
- package/dist/sdk/workflow-check-provider-OVZDCL4E.mjs.map +1 -0
- package/dist/sdk/{workflow-check-provider-G7A67EPP.mjs → workflow-check-provider-XOWQYWTC.mjs} +6 -6
- package/dist/sdk/workflow-check-provider-XOWQYWTC.mjs.map +1 -0
- package/dist/sdk.d.ts.map +1 -1
- package/dist/session-registry.d.ts.map +1 -1
- package/dist/slack/adapter.d.ts.map +1 -1
- package/dist/slack/cache-prewarmer.d.ts.map +1 -1
- package/dist/slack/client.d.ts.map +1 -1
- package/dist/slack/markdown.d.ts.map +1 -1
- package/dist/slack/prompt-state.d.ts.map +1 -1
- package/dist/slack/rate-limiter.d.ts.map +1 -1
- package/dist/slack/schedule-tool-handler.d.ts.map +1 -1
- package/dist/slack/signature.d.ts.map +1 -1
- package/dist/slack/slack-output-adapter.d.ts.map +1 -1
- package/dist/slack/socket-runner.d.ts +1 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/slack/thread-cache.d.ts.map +1 -1
- package/dist/snapshot-store.d.ts.map +1 -1
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- package/dist/state-machine/context/workflow-inputs.d.ts.map +1 -1
- package/dist/state-machine/dispatch/debounce-manager.d.ts.map +1 -1
- package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -1
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
- package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -1
- package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -1
- package/dist/state-machine/dispatch/policy-gate.d.ts.map +1 -1
- package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -1
- package/dist/state-machine/dispatch/sandbox-routing.d.ts.map +1 -1
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
- package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
- package/dist/state-machine/execution/summary.d.ts.map +1 -1
- package/dist/state-machine/runner.d.ts.map +1 -1
- package/dist/state-machine/states/check-running.d.ts.map +1 -1
- package/dist/state-machine/states/completed.d.ts.map +1 -1
- package/dist/state-machine/states/error.d.ts.map +1 -1
- package/dist/state-machine/states/init.d.ts.map +1 -1
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
- package/dist/state-machine/states/routing.d.ts.map +1 -1
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
- package/dist/state-machine/workflow-projection.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/teams/adapter.d.ts.map +1 -1
- package/dist/teams/client.d.ts.map +1 -1
- package/dist/teams/markdown.d.ts.map +1 -1
- package/dist/teams/webhook-runner.d.ts.map +1 -1
- package/dist/telegram/adapter.d.ts.map +1 -1
- package/dist/telegram/client.d.ts.map +1 -1
- package/dist/telegram/markdown.d.ts.map +1 -1
- package/dist/telegram/polling-runner.d.ts.map +1 -1
- package/dist/telemetry/fallback-ndjson.d.ts.map +1 -1
- package/dist/telemetry/file-span-exporter.d.ts.map +1 -1
- package/dist/telemetry/lazy-otel.d.ts.map +1 -1
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/opentelemetry.d.ts.map +1 -1
- package/dist/telemetry/state-capture.d.ts.map +1 -1
- package/dist/telemetry/trace-helpers.d.ts.map +1 -1
- package/dist/telemetry/trace-report-exporter.d.ts.map +1 -1
- package/dist/test-runner/assertions.d.ts.map +1 -1
- package/dist/test-runner/conversation-sugar.d.ts.map +1 -1
- package/dist/test-runner/core/environment.d.ts.map +1 -1
- package/dist/test-runner/core/fixture.d.ts.map +1 -1
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
- package/dist/test-runner/core/mocks.d.ts.map +1 -1
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
- package/dist/test-runner/evaluators.d.ts.map +1 -1
- package/dist/test-runner/fixture-loader.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/llm-judge.d.ts.map +1 -1
- package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -1
- package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -1
- package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -1
- package/dist/test-runner/utils/selectors.d.ts.map +1 -1
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/tui/chat-runner.d.ts.map +1 -1
- package/dist/tui/chat-state.d.ts.map +1 -1
- package/dist/tui/chat-tui.d.ts.map +1 -1
- package/dist/tui/components/chat-box.d.ts.map +1 -1
- package/dist/tui/components/input-bar.d.ts.map +1 -1
- package/dist/tui/components/status-bar.d.ts.map +1 -1
- package/dist/tui/components/trace-viewer.d.ts.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/tui-frontend.d.ts.map +1 -1
- package/dist/types/bot.d.ts.map +1 -1
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts.map +1 -1
- package/dist/types/execution.d.ts.map +1 -1
- package/dist/types/git-checkout.d.ts.map +1 -1
- package/dist/types/github.d.ts.map +1 -1
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/utils/author-permissions.d.ts.map +1 -1
- package/dist/utils/child-process-error-handler.d.ts.map +1 -1
- package/dist/utils/command-executor.d.ts.map +1 -1
- package/dist/utils/comment-metadata.d.ts.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-merger.d.ts.map +1 -1
- package/dist/utils/diff-processor.d.ts.map +1 -1
- package/dist/utils/env-exposure.d.ts.map +1 -1
- package/dist/utils/env-resolver.d.ts.map +1 -1
- package/dist/utils/fair-concurrency-limiter.d.ts.map +1 -1
- package/dist/utils/file-exclusion.d.ts.map +1 -1
- package/dist/utils/head-sha.d.ts.map +1 -1
- package/dist/utils/human-id.d.ts.map +1 -1
- package/dist/utils/instance-id.d.ts.map +1 -1
- package/dist/utils/interactive-prompt.d.ts.map +1 -1
- package/dist/utils/issue-normalizer.d.ts.map +1 -1
- package/dist/utils/json-text-extractor.d.ts.map +1 -1
- package/dist/utils/mermaid-telemetry.d.ts.map +1 -1
- package/dist/utils/oauth2-token-cache.d.ts.map +1 -1
- package/dist/utils/rate-limiter.d.ts.map +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/script-memory-ops.d.ts.map +1 -1
- package/dist/utils/script-tool-environment.d.ts.map +1 -1
- package/dist/utils/stdin-reader.d.ts.map +1 -1
- package/dist/utils/template-context.d.ts.map +1 -1
- package/dist/utils/tool-resolver.d.ts.map +1 -1
- package/dist/utils/toolkit-expander.d.ts.map +1 -1
- package/dist/utils/tracer-init.d.ts.map +1 -1
- package/dist/utils/ui-helpers.d.ts.map +1 -1
- package/dist/utils/user-facing-error.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts.map +1 -1
- package/dist/utils/worktree-cleanup.d.ts.map +1 -1
- package/dist/utils/worktree-manager.d.ts.map +1 -1
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/whatsapp/adapter.d.ts.map +1 -1
- package/dist/whatsapp/client.d.ts.map +1 -1
- package/dist/whatsapp/markdown.d.ts.map +1 -1
- package/dist/whatsapp/webhook-runner.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts.map +1 -1
- package/dist/workflow-registry.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/output/traces/run-2026-08-20T13-50-06-218Z.ndjson +0 -3148
- package/dist/sdk/chunk-B2LQT6QU.mjs.map +0 -1
- package/dist/sdk/chunk-TGQBEM3Y.mjs.map +0 -1
- package/dist/sdk/dist-VBYEFQ6T.mjs.map +0 -1
- package/dist/traces/run-2026-08-20T13-50-06-218Z.ndjson +0 -3148
- /package/dist/sdk/{a2a-frontend-XCQ4CQUF.mjs.map → a2a-frontend-QVKJ7MVW.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-2D3MCWP3.mjs.map → check-provider-registry-IGNTM4MW.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-66PWLV3D.mjs.map → check-provider-registry-QUUL6JI2.mjs.map} +0 -0
- /package/dist/sdk/{chunk-S3GSZRYC.mjs.map → chunk-7XKHFRPN.mjs.map} +0 -0
- /package/dist/sdk/{chunk-VS3JE2DL.mjs.map → chunk-BBLBZVWC.mjs.map} +0 -0
- /package/dist/sdk/{chunk-YETG675X.mjs.map → chunk-QLT42TX7.mjs.map} +0 -0
- /package/dist/sdk/{routing-Q647KUMO.mjs.map → config-BI5ZXG6D.mjs.map} +0 -0
- /package/dist/sdk/{email-frontend-AE5TYWNC.mjs.map → email-frontend-6O454VL5.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-WMGSM6IT.mjs.map → failure-condition-evaluator-7WHZUYDC.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-JMDHCGZ2.mjs.map → failure-condition-evaluator-USY3ISVA.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-BBFKCY4M.mjs.map → github-frontend-2T5PWYD5.mjs.map} +0 -0
- /package/dist/sdk/{host-UQRZDLT7.mjs.map → host-UZESVA6Z.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-AIUGQLK5.mjs.map → routing-PHHRW2C7.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-G7A67EPP.mjs.map → routing-TYXT3STD.mjs.map} +0 -0
- /package/dist/sdk/{track-execution-CFRZXMEC.mjs.map → track-execution-VJJVJH6K.mjs.map} +0 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_task_live_updates,
|
|
3
|
+
isFrontendLiveUpdatesEnabled
|
|
4
|
+
} from "./chunk-D6O5SCPC.mjs";
|
|
5
|
+
import "./chunk-IY5PQ5EN.mjs";
|
|
6
|
+
import "./chunk-6E625R3C.mjs";
|
|
7
|
+
import "./chunk-B2OUZAWY.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__esm
|
|
10
|
+
} from "./chunk-J7LXIPZS.mjs";
|
|
11
|
+
|
|
12
|
+
// src/teams/markdown.ts
|
|
13
|
+
function markdownToTeams(text) {
|
|
14
|
+
if (!text || typeof text !== "string") return "";
|
|
15
|
+
return text;
|
|
16
|
+
}
|
|
17
|
+
function chunkText(text, limit = 28e3) {
|
|
18
|
+
if (text.length <= limit) return [text];
|
|
19
|
+
const chunks = [];
|
|
20
|
+
const lines = text.split("\n");
|
|
21
|
+
let current = "";
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
const candidate = current ? current + "\n" + line : line;
|
|
24
|
+
if (candidate.length > limit) {
|
|
25
|
+
if (current) {
|
|
26
|
+
chunks.push(current);
|
|
27
|
+
current = line;
|
|
28
|
+
} else {
|
|
29
|
+
let remaining = line;
|
|
30
|
+
while (remaining.length > limit) {
|
|
31
|
+
chunks.push(remaining.slice(0, limit));
|
|
32
|
+
remaining = remaining.slice(limit);
|
|
33
|
+
}
|
|
34
|
+
current = remaining;
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
current = candidate;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (current) chunks.push(current);
|
|
41
|
+
return chunks;
|
|
42
|
+
}
|
|
43
|
+
function formatTeamsText(text) {
|
|
44
|
+
return markdownToTeams(text);
|
|
45
|
+
}
|
|
46
|
+
var init_markdown = __esm({
|
|
47
|
+
"src/teams/markdown.ts"() {
|
|
48
|
+
"use strict";
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// src/teams/client.ts
|
|
53
|
+
import {
|
|
54
|
+
CloudAdapter,
|
|
55
|
+
ConfigurationBotFrameworkAuthentication,
|
|
56
|
+
MessageFactory
|
|
57
|
+
} from "botbuilder";
|
|
58
|
+
var TeamsClient;
|
|
59
|
+
var init_client = __esm({
|
|
60
|
+
"src/teams/client.ts"() {
|
|
61
|
+
"use strict";
|
|
62
|
+
init_markdown();
|
|
63
|
+
TeamsClient = class {
|
|
64
|
+
appId;
|
|
65
|
+
appPassword;
|
|
66
|
+
tenantId;
|
|
67
|
+
adapter;
|
|
68
|
+
constructor(opts) {
|
|
69
|
+
if (!opts.appId) throw new Error("TeamsClient: appId is required");
|
|
70
|
+
if (!opts.appPassword) throw new Error("TeamsClient: appPassword is required");
|
|
71
|
+
this.appId = opts.appId;
|
|
72
|
+
this.appPassword = opts.appPassword;
|
|
73
|
+
this.tenantId = opts.tenantId;
|
|
74
|
+
const auth = new ConfigurationBotFrameworkAuthentication({
|
|
75
|
+
MicrosoftAppId: this.appId,
|
|
76
|
+
MicrosoftAppPassword: this.appPassword,
|
|
77
|
+
MicrosoftAppTenantId: this.tenantId || ""
|
|
78
|
+
});
|
|
79
|
+
this.adapter = new CloudAdapter(auth);
|
|
80
|
+
}
|
|
81
|
+
/** Get the underlying CloudAdapter (used by webhook runner for processing inbound) */
|
|
82
|
+
getAdapter() {
|
|
83
|
+
return this.adapter;
|
|
84
|
+
}
|
|
85
|
+
/** Get the configured App ID */
|
|
86
|
+
getAppId() {
|
|
87
|
+
return this.appId;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Send a text message using a stored conversation reference.
|
|
91
|
+
* Auto-chunks at 28000 characters.
|
|
92
|
+
*/
|
|
93
|
+
async sendMessage(opts) {
|
|
94
|
+
const chunks = chunkText(opts.text, 28e3);
|
|
95
|
+
let lastActivityId;
|
|
96
|
+
for (const chunk of chunks) {
|
|
97
|
+
try {
|
|
98
|
+
await this.adapter.continueConversationAsync(
|
|
99
|
+
this.appId,
|
|
100
|
+
opts.conversationReference,
|
|
101
|
+
async (turnContext) => {
|
|
102
|
+
const activity = MessageFactory.text(chunk);
|
|
103
|
+
if (opts.replyToActivityId) {
|
|
104
|
+
activity.replyToId = opts.replyToActivityId;
|
|
105
|
+
}
|
|
106
|
+
const response = await turnContext.sendActivity(activity);
|
|
107
|
+
lastActivityId = response?.id;
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
} catch (err) {
|
|
111
|
+
return {
|
|
112
|
+
ok: false,
|
|
113
|
+
error: err instanceof Error ? err.message : String(err)
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { ok: true, activityId: lastActivityId };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Update an existing bot message.
|
|
121
|
+
* For safety, only supports single-activity payloads. Oversized content returns msg_too_long.
|
|
122
|
+
*/
|
|
123
|
+
async updateMessage(opts) {
|
|
124
|
+
const chunks = chunkText(opts.text, 28e3);
|
|
125
|
+
if (chunks.length > 1) {
|
|
126
|
+
return { ok: false, error: "msg_too_long" };
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
await this.adapter.continueConversationAsync(
|
|
130
|
+
this.appId,
|
|
131
|
+
opts.conversationReference,
|
|
132
|
+
async (turnContext) => {
|
|
133
|
+
const activity = MessageFactory.text(chunks[0] || "");
|
|
134
|
+
activity.id = opts.activityId;
|
|
135
|
+
await turnContext.updateActivity(activity);
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
return { ok: true, activityId: opts.activityId };
|
|
139
|
+
} catch (err) {
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
error: err instanceof Error ? err.message : String(err)
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Delete a previously sent bot message.
|
|
148
|
+
*/
|
|
149
|
+
async deleteMessage(opts) {
|
|
150
|
+
try {
|
|
151
|
+
await this.adapter.continueConversationAsync(
|
|
152
|
+
this.appId,
|
|
153
|
+
opts.conversationReference,
|
|
154
|
+
async (turnContext) => {
|
|
155
|
+
await turnContext.deleteActivity(opts.activityId);
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
return true;
|
|
159
|
+
} catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// src/frontends/teams-frontend.ts
|
|
168
|
+
var TeamsFrontend;
|
|
169
|
+
var init_teams_frontend = __esm({
|
|
170
|
+
"src/frontends/teams-frontend.ts"() {
|
|
171
|
+
init_client();
|
|
172
|
+
init_markdown();
|
|
173
|
+
init_task_live_updates();
|
|
174
|
+
TeamsFrontend = class {
|
|
175
|
+
name = "teams";
|
|
176
|
+
subs = [];
|
|
177
|
+
cfg;
|
|
178
|
+
errorNotified = false;
|
|
179
|
+
constructor(config) {
|
|
180
|
+
this.cfg = config || {};
|
|
181
|
+
}
|
|
182
|
+
start(ctx) {
|
|
183
|
+
const bus = ctx.eventBus;
|
|
184
|
+
try {
|
|
185
|
+
ctx.logger.info(`[teams-frontend] started`);
|
|
186
|
+
} catch {
|
|
187
|
+
}
|
|
188
|
+
this.subs.push(
|
|
189
|
+
bus.on("CheckCompleted", async (env) => {
|
|
190
|
+
const ev = env && env.payload || env;
|
|
191
|
+
await this.maybePostDirectReply(ctx, ev.checkId, ev.result).catch(() => {
|
|
192
|
+
});
|
|
193
|
+
})
|
|
194
|
+
);
|
|
195
|
+
this.subs.push(
|
|
196
|
+
bus.on("CheckErrored", async (env) => {
|
|
197
|
+
const ev = env && env.payload || env;
|
|
198
|
+
const message = ev?.error?.message || "Execution error";
|
|
199
|
+
await this.maybePostError(ctx, "Check failed", message, ev?.checkId).catch(() => {
|
|
200
|
+
});
|
|
201
|
+
})
|
|
202
|
+
);
|
|
203
|
+
this.subs.push(
|
|
204
|
+
bus.on("Shutdown", async (env) => {
|
|
205
|
+
const ev = env && env.payload || env;
|
|
206
|
+
const message = ev?.error?.message || "Fatal error";
|
|
207
|
+
await this.maybePostError(ctx, "Run failed", message).catch(() => {
|
|
208
|
+
});
|
|
209
|
+
})
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
stop() {
|
|
213
|
+
for (const s of this.subs) s.unsubscribe();
|
|
214
|
+
this.subs = [];
|
|
215
|
+
}
|
|
216
|
+
getTeams(ctx) {
|
|
217
|
+
const injected = ctx.teams || ctx.teamsClient;
|
|
218
|
+
if (injected) return injected;
|
|
219
|
+
try {
|
|
220
|
+
const appId = this.cfg.appId || process.env.TEAMS_APP_ID;
|
|
221
|
+
const appPassword = this.cfg.appPassword || process.env.TEAMS_APP_PASSWORD;
|
|
222
|
+
if (typeof appId === "string" && appId.trim() && typeof appPassword === "string" && appPassword.trim()) {
|
|
223
|
+
return new TeamsClient({
|
|
224
|
+
appId: appId.trim(),
|
|
225
|
+
appPassword: appPassword.trim(),
|
|
226
|
+
tenantId: this.cfg.tenantId || process.env.TEAMS_TENANT_ID
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
} catch {
|
|
230
|
+
}
|
|
231
|
+
return void 0;
|
|
232
|
+
}
|
|
233
|
+
getInboundTeamsPayload(ctx) {
|
|
234
|
+
try {
|
|
235
|
+
const endpoint = "/bots/teams/message";
|
|
236
|
+
return ctx.webhookContext?.webhookData?.get(endpoint) || null;
|
|
237
|
+
} catch {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async maybePostError(ctx, title, message, _checkId) {
|
|
242
|
+
if (this.errorNotified) return;
|
|
243
|
+
const teams = this.getTeams(ctx);
|
|
244
|
+
if (!teams) return;
|
|
245
|
+
const payload = this.getInboundTeamsPayload(ctx);
|
|
246
|
+
const conversationRef = payload?.teams_conversation_reference;
|
|
247
|
+
if (!conversationRef) return;
|
|
248
|
+
const ev = payload?.event;
|
|
249
|
+
let text = `${title}`;
|
|
250
|
+
if (_checkId) text += `
|
|
251
|
+
Check: ${_checkId}`;
|
|
252
|
+
if (message) text += `
|
|
253
|
+
${message}`;
|
|
254
|
+
await teams.sendMessage({
|
|
255
|
+
conversationReference: conversationRef,
|
|
256
|
+
text,
|
|
257
|
+
replyToActivityId: ev?.activity_id
|
|
258
|
+
});
|
|
259
|
+
this.errorNotified = true;
|
|
260
|
+
}
|
|
261
|
+
async maybePostDirectReply(ctx, checkId, result) {
|
|
262
|
+
try {
|
|
263
|
+
const cfg = ctx.config || {};
|
|
264
|
+
const checkCfg = cfg.checks?.[checkId];
|
|
265
|
+
if (!checkCfg) return;
|
|
266
|
+
const providerType = checkCfg.type || "";
|
|
267
|
+
const isAi = providerType === "ai";
|
|
268
|
+
const isLogChat = providerType === "log" && checkCfg.group === "chat";
|
|
269
|
+
const isWorkflow = providerType === "workflow";
|
|
270
|
+
if (!isAi && !isLogChat && !isWorkflow) return;
|
|
271
|
+
if (checkCfg.criticality === "internal") return;
|
|
272
|
+
if (isFrontendLiveUpdatesEnabled(cfg.task_live_updates, "teams")) return;
|
|
273
|
+
if (isAi) {
|
|
274
|
+
const schema = checkCfg.schema;
|
|
275
|
+
if (typeof schema === "string") {
|
|
276
|
+
const simpleSchemas = ["code-review", "markdown", "text", "plain"];
|
|
277
|
+
if (!simpleSchemas.includes(schema)) return;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
const teams = this.getTeams(ctx);
|
|
281
|
+
if (!teams) return;
|
|
282
|
+
const payload = this.getInboundTeamsPayload(ctx);
|
|
283
|
+
const conversationRef = payload?.teams_conversation_reference;
|
|
284
|
+
if (!conversationRef) {
|
|
285
|
+
ctx.logger.warn(
|
|
286
|
+
`[teams-frontend] skip posting reply for ${checkId}: missing conversation reference`
|
|
287
|
+
);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
const ev = payload?.event;
|
|
291
|
+
const out = result?.output;
|
|
292
|
+
let text;
|
|
293
|
+
if (out && typeof out.text === "string" && out.text.trim().length > 0) {
|
|
294
|
+
text = out.text.trim();
|
|
295
|
+
} else if (isAi && typeof checkCfg.schema === "string") {
|
|
296
|
+
if (typeof result?.content === "string" && result.content.trim().length > 0) {
|
|
297
|
+
text = result.content.trim();
|
|
298
|
+
}
|
|
299
|
+
} else if (isLogChat && typeof result?.logOutput === "string") {
|
|
300
|
+
const raw = result.logOutput;
|
|
301
|
+
if (raw.trim().length > 0) text = raw.trim();
|
|
302
|
+
}
|
|
303
|
+
if (out && typeof out._rawOutput === "string" && out._rawOutput.trim().length > 0) {
|
|
304
|
+
text = (text || "") + "\n\n" + out._rawOutput.trim();
|
|
305
|
+
}
|
|
306
|
+
if (!text) {
|
|
307
|
+
ctx.logger.info(`[teams-frontend] skip posting reply for ${checkId}: no renderable text`);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
text = text.replace(/\\n/g, "\n");
|
|
311
|
+
const formattedText = formatTeamsText(text);
|
|
312
|
+
const postResult = await teams.sendMessage({
|
|
313
|
+
conversationReference: conversationRef,
|
|
314
|
+
text: formattedText,
|
|
315
|
+
replyToActivityId: ev?.activity_id
|
|
316
|
+
});
|
|
317
|
+
if (!postResult.ok) {
|
|
318
|
+
ctx.logger.warn(
|
|
319
|
+
`[teams-frontend] failed to post reply for ${checkId}: ${postResult.error}`
|
|
320
|
+
);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
ctx.logger.info(
|
|
324
|
+
`[teams-frontend] posted reply for ${checkId} (activityId=${postResult.activityId})`
|
|
325
|
+
);
|
|
326
|
+
} catch (err) {
|
|
327
|
+
try {
|
|
328
|
+
ctx.logger.warn(
|
|
329
|
+
`[teams-frontend] maybePostDirectReply failed for ${checkId}: ${err instanceof Error ? err.message : String(err)}`
|
|
330
|
+
);
|
|
331
|
+
} catch {
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
init_teams_frontend();
|
|
339
|
+
export {
|
|
340
|
+
TeamsFrontend
|
|
341
|
+
};
|
|
342
|
+
//# sourceMappingURL=teams-frontend-HCT4MTY4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/teams/markdown.ts","../../src/teams/client.ts","../../src/frontends/teams-frontend.ts"],"sourcesContent":["// Lightweight Markdown → Teams formatter.\n// Teams supports standard Markdown natively, so minimal conversion is needed.\n// Main job: ensure text stays within Teams message size limits (~28KB).\n//\n// Teams natively supports:\n// - **bold** / __bold__\n// - *italic* / _italic_\n// - ~~strikethrough~~\n// - `code` and ```code blocks```\n// - [links](url)\n// - > blockquotes\n// - Bullet and numbered lists\n// - # Headers (in Adaptive Cards; plain text uses bold)\n//\n// Teams bot text messages have a ~28KB size limit.\n\n/**\n * Convert Markdown text to Teams-compatible format.\n * Teams renders standard Markdown, so this is mostly a passthrough.\n * Strips any raw HTML tags that might leak from AI output.\n */\nexport function markdownToTeams(text: string): string {\n if (!text || typeof text !== 'string') return '';\n return text;\n}\n\n/**\n * Chunk text into segments no larger than limit, splitting at newlines.\n */\nexport function chunkText(text: string, limit: number = 28000): string[] {\n if (text.length <= limit) return [text];\n\n const chunks: string[] = [];\n const lines = text.split('\\n');\n let current = '';\n\n for (const line of lines) {\n const candidate = current ? current + '\\n' + line : line;\n if (candidate.length > limit) {\n if (current) {\n chunks.push(current);\n current = line;\n } else {\n // Single line exceeds limit — force split\n let remaining = line;\n while (remaining.length > limit) {\n chunks.push(remaining.slice(0, limit));\n remaining = remaining.slice(limit);\n }\n current = remaining;\n }\n } else {\n current = candidate;\n }\n }\n if (current) chunks.push(current);\n\n return chunks;\n}\n\n/**\n * Main entry point: convert Markdown to Teams format.\n */\nexport function formatTeamsText(text: string): string {\n return markdownToTeams(text);\n}\n","// Microsoft Teams Bot Framework API client.\n// Wraps the botbuilder SDK for sending messages via Bot Framework.\n\nimport {\n CloudAdapter,\n ConfigurationBotFrameworkAuthentication,\n TurnContext,\n MessageFactory,\n} from 'botbuilder';\nimport type { ConversationReference } from 'botbuilder';\nimport { chunkText } from './markdown';\n\nexport interface TeamsSendResult {\n ok: boolean;\n activityId?: string;\n error?: string;\n}\n\nexport interface TeamsClientOptions {\n appId: string;\n appPassword: string;\n tenantId?: string;\n}\n\nexport class TeamsClient {\n private appId: string;\n private appPassword: string;\n private tenantId?: string;\n private adapter: CloudAdapter;\n\n constructor(opts: TeamsClientOptions) {\n if (!opts.appId) throw new Error('TeamsClient: appId is required');\n if (!opts.appPassword) throw new Error('TeamsClient: appPassword is required');\n this.appId = opts.appId;\n this.appPassword = opts.appPassword;\n this.tenantId = opts.tenantId;\n\n const auth = new ConfigurationBotFrameworkAuthentication({\n MicrosoftAppId: this.appId,\n MicrosoftAppPassword: this.appPassword,\n MicrosoftAppTenantId: this.tenantId || '',\n });\n this.adapter = new CloudAdapter(auth);\n }\n\n /** Get the underlying CloudAdapter (used by webhook runner for processing inbound) */\n getAdapter(): CloudAdapter {\n return this.adapter;\n }\n\n /** Get the configured App ID */\n getAppId(): string {\n return this.appId;\n }\n\n /**\n * Send a text message using a stored conversation reference.\n * Auto-chunks at 28000 characters.\n */\n async sendMessage(opts: {\n conversationReference: ConversationReference;\n text: string;\n replyToActivityId?: string;\n }): Promise<TeamsSendResult> {\n const chunks = chunkText(opts.text, 28000);\n let lastActivityId: string | undefined;\n\n for (const chunk of chunks) {\n try {\n await this.adapter.continueConversationAsync(\n this.appId,\n opts.conversationReference,\n async (turnContext: TurnContext) => {\n const activity = MessageFactory.text(chunk);\n if (opts.replyToActivityId) {\n activity.replyToId = opts.replyToActivityId;\n }\n const response = await turnContext.sendActivity(activity);\n lastActivityId = response?.id;\n }\n );\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n return { ok: true, activityId: lastActivityId };\n }\n\n /**\n * Update an existing bot message.\n * For safety, only supports single-activity payloads. Oversized content returns msg_too_long.\n */\n async updateMessage(opts: {\n conversationReference: ConversationReference;\n activityId: string;\n text: string;\n }): Promise<TeamsSendResult> {\n const chunks = chunkText(opts.text, 28000);\n if (chunks.length > 1) {\n return { ok: false, error: 'msg_too_long' };\n }\n\n try {\n await this.adapter.continueConversationAsync(\n this.appId,\n opts.conversationReference,\n async (turnContext: TurnContext) => {\n const activity = MessageFactory.text(chunks[0] || '');\n activity.id = opts.activityId;\n await turnContext.updateActivity(activity);\n }\n );\n return { ok: true, activityId: opts.activityId };\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n /**\n * Delete a previously sent bot message.\n */\n async deleteMessage(opts: {\n conversationReference: ConversationReference;\n activityId: string;\n }): Promise<boolean> {\n try {\n await this.adapter.continueConversationAsync(\n this.appId,\n opts.conversationReference,\n async (turnContext: TurnContext) => {\n await turnContext.deleteActivity(opts.activityId);\n }\n );\n return true;\n } catch {\n return false;\n }\n }\n}\n","/**\n * Microsoft Teams Frontend for Visor workflows.\n *\n * Mirrors the WhatsAppFrontend pattern:\n * - Sends AI replies as Teams text messages\n * - Uses standard Markdown (Teams renders it natively)\n * - No reaction equivalent (CheckScheduled is a no-op)\n */\nimport type { Frontend, FrontendContext } from './host';\nimport { TeamsClient } from '../teams/client';\nimport { formatTeamsText } from '../teams/markdown';\nimport type { ConversationReference } from 'botbuilder';\nimport { isFrontendLiveUpdatesEnabled } from '../agent-protocol/task-live-updates';\n\ntype TeamsFrontendConfig = {\n appId?: string;\n appPassword?: string;\n tenantId?: string;\n};\n\nexport class TeamsFrontend implements Frontend {\n public readonly name = 'teams';\n private subs: Array<{ unsubscribe(): void }> = [];\n private cfg: TeamsFrontendConfig;\n private errorNotified: boolean = false;\n\n constructor(config?: TeamsFrontendConfig) {\n this.cfg = config || {};\n }\n\n start(ctx: FrontendContext): void {\n const bus = ctx.eventBus;\n\n try {\n ctx.logger.info(`[teams-frontend] started`);\n } catch {}\n\n // CheckCompleted: post AI replies\n this.subs.push(\n bus.on('CheckCompleted', async (env: any) => {\n const ev = (env && env.payload) || env;\n await this.maybePostDirectReply(ctx, ev.checkId, ev.result).catch(() => {});\n })\n );\n\n // CheckErrored: post error notice\n this.subs.push(\n bus.on('CheckErrored', async (env: any) => {\n const ev = (env && env.payload) || env;\n const message = ev?.error?.message || 'Execution error';\n await this.maybePostError(ctx, 'Check failed', message, ev?.checkId).catch(() => {});\n })\n );\n\n // Shutdown: post error\n this.subs.push(\n bus.on('Shutdown', async (env: any) => {\n const ev = (env && env.payload) || env;\n const message = ev?.error?.message || 'Fatal error';\n await this.maybePostError(ctx, 'Run failed', message).catch(() => {});\n })\n );\n\n // CheckScheduled: no-op (Teams has no reaction equivalent for text messages)\n // StateTransition: no-op\n }\n\n stop(): void {\n for (const s of this.subs) s.unsubscribe();\n this.subs = [];\n }\n\n private getTeams(ctx: FrontendContext): TeamsClient | undefined {\n // Prefer injected client (for tests or shared runner context)\n const injected = (ctx as any).teams || (ctx as any).teamsClient;\n if (injected) return injected;\n // Lazy-create from env or frontend config\n try {\n const appId = this.cfg.appId || process.env.TEAMS_APP_ID;\n const appPassword = this.cfg.appPassword || process.env.TEAMS_APP_PASSWORD;\n if (\n typeof appId === 'string' &&\n appId.trim() &&\n typeof appPassword === 'string' &&\n appPassword.trim()\n ) {\n return new TeamsClient({\n appId: appId.trim(),\n appPassword: appPassword.trim(),\n tenantId: this.cfg.tenantId || process.env.TEAMS_TENANT_ID,\n });\n }\n } catch {}\n return undefined;\n }\n\n private getInboundTeamsPayload(ctx: FrontendContext): any | null {\n try {\n const endpoint = '/bots/teams/message';\n return (ctx as any).webhookContext?.webhookData?.get(endpoint) || null;\n } catch {\n return null;\n }\n }\n\n private async maybePostError(\n ctx: FrontendContext,\n title: string,\n message: string,\n _checkId?: string\n ): Promise<void> {\n if (this.errorNotified) return;\n const teams = this.getTeams(ctx);\n if (!teams) return;\n const payload = this.getInboundTeamsPayload(ctx);\n const conversationRef: ConversationReference | undefined =\n payload?.teams_conversation_reference;\n if (!conversationRef) return;\n const ev: any = payload?.event;\n\n let text = `${title}`;\n if (_checkId) text += `\\nCheck: ${_checkId}`;\n if (message) text += `\\n${message}`;\n\n await teams.sendMessage({\n conversationReference: conversationRef,\n text,\n replyToActivityId: ev?.activity_id,\n });\n this.errorNotified = true;\n }\n\n private async maybePostDirectReply(\n ctx: FrontendContext,\n checkId: string,\n result: { output?: any; content?: string }\n ): Promise<void> {\n try {\n const cfg: any = ctx.config || {};\n const checkCfg: any = cfg.checks?.[checkId];\n if (!checkCfg) return;\n\n const providerType = (checkCfg.type as string) || '';\n const isAi = providerType === 'ai';\n const isLogChat = providerType === 'log' && checkCfg.group === 'chat';\n const isWorkflow = providerType === 'workflow';\n if (!isAi && !isLogChat && !isWorkflow) return;\n if (checkCfg.criticality === 'internal') return;\n if (isFrontendLiveUpdatesEnabled((cfg as any).task_live_updates, 'teams')) return;\n\n // For AI checks, only post simple schemas\n if (isAi) {\n const schema = checkCfg.schema;\n if (typeof schema === 'string') {\n const simpleSchemas = ['code-review', 'markdown', 'text', 'plain'];\n if (!simpleSchemas.includes(schema)) return;\n }\n }\n\n const teams = this.getTeams(ctx);\n if (!teams) return;\n\n const payload = this.getInboundTeamsPayload(ctx);\n const conversationRef: ConversationReference | undefined =\n payload?.teams_conversation_reference;\n if (!conversationRef) {\n ctx.logger.warn(\n `[teams-frontend] skip posting reply for ${checkId}: missing conversation reference`\n );\n return;\n }\n const ev: any = payload?.event;\n\n // Extract text (same logic as WhatsApp/Telegram/Email/Slack frontends)\n const out: any = (result as any)?.output;\n let text: string | undefined;\n if (out && typeof out.text === 'string' && out.text.trim().length > 0) {\n text = out.text.trim();\n } else if (isAi && typeof checkCfg.schema === 'string') {\n if (\n typeof (result as any)?.content === 'string' &&\n (result as any).content.trim().length > 0\n ) {\n text = (result as any).content.trim();\n }\n } else if (isLogChat && typeof (result as any)?.logOutput === 'string') {\n const raw = (result as any).logOutput;\n if (raw.trim().length > 0) text = raw.trim();\n }\n\n // Append raw output\n if (out && typeof out._rawOutput === 'string' && out._rawOutput.trim().length > 0) {\n text = (text || '') + '\\n\\n' + out._rawOutput.trim();\n }\n\n if (!text) {\n ctx.logger.info(`[teams-frontend] skip posting reply for ${checkId}: no renderable text`);\n return;\n }\n\n // Normalize literal \\n escape sequences\n text = text.replace(/\\\\n/g, '\\n');\n\n const formattedText = formatTeamsText(text);\n const postResult = await teams.sendMessage({\n conversationReference: conversationRef,\n text: formattedText,\n replyToActivityId: ev?.activity_id,\n });\n\n if (!postResult.ok) {\n ctx.logger.warn(\n `[teams-frontend] failed to post reply for ${checkId}: ${postResult.error}`\n );\n return;\n }\n ctx.logger.info(\n `[teams-frontend] posted reply for ${checkId} (activityId=${postResult.activityId})`\n );\n } catch (err) {\n try {\n ctx.logger.warn(\n `[teams-frontend] maybePostDirectReply failed for ${checkId}: ${\n err instanceof Error ? err.message : String(err)\n }`\n );\n } catch {}\n }\n }\n}\n"],"mappings":"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","names":[]}
|