agentsquire 0.2.2__tar.gz → 0.4.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 (51) hide show
  1. {agentsquire-0.2.2 → agentsquire-0.4.0}/.gitignore +4 -0
  2. {agentsquire-0.2.2 → agentsquire-0.4.0}/CHANGELOG.md +81 -0
  3. {agentsquire-0.2.2 → agentsquire-0.4.0}/PKG-INFO +38 -1
  4. {agentsquire-0.2.2 → agentsquire-0.4.0}/README.md +36 -0
  5. {agentsquire-0.2.2 → agentsquire-0.4.0}/pyproject.toml +21 -1
  6. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/__init__.py +1 -1
  7. agentsquire-0.4.0/src/agentsquire/cli.py +512 -0
  8. agentsquire-0.4.0/src/agentsquire/console.py +90 -0
  9. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/harnesses.py +7 -0
  10. agentsquire-0.4.0/src/agentsquire/interactive.py +126 -0
  11. agentsquire-0.4.0/src/agentsquire/skills/developing-with-agentsquire/SKILL.md +101 -0
  12. agentsquire-0.4.0/tests/test_bundled_skill.py +73 -0
  13. agentsquire-0.4.0/tests/test_cli_group.py +542 -0
  14. agentsquire-0.4.0/tests/test_console.py +51 -0
  15. agentsquire-0.4.0/tests/test_console_skills.py +81 -0
  16. agentsquire-0.4.0/tests/test_console_staleness.py +120 -0
  17. agentsquire-0.4.0/tests/test_guide.py +116 -0
  18. agentsquire-0.4.0/tests/test_guide_packaging.py +77 -0
  19. agentsquire-0.4.0/tests/test_interactive_install.py +437 -0
  20. agentsquire-0.4.0/tests/test_interactive_uninstall.py +262 -0
  21. agentsquire-0.4.0/tests/test_package.py +20 -0
  22. agentsquire-0.2.2/src/agentsquire/cli.py +0 -198
  23. agentsquire-0.2.2/tests/test_cli_group.py +0 -268
  24. agentsquire-0.2.2/tests/test_package.py +0 -5
  25. {agentsquire-0.2.2 → agentsquire-0.4.0}/LICENSE +0 -0
  26. {agentsquire-0.2.2 → agentsquire-0.4.0}/docs/api.md +0 -0
  27. {agentsquire-0.2.2 → agentsquire-0.4.0}/docs/harnesses.md +0 -0
  28. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/hashing.py +0 -0
  29. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/py.typed +0 -0
  30. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/roots.py +0 -0
  31. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/skills.py +0 -0
  32. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/sources.py +0 -0
  33. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/staleness.py +0 -0
  34. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/stamping.py +0 -0
  35. {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/verbs.py +0 -0
  36. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_api_lifecycle.py +0 -0
  37. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_backends.py +0 -0
  38. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_bundled_source.py +0 -0
  39. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_docs_snippets.py +0 -0
  40. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_entry_point.py +0 -0
  41. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_harness_registry.py +0 -0
  42. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_hash.py +0 -0
  43. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_install.py +0 -0
  44. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_reference_doc.py +0 -0
  45. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_root_overrides.py +0 -0
  46. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_skill_model.py +0 -0
  47. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_source_seam.py +0 -0
  48. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_staleness_check.py +0 -0
  49. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_status.py +0 -0
  50. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_uninstall.py +0 -0
  51. {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_update.py +0 -0
@@ -10,3 +10,7 @@ checkouts/
10
10
  # Local scratch / dev notes (never committed, never published)
11
11
  bugs.md
12
12
  feedback.md
13
+
14
+ # specflo local state: the active-project pointer is per-clone session state,
15
+ # not shared config. The durable record lives under docs/projects/.
16
+ .specflo/
@@ -8,6 +8,87 @@ The version is declared in two places that are kept in sync by the release
8
8
  tooling: `__version__` in `src/agentsquire/__init__.py` and `version` in
9
9
  `pyproject.toml`.
10
10
 
11
+ ## [0.4.0]
12
+
13
+ ### Added
14
+ - **Interactive `skills uninstall`.** On an interactive terminal, a bare
15
+ `<consumer> skills uninstall` lists exactly the installed-and-ours skills -
16
+ enumerated from on-disk provenance stamps across every detected harness and
17
+ scope, so unstamped and foreign-stamped directories are never offered - then
18
+ removes the subset you pick after a destructive confirm summary. It re-checks
19
+ each stamp immediately before deleting, and is gated by the same TTY/CI/
20
+ explicit-flag rules as install. `-y/--yes` pre-answers the destructive
21
+ confirm (the picker still runs); `--no-input` skips the prompt entirely and
22
+ removes over the flag-selected `--harness NAME[:scope]` targets (default: all
23
+ detected at `--scope`, today's non-interactive meaning).
24
+ - **Interactive `skills install`.** On an interactive terminal, a bare
25
+ `<consumer> skills install` now prompts: a checkbox of the detected
26
+ harnesses, then a per-harness scope select (a harness with only one scope,
27
+ e.g. hermes, is never offered an impossible choice), then a confirm summary
28
+ listing every `(harness, scope)` pair before anything is written. It ships
29
+ inside the mountable `skills_command_group`, so every consumer gets it with
30
+ no extra code. The prompt is launched only when stdin is an interactive TTY,
31
+ `CI` is unset, and none of `--harness`, `--scope`, `-y/--yes`, or
32
+ `--no-input` was passed - agents and scripts always run non-interactively.
33
+ New `--no-input` (force non-interactive) and `-y/--yes` (assume yes) flags.
34
+ Cancelling any prompt aborts with a notice and no writes; selecting nothing
35
+ or declining the confirm is a clean no-op; and because the confirm is the
36
+ single last gate, aborting a multi-harness plan writes none of it (never a
37
+ partial subset). Zero detected harnesses is the same clean error as the
38
+ non-interactive path, with no empty checkbox shown.
39
+ - **`--harness` is now repeatable with an optional `:scope` suffix across all
40
+ four verbs (install, status, update, uninstall).** `install --harness
41
+ claude-code:project --harness pi` operates on that subset, each at its own
42
+ scope (a bare `NAME` uses the top-level `--scope`); omitting `--harness` still
43
+ targets every detected harness at `--scope`, and a single `--harness NAME`
44
+ behaves exactly as before. An unknown harness, a supported-but-undetected
45
+ harness, an invalid `:scope` value, or a `NAME:scope` the harness cannot
46
+ satisfy (e.g. `hermes:project`) each fail with a named error and write
47
+ nothing - a multi-target plan never partially installs.
48
+ - **`questionary` is now a hard runtime dependency.** It backs the interactive
49
+ skill installer; a base install pulls it in with no extras, so the
50
+ interactive path always imports with no optional-import branching. It is
51
+ imported only in the interactive front-end module, so a non-interactive or
52
+ CI invocation never loads a terminal-UI library.
53
+
54
+ ### Changed
55
+ - **install now resolves to an explicit `(harness, scope)` plan run by one
56
+ shared executor.** Internal refactor with no change to non-interactive
57
+ behavior; it is the seam the interactive front-end will hand its plan to.
58
+
59
+ ## [0.3.0]
60
+
61
+ ### Added
62
+ - **agentsquire now ships its own runnable CLI, `squire` (long alias
63
+ `agentsquire`).** It dogfoods the library's consumer contract end to end,
64
+ carrying one bundled skill, mounting the ready-made skills group, emitting the
65
+ proactive staleness notice, and serving its own reference docs.
66
+ - `squire skills install|status|update|uninstall` - the standard group,
67
+ mounted the production way at user scope by default, operating on
68
+ agentsquire's one bundled skill.
69
+ - `squire guide [TOPIC]` - with no argument lists the reference topics (api,
70
+ harnesses, integration); with a topic, pages that canonical doc as raw
71
+ markdown. An unknown topic is a clean, non-zero error naming the valid
72
+ topics.
73
+ - `squire --version` prints the installed agentsquire version; `squire --help`
74
+ and `agentsquire --help` are identical below the usage line.
75
+ - A proactive staleness notice on stderr points at `squire skills update` when
76
+ an installed copy is out of date; suppressed under CI or
77
+ `AGENTSQUIRE_NO_UPDATE_CHECK`, and it never changes stdout or the exit code.
78
+ - **`developing-with-agentsquire` bundled skill.** agentsquire carries one Agent
79
+ Skill as package data and marks itself skill-carrying under the
80
+ `agentsquire.skills` entry-point group - the same contract it documents for
81
+ consumers.
82
+ - **The three reference docs are force-included into the wheel.** `docs/api.md`,
83
+ `docs/harnesses.md`, and `README.md` are packaged under `agentsquire/_docs/`
84
+ (as `api.md`, `harnesses.md`, `integration.md`) so `guide` has one
85
+ authoritative source that works from an installed wheel, with no committed
86
+ in-package duplicate.
87
+ - **README Installation section.** Documents `pip install agentsquire`,
88
+ installing from a source clone, and - for developers building on agentsquire -
89
+ how to install the bundled `developing-with-agentsquire` skill and reference
90
+ docs into their own harness (`squire skills install`, `squire guide`).
91
+
11
92
  ## [0.2.2]
12
93
 
13
94
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentsquire
3
- Version: 0.2.2
3
+ Version: 0.4.0
4
4
  Summary: Let a Python package carry its own agent integrations and install them into whatever agent harness is present.
5
5
  Author: TacoTakumi
6
6
  License-Expression: MIT
@@ -20,6 +20,7 @@ Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Requires-Dist: click
22
22
  Requires-Dist: pyyaml
23
+ Requires-Dist: questionary
23
24
  Description-Content-Type: text/markdown
24
25
 
25
26
  # AgentSquire
@@ -42,6 +43,42 @@ is by marker directory; every operation is local (no network in any verb). Each
42
43
  harness's directories, scopes, and behaviour are recorded in
43
44
  [docs/harnesses.md](docs/harnesses.md).
44
45
 
46
+ ## Installation
47
+
48
+ pip install agentsquire
49
+
50
+ This installs the library and its own CLI, `squire` (aliased `agentsquire`). As
51
+ a consumer you normally add `agentsquire` to your package's dependencies rather
52
+ than having users install it directly - it rides in your wheel, and your users
53
+ only ever see your tool.
54
+
55
+ agentsquire dogfoods its own contract: it carries the
56
+ `developing-with-agentsquire` skill and its reference docs as package data. When
57
+ you build an app on agentsquire, install that skill into your own agent harness
58
+ so the harness has the integration know-how on hand while it works:
59
+
60
+ squire skills install
61
+
62
+ That copies `developing-with-agentsquire` (how to ship skills, mount the group,
63
+ and wire the staleness hook) into every detected harness. The same reference
64
+ docs are served at the terminal from the installed wheel - no checkout needed:
65
+
66
+ squire guide # topics: api, harnesses, integration
67
+ squire guide api # the Python API reference
68
+ squire guide integration # this consumer integration guide
69
+
70
+ ### From source
71
+
72
+ Clone the repository and install it into your environment:
73
+
74
+ git clone https://github.com/TacoTakumi/AgentSquire.git
75
+ cd AgentSquire
76
+ pip install .
77
+
78
+ Add `-e` (`pip install -e .`) for an editable install if you plan to work on
79
+ agentsquire itself. The repo uses [uv](https://docs.astral.sh/uv/): `uv sync`
80
+ provisions a dev environment and `uv run pytest` runs the test suite.
81
+
45
82
  ## Consumer integration guide
46
83
 
47
84
  ### 1. Ship skills as package data
@@ -18,6 +18,42 @@ is by marker directory; every operation is local (no network in any verb). Each
18
18
  harness's directories, scopes, and behaviour are recorded in
19
19
  [docs/harnesses.md](docs/harnesses.md).
20
20
 
21
+ ## Installation
22
+
23
+ pip install agentsquire
24
+
25
+ This installs the library and its own CLI, `squire` (aliased `agentsquire`). As
26
+ a consumer you normally add `agentsquire` to your package's dependencies rather
27
+ than having users install it directly - it rides in your wheel, and your users
28
+ only ever see your tool.
29
+
30
+ agentsquire dogfoods its own contract: it carries the
31
+ `developing-with-agentsquire` skill and its reference docs as package data. When
32
+ you build an app on agentsquire, install that skill into your own agent harness
33
+ so the harness has the integration know-how on hand while it works:
34
+
35
+ squire skills install
36
+
37
+ That copies `developing-with-agentsquire` (how to ship skills, mount the group,
38
+ and wire the staleness hook) into every detected harness. The same reference
39
+ docs are served at the terminal from the installed wheel - no checkout needed:
40
+
41
+ squire guide # topics: api, harnesses, integration
42
+ squire guide api # the Python API reference
43
+ squire guide integration # this consumer integration guide
44
+
45
+ ### From source
46
+
47
+ Clone the repository and install it into your environment:
48
+
49
+ git clone https://github.com/TacoTakumi/AgentSquire.git
50
+ cd AgentSquire
51
+ pip install .
52
+
53
+ Add `-e` (`pip install -e .`) for an editable install if you plan to work on
54
+ agentsquire itself. The repo uses [uv](https://docs.astral.sh/uv/): `uv sync`
55
+ provisions a dev environment and `uv run pytest` runs the test suite.
56
+
21
57
  ## Consumer integration guide
22
58
 
23
59
  ### 1. Ship skills as package data
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agentsquire"
7
- version = "0.2.2"
7
+ version = "0.4.0"
8
8
  description = "Let a Python package carry its own agent integrations and install them into whatever agent harness is present."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -28,8 +28,19 @@ classifiers = [
28
28
  dependencies = [
29
29
  "pyyaml",
30
30
  "click",
31
+ "questionary",
31
32
  ]
32
33
 
34
+ [project.scripts]
35
+ squire = "agentsquire.console:main"
36
+ agentsquire = "agentsquire.console:main"
37
+
38
+ # agentsquire dogfoods its own consumer contract: it carries one bundled skill
39
+ # (developing-with-agentsquire) and marks itself skill-carrying under the same
40
+ # entry-point group it tells consumers to use. Nothing reads this at launch.
41
+ [project.entry-points."agentsquire.skills"]
42
+ agentsquire = "agentsquire"
43
+
33
44
  [dependency-groups]
34
45
  dev = [
35
46
  "build",
@@ -53,6 +64,15 @@ include = [
53
64
  "/docs/harnesses.md",
54
65
  ]
55
66
 
67
+ # Force-include the three canonical docs into the wheel so `guide` has a single
68
+ # authoritative source with no hand-maintained in-package duplicate. The sources
69
+ # live only under docs/ and README.md; nothing is committed under the package.
70
+ # README.md becomes the `integration` topic.
71
+ [tool.hatch.build.targets.wheel.force-include]
72
+ "docs/api.md" = "agentsquire/_docs/api.md"
73
+ "docs/harnesses.md" = "agentsquire/_docs/harnesses.md"
74
+ "README.md" = "agentsquire/_docs/integration.md"
75
+
56
76
  [tool.pytest.ini_options]
57
77
  testpaths = ["tests"]
58
78
  pythonpath = ["src"]
@@ -6,7 +6,7 @@ enumerate skills from a source, detect harnesses, then install / status /
6
6
  update / uninstall. See docs/api.md for the reference.
7
7
  """
8
8
 
9
- __version__ = "0.2.2"
9
+ __version__ = "0.4.0"
10
10
 
11
11
  from agentsquire.harnesses import (
12
12
  CLAUDE_CODE,