agentbundle 0.4.0__tar.gz → 0.5.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 (118) hide show
  1. {agentbundle-0.4.0 → agentbundle-0.5.0}/PKG-INFO +8 -2
  2. {agentbundle-0.4.0 → agentbundle-0.5.0}/README.md +7 -1
  3. agentbundle-0.5.0/agentbundle/_data/profile.schema.json +21 -0
  4. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/scope_rails.py +12 -2
  5. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/cli.py +30 -4
  6. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/install.py +410 -25
  7. agentbundle-0.5.0/agentbundle/commands/list_profiles.py +63 -0
  8. agentbundle-0.5.0/agentbundle/commands/profile.py +155 -0
  9. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/uninstall.py +4 -1
  10. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/upgrade.py +21 -6
  11. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/validate.py +16 -5
  12. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/version.py +1 -1
  13. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle.egg-info/PKG-INFO +8 -2
  14. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle.egg-info/SOURCES.txt +3 -0
  15. {agentbundle-0.4.0 → agentbundle-0.5.0}/pyproject.toml +1 -1
  16. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/__init__.py +0 -0
  17. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/__main__.py +0 -0
  18. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/adapter.schema.json +0 -0
  19. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/adapter.toml +0 -0
  20. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/install-marker.py +0 -0
  21. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/pack.schema.json +0 -0
  22. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  23. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  24. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/__init__.py +0 -0
  25. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/__main__.py +0 -0
  26. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapter_root_bins.py +0 -0
  27. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/__init__.py +0 -0
  28. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/claude_code.py +0 -0
  29. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/codex.py +0 -0
  30. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/copilot.py +0 -0
  31. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/cursor.py +0 -0
  32. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/gemini.py +0 -0
  33. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/kiro.py +0 -0
  34. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
  35. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
  36. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/contract.py +0 -0
  37. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/lint_packs.py +0 -0
  38. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/main.py +0 -0
  39. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/phase_order.py +0 -0
  40. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/__init__.py +0 -0
  41. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  42. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  43. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  44. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/direct_directory.py +0 -0
  45. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  46. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/hook_id.py +0 -0
  47. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  48. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  49. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/merge_json.py +0 -0
  50. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/projections/user_merge_json.py +0 -0
  51. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/self_host.py +0 -0
  52. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/shared_libs.py +0 -0
  53. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/target_resolver.py +0 -0
  54. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/__init__.py +0 -0
  55. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  56. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  57. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  58. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  59. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  60. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  61. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  62. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  63. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  64. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  65. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  66. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  67. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  68. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_contract.py +0 -0
  69. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_contract_scope.py +0 -0
  70. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_contract_v07.py +0 -0
  71. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_contract_v08.py +0 -0
  72. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  73. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  74. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  75. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  76. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  77. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_lint_packs.py +0 -0
  78. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  79. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_pack_schema.py +0 -0
  80. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  81. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  82. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_pipeline.py +0 -0
  83. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  84. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  85. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  86. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
  87. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_security.py +0 -0
  88. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_self_host_check.py +0 -0
  89. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  90. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  91. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  92. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  93. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/tests/test_validate.py +0 -0
  94. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/user_libs.py +0 -0
  95. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/build/validate.py +0 -0
  96. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/catalogue.py +0 -0
  97. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/categories.py +0 -0
  98. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/__init__.py +0 -0
  99. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/_common.py +0 -0
  100. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/_drop_warning.py +0 -0
  101. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/adapt.py +0 -0
  102. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/config.py +0 -0
  103. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/diff.py +0 -0
  104. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/init_state.py +0 -0
  105. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/list_packs.py +0 -0
  106. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/list_targets.py +0 -0
  107. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/reconcile.py +0 -0
  108. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/render.py +0 -0
  109. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/commands/scaffold.py +0 -0
  110. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/config.py +0 -0
  111. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/render.py +0 -0
  112. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/safety.py +0 -0
  113. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/scope.py +0 -0
  114. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle/user_config.py +0 -0
  115. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle.egg-info/dependency_links.txt +0 -0
  116. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle.egg-info/entry_points.txt +0 -0
  117. {agentbundle-0.4.0 → agentbundle-0.5.0}/agentbundle.egg-info/top_level.txt +0 -0
  118. {agentbundle-0.4.0 → agentbundle-0.5.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent.
5
5
  Author-email: eugenelim <eugenelim@users.noreply.github.com>
6
6
  License: Apache-2.0 OR MIT
@@ -39,6 +39,12 @@ That lands `core`, the flagship pack and the loop itself, in your repo. Claude C
39
39
  # See what's in a catalogue
40
40
  agentbundle list-packs git+https://github.com/eugenelim/agent-ready-repo
41
41
 
42
+ # See the catalogue's curated install profiles
43
+ agentbundle list-profiles git+https://github.com/eugenelim/agent-ready-repo
44
+
45
+ # Install a whole curated profile — a single-scope set of packs — in one command
46
+ agentbundle install --profile inception git+https://github.com/eugenelim/agent-ready-repo
47
+
42
48
  # Install the flagship loop into this repo
43
49
  agentbundle install --pack core git+https://github.com/eugenelim/agent-ready-repo
44
50
 
@@ -52,7 +58,7 @@ agentbundle install --pack core git+https://github.com/eugenelim/agent-ready-rep
52
58
  agentbundle upgrade --pack core --to 0.4.0 git+https://github.com/eugenelim/agent-ready-repo
53
59
  ```
54
60
 
55
- A catalogue is a git URL or a local path. Installs auto-detect your agent; pass `--adapter` to override.
61
+ A catalogue is a git URL or a local path. Installs auto-detect your agent; pass `--adapter` to override. A **profile** is a catalogue-curated, single-scope set of packs you install in one command — it declares its own scope, so `--scope` doesn't apply.
56
62
 
57
63
  ## Build your own catalogue
58
64
 
@@ -21,6 +21,12 @@ That lands `core`, the flagship pack and the loop itself, in your repo. Claude C
21
21
  # See what's in a catalogue
22
22
  agentbundle list-packs git+https://github.com/eugenelim/agent-ready-repo
23
23
 
24
+ # See the catalogue's curated install profiles
25
+ agentbundle list-profiles git+https://github.com/eugenelim/agent-ready-repo
26
+
27
+ # Install a whole curated profile — a single-scope set of packs — in one command
28
+ agentbundle install --profile inception git+https://github.com/eugenelim/agent-ready-repo
29
+
24
30
  # Install the flagship loop into this repo
25
31
  agentbundle install --pack core git+https://github.com/eugenelim/agent-ready-repo
26
32
 
@@ -34,7 +40,7 @@ agentbundle install --pack core git+https://github.com/eugenelim/agent-ready-rep
34
40
  agentbundle upgrade --pack core --to 0.4.0 git+https://github.com/eugenelim/agent-ready-repo
35
41
  ```
36
42
 
37
- A catalogue is a git URL or a local path. Installs auto-detect your agent; pass `--adapter` to override.
43
+ A catalogue is a git URL or a local path. Installs auto-detect your agent; pass `--adapter` to override. A **profile** is a catalogue-curated, single-scope set of packs you install in one command — it declares its own scope, so `--scope` doesn't apply.
38
44
 
39
45
  ## Build your own catalogue
40
46
 
@@ -0,0 +1,21 @@
1
+ {
2
+ "type": "object",
3
+ "required": ["scope", "description", "packs"],
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "scope": {"enum": ["repo", "user"]},
7
+ "description": {"type": "string"},
8
+ "packs": {
9
+ "type": "array",
10
+ "minItems": 1,
11
+ "items": {
12
+ "type": "object",
13
+ "required": ["pack"],
14
+ "additionalProperties": false,
15
+ "properties": {
16
+ "pack": {"type": "string"}
17
+ }
18
+ }
19
+ }
20
+ }
21
+ }
@@ -299,6 +299,16 @@ def run_all(
299
299
  # ---------------------------------------------------------------------------
300
300
 
301
301
 
302
+ # Adapters whose hook-wiring projects via `merge-into-agent-json` (a
303
+ # pack-owned `.kiro/agents/<attach-to-agent>.json`): the legacy `kiro`
304
+ # block and the `kiro-cli` adapter. The `attach-to-agent` rails below
305
+ # validate that merge target, so they fire for this family. `kiro-ide`
306
+ # (and the `kiro` *install alias*, which routes to kiro-ide) DROPS
307
+ # hook-wiring and is intentionally absent — there is no merge target to
308
+ # validate. Mirrors install.py's merge dispatch.
309
+ _MERGE_INTO_AGENT_JSON_ADAPTERS = frozenset({"kiro", "kiro-cli"})
310
+
311
+
302
312
  def check_kiro_attach_to_agent(
303
313
  pack_name: str,
304
314
  wiring_tomls: dict[str, dict],
@@ -325,7 +335,7 @@ def check_kiro_attach_to_agent(
325
335
  target_adapters: iterable of adapter names the pack is being
326
336
  validated against. No-op when ``kiro`` is absent.
327
337
  """
328
- if "kiro" not in set(target_adapters or ()):
338
+ if not (set(target_adapters or ()) & _MERGE_INTO_AGENT_JSON_ADAPTERS):
329
339
  return None
330
340
  for wiring_name, body in wiring_tomls.items():
331
341
  attach = body.get("attach-to-agent") if isinstance(body, dict) else None
@@ -485,7 +495,7 @@ def check_kiro_wiring(
485
495
  would let a pack reach outside its source tree. A wiring TOML that
486
496
  fails to parse counts as a refusal on its own.
487
497
  """
488
- if "kiro" not in set(target_adapters or ()):
498
+ if not (set(target_adapters or ()) & _MERGE_INTO_AGENT_JSON_ADAPTERS):
489
499
  return None
490
500
 
491
501
  loaded = _load_pack_hook_wiring_safely(pack_path, pack_name)
@@ -1,9 +1,11 @@
1
1
  """`agentbundle` CLI dispatcher — argparse over the eleven F-cli subcommands.
2
2
 
3
3
  Subcommand order on the parser matches the canonical install-workflow order
4
- from the spec (discovery-first): `list-packs`, `list-targets`, `scaffold`,
5
- `install`, `validate`, `render`, `adapt`, `diff`, `upgrade`, `uninstall`,
6
- `init-state`.
4
+ from the spec (discovery-first): `list-packs`, `list-profiles`, `list-targets`,
5
+ `scaffold`, `install`, `validate`, `render`, `adapt`, `diff`, `upgrade`,
6
+ `uninstall`, `init-state`, `config`, `reconcile`. `list-profiles` (RFC-0034)
7
+ lists the catalogue's curated single-scope install profiles; `install
8
+ --profile <name>` installs one.
7
9
 
8
10
  Each subcommand's `run(args) -> int` lives under `agentbundle.commands.*`;
9
11
  this module wires `argparse` and prints `--version`. No business logic here.
@@ -192,6 +194,14 @@ def _build_parser() -> argparse.ArgumentParser:
192
194
  sp.add_argument("catalogue", help="Catalogue URI (local path or git+https://...).")
193
195
  sp.set_defaults(func=_lazy("list_packs"))
194
196
 
197
+ # --- list-profiles --- (catalogue query; profiles declare their own scope)
198
+ sp = subparsers.add_parser(
199
+ "list-profiles",
200
+ help="List curated install profiles available in a catalogue URI.",
201
+ )
202
+ sp.add_argument("catalogue", help="Catalogue URI (local path or git+https://...).")
203
+ sp.set_defaults(func=_lazy("list_profiles"))
204
+
195
205
  # --- list-targets --- (--scope as read-only filter)
196
206
  sp = subparsers.add_parser(
197
207
  "list-targets",
@@ -215,7 +225,23 @@ def _build_parser() -> argparse.ArgumentParser:
215
225
  "install",
216
226
  help="Install a pack from a catalogue URI into the adopter repo.",
217
227
  )
218
- sp.add_argument("--pack", required=True)
228
+ # pack-profiles: `--pack` and `--profile` are a required mutually-exclusive
229
+ # group. `--pack` was a bare `required=True` arg; making it a member of a
230
+ # required mutex group keeps "exactly one of pack/profile" without losing
231
+ # the requiredness. `--scope` with `--profile` is rejected at the handler
232
+ # (a profile declares its own scope); argparse can't express that mutex
233
+ # because `--scope` is valid alongside `--pack`.
234
+ _pack_or_profile = sp.add_mutually_exclusive_group(required=True)
235
+ _pack_or_profile.add_argument("--pack")
236
+ _pack_or_profile.add_argument(
237
+ "--profile",
238
+ help=(
239
+ "Install a curated single-scope set of packs from "
240
+ "<catalogue>/profiles/<name>.toml in one command (RFC-0034). "
241
+ "Mutually exclusive with --pack; --scope is not allowed (the "
242
+ "profile declares its own scope)."
243
+ ),
244
+ )
219
245
  sp.add_argument("catalogue", help="Catalogue URI (local path or git+https://...).")
220
246
  sp.add_argument("--output", default=".")
221
247
  sp.add_argument("--scope", choices=("repo", "user"))