kuberich 0.1.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 (121) hide show
  1. kuberich-0.1.0/.gitignore +33 -0
  2. kuberich-0.1.0/CHANGELOG.md +405 -0
  3. kuberich-0.1.0/LICENSE +202 -0
  4. kuberich-0.1.0/NOTICE +32 -0
  5. kuberich-0.1.0/PKG-INFO +159 -0
  6. kuberich-0.1.0/README.md +127 -0
  7. kuberich-0.1.0/pyproject.toml +176 -0
  8. kuberich-0.1.0/src/kuberich/__init__.py +1 -0
  9. kuberich-0.1.0/src/kuberich/__main__.py +6 -0
  10. kuberich-0.1.0/src/kuberich/adapters/__init__.py +1 -0
  11. kuberich-0.1.0/src/kuberich/adapters/credentials.py +229 -0
  12. kuberich-0.1.0/src/kuberich/adapters/editing.py +71 -0
  13. kuberich-0.1.0/src/kuberich/adapters/emulator.py +258 -0
  14. kuberich-0.1.0/src/kuberich/adapters/kubernetes.py +774 -0
  15. kuberich-0.1.0/src/kuberich/adapters/mutations.py +197 -0
  16. kuberich-0.1.0/src/kuberich/adapters/operations.py +72 -0
  17. kuberich-0.1.0/src/kuberich/adapters/pty.py +107 -0
  18. kuberich-0.1.0/src/kuberich/adapters/pty_child.py +25 -0
  19. kuberich-0.1.0/src/kuberich/adapters/terminal.py +142 -0
  20. kuberich-0.1.0/src/kuberich/adapters/transfer_files.py +392 -0
  21. kuberich-0.1.0/src/kuberich/cli.py +419 -0
  22. kuberich-0.1.0/src/kuberich/config/__init__.py +1 -0
  23. kuberich-0.1.0/src/kuberich/config/catalog.py +184 -0
  24. kuberich-0.1.0/src/kuberich/config/launch.py +58 -0
  25. kuberich-0.1.0/src/kuberich/config/paths.py +51 -0
  26. kuberich-0.1.0/src/kuberich/config/schema.py +165 -0
  27. kuberich-0.1.0/src/kuberich/config/store.py +139 -0
  28. kuberich-0.1.0/src/kuberich/diagnostics/__init__.py +1 -0
  29. kuberich-0.1.0/src/kuberich/diagnostics/logging.py +132 -0
  30. kuberich-0.1.0/src/kuberich/diagnostics/redaction.py +34 -0
  31. kuberich-0.1.0/src/kuberich/domain/__init__.py +1 -0
  32. kuberich-0.1.0/src/kuberich/domain/aggregate_logs.py +360 -0
  33. kuberich-0.1.0/src/kuberich/domain/attach.py +113 -0
  34. kuberich-0.1.0/src/kuberich/domain/connection_overrides.py +142 -0
  35. kuberich-0.1.0/src/kuberich/domain/connections.py +106 -0
  36. kuberich-0.1.0/src/kuberich/domain/containers.py +145 -0
  37. kuberich-0.1.0/src/kuberich/domain/credential_helpers.py +157 -0
  38. kuberich-0.1.0/src/kuberich/domain/custom.py +131 -0
  39. kuberich-0.1.0/src/kuberich/domain/editing.py +162 -0
  40. kuberich-0.1.0/src/kuberich/domain/exec_credentials.py +78 -0
  41. kuberich-0.1.0/src/kuberich/domain/inspection.py +121 -0
  42. kuberich-0.1.0/src/kuberich/domain/log_json.py +68 -0
  43. kuberich-0.1.0/src/kuberich/domain/log_view.py +99 -0
  44. kuberich-0.1.0/src/kuberich/domain/logs.py +167 -0
  45. kuberich-0.1.0/src/kuberich/domain/mutations.py +260 -0
  46. kuberich-0.1.0/src/kuberich/domain/namespaces.py +29 -0
  47. kuberich-0.1.0/src/kuberich/domain/navigation.py +71 -0
  48. kuberich-0.1.0/src/kuberich/domain/operations.py +278 -0
  49. kuberich-0.1.0/src/kuberich/domain/pods.py +223 -0
  50. kuberich-0.1.0/src/kuberich/domain/port_forwards.py +242 -0
  51. kuberich-0.1.0/src/kuberich/domain/processes.py +205 -0
  52. kuberich-0.1.0/src/kuberich/domain/proxies.py +102 -0
  53. kuberich-0.1.0/src/kuberich/domain/registry.py +392 -0
  54. kuberich-0.1.0/src/kuberich/domain/resources.py +281 -0
  55. kuberich-0.1.0/src/kuberich/domain/shell.py +55 -0
  56. kuberich-0.1.0/src/kuberich/domain/tables.py +167 -0
  57. kuberich-0.1.0/src/kuberich/domain/targets.py +59 -0
  58. kuberich-0.1.0/src/kuberich/domain/terminal.py +68 -0
  59. kuberich-0.1.0/src/kuberich/domain/terminal_history.py +106 -0
  60. kuberich-0.1.0/src/kuberich/domain/transfers.py +205 -0
  61. kuberich-0.1.0/src/kuberich/domain/views.py +180 -0
  62. kuberich-0.1.0/src/kuberich/domain/watches.py +215 -0
  63. kuberich-0.1.0/src/kuberich/domain/workloads.py +184 -0
  64. kuberich-0.1.0/src/kuberich/errors.py +25 -0
  65. kuberich-0.1.0/src/kuberich/py.typed +0 -0
  66. kuberich-0.1.0/src/kuberich/runtime.py +96 -0
  67. kuberich-0.1.0/src/kuberich/security/__init__.py +1 -0
  68. kuberich-0.1.0/src/kuberich/security/arguments.py +23 -0
  69. kuberich-0.1.0/src/kuberich/security/controls.py +19 -0
  70. kuberich-0.1.0/src/kuberich/security/presentation.py +19 -0
  71. kuberich-0.1.0/src/kuberich/services/__init__.py +1 -0
  72. kuberich-0.1.0/src/kuberich/services/access.py +32 -0
  73. kuberich-0.1.0/src/kuberich/services/aggregate_logs.py +380 -0
  74. kuberich-0.1.0/src/kuberich/services/attach.py +87 -0
  75. kuberich-0.1.0/src/kuberich/services/commands.py +301 -0
  76. kuberich-0.1.0/src/kuberich/services/delegation.py +91 -0
  77. kuberich-0.1.0/src/kuberich/services/editing.py +154 -0
  78. kuberich-0.1.0/src/kuberich/services/filtering.py +86 -0
  79. kuberich-0.1.0/src/kuberich/services/inspection.py +89 -0
  80. kuberich-0.1.0/src/kuberich/services/log_export.py +52 -0
  81. kuberich-0.1.0/src/kuberich/services/logs.py +128 -0
  82. kuberich-0.1.0/src/kuberich/services/mutations.py +249 -0
  83. kuberich-0.1.0/src/kuberich/services/operations.py +309 -0
  84. kuberich-0.1.0/src/kuberich/services/pods.py +89 -0
  85. kuberich-0.1.0/src/kuberich/services/port_forwards.py +417 -0
  86. kuberich-0.1.0/src/kuberich/services/processes.py +418 -0
  87. kuberich-0.1.0/src/kuberich/services/resources.py +430 -0
  88. kuberich-0.1.0/src/kuberich/services/sessions.py +112 -0
  89. kuberich-0.1.0/src/kuberich/services/shell.py +94 -0
  90. kuberich-0.1.0/src/kuberich/services/transfers.py +356 -0
  91. kuberich-0.1.0/src/kuberich/services/watches.py +186 -0
  92. kuberich-0.1.0/src/kuberich/services/workloads.py +268 -0
  93. kuberich-0.1.0/src/kuberich/services/workspace.py +402 -0
  94. kuberich-0.1.0/src/kuberich/ui/__init__.py +1 -0
  95. kuberich-0.1.0/src/kuberich/ui/aggregate_logs.py +478 -0
  96. kuberich-0.1.0/src/kuberich/ui/app.py +1970 -0
  97. kuberich-0.1.0/src/kuberich/ui/chrome.py +346 -0
  98. kuberich-0.1.0/src/kuberich/ui/commands.py +175 -0
  99. kuberich-0.1.0/src/kuberich/ui/containers.py +229 -0
  100. kuberich-0.1.0/src/kuberich/ui/contexts.py +108 -0
  101. kuberich-0.1.0/src/kuberich/ui/custom.py +71 -0
  102. kuberich-0.1.0/src/kuberich/ui/editing.py +201 -0
  103. kuberich-0.1.0/src/kuberich/ui/handoff.py +85 -0
  104. kuberich-0.1.0/src/kuberich/ui/inspection.py +215 -0
  105. kuberich-0.1.0/src/kuberich/ui/kuberich.tcss +87 -0
  106. kuberich-0.1.0/src/kuberich/ui/launch.py +45 -0
  107. kuberich-0.1.0/src/kuberich/ui/log_body.py +440 -0
  108. kuberich-0.1.0/src/kuberich/ui/logs.py +625 -0
  109. kuberich-0.1.0/src/kuberich/ui/mutations.py +267 -0
  110. kuberich-0.1.0/src/kuberich/ui/namespaces.py +128 -0
  111. kuberich-0.1.0/src/kuberich/ui/operations.py +260 -0
  112. kuberich-0.1.0/src/kuberich/ui/pods.py +219 -0
  113. kuberich-0.1.0/src/kuberich/ui/port_forwards.py +304 -0
  114. kuberich-0.1.0/src/kuberich/ui/presentation.py +194 -0
  115. kuberich-0.1.0/src/kuberich/ui/scopes.py +67 -0
  116. kuberich-0.1.0/src/kuberich/ui/shutdown.py +45 -0
  117. kuberich-0.1.0/src/kuberich/ui/standard.py +258 -0
  118. kuberich-0.1.0/src/kuberich/ui/style_cache.py +66 -0
  119. kuberich-0.1.0/src/kuberich/ui/terminal.py +435 -0
  120. kuberich-0.1.0/src/kuberich/ui/transfers.py +192 -0
  121. kuberich-0.1.0/src/kuberich/ui/workloads.py +196 -0
