@qiaolei81/copilot-session-viewer 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +25 -2
- package/.nycrc +0 -29
- package/AGENTS.md +0 -109
- package/CHANGELOG.md +0 -313
- package/CONTRIBUTING.md +0 -104
- package/RELEASE.md +0 -146
- package/docs/API.md +0 -471
- package/docs/DEVELOPMENT.md +0 -556
- package/docs/INSTALLATION.md +0 -329
- package/docs/README.md +0 -102
- package/docs/TROUBLESHOOTING.md +0 -630
- package/docs/images/homepage.png +0 -0
- package/docs/images/session-detail.png +0 -0
- package/docs/images/time-analysis.png +0 -0
- package/docs/unified-event-format-design.md +0 -844
- package/docs/unified-event-format-implementation.md +0 -350
- package/eslint.config.mjs +0 -133
- package/examples/parser-usage.js +0 -114
- package/scripts/release.sh +0 -43
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qiaolei81/copilot-session-viewer",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Web UI for viewing GitHub Copilot CLI session logs",
|
|
5
5
|
"author": "Lei Qiao <qiaolei81@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -84,5 +84,28 @@
|
|
|
84
84
|
"nyc": "^17.1.0",
|
|
85
85
|
"supertest": "^7.2.2",
|
|
86
86
|
"v8-to-istanbul": "^9.3.0"
|
|
87
|
-
}
|
|
87
|
+
},
|
|
88
|
+
"files": [
|
|
89
|
+
"bin/",
|
|
90
|
+
"server.js",
|
|
91
|
+
"lib/",
|
|
92
|
+
"src/app.js",
|
|
93
|
+
"src/config/",
|
|
94
|
+
"src/controllers/",
|
|
95
|
+
"src/middleware/",
|
|
96
|
+
"src/models/",
|
|
97
|
+
"src/routes/",
|
|
98
|
+
"src/schemas/",
|
|
99
|
+
"src/services/",
|
|
100
|
+
"src/telemetry.js",
|
|
101
|
+
"src/utils/",
|
|
102
|
+
"!src/**/__tests__/",
|
|
103
|
+
"!src/**/*.test.js",
|
|
104
|
+
"views/",
|
|
105
|
+
"public/css/",
|
|
106
|
+
"public/js/*.min.js",
|
|
107
|
+
"public/img/",
|
|
108
|
+
"LICENSE",
|
|
109
|
+
"README.md"
|
|
110
|
+
]
|
|
88
111
|
}
|
package/.nycrc
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"all": true,
|
|
3
|
-
"include": [
|
|
4
|
-
"server.js",
|
|
5
|
-
"src/**/*.js",
|
|
6
|
-
"public/**/*.js"
|
|
7
|
-
],
|
|
8
|
-
"exclude": [
|
|
9
|
-
"**/*.test.js",
|
|
10
|
-
"**/__tests__/**",
|
|
11
|
-
"**/node_modules/**",
|
|
12
|
-
"coverage/**",
|
|
13
|
-
".nyc_output/**",
|
|
14
|
-
"test-results/**",
|
|
15
|
-
"scripts/**",
|
|
16
|
-
"**/*.spec.js"
|
|
17
|
-
],
|
|
18
|
-
"reporter": [
|
|
19
|
-
"text",
|
|
20
|
-
"text-summary",
|
|
21
|
-
"html",
|
|
22
|
-
"lcov"
|
|
23
|
-
],
|
|
24
|
-
"report-dir": "./coverage/combined",
|
|
25
|
-
"temp-dir": "./.nyc_output",
|
|
26
|
-
"cache": true,
|
|
27
|
-
"sourceMap": false,
|
|
28
|
-
"instrument": false
|
|
29
|
-
}
|
package/AGENTS.md
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# AGENTS.md
|
|
2
|
-
|
|
3
|
-
## Project overview
|
|
4
|
-
Web UI for viewing and analyzing GitHub Copilot CLI session logs. Built with Express.js, EJS templates, and vanilla JavaScript (Vue 3 for session detail view).
|
|
5
|
-
|
|
6
|
-
## Setup commands
|
|
7
|
-
- Install deps: `npm install`
|
|
8
|
-
- Start server: `npm start`
|
|
9
|
-
- Dev mode (auto-reload): `npm run dev`
|
|
10
|
-
- Run all tests: `npm run test:all`
|
|
11
|
-
- Lint code: `npm run lint`
|
|
12
|
-
- Fix lint issues: `npm run lint:fix`
|
|
13
|
-
|
|
14
|
-
## Code style
|
|
15
|
-
- JavaScript (Node.js 22+)
|
|
16
|
-
- Single quotes for strings
|
|
17
|
-
- No unused variables (prefix with `_` if intentionally unused in catch blocks)
|
|
18
|
-
- Error handling: always include `{ cause }` when re-throwing errors
|
|
19
|
-
- ESLint enforced (no errors, warnings acceptable)
|
|
20
|
-
|
|
21
|
-
## File structure
|
|
22
|
-
```
|
|
23
|
-
server.js # Main Express app
|
|
24
|
-
src/
|
|
25
|
-
config.js # Configuration constants
|
|
26
|
-
session.js # Session data model
|
|
27
|
-
sessionRepository.js # Session loading/caching
|
|
28
|
-
insightService.js # Copilot-based analysis
|
|
29
|
-
processManager.js # Background process tracking
|
|
30
|
-
fileUtils.js # File operations
|
|
31
|
-
helpers.js # Utility functions
|
|
32
|
-
views/
|
|
33
|
-
index.ejs # Session list (main page)
|
|
34
|
-
session-vue.ejs # Session detail (Vue 3)
|
|
35
|
-
time-analyze.ejs # Timeline analysis
|
|
36
|
-
__tests__/ # Jest unit tests
|
|
37
|
-
__tests__/e2e/ # Playwright e2e tests
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Testing instructions
|
|
41
|
-
- **Unit tests**: `npm test` (Jest)
|
|
42
|
-
- **E2E tests**: `npm run test:e2e` (Playwright)
|
|
43
|
-
- **Coverage**: `npm run test:coverage`
|
|
44
|
-
- Always run `npm run lint` before committing
|
|
45
|
-
- E2E tests expect server running on port 3838
|
|
46
|
-
- Tests use `~/.copilot/session-state/` by default
|
|
47
|
-
|
|
48
|
-
## Common tasks
|
|
49
|
-
|
|
50
|
-
### Adding a new route
|
|
51
|
-
1. Add route handler in `server.js`
|
|
52
|
-
2. Create corresponding view in `views/`
|
|
53
|
-
3. Add E2E test in `__tests__/e2e/`
|
|
54
|
-
4. Update README if user-facing
|
|
55
|
-
|
|
56
|
-
### Modifying session parsing
|
|
57
|
-
1. Edit `src/session.js` or `src/fileUtils.js`
|
|
58
|
-
2. Run unit tests: `npm test`
|
|
59
|
-
3. Test with real sessions from `~/.copilot/session-state/`
|
|
60
|
-
|
|
61
|
-
### UI changes
|
|
62
|
-
- Main page: edit `views/index.ejs` (vanilla JS)
|
|
63
|
-
- Session detail: edit `views/session-vue.ejs` (Vue 3 CDN)
|
|
64
|
-
- Time analysis: edit `views/time-analyze.ejs` (vanilla JS)
|
|
65
|
-
- Restart server to see changes: `npm run dev` (auto-reload)
|
|
66
|
-
|
|
67
|
-
## Important constraints
|
|
68
|
-
|
|
69
|
-
### Security
|
|
70
|
-
- No authentication (local-only tool)
|
|
71
|
-
- Helmet.js for basic security headers
|
|
72
|
-
- Rate limiting on upload endpoint
|
|
73
|
-
- Input validation on file paths
|
|
74
|
-
- CORS restricted to localhost origins
|
|
75
|
-
|
|
76
|
-
### Dependencies
|
|
77
|
-
- **copilot CLI** must be in PATH (used by insightService)
|
|
78
|
-
- Node.js 22+ (uses native fetch, improved performance)
|
|
79
|
-
- Session files: `~/.copilot/session-state/` (configurable via SESSION_DIR env)
|
|
80
|
-
|
|
81
|
-
### Performance
|
|
82
|
-
- Session list caches for 30 seconds
|
|
83
|
-
- Virtual scrolling for large event lists (vue-recycle-scroller)
|
|
84
|
-
- Compression enabled (gzip)
|
|
85
|
-
- Static assets served via Express
|
|
86
|
-
|
|
87
|
-
## Debugging tips
|
|
88
|
-
- Check server logs: `tail -f /tmp/copilot-session-viewer.log` (if running via nohup)
|
|
89
|
-
- Inspect session files: `cat ~/.copilot/session-state/<session-id>/events.jsonl`
|
|
90
|
-
- Browser DevTools console for client-side issues
|
|
91
|
-
- Use `DEBUG=*` env var for verbose logging (if implemented)
|
|
92
|
-
|
|
93
|
-
## Commit guidelines
|
|
94
|
-
- Use conventional commits: `feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`
|
|
95
|
-
- Run `npm run lint:fix` before committing
|
|
96
|
-
- All tests must pass: `npm run test:all`
|
|
97
|
-
- Keep commits atomic and focused
|
|
98
|
-
|
|
99
|
-
## Known gotchas
|
|
100
|
-
- Vue 3 templates auto-unwrap refs - don't use `.value` in templates
|
|
101
|
-
- `filteredEvents` vs `flatEvents` - use correct one for virtual scroller indices
|
|
102
|
-
- Platform-specific paths: always rely on system PATH, never hardcode `/opt/homebrew` etc.
|
|
103
|
-
- EJS escaping: use `<%- %>` for trusted HTML, `<%= %>` for user input
|
|
104
|
-
|
|
105
|
-
## PR instructions
|
|
106
|
-
- Title format: `<type>: <description>` (e.g., `feat: add brand colors for model badges`)
|
|
107
|
-
- Link related issues if any
|
|
108
|
-
- Include screenshots for UI changes
|
|
109
|
-
- Verify all tests pass locally before pushing
|
package/CHANGELOG.md
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [0.3.3] - 2026-03-13
|
|
9
|
-
|
|
10
|
-
### Added
|
|
11
|
-
- **Frontend Build Pipeline** - esbuild-based build system (`scripts/build.mjs`) extracts inline JS from EJS templates into standalone minified bundles
|
|
12
|
-
- **Application Insights Telemetry** - Backend telemetry via `applicationinsights@2.9.8` (11 custom events, 3 metrics); frontend telemetry via CDN SDK (13 interaction events)
|
|
13
|
-
- **Browser Telemetry Snippet** - `views/telemetry-snippet.ejs` partial for consistent frontend telemetry injection
|
|
14
|
-
- **Tarball Verification in CI** - E2E tests now run against `npx`-installed tgz package, verifying the published artifact works end-to-end
|
|
15
|
-
- **npm Publish Smoke Test** - Pre-publish step installs tgz, starts server, and verifies HTTP 200
|
|
16
|
-
|
|
17
|
-
### Changed
|
|
18
|
-
- **Frontend Architecture** - 4642 lines of inline JS extracted from 3 EJS templates into 4 standalone bundles (net -3370 lines)
|
|
19
|
-
- `src/frontend/homepage.js` → `public/js/homepage.min.js` (9.7K)
|
|
20
|
-
- `src/frontend/session-detail.js` → `public/js/session-detail.min.js` (45.5K)
|
|
21
|
-
- `src/frontend/time-analyze.js` → `public/js/time-analyze.min.js` (54.6K)
|
|
22
|
-
- `src/frontend/telemetry-browser.js` → `public/js/telemetry-browser.min.js` (1.5K)
|
|
23
|
-
- **Server Data Bridge** - EJS templates pass server data to external bundles via `window.__PAGE_DATA`
|
|
24
|
-
- **CI Pipeline** - E2E tests run against packed tgz via `npx` (not source); telemetry disabled in all CI steps
|
|
25
|
-
- **npm Package** - Source files (`src/frontend/`) excluded via `.npmignore`; only `.min.js` bundles shipped
|
|
26
|
-
|
|
27
|
-
### Fixed
|
|
28
|
-
- **Missing Runtime Dependency** - `adm-zip` moved from devDependencies to dependencies (was causing `MODULE_NOT_FOUND` when installed from npm)
|
|
29
|
-
- **ESLint Config** - Added frontend globals (Vue, marked, DOMPurify), excluded `public/js/*.min.js` from linting, fixed unused vars and eqeqeq warnings
|
|
30
|
-
|
|
31
|
-
## [0.3.2] - 2026-03-08
|
|
32
|
-
|
|
33
|
-
### Fixed
|
|
34
|
-
- **VSCode Session Duration** - Duration now uses the last `terminalCommandState.timestamp` (when the agent actually executed a command) instead of a `toolCount × 3500ms` heuristic. Long-running agentic sessions that span multiple hours are now measured correctly
|
|
35
|
-
- **VSCode Multi-Workspace Dedup** - `_findVsCodeSession` now collects candidates from all matching workspace hashes and returns the one with the latest effective end time (most complete data), instead of returning the first match found
|
|
36
|
-
- **Session `createdAt` in CI** - `Session.fromDirectory` now reads `startTime`/`endTime` from `workspace.yaml` (in addition to `created_at`/`updated_at`), fixing `createdAt` being undefined in environments where `stats.birthtime` is unavailable
|
|
37
|
-
|
|
38
|
-
### Refactored
|
|
39
|
-
- **`_buildVsCodeSession()`** - Extracted shared VSCode session construction logic into a single method used by both the main scan loop and `_findVsCodeSession`, eliminating duplicate `effectiveEnd2`/`toolCount2` variables
|
|
40
|
-
|
|
41
|
-
## [0.3.1] - 2026-03-07
|
|
42
|
-
|
|
43
|
-
### Fixed
|
|
44
|
-
- **Session Deduplication** - VSCode sessions with the same ID across multiple workspaces are now deduplicated (keeps most recently updated)
|
|
45
|
-
- **WIP Status Accuracy** - VSCode agentic sessions now also check file mtime for WIP detection; threshold increased from 5 to 15 minutes
|
|
46
|
-
- **Timeline Bar Positioning** - UserReq rows with 0 tools no longer render at the start of the timeline
|
|
47
|
-
- **Tag Isolation** - Tags now use filePath-based storage to prevent shared directory collisions (Claude, Pi-Mono, Copilot CLI)
|
|
48
|
-
- **Per-Session Insight Files** - Agent review files use `{sessionId}.agent-review.md` naming to avoid collisions
|
|
49
|
-
- **Export All Sources** - Session export works for all sources including VSCode; file-based exports include `.tags.json`
|
|
50
|
-
- **Inline References in Markdown** - VSCode `inlineReference` items (file/folder links) now rendered as code references instead of being silently dropped, fixing broken markdown tables
|
|
51
|
-
|
|
52
|
-
### Performance
|
|
53
|
-
- **60s Cache + Request Dedup** - `SessionRepository.findAll()` results cached for 60 seconds with concurrent request deduplication, reducing TTFB from ~11s to <100ms on cache hit
|
|
54
|
-
|
|
55
|
-
## [0.3.0] - 2026-03-07
|
|
56
|
-
|
|
57
|
-
### Added
|
|
58
|
-
- **VSCode Copilot Chat Support** - Full support for VSCode Copilot Chat sessions as a new source (`vscode`)
|
|
59
|
-
- Session cards show model badge + repo basename
|
|
60
|
-
- Copilot Chat extension version badge
|
|
61
|
-
- WIP badge for active sessions
|
|
62
|
-
- SubAgent name badges on assistant messages (replaces generic ASSISTANT badge)
|
|
63
|
-
- UserReq rows in Gantt timeline
|
|
64
|
-
- Turn divider shows start time + duration
|
|
65
|
-
- **Dynamic Source Path Hints** - Clicking filter pills shows the source directory path (cross-platform)
|
|
66
|
-
- **Multi-Tool Branding** - Homepage wording updated to reflect multi-tool support (Copilot CLI, Claude Code, Pi-Mono, Copilot Chat)
|
|
67
|
-
|
|
68
|
-
### Changed
|
|
69
|
-
- **Source Display Names** - `copilot` → "Copilot CLI", `vscode` → "Copilot Chat"
|
|
70
|
-
- **Session Info Layout** - Shows Model + Repo basename instead of CWD hash path
|
|
71
|
-
- **Tool Input Display** - URI objects simplified to filename only; edits collapsed to count
|
|
72
|
-
- **Tool Call Width** - Truncation increased to 200 chars with flex-wrap
|
|
73
|
-
- **SubAgent Badge** - Shows name only (no emoji prefix)
|
|
74
|
-
- **System Messages** - System-sourced `user.message` converted to `system.notification` type with SYSTEM badge
|
|
75
|
-
|
|
76
|
-
### Fixed
|
|
77
|
-
- Claude `tool_result` user messages filtered from display
|
|
78
|
-
- VSCode parser: `resultDetails` iteration crash, request timestamps for subagent events
|
|
79
|
-
- VSCode subagent dedup by `subAgentId` instead of name
|
|
80
|
-
- VSCode `findById` uses `selectedModel` + `resolveWorkspacePath`
|
|
81
|
-
- VSCode duration estimation fix
|
|
82
|
-
- Session detail repo dedup, skill table width
|
|
83
|
-
- SESSION INFO duplicate Model/label
|
|
84
|
-
- SubAgent badge uses `agentName` from `toolSpecificData`
|
|
85
|
-
- Source path hints from server (cross-platform Windows/macOS/Linux)
|
|
86
|
-
|
|
87
|
-
## [0.2.7] - 2026-03-05
|
|
88
|
-
|
|
89
|
-
### Added
|
|
90
|
-
- **Session Tagging** - Add, remove, and filter sessions by custom tags from the session list and detail pages
|
|
91
|
-
- **Unit Tests for Tagging** - 70 new tests covering `tagService` and `tagController` (608 total)
|
|
92
|
-
- **E2E Tests for Tagging** - Playwright tests covering tagging API and UI flows
|
|
93
|
-
|
|
94
|
-
## [0.2.6] - 2026-03-05
|
|
95
|
-
|
|
96
|
-
### Fixed
|
|
97
|
-
- **304 Caching on Live Sessions** - Disabled ETag on events API (`Cache-Control: no-store`) so active/WIP sessions always return fresh data on page refresh
|
|
98
|
-
- **Updated Time Inaccuracy** - Session detail page now shows last event timestamp as "Updated" time instead of file mtime
|
|
99
|
-
- **E2E CI Stability** - `#loading-indicator` is always in DOM regardless of session count; removed conditional session count check that caused false negatives
|
|
100
|
-
|
|
101
|
-
## [0.2.5] - 2026-03-04
|
|
102
|
-
|
|
103
|
-
### Fixed
|
|
104
|
-
- **Flaky Unit Tests** - Upload directory now isolated per test via `UPLOAD_DIR` env var to prevent cross-test pollution
|
|
105
|
-
- **Timing Variance in Tests** - `ageMs` threshold relaxed from `>= 0` to `>= -100` to tolerate clock precision on fast CI runners
|
|
106
|
-
|
|
107
|
-
## [0.2.4] - 2026-03-04
|
|
108
|
-
|
|
109
|
-
### Fixed
|
|
110
|
-
- **E2E Skip on Empty Environment** - Tests now skip gracefully when no sessions exist in CI (no `~/.copilot/session-state/` data)
|
|
111
|
-
- **VSCode Filter Pill** - Temporarily hidden in UI (feature in progress)
|
|
112
|
-
|
|
113
|
-
## [0.2.3] - 2026-03-04
|
|
114
|
-
|
|
115
|
-
### Fixed
|
|
116
|
-
- **Lint Errors** - Fixed unused variable warnings in `vscode-parser.js` (`canParse`, `agentName`, `itemIdx`) and `sessionRepository.js` (unused `VsCodeParser` import)
|
|
117
|
-
- **Stale Unit Tests** - Updated test expectations to match current API signatures (`getPaginatedSessions(1, 20, "copilot")`)
|
|
118
|
-
|
|
119
|
-
## [0.2.2] - 2026-02-27
|
|
120
|
-
|
|
121
|
-
### Fixed
|
|
122
|
-
- **ETag Cache Bug** - `session.updated`/`session.created` field name typo (should be `updatedAt`/`createdAt`) caused ETag to always be `md5("sessionId-undefined")`, resulting in permanent 304 Not Modified responses — frontend never saw new events for WIP sessions
|
|
123
|
-
|
|
124
|
-
## [0.2.1] - 2026-02-25
|
|
125
|
-
|
|
126
|
-
### Changed
|
|
127
|
-
- `.nyc_output/` and `coverage/` directories now properly ignored in `.gitignore`
|
|
128
|
-
|
|
129
|
-
### Removed
|
|
130
|
-
- NYC coverage intermediate files (`.nyc_output/`, 1.6 MB) from repository
|
|
131
|
-
- Removed 28 coverage data files that should not be committed
|
|
132
|
-
|
|
133
|
-
### Docs
|
|
134
|
-
- Translated `lib/parsers/README.md` from Chinese to English for international contributors
|
|
135
|
-
|
|
136
|
-
## [0.2.0] - 2026-02-25
|
|
137
|
-
|
|
138
|
-
### Added
|
|
139
|
-
- **Multi-Tool Support** - Full support for **Pi-Mono** sessions (now supports 3 tools: Copilot CLI, Claude Code, Pi-Mono)
|
|
140
|
-
- **Agent Review for All Tools** - AI-powered session analysis now works for all 3 supported tools
|
|
141
|
-
- **Pi-Mono Parser** - New `PiMonoSessionParser` with full strategy pattern implementation
|
|
142
|
-
- **Unified Event Format** - All 3 tools now use consistent event schema across backend and frontend
|
|
143
|
-
- **Backend-Generated Display Metadata** - Badge labels, source names, and display data generated in backend for consistency
|
|
144
|
-
|
|
145
|
-
### Changed
|
|
146
|
-
- **Default Filter to Copilot** - Homepage now defaults to Copilot filter instead of "All" (matches user behavior)
|
|
147
|
-
- **Removed "All" Filter** - Simplified UI by removing the "All" filter option
|
|
148
|
-
- **Type Transformation Strategy** - Backend now transforms event types for unified schema (Pi-Mono `message` → `assistant.message`)
|
|
149
|
-
- **Tool Result Merging** - Pi-Mono tool results now properly merged into parent assistant messages
|
|
150
|
-
- **Badge Logic Moved to Backend** - Frontend no longer generates badge labels (single source of truth)
|
|
151
|
-
|
|
152
|
-
### Fixed
|
|
153
|
-
- **Pi-Mono Agent Review Accuracy** - Fixed incorrect session data by explicitly specifying target file in prompt
|
|
154
|
-
- **Timeline Rendering for Old Copilot Sessions** - Old CLI format now properly expands to `assistant.message` events for timeline
|
|
155
|
-
- **Architecture Consistency** - Unified type transformation across all sources (no more "按了葫芦起了瓢")
|
|
156
|
-
- **CI Upload Directory Race Condition** - Tests now create directories defensively before file operations
|
|
157
|
-
- **Event Expansion Test Coverage** - Tests now verify `assistant.message` generation (frontend dependency)
|
|
158
|
-
|
|
159
|
-
### Docs
|
|
160
|
-
- **README Multi-Tool Emphasis** - Updated subtitle and descriptions to highlight multi-tool support
|
|
161
|
-
- **lib/parsers Documentation** - Translated Chinese README to English for international contributors
|
|
162
|
-
- **Project Cleanup** - Removed backup files (`time-analyze-v2.ejs`, `*.bak`) and 30 failed E2E test screenshot directories
|
|
163
|
-
|
|
164
|
-
### Performance
|
|
165
|
-
- **Agent Review Session Isolation** - Simplified from temporary directory approach to prompt-based file specification (6 lines vs 58 lines)
|
|
166
|
-
|
|
167
|
-
### Architecture
|
|
168
|
-
- **Strategy Pattern Complete** - All 3 parsers follow unified `BaseSessionParser` interface
|
|
169
|
-
- **Backend Normalization** - `eventNormalizer.js` handles all format differences, frontend renders uniformly
|
|
170
|
-
- **No Frontend Source Checks** - Frontend doesn't check `source` field, only renders normalized data
|
|
171
|
-
|
|
172
|
-
## [0.1.7] - 2026-02-16
|
|
173
|
-
|
|
174
|
-
### Changed
|
|
175
|
-
- WIP status badge moved from sidebar info table to inline with the page title on session detail page, matching the time analysis page's pattern for better visibility and consistency
|
|
176
|
-
|
|
177
|
-
### Fixed
|
|
178
|
-
- npm provenance signing now explicitly checks out the release tag so the `SourceRepositoryRef` is available during `npm publish --provenance`
|
|
179
|
-
|
|
180
|
-
### Docs
|
|
181
|
-
- Added screenshots to README (homepage, session detail, time analysis)
|
|
182
|
-
- Sensitive info (session IDs, workspace paths, repo names) masked in screenshots
|
|
183
|
-
- Switched screenshot references to absolute GitHub raw URLs for npmjs.org compatibility
|
|
184
|
-
- Removed broken placeholder image and hardcoded version from README
|
|
185
|
-
|
|
186
|
-
## [0.1.6] - 2026-02-16
|
|
187
|
-
|
|
188
|
-
### Added
|
|
189
|
-
- "Copy as Mermaid Gantt" button on analysis timeline for easy sharing
|
|
190
|
-
- Sub-Agents summary card with status breakdown (completed/failed/incomplete), wall-clock time, and tool counts
|
|
191
|
-
- WIP session status indicator — sessions without `session.end` and recent activity show a 🔄 WIP badge
|
|
192
|
-
- WIP session cards highlighted with amber border on homepage
|
|
193
|
-
|
|
194
|
-
### Fixed
|
|
195
|
-
- Subagent Gantt chart links now navigate to the correct occurrence when the same subagent runs multiple times
|
|
196
|
-
- Total subagent duration no longer exceeds session duration (overlapping intervals are now merged)
|
|
197
|
-
- Subagent tool counts no longer double-count tools from nested subagents
|
|
198
|
-
- Mermaid sanitize function hardened against backtick/newline injection
|
|
199
|
-
- ESLint errors in `insightService.js` (emoji regex `u` flag, regex double-spaces)
|
|
200
|
-
- ESLint error in `sessionRepository.js` (strict equality check)
|
|
201
|
-
- Unit test `session.test.js` updated for `sessionStatus` field
|
|
202
|
-
- E2E API response time thresholds relaxed for CI environments
|
|
203
|
-
|
|
204
|
-
### Performance
|
|
205
|
-
- Created shared `sortedEvents` computed property — eliminated 7 redundant O(n log n) array sorts
|
|
206
|
-
- Optimized subagent tool counting with merged intervals and binary search (O(n log k) down from O(m×n))
|
|
207
|
-
|
|
208
|
-
## [0.1.5] - 2026-02-16
|
|
209
|
-
|
|
210
|
-
### Fixed
|
|
211
|
-
- EPIPE crash when copilot process exits before events file is fully piped to stdin
|
|
212
|
-
- Server no longer crashes with uncaught exception during concurrent insight generation
|
|
213
|
-
|
|
214
|
-
## [0.1.4] - 2026-02-16
|
|
215
|
-
|
|
216
|
-
### Fixed
|
|
217
|
-
- Rate limiting configuration for insight operations - resolved 429 "Too Many Requests" errors
|
|
218
|
-
- Removed rate limiting from insight status checks (GET requests) - status checks are now unlimited
|
|
219
|
-
- Improved rate limiting differentiation: strict for generation (POST), lenient for access (DELETE)
|
|
220
|
-
- Fixed "Age: NaNs" timestamp display issue in insight generation progress
|
|
221
|
-
- Added missing `ageMs` calculation to backend insight service responses
|
|
222
|
-
- ESLint configuration migration from deprecated `.eslintignore` to modern flat config
|
|
223
|
-
- Minimal `.npmignore` configuration for optimized package publishing (82% size reduction)
|
|
224
|
-
|
|
225
|
-
### Changed
|
|
226
|
-
- Insight output file renamed from `insight-report.md` to `copilot-insight.md`
|
|
227
|
-
- Insight prompt rewritten to enforce ≤500 character output (down from ~2000 words)
|
|
228
|
-
- Insight now focuses on three essentials: health score, top issue, key recommendation
|
|
229
|
-
- Insight generation rate limiting: 3 requests per 5 minutes (more user-friendly window)
|
|
230
|
-
- Insight access operations: 50 requests per minute (very lenient for status checks)
|
|
231
|
-
- Package size optimized from 298kB to 52kB for npm publishing
|
|
232
|
-
|
|
233
|
-
### Removed
|
|
234
|
-
- Deprecated `.eslintignore` file in favor of `eslint.config.mjs` ignores property
|
|
235
|
-
- Verbose `.npmignore` entries - simplified to essential exclusions only
|
|
236
|
-
|
|
237
|
-
## [0.1.3] - 2026-02-16
|
|
238
|
-
|
|
239
|
-
### Added
|
|
240
|
-
- Infinite scroll functionality for homepage session list
|
|
241
|
-
- "Load More Sessions" button for manual session loading
|
|
242
|
-
- Seamless scroll-triggered loading when approaching bottom of page
|
|
243
|
-
- API endpoint `/api/sessions/load-more` for paginated session loading
|
|
244
|
-
- Comprehensive e2e test suite expansion (45 total tests, up from 17)
|
|
245
|
-
- New test files: `api-pagination.spec.js`, `infinite-scroll.spec.js`, `core-functionality.spec.js`
|
|
246
|
-
|
|
247
|
-
### Changed
|
|
248
|
-
- Replaced traditional pagination with infinite scroll on homepage
|
|
249
|
-
- Homepage now loads initial 20 sessions instead of all sessions
|
|
250
|
-
- Session count display removed from homepage for cleaner UI
|
|
251
|
-
- Updated JavaScript to handle dynamic session loading and rendering
|
|
252
|
-
|
|
253
|
-
### Removed
|
|
254
|
-
- Session count display "(showing X of Y)" from homepage header
|
|
255
|
-
- Unused logger utility (`src/utils/logger.js`) - dead code cleanup
|
|
256
|
-
- Pagination parameters from homepage (legacy support maintained in API)
|
|
257
|
-
|
|
258
|
-
### Fixed
|
|
259
|
-
- Updated unit tests to reflect infinite scroll functionality
|
|
260
|
-
- Improved performance for sites with large numbers of sessions
|
|
261
|
-
- Memory usage optimization by loading sessions progressively
|
|
262
|
-
- E2E test reliability improvements - achieved 100% pass rate (45/45 tests)
|
|
263
|
-
- Fixed selector issues in session detail page tests
|
|
264
|
-
- Improved test resilience with better error handling and fallback selectors
|
|
265
|
-
|
|
266
|
-
## [0.1.2] - 2026-02-15
|
|
267
|
-
|
|
268
|
-
### Fixed
|
|
269
|
-
- Content Security Policy configuration (removed unsafe-inline and unsafe-eval)
|
|
270
|
-
- Missing repository URL in README installation instructions
|
|
271
|
-
- Version inconsistencies across documentation files
|
|
272
|
-
|
|
273
|
-
### Added
|
|
274
|
-
- Session pagination support for better performance with large session counts
|
|
275
|
-
- API endpoint pagination with backward compatibility
|
|
276
|
-
|
|
277
|
-
## [0.1.1] - 2026-02-15
|
|
278
|
-
|
|
279
|
-
### Internal
|
|
280
|
-
- Project improvements and bug fixes
|
|
281
|
-
|
|
282
|
-
## [0.1.0] - 2026-02-15
|
|
283
|
-
|
|
284
|
-
### Added
|
|
285
|
-
- Initial release of Copilot Session Viewer
|
|
286
|
-
- Web UI for viewing GitHub Copilot CLI session logs
|
|
287
|
-
- Session list with search, filtering, and sorting
|
|
288
|
-
- Detailed session view with Vue 3 and virtual scrolling
|
|
289
|
-
- Time analysis view with sub-agents, turns, and tool breakdown
|
|
290
|
-
- Copilot Insight feature (AI-generated analysis)
|
|
291
|
-
- Model badge colors (Claude, GPT, Gemini)
|
|
292
|
-
- E2E and unit test coverage (17 Playwright + 20 Jest tests)
|
|
293
|
-
- AGENTS.md for AI coding agents
|
|
294
|
-
- Security headers (Helmet.js)
|
|
295
|
-
- Rate limiting for uploads
|
|
296
|
-
- Compression middleware
|
|
297
|
-
|
|
298
|
-
### Security
|
|
299
|
-
- Input validation for session IDs
|
|
300
|
-
- XSS prevention with proper escaping
|
|
301
|
-
- CORS restricted to localhost
|
|
302
|
-
- File upload size limits (50MB)
|
|
303
|
-
|
|
304
|
-
[0.2.6]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.2.6
|
|
305
|
-
[0.2.5]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.2.5
|
|
306
|
-
[0.2.4]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.2.4
|
|
307
|
-
[0.2.3]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.2.3
|
|
308
|
-
[0.1.7]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.7
|
|
309
|
-
[0.1.6]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.6
|
|
310
|
-
[0.1.3]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.3
|
|
311
|
-
[0.1.2]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.2
|
|
312
|
-
[0.1.1]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.1
|
|
313
|
-
[0.1.0]: https://github.com/qiaolei81/copilot-session-viewer/releases/tag/v0.1.0
|
package/CONTRIBUTING.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Contributing to Copilot Session Viewer
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing! This document provides guidelines for contributing to the project.
|
|
4
|
-
|
|
5
|
-
## Code of Conduct
|
|
6
|
-
|
|
7
|
-
By participating in this project, you agree to maintain a respectful and collaborative environment.
|
|
8
|
-
|
|
9
|
-
## How to Contribute
|
|
10
|
-
|
|
11
|
-
### Reporting Bugs
|
|
12
|
-
|
|
13
|
-
Before creating bug reports, please check existing issues. When creating a bug report, include:
|
|
14
|
-
|
|
15
|
-
- **Clear title and description**
|
|
16
|
-
- **Steps to reproduce** the behavior
|
|
17
|
-
- **Expected vs actual behavior**
|
|
18
|
-
- **Environment details** (Node.js version, OS, browser)
|
|
19
|
-
- **Session file examples** (if applicable, sanitize sensitive data)
|
|
20
|
-
|
|
21
|
-
### Suggesting Enhancements
|
|
22
|
-
|
|
23
|
-
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include:
|
|
24
|
-
|
|
25
|
-
- **Use case** - What problem does this solve?
|
|
26
|
-
- **Proposed solution** - How should it work?
|
|
27
|
-
- **Alternatives considered** - What other approaches did you think about?
|
|
28
|
-
|
|
29
|
-
### Pull Requests
|
|
30
|
-
|
|
31
|
-
1. **Fork** the repository
|
|
32
|
-
2. **Create a branch** from `main`:
|
|
33
|
-
```bash
|
|
34
|
-
git checkout -b feature/your-feature-name
|
|
35
|
-
```
|
|
36
|
-
3. **Make your changes** following the code style guidelines
|
|
37
|
-
4. **Write or update tests** - maintain or improve test coverage
|
|
38
|
-
5. **Run all tests**:
|
|
39
|
-
```bash
|
|
40
|
-
npm run lint:fix
|
|
41
|
-
npm run test:all
|
|
42
|
-
```
|
|
43
|
-
6. **Commit** using [Conventional Commits](https://www.conventionalcommits.org/):
|
|
44
|
-
```
|
|
45
|
-
feat: add new feature
|
|
46
|
-
fix: resolve bug in session parsing
|
|
47
|
-
docs: update README
|
|
48
|
-
test: add e2e test for filtering
|
|
49
|
-
```
|
|
50
|
-
7. **Push** to your fork:
|
|
51
|
-
```bash
|
|
52
|
-
git push origin feature/your-feature-name
|
|
53
|
-
```
|
|
54
|
-
8. **Submit a pull request** to the `main` branch
|
|
55
|
-
|
|
56
|
-
**Note for fork contributors:**
|
|
57
|
-
- CI tests will run automatically on your PR
|
|
58
|
-
- You don't need access to secrets (NPM_TOKEN) - only maintainers publish releases
|
|
59
|
-
- Your PR will be labeled `external-contribution` automatically
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
### Code Style Guidelines
|
|
63
|
-
|
|
64
|
-
- **JavaScript**: Single quotes, no unused variables
|
|
65
|
-
- **Error handling**: Always include `{ cause }` when re-throwing
|
|
66
|
-
- **Vue 3**: Don't use `.value` in templates (auto-unwrapped)
|
|
67
|
-
- **Comments**: Explain *why*, not *what*
|
|
68
|
-
- **ESLint**: Zero errors, warnings acceptable
|
|
69
|
-
|
|
70
|
-
### Testing Requirements
|
|
71
|
-
|
|
72
|
-
- **Unit tests** for all new logic in `src/`
|
|
73
|
-
- **E2E tests** for user-facing features
|
|
74
|
-
- **All tests must pass** before merging
|
|
75
|
-
|
|
76
|
-
### Development Workflow
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# Install dependencies
|
|
80
|
-
npm install
|
|
81
|
-
|
|
82
|
-
# Run dev server (auto-reload)
|
|
83
|
-
npm run dev
|
|
84
|
-
|
|
85
|
-
# Run tests
|
|
86
|
-
npm run test:all
|
|
87
|
-
|
|
88
|
-
# Lint and fix
|
|
89
|
-
npm run lint:fix
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Project Structure
|
|
93
|
-
|
|
94
|
-
See `AGENTS.md` for detailed architecture and common tasks.
|
|
95
|
-
|
|
96
|
-
### Need Help?
|
|
97
|
-
|
|
98
|
-
- Check `AGENTS.md` for development guidelines
|
|
99
|
-
- Review existing issues and pull requests
|
|
100
|
-
- Ask questions in issue discussions
|
|
101
|
-
|
|
102
|
-
## License
|
|
103
|
-
|
|
104
|
-
By contributing, you agree that your contributions will be licensed under the MIT License.
|