Conversation
There was a problem hiding this comment.
Pull request overview
Introduces a new “Chronicle” session history subsystem in the Copilot extension, backed by a local SQLite store and populated from chat/OTel session activity, and wires it into a new /chronicle intent plus a chronicle_standup tool for generating standup summaries.
Changes:
- Adds a SQLite-backed
SessionStore(+ schema, FTS index, and tests) for sessions/turns/files/refs/checkpoints. - Adds tracking (
SessionStoreTracker) to populate the store from completed OTel spans and chat session lifecycle. - Adds new user entry points:
/chronicle standupintent and achronicle_standuptool, plus prompt/query helpers and tests.
Show a summary per file
| File | Description |
|---|---|
| extensions/copilot/src/platform/chronicle/node/test/sessionStore.spec.ts | Adds unit tests covering schema creation, CRUD, transactions, and FTS search behavior. |
| extensions/copilot/src/platform/chronicle/node/sessionStore.ts | Implements the SQLite SessionStore with schema management, CRUD/query methods, FTS indexing, and read-only query execution. |
| extensions/copilot/src/platform/chronicle/common/sessionStore.ts | Defines the ISessionStore service id, row types, and store interface contract. |
| extensions/copilot/src/extension/tools/node/standupTool.tsx | Adds a chronicle_standup tool that queries local/CLI stores and returns a standup prompt. |
| extensions/copilot/src/extension/tools/node/allTools.ts | Registers the new standup tool module. |
| extensions/copilot/src/extension/tools/common/toolNames.ts | Adds ToolName.ChronicleStandup and categorizes it. |
| extensions/copilot/src/extension/intents/node/chronicleIntent.ts | Adds /chronicle intent with standup subcommand and optional cloud querying. |
| extensions/copilot/src/extension/intents/node/allIntents.ts | Registers the new ChronicleIntent in the intent registry. |
| extensions/copilot/src/extension/extension/vscode-node/services.ts | Wires up ISessionStore as a service backed by a persisted SQLite DB path. |
| extensions/copilot/src/extension/extension/vscode-node/contributions.ts | Registers SessionStoreTracker contribution to populate the store. |
| extensions/copilot/src/extension/common/constants.ts | Adds Intent.Chronicle and maps the chronicle command name. |
| extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts | Implements buffered span-based tracking and batched flushing into ISessionStore. |
| extensions/copilot/src/extension/chronicle/node/cloudSessionStoreClient.ts | Adds a client for querying a cloud analytics endpoint (DuckDB SQL) for cross-machine sessions. |
| extensions/copilot/src/extension/chronicle/common/test/standupPrompt.spec.ts | Adds tests for standup prompt formatting and tracking helpers. |
| extensions/copilot/src/extension/chronicle/common/standupPrompt.ts | Provides SQLite query builders and constructs the standup prompt from fetched data. |
| extensions/copilot/src/extension/chronicle/common/sessionStoreTracking.ts | Adds helper functions to extract file paths and refs from tool calls. |
| extensions/copilot/package.nls.json | Adds localized description string for the new chronicle participant. |
| extensions/copilot/package.json | Contributes the new chronicle chat participant entry. |
Copilot's findings
- Files reviewed: 18/18 changed files
- Comments generated: 8
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/node/cloudSessionStoreClient.ts
Show resolved
Hide resolved
extensions/copilot/src/extension/intents/node/chronicleIntent.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/common/standupPrompt.ts
Outdated
Show resolved
Hide resolved
Screenshot ChangesBase: Changed (31) |
There was a problem hiding this comment.
Pull request overview
Adds a new “Chronicle” capability to Copilot Chat to persist session activity locally (SQLite/FTS) and optionally export session events to a remote “Mission Control” backend, enabling a standup-style summary experience gated behind a team-internal setting.
Changes:
- Introduces a SQLite-backed session store (schema, FTS indexing, read-only querying) plus unit tests.
- Adds tracking/export plumbing: OTel span translation, local store population, remote event batching with circuit breaker + secret filtering, and consent flow scaffolding.
- Registers a new
/chronicleintent and achronicle_standuptool, plus related context keys and contributions.
Show a summary per file
| File | Description |
|---|---|
| extensions/copilot/src/platform/configuration/common/configurationService.ts | Adds team-internal session search setting |
| extensions/copilot/src/platform/chronicle/node/test/sessionStore.spec.ts | Unit tests for SQLite session store |
| extensions/copilot/src/platform/chronicle/node/sessionStore.ts | SQLite/FTS5-backed session store implementation |
| extensions/copilot/src/platform/chronicle/common/sessionStore.ts | Shared store types + service interface |
| extensions/copilot/src/extension/tools/node/standupTool.tsx | Tool to build standup prompt from stores |
| extensions/copilot/src/extension/tools/node/allTools.ts | Registers new standup tool module |
| extensions/copilot/src/extension/tools/common/toolNames.ts | Adds tool name + category mapping |
| extensions/copilot/src/extension/intents/node/chronicleIntent.ts | New /chronicle slash-command intent |
| extensions/copilot/src/extension/intents/node/allIntents.ts | Registers Chronicle intent |
| extensions/copilot/src/extension/extension/vscode-node/services.ts | Wires SessionStore into DI container |
| extensions/copilot/src/extension/extension/vscode-node/contributions.ts | Registers Chronicle contributions |
| extensions/copilot/src/extension/conversation/vscode-node/chatParticipants.ts | Adds consent check + reset command |
| extensions/copilot/src/extension/contextKeys/vscode-node/contextKeys.contribution.ts | Adds context key for feature gating |
| extensions/copilot/src/extension/common/constants.ts | Adds Chronicle intent constant + mapping |
| extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts | Tracks spans → local session store |
| extensions/copilot/src/extension/chronicle/vscode-node/remoteSessionExporter.ts | Exports spans → Mission Control events |
| extensions/copilot/src/extension/chronicle/node/missionControlClient.ts | MC session/events HTTP client |
| extensions/copilot/src/extension/chronicle/node/cloudSessionStoreClient.ts | Cloud analytics query client (DuckDB SQL) |
| extensions/copilot/src/extension/chronicle/common/test/standupPrompt.spec.ts | Tests for standup prompt + extraction |
| extensions/copilot/src/extension/chronicle/common/test/sessionIndexingPreference.spec.ts | Tests for consent preference storage |
| extensions/copilot/src/extension/chronicle/common/test/secretFilter.spec.ts | Tests for secret redaction |
| extensions/copilot/src/extension/chronicle/common/test/eventTranslator.spec.ts | Tests for span→event translation |
| extensions/copilot/src/extension/chronicle/common/test/circuitBreaker.spec.ts | Tests for circuit breaker behavior |
| extensions/copilot/src/extension/chronicle/common/standupPrompt.ts | Builds standup prompt + SQL query builders |
| extensions/copilot/src/extension/chronicle/common/sessionStoreTracking.ts | Extracts files/refs from tool activity |
| extensions/copilot/src/extension/chronicle/common/sessionIndexingPreference.ts | Consent prompt + preference persistence |
| extensions/copilot/src/extension/chronicle/common/secretFilter.ts | Secret filtering utilities |
| extensions/copilot/src/extension/chronicle/common/missionControlTypes.ts | MC API/event type definitions |
| extensions/copilot/src/extension/chronicle/common/eventTranslator.ts | Translates spans into MC event format |
| extensions/copilot/src/extension/chronicle/common/circuitBreaker.ts | Circuit breaker implementation |
| extensions/copilot/package.nls.json | Adds Chronicle command description string |
| extensions/copilot/package.json | Adds slash command + reset-consent command |
Copilot's findings
- Files reviewed: 32/32 changed files
- Comments generated: 8
extensions/copilot/src/extension/conversation/vscode-node/chatParticipants.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/common/sessionIndexingPreference.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/intents/node/chronicleIntent.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/remoteSessionExporter.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/remoteSessionExporter.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds “Chronicle” session-history support with local SQLite indexing plus optional cloud sync/export, enabling /chronicle:* commands and a read-only SQL tool over recorded sessions.
Changes:
- Introduces a local SQLite-backed
SessionStorewith FTS indexing and a VS Code tracker that records sessions/turns/files/refs from OTel spans. - Adds cloud querying/export plumbing (Mission Control client + remote exporter) gated by user consent and repo exclusions.
- Registers the
/chronicleintent and asession_store_sqltool, plus settings/context keys and package contributions.
Show a summary per file
| File | Description |
|---|---|
| extensions/copilot/src/platform/configuration/common/configurationService.ts | Adds Chronicle-related config keys (local index + cloud sync + repo exclusions). |
| extensions/copilot/src/platform/chronicle/node/test/sessionStore.spec.ts | Adds unit tests for SQLite session store behavior and FTS search. |
| extensions/copilot/src/platform/chronicle/node/sessionStore.ts | Implements SQLite SessionStore with schema/migrations, CRUD, FTS search, and read-only query execution. |
| extensions/copilot/src/platform/chronicle/common/sessionStore.ts | Defines ISessionStore service contract and row types shared across environments. |
| extensions/copilot/src/extension/tools/node/sessionStoreSqlTool.ts | Adds a tool to run read-only SQL against local or cloud session store with telemetry + formatting. |
| extensions/copilot/src/extension/tools/node/allTools.ts | Registers the new sessionStoreSqlTool. |
| extensions/copilot/src/extension/tools/common/toolNames.ts | Adds SessionStoreSql tool name and related tool/category entries. |
| extensions/copilot/src/extension/test/vscode-node/services.ts | Wires ISessionStore into VS Code-node test DI container. |
| extensions/copilot/src/extension/test/node/services.ts | Wires ISessionStore into node unit test DI container. |
| extensions/copilot/src/extension/prompts/node/panel/chroniclePrompt.tsx | Adds a prompt wrapper for Chronicle tool-calling flows. |
| extensions/copilot/src/extension/intents/node/chronicleIntent.ts | Implements /chronicle intent (standup/tips/freeform) using local+cloud session queries. |
| extensions/copilot/src/extension/intents/node/allIntents.ts | Registers ChronicleIntent. |
| extensions/copilot/src/extension/intents/node/agentIntent.ts | Explicitly disables the SQL tool outside /chronicle. |
| extensions/copilot/src/extension/extension/vscode-node/services.ts | Creates and registers the persisted SQLite session-store instance. |
| extensions/copilot/src/extension/extension/vscode-node/contributions.ts | Registers Chronicle contributions (local tracker + remote exporter). |
| extensions/copilot/src/extension/conversation/vscode-node/chatParticipants.ts | Minor formatting-only changes. |
| extensions/copilot/src/extension/contextKeys/vscode-node/contextKeys.contribution.ts | Adds a context key to gate Chronicle UI/commands via experiment-based config. |
| extensions/copilot/src/extension/common/constants.ts | Maps chronicle commands to the new intent. |
| extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts | Adds buffered local session indexing powered by OTel span completion. |
| extensions/copilot/src/extension/chronicle/vscode-node/remoteSessionExporter.ts | Adds buffered Mission Control export with circuit breaking and secret filtering. |
| extensions/copilot/src/extension/chronicle/node/missionControlClient.ts | Implements MC HTTP client (create session + submit events). |
| extensions/copilot/src/extension/chronicle/node/cloudSessionStoreClient.ts | Implements cloud analytics query client and columnar→row conversion. |
| extensions/copilot/src/extension/chronicle/common/test/standupPrompt.spec.ts | Adds tests for standup prompt creation and tracking extractors. |
| extensions/copilot/src/extension/chronicle/common/test/sessionIndexingPreference.spec.ts | Adds tests for cloud consent and repo exclusion behavior. |
| extensions/copilot/src/extension/chronicle/common/test/secretFilter.spec.ts | Adds tests for secret redaction and dynamic secret registration. |
| extensions/copilot/src/extension/chronicle/common/test/eventTranslator.spec.ts | Adds tests for translating OTel spans to Mission Control event format. |
| extensions/copilot/src/extension/chronicle/common/test/circuitBreaker.spec.ts | Adds tests for circuit breaker behavior/backoff and probe timeout. |
| extensions/copilot/src/extension/chronicle/common/standupPrompt.ts | Adds SQL query helpers + standup prompt builder. |
| extensions/copilot/src/extension/chronicle/common/sessionStoreTracking.ts | Adds extractors for file paths, refs, and repo info from tool calls. |
| extensions/copilot/src/extension/chronicle/common/sessionIndexingPreference.ts | Adds preference logic for local vs cloud sync + repo exclusion patterns. |
| extensions/copilot/src/extension/chronicle/common/secretFilter.ts | Adds secret filtering utilities and runtime secret registration. |
| extensions/copilot/src/extension/chronicle/common/missionControlTypes.ts | Defines Mission Control API/request types for session events. |
| extensions/copilot/src/extension/chronicle/common/eventTranslator.ts | Adds OTel span → Mission Control event translation with truncation and size gating. |
| extensions/copilot/src/extension/chronicle/common/circuitBreaker.ts | Adds a circuit breaker used by remote exporter to avoid cascading failures. |
| extensions/copilot/package.nls.json | Adds localized strings for /chronicle descriptions and cloud-sync settings. |
| extensions/copilot/package.json | Contributes /chronicle commands, settings, and the SQL tool manifest. |
Copilot's findings
Comments suppressed due to low confidence (3)
extensions/copilot/src/platform/configuration/common/configurationService.ts:1
- This string-array setting is missing a validator (unlike the adjacent boolean setting). Without validation, malformed config values can reach
SessionIndexingPreferenceand break matching logic at runtime. Add an appropriate array-of-strings validator (consistent with this file’s other settings) so invalid values are rejected/coerced early.
extensions/copilot/src/extension/tools/node/sessionStoreSqlTool.ts:1 - The tool claims “Only SELECT queries are allowed”, but enforcement is currently a blocklist of a few keywords. This is especially risky on the local path when
executeReadOnlyFallback()is used (Node without authorizer), since non-SELECT statements likeVACUUM,ANALYZE,REINDEX, transaction control (BEGIN/COMMIT), or other dialect-specific write/export commands are not blocked. Prefer enforcing an allowlist (e.g., query must be a single statement starting withSELECTorWITHand contain no semicolons), and expand blocking to cover known mutators if an allowlist isn’t feasible.
extensions/copilot/src/extension/tools/node/sessionStoreSqlTool.ts:1 - Table formatting doesn’t escape cell values. If a value contains
|or newlines, the markdown table will break and can produce confusing output. Escape/replace|and line breaks insbefore joining (and consider backtick-wrapping values) to keep rendering stable.
- Files reviewed: 36/36 changed files
- Comments generated: 8
extensions/copilot/src/extension/chronicle/common/test/sessionIndexingPreference.spec.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/common/sessionIndexingPreference.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Outdated
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/sessionStoreTracker.ts
Show resolved
Hide resolved
extensions/copilot/src/extension/chronicle/vscode-node/remoteSessionExporter.ts
Outdated
Show resolved
Hide resolved
…igrate-5049 # Conflicts: # extensions/copilot/src/extension/tools/common/toolNames.ts
Chronicle — Session Search (local and cloud)
Overview
Chronicle enables agent to learn from your past coding sessions. It tracks session data locally, optionally syncs to cloud, and provides
/chroniclecommands for standups, tips, and freeform queries.Architecture
Settings & Feature Gating
Three settings control the Chronicle feature:
1.
localIndex.enabled(internal, ExP-rollable)defineTeamInternalSetting+ConfigType.ExperimentBasedTeamInternal(not in package.json)/chroniclecommands, and context key2.
cloudSync.enabled(user-facing, experimental)defineSetting+ConfigType.Simplewhen: github.copilot.sessionSearch.enabledfalse3.
cloudSync.excludeRepositories(user-facing, experimental)defineSetting+ConfigType.Simplewhen: github.copilot.sessionSearch.enabled[]Context Key
github.copilot.sessionSearch.enabled— set fromSessionSearchLocalIndexEnabledviagetExperimentBasedConfigObservable. Controls visibility of:/chronicle,/chronicle:standup,/chronicle:tipscommandscloudSync.enabledandcloudSync.excludeRepositoriessettingsFeature Gating Flow
Behavior Matrix
ChronicleIntent — /chronicle Commands
Data Flow — Session Lifecycle
Security