-
Notifications
You must be signed in to change notification settings - Fork 706
feat: Infinite Sessions #76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Add InfiniteSessionConfig type with thresholds - Add infiniteSessions option to SessionConfig - Expose workspacePath on CopilotSession - Pass config to server and capture workspace path in create/resume
- Add InfiniteSessionConfig TypedDict with thresholds - Add infinite_sessions option to SessionConfig - Expose workspace_path property on CopilotSession - Convert snake_case to camelCase for wire format
- Add InfiniteSessionConfig struct with pointer fields for optional values - Add InfiniteSessions field to SessionConfig - Add WorkspacePath() method to Session - Pass config in CreateSession and capture path in create/resume
- Add InfiniteSessionConfig class with threshold properties - Add InfiniteSessions property to SessionConfig - Add WorkspacePath property to CopilotSession - Pass config in CreateSessionAsync and capture path in create/resume
- Add InfiniteSessionConfig documentation to SessionConfig options - Document workspacePath property on CopilotSession - Add Infinite Sessions section with examples for each SDK - Document compaction events
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR adds support for infinite sessions with automatic context compaction and workspace persistence across all language SDKs (Python, Node.js, Go, and .NET). Sessions can now automatically manage context window limits through background compaction and persist state to workspace directories.
Changes:
- Added
InfiniteSessionConfigtype across all SDKs with configurable thresholds for background compaction and buffer exhaustion - Updated session objects to include
workspace_pathproperty that points to the session's persistent workspace directory - Modified create and resume session methods to accept infinite session configuration and return workspace paths
- Added comprehensive documentation with usage examples for all supported languages
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| python/copilot/types.py | Added InfiniteSessionConfig TypedDict and infinite_sessions field to SessionConfig |
| python/copilot/session.py | Added workspace_path parameter and property to CopilotSession |
| python/copilot/client.py | Updated create_session and resume_session to handle infinite sessions config and workspace path |
| python/README.md | Added Infinite Sessions documentation section with Python examples |
| nodejs/src/types.ts | Added InfiniteSessionConfig interface and infiniteSessions field to SessionConfig |
| nodejs/src/session.ts | Added workspacePath parameter and getter to CopilotSession |
| nodejs/src/index.ts | Exported InfiniteSessionConfig type |
| nodejs/src/client.ts | Updated createSession and resumeSession to handle infinite sessions config and workspace path |
| nodejs/README.md | Added Infinite Sessions documentation section with TypeScript examples |
| go/types.go | Added InfiniteSessionConfig struct and InfiniteSessions field to SessionConfig |
| go/session.go | Added workspacePath field and WorkspacePath() method to Session |
| go/client.go | Updated CreateSession and ResumeSessionWithOptions to handle infinite sessions config and workspace path |
| go/README.md | Added Infinite Sessions documentation section with Go examples |
| dotnet/src/Types.cs | Added InfiniteSessionConfig class and InfiniteSessions property to SessionConfig |
| dotnet/src/Session.cs | Added WorkspacePath parameter and property to CopilotSession |
| dotnet/src/Client.cs | Updated CreateSessionAsync and ResumeSessionAsync to handle infinite sessions config and workspace path |
| dotnet/README.md | Added Infinite Sessions documentation section with C# examples |
Comments suppressed due to low confidence (1)
go/README.md:286
- The function call references
Float64(0.95)but should becopilot.Float64(0.95)to be consistent with thecopilot.Bool(true)on line 284. This appears to be a missing package prefix.
BufferExhaustionThreshold: Float64(0.95), // Block at 95% until compaction completes
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jmoseley not going to block based on this, but please add e2e tests if you feel like that would be warranted for this feature
- Test compaction triggers with low thresholds (0.5%/1%) - Test session.usage_info events show token limits - Test assistant.usage events - Test no compaction events when infinite sessions disabled
The compaction trigger test requires real API calls to get realistic token counts. The replay proxy doesn't provide the token usage data needed for the CLI to trigger compaction.
The test requires a CLI build with infinite sessions support. Run locally with COPILOT_CLI_PATH pointing to a local CLI build.
Add e2e tests for context compaction to Go, Python, and .NET SDKs: - Test that compaction triggers with low thresholds and emits events - Test that no compaction events occur when infinite sessions disabled - Verify session still works after compaction (context preserved via summary) These tests mirror the existing Node.js compaction tests.
Updates CLI dependency for Node.js SDK and shared test harness to support protocol version 2 (infinite sessions).
✅ Cross-SDK Consistency ReviewI've reviewed this PR for consistency across all four SDK implementations (Node.js, Python, Go, and .NET), and I'm pleased to report that this PR maintains excellent cross-SDK consistency. SummaryThis PR adds infinite session configuration to all four SDKs, enabling automatic context compaction and workspace persistence. The feature is implemented consistently across all languages. Detailed Analysis✅ Type DefinitionsAll SDKs define the same
✅ API SurfaceAll SDKs consistently:
✅ DocumentationAll READMEs include:
✅ TestingAll SDKs include equivalent E2E tests:
Naming Convention AdherenceThe PR correctly follows language-specific naming conventions:
ConclusionThis PR is an excellent example of maintaining feature parity across a multi-language SDK. No consistency issues were found. The implementation ensures users have the same capabilities and developer experience regardless of which SDK they choose. Great work! 🎉
|
| InfiniteSessions: &copilot.InfiniteSessionConfig{ | ||
| Enabled: copilot.Bool(true), | ||
| BackgroundCompactionThreshold: copilot.Float64(0.80), // Start compacting at 80% context usage | ||
| BufferExhaustionThreshold: copilot.Float64(0.95), // Block at 95% until compaction completes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistency Issue: The copilot.Float64() helper function used here doesn't exist in the Go SDK.
The codebase has a copilot.Bool() helper in go/types.go:42 for creating bool pointers, but there's no equivalent Float64() helper for creating float64 pointers.
Recommended fix: Add a Float64 helper function to go/types.go:
// Float64 returns a pointer to the given float64 value.
// Use for setting threshold values: BackgroundCompactionThreshold: Float64(0.80)
func Float64(v float64) *float64 {
return &v
}Alternatively, update the README examples to show manual pointer creation without the helper function.
AI generated by SDK Consistency Review Agent for #76
Cross-SDK Consistency Review ✅Great work on implementing Infinite Sessions across all four SDK implementations! The feature parity and consistency are excellent overall. ✅ What's Consistent
|
The compaction tests require the shared test harness proxy, which has timing issues on Windows CI causing TimeoutException during fixture initialization. Tests pass on macOS and Ubuntu.
✅ Cross-SDK Consistency Review: Infinite Sessions FeatureI've reviewed PR #76 for consistency across all four SDK implementations (Node.js, Python, Go, and .NET). Overall, this is an excellent example of consistent multi-language SDK development! 🎉 SummaryThe infinite sessions feature has been implemented consistently across all four SDKs with:
Language Convention ComplianceThe naming follows proper conventions for each language:
All serialize correctly to camelCase for CLI communication. Minor Documentation Enhancement Suggestions
ConclusionThis PR maintains excellent consistency across all SDK implementations. The feature is well-documented, properly tested, and follows each language's idioms correctly. No blocking issues found! 🚀
|
The CompactionTests class was causing the E2ETestFixture to fail initialization on Windows, which cascaded to other test classes. Removing the tests to unblock CI - the compaction feature is still tested via Node.js, Go, and Python SDKs.
… issues" This reverts commit bc261a3.
✅ Cross-SDK Consistency ReviewI've completed a comprehensive review of PR #76 for cross-language SDK consistency. Excellent work! This PR demonstrates outstanding attention to maintaining feature parity across all four SDK implementations. 🎯 What Was ChangedThis PR adds Infinite Sessions functionality with automatic context compaction and workspace persistence across all SDKs:
✨ Consistency HighlightsAPI Design Consistency ✅All SDKs follow proper language conventions:
Feature Parity ✅All SDKs implement:
Test Coverage ✅All SDKs include identical E2E tests:
Documentation ✅All four SDK READMEs include:
🎉 SummaryThis PR is a model example of consistent multi-language SDK development. The feature is implemented uniformly across Node.js, Python, Go, and .NET with:
No consistency issues found. This PR maintains the high quality standards of the copilot-sdk repository. 🚀
|
Tests pass locally on macOS and the proxy timeout issue appears to be unrelated to these specific tests. The ToolsTests fixture timeout that was seen in CI is a pre-existing flaky issue on Windows.
✅ Cross-SDK Consistency ReviewI've reviewed this PR across all four SDK implementations (Node.js, Python, Go, and .NET) and I'm pleased to report excellent consistency! 🎉 SummaryThis PR adds the "Infinite Sessions" feature with automatic context compaction and workspace persistence. The implementation is consistent across all four SDKs with appropriate language-specific naming conventions. What's Consistent ✓1. Core Configuration Type (
2. Session Integration
3. Compaction Events
4. Documentation
5. Testing
Naming Conventions ✓The naming follows proper language idioms:
ConclusionThis is a model example of how to implement a feature across multiple SDKs while maintaining consistency! The team has done an excellent job ensuring feature parity, following language conventions, and providing comprehensive documentation and tests. 👏 No consistency issues found. ✅
|
Windows CI has slower process startup times, especially when multiple test classes initialize their fixtures in parallel. Increase the proxy startup timeout from 10s to 30s on Windows to reduce flakiness.
✅ Cross-SDK Consistency Review: EXCELLENTThis PR demonstrates exemplary consistency across all four SDK implementations. The "infinite sessions" feature has been implemented uniformly with proper attention to language idioms. 🎯 Consistency Analysis✅ API Design (All SDKs)All four SDKs add the same configuration structure with identical semantics:
Defaults: All use 0.80 (80%) and 0.95 (95%) thresholds, enabled by default. ✅ Naming ConventionsProper language idioms are respected:
✅ Session PropertiesAll SDKs expose workspace path:
✅ Event ConsistencyCompaction events use consistent patterns:
✅ DocumentationAll four README files include:
✅ Test CoverageAll SDKs include compaction tests: 4D1C
🏆 SummaryThis is a model example of how to maintain feature parity across a multi-language SDK. No consistency issues found—excellent work!
|
|
|
||
| using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); | ||
| // Use longer timeout on Windows due to slower process startup | ||
| var timeoutSeconds = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 30 : 10; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The windows tests were flaking. Bumping up this timeout seems to stabilize things, but I'd love a second set of eyes @SteveSandersonMS
Allow configuration of infinite sessions and compaction thresholds.