@codemieai/code 0.15.5 → 0.15.7
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/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +3 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +4 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +15 -0
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/session/SessionStore.d.ts +6 -0
- package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
- package/dist/agents/core/session/SessionStore.js +38 -0
- package/dist/agents/core/session/SessionStore.js.map +1 -1
- package/dist/agents/core/session/types.d.ts +2 -0
- package/dist/agents/core/session/types.d.ts.map +1 -1
- package/dist/agents/core/types.d.ts +10 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/core/types.js +5 -1
- package/dist/agents/core/types.js.map +1 -1
- package/dist/agents/plugins/claude/claude.models.d.ts +19 -3
- package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.models.js +116 -64
- package/dist/agents/plugins/claude/claude.models.js.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +25 -4
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/skills/codemie-assistant-builder/SKILL.md +177 -0
- package/dist/agents/plugins/claude/plugin/skills/codemie-assistant-builder/agents/grader.md +38 -0
- package/dist/agents/plugins/claude/plugin/skills/codemie-assistant-builder/agents/improver.md +40 -0
- package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/SKILL.md +10 -1
- package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/assistants.md +23 -0
- package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +57 -21
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +13 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +27 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts +6 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +21 -0
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/messages-before.d.ts +11 -0
- package/dist/agents/plugins/claude/session/processors/messages-before.d.ts.map +1 -0
- package/dist/agents/plugins/claude/session/processors/messages-before.js +15 -0
- package/dist/agents/plugins/claude/session/processors/messages-before.js.map +1 -0
- package/dist/agents/plugins/claude/statusline-installer.d.ts +9 -0
- package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
- package/dist/agents/plugins/claude/statusline-installer.js +42 -27
- package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.constants.d.ts +3 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.constants.d.ts.map +1 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.constants.js +3 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.constants.js.map +1 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.plugin.d.ts +11 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.plugin.js +65 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.plugin.js.map +1 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.types.d.ts +63 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.types.d.ts.map +1 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.types.js +13 -0
- package/dist/agents/plugins/claude-code-otlp/claude-code-otlp.types.js.map +1 -0
- package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +6 -4
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex-models.js +9 -6
- package/dist/agents/plugins/codex/codex-models.js.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.js +2 -1
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts +3 -2
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +14 -6
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.js +6 -4
- package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
- package/dist/agents/plugins/utils.d.ts +11 -0
- package/dist/agents/plugins/utils.d.ts.map +1 -0
- package/dist/agents/plugins/utils.js +46 -0
- package/dist/agents/plugins/utils.js.map +1 -0
- package/dist/agents/registry.d.ts +3 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +12 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/bin/proxy-daemon.js +4 -0
- package/dist/bin/proxy-daemon.js.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/selection.d.ts +3 -1
- package/dist/cli/commands/assistants/setup/configuration/selection.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/selection.js +6 -3
- package/dist/cli/commands/assistants/setup/configuration/selection.js.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/types.d.ts +2 -0
- package/dist/cli/commands/assistants/setup/configuration/types.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/ui.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/ui.js +3 -0
- package/dist/cli/commands/assistants/setup/configuration/ui.js.map +1 -1
- package/dist/cli/commands/assistants/setup/data.d.ts +6 -2
- package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/data.js +23 -8
- package/dist/cli/commands/assistants/setup/data.js.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.d.ts +1 -0
- package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.js +11 -0
- package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
- package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/index.js +24 -6
- package/dist/cli/commands/assistants/setup/index.js.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts +2 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/index.js +5 -3
- package/dist/cli/commands/assistants/setup/manualConfiguration/index.js.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts +2 -0
- package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/ui.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js +3 -0
- package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +24 -29
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.d.ts +8 -1
- package/dist/cli/commands/proxy/connect-orchestrator.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.js +65 -4
- package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/claude-code-otlp.d.ts +33 -0
- package/dist/cli/commands/proxy/connectors/claude-code-otlp.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/claude-code-otlp.js +299 -0
- package/dist/cli/commands/proxy/connectors/claude-code-otlp.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js +5 -6
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js.map +1 -1
- package/dist/cli/commands/proxy/disconnect-orchestrator.d.ts +2 -0
- package/dist/cli/commands/proxy/disconnect-orchestrator.d.ts.map +1 -1
- package/dist/cli/commands/proxy/disconnect-orchestrator.js +34 -5
- package/dist/cli/commands/proxy/disconnect-orchestrator.js.map +1 -1
- package/dist/cli/commands/proxy/index.d.ts.map +1 -1
- package/dist/cli/commands/proxy/index.js +19 -2
- package/dist/cli/commands/proxy/index.js.map +1 -1
- package/dist/cli/commands/sdk/assistant-builder/checks.d.ts +4 -0
- package/dist/cli/commands/sdk/assistant-builder/checks.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/checks.js +32 -0
- package/dist/cli/commands/sdk/assistant-builder/checks.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/commands.d.ts +6 -0
- package/dist/cli/commands/sdk/assistant-builder/commands.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/commands.js +278 -0
- package/dist/cli/commands/sdk/assistant-builder/commands.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/conversations.d.ts +26 -0
- package/dist/cli/commands/sdk/assistant-builder/conversations.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/conversations.js +45 -0
- package/dist/cli/commands/sdk/assistant-builder/conversations.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/normalize.d.ts +11 -0
- package/dist/cli/commands/sdk/assistant-builder/normalize.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/normalize.js +43 -0
- package/dist/cli/commands/sdk/assistant-builder/normalize.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/output.d.ts +10 -0
- package/dist/cli/commands/sdk/assistant-builder/output.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/output.js +29 -0
- package/dist/cli/commands/sdk/assistant-builder/output.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/compare.d.ts +23 -0
- package/dist/cli/commands/sdk/assistant-builder/report/compare.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/compare.js +66 -0
- package/dist/cli/commands/sdk/assistant-builder/report/compare.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/html.d.ts +9 -0
- package/dist/cli/commands/sdk/assistant-builder/report/html.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/html.js +87 -0
- package/dist/cli/commands/sdk/assistant-builder/report/html.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/summary.d.ts +31 -0
- package/dist/cli/commands/sdk/assistant-builder/report/summary.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/summary.js +56 -0
- package/dist/cli/commands/sdk/assistant-builder/report/summary.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/workspace.d.ts +19 -0
- package/dist/cli/commands/sdk/assistant-builder/report/workspace.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/report/workspace.js +112 -0
- package/dist/cli/commands/sdk/assistant-builder/report/workspace.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/runner.d.ts +32 -0
- package/dist/cli/commands/sdk/assistant-builder/runner.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/runner.js +109 -0
- package/dist/cli/commands/sdk/assistant-builder/runner.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/scenarios.d.ts +5 -0
- package/dist/cli/commands/sdk/assistant-builder/scenarios.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/scenarios.js +66 -0
- package/dist/cli/commands/sdk/assistant-builder/scenarios.js.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/types.d.ts +70 -0
- package/dist/cli/commands/sdk/assistant-builder/types.d.ts.map +1 -0
- package/dist/cli/commands/sdk/assistant-builder/types.js +2 -0
- package/dist/cli/commands/sdk/assistant-builder/types.js.map +1 -0
- package/dist/cli/commands/sdk/assistants.d.ts.map +1 -1
- package/dist/cli/commands/sdk/assistants.js +2 -0
- package/dist/cli/commands/sdk/assistants.js.map +1 -1
- package/dist/cli/commands/sdk/services/assistants.d.ts +20 -1
- package/dist/cli/commands/sdk/services/assistants.d.ts.map +1 -1
- package/dist/cli/commands/sdk/services/assistants.js +80 -2
- package/dist/cli/commands/sdk/services/assistants.js.map +1 -1
- package/dist/cli/commands/sdk/utils/cli-utils.js +1 -1
- package/dist/cli/commands/sdk/utils/cli-utils.js.map +1 -1
- package/dist/cli/commands/self-update.d.ts.map +1 -1
- package/dist/cli/commands/self-update.js +5 -1
- package/dist/cli/commands/self-update.js.map +1 -1
- package/dist/cli/commands/shared/constants.d.ts +3 -0
- package/dist/cli/commands/shared/constants.d.ts.map +1 -1
- package/dist/cli/commands/shared/constants.js +3 -0
- package/dist/cli/commands/shared/constants.js.map +1 -1
- package/dist/cli/commands/shared/prompts/storage-scope.d.ts +3 -1
- package/dist/cli/commands/shared/prompts/storage-scope.d.ts.map +1 -1
- package/dist/cli/commands/shared/prompts/storage-scope.js +5 -1
- package/dist/cli/commands/shared/prompts/storage-scope.js.map +1 -1
- package/dist/cli/commands/skills/setup/data.d.ts +5 -1
- package/dist/cli/commands/skills/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/data.js +17 -8
- package/dist/cli/commands/skills/setup/data.js.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.d.ts +1 -0
- package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.js +11 -0
- package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
- package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/index.js +7 -2
- package/dist/cli/commands/skills/setup/index.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/stdio-http-bridge.d.ts.map +1 -1
- package/dist/mcp/stdio-http-bridge.js +4 -0
- package/dist/mcp/stdio-http-bridge.js.map +1 -1
- package/dist/providers/core/base/http-client.d.ts.map +1 -1
- package/dist/providers/core/base/http-client.js +16 -3
- package/dist/providers/core/base/http-client.js.map +1 -1
- package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
- package/dist/providers/core/codemie-auth-helpers.js +2 -1
- package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
- package/dist/providers/core/types.d.ts +3 -0
- package/dist/providers/core/types.d.ts.map +1 -1
- package/dist/providers/core/types.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +2 -0
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/auth-state.d.ts +3 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/auth-state.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/auth-state.js +19 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/auth-state.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/completeness-gate.d.ts +19 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/completeness-gate.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/completeness-gate.js +33 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/completeness-gate.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/forwarder.d.ts +14 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/forwarder.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/forwarder.js +287 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/forwarder.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.d.ts +8 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.js +29 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.d.ts +40 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.js +82 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.d.ts +36 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.js +62 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-io.d.ts +39 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-io.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-io.js +110 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-io.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-paths.d.ts +24 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-paths.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-paths.js +53 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-paths.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-state.d.ts +39 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-state.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-state.js +61 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/spool-state.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/sweep.d.ts +20 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/sweep.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/sweep.js +73 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/sweep.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/tick-processor.d.ts +12 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/tick-processor.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/tick-processor.js +55 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp-spool/tick-processor.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp.plugin.d.ts +14 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp.plugin.js +221 -0
- package/dist/providers/plugins/sso/proxy/plugins/otlp.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts +1 -4
- package/dist/providers/plugins/sso/proxy/proxy-http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-http-client.js +10 -207
- package/dist/providers/plugins/sso/proxy/proxy-http-client.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +2 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/providers/plugins/sso/sso.auth-gate.d.ts +18 -0
- package/dist/providers/plugins/sso/sso.auth-gate.d.ts.map +1 -0
- package/dist/providers/plugins/sso/sso.auth-gate.js +48 -0
- package/dist/providers/plugins/sso/sso.auth-gate.js.map +1 -0
- package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.js +14 -4
- package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.d.ts +17 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +33 -5
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts +3 -0
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js +43 -2
- package/dist/telemetry/clients/claude-desktop/ClaudeDesktopTelemetryAdapter.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +12 -10
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
- package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts.map +1 -1
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js +33 -6
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +2 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +61 -10
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
- package/dist/telemetry/runtime/checkpoints.d.ts +6 -0
- package/dist/telemetry/runtime/checkpoints.d.ts.map +1 -1
- package/dist/telemetry/runtime/checkpoints.js.map +1 -1
- package/dist/telemetry/runtime/types.d.ts +5 -0
- package/dist/telemetry/runtime/types.d.ts.map +1 -1
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +4 -0
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/cli-updater.d.ts +7 -0
- package/dist/utils/cli-updater.d.ts.map +1 -1
- package/dist/utils/cli-updater.js +21 -0
- package/dist/utils/cli-updater.js.map +1 -1
- package/dist/utils/paths.d.ts +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/pricing.json +9 -1
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +3 -2
- package/dist/utils/processes.js.map +1 -1
- package/dist/utils/project-root.d.ts +10 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +25 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/utils/sdk-client.d.ts.map +1 -1
- package/dist/utils/sdk-client.js +4 -0
- package/dist/utils/sdk-client.js.map +1 -1
- package/dist/utils/system-proxy-dispatcher.d.ts +8 -0
- package/dist/utils/system-proxy-dispatcher.d.ts.map +1 -0
- package/dist/utils/system-proxy-dispatcher.js +100 -0
- package/dist/utils/system-proxy-dispatcher.js.map +1 -0
- package/dist/utils/system-proxy.d.ts +115 -0
- package/dist/utils/system-proxy.d.ts.map +1 -0
- package/dist/utils/system-proxy.js +899 -0
- package/dist/utils/system-proxy.js.map +1 -0
- package/dist/utils/windows-path.d.ts +5 -0
- package/dist/utils/windows-path.d.ts.map +1 -1
- package/dist/utils/windows-path.js +1 -1
- package/dist/utils/windows-path.js.map +1 -1
- package/package.json +5 -2
- package/scripts/bundle-statusline.mjs +14 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { logger } from '../../../../../../utils/logger.js';
|
|
2
|
+
import { sanitizeLogArgs } from '../../../../../../utils/security.js';
|
|
3
|
+
import { isSSOCredentials, isJWTCredentials } from '../../../../../core/types.js';
|
|
4
|
+
import { buildAuthHeaders } from '../../../../../core/codemie-auth-helpers.js';
|
|
5
|
+
import { CODEMIE_ENDPOINTS } from '../../../sso.http-client.js';
|
|
6
|
+
import { OTEL_STREAMS } from './spool-paths.js';
|
|
7
|
+
import { advanceCursor, markSessionEnded, } from './session-status.js';
|
|
8
|
+
import { snapshotPendingBytes, snapshotPendingHookRecords } from './spool-io.js';
|
|
9
|
+
import { areCredentialsStale, markCredentialsStale } from './auth-state.js';
|
|
10
|
+
const HOOK_EVENT_TYPE_MAP = {
|
|
11
|
+
SessionStart: 'agent.session.start',
|
|
12
|
+
Stop: 'agent.session.stop',
|
|
13
|
+
StopFailure: 'agent.turn.error',
|
|
14
|
+
SessionEnd: 'agent.session.end',
|
|
15
|
+
UserPromptSubmit: 'agent.prompt.submit',
|
|
16
|
+
PreToolUse: 'agent.tool.start',
|
|
17
|
+
PostToolUse: 'agent.tool.end',
|
|
18
|
+
PostToolUseFailure: 'agent.tool.error',
|
|
19
|
+
SubagentStart: 'agent.subagent.start',
|
|
20
|
+
SubagentStop: 'agent.subagent.stop',
|
|
21
|
+
PreCompact: 'agent.session.compact',
|
|
22
|
+
Notification: 'agent.notification',
|
|
23
|
+
};
|
|
24
|
+
const OTEL_ENDPOINTS = {
|
|
25
|
+
logs: CODEMIE_ENDPOINTS.CLI_ANALYTICS_LOGS,
|
|
26
|
+
metrics: CODEMIE_ENDPOINTS.CLI_ANALYTICS_METRICS,
|
|
27
|
+
traces: CODEMIE_ENDPOINTS.CLI_ANALYTICS_TRACES,
|
|
28
|
+
};
|
|
29
|
+
const MAX_PROMPT_CHARS = 200;
|
|
30
|
+
const MAX_TOOL_FIELD_CHARS = 300;
|
|
31
|
+
const FORWARD_TIMEOUT_MS = 20_000;
|
|
32
|
+
/* ------------------------------------------------------------------ auth --- */
|
|
33
|
+
function decodeJwtClaims(token) {
|
|
34
|
+
const parts = token.split('.');
|
|
35
|
+
if (parts.length < 2)
|
|
36
|
+
return {};
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function resolveUserEmail(credentials) {
|
|
45
|
+
if (isJWTCredentials(credentials)) {
|
|
46
|
+
const claims = decodeJwtClaims(credentials.token);
|
|
47
|
+
if (typeof claims['email'] === 'string' && claims['email'])
|
|
48
|
+
return claims['email'];
|
|
49
|
+
}
|
|
50
|
+
if (isSSOCredentials(credentials)) {
|
|
51
|
+
const accessToken = credentials.cookies['codemie_access_token'];
|
|
52
|
+
if (accessToken) {
|
|
53
|
+
const claims = decodeJwtClaims(accessToken);
|
|
54
|
+
const email = claims['email'] ?? claims['preferred_username'];
|
|
55
|
+
if (typeof email === 'string' && email)
|
|
56
|
+
return email;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return '';
|
|
60
|
+
}
|
|
61
|
+
function buildAuthHeadersFromCreds(credentials) {
|
|
62
|
+
if (isSSOCredentials(credentials))
|
|
63
|
+
return buildAuthHeaders(credentials.cookies);
|
|
64
|
+
if (isJWTCredentials(credentials))
|
|
65
|
+
return buildAuthHeaders(credentials.token);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
/* ------------------------------------------------------------------ http --- */
|
|
69
|
+
async function postToBackend(url, body, contentType, credentials) {
|
|
70
|
+
const headers = buildAuthHeadersFromCreds(credentials);
|
|
71
|
+
if (!headers)
|
|
72
|
+
throw new Error('Unsupported credential type');
|
|
73
|
+
headers['Content-Type'] = contentType;
|
|
74
|
+
const controller = new AbortController();
|
|
75
|
+
const timer = setTimeout(() => controller.abort(), FORWARD_TIMEOUT_MS);
|
|
76
|
+
try {
|
|
77
|
+
return await fetch(url, { method: 'POST', headers, body, signal: controller.signal });
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const isAuthFailure = (response) => response.status === 401 || response.status === 403;
|
|
84
|
+
/**
|
|
85
|
+
* POST a batch, retrying once on 401/403. Anything other than `'ok'` leaves the
|
|
86
|
+
* bytes on disk with the cursor untouched, so the next tick retries them.
|
|
87
|
+
*/
|
|
88
|
+
async function send(sessionId, stream, url, body, contentType, credentials) {
|
|
89
|
+
if (areCredentialsStale()) {
|
|
90
|
+
return 'failed';
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
let response = await postToBackend(url, body, contentType, credentials);
|
|
94
|
+
if (isAuthFailure(response)) {
|
|
95
|
+
response = await postToBackend(url, body, contentType, credentials);
|
|
96
|
+
if (isAuthFailure(response))
|
|
97
|
+
return 'auth-expired';
|
|
98
|
+
}
|
|
99
|
+
if (response.ok) {
|
|
100
|
+
return 'ok';
|
|
101
|
+
}
|
|
102
|
+
logger.debug('[otlp-forwarder] non-success response', ...sanitizeLogArgs({ sessionId, stream, status: response.status }));
|
|
103
|
+
return 'failed';
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
107
|
+
logger.debug('[otlp-forwarder] request error', ...sanitizeLogArgs({ sessionId, stream, err: msg }));
|
|
108
|
+
return 'failed';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/* --------------------------------------------------------------- mapping --- */
|
|
112
|
+
function hookEventType(hookName, event) {
|
|
113
|
+
if (hookName === 'PreToolUse') {
|
|
114
|
+
return event['input'] && event['input']['denied']
|
|
115
|
+
? 'agent.tool.denied'
|
|
116
|
+
: 'agent.tool.start';
|
|
117
|
+
}
|
|
118
|
+
return HOOK_EVENT_TYPE_MAP[hookName] ?? 'agent.event';
|
|
119
|
+
}
|
|
120
|
+
function boundedText(value, maxChars) {
|
|
121
|
+
if (value === undefined || value === null)
|
|
122
|
+
return '';
|
|
123
|
+
const text = typeof value === 'string'
|
|
124
|
+
? value
|
|
125
|
+
: (() => {
|
|
126
|
+
try {
|
|
127
|
+
return JSON.stringify(value) ?? String(value);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return String(value);
|
|
131
|
+
}
|
|
132
|
+
})();
|
|
133
|
+
return text.slice(0, maxChars);
|
|
134
|
+
}
|
|
135
|
+
function limitHookPayload(hookEvent) {
|
|
136
|
+
const limited = { ...hookEvent };
|
|
137
|
+
if (Object.prototype.hasOwnProperty.call(hookEvent, 'prompt')) {
|
|
138
|
+
limited.prompt = boundedText(hookEvent.prompt, MAX_PROMPT_CHARS);
|
|
139
|
+
}
|
|
140
|
+
for (const field of ['tool_input', 'tool_response', 'error']) {
|
|
141
|
+
if (Object.prototype.hasOwnProperty.call(hookEvent, field)) {
|
|
142
|
+
limited[field] = boundedText(hookEvent[field], MAX_TOOL_FIELD_CHARS);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Prevent a nested/raw copy from bypassing the limits.
|
|
146
|
+
delete limited.raw;
|
|
147
|
+
return limited;
|
|
148
|
+
}
|
|
149
|
+
async function resolveGitInfo(ctx, cwd) {
|
|
150
|
+
if (!cwd || ctx.git.branch !== undefined)
|
|
151
|
+
return;
|
|
152
|
+
try {
|
|
153
|
+
const { detectGitBranch, detectGitRemoteRepo } = await import('../../../../../../utils/processes.js');
|
|
154
|
+
const [branch, remote] = await Promise.all([
|
|
155
|
+
detectGitBranch(cwd).then((v) => v ?? ''),
|
|
156
|
+
detectGitRemoteRepo(cwd).then((v) => v ?? ''),
|
|
157
|
+
]);
|
|
158
|
+
ctx.git.branch = branch;
|
|
159
|
+
ctx.git.remote = remote;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
/* best-effort */
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function mapHookRecords(records, ctx) {
|
|
166
|
+
const mapped = [];
|
|
167
|
+
let containsSessionEnd = false;
|
|
168
|
+
let malformed = 0;
|
|
169
|
+
for (const record of records) {
|
|
170
|
+
let spoolData;
|
|
171
|
+
let hookEvent;
|
|
172
|
+
try {
|
|
173
|
+
spoolData = JSON.parse(record);
|
|
174
|
+
hookEvent = JSON.parse(spoolData.raw);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Complete but unusable record: dropped deliberately. Its bytes are still
|
|
178
|
+
// acknowledged with the batch so the cursor can never get stuck on it.
|
|
179
|
+
malformed += 1;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const hookName = String(hookEvent['hook_event_name'] ?? '');
|
|
183
|
+
if (hookName === 'SessionEnd')
|
|
184
|
+
containsSessionEnd = true;
|
|
185
|
+
const cwd = String(hookEvent['cwd'] ?? '');
|
|
186
|
+
await resolveGitInfo(ctx, cwd);
|
|
187
|
+
const limited = limitHookPayload(hookEvent);
|
|
188
|
+
mapped.push(JSON.stringify({
|
|
189
|
+
...limited,
|
|
190
|
+
type: hookEventType(hookName, hookEvent),
|
|
191
|
+
session_id: String(hookEvent['session_id'] ?? ''),
|
|
192
|
+
timestamp: new Date(spoolData.timestamp).toISOString(),
|
|
193
|
+
user_email: ctx.userEmail,
|
|
194
|
+
developer_name: ctx.userEmail,
|
|
195
|
+
git_branch: ctx.git.branch ?? '',
|
|
196
|
+
repo_remote: ctx.git.remote ?? '',
|
|
197
|
+
codemie_project_name: ctx.projectName,
|
|
198
|
+
cwd,
|
|
199
|
+
prompt_body: boundedText(hookEvent['prompt'], MAX_PROMPT_CHARS),
|
|
200
|
+
raw: limited,
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
ndjson: mapped.length > 0 ? `${mapped.join('\n')}\n` : '',
|
|
205
|
+
containsSessionEnd,
|
|
206
|
+
malformed,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/* ------------------------------------------------------------ forwarding --- */
|
|
210
|
+
async function buildForwardContext(credentials) {
|
|
211
|
+
const { readState } = await import('../../../../../../cli/commands/proxy/daemon-manager.js');
|
|
212
|
+
const state = await readState();
|
|
213
|
+
return {
|
|
214
|
+
credentials,
|
|
215
|
+
baseUrl: state?.targetUrl ?? state?.url ?? '',
|
|
216
|
+
projectName: state?.project ?? '',
|
|
217
|
+
userEmail: resolveUserEmail(credentials),
|
|
218
|
+
git: {},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/** Forward the complete hook records after the hooks cursor. */
|
|
222
|
+
async function forwardHooks(sessionId, ctx) {
|
|
223
|
+
const batch = await snapshotPendingHookRecords(sessionId);
|
|
224
|
+
if (!batch) {
|
|
225
|
+
return 'idle';
|
|
226
|
+
}
|
|
227
|
+
const payload = await mapHookRecords(batch.records, ctx);
|
|
228
|
+
if (payload.malformed > 0) {
|
|
229
|
+
logger.debug('[otlp-forwarder] skipped malformed hook records', ...sanitizeLogArgs({ sessionId, count: payload.malformed }));
|
|
230
|
+
}
|
|
231
|
+
if (payload.ndjson.length === 0) {
|
|
232
|
+
// Nothing sendable, but the bytes were consumed — keep the cursor aligned.
|
|
233
|
+
await advanceCursor(sessionId, 'hooks', batch.cursor + batch.byteLength);
|
|
234
|
+
return 'idle';
|
|
235
|
+
}
|
|
236
|
+
const url = `${ctx.baseUrl}${CODEMIE_ENDPOINTS.CLI_ANALYTICS_EVENT_HOOKS}`;
|
|
237
|
+
const result = await send(sessionId, 'hooks', url, payload.ndjson, 'application/x-ndjson', ctx.credentials);
|
|
238
|
+
if (result !== 'ok')
|
|
239
|
+
return result;
|
|
240
|
+
await advanceCursor(sessionId, 'hooks', batch.cursor + batch.byteLength);
|
|
241
|
+
if (payload.containsSessionEnd) {
|
|
242
|
+
await markSessionEnded(sessionId);
|
|
243
|
+
}
|
|
244
|
+
return 'ok';
|
|
245
|
+
}
|
|
246
|
+
/** Forward the raw protobuf bytes after an OTEL stream's cursor. */
|
|
247
|
+
async function forwardOtelStream(sessionId, stream, ctx) {
|
|
248
|
+
const pending = await snapshotPendingBytes(sessionId, stream);
|
|
249
|
+
if (!pending)
|
|
250
|
+
return 'idle';
|
|
251
|
+
const url = `${ctx.baseUrl}${OTEL_ENDPOINTS[stream]}`;
|
|
252
|
+
const result = await send(sessionId, stream, url, pending.bytes, 'application/x-protobuf', ctx.credentials);
|
|
253
|
+
if (result !== 'ok')
|
|
254
|
+
return result;
|
|
255
|
+
await advanceCursor(sessionId, stream, pending.cursor + pending.bytes.length);
|
|
256
|
+
return 'ok';
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Forward everything a session has pending to the CodeMie analytics backend.
|
|
260
|
+
*
|
|
261
|
+
* Each stream is read from its own cursor and acknowledged independently, so a
|
|
262
|
+
* failure on one stream never blocks or rewinds another. Cursors only advance
|
|
263
|
+
* after a successful response, which yields at-least-once delivery: a crash
|
|
264
|
+
* between backend success and cursor persistence re-sends that batch.
|
|
265
|
+
*
|
|
266
|
+
* A forwarded `SessionEnd` only records `endedAt`; it never stops later ticks
|
|
267
|
+
* from delivering bytes that failed or were appended afterwards.
|
|
268
|
+
*/
|
|
269
|
+
export async function forwardSession(sessionId, hooksOnly, credentials) {
|
|
270
|
+
const ctx = await buildForwardContext(credentials);
|
|
271
|
+
const hooksResult = await forwardHooks(sessionId, ctx);
|
|
272
|
+
if (hooksResult === 'auth-expired') {
|
|
273
|
+
markCredentialsStale();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (hooksOnly) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
for (const stream of OTEL_STREAMS) {
|
|
280
|
+
const result = await forwardOtelStream(sessionId, stream, ctx);
|
|
281
|
+
if (result === 'auth-expired') {
|
|
282
|
+
markCredentialsStale();
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=forwarder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forwarder.js","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/forwarder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session serialization lock.
|
|
3
|
+
*
|
|
4
|
+
* Same-session operations are serialized; different sessions run fully in
|
|
5
|
+
* parallel. The map entry is cleaned up once no more waiters remain.
|
|
6
|
+
*/
|
|
7
|
+
export declare function withSessionLock<T>(sessionId: string, fn: () => Promise<T>): Promise<T>;
|
|
8
|
+
//# sourceMappingURL=session-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lock.d.ts","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBtF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session serialization lock.
|
|
3
|
+
*
|
|
4
|
+
* Same-session operations are serialized; different sessions run fully in
|
|
5
|
+
* parallel. The map entry is cleaned up once no more waiters remain.
|
|
6
|
+
*/
|
|
7
|
+
const locks = new Map();
|
|
8
|
+
export function withSessionLock(sessionId, fn) {
|
|
9
|
+
const previous = locks.get(sessionId) ?? Promise.resolve();
|
|
10
|
+
let resolveCurrent;
|
|
11
|
+
const current = new Promise((resolve) => {
|
|
12
|
+
resolveCurrent = resolve;
|
|
13
|
+
});
|
|
14
|
+
locks.set(sessionId, current);
|
|
15
|
+
const result = previous.then(async () => {
|
|
16
|
+
try {
|
|
17
|
+
return await fn();
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
// Clean up the map entry only if it still points to this chain link.
|
|
21
|
+
if (locks.get(sessionId) === current) {
|
|
22
|
+
locks.delete(sessionId);
|
|
23
|
+
}
|
|
24
|
+
resolveCurrent();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=session-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lock.js","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/session-lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE/C,MAAM,UAAU,eAAe,CAAI,SAAiB,EAAE,EAAoB;IACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3D,IAAI,cAA2B,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5C,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,qEAAqE;YACrE,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;gBACrC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YACD,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type SpoolStream } from './spool-paths.js';
|
|
2
|
+
/** Byte offsets that have been acknowledged by the backend, per stream. */
|
|
3
|
+
export type SessionCursors = Record<SpoolStream, number>;
|
|
4
|
+
export interface SessionStatus {
|
|
5
|
+
/**
|
|
6
|
+
* Delivery progress. A cursor is a byte offset into the corresponding spool
|
|
7
|
+
* file and is only advanced after the backend acknowledges those bytes.
|
|
8
|
+
*/
|
|
9
|
+
cursors: SessionCursors;
|
|
10
|
+
/** Consecutive ticks a hooks-only session has waited for OTEL data. */
|
|
11
|
+
waitTicks: number;
|
|
12
|
+
/**
|
|
13
|
+
* Time when a successfully forwarded hooks batch contained `SessionEnd`.
|
|
14
|
+
* Marks *normal completion*, not *delivery completion*: forwarding continues
|
|
15
|
+
* for any bytes that are still pending or appended afterwards.
|
|
16
|
+
*/
|
|
17
|
+
endedAt?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function createStatus(): SessionStatus;
|
|
20
|
+
/** Read and normalize a session status, or `null` when there is no status file. */
|
|
21
|
+
export declare function readStatus(sessionId: string): Promise<SessionStatus | null>;
|
|
22
|
+
export declare function writeStatus(sessionId: string, status: SessionStatus): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Read-modify-write a status under the session lock.
|
|
25
|
+
*
|
|
26
|
+
* NOTE: the session lock is not reentrant — never call this while already
|
|
27
|
+
* holding the lock for the same session.
|
|
28
|
+
*/
|
|
29
|
+
export declare function updateStatus(sessionId: string, mutate: (status: SessionStatus) => void): Promise<void>;
|
|
30
|
+
export declare function markSessionEnded(sessionId: string): Promise<void>;
|
|
31
|
+
/** Advance an acknowledged cursor. Monotonic: never moves backwards. */
|
|
32
|
+
export declare function advanceCursor(sessionId: string, stream: SpoolStream, nextOffset: number): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Create a default status if the session has none.
|
|
35
|
+
* Caller MUST already hold the session lock.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ensureStatusLocked(sessionId: string): Promise<void>;
|
|
38
|
+
/** Lock-acquiring variant — never call while holding the session lock. */
|
|
39
|
+
export declare function ensureStatus(sessionId: string): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=session-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-status.d.ts","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1F,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,OAAO,EAAE,cAAc,CAAC;IACxB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,IAAI,aAAa,CAE5C;AA0BD,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAOjF;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAED,wEAAwE;AACxE,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED,0EAA0E;AAC1E,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { SPOOL_STREAMS, spoolRoot, statusFile } from './spool-paths.js';
|
|
3
|
+
import { withSessionLock } from './session-lock.js';
|
|
4
|
+
export function createStatus() {
|
|
5
|
+
return { cursors: { hooks: 0, logs: 0, metrics: 0, traces: 0 }, waitTicks: 0 };
|
|
6
|
+
}
|
|
7
|
+
function toOffset(value) {
|
|
8
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Coerce whatever is on disk into a well-formed status. Unknown fields (e.g.
|
|
12
|
+
* the removed `*Written` flags, flat cursors, `forwarded`) are dropped.
|
|
13
|
+
*/
|
|
14
|
+
function normalizeStatus(raw) {
|
|
15
|
+
const status = createStatus();
|
|
16
|
+
if (typeof raw !== 'object' || raw === null)
|
|
17
|
+
return status;
|
|
18
|
+
const source = raw;
|
|
19
|
+
const cursors = (source['cursors'] ?? {});
|
|
20
|
+
for (const stream of SPOOL_STREAMS) {
|
|
21
|
+
status.cursors[stream] = toOffset(cursors[stream]);
|
|
22
|
+
}
|
|
23
|
+
status.waitTicks = toOffset(source['waitTicks']);
|
|
24
|
+
const endedAt = toOffset(source['endedAt']);
|
|
25
|
+
if (endedAt > 0)
|
|
26
|
+
status.endedAt = endedAt;
|
|
27
|
+
return status;
|
|
28
|
+
}
|
|
29
|
+
/** Read and normalize a session status, or `null` when there is no status file. */
|
|
30
|
+
export async function readStatus(sessionId) {
|
|
31
|
+
try {
|
|
32
|
+
const raw = await readFile(statusFile(sessionId), 'utf-8');
|
|
33
|
+
return normalizeStatus(JSON.parse(raw));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function writeStatus(sessionId, status) {
|
|
40
|
+
await mkdir(spoolRoot(), { recursive: true });
|
|
41
|
+
await writeFile(statusFile(sessionId), JSON.stringify(status), 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read-modify-write a status under the session lock.
|
|
45
|
+
*
|
|
46
|
+
* NOTE: the session lock is not reentrant — never call this while already
|
|
47
|
+
* holding the lock for the same session.
|
|
48
|
+
*/
|
|
49
|
+
export async function updateStatus(sessionId, mutate) {
|
|
50
|
+
await withSessionLock(sessionId, async () => {
|
|
51
|
+
const status = await readStatus(sessionId);
|
|
52
|
+
if (!status)
|
|
53
|
+
return; // session was swept — nothing to acknowledge
|
|
54
|
+
mutate(status);
|
|
55
|
+
await writeStatus(sessionId, status);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export async function markSessionEnded(sessionId) {
|
|
59
|
+
await updateStatus(sessionId, (status) => {
|
|
60
|
+
status.endedAt ??= Date.now();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Advance an acknowledged cursor. Monotonic: never moves backwards. */
|
|
64
|
+
export async function advanceCursor(sessionId, stream, nextOffset) {
|
|
65
|
+
await updateStatus(sessionId, (status) => {
|
|
66
|
+
status.cursors[stream] = Math.max(status.cursors[stream], nextOffset);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a default status if the session has none.
|
|
71
|
+
* Caller MUST already hold the session lock.
|
|
72
|
+
*/
|
|
73
|
+
export async function ensureStatusLocked(sessionId) {
|
|
74
|
+
if (await readStatus(sessionId))
|
|
75
|
+
return;
|
|
76
|
+
await writeStatus(sessionId, createStatus());
|
|
77
|
+
}
|
|
78
|
+
/** Lock-acquiring variant — never call while holding the session lock. */
|
|
79
|
+
export async function ensureStatus(sessionId) {
|
|
80
|
+
await withSessionLock(sessionId, () => ensureStatusLocked(sessionId));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=session-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-status.js","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/session-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env-backed tuning for the OTLP spool. Read lazily on every call so overrides
|
|
3
|
+
* take effect without a restart.
|
|
4
|
+
*
|
|
5
|
+
* Duration knobs are in minutes and accept fractions (`0.5` = 30s). A missing,
|
|
6
|
+
* unparsable, zero or negative value falls back to the default — notably, a
|
|
7
|
+
* zero interval would otherwise degenerate into a spin loop.
|
|
8
|
+
*/
|
|
9
|
+
/** How often pending spool bytes are forwarded. */
|
|
10
|
+
export declare function sendIntervalMs(): number;
|
|
11
|
+
/** How often drained, inactive sessions are garbage-collected. */
|
|
12
|
+
export declare function sweepIntervalMs(): number;
|
|
13
|
+
/**
|
|
14
|
+
* Ticks a hooks-only session waits for OTEL data before being force-forwarded.
|
|
15
|
+
*
|
|
16
|
+
* NOTE: this is a tick count, so the effective wait is
|
|
17
|
+
* `sendIntervalMs() * hooksOnlyWaitTicks()` — currently ~6 minutes, chosen to
|
|
18
|
+
* out-wait one OTEL exporter flush cycle (~60s) plus a send interval.
|
|
19
|
+
* Revisit this value whenever OTLP_SEND_INTERVAL_MINUTES changes.
|
|
20
|
+
*/
|
|
21
|
+
export declare function hooksOnlyWaitTicks(): number;
|
|
22
|
+
/** Whether a hooks-only session may be forwarded without any OTEL data. */
|
|
23
|
+
export declare function hooksOnlyForwardAllowed(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Quiet period after a normally ended session (`endedAt`) before its drained
|
|
26
|
+
* spool may be deleted. Sized to cover a late OTEL export plus the send
|
|
27
|
+
* interval needed to forward it.
|
|
28
|
+
*/
|
|
29
|
+
export declare function endedSessionGraceMs(): number;
|
|
30
|
+
/**
|
|
31
|
+
* Inactivity period after which a session that never reported `SessionEnd` is
|
|
32
|
+
* considered abandoned and its drained spool may be deleted. Measured from the
|
|
33
|
+
* latest spool-file write, never from session creation or cursor updates.
|
|
34
|
+
*/
|
|
35
|
+
export declare function abandonedSessionGraceMs(): number;
|
|
36
|
+
//# sourceMappingURL=spool-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,mDAAmD;AACnD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env-backed tuning for the OTLP spool. Read lazily on every call so overrides
|
|
3
|
+
* take effect without a restart.
|
|
4
|
+
*
|
|
5
|
+
* Duration knobs are in minutes and accept fractions (`0.5` = 30s). A missing,
|
|
6
|
+
* unparsable, zero or negative value falls back to the default — notably, a
|
|
7
|
+
* zero interval would otherwise degenerate into a spin loop.
|
|
8
|
+
*/
|
|
9
|
+
const MINUTE_MS = 60_000;
|
|
10
|
+
function envMinutesMs(name, fallbackMinutes) {
|
|
11
|
+
const parsed = Number(process.env[name]);
|
|
12
|
+
const minutes = Number.isFinite(parsed) && parsed > 0 ? parsed : fallbackMinutes;
|
|
13
|
+
return minutes * MINUTE_MS;
|
|
14
|
+
}
|
|
15
|
+
function envCount(name, fallbackValue) {
|
|
16
|
+
const parsed = Number(process.env[name]);
|
|
17
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallbackValue;
|
|
18
|
+
}
|
|
19
|
+
function envBoolean(name, fallbackValue) {
|
|
20
|
+
const raw = process.env[name];
|
|
21
|
+
return raw === undefined ? fallbackValue : raw === 'true';
|
|
22
|
+
}
|
|
23
|
+
/** How often pending spool bytes are forwarded. */
|
|
24
|
+
export function sendIntervalMs() {
|
|
25
|
+
return envMinutesMs('OTLP_SEND_INTERVAL_MINUTES', 2);
|
|
26
|
+
}
|
|
27
|
+
/** How often drained, inactive sessions are garbage-collected. */
|
|
28
|
+
export function sweepIntervalMs() {
|
|
29
|
+
return envMinutesMs('OTLP_SWEEP_INTERVAL_MINUTES', 15);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Ticks a hooks-only session waits for OTEL data before being force-forwarded.
|
|
33
|
+
*
|
|
34
|
+
* NOTE: this is a tick count, so the effective wait is
|
|
35
|
+
* `sendIntervalMs() * hooksOnlyWaitTicks()` — currently ~6 minutes, chosen to
|
|
36
|
+
* out-wait one OTEL exporter flush cycle (~60s) plus a send interval.
|
|
37
|
+
* Revisit this value whenever OTLP_SEND_INTERVAL_MINUTES changes.
|
|
38
|
+
*/
|
|
39
|
+
export function hooksOnlyWaitTicks() {
|
|
40
|
+
return envCount('OTLP_SEND_MAX_ATTEMPTS', 3);
|
|
41
|
+
}
|
|
42
|
+
/** Whether a hooks-only session may be forwarded without any OTEL data. */
|
|
43
|
+
export function hooksOnlyForwardAllowed() {
|
|
44
|
+
return envBoolean('OTLP_ALLOW_HOOKS_ONLY_FORWARD', true);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Quiet period after a normally ended session (`endedAt`) before its drained
|
|
48
|
+
* spool may be deleted. Sized to cover a late OTEL export plus the send
|
|
49
|
+
* interval needed to forward it.
|
|
50
|
+
*/
|
|
51
|
+
export function endedSessionGraceMs() {
|
|
52
|
+
return envMinutesMs('OTLP_ENDED_SESSION_GRACE_MINUTES', 15);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Inactivity period after which a session that never reported `SessionEnd` is
|
|
56
|
+
* considered abandoned and its drained spool may be deleted. Measured from the
|
|
57
|
+
* latest spool-file write, never from session creation or cursor updates.
|
|
58
|
+
*/
|
|
59
|
+
export function abandonedSessionGraceMs() {
|
|
60
|
+
return envMinutesMs('OTLP_ABANDONED_SESSION_GRACE_MINUTES', 60);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=spool-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool-config.js","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/spool-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,SAAS,YAAY,CAAC,IAAY,EAAE,eAAuB;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;IACjF,OAAO,OAAO,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,aAAqB;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,aAAsB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AAC5D,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,QAAQ,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,uBAAuB;IACrC,OAAO,UAAU,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,YAAY,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type SpoolStream } from './spool-paths.js';
|
|
2
|
+
/**
|
|
3
|
+
* Append spool bytes and make the session discoverable.
|
|
4
|
+
*
|
|
5
|
+
* Holds the session lock so an append can never interleave with a forwarder
|
|
6
|
+
* snapshot (torn record), a cursor advance, or a sweep deletion.
|
|
7
|
+
*/
|
|
8
|
+
export declare function appendSpool(sessionId: string, stream: SpoolStream, data: string | Buffer): Promise<void>;
|
|
9
|
+
export interface PendingBytes {
|
|
10
|
+
/** Cursor the snapshot was taken from — pass it back when acknowledging. */
|
|
11
|
+
cursor: number;
|
|
12
|
+
bytes: Buffer;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Consistent snapshot of the bytes pending for an OTEL stream.
|
|
16
|
+
*
|
|
17
|
+
* The lock guarantees the snapshot never contains a partially written append,
|
|
18
|
+
* so the protobuf payload handed to the backend is always whole.
|
|
19
|
+
* Must NOT be called while already holding the session lock.
|
|
20
|
+
*/
|
|
21
|
+
export declare function snapshotPendingBytes(sessionId: string, stream: SpoolStream): Promise<PendingBytes | null>;
|
|
22
|
+
export interface PendingHookBatch {
|
|
23
|
+
cursor: number;
|
|
24
|
+
/** Complete, newline-terminated NDJSON records. */
|
|
25
|
+
records: string[];
|
|
26
|
+
/** Exact number of source bytes these records occupy, including newlines. */
|
|
27
|
+
byteLength: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Consistent snapshot of the complete NDJSON records pending for hooks.
|
|
31
|
+
*
|
|
32
|
+
* The chunk is cut at the last newline byte, so an incomplete trailing record
|
|
33
|
+
* stays pending and `byteLength` is a byte-exact acknowledgement amount.
|
|
34
|
+
* Cutting on a newline is safe for UTF-8: `0x0a` cannot occur inside a
|
|
35
|
+
* multi-byte sequence.
|
|
36
|
+
* Must NOT be called while already holding the session lock.
|
|
37
|
+
*/
|
|
38
|
+
export declare function snapshotPendingHookRecords(sessionId: string): Promise<PendingHookBatch | null>;
|
|
39
|
+
//# sourceMappingURL=spool-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spool-io.d.ts","sourceRoot":"","sources":["../../../../../../../src/providers/plugins/sso/proxy/plugins/otlp-spool/spool-io.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA2C3E;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,GAAG,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAID,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQ9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoBlC"}
|