@event4u/agent-config 3.3.0 → 4.1.0

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 (585) hide show
  1. package/.agent-src/README.md +2 -2
  2. package/.agent-src/commands/agent-handoff.md +31 -2
  3. package/.agent-src/commands/agent-status.md +5 -5
  4. package/.agent-src/commands/agents/audit.md +8 -8
  5. package/.agent-src/commands/agents/init.md +25 -1
  6. package/.agent-src/commands/agents/optimize.md +3 -3
  7. package/.agent-src/commands/agents/user.md +1 -1
  8. package/.agent-src/commands/agents.md +1 -1
  9. package/.agent-src/commands/analyze-reference-repo.md +1 -1
  10. package/.agent-src/commands/check-current-md.md +8 -8
  11. package/.agent-src/commands/{compress.md → condense.md} +55 -55
  12. package/.agent-src/commands/context/create.md +7 -4
  13. package/.agent-src/commands/context/refactor.md +3 -1
  14. package/.agent-src/commands/feature/dev.md +1 -1
  15. package/.agent-src/commands/feature/explore.md +1 -1
  16. package/.agent-src/commands/feature/plan.md +10 -8
  17. package/.agent-src/commands/feature/refactor.md +3 -1
  18. package/.agent-src/commands/feature/roadmap.md +7 -4
  19. package/.agent-src/commands/fix/portability.md +3 -3
  20. package/.agent-src/commands/fix/refs.md +4 -4
  21. package/.agent-src/commands/ghostwriter.md +2 -2
  22. package/.agent-src/commands/memory/learn-low-impact.md +3 -3
  23. package/.agent-src/commands/module/explore.md +34 -8
  24. package/.agent-src/commands/optimize/agents-dir.md +9 -7
  25. package/.agent-src/commands/optimize/augmentignore.md +2 -2
  26. package/.agent-src/commands/optimize/skills.md +9 -9
  27. package/.agent-src/commands/post-as.md +1 -1
  28. package/.agent-src/commands/project-analyze.md +2 -2
  29. package/.agent-src/commands/project-health.md +3 -2
  30. package/.agent-src/commands/research/deep.md +1 -1
  31. package/.agent-src/commands/research/report.md +1 -1
  32. package/.agent-src/commands/research.md +1 -1
  33. package/.agent-src/commands/roadmap/ai-council.md +1 -1
  34. package/.agent-src/commands/roadmap/create.md +9 -4
  35. package/.agent-src/commands/rule-compliance-audit.md +1 -1
  36. package/.agent-src/commands/upstream-contribute.md +14 -14
  37. package/.agent-src/commands/video/from-script.md +1 -1
  38. package/.agent-src/commands/video/scene.md +1 -1
  39. package/.agent-src/commands/video/stitch.md +1 -1
  40. package/.agent-src/commands/video/storyboard.md +1 -1
  41. package/.agent-src/commands/video.md +1 -1
  42. package/.agent-src/contexts/augment-infrastructure.md +1 -1
  43. package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
  44. package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
  45. package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
  46. package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
  47. package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
  48. package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  49. package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
  50. package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
  51. package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
  52. package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
  53. package/.agent-src/contexts/documentation-hierarchy.md +14 -7
  54. package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
  55. package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
  56. package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
  57. package/.agent-src/contexts/override-system.md +5 -5
  58. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  59. package/.agent-src/personas/advisors/first-principles.md +1 -1
  60. package/.agent-src/personas/hollywood-director.md +1 -1
  61. package/.agent-src/rules/architecture.md +5 -1
  62. package/.agent-src/rules/augment-edit-discipline.md +5 -5
  63. package/.agent-src/rules/augment-source-of-truth.md +15 -15
  64. package/.agent-src/rules/commit-conventions.md +1 -1
  65. package/.agent-src/rules/commit-policy.md +10 -0
  66. package/.agent-src/rules/domain-adoption-policy.md +3 -3
  67. package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
  68. package/.agent-src/rules/finance-safety-floor.md +1 -1
  69. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
  70. package/.agent-src/rules/git-history-discipline.md +1 -1
  71. package/.agent-src/rules/improve-before-implement.md +2 -2
  72. package/.agent-src/rules/language-and-tone.md +2 -2
  73. package/.agent-src/rules/media-governance-routing.md +5 -5
  74. package/.agent-src/rules/no-attribution-footers.md +1 -0
  75. package/.agent-src/rules/no-cheap-questions.md +3 -0
  76. package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
  77. package/.agent-src/rules/no-pr-progress-comments.md +118 -0
  78. package/.agent-src/rules/no-roadmap-references.md +3 -3
  79. package/.agent-src/rules/non-destructive-by-default.md +1 -1
  80. package/.agent-src/rules/persona-governance.md +3 -3
  81. package/.agent-src/rules/preservation-guard.md +15 -15
  82. package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
  83. package/.agent-src/rules/rule-type-governance.md +1 -1
  84. package/.agent-src/rules/skill-quality.md +1 -1
  85. package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
  86. package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
  87. package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
  88. package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
  89. package/.agent-src/skills/check-refs/SKILL.md +2 -2
  90. package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
  91. package/.agent-src/skills/command-writing/SKILL.md +19 -19
  92. package/.agent-src/skills/comp-banding/SKILL.md +1 -1
  93. package/.agent-src/skills/condense-memory/SKILL.md +131 -0
  94. package/.agent-src/skills/context-authoring/SKILL.md +2 -2
  95. package/.agent-src/skills/context-document/SKILL.md +5 -3
  96. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
  97. package/.agent-src/skills/description-assist/SKILL.md +2 -2
  98. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  99. package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
  100. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
  101. package/.agent-src/skills/lint-skills/SKILL.md +3 -3
  102. package/.agent-src/skills/md-language-check/SKILL.md +2 -2
  103. package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
  104. package/.agent-src/skills/module-management/SKILL.md +166 -94
  105. package/.agent-src/skills/override-management/SKILL.md +1 -1
  106. package/.agent-src/skills/persona-writing/SKILL.md +5 -5
  107. package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
  108. package/.agent-src/skills/project-docs/SKILL.md +6 -4
  109. package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
  110. package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
  111. package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
  112. package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
  113. package/.agent-src/skills/rule-writing/SKILL.md +18 -18
  114. package/.agent-src/skills/script-writing/SKILL.md +1 -1
  115. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
  116. package/.agent-src/skills/skill-management/SKILL.md +21 -21
  117. package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
  118. package/.agent-src/skills/skill-writing/SKILL.md +8 -8
  119. package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
  120. package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
  121. package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
  122. package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
  123. package/.agent-src/templates/AGENTS.md +1 -0
  124. package/.agent-src/templates/agent-settings.md +24 -13
  125. package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
  126. package/.agent-src/templates/command.md +5 -5
  127. package/.agent-src/templates/contexts.md +1 -1
  128. package/.agent-src/templates/copilot-instructions.md +8 -8
  129. package/.agent-src/templates/features.md +1 -1
  130. package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
  131. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
  132. package/.agent-src/templates/persona.md +2 -2
  133. package/.agent-src/templates/roadmaps.md +1 -1
  134. package/.agent-src/templates/rule.md +13 -13
  135. package/.agent-src/templates/scripts/memory_lookup.py +1 -1
  136. package/.agent-src/templates/scripts/memory_status.py +2 -2
  137. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
  138. package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
  139. package/.agent-src/templates/skill-archive-note.md +5 -5
  140. package/.agent-src/templates/skill.md +1 -1
  141. package/.claude-plugin/marketplace.json +4 -4
  142. package/AGENTS.md +16 -17
  143. package/CHANGELOG.md +181 -3
  144. package/CONTRIBUTING.md +31 -12
  145. package/README.md +18 -10
  146. package/config/agent-settings.template.yml +22 -2
  147. package/config/discovery/unassigned-artefacts.yml +24 -24
  148. package/config/profiles/full.ini +1 -1
  149. package/dist/cli/agent-config.js +52 -3
  150. package/dist/cli/agent-config.js.map +1 -1
  151. package/dist/cli/commands/uiServe.js +9 -0
  152. package/dist/cli/commands/uiServe.js.map +1 -1
  153. package/dist/cli/registry.js +2 -1
  154. package/dist/cli/registry.js.map +1 -1
  155. package/dist/discovery/deprecation-report.md +1 -1
  156. package/dist/discovery/discovery-manifest.json +649 -606
  157. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  158. package/dist/discovery/discovery-manifest.summary.md +4 -4
  159. package/dist/discovery/orphan-report.md +1 -1
  160. package/dist/discovery/packs.json +439 -437
  161. package/dist/discovery/trust-report.md +5 -5
  162. package/dist/discovery/workspaces.json +450 -448
  163. package/dist/install/apply.js +238 -0
  164. package/dist/install/apply.js.map +1 -0
  165. package/dist/install/atomic.js +92 -0
  166. package/dist/install/atomic.js.map +1 -0
  167. package/dist/install/bridges/augment.js +20 -0
  168. package/dist/install/bridges/augment.js.map +1 -0
  169. package/dist/install/bridges/claude.js +44 -0
  170. package/dist/install/bridges/claude.js.map +1 -0
  171. package/dist/install/bridges/cline.js +69 -0
  172. package/dist/install/bridges/cline.js.map +1 -0
  173. package/dist/install/bridges/copilot.js +28 -0
  174. package/dist/install/bridges/copilot.js.map +1 -0
  175. package/dist/install/bridges/cursor.js +34 -0
  176. package/dist/install/bridges/cursor.js.map +1 -0
  177. package/dist/install/bridges/gemini.js +39 -0
  178. package/dist/install/bridges/gemini.js.map +1 -0
  179. package/dist/install/bridges/index.js +88 -0
  180. package/dist/install/bridges/index.js.map +1 -0
  181. package/dist/install/bridges/marker-content.js +153 -0
  182. package/dist/install/bridges/marker-content.js.map +1 -0
  183. package/dist/install/bridges/markers.js +42 -0
  184. package/dist/install/bridges/markers.js.map +1 -0
  185. package/dist/install/bridges/types.js +31 -0
  186. package/dist/install/bridges/types.js.map +1 -0
  187. package/dist/install/bridges/vscode.js +26 -0
  188. package/dist/install/bridges/vscode.js.map +1 -0
  189. package/dist/install/bridges/windsurf.js +35 -0
  190. package/dist/install/bridges/windsurf.js.map +1 -0
  191. package/dist/install/conflict.js +196 -0
  192. package/dist/install/conflict.js.map +1 -0
  193. package/dist/install/detect.js +218 -0
  194. package/dist/install/detect.js.map +1 -0
  195. package/dist/install/paths.js +82 -0
  196. package/dist/install/paths.js.map +1 -0
  197. package/dist/install/plan.js +157 -0
  198. package/dist/install/plan.js.map +1 -0
  199. package/dist/install/txlog.js +140 -0
  200. package/dist/install/txlog.js.map +1 -0
  201. package/dist/install/types.js +19 -0
  202. package/dist/install/types.js.map +1 -0
  203. package/dist/install/wizard-plan.js +184 -0
  204. package/dist/install/wizard-plan.js.map +1 -0
  205. package/dist/mcp/registry-manifest.json +4 -4
  206. package/dist/router.json +67 -19
  207. package/dist/server/app.js +6 -0
  208. package/dist/server/app.js.map +1 -1
  209. package/dist/server/routes/install.js +547 -0
  210. package/dist/server/routes/install.js.map +1 -0
  211. package/dist/server/routes/wizard.js +301 -6
  212. package/dist/server/routes/wizard.js.map +1 -1
  213. package/dist/server/routes/workspace.js +396 -0
  214. package/dist/server/routes/workspace.js.map +1 -0
  215. package/dist/server/schemas/settings.js +4 -3
  216. package/dist/server/schemas/settings.js.map +1 -1
  217. package/dist/ui/assets/index-BXZILUxe.css +1 -0
  218. package/dist/ui/assets/index-DLEuEW1V.js +35 -0
  219. package/dist/ui/assets/index-DLEuEW1V.js.map +1 -0
  220. package/dist/ui/index.html +2 -2
  221. package/docs/MIGRATION.md +1 -1
  222. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  223. package/docs/adrs/router/0001-three-tier-routing.md +4 -4
  224. package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
  225. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
  226. package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
  227. package/docs/adrs/telegraph/README.md +9 -0
  228. package/docs/architecture/augment-projection.md +4 -4
  229. package/docs/architecture/claude-bundle.md +1 -1
  230. package/docs/architecture/current-onboard-baseline.md +3 -3
  231. package/docs/architecture/multi-tool-projection.md +10 -10
  232. package/docs/architecture/source-projection.md +27 -27
  233. package/docs/architecture.md +19 -15
  234. package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
  235. package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
  236. package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
  237. package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
  238. package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
  239. package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
  240. package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
  241. package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
  242. package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
  243. package/docs/benchmark.md +65 -0
  244. package/docs/benchmarks.md +16 -16
  245. package/docs/catalog.md +17 -15
  246. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  247. package/docs/contracts/STABILITY.md +2 -2
  248. package/docs/contracts/adoption-signal-floor.md +110 -0
  249. package/docs/contracts/adr-chat-history-split.md +4 -4
  250. package/docs/contracts/adr-command-suggestion.md +4 -4
  251. package/docs/contracts/adr-gtm-context-spine.md +1 -1
  252. package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
  253. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  254. package/docs/contracts/adr-layout.md +2 -2
  255. package/docs/contracts/adr-product-ui-track.md +10 -10
  256. package/docs/contracts/adr-user-types-axis.md +3 -3
  257. package/docs/contracts/adr-wing4-context-spine.md +1 -1
  258. package/docs/contracts/agent-memory-contract.md +3 -3
  259. package/docs/contracts/agents-md-tech-stack.md +2 -2
  260. package/docs/contracts/ai-council-config.md +2 -2
  261. package/docs/contracts/at-rest-encryption.md +4 -0
  262. package/docs/contracts/audit-log-v1.md +1 -1
  263. package/docs/contracts/benchmark-ab-contract.md +101 -0
  264. package/docs/contracts/benchmark-corpus-spec.md +1 -1
  265. package/docs/contracts/branch-protection-policy.md +98 -0
  266. package/docs/contracts/ci-cost-budget.md +106 -0
  267. package/docs/contracts/ci-green-floor.md +141 -0
  268. package/docs/contracts/command-clusters.md +6 -6
  269. package/docs/contracts/command-surface-tiers.md +2 -2
  270. package/docs/contracts/command-taxonomy.md +2 -2
  271. package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
  272. package/docs/contracts/config-presets.md +1 -1
  273. package/docs/contracts/context-paths.md +3 -3
  274. package/docs/contracts/context-spine.md +1 -1
  275. package/docs/contracts/cost-summary-schema.md +12 -12
  276. package/docs/contracts/cross-wing-handoff.md +4 -4
  277. package/docs/contracts/daily-workspace.md +4 -0
  278. package/docs/contracts/decision-trace-v1.md +2 -2
  279. package/docs/contracts/discovery-manifest.md +4 -4
  280. package/docs/contracts/explain-modes.md +4 -0
  281. package/docs/contracts/file-ownership-matrix.json +3493 -3318
  282. package/docs/contracts/file-ownership-matrix.md +3 -3
  283. package/docs/contracts/frontmatter-contract.md +4 -4
  284. package/docs/contracts/ghostwriter-schema.md +3 -3
  285. package/docs/contracts/gui-wizard.md +1 -1
  286. package/docs/contracts/harness-expectations.md +123 -0
  287. package/docs/contracts/host-agent-protocol.md +4 -0
  288. package/docs/contracts/implement-ticket-flow.md +9 -9
  289. package/docs/contracts/install-scopes.md +77 -0
  290. package/docs/contracts/iron-law-overrides.txt +1 -1
  291. package/docs/contracts/kernel-membership.md +26 -26
  292. package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
  293. package/docs/contracts/linter-structural-model.md +2 -2
  294. package/docs/contracts/load-context-budget-model.md +4 -4
  295. package/docs/contracts/load-context-schema.md +13 -13
  296. package/docs/contracts/local-analytics.md +4 -0
  297. package/docs/contracts/local-knowledge-ingestion.md +1 -1
  298. package/docs/contracts/mcp-cloud-scope.md +2 -2
  299. package/docs/contracts/mcp-phase-1-scope.md +3 -3
  300. package/docs/contracts/measurement-baseline.md +5 -5
  301. package/docs/contracts/mental-models.md +30 -30
  302. package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
  303. package/docs/contracts/namespace.md +4 -4
  304. package/docs/contracts/orchestration-dsl-v1.md +7 -7
  305. package/docs/contracts/package-self-orientation.md +12 -12
  306. package/docs/contracts/persona-schema.md +6 -6
  307. package/docs/contracts/pilot/language-and-tone.md +1 -1
  308. package/docs/contracts/plain-language-surface.md +117 -0
  309. package/docs/contracts/profile-system.md +3 -3
  310. package/docs/contracts/release-pr-gating.md +103 -0
  311. package/docs/contracts/role-experience.md +3 -3
  312. package/docs/contracts/rule-classification.md +13 -13
  313. package/docs/contracts/rule-interactions.md +4 -4
  314. package/docs/contracts/rule-interactions.yml +30 -30
  315. package/docs/contracts/rule-priority-hierarchy.md +13 -13
  316. package/docs/contracts/rule-router.md +2 -2
  317. package/docs/contracts/safety-model.md +1 -1
  318. package/docs/contracts/skill-distribution-channels.md +61 -0
  319. package/docs/contracts/skill-domains.md +2 -2
  320. package/docs/contracts/smoke-contracts.md +5 -5
  321. package/docs/contracts/telegraph-telemetry.md +83 -0
  322. package/docs/contracts/trust-and-safety.md +5 -5
  323. package/docs/contracts/ui-stack-extension.md +7 -7
  324. package/docs/contracts/ui-track-flow.md +9 -9
  325. package/docs/contracts/user-type-schema.md +4 -4
  326. package/docs/contracts/workflow-packs.md +4 -4
  327. package/docs/contracts/workspace-documents.md +4 -0
  328. package/docs/customization.md +28 -8
  329. package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
  330. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
  331. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
  332. package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
  333. package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
  334. package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
  335. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
  336. package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
  337. package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
  338. package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
  339. package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
  340. package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
  341. package/docs/decisions/ADR-021-deployment-shape.md +1 -1
  342. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
  343. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
  344. package/docs/decisions/ADR-028-root-layout.md +7 -7
  345. package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
  346. package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
  347. package/docs/deploy/team-deployment-posture.md +20 -0
  348. package/docs/development.md +17 -17
  349. package/docs/distribution/registries.md +32 -0
  350. package/docs/distribution/registry-submissions.md +85 -0
  351. package/docs/distribution/telemetry-schema.md +1 -1
  352. package/docs/getting-started-by-role.md +45 -3
  353. package/docs/getting-started.md +2 -2
  354. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  355. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  356. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  357. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  358. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  359. package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
  360. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  361. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  362. package/docs/guidelines/agent-infra/layered-settings.md +56 -2
  363. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  364. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
  365. package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
  366. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  367. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
  368. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  369. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  370. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  371. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
  372. package/docs/guidelines/augment-portability-patterns.md +4 -4
  373. package/docs/guidelines/cross-role-handoff.md +2 -2
  374. package/docs/guidelines/php/php-coding-patterns.md +1 -1
  375. package/docs/guidelines/prompt-templates.md +6 -6
  376. package/docs/maintainers/dev-mode.md +1 -1
  377. package/docs/mcp.md +1 -1
  378. package/docs/parity/bench.json +3 -3
  379. package/docs/parity/ruflo.md +2 -2
  380. package/docs/profiles.md +11 -11
  381. package/docs/quality.md +11 -11
  382. package/docs/safety.md +3 -3
  383. package/docs/setup/mcp-client-config.md +1 -1
  384. package/docs/setup/mcp-r2-bootstrap.md +1 -1
  385. package/docs/setup/mcp-server-docker.md +3 -3
  386. package/docs/setup/per-ide/windsurf.md +1 -1
  387. package/docs/skills-catalog.md +8 -7
  388. package/docs/troubleshooting.md +1 -1
  389. package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
  390. package/llms.txt +7 -6
  391. package/package.json +1 -1
  392. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  393. package/scripts/_archive/README.md +2 -2
  394. package/scripts/_archive/_backfill_skill_domains.py +3 -3
  395. package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
  396. package/scripts/_archive/_p43_bodies.py +10 -10
  397. package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
  398. package/scripts/_archive/_p4_migrate.py +7 -7
  399. package/scripts/_archive/_phase2_shim_helper.py +1 -1
  400. package/scripts/_archive/_pilot_council_question.py +5 -5
  401. package/scripts/_cli/explain_last/inputs.py +1 -1
  402. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  403. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  404. package/scripts/_lib/agent_settings.py +195 -1
  405. package/scripts/_lib/agent_src.py +19 -19
  406. package/scripts/_lib/bench_ab_cache.py +162 -0
  407. package/scripts/_lib/bench_ab_scoring.py +209 -0
  408. package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
  409. package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
  410. package/scripts/_lib/claude_desktop_bundler.py +5 -5
  411. package/scripts/_lib/module_detection.py +223 -0
  412. package/scripts/_lib/scope_guard.sh +162 -0
  413. package/scripts/_phase4_bucket.py +3 -3
  414. package/scripts/_pilot_measure.py +4 -4
  415. package/scripts/_tmp_scan_framework_leakage.py +1 -1
  416. package/scripts/adoption_report.py +195 -0
  417. package/scripts/adoption_snapshot.py +219 -0
  418. package/scripts/adoption_status.py +166 -0
  419. package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  420. package/scripts/ai_council/advisors.py +5 -5
  421. package/scripts/ai_council/compile_corpus.py +1 -1
  422. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
  423. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
  424. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
  425. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
  426. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
  427. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
  428. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
  429. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
  430. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
  431. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
  432. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
  433. package/scripts/annotate_discovery.py +13 -13
  434. package/scripts/apply_modules_config.py +290 -0
  435. package/scripts/audit_adr_coverage.py +2 -2
  436. package/scripts/audit_auto_rules.py +2 -2
  437. package/scripts/audit_cloud_compatibility.py +3 -3
  438. package/scripts/audit_command_surface.py +9 -9
  439. package/scripts/audit_likelihood.py +2 -2
  440. package/scripts/audit_user_type_axis.py +2 -2
  441. package/scripts/bench_ab_cache_dispatch.py +68 -0
  442. package/scripts/bench_ab_clone.py +170 -0
  443. package/scripts/bench_ab_diff.py +227 -0
  444. package/scripts/bench_ab_integrity.py +143 -0
  445. package/scripts/bench_ab_run.py +235 -0
  446. package/scripts/bench_ab_task_runner.py +369 -0
  447. package/scripts/bench_ab_tracka_run.py +202 -0
  448. package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
  449. package/scripts/bench_run.py +33 -33
  450. package/scripts/bench_runner.py +2 -2
  451. package/scripts/bootstrap.sh +99 -0
  452. package/scripts/build_cloud_bundle.py +6 -6
  453. package/scripts/build_discovery_manifest.py +7 -7
  454. package/scripts/build_linear_digest.py +3 -3
  455. package/scripts/build_rule_trigger_matrix.py +8 -8
  456. package/scripts/chat_history.py +5 -5
  457. package/scripts/check_always_budget.py +11 -5
  458. package/scripts/check_augment_description_cap.py +3 -3
  459. package/scripts/check_cluster_patterns.py +2 -2
  460. package/scripts/check_command_count_messaging.py +3 -3
  461. package/scripts/{check_compression.py → check_condensation.py} +34 -34
  462. package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
  463. package/scripts/check_context_paths.py +7 -7
  464. package/scripts/check_council_layout.py +2 -2
  465. package/scripts/check_council_references.py +9 -9
  466. package/scripts/check_iron_law_prominence.py +2 -2
  467. package/scripts/check_kernel_rule_bundle.py +2 -2
  468. package/scripts/check_module_management_neutral.py +149 -0
  469. package/scripts/check_no_roadmap_refs.py +9 -9
  470. package/scripts/check_portability.py +3 -3
  471. package/scripts/check_public_catalog_links.py +4 -4
  472. package/scripts/check_references.py +7 -6
  473. package/scripts/check_release_pr_shape.py +112 -0
  474. package/scripts/check_reply_consistency.py +3 -3
  475. package/scripts/check_safety_floor_untouched.py +1 -1
  476. package/scripts/check_template_pin_drift.py +5 -5
  477. package/scripts/check_token_optimizer_freshness.py +3 -3
  478. package/scripts/ci_status.py +301 -0
  479. package/scripts/ci_time_ratio.py +1 -1
  480. package/scripts/cleanup_other_scope.sh +146 -0
  481. package/scripts/compile_router.py +10 -10
  482. package/scripts/{compress.py → condense.py} +64 -64
  483. package/scripts/condense.sh +18 -0
  484. package/scripts/{compress_memory.py → condense_memory.py} +33 -33
  485. package/scripts/config/presets.py +2 -2
  486. package/scripts/config/profiles.py +1 -1
  487. package/scripts/cost_by_conversation.py +3 -3
  488. package/scripts/cost_summary.py +7 -7
  489. package/scripts/count_token_optimizer_usage.sh +1 -1
  490. package/scripts/gen_discovery_baseline.py +5 -5
  491. package/scripts/generate_index.py +6 -6
  492. package/scripts/generate_ownership_matrix.py +10 -10
  493. package/scripts/generate_pack_manifests.py +1 -1
  494. package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
  495. package/scripts/install +3 -3
  496. package/scripts/install-hooks.sh +6 -6
  497. package/scripts/install.py +76 -11
  498. package/scripts/install.sh +187 -1
  499. package/scripts/inventory_frontmatter.py +2 -2
  500. package/scripts/iron_law_sha.py +3 -3
  501. package/scripts/lint_agents_layout.py +14 -7
  502. package/scripts/lint_agents_md.py +4 -4
  503. package/scripts/lint_archived_skills.py +3 -3
  504. package/scripts/lint_artefact_frontmatter.py +2 -2
  505. package/scripts/lint_bench_ab.py +172 -0
  506. package/scripts/lint_bench_corpus.py +1 -1
  507. package/scripts/lint_command_tiers.py +5 -5
  508. package/scripts/lint_context_spine_usage.py +1 -1
  509. package/scripts/lint_framework_leakage.py +7 -7
  510. package/scripts/lint_framework_leakage_allowlist.json +144 -84
  511. package/scripts/lint_ghostwriter_source.py +3 -3
  512. package/scripts/lint_handoffs.py +1 -1
  513. package/scripts/lint_load_context.py +11 -11
  514. package/scripts/lint_media_policy_linkage.py +5 -5
  515. package/scripts/lint_namespace.py +1 -1
  516. package/scripts/lint_no_new_atomic_commands.py +2 -2
  517. package/scripts/lint_orchestration_dsl.py +1 -1
  518. package/scripts/lint_pack_boundaries.py +2 -2
  519. package/scripts/lint_persona_governance.py +4 -4
  520. package/scripts/lint_role_experiences.py +237 -0
  521. package/scripts/lint_rule_interactions.py +2 -2
  522. package/scripts/lint_rule_tiers.py +1 -1
  523. package/scripts/lint_trust_coherence.py +2 -2
  524. package/scripts/mcp_registry_submit.sh +187 -0
  525. package/scripts/mcp_server/tools.py +1 -1
  526. package/scripts/measure_frugality_savings.py +10 -10
  527. package/scripts/measure_patterns.py +1 -1
  528. package/scripts/measure_projection_bytes.py +5 -5
  529. package/scripts/measure_rule_budget.py +3 -3
  530. package/scripts/measure_skill_reduction.py +1 -1
  531. package/scripts/memory_lookup.py +1 -1
  532. package/scripts/memory_status.py +2 -2
  533. package/scripts/migrate_command_suggestions.py +3 -3
  534. package/scripts/mine_session.py +1 -1
  535. package/scripts/move_artefact.py +3 -3
  536. package/scripts/new_skill.py +2 -2
  537. package/scripts/pack_mcp_content.py +9 -9
  538. package/scripts/plan_physical_move.py +6 -6
  539. package/scripts/print_required_checks.py +196 -0
  540. package/scripts/probe_skill_registration.py +413 -0
  541. package/scripts/propose_modules_config.py +145 -0
  542. package/scripts/prototype_lint_contradictions.py +1 -1
  543. package/scripts/recruit_preflight.sh +152 -0
  544. package/scripts/refine_ticket_detect.py +3 -3
  545. package/scripts/release.py +20 -0
  546. package/scripts/render_benchmark_md.py +308 -0
  547. package/scripts/roadmap_progress_hook.py +1 -1
  548. package/scripts/run_skill_evals.py +2 -2
  549. package/scripts/runtime_registry.py +4 -4
  550. package/scripts/schemas/command.schema.json +4 -4
  551. package/scripts/schemas/rule.schema.json +5 -5
  552. package/scripts/schemas/skill.schema.json +3 -3
  553. package/scripts/schemas/user-type.schema.json +1 -1
  554. package/scripts/score_skill_selection.py +1 -1
  555. package/scripts/skill_collision_clusters.py +2 -2
  556. package/scripts/skill_linter.py +81 -81
  557. package/scripts/skill_overlap.py +5 -5
  558. package/scripts/skill_tools/audit_persona_coverage.py +2 -2
  559. package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
  560. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  561. package/scripts/skill_tools/score_skill_relevance.py +1 -1
  562. package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
  563. package/scripts/skill_trigger_eval.py +3 -3
  564. package/scripts/smoke/kernel.sh +7 -1
  565. package/scripts/smoke/router.sh +5 -5
  566. package/scripts/smoke/skills.sh +1 -1
  567. package/scripts/smoke_quickstart.py +1 -1
  568. package/scripts/snapshot_agent_outputs.py +3 -3
  569. package/scripts/spotcheck_thin_root.py +1 -1
  570. package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
  571. package/scripts/update_counts.py +1 -1
  572. package/scripts/validate_decision_engine.py +1 -1
  573. package/scripts/validate_frontmatter.py +1 -1
  574. package/scripts/validate_safe_paths.py +3 -3
  575. package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
  576. package/scripts/verify_roadmap_closure.py +6 -6
  577. package/templates/consumer-settings/ONBOARDING.md +41 -0
  578. package/.agent-src/commands/install-via-agent.md +0 -129
  579. package/.agent-src/skills/compress-memory/SKILL.md +0 -131
  580. package/dist/ui/assets/index-D-DY1ywI.js +0 -35
  581. package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
  582. package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
  583. package/docs/adrs/caveman/README.md +0 -9
  584. package/docs/contracts/caveman-telemetry.md +0 -83
  585. package/scripts/compress.sh +0 -18
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- Agent-config sync — compress .agent-src.uncompressed/ → .agent-src/
3
+ Agent-config sync — condense .agent-src.uncondensed/ → .agent-src/
4
4
  and project .agent-src/ → .augment/ (copies for rules by default,
5
5
  symlinks for the rest; opt into rule symlinks via
6
6
  augment.rules_use_symlinks in .agent-settings.yml).
