agentpack-cli 0.3.14__tar.gz → 0.3.16__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 (137) hide show
  1. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/PKG-INFO +48 -2
  2. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/README.md +46 -1
  3. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/pyproject.toml +2 -1
  4. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/__init__.py +1 -1
  5. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/application/pack_service.py +34 -13
  6. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/benchmark.py +221 -5
  7. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/explain.py +3 -3
  8. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/guard.py +3 -3
  9. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/init.py +18 -9
  10. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/migrate.py +3 -3
  11. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/pack.py +4 -4
  12. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/quickstart.py +3 -3
  13. agentpack_cli-0.3.16/src/agentpack/commands/skills.py +106 -0
  14. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/watch.py +1 -1
  15. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/context_pack.py +8 -1
  16. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/models.py +1 -1
  17. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/mcp_server.py +16 -0
  18. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/models.py +9 -0
  19. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/parser.py +34 -1
  20. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/prompt_builder.py +25 -3
  21. agentpack_cli-0.3.16/src/agentpack/router/scoring.py +409 -0
  22. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/service.py +100 -0
  23. agentpack_cli-0.3.14/src/agentpack/commands/skills.py +0 -46
  24. agentpack_cli-0.3.14/src/agentpack/router/scoring.py +0 -178
  25. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/.gitignore +0 -0
  26. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/LICENSE +0 -0
  27. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/__init__.py +0 -0
  28. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/antigravity.py +0 -0
  29. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/base.py +0 -0
  30. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/claude.py +0 -0
  31. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/codex.py +0 -0
  32. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/cursor.py +0 -0
  33. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/detect.py +0 -0
  34. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/generic.py +0 -0
  35. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/adapters/windsurf.py +0 -0
  36. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/__init__.py +0 -0
  37. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/dependency_graph.py +0 -0
  38. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/go_imports.py +0 -0
  39. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/java_imports.py +0 -0
  40. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/js_ts_imports.py +0 -0
  41. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/monorepo.py +0 -0
  42. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/naming_signals.py +0 -0
  43. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/python_imports.py +0 -0
  44. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/ranking.py +0 -0
  45. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/repo_map.py +0 -0
  46. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/role_inference.py +0 -0
  47. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/rust_imports.py +0 -0
  48. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/symbols.py +0 -0
  49. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/task_classifier.py +0 -0
  50. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/analysis/tests.py +0 -0
  51. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/application/__init__.py +0 -0
  52. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/cli.py +0 -0
  53. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/__init__.py +0 -0
  54. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/_shared.py +0 -0
  55. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/ci_cmd.py +0 -0
  56. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/claude_cmd.py +0 -0
  57. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/dev_check.py +0 -0
  58. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/diagnose_selection.py +0 -0
  59. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/diff.py +0 -0
  60. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/doctor.py +0 -0
  61. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/eval_cmd.py +0 -0
  62. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/hook_cmd.py +0 -0
  63. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/ignore_cmd.py +0 -0
  64. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/install.py +0 -0
  65. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/learn.py +0 -0
  66. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/mcp_cmd.py +0 -0
  67. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/monitor.py +0 -0
  68. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/next_cmd.py +0 -0
  69. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/release_check.py +0 -0
  70. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/release_cmd.py +0 -0
  71. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/repair.py +0 -0
  72. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/route.py +0 -0
  73. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/scan.py +0 -0
  74. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/start_cmd.py +0 -0
  75. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/state_cmd.py +0 -0
  76. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/stats.py +0 -0
  77. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/status.py +0 -0
  78. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/summarize.py +0 -0
  79. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/task_cmd.py +0 -0
  80. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/threads.py +0 -0
  81. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/tune.py +0 -0
  82. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/verify_wheel.py +0 -0
  83. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/commands/workflow_cmd.py +0 -0
  84. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/__init__.py +0 -0
  85. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/bootstrap.py +0 -0
  86. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/cache.py +0 -0
  87. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/changed_paths.py +0 -0
  88. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/config.py +0 -0
  89. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/diff.py +0 -0
  90. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/evals.py +0 -0
  91. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/execution_state.py +0 -0
  92. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/git.py +0 -0
  93. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/git_hooks.py +0 -0
  94. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/global_install.py +0 -0
  95. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/ignore.py +0 -0
  96. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/merkle.py +0 -0
  97. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/redactor.py +0 -0
  98. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/scanner.py +0 -0
  99. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/snapshot.py +0 -0
  100. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/task_freshness.py +0 -0
  101. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/thread_context.py +0 -0
  102. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/token_estimator.py +0 -0
  103. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/core/vscode_tasks.py +0 -0
  104. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/data/agentpack.md +0 -0
  105. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/__init__.py +0 -0
  106. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/antigravity.py +0 -0
  107. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/claude.py +0 -0
  108. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/codex.py +0 -0
  109. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/cursor.py +0 -0
  110. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/installers/windsurf.py +0 -0
  111. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/__init__.py +0 -0
  112. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/agents.py +0 -0
  113. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/git_hooks.py +0 -0
  114. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/global_install.py +0 -0
  115. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/platform.py +0 -0
  116. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/integrations/vscode_tasks.py +0 -0
  117. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/__init__.py +0 -0
  118. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/collector.py +0 -0
  119. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/extractor.py +0 -0
  120. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/feedback.py +0 -0
  121. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/lesson_ranker.py +0 -0
  122. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/models.py +0 -0
  123. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/provider.py +0 -0
  124. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/quality.py +0 -0
  125. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/renderers.py +0 -0
  126. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/learning/skill_map.py +0 -0
  127. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/renderers/__init__.py +0 -0
  128. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/renderers/compact.py +0 -0
  129. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/renderers/markdown.py +0 -0
  130. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/renderers/receipts.py +0 -0
  131. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/__init__.py +0 -0
  132. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/router/discovery.py +0 -0
  133. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/session/__init__.py +0 -0
  134. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/session/state.py +0 -0
  135. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/summaries/__init__.py +0 -0
  136. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/src/agentpack/summaries/base.py +0 -0
  137. {agentpack_cli-0.3.14 → agentpack_cli-0.3.16}/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.14
