@bradygaster/squad-sdk 0.7.0 → 0.8.2-1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/adapter/client.d.ts +246 -0
- package/dist/adapter/client.d.ts.map +1 -0
- package/dist/adapter/client.js +699 -0
- package/dist/adapter/client.js.map +1 -0
- package/dist/adapter/errors.d.ts +260 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +362 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/types.d.ts +817 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +11 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/agents/charter-compiler.d.ts +106 -0
- package/dist/agents/charter-compiler.d.ts.map +1 -0
- package/dist/agents/charter-compiler.js +165 -0
- package/dist/agents/charter-compiler.js.map +1 -0
- package/dist/agents/history-shadow.d.ts +80 -0
- package/dist/agents/history-shadow.d.ts.map +1 -0
- package/dist/agents/history-shadow.js +239 -0
- package/dist/agents/history-shadow.js.map +1 -0
- package/dist/agents/index.d.ts +71 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +183 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/lifecycle.d.ts +138 -0
- package/dist/agents/lifecycle.d.ts.map +1 -0
- package/dist/agents/lifecycle.js +284 -0
- package/dist/agents/lifecycle.js.map +1 -0
- package/dist/agents/model-selector.d.ts +80 -0
- package/dist/agents/model-selector.d.ts.map +1 -0
- package/dist/agents/model-selector.js +171 -0
- package/dist/agents/model-selector.js.map +1 -0
- package/dist/agents/onboarding.d.ts +65 -0
- package/dist/agents/onboarding.d.ts.map +1 -0
- package/dist/agents/onboarding.js +373 -0
- package/dist/agents/onboarding.js.map +1 -0
- package/dist/build/bundle.d.ts +32 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +97 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/ci-pipeline.d.ts +51 -0
- package/dist/build/ci-pipeline.d.ts.map +1 -0
- package/dist/build/ci-pipeline.js +180 -0
- package/dist/build/ci-pipeline.js.map +1 -0
- package/dist/build/github-dist.d.ts +37 -0
- package/dist/build/github-dist.d.ts.map +1 -0
- package/dist/build/github-dist.js +117 -0
- package/dist/build/github-dist.js.map +1 -0
- package/dist/build/index.d.ts +11 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +11 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/install-migration.d.ts +28 -0
- package/dist/build/install-migration.d.ts.map +1 -0
- package/dist/build/install-migration.js +103 -0
- package/dist/build/install-migration.js.map +1 -0
- package/dist/build/npm-package.d.ts +54 -0
- package/dist/build/npm-package.d.ts.map +1 -0
- package/dist/build/npm-package.js +128 -0
- package/dist/build/npm-package.js.map +1 -0
- package/dist/build/release.d.ts +108 -0
- package/dist/build/release.d.ts.map +1 -0
- package/dist/build/release.js +295 -0
- package/dist/build/release.js.map +1 -0
- package/dist/build/versioning.d.ts +38 -0
- package/dist/build/versioning.d.ts.map +1 -0
- package/dist/build/versioning.js +113 -0
- package/dist/build/versioning.js.map +1 -0
- package/dist/builders/index.d.ts +156 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/index.js +404 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/types.d.ts +187 -0
- package/dist/builders/types.d.ts.map +1 -0
- package/dist/builders/types.js +12 -0
- package/dist/builders/types.js.map +1 -0
- package/dist/casting/casting-engine.d.ts +60 -0
- package/dist/casting/casting-engine.d.ts.map +1 -0
- package/dist/casting/casting-engine.js +223 -0
- package/dist/casting/casting-engine.js.map +1 -0
- package/dist/casting/casting-history.d.ts +54 -0
- package/dist/casting/casting-history.d.ts.map +1 -0
- package/dist/casting/casting-history.js +63 -0
- package/dist/casting/casting-history.js.map +1 -0
- package/dist/casting/index.d.ts +46 -0
- package/dist/casting/index.d.ts.map +1 -0
- package/dist/casting/index.js +45 -0
- package/dist/casting/index.js.map +1 -0
- package/dist/client/event-bus.d.ts +29 -0
- package/dist/client/event-bus.d.ts.map +1 -0
- package/dist/client/event-bus.js +52 -0
- package/dist/client/event-bus.js.map +1 -0
- package/dist/client/index.d.ts +103 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +182 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/session-pool.d.ts +66 -0
- package/dist/client/session-pool.d.ts.map +1 -0
- package/dist/client/session-pool.js +145 -0
- package/dist/client/session-pool.js.map +1 -0
- package/dist/config/agent-doc.d.ts +43 -0
- package/dist/config/agent-doc.d.ts.map +1 -0
- package/dist/config/agent-doc.js +158 -0
- package/dist/config/agent-doc.js.map +1 -0
- package/dist/config/agent-source.d.ts +95 -0
- package/dist/config/agent-source.d.ts.map +1 -0
- package/dist/config/agent-source.js +274 -0
- package/dist/config/agent-source.js.map +1 -0
- package/dist/config/doc-sync.d.ts +66 -0
- package/dist/config/doc-sync.d.ts.map +1 -0
- package/dist/config/doc-sync.js +270 -0
- package/dist/config/doc-sync.js.map +1 -0
- package/dist/config/feature-audit.d.ts +49 -0
- package/dist/config/feature-audit.d.ts.map +1 -0
- package/dist/config/feature-audit.js +148 -0
- package/dist/config/feature-audit.js.map +1 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +15 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/init.d.ts +86 -0
- package/dist/config/init.d.ts.map +1 -0
- package/dist/config/init.js +807 -0
- package/dist/config/init.js.map +1 -0
- package/dist/config/legacy-fallback.d.ts +83 -0
- package/dist/config/legacy-fallback.d.ts.map +1 -0
- package/dist/config/legacy-fallback.js +212 -0
- package/dist/config/legacy-fallback.js.map +1 -0
- package/dist/config/markdown-migration.d.ts +157 -0
- package/dist/config/markdown-migration.d.ts.map +1 -0
- package/dist/config/markdown-migration.js +434 -0
- package/dist/config/markdown-migration.js.map +1 -0
- package/dist/config/migration.d.ts +123 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +273 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/migrations/index.d.ts +36 -0
- package/dist/config/migrations/index.d.ts.map +1 -0
- package/dist/config/migrations/index.js +216 -0
- package/dist/config/migrations/index.js.map +1 -0
- package/dist/config/models.d.ts +134 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +354 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/routing.d.ts +118 -0
- package/dist/config/routing.d.ts.map +1 -0
- package/dist/config/routing.js +247 -0
- package/dist/config/routing.js.map +1 -0
- package/dist/config/schema.d.ts +72 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/coordinator/coordinator.d.ts +82 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +192 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/direct-response.d.ts +83 -0
- package/dist/coordinator/direct-response.d.ts.map +1 -0
- package/dist/coordinator/direct-response.js +187 -0
- package/dist/coordinator/direct-response.js.map +1 -0
- package/dist/coordinator/fan-out.d.ts +83 -0
- package/dist/coordinator/fan-out.d.ts.map +1 -0
- package/dist/coordinator/fan-out.js +161 -0
- package/dist/coordinator/fan-out.js.map +1 -0
- package/dist/coordinator/index.d.ts +62 -0
- package/dist/coordinator/index.d.ts.map +1 -0
- package/dist/coordinator/index.js +177 -0
- package/dist/coordinator/index.js.map +1 -0
- package/dist/coordinator/response-tiers.d.ts +49 -0
- package/dist/coordinator/response-tiers.d.ts.map +1 -0
- package/dist/coordinator/response-tiers.js +149 -0
- package/dist/coordinator/response-tiers.js.map +1 -0
- package/dist/hooks/index.d.ts +103 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +279 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +37 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -3
- package/dist/index.js.map +1 -1
- package/dist/marketplace/backend.d.ts +35 -0
- package/dist/marketplace/backend.d.ts.map +1 -0
- package/dist/marketplace/backend.js +99 -0
- package/dist/marketplace/backend.js.map +1 -0
- package/dist/marketplace/browser.d.ts +33 -0
- package/dist/marketplace/browser.d.ts.map +1 -0
- package/dist/marketplace/browser.js +97 -0
- package/dist/marketplace/browser.js.map +1 -0
- package/dist/marketplace/extension-adapter.d.ts +51 -0
- package/dist/marketplace/extension-adapter.d.ts.map +1 -0
- package/dist/marketplace/extension-adapter.js +81 -0
- package/dist/marketplace/extension-adapter.js.map +1 -0
- package/dist/marketplace/index.d.ts +51 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +108 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/packaging.d.ts +25 -0
- package/dist/marketplace/packaging.d.ts.map +1 -0
- package/dist/marketplace/packaging.js +117 -0
- package/dist/marketplace/packaging.js.map +1 -0
- package/dist/marketplace/schema.d.ts +50 -0
- package/dist/marketplace/schema.d.ts.map +1 -0
- package/dist/marketplace/schema.js +120 -0
- package/dist/marketplace/schema.js.map +1 -0
- package/dist/marketplace/security.d.ts +26 -0
- package/dist/marketplace/security.d.ts.map +1 -0
- package/dist/marketplace/security.js +199 -0
- package/dist/marketplace/security.js.map +1 -0
- package/dist/multi-squad.d.ts +89 -0
- package/dist/multi-squad.d.ts.map +1 -0
- package/dist/multi-squad.js +233 -0
- package/dist/multi-squad.js.map +1 -0
- package/dist/parsers.d.ts +15 -0
- package/dist/parsers.d.ts.map +1 -0
- package/dist/parsers.js +15 -0
- package/dist/parsers.js.map +1 -0
- package/dist/ralph/index.d.ts +58 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +128 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/ralph/triage.d.ts +48 -0
- package/dist/ralph/triage.d.ts.map +1 -0
- package/dist/ralph/triage.js +310 -0
- package/dist/ralph/triage.js.map +1 -0
- package/dist/remote/bridge.d.ts +79 -0
- package/dist/remote/bridge.d.ts.map +1 -0
- package/dist/remote/bridge.js +583 -0
- package/dist/remote/bridge.js.map +1 -0
- package/dist/remote/index.d.ts +7 -0
- package/dist/remote/index.d.ts.map +1 -0
- package/dist/remote/index.js +6 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/remote/protocol.d.ts +130 -0
- package/dist/remote/protocol.d.ts.map +1 -0
- package/dist/remote/protocol.js +25 -0
- package/dist/remote/protocol.js.map +1 -0
- package/dist/remote/types.d.ts +34 -0
- package/dist/remote/types.d.ts.map +1 -0
- package/dist/remote/types.js +5 -0
- package/dist/remote/types.js.map +1 -0
- package/dist/resolution.d.ts +119 -0
- package/dist/resolution.d.ts.map +1 -0
- package/dist/resolution.js +259 -0
- package/dist/resolution.js.map +1 -0
- package/dist/runtime/benchmarks.d.ts +121 -0
- package/dist/runtime/benchmarks.d.ts.map +1 -0
- package/dist/runtime/benchmarks.js +251 -0
- package/dist/runtime/benchmarks.js.map +1 -0
- package/dist/runtime/config.d.ts +314 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +467 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/constants.d.ts +37 -0
- package/dist/runtime/constants.d.ts.map +1 -0
- package/dist/runtime/constants.js +60 -0
- package/dist/runtime/constants.js.map +1 -0
- package/dist/runtime/cost-tracker.d.ts +73 -0
- package/dist/runtime/cost-tracker.d.ts.map +1 -0
- package/dist/runtime/cost-tracker.js +157 -0
- package/dist/runtime/cost-tracker.js.map +1 -0
- package/dist/runtime/event-bus-ws-bridge.d.ts +35 -0
- package/dist/runtime/event-bus-ws-bridge.d.ts.map +1 -0
- package/dist/runtime/event-bus-ws-bridge.js +55 -0
- package/dist/runtime/event-bus-ws-bridge.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +190 -0
- package/dist/runtime/event-bus.d.ts.map +1 -0
- package/dist/runtime/event-bus.js +218 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/event-payloads.d.ts +108 -0
- package/dist/runtime/event-payloads.d.ts.map +1 -0
- package/dist/runtime/event-payloads.js +28 -0
- package/dist/runtime/event-payloads.js.map +1 -0
- package/dist/runtime/health.d.ts +66 -0
- package/dist/runtime/health.d.ts.map +1 -0
- package/dist/runtime/health.js +112 -0
- package/dist/runtime/health.js.map +1 -0
- package/dist/runtime/i18n.d.ts +54 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +126 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/offline.d.ts +64 -0
- package/dist/runtime/offline.d.ts.map +1 -0
- package/dist/runtime/offline.js +108 -0
- package/dist/runtime/offline.js.map +1 -0
- package/dist/runtime/otel-api.d.ts +38 -0
- package/dist/runtime/otel-api.d.ts.map +1 -0
- package/dist/runtime/otel-api.js +94 -0
- package/dist/runtime/otel-api.js.map +1 -0
- package/dist/runtime/otel-bridge.d.ts +52 -0
- package/dist/runtime/otel-bridge.d.ts.map +1 -0
- package/dist/runtime/otel-bridge.js +132 -0
- package/dist/runtime/otel-bridge.js.map +1 -0
- package/dist/runtime/otel-init.d.ts +84 -0
- package/dist/runtime/otel-init.d.ts.map +1 -0
- package/dist/runtime/otel-init.js +86 -0
- package/dist/runtime/otel-init.js.map +1 -0
- package/dist/runtime/otel-metrics.d.ts +42 -0
- package/dist/runtime/otel-metrics.d.ts.map +1 -0
- package/dist/runtime/otel-metrics.js +196 -0
- package/dist/runtime/otel-metrics.js.map +1 -0
- package/dist/runtime/otel.d.ts +55 -0
- package/dist/runtime/otel.d.ts.map +1 -0
- package/dist/runtime/otel.js +165 -0
- package/dist/runtime/otel.js.map +1 -0
- package/dist/runtime/squad-observer.d.ts +75 -0
- package/dist/runtime/squad-observer.d.ts.map +1 -0
- package/dist/runtime/squad-observer.js +190 -0
- package/dist/runtime/squad-observer.js.map +1 -0
- package/dist/runtime/streaming.d.ts +106 -0
- package/dist/runtime/streaming.d.ts.map +1 -0
- package/dist/runtime/streaming.js +192 -0
- package/dist/runtime/streaming.js.map +1 -0
- package/dist/runtime/telemetry.d.ts +82 -0
- package/dist/runtime/telemetry.d.ts.map +1 -0
- package/dist/runtime/telemetry.js +120 -0
- package/dist/runtime/telemetry.js.map +1 -0
- package/dist/sharing/agent-repo.d.ts +33 -0
- package/dist/sharing/agent-repo.d.ts.map +1 -0
- package/dist/sharing/agent-repo.js +79 -0
- package/dist/sharing/agent-repo.js.map +1 -0
- package/dist/sharing/cache.d.ts +36 -0
- package/dist/sharing/cache.d.ts.map +1 -0
- package/dist/sharing/cache.js +85 -0
- package/dist/sharing/cache.js.map +1 -0
- package/dist/sharing/conflicts.d.ts +32 -0
- package/dist/sharing/conflicts.d.ts.map +1 -0
- package/dist/sharing/conflicts.js +123 -0
- package/dist/sharing/conflicts.js.map +1 -0
- package/dist/sharing/consult.d.ts +226 -0
- package/dist/sharing/consult.d.ts.map +1 -0
- package/dist/sharing/consult.js +818 -0
- package/dist/sharing/consult.js.map +1 -0
- package/dist/sharing/export.d.ts +50 -0
- package/dist/sharing/export.d.ts.map +1 -0
- package/dist/sharing/export.js +156 -0
- package/dist/sharing/export.js.map +1 -0
- package/dist/sharing/history-split.d.ts +34 -0
- package/dist/sharing/history-split.d.ts.map +1 -0
- package/dist/sharing/history-split.js +101 -0
- package/dist/sharing/history-split.js.map +1 -0
- package/dist/sharing/import.d.ts +37 -0
- package/dist/sharing/import.d.ts.map +1 -0
- package/dist/sharing/import.js +138 -0
- package/dist/sharing/import.js.map +1 -0
- package/dist/sharing/index.d.ts +12 -0
- package/dist/sharing/index.d.ts.map +1 -0
- package/dist/sharing/index.js +12 -0
- package/dist/sharing/index.js.map +1 -0
- package/dist/sharing/versioning.d.ts +32 -0
- package/dist/sharing/versioning.d.ts.map +1 -0
- package/dist/sharing/versioning.js +64 -0
- package/dist/sharing/versioning.js.map +1 -0
- package/dist/skills/index.d.ts +49 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +85 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +56 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +106 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-source.d.ts +63 -0
- package/dist/skills/skill-source.d.ts.map +1 -0
- package/dist/skills/skill-source.js +199 -0
- package/dist/skills/skill-source.js.map +1 -0
- package/dist/streams/filter.d.ts +33 -0
- package/dist/streams/filter.d.ts.map +1 -0
- package/dist/streams/filter.js +29 -0
- package/dist/streams/filter.js.map +1 -0
- package/dist/streams/index.d.ts +9 -0
- package/dist/streams/index.d.ts.map +1 -0
- package/dist/streams/index.js +9 -0
- package/dist/streams/index.js.map +1 -0
- package/dist/streams/resolver.d.ts +40 -0
- package/dist/streams/resolver.d.ts.map +1 -0
- package/dist/streams/resolver.js +162 -0
- package/dist/streams/resolver.js.map +1 -0
- package/dist/streams/types.d.ts +44 -0
- package/dist/streams/types.d.ts.map +1 -0
- package/dist/streams/types.js +10 -0
- package/dist/streams/types.js.map +1 -0
- package/dist/tools/index.d.ts +95 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +475 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/upstream/index.d.ts +8 -0
- package/dist/upstream/index.d.ts.map +1 -0
- package/dist/upstream/index.js +7 -0
- package/dist/upstream/index.js.map +1 -0
- package/dist/upstream/resolver.d.ts +37 -0
- package/dist/upstream/resolver.d.ts.map +1 -0
- package/dist/upstream/resolver.js +234 -0
- package/dist/upstream/resolver.js.map +1 -0
- package/dist/upstream/types.d.ts +55 -0
- package/dist/upstream/types.d.ts.map +1 -0
- package/dist/upstream/types.js +11 -0
- package/dist/upstream/types.js.map +1 -0
- package/dist/utils/normalize-eol.d.ts +6 -0
- package/dist/utils/normalize-eol.d.ts.map +1 -0
- package/dist/utils/normalize-eol.js +8 -0
- package/dist/utils/normalize-eol.js.map +1 -0
- package/dist/utils/safe-timestamp.d.ts +6 -0
- package/dist/utils/safe-timestamp.d.ts.map +1 -0
- package/dist/utils/safe-timestamp.js +8 -0
- package/dist/utils/safe-timestamp.js.map +1 -0
- package/package.json +151 -6
- package/templates/casting-history.json +4 -0
- package/templates/casting-policy.json +35 -0
- package/templates/casting-registry.json +3 -0
- package/templates/ceremonies.md +41 -0
- package/templates/charter.md +53 -0
- package/templates/constraint-tracking.md +38 -0
- package/templates/copilot-instructions.md +46 -0
- package/templates/history.md +10 -0
- package/templates/identity/now.md +9 -0
- package/templates/identity/wisdom.md +15 -0
- package/templates/mcp-config.md +98 -0
- package/templates/multi-agent-format.md +28 -0
- package/templates/orchestration-log.md +27 -0
- package/templates/plugin-marketplace.md +49 -0
- package/templates/raw-agent-output.md +37 -0
- package/templates/roster.md +60 -0
- package/templates/routing.md +54 -0
- package/templates/run-output.md +50 -0
- package/templates/scribe-charter.md +119 -0
- package/templates/skill.md +24 -0
- package/templates/skills/project-conventions/SKILL.md +56 -0
- package/templates/squad.agent.md +1146 -0
- package/templates/workflows/squad-ci.yml +24 -0
- package/templates/workflows/squad-docs.yml +50 -0
- package/templates/workflows/squad-heartbeat.yml +316 -0
- package/templates/workflows/squad-insider-release.yml +61 -0
- package/templates/workflows/squad-issue-assign.yml +161 -0
- package/templates/workflows/squad-label-enforce.yml +181 -0
- package/templates/workflows/squad-preview.yml +55 -0
- package/templates/workflows/squad-promote.yml +120 -0
- package/templates/workflows/squad-release.yml +77 -0
- package/templates/workflows/squad-triage.yml +260 -0
- package/templates/workflows/sync-squad-labels.yml +169 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Mode — graceful degradation when connectivity is unavailable
|
|
3
|
+
* Issue #142 (M5-14)
|
|
4
|
+
*/
|
|
5
|
+
// --- Detect connectivity ---
|
|
6
|
+
export function detectConnectivity(checker) {
|
|
7
|
+
if (!checker) {
|
|
8
|
+
return Promise.resolve('online');
|
|
9
|
+
}
|
|
10
|
+
return checker()
|
|
11
|
+
.then((ok) => (ok ? 'online' : 'offline'))
|
|
12
|
+
.catch(() => 'offline');
|
|
13
|
+
}
|
|
14
|
+
// --- OfflineManager ---
|
|
15
|
+
export class OfflineManager {
|
|
16
|
+
connectivity = 'online';
|
|
17
|
+
pendingQueue = [];
|
|
18
|
+
lastSyncTime = null;
|
|
19
|
+
cachedAgentNames = [];
|
|
20
|
+
connectivityChecker;
|
|
21
|
+
syncHandler;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.connectivityChecker = options?.connectivityChecker;
|
|
24
|
+
this.syncHandler = options?.syncHandler;
|
|
25
|
+
this.cachedAgentNames = options?.cachedAgents ?? [];
|
|
26
|
+
}
|
|
27
|
+
/** Get what works offline */
|
|
28
|
+
getOfflineCapabilities() {
|
|
29
|
+
const isOnline = this.connectivity === 'online';
|
|
30
|
+
return {
|
|
31
|
+
localAgents: true,
|
|
32
|
+
cachedSkills: true,
|
|
33
|
+
configEditing: true,
|
|
34
|
+
marketplaceBrowse: isOnline || this.connectivity === 'degraded',
|
|
35
|
+
publishing: isOnline,
|
|
36
|
+
remoteAgents: isOnline,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Queue an operation for later sync */
|
|
40
|
+
queueForSync(operation) {
|
|
41
|
+
this.pendingQueue.push({ ...operation });
|
|
42
|
+
}
|
|
43
|
+
/** Replay queued operations */
|
|
44
|
+
async syncPending() {
|
|
45
|
+
if (this.connectivity === 'offline') {
|
|
46
|
+
return { synced: 0, failed: 0, remaining: this.pendingQueue.length };
|
|
47
|
+
}
|
|
48
|
+
let synced = 0;
|
|
49
|
+
let failed = 0;
|
|
50
|
+
const remaining = [];
|
|
51
|
+
for (const op of this.pendingQueue) {
|
|
52
|
+
try {
|
|
53
|
+
const success = this.syncHandler
|
|
54
|
+
? await this.syncHandler(op)
|
|
55
|
+
: true;
|
|
56
|
+
if (success) {
|
|
57
|
+
synced++;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
op.retries++;
|
|
61
|
+
remaining.push(op);
|
|
62
|
+
failed++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
op.retries++;
|
|
67
|
+
remaining.push(op);
|
|
68
|
+
failed++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
this.pendingQueue = remaining;
|
|
72
|
+
this.lastSyncTime = new Date().toISOString();
|
|
73
|
+
return { synced, failed, remaining: remaining.length };
|
|
74
|
+
}
|
|
75
|
+
/** Get current offline status */
|
|
76
|
+
getOfflineStatus() {
|
|
77
|
+
return {
|
|
78
|
+
connectivity: this.connectivity,
|
|
79
|
+
pendingOps: this.pendingQueue.length,
|
|
80
|
+
lastSync: this.lastSyncTime,
|
|
81
|
+
cachedAgents: [...this.cachedAgentNames],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Update connectivity status */
|
|
85
|
+
async refreshConnectivity() {
|
|
86
|
+
this.connectivity = await detectConnectivity(this.connectivityChecker);
|
|
87
|
+
return this.connectivity;
|
|
88
|
+
}
|
|
89
|
+
/** Set connectivity directly (useful for testing) */
|
|
90
|
+
setConnectivity(status) {
|
|
91
|
+
this.connectivity = status;
|
|
92
|
+
}
|
|
93
|
+
/** Add a cached agent name */
|
|
94
|
+
addCachedAgent(name) {
|
|
95
|
+
if (!this.cachedAgentNames.includes(name)) {
|
|
96
|
+
this.cachedAgentNames.push(name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Get pending operations */
|
|
100
|
+
getPendingOperations() {
|
|
101
|
+
return [...this.pendingQueue];
|
|
102
|
+
}
|
|
103
|
+
/** Clear all pending operations */
|
|
104
|
+
clearPending() {
|
|
105
|
+
this.pendingQueue = [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=offline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/runtime/offline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient @opentelemetry/api wrapper (Issue #247)
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the subset of @opentelemetry/api that Squad uses, with
|
|
5
|
+
* automatic no-op fallbacks when the package is not installed. This
|
|
6
|
+
* makes telemetry truly optional at runtime — the SDK never crashes
|
|
7
|
+
* due to a missing OpenTelemetry dependency.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/otel-api
|
|
10
|
+
*/
|
|
11
|
+
declare const _noopTracer: any;
|
|
12
|
+
declare const _noopMeter: any;
|
|
13
|
+
/** Span status codes. */
|
|
14
|
+
export declare const SpanStatusCode: {
|
|
15
|
+
readonly UNSET: 0;
|
|
16
|
+
readonly OK: 1;
|
|
17
|
+
readonly ERROR: 2;
|
|
18
|
+
};
|
|
19
|
+
/** Trace API entry point. */
|
|
20
|
+
export declare const trace: import("@opentelemetry/api").TraceAPI | {
|
|
21
|
+
getTracer(): typeof _noopTracer;
|
|
22
|
+
};
|
|
23
|
+
/** Metrics API entry point. */
|
|
24
|
+
export declare const metrics: import("@opentelemetry/api").MetricsAPI | {
|
|
25
|
+
getMeter(): typeof _noopMeter;
|
|
26
|
+
};
|
|
27
|
+
/** Diagnostics API. */
|
|
28
|
+
export declare const diag: any;
|
|
29
|
+
/** Diagnostics console logger class. */
|
|
30
|
+
export declare const DiagConsoleLogger: any;
|
|
31
|
+
/** Diagnostics log level enum. */
|
|
32
|
+
export declare const DiagLogLevel: any;
|
|
33
|
+
/** Whether @opentelemetry/api was successfully loaded. */
|
|
34
|
+
export declare const otelApiAvailable: boolean;
|
|
35
|
+
export type Tracer = import('@opentelemetry/api').Tracer;
|
|
36
|
+
export type Meter = import('@opentelemetry/api').Meter;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=otel-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-api.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,QAAA,MAAM,WAAW,EAAE,GAMlB,CAAC;AASF,QAAA,MAAM,UAAU,EAAE,GAQjB,CAAC;AAQF,yBAAyB;AACzB,eAAO,MAAM,cAAc,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CACjB,CAAC;AAEnE,6BAA6B;AAC7B,eAAO,MAAM,KAAK;iBACH,OAAO,WAAW;CAChC,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,OAAO;gBACN,OAAO,UAAU;CAC9B,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,IAAI,EAAE,GAQlB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,GAAwD,CAAC;AAEzF,kCAAkC;AAClC,eAAO,MAAM,YAAY,EAAE,GAE1B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,OAA4B,CAAC;AAG5D,MAAM,MAAM,MAAM,GAAG,OAAO,oBAAoB,EAAE,MAAM,CAAC;AACzD,MAAM,MAAM,KAAK,GAAG,OAAO,oBAAoB,EAAE,KAAK,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient @opentelemetry/api wrapper (Issue #247)
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the subset of @opentelemetry/api that Squad uses, with
|
|
5
|
+
* automatic no-op fallbacks when the package is not installed. This
|
|
6
|
+
* makes telemetry truly optional at runtime — the SDK never crashes
|
|
7
|
+
* due to a missing OpenTelemetry dependency.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/otel-api
|
|
10
|
+
*/
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Dynamic load — graceful fallback when @opentelemetry/api is absent
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
let _api;
|
|
16
|
+
try {
|
|
17
|
+
const _require = createRequire(import.meta.url);
|
|
18
|
+
_api = _require('@opentelemetry/api');
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// @opentelemetry/api not installed — all telemetry becomes no-op
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// No-op implementations (mirror the @opentelemetry/api surface we use)
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
27
|
+
const _noopSpan = {
|
|
28
|
+
end() { },
|
|
29
|
+
setStatus() { return _noopSpan; },
|
|
30
|
+
setAttribute() { return _noopSpan; },
|
|
31
|
+
setAttributes() { return _noopSpan; },
|
|
32
|
+
addEvent() { return _noopSpan; },
|
|
33
|
+
recordException() { return _noopSpan; },
|
|
34
|
+
isRecording() { return false; },
|
|
35
|
+
updateName() { return _noopSpan; },
|
|
36
|
+
spanContext() { return { traceId: '', spanId: '', traceFlags: 0 }; },
|
|
37
|
+
};
|
|
38
|
+
const _noopTracer = {
|
|
39
|
+
startSpan() { return _noopSpan; },
|
|
40
|
+
startActiveSpan(...args) {
|
|
41
|
+
const fn = args[args.length - 1];
|
|
42
|
+
if (typeof fn === 'function')
|
|
43
|
+
return fn(_noopSpan);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const _noopInstrument = {
|
|
47
|
+
add() { },
|
|
48
|
+
record() { },
|
|
49
|
+
addCallback() { },
|
|
50
|
+
removeCallback() { },
|
|
51
|
+
};
|
|
52
|
+
const _noopMeter = {
|
|
53
|
+
createCounter() { return _noopInstrument; },
|
|
54
|
+
createUpDownCounter() { return _noopInstrument; },
|
|
55
|
+
createHistogram() { return _noopInstrument; },
|
|
56
|
+
createObservableCounter() { return _noopInstrument; },
|
|
57
|
+
createObservableUpDownCounter() { return _noopInstrument; },
|
|
58
|
+
createObservableGauge() { return _noopInstrument; },
|
|
59
|
+
createGauge() { return _noopInstrument; },
|
|
60
|
+
};
|
|
61
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Exports — real API when available, no-ops otherwise
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/** Span status codes. */
|
|
66
|
+
export const SpanStatusCode = _api?.SpanStatusCode ?? { UNSET: 0, OK: 1, ERROR: 2 };
|
|
67
|
+
/** Trace API entry point. */
|
|
68
|
+
export const trace = _api?.trace ?? {
|
|
69
|
+
getTracer() { return _noopTracer; },
|
|
70
|
+
};
|
|
71
|
+
/** Metrics API entry point. */
|
|
72
|
+
export const metrics = _api?.metrics ?? {
|
|
73
|
+
getMeter() { return _noopMeter; },
|
|
74
|
+
};
|
|
75
|
+
/** Diagnostics API. */
|
|
76
|
+
export const diag = _api?.diag ?? {
|
|
77
|
+
setLogger() { },
|
|
78
|
+
disable() { },
|
|
79
|
+
verbose() { },
|
|
80
|
+
debug() { },
|
|
81
|
+
info() { },
|
|
82
|
+
warn() { },
|
|
83
|
+
error() { },
|
|
84
|
+
};
|
|
85
|
+
/** Diagnostics console logger class. */
|
|
86
|
+
export const DiagConsoleLogger = _api?.DiagConsoleLogger ?? class NoopDiagLogger {
|
|
87
|
+
}; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
88
|
+
/** Diagnostics log level enum. */
|
|
89
|
+
export const DiagLogLevel = _api?.DiagLogLevel ?? {
|
|
90
|
+
NONE: 0, ERROR: 30, WARN: 50, INFO: 60, DEBUG: 70, VERBOSE: 80, ALL: 9999,
|
|
91
|
+
};
|
|
92
|
+
/** Whether @opentelemetry/api was successfully loaded. */
|
|
93
|
+
export const otelApiAvailable = _api !== undefined;
|
|
94
|
+
//# sourceMappingURL=otel-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-api.js","sourceRoot":"","sources":["../../src/runtime/otel-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTel Bridge for TelemetryCollector (Issue #256)
|
|
3
|
+
*
|
|
4
|
+
* Converts TelemetryEvents into OpenTelemetry spans, providing a
|
|
5
|
+
* TelemetryTransport that can be registered via setTelemetryTransport().
|
|
6
|
+
* Additive — the existing transport pipeline is unaffected.
|
|
7
|
+
*
|
|
8
|
+
* @module runtime/otel-bridge
|
|
9
|
+
*/
|
|
10
|
+
import type { TelemetryTransport } from './telemetry.js';
|
|
11
|
+
import type { EventBus, UnsubscribeFn } from './event-bus.js';
|
|
12
|
+
/**
|
|
13
|
+
* Create a TelemetryTransport that emits OTel spans for each event.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { setTelemetryTransport } from './telemetry.js';
|
|
18
|
+
* import { createOTelTransport } from './otel-bridge.js';
|
|
19
|
+
*
|
|
20
|
+
* setTelemetryTransport(createOTelTransport());
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* The bridge ignores the `endpoint` parameter — OTel exporter config is
|
|
24
|
+
* managed by the OTel provider initialized via `initializeOTel()`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createOTelTransport(): TelemetryTransport;
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe an {@link EventBus} to OpenTelemetry, creating a span for every
|
|
29
|
+
* event that flows through the bus.
|
|
30
|
+
*
|
|
31
|
+
* This is the **mid-level** OTel integration point — it wires the Squad
|
|
32
|
+
* event bus directly into the OTel trace pipeline. If no `TracerProvider`
|
|
33
|
+
* has been registered (e.g. via {@link initializeOTel}), all spans are
|
|
34
|
+
* automatically no-ops with zero overhead.
|
|
35
|
+
*
|
|
36
|
+
* @param bus - The EventBus instance to bridge.
|
|
37
|
+
* @returns An unsubscribe function. Call it to detach the bridge.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* import { EventBus, initializeOTel, bridgeEventBusToOTel } from 'squad-sdk';
|
|
42
|
+
*
|
|
43
|
+
* const bus = new EventBus();
|
|
44
|
+
* initializeOTel({ endpoint: 'http://localhost:4318' });
|
|
45
|
+
* const detach = bridgeEventBusToOTel(bus);
|
|
46
|
+
*
|
|
47
|
+
* // Later, to stop bridging:
|
|
48
|
+
* detach();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function bridgeEventBusToOTel(bus: EventBus): UnsubscribeFn;
|
|
52
|
+
//# sourceMappingURL=otel-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-bridge.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAsE1E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,CAMxD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAejE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTel Bridge for TelemetryCollector (Issue #256)
|
|
3
|
+
*
|
|
4
|
+
* Converts TelemetryEvents into OpenTelemetry spans, providing a
|
|
5
|
+
* TelemetryTransport that can be registered via setTelemetryTransport().
|
|
6
|
+
* Additive — the existing transport pipeline is unaffected.
|
|
7
|
+
*
|
|
8
|
+
* @module runtime/otel-bridge
|
|
9
|
+
*/
|
|
10
|
+
import { SpanStatusCode } from './otel-api.js';
|
|
11
|
+
import { getTracer } from './otel.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Span mapping
|
|
14
|
+
// ============================================================================
|
|
15
|
+
function recordSpan(event) {
|
|
16
|
+
const tracer = getTracer('squad-sdk');
|
|
17
|
+
const attrs = {};
|
|
18
|
+
if (event.properties) {
|
|
19
|
+
for (const [k, v] of Object.entries(event.properties)) {
|
|
20
|
+
attrs[k] = v;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (event.timestamp) {
|
|
24
|
+
attrs['event.timestamp'] = event.timestamp;
|
|
25
|
+
}
|
|
26
|
+
switch (event.name) {
|
|
27
|
+
case 'squad.init': {
|
|
28
|
+
const span = tracer.startSpan('squad.init', { attributes: attrs });
|
|
29
|
+
span.end();
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
case 'squad.agent.spawn': {
|
|
33
|
+
const span = tracer.startSpan('squad.agent.spawn', { attributes: attrs });
|
|
34
|
+
span.end();
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case 'squad.error': {
|
|
38
|
+
const span = tracer.startSpan('squad.error', { attributes: attrs });
|
|
39
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(attrs['error'] ?? 'unknown') });
|
|
40
|
+
span.addEvent('exception', {
|
|
41
|
+
'exception.message': String(attrs['error'] ?? attrs['message'] ?? 'unknown error'),
|
|
42
|
+
...(attrs['stack'] ? { 'exception.stacktrace': String(attrs['stack']) } : {}),
|
|
43
|
+
});
|
|
44
|
+
span.end();
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case 'squad.run': {
|
|
48
|
+
// Root span for the entire session — start and immediately end
|
|
49
|
+
// (the real duration would be managed by the caller if needed)
|
|
50
|
+
const span = tracer.startSpan('squad.run', { attributes: attrs });
|
|
51
|
+
span.end();
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case 'squad.upgrade': {
|
|
55
|
+
const span = tracer.startSpan('squad.upgrade', { attributes: attrs });
|
|
56
|
+
span.end();
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
default: {
|
|
60
|
+
// Forward unknown events as generic spans
|
|
61
|
+
const span = tracer.startSpan(event.name, { attributes: attrs });
|
|
62
|
+
span.end();
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// ============================================================================
|
|
68
|
+
// Public API
|
|
69
|
+
// ============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Create a TelemetryTransport that emits OTel spans for each event.
|
|
72
|
+
*
|
|
73
|
+
* Usage:
|
|
74
|
+
* ```ts
|
|
75
|
+
* import { setTelemetryTransport } from './telemetry.js';
|
|
76
|
+
* import { createOTelTransport } from './otel-bridge.js';
|
|
77
|
+
*
|
|
78
|
+
* setTelemetryTransport(createOTelTransport());
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* The bridge ignores the `endpoint` parameter — OTel exporter config is
|
|
82
|
+
* managed by the OTel provider initialized via `initializeOTel()`.
|
|
83
|
+
*/
|
|
84
|
+
export function createOTelTransport() {
|
|
85
|
+
return async (events, _endpoint) => {
|
|
86
|
+
for (const event of events) {
|
|
87
|
+
recordSpan(event);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Subscribe an {@link EventBus} to OpenTelemetry, creating a span for every
|
|
93
|
+
* event that flows through the bus.
|
|
94
|
+
*
|
|
95
|
+
* This is the **mid-level** OTel integration point — it wires the Squad
|
|
96
|
+
* event bus directly into the OTel trace pipeline. If no `TracerProvider`
|
|
97
|
+
* has been registered (e.g. via {@link initializeOTel}), all spans are
|
|
98
|
+
* automatically no-ops with zero overhead.
|
|
99
|
+
*
|
|
100
|
+
* @param bus - The EventBus instance to bridge.
|
|
101
|
+
* @returns An unsubscribe function. Call it to detach the bridge.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* import { EventBus, initializeOTel, bridgeEventBusToOTel } from 'squad-sdk';
|
|
106
|
+
*
|
|
107
|
+
* const bus = new EventBus();
|
|
108
|
+
* initializeOTel({ endpoint: 'http://localhost:4318' });
|
|
109
|
+
* const detach = bridgeEventBusToOTel(bus);
|
|
110
|
+
*
|
|
111
|
+
* // Later, to stop bridging:
|
|
112
|
+
* detach();
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function bridgeEventBusToOTel(bus) {
|
|
116
|
+
return bus.subscribeAll((event) => {
|
|
117
|
+
const tracer = getTracer('squad-sdk');
|
|
118
|
+
const attrs = {
|
|
119
|
+
'event.type': event.type,
|
|
120
|
+
};
|
|
121
|
+
if (event.sessionId)
|
|
122
|
+
attrs['session.id'] = event.sessionId;
|
|
123
|
+
if (event.agentName)
|
|
124
|
+
attrs['agent.name'] = event.agentName;
|
|
125
|
+
const span = tracer.startSpan(`squad.${event.type}`, { attributes: attrs });
|
|
126
|
+
if (event.type === 'session:error') {
|
|
127
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
128
|
+
}
|
|
129
|
+
span.end();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=otel-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-bridge.js","sourceRoot":"","sources":["../../src/runtime/otel-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-Level OTel Initialization (Issue #266)
|
|
3
|
+
*
|
|
4
|
+
* One-call setup that wires OTel providers, the EventBus bridge, and
|
|
5
|
+
* the TelemetryCollector transport in a single invocation. Consumers
|
|
6
|
+
* who don't use OTel pay nothing — if no provider is registered all
|
|
7
|
+
* instrumentation is a no-op.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/otel-init
|
|
10
|
+
*/
|
|
11
|
+
import type { OTelConfig } from './otel.js';
|
|
12
|
+
import type { EventBus } from './event-bus.js';
|
|
13
|
+
/** Options for the high-level {@link initSquadTelemetry} helper. */
|
|
14
|
+
export interface SquadTelemetryOptions extends OTelConfig {
|
|
15
|
+
/**
|
|
16
|
+
* When provided, all EventBus events are automatically forwarded
|
|
17
|
+
* as OTel spans via {@link bridgeEventBusToOTel}.
|
|
18
|
+
*/
|
|
19
|
+
eventBus?: EventBus;
|
|
20
|
+
/**
|
|
21
|
+
* When `true`, the OTel-backed TelemetryTransport is registered
|
|
22
|
+
* as the active transport for {@link TelemetryCollector}.
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
25
|
+
installTransport?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Handle returned by {@link initSquadTelemetry} for lifecycle control. */
|
|
28
|
+
export interface SquadTelemetryHandle {
|
|
29
|
+
/** Whether tracing was activated. */
|
|
30
|
+
tracing: boolean;
|
|
31
|
+
/** Whether metrics were activated. */
|
|
32
|
+
metrics: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Flush pending telemetry, detach the EventBus bridge (if any),
|
|
35
|
+
* and shut down OTel providers. Safe to call multiple times.
|
|
36
|
+
*/
|
|
37
|
+
shutdown: () => Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* One-call OTel setup for Squad SDK consumers.
|
|
41
|
+
*
|
|
42
|
+
* This is the **high-level** entry point. It:
|
|
43
|
+
* 1. Initializes tracing and metrics via `initializeOTel()`.
|
|
44
|
+
* 2. Optionally bridges an {@link EventBus} so every Squad event
|
|
45
|
+
* becomes an OTel span.
|
|
46
|
+
* 3. Optionally installs an OTel-backed `TelemetryTransport` so
|
|
47
|
+
* the existing `TelemetryCollector` pipeline emits spans too.
|
|
48
|
+
*
|
|
49
|
+
* If no `OTEL_EXPORTER_OTLP_ENDPOINT` env var is set **and** no
|
|
50
|
+
* `endpoint` is provided in `options`, everything remains a no-op.
|
|
51
|
+
*
|
|
52
|
+
* @param options - Configuration and optional EventBus.
|
|
53
|
+
* @returns A handle with `tracing`, `metrics` status booleans and a
|
|
54
|
+
* `shutdown()` method for graceful cleanup.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* import { initSquadTelemetry, EventBus } from 'squad-sdk';
|
|
59
|
+
*
|
|
60
|
+
* const bus = new EventBus();
|
|
61
|
+
* const telemetry = initSquadTelemetry({
|
|
62
|
+
* endpoint: 'http://localhost:4318',
|
|
63
|
+
* eventBus: bus,
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* // … run your squad …
|
|
67
|
+
*
|
|
68
|
+
* await telemetry.shutdown();
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function initSquadTelemetry(options?: SquadTelemetryOptions): SquadTelemetryHandle;
|
|
72
|
+
/**
|
|
73
|
+
* Convenience wrapper for Copilot agent-mode telemetry.
|
|
74
|
+
*
|
|
75
|
+
* Pre-configures `serviceName` to `'squad-copilot-agent'` and
|
|
76
|
+
* `mode` to `'copilot-agent'` so the two surfaces (CLI vs agent)
|
|
77
|
+
* are distinguishable in dashboards and trace queries.
|
|
78
|
+
*
|
|
79
|
+
* Call this at agent-mode startup; call `handle.shutdown()` on exit.
|
|
80
|
+
*
|
|
81
|
+
* @param options - Additional overrides (endpoint, eventBus, etc.).
|
|
82
|
+
*/
|
|
83
|
+
export declare function initAgentModeTelemetry(options?: Omit<SquadTelemetryOptions, 'serviceName' | 'mode'>): SquadTelemetryHandle;
|
|
84
|
+
//# sourceMappingURL=otel-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-init.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU/C,oEAAoE;AACpE,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B,GAAG,oBAAoB,CAsB5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,MAAM,CAAM,GAAG,oBAAoB,CAM9H"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* High-Level OTel Initialization (Issue #266)
|
|
3
|
+
*
|
|
4
|
+
* One-call setup that wires OTel providers, the EventBus bridge, and
|
|
5
|
+
* the TelemetryCollector transport in a single invocation. Consumers
|
|
6
|
+
* who don't use OTel pay nothing — if no provider is registered all
|
|
7
|
+
* instrumentation is a no-op.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/otel-init
|
|
10
|
+
*/
|
|
11
|
+
import { initializeOTel, shutdownOTel } from './otel.js';
|
|
12
|
+
import { bridgeEventBusToOTel, createOTelTransport } from './otel-bridge.js';
|
|
13
|
+
import { setTelemetryTransport } from './telemetry.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Public API
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* One-call OTel setup for Squad SDK consumers.
|
|
19
|
+
*
|
|
20
|
+
* This is the **high-level** entry point. It:
|
|
21
|
+
* 1. Initializes tracing and metrics via `initializeOTel()`.
|
|
22
|
+
* 2. Optionally bridges an {@link EventBus} so every Squad event
|
|
23
|
+
* becomes an OTel span.
|
|
24
|
+
* 3. Optionally installs an OTel-backed `TelemetryTransport` so
|
|
25
|
+
* the existing `TelemetryCollector` pipeline emits spans too.
|
|
26
|
+
*
|
|
27
|
+
* If no `OTEL_EXPORTER_OTLP_ENDPOINT` env var is set **and** no
|
|
28
|
+
* `endpoint` is provided in `options`, everything remains a no-op.
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration and optional EventBus.
|
|
31
|
+
* @returns A handle with `tracing`, `metrics` status booleans and a
|
|
32
|
+
* `shutdown()` method for graceful cleanup.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { initSquadTelemetry, EventBus } from 'squad-sdk';
|
|
37
|
+
*
|
|
38
|
+
* const bus = new EventBus();
|
|
39
|
+
* const telemetry = initSquadTelemetry({
|
|
40
|
+
* endpoint: 'http://localhost:4318',
|
|
41
|
+
* eventBus: bus,
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // … run your squad …
|
|
45
|
+
*
|
|
46
|
+
* await telemetry.shutdown();
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export function initSquadTelemetry(options = {}) {
|
|
50
|
+
const { eventBus, installTransport = true, ...otelConfig } = options;
|
|
51
|
+
const result = initializeOTel(otelConfig);
|
|
52
|
+
let unsubscribeBridge;
|
|
53
|
+
if (eventBus) {
|
|
54
|
+
unsubscribeBridge = bridgeEventBusToOTel(eventBus);
|
|
55
|
+
}
|
|
56
|
+
if (installTransport) {
|
|
57
|
+
setTelemetryTransport(createOTelTransport());
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
tracing: result.tracing,
|
|
61
|
+
metrics: result.metrics,
|
|
62
|
+
shutdown: async () => {
|
|
63
|
+
unsubscribeBridge?.();
|
|
64
|
+
await shutdownOTel();
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convenience wrapper for Copilot agent-mode telemetry.
|
|
70
|
+
*
|
|
71
|
+
* Pre-configures `serviceName` to `'squad-copilot-agent'` and
|
|
72
|
+
* `mode` to `'copilot-agent'` so the two surfaces (CLI vs agent)
|
|
73
|
+
* are distinguishable in dashboards and trace queries.
|
|
74
|
+
*
|
|
75
|
+
* Call this at agent-mode startup; call `handle.shutdown()` on exit.
|
|
76
|
+
*
|
|
77
|
+
* @param options - Additional overrides (endpoint, eventBus, etc.).
|
|
78
|
+
*/
|
|
79
|
+
export function initAgentModeTelemetry(options = {}) {
|
|
80
|
+
return initSquadTelemetry({
|
|
81
|
+
...options,
|
|
82
|
+
serviceName: 'squad-copilot-agent',
|
|
83
|
+
mode: 'copilot-agent',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=otel-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-init.js","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAmCvD,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAiC,EAAE;IACpE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;IAErE,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,iBAA4C,CAAC;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,qBAAqB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,iBAAiB,EAAE,EAAE,CAAC;YACtB,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA+D,EAAE;IACtG,OAAO,kBAAkB,CAAC;QACxB,GAAG,OAAO;QACV,WAAW,EAAE,qBAAqB;QAClC,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;AACL,CAAC"}
|