7
7
 
8
- Copies non-.md files as-is. Lists .md files that need compression (done by the
8
+ Copies non-.md files as-is. Lists .md files that need condensation (done by the
9
9
  Augment agent interactively). Tracks SHA-256 hashes of source files to detect
10
- changes since last compression.
10
+ changes since last condensation.
11
11
 
12
12
  Usage:
13
- python scripts/compress.py # sync all non-.md files + cleanup + project
14
- python scripts/compress.py --list # list .md files needing compression
15
- python scripts/compress.py --changed # list only .md files changed since last compression
16
- python scripts/compress.py --check # check if directories are in sync
17
- python scripts/compress.py --mark-done <relative-path> # mark file as compressed (update hash)
18
- python scripts/compress.py --mark-all-done # mark ALL .md files as compressed
19
- python scripts/compress.py --project-augment # rebuild .augment/ projection
13
+ python scripts/condense.py # sync all non-.md files + cleanup + project
14
+ python scripts/condense.py --list # list .md files needing condensation
15
+ python scripts/condense.py --changed # list only .md files changed since last condensation
16
+ python scripts/condense.py --check # check if directories are in sync
17
+ python scripts/condense.py --mark-done <relative-path> # mark file as condensed (update hash)
18
+ python scripts/condense.py --mark-all-done # mark ALL .md files as condensed
19
+ python scripts/condense.py --project-augment # rebuild .augment/ projection
20
20
  """
21
21
 
22
22
  from __future__ import annotations
@@ -42,19 +42,19 @@ PROJECT_ROOT = Path(__file__).resolve().parent.parent
42
42
  # Legacy single-root anchor — kept for backward compatibility with callers
43
43
  # that pass it explicitly. Multi-root iteration (post-ADR-017 physical
44
44
  # move) goes through `_lib.agent_src` helpers.
45
- SOURCE_DIR = PROJECT_ROOT / ".agent-src.uncompressed"
45
+ SOURCE_DIR = PROJECT_ROOT / ".agent-src.uncondensed"
46
46
  TARGET_DIR = PROJECT_ROOT / ".agent-src"
47
47
  AUGMENT_DIR = PROJECT_ROOT / ".augment"
48
- HASH_FILE = PROJECT_ROOT / ".compression-hashes.json"
48
+ HASH_FILE = PROJECT_ROOT / "internal" / ".condensation-hashes.json"
49
49
  SETTINGS_FILE = PROJECT_ROOT / ".agent-settings.yml"
50
50
 
51
51
 
52
52
  def _iter_sources():
53
53
  """Yield (physical_path, logical_relpath) for every source artefact.
54
54
 
55
- Wraps `_lib.agent_src.iter_all_sources` so the compressor walks every
56
- active source root (legacy `.agent-src.uncompressed/` plus any
57
- `packages/*/.agent-src.uncompressed/`) and keys outputs by the
55
+ Wraps `_lib.agent_src.iter_all_sources` so the condenseor walks every
56
+ active source root (legacy `.agent-src.uncondensed/` plus any
57
+ `packages/*/.agent-src.uncondensed/`) and keys outputs by the
58
58
  logical relative path that survives the physical move (ADR-017).
59
59
  """
60
60
  yield from iter_all_sources()
@@ -69,7 +69,7 @@ def _any_source_root_exists() -> bool:
69
69
  """True if at least one artefact source root contains files."""
70
70
  return bool(artefact_roots())
71
71
 
72
- # Self-projection tool toggle — see .agent-tools.yml. When the file is
72
+ # Self-projection tool toggle — see agents/.agent-tools.yml. When the file is
73
73
  # absent (e.g. tests run in tmp dirs, consumer projects), `_active_tools`
74
74
  # returns ``None`` which is treated as "emit every tool".
75
75
  _ALL_TOOLS = frozenset({
@@ -81,11 +81,11 @@ _ALL_TOOLS = frozenset({
81
81
  def _active_tools() -> frozenset[str] | None:
82
82
  """Return the set of active self-projection tools, or None for "all".
83
83
 
84
- Reads `.agent-tools.yml` relative to the current `PROJECT_ROOT` so
85
- test fixtures that monkey-patch `compress.PROJECT_ROOT` see their own
86
- (empty) project root and get the default "all tools" behaviour.
84
+ Reads `agents/.agent-tools.yml` relative to the current `PROJECT_ROOT`
85
+ so test fixtures that monkey-patch `condense.PROJECT_ROOT` see their
86
+ own (empty) project root and get the default "all tools" behaviour.
87
87
  """
88
- tools_file = PROJECT_ROOT / ".agent-tools.yml"
88
+ tools_file = PROJECT_ROOT / "agents" / ".agent-tools.yml"
89
89
  if not tools_file.exists():
90
90
  return None
91
91
  try:
@@ -103,12 +103,12 @@ def _tool_active(tool_id: str) -> bool:
103
103
  active = _active_tools()
104
104
  return True if active is None else tool_id in active
105
105
 
106
- # Files to copy as-is even if .md (not compressed by agent)
106
+ # Files to copy as-is even if .md (not condensed by agent)
107
107
  COPY_AS_IS = {"README.md"}
108
108
 
109
109
  # Directories (relative to SOURCE_DIR) whose .md content is data, not prose,
110
110
  # and must be copied verbatim. Ghostwriter fixtures carry voice_samples that
111
- # would be destroyed by caveman compression.
111
+ # would be destroyed by telegraph condensation.
112
112
  COPY_AS_IS_DIRS = frozenset({"ghostwriter"})
113
113
 
114
114
 
@@ -154,7 +154,7 @@ def file_hash(filepath: Path) -> str:
154
154
 
155
155
 
156
156
  def load_hashes() -> dict:
157
- """Load stored compression hashes from JSON file."""
157
+ """Load stored condensation hashes from JSON file."""
158
158
  if HASH_FILE.exists():
159
159
  try:
160
160
  return json.loads(HASH_FILE.read_text())
@@ -164,13 +164,13 @@ def load_hashes() -> dict:
164
164
 
165
165
 
166
166
  def save_hashes(hashes: dict) -> None:
167
- """Save compression hashes to JSON file."""
167
+ """Save condensation hashes to JSON file."""
168
168
  HASH_FILE.parent.mkdir(parents=True, exist_ok=True)
169
169
  HASH_FILE.write_text(json.dumps(hashes, indent=2, sort_keys=True) + "\n")
170
170
 
171
171
 
172
172
  def mark_done(relative_path: str) -> None:
173
- """Mark a single file as compressed by storing its current source hash.
173
+ """Mark a single file as condensed by storing its current source hash.
174
174
 
175
175
  Also runs the path rewriter on the just-written `.agent-src/<path>` so
176
176
  logical names from the source frontmatter resolve to deployment-correct
@@ -185,14 +185,14 @@ def mark_done(relative_path: str) -> None:
185
185
  hashes = load_hashes()
186
186
  hashes[relative_path] = file_hash(source_file)
187
187
  save_hashes(hashes)
188
- print(f"✅ Marked as compressed: {relative_path}")
188
+ print(f"✅ Marked as condensed: {relative_path}")
189
189
 
190
190
 
191
191
  def apply_path_rewriter(relative_path: str) -> bool:
192
192
  """Apply `_rewrite_paths` to `.agent-src/<relative_path>` in-place.
193
193
 
194
194
  Returns True if the file was modified, False otherwise. Silently
195
- returns False if the target doesn't exist (compression hasn't run
195
+ returns False if the target doesn't exist (condensation hasn't run
196
196
  yet) — `--mark-done` is also valid before content exists.