3
+ Version: 0.3.16
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
@@ -22,6 +22,7 @@ Requires-Dist: tiktoken>=0.7.0
22
22
  Requires-Dist: tomli-w>=1.0.0
23
23
  Requires-Dist: tomli>=2.0.0; python_version < '3.11'
24
24
  Requires-Dist: typer>=0.12.0
25
+ Requires-Dist: watchdog>=4.0.0
25
26
  Provides-Extra: all
26
27
  Requires-Dist: mcp>=1.0.0; extra == 'all'
27
28
  Requires-Dist: watchdog>=4.0.0; extra == 'all'
@@ -63,12 +64,45 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
63
64
 
64
65
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
65
66
 
66
- > **Status: alpha (v0.3.14).** 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
+ > **Status: alpha (v0.3.16).** 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
68
  >
68
69
  > **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
70
  >
70
71
  > **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
72
 
73
+ ## What's New in 0.3.16
74
+
75
+ `0.3.16` bundles `watchdog` in normal installs so `agentpack watch` uses native
76
+ filesystem events by default instead of polling after `pipx`, `pip`, or npm
77
+ wrapper installation.
78
+
79
+ ## What's New in 0.3.15
80
+
81
+ AgentPack Router now recommends skills with stronger local signals: richer
82
+ frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
83
+ and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
84
+ `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
85
+ local outcome signals for future routing.
86
+
87
+ ## What's New in 0.3.14
88
+
89
+ AgentPack Learn now covers both sides of AI-assisted development: the coding
90
+ agent gets compact future-agent lessons, and the developer gets task-specific
91
+ learning notes, skill evidence, and practice follow-up.
92
+
93
+ - `agentpack learn --provider-command` adds an opt-in local provider bridge:
94
+ AgentPack sends a bounded, redacted report JSON on stdin and accepts
95
+ LearningReport-compatible JSON fields on stdout. No hosted service is called
96
+ unless your command does it.
97
+ - `agentpack learn --dashboard` writes a static
98
+ `.agentpack/learning-dashboard.html` for IDE/browser review.
99
+ - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
100
+ shareable lesson file that omits personal skill history.
101
+ - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
102
+ a task summary to skill memory and next-practice prompts.
103
+ - `agentpack dev-check` and `agentpack release-check` now print bounded failure
104
+ excerpts, so CI shows the failing test instead of only a red stage name.
105
+
72
106
  ## Before vs After
73
107
 
74
108
  Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
@@ -216,6 +250,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
216
250
 
217
251
  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
252
 
253
+ Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
254
+ `--team-export` when the useful lesson should be shared without publishing a
255
+ personal skill history. Use `--ci` to fail a workflow when the generated
256
+ learning is too generic or lacks changed-file evidence.
257
+
219
258
  ## Agent Setup
220
259
 
221
260
  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 +292,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
253
292
  default_mode = "balanced"
254
293
  default_budget = 40000
255
294
 
295
+ [context_lite]
296
+ budget = 8000
297
+
256
298
  [agents.generic]
257
299
  output = ".agentpack/context.md"
258
300
  ```
259
301
 
302
+ 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.
303
+
260
304
  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
305
 
262
306
  Use scoring weights only after measuring a real miss:
@@ -414,6 +458,8 @@ AgentPack writes local artifacts under `.agentpack/`:
414
458
  | `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
415
459
  | `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
416
460
  | `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
461
+ | `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
462
+ | `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
417
463
  | `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
418
464
  | `.agentpack/pack_metadata.json` | freshness and pack metadata |
419
465
  | `.agentpack/cache/` | offline file summaries keyed by hash |
@@ -24,12 +24,45 @@ pipx run --spec agentpack-cli agentpack route --task "fix auth token expiry"
24
24
 
25
25
  ![AgentPack route demo](docs/assets/agentpack-route-demo.svg)
