copilot-session-usage 0.7.2__tar.gz → 0.7.3__tar.gz

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.
Files changed (123) hide show
  1. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/gh-release-notes/SKILL.md +33 -10
  2. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/workflows/release.yml +1 -1
  3. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/CONTRIBUTING.md +3 -0
  4. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/PKG-INFO +60 -5
  5. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/README.md +59 -4
  6. copilot_session_usage-0.7.3/docs/articles/presentation.md +90 -0
  7. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/internal/automated_release_proces.md +4 -0
  8. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/data/models-and-pricing.lock +3 -3
  9. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/data/models-and-pricing.yml +8 -0
  10. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.editorconfig +0 -0
  11. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.gitattributes +0 -0
  12. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/changes/requests/skill-breakdown/01-request.md +0 -0
  15. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/guidelines/git-commit-message.guideline.md +0 -0
  16. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/guidelines/knowledge-base.guidelines.md +0 -0
  17. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/pull_request_template.md +0 -0
  18. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/consolidate-knowledge-base/SKILL.md +0 -0
  19. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/gh-commit-changes/SKILL.md +0 -0
  20. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/gh-create-pull-request/SKILL.md +0 -0
  21. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/gh-release-notes/scripts/generate_release_notes.py +0 -0
  22. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/skills/record-finding/SKILL.md +0 -0
  23. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/workflows/ci.yml +0 -0
  24. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/workflows/publish.yml +0 -0
  25. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/workflows/refresh-pricing.yml +0 -0
  26. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.github/workflows/release-notes.yml +0 -0
  27. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.gitignore +0 -0
  28. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/.readthedocs.yaml +0 -0
  29. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/AGENTS.md +0 -0
  30. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/CHANGELOG.md +0 -0
  31. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/CONSTITUTION.md +0 -0
  32. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/LICENSE +0 -0
  33. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/_static/changelog.js +0 -0
  34. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/_static/custom.css +0 -0
  35. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/changelog.md +0 -0
  36. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/conf.py +0 -0
  37. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/explanation/how-cost-estimation-works.md +0 -0
  38. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/explanation/index.md +0 -0
  39. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/add-commit-trailer.md +0 -0
  40. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/analyze-specific-session.md +0 -0
  41. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/batch-and-spending.md +0 -0
  42. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/export-json.md +0 -0
  43. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/index.md +0 -0
  44. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/how-to/wsl2.md +0 -0
  45. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/index.md +0 -0
  46. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/installation.md +0 -0
  47. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/reference/api.md +0 -0
  48. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/reference/cli.md +0 -0
  49. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/reference/index.md +0 -0
  50. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/reference/pricing.md +0 -0
  51. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/tutorials/getting-started.md +0 -0
  52. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/docs/source/tutorials/index.md +0 -0
  53. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/justfile +0 -0
  54. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Base.schema.yaml +0 -0
  55. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Concept.schema.yaml +0 -0
  56. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Experiment.schema.yaml +0 -0
  57. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Finding.schema.yaml +0 -0
  58. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Hypothesis.schema.yaml +0 -0
  59. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Outcome.schema.yaml +0 -0
  60. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Playbook.schema.yaml +0 -0
  61. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Principle.schema.yaml +0 -0
  62. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Reference.schema.yaml +0 -0
  63. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/_schema/Structure.schema.yaml +0 -0
  64. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/concepts/copilot-cli.md +0 -0
  65. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/concepts/index.md +0 -0
  66. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/concepts/overview.md +0 -0
  67. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/concepts/session-cost-analysis.md +0 -0
  68. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/concepts/threshold-based-pricing.md +0 -0
  69. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/experiments/index.md +0 -0
  70. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/experiments/verify-subagent-cost-attribution.md +0 -0
  71. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.07.02-00.00-subagent-logs-runsubagent-prefix.md +0 -0
  72. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.07.02-22.00-title-generation-not-counted-as-model-turn.md +0 -0
  73. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.07.02-23.00-cache-write-approximation.md +0 -0
  74. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.07.13-14.27-release-notes-overreported-maintainer-changes.md +0 -0
  75. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.07.24-15.01-actions-token-cannot-create-pr.md +0 -0
  76. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/2026.08.05-16.24-utility-models-appear-in-logs-but-are-not-billed.md +0 -0
  77. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/findings/index.md +0 -0
  78. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/guides/automation-scripts.md +0 -0
  79. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/guides/cost-optimization.md +0 -0
  80. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/guides/index.md +0 -0
  81. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/guides/wsl2-setup.md +0 -0
  82. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/ideas/index.md +0 -0
  83. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/ideas/multi-session-efficiency-analytics.md +0 -0
  84. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/index.md +0 -0
  85. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/log.md +0 -0
  86. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/principles/findings-are-immutable.md +0 -0
  87. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/principles/index.md +0 -0
  88. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/reference/debug-log-format.md +0 -0
  89. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/reference/index.md +0 -0
  90. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/reference/pricing-formats.md +0 -0
  91. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/cache-cost-approximation.md +0 -0
  92. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/index.md +0 -0
  93. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/knowledge-base-information-types.md +0 -0
  94. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/session-discovery-algorithm.md +0 -0
  95. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/subagent-cost-tracking.md +0 -0
  96. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/knowledge/structures/vscode-copilot-extension.md +0 -0
  97. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/pyproject.toml +0 -0
  98. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/scripts/refresh_pricing.py +0 -0
  99. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/skills/copilot-session-usage/SKILL.md +0 -0
  100. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/__init__.py +0 -0
  101. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/_internal/__init__.py +0 -0
  102. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/_internal/copilot_cli.py +0 -0
  103. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/_internal/core.py +0 -0
  104. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/_internal/git.py +0 -0
  105. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/_internal/vscode.py +0 -0
  106. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/api.py +0 -0
  107. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/cli.py +0 -0
  108. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/data/__init__.py +0 -0
  109. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/src/copilot_session_usage/data/custom-models-pricing.yml +0 -0
  110. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/conftest.py +0 -0
  111. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_api.py +0 -0
  112. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_cli.py +0 -0
  113. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_core.py +0 -0
  114. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_coverage_gaps.py +0 -0
  115. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_generate_release_notes.py +0 -0
  116. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_git.py +0 -0
  117. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_pricing_runtime.py +0 -0
  118. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_release_notes.py +0 -0
  119. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_rendering.py +0 -0
  120. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_vscode.py +0 -0
  121. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/tests/test_vscode_platform.py +0 -0
  122. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/uv.lock +0 -0
  123. {copilot_session_usage-0.7.2 → copilot_session_usage-0.7.3}/uv.toml +0 -0