197
197
  """
198
198
  target = TARGET_DIR / relative_path
@@ -207,20 +207,20 @@ def apply_path_rewriter(relative_path: str) -> bool:
207
207
 
208
208
 
209
209
  def mark_all_done() -> None:
210
- """Mark ALL .md files as compressed (e.g. after initial full compression)."""
210
+ """Mark ALL .md files as condensed (e.g. after initial full condensation)."""
211
211
  hashes = load_hashes()
212
212
  count = 0
213
213
  for source_file, relative in _iter_sources():
214
- if not should_compress(source_file):
214
+ if not should_condense(source_file):
215
215
  continue
216
216
  hashes[relative] = file_hash(source_file)
217
217
  count += 1
218
218
  save_hashes(hashes)
219
- print(f"✅ Marked {count} files as compressed")
219
+ print(f"✅ Marked {count} files as condensed")
220
220
 
221
221
 
222
222
  def list_changed_md(source_dir: Path) -> list:
223
- """List .md files whose source hash differs from stored hash (= need recompression).
223
+ """List .md files whose source hash differs from stored hash (= need recondensation).
224
224
 
225
225
  The ``source_dir`` parameter is retained for backward compatibility but
226
226
  ignored — iteration walks every active source root (ADR-017).
@@ -229,7 +229,7 @@ def list_changed_md(source_dir: Path) -> list:
229
229
  hashes = load_hashes()
230
230
  changed = []
231
231
  for source_file, relative in _iter_sources():
232
- if not should_compress(source_file):
232
+ if not should_condense(source_file):
233
233
  continue
234
234
  current_hash = file_hash(source_file)
235
235
  stored_hash = hashes.get(relative)
@@ -262,15 +262,15 @@ def clean_stale_hashes(source_dir: Path) -> int:
262
262
 
263
263
 
264
264
 
265
- def should_compress(filepath: Path) -> bool:
266
- """Check if file should be compressed (is .md and not in copy-as-is list)."""
265
+ def should_condense(filepath: Path) -> bool:
266
+ """Check if file should be condensed (is .md and not in copy-as-is list)."""
267
267
  if filepath.suffix != ".md":
268
268
  return False
269
269
  if filepath.name in COPY_AS_IS:
270
270
  return False
271
271
  # Determine the logical relative path so the COPY_AS_IS_DIRS check
272
- # works for both legacy (`.agent-src.uncompressed/`) and post-move
273
- # (`packages/*/.agent-src.uncompressed/`) source roots.
272
+ # works for both legacy (`.agent-src.uncondensed/`) and post-move
273
+ # (`packages/*/.agent-src.uncondensed/`) source roots.
274
274
  rel_parts: tuple[str, ...] = filepath.parts
275
275
  for root in artefact_roots():
276
276
  try:
@@ -321,8 +321,8 @@ def sync_non_md(source_dir: Path, target_dir: Path) -> int:
321
321
  copied = 0
322
322
  seen: set[str] = set()
323
323
  for source_file, relative in _iter_sources():
324
- if should_compress(source_file):
325
- continue # .md files are compressed by the agent, not copied here
324
+ if should_condense(source_file):
325
+ continue # .md files are condensed by the agent, not copied here
326
326
  if relative in seen:
327
327
  continue
328
328
  seen.add(relative)
@@ -334,12 +334,12 @@ def sync_non_md(source_dir: Path, target_dir: Path) -> int:
334
334
 
335
335
 
336
336
  def list_md_files(source_dir: Path) -> list:
337
- """List all .md files that need compression by the agent."""
337
+ """List all .md files that need condensation by the agent."""
338
338
  del source_dir # multi-root: ignored, kept for signature stability
339
339
  files: list[str] = []
340
340
  seen: set[str] = set()
341
341
  for source_file, relative in _iter_sources():
342
- if not should_compress(source_file):
342
+ if not should_condense(source_file):
343
343
  continue
344
344
  if relative in seen:
345
345
  continue
@@ -402,7 +402,7 @@ USER_TYPE_TOOL_DIRS = {
402
402
  }
403
403
 
404
404
  # Map tool-projection directories to the canonical tool ID used by
405
- # `.agent-tools.yml`. Directories not in this map are always emitted.
405
+ # `agents/.agent-tools.yml`. Directories not in this map are always emitted.
406
406
  _DIR_TOOL_ID = {
407
407
  ".claude/rules": "claude-code",
408
408
  ".cursor/rules": "cursor",
@@ -415,7 +415,7 @@ _DIR_TOOL_ID = {
415
415
 
416
416
 
417
417
  def _filter_tool_dirs(mapping: dict[str, str]) -> dict[str, str]:
418
- """Drop entries whose tool ID is not active in `.agent-tools.yml`."""
418
+ """Drop entries whose tool ID is not active in `agents/.agent-tools.yml`."""
419
419
  return {
420
420
  d: p for d, p in mapping.items()
421
421
  if _tool_active(_DIR_TOOL_ID.get(d, "claude-code"))
@@ -432,7 +432,7 @@ def strip_frontmatter(content: str) -> str:
432
432
 
433
433
 
434
434
  # ── Path rewriter (P1 of road-to-path-fixes.md) ───────────────────────────
435
- # Source files use logical names that the rewriter resolves at compress
435
+ # Source files use logical names that the rewriter resolves at condense
436
436
  # time, so the shipped `.agent-src/` (and `.augment/` projection) carry
437
437
  # deployment-correct relative paths without the agent author having to
438
438
  # know how deep their file lives.
@@ -440,12 +440,12 @@ def strip_frontmatter(content: str) -> str:
440
440
  # Frontmatter rewrites:
441
441
  # load_context: / load_context_eager:
442
442
  # contexts/<area>/<file>.md (logical, preferred)
443
- # .agent-src.uncompressed/contexts/<area>/<file>.md (legacy)
443
+ # .agent-src.uncondensed/contexts/<area>/<file>.md (legacy)
444
444
  # → ../contexts/<area>/<file>.md (relative from .agent-src/rules/)
445
445
  # triggers[].path_prefix:
446
446
  # LEFT ALONE — `path_prefix:` is a literal match pattern, not a
447
447
  # file reference. Source-of-truth rules that fire on edits under
448
- # `.agent-src.uncompressed/` keep that prefix verbatim (see
448
+ # `.agent-src.uncondensed/` keep that prefix verbatim (see
449
449
  # road-to-path-fixes.md P2.2 / Modified Option 1).
450
450
  #
451
451
  # Body-link rewrites:
@@ -455,7 +455,7 @@ def strip_frontmatter(content: str) -> str:
455
455
  # Idempotent: applying twice is a no-op (rewritten patterns no longer
456
456
  # match the source patterns).
457
457
 
458
- _LEGACY_SRC_PREFIX = ".agent-src.uncompressed/"
458
+ _LEGACY_SRC_PREFIX = ".agent-src.uncondensed/"
459
459
  _PROJECTED_SRC_PREFIX = ".agent-src/"
460
460
 
461
461
  # A YAML list item under load_context*: ` - some/path.md` (optionally quoted)
@@ -513,7 +513,7 @@ def _rewrite_path_prefix_value(value: str) -> str:
513
513
  `path_prefix:` is a literal match pattern the host evaluates against
514
514
  the file the agent is editing — not a file reference. Rewriting it
515
515
  breaks the workflow it was authored for: source-of-truth rules that
516
- fire when the agent edits files under `.agent-src.uncompressed/`
516
+ fire when the agent edits files under `.agent-src.uncondensed/`
517
517
  keep that prefix verbatim. The prefix ban therefore applies only to
518
518
  `load_context:` entries and body links (see road-to-path-fixes.md
519
519
  P2.2 + the AI-Council convergence on 2026-05-06).
@@ -556,10 +556,10 @@ def _rewrite_body_links(body: str, prefix: str) -> str:
556
556
 
557
557
  # ── Human-review banner injection (Phase 5.3 / ADR-018) ───────────────────
558
558
  # Source artefacts may set `trust.human_review_required: true` in their
559
- # frontmatter. The compressor injects a short, parser-stable banner block
559
+ # frontmatter. The condenseor injects a short, parser-stable banner block
560
560
  # at the top of the projected body so every downstream surface (agent
561
561
  # memory, .augment, .claude, etc.) surfaces the gate. Idempotent — the
562
- # marker comment prevents double-injection on re-compress.
562
+ # marker comment prevents double-injection on re-condense.
563
563
 
564
564
  _HRR_BANNER_MARKER = "<!-- agent-config:human-review-banner -->"
565
565
 
@@ -1063,7 +1063,7 @@ def generate_user_type_symlinks() -> int:
1063
1063
  def generate_tools() -> None:
1064
1064
  """Generate all tool-specific directories and files.
