agentpack-cli 0.3.14__tar.gz → 0.3.15__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.
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/PKG-INFO +41 -2
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/README.md +40 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/pyproject.toml +1 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/__init__.py +1 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/application/pack_service.py +34 -13
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/benchmark.py +221 -5
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/explain.py +3 -3
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/guard.py +3 -3
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/init.py +18 -9
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/migrate.py +3 -3
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/pack.py +3 -3
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/quickstart.py +3 -3
- agentpack_cli-0.3.15/src/agentpack/commands/skills.py +106 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/context_pack.py +8 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/models.py +1 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/mcp_server.py +16 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/models.py +9 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/parser.py +34 -1
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/prompt_builder.py +25 -3
- agentpack_cli-0.3.15/src/agentpack/router/scoring.py +409 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/service.py +100 -0
- agentpack_cli-0.3.14/src/agentpack/commands/skills.py +0 -46
- agentpack_cli-0.3.14/src/agentpack/router/scoring.py +0 -178
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/.gitignore +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/LICENSE +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/antigravity.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/base.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/claude.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/codex.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/cursor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/detect.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/generic.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/adapters/windsurf.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/dependency_graph.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/go_imports.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/java_imports.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/js_ts_imports.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/monorepo.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/naming_signals.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/python_imports.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/ranking.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/repo_map.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/role_inference.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/rust_imports.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/symbols.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/task_classifier.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/analysis/tests.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/application/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/cli.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/_shared.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/ci_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/claude_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/dev_check.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/diagnose_selection.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/diff.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/doctor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/eval_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/hook_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/ignore_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/install.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/learn.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/mcp_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/monitor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/next_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/release_check.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/release_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/repair.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/route.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/scan.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/start_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/state_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/stats.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/status.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/summarize.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/task_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/threads.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/tune.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/verify_wheel.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/watch.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/commands/workflow_cmd.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/bootstrap.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/cache.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/changed_paths.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/config.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/diff.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/evals.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/execution_state.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/git.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/git_hooks.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/global_install.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/ignore.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/merkle.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/redactor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/scanner.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/snapshot.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/task_freshness.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/thread_context.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/token_estimator.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/core/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/data/agentpack.md +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/antigravity.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/claude.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/codex.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/cursor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/installers/windsurf.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/agents.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/git_hooks.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/global_install.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/platform.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/integrations/vscode_tasks.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/collector.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/extractor.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/feedback.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/lesson_ranker.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/models.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/provider.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/quality.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/renderers.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/learning/skill_map.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/compact.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/markdown.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/renderers/receipts.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/router/discovery.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/session/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/session/state.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/summaries/__init__.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/summaries/base.py +0 -0
- {agentpack_cli-0.3.14 → agentpack_cli-0.3.15}/src/agentpack/summaries/offline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentpack-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.15
|
|
4
4
|
Summary: Local MCP context router for Claude Code, Codex, Cursor, and AI coding agents.
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -63,12 +63,39 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
|
|
|
63
63
|
|
|
64
64
|