@@ -10,7 +10,11 @@ user-invocable: true
10
10
  Generate **end-user-friendly, user-impact-only** release notes by analyzing the actual changes between releases.
11
11
  Interactive use requires no script; automated generation and validation use the bundled script described below.
12
12
 
13
- The output is meant to be **copy-pasted into a GitHub Release**. It must contain release-note sections only: never add a document title, preamble, file summary, commit summary, or closing separator.
13
+ The output is meant to be **copy-pasted into a GitHub Release**. It must contain
14
+ release-note sections only: never add a document title, version heading, preamble,
15
+ file summary, commit summary, or closing separator. GitHub already displays the
16
+ release title and version above the body, so do not repeat it in the generated
17
+ Markdown.
14
18
 
15
19
  ## Non-negotiable output contract
16
20
 
@@ -24,6 +28,11 @@ The output is meant to be **copy-pasted into a GitHub Release**. It must contain
24
28
  - Never include `## Maintenance` together with any user-facing section. When a
25
29
  user-facing change qualifies, omit Maintenance and discard all internal-only
26
30
  candidates.
31
+ - Start the output with a permitted `##` section heading. Never emit a `#` heading
32
+ for the version or release title, such as `# v0.7.2`, `# Release v0.7.2`, or
33
+ `# Release notes`.
34
+ - For a maintenance-only release, emit exactly `## Maintenance` and its concise
35
+ maintenance statement. Do not add any title or version heading before it.
27
36
  - Before writing the file, inspect the final Markdown for these rules and remove
28
37
  any violating bullet or section.
29
38
 
@@ -224,7 +233,7 @@ Breaking changes come from:
224
233
 
225
234
  ### Step 6: Categorize & Format
226
235
 
227
- Organize qualifying changes into buckets. **Only include sections that have content.** Omit empty sections entirely. Do not add a title heading.
236
+ Organize qualifying changes into buckets. **Only include sections that have content.** Omit empty sections entirely. Do not add a title heading or version heading. The first line must be one of the permitted `##` section headings.
228
237
 
229
238
  The only permitted headings are `## New Features`, `## Enhancements`, `## Bug
230
239
  Fixes`, `## Breaking Changes`, `## Examples`, `## Documentation`, and
@@ -239,13 +248,13 @@ replace the missing URL with a repository path, an unlinked description, or a
239
248
  claim that documentation was updated.
240
249
 
241
250
  If no qualifying user-facing change exists, emit exactly one concise `## Maintenance`
242
- section. Explain generically that the release contains maintenance and internal
243
- improvements without naming CI, workflows, release automation, internal guidelines,
244
- tests, commits, pull requests, governance files, documentation files, or individual
245
- files. Do not invent a feature, user benefit, example, or documentation link. Never
246
- publish `Internal` or an empty maintenance section. If at least one user-facing
247
- change exists, omit Maintenance entirely; do not use it as a bucket for leftover
248
- internal changes.
251
+ section as the first and only heading. Explain generically that the release contains
252
+ maintenance and internal improvements without naming CI, workflows, release
253
+ automation, internal guidelines, tests, commits, pull requests, governance files,
254
+ documentation files, or individual files. Do not invent a feature, user benefit,
255
+ example, or documentation link. Never publish `Internal` or an empty maintenance
256
+ section. If at least one user-facing change exists, omit Maintenance entirely; do
257
+ not use it as a bucket for leftover internal changes.
249
258
 
250
259
  `## Maintenance` and a user-facing section are mutually exclusive. If any
251
260
  Enhancements, New Features, Bug Fixes, Breaking Changes, Examples, or qualifying
@@ -317,6 +326,18 @@ Use absolute HTTPS URLs, and omit a documentation link when no public page can b
317
326
 
318
327
  **Clean markdown** for a GitHub Release body:
319
328
 
329
+ The following is invalid because the GitHub Release page already supplies the
330
+ version title:
331
+
332
+ ```markdown
333
+ # v0.7.2
334
+
335
+ ## Bug Fixes
336
+ - Fixed an issue with session discovery
337
+ ```
338
+
339
+ Start directly with the release-note section instead:
340
+
320
341
  ```markdown
321
342
  ## New Features
322
343
  - Added dark mode toggle in settings
@@ -348,7 +369,9 @@ Use absolute HTTPS URLs, and omit a documentation link when no public page can b
348
369
  - User impact only (not implementation details, changed-file summaries, CI, internal process, or contributor guidance)
349
370
  - Every bullet must describe a benefit or changed capability for ordinary users of the published product
350
371
  - Do not include release tooling, Git evidence, validation behavior, governance files, contributor guidance, agent instructions, CI, workflows, or repository housekeeping
351
- - Do not include a title heading; the GitHub Release supplies the title
372
+ - Do not include a title or version heading; the GitHub Release supplies the title
373
+ - The first line must be a permitted `##` section heading, including `## Maintenance`
374
+ for maintenance-only releases
352
375
  - Use public documentation URLs; never use repo-relative paths like `docs/...` or `README.md`
353
376
  - For each user-facing bullet, search existing documentation for the closest page about the impacted behavior and link it inline with descriptive Markdown text when available, even when the documentation file was unchanged
354
377
  - Use fragment identifiers (`#section-name`) to point to specific docs sections
@@ -84,7 +84,7 @@ jobs:
84
84
  bump_args+=(--allow-no-commit)
85
85
  fi
86
86
  if ! next_version_output="$(uv run --no-sync cz bump "${bump_args[@]}" 2>&1)"; then
87
- echo "::error::No eligible conventional commits were found for an automatic release."
87
+ echo "::error::No eligible conventional commits were found for an automatic release. You can either wait for a user-impacting feature or bug fix and start a new release, or enable 'Force a patch release when auto finds no eligible commit' when triggering the 'Release' Action."
88
88
  printf '%s\n' "$next_version_output"
89
89
  exit 1
90
90
  fi
@@ -48,6 +48,9 @@ just docs-serve
48
48
  2. Run it from the default branch, choosing `auto` to derive the major, minor, or
49
49
  patch bump from conventional commits, or choose an explicit bump. Enable
50
50
  `force` to create a patch release when `auto` finds no eligible commit.
51
+ If `auto` finds no eligible commit, you can either wait for a user-impacting
52
+ feature or bug fix and start a new release, or enable **Force a patch release
53
+ when auto finds no eligible commit** when triggering the **Release** Action.
51
54
  3. The workflow uses Commitizen to calculate the next version, prepares a local
52
55
  `vX.Y.Z` tag on the existing default-branch commit, generates notes with the
53
56
  `gh-release-notes` skill through `gh copilot`, writes the final Markdown to
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: copilot-session-usage
3
- Version: 0.7.2
3
+ Version: 0.7.3
4
4
  Summary: Usage and cost analytics for GitHub Copilot and Copilot-CLI session logs
5
5
  Project-URL: Homepage, https://github.com/gsemet/copilot-session-usage
6
6
  Project-URL: Documentation, https://copilot-session-usage.readthedocs.io/en/stable/
