@ahmed-g-gad/apothem 0.1.1

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 (674) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +21 -0
  3. package/LICENSES/MIT.txt +18 -0
  4. package/LICENSES/PSF-2.0.txt +47 -0
  5. package/README.md +549 -0
  6. package/bin/README.md +37 -0
  7. package/bin/apothem.mjs +78 -0
  8. package/package.json +75 -0
  9. package/pyproject.toml +347 -0
  10. package/src/apothem/README.md +52 -0
  11. package/src/apothem/__init__.py +66 -0
  12. package/src/apothem/__main__.py +28 -0
  13. package/src/apothem/_vendor/.keep +0 -0
  14. package/src/apothem/_vendor/__init__.py +25 -0
  15. package/src/apothem/_vendor/attr/__init__.py +104 -0
  16. package/src/apothem/_vendor/attr/__init__.pyi +389 -0
  17. package/src/apothem/_vendor/attr/_cmp.py +160 -0
  18. package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
  19. package/src/apothem/_vendor/attr/_compat.py +99 -0
  20. package/src/apothem/_vendor/attr/_config.py +31 -0
  21. package/src/apothem/_vendor/attr/_funcs.py +497 -0
  22. package/src/apothem/_vendor/attr/_make.py +3406 -0
  23. package/src/apothem/_vendor/attr/_next_gen.py +674 -0
  24. package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
  25. package/src/apothem/_vendor/attr/_version_info.py +89 -0
  26. package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
  27. package/src/apothem/_vendor/attr/converters.py +162 -0
  28. package/src/apothem/_vendor/attr/converters.pyi +19 -0
  29. package/src/apothem/_vendor/attr/exceptions.py +95 -0
  30. package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
  31. package/src/apothem/_vendor/attr/filters.py +72 -0
  32. package/src/apothem/_vendor/attr/filters.pyi +6 -0
  33. package/src/apothem/_vendor/attr/py.typed +0 -0
  34. package/src/apothem/_vendor/attr/setters.py +79 -0
  35. package/src/apothem/_vendor/attr/setters.pyi +20 -0
  36. package/src/apothem/_vendor/attr/validators.py +750 -0
  37. package/src/apothem/_vendor/attr/validators.pyi +140 -0
  38. package/src/apothem/_vendor/attr.LICENSE +21 -0
  39. package/src/apothem/_vendor/attrs/__init__.py +72 -0
  40. package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
  41. package/src/apothem/_vendor/attrs/converters.py +3 -0
  42. package/src/apothem/_vendor/attrs/exceptions.py +3 -0
  43. package/src/apothem/_vendor/attrs/filters.py +3 -0
  44. package/src/apothem/_vendor/attrs/py.typed +0 -0
  45. package/src/apothem/_vendor/attrs/setters.py +3 -0
  46. package/src/apothem/_vendor/attrs/validators.py +3 -0
  47. package/src/apothem/_vendor/attrs.LICENSE +21 -0
  48. package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
  49. package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
  50. package/src/apothem/_vendor/jsonschema/_format.py +546 -0
  51. package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
  52. package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
  53. package/src/apothem/_vendor/jsonschema/_types.py +204 -0
  54. package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
  55. package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
  56. package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
  57. package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
  58. package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
  59. package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
  60. package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
  61. package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
  62. package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
  63. package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
  64. package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
  65. package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
  66. package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
  67. package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
  68. package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
  69. package/src/apothem/_vendor/jsonschema/cli.py +292 -0
  70. package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
  71. package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
  72. package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
  73. package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
  74. package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
  75. package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
  76. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
  77. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
  78. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
  79. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
  80. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
  81. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
  82. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
  83. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
  84. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
  85. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
  86. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
  87. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
  88. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
  89. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
  90. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
  91. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
  92. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
  93. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
  94. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
  95. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
  96. package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
  97. package/src/apothem/_vendor/referencing/__init__.py +7 -0
  98. package/src/apothem/_vendor/referencing/_attrs.py +31 -0
  99. package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
  100. package/src/apothem/_vendor/referencing/_core.py +739 -0
  101. package/src/apothem/_vendor/referencing/exceptions.py +165 -0
  102. package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
  103. package/src/apothem/_vendor/referencing/py.typed +0 -0
  104. package/src/apothem/_vendor/referencing/retrieval.py +94 -0
  105. package/src/apothem/_vendor/referencing/typing.py +61 -0
  106. package/src/apothem/_vendor/referencing.LICENSE +19 -0
  107. package/src/apothem/_vendor/rpds/__init__.py +251 -0
  108. package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
  109. package/src/apothem/_vendor/typing_extensions.py +4317 -0
  110. package/src/apothem/_vendor/vendor.txt +22 -0
  111. package/src/apothem/_vendor/yaml/__init__.py +389 -0
  112. package/src/apothem/_vendor/yaml/composer.py +138 -0
  113. package/src/apothem/_vendor/yaml/constructor.py +748 -0
  114. package/src/apothem/_vendor/yaml/cyaml.py +100 -0
  115. package/src/apothem/_vendor/yaml/dumper.py +61 -0
  116. package/src/apothem/_vendor/yaml/emitter.py +1137 -0
  117. package/src/apothem/_vendor/yaml/error.py +74 -0
  118. package/src/apothem/_vendor/yaml/events.py +85 -0
  119. package/src/apothem/_vendor/yaml/loader.py +63 -0
  120. package/src/apothem/_vendor/yaml/nodes.py +48 -0
  121. package/src/apothem/_vendor/yaml/parser.py +588 -0
  122. package/src/apothem/_vendor/yaml/reader.py +185 -0
  123. package/src/apothem/_vendor/yaml/representer.py +388 -0
  124. package/src/apothem/_vendor/yaml/resolver.py +226 -0
  125. package/src/apothem/_vendor/yaml/scanner.py +1435 -0
  126. package/src/apothem/_vendor/yaml/serializer.py +110 -0
  127. package/src/apothem/_vendor/yaml/tokens.py +103 -0
  128. package/src/apothem/_vendor/yaml.LICENSE +20 -0
  129. package/src/apothem/agents/README.md +60 -0
  130. package/src/apothem/agents/codebase-explorer.md +91 -0
  131. package/src/apothem/agents/convention-auditor.md +93 -0
  132. package/src/apothem/agents/dependency-auditor.md +97 -0
  133. package/src/apothem/agents/fact-checker.md +84 -0
  134. package/src/apothem/agents/mcp-builder.md +86 -0
  135. package/src/apothem/agents/memory-auditor.md +93 -0
  136. package/src/apothem/agents/prompt-evaluator.md +87 -0
  137. package/src/apothem/agents/quality-gate.md +103 -0
  138. package/src/apothem/agents/refactor-surgeon.md +74 -0
  139. package/src/apothem/agents/research-scout.md +73 -0
  140. package/src/apothem/agents/security-scanner.md +83 -0
  141. package/src/apothem/agents/test-runner.md +84 -0
  142. package/src/apothem/audit/README.md +73 -0
  143. package/src/apothem/audit/_scan_lib.py +182 -0
  144. package/src/apothem/audit/analyze_graph.py +260 -0
  145. package/src/apothem/audit/build_capability_graph.py +607 -0
  146. package/src/apothem/audit/build_inventory.py +657 -0
  147. package/src/apothem/audit/build_plans_provenance.py +997 -0
  148. package/src/apothem/audit/check_links.py +389 -0
  149. package/src/apothem/audit/classify_artifacts.py +381 -0
  150. package/src/apothem/audit/deprecated-tokens.txt +10 -0
  151. package/src/apothem/audit/execute_plans_migration.py +491 -0
  152. package/src/apothem/audit/known-projects.txt +15 -0
  153. package/src/apothem/audit/render_capability_index.py +467 -0
  154. package/src/apothem/audit/render_inventory.py +405 -0
  155. package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
  156. package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
  157. package/src/apothem/audit/scan_drift_features.py +143 -0
  158. package/src/apothem/audit/scan_frontmatter.py +293 -0
  159. package/src/apothem/audit/scan_header_coverage.py +1134 -0
  160. package/src/apothem/audit/scan_plan_leakage.py +540 -0
  161. package/src/apothem/audit/scan_plans_discipline.py +188 -0
  162. package/src/apothem/audit/scan_secrets_pii.py +245 -0
  163. package/src/apothem/audit/scan_stale_tokens.py +296 -0
  164. package/src/apothem/audit/synthesize_drift.py +205 -0
  165. package/src/apothem/benchmarks/README.md +33 -0
  166. package/src/apothem/benchmarks/__init__.py +3 -0
  167. package/src/apothem/benchmarks/bench_agents.py +63 -0
  168. package/src/apothem/benchmarks/bench_hooks.py +93 -0
  169. package/src/apothem/benchmarks/bench_install.py +58 -0
  170. package/src/apothem/benchmarks/bench_tests.py +93 -0
  171. package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
  172. package/src/apothem/cli/README.md +33 -0
  173. package/src/apothem/cli/__init__.py +229 -0
  174. package/src/apothem/cli/_cmd_completion.py +88 -0
  175. package/src/apothem/cli/_cmd_diff.py +181 -0
  176. package/src/apothem/cli/_cmd_doctor.py +143 -0
  177. package/src/apothem/cli/_cmd_harnesses.py +167 -0
  178. package/src/apothem/cli/_cmd_install.py +327 -0
  179. package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
  180. package/src/apothem/cli/_cmd_profile.py +341 -0
  181. package/src/apothem/cli/_cmd_status.py +180 -0
  182. package/src/apothem/cli/_cmd_uninstall.py +215 -0
  183. package/src/apothem/cli/_cmd_update.py +397 -0
  184. package/src/apothem/cli/_cmd_verify.py +194 -0
  185. package/src/apothem/cli/_common_flags.py +90 -0
  186. package/src/apothem/cli/_epilogs.py +296 -0
  187. package/src/apothem/cli/_helpers.py +857 -0
  188. package/src/apothem/cli/_json_formatter.py +21 -0
  189. package/src/apothem/cli/_materialize.py +376 -0
  190. package/src/apothem/cli/completions/apothem.bash +30 -0
  191. package/src/apothem/cli/completions/apothem.fish +19 -0
  192. package/src/apothem/cli/completions/apothem.ps1 +27 -0
  193. package/src/apothem/cli/completions/apothem.zsh +42 -0
  194. package/src/apothem/cli/reference_export.py +126 -0
  195. package/src/apothem/commands/README.md +125 -0
  196. package/src/apothem/commands/a11y-audit.md +203 -0
  197. package/src/apothem/commands/architecture-review.md +194 -0
  198. package/src/apothem/commands/audit.md +165 -0
  199. package/src/apothem/commands/code-audit.md +218 -0
  200. package/src/apothem/commands/code-review.md +193 -0
  201. package/src/apothem/commands/dependency-audit.md +209 -0
  202. package/src/apothem/commands/docs-review.md +199 -0
  203. package/src/apothem/commands/elevate.md +285 -0
  204. package/src/apothem/commands/eval.md +149 -0
  205. package/src/apothem/commands/fortress.md +172 -0
  206. package/src/apothem/commands/freshify.md +168 -0
  207. package/src/apothem/commands/github-deploy-fresh.md +178 -0
  208. package/src/apothem/commands/github-deploy-next.md +167 -0
  209. package/src/apothem/commands/perf-audit.md +198 -0
  210. package/src/apothem/commands/plan-amend.md +104 -0
  211. package/src/apothem/commands/plan-audit.md +127 -0
  212. package/src/apothem/commands/plan-design.md +257 -0
  213. package/src/apothem/commands/plan-execute.md +495 -0
  214. package/src/apothem/commands/plan-generate.md +351 -0
  215. package/src/apothem/commands/plan-review.md +555 -0
  216. package/src/apothem/commands/plan-spec.md +359 -0
  217. package/src/apothem/commands/plan-status.md +222 -0
  218. package/src/apothem/commands/plan.md +173 -0
  219. package/src/apothem/commands/projectify.md +142 -0
  220. package/src/apothem/commands/release-readiness.md +142 -0
  221. package/src/apothem/commands/research-analysis.md +241 -0
  222. package/src/apothem/commands/research-design.md +231 -0
  223. package/src/apothem/commands/research-disseminate.md +225 -0
  224. package/src/apothem/commands/research-experiment.md +232 -0
  225. package/src/apothem/commands/research-ideate.md +213 -0
  226. package/src/apothem/commands/research-paper.md +252 -0
  227. package/src/apothem/commands/research-proposal.md +220 -0
  228. package/src/apothem/commands/research-publish.md +255 -0
  229. package/src/apothem/commands/research-review.md +251 -0
  230. package/src/apothem/commands/research-sources.md +266 -0
  231. package/src/apothem/commands/research-spec.md +255 -0
  232. package/src/apothem/commands/research-synthesis.md +233 -0
  233. package/src/apothem/commands/research-theory.md +218 -0
  234. package/src/apothem/commands/research.md +181 -0
  235. package/src/apothem/commands/security-audit.md +196 -0
  236. package/src/apothem/commands/supply-chain-audit.md +192 -0
  237. package/src/apothem/commands/test-suite.md +146 -0
  238. package/src/apothem/commands/threat-model-audit.md +199 -0
  239. package/src/apothem/commands/ux-review.md +202 -0
  240. package/src/apothem/commands/workflow.md +162 -0
  241. package/src/apothem/conformity/README.md +173 -0
  242. package/src/apothem/conformity/__init__.py +1 -0
  243. package/src/apothem/conformity/_grep_base.py +93 -0
  244. package/src/apothem/conformity/agent_capability_grep.py +306 -0
  245. package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
  246. package/src/apothem/conformity/agnosticism_grep.py +311 -0
  247. package/src/apothem/conformity/always_on_budget_grep.py +318 -0
  248. package/src/apothem/conformity/bare_except_grep.py +115 -0
  249. package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
  250. package/src/apothem/conformity/brand_mark_grep.py +272 -0
  251. package/src/apothem/conformity/commented_out_code_grep.py +176 -0
  252. package/src/apothem/conformity/completion_claim_grep.py +169 -0
  253. package/src/apothem/conformity/conventional_commit_grep.py +319 -0
  254. package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
  255. package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
  256. package/src/apothem/conformity/determinism_grep.py +306 -0
  257. package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
  258. package/src/apothem/conformity/dynamism_grep.py +284 -0
  259. package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
  260. package/src/apothem/conformity/file_header_grep.py +502 -0
  261. package/src/apothem/conformity/freshness_token_grep.py +233 -0
  262. package/src/apothem/conformity/frontmatter_grep.py +274 -0
  263. package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
  264. package/src/apothem/conformity/gate.py +1386 -0
  265. package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
  266. package/src/apothem/conformity/harden_runner_grep.py +320 -0
  267. package/src/apothem/conformity/hedging_grep.py +129 -0
  268. package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
  269. package/src/apothem/conformity/link_check.py +327 -0
  270. package/src/apothem/conformity/magic_number_grep.py +182 -0
  271. package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
  272. package/src/apothem/conformity/naming_grep.py +224 -0
  273. package/src/apothem/conformity/no_global_plans_grep.py +339 -0
  274. package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
  275. package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
  276. package/src/apothem/conformity/option_annotation_grep.py +352 -0
  277. package/src/apothem/conformity/orphan_output_grep.py +206 -0
  278. package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
  279. package/src/apothem/conformity/plain_language_grep.py +559 -0
  280. package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
  281. package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
  282. package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
  283. package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
  284. package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
  285. package/src/apothem/conformity/redundancy_grep.py +401 -0
  286. package/src/apothem/conformity/reference_token_grep.py +230 -0
  287. package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
  288. package/src/apothem/conformity/secret_leak_grep.py +193 -0
  289. package/src/apothem/conformity/semver_stability_grep.py +358 -0
  290. package/src/apothem/conformity/smoke_install_grep.py +194 -0
  291. package/src/apothem/conformity/static_version_grep.py +284 -0
  292. package/src/apothem/conformity/token_efficiency_grep.py +185 -0
  293. package/src/apothem/conformity/unpinned_action_grep.py +115 -0
  294. package/src/apothem/conformity/user_confirm_grep.py +74 -0
  295. package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
  296. package/src/apothem/harnesses/README.md +63 -0
  297. package/src/apothem/harnesses/__init__.py +16 -0
  298. package/src/apothem/harnesses/_shared/README.md +36 -0
  299. package/src/apothem/harnesses/_shared/__init__.py +12 -0
  300. package/src/apothem/harnesses/_shared/install_driver.py +281 -0
  301. package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
  302. package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
  303. package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
  304. package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
  305. package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
  306. package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
  307. package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
  308. package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
  309. package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
  310. package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
  311. package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
  312. package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
  313. package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
  314. package/src/apothem/harnesses/antigravity/__init__.py +70 -0
  315. package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
  316. package/src/apothem/harnesses/antigravity/install.py +63 -0
  317. package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
  318. package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
  319. package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
  320. package/src/apothem/harnesses/antigravity/update.py +10 -0
  321. package/src/apothem/harnesses/antigravity/verify.py +11 -0
  322. package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
  323. package/src/apothem/harnesses/claude_code/__init__.py +107 -0
  324. package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
  325. package/src/apothem/harnesses/claude_code/install.py +147 -0
  326. package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
  327. package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
  328. package/src/apothem/harnesses/claude_code/update.py +10 -0
  329. package/src/apothem/harnesses/claude_code/verify.py +11 -0
  330. package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
  331. package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
  332. package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
  333. package/src/apothem/harnesses/codebuddy/install.py +40 -0
  334. package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
  335. package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
  336. package/src/apothem/harnesses/codebuddy/update.py +10 -0
  337. package/src/apothem/harnesses/codebuddy/verify.py +11 -0
  338. package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
  339. package/src/apothem/harnesses/codex/__init__.py +72 -0
  340. package/src/apothem/harnesses/codex/capabilities.yml +40 -0
  341. package/src/apothem/harnesses/codex/install.py +69 -0
  342. package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
  343. package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
  344. package/src/apothem/harnesses/codex/uninstall.py +23 -0
  345. package/src/apothem/harnesses/codex/update.py +10 -0
  346. package/src/apothem/harnesses/codex/verify.py +11 -0
  347. package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
  348. package/src/apothem/harnesses/cursor/__init__.py +48 -0
  349. package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
  350. package/src/apothem/harnesses/cursor/install.py +38 -0
  351. package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
  352. package/src/apothem/harnesses/cursor/uninstall.py +25 -0
  353. package/src/apothem/harnesses/cursor/update.py +10 -0
  354. package/src/apothem/harnesses/cursor/verify.py +11 -0
  355. package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
  356. package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
  357. package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
  358. package/src/apothem/harnesses/gemini_cli/install.py +43 -0
  359. package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
  360. package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
  361. package/src/apothem/harnesses/gemini_cli/update.py +10 -0
  362. package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
  363. package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
  364. package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
  365. package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
  366. package/src/apothem/harnesses/github_copilot/install.py +40 -0
  367. package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
  368. package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
  369. package/src/apothem/harnesses/github_copilot/update.py +10 -0
  370. package/src/apothem/harnesses/github_copilot/verify.py +11 -0
  371. package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
  372. package/src/apothem/harnesses/glm/__init__.py +56 -0
  373. package/src/apothem/harnesses/glm/capabilities.yml +33 -0
  374. package/src/apothem/harnesses/glm/install.py +45 -0
  375. package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
  376. package/src/apothem/harnesses/glm/uninstall.py +25 -0
  377. package/src/apothem/harnesses/glm/update.py +10 -0
  378. package/src/apothem/harnesses/glm/verify.py +11 -0
  379. package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
  380. package/src/apothem/harnesses/hermes/__init__.py +33 -0
  381. package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
  382. package/src/apothem/harnesses/hermes/install.py +17 -0
  383. package/src/apothem/harnesses/hermes/materializer.py +35 -0
  384. package/src/apothem/harnesses/hermes/uninstall.py +33 -0
  385. package/src/apothem/harnesses/hermes/update.py +10 -0
  386. package/src/apothem/harnesses/hermes/verify.py +11 -0
  387. package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
  388. package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
  389. package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
  390. package/src/apothem/harnesses/kimi_code/install.py +42 -0
  391. package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
  392. package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
  393. package/src/apothem/harnesses/kimi_code/update.py +10 -0
  394. package/src/apothem/harnesses/kimi_code/verify.py +11 -0
  395. package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
  396. package/src/apothem/harnesses/kiro/__init__.py +49 -0
  397. package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
  398. package/src/apothem/harnesses/kiro/install.py +39 -0
  399. package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
  400. package/src/apothem/harnesses/kiro/uninstall.py +25 -0
  401. package/src/apothem/harnesses/kiro/update.py +10 -0
  402. package/src/apothem/harnesses/kiro/verify.py +11 -0
  403. package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
  404. package/src/apothem/harnesses/open_claw/__init__.py +35 -0
  405. package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
  406. package/src/apothem/harnesses/open_claw/install.py +17 -0
  407. package/src/apothem/harnesses/open_claw/materializer.py +36 -0
  408. package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
  409. package/src/apothem/harnesses/open_claw/update.py +10 -0
  410. package/src/apothem/harnesses/open_claw/verify.py +11 -0
  411. package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
  412. package/src/apothem/harnesses/opencode/__init__.py +35 -0
  413. package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
  414. package/src/apothem/harnesses/opencode/install.py +17 -0
  415. package/src/apothem/harnesses/opencode/materializer.py +31 -0
  416. package/src/apothem/harnesses/opencode/uninstall.py +34 -0
  417. package/src/apothem/harnesses/opencode/update.py +10 -0
  418. package/src/apothem/harnesses/opencode/verify.py +11 -0
  419. package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
  420. package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
  421. package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
  422. package/src/apothem/harnesses/qwen_code/install.py +19 -0
  423. package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
  424. package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
  425. package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
  426. package/src/apothem/harnesses/qwen_code/update.py +10 -0
  427. package/src/apothem/harnesses/qwen_code/verify.py +11 -0
  428. package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
  429. package/src/apothem/harnesses/trae/__init__.py +49 -0
  430. package/src/apothem/harnesses/trae/capabilities.yml +34 -0
  431. package/src/apothem/harnesses/trae/install.py +38 -0
  432. package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
  433. package/src/apothem/harnesses/trae/uninstall.py +25 -0
  434. package/src/apothem/harnesses/trae/update.py +10 -0
  435. package/src/apothem/harnesses/trae/verify.py +11 -0
  436. package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
  437. package/src/apothem/harnesses/windsurf/__init__.py +52 -0
  438. package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
  439. package/src/apothem/harnesses/windsurf/install.py +41 -0
  440. package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
  441. package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
  442. package/src/apothem/harnesses/windsurf/update.py +10 -0
  443. package/src/apothem/harnesses/windsurf/verify.py +11 -0
  444. package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
  445. package/src/apothem/harnesses/zed/__init__.py +57 -0
  446. package/src/apothem/harnesses/zed/capabilities.yml +38 -0
  447. package/src/apothem/harnesses/zed/install.py +41 -0
  448. package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
  449. package/src/apothem/harnesses/zed/uninstall.py +28 -0
  450. package/src/apothem/harnesses/zed/update.py +10 -0
  451. package/src/apothem/harnesses/zed/verify.py +11 -0
  452. package/src/apothem/hooks/README.md +81 -0
  453. package/src/apothem/hooks/__init__.py +24 -0
  454. package/src/apothem/hooks/askuserquestion_validator.py +380 -0
  455. package/src/apothem/hooks/dispatch.py +296 -0
  456. package/src/apothem/hooks/emit_hook_context.py +444 -0
  457. package/src/apothem/hooks/hooks.json +318 -0
  458. package/src/apothem/hooks/lib/README.md +39 -0
  459. package/src/apothem/hooks/lib/__init__.py +18 -0
  460. package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
  461. package/src/apothem/hooks/lib/bootstrap.sh +103 -0
  462. package/src/apothem/hooks/lib/events.py +51 -0
  463. package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
  464. package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
  465. package/src/apothem/hooks/lib/find-python.ps1 +63 -0
  466. package/src/apothem/hooks/lib/find-python.sh +97 -0
  467. package/src/apothem/hooks/lib/log.py +43 -0
  468. package/src/apothem/hooks/lib/resolve_root.py +264 -0
  469. package/src/apothem/hooks/messages/postcompact.md +14 -0
  470. package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
  471. package/src/apothem/hooks/messages/precompact.md +14 -0
  472. package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
  473. package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
  474. package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
  475. package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
  476. package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
  477. package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
  478. package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
  479. package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
  480. package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
  481. package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
  482. package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
  483. package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
  484. package/src/apothem/hooks/messages/sessionstart.md +15 -0
  485. package/src/apothem/hooks/messages/stop.md +27 -0
  486. package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
  487. package/src/apothem/hooks/session_start_bootstrap.py +472 -0
  488. package/src/apothem/lib/README.md +42 -0
  489. package/src/apothem/lib/__init__.py +13 -0
  490. package/src/apothem/lib/atomic_io.py +189 -0
  491. package/src/apothem/lib/auditor.py +687 -0
  492. package/src/apothem/lib/clean_slate.py +396 -0
  493. package/src/apothem/lib/contexts.py +352 -0
  494. package/src/apothem/lib/data_home.py +255 -0
  495. package/src/apothem/lib/frontmatter.py +101 -0
  496. package/src/apothem/lib/harness_materializer.py +213 -0
  497. package/src/apothem/lib/harness_protocol.py +59 -0
  498. package/src/apothem/lib/harness_registry.py +282 -0
  499. package/src/apothem/lib/harness_registry_data.py +843 -0
  500. package/src/apothem/lib/install_ledger.py +347 -0
  501. package/src/apothem/lib/learning.py +540 -0
  502. package/src/apothem/lib/memory.py +347 -0
  503. package/src/apothem/lib/parallel_sweep.py +234 -0
  504. package/src/apothem/lib/plan_tiers.py +200 -0
  505. package/src/apothem/lib/plugin_bootstrap.py +132 -0
  506. package/src/apothem/lib/plugin_tree.py +599 -0
  507. package/src/apothem/lib/profile.py +755 -0
  508. package/src/apothem/lib/profile_projection.py +198 -0
  509. package/src/apothem/lib/propagation-manifest.yaml +878 -0
  510. package/src/apothem/lib/propagation.py +220 -0
  511. package/src/apothem/lib/python_resolver.py +189 -0
  512. package/src/apothem/lib/reporter.py +62 -0
  513. package/src/apothem/lib/workspace_migration.py +323 -0
  514. package/src/apothem/output-styles/README.md +41 -0
  515. package/src/apothem/output-styles/concise-engineer.md +49 -0
  516. package/src/apothem/output-styles/default-architect.md +52 -0
  517. package/src/apothem/output-styles/default.md +113 -0
  518. package/src/apothem/output-styles/forensic-auditor.md +63 -0
  519. package/src/apothem/py.typed +0 -0
  520. package/src/apothem/rules/README.md +121 -0
  521. package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
  522. package/src/apothem/rules/agent-capability-discipline.md +78 -0
  523. package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
  524. package/src/apothem/rules/agent-orchestration.md +65 -0
  525. package/src/apothem/rules/agents-md-convention.md +86 -0
  526. package/src/apothem/rules/agile-sprints-elements.md +135 -0
  527. package/src/apothem/rules/agile-sprints.md +64 -0
  528. package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
  529. package/src/apothem/rules/agnostic-posture.md +48 -0
  530. package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
  531. package/src/apothem/rules/authoritative-referencing.md +66 -0
  532. package/src/apothem/rules/authority-inquiry-categories.md +58 -0
  533. package/src/apothem/rules/authority-inquiry.md +54 -0
  534. package/src/apothem/rules/auto-memory-topic-files.md +86 -0
  535. package/src/apothem/rules/auto-memory.md +67 -0
  536. package/src/apothem/rules/bidirectional-binding.md +123 -0
  537. package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
  538. package/src/apothem/rules/canonical-layout.md +60 -0
  539. package/src/apothem/rules/clean-architecture-layers.md +186 -0
  540. package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
  541. package/src/apothem/rules/clean-room-generation.md +59 -0
  542. package/src/apothem/rules/code-craft-conventions.md +101 -0
  543. package/src/apothem/rules/code-craft-markdown.md +138 -0
  544. package/src/apothem/rules/code-craft-python.md +154 -0
  545. package/src/apothem/rules/code-craft-shell.md +192 -0
  546. package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
  547. package/src/apothem/rules/cognitive-identity.md +81 -0
  548. package/src/apothem/rules/context-management-budget.md +46 -0
  549. package/src/apothem/rules/context-management-protocol.md +161 -0
  550. package/src/apothem/rules/context-management-scratch.md +128 -0
  551. package/src/apothem/rules/context-management.md +85 -0
  552. package/src/apothem/rules/definitiveness-virtues.md +67 -0
  553. package/src/apothem/rules/definitiveness.md +58 -0
  554. package/src/apothem/rules/determinism.md +81 -0
  555. package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
  556. package/src/apothem/rules/disclosure-ledger.md +52 -0
  557. package/src/apothem/rules/dynamism.md +38 -0
  558. package/src/apothem/rules/etc-extension.md +57 -0
  559. package/src/apothem/rules/expertise-posture-elements.md +68 -0
  560. package/src/apothem/rules/expertise-posture.md +54 -0
  561. package/src/apothem/rules/freshness-facade.md +64 -0
  562. package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
  563. package/src/apothem/rules/harness-adapter-shape.md +42 -0
  564. package/src/apothem/rules/host-discovery-manifests.md +50 -0
  565. package/src/apothem/rules/host-discovery.md +56 -0
  566. package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
  567. package/src/apothem/rules/i18n-discipline.md +70 -0
  568. package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
  569. package/src/apothem/rules/interactive-questions-detail.md +41 -0
  570. package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
  571. package/src/apothem/rules/interactive-questions.md +89 -0
  572. package/src/apothem/rules/large-file-generation.md +112 -0
  573. package/src/apothem/rules/large-file-reading.md +59 -0
  574. package/src/apothem/rules/living-docs.md +85 -0
  575. package/src/apothem/rules/multi-agent-workflow.md +57 -0
  576. package/src/apothem/rules/operational-mandates-expanded.md +78 -0
  577. package/src/apothem/rules/operational-mandates.md +88 -0
  578. package/src/apothem/rules/option-annotation-form.md +60 -0
  579. package/src/apothem/rules/option-annotation.md +45 -0
  580. package/src/apothem/rules/own-voice-reimplementation.md +86 -0
  581. package/src/apothem/rules/performance-discipline.md +91 -0
  582. package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
  583. package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
  584. package/src/apothem/rules/plain-language.md +56 -0
  585. package/src/apothem/rules/planning-techniques.md +130 -0
  586. package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
  587. package/src/apothem/rules/pre-emission-gate.md +54 -0
  588. package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
  589. package/src/apothem/rules/production-ready-prs.md +83 -0
  590. package/src/apothem/rules/propagation.md +63 -0
  591. package/src/apothem/rules/recommend-next-step.md +106 -0
  592. package/src/apothem/rules/refactoring-discipline.md +76 -0
  593. package/src/apothem/rules/session-closure.md +44 -0
  594. package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
  595. package/src/apothem/rules/sota-elevation.md +52 -0
  596. package/src/apothem/rules/source-accessibility.md +58 -0
  597. package/src/apothem/rules/surgical-manipulation.md +48 -0
  598. package/src/apothem/rules/systemic-participation-relations.md +108 -0
  599. package/src/apothem/rules/systemic-participation.md +70 -0
  600. package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
  601. package/src/apothem/rules/ten-dimension-check.md +59 -0
  602. package/src/apothem/rules/token-budget-discipline.md +81 -0
  603. package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
  604. package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
  605. package/src/apothem/rules/tool-use-discipline.md +48 -0
  606. package/src/apothem/rules/visual-leverage.md +102 -0
  607. package/src/apothem/schemas/NOTICE.md +9 -0
  608. package/src/apothem/schemas/README.md +104 -0
  609. package/src/apothem/schemas/__init__.py +176 -0
  610. package/src/apothem/schemas/advisory-finding.schema.json +111 -0
  611. package/src/apothem/schemas/agent.schema.json +106 -0
  612. package/src/apothem/schemas/authorship-header.txt +1 -0
  613. package/src/apothem/schemas/cohort-manifest.yaml +248 -0
  614. package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
  615. package/src/apothem/schemas/cohort.schema.json +113 -0
  616. package/src/apothem/schemas/command.schema.json +68 -0
  617. package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
  618. package/src/apothem/schemas/context-fragment.schema.json +64 -0
  619. package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
  620. package/src/apothem/schemas/handoff-manifest.yaml +353 -0
  621. package/src/apothem/schemas/header-exceptions.txt +141 -0
  622. package/src/apothem/schemas/header-visibility.yaml +39 -0
  623. package/src/apothem/schemas/learning-signal.schema.json +46 -0
  624. package/src/apothem/schemas/memory-record.schema.json +61 -0
  625. package/src/apothem/schemas/output-style.schema.json +40 -0
  626. package/src/apothem/schemas/plan.schema.json +51 -0
  627. package/src/apothem/schemas/plugin.schema.json +83 -0
  628. package/src/apothem/schemas/profile.example.yaml +70 -0
  629. package/src/apothem/schemas/profile.minimal.yaml +6 -0
  630. package/src/apothem/schemas/profile.schema.json +396 -0
  631. package/src/apothem/schemas/reference-token-denylist.txt +25 -0
  632. package/src/apothem/schemas/skill.schema.json +75 -0
  633. package/src/apothem/skills/README.md +93 -0
  634. package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
  635. package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
  636. package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
  637. package/src/apothem/skills/document-authoring/SKILL.md +118 -0
  638. package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
  639. package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
  640. package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
  641. package/src/apothem/skills/eval-harness/SKILL.md +88 -0
  642. package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
  643. package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
  644. package/src/apothem/skills/plan-suite/SKILL.md +118 -0
  645. package/src/apothem/skills/plan-suite/master_template.md +1324 -0
  646. package/src/apothem/skills/projectify/SKILL.md +117 -0
  647. package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
  648. package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
  649. package/src/apothem/skills/research-suite/SKILL.md +170 -0
  650. package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
  651. package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
  652. package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
  653. package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
  654. package/src/apothem/skills/research-suite/research_template.md +476 -0
  655. package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
  656. package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
  657. package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
  658. package/src/apothem/skills/test-authoring/SKILL.md +85 -0
  659. package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
  660. package/src/apothem/skills/workflow/SKILL.md +139 -0
  661. package/src/apothem/statuslines/README.md +26 -0
  662. package/src/apothem/statuslines/__init__.py +20 -0
  663. package/src/apothem/statuslines/conformity.json +5 -0
  664. package/src/apothem/statuslines/render.py +334 -0
  665. package/src/apothem/statuslines/statusline.md +50 -0
  666. package/src/apothem/templates/README.md +43 -0
  667. package/src/apothem/templates/agents-md-template.md +80 -0
  668. package/src/apothem/templates/consideration-log.md +39 -0
  669. package/src/apothem/templates/expertise-gap-log.md +56 -0
  670. package/src/apothem/templates/master-index-template.md +93 -0
  671. package/src/apothem/templates/potency-map.md +53 -0
  672. package/src/apothem/templates/preservation-audit.md +60 -0
  673. package/src/apothem/templates/question-resolution-audit.md +52 -0
  674. package/src/apothem/templates/trace-matrix-template.md +77 -0
