| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(sensor): preserve Claude transcript content and incremental updates (#130) * fix(sensor): preserve Claude transcript content and incremental updates Recover complete JSONL records conservatively, preserve mixed text and tool results, correlate results with exact tool invocations, and distinguish child sessions. Track content changes so incremental capture includes resumed turns. Add synthetic parser and observer regression coverage and document limitations. * feat(sensor): report bounded parser health and suspected format drift Summary: Add fixed-code parser recovery counters and per-source health summaries across all ten capture sources, including runs with no usable sessions. Keep operational records separate from captured telemetry and export them only with --otel-config. Rotate diagnostics.jsonl and error.log, record partial run failures, and add --fail-on-error for schedulers that need strict exit status. Document incomplete coverage, single-writer rotation, and unchanged legacy console output. This change builds on #130 and should merge after it. The PR targets its feature branch to keep the diagnostic diff separate; main-only CI will run after retargeting. Test Plan: Synthetic tests cover partial/zero-output failures, malformed records, expected live tails, missing inputs, log rotation, fixed-schema privacy, resource accounting, and in-memory OTLP health serialization. No real sessions or collectors are used. Revert Plan: Revert this commit to restore the previous error reporting and CLI exit behavior. Existing diagnostic files remain on disk and can be archived by the operator. * fix(sensor): acknowledge OTLP delivery independently of local capture Summary: Drain bounded log batches and reconcile submitted/exported counts so the SDK queue cannot silently drop large captures. Validate protobuf acknowledgements, including HTTP-success partial rejection, before marking delivery successful. Track successful session snapshots in atomic hash-only destination checkpoints, independently of local JSON files. Retry unacknowledged sessions on a later run; continue sending sensor health even when sessions are already acknowledged. Document at-least-once semantics, credential configuration, and retry limitations. This builds on #131 (which builds on #130). Review and merge in that order; the main-only CI matrix will run after retargeting this PR to main. Test Plan: Synthetic tests exercise queue overflow protection, dropped-record detection, partial collector acknowledgements, retries, checkpoint failures, authentication scope, and health-only runs. No live sessions or collectors are used. Revert Plan: Revert this commit to restore the previous exporter. Hash-only checkpoint files remain harmless and are ignored by the previous version. --------- Co-authored-by: Artem Tovkes <43113669+atovkes@users.noreply.github.com> | 5 天前 | |
fix(sensor): preserve Claude transcript content and incremental updates (#130) * fix(sensor): preserve Claude transcript content and incremental updates Recover complete JSONL records conservatively, preserve mixed text and tool results, correlate results with exact tool invocations, and distinguish child sessions. Track content changes so incremental capture includes resumed turns. Add synthetic parser and observer regression coverage and document limitations. * feat(sensor): report bounded parser health and suspected format drift Summary: Add fixed-code parser recovery counters and per-source health summaries across all ten capture sources, including runs with no usable sessions. Keep operational records separate from captured telemetry and export them only with --otel-config. Rotate diagnostics.jsonl and error.log, record partial run failures, and add --fail-on-error for schedulers that need strict exit status. Document incomplete coverage, single-writer rotation, and unchanged legacy console output. This change builds on #130 and should merge after it. The PR targets its feature branch to keep the diagnostic diff separate; main-only CI will run after retargeting. Test Plan: Synthetic tests cover partial/zero-output failures, malformed records, expected live tails, missing inputs, log rotation, fixed-schema privacy, resource accounting, and in-memory OTLP health serialization. No real sessions or collectors are used. Revert Plan: Revert this commit to restore the previous error reporting and CLI exit behavior. Existing diagnostic files remain on disk and can be archived by the operator. * fix(sensor): acknowledge OTLP delivery independently of local capture Summary: Drain bounded log batches and reconcile submitted/exported counts so the SDK queue cannot silently drop large captures. Validate protobuf acknowledgements, including HTTP-success partial rejection, before marking delivery successful. Track successful session snapshots in atomic hash-only destination checkpoints, independently of local JSON files. Retry unacknowledged sessions on a later run; continue sending sensor health even when sessions are already acknowledged. Document at-least-once semantics, credential configuration, and retry limitations. This builds on #131 (which builds on #130). Review and merge in that order; the main-only CI matrix will run after retargeting this PR to main. Test Plan: Synthetic tests exercise queue overflow protection, dropped-record detection, partial collector acknowledgements, retries, checkpoint failures, authentication scope, and health-only runs. No live sessions or collectors are used. Revert Plan: Revert this commit to restore the previous exporter. Hash-only checkpoint files remain harmless and are ignored by the previous version. --------- Co-authored-by: Artem Tovkes <43113669+atovkes@users.noreply.github.com> | 5 天前 | |
feat(sensor): capture Gemini CLI conversations and tool activity (#121) * feat(sensor): capture Gemini CLI conversations and tool activity Summary: ADR currently misses Gemini CLI sessions. Add the gemini source for current JSONL journals and legacy JSON conversation snapshots, including tool arguments/results, status, approval requests, usage, and nested subagents. Consolidate repeated messages without losing recorded activity across rewinds, and refresh resumed session exports. Document native macOS/Linux/Windows paths and GEMINI_CLI_HOME semantics. Add synthetic contract fixtures and a CI matrix on all three operating systems. No runtime dependencies or agent configuration changes are required. Test Plan: 244 Sensor tests pass locally on Python 3.11; changed Python files pass Ruff. Native platform jobs exercise discovery, parsing and export. Tests replay synthetic records from the documented upstream contract; an authenticated live Gemini session is not part of local validation. Revert Plan: Revert this commit to remove the gemini source; existing exported JSON remains usable. * fix(sensor): preserve Gemini mixed and image-only content parts | 11 天前 | |
feat(sensor): add opencode support and complete the platform matrix (#30) * feat(sensor): add opencode support and complete the platform matrix Brings the open-source Sensor up to date with the agents and operating systems it now needs to cover. All changes are additive: no source key, session-id format or event uuid changes, so existing detection pipelines are unaffected. New source: opencode (github.com/sst/opencode) Reads both storage backends — the current SQLite database (opencode.db, or opencode-<channel>.db on non-stable channels, opened read-only) and the older JSON file tree in both its project-scoped and legacy layouts. Honors $XDG_DATA_HOME and $OPENCODE_DB. Tools are classified against the built-in registry, so anything else with an underscore is recorded as an MCP tool with its server_name split out. Windows support for the parsers that were missing it cursor ~/AppData/Roaming/Cursor/User/globalStorage/state.vscdb cline ~/AppData/Roaming/Cursor/User/globalStorage/saoudrizwan.claude-dev/tasks warp ~/AppData/Local/warp/Warp/data/warp.sqlite desktop ~/AppData/Roaming/Claude/local-agent-mode-sessions Each parser now resolves against an ordered candidate list instead of an either/or pair. Warp also gains the sandboxed macOS group-container path (~/Library/Group Containers/2BBY89MBSN.dev.warp/...), which is where the database actually lives on current builds — it was previously unreachable. Claude Desktop agent mode: Dispatch sessions Delegated background agents are stored one level deeper, under agent/local_ditto_<uuid>/, and were not discovered at all. They now surface under the existing claude_desktop source with a claude_desktop_dispatch_ session-id prefix and an is_dispatch flag, so unattended runs can be scored separately from interactive ones. Interactive session ids are unchanged. Session context also picks up plugins, skills, claude_code_version, the memory/skills/plugins toggles and the available slash commands. Observer: ingest_all() iterates a SOURCES table and resolves each parser as self.<source>_parser, replacing seven near-identical branches. Platform-only sources are declared in PLATFORM_RESTRICTED_SOURCES and the CLI derives its --source choices from SOURCES, so adding an agent touches neither. Also: 44 new tests, a Python 3.9-3.13 CI matrix for the Sensor job (the package already declared >=3.9 but only 3.12 was exercised), OS and Python classifiers in pyproject, and docs for the new source, platform matrix, session_context and environment variables. * fix(sensor): resolve Windows app-data roots from the environment; test 3.10 Addresses review on #30. %APPDATA% and %LOCALAPPDATA% point outside the user profile on roaming-profile and redirected-folder setups, so the profile-relative AppData paths added for Cursor, Cline, Warp and Claude Desktop would silently find nothing on exactly the managed Windows fleets this sensor targets. The new utils/platform_paths.py consults the environment first and keeps the profile-relative location only as a fallback, matching how the parsers already honor XDG_DATA_HOME / XDG_CACHE_HOME / OPENCODE_DB. Adopts the env-first approach from #25 by @krishnesh1, and extends it beyond Cursor/Cline to Warp (%LOCALAPPDATA%) and Claude Desktop. Closes the failure mode reported in #21 by @Rahul-s-007. Also adds Python 3.10 to the Sensor CI matrix so every version advertised in the package classifiers is exercised, documents APPDATA/LOCALAPPDATA in the Sensor README, and adds six tests covering env-set/unset/empty resolution plus an end-to-end redirected-%APPDATA% discovery test. Co-authored-by: krishnesh1 <krishnesh1@users.noreply.github.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * ci(sensor): report aggregate "Sensor tests" check for branch protection Branch protection requires a status context named exactly "Sensor tests" - the job name before it became a per-version matrix. The matrix legs report as "Sensor tests (py3.X)", so the required context was never reported and the PR sat at "Expected - Waiting for status to be reported" with every real check green. Add a gate job with the original name that needs the matrix and fails unless every leg succeeded. Runs under if: always() because a skipped job would otherwise satisfy the required check even when a leg fails. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: krishnesh1 <krishnesh1@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> | 1 个月前 | |
feat(sensor): capture Gemini CLI conversations and tool activity (#121) * feat(sensor): capture Gemini CLI conversations and tool activity Summary: ADR currently misses Gemini CLI sessions. Add the gemini source for current JSONL journals and legacy JSON conversation snapshots, including tool arguments/results, status, approval requests, usage, and nested subagents. Consolidate repeated messages without losing recorded activity across rewinds, and refresh resumed session exports. Document native macOS/Linux/Windows paths and GEMINI_CLI_HOME semantics. Add synthetic contract fixtures and a CI matrix on all three operating systems. No runtime dependencies or agent configuration changes are required. Test Plan: 244 Sensor tests pass locally on Python 3.11; changed Python files pass Ruff. Native platform jobs exercise discovery, parsing and export. Tests replay synthetic records from the documented upstream contract; an authenticated live Gemini session is not part of local validation. Revert Plan: Revert this commit to remove the gemini source; existing exported JSON remains usable. * fix(sensor): preserve Gemini mixed and image-only content parts | 11 天前 | |
fix(sensor): preserve Claude transcript content and incremental updates (#130) * fix(sensor): preserve Claude transcript content and incremental updates Recover complete JSONL records conservatively, preserve mixed text and tool results, correlate results with exact tool invocations, and distinguish child sessions. Track content changes so incremental capture includes resumed turns. Add synthetic parser and observer regression coverage and document limitations. * feat(sensor): report bounded parser health and suspected format drift Summary: Add fixed-code parser recovery counters and per-source health summaries across all ten capture sources, including runs with no usable sessions. Keep operational records separate from captured telemetry and export them only with --otel-config. Rotate diagnostics.jsonl and error.log, record partial run failures, and add --fail-on-error for schedulers that need strict exit status. Document incomplete coverage, single-writer rotation, and unchanged legacy console output. This change builds on #130 and should merge after it. The PR targets its feature branch to keep the diagnostic diff separate; main-only CI will run after retargeting. Test Plan: Synthetic tests cover partial/zero-output failures, malformed records, expected live tails, missing inputs, log rotation, fixed-schema privacy, resource accounting, and in-memory OTLP health serialization. No real sessions or collectors are used. Revert Plan: Revert this commit to restore the previous error reporting and CLI exit behavior. Existing diagnostic files remain on disk and can be archived by the operator. * fix(sensor): acknowledge OTLP delivery independently of local capture Summary: Drain bounded log batches and reconcile submitted/exported counts so the SDK queue cannot silently drop large captures. Validate protobuf acknowledgements, including HTTP-success partial rejection, before marking delivery successful. Track successful session snapshots in atomic hash-only destination checkpoints, independently of local JSON files. Retry unacknowledged sessions on a later run; continue sending sensor health even when sessions are already acknowledged. Document at-least-once semantics, credential configuration, and retry limitations. This builds on #131 (which builds on #130). Review and merge in that order; the main-only CI matrix will run after retargeting this PR to main. Test Plan: Synthetic tests exercise queue overflow protection, dropped-record detection, partial collector acknowledgements, retries, checkpoint failures, authentication scope, and health-only runs. No live sessions or collectors are used. Revert Plan: Revert this commit to restore the previous exporter. Hash-only checkpoint files remain harmless and are ignored by the previous version. --------- Co-authored-by: Artem Tovkes <43113669+atovkes@users.noreply.github.com> | 5 天前 | |
fix(sensor): preserve Claude transcript content and incremental updates (#130) * fix(sensor): preserve Claude transcript content and incremental updates Recover complete JSONL records conservatively, preserve mixed text and tool results, correlate results with exact tool invocations, and distinguish child sessions. Track content changes so incremental capture includes resumed turns. Add synthetic parser and observer regression coverage and document limitations. * feat(sensor): report bounded parser health and suspected format drift Summary: Add fixed-code parser recovery counters and per-source health summaries across all ten capture sources, including runs with no usable sessions. Keep operational records separate from captured telemetry and export them only with --otel-config. Rotate diagnostics.jsonl and error.log, record partial run failures, and add --fail-on-error for schedulers that need strict exit status. Document incomplete coverage, single-writer rotation, and unchanged legacy console output. This change builds on #130 and should merge after it. The PR targets its feature branch to keep the diagnostic diff separate; main-only CI will run after retargeting. Test Plan: Synthetic tests cover partial/zero-output failures, malformed records, expected live tails, missing inputs, log rotation, fixed-schema privacy, resource accounting, and in-memory OTLP health serialization. No real sessions or collectors are used. Revert Plan: Revert this commit to restore the previous error reporting and CLI exit behavior. Existing diagnostic files remain on disk and can be archived by the operator. * fix(sensor): acknowledge OTLP delivery independently of local capture Summary: Drain bounded log batches and reconcile submitted/exported counts so the SDK queue cannot silently drop large captures. Validate protobuf acknowledgements, including HTTP-success partial rejection, before marking delivery successful. Track successful session snapshots in atomic hash-only destination checkpoints, independently of local JSON files. Retry unacknowledged sessions on a later run; continue sending sensor health even when sessions are already acknowledged. Document at-least-once semantics, credential configuration, and retry limitations. This builds on #131 (which builds on #130). Review and merge in that order; the main-only CI matrix will run after retargeting this PR to main. Test Plan: Synthetic tests exercise queue overflow protection, dropped-record detection, partial collector acknowledgements, retries, checkpoint failures, authentication scope, and health-only runs. No live sessions or collectors are used. Revert Plan: Revert this commit to restore the previous exporter. Hash-only checkpoint files remain harmless and are ignored by the previous version. --------- Co-authored-by: Artem Tovkes <43113669+atovkes@users.noreply.github.com> | 5 天前 | |
fix(sensor): preserve Claude transcript content and incremental updates (#130) * fix(sensor): preserve Claude transcript content and incremental updates Recover complete JSONL records conservatively, preserve mixed text and tool results, correlate results with exact tool invocations, and distinguish child sessions. Track content changes so incremental capture includes resumed turns. Add synthetic parser and observer regression coverage and document limitations. * feat(sensor): report bounded parser health and suspected format drift Summary: Add fixed-code parser recovery counters and per-source health summaries across all ten capture sources, including runs with no usable sessions. Keep operational records separate from captured telemetry and export them only with --otel-config. Rotate diagnostics.jsonl and error.log, record partial run failures, and add --fail-on-error for schedulers that need strict exit status. Document incomplete coverage, single-writer rotation, and unchanged legacy console output. This change builds on #130 and should merge after it. The PR targets its feature branch to keep the diagnostic diff separate; main-only CI will run after retargeting. Test Plan: Synthetic tests cover partial/zero-output failures, malformed records, expected live tails, missing inputs, log rotation, fixed-schema privacy, resource accounting, and in-memory OTLP health serialization. No real sessions or collectors are used. Revert Plan: Revert this commit to restore the previous error reporting and CLI exit behavior. Existing diagnostic files remain on disk and can be archived by the operator. * fix(sensor): acknowledge OTLP delivery independently of local capture Summary: Drain bounded log batches and reconcile submitted/exported counts so the SDK queue cannot silently drop large captures. Validate protobuf acknowledgements, including HTTP-success partial rejection, before marking delivery successful. Track successful session snapshots in atomic hash-only destination checkpoints, independently of local JSON files. Retry unacknowledged sessions on a later run; continue sending sensor health even when sessions are already acknowledged. Document at-least-once semantics, credential configuration, and retry limitations. This builds on #131 (which builds on #130). Review and merge in that order; the main-only CI matrix will run after retargeting this PR to main. Test Plan: Synthetic tests exercise queue overflow protection, dropped-record detection, partial collector acknowledgements, retries, checkpoint failures, authentication scope, and health-only runs. No live sessions or collectors are used. Revert Plan: Revert this commit to restore the previous exporter. Hash-only checkpoint files remain harmless and are ignored by the previous version. --------- Co-authored-by: Artem Tovkes <43113669+atovkes@users.noreply.github.com> | 5 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 5 天前 | ||
| 5 天前 | ||
| 11 天前 | ||
| 1 个月前 | ||
| 11 天前 | ||
| 5 天前 | ||
| 5 天前 | ||
| 5 天前 |