@@ -31,6 +31,59 @@ Extract VS Code Copilot session cost KPIs (tokens, estimated USD, model, duratio
31
31
 
32
32
  **Full documentation:** [copilot-session-usage.readthedocs.io](https://copilot-session-usage.readthedocs.io/en/stable/)
33
33
 
34
+ ## Chronicle and copilot-session-usage
35
+
36
+ GitHub Copilot provides **Chronicle** session tools for conversational access to your
37
+ Copilot history. Chronicle and this project are complementary, but they answer different
38
+ questions.
39
+
40
+ ### What Chronicle is good at
41
+
42
+ Use Chronicle when you want to:
43
+
44
+ - Find a past session by its title or session ID.
45
+ - Search or summarize what happened in a session.
46
+ - Inspect conversational history, checkpoints, referenced files, and session metadata.
47
+ - Get a quick, conversational summary of aggregate session KPIs when cost analysis is
48
+ available in the current Copilot environment.
49
+
50
+ ### What Chronicle is not designed to provide
51
+
52
+ Chronicle's session store is not a token-accounting database. Its stored session records
53
+ contain history and metadata, but do not expose a standard set of per-request pricing
54
+ fields. A Chronicle cost answer may therefore provide an aggregate estimate and a list of
55
+ models without providing a reproducible split of tokens and dollars by model or subagent.
56
+
57
+ ### What this project adds
58
+
59
+ `copilot-session-usage` reads the original VS Code Copilot debug logs and turns them into
60
+ repeatable reports. It provides:
61
+
62
+ | Need | Chronicle | `copilot-session-usage` |
63
+ | --- | --- | --- |
64
+ | Conversational search and summaries | ✅ | ✅ CLI reports are interpreted by your agent |
65
+ | Session discovery by title or ID | ✅ | ✅ |
66
+ | Aggregate tokens | ✅ | ✅ |
67
+ | Aggregate estimated cost | ⚠️ When available; aggregate only | ✅ |
68
+ | Tokens **per model** | ⚠️ LLM digging each time; consumes tokens | ✅ |
69
+ | Estimated cost (`$`) **per model** | ❌ No accurate cost per breakdown | ✅ |
70
+ | Tokens **per subagent** | ⚠️ LLM digging each time; consumes tokens | ✅ |
71
+ | Estimated cost (`$`) **per subagent** | ❌ No accurate cost per breakdown | ✅ |
72
+ | Cost attribution to skills | ❌ Cannot provide cost per breakdown | ✅ |
73
+ | Tool-call counts by skill and subagent | ⚠️ LLM digging each time | ✅ |
74
+ | Batch analysis, filtering, and aggregation | Limited/conversational | ✅ |
75
+ | Stable JSON, table, and detailed output | No stable contract | ✅ |
76
+ | Python API for embedding in third-party tools | ❌ | ✅ |
77
+ | Pricing provenance and custom model rates | ⚠️ Only for aggregated costs | ✅ |
78
+ | Git commit cost trailers | ❌ | ✅ |
79
+
80
+ In the table, `⚠️` means that Chronicle may answer the question in a particular
81
+ environment or with additional analysis, but does not guarantee a stable, reproducible
82
+ breakdown for it.
83
+
84
+ Use Chronicle for **“What did I do?”** and use this project for **“How much did it cost,
85
+ which model or subagent consumed it, and can I export the evidence?”**
86
+
34
87
  ## Installation
35
88
 
36
89
  ```bash
@@ -110,7 +163,7 @@ just knowledge-validate
110
163
  |---------|-------------|
111
164
  | `analyze [PATH]` | Analyze one session by PATH, or many by `--name` regex |
112
165
  | `latest` | Analyze the most recently modified session |
113
- | `find TITLE` | Find and analyze a session by title (fuzzy match) |
166
+ | `find TITLE` | Find and analyze a session by title (case-insensitive substring match) |
114
167
  | `id SESSION_ID` | Analyze a session by exact UUID |
115
168
  | `list` | List recent sessions (metadata only by default) |
116
169
  | `batch N` | Analyze the N most recent sessions in one pass |
@@ -140,7 +193,7 @@ just knowledge-validate
140
193
  | `--workspace-storage PATH` | Override workspaceStorage directory (auto-detected by default) |
141
194
  | `--agent {vscode,cli}` | Provider to use (`cli` not yet implemented) |
142
195
  | `--detail {minimal,compact,full}` | Detail level (default: `compact`) |
143
- | `--format {json,table,detailed}` | Output format (default: `table`) |
196
+ | `--format {json,table,detailed}` | Output format (default: `json`) |
144
197
  | `--output PATH` | Write output to file instead of stdout |
145
198
 
146
199
  ### Examples
@@ -157,8 +210,8 @@ $ copilot-session-usage latest --detail full
157
210
  # JSON output for a specific session
158
211
  $ copilot-session-usage analyze /path/to/debug-logs --format json --output report.json
159
212
 
160
- # Find sessions containing "refactor" in the title
161
- $ copilot-session-usage find "refactor"
213
+ # Find sessions containing "implem" in the title
214
+ $ copilot-session-usage find "implem"
162
215
  Multiple sessions match 'implem':
163
216
  2026-07-01T21:15:12Z 'Implement copilot-session-usage spec' (id: c890dd60-43d6-44f0-b57c-ab505dfa003b)
164
217
  2026-06-26T18:21:21Z 'Resume PRD implementation' (id: 9368ab3e-1c93-4125-8271-d5bd024b057a)
@@ -241,6 +294,8 @@ copilot-session-usage latest \
241
294
  ## Python API
242
295
 
243
296
  ```python
297
+ from pathlib import Path
298
+
244
299
  from copilot_session_usage.api import (
245
300
  analyze_session,
246
301
  analyze_latest,
@@ -13,6 +13,59 @@ Extract VS Code Copilot session cost KPIs (tokens, estimated USD, model, duratio
13
13
 
14
14
  **Full documentation:** [copilot-session-usage.readthedocs.io](https://copilot-session-usage.readthedocs.io/en/stable/)
15
15
 
16
+ ## Chronicle and copilot-session-usage
17
+
18
+ GitHub Copilot provides **Chronicle** session tools for conversational access to your
19
+ Copilot history. Chronicle and this project are complementary, but they answer different
20
+ questions.
21
+
22
+ ### What Chronicle is good at
23
+
24
+ Use Chronicle when you want to:
25
+
26
+ - Find a past session by its title or session ID.
27
+ - Search or summarize what happened in a session.
28
+ - Inspect conversational history, checkpoints, referenced files, and session metadata.
29
+ - Get a quick, conversational summary of aggregate session KPIs when cost analysis is
30
+ available in the current Copilot environment.
31
+
32
+ ### What Chronicle is not designed to provide
33
+
34
+ Chronicle's session store is not a token-accounting database. Its stored session records
35
+ contain history and metadata, but do not expose a standard set of per-request pricing
36
+ fields. A Chronicle cost answer may therefore provide an aggregate estimate and a list of
37
+ models without providing a reproducible split of tokens and dollars by model or subagent.
38
+
39
+ ### What this project adds
40
+
41
+ `copilot-session-usage` reads the original VS Code Copilot debug logs and turns them into
42
+ repeatable reports. It provides:
43
+
44
+ | Need | Chronicle | `copilot-session-usage` |
45
+ | --- | --- | --- |
46
+ | Conversational search and summaries | ✅ | ✅ CLI reports are interpreted by your agent |
47
+ | Session discovery by title or ID | ✅ | ✅ |
48
+ | Aggregate tokens | ✅ | ✅ |
49
+ | Aggregate estimated cost | ⚠️ When available; aggregate only | ✅ |
50
+ | Tokens **per model** | ⚠️ LLM digging each time; consumes tokens | ✅ |
51
+ | Estimated cost (`$`) **per model** | ❌ No accurate cost per breakdown | ✅ |
52
+ | Tokens **per subagent** | ⚠️ LLM digging each time; consumes tokens | ✅ |
53
+ | Estimated cost (`$`) **per subagent** | ❌ No accurate cost per breakdown | ✅ |
54
+ | Cost attribution to skills | ❌ Cannot provide cost per breakdown | ✅ |
55
+ | Tool-call counts by skill and subagent | ⚠️ LLM digging each time | ✅ |
56
+ | Batch analysis, filtering, and aggregation | Limited/conversational | ✅ |
57
+ | Stable JSON, table, and detailed output | No stable contract | ✅ |
58
+ | Python API for embedding in third-party tools | ❌ | ✅ |
59
+ | Pricing provenance and custom model rates | ⚠️ Only for aggregated costs | ✅ |
60
+ | Git commit cost trailers | ❌ | ✅ |
61
+
62
+ In the table, `⚠️` means that Chronicle may answer the question in a particular
63
+ environment or with additional analysis, but does not guarantee a stable, reproducible
64
+ breakdown for it.
65
+
66
+ Use Chronicle for **“What did I do?”** and use this project for **“How much did it cost,
67
+ which model or subagent consumed it, and can I export the evidence?”**
68
+
16
69
  ## Installation
17
70
 
18
71
  ```bash
@@ -92,7 +145,7 @@ just knowledge-validate
92
145
  |---------|-------------|
93
146
  | `analyze [PATH]` | Analyze one session by PATH, or many by `--name` regex |
94
147
  | `latest` | Analyze the most recently modified session |
95
- | `find TITLE` | Find and analyze a session by title (fuzzy match) |
148
+ | `find TITLE` | Find and analyze a session by title (case-insensitive substring match) |
96
149
  | `id SESSION_ID` | Analyze a session by exact UUID |
97
150
  | `list` | List recent sessions (metadata only by default) |
98
151
  | `batch N` | Analyze the N most recent sessions in one pass |
@@ -122,7 +175,7 @@ just knowledge-validate
122
175
  | `--workspace-storage PATH` | Override workspaceStorage directory (auto-detected by default) |
123
176
  | `--agent {vscode,cli}` | Provider to use (`cli` not yet implemented) |
124
177
  | `--detail {minimal,compact,full}` | Detail level (default: `compact`) |
125
- | `--format {json,table,detailed}` | Output format (default: `table`) |
178
+ | `--format {json,table,detailed}` | Output format (default: `json`) |
126
179
  | `--output PATH` | Write output to file instead of stdout |
127
180
 
128
181
  ### Examples
@@ -139,8 +192,8 @@ $ copilot-session-usage latest --detail full
139
192
  # JSON output for a specific session
140
193
  $ copilot-session-usage analyze /path/to/debug-logs --format json --output report.json
141
194
 
142
- # Find sessions containing "refactor" in the title
143
- $ copilot-session-usage find "refactor"
195
+ # Find sessions containing "implem" in the title
196
+ $ copilot-session-usage find "implem"
144
197
  Multiple sessions match 'implem':
145
198
  2026-07-01T21:15:12Z 'Implement copilot-session-usage spec' (id: c890dd60-43d6-44f0-b57c-ab505dfa003b)
146
199
  2026-06-26T18:21:21Z 'Resume PRD implementation' (id: 9368ab3e-1c93-4125-8271-d5bd024b057a)
@@ -223,6 +276,8 @@ copilot-session-usage latest \
223
276
  ## Python API
224
277
 
225
278
  ```python
279
+ from pathlib import Path
280
+
226
281
  from copilot_session_usage.api import (
227
282
  analyze_session,
228
283
  analyze_latest,
@@ -0,0 +1,90 @@
1
+ ## Title
2
+
3
+ I built `copilot-session-usage`: inspect the token usage and estimated cost of VS Code Copilot sessions
4
+
5
+ ## Post
6
+
7
+ I’ve released [`copilot-session-usage`](https://github.com/gsemet/copilot-session-usage), an open-source Python CLI for analyzing VS Code Copilot sessions.
8
+
9
+ VS Code’s UI does not provide a detailed per-session cost report. This tool reads the local Copilot debug logs and reports:
10
+
11
+ - Input, output, and cached token counts
12
+ - Models used during a session
13
+ - Estimated cost in USD
14
+ - Main-conversation versus subagent usage
15
+ - Cost and tool-call attribution by skill
16
+ - Aggregate spending across sessions, workspaces, dates, or features
17
+ - JSON output for scripts and a Python API for integration
18
+ - Optional Git commit trailers containing session usage
19
+
20
+ It supports multi-model sessions, cache-aware pricing, long-context pricing tiers, macOS, Linux, Windows, and WSL2. For Copilot-plan models, it uses the usage value recorded by VS Code when available. For externally billed Azure-hosted models, it falls back to token-based pricing, so reports should be treated as estimates.
21
+
22
+
23
+ ## What this project adds
24
+
25
+ `copilot-session-usage` reads the original VS Code Copilot debug logs and turns them into
26
+ repeatable reports. It provides:
27
+
28
+ | Need | Chronicle | `copilot-session-usage` |
29
+ | --- | --- | --- |
30
+ | Conversational search and summaries | ✅ | ✅ CLI reports are interpreted by your agent |
31
+ | Session discovery by title or ID | ✅ | ✅ |
32
+ | Aggregate tokens | ✅ | ✅ |
33
+ | Aggregate estimated cost | ⚠️ When available; aggregate only | ✅ |
34
+ | Tokens **per model** | ⚠️ LLM digging each time; consumes tokens | ✅ |
35
+ | Estimated cost (`$`) **per model** | ❌ No accurate cost per breakdown | ✅ |
36
+ | Tokens **per subagent** | ⚠️ LLM digging each time; consumes tokens | ✅ |
37
+ | Estimated cost (`$`) **per subagent** | ❌ No accurate cost per breakdown | ✅ |
38
+ | Cost attribution to skills | ❌ Cannot provide cost per breakdown | ✅ |
39
+ | Tool-call counts by skill and subagent | ⚠️ LLM digging each time | ✅ |
40
+ | Batch analysis, filtering, and aggregation | Limited/conversational | ✅ |
41
+ | Stable JSON, table, and detailed output | No stable contract | ✅ |
42
+ | Python API for embedding in third-party tools | ❌ | ✅ |
43
+ | Pricing provenance and custom model rates | ⚠️ Only for aggregated costs | ✅ |
44
+ | Git commit cost trailers | ❌ | ✅ |
45
+
46
+ ## Example
47
+
48
+ A typical workflow is simply:
49
+
50
+ `uv tool install copilot-session-usage`
51
+
52
+ Then search for a session ID:
53
+
54
+ `copilot-session-usage find "Get execution costs with Chronicle"`
55
+
56
+ And get details:
57
+
58
+ ```bash
59
+ $ copilot-session-usage id "31c51cee-cb1c-4aa5-8c55-83479bcf54da" --format detailed
60
+ Session: 31c51cee-cb1c-4aa5-8c55-83479bcf54da
61
+ Title: Get execution costs with Chronicle
62
+ Started: 2026-08-08T09:16:00Z
63
+ Duration: 1588s (active: 916s)
64
+ Models: claude-opus-4.8, gpt-5.6-luna
65
+ Input: 7,463,752 tokens
66
+ Output: 39,243 tokens
67
+ Cached: 7,050,320 (94%)
68
+ LLM calls: 76
69
+ Est. cost: $1.8836
70
+
71
+ Per-Model Breakdown:
72
+ Model Input Cached Output Calls Cost
73
+ -----------------------------------------------------------
74
+ claude-opus-4.8 1,411,792 1,289,047 9,955 13 $1.66
75
+ gpt-5.6-luna 6,051,960 5,761,273 29,288 63 $0.22
76
+
77
+ Subagents:
78
+ Name Model Input Cached Output Cost
79
+ --------------------------------------------------------------------------------------------------------------
80
+ main gpt-5.6-luna 6,051,960 5,761,273 29,288 $0.22
81
+ Subagent — Claude Opus 4.8-call_CgcUaex8Erf1nChCvxHJtT01 claude-opus-4.8 1,411,792 1,289,047 9,955 $1.66
82
+ ```
83
+
84
+ Default output is json, perfect for an agent.
85
+
86
+ You can also analyze several sessions together or filter them by title, date, workspace, or skill.
87
+
88
+ This is useful if you use Copilot for substantial agentic work and want a clearer record of what different sessions, models, subagents, or skills actually consumed. It can help with budgeting, comparing workflows, investigating cache usage, and building an auditable usage history without manually inspecting JSONL logs.
89
+
90
+ It is MIT-licensed and available on [GitHub](https://github.com/gsemet/copilot-session-usage) and [PyPI](https://pypi.org/project/copilot-session-usage/).
@@ -243,6 +243,10 @@ If automatic detection reports no eligible commits and `force` is disabled, the
243
243
  workflow stops before creating a tag. This is expected for
244
244
  changes such as a standalone `ci:` or `chore:` commit.
245
245
 
246
+ At that point, you can either wait for a user-impacting feature or bug fix and
247
+ start a new release, or enable **Force a patch release when auto finds no
248
+ eligible commit** when triggering the **Release** Action.
249
+
246
250
  If `force` is enabled, the workflow intentionally falls back to a patch bump:
247
251
 
248
252
  ```text
@@ -1,7 +1,7 @@
1
1
  {
2
- "_captured": "2026-08-04T05:25:32.319897+00:00",
2
+ "_captured": "2026-08-08T03:44:16.696767+00:00",
3
3
  "_source": "https://raw.githubusercontent.com/github/docs/main/data/tables/copilot/models-and-pricing.yml",
4
4
  "_yaml_path": "/home/runner/work/copilot-session-usage/copilot-session-usage/src/copilot_session_usage/data/models-and-pricing.yml",
5
- "model_count": 35,
6
- "checksum": "4d0edb1c05af21c5"
5
+ "model_count": 36,
6
+ "checksum": "a23f8c498f40aff7"
7
7
  }
@@ -372,3 +372,11 @@
372
372
  input: $0.95
373
373
  cached_input: $0.19
374
374
  output: $4.00
375
+
376
+ - model: 'Kimi K3'
377
+ provider: moonshot_ai
378
+ release_status: GA
379
+ category: Powerful
380
+ input: $3.00
381
+ cached_input: $0.30
382
+ output: $15.00