|
|
65
65
|
|
|
66
|
-
> **Status: alpha (v0.3.
|
|
66
|
+
> **Status: alpha (v0.3.15).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
|
|
67
67
|
>
|
|
68
68
|
> **Platform note:** macOS, Linux, and Windows are supported. Windows support targets PowerShell plus Git for Windows. `cmd.exe` and bare Git setups are not a supported path yet.
|
|
69
69
|
>
|
|
70
70
|
> **Name note:** PyPI package is `agentpack-cli`, npm package is `@vishal2612200/agentpack`, and the command is `agentpack`. This project is unrelated to AgentPack dataset papers or other repos with the same name.
|
|
71
71
|
|
|
72
|
+
## What's New in 0.3.15
|
|
73
|
+
|
|
74
|
+
AgentPack Router now recommends skills with stronger local signals: richer
|
|
75
|
+
frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
|
|
76
|
+
and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
|
|
77
|
+
`expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
|
|
78
|
+
local outcome signals for future routing.
|
|
79
|
+
|
|
80
|
+
## What's New in 0.3.14
|
|
81
|
+
|
|
82
|
+
AgentPack Learn now covers both sides of AI-assisted development: the coding
|
|
83
|
+
agent gets compact future-agent lessons, and the developer gets task-specific
|
|
84
|
+
learning notes, skill evidence, and practice follow-up.
|
|
85
|
+
|
|
86
|
+
- `agentpack learn --provider-command` adds an opt-in local provider bridge:
|
|
87
|
+
AgentPack sends a bounded, redacted report JSON on stdin and accepts
|
|
88
|
+
LearningReport-compatible JSON fields on stdout. No hosted service is called
|
|
89
|
+
unless your command does it.
|
|
90
|
+
- `agentpack learn --dashboard` writes a static
|
|
91
|
+
`.agentpack/learning-dashboard.html` for IDE/browser review.
|
|
92
|
+
- `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
|
|
93
|
+
shareable lesson file that omits personal skill history.
|
|
94
|
+
- `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
|
|
95
|
+
a task summary to skill memory and next-practice prompts.
|
|
96
|
+
- `agentpack dev-check` and `agentpack release-check` now print bounded failure
|
|
97
|
+
excerpts, so CI shows the failing test instead of only a red stage name.
|
|
98
|
+
|
|
72
99
|
## Before vs After
|
|
73
100
|
|
|
74
101
|
Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
|
|
@@ -216,6 +243,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
|
|
|
216
243
|
|
|
217
244
|
AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates a local skill memory in `.agentpack/skills-progress.json`, writes ranked `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md`, `.agentpack/pr-learning-comment.md`, `.agentpack/learning-dashboard.html`, or `.agentpack/team-lessons.md`. Learn is local-first by default: `--provider-preview` shows the bounded payload for optional external refinement without making a network call, `--provider-command` runs only the local command you provide, and feedback stays in `.agentpack/learning-feedback.jsonl`.
|
|
218
245
|
|
|
246
|
+
Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
|
|
247
|
+
`--team-export` when the useful lesson should be shared without publishing a
|
|
248
|
+
personal skill history. Use `--ci` to fail a workflow when the generated
|
|
249
|
+
learning is too generic or lacks changed-file evidence.
|
|
250
|
+
|
|
219
251
|
## Agent Setup
|
|
220
252
|
|
|
221
253
|
AgentPack can install repo-local instructions and hooks for the coding agent you use. The installer is idempotent and merges with existing config where possible.
|
|
@@ -253,10 +285,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
|
|
|
253
285
|
default_mode = "balanced"
|
|
254
286
|
default_budget = 40000
|
|
255
287
|
|
|
288
|
+
[context_lite]
|
|
289
|
+
budget = 8000
|
|
290
|
+
|
|
256
291
|
[agents.generic]
|
|
257
292
|
output = ".agentpack/context.md"
|
|
258
293
|
```
|
|
259
294
|
|
|
295
|
+
Use `agentpack pack --mode lite` when you want a cheap ranked map before deeper file reads. Use `minimal`, `balanced`, or `deep` when you want progressively more file content in the generated pack.
|
|
296
|
+
|
|
260
297
|
Use `.agentignore` to remove generated output, vendored code, large exports, or files that repeatedly appear as ranking noise. AgentPack imports obvious generated/noisy entries from gitignore sources during init, but repository-specific outputs should still be added by hand.
|
|
261
298
|
|
|
262
299
|
Use scoring weights only after measuring a real miss:
|
|
@@ -414,6 +451,8 @@ AgentPack writes local artifacts under `.agentpack/`:
|
|
|
414
451
|
| `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
|
|
415
452
|
| `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
|
|
416
453
|
| `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
|
|
454
|
+
| `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
|
|
455
|
+
| `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
|
|
417
456
|
| `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
|
|
418
457
|
| `.agentpack/pack_metadata.json` | freshness and pack metadata |
|
|
419
458
|
| `.agentpack/cache/` | offline file summaries keyed by hash |
|
|
@@ -24,12 +24,39 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
|
|
|
24
24
|
|
|
25
25
|

|
|
26
26
|
|
|
27
|
-
> **Status: alpha (v0.3.
|
|
27
|
+
> **Status: alpha (v0.3.15).** Works, tested, and used in real sessions. Python and JavaScript/TypeScript are the best-supported languages. Current benchmarks are useful regression checks, not broad proof that AgentPack improves coding-agent success. API may change before 1.0.
|
|
28
28
|
>
|
|
29
29
|
> **Platform note:** macOS, Linux, and Windows are supported. Windows support targets PowerShell plus Git for Windows. `cmd.exe` and bare Git setups are not a supported path yet.
|
|
30
30
|
>
|
|
31
31
|
> **Name note:** PyPI package is `agentpack-cli`, npm package is `@vishal2612200/agentpack`, and the command is `agentpack`. This project is unrelated to AgentPack dataset papers or other repos with the same name.
|
|
32
32
|
|
|
33
|
+
## What's New in 0.3.15
|
|
34
|
+
|
|
35
|
+
AgentPack Router now recommends skills with stronger local signals: richer
|
|
36
|
+
frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
|
|
37
|
+
and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
|
|
38
|
+
`expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
|
|
39
|
+
local outcome signals for future routing.
|
|
40
|
+
|
|
41
|
+
## What's New in 0.3.14
|
|
42
|
+
|
|
43
|
+
AgentPack Learn now covers both sides of AI-assisted development: the coding
|
|
44
|
+
agent gets compact future-agent lessons, and the developer gets task-specific
|
|
45
|
+
learning notes, skill evidence, and practice follow-up.
|
|
46
|
+
|
|
47
|
+
- `agentpack learn --provider-command` adds an opt-in local provider bridge:
|
|
48
|
+
AgentPack sends a bounded, redacted report JSON on stdin and accepts
|
|
49
|
+
LearningReport-compatible JSON fields on stdout. No hosted service is called
|
|
50
|
+
unless your command does it.
|
|
51
|
+
- `agentpack learn --dashboard` writes a static
|
|
52
|
+
`.agentpack/learning-dashboard.html` for IDE/browser review.
|
|
53
|
+
- `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
|
|
54
|
+
shareable lesson file that omits personal skill history.
|
|
55
|
+
- `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
|
|
56
|
+
a task summary to skill memory and next-practice prompts.
|
|
57
|
+
- `agentpack dev-check` and `agentpack release-check` now print bounded failure
|
|
58
|
+
excerpts, so CI shows the failing test instead of only a red stage name.
|
|
59
|
+
|
|
33
60
|
## Before vs After
|
|
34
61
|
|
|
35
62
|
Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
|
|
@@ -177,6 +204,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
|
|
|
177
204
|
|
|
178
205
|
AgentPack writes developer notes to `.agentpack/learning.md` or `.agentpack/daily-summary.md`, updates a local skill memory in `.agentpack/skills-progress.json`, writes ranked `.agentpack/agent-lessons.md` for future coding agents, and can emit `.agentpack/learning.prompt.md`, `.agentpack/pr-learning-comment.md`, `.agentpack/learning-dashboard.html`, or `.agentpack/team-lessons.md`. Learn is local-first by default: `--provider-preview` shows the bounded payload for optional external refinement without making a network call, `--provider-command` runs only the local command you provide, and feedback stays in `.agentpack/learning-feedback.jsonl`.
|
|
179
206
|
|
|
207
|
+
Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
|
|
208
|
+
`--team-export` when the useful lesson should be shared without publishing a
|
|
209
|
+
personal skill history. Use `--ci` to fail a workflow when the generated
|
|
210
|
+
learning is too generic or lacks changed-file evidence.
|
|
211
|
+
|
|
180
212
|
## Agent Setup
|
|
181
213
|
|
|
182
214
|
AgentPack can install repo-local instructions and hooks for the coding agent you use. The installer is idempotent and merges with existing config where possible.
|
|
@@ -214,10 +246,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
|
|
|
214
246
|
default_mode = "balanced"
|
|
215
247
|
default_budget = 40000
|
|
216
248
|
|
|
249
|
+
[context_lite]
|
|
250
|
+
budget = 8000
|
|
251
|
+
|
|
217
252
|
[agents.generic]
|
|
218
253
|
output = ".agentpack/context.md"
|
|
219
254
|
```
|
|
220
255
|
|
|
256
|
+
Use `agentpack pack --mode lite` when you want a cheap ranked map before deeper file reads. Use `minimal`, `balanced`, or `deep` when you want progressively more file content in the generated pack.
|
|
257
|
+
|
|
221
258
|
Use `.agentignore` to remove generated output, vendored code, large exports, or files that repeatedly appear as ranking noise. AgentPack imports obvious generated/noisy entries from gitignore sources during init, but repository-specific outputs should still be added by hand.
|
|
222
259
|
|
|
223
260
|
Use scoring weights only after measuring a real miss:
|
|
@@ -375,6 +412,8 @@ AgentPack writes local artifacts under `.agentpack/`:
|
|
|
375
412
|
| `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
|
|
376
413
|
| `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
|
|
377
414
|
| `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
|
|
415
|
+
| `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
|
|
416
|
+
| `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
|
|
378
417
|
| `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
|
|
379
418
|
| `.agentpack/pack_metadata.json` | freshness and pack metadata |
|
|
380
419
|
| `.agentpack/cache/` | offline file summaries keyed by hash |
|
|
@@ -294,7 +294,6 @@ def _scan_metadata(
|
|
|
294
294
|
"ignore_hash": _hash_text(ignore_text),
|
|
295
295
|
"include_globs": include_globs,
|
|
296
296
|
"exclude_globs": exclude_globs,
|
|
297
|
-
"generated_paths": sorted(generated_paths),
|
|
298
297
|
"max_file_tokens": cfg.context.max_file_tokens,
|
|
299
298
|
"workspace": workspace,
|
|
300
299
|
}
|
|
@@ -329,7 +328,10 @@ def _full_scan_reason(
|
|
|
329
328
|
return "git unavailable"
|
|
330
329
|
|
|
331
330
|
previous_meta = previous_snap.get("metadata") if isinstance(previous_snap.get("metadata"), dict) else {}
|
|
332
|
-
if previous_meta.get("scan_fingerprint") != scan_metadata.get("scan_fingerprint")
|
|
331
|
+
if previous_meta.get("scan_fingerprint") != scan_metadata.get("scan_fingerprint") and (
|
|
332
|
+
_normalized_scan_config(previous_meta.get("scan_config"))
|
|
333
|
+
!= _normalized_scan_config(scan_metadata.get("scan_config"))
|
|
334
|
+
):
|
|
333
335
|
return "scan config or ignore rules changed"
|
|
334
336
|
if previous_meta.get("git_branch") != scan_metadata.get("git_branch"):
|
|
335
337
|
return "git branch changed"
|
|
@@ -346,6 +348,14 @@ def _hash_text(value: str) -> str:
|
|
|
346
348
|
return hashlib.sha256(value.encode("utf-8")).hexdigest()
|
|
347
349
|
|
|
348
350
|
|
|
351
|
+
def _normalized_scan_config(value: Any) -> dict[str, Any]:
|
|
352
|
+
if not isinstance(value, dict):
|
|
353
|
+
return {}
|
|
354
|
+
normalized = dict(value)
|
|
355
|
+
normalized.pop("generated_paths", None)
|
|
356
|
+
return normalized
|
|
357
|
+
|
|
358
|
+
|
|
349
359
|
def _hash_json(value: dict[str, Any]) -> str:
|
|
350
360
|
raw = json.dumps(value, sort_keys=True, separators=(",", ":"))
|
|
351
361
|
return _hash_text(raw)
|
|
@@ -382,7 +392,7 @@ class PackPlanner:
|
|
|
382
392
|
def plan(self, request: PackRequest) -> PackPlan:
|
|
383
393
|
root = request.root
|
|
384
394
|
cfg = load_config(root)
|
|
385
|
-
effective_budget = request
|
|
395
|
+
effective_budget = _resolve_effective_budget(request, cfg)
|
|
386
396
|
ignore_spec = load_spec(root / cfg.project.ignore_file)
|
|
387
397
|
phase_times: dict[str, float] = {}
|
|
388
398
|
|
|
@@ -974,10 +984,18 @@ def _rank_omitted_relevant_files(files: list[OmittedRelevantFile]) -> list[Omitt
|
|
|
974
984
|
|
|
975
985
|
|
|
976
986
|
def _repo_map_budget_for_mode(mode: str, effective_budget: int) -> int:
|
|
977
|
-
caps = {"minimal": 300, "balanced": 600, "deep": 900}
|
|
987
|
+
caps = {"lite": 150, "minimal": 300, "balanced": 600, "deep": 900}
|
|
978
988
|
return min(caps.get(mode, 500), max(0, effective_budget // 20))
|
|
979
989
|
|
|
980
990
|
|
|
991
|
+
def _resolve_effective_budget(request: PackRequest, cfg: Any) -> int:
|
|
992
|
+
if request.budget > 0:
|
|
993
|
+
return request.budget
|
|
994
|
+
if request.mode == "lite":
|
|
995
|
+
return cfg.context_lite.budget
|
|
996
|
+
return cfg.context.default_budget
|
|
997
|
+
|
|
998
|
+
|
|
981
999
|
_FRONTEND_TASK_TERMS = {
|
|
982
1000
|
"component", "components", "frontend", "landing", "layout", "page", "pages",
|
|
983
1001
|
"preview", "previews", "public", "seo", "signup", "tool", "tools", "ui", "web",
|
|
@@ -1271,7 +1289,10 @@ def _summary_score_floor(cfg: Any, generic_ratio: float) -> float:
|
|
|
1271
1289
|
|
|
1272
1290
|
|
|
1273
1291
|
def _summary_cap_for_mode(cfg: Any, mode: str, generic_ratio: float = 0.0) -> int:
|
|
1274
|
-
if mode == "
|
|
1292
|
+
if mode == "lite":
|
|
1293
|
+
minimal_cap = cfg.context.max_summary_files_minimal
|
|
1294
|
+
cap = min(minimal_cap, cfg.context_lite.max_selected_files) if minimal_cap > 0 else cfg.context_lite.max_selected_files
|
|
1295
|
+
elif mode == "minimal":
|
|
1275
1296
|
cap = cfg.context.max_summary_files_minimal
|
|
1276
1297
|
elif mode == "balanced":
|
|
1277
1298
|
cap = cfg.context.max_summary_files_balanced
|
|
@@ -1323,17 +1344,17 @@ def _guarded_summary_cap(
|
|
|
1323
1344
|
if rows < 3:
|
|
1324
1345
|
if no_live_changes and cap > 0:
|
|
1325
1346
|
if effective_budget and effective_budget <= 2500:
|
|
1326
|
-
return min(cap, 4 if mode
|
|
1347
|
+
return min(cap, 4 if mode in ("lite", "minimal") else 6)
|
|
1327
1348
|
if effective_budget and effective_budget <= 6000:
|
|
1328
|
-
return min(cap, 12 if mode
|
|
1349
|
+
return min(cap, 12 if mode in ("lite", "minimal") else 16)
|
|
1329
1350
|
return min(cap, 16)
|
|
1330
1351
|
return cap
|
|
1331
1352
|
if avg_summary_precision <= 0.05:
|
|
1332
1353
|
if no_live_changes:
|
|
1333
1354
|
return -1
|
|
1334
|
-
strict_cap = 3 if mode == "minimal" else 5 if mode == "balanced" else 10
|
|
1355
|
+
strict_cap = 2 if mode == "lite" else 3 if mode == "minimal" else 5 if mode == "balanced" else 10
|
|
1335
1356
|
elif avg_summary_precision <= 0.15:
|
|
1336
|
-
strict_cap = 3 if no_live_changes else 6 if mode == "minimal" else 12 if mode == "balanced" else 20
|
|
1357
|
+
strict_cap = 2 if mode == "lite" else 3 if no_live_changes else 6 if mode == "minimal" else 12 if mode == "balanced" else 20
|
|
1337
1358
|
else:
|
|
1338
1359
|
if no_live_changes and cap > 0:
|
|
1339
1360
|
return min(cap, 8)
|
|
@@ -1391,15 +1412,15 @@ def _guarded_weak_signal_cap(
|
|
|
1391
1412
|
if not no_live_changes:
|
|
1392
1413
|
return 0
|
|
1393
1414
|
if generic_ratio >= 0.5:
|
|
1394
|
-
base = {"minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
|
|
1415
|
+
base = {"lite": 0, "minimal": 0, "balanced": 1, "deep": 2}.get(mode, 1)
|
|
1395
1416
|
elif generic_ratio >= 0.35:
|
|
1396
|
-
base = {"minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
|
|
1417
|
+
base = {"lite": 0, "minimal": 1, "balanced": 2, "deep": 3}.get(mode, 2)
|
|
1397
1418
|
else:
|
|
1398
|
-
base = {"minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
|
|
1419
|
+
base = {"lite": 1, "minimal": 2, "balanced": 4, "deep": 6}.get(mode, 3)
|
|
1399
1420
|
avg_precision, rows = _recent_token_precision(root)
|
|
1400
1421
|
if rows >= 3:
|
|
1401
1422
|
if avg_precision <= 0.1:
|
|
1402
|
-
base = min(base, 0 if mode
|
|
1423
|
+
base = min(base, 0 if mode in ("lite", "minimal") else 1)
|
|
1403
1424
|
elif avg_precision <= 0.2:
|
|
1404
1425
|
base = min(base, 1 if mode != "deep" else 2)
|
|
1405
1426
|
if effective_budget and effective_budget <= 2500:
|