tokenkick 1.0.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.
Files changed (191) hide show
  1. tokenkick-1.0.0/.gitignore +45 -0
  2. tokenkick-1.0.0/CONTRIBUTING.md +49 -0
  3. tokenkick-1.0.0/LICENSE +21 -0
  4. tokenkick-1.0.0/PKG-INFO +149 -0
  5. tokenkick-1.0.0/README.md +111 -0
  6. tokenkick-1.0.0/SECURITY.md +34 -0
  7. tokenkick-1.0.0/docs/AGENT_PLAYBOOK.md +348 -0
  8. tokenkick-1.0.0/docs/CHANGELOG.md +21 -0
  9. tokenkick-1.0.0/docs/HOW_TOKENKICK_WORKS.md +554 -0
  10. tokenkick-1.0.0/docs/MAGIC_SETUP.md +132 -0
  11. tokenkick-1.0.0/docs/MCP.md +167 -0
  12. tokenkick-1.0.0/docs/PROVIDERS.md +136 -0
  13. tokenkick-1.0.0/docs/README.md +599 -0
  14. tokenkick-1.0.0/docs/TOKENKICK_COMMANDS.md +909 -0
  15. tokenkick-1.0.0/docs/assets/readme-status-demo.svg +105 -0
  16. tokenkick-1.0.0/docs/assets/readme-status-demo.txt +15 -0
  17. tokenkick-1.0.0/docs/macos/INSTALL.md +57 -0
  18. tokenkick-1.0.0/docs/macos/TROUBLESHOOTING.md +77 -0
  19. tokenkick-1.0.0/docs/macos/UPDATE.md +38 -0
  20. tokenkick-1.0.0/llms.txt +11 -0
  21. tokenkick-1.0.0/macos/TokenKickKit/Package.swift +28 -0
  22. tokenkick-1.0.0/macos/TokenKickKit/README.md +70 -0
  23. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKick/TokenKickApp.swift +39 -0
  24. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKAdvanced.swift +250 -0
  25. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKClient.swift +113 -0
  26. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKEnvelope.swift +76 -0
  27. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKEnvironment.swift +60 -0
  28. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKJSONValue.swift +64 -0
  29. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKKickResult.swift +56 -0
  30. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKLaunchAgent.swift +412 -0
  31. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKLineStream.swift +113 -0
  32. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKPlanning.swift +302 -0
  33. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKProcessRunner.swift +188 -0
  34. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKRuntimeLocator.swift +78 -0
  35. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKSetupStream.swift +69 -0
  36. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKSnapshot.swift +262 -0
  37. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AccountsViewModel.swift +365 -0
  38. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AdvancedViewModel.swift +450 -0
  39. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AppRoot.swift +158 -0
  40. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AppSettingsModel.swift +130 -0
  41. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/ConfirmedAction.swift +147 -0
  42. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DaemonPresentation.swift +118 -0
  43. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DaemonViewModel.swift +282 -0
  44. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DiagnosticsViewModel.swift +294 -0
  45. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/HistoryViewModel.swift +153 -0
  46. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/KickViewModel.swift +150 -0
  47. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/MainWindowPresenter.swift +57 -0
  48. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/NavigationModel.swift +84 -0
  49. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/PlannerViewModel.swift +419 -0
  50. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/PopoverModel.swift +95 -0
  51. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/ScheduleViewModel.swift +335 -0
  52. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SetupViewModel.swift +261 -0
  53. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SnapshotAccountRow.swift +138 -0
  54. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SnapshotStore.swift +165 -0
  55. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/AccountsScreen.swift +350 -0
  56. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/AdvancedScreen.swift +411 -0
  57. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/ConfirmationSheetView.swift +63 -0
  58. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/DaemonScreen.swift +259 -0
  59. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/DiagnosticsScreen.swift +290 -0
  60. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/HistoryScreen.swift +148 -0
  61. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/KickScreen.swift +172 -0
  62. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/MainWindowView.swift +167 -0
  63. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/MenuBarPopoverView.swift +279 -0
  64. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/NotificationsScreen.swift +225 -0
  65. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/PlannerScreen.swift +357 -0
  66. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/ScheduleScreen.swift +209 -0
  67. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SettingsView.swift +185 -0
  68. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SetupFlowViews.swift +195 -0
  69. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SharedViews.swift +133 -0
  70. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/StatusScreen.swift +149 -0
  71. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/WindowFrameAutosaver.swift +38 -0
  72. tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/WarningModel.swift +258 -0
  73. tokenkick-1.0.0/macos/TokenKickKit/Sources/tkapp-probe/main.swift +143 -0
  74. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/BundledRuntimeIntegrationTests.swift +150 -0
  75. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/DecodingTests.swift +275 -0
  76. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/EnvironmentAndLocatorTests.swift +234 -0
  77. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/accounts_list.json +39 -0
  78. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/app_doctor.json +282 -0
  79. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/app_setup_events.jsonl +11 -0
  80. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_strategy.json +53 -0
  81. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_surface_patterns.json +32 -0
  82. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_surfaces.json +84 -0
  83. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/daemon_status.json +24 -0
  84. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/history.json +113 -0
  85. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/kick_skipped.json +16 -0
  86. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/mutation_error.json +8 -0
  87. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/notify_global.json +30 -0
  88. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/plan_preview.json +54 -0
  89. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/reset_log.json +22 -0
  90. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/schedule_show.json +31 -0
  91. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/snapshot.json +147 -0
  92. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/usage_error.json +8 -0
  93. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/LaunchAgentTests.swift +329 -0
  94. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/LineStreamTests.swift +71 -0
  95. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/AccountsAndNotificationsTests.swift +491 -0
  96. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/AdvancedTests.swift +394 -0
  97. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/DaemonPresentationTests.swift +104 -0
  98. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/DaemonViewModelTests.swift +308 -0
  99. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/HistoryAndDiagnosticsTests.swift +386 -0
  100. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/KickTests.swift +422 -0
  101. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/NavigationAndSettingsTests.swift +157 -0
  102. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/PlannerScheduleTests.swift +557 -0
  103. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/PopoverModelTests.swift +137 -0
  104. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/SetupAndFirstRunTests.swift +231 -0
  105. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/ShellFixtures.swift +228 -0
  106. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/SnapshotStoreTests.swift +121 -0
  107. tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/WarningDerivationTests.swift +152 -0
  108. tokenkick-1.0.0/packaging/macos/TokenKick.entitlements +11 -0
  109. tokenkick-1.0.0/packaging/macos/TokenKickIcon-source.png +0 -0
  110. tokenkick-1.0.0/packaging/macos/prepare_tkicons_icon.swift +95 -0
  111. tokenkick-1.0.0/packaging/macos/render_tokenkick_icon.swift +76 -0
  112. tokenkick-1.0.0/packaging/macos/tkicons/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
  113. tokenkick-1.0.0/pyproject.toml +63 -0
  114. tokenkick-1.0.0/scripts/assemble-macos-app.sh +90 -0
  115. tokenkick-1.0.0/scripts/build-bundled-tk.sh +72 -0
  116. tokenkick-1.0.0/scripts/build-swift-app.sh +34 -0
  117. tokenkick-1.0.0/scripts/create-local-dmg.sh +78 -0
  118. tokenkick-1.0.0/scripts/create-public-export.sh +38 -0
  119. tokenkick-1.0.0/scripts/find-macos-mach-o.sh +19 -0
  120. tokenkick-1.0.0/scripts/generate-macos-icon.sh +68 -0
  121. tokenkick-1.0.0/scripts/generate-swift-fixtures.sh +175 -0
  122. tokenkick-1.0.0/scripts/notarize-macos-dmg.sh +42 -0
  123. tokenkick-1.0.0/scripts/package-local-macos-app.sh +16 -0
  124. tokenkick-1.0.0/scripts/package-public-macos-app.sh +56 -0
  125. tokenkick-1.0.0/scripts/pyinstaller_entry.py +10 -0
  126. tokenkick-1.0.0/scripts/render-readme-demo.py +136 -0
  127. tokenkick-1.0.0/scripts/sign-local-macos-app.sh +18 -0
  128. tokenkick-1.0.0/scripts/sign-macos-app.sh +68 -0
  129. tokenkick-1.0.0/scripts/sign-macos-dmg.sh +35 -0
  130. tokenkick-1.0.0/scripts/staple-and-verify-macos-package.sh +40 -0
  131. tokenkick-1.0.0/scripts/verify-macos-package.sh +53 -0
  132. tokenkick-1.0.0/test_app_mode.py +1414 -0
  133. tokenkick-1.0.0/test_claude_setup.py +72 -0
  134. tokenkick-1.0.0/test_cli.py +25311 -0
  135. tokenkick-1.0.0/test_codex_surface_patterns.py +198 -0
  136. tokenkick-1.0.0/test_codex_surface_stats.py +416 -0
  137. tokenkick-1.0.0/test_consent.py +60 -0
  138. tokenkick-1.0.0/test_direct.py +44 -0
  139. tokenkick-1.0.0/test_docs.py +208 -0
  140. tokenkick-1.0.0/test_doctor.py +888 -0
  141. tokenkick-1.0.0/test_fixtures/claude_usage_loading_screen.txt +26 -0
  142. tokenkick-1.0.0/test_fixtures/claude_usage_mid_use.txt +13 -0
  143. tokenkick-1.0.0/test_fixtures/codex_provider_usage_baseline.json +63 -0
  144. tokenkick-1.0.0/test_kicker.py +462 -0
  145. tokenkick-1.0.0/test_mcp_core.py +593 -0
  146. tokenkick-1.0.0/test_mcp_setup.py +284 -0
  147. tokenkick-1.0.0/test_models.py +929 -0
  148. tokenkick-1.0.0/test_notifier.py +451 -0
  149. tokenkick-1.0.0/test_orchestration.py +1182 -0
  150. tokenkick-1.0.0/test_reset_calendar.py +307 -0
  151. tokenkick-1.0.0/test_reset_defense.py +764 -0
  152. tokenkick-1.0.0/test_scheduling.py +587 -0
  153. tokenkick-1.0.0/test_sources.py +3213 -0
  154. tokenkick-1.0.0/test_state_io.py +217 -0
  155. tokenkick-1.0.0/test_telegram_remote.py +408 -0
  156. tokenkick-1.0.0/tokenkick/__init__.py +8 -0
  157. tokenkick-1.0.0/tokenkick/antigravity.py +61 -0
  158. tokenkick-1.0.0/tokenkick/app_commands.py +585 -0
  159. tokenkick-1.0.0/tokenkick/app_mode.py +101 -0
  160. tokenkick-1.0.0/tokenkick/claude_setup.py +53 -0
  161. tokenkick-1.0.0/tokenkick/cli.py +13785 -0
  162. tokenkick-1.0.0/tokenkick/codex_surface_patterns.py +478 -0
  163. tokenkick-1.0.0/tokenkick/codex_surface_stats.py +765 -0
  164. tokenkick-1.0.0/tokenkick/codexbar_source.py +881 -0
  165. tokenkick-1.0.0/tokenkick/consent.py +89 -0
  166. tokenkick-1.0.0/tokenkick/direct.py +310 -0
  167. tokenkick-1.0.0/tokenkick/discovery.py +845 -0
  168. tokenkick-1.0.0/tokenkick/doctor.py +1425 -0
  169. tokenkick-1.0.0/tokenkick/interactive.py +3163 -0
  170. tokenkick-1.0.0/tokenkick/kicker.py +669 -0
  171. tokenkick-1.0.0/tokenkick/mcp_core.py +1372 -0
  172. tokenkick-1.0.0/tokenkick/mcp_server.py +444 -0
  173. tokenkick-1.0.0/tokenkick/mcp_setup.py +784 -0
  174. tokenkick-1.0.0/tokenkick/migrations.py +1041 -0
  175. tokenkick-1.0.0/tokenkick/models.py +1251 -0
  176. tokenkick-1.0.0/tokenkick/notifier.py +398 -0
  177. tokenkick-1.0.0/tokenkick/orchestration.py +1568 -0
  178. tokenkick-1.0.0/tokenkick/recovery_hints.py +94 -0
  179. tokenkick-1.0.0/tokenkick/reservation_advisories.py +374 -0
  180. tokenkick-1.0.0/tokenkick/reset_calendar.py +526 -0
  181. tokenkick-1.0.0/tokenkick/reset_defense.py +1043 -0
  182. tokenkick-1.0.0/tokenkick/scheduling.py +844 -0
  183. tokenkick-1.0.0/tokenkick/source_utils.py +112 -0
  184. tokenkick-1.0.0/tokenkick/sources.py +2343 -0
  185. tokenkick-1.0.0/tokenkick/state_io.py +110 -0
  186. tokenkick-1.0.0/tokenkick/status_cache.py +1037 -0
  187. tokenkick-1.0.0/tokenkick/status_rendering.py +929 -0
  188. tokenkick-1.0.0/tokenkick/telegram_remote.py +594 -0
  189. tokenkick-1.0.0/tokenkick/versioning.py +70 -0
  190. tokenkick-1.0.0/tokenkick-telegram@.service +19 -0
  191. tokenkick-1.0.0/tokenkick@.service +19 -0