26
26
 
27
- > **Status: alpha (v0.3.14).** 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.
27
+ > **Status: alpha (v0.3.16).** 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.16
34
+
35
+ `0.3.16` bundles `watchdog` in normal installs so `agentpack watch` uses native
36
+ filesystem events by default instead of polling after `pipx`, `pip`, or npm
37
+ wrapper installation.
38
+
39
+ ## What's New in 0.3.15
40
+
41
+ AgentPack Router now recommends skills with stronger local signals: richer
42
+ frontmatter, confidence thresholds, negative triggers, diversity-aware ranking,
43
+ and a pull-based MCP `get_skill` flow. Skill benchmark cases can declare
44
+ `expected_skills` and `avoid_skills`, and `agentpack skills feedback` records
45
+ local outcome signals for future routing.
46
+
47
+ ## What's New in 0.3.14
48
+
49
+ AgentPack Learn now covers both sides of AI-assisted development: the coding
50
+ agent gets compact future-agent lessons, and the developer gets task-specific
51
+ learning notes, skill evidence, and practice follow-up.
52
+
53
+ - `agentpack learn --provider-command` adds an opt-in local provider bridge:
54
+ AgentPack sends a bounded, redacted report JSON on stdin and accepts
55
+ LearningReport-compatible JSON fields on stdout. No hosted service is called
56
+ unless your command does it.
57
+ - `agentpack learn --dashboard` writes a static
58
+ `.agentpack/learning-dashboard.html` for IDE/browser review.
59
+ - `agentpack learn --team-export` writes `.agentpack/team-lessons.md`, a
60
+ shareable lesson file that omits personal skill history.
61
+ - `agentpack learn --feedback`, `--skills`, and `--drills` close the loop from
62
+ a task summary to skill memory and next-practice prompts.
63
+ - `agentpack dev-check` and `agentpack release-check` now print bounded failure
64
+ excerpts, so CI shows the failing test instead of only a red stage name.
65
+
33
66
  ## Before vs After
34
67
 
35
68
  Without AgentPack, a cold coding-agent session often starts with manual repo orientation:
@@ -177,6 +210,11 @@ agentpack learn --feedback helpful --feedback-target "skill:CLI design" --feedba
177
210
 
178
211
  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
212
 
213
+ Use `--dashboard` when a developer wants an IDE-friendly review surface. Use
214
+ `--team-export` when the useful lesson should be shared without publishing a
215
+ personal skill history. Use `--ci` to fail a workflow when the generated
216
+ learning is too generic or lacks changed-file evidence.
217
+
180
218
  ## Agent Setup
181
219
 
182
220
  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 +252,15 @@ Generated instructions keep thread mode explicit. They recommend `AGENTPACK_THRE
214
252
  default_mode = "balanced"
215
253
  default_budget = 40000
216
254
 
255
+ [context_lite]
256
+ budget = 8000
257
+
217
258
  [agents.generic]
218
259
  output = ".agentpack/context.md"
219
260
  ```
220
261
 
262
+ 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.
263
+
221
264
  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
265
 
223
266
  Use scoring weights only after measuring a real miss:
@@ -375,6 +418,8 @@ AgentPack writes local artifacts under `.agentpack/`:
375
418
  | `.agentpack/agent-lessons.md` | compact repo-specific lessons injected into future packs |
376
419
  | `.agentpack/learning.prompt.md` | optional source-backed prompt for external LLM refinement |
377
420
  | `.agentpack/pr-learning-comment.md` | optional PR-comment-ready learning summary |
421
+ | `.agentpack/learning-dashboard.html` | optional static dashboard from `agentpack learn --dashboard` |
422
+ | `.agentpack/team-lessons.md` | optional shared lesson export from `agentpack learn --team-export` |
378
423
  | `.agentpack/learning-feedback.jsonl` | optional local helpful/not-helpful feedback records |
379
424
  | `.agentpack/pack_metadata.json` | freshness and pack metadata |
380
425
  | `.agentpack/cache/` | offline file summaries keyed by hash |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentpack-cli"
3
- version = "0.3.14"
3
+ version = "0.3.16"
4
4
  description = "Local MCP context router for Claude Code, Codex, Cursor, and AI coding agents."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -24,6 +24,7 @@ dependencies = [
24
24
  "pydantic>=2.0.0",
25
25
  "tomli-w>=1.0.0",
26
26
  "tiktoken>=0.7.0",
27
+ "watchdog>=4.0.0",
27
28
  "tomli>=2.0.0; python_version < '3.11'"
28
29
  ]
29
30
 
@@ -1,3 +1,3 @@
1
1
  """AgentPack — task-aware context packing for AI coding agents."""
2
2
 
3
- __version__ = "0.3.14"
3
+ __version__ = "0.3.16"
@@ -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.budget if request.budget > 0 else cfg.context.default_budget
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 == "minimal":
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 == "minimal" else 6)
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 == "minimal" else 16)
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 == "minimal" else 1)
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: