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.
- tokenkick-1.0.0/.gitignore +45 -0
- tokenkick-1.0.0/CONTRIBUTING.md +49 -0
- tokenkick-1.0.0/LICENSE +21 -0
- tokenkick-1.0.0/PKG-INFO +149 -0
- tokenkick-1.0.0/README.md +111 -0
- tokenkick-1.0.0/SECURITY.md +34 -0
- tokenkick-1.0.0/docs/AGENT_PLAYBOOK.md +348 -0
- tokenkick-1.0.0/docs/CHANGELOG.md +21 -0
- tokenkick-1.0.0/docs/HOW_TOKENKICK_WORKS.md +554 -0
- tokenkick-1.0.0/docs/MAGIC_SETUP.md +132 -0
- tokenkick-1.0.0/docs/MCP.md +167 -0
- tokenkick-1.0.0/docs/PROVIDERS.md +136 -0
- tokenkick-1.0.0/docs/README.md +599 -0
- tokenkick-1.0.0/docs/TOKENKICK_COMMANDS.md +909 -0
- tokenkick-1.0.0/docs/assets/readme-status-demo.svg +105 -0
- tokenkick-1.0.0/docs/assets/readme-status-demo.txt +15 -0
- tokenkick-1.0.0/docs/macos/INSTALL.md +57 -0
- tokenkick-1.0.0/docs/macos/TROUBLESHOOTING.md +77 -0
- tokenkick-1.0.0/docs/macos/UPDATE.md +38 -0
- tokenkick-1.0.0/llms.txt +11 -0
- tokenkick-1.0.0/macos/TokenKickKit/Package.swift +28 -0
- tokenkick-1.0.0/macos/TokenKickKit/README.md +70 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKick/TokenKickApp.swift +39 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKAdvanced.swift +250 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKClient.swift +113 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKEnvelope.swift +76 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKEnvironment.swift +60 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKJSONValue.swift +64 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKKickResult.swift +56 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKLaunchAgent.swift +412 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKLineStream.swift +113 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKPlanning.swift +302 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKProcessRunner.swift +188 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKRuntimeLocator.swift +78 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKSetupStream.swift +69 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickKit/TKSnapshot.swift +262 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AccountsViewModel.swift +365 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AdvancedViewModel.swift +450 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AppRoot.swift +158 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/AppSettingsModel.swift +130 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/ConfirmedAction.swift +147 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DaemonPresentation.swift +118 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DaemonViewModel.swift +282 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/DiagnosticsViewModel.swift +294 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/HistoryViewModel.swift +153 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/KickViewModel.swift +150 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/MainWindowPresenter.swift +57 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/NavigationModel.swift +84 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/PlannerViewModel.swift +419 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/PopoverModel.swift +95 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/ScheduleViewModel.swift +335 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SetupViewModel.swift +261 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SnapshotAccountRow.swift +138 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/SnapshotStore.swift +165 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/AccountsScreen.swift +350 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/AdvancedScreen.swift +411 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/ConfirmationSheetView.swift +63 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/DaemonScreen.swift +259 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/DiagnosticsScreen.swift +290 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/HistoryScreen.swift +148 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/KickScreen.swift +172 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/MainWindowView.swift +167 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/MenuBarPopoverView.swift +279 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/NotificationsScreen.swift +225 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/PlannerScreen.swift +357 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/ScheduleScreen.swift +209 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SettingsView.swift +185 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SetupFlowViews.swift +195 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/SharedViews.swift +133 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/StatusScreen.swift +149 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/Views/WindowFrameAutosaver.swift +38 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/TokenKickShell/WarningModel.swift +258 -0
- tokenkick-1.0.0/macos/TokenKickKit/Sources/tkapp-probe/main.swift +143 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/BundledRuntimeIntegrationTests.swift +150 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/DecodingTests.swift +275 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/EnvironmentAndLocatorTests.swift +234 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/accounts_list.json +39 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/app_doctor.json +282 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/app_setup_events.jsonl +11 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_strategy.json +53 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_surface_patterns.json +32 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/codex_surfaces.json +84 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/daemon_status.json +24 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/history.json +113 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/kick_skipped.json +16 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/mutation_error.json +8 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/notify_global.json +30 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/plan_preview.json +54 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/reset_log.json +22 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/schedule_show.json +31 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/snapshot.json +147 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/Fixtures/usage_error.json +8 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/LaunchAgentTests.swift +329 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickKitTests/LineStreamTests.swift +71 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/AccountsAndNotificationsTests.swift +491 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/AdvancedTests.swift +394 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/DaemonPresentationTests.swift +104 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/DaemonViewModelTests.swift +308 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/HistoryAndDiagnosticsTests.swift +386 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/KickTests.swift +422 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/NavigationAndSettingsTests.swift +157 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/PlannerScheduleTests.swift +557 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/PopoverModelTests.swift +137 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/SetupAndFirstRunTests.swift +231 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/ShellFixtures.swift +228 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/SnapshotStoreTests.swift +121 -0
- tokenkick-1.0.0/macos/TokenKickKit/Tests/TokenKickShellTests/WarningDerivationTests.swift +152 -0
- tokenkick-1.0.0/packaging/macos/TokenKick.entitlements +11 -0
- tokenkick-1.0.0/packaging/macos/TokenKickIcon-source.png +0 -0
- tokenkick-1.0.0/packaging/macos/prepare_tkicons_icon.swift +95 -0
- tokenkick-1.0.0/packaging/macos/render_tokenkick_icon.swift +76 -0
- tokenkick-1.0.0/packaging/macos/tkicons/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
- tokenkick-1.0.0/pyproject.toml +63 -0
- tokenkick-1.0.0/scripts/assemble-macos-app.sh +90 -0
- tokenkick-1.0.0/scripts/build-bundled-tk.sh +72 -0
- tokenkick-1.0.0/scripts/build-swift-app.sh +34 -0
- tokenkick-1.0.0/scripts/create-local-dmg.sh +78 -0
- tokenkick-1.0.0/scripts/create-public-export.sh +38 -0
- tokenkick-1.0.0/scripts/find-macos-mach-o.sh +19 -0
- tokenkick-1.0.0/scripts/generate-macos-icon.sh +68 -0
- tokenkick-1.0.0/scripts/generate-swift-fixtures.sh +175 -0
- tokenkick-1.0.0/scripts/notarize-macos-dmg.sh +42 -0
- tokenkick-1.0.0/scripts/package-local-macos-app.sh +16 -0
- tokenkick-1.0.0/scripts/package-public-macos-app.sh +56 -0
- tokenkick-1.0.0/scripts/pyinstaller_entry.py +10 -0
- tokenkick-1.0.0/scripts/render-readme-demo.py +136 -0
- tokenkick-1.0.0/scripts/sign-local-macos-app.sh +18 -0
- tokenkick-1.0.0/scripts/sign-macos-app.sh +68 -0
- tokenkick-1.0.0/scripts/sign-macos-dmg.sh +35 -0
- tokenkick-1.0.0/scripts/staple-and-verify-macos-package.sh +40 -0
- tokenkick-1.0.0/scripts/verify-macos-package.sh +53 -0
- tokenkick-1.0.0/test_app_mode.py +1414 -0
- tokenkick-1.0.0/test_claude_setup.py +72 -0
- tokenkick-1.0.0/test_cli.py +25311 -0
- tokenkick-1.0.0/test_codex_surface_patterns.py +198 -0
- tokenkick-1.0.0/test_codex_surface_stats.py +416 -0
- tokenkick-1.0.0/test_consent.py +60 -0
- tokenkick-1.0.0/test_direct.py +44 -0
- tokenkick-1.0.0/test_docs.py +208 -0
- tokenkick-1.0.0/test_doctor.py +888 -0
- tokenkick-1.0.0/test_fixtures/claude_usage_loading_screen.txt +26 -0
- tokenkick-1.0.0/test_fixtures/claude_usage_mid_use.txt +13 -0
- tokenkick-1.0.0/test_fixtures/codex_provider_usage_baseline.json +63 -0
- tokenkick-1.0.0/test_kicker.py +462 -0
- tokenkick-1.0.0/test_mcp_core.py +593 -0
- tokenkick-1.0.0/test_mcp_setup.py +284 -0
- tokenkick-1.0.0/test_models.py +929 -0
- tokenkick-1.0.0/test_notifier.py +451 -0
- tokenkick-1.0.0/test_orchestration.py +1182 -0
- tokenkick-1.0.0/test_reset_calendar.py +307 -0
- tokenkick-1.0.0/test_reset_defense.py +764 -0
- tokenkick-1.0.0/test_scheduling.py +587 -0
- tokenkick-1.0.0/test_sources.py +3213 -0
- tokenkick-1.0.0/test_state_io.py +217 -0
- tokenkick-1.0.0/test_telegram_remote.py +408 -0
- tokenkick-1.0.0/tokenkick/__init__.py +8 -0
- tokenkick-1.0.0/tokenkick/antigravity.py +61 -0
- tokenkick-1.0.0/tokenkick/app_commands.py +585 -0
- tokenkick-1.0.0/tokenkick/app_mode.py +101 -0
- tokenkick-1.0.0/tokenkick/claude_setup.py +53 -0
- tokenkick-1.0.0/tokenkick/cli.py +13785 -0
- tokenkick-1.0.0/tokenkick/codex_surface_patterns.py +478 -0
- tokenkick-1.0.0/tokenkick/codex_surface_stats.py +765 -0
- tokenkick-1.0.0/tokenkick/codexbar_source.py +881 -0
- tokenkick-1.0.0/tokenkick/consent.py +89 -0
- tokenkick-1.0.0/tokenkick/direct.py +310 -0
- tokenkick-1.0.0/tokenkick/discovery.py +845 -0
- tokenkick-1.0.0/tokenkick/doctor.py +1425 -0
- tokenkick-1.0.0/tokenkick/interactive.py +3163 -0
- tokenkick-1.0.0/tokenkick/kicker.py +669 -0
- tokenkick-1.0.0/tokenkick/mcp_core.py +1372 -0
- tokenkick-1.0.0/tokenkick/mcp_server.py +444 -0
- tokenkick-1.0.0/tokenkick/mcp_setup.py +784 -0
- tokenkick-1.0.0/tokenkick/migrations.py +1041 -0
- tokenkick-1.0.0/tokenkick/models.py +1251 -0
- tokenkick-1.0.0/tokenkick/notifier.py +398 -0
- tokenkick-1.0.0/tokenkick/orchestration.py +1568 -0
- tokenkick-1.0.0/tokenkick/recovery_hints.py +94 -0
- tokenkick-1.0.0/tokenkick/reservation_advisories.py +374 -0
- tokenkick-1.0.0/tokenkick/reset_calendar.py +526 -0
- tokenkick-1.0.0/tokenkick/reset_defense.py +1043 -0
- tokenkick-1.0.0/tokenkick/scheduling.py +844 -0
- tokenkick-1.0.0/tokenkick/source_utils.py +112 -0
- tokenkick-1.0.0/tokenkick/sources.py +2343 -0
- tokenkick-1.0.0/tokenkick/state_io.py +110 -0
- tokenkick-1.0.0/tokenkick/status_cache.py +1037 -0
- tokenkick-1.0.0/tokenkick/status_rendering.py +929 -0
- tokenkick-1.0.0/tokenkick/telegram_remote.py +594 -0
- tokenkick-1.0.0/tokenkick/versioning.py +70 -0
- tokenkick-1.0.0/tokenkick-telegram@.service +19 -0
- 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.
|
tokenkick-1.0.0/LICENSE
ADDED
|
@@ -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.
|
tokenkick-1.0.0/PKG-INFO
ADDED
|
@@ -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
|
+

|
|
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
|
+

|
|
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.
|