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.
- {agentsquire-0.2.2 → agentsquire-0.4.0}/.gitignore +4 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/CHANGELOG.md +81 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/PKG-INFO +38 -1
- {agentsquire-0.2.2 → agentsquire-0.4.0}/README.md +36 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/pyproject.toml +21 -1
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/__init__.py +1 -1
- agentsquire-0.4.0/src/agentsquire/cli.py +512 -0
- agentsquire-0.4.0/src/agentsquire/console.py +90 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/harnesses.py +7 -0
- agentsquire-0.4.0/src/agentsquire/interactive.py +126 -0
- agentsquire-0.4.0/src/agentsquire/skills/developing-with-agentsquire/SKILL.md +101 -0
- agentsquire-0.4.0/tests/test_bundled_skill.py +73 -0
- agentsquire-0.4.0/tests/test_cli_group.py +542 -0
- agentsquire-0.4.0/tests/test_console.py +51 -0
- agentsquire-0.4.0/tests/test_console_skills.py +81 -0
- agentsquire-0.4.0/tests/test_console_staleness.py +120 -0
- agentsquire-0.4.0/tests/test_guide.py +116 -0
- agentsquire-0.4.0/tests/test_guide_packaging.py +77 -0
- agentsquire-0.4.0/tests/test_interactive_install.py +437 -0
- agentsquire-0.4.0/tests/test_interactive_uninstall.py +262 -0
- agentsquire-0.4.0/tests/test_package.py +20 -0
- agentsquire-0.2.2/src/agentsquire/cli.py +0 -198
- agentsquire-0.2.2/tests/test_cli_group.py +0 -268
- agentsquire-0.2.2/tests/test_package.py +0 -5
- {agentsquire-0.2.2 → agentsquire-0.4.0}/LICENSE +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/docs/api.md +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/docs/harnesses.md +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/hashing.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/py.typed +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/roots.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/skills.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/sources.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/staleness.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/stamping.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/src/agentsquire/verbs.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_api_lifecycle.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_backends.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_bundled_source.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_docs_snippets.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_entry_point.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_harness_registry.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_hash.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_install.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_reference_doc.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_root_overrides.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_skill_model.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_source_seam.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_staleness_check.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_status.py +0 -0
- {agentsquire-0.2.2 → agentsquire-0.4.0}/tests/test_uninstall.py +0 -0
- {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.
|
|
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.
|
|
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"]
|