@@ -0,0 +1,33 @@
1
+ # Python and development environments
2
+ __pycache__/
3
+ *.py[cod]
4
+ .venv/
5
+ .pytest_cache/
6
+ .mypy_cache/
7
+ .ruff_cache/
8
+ .coverage
9
+ .coverage.*
10
+ coverage.xml
11
+ coverage.json
12
+ diff-coverage.json
13
+ htmlcov/
14
+ build/
15
+ dist/
16
+ *.egg-info/
17
+
18
+ # Local credentials and generated diagnostic material
19
+ .env
20
+ .env.*
21
+ !.env.example
22
+ .kube/
23
+ kubeconfig
24
+ kubeconfig.*
25
+ *.pem
26
+ *.key
27
+ *.log
28
+
29
+ # Editors and operating systems
30
+ .DS_Store
31
+ .idea/
32
+ .vscode/
33
+ artifacts/
@@ -0,0 +1,405 @@
1
+ # Changelog
2
+
3
+ User-visible changes are grouped under Added, Changed, Fixed, and Security.
4
+ Release entries are written in release PRs and linked to their Git tags.
5
+
6
+ ## Unreleased
7
+
8
+ Changes after the first prepared candidate will be collected here.
9
+
10
+ ## 0.1.0 — prepared candidate
11
+
12
+ Publication is pending. [Authored release notes](docs/release-notes/0.1.0.md)
13
+ describe this phase, installation, upgrades and known limits. The entries below
14
+ retain development history; dated qualification statements are superseded by
15
+ the [completed workload checkpoint](docs/acceptance/workload-checkpoint.md).
16
+
17
+ ### Added
18
+
19
+ - Add a guided everyday workflow, troubleshooting, installation/upgrade coverage
20
+ and reader-facing capability summaries. Refresh the flat landing page and README;
21
+ tutorial names and screenshot resources are fictional or owned disposable fixtures.
22
+ Clean public guides and generated CLI references of internal tracking codes
23
+ ([#150](https://github.com/carloshm91/kuberich/issues/150),
24
+ [Carlos J. Herrera](https://github.com/carloshm91)).
25
+
26
+ - Review the last 1,000 normal-screen shell rows inside the terminal, with
27
+ deliberate local paging, literal Unicode search and explicit redacted row
28
+ selection/copy. Keep remote output, cursor and editors live and return with
29
+ Enter or Escape. Report discarded history and release session-owned buffers
30
+ on exit or target invalidation.
31
+
32
+ ### Fixed
33
+
34
+ - Give reproducible CycloneDX reports a content-derived serial number required
35
+ by GitHub's SBOM attestation parser. Reject missing identifiers before publication
36
+ ([#89](https://github.com/carloshm91/kuberich/issues/89),
37
+ [Carlos J. Herrera](https://github.com/carloshm91)).
38
+
39
+ - Separate read-only branch-protection access from release publication credentials;
40
+ give qualification reads their explicit Actions/checks/PR/issues permissions.
41
+ Explain missing owner setup before network/publication
42
+ ([#89](https://github.com/carloshm91/kuberich/issues/89),
43
+ [Carlos J. Herrera](https://github.com/carloshm91)).
44
+
45
+ - Reduce temporary component-style allocations during focus and theme changes,
46
+ preserving native CSS and the existing response-time gate. Pin the qualified
47
+ Textual version used by scoped rendering adaptations
48
+ ([#150](https://github.com/carloshm91/kuberich/issues/150),
49
+ [Carlos J. Herrera](https://github.com/carloshm91)).
50
+
51
+ - Preserve credential-helper success, size-limit errors and spawn cancellation
52
+ during the macOS process-group teardown race. Reuse the existing bounded group
53
+ signal guard; only confirmed disappearance permits transient teardown denial
54
+ ([#150](https://github.com/carloshm91/kuberich/issues/150),
55
+ [Carlos J. Herrera](https://github.com/carloshm91)).
56
+
57
+ - Keep shell output cleanup safe while Textual removes its footer controls;
58
+ queued PTY output cannot query a History button that has already left the DOM.
59
+
60
+ ### Changed
61
+
62
+ - Reuse retained log geometry across append, eviction and wrap changes while
63
+ preserving literal search, marks and navigation. Update fixed-height log
64
+ metadata without repeatedly recalculating the covered workspace layout.
65
+
66
+ - Retain up to 10,000 log lines within the existing 4 MiB byte limit. Reuse
67
+ bounded wrap layouts, wake display controls promptly and defer covered
68
+ workspace painting while live observations and target validation continue.
69
+ Add a reproducible owned-loopback CLI/PTY load observer; performance
70
+ qualification remains open.
71
+
72
+ - Give pending input, target changes and cancellation a turn during dense log
73
+ delivery, preserving source order, consumer backpressure and bounded retention.
74
+ Require normal-runtime backend latency controls alongside the original
75
+ branch-covered HTTP workload and final ownership checks.
76
+
77
+ - Format retained aggregate log views and exports in bounded owned turns,
78
+ preserving captured source identities, arrival order and plain/JSON controls.
79
+ Collect parser outcomes before returning cancellation, including late errors
80
+ on Python 3.14, while preserving ordinary error propagation.
81
+
82
+ - Decode and validate live resource events in one owned worker, preserving
83
+ bounded framing, pull backpressure, Table fallback and safe error messages.
84
+ Drain JSON read/watch workers through repeated cancellation before cleanup.
85
+
86
+ - Avoid duplicate workspace label updates and wide equality on reused immutable
87
+ resource rows; repaint safe owned cell edits through native row regions while
88
+ retaining full native geometry and unknown-content handling.
89
+
90
+ - Keep established Pod, standard and discovered resource order through unrelated
91
+ live edits. Reorder changed typed sort values, identity ties and membership while
92
+ retaining selection/scroll and generation-safe recovery.
93
+
94
+ - Avoid scanning every retained row when a single-line resource cell changes
95
+ within a column whose header determines its width. Preserve native sizing,
96
+ rendering and selection across ordinary and discovered resource tables.
97
+
98
+ - Pin every Linux CI host to Ubuntu 24.04 while retaining all interpreter/native,
99
+ coverage and owned-cluster checks. Reject stale runner/job/artifact identities
100
+ during release qualification and candidate retries.
101
+
102
+ - Refine the landing and initial docs with a shared flat presentation and mobile
103
+ guide navigation. Generate CLI/resource/capability references from maintained
104
+ contracts, reject stale source receipts, and rebuild both unpublished surfaces
105
+ on each PR. Keep unavailable features and release/provider limits explicit.
106
+
107
+ - Prepare first public 0.1.0 and cumulative reviewed 0.x phases, superseding
108
+ the earlier first-public-1.0-only policy without changing development metadata.
109
+ Require selected/prior gates and all traced dependencies, immutable authored
110
+ notes with optional reviewed previews, actual upgrade evidence and the planned
111
+ organization-owned `kuberich/tap/kuberich` channel. Current public packages remain
112
+ unavailable; full qualification and activation stay under #89.
113
+
114
+ - License KubeRich under Apache-2.0 and include contributor attribution NOTICE
115
+ in Python artifacts. Align source Homebrew metadata and contribution guidance;
116
+ earlier MIT grants and third-party licenses remain unchanged.
117
+
118
+ - Rename the private product/package/import/CLI to KubeRich / `kuberich`.
119
+ Retain the `kubetrol` console alias and legacy preference environment variables;
120
+ read existing preferences in place and provide explicit non-overwriting migration.
121
+ Update UI identity and installation/release tooling without a version bump.
122
+
123
+ ### Added
124
+
125
+ - Build standalone Linux x86_64/ARM64 and macOS Intel/ARM64 bundles with an
126
+ included Python runtime, terminal assets, certificates and dependency notices.
127
+ Verify archive-bound CLI, browsing, credential-helper and shell behavior, and
128
+ preserve checksums/provenance for release preparation. Public downloads remain
129
+ pending the first qualified release.
130
+
131
+ - Aggregate regular/init/ephemeral container and workload-Pod logs with stable
132
+ source/UID prefixes, verified controller membership, bounded reader admission,
133
+ per-source/aggregate retention, source picker/filter and plain/JSON exports.
134
+ Enroll newly started containers without replaying ended streams; drain even
135
+ dismissed export work before context-client cleanup.
136
+ - Preserve useful JSON log fields and scalar types while redacting decoded
137
+ credential keys/strings within strict depth/expansion/control bounds.
138
+
139
+ - Prepare a protected main-only Cloudflare Pages publication of both development
140
+ website surfaces, preserving checked artifact bytes and verifying live HTTPS
141
+ digests, response headers and 404s. Retain source/deployment and partial-failure
142
+ receipts. Application packages and custom-domain/DNS setup remain separate.
143
+ - Browse dynamically discovered resource families and explicit served versions
144
+ through qualified commands and completion. Show typed server columns with
145
+ metadata fallback, session-local column selection, captured YAML/details,
146
+ stable history and discovery refresh/removal recovery. Keep generic mutation
147
+ and persistent view preferences under their later owners.
148
+
149
+ - Resolve preferred custom-resource versions and ambiguous aliases from live
150
+ discovery. Read arbitrary discovered types through bounded LIST/WATCH/GET,
151
+ retaining server Table columns and full manifests with scoped JSON fallback.
152
+ Refresh installed/removed APIs without replacing the context client.
153
+
154
+ - Attach to a captured running regular/init/ephemeral container inside the terminal
155
+ workspace, with detach, faithful return status and retained selection.
156
+ - Review explicit bidirectional file/directory copies with frozen upload snapshots,
157
+ bounded streaming downloads, inspected private tar extraction, no-follow local
158
+ destinations, default Cancel, explicit overwrite and honest interrupted-upload
159
+ outcomes. Keep uploads/attach gated in read-only mode and downloads explicit.
160
+
161
+ - Refresh token-file and exec certificate credentials with captured helper identity,
162
+ private TLS pool replacement and generic explicit native login. Qualify HTTP
163
+ CONNECT/SOCKS5 proxies, original/overridden TLS names and delegated Kubernetes
164
+ logs, exec and port-forward connections; document GKE/OIDC migration and limits.
165
+ Reject encrypted private keys before OpenSSL can request a terminal password.
166
+ Drain credential file preparation through repeated cancellation before cleanup.
167
+
168
+ - Delete captured resources and explicitly selected batches with UID/version,
169
+ propagation/grace and count confirmation; retain independent and pending outcomes.
170
+ Trigger manual Jobs and suspend/resume Jobs/CronJobs with guarded review.
171
+
172
+ - Prepare a responsive private landing and source-generated initial user guides,
173
+ actual local UI captures, browser/accessibility checks and reviewed hosting steps.
174
+ Website/DNS and package publication remain separate approved launch actions.
175
+
176
+ - Review and confirm workload scale/restart/explicit revision rollback; monitor
177
+ actual rollout progress with HPA, paused/OnDelete, narrow RBAC and UID/version guards.
178
+
179
+ - Edit selected manifests with a trusted native editor, private owned drafts,
180
+ redacted preview, strict server dry-run, separate Apply and version/UID refusal.
181
+
182
+ - Guarded annotation changes with captured one-use confirmation, atomic UID/version
183
+ conditions, common read-only policy and bounded public write-outcome history.
184
+
185
+ - Managed pod/Service TCP forwards with dynamic or explicit local ports,
186
+ observed readiness, IPv4/IPv6 bind intent, session listing/stop and owned cleanup.
187
+
188
+ - Live discovered workload, batch, network, configuration, node and storage
189
+ tables with typed sorting, scoped commands, retained navigation and redacted details.
190
+
191
+ - Verify disposable kind node/API identity before fixture writes and clean owned
192
+ clusters on SIGINT/SIGTERM, including setup cancellation and repeated signals.
193
+
194
+ - Verified Homebrew source formula generation, isolated candidate installation
195
+ and immutable reviewed update-PR automation.
196
+
197
+ - Prepare exact local release candidates and a maintainer-reviewed OIDC pipeline
198
+ that consumes tested artifacts without rebuilding, enforces real main/matrix/
199
+ milestone qualification, and recovers partial uploads without replacing bytes.
200
+
201
+ - Audit locked and freshly installed runtimes, validate artifact-linked CycloneDX
202
+ SBOMs and original license notices, and reject incomplete security evidence,
203
+ floating CI actions and undocumented or expired vulnerability exceptions.
204
+
205
+ ### Changed
206
+
207
+ - Reduce repeated private macOS CI work while retaining full selected-job suites,
208
+ independent coverage gates and mandatory six-environment release qualification.
209
+
210
+ - Describe embedded shells accurately in CLI help and provide one current
211
+ installation/trial guide with a reproducible installed-wheel kind rehearsal.
212
+
213
+ - Restrict wheel/source artifacts to runtime/build assets, metadata, license and
214
+ release notes. Development tests/scripts/lock, caches and undeclared private
215
+ configuration/credential files stay outside the distribution.
216
+ - Use an original `ktrol` ASCII logo in the upper-right shared workspace header,
217
+ with a compact wordmark below 120 columns and the existing hidden-header options.
218
+
219
+ ### Fixed
220
+
221
+ - Verify disappearance after macOS reports a permission error for an exiting
222
+ subprocess group. Preserve real permission failures and owned child cleanup.
223
+ - Preserve rejected namespace-command feedback through repaints of the same
224
+ connecting view; show new connection progress or errors when its state changes.
225
+
226
+ - Preserve SSH hangup status on macOS when terminal attributes remain readable
227
+ after the driver has stopped accepting output; probe without emitting bytes.
228
+ - Restore owned terminal sessions after external SIGHUP/SIGTERM, reap native and
229
+ embedded children on SSH loss, and preserve hangup status when the remote TTY
230
+ is revoked. tmux sessions remain available for reattachment.
231
+ - Recover following text and private cursor queries after malformed CSI in the
232
+ same shell packet; retain rendered normal/alternate text and bounded cursors
233
+ while shrinking the terminal.
234
+ - Ignore deferred shortcut rendering after its header view has been removed,
235
+ avoiding a terminal failure when resize and view return overlap.
236
+ - Resolve native resize events against the current physical TTY so a delayed
237
+ older event cannot leave the interface and embedded child at the wrong size.
238
+ - Distinguish recognized AWS helper login/role failures from API 401/403 without
239
+ exposing provider output; share expiring-token refreshes and ignore delayed
240
+ 401 invalidation of newer cache revisions, including identical token bytes.
241
+ - Preserve a session's captured AWS environment, working directory and helper
242
+ executable in delegated shells. Actual EKS qualification remains deferred to Q05 #87.
243
+ - Reflow header shortcuts when the logo changes width during terminal resizing.
244
+ - Keep frame margins, header columns and interaction/footer rows stable across
245
+ pod, namespace, container and log navigation, focus changes and mouse clicks.
246
+ - Render the selected command completion inline in the dedicated `:` bar,
247
+ without a dropdown; retain Tab/cycling acceptance and literal Enter behavior.
248
+
249
+ - Open container shells inside a full-screen Textual terminal with a persistent
250
+ context/pod/container frame. Ctrl+C reaches the remote program; Ctrl+] returns
251
+ to the retained container view, and Ctrl+Q closes the owned session and quits.
252
+
253
+ - Preserve exit 143 after SIGTERM during a native shell instead of reporting a
254
+ terminal failure after successful cleanup and restoration.
255
+
256
+ - Enter after arrow navigation submits the highlighted command/namespace/context
257
+ suggestion once; editing or changing scope discards the old selection.
258
+
259
+ - Keep quiet resource watches live through normal renewal without false timeout
260
+ warnings or growing retries; still expose genuine outages with bounded recovery.
261
+ - Replace “Session connected” with “Resource data ready”, distinguish loading
262
+ from a successful empty collection, and spell out context/namespace shortcut hints.
263
+
264
+ - Accept null optional exec credential args/env lists, including doctl's `env: null`,
265
+ with regression tests for authentication and switching away from an auth error.
266
+ - Reach context/namespace pickers with `c`/`n` outside text inputs and connection
267
+ status/retry with `i`/`r` or `:status`/`:retry` when a terminal intercepts function keys.
268
+
269
+ ### Added
270
+
271
+ - Required isolated SSH/tmux terminal and fresh-wheel trials for resize, Unicode,
272
+ color fallback, log navigation, native handoff, embedded protocols, cancellation
273
+ during shell preparation, signal restoration and real connection loss.
274
+ - Native Azure kubelogin contracts and explicit `:login`, with mode-aware terminal
275
+ stdin, private credential stdout, safe provider hints, captured delegated Azure
276
+ identity and retry after cancellation. Actual Entra/AKS certification remains
277
+ opt-in Q05 #87; generic exec TLS certificate rotation remains C08 #47.
278
+ - Exec token validation independent of argument length, allowing bounded large
279
+ JWTs without accepting header controls or whitespace.
280
+ - Invocation-scoped cluster/user aliases, token and CA/client certificate overrides,
281
+ repeated impersonation groups and the same captured identity in API streams and
282
+ delegated container shells. Effective identity is visible in the header.
283
+ - Effective `--refresh`/`-r` table repaint interval, retaining live watches and
284
+ cursor/filter state without periodic API polling.
285
+ - Rectangular dedicated command bar, with compact side borders in short terminals.
286
+ - Local context table through `:ctx`/`c`/F2 with cluster, auth-info and namespace;
287
+ filtering and browsing preserve the resource workspace and kubeconfig.
288
+ - Container image, readiness, state/reason, restart count, configured probes,
289
+ CPU/memory requests/limits and ports from the captured pod snapshot.
290
+
291
+ - K9s-inspired black/cyan/yellow workspace and a default `k9s` theme, with
292
+ context/cluster/user/version header, top inputs, view shortcuts and Escape trails.
293
+ - Live namespace NAME/STATUS/AGE table via `:ns` / `n`, Enter-to-pods and `0` for
294
+ all namespaces; returning retains namespace filtering, UID cursor and viewport.
295
+ - Common full-workspace container/log layouts with top log search, retaining the
296
+ embedded shell, captured targets and existing stream cleanup.
297
+
298
+ - Embedded selected-container shells via kubectl exec, with `x`/`:shell` on pods,
299
+ `s`/`x` on containers and a configurable literal shell argument list.
300
+ - Private connection snapshots pinned to the prepared session, pod-UID checks,
301
+ read-only enforcement and return to the retained table after exit or failure.
302
+
303
+ - Shared bounded local-process runner and native terminal handoff foundation,
304
+ with captured scope/arguments, enforced read-only policy and owned cleanup.
305
+ The embedded shell reuses process policy, captured arguments and cleanup.
306
+
307
+ - Enter on a pod opens its regular/init container table, including single-container
308
+ pods; Enter on a container opens its logs. Esc returns through both views, while
309
+ `d` keeps resource details and `l` keeps the direct log shortcut.
310
+
311
+ - Container log viewer with regular/init selection, current/previous output,
312
+ head/tail/time windows, timestamps, wrapping, literal search and Vim navigation.
313
+ - Separate reception pause and viewport follow, bounded virtualized history,
314
+ clear/marks/column lock/fullscreen, redacted copy/save and awaited cleanup.
315
+
316
+ - Backend current/previous regular/init container logs with captured UID/context,
317
+ tail/since/timestamp options, incremental UTF-8 framing and explicit errors.
318
+ - Owned cancellation, quiet-follow semantics, bounded redacted lines/retention
319
+ and consumer backpressure, integrated into the S02 terminal log viewer.
320
+
321
+ - Read-only captured-UID pod YAML, details and related events, with managedFields
322
+ visibility, literal search, redacted copying and return to the live table.
323
+ - Clear denied/missing reads, same-name recreation rejection, viewer invalidation
324
+ and awaited request/serializer cleanup, with API, Pilot, PTY and install checks.
325
+
326
+ - Shared initial/interactive pod/context/namespace commands, bounded literal
327
+ suggestions with Tab acceptance, and local Unicode text/regex filtering.
328
+ - Navigation back/forward preserving scope, filter, typed sorting, UID selection
329
+ and viewport; stale-result rejection and awaited worker cleanup.
330
+
331
+ - Live UID keyed pod rows with readiness, init/sidecar/waiting/termination reasons,
332
+ restarts, continuously updating age, typed sorting and stable selection/scroll.
333
+ - Incremental cell/row patches, cancellation-safe background projection, distinct
334
+ loading/empty/error states and visible data at 40×12, with real API/PTY/install evidence.
335
+
336
+ - Active pod synchronization with live counts and loading/stale/error status,
337
+ generation-bound snapshots, coalesced scope changes and bounded UI subscriptions.
338
+ - Awaited cleanup and late-result rejection, with rapid-switch, real-API, Pilot
339
+ and PTY recovery/exit tests. Pod table rows are delivered in B02.
340
+
341
+ - Backend list/watch synchronization with stable UID state, idempotent events,
342
+ bookmarks, opaque checkpoints, bounded retries and full relists after expiry.
343
+ - Real streaming/backpressure/cancellation tests and disposable-kind create,
344
+ modify, delete and same-name recreation qualification. UI pod rows are delivered in B02.
345
+
346
+ - Backend API discovery with core/named groups, modern/legacy negotiation,
347
+ aliases and explicit partial results, plus scoped atomic paginated snapshots,
348
+ collection versions and one full restart for expired continuation tokens.
349
+ - Resource normalization/HTTP cancellation tests and real disposable-kind
350
+ paginated resource qualification. Terminal pod rows are delivered in B02.
351
+
352
+ - Isolated kubeconfig/context sessions, namespace discovery and selectors,
353
+ TLS/client-certificate/static-token authentication and bounded noninteractive
354
+ exec-token helpers, with distinct connection states and owned cleanup.
355
+ - Real HTTP/TLS/helper, Pilot, terminal and disposable-kind verification for the
356
+ context checkpoint. Live resource views and provider qualification remain upcoming.
357
+
358
+ - Help/version subcommands and short version output, all audited launch flags
359
+ with explicit unavailable-feature errors, and a diagnostic data-directory path.
360
+ - Header/logo/scope visibility, initial terminal help/quit, and read-only/write
361
+ invocation overrides with shared CLI/UI command policy and persistent status.
362
+ - Launch-contract/alias/precedence tests, reviewed help snapshot, visibility Pilot
363
+ evidence and real-terminal initial help/quit restoration checks.
364
+
365
+ - Real terminal workspace with context/namespace/connection indicators, an empty
366
+ resource table, filter/command inputs, keyboard/mouse navigation, scrollable
367
+ help, responsive layouts, built-in themes and packaged styles.
368
+ - Pilot/layout tests and real PTY evidence for navigation, resize, Unicode paste,
369
+ rapid command input, normal/error terminal restoration and installed entry points.
370
+
371
+ - Versioned YAML preferences with typed defaults, explicit environment/CLI
372
+ precedence, legacy migration, retained unknown fields and atomic private writes.
373
+ - Safe local `info`, `config init`/`check`, config/log path flags and stable
374
+ errors that do not echo configuration values or rejected arguments.
375
+ - Private rotating diagnostic logs, process ownership, bounded records, credential
376
+ redaction and debug locations without exception values or console tracebacks.
377
+ - Project roadmap, architecture, quality requirements, and release methodology.
378
+ - Contribution and security policies, issue templates, and a structured backlog.
379
+ - Installable Python development package with `kuberich --help`, `--version`,
380
+ module invocation and a default terminal launch.
381
+ - Locked Textual/Kubernetes dependencies, developer tooling, and clean-artifact
382
+ installation tests for Python 3.12 through 3.14 on Linux and macOS.
383
+ - Independent production line/branch coverage gates, 90% changed-line coverage,
384
+ 100% critical-module coverage, and regression checks for invalid/missing evidence.
385
+ - A Linux/macOS application quality matrix and aggregate status that rejects
386
+ failed, cancelled, or skipped dependencies; private-repository merge checks
387
+ remain manually verified until GitHub branch protection is available.
388
+
389
+ No public application release has been published. Development installation is
390
+ available from a source checkout; PyPI and Homebrew publication come later.
391
+
392
+ ### Security
393
+
394
+ - Immutable service-level action policy that refuses unknown actions and blocks
395
+ mutation, exec, attach and unclassified plugins in read-only mode; actual
396
+ cluster-service enforcement must be qualified as those operations ship.
397
+
398
+ - Shared bounded literal display text, credential redaction and control escaping,
399
+ with explicit multiline behavior and preserved actionable error context.
400
+ - Immutable argument vectors and client/context/UID target captures with stale
401
+ target rejection; operation enforcement remains part of upcoming services.
402
+ - Test-wide ambient Kubernetes credential traps and a qualified owned local
403
+ fixture loader that preserves configuration files and SDK defaults.
404
+ - Focused trust-boundary model and documented integration responsibilities
405
+ for authentication helpers, plugins, terminal sinks and release artifacts.
kuberich-0.1.0/LICENSE ADDED
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.