1065
1065
 
1066
- `.agent-tools.yml` (top-level) gates per-tool emission. When the file
1066
+ `agents/.agent-tools.yml` gates per-tool emission. When the file
1067
1067
  is missing, every tool is emitted (preserves test fixtures and
1068
1068
  pre-gating behaviour). See `_active_tools()` and `_tool_active()`.
1069
1069
  """
@@ -1095,7 +1095,7 @@ def generate_tools() -> None:
1095
1095
 
1096
1096
 
1097
1097
  # ── .augment/ projection ──────────────────────────────────────────────
1098
- # The package uses .agent-src/ as the tool-agnostic compressed source of truth.
1098
+ # The package uses .agent-src/ as the tool-agnostic condensed source of truth.
1099
1099
  # .augment/ is a generated projection so that Augment Code (which reads from
1100
1100
  # .augment/) works on the package repo itself. Rules default to copies
1101
1101
  # because Augment Code historically does not load symlinked rule files;
@@ -1174,7 +1174,7 @@ def project_to_augment() -> None:
1174
1174
  # Cleanup: remove any stray top-level entries in .augment/ that are no longer projected.
1175
1175
  # `state` holds runtime state files written by hooks (onboarding-gate,
1176
1176
  # context-hygiene, …) and must survive sync — it is regenerated by
1177
- # the next hook fire, not by compress.
1177
+ # the next hook fire, not by condense.
1178
1178
  known = set(AUGMENT_SYMLINK_DIRS) | set(AUGMENT_SYMLINK_FILES) | {"rules", "state"}
1179
1179
  for item in AUGMENT_DIR.iterdir():
1180
1180
  if item.name in known:
@@ -1211,10 +1211,10 @@ def clean_tools() -> None:
1211
1211
 
1212
1212
  def main() -> None:
1213
1213
  # Multi-root awareness (ADR-017): tolerate a missing legacy
1214
- # `.agent-src.uncompressed/` as long as at least one package-scoped
1214
+ # `.agent-src.uncondensed/` as long as at least one package-scoped
1215
1215
  # source root carries artefacts.
1216
1216
  if not SOURCE_DIR.exists() and not _any_source_root_exists():
1217
- print(f"❌ No source directory found (looked at {SOURCE_DIR} and packages/*/.agent-src.uncompressed)")
1217
+ print(f"❌ No source directory found (looked at {SOURCE_DIR} and packages/*/.agent-src.uncondensed)")
1218
1218
  sys.exit(1)
1219
1219
 
1220
1220
  arg = sys.argv[1] if len(sys.argv) > 1 else "--sync"
@@ -1228,15 +1228,15 @@ def main() -> None:
1228
1228
  elif arg == "--changed":
1229
1229
  changed = list_changed_md(SOURCE_DIR)
1230
1230
  if not changed:
1231
- print("✅ No .md files changed since last compression")
1231
+ print("✅ No .md files changed since last condensation")
1232
1232
  sys.exit(0)
1233
- print(f"📝 {len(changed)} .md files changed since last compression:\n")
1233
+ print(f"📝 {len(changed)} .md files changed since last condensation:\n")
1234
1234
  for f in changed:
1235
1235
  print(f" {f}")
1236
1236
 
1237
1237
  elif arg == "--mark-done":
1238
1238
  if len(sys.argv) < 3:
1239
- print("Usage: python scripts/compress.py --mark-done <relative-path>")
1239
+ print("Usage: python scripts/condense.py --mark-done <relative-path>")
1240
1240
  sys.exit(1)
1241
1241
  mark_done(sys.argv[2])
1242
1242
 
@@ -1246,7 +1246,7 @@ def main() -> None:
1246
1246
  elif arg == "--check":
1247
1247
  missing, stale = check_sync(SOURCE_DIR, TARGET_DIR)
1248
1248
  if not missing and not stale:
1249
- print("✅ .agent-src/ is in sync with .agent-src.uncompressed/")
1249
+ print("✅ .agent-src/ is in sync with .agent-src.uncondensed/")
1250
1250
  sys.exit(0)
1251
1251
  if missing:
1252
1252
  print(f"❌ Missing in .agent-src/ ({len(missing)}):")
@@ -1256,7 +1256,7 @@ def main() -> None:
1256
1256
  print(f"❌ Stale in .agent-src/ ({len(stale)}):")
1257
1257
  for f in stale:
1258
1258
  print(f" {f}")
1259
- print(f"\nRun 'task sync' to fix non-.md files, then ask the agent to compress .md files.")
1259
+ print(f"\nRun 'task sync' to fix non-.md files, then ask the agent to condense .md files.")
1260
1260
  sys.exit(1)
1261
1261
 
1262
1262
  elif arg == "--sync":
@@ -1278,7 +1278,7 @@ def main() -> None:
1278
1278
  changed = list_changed_md(SOURCE_DIR)
1279
1279
  print(f"\n✅ Done: {copied} copied, {deleted} stale deleted")
1280
1280
  if changed:
1281
- print(f"📝 {len(changed)} .md files need compression (run --changed to see them)")
1281
+ print(f"📝 {len(changed)} .md files need condensation (run --changed to see them)")
1282
1282
  else:
1283
1283
  print(f"✅ All .md files are up to date")
1284
1284
  print(f"\n--- Projecting .agent-src/ → .augment/ ---")
@@ -1298,15 +1298,15 @@ def main() -> None:
1298
1298
 
1299
1299
  if changed:
1300
1300
  has_issues = True
1301
- print(f"❌ {len(changed)} .md file(s) need recompression:\n")
1301
+ print(f"❌ {len(changed)} .md file(s) need recondensation:\n")
1302
1302
  for f in changed:
1303
1303
  stored = load_hashes().get(f)
1304
1304
  reason = "no hash stored" if stored is None else "hash mismatch"
1305
1305
  print(f" {f} ({reason})")
1306
- print(f"\nRun '/compress' command to recompress these files.")
1306
+ print(f"\nRun '/condense' command to recondense these files.")
1307
1307
 
1308
1308
  if not has_issues:
1309
- print("✅ All compression hashes are clean (no stale, no mismatches)")
1309
+ print("✅ All condensation hashes are clean (no stale, no mismatches)")
1310
1310
  sys.exit(0)
1311
1311
  sys.exit(1)
1312
1312
 
@@ -1327,7 +1327,7 @@ def main() -> None:
1327
1327
  project_to_augment()
1328
1328
 
1329
1329
  else:
1330
- print("Usage: python scripts/compress.py [--sync|--list|--changed|--check|--check-hashes|--clean-hashes|--mark-done <path>|--mark-all-done|--generate-tools|--clean-tools|--project-augment]")
1330
+ print("Usage: python scripts/condense.py [--sync|--list|--changed|--check|--check-hashes|--clean-hashes|--mark-done <path>|--mark-all-done|--generate-tools|--clean-tools|--project-augment]")
1331
1331
  sys.exit(1)
1332
1332
 
1333
1333
 
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ # Augment Sync — sync non-.md files and cleanup stale files
3
+ #
4
+ # Usage:
5
+ # ./scripts/condense.sh # sync non-.md files + cleanup
6
+ # ./scripts/condense.sh --list # list ALL .md files
7
+ # ./scripts/condense.sh --changed # list .md files changed since last condensation
8
+ # ./scripts/condense.sh --check # check if dirs are in sync
9
+ # ./scripts/condense.sh --mark-done <path> # mark file as condensed
10
+ # ./scripts/condense.sh --mark-all-done # mark all files as condensed
11
+ #
12
+ # .md condensation is done by the Augment agent interactively.
13
+
14
+ set -euo pipefail
15
+
16
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
+
18
+ python3 "$SCRIPT_DIR/condense.py" "${@:---sync}"
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env python3
2
- """Input-side memory compression — Phase 2 of step-16-caveman-substance.
2
+ """Input-side memory condensation — Phase 2 of step-16-telegraph-substance.
3
3
 
4
- Rewrites memory files (AGENTS.md, CLAUDE.md, .cursorrules, ...) to caveman
4
+ Rewrites memory files (AGENTS.md, CLAUDE.md, .cursorrules, ...) to telegraph
5
5
  grammar (drop articles / auxiliaries) while preserving carve-outs byte-for-byte
6
6
  (code blocks, numbered-options, status markers, Iron-Law ALL-CAPS, backtick
7
7
  spans). Writes `.original.md` backup before mutating. Gated by Phase 0
8
8
  `validate_safe_paths.assert_safe`. Idempotency guard: `original_sha256:` +
9
- `compressed_at:` frontmatter refuse re-compression on body-hash drift.
9
+ `condensed_at:` frontmatter refuse re-condensation on body-hash drift.
10
10
 
11
- CLI: `compress_memory.py <path> [--check|--decompress]`. Stdlib-only.
11
+ CLI: `condense_memory.py <path> [--check|--decondense]`. Stdlib-only.
12
12
  """