@@ -0,0 +1,87 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Qwen Code Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `qwenlm.github.io/qwen-code-docs` + `github.com/QwenLM/qwen-code` — `~/.qwen/QWEN.md` (`context.fileName`, `@path` imports, `/memory` reload), Markdown+YAML custom commands (TOML deprecated), and settings.json / `mcpServers` / `.qwen/skills/` / hooks all confirmed current.
9
+ - Adapter source: `src/apothem/harnesses/qwen_code/`
10
+ - Evidence level: vendor-doc pinned (live re-fetch 2026-05-31) at release tag
11
+ `v0.17.0` for `~/.qwen/settings.json`, `QWEN.md` (`context.fileName`),
12
+ Markdown+YAML commands (TOML deprecated), `.qwen/skills/`, SubAgents
13
+ (Markdown+YAML), `mcpServers`, settings hooks, and `.qwenignore`. The
14
+ `settings.json` config renders directly (no Jinja template); the shipped
15
+ instruction template is `templates/QWEN.md`. No vendor-native UI claim is made
16
+ here. Docs pages are mutable — no-immutable-source exception anchored to the
17
+ immutable release tag `v0.17.0`.
18
+ - Official references:
19
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/configuration/settings/>
20
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/features/commands/>
21
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/features/sub-agents/>
22
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/features/skills/>
23
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/features/hooks/>
24
+ - <https://qwenlm.github.io/qwen-code-docs/en/users/configuration/qwen-ignore/>
25
+
26
+ ## Web-Fetch / Browser-Retrieval Surface
27
+
28
+ - Capability: `web_fetch` = **partial**. The backing dimension for
29
+ `rules/source-accessibility.md` step 1 ("retrieve through the host's browser /
30
+ fetch capability").
31
+ - Vendor-confirmed PARTIAL: qwen-code ships a built-in `web_fetch` tool (URL
32
+ retrieval), but the built-in `web_search` tool was removed and web search is
33
+ now MCP-only (a documented breaking change). The `partial` subset boundary is:
34
+ fetch yes, search via MCP only.
35
+ - Evidence: vendor-doc-url
36
+ <https://github.com/QwenLM/qwen-code/blob/8f8ed0d7c184208ac3fc4b92020b207cec453723/docs/developers/tools/introduction.md>
37
+ (web_fetch listed built-in) +
38
+ <https://github.com/QwenLM/qwen-code/blob/8f8ed0d7c184208ac3fc4b92020b207cec453723/docs/developers/tools/web-search.md>
39
+ (web_search removed, MCP-only); commit-sha
40
+ `8f8ed0d7c184208ac3fc4b92020b207cec453723` (default-branch HEAD, both blobs
41
+ confirmed reachable at this commit); snapshot-date 2026-06-21.
42
+
43
+ ## Recommended Postfix Rendering
44
+
45
+ - Status: supported as plain text.
46
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Qwen Code adapter output preserves that suffix when prompt text is materialized.
47
+ - Boundary: this pin does not claim a harness-native recommended-option widget. It only pins the text-rendered convention used by `rules/interactive-questions.md`.
48
+
49
+ ## Long Context and Compaction
50
+
51
+ - Status: profile-managed.
52
+ - Mechanism: Apothem keeps full-suite `/plan-execute` runs continuous by externalizing state to `.apothem/plans/`, compacting or restarting the harness session at phase boundaries as needed, and restoring via the Blind Bootstrap sequence.
53
+ - Boundary: this pin does not claim vendor-native autocompaction or a long-context size. It pins the adapter-local state handoff and compaction-restoration convention used by `rules/context-management.md`.
54
+
55
+ ## Large-Codebase Practice Projection
56
+
57
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
58
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
59
+ - Hook learning capture: routed through the `persistent-conventions-vigilance` artifact-evolution cycle; pass-class hooks stay silent and recurring findings become rule, skill, hook, or documentation updates.
60
+
61
+ ## Plugin-alone Persistence
62
+
63
+ Qwen Code exposes a vendor extension surface (`qwen extensions install`). The
64
+ repo root IS the extension root: `qwen-extension.json` (manifest), `QWEN.md`
65
+ (the manifest's `contextFileName` anchor), and a sibling `commands/apothem.toml`
66
+ the harness auto-discovers. Installing the extension *alone* — without running
67
+ `apothem install` — persists only what the vendor extension surface carries; the
68
+ full per-target cohort still requires the engine, which converts each Apothem
69
+ artifact to its Qwen-native shape (Markdown+YAML commands/agents, `.qwen/skills/`).
70
+
71
+ | Artifact class | Persists extension-alone? | Mechanism / limit |
72
+ |---|---|---|
73
+ | Context anchor (rules-as-text) | Yes | `QWEN.md` is loaded as session context by `context.fileName`; it now embeds the core engineering disciplines (Plans-Locality, Authority hygiene, Definitiveness, Production-ready, Plain-language) so those directives persist as context text. |
74
+ | Commands | Bootstrap only | The bundled `/apothem` command (`commands/apothem.toml`) auto-discovers and persists; it shells `npx @ahmed-g-gad/apothem`. The full converted command cohort (`~/.qwen/commands/`) requires `apothem install`. |
75
+ | Skills | No — requires `apothem install` | The extension manifest bundles no skills; `~/.qwen/skills/*/SKILL.md` lands only via the engine. |
76
+ | Rules (as native primitive) | No — platform limit | Qwen Code has no native rules-directory primitive; Apothem rules persist as the `QWEN.md` context text above, or as the engine-installed `~/.qwen/apothem/rules/` reference tree. |
77
+ | Hooks | No — platform limit | Native `settings.json` hooks are operator-owned; Apothem does not register them. Hook support material lands only via `apothem install` under `~/.qwen/apothem/hooks/`. |
78
+ | MCP servers | No — operator-owned | `mcpServers` lives in operator-owned `~/.qwen/settings.json`; neither the extension manifest nor the engine authors MCP entries. |
79
+ | Tools / settings | No — operator-owned | `~/.qwen/settings.json` is operator-owned and never written by the adapter or the extension. |
80
+
81
+ Bundle wiring status: the extension bundle persists the context anchor + the
82
+ `/apothem` bootstrap command. Embedding the full converted command, skill, and
83
+ sub-agent cohort into the extension package is a documented future enhancement —
84
+ the conversion logic lives in the engine (`markdown_commands` / `qwen_agents`
85
+ modes in `propagation-manifest.yaml`), so a build step that pre-renders those
86
+ into a bundled `commands/` + `.qwen/` tree would let the extension carry the
87
+ cohort without a post-install engine run.
@@ -0,0 +1,37 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for qwen-code.
4
+
5
+ Materializes ``~/.qwen/settings.json`` from the shared profile per the
6
+ qwen-code vendor canonical schema at
7
+ https://qwenlm.github.io/qwen-code-docs/en/users/configuration/settings/;
8
+ the adapter-local
9
+ ``STANDARD-CONVENTION-PIN.md`` records the current convention snapshot.
10
+ The install step also writes ``QWEN.md``, registers native hooks, and
11
+ propagates Apothem commands, skills, and agents into Qwen Code's native
12
+ Markdown discovery directories.
13
+ Delegates installation to :mod:`apothem.harnesses.qwen_code.materializer`.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from pathlib import Path
19
+
20
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_adapter
21
+ from apothem.harnesses.qwen_code.install import install as _install
22
+ from apothem.harnesses.qwen_code.materializer import (
23
+ materialize_native_config as materialize_native_config,
24
+ )
25
+ from apothem.harnesses.qwen_code.uninstall import uninstall as _uninstall
26
+ from apothem.harnesses.qwen_code.update import update as _update
27
+ from apothem.harnesses.qwen_code.verify import verify as _verify
28
+
29
+ QwenCodeAdapter = make_native_config_adapter(
30
+ "qwen-code",
31
+ target_factory=lambda: Path.home() / ".qwen/settings.json",
32
+ install_fn=_install,
33
+ uninstall_fn=_uninstall,
34
+ update_fn=_update,
35
+ verify_fn=_verify,
36
+ class_name="QwenCodeAdapter",
37
+ )
@@ -0,0 +1,43 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. qwen_code
4
+ # anchors ~/.qwen/settings.json and QWEN.md, then uses Qwen Code's documented
5
+ # commands, skills (.qwen/skills/), and SubAgents discovery directories.
6
+ # Commands are Markdown + YAML (TOML is deprecated). MCP is declared within
7
+ # settings.json's mcpServers namespace. settings.json renders directly (no Jinja
8
+ # template); the shipped instruction template is templates/QWEN.md.
9
+
10
+ mcp_servers:
11
+ - settings.json-mcpServers-namespace
12
+ # The adapter's materializer.py authors this MCP block from the shared profile.
13
+ mcp_servers_authored: true
14
+ sub_agent_dispatch: true
15
+ custom_command_support: "markdown"
16
+ recommended_postfix_rendering: "plain-text"
17
+ long_context_compaction: "profile-managed"
18
+ context_ignore_surface: "qwenignore-and-settings-mediated"
19
+ layered_context_surface: "settings.json hooks plus QWEN.md hierarchical context"
20
+ lsp_symbol_navigation: "tracked-gap-no-adapter-owned-LSP-surface"
21
+ hook_learning_capture: "settings.json-hooks"
22
+ standard_convention_pin: "STANDARD-CONVENTION-PIN.md"
23
+ # web-fetch / browser-retrieval surface — the backing capability dimension for
24
+ # rules/source-accessibility.md step 1 ("retrieve through the host's browser /
25
+ # fetch capability"). Vendor-confirmed PARTIAL: qwen-code ships a built-in
26
+ # `web_fetch` tool (URL retrieval), but the built-in `web_search` tool was
27
+ # removed and web search is now MCP-only (a documented breaking change). The
28
+ # `partial` subset boundary is: fetch yes, search via MCP only. Evidence triple
29
+ # — vendor-doc-url:
30
+ # https://github.com/QwenLM/qwen-code/blob/main/docs/developers/tools/introduction.md
31
+ # (web_fetch listed built-in) + .../docs/developers/tools/web-search.md
32
+ # (web_search removed); commit-sha: main-branch (no commit-pinned blob reachable
33
+ # at fetch time — main is the most authoritative reachable form); snapshot-date:
34
+ # 2026-06-21. Canonical evidence home is STANDARD-CONVENTION-PIN.md per
35
+ # rules/agent-capability-discipline-matrix.md §1A; pin refresh tracked as a
36
+ # follow-up to add the web-fetch tool row and the subset boundary to the pin.
37
+ web_fetch: "partial"
38
+ tool_surface_restrictions:
39
+ - secrets-paths
40
+ - destructive-shell-ops
41
+ - network-write-unsigned
42
+ system_prompt_template_path: "templates/QWEN.md"
43
+ agent_memory_surface: "n/a"
@@ -0,0 +1,19 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the qwen-code harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_native_config_install
8
+ from apothem.harnesses.qwen_code.materializer import materialize_native_config
9
+
10
+ _HARNESS_NAME: str = "qwen_code"
11
+ _HARNESS_ID: str = "qwen-code"
12
+
13
+ install = make_native_config_install(
14
+ _HARNESS_NAME,
15
+ materialize_native_config,
16
+ harness_id=_HARNESS_ID,
17
+ render_tokens=True,
18
+ support_profile=True,
19
+ )
@@ -0,0 +1,174 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Materializer for the qwen-code harness — renders JSON settings config.
4
+
5
+ Qwen Code's canonical user configuration surface is ``~/.qwen/settings.json``.
6
+ Apothem also installs ``~/.qwen/QWEN.md`` as the user-scope context anchor and
7
+ places commands, skills, and subagents in Qwen Code's native discovery
8
+ directories. Non-native support cohorts stay under ``~/.qwen/apothem/``. This
9
+ materializer renders only documented settings keys and lifecycle hook entries.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import json
15
+ from typing import Any
16
+
17
+ from apothem.lib.profile import coerce_profile
18
+ from apothem.lib.profile_projection import mcp_servers_for, render_mcp_standard
19
+
20
+ # Per-event hook-timeout budgets (milliseconds), keyed to the hook-event classes
21
+ # in rules/performance-discipline.md §1: PreToolUse = 10s, SessionStart /
22
+ # PreCompact / PostCompact = 30s, Stop = 60s. Named here so the budgets are
23
+ # documented intent rather than repeated magic numbers (M13.10).
24
+ _PRETOOLUSE_TIMEOUT_MS = 10_000
25
+ _SESSION_TIMEOUT_MS = 30_000
26
+ _STOP_TIMEOUT_MS = 60_000
27
+
28
+
29
+ def _hook(command: str, timeout: int, description: str) -> dict[str, object]:
30
+ return {
31
+ "type": "command",
32
+ "command": command,
33
+ "timeout": timeout,
34
+ "description": description,
35
+ }
36
+
37
+
38
+ def _dispatch(event_name: str, message_name: str | None = None) -> str:
39
+ """Render a hook command that invokes the installed dispatcher by path.
40
+
41
+ The ``${HARNESS_ROOT}`` token resolves at install time (the adapter's
42
+ install step renders content tokens before writing), so the command
43
+ points at the dispatcher materialized under ``~/.qwen/apothem/hooks/``
44
+ without requiring an importable ``apothem`` package on the host.
45
+ """
46
+ parts = ["python", '"${HARNESS_ROOT}/apothem/hooks/dispatch.py"', event_name]
47
+ if message_name:
48
+ parts.append(message_name)
49
+ return " ".join(parts)
50
+
51
+
52
+ def _qwen_hooks() -> dict[str, list[dict[str, object]]]:
53
+ return {
54
+ "SessionStart": [
55
+ {
56
+ "hooks": [
57
+ _hook(
58
+ _dispatch("SessionStart"),
59
+ _SESSION_TIMEOUT_MS,
60
+ "Initialize Apothem session posture.",
61
+ ),
62
+ ],
63
+ },
64
+ ],
65
+ "PreToolUse": [
66
+ {
67
+ "matcher": "^Bash$",
68
+ "hooks": [
69
+ _hook(
70
+ _dispatch("PreToolUse", "pretooluse-bash"),
71
+ _PRETOOLUSE_TIMEOUT_MS,
72
+ "Validate shell command safety and isolation.",
73
+ ),
74
+ _hook(
75
+ _dispatch("PreToolUse", "pretooluse-bash-plan-guard"),
76
+ _PRETOOLUSE_TIMEOUT_MS,
77
+ "Enforce plans locality on shell redirections.",
78
+ ),
79
+ _hook(
80
+ _dispatch("PreToolUse", "pretooluse-eval-guard"),
81
+ _PRETOOLUSE_TIMEOUT_MS,
82
+ "Flag unsafe dynamic evaluation or deserialization.",
83
+ ),
84
+ ],
85
+ "sequential": True,
86
+ },
87
+ {
88
+ "matcher": "WriteFile|Edit",
89
+ "hooks": [
90
+ _hook(
91
+ _dispatch("PreToolUse", "pretooluse-write"),
92
+ _PRETOOLUSE_TIMEOUT_MS,
93
+ "Validate write target and content.",
94
+ ),
95
+ _hook(
96
+ _dispatch("PreToolUse", "pretooluse-write-header-guard"),
97
+ _PRETOOLUSE_TIMEOUT_MS,
98
+ "Inject the authorship header when required.",
99
+ ),
100
+ _hook(
101
+ _dispatch("PreToolUse", "pretooluse-write-plan-guard"),
102
+ _PRETOOLUSE_TIMEOUT_MS,
103
+ "Enforce plans locality on the target path.",
104
+ ),
105
+ _hook(
106
+ _dispatch("PreToolUse", "pretooluse-dependency-guard"),
107
+ _PRETOOLUSE_TIMEOUT_MS,
108
+ "Flag unpinned or untrusted dependency additions.",
109
+ ),
110
+ _hook(
111
+ _dispatch("PreToolUse", "pretooluse-eval-guard"),
112
+ _PRETOOLUSE_TIMEOUT_MS,
113
+ "Flag unsafe dynamic evaluation or deserialization.",
114
+ ),
115
+ ],
116
+ "sequential": True,
117
+ },
118
+ ],
119
+ "PreCompact": [
120
+ {
121
+ "matcher": "*",
122
+ "hooks": [
123
+ _hook(
124
+ _dispatch("PreCompact", "precompact"),
125
+ _SESSION_TIMEOUT_MS,
126
+ "Externalize state before context compression.",
127
+ ),
128
+ ],
129
+ },
130
+ ],
131
+ "PostCompact": [
132
+ {
133
+ "matcher": "*",
134
+ "hooks": [
135
+ _hook(
136
+ _dispatch("PostCompact", "postcompact"),
137
+ _SESSION_TIMEOUT_MS,
138
+ "Restore state from durable files after compaction.",
139
+ ),
140
+ ],
141
+ },
142
+ ],
143
+ "Stop": [
144
+ {
145
+ "hooks": [
146
+ _hook(
147
+ _dispatch("Stop", "stop"),
148
+ _STOP_TIMEOUT_MS,
149
+ "Finalize the session and externalize state.",
150
+ ),
151
+ ],
152
+ },
153
+ ],
154
+ }
155
+
156
+
157
+ def materialize_native_config(profile: dict[str, Any]) -> str:
158
+ """Render the qwen-code native configuration from *profile*.
159
+
160
+ Renders the QWEN.md context pointer, the hook wiring, and the profile's MCP
161
+ inventory into qwen's native ``mcpServers`` surface. Returns a JSON string
162
+ ready to be written to ``output_path``.
163
+ """
164
+ for_harness = coerce_profile(profile).for_harness("qwen-code")
165
+ config: dict[str, Any] = {
166
+ "context": {
167
+ "fileName": "QWEN.md",
168
+ },
169
+ "hooks": _qwen_hooks(),
170
+ }
171
+ mcp = render_mcp_standard(mcp_servers_for(for_harness))
172
+ if mcp:
173
+ config["mcpServers"] = mcp
174
+ return json.dumps(config, indent=2, ensure_ascii=False) + "\n"
@@ -0,0 +1,30 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Apothem — Qwen Code Bootstrap
4
+
5
+ This file is the user-scope context anchor installed by Apothem for Qwen Code.
6
+ The native JSON settings file remains `~/.qwen/settings.json`; Apothem writes
7
+ that file from the shared profile, registers native hook dispatchers, and
8
+ installs reusable Apothem cohorts into Qwen Code's native discovery surfaces
9
+ where they exist.
10
+
11
+ ## Apothem Cohorts
12
+
13
+ Resolve Apothem's native Qwen Code cohorts at:
14
+
15
+ - `~/.qwen/commands/` contains slash commands converted to Qwen Markdown
16
+ command files.
17
+ - `~/.qwen/skills/` contains reusable SKILL.md skill directories.
18
+ - `~/.qwen/agents/` contains local subagents adapted to Qwen Code's Markdown
19
+ agent frontmatter.
20
+
21
+ Resolve Apothem support paths under `~/.qwen/apothem/`:
22
+
23
+ - `rules/` contains behavioral rules and path-filtered conventions.
24
+ - `templates/` contains plan and report templates.
25
+ - `hooks/` contains hook messages and helper scripts used by the
26
+ `settings.json` hook commands.
27
+
28
+ Use the support subtree as reference material when Qwen Code does not expose a
29
+ matching file-based primitive. Do not treat it as a vendor-owned configuration
30
+ namespace.
@@ -0,0 +1,34 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Uninstall logic for the qwen-code harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from pathlib import Path
8
+
9
+ from apothem.harnesses._shared import install_driver
10
+ from apothem.harnesses.qwen_code.materializer import materialize_native_config
11
+
12
+ _HARNESS_NAME: str = "qwen_code"
13
+
14
+
15
+ def uninstall(output_path: Path) -> None:
16
+ """Remove Apothem-managed Qwen Code targets surgically.
17
+
18
+ The native ``settings.json`` is rendered by the materializer rather than the
19
+ manifest, so it is cleaned here: only Apothem's keys (``context``, the hook
20
+ handlers, the ``mcpServers`` block) are stripped from the parsed operator
21
+ JSON — operator-added keys and non-Apothem hooks survive — and the file is
22
+ deleted only when nothing operator-authored remains. The pre-mutation file is
23
+ copied into the Apothem backup root; no whole-file ``.bak`` sibling is left
24
+ beside the operator's file. The manifest support subtree is then cleaned
25
+ child-by-child by the shared driver.
26
+ """
27
+ install_driver.surgically_remove_materialized_config(
28
+ output_path,
29
+ materialize_native_config({}),
30
+ install_root=output_path.parent,
31
+ harness_name=_HARNESS_NAME,
32
+ apothem_keys=frozenset({"mcpServers"}),
33
+ )
34
+ install_driver.run_uninstall(_HARNESS_NAME, harness_root=output_path.parent)
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Update logic for the qwen-code harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_update
8
+ from apothem.harnesses.qwen_code.install import install
9
+
10
+ update = make_update(install)
@@ -0,0 +1,11 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Verify logic for the qwen_code harness adapter."""
4
+
5
+ from __future__ import annotations
6
+
7
+ from apothem.harnesses._shared.wrapper_factories import make_verify_native_config
8
+
9
+ _HARNESS_NAME: str = "qwen_code"
10
+
11
+ verify = make_verify_native_config(_HARNESS_NAME)
@@ -0,0 +1,70 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Trae Standard Convention Pin
4
+
5
+ ## Snapshot
6
+
7
+ - Snapshot date: 2026-06-25
8
+ - Snapshot note: live re-verification against `docs.trae.ai` surfaced findings: (1) STALENESS — the pin framed Trae's agent surface as absent, but the vendor documents Agents (`docs.trae.ai/ide/agent`, create + manage); (2) skills live in BOTH `.trae/skills/` AND the cross-tool `.agents/skills/` (with `.trae/skills/` winning name collisions) — the pin cited only `.trae/skills/`; (3) `.trae/rules/` supports recursive subfolders up to three levels of nesting. The adapter's rules-only delivery remains a DELIBERATE posture. `.trae/rules/` + `project_rules.md`/`user_rules.md` anchors, AGENTS.md, and MCP (`.trae/mcp.json`, three transport types) all confirmed current. Previous 2026-06-09.
9
+ - Adapter source: `src/apothem/harnesses/trae/`
10
+ - Evidence level: adapter-local projection; no vendor-native UI claim is made here.
11
+
12
+ ## Official Surface Refresh
13
+
14
+ - Refreshed live 2026-06-09 against the current Trae documentation
15
+ (`docs.trae.ai`, https://docs.trae.ai/ide/rules). No authority-host move; no
16
+ immutable version pin is exposed (mutable docs site), so every captured
17
+ convention carries a no-immutable-source exception.
18
+ - Config-root note: the Trae workspace rules directory is `.trae/rules/`. The
19
+ vendor anchors are `project_rules.md` (project scope) and `user_rules.md`
20
+ (user scope). The adapter is project-scope and writes only a dedicated
21
+ `<project>/.trae/rules/apothem-rules.md` file alongside those anchors; it
22
+ never clobbers `project_rules.md` or `user_rules.md`.
23
+ - MCP is recognized: `.trae/mcp.json` is operator-owned; the adapter recognizes
24
+ it but does not author entries. `capabilities.yml` `mcp_servers` and the
25
+ shared capability matrix were set accordingly.
26
+ - Workspace rules are a `.trae/rules/*.md` directory of Markdown files, not a
27
+ single file; `layered_context_surface` matches.
28
+ - The vendor documents skills (`.trae/skills/` plus the cross-tool
29
+ `.agents/skills/`, with `.trae/skills/` winning name collisions), Agents
30
+ (`docs.trae.ai/ide/agent`), and MCP (`.trae/mcp.json`, three transport types).
31
+ The adapter delivers only the project rules file and authors none of those
32
+ cohorts: a DELIBERATE rules-only posture, not a claim the surfaces are absent.
33
+ Settings and status-lines remain undocumented as adapter-owned file surfaces.
34
+
35
+ ## Recommended Postfix Rendering
36
+
37
+ - Status: supported as plain text.
38
+ - Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. Trae rule templates preserve that suffix as authored.
39
+ - Boundary: this pin does not claim a harness-native recommended-option widget. It only pins the text-rendered convention used by `rules/interactive-questions.md`.
40
+
41
+ ## Long Context and Compaction
42
+
43
+ - Status: profile-managed.
44
+ - Mechanism: Apothem keeps full-suite `/plan-execute` runs continuous by externalizing state to `.apothem/plans/`, compacting or restarting the harness session at phase boundaries as needed, and restoring via the Blind Bootstrap sequence.
45
+ - Boundary: this pin does not claim vendor-native autocompaction or a long-context size. It pins the adapter-local state handoff and compaction-restoration convention used by `rules/context-management.md`.
46
+
47
+ ## Large-Codebase Practice Projection
48
+
49
+ - Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
50
+ - LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
51
+ - Hook learning capture: routed through the `persistent-conventions-vigilance` artifact-evolution cycle; pass-class hooks stay silent and recurring findings become rule, skill, hook, or documentation updates.
52
+
53
+ ## Plugin-alone Persistence
54
+
55
+ Trae exposes **no vendor plugin or extension install surface** that Apothem
56
+ ships. The adapter is project-scope rules-only: it writes a single merged rules
57
+ file at `<project>/.trae/rules/apothem-rules.md` (alongside, never clobbering,
58
+ the `project_rules.md` / `user_rules.md` anchors) and authors no other cohort.
59
+ There is no standalone-installable bundle; every artifact requires the full
60
+ `apothem install --harness trae --project <path>` engine run.
61
+
62
+ | Artifact class | Persists standalone? | Mechanism / limit |
63
+ |---|---|---|
64
+ | Rules | No — requires `apothem install` | The merged `apothem-rules.md` (carrying the embedded behavioral mandates) is written only by the engine into the vendor-native `.trae/rules/` directory. Nothing persists before that run. |
65
+ | Commands / Skills / Agents | No — deliberate rules-only posture | Trae documents skills (`.trae/skills/` + `.agents/skills/`) and Agents (`docs.trae.ai/ide/agent`), but the adapter authors none of them (preserve-first rules-only delivery); these cohorts are not materialized for this harness by design. |
66
+ | Hooks / MCP / Settings | No — operator-owned / platform limit | `.trae/mcp.json` (MCP) is operator-owned; the adapter authors no entries. |
67
+
68
+ Platform limit: Trae ships no marketplace/extension channel, so a plugin-alone
69
+ story does not exist — the merged rules file via `apothem install` is the sole
70
+ persistence surface.
@@ -0,0 +1,49 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Apothem harness adapter for trae — project-scope install.
4
+
5
+ Materializes the apothem rules surface into the operator-supplied
6
+ project root at ``<project>/.trae/rules/apothem-rules.md`` — a dedicated
7
+ apothem rules file inside Trae's documented ``.trae/rules/`` directory per
8
+ https://docs.trae.ai/ide/rules. The vendor anchors ``project_rules.md`` and
9
+ ``user_rules.md`` are never clobbered: Apothem writes only its own
10
+ ``apothem-rules.md`` file alongside them. Trae's MCP surface
11
+ (``.trae/mcp.json``) and skill surface (``.trae/skills/``) are operator-owned
12
+ and out of apothem's adapter scope.
13
+
14
+ The adapter opts into the project-scope contract via
15
+ ``requires_project = True``; the CLI rejects an install / update /
16
+ uninstall / verify invocation that omits ``--project <path>``. Delegates
17
+ install logic to :mod:`apothem.harnesses.trae.install`, which
18
+ consumes the canonical propagation manifest at
19
+ ``src/apothem/lib/propagation-manifest.yaml``.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ from pathlib import Path
25
+
26
+ from apothem.harnesses._shared.wrapper_factories import make_project_scope_adapter
27
+ from apothem.harnesses.trae.install import install as _install
28
+ from apothem.harnesses.trae.install import plan as _plan
29
+ from apothem.harnesses.trae.uninstall import uninstall as _uninstall
30
+ from apothem.harnesses.trae.update import update as _update
31
+ from apothem.harnesses.trae.verify import verify as _verify
32
+
33
+ # Sentinel relative path used by ``output_path`` for display purposes
34
+ # only. The real target is resolved per-install via
35
+ # ``resolve_output_path(project)`` once the operator supplies
36
+ # ``--project <path>``.
37
+ _SENTINEL_RELATIVE: Path = Path(".trae") / "rules" / "apothem-rules.md"
38
+
39
+ TraeAdapter = make_project_scope_adapter(
40
+ "trae",
41
+ error_label="trae",
42
+ relative_target=_SENTINEL_RELATIVE,
43
+ install_fn=_install,
44
+ plan_fn=_plan,
45
+ uninstall_fn=_uninstall,
46
+ update_fn=_update,
47
+ verify_fn=_verify,
48
+ class_name="TraeAdapter",
49
+ )
@@ -0,0 +1,34 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ # Per rules/agent-capability-discipline.md §1 / §3 / §7. Trae
4
+ # ratifies MCP via .trae/mcp.json (operator-owned; the adapter
5
+ # recognizes it but does not author entries). The adapter delivers a
6
+ # single project rules file under .trae/rules/ and does not dispatch
7
+ # sub-agents or author skill/command/hook cohorts.
8
+
9
+ mcp_servers:
10
+ - project-scope-.trae/mcp.json
11
+ # Operator-owned MCP surface: the adapter recognizes it but authors no entries.
12
+ mcp_servers_authored: false
13
+ sub_agent_dispatch: false
14
+ custom_command_support: "no"
15
+ recommended_postfix_rendering: "plain-text"
16
+ long_context_compaction: "profile-managed"
17
+ context_ignore_surface: "not-documented-in-current-pin"
18
+ layered_context_surface: ".trae/rules/*.md directory"
19
+ lsp_symbol_navigation: "tracked-gap-no-adapter-owned-LSP-surface"
20
+ hook_learning_capture: "artifact-evolution-cycle"
21
+ standard_convention_pin: "STANDARD-CONVENTION-PIN.md"
22
+ # web-fetch / browser-retrieval surface — the backing capability dimension for
23
+ # rules/source-accessibility.md step 1 ("retrieve through the host's browser /
24
+ # fetch capability"). The pinned snapshot catalogs config-materialization
25
+ # surfaces, not the vendor tool surface, so the web-fetch tool is not yet
26
+ # discovered against the pin — discovery-pending per
27
+ # rules/agent-capability-discipline-matrix.md §1.
28
+ web_fetch: "discovery-pending"
29
+ tool_surface_restrictions:
30
+ - secrets-paths
31
+ - destructive-shell-ops
32
+ - network-write-unsigned
33
+ system_prompt_template_path: "templates/apothem-rules.md"
34
+ agent_memory_surface: "n/a"
@@ -0,0 +1,38 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Install logic for the trae harness adapter.
4
+
5
+ Materializes the apothem Trae rules surface into the operator-supplied
6
+ project root. Trae's canonical rules surface is the project-scope
7
+ Markdown format at ``<project>/.trae/rules/*.md`` (per
8
+ https://docs.trae.ai/ide/rules). The adapter writes a dedicated
9
+ ``apothem-rules.md`` file alongside the operator-owned ``project_rules.md``
10
+ and ``user_rules.md`` anchors; the vendor anchors are never clobbered.
11
+
12
+ The propagation contract is declared in the canonical manifest at
13
+ ``src/apothem/lib/propagation-manifest.yaml`` under the ``trae`` key
14
+ (a single ``sentinel_merge`` operation targeting
15
+ ``${PROJECT_ROOT}/.trae/rules/apothem-rules.md``) and applied by the
16
+ shared driver at ``apothem.harnesses._shared.install_driver``. The
17
+ ``${PROJECT_ROOT}`` placeholder is substituted with the operator-supplied
18
+ ``--project <path>`` value the CLI threads through; absence of
19
+ ``--project`` is rejected upstream at ``apothem.cli._materialize`` via the
20
+ ``requires_project`` opt-in.
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ from apothem.harnesses._shared.wrapper_factories import (
26
+ make_project_scope_install,
27
+ make_project_scope_plan,
28
+ )
29
+
30
+ # Manifest harness key for this adapter.
31
+ _HARNESS_NAME: str = "trae"
32
+
33
+ install = make_project_scope_install(
34
+ _HARNESS_NAME,
35
+ error_message="trae adapter requires --project <path>; CLI must thread it through",
36
+ )
37
+
38
+ plan = make_project_scope_plan(_HARNESS_NAME)