kd-cli 2.2.0__tar.gz → 2.2.1__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.
- {kd_cli-2.2.0/kd_cli.egg-info → kd_cli-2.2.1}/PKG-INFO +1 -1
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/main.py +12 -0
- kd_cli-2.2.1/kd/operating_guide.py +20 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/CHANGELOG.md +5 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1/kd_cli.egg-info}/PKG-INFO +1 -1
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd_cli.egg-info/SOURCES.txt +1 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/pyproject.toml +1 -1
- {kd_cli-2.2.0 → kd_cli-2.2.1}/LICENSE +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/MANIFEST.in +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/README.md +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/articles.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/http.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/hub.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/saved_queries.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/tags.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/api/youtrack.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/article_marker.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/auth.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/core/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/core/command_base.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/core/command_parser.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/core/namespaces.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/core/option_registry.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/input.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/alias/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/article/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/init.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/issue/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/primer/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/project/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/query/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/release_notes.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/search/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/system/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/tag/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/time/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/namespaces/user/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/output.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/cli/tree.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/client.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/config.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/config_read.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/config_schema.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/connection.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/debug.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/exceptions.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/history.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/article.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/assist.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/attachment.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/comment.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/common.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/issue.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/project.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/saved_query.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/search.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/tag.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/tag_entities.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/user.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/models/work_item.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/primer.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/query_parser.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/release_notes.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/__init__.py +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/command-synonyms.yaml +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/config-template.yaml +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/error-messages.yaml +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd/resources/operating-guide.md +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd_cli.egg-info/dependency_links.txt +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd_cli.egg-info/entry_points.txt +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd_cli.egg-info/requires.txt +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/kd_cli.egg-info/top_level.txt +0 -0
- {kd_cli-2.2.0 → kd_cli-2.2.1}/setup.cfg +0 -0
|
@@ -30,6 +30,7 @@ from kd.config import ResolvedConfig, resolve_command_defaults, resolve_config
|
|
|
30
30
|
from kd.connection import ConnectionContext, resolve_connection
|
|
31
31
|
from kd.debug import DebugLevel, DebugLog, init_debug_log
|
|
32
32
|
from kd.exceptions import KdError
|
|
33
|
+
from kd.operating_guide import load_guide
|
|
33
34
|
|
|
34
35
|
# Global options — single source of truth for extraction, help, and reference.
|
|
35
36
|
GLOBAL_OPTIONS: list[OptionDeclaration] = [
|
|
@@ -54,6 +55,13 @@ GLOBAL_OPTIONS: list[OptionDeclaration] = [
|
|
|
54
55
|
type=bool,
|
|
55
56
|
help_text="Print full command reference (LLM-friendly)",
|
|
56
57
|
),
|
|
58
|
+
OptionDeclaration(
|
|
59
|
+
name="guide",
|
|
60
|
+
short_name="G",
|
|
61
|
+
layer=OptionLayer.GLOBAL,
|
|
62
|
+
type=bool,
|
|
63
|
+
help_text="Print embedded operating guide (LLM-friendly)",
|
|
64
|
+
),
|
|
57
65
|
OptionDeclaration(
|
|
58
66
|
name="debug",
|
|
59
67
|
short_name="D",
|
|
@@ -158,6 +166,10 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
158
166
|
print(f"kd {__version__}")
|
|
159
167
|
return
|
|
160
168
|
|
|
169
|
+
if global_opts.get("guide"):
|
|
170
|
+
print(load_guide(), end="")
|
|
171
|
+
return
|
|
172
|
+
|
|
161
173
|
# Alias expansion: detect `alias <name>` and expand before parsing.
|
|
162
174
|
# Config is loaded early only when needed; stored for reuse later.
|
|
163
175
|
resolved: ResolvedConfig | None = None
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""Operating guide loader.
|
|
2
|
+
|
|
3
|
+
Reads the bundled ``kd/resources/operating-guide.md`` for ``kd --guide``.
|
|
4
|
+
The guide carries durable operating doctrine (product boundary, primer
|
|
5
|
+
workflow, cost classes, YouTrack gotchas) — a complement to the
|
|
6
|
+
syntax-focused ``kd --reference``.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import importlib.resources
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def load_guide() -> str:
|
|
15
|
+
"""Read the bundled operating guide as text."""
|
|
16
|
+
return (
|
|
17
|
+
importlib.resources.files("kd.resources")
|
|
18
|
+
.joinpath("operating-guide.md")
|
|
19
|
+
.read_text(encoding="utf-8")
|
|
20
|
+
)
|
|
@@ -4,6 +4,11 @@ All notable changes to kd-cli are recorded here. The project follows [Semantic V
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [2.2.1] — 2026-04-18
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- `kd --guide` / `-G` prints an embedded operating guide covering kd's product boundary, primer workflow, cost classes, and YouTrack gotchas — the doctrine complement to the syntax-focused `kd --reference`. Runs without a connection or working config, so it's safe in fresh or broken-config environments (KDCLI-94).
|
|
11
|
+
|
|
7
12
|
## [2.2.0] — 2026-04-18
|
|
8
13
|
|
|
9
14
|
Milestone 006 — tag discovery and taxonomy hygiene v1. Eight sequenced sessions that turn tags into a load-bearing cross-entity discovery primitive: `/issue` tag parity with `/article`, multi-tag intersection on `/tag issues`, the `/tag entities` cross-kind verb, `/tag list --prefix|--namespace` taxonomy introspection, and workspace-pinned tags on the primer consumed as an implicit OR scope.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|