13
13
  from __future__ import annotations
14
14
 
@@ -24,14 +24,14 @@ sys.path.insert(0, str(REPO_ROOT / "scripts"))
24
24
 
25
25
  from validate_safe_paths import SensitivePathError, assert_safe # noqa: E402
26
26
 
27
- __all__ = ["compress_text", "compress_file", "decompress_file", "CompressionRefused"]
27
+ __all__ = ["condense_text", "condense_file", "decondense_file", "CondensationRefused"]
28
28
 
29
29
 
30
- class CompressionRefused(RuntimeError):
31
- """Raised when the target is already compressed and body hash diverged."""
30
+ class CondensationRefused(RuntimeError):
31
+ """Raised when the target is already condensed and body hash diverged."""
32
32
 
33
33
 
34
- # Carve-out region patterns — mirrors caveman-speak.md § Carve-outs (1–7).
34
+ # Carve-out region patterns — mirrors telegraph-speak.md § Carve-outs (1–7).
35
35
  RE_FENCE = re.compile(r"^```")
36
36
  RE_NUMBERED = re.compile(r"^>?\s*\d+\.\s")
37
37
  RE_STATUS = re.compile(r"^\s*(?:❌|⚠️|✅)")
@@ -43,26 +43,26 @@ DROP_TOKENS = {"the", "a", "an", "is", "are", "was", "were", "be", "been",
43
43
  "being", "that", "which"}