@@ -0,0 +1,45 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .eggs/
8
+ *.egg
9
+ .venv/
10
+ venv/
11
+ .env
12
+ .env.*
13
+ !.env.example
14
+ !.env.sample
15
+ .mypy_cache/
16
+ .ruff_cache/
17
+ .pytest_cache/
18
+ .coverage
19
+ htmlcov/
20
+ coverage.xml
21
+ *.sqlite
22
+ *.sqlite3
23
+ *.db
24
+ *.log
25
+ *.pid
26
+ *.pem
27
+ *.key
28
+ *.p8
29
+ *.p12
30
+ *.crt
31
+ *.cer
32
+ *.token
33
+ *.secret
34
+ .tokenkick/
35
+ codex-homes/
36
+ claude-homes/
37
+ *.jsonl
38
+ !macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/*.jsonl
39
+ .build/
40
+ ROADMAP.md
41
+ docs/private/
42
+ docs/internal/
43
+ docs/*PRIVATE*.md
44
+ .DS_Store
45
+ .codex-pet-runs/
@@ -0,0 +1,49 @@
1
+ # Contributing
2
+
3
+ Thanks for taking the time to improve TokenKick.
4
+
5
+ ## Before You Start
6
+
7
+ - Keep TokenKick local-first and explicit: no telemetry, hidden network calls,
8
+ or automatic provider requests without a saved user setting.
9
+ - Auto-kick must remain off by default. Enabling it must go through the
10
+ consent gate for kickable providers.
11
+ - Do not include real account labels, email addresses, local paths, tokens,
12
+ provider homes, `.jsonl` logs, or config files in commits, fixtures, issues,
13
+ or screenshots.
14
+ - Keep public examples synthetic.
15
+
16
+ ## Development
17
+
18
+ Install the project in a virtual environment or with your preferred local Python
19
+ workflow, then run the checks before submitting changes:
20
+
21
+ ```bash
22
+ ruff check .
23
+ pytest
24
+ ```
25
+
26
+ For macOS app changes, also run the Swift tests from the repo root when the
27
+ bundled runtime is available:
28
+
29
+ ```bash
30
+ env TK_BUNDLED_RUNTIME=/path/to/tk swift test --package-path macos/TokenKickKit
31
+ ```
32
+
33
+ ## Pull Requests
34
+
35
+ - Keep changes focused and describe the user-visible behavior.
36
+ - Add or update tests when behavior changes.
37
+ - Update docs when commands, setup behavior, provider support, or safety
38
+ defaults change.
39
+ - Avoid broad refactors unless they are necessary for the fix.
40
+ - Do not bump versions, create tags, publish packages, or change release
41
+ metadata in ordinary contribution PRs.
42
+
43
+ ## Provider And Terms Safety
44
+
45
+ TokenKick does not increase quota, bypass rate limits, or evade provider
46
+ restrictions. It tracks windows users already have and can optionally send a
47
+ minimal provider-native request after explicit consent. Changes that alter
48
+ kicking, scheduling, setup defaults, daemon behavior, or provider automation
49
+ need extra care and tests.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Paul Kahle
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,149 @@
1
+ Metadata-Version: 2.4
2
+ Name: tokenkick
3
+ Version: 1.0.0
4
+ Summary: Local CLI for tracking AI coding quota windows, planning reset coverage, and optional explicit provider-native kicks.
5
+ Project-URL: Homepage, https://github.com/noriworks/tokenkick
6
+ Project-URL: Documentation, https://github.com/noriworks/tokenkick#readme
7
+ Project-URL: Repository, https://github.com/noriworks/tokenkick
8
+ Project-URL: Issues, https://github.com/noriworks/tokenkick/issues
9
+ Project-URL: Security, https://github.com/noriworks/tokenkick/security/policy
10
+ Author: Paul Kahle
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: ai-coding,claude,cli,codex,developer-tools,mcp,quota,rate-limit
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: System :: Monitoring
22
+ Classifier: Topic :: Utilities
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: click>=8.1
25
+ Requires-Dist: httpx>=0.27
26
+ Requires-Dist: inquirerpy>=0.3.4
27
+ Requires-Dist: mcp>=1.9
28
+ Requires-Dist: prompt-toolkit>=3.0
29
+ Requires-Dist: rich>=13.0
30
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest-cov; extra == 'dev'
33
+ Requires-Dist: pytest>=8.0; extra == 'dev'
34
+ Requires-Dist: ruff; extra == 'dev'
35
+ Provides-Extra: notify
36
+ Requires-Dist: httpx; extra == 'notify'
37
+ Description-Content-Type: text/markdown
38
+
39
+ # TokenKick
40
+
41
+ **Reset? Go.**
42
+
43
+ TokenKick is a local CLI for developers juggling multiple AI coding accounts.
44
+ It tracks quota reset windows, shows which account needs attention next, and
45
+ can optionally send a tiny provider request to anchor a newly reset window.
46
+
47
+ ## Quick Start
48
+
49
+ ```bash
50
+ pipx install tokenkick
51
+ tk
52
+ ```
53
+
54
+ The native Mac app is a beta desktop surface for the same local runtime. When
55
+ available, beta DMGs are attached to
56
+ [GitHub Releases](https://github.com/noriworks/tokenkick/releases). The CLI is
57
+ the recommended install path for first-time users; non-notarized beta DMGs may
58
+ show a macOS security warning.
59
+
60
+ On first run, `tk` opens the TUI and starts with setup when no accounts are
61
+ saved yet. Setup discovers accounts and saves them with auto-kick off by
62
+ default. If you later enable auto-kick for a provider, TokenKick shows a
63
+ provider-specific risk notice and requires you to type `ENABLE` before saving
64
+ the acknowledgment. Interactive setup also offers notifications, daemon start,
65
+ and short schedule/Codex strategy info.
66
+
67
+ For a manual CLI setup:
68
+
69
+ ```bash
70
+ tk setup
71
+ tk status --refresh
72
+ tk auto enable "<label>"
73
+ tk notify --ntfy tokenkick-yourname
74
+ tk daemon --background
75
+ ```
76
+
77
+ Auto-kick sends minimal provider requests automatically on a schedule. Provider
78
+ terms and any account consequences are your responsibility; use it only if you
79
+ accept that risk.
80
+
81
+ For scripts and automation, use explicit commands:
82
+
83
+ ```bash
84
+ tk status
85
+ tk status --refresh
86
+ tk remote telegram --background
87
+ tk plan --work-window 18:30-23:30 --json-output
88
+ tk history --verbose
89
+ tk doctor
90
+ ```
91
+
92
+ ## Demo
93
+
94
+ ![Synthetic TokenKick status demo](docs/assets/readme-status-demo.svg)
95
+
96
+ The demo output above is generated from synthetic data with:
97
+
98
+ ```bash
99
+ .venv/bin/python scripts/render-readme-demo.py
100
+ ```
101
+
102
+ ## Documentation
103
+
104
+ - [How TokenKick works](docs/HOW_TOKENKICK_WORKS.md)
105
+ - [Commands](docs/TOKENKICK_COMMANDS.md)
106
+ - [Magic setup (advanced)](docs/MAGIC_SETUP.md)
107
+ - [Agent playbook](docs/AGENT_PLAYBOOK.md)
108
+ - [Providers](docs/PROVIDERS.md)
109
+ - [Changelog](docs/CHANGELOG.md)
110
+ - [Security](SECURITY.md)
111
+ - [Contributing](CONTRIBUTING.md)
112
+
113
+ ## Provider Support
114
+
115
+ Codex and Claude are kickable in this release. Gemini, Antigravity,
116
+ OpenRouter, and other unverified providers are monitor-only until their status
117
+ and safe kick behavior are verified.
118
+
119
+ TokenKick does not increase quota, bypass limits, or evade provider
120
+ restrictions. It helps you notice and act on quota windows you already have.
121
+
122
+ Codex-Spark is detected as a separate Codex quota bucket when the provider
123
+ exposes it. TokenKick then shows it as a sibling account such as
124
+ `codex-spark (...)` with its own session/weekly window. It does not infer Spark
125
+ access from your subscription tier. `tk plan` skips Spark until you set an
126
+ explicit `usable_session_minutes` for that account, because the rough placeholder
127
+ is not enough evidence for orchestration decisions.
128
+
129
+ ## Disclaimer
130
+
131
+ TokenKick is an independent, open-source project. It is not affiliated with,
132
+ endorsed by, or sponsored by OpenAI, Anthropic, Google, or any other provider.
133
+ "Codex", "ChatGPT", "Claude", and "Gemini" are trademarks of their respective
134
+ owners, used here only to describe compatibility.
135
+
136
+ TokenKick does not increase your quota, bypass rate limits, or evade any
137
+ provider restriction. It helps you track your own reset windows and, optionally,
138
+ send a minimal request through a provider's official CLI to anchor a window you
139
+ have already paid for.
140
+
141
+ **Automated or scheduled kicking may violate a provider's Terms of Service.**
142
+ Some providers restrict automated or scripted access to their consumer products.
143
+ Enabling auto-kick is your decision and your responsibility. You alone are
144
+ responsible for how you use TokenKick with your accounts and for complying with
145
+ each provider's terms. Use at your own risk.
146
+
147
+ TokenKick is provided "as is", without warranty of any kind. The authors are
148
+ not liable for any consequence arising from its use, including account
149
+ restriction, suspension, or loss of access.
@@ -0,0 +1,111 @@
1
+ # TokenKick
2
+
3
+ **Reset? Go.**
4
+
5
+ TokenKick is a local CLI for developers juggling multiple AI coding accounts.
6
+ It tracks quota reset windows, shows which account needs attention next, and
7
+ can optionally send a tiny provider request to anchor a newly reset window.
8
+
9
+ ## Quick Start
10
+
11
+ ```bash
12
+ pipx install tokenkick
13
+ tk
14
+ ```
15
+
16
+ The native Mac app is a beta desktop surface for the same local runtime. When
17
+ available, beta DMGs are attached to
18
+ [GitHub Releases](https://github.com/noriworks/tokenkick/releases). The CLI is
19
+ the recommended install path for first-time users; non-notarized beta DMGs may
20
+ show a macOS security warning.
21
+
22
+ On first run, `tk` opens the TUI and starts with setup when no accounts are
23
+ saved yet. Setup discovers accounts and saves them with auto-kick off by
24
+ default. If you later enable auto-kick for a provider, TokenKick shows a
25
+ provider-specific risk notice and requires you to type `ENABLE` before saving
26
+ the acknowledgment. Interactive setup also offers notifications, daemon start,
27
+ and short schedule/Codex strategy info.
28
+
29
+ For a manual CLI setup:
30
+
31
+ ```bash
32
+ tk setup
33
+ tk status --refresh
34
+ tk auto enable "<label>"
35
+ tk notify --ntfy tokenkick-yourname
36
+ tk daemon --background
37
+ ```
38
+
39
+ Auto-kick sends minimal provider requests automatically on a schedule. Provider
40
+ terms and any account consequences are your responsibility; use it only if you
41
+ accept that risk.
42
+
43
+ For scripts and automation, use explicit commands:
44
+
45
+ ```bash
46
+ tk status
47
+ tk status --refresh
48
+ tk remote telegram --background
49
+ tk plan --work-window 18:30-23:30 --json-output
50
+ tk history --verbose
51
+ tk doctor
52
+ ```
53
+
54
+ ## Demo
55
+
56
+ ![Synthetic TokenKick status demo](docs/assets/readme-status-demo.svg)
57
+
58
+ The demo output above is generated from synthetic data with:
59
+
60
+ ```bash
61
+ .venv/bin/python scripts/render-readme-demo.py
62
+ ```
63
+
64
+ ## Documentation
65
+
66
+ - [How TokenKick works](docs/HOW_TOKENKICK_WORKS.md)
67
+ - [Commands](docs/TOKENKICK_COMMANDS.md)
68
+ - [Magic setup (advanced)](docs/MAGIC_SETUP.md)
69
+ - [Agent playbook](docs/AGENT_PLAYBOOK.md)
70
+ - [Providers](docs/PROVIDERS.md)
71
+ - [Changelog](docs/CHANGELOG.md)
72
+ - [Security](SECURITY.md)
73
+ - [Contributing](CONTRIBUTING.md)
74
+
75
+ ## Provider Support
76
+
77
+ Codex and Claude are kickable in this release. Gemini, Antigravity,
78
+ OpenRouter, and other unverified providers are monitor-only until their status
79
+ and safe kick behavior are verified.
80
+
81
+ TokenKick does not increase quota, bypass limits, or evade provider
82
+ restrictions. It helps you notice and act on quota windows you already have.
83
+
84
+ Codex-Spark is detected as a separate Codex quota bucket when the provider
85
+ exposes it. TokenKick then shows it as a sibling account such as
86
+ `codex-spark (...)` with its own session/weekly window. It does not infer Spark
87
+ access from your subscription tier. `tk plan` skips Spark until you set an
88
+ explicit `usable_session_minutes` for that account, because the rough placeholder
89
+ is not enough evidence for orchestration decisions.
90
+
91
+ ## Disclaimer
92
+
93
+ TokenKick is an independent, open-source project. It is not affiliated with,
94
+ endorsed by, or sponsored by OpenAI, Anthropic, Google, or any other provider.
95
+ "Codex", "ChatGPT", "Claude", and "Gemini" are trademarks of their respective
96
+ owners, used here only to describe compatibility.
97
+
98
+ TokenKick does not increase your quota, bypass rate limits, or evade any
99
+ provider restriction. It helps you track your own reset windows and, optionally,
100
+ send a minimal request through a provider's official CLI to anchor a window you
101
+ have already paid for.
102
+
103
+ **Automated or scheduled kicking may violate a provider's Terms of Service.**
104
+ Some providers restrict automated or scripted access to their consumer products.
105
+ Enabling auto-kick is your decision and your responsibility. You alone are
106
+ responsible for how you use TokenKick with your accounts and for complying with
107
+ each provider's terms. Use at your own risk.
108
+
109
+ TokenKick is provided "as is", without warranty of any kind. The authors are
110
+ not liable for any consequence arising from its use, including account
111
+ restriction, suspension, or loss of access.
@@ -0,0 +1,34 @@
1
+ # Security Policy
2
+
3
+ ## Reporting A Vulnerability
4
+
5
+ Please do not open a public issue for suspected vulnerabilities, leaked secrets,
6
+ or account-safety problems.
7
+
8
+ Report security issues privately through GitHub private vulnerability reporting
9
+ on the public repository once it is enabled. If that is unavailable, use the
10
+ private contact channel published by the maintainer. Include:
11
+
12
+ - affected TokenKick version or commit
13
+ - operating system and install method
14
+ - the command or workflow involved
15
+ - a concise reproduction, if safe to share
16
+ - any logs or screenshots with account IDs, tokens, homes, and local paths
17
+ redacted
18
+
19
+ I will acknowledge reports as quickly as practical, investigate, and coordinate
20
+ a fix before public disclosure when the issue is confirmed.
21
+
22
+ ## Scope
23
+
24
+ Security-sensitive areas include:
25
+
26
+ - leaked or mishandled provider credentials, tokens, or local account state
27
+ - accidental exposure of `~/.tokenkick/`, Codex homes, Claude config, or logs
28
+ - unintended automatic provider requests
29
+ - daemon behavior that acts without an explicit saved setting
30
+ - release artifacts or docs that include private account data
31
+
32
+ TokenKick is a local tool and does not run a hosted service for users in this
33
+ release. Provider-account enforcement, quota policy, and Terms of Service
34
+ questions should be handled with the relevant provider.