copilot-session-usage 0.5.0__tar.gz → 0.6.0__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.
- copilot_session_usage-0.6.0/.gitattributes +196 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/skills/gh-release-notes/SKILL.md +46 -25
- copilot_session_usage-0.6.0/.readthedocs.yaml +36 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/CHANGELOG.md +12 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/PKG-INFO +1 -1
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/add-commit-trailer.md +6 -6
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/skills/copilot-session-usage/SKILL.md +3 -3
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/_internal/core.py +6 -5
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/data/models-and-pricing.lock +3 -3
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/data/models-and-pricing.yml +60 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_core.py +5 -5
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_git.py +15 -15
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/uv.lock +373 -342
- copilot_session_usage-0.5.0/.readthedocs.yaml +0 -24
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.editorconfig +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/changes/requests/skill-breakdown/01-request.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/guidelines/git-commit-message.guideline.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/guidelines/knowledge-base.guidelines.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/pull_request_template.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/skills/consolidate-knowledge-base/SKILL.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/skills/record-finding/SKILL.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/workflows/ci.yml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/workflows/publish.yml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.gitignore +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/AGENTS.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/CONTRIBUTING.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/LICENSE +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/README.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/_static/changelog.js +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/_static/custom.css +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/changelog.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/conf.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/explanation/how-cost-estimation-works.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/explanation/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/analyze-specific-session.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/batch-and-spending.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/export-json.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/wsl2.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/installation.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/reference/api.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/reference/cli.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/reference/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/reference/pricing.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/tutorials/getting-started.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/tutorials/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/justfile +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Base.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Concept.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Experiment.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Finding.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Hypothesis.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Outcome.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Playbook.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Principle.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Reference.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/_schema/Structure.schema.yaml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/concepts/copilot-cli.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/concepts/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/concepts/overview.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/concepts/session-cost-analysis.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/concepts/threshold-based-pricing.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/experiments/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/experiments/verify-subagent-cost-attribution.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/findings/2026.07.02-00.00-subagent-logs-runsubagent-prefix.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/findings/2026.07.02-22.00-title-generation-not-counted-as-model-turn.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/findings/2026.07.02-23.00-cache-write-approximation.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/findings/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/guides/automation-scripts.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/guides/cost-optimization.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/guides/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/guides/wsl2-setup.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/ideas/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/ideas/multi-session-efficiency-analytics.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/log.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/principles/findings-are-immutable.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/principles/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/reference/debug-log-format.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/reference/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/reference/pricing-formats.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/cache-cost-approximation.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/index.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/knowledge-base-information-types.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/session-discovery-algorithm.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/subagent-cost-tracking.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/knowledge/structures/vscode-copilot-extension.md +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/pyproject.toml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/scripts/refresh_pricing.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/__init__.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/_internal/__init__.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/_internal/copilot_cli.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/_internal/git.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/_internal/vscode.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/api.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/cli.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/data/__init__.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/src/copilot_session_usage/data/custom-models-pricing.yml +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/conftest.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_api.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_cli.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_coverage_gaps.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_rendering.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_vscode.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/tests/test_vscode_platform.py +0 -0
- {copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/uv.toml +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
################################################################################
|
|
2
|
+
#
|
|
3
|
+
# Gitattributes - defining git attributes per path
|
|
4
|
+
#
|
|
5
|
+
# this .gitattributes file converts most binary format to git-lfs
|
|
6
|
+
#
|
|
7
|
+
# Resources:
|
|
8
|
+
#
|
|
9
|
+
# - https://git-lfs.com/
|
|
10
|
+
# - https://docs.gitlab.com/ee/topics/git/lfs/
|
|
11
|
+
# - https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes
|
|
12
|
+
#
|
|
13
|
+
################################################################################
|
|
14
|
+
|
|
15
|
+
# Git will always convert line endings to LF on checkout.
|
|
16
|
+
# You should use this for files that must keep LF endings, even on Windows.
|
|
17
|
+
# (in case people don't have core.autocrlf set)
|
|
18
|
+
* text=auto eol=lf
|
|
19
|
+
|
|
20
|
+
# All files with '.lfs.' in its name will be placed in Git LFS automatically
|
|
21
|
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
|
22
|
+
|
|
23
|
+
# Denote all files that are truly filter=lfs diff=lfs merge=lfs -text
|
|
24
|
+
# and should not be modified.
|
|
25
|
+
|
|
26
|
+
# Executables
|
|
27
|
+
*.exe filter=lfs diff=lfs merge=lfs -text
|
|
28
|
+
*.dll filter=lfs diff=lfs merge=lfs -text
|
|
29
|
+
|
|
30
|
+
# documents
|
|
31
|
+
*.csv filter=lfs diff=lfs merge=lfs -text
|
|
32
|
+
*.doc filter=lfs diff=lfs merge=lfs -text
|
|
33
|
+
*.docx filter=lfs diff=lfs merge=lfs -text
|
|
34
|
+
*.odf filter=lfs diff=lfs merge=lfs -text
|
|
35
|
+
*.odp filter=lfs diff=lfs merge=lfs -text
|
|
36
|
+
*.odt filter=lfs diff=lfs merge=lfs -text
|
|
37
|
+
*.pdf filter=lfs diff=lfs merge=lfs -text
|
|
38
|
+
*.ppt filter=lfs diff=lfs merge=lfs -text
|
|
39
|
+
*.pptx filter=lfs diff=lfs merge=lfs -text
|
|
40
|
+
*.xls filter=lfs diff=lfs merge=lfs -text
|
|
41
|
+
*.xls filter=lfs diff=lfs merge=lfs -text
|
|
42
|
+
*.xlsm filter=lfs diff=lfs merge=lfs -text
|
|
43
|
+
*.xlsx filter=lfs diff=lfs merge=lfs -text
|
|
44
|
+
|
|
45
|
+
# Fonts
|
|
46
|
+
*.eot filter=lfs diff=lfs merge=lfs -text
|
|
47
|
+
*.otf filter=lfs diff=lfs merge=lfs -text
|
|
48
|
+
*.ttc filter=lfs diff=lfs merge=lfs -text
|
|
49
|
+
*.ttf filter=lfs diff=lfs merge=lfs -text
|
|
50
|
+
*.woff filter=lfs diff=lfs merge=lfs -text
|
|
51
|
+
*.woff2 filter=lfs diff=lfs merge=lfs -text
|
|
52
|
+
|
|
53
|
+
# Images
|
|
54
|
+
*.ai filter=lfs diff=lfs merge=lfs -text
|
|
55
|
+
*.bmp filter=lfs diff=lfs merge=lfs -text
|
|
56
|
+
*.eps filter=lfs diff=lfs merge=lfs -text
|
|
57
|
+
*.gif filter=lfs diff=lfs merge=lfs -text
|
|
58
|
+
*.ico filter=lfs diff=lfs merge=lfs -text
|
|
59
|
+
*.jng filter=lfs diff=lfs merge=lfs -text
|
|
60
|
+
*.jp2 filter=lfs diff=lfs merge=lfs -text
|
|
61
|
+
*.jpg filter=lfs diff=lfs merge=lfs -text
|
|
62
|
+
*.jpeg filter=lfs diff=lfs merge=lfs -text
|
|
63
|
+
*.jpx filter=lfs diff=lfs merge=lfs -text
|
|
64
|
+
*.jxr filter=lfs diff=lfs merge=lfs -text
|
|
65
|
+
*.png filter=lfs diff=lfs merge=lfs -text
|
|
66
|
+
*.psb filter=lfs diff=lfs merge=lfs -text
|
|
67
|
+
*.psd filter=lfs diff=lfs merge=lfs -text
|
|
68
|
+
*.svg text
|
|
69
|
+
*.svgz filter=lfs diff=lfs merge=lfs -text
|
|
70
|
+
*.tif filter=lfs diff=lfs merge=lfs -text
|
|
71
|
+
*.tiff filter=lfs diff=lfs merge=lfs -text
|
|
72
|
+
*.wbmp filter=lfs diff=lfs merge=lfs -text
|
|
73
|
+
*.webp filter=lfs diff=lfs merge=lfs -text
|
|
74
|
+
|
|
75
|
+
# Audio
|
|
76
|
+
*.kar filter=lfs diff=lfs merge=lfs -text
|
|
77
|
+
*.m4a filter=lfs diff=lfs merge=lfs -text
|
|
78
|
+
*.mid filter=lfs diff=lfs merge=lfs -text
|
|
79
|
+
*.midi filter=lfs diff=lfs merge=lfs -text
|
|
80
|
+
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
|
81
|
+
*.ogg filter=lfs diff=lfs merge=lfs -text
|
|
82
|
+
*.ra filter=lfs diff=lfs merge=lfs -text
|
|
83
|
+
|
|
84
|
+
## VIDEO
|
|
85
|
+
*.3gpp filter=lfs diff=lfs merge=lfs -text
|
|
86
|
+
*.3gp filter=lfs diff=lfs merge=lfs -text
|
|
87
|
+
*.as filter=lfs diff=lfs merge=lfs -text
|
|
88
|
+
*.asf filter=lfs diff=lfs merge=lfs -text
|
|
89
|
+
*.asx filter=lfs diff=lfs merge=lfs -text
|
|
90
|
+
*.fla filter=lfs diff=lfs merge=lfs -text
|
|
91
|
+
*.flv filter=lfs diff=lfs merge=lfs -text
|
|
92
|
+
*.m4v filter=lfs diff=lfs merge=lfs -text
|
|
93
|
+
*.mng filter=lfs diff=lfs merge=lfs -text
|
|
94
|
+
*.mov filter=lfs diff=lfs merge=lfs -text
|
|
95
|
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
96
|
+
*.mpeg filter=lfs diff=lfs merge=lfs -text
|
|
97
|
+
*.mpg filter=lfs diff=lfs merge=lfs -text
|
|
98
|
+
*.ogv filter=lfs diff=lfs merge=lfs -text
|
|
99
|
+
*.swc filter=lfs diff=lfs merge=lfs -text
|
|
100
|
+
*.swf filter=lfs diff=lfs merge=lfs -text
|
|
101
|
+
*.webm filter=lfs diff=lfs merge=lfs -text
|
|
102
|
+
|
|
103
|
+
# Archives
|
|
104
|
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
|
105
|
+
*.cab filter=lfs diff=lfs merge=lfs -text
|
|
106
|
+
*.ear filter=lfs diff=lfs merge=lfs -text
|
|
107
|
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
|
108
|
+
*.jar filter=lfs diff=lfs merge=lfs -text
|
|
109
|
+
*.aar filter=lfs diff=lfs merge=lfs -text
|
|
110
|
+
*.apk filter=lfs diff=lfs merge=lfs -text
|
|
111
|
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
|
112
|
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
|
113
|
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
|
114
|
+
*.war filter=lfs diff=lfs merge=lfs -text
|
|
115
|
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
|
116
|
+
*.pdf filter=lfs diff=lfs merge=lfs -text
|
|
117
|
+
*.eot filter=lfs diff=lfs merge=lfs -text
|
|
118
|
+
*.otf filter=lfs diff=lfs merge=lfs -text
|
|
119
|
+
*.ttc filter=lfs diff=lfs merge=lfs -text
|
|
120
|
+
*.ttf filter=lfs diff=lfs merge=lfs -text
|
|
121
|
+
*.woff filter=lfs diff=lfs merge=lfs -text
|
|
122
|
+
*.ai filter=lfs diff=lfs merge=lfs -text
|
|
123
|
+
*.bmp filter=lfs diff=lfs merge=lfs -text
|
|
124
|
+
*.eps filter=lfs diff=lfs merge=lfs -text
|
|
125
|
+
*.gif filter=lfs diff=lfs merge=lfs -text
|
|
126
|
+
*.ico filter=lfs diff=lfs merge=lfs -text
|
|
127
|
+
*.jng filter=lfs diff=lfs merge=lfs -text
|
|
128
|
+
*.jp2 filter=lfs diff=lfs merge=lfs -text
|
|
129
|
+
*.jpg filter=lfs diff=lfs merge=lfs -text
|
|
130
|
+
*.jpx filter=lfs diff=lfs merge=lfs -text
|
|
131
|
+
*.jxr filter=lfs diff=lfs merge=lfs -text
|
|
132
|
+
*.png filter=lfs diff=lfs merge=lfs -text
|
|
133
|
+
*.psb filter=lfs diff=lfs merge=lfs -text
|
|
134
|
+
*.psd filter=lfs diff=lfs merge=lfs -text
|
|
135
|
+
*.tif filter=lfs diff=lfs merge=lfs -text
|
|
136
|
+
*.kar filter=lfs diff=lfs merge=lfs -text
|
|
137
|
+
*.m4a filter=lfs diff=lfs merge=lfs -text
|
|
138
|
+
*.mid filter=lfs diff=lfs merge=lfs -text
|
|
139
|
+
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
|
140
|
+
*.ogg filter=lfs diff=lfs merge=lfs -text
|
|
141
|
+
*.ra filter=lfs diff=lfs merge=lfs -text
|
|
142
|
+
*.3gp filter=lfs diff=lfs merge=lfs -text
|
|
143
|
+
*.as filter=lfs diff=lfs merge=lfs -text
|
|
144
|
+
*.asf filter=lfs diff=lfs merge=lfs -text
|
|
145
|
+
*.asx filter=lfs diff=lfs merge=lfs -text
|
|
146
|
+
*.fla filter=lfs diff=lfs merge=lfs -text
|
|
147
|
+
*.flv filter=lfs diff=lfs merge=lfs -text
|
|
148
|
+
*.m4v filter=lfs diff=lfs merge=lfs -text
|
|
149
|
+
*.mng filter=lfs diff=lfs merge=lfs -text
|
|
150
|
+
*.mov filter=lfs diff=lfs merge=lfs -text
|
|
151
|
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
152
|
+
*.mpg filter=lfs diff=lfs merge=lfs -text
|
|
153
|
+
*.ogv filter=lfs diff=lfs merge=lfs -text
|
|
154
|
+
*.swc filter=lfs diff=lfs merge=lfs -text
|
|
155
|
+
*.swf filter=lfs diff=lfs merge=lfs -text
|
|
156
|
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
|
157
|
+
*.cab filter=lfs diff=lfs merge=lfs -text
|
|
158
|
+
*.ear filter=lfs diff=lfs merge=lfs -text
|
|
159
|
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
|
160
|
+
*.jar filter=lfs diff=lfs merge=lfs -text
|
|
161
|
+
*.aar filter=lfs diff=lfs merge=lfs -text
|
|
162
|
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
|
163
|
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
|
164
|
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
|
165
|
+
*.war filter=lfs diff=lfs merge=lfs -text
|
|
166
|
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
|
167
|
+
|
|
168
|
+
# Matlab binary format
|
|
169
|
+
*.slx filter=lfs diff=lfs merge=lfs -text
|
|
170
|
+
*.mat filter=lfs diff=lfs merge=lfs -text
|
|
171
|
+
*.mltbx filter=lfs diff=lfs merge=lfs -text
|
|
172
|
+
*.mlapp filter=lfs diff=lfs merge=lfs -text
|
|
173
|
+
|
|
174
|
+
# Autosar
|
|
175
|
+
*.arxml filter=lfs diff=lfs merge=lfs -text
|
|
176
|
+
|
|
177
|
+
# 3D objects
|
|
178
|
+
*.ive filter=lfs diff=lfs merge=lfs -text
|
|
179
|
+
*.sketch filter=lfs diff=lfs merge=lfs -text
|
|
180
|
+
*.osgb filter=lfs diff=lfs merge=lfs -text
|
|
181
|
+
|
|
182
|
+
# FMU
|
|
183
|
+
*.fmu filter=lfs diff=lfs merge=lfs -text
|
|
184
|
+
|
|
185
|
+
# Misc
|
|
186
|
+
*.rgb filter=lfs diff=lfs merge=lfs -text
|
|
187
|
+
*.cbf filter=lfs diff=lfs merge=lfs -text
|
|
188
|
+
*.csb filter=lfs diff=lfs merge=lfs -text
|
|
189
|
+
*.db filter=lfs diff=lfs merge=lfs -text
|
|
190
|
+
*.exp filter=lfs diff=lfs merge=lfs -text
|
|
191
|
+
*.lst filter=lfs diff=lfs merge=lfs -text
|
|
192
|
+
*.tptbin filter=lfs diff=lfs merge=lfs -text
|
|
193
|
+
*.vopt filter=lfs diff=lfs merge=lfs -text
|
|
194
|
+
*.res filter=lfs diff=lfs merge=lfs -text
|
|
195
|
+
*.tlog filter=lfs diff=lfs merge=lfs -text
|
|
196
|
+
*.sol filter=lfs diff=lfs merge=lfs -text
|
{copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/.github/skills/gh-release-notes/SKILL.md
RENAMED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Generate **end-user friendly** release notes by analyzing actual code changes between releases.
|
|
4
4
|
No scripts required — uses git commands to understand what changed and why it matters.
|
|
5
5
|
|
|
6
|
+
The output is meant to be **copy-pasted into a GitHub Release** (or similar).
|
|
7
|
+
|
|
6
8
|
---
|
|
7
9
|
|
|
8
10
|
## Quick Start
|
|
@@ -26,8 +28,10 @@ What changed since the last release tag?
|
|
|
26
28
|
1. **Reads actual diffs** — examines code changes, not just commit messages
|
|
27
29
|
2. **Interprets for end-users** — no technical jargon, functions, or variable names
|
|
28
30
|
3. **Categorizes intelligently** — Features, Enhancements, Bug Fixes, Breaking Changes
|
|
29
|
-
4. **
|
|
30
|
-
5. **
|
|
31
|
+
4. **Adds concrete examples** — shows what users see or can do after the change
|
|
32
|
+
5. **Links to public docs** — points to published documentation, not repo paths
|
|
33
|
+
6. **Consolidates related changes** — groups related diffs, eliminates back-and-forth noise
|
|
34
|
+
7. **Outputs clean markdown** — ready to paste into a GitHub Release note
|
|
31
35
|
|
|
32
36
|
---
|
|
33
37
|
|
|
@@ -88,7 +92,7 @@ Breaking changes come from:
|
|
|
88
92
|
|
|
89
93
|
### Step 6: Categorize & Format
|
|
90
94
|
|
|
91
|
-
Organize changes into buckets
|
|
95
|
+
Organize changes into buckets. **Only include sections that have content.** Omit empty sections entirely.
|
|
92
96
|
|
|
93
97
|
```markdown
|
|
94
98
|
# Release Notes - v1.1.0
|
|
@@ -109,10 +113,13 @@ Organize changes into buckets:
|
|
|
109
113
|
- Database schema updated — run migration before upgrading
|
|
110
114
|
- CSV export removed; use Excel or PDF instead
|
|
111
115
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
|
|
116
|
+
## Examples
|
|
117
|
+
- Dark mode can be enabled in Settings → Appearance → Theme
|
|
118
|
+
- CSV export is no longer available; choose Excel or PDF from Export menu
|
|
119
|
+
|
|
120
|
+
## Documentation
|
|
121
|
+
- [Dark mode guide](https://docs.example.com/settings#dark-mode)
|
|
122
|
+
- [Migration notes](https://docs.example.com/upgrade#database)
|
|
116
123
|
```
|
|
117
124
|
|
|
118
125
|
---
|
|
@@ -120,27 +127,30 @@ Organize changes into buckets:
|
|
|
120
127
|
## Workflow for Agent
|
|
121
128
|
|
|
122
129
|
1. **Parse input** — extract `from_tag`, `to_tag`, `repo_path`, and optional filters
|
|
123
|
-
2. **
|
|
124
|
-
3. **
|
|
125
|
-
4. **
|
|
126
|
-
5. **
|
|
127
|
-
6. **
|
|
128
|
-
7. **
|
|
129
|
-
8. **
|
|
130
|
-
9. **
|
|
130
|
+
2. **Discover public docs URL** — inspect `README.md`, `pyproject.toml`, `mkdocs.yml`, `docs/conf.py`, or `.readthedocs.yml` for the published documentation URL. Prefer ReadTheDocs, GitHub Pages, or the project's public docs site. If none is found, omit doc links.
|
|
131
|
+
3. **Fetch commits** — run `git log` with range, collect hashes & messages
|
|
132
|
+
4. **Read diffs per file** — `git show <hash>` for each commit, examine changed files
|
|
133
|
+
5. **Interpret impact** — what does each change mean to users?
|
|
134
|
+
6. **Detect breaking changes** — scan for BREAKING markers, API removals, schema changes
|
|
135
|
+
7. **Group by category** — assign each change to **New Features**, **Enhancements**, **Bug Fixes**, **Breaking Changes**, **Examples**, or **Documentation**
|
|
136
|
+
8. **Build examples** — for each user-facing change, look at README, docs, tests, or CLI help in the diff and add a short "what the user gets" example when it clarifies the change
|
|
137
|
+
9. **Consolidate** — merge related items, remove duplicates and flip-flops
|
|
138
|
+
10. **Format markdown** — generate clean bullet points with proper headings
|
|
139
|
+
11. **Omit empty sections** — do not print a section if it has no bullets
|
|
140
|
+
12. **Use public docs links** — every Documentation bullet and every feature/enhancement docs reference must use the public URL with a fragment identifier, not a repo-relative path
|
|
131
141
|
|
|
132
142
|
---
|
|
133
143
|
|
|
134
144
|
## Output Format
|
|
135
145
|
|
|
136
|
-
**
|
|
146
|
+
**Clean markdown** for a GitHub Release:
|
|
137
147
|
|
|
138
148
|
```markdown
|
|
139
149
|
# Release Notes - v1.1.0
|
|
140
150
|
|
|
141
151
|
## New Features
|
|
142
|
-
-
|
|
143
|
-
- PDF export option
|
|
152
|
+
- Added dark mode toggle in settings
|
|
153
|
+
- New PDF export option
|
|
144
154
|
|
|
145
155
|
## Enhancements
|
|
146
156
|
- Improved search performance (supports partial matches)
|
|
@@ -153,19 +163,26 @@ Organize changes into buckets:
|
|
|
153
163
|
## Breaking Changes
|
|
154
164
|
- Database schema updated — run migration before upgrading
|
|
155
165
|
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
166
|
+
## Examples
|
|
167
|
+
- Enable dark mode from Settings → Appearance → Theme
|
|
168
|
+
- Export a report as PDF from the File → Export menu
|
|
169
|
+
|
|
170
|
+
## Documentation
|
|
171
|
+
- [Dark mode guide](https://docs.example.com/settings#dark-mode)
|
|
172
|
+
- [Upgrade instructions](https://docs.example.com/upgrade#database)
|
|
159
173
|
```
|
|
160
174
|
|
|
161
175
|
**Key Rules:**
|
|
162
176
|
- One line per bullet point
|
|
163
177
|
- No sub-bullets or elaborate descriptions
|
|
164
|
-
- Total length: <200 words
|
|
165
178
|
- User impact only (not implementation details)
|
|
179
|
+
- Use public documentation URLs; never use repo-relative paths like `docs/...` or `README.md`
|
|
166
180
|
- Use fragment identifiers (`#section-name`) to point to specific docs sections
|
|
167
|
-
-
|
|
168
|
-
-
|
|
181
|
+
- Add an **Examples** section when the diff shows a CLI command, API call, config snippet, or before/after behavior
|
|
182
|
+
- Add a **Documentation** section when docs were added or updated, linking to the published page
|
|
183
|
+
- Multiple links OK if they point to different topics
|
|
184
|
+
- Omit any section that has no bullets
|
|
185
|
+
- Do not add a "Notes", "Miscellaneous", or "Other" catch-all section
|
|
169
186
|
|
|
170
187
|
---
|
|
171
188
|
|
|
@@ -195,13 +212,17 @@ Generate release notes from v2.1.0 to v2.2.0 for /path/to/my-app
|
|
|
195
212
|
- Use end-user language ("improved performance" not "optimized O(n) loop")
|
|
196
213
|
- Include breaking changes prominently
|
|
197
214
|
- Group related changes
|
|
198
|
-
- Add
|
|
215
|
+
- Add concrete examples drawn from README, docs, tests, or CLI help in the diff
|
|
216
|
+
- Link to the project's public documentation site (ReadTheDocs, GitHub Pages, etc.)
|
|
217
|
+
- Omit empty sections
|
|
199
218
|
|
|
200
219
|
❌ **Don't:**
|
|
201
220
|
- Copy commit messages verbatim
|
|
202
221
|
- Include function/variable names
|
|
203
222
|
- Mention internal refactors users won't notice
|
|
223
|
+
- Include dependency bumps or build changes unless they are user-visible
|
|
204
224
|
- Include secrets, passwords, or internal URLs
|
|
225
|
+
- Use repo-relative paths like `docs/source/how-to/...` or `README.md`
|
|
205
226
|
- Make up changes not shown in diffs
|
|
206
227
|
|
|
207
228
|
---
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Read the Docs configuration file
|
|
2
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
|
|
6
|
+
build:
|
|
7
|
+
os: ubuntu-24.04
|
|
8
|
+
tools:
|
|
9
|
+
python: "3.13"
|
|
10
|
+
jobs:
|
|
11
|
+
post_checkout:
|
|
12
|
+
- git fetch --tags
|
|
13
|
+
# Download and uncompress git-lfs binary
|
|
14
|
+
- wget https://github.com/git-lfs/git-lfs/releases/download/v3.6.1/git-lfs-linux-amd64-v3.6.1.tar.gz
|
|
15
|
+
- tar xvfz git-lfs-linux-amd64-v3.6.1.tar.gz
|
|
16
|
+
- cp git-lfs-*/git-lfs ./git-lfs
|
|
17
|
+
# Configure LFS to use the downloaded binary
|
|
18
|
+
- git config filter.lfs.process "`pwd`/git-lfs filter-process"
|
|
19
|
+
- git config filter.lfs.smudge "`pwd`/git-lfs smudge -- %f"
|
|
20
|
+
- git config filter.lfs.clean "`pwd`/git-lfs clean -- %f"
|
|
21
|
+
# Make LFS available in the current repository and fetch/check out content
|
|
22
|
+
- ./git-lfs install
|
|
23
|
+
- ./git-lfs fetch
|
|
24
|
+
- ./git-lfs checkout
|
|
25
|
+
pre_build:
|
|
26
|
+
- uv run cz changelog
|
|
27
|
+
|
|
28
|
+
sphinx:
|
|
29
|
+
configuration: docs/source/conf.py
|
|
30
|
+
|
|
31
|
+
python:
|
|
32
|
+
install:
|
|
33
|
+
- method: uv
|
|
34
|
+
command: sync
|
|
35
|
+
groups:
|
|
36
|
+
- dev
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
### Feat
|
|
4
4
|
|
|
5
|
+
- integrate GPT5.6 pricing
|
|
6
|
+
|
|
7
|
+
## v0.5.1 (2026-07-10)
|
|
8
|
+
|
|
9
|
+
### Fix
|
|
10
|
+
|
|
11
|
+
- bad computation of AIC in trailers
|
|
12
|
+
|
|
13
|
+
## v0.5.0 (2026-07-09)
|
|
14
|
+
|
|
15
|
+
### Feat
|
|
16
|
+
|
|
5
17
|
- **cli**: add amend-commit command to inject session cost trailers
|
|
6
18
|
|
|
7
19
|
## v0.4.0 (2026-07-08)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: copilot-session-usage
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
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/
|
{copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/docs/source/how-to/add-commit-trailer.md
RENAMED
|
@@ -10,9 +10,9 @@ One `Copilot-Session-Usage-Acc` trailer is added per model used in the
|
|
|
10
10
|
session, followed by a single `Copilot-Session-Usage-AIC` total-cost trailer:
|
|
11
11
|
|
|
12
12
|
```text
|
|
13
|
-
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:
|
|
14
|
-
Copilot-Session-Usage-Acc: Anthropic:Claude Haiku 4.5,in:0.03,out:0,cache:0,aic:
|
|
15
|
-
Copilot-Session-Usage-AIC:
|
|
13
|
+
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:231
|
|
14
|
+
Copilot-Session-Usage-Acc: Anthropic:Claude Haiku 4.5,in:0.03,out:0,cache:0,aic:1
|
|
15
|
+
Copilot-Session-Usage-AIC: 232
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Beware, the costs are **accumulated** for the entire session, not just the current commit.
|
|
@@ -31,7 +31,7 @@ and model names keep the casing from `data/models-and-pricing.yml`.
|
|
|
31
31
|
|
|
32
32
|
Token counts are expressed in millions of tokens with two decimals. The
|
|
33
33
|
`aic` value and the `Copilot-Session-Usage-AIC` line show the cost in AI
|
|
34
|
-
credits (
|
|
34
|
+
credits (1 AIC = $0.01) with two decimals. If the commit already contains
|
|
35
35
|
`Copilot-Session-Usage-Acc` or `Copilot-Session-Usage-AIC` trailers, they are
|
|
36
36
|
replaced so the values stay fresh. Other trailers, such as `Signed-off-by`,
|
|
37
37
|
are preserved and kept at the end of the message.
|
|
@@ -103,8 +103,8 @@ This produces:
|
|
|
103
103
|
```text
|
|
104
104
|
Copilot-Session-Usage-Session-ID: abc-123
|
|
105
105
|
Copilot-Session-Usage-Session-ID: def-456
|
|
106
|
-
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:
|
|
107
|
-
Copilot-Session-Usage-AIC:
|
|
106
|
+
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:231
|
|
107
|
+
Copilot-Session-Usage-AIC: 232
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
This will allow another process, not done by Copilot-Session-Cost, to later rewrite
|
{copilot_session_usage-0.5.0 → copilot_session_usage-0.6.0}/skills/copilot-session-usage/SKILL.md
RENAMED
|
@@ -195,8 +195,8 @@ as Git commit-message trailers. One line is emitted per model, plus a total
|
|
|
195
195
|
AIC (AI credits) summary line:
|
|
196
196
|
|
|
197
197
|
```
|
|
198
|
-
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:
|
|
199
|
-
Copilot-Session-Usage-AIC:
|
|
198
|
+
Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,in:24.90,out:0.06,cache:21.88,aic:231
|
|
199
|
+
Copilot-Session-Usage-AIC: 232
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
The vendor and model name come from the actual session context (debug-log
|
|
@@ -204,7 +204,7 @@ The vendor and model name come from the actual session context (debug-log
|
|
|
204
204
|
human-readable casing (for example, `Moonshot AI` instead of `moonshot_ai`), and
|
|
205
205
|
model names keep the casing from the pricing data (for example, `Kimi K2.7 Code`
|
|
206
206
|
instead of the lower-cased log identifier `kimi-k2.7-code`). Token counts are in
|
|
207
|
-
millions of tokens with two decimals; AIC values are rounded to two decimals.
|
|
207
|
+
millions of tokens with two decimals; AIC values are USD * 100 and rounded to two decimals (1 AIC = $0.01).
|
|
208
208
|
|
|
209
209
|
When a change spans several VS Code Copilot sessions, pass each session ID
|
|
210
210
|
with a separate `--session-id` argument. The costs are accumulated and written
|
|
@@ -500,11 +500,12 @@ def build_session_usage_acc_trailers(result: dict[str, Any], pricing: dict[str,
|
|
|
500
500
|
is the raw name observed in the session logs; the vendor is derived from
|
|
501
501
|
the bundled pricing data using both the internal normalized key and the
|
|
502
502
|
original raw model name. Token counts are expressed in millions with two
|
|
503
|
-
decimals; the estimated
|
|
503
|
+
decimals; the estimated cost is appended as ``aic`` in AI credits
|
|
504
|
+
(1 AIC = $0.01, so USD * 100).
|
|
504
505
|
|
|
505
506
|
Format::
|
|
506
507
|
|
|
507
|
-
Copilot-Session-Usage-Acc: <vendor>:<model-name>,in:4.12,out:1.21,cache:3.9,aic:
|
|
508
|
+
Copilot-Session-Usage-Acc: <vendor>:<model-name>,in:4.12,out:1.21,cache:3.9,aic:42
|
|
508
509
|
|
|
509
510
|
The model name keeps the casing from the bundled pricing YAML (for example
|
|
510
511
|
``"Claude Sonnet 4.6"``) rather than the lower-cased identifier used in
|
|
@@ -521,7 +522,7 @@ def build_session_usage_acc_trailers(result: dict[str, Any], pricing: dict[str,
|
|
|
521
522
|
input_m = _format_millions(entry.get("input_tokens", 0))
|
|
522
523
|
output_m = _format_millions(entry.get("output_tokens", 0))
|
|
523
524
|
cache_m = _format_millions(entry.get("cached_tokens", 0))
|
|
524
|
-
aic = round(entry.get("estimated_usd", 0.0), 2)
|
|
525
|
+
aic = _format_aic(round(entry.get("estimated_usd", 0.0) * 100, 2))
|
|
525
526
|
trailers.append(
|
|
526
527
|
f"Copilot-Session-Usage-Acc: "
|
|
527
528
|
f"{provider}:{display_model},in:{input_m},out:{output_m},cache:{cache_m},aic:{aic}"
|
|
@@ -530,7 +531,7 @@ def build_session_usage_acc_trailers(result: dict[str, Any], pricing: dict[str,
|
|
|
530
531
|
|
|
531
532
|
|
|
532
533
|
def _format_aic(value: float) -> str:
|
|
533
|
-
"""Format an AIC
|
|
534
|
+
"""Format an AIC value with at most 2 decimals, dropping trailing zeros."""
|
|
534
535
|
formatted = f"{value:.2f}"
|
|
535
536
|
if "." in formatted:
|
|
536
537
|
formatted = formatted.rstrip("0").rstrip(".")
|
|
@@ -539,7 +540,7 @@ def _format_aic(value: float) -> str:
|
|
|
539
540
|
|
|
540
541
|
def build_session_usage_aic_trailer(result: dict[str, Any]) -> str:
|
|
541
542
|
"""Build the ``Copilot-Session-Usage-AIC`` trailer with total AIC cost."""
|
|
542
|
-
total_aic = round(result.get("total", {}).get("estimated_usd", 0.0), 2)
|
|
543
|
+
total_aic = round(result.get("total", {}).get("estimated_usd", 0.0) * 100, 2)
|
|
543
544
|
return f"Copilot-Session-Usage-AIC: {_format_aic(total_aic)}"
|
|
544
545
|
|
|
545
546
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_captured": "2026-07-
|
|
2
|
+
"_captured": "2026-07-10T07:30:47.222629+00:00",
|
|
3
3
|
"_source": "https://raw.githubusercontent.com/github/docs/main/data/tables/copilot/models-and-pricing.yml",
|
|
4
4
|
"_yaml_path": "/Users/az02065/Projects/DevTools/copilot-session-usage/src/copilot_session_usage/data/models-and-pricing.yml",
|
|
5
|
-
"model_count":
|
|
6
|
-
"checksum": "
|
|
5
|
+
"model_count": 33,
|
|
6
|
+
"checksum": "7bae47530bf10fd2"
|
|
7
7
|
}
|
|
@@ -98,6 +98,66 @@
|
|
|
98
98
|
cached_input: $1.00
|
|
99
99
|
output: $45.00
|
|
100
100
|
|
|
101
|
+
- model: GPT-5.6 Luna
|
|
102
|
+
provider: openai
|
|
103
|
+
release_status: GA
|
|
104
|
+
category: Lightweight
|
|
105
|
+
threshold: '≤ 200K'
|
|
106
|
+
tier: Default
|
|
107
|
+
input: $1.00
|
|
108
|
+
cached_input: $0.10
|
|
109
|
+
output: $6.00
|
|
110
|
+
|
|
111
|
+
- model: GPT-5.6 Luna
|
|
112
|
+
provider: openai
|
|
113
|
+
release_status: GA
|
|
114
|
+
category: Lightweight
|
|
115
|
+
threshold: '> 200K'
|
|
116
|
+
tier: 'Long context'
|
|
117
|
+
input: $2.00
|
|
118
|
+
cached_input: $0.20
|
|
119
|
+
output: $9.00
|
|
120
|
+
|
|
121
|
+
- model: GPT-5.6 Sol
|
|
122
|
+
provider: openai
|
|
123
|
+
release_status: GA
|
|
124
|
+
category: Powerful
|
|
125
|
+
threshold: '≤ 272K'
|
|
126
|
+
tier: Default
|
|
127
|
+
input: $5.00
|
|
128
|
+
cached_input: $0.50
|
|
129
|
+
output: $30.00
|
|
130
|
+
|
|
131
|
+
- model: GPT-5.6 Sol
|
|
132
|
+
provider: openai
|
|
133
|
+
release_status: GA
|
|
134
|
+
category: Powerful
|
|
135
|
+
threshold: '> 272K'
|
|
136
|
+
tier: 'Long context'
|
|
137
|
+
input: $10.00
|
|
138
|
+
cached_input: $1.00
|
|
139
|
+
output: $45.00
|
|
140
|
+
|
|
141
|
+
- model: GPT-5.6 Terra
|
|
142
|
+
provider: openai
|
|
143
|
+
release_status: GA
|
|
144
|
+
category: Versatile
|
|
145
|
+
threshold: '≤ 272K'
|
|
146
|
+
tier: Default
|
|
147
|
+
input: $2.50
|
|
148
|
+
cached_input: $0.25
|
|
149
|
+
output: $15.00
|
|
150
|
+
|
|
151
|
+
- model: GPT-5.6 Terra
|
|
152
|
+
provider: openai
|
|
153
|
+
release_status: GA
|
|
154
|
+
category: Versatile
|
|
155
|
+
threshold: '> 272K'
|
|
156
|
+
tier: 'Long context'
|
|
157
|
+
input: $5.00
|
|
158
|
+
cached_input: $0.50
|
|
159
|
+
output: $22.50
|
|
160
|
+
|
|
101
161
|
# Anthropic
|
|
102
162
|
- model: Claude Haiku 4.5
|
|
103
163
|
provider: anthropic
|
|
@@ -867,18 +867,18 @@ def test_build_session_usage_acc_trailers():
|
|
|
867
867
|
trailers = core.build_session_usage_acc_trailers(result, PRICING_WITH_PROVIDERS)
|
|
868
868
|
assert len(trailers) == 2
|
|
869
869
|
assert (
|
|
870
|
-
"Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,
|
|
871
|
-
in trailers
|
|
870
|
+
"Copilot-Session-Usage-Acc: Moonshot AI:Kimi K2.7 Code,"
|
|
871
|
+
"in:4.12,out:1.21,cache:3.9,aic:230.55" in trailers
|
|
872
872
|
)
|
|
873
873
|
assert (
|
|
874
|
-
"Copilot-Session-Usage-Acc: Anthropic:Claude Sonnet 4.6,
|
|
875
|
-
in trailers
|
|
874
|
+
"Copilot-Session-Usage-Acc: Anthropic:Claude Sonnet 4.6,"
|
|
875
|
+
"in:1,out:0.2,cache:0.5,aic:42" in trailers
|
|
876
876
|
)
|
|
877
877
|
|
|
878
878
|
|
|
879
879
|
def test_build_session_usage_aic_trailer():
|
|
880
880
|
result = {"total": {"estimated_usd": 23.4567}}
|
|
881
|
-
assert core.build_session_usage_aic_trailer(result) == "Copilot-Session-Usage-AIC:
|
|
881
|
+
assert core.build_session_usage_aic_trailer(result) == "Copilot-Session-Usage-AIC: 2345.67"
|
|
882
882
|
|
|
883
883
|
|
|
884
884
|
def test_build_session_usage_aic_trailer_zero():
|