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.
- kuberich-0.1.0/.gitignore +33 -0
- kuberich-0.1.0/CHANGELOG.md +405 -0
- kuberich-0.1.0/LICENSE +202 -0
- kuberich-0.1.0/NOTICE +32 -0
- kuberich-0.1.0/PKG-INFO +159 -0
- kuberich-0.1.0/README.md +127 -0
- kuberich-0.1.0/pyproject.toml +176 -0
- kuberich-0.1.0/src/kuberich/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/__main__.py +6 -0
- kuberich-0.1.0/src/kuberich/adapters/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/adapters/credentials.py +229 -0
- kuberich-0.1.0/src/kuberich/adapters/editing.py +71 -0
- kuberich-0.1.0/src/kuberich/adapters/emulator.py +258 -0
- kuberich-0.1.0/src/kuberich/adapters/kubernetes.py +774 -0
- kuberich-0.1.0/src/kuberich/adapters/mutations.py +197 -0
- kuberich-0.1.0/src/kuberich/adapters/operations.py +72 -0
- kuberich-0.1.0/src/kuberich/adapters/pty.py +107 -0
- kuberich-0.1.0/src/kuberich/adapters/pty_child.py +25 -0
- kuberich-0.1.0/src/kuberich/adapters/terminal.py +142 -0
- kuberich-0.1.0/src/kuberich/adapters/transfer_files.py +392 -0
- kuberich-0.1.0/src/kuberich/cli.py +419 -0
- kuberich-0.1.0/src/kuberich/config/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/config/catalog.py +184 -0
- kuberich-0.1.0/src/kuberich/config/launch.py +58 -0
- kuberich-0.1.0/src/kuberich/config/paths.py +51 -0
- kuberich-0.1.0/src/kuberich/config/schema.py +165 -0
- kuberich-0.1.0/src/kuberich/config/store.py +139 -0
- kuberich-0.1.0/src/kuberich/diagnostics/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/diagnostics/logging.py +132 -0
- kuberich-0.1.0/src/kuberich/diagnostics/redaction.py +34 -0
- kuberich-0.1.0/src/kuberich/domain/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/domain/aggregate_logs.py +360 -0
- kuberich-0.1.0/src/kuberich/domain/attach.py +113 -0
- kuberich-0.1.0/src/kuberich/domain/connection_overrides.py +142 -0
- kuberich-0.1.0/src/kuberich/domain/connections.py +106 -0
- kuberich-0.1.0/src/kuberich/domain/containers.py +145 -0
- kuberich-0.1.0/src/kuberich/domain/credential_helpers.py +157 -0
- kuberich-0.1.0/src/kuberich/domain/custom.py +131 -0
- kuberich-0.1.0/src/kuberich/domain/editing.py +162 -0
- kuberich-0.1.0/src/kuberich/domain/exec_credentials.py +78 -0
- kuberich-0.1.0/src/kuberich/domain/inspection.py +121 -0
- kuberich-0.1.0/src/kuberich/domain/log_json.py +68 -0
- kuberich-0.1.0/src/kuberich/domain/log_view.py +99 -0
- kuberich-0.1.0/src/kuberich/domain/logs.py +167 -0
- kuberich-0.1.0/src/kuberich/domain/mutations.py +260 -0
- kuberich-0.1.0/src/kuberich/domain/namespaces.py +29 -0
- kuberich-0.1.0/src/kuberich/domain/navigation.py +71 -0
- kuberich-0.1.0/src/kuberich/domain/operations.py +278 -0
- kuberich-0.1.0/src/kuberich/domain/pods.py +223 -0
- kuberich-0.1.0/src/kuberich/domain/port_forwards.py +242 -0
- kuberich-0.1.0/src/kuberich/domain/processes.py +205 -0
- kuberich-0.1.0/src/kuberich/domain/proxies.py +102 -0
- kuberich-0.1.0/src/kuberich/domain/registry.py +392 -0
- kuberich-0.1.0/src/kuberich/domain/resources.py +281 -0
- kuberich-0.1.0/src/kuberich/domain/shell.py +55 -0
- kuberich-0.1.0/src/kuberich/domain/tables.py +167 -0
- kuberich-0.1.0/src/kuberich/domain/targets.py +59 -0
- kuberich-0.1.0/src/kuberich/domain/terminal.py +68 -0
- kuberich-0.1.0/src/kuberich/domain/terminal_history.py +106 -0
- kuberich-0.1.0/src/kuberich/domain/transfers.py +205 -0
- kuberich-0.1.0/src/kuberich/domain/views.py +180 -0
- kuberich-0.1.0/src/kuberich/domain/watches.py +215 -0
- kuberich-0.1.0/src/kuberich/domain/workloads.py +184 -0
- kuberich-0.1.0/src/kuberich/errors.py +25 -0
- kuberich-0.1.0/src/kuberich/py.typed +0 -0
- kuberich-0.1.0/src/kuberich/runtime.py +96 -0
- kuberich-0.1.0/src/kuberich/security/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/security/arguments.py +23 -0
- kuberich-0.1.0/src/kuberich/security/controls.py +19 -0
- kuberich-0.1.0/src/kuberich/security/presentation.py +19 -0
- kuberich-0.1.0/src/kuberich/services/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/services/access.py +32 -0
- kuberich-0.1.0/src/kuberich/services/aggregate_logs.py +380 -0
- kuberich-0.1.0/src/kuberich/services/attach.py +87 -0
- kuberich-0.1.0/src/kuberich/services/commands.py +301 -0
- kuberich-0.1.0/src/kuberich/services/delegation.py +91 -0
- kuberich-0.1.0/src/kuberich/services/editing.py +154 -0
- kuberich-0.1.0/src/kuberich/services/filtering.py +86 -0
- kuberich-0.1.0/src/kuberich/services/inspection.py +89 -0
- kuberich-0.1.0/src/kuberich/services/log_export.py +52 -0
- kuberich-0.1.0/src/kuberich/services/logs.py +128 -0
- kuberich-0.1.0/src/kuberich/services/mutations.py +249 -0
- kuberich-0.1.0/src/kuberich/services/operations.py +309 -0
- kuberich-0.1.0/src/kuberich/services/pods.py +89 -0
- kuberich-0.1.0/src/kuberich/services/port_forwards.py +417 -0
- kuberich-0.1.0/src/kuberich/services/processes.py +418 -0
- kuberich-0.1.0/src/kuberich/services/resources.py +430 -0
- kuberich-0.1.0/src/kuberich/services/sessions.py +112 -0
- kuberich-0.1.0/src/kuberich/services/shell.py +94 -0
- kuberich-0.1.0/src/kuberich/services/transfers.py +356 -0
- kuberich-0.1.0/src/kuberich/services/watches.py +186 -0
- kuberich-0.1.0/src/kuberich/services/workloads.py +268 -0
- kuberich-0.1.0/src/kuberich/services/workspace.py +402 -0
- kuberich-0.1.0/src/kuberich/ui/__init__.py +1 -0
- kuberich-0.1.0/src/kuberich/ui/aggregate_logs.py +478 -0
- kuberich-0.1.0/src/kuberich/ui/app.py +1970 -0
- kuberich-0.1.0/src/kuberich/ui/chrome.py +346 -0
- kuberich-0.1.0/src/kuberich/ui/commands.py +175 -0
- kuberich-0.1.0/src/kuberich/ui/containers.py +229 -0
- kuberich-0.1.0/src/kuberich/ui/contexts.py +108 -0
- kuberich-0.1.0/src/kuberich/ui/custom.py +71 -0
- kuberich-0.1.0/src/kuberich/ui/editing.py +201 -0
- kuberich-0.1.0/src/kuberich/ui/handoff.py +85 -0
- kuberich-0.1.0/src/kuberich/ui/inspection.py +215 -0
- kuberich-0.1.0/src/kuberich/ui/kuberich.tcss +87 -0
- kuberich-0.1.0/src/kuberich/ui/launch.py +45 -0
- kuberich-0.1.0/src/kuberich/ui/log_body.py +440 -0
- kuberich-0.1.0/src/kuberich/ui/logs.py +625 -0
- kuberich-0.1.0/src/kuberich/ui/mutations.py +267 -0
- kuberich-0.1.0/src/kuberich/ui/namespaces.py +128 -0
- kuberich-0.1.0/src/kuberich/ui/operations.py +260 -0
- kuberich-0.1.0/src/kuberich/ui/pods.py +219 -0
- kuberich-0.1.0/src/kuberich/ui/port_forwards.py +304 -0
- kuberich-0.1.0/src/kuberich/ui/presentation.py +194 -0
- kuberich-0.1.0/src/kuberich/ui/scopes.py +67 -0
- kuberich-0.1.0/src/kuberich/ui/shutdown.py +45 -0
- kuberich-0.1.0/src/kuberich/ui/standard.py +258 -0
- kuberich-0.1.0/src/kuberich/ui/style_cache.py +66 -0
- kuberich-0.1.0/src/kuberich/ui/terminal.py +435 -0
- kuberich-0.1.0/src/kuberich/ui/transfers.py +192 -0
- 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.
|