capt-hook 9.2.1__tar.gz → 9.3.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.
- {capt_hook-9.2.1 → capt_hook-9.3.0}/PKG-INFO +1 -1
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/manager.py +4 -40
- {capt_hook-9.2.1 → capt_hook-9.3.0}/pyproject.toml +1 -1
- {capt_hook-9.2.1 → capt_hook-9.3.0}/LICENSE +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/README.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/.claude-plugin/plugin.json +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/__main__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/app.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/ast_grep.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/classifiers/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/classifiers/conductor.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/classifiers/droid.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/classifiers/native.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/cli.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/conditions.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/context.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/contexts.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/decisions.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/dispatch.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/durable.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/events.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/fields.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/file.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/hooks/hooks.json +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/loader.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/log.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/once.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/fixes/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/fixes/capt-hook.toml +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/fixes/teammate_permissions.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/_lib.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/capt-hook.toml +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/commands.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/comments.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/detours.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/docs.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/models.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/plans.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/fragments/deliverable_rubric.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/fragments/workflow_script_header.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/implementation_spawn_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/inline_edit_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/prose_spawn_gate.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/prose_workflow_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/review_routing_spawn_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/review_routing_workflow_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/writing_docs_spawn_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/writing_docs_workflow_nudge.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/review.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/tasks.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/tombstones.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/go/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/go/capt-hook.toml +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/go/testing.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/go/toolchain.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/python/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/python/capt-hook.toml +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/python/style.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/python/testing.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/python/toolchain.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/steering/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/steering/capt-hook.toml +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/steering/steering.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/steering/teammates.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/commands.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/lint.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/llm.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/nudge.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/permissions.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/rewrite.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/primitives/workflow.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/prompt.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/py.typed +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/cli.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/dashboard.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/fix.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/formats.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/judge.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/pipeline.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/prompts.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/repo.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/scan.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/settings.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/store.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/review/sync.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/session.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/settings.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/signals/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/signals/nlp.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/SKILL.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/capt-hook-api.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/pattern-catalog.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/pitfalls.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/testing-hooks.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/bootstrapping-hooks/SKILL.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/scanning-sessions/SKILL.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/scanning-sessions/references/pr-workflow.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/scanning-sessions/references/review-cli.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/translating-styleguides/SKILL.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/translating-styleguides/references/llm-rule-patterns.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/translating-styleguides/references/matcher-reference.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/translating-styleguides/references/tier-rubric.md +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/state.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/style/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/style/ast_grep.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/style/matchers.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/style/scope.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/style/types.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/tasks.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/templates/example_hook.py.tmpl +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/testing/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/testing/helpers.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/testing/session_cache.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/testing/types.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/transcripts.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/types.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/__init__.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/automode.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/fs.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/http.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/model_cache.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/paths.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/proc.py +0 -0
- {capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/util/text.py +0 -0
|
@@ -212,16 +212,6 @@ def read_entries(path: Path) -> list[PackEntry]:
|
|
|
212
212
|
return [parse_entry(name, table) for name, table in (tomllib.loads(path.read_text()).get("packs") or {}).items()]
|
|
213
213
|
|
|
214
214
|
|
|
215
|
-
def read_launcher(path: Path) -> str | None:
|
|
216
|
-
match tomllib.loads(path.read_text()).get("launcher") if path.exists() else None:
|
|
217
|
-
case None:
|
|
218
|
-
return None
|
|
219
|
-
case str() as launcher:
|
|
220
|
-
return launcher
|
|
221
|
-
case other:
|
|
222
|
-
raise PackError(f"invalid launcher in {path}: expected a string, got {type(other).__name__}")
|
|
223
|
-
|
|
224
|
-
|
|
225
215
|
def render_entry(entry: PackEntry) -> str:
|
|
226
216
|
match entry:
|
|
227
217
|
case BuiltinPack(name=name):
|
|
@@ -234,34 +224,8 @@ def render_entry(entry: PackEntry) -> str:
|
|
|
234
224
|
return f'[packs.{name}]\nsource = "{source}"\ncommit = "{commit}"\n\n'
|
|
235
225
|
|
|
236
226
|
|
|
237
|
-
def
|
|
238
|
-
""
|
|
239
|
-
|
|
240
|
-
``json.dumps`` escapes chars above the BMP (emoji, rare CJK) as surrogate-pair
|
|
241
|
-
``\\uXXXX`` sequences, which the TOML spec rejects — ``tomllib`` then raises on the
|
|
242
|
-
next read. This escapes only backslash, double quote, and the ``U+0000``–``U+001F`` /
|
|
243
|
-
``U+007F`` control chars, passing every other char through as literal UTF-8 so the
|
|
244
|
-
value round-trips. For ASCII values without control chars the output is byte-identical
|
|
245
|
-
to ``json.dumps``.
|
|
246
|
-
"""
|
|
247
|
-
|
|
248
|
-
def escape(c: str) -> str:
|
|
249
|
-
match c:
|
|
250
|
-
case "\\":
|
|
251
|
-
return "\\\\"
|
|
252
|
-
case '"':
|
|
253
|
-
return '\\"'
|
|
254
|
-
case _ if ord(c) <= 0x1F or ord(c) == 0x7F:
|
|
255
|
-
return f"\\u{ord(c):04x}"
|
|
256
|
-
case _:
|
|
257
|
-
return c
|
|
258
|
-
|
|
259
|
-
return '"' + "".join(escape(c) for c in value) + '"'
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
def render_packs_toml(entries: Sequence[PackEntry], launcher: str | None = None) -> str:
|
|
263
|
-
head = "" if launcher is None else f"launcher = {toml_basic_string(launcher)}\n\n"
|
|
264
|
-
return head + "".join(render_entry(e) for e in sorted(entries, key=lambda e: e.name))
|
|
227
|
+
def render_packs_toml(entries: Sequence[PackEntry]) -> str:
|
|
228
|
+
return "".join(render_entry(e) for e in sorted(entries, key=lambda e: e.name))
|
|
265
229
|
|
|
266
230
|
|
|
267
231
|
def atomic_write(path: Path, text: str) -> None:
|
|
@@ -284,7 +248,7 @@ def atomic_write(path: Path, text: str) -> None:
|
|
|
284
248
|
def upsert_entry(path: Path, entry: PackEntry) -> None:
|
|
285
249
|
atomic_write(
|
|
286
250
|
path,
|
|
287
|
-
render_packs_toml([*(e for e in read_entries(path) if e.name != entry.name), entry]
|
|
251
|
+
render_packs_toml([*(e for e in read_entries(path) if e.name != entry.name), entry]),
|
|
288
252
|
)
|
|
289
253
|
|
|
290
254
|
|
|
@@ -292,7 +256,7 @@ def delete_entry(path: Path, name: str) -> None:
|
|
|
292
256
|
entries = read_entries(path)
|
|
293
257
|
if name not in {e.name for e in entries}:
|
|
294
258
|
raise PackError(f"pack {name!r} is not enabled in {path}")
|
|
295
|
-
atomic_write(path, render_packs_toml([e for e in entries if e.name != name]
|
|
259
|
+
atomic_write(path, render_packs_toml([e for e in entries if e.name != name]))
|
|
296
260
|
|
|
297
261
|
|
|
298
262
|
def packs_cache_root() -> Path:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "capt-hook"
|
|
3
3
|
# Inert sentinel — the real version is stamped from the release tag (uv version --frozen).
|
|
4
|
-
version = "9.
|
|
4
|
+
version = "9.3.0"
|
|
5
5
|
description = "Stop repeating yourself to Claude."
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "PolyForm-Noncommercial-1.0.0"
|
|
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
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/inline_edit_nudge.md
RENAMED
|
File without changes
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/packs/general/prompts/models/prose_spawn_gate.md
RENAMED
|
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
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/capt-hook-api.md
RENAMED
|
File without changes
|
|
File without changes
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/pitfalls.md
RENAMED
|
File without changes
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/authoring-hooks/references/testing-hooks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/scanning-sessions/references/pr-workflow.md
RENAMED
|
File without changes
|
{capt_hook-9.2.1 → capt_hook-9.3.0}/captain_hook/skills/scanning-sessions/references/review-cli.md
RENAMED
|
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
|