44
44
 
45
45
 
46
- def _compress_words(text: str) -> str:
46
+ def _condense_words(text: str) -> str:
47
47
  out = WORD_RE.sub(lambda m: "" if m.group(0).lower() in DROP_TOKENS else m.group(0), text)
48
48
  out = re.sub(r"[ \t]{2,}", " ", out)
49
49
  return re.sub(r" +([,.;:!?])", r"\1", out)
50
50
 
51
51
 
52
- def _compress_prose_line(line: str) -> str:
53
- """Compress a prose line; preserve backtick-spans byte-for-byte."""
52
+ def _condense_prose_line(line: str) -> str:
53
+ """Condense a prose line; preserve backtick-spans byte-for-byte."""
54
54
  parts: list[str] = []
55
55
  last = 0
56
56
  for span in RE_BACKTICK_SPAN.finditer(line):
57
- parts.append(_compress_words(line[last:span.start()]))
57
+ parts.append(_condense_words(line[last:span.start()]))
58
58
  parts.append(span.group(0))
59
59
  last = span.end()
60
- parts.append(_compress_words(line[last:]))
60
+ parts.append(_condense_words(line[last:]))
61
61
  return "".join(parts)
62
62
 
63
63
 
64
- def compress_text(body: str) -> str:
65
- """Compress a memory-file body. Idempotent on already-caveman text."""
64
+ def condense_text(body: str) -> str:
65
+ """Condense a memory-file body. Idempotent on already-telegraph text."""
66
66
  out: list[str] = []
67
67
  in_fence = False
68
68
  for raw in body.splitlines(keepends=True):
@@ -75,7 +75,7 @@ def compress_text(body: str) -> str:
75
75
  or RE_IRONLAW.match(stripped.strip()):
76
76
  out.append(raw)
77
77
  continue
78
- out.append(_compress_prose_line(raw))
78
+ out.append(_condense_prose_line(raw))
79
79
  return "".join(out)
80
80
 
81
81
 
@@ -98,38 +98,38 @@ def _has_sha_marker(fm: str) -> bool:
98
98
 
99
99
 
100
100
  def _inject_frontmatter(fm: str, sha: str, ts: str) -> str:
101
- drop = re.compile(r"^(original_sha256|compressed_at):.*$", re.MULTILINE)
101
+ drop = re.compile(r"^(original_sha256|condensed_at):.*$", re.MULTILINE)
102
102
  inner = drop.sub("", fm.strip().strip("-").strip()).strip() if fm else ""
103
103
  body = inner + ("\n" if inner else "")
104
- return f"---\n{body}original_sha256: {sha}\ncompressed_at: {ts}\n---\n"
104
+ return f"---\n{body}original_sha256: {sha}\ncondensed_at: {ts}\n---\n"
105
105
 
106
106
 
107
107
  def _backup_path(target: Path) -> Path:
108
108
  return target.parent / (target.name + ".original.md")
109
109
 
110
110
 
111
- def compress_file(target: Path) -> Path:
111
+ def condense_file(target: Path) -> Path:
112
112
  assert_safe(target)
113
113
  text = target.read_text(encoding="utf-8")
114
114
  fm, body = _split_frontmatter(text)
115
115
  if _has_sha_marker(fm):
116
- if _sha256(compress_text(body)) != _sha256(body):
117
- raise CompressionRefused(
118
- f"{target}: body hash diverged; decompress first "
119
- f"(`scripts/compress_memory.py {target} --decompress`)."
116
+ if _sha256(condense_text(body)) != _sha256(body):
117
+ raise CondensationRefused(
118
+ f"{target}: body hash diverged; decondense first "
119
+ f"(`scripts/condense_memory.py {target} --decondense`)."
120
120
  )
121
121
  return target
122
122
  backup = _backup_path(target)
123
123
  backup.write_text(text, encoding="utf-8")
124
124
  ts = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
125
125
  target.write_text(
126
- _inject_frontmatter(fm, _sha256(body), ts) + compress_text(body),
126
+ _inject_frontmatter(fm, _sha256(body), ts) + condense_text(body),
127
127
  encoding="utf-8",
128
128
  )
129
129
  return backup
130
130
 
131
131
 
132
- def decompress_file(target: Path) -> Path:
132
+ def decondense_file(target: Path) -> Path:
133
133
  assert_safe(target)
134
134
  backup = _backup_path(target)
135
135
  if not backup.is_file():
@@ -140,27 +140,27 @@ def decompress_file(target: Path) -> Path:
140
140
 
141
141
 
142
142
  def _main(argv: list[str]) -> int:
143
- ap = argparse.ArgumentParser(description="Compress memory files to caveman grammar.")
143
+ ap = argparse.ArgumentParser(description="Condense memory files to telegraph grammar.")
144
144
  ap.add_argument("path", type=Path)
145
145
  grp = ap.add_mutually_exclusive_group()
146
146
  grp.add_argument("--check", action="store_true", help="exit 0 if safe; no writes")
147
- grp.add_argument("--decompress", action="store_true", help="restore .original.md")
147
+ grp.add_argument("--decondense", action="store_true", help="restore .original.md")
148
148
  args = ap.parse_args(argv)
149
149
  try:
150
150
  if args.check:
151
151
  assert_safe(args.path)
152
152
  return 0
153
- if args.decompress:
154
- decompress_file(args.path)
155
- print(f"decompressed: {args.path}")
153
+ if args.decondense:
154
+ decondense_file(args.path)
155
+ print(f"decondenseed: {args.path}")
156
156
  return 0
157
- backup = compress_file(args.path)
158
- print(f"compressed: {args.path} (backup: {backup})")
157
+ backup = condense_file(args.path)
158
+ print(f"condensed: {args.path} (backup: {backup})")
159
159
  return 0
160
160
  except SensitivePathError as exc:
161
161
  print(f"error: refused: {exc}", file=sys.stderr)
162
162
  return 2
163
- except CompressionRefused as exc:
163
+ except CondensationRefused as exc:
164
164
  print(f"error: {exc}", file=sys.stderr)
165
165
  return 3
166
166
  except FileNotFoundError as exc:
@@ -34,7 +34,7 @@ logger = logging.getLogger(__name__)
34
34
  PRESET_ID_ENV = "AGENT_CONFIG_PRESET_ID"
35
35
  SEED_PRESET_IDS: tuple[str, ...] = ("fast", "balanced", "strict")
36
36
  DEFAULT_PRESET_ID = "balanced"
37
- PRESETS_DIRNAME = ".agent-src.uncompressed/presets"
37
+ PRESETS_DIRNAME = ".agent-src.uncondensed/presets"
38
38
 
39
39
  SOURCE_PACK = "pack"
40
40
  SOURCE_PROFILE = "profile"
@@ -94,7 +94,7 @@ def _load_yaml(path: Path) -> dict[str, Any]:
94
94
 
95
95
  def _preset_file(project_root: Path, preset_id: str) -> Path:
96
96
  # Legacy single-root layout — honor when present so tests that mock a
97
- # ``.agent-src.uncompressed/`` sub-tree under ``project_root`` keep working.
97
+ # ``.agent-src.uncondensed/`` sub-tree under ``project_root`` keep working.
98
98
  legacy = project_root / PRESETS_DIRNAME / f"{preset_id}.yml"
99
99
  if legacy.exists():
100
100
  return legacy
@@ -40,7 +40,7 @@ SEED_PROFILE_IDS: tuple[str, ...] = (
40
40
  "ops",
41
41
  )
42
42
  DEFAULT_PROFILE_ID = "developer"
43
- PROFILES_DIRNAME = ".agent-src.uncompressed/profiles"
43
+ PROFILES_DIRNAME = ".agent-src.uncondensed/profiles"
44
44
 
45
45
  SOURCE_PACK = "pack"
46
46
  SOURCE_USER = "user-settings"
@@ -27,7 +27,7 @@ def _load(path: Path) -> list[dict]:
27
27
  def group(rows: list[dict]) -> dict:
28
28
  by_conv: dict = defaultdict(lambda: {
29
29
  "sessions": 0, "total_cost_usd": 0.0, "input_tokens": 0,
30
- "output_tokens": 0, "caveman_delta_tokens": 0,
30
+ "output_tokens": 0, "telegraph_delta_tokens": 0,
31
31
  "by_model": defaultdict(lambda: {"sessions": 0, "cost_usd": 0.0}),
32
32
  })
33
33
  for row in rows:
@@ -38,7 +38,7 @@ def group(rows: list[dict]) -> dict:
38
38
  b["total_cost_usd"] += cost
39
39
  b["input_tokens"] += int(row.get("input_tokens") or 0)
40
40
  b["output_tokens"] += int(row.get("output_tokens") or 0)
41
- b["caveman_delta_tokens"] += int(row.get("caveman_delta_tokens") or 0)
41
+ b["telegraph_delta_tokens"] += int(row.get("telegraph_delta_tokens") or 0)
42
42
  m = b["by_model"][str(row.get("model") or "unknown")]
43
43
  m["sessions"] += 1
44
44
  m["cost_usd"] += cost
@@ -53,7 +53,7 @@ def render_text(report: dict) -> str:
53
53
  lines.append(
54
54
  f" {cid}: {b['sessions']} sessions · ${b['total_cost_usd']:.4f} · "
55
55
  f"in {b['input_tokens']:,} · out {b['output_tokens']:,} · "
56
- f"caveman_delta {b['caveman_delta_tokens']:+,}"
56
+ f"telegraph_delta {b['telegraph_delta_tokens']:+,}"
57
57
  )
58
58
  for model, m in sorted(b["by_model"].items()):
59
59
  lines.append(f" {model}: {m['sessions']} sessions · ${m['cost_usd']:.4f}")