@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.
- package/CHANGELOG.md +60 -0
- package/LICENSE +21 -0
- package/LICENSES/MIT.txt +18 -0
- package/LICENSES/PSF-2.0.txt +47 -0
- package/README.md +549 -0
- package/bin/README.md +37 -0
- package/bin/apothem.mjs +78 -0
- package/package.json +75 -0
- package/pyproject.toml +347 -0
- package/src/apothem/README.md +52 -0
- package/src/apothem/__init__.py +66 -0
- package/src/apothem/__main__.py +28 -0
- package/src/apothem/_vendor/.keep +0 -0
- package/src/apothem/_vendor/__init__.py +25 -0
- package/src/apothem/_vendor/attr/__init__.py +104 -0
- package/src/apothem/_vendor/attr/__init__.pyi +389 -0
- package/src/apothem/_vendor/attr/_cmp.py +160 -0
- package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
- package/src/apothem/_vendor/attr/_compat.py +99 -0
- package/src/apothem/_vendor/attr/_config.py +31 -0
- package/src/apothem/_vendor/attr/_funcs.py +497 -0
- package/src/apothem/_vendor/attr/_make.py +3406 -0
- package/src/apothem/_vendor/attr/_next_gen.py +674 -0
- package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
- package/src/apothem/_vendor/attr/_version_info.py +89 -0
- package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
- package/src/apothem/_vendor/attr/converters.py +162 -0
- package/src/apothem/_vendor/attr/converters.pyi +19 -0
- package/src/apothem/_vendor/attr/exceptions.py +95 -0
- package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
- package/src/apothem/_vendor/attr/filters.py +72 -0
- package/src/apothem/_vendor/attr/filters.pyi +6 -0
- package/src/apothem/_vendor/attr/py.typed +0 -0
- package/src/apothem/_vendor/attr/setters.py +79 -0
- package/src/apothem/_vendor/attr/setters.pyi +20 -0
- package/src/apothem/_vendor/attr/validators.py +750 -0
- package/src/apothem/_vendor/attr/validators.pyi +140 -0
- package/src/apothem/_vendor/attr.LICENSE +21 -0
- package/src/apothem/_vendor/attrs/__init__.py +72 -0
- package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
- package/src/apothem/_vendor/attrs/converters.py +3 -0
- package/src/apothem/_vendor/attrs/exceptions.py +3 -0
- package/src/apothem/_vendor/attrs/filters.py +3 -0
- package/src/apothem/_vendor/attrs/py.typed +0 -0
- package/src/apothem/_vendor/attrs/setters.py +3 -0
- package/src/apothem/_vendor/attrs/validators.py +3 -0
- package/src/apothem/_vendor/attrs.LICENSE +21 -0
- package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
- package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
- package/src/apothem/_vendor/jsonschema/_format.py +546 -0
- package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
- package/src/apothem/_vendor/jsonschema/_types.py +204 -0
- package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
- package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
- package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
- package/src/apothem/_vendor/jsonschema/cli.py +292 -0
- package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
- package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
- package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
- package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
- package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
- package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
- package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
- package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
- package/src/apothem/_vendor/referencing/__init__.py +7 -0
- package/src/apothem/_vendor/referencing/_attrs.py +31 -0
- package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
- package/src/apothem/_vendor/referencing/_core.py +739 -0
- package/src/apothem/_vendor/referencing/exceptions.py +165 -0
- package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
- package/src/apothem/_vendor/referencing/py.typed +0 -0
- package/src/apothem/_vendor/referencing/retrieval.py +94 -0
- package/src/apothem/_vendor/referencing/typing.py +61 -0
- package/src/apothem/_vendor/referencing.LICENSE +19 -0
- package/src/apothem/_vendor/rpds/__init__.py +251 -0
- package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
- package/src/apothem/_vendor/typing_extensions.py +4317 -0
- package/src/apothem/_vendor/vendor.txt +22 -0
- package/src/apothem/_vendor/yaml/__init__.py +389 -0
- package/src/apothem/_vendor/yaml/composer.py +138 -0
- package/src/apothem/_vendor/yaml/constructor.py +748 -0
- package/src/apothem/_vendor/yaml/cyaml.py +100 -0
- package/src/apothem/_vendor/yaml/dumper.py +61 -0
- package/src/apothem/_vendor/yaml/emitter.py +1137 -0
- package/src/apothem/_vendor/yaml/error.py +74 -0
- package/src/apothem/_vendor/yaml/events.py +85 -0
- package/src/apothem/_vendor/yaml/loader.py +63 -0
- package/src/apothem/_vendor/yaml/nodes.py +48 -0
- package/src/apothem/_vendor/yaml/parser.py +588 -0
- package/src/apothem/_vendor/yaml/reader.py +185 -0
- package/src/apothem/_vendor/yaml/representer.py +388 -0
- package/src/apothem/_vendor/yaml/resolver.py +226 -0
- package/src/apothem/_vendor/yaml/scanner.py +1435 -0
- package/src/apothem/_vendor/yaml/serializer.py +110 -0
- package/src/apothem/_vendor/yaml/tokens.py +103 -0
- package/src/apothem/_vendor/yaml.LICENSE +20 -0
- package/src/apothem/agents/README.md +60 -0
- package/src/apothem/agents/codebase-explorer.md +91 -0
- package/src/apothem/agents/convention-auditor.md +93 -0
- package/src/apothem/agents/dependency-auditor.md +97 -0
- package/src/apothem/agents/fact-checker.md +84 -0
- package/src/apothem/agents/mcp-builder.md +86 -0
- package/src/apothem/agents/memory-auditor.md +93 -0
- package/src/apothem/agents/prompt-evaluator.md +87 -0
- package/src/apothem/agents/quality-gate.md +103 -0
- package/src/apothem/agents/refactor-surgeon.md +74 -0
- package/src/apothem/agents/research-scout.md +73 -0
- package/src/apothem/agents/security-scanner.md +83 -0
- package/src/apothem/agents/test-runner.md +84 -0
- package/src/apothem/audit/README.md +73 -0
- package/src/apothem/audit/_scan_lib.py +182 -0
- package/src/apothem/audit/analyze_graph.py +260 -0
- package/src/apothem/audit/build_capability_graph.py +607 -0
- package/src/apothem/audit/build_inventory.py +657 -0
- package/src/apothem/audit/build_plans_provenance.py +997 -0
- package/src/apothem/audit/check_links.py +389 -0
- package/src/apothem/audit/classify_artifacts.py +381 -0
- package/src/apothem/audit/deprecated-tokens.txt +10 -0
- package/src/apothem/audit/execute_plans_migration.py +491 -0
- package/src/apothem/audit/known-projects.txt +15 -0
- package/src/apothem/audit/render_capability_index.py +467 -0
- package/src/apothem/audit/render_inventory.py +405 -0
- package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
- package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
- package/src/apothem/audit/scan_drift_features.py +143 -0
- package/src/apothem/audit/scan_frontmatter.py +293 -0
- package/src/apothem/audit/scan_header_coverage.py +1134 -0
- package/src/apothem/audit/scan_plan_leakage.py +540 -0
- package/src/apothem/audit/scan_plans_discipline.py +188 -0
- package/src/apothem/audit/scan_secrets_pii.py +245 -0
- package/src/apothem/audit/scan_stale_tokens.py +296 -0
- package/src/apothem/audit/synthesize_drift.py +205 -0
- package/src/apothem/benchmarks/README.md +33 -0
- package/src/apothem/benchmarks/__init__.py +3 -0
- package/src/apothem/benchmarks/bench_agents.py +63 -0
- package/src/apothem/benchmarks/bench_hooks.py +93 -0
- package/src/apothem/benchmarks/bench_install.py +58 -0
- package/src/apothem/benchmarks/bench_tests.py +93 -0
- package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
- package/src/apothem/cli/README.md +33 -0
- package/src/apothem/cli/__init__.py +229 -0
- package/src/apothem/cli/_cmd_completion.py +88 -0
- package/src/apothem/cli/_cmd_diff.py +181 -0
- package/src/apothem/cli/_cmd_doctor.py +143 -0
- package/src/apothem/cli/_cmd_harnesses.py +167 -0
- package/src/apothem/cli/_cmd_install.py +327 -0
- package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
- package/src/apothem/cli/_cmd_profile.py +341 -0
- package/src/apothem/cli/_cmd_status.py +180 -0
- package/src/apothem/cli/_cmd_uninstall.py +215 -0
- package/src/apothem/cli/_cmd_update.py +397 -0
- package/src/apothem/cli/_cmd_verify.py +194 -0
- package/src/apothem/cli/_common_flags.py +90 -0
- package/src/apothem/cli/_epilogs.py +296 -0
- package/src/apothem/cli/_helpers.py +857 -0
- package/src/apothem/cli/_json_formatter.py +21 -0
- package/src/apothem/cli/_materialize.py +376 -0
- package/src/apothem/cli/completions/apothem.bash +30 -0
- package/src/apothem/cli/completions/apothem.fish +19 -0
- package/src/apothem/cli/completions/apothem.ps1 +27 -0
- package/src/apothem/cli/completions/apothem.zsh +42 -0
- package/src/apothem/cli/reference_export.py +126 -0
- package/src/apothem/commands/README.md +125 -0
- package/src/apothem/commands/a11y-audit.md +203 -0
- package/src/apothem/commands/architecture-review.md +194 -0
- package/src/apothem/commands/audit.md +165 -0
- package/src/apothem/commands/code-audit.md +218 -0
- package/src/apothem/commands/code-review.md +193 -0
- package/src/apothem/commands/dependency-audit.md +209 -0
- package/src/apothem/commands/docs-review.md +199 -0
- package/src/apothem/commands/elevate.md +285 -0
- package/src/apothem/commands/eval.md +149 -0
- package/src/apothem/commands/fortress.md +172 -0
- package/src/apothem/commands/freshify.md +168 -0
- package/src/apothem/commands/github-deploy-fresh.md +178 -0
- package/src/apothem/commands/github-deploy-next.md +167 -0
- package/src/apothem/commands/perf-audit.md +198 -0
- package/src/apothem/commands/plan-amend.md +104 -0
- package/src/apothem/commands/plan-audit.md +127 -0
- package/src/apothem/commands/plan-design.md +257 -0
- package/src/apothem/commands/plan-execute.md +495 -0
- package/src/apothem/commands/plan-generate.md +351 -0
- package/src/apothem/commands/plan-review.md +555 -0
- package/src/apothem/commands/plan-spec.md +359 -0
- package/src/apothem/commands/plan-status.md +222 -0
- package/src/apothem/commands/plan.md +173 -0
- package/src/apothem/commands/projectify.md +142 -0
- package/src/apothem/commands/release-readiness.md +142 -0
- package/src/apothem/commands/research-analysis.md +241 -0
- package/src/apothem/commands/research-design.md +231 -0
- package/src/apothem/commands/research-disseminate.md +225 -0
- package/src/apothem/commands/research-experiment.md +232 -0
- package/src/apothem/commands/research-ideate.md +213 -0
- package/src/apothem/commands/research-paper.md +252 -0
- package/src/apothem/commands/research-proposal.md +220 -0
- package/src/apothem/commands/research-publish.md +255 -0
- package/src/apothem/commands/research-review.md +251 -0
- package/src/apothem/commands/research-sources.md +266 -0
- package/src/apothem/commands/research-spec.md +255 -0
- package/src/apothem/commands/research-synthesis.md +233 -0
- package/src/apothem/commands/research-theory.md +218 -0
- package/src/apothem/commands/research.md +181 -0
- package/src/apothem/commands/security-audit.md +196 -0
- package/src/apothem/commands/supply-chain-audit.md +192 -0
- package/src/apothem/commands/test-suite.md +146 -0
- package/src/apothem/commands/threat-model-audit.md +199 -0
- package/src/apothem/commands/ux-review.md +202 -0
- package/src/apothem/commands/workflow.md +162 -0
- package/src/apothem/conformity/README.md +173 -0
- package/src/apothem/conformity/__init__.py +1 -0
- package/src/apothem/conformity/_grep_base.py +93 -0
- package/src/apothem/conformity/agent_capability_grep.py +306 -0
- package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
- package/src/apothem/conformity/agnosticism_grep.py +311 -0
- package/src/apothem/conformity/always_on_budget_grep.py +318 -0
- package/src/apothem/conformity/bare_except_grep.py +115 -0
- package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
- package/src/apothem/conformity/brand_mark_grep.py +272 -0
- package/src/apothem/conformity/commented_out_code_grep.py +176 -0
- package/src/apothem/conformity/completion_claim_grep.py +169 -0
- package/src/apothem/conformity/conventional_commit_grep.py +319 -0
- package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
- package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
- package/src/apothem/conformity/determinism_grep.py +306 -0
- package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
- package/src/apothem/conformity/dynamism_grep.py +284 -0
- package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
- package/src/apothem/conformity/file_header_grep.py +502 -0
- package/src/apothem/conformity/freshness_token_grep.py +233 -0
- package/src/apothem/conformity/frontmatter_grep.py +274 -0
- package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
- package/src/apothem/conformity/gate.py +1386 -0
- package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
- package/src/apothem/conformity/harden_runner_grep.py +320 -0
- package/src/apothem/conformity/hedging_grep.py +129 -0
- package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
- package/src/apothem/conformity/link_check.py +327 -0
- package/src/apothem/conformity/magic_number_grep.py +182 -0
- package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
- package/src/apothem/conformity/naming_grep.py +224 -0
- package/src/apothem/conformity/no_global_plans_grep.py +339 -0
- package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
- package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
- package/src/apothem/conformity/option_annotation_grep.py +352 -0
- package/src/apothem/conformity/orphan_output_grep.py +206 -0
- package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
- package/src/apothem/conformity/plain_language_grep.py +559 -0
- package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
- package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
- package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
- package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
- package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
- package/src/apothem/conformity/redundancy_grep.py +401 -0
- package/src/apothem/conformity/reference_token_grep.py +230 -0
- package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
- package/src/apothem/conformity/secret_leak_grep.py +193 -0
- package/src/apothem/conformity/semver_stability_grep.py +358 -0
- package/src/apothem/conformity/smoke_install_grep.py +194 -0
- package/src/apothem/conformity/static_version_grep.py +284 -0
- package/src/apothem/conformity/token_efficiency_grep.py +185 -0
- package/src/apothem/conformity/unpinned_action_grep.py +115 -0
- package/src/apothem/conformity/user_confirm_grep.py +74 -0
- package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
- package/src/apothem/harnesses/README.md +63 -0
- package/src/apothem/harnesses/__init__.py +16 -0
- package/src/apothem/harnesses/_shared/README.md +36 -0
- package/src/apothem/harnesses/_shared/__init__.py +12 -0
- package/src/apothem/harnesses/_shared/install_driver.py +281 -0
- package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
- package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
- package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
- package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
- package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
- package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
- package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
- package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
- package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
- package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
- package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
- package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
- package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/antigravity/__init__.py +70 -0
- package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
- package/src/apothem/harnesses/antigravity/install.py +63 -0
- package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
- package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
- package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
- package/src/apothem/harnesses/antigravity/update.py +10 -0
- package/src/apothem/harnesses/antigravity/verify.py +11 -0
- package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
- package/src/apothem/harnesses/claude_code/__init__.py +107 -0
- package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
- package/src/apothem/harnesses/claude_code/install.py +147 -0
- package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
- package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
- package/src/apothem/harnesses/claude_code/update.py +10 -0
- package/src/apothem/harnesses/claude_code/verify.py +11 -0
- package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
- package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
- package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
- package/src/apothem/harnesses/codebuddy/install.py +40 -0
- package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
- package/src/apothem/harnesses/codebuddy/update.py +10 -0
- package/src/apothem/harnesses/codebuddy/verify.py +11 -0
- package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/codex/__init__.py +72 -0
- package/src/apothem/harnesses/codex/capabilities.yml +40 -0
- package/src/apothem/harnesses/codex/install.py +69 -0
- package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
- package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
- package/src/apothem/harnesses/codex/uninstall.py +23 -0
- package/src/apothem/harnesses/codex/update.py +10 -0
- package/src/apothem/harnesses/codex/verify.py +11 -0
- package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
- package/src/apothem/harnesses/cursor/__init__.py +48 -0
- package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
- package/src/apothem/harnesses/cursor/install.py +38 -0
- package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
- package/src/apothem/harnesses/cursor/uninstall.py +25 -0
- package/src/apothem/harnesses/cursor/update.py +10 -0
- package/src/apothem/harnesses/cursor/verify.py +11 -0
- package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
- package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
- package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
- package/src/apothem/harnesses/gemini_cli/install.py +43 -0
- package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
- package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
- package/src/apothem/harnesses/gemini_cli/update.py +10 -0
- package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
- package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
- package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
- package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
- package/src/apothem/harnesses/github_copilot/install.py +40 -0
- package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
- package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
- package/src/apothem/harnesses/github_copilot/update.py +10 -0
- package/src/apothem/harnesses/github_copilot/verify.py +11 -0
- package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/glm/__init__.py +56 -0
- package/src/apothem/harnesses/glm/capabilities.yml +33 -0
- package/src/apothem/harnesses/glm/install.py +45 -0
- package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
- package/src/apothem/harnesses/glm/uninstall.py +25 -0
- package/src/apothem/harnesses/glm/update.py +10 -0
- package/src/apothem/harnesses/glm/verify.py +11 -0
- package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
- package/src/apothem/harnesses/hermes/__init__.py +33 -0
- package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
- package/src/apothem/harnesses/hermes/install.py +17 -0
- package/src/apothem/harnesses/hermes/materializer.py +35 -0
- package/src/apothem/harnesses/hermes/uninstall.py +33 -0
- package/src/apothem/harnesses/hermes/update.py +10 -0
- package/src/apothem/harnesses/hermes/verify.py +11 -0
- package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
- package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
- package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
- package/src/apothem/harnesses/kimi_code/install.py +42 -0
- package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
- package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
- package/src/apothem/harnesses/kimi_code/update.py +10 -0
- package/src/apothem/harnesses/kimi_code/verify.py +11 -0
- package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
- package/src/apothem/harnesses/kiro/__init__.py +49 -0
- package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
- package/src/apothem/harnesses/kiro/install.py +39 -0
- package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
- package/src/apothem/harnesses/kiro/uninstall.py +25 -0
- package/src/apothem/harnesses/kiro/update.py +10 -0
- package/src/apothem/harnesses/kiro/verify.py +11 -0
- package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
- package/src/apothem/harnesses/open_claw/__init__.py +35 -0
- package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
- package/src/apothem/harnesses/open_claw/install.py +17 -0
- package/src/apothem/harnesses/open_claw/materializer.py +36 -0
- package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
- package/src/apothem/harnesses/open_claw/update.py +10 -0
- package/src/apothem/harnesses/open_claw/verify.py +11 -0
- package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
- package/src/apothem/harnesses/opencode/__init__.py +35 -0
- package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
- package/src/apothem/harnesses/opencode/install.py +17 -0
- package/src/apothem/harnesses/opencode/materializer.py +31 -0
- package/src/apothem/harnesses/opencode/uninstall.py +34 -0
- package/src/apothem/harnesses/opencode/update.py +10 -0
- package/src/apothem/harnesses/opencode/verify.py +11 -0
- package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
- package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
- package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
- package/src/apothem/harnesses/qwen_code/install.py +19 -0
- package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
- package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
- package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
- package/src/apothem/harnesses/qwen_code/update.py +10 -0
- package/src/apothem/harnesses/qwen_code/verify.py +11 -0
- package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
- package/src/apothem/harnesses/trae/__init__.py +49 -0
- package/src/apothem/harnesses/trae/capabilities.yml +34 -0
- package/src/apothem/harnesses/trae/install.py +38 -0
- package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/trae/uninstall.py +25 -0
- package/src/apothem/harnesses/trae/update.py +10 -0
- package/src/apothem/harnesses/trae/verify.py +11 -0
- package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
- package/src/apothem/harnesses/windsurf/__init__.py +52 -0
- package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
- package/src/apothem/harnesses/windsurf/install.py +41 -0
- package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
- package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
- package/src/apothem/harnesses/windsurf/update.py +10 -0
- package/src/apothem/harnesses/windsurf/verify.py +11 -0
- package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
- package/src/apothem/harnesses/zed/__init__.py +57 -0
- package/src/apothem/harnesses/zed/capabilities.yml +38 -0
- package/src/apothem/harnesses/zed/install.py +41 -0
- package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
- package/src/apothem/harnesses/zed/uninstall.py +28 -0
- package/src/apothem/harnesses/zed/update.py +10 -0
- package/src/apothem/harnesses/zed/verify.py +11 -0
- package/src/apothem/hooks/README.md +81 -0
- package/src/apothem/hooks/__init__.py +24 -0
- package/src/apothem/hooks/askuserquestion_validator.py +380 -0
- package/src/apothem/hooks/dispatch.py +296 -0
- package/src/apothem/hooks/emit_hook_context.py +444 -0
- package/src/apothem/hooks/hooks.json +318 -0
- package/src/apothem/hooks/lib/README.md +39 -0
- package/src/apothem/hooks/lib/__init__.py +18 -0
- package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
- package/src/apothem/hooks/lib/bootstrap.sh +103 -0
- package/src/apothem/hooks/lib/events.py +51 -0
- package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
- package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
- package/src/apothem/hooks/lib/find-python.ps1 +63 -0
- package/src/apothem/hooks/lib/find-python.sh +97 -0
- package/src/apothem/hooks/lib/log.py +43 -0
- package/src/apothem/hooks/lib/resolve_root.py +264 -0
- package/src/apothem/hooks/messages/postcompact.md +14 -0
- package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
- package/src/apothem/hooks/messages/precompact.md +14 -0
- package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
- package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
- package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
- package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
- package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
- package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
- package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
- package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
- package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
- package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
- package/src/apothem/hooks/messages/sessionstart.md +15 -0
- package/src/apothem/hooks/messages/stop.md +27 -0
- package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
- package/src/apothem/hooks/session_start_bootstrap.py +472 -0
- package/src/apothem/lib/README.md +42 -0
- package/src/apothem/lib/__init__.py +13 -0
- package/src/apothem/lib/atomic_io.py +189 -0
- package/src/apothem/lib/auditor.py +687 -0
- package/src/apothem/lib/clean_slate.py +396 -0
- package/src/apothem/lib/contexts.py +352 -0
- package/src/apothem/lib/data_home.py +255 -0
- package/src/apothem/lib/frontmatter.py +101 -0
- package/src/apothem/lib/harness_materializer.py +213 -0
- package/src/apothem/lib/harness_protocol.py +59 -0
- package/src/apothem/lib/harness_registry.py +282 -0
- package/src/apothem/lib/harness_registry_data.py +843 -0
- package/src/apothem/lib/install_ledger.py +347 -0
- package/src/apothem/lib/learning.py +540 -0
- package/src/apothem/lib/memory.py +347 -0
- package/src/apothem/lib/parallel_sweep.py +234 -0
- package/src/apothem/lib/plan_tiers.py +200 -0
- package/src/apothem/lib/plugin_bootstrap.py +132 -0
- package/src/apothem/lib/plugin_tree.py +599 -0
- package/src/apothem/lib/profile.py +755 -0
- package/src/apothem/lib/profile_projection.py +198 -0
- package/src/apothem/lib/propagation-manifest.yaml +878 -0
- package/src/apothem/lib/propagation.py +220 -0
- package/src/apothem/lib/python_resolver.py +189 -0
- package/src/apothem/lib/reporter.py +62 -0
- package/src/apothem/lib/workspace_migration.py +323 -0
- package/src/apothem/output-styles/README.md +41 -0
- package/src/apothem/output-styles/concise-engineer.md +49 -0
- package/src/apothem/output-styles/default-architect.md +52 -0
- package/src/apothem/output-styles/default.md +113 -0
- package/src/apothem/output-styles/forensic-auditor.md +63 -0
- package/src/apothem/py.typed +0 -0
- package/src/apothem/rules/README.md +121 -0
- package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
- package/src/apothem/rules/agent-capability-discipline.md +78 -0
- package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
- package/src/apothem/rules/agent-orchestration.md +65 -0
- package/src/apothem/rules/agents-md-convention.md +86 -0
- package/src/apothem/rules/agile-sprints-elements.md +135 -0
- package/src/apothem/rules/agile-sprints.md +64 -0
- package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
- package/src/apothem/rules/agnostic-posture.md +48 -0
- package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
- package/src/apothem/rules/authoritative-referencing.md +66 -0
- package/src/apothem/rules/authority-inquiry-categories.md +58 -0
- package/src/apothem/rules/authority-inquiry.md +54 -0
- package/src/apothem/rules/auto-memory-topic-files.md +86 -0
- package/src/apothem/rules/auto-memory.md +67 -0
- package/src/apothem/rules/bidirectional-binding.md +123 -0
- package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
- package/src/apothem/rules/canonical-layout.md +60 -0
- package/src/apothem/rules/clean-architecture-layers.md +186 -0
- package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
- package/src/apothem/rules/clean-room-generation.md +59 -0
- package/src/apothem/rules/code-craft-conventions.md +101 -0
- package/src/apothem/rules/code-craft-markdown.md +138 -0
- package/src/apothem/rules/code-craft-python.md +154 -0
- package/src/apothem/rules/code-craft-shell.md +192 -0
- package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
- package/src/apothem/rules/cognitive-identity.md +81 -0
- package/src/apothem/rules/context-management-budget.md +46 -0
- package/src/apothem/rules/context-management-protocol.md +161 -0
- package/src/apothem/rules/context-management-scratch.md +128 -0
- package/src/apothem/rules/context-management.md +85 -0
- package/src/apothem/rules/definitiveness-virtues.md +67 -0
- package/src/apothem/rules/definitiveness.md +58 -0
- package/src/apothem/rules/determinism.md +81 -0
- package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
- package/src/apothem/rules/disclosure-ledger.md +52 -0
- package/src/apothem/rules/dynamism.md +38 -0
- package/src/apothem/rules/etc-extension.md +57 -0
- package/src/apothem/rules/expertise-posture-elements.md +68 -0
- package/src/apothem/rules/expertise-posture.md +54 -0
- package/src/apothem/rules/freshness-facade.md +64 -0
- package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
- package/src/apothem/rules/harness-adapter-shape.md +42 -0
- package/src/apothem/rules/host-discovery-manifests.md +50 -0
- package/src/apothem/rules/host-discovery.md +56 -0
- package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
- package/src/apothem/rules/i18n-discipline.md +70 -0
- package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
- package/src/apothem/rules/interactive-questions-detail.md +41 -0
- package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
- package/src/apothem/rules/interactive-questions.md +89 -0
- package/src/apothem/rules/large-file-generation.md +112 -0
- package/src/apothem/rules/large-file-reading.md +59 -0
- package/src/apothem/rules/living-docs.md +85 -0
- package/src/apothem/rules/multi-agent-workflow.md +57 -0
- package/src/apothem/rules/operational-mandates-expanded.md +78 -0
- package/src/apothem/rules/operational-mandates.md +88 -0
- package/src/apothem/rules/option-annotation-form.md +60 -0
- package/src/apothem/rules/option-annotation.md +45 -0
- package/src/apothem/rules/own-voice-reimplementation.md +86 -0
- package/src/apothem/rules/performance-discipline.md +91 -0
- package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
- package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
- package/src/apothem/rules/plain-language.md +56 -0
- package/src/apothem/rules/planning-techniques.md +130 -0
- package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
- package/src/apothem/rules/pre-emission-gate.md +54 -0
- package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
- package/src/apothem/rules/production-ready-prs.md +83 -0
- package/src/apothem/rules/propagation.md +63 -0
- package/src/apothem/rules/recommend-next-step.md +106 -0
- package/src/apothem/rules/refactoring-discipline.md +76 -0
- package/src/apothem/rules/session-closure.md +44 -0
- package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
- package/src/apothem/rules/sota-elevation.md +52 -0
- package/src/apothem/rules/source-accessibility.md +58 -0
- package/src/apothem/rules/surgical-manipulation.md +48 -0
- package/src/apothem/rules/systemic-participation-relations.md +108 -0
- package/src/apothem/rules/systemic-participation.md +70 -0
- package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
- package/src/apothem/rules/ten-dimension-check.md +59 -0
- package/src/apothem/rules/token-budget-discipline.md +81 -0
- package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
- package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
- package/src/apothem/rules/tool-use-discipline.md +48 -0
- package/src/apothem/rules/visual-leverage.md +102 -0
- package/src/apothem/schemas/NOTICE.md +9 -0
- package/src/apothem/schemas/README.md +104 -0
- package/src/apothem/schemas/__init__.py +176 -0
- package/src/apothem/schemas/advisory-finding.schema.json +111 -0
- package/src/apothem/schemas/agent.schema.json +106 -0
- package/src/apothem/schemas/authorship-header.txt +1 -0
- package/src/apothem/schemas/cohort-manifest.yaml +248 -0
- package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
- package/src/apothem/schemas/cohort.schema.json +113 -0
- package/src/apothem/schemas/command.schema.json +68 -0
- package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
- package/src/apothem/schemas/context-fragment.schema.json +64 -0
- package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
- package/src/apothem/schemas/handoff-manifest.yaml +353 -0
- package/src/apothem/schemas/header-exceptions.txt +141 -0
- package/src/apothem/schemas/header-visibility.yaml +39 -0
- package/src/apothem/schemas/learning-signal.schema.json +46 -0
- package/src/apothem/schemas/memory-record.schema.json +61 -0
- package/src/apothem/schemas/output-style.schema.json +40 -0
- package/src/apothem/schemas/plan.schema.json +51 -0
- package/src/apothem/schemas/plugin.schema.json +83 -0
- package/src/apothem/schemas/profile.example.yaml +70 -0
- package/src/apothem/schemas/profile.minimal.yaml +6 -0
- package/src/apothem/schemas/profile.schema.json +396 -0
- package/src/apothem/schemas/reference-token-denylist.txt +25 -0
- package/src/apothem/schemas/skill.schema.json +75 -0
- package/src/apothem/skills/README.md +93 -0
- package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
- package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
- package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
- package/src/apothem/skills/document-authoring/SKILL.md +118 -0
- package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
- package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
- package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
- package/src/apothem/skills/eval-harness/SKILL.md +88 -0
- package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
- package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
- package/src/apothem/skills/plan-suite/SKILL.md +118 -0
- package/src/apothem/skills/plan-suite/master_template.md +1324 -0
- package/src/apothem/skills/projectify/SKILL.md +117 -0
- package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
- package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
- package/src/apothem/skills/research-suite/SKILL.md +170 -0
- package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
- package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
- package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
- package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
- package/src/apothem/skills/research-suite/research_template.md +476 -0
- package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
- package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
- package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
- package/src/apothem/skills/test-authoring/SKILL.md +85 -0
- package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
- package/src/apothem/skills/workflow/SKILL.md +139 -0
- package/src/apothem/statuslines/README.md +26 -0
- package/src/apothem/statuslines/__init__.py +20 -0
- package/src/apothem/statuslines/conformity.json +5 -0
- package/src/apothem/statuslines/render.py +334 -0
- package/src/apothem/statuslines/statusline.md +50 -0
- package/src/apothem/templates/README.md +43 -0
- package/src/apothem/templates/agents-md-template.md +80 -0
- package/src/apothem/templates/consideration-log.md +39 -0
- package/src/apothem/templates/expertise-gap-log.md +56 -0
- package/src/apothem/templates/master-index-template.md +93 -0
- package/src/apothem/templates/potency-map.md +53 -0
- package/src/apothem/templates/preservation-audit.md +60 -0
- package/src/apothem/templates/question-resolution-audit.md +52 -0
- package/src/apothem/templates/trace-matrix-template.md +77 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Read",
|
|
5
|
+
"Glob",
|
|
6
|
+
"Grep",
|
|
7
|
+
"Bash(git log:*)"
|
|
8
|
+
],
|
|
9
|
+
"deny": [
|
|
10
|
+
"Read(.env*)",
|
|
11
|
+
"Read(**/.env)",
|
|
12
|
+
"Read(**/.env.*)",
|
|
13
|
+
"Read(~/.ssh/**)",
|
|
14
|
+
"Read(**/.audit/**)",
|
|
15
|
+
"Read(**/__pycache__/**)",
|
|
16
|
+
"Read(**/.mypy_cache/**)",
|
|
17
|
+
"Read(**/.pytest_cache/**)",
|
|
18
|
+
"Read(**/.ruff_cache/**)",
|
|
19
|
+
"Read(**/.tox/**)",
|
|
20
|
+
"Read(**/.venv/**)",
|
|
21
|
+
"Read(**/node_modules/**)",
|
|
22
|
+
"Read(**/dist/**)",
|
|
23
|
+
"Read(**/build/**)",
|
|
24
|
+
"Read(**/site/dist/**)",
|
|
25
|
+
"Bash(rm -rf /:*)",
|
|
26
|
+
"Bash(rm -rf /*:*)",
|
|
27
|
+
"Bash(rm -rf ~:*)",
|
|
28
|
+
"Bash(rm -rf ~/:*)",
|
|
29
|
+
"Bash(sudo:*)",
|
|
30
|
+
"Bash(git push --force:*)",
|
|
31
|
+
"Bash(git push --force-with-lease:*)",
|
|
32
|
+
"Bash(git push -f:*)",
|
|
33
|
+
"Bash(eval:*)",
|
|
34
|
+
"Bash(exec:*)"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
"hooks": {
|
|
38
|
+
"SessionStart": [
|
|
39
|
+
{
|
|
40
|
+
"matcher": "*",
|
|
41
|
+
"hooks": [
|
|
42
|
+
{
|
|
43
|
+
"type": "command",
|
|
44
|
+
"command": "${PYTHON_BIN}",
|
|
45
|
+
"timeout": 30,
|
|
46
|
+
"statusMessage": "Initializing session posture",
|
|
47
|
+
"args": [
|
|
48
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
49
|
+
"SessionStart"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"PreToolUse": [
|
|
56
|
+
{
|
|
57
|
+
"matcher": "Write",
|
|
58
|
+
"hooks": [
|
|
59
|
+
{
|
|
60
|
+
"type": "command",
|
|
61
|
+
"command": "${PYTHON_BIN}",
|
|
62
|
+
"timeout": 10,
|
|
63
|
+
"statusMessage": "Validating write target and content",
|
|
64
|
+
"args": [
|
|
65
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
66
|
+
"PreToolUse",
|
|
67
|
+
"pretooluse-write"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"type": "command",
|
|
72
|
+
"command": "${PYTHON_BIN}",
|
|
73
|
+
"timeout": 10,
|
|
74
|
+
"statusMessage": "Injecting authorship header if missing",
|
|
75
|
+
"args": [
|
|
76
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
77
|
+
"PreToolUse",
|
|
78
|
+
"pretooluse-write-header-guard"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"type": "command",
|
|
83
|
+
"command": "${PYTHON_BIN}",
|
|
84
|
+
"timeout": 10,
|
|
85
|
+
"statusMessage": "Enforcing plans locality on the target path",
|
|
86
|
+
"args": [
|
|
87
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
88
|
+
"PreToolUse",
|
|
89
|
+
"pretooluse-write-plan-guard"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "command",
|
|
94
|
+
"command": "${PYTHON_BIN}",
|
|
95
|
+
"timeout": 10,
|
|
96
|
+
"statusMessage": "Flagging unpinned or untrusted dependency additions",
|
|
97
|
+
"args": [
|
|
98
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
99
|
+
"PreToolUse",
|
|
100
|
+
"pretooluse-dependency-guard"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"type": "command",
|
|
105
|
+
"command": "${PYTHON_BIN}",
|
|
106
|
+
"timeout": 10,
|
|
107
|
+
"statusMessage": "Flagging unsafe dynamic evaluation or deserialization",
|
|
108
|
+
"args": [
|
|
109
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
110
|
+
"PreToolUse",
|
|
111
|
+
"pretooluse-eval-guard"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"type": "command",
|
|
116
|
+
"command": "${PYTHON_BIN}",
|
|
117
|
+
"timeout": 10,
|
|
118
|
+
"statusMessage": "Running conformity checks on proposed content",
|
|
119
|
+
"args": [
|
|
120
|
+
"${HARNESS_ROOT}/apothem/conformity/gate.py",
|
|
121
|
+
"--hook"
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"matcher": "Edit",
|
|
128
|
+
"hooks": [
|
|
129
|
+
{
|
|
130
|
+
"type": "command",
|
|
131
|
+
"command": "${PYTHON_BIN}",
|
|
132
|
+
"timeout": 10,
|
|
133
|
+
"statusMessage": "Validating edit target and content",
|
|
134
|
+
"args": [
|
|
135
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
136
|
+
"PreToolUse",
|
|
137
|
+
"pretooluse-edit"
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"type": "command",
|
|
142
|
+
"command": "${PYTHON_BIN}",
|
|
143
|
+
"timeout": 10,
|
|
144
|
+
"statusMessage": "Injecting authorship header on file creation",
|
|
145
|
+
"args": [
|
|
146
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
147
|
+
"PreToolUse",
|
|
148
|
+
"pretooluse-edit-header-guard"
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"type": "command",
|
|
153
|
+
"command": "${PYTHON_BIN}",
|
|
154
|
+
"timeout": 10,
|
|
155
|
+
"statusMessage": "Enforcing plans locality on the target path",
|
|
156
|
+
"args": [
|
|
157
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
158
|
+
"PreToolUse",
|
|
159
|
+
"pretooluse-write-plan-guard"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"type": "command",
|
|
164
|
+
"command": "${PYTHON_BIN}",
|
|
165
|
+
"timeout": 10,
|
|
166
|
+
"statusMessage": "Flagging unpinned or untrusted dependency additions",
|
|
167
|
+
"args": [
|
|
168
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
169
|
+
"PreToolUse",
|
|
170
|
+
"pretooluse-dependency-guard"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"type": "command",
|
|
175
|
+
"command": "${PYTHON_BIN}",
|
|
176
|
+
"timeout": 10,
|
|
177
|
+
"statusMessage": "Flagging unsafe dynamic evaluation or deserialization",
|
|
178
|
+
"args": [
|
|
179
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
180
|
+
"PreToolUse",
|
|
181
|
+
"pretooluse-eval-guard"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"type": "command",
|
|
186
|
+
"command": "${PYTHON_BIN}",
|
|
187
|
+
"timeout": 10,
|
|
188
|
+
"statusMessage": "Running conformity checks on proposed content",
|
|
189
|
+
"args": [
|
|
190
|
+
"${HARNESS_ROOT}/apothem/conformity/gate.py",
|
|
191
|
+
"--hook"
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"matcher": "NotebookEdit",
|
|
198
|
+
"hooks": [
|
|
199
|
+
{
|
|
200
|
+
"type": "command",
|
|
201
|
+
"command": "${PYTHON_BIN}",
|
|
202
|
+
"timeout": 10,
|
|
203
|
+
"statusMessage": "Validating notebook cell content",
|
|
204
|
+
"args": [
|
|
205
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
206
|
+
"PreToolUse",
|
|
207
|
+
"pretooluse-notebookedit"
|
|
208
|
+
]
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"type": "command",
|
|
212
|
+
"command": "${PYTHON_BIN}",
|
|
213
|
+
"timeout": 10,
|
|
214
|
+
"statusMessage": "Enforcing plans locality on the notebook path",
|
|
215
|
+
"args": [
|
|
216
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
217
|
+
"PreToolUse",
|
|
218
|
+
"pretooluse-write-plan-guard"
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"matcher": "Bash",
|
|
225
|
+
"hooks": [
|
|
226
|
+
{
|
|
227
|
+
"type": "command",
|
|
228
|
+
"command": "${PYTHON_BIN}",
|
|
229
|
+
"timeout": 10,
|
|
230
|
+
"statusMessage": "Validating shell command safety and isolation",
|
|
231
|
+
"args": [
|
|
232
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
233
|
+
"PreToolUse",
|
|
234
|
+
"pretooluse-bash"
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"type": "command",
|
|
239
|
+
"command": "${PYTHON_BIN}",
|
|
240
|
+
"timeout": 10,
|
|
241
|
+
"statusMessage": "Enforcing plans locality on shell redirections",
|
|
242
|
+
"args": [
|
|
243
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
244
|
+
"PreToolUse",
|
|
245
|
+
"pretooluse-bash-plan-guard"
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"type": "command",
|
|
250
|
+
"command": "${PYTHON_BIN}",
|
|
251
|
+
"timeout": 10,
|
|
252
|
+
"statusMessage": "Flagging unsafe dynamic evaluation or deserialization",
|
|
253
|
+
"args": [
|
|
254
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
255
|
+
"PreToolUse",
|
|
256
|
+
"pretooluse-eval-guard"
|
|
257
|
+
]
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"matcher": "AskUserQuestion",
|
|
263
|
+
"hooks": [
|
|
264
|
+
{
|
|
265
|
+
"type": "command",
|
|
266
|
+
"command": "${PYTHON_BIN}",
|
|
267
|
+
"timeout": 10,
|
|
268
|
+
"statusMessage": "Validating the (Recommended) option marker",
|
|
269
|
+
"args": [
|
|
270
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
271
|
+
"PreToolUse",
|
|
272
|
+
"pretooluse-askuserquestion-recommended"
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"PostToolUse": [
|
|
279
|
+
{
|
|
280
|
+
"matcher": "*",
|
|
281
|
+
"hooks": [
|
|
282
|
+
{
|
|
283
|
+
"type": "command",
|
|
284
|
+
"command": "${PYTHON_BIN}",
|
|
285
|
+
"timeout": 10,
|
|
286
|
+
"statusMessage": "Tracking activity for proactive-compaction advisory",
|
|
287
|
+
"args": [
|
|
288
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
289
|
+
"PostToolUse",
|
|
290
|
+
"posttooluse-proactive-compaction"
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
],
|
|
296
|
+
"PreCompact": [
|
|
297
|
+
{
|
|
298
|
+
"matcher": "*",
|
|
299
|
+
"hooks": [
|
|
300
|
+
{
|
|
301
|
+
"type": "command",
|
|
302
|
+
"command": "${PYTHON_BIN}",
|
|
303
|
+
"timeout": 30,
|
|
304
|
+
"statusMessage": "Externalizing state before context compression",
|
|
305
|
+
"args": [
|
|
306
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
307
|
+
"PreCompact",
|
|
308
|
+
"precompact"
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
],
|
|
314
|
+
"PostCompact": [
|
|
315
|
+
{
|
|
316
|
+
"matcher": "*",
|
|
317
|
+
"hooks": [
|
|
318
|
+
{
|
|
319
|
+
"type": "command",
|
|
320
|
+
"command": "${PYTHON_BIN}",
|
|
321
|
+
"timeout": 30,
|
|
322
|
+
"statusMessage": "Restoring state from durable files after compaction",
|
|
323
|
+
"args": [
|
|
324
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
325
|
+
"PostCompact",
|
|
326
|
+
"postcompact"
|
|
327
|
+
]
|
|
328
|
+
}
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
],
|
|
332
|
+
"Stop": [
|
|
333
|
+
{
|
|
334
|
+
"matcher": "*",
|
|
335
|
+
"hooks": [
|
|
336
|
+
{
|
|
337
|
+
"type": "command",
|
|
338
|
+
"command": "${PYTHON_BIN}",
|
|
339
|
+
"timeout": 60,
|
|
340
|
+
"statusMessage": "Finalizing session and externalizing state",
|
|
341
|
+
"args": [
|
|
342
|
+
"${HARNESS_ROOT}/apothem/hooks/dispatch.py",
|
|
343
|
+
"Stop",
|
|
344
|
+
"stop"
|
|
345
|
+
]
|
|
346
|
+
}
|
|
347
|
+
]
|
|
348
|
+
}
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Uninstall logic for the claude-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
|
+
|
|
11
|
+
_HARNESS_NAME: str = "claude_code"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def uninstall(output_path: Path) -> None:
|
|
15
|
+
"""Remove Apothem-managed Claude Code targets surgically.
|
|
16
|
+
|
|
17
|
+
``settings.json`` is an operator-owned ``write_text`` manifest target, so the
|
|
18
|
+
shared driver removes only Apothem's keys and hook handlers (operator-added
|
|
19
|
+
permissions, keys, and non-Apothem hooks survive) and deletes the file only
|
|
20
|
+
when nothing operator-authored remains. The pre-mutation file is copied into
|
|
21
|
+
the Apothem backup root — no whole-file ``.bak`` sibling is left beside it.
|
|
22
|
+
"""
|
|
23
|
+
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 claude-code harness adapter."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from apothem.harnesses._shared.wrapper_factories import make_update
|
|
8
|
+
from apothem.harnesses.claude_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 claude_code harness adapter."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from apothem.harnesses._shared.wrapper_factories import make_verify_harness_root
|
|
8
|
+
|
|
9
|
+
_HARNESS_NAME: str = "claude_code"
|
|
10
|
+
|
|
11
|
+
verify = make_verify_harness_root(_HARNESS_NAME)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
2
|
+
|
|
3
|
+
# CodeBuddy Standard Convention Pin
|
|
4
|
+
|
|
5
|
+
## Snapshot
|
|
6
|
+
|
|
7
|
+
- Snapshot date: 2026-06-25
|
|
8
|
+
- Snapshot note: live re-verification against `www.codebuddy.ai/docs` surfaced a STALENESS CORRECTION — the vendor DOES document a fuller CodeBuddy Code CLI surface (Skills `/docs/cli/skills`, Sub-Agents `/docs/cli/sub-agents`, Slash Commands `/docs/cli/slash-commands`, Plugins `/docs/cli/plugins-reference`); the prior pin called these "undocumented". The adapter's rules-only delivery remains a DELIBERATE preserve-first posture, not an absence-of-surface claim. Rules (`.codebuddy/rules/*.md` auto-loaded as project memory; `alwaysApply` / `paths` frontmatter), `CODEBUDDY.md` (`/init`), and `.codebuddy/settings.json` (permissions + JSONC MCP) all confirmed current. Previous 2026-06-09.
|
|
9
|
+
- Adapter source: `src/apothem/harnesses/codebuddy/`
|
|
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 CodeBuddy documentation
|
|
15
|
+
(`www.codebuddy.ai/docs`). No authority-host move; no immutable version pin
|
|
16
|
+
is exposed (mutable docs site), so every captured convention carries a
|
|
17
|
+
no-immutable-source exception.
|
|
18
|
+
- Canonical filename: `.codebuddy/rules/apothem-rules.md`. CodeBuddy reads
|
|
19
|
+
project rules from `.codebuddy/rules/*.md` (Markdown with optional YAML
|
|
20
|
+
frontmatter: `alwaysApply`, `paths`, `enabled`) per
|
|
21
|
+
https://www.codebuddy.ai/docs/ide/Rules. The adapter is project-scope and
|
|
22
|
+
writes only `<project>/.codebuddy/rules/apothem-rules.md`, a dedicated file
|
|
23
|
+
that never clobbers operator-authored rules.
|
|
24
|
+
- Memory file: `CODEBUDDY.md` at the project root is the operator-owned memory
|
|
25
|
+
surface (https://www.codebuddy.ai/docs/cli/memory); the adapter does not
|
|
26
|
+
author it.
|
|
27
|
+
- MCP and permissions: `.codebuddy/settings.json` is the project-scope
|
|
28
|
+
settings surface (https://www.codebuddy.ai/docs/cli/settings) where MCP
|
|
29
|
+
servers and permissions are declared. It is operator-owned; the adapter
|
|
30
|
+
recognizes it but does not author entries. `capabilities.yml` `mcp_servers`
|
|
31
|
+
and the shared capability matrix were refreshed accordingly.
|
|
32
|
+
- The vendor documents project rules, a project memory file, a settings
|
|
33
|
+
surface, and a fuller CodeBuddy Code CLI surface (Skills, Sub-Agents, Slash
|
|
34
|
+
Commands, Plugins — see the `/docs/cli/*` references above). The adapter
|
|
35
|
+
delivers only the project rules file and authors none of those other surfaces:
|
|
36
|
+
this is a DELIBERATE rules-only / preserve-first posture, not a claim that the
|
|
37
|
+
surfaces are absent. Status-lines remain undocumented as an adapter-owned file
|
|
38
|
+
surface.
|
|
39
|
+
|
|
40
|
+
## Recommended Postfix Rendering
|
|
41
|
+
|
|
42
|
+
- Status: supported as plain text.
|
|
43
|
+
- Mechanism: Apothem emits the literal ` (Recommended)` suffix in the option label. CodeBuddy rule templates preserve that suffix as authored.
|
|
44
|
+
- 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`.
|
|
45
|
+
|
|
46
|
+
## Long Context and Compaction
|
|
47
|
+
|
|
48
|
+
- Status: profile-managed.
|
|
49
|
+
- 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.
|
|
50
|
+
- 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`.
|
|
51
|
+
|
|
52
|
+
## Large-Codebase Practice Projection
|
|
53
|
+
|
|
54
|
+
- Layered context: declared in `capabilities.yml` under `layered_context_surface`; no vendor-native hierarchy is claimed beyond the adapter's documented file/template surface.
|
|
55
|
+
- LSP symbol navigation: `tracked-gap` until a vendor-ratified plugin or tool surface is pinned.
|
|
56
|
+
- 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.
|
|
57
|
+
|
|
58
|
+
## Plugin-alone Persistence
|
|
59
|
+
|
|
60
|
+
CodeBuddy exposes **no vendor plugin or extension install surface** that Apothem
|
|
61
|
+
ships. The adapter is project-scope rules-only: it writes a single merged rules
|
|
62
|
+
file at `<project>/.codebuddy/rules/apothem-rules.md` and authors no other
|
|
63
|
+
cohort. There is no standalone-installable bundle; every artifact requires the
|
|
64
|
+
full `apothem install --harness codebuddy --project <path>` engine run.
|
|
65
|
+
|
|
66
|
+
| Artifact class | Persists standalone? | Mechanism / limit |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| 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 `.codebuddy/rules/` directory. Nothing persists before that run. |
|
|
69
|
+
| Commands / Skills / Agents | No — deliberate rules-only posture | CodeBuddy DOES document CLI Skills / Sub-Agents / Slash Commands / Plugins, but the adapter authors none of them (preserve-first rules-only delivery); these cohorts are not materialized for this harness by design. |
|
|
70
|
+
| Hooks / MCP / Tools / Settings | No — operator-owned / platform limit | `.codebuddy/settings.json` (MCP + permissions) and `CODEBUDDY.md` memory are operator-owned; the adapter authors no entries. |
|
|
71
|
+
|
|
72
|
+
Platform limit: CodeBuddy ships no marketplace/extension channel, so a
|
|
73
|
+
plugin-alone story does not exist for this harness — the merged rules file via
|
|
74
|
+
`apothem install` is the sole persistence surface.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Apothem harness adapter for codebuddy — project-scope install.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem rules surface into the operator-supplied
|
|
6
|
+
project root at ``<project>/.codebuddy/rules/apothem-rules.md`` — the
|
|
7
|
+
canonical CodeBuddy rules surface per
|
|
8
|
+
https://www.codebuddy.ai/docs/ide/Rules. The adapter writes a dedicated
|
|
9
|
+
``apothem-rules.md`` file inside CodeBuddy's documented rules directory so
|
|
10
|
+
the operator's own rules files are never clobbered. The ``CODEBUDDY.md``
|
|
11
|
+
memory file and ``.codebuddy/settings.json`` permissions/MCP surface are
|
|
12
|
+
operator-owned 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.codebuddy.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.codebuddy.install import install as _install
|
|
28
|
+
from apothem.harnesses.codebuddy.install import plan as _plan
|
|
29
|
+
from apothem.harnesses.codebuddy.uninstall import uninstall as _uninstall
|
|
30
|
+
from apothem.harnesses.codebuddy.update import update as _update
|
|
31
|
+
from apothem.harnesses.codebuddy.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(".codebuddy") / "rules" / "apothem-rules.md"
|
|
38
|
+
|
|
39
|
+
CodeBuddyAdapter = make_project_scope_adapter(
|
|
40
|
+
"codebuddy",
|
|
41
|
+
error_label="codebuddy",
|
|
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="CodeBuddyAdapter",
|
|
49
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
# Per rules/agent-capability-discipline.md §1 / §3 / §7. CodeBuddy
|
|
4
|
+
# ratifies MCP via .codebuddy/settings.json (project-scope; operator-owned;
|
|
5
|
+
# the adapter recognizes it but does not author entries). The adapter
|
|
6
|
+
# delivers a single project rules file under .codebuddy/rules/ and does
|
|
7
|
+
# not dispatch sub-agents or author command/skill/hook cohorts.
|
|
8
|
+
|
|
9
|
+
mcp_servers:
|
|
10
|
+
- project-scope-.codebuddy/settings.json-mcp
|
|
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: ".codebuddy/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: "CODEBUDDY.md project memory file (operator-owned)"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Install logic for the codebuddy harness adapter.
|
|
4
|
+
|
|
5
|
+
Materializes the apothem CodeBuddy rules surface into the operator-supplied
|
|
6
|
+
project root. CodeBuddy's canonical rules surface is the project-scope
|
|
7
|
+
multi-file format at ``<project>/.codebuddy/rules/*.md`` (per
|
|
8
|
+
https://www.codebuddy.ai/docs/ide/Rules). The adapter writes a dedicated
|
|
9
|
+
``apothem-rules.md`` file so the operator's own rules files are never
|
|
10
|
+
clobbered. The ``CODEBUDDY.md`` memory file and ``.codebuddy/settings.json``
|
|
11
|
+
permissions/MCP surface are operator-owned and out of apothem's adapter
|
|
12
|
+
scope.
|
|
13
|
+
|
|
14
|
+
The propagation contract is declared in the canonical manifest at
|
|
15
|
+
``src/apothem/lib/propagation-manifest.yaml`` under the ``codebuddy`` key
|
|
16
|
+
(a single operator-owned ``sentinel_merge`` operation targeting
|
|
17
|
+
``${PROJECT_ROOT}/.codebuddy/rules/apothem-rules.md``) and applied by the
|
|
18
|
+
shared driver at ``apothem.harnesses._shared.install_driver``. The
|
|
19
|
+
``${PROJECT_ROOT}`` placeholder is substituted with the operator-supplied
|
|
20
|
+
``--project <path>`` value the CLI threads through; absence of
|
|
21
|
+
``--project`` is rejected upstream at ``apothem.cli._materialize`` via the
|
|
22
|
+
``requires_project`` opt-in.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from apothem.harnesses._shared.wrapper_factories import (
|
|
28
|
+
make_project_scope_install,
|
|
29
|
+
make_project_scope_plan,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Manifest harness key for this adapter.
|
|
33
|
+
_HARNESS_NAME: str = "codebuddy"
|
|
34
|
+
|
|
35
|
+
install = make_project_scope_install(
|
|
36
|
+
_HARNESS_NAME,
|
|
37
|
+
error_message="codebuddy adapter requires --project <path>; CLI must thread it through",
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
plan = make_project_scope_plan(_HARNESS_NAME)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
alwaysApply: true
|
|
3
|
+
description: "Apothem governance and convention surface for the CodeBuddy harness — applied every session to honour project-wide engineering discipline."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- SPDX-License-Identifier: MIT -->
|
|
7
|
+
|
|
8
|
+
# Apothem — CodeBuddy Bootstrap
|
|
9
|
+
|
|
10
|
+
This file is materialised by `apothem install --harness codebuddy --project <path>` and lands at `<project>/.codebuddy/rules/apothem-rules.md`, the current CodeBuddy project rules surface per https://www.codebuddy.ai/docs/ide/Rules. It is a dedicated apothem rules file: it never clobbers operator-authored rules in the same directory.
|
|
11
|
+
|
|
12
|
+
## What Apothem governs in this project
|
|
13
|
+
|
|
14
|
+
Apothem propagates a shared governance and convention surface across every supported AI harness in this project's host environment. Inside CodeBuddy, the surface manifests as this always-applied rule file:
|
|
15
|
+
|
|
16
|
+
- **Rules** — engineering rules applied on every interaction (`alwaysApply: true`). The full rule cohort lives at the apothem source repository under `src/apothem/rules/`; this CodeBuddy-facing anchor names the disciplines the operator may consult in detail.
|
|
17
|
+
- **Skills, commands, agents** — reusable techniques, slash-style workflows, and persistent sub-agent definitions. Apothem's canonical-master cohort at the apothem source repository defines them; CodeBuddy does not auto-discover them as separate surfaces, so they manifest here as referenced discipline.
|
|
18
|
+
- **Memory** — CodeBuddy's project memory file (`CODEBUDDY.md`) is operator-owned, not apothem-managed.
|
|
19
|
+
- **Settings** — CodeBuddy's permissions and MCP surface (`.codebuddy/settings.json`) is operator-owned, not apothem-managed.
|
|
20
|
+
|
|
21
|
+
## Engineering disciplines in force
|
|
22
|
+
|
|
23
|
+
Apothem's foundational mandates apply uniformly across every harness, including CodeBuddy:
|
|
24
|
+
|
|
25
|
+
- **Plans-Locality.** Plan-suite artefacts (PROGRESS.md, PLAN-NOTES.md, PHASE.md, REPORT.md) live under `<project>/.apothem/plans/{suite}/` — the sole canonical home; a legacy `<project>/.plans/` tree upgrades via `apothem migrate-workspace`. They never land in a global plans directory or any other global-ecosystem location.
|
|
26
|
+
- **Authority hygiene.** Never fabricate identity, scope, security posture, or version-pin data. Surface ambiguity through a question instead of inventing a plausible-looking value.
|
|
27
|
+
- **Definitiveness.** Hedging vocabulary (`maybe`, `might`, `usually`, `generally`, `typically`, `probably`) is eliminated where binding prescription is possible. Pre / post / failure conditions are stated on every contract.
|
|
28
|
+
- **Production-ready discipline.** Every change ships in production-ready form — tests, docs, CHANGELOG entry, conformant commit message, CI green — in the same change-set.
|
|
29
|
+
- **Plain-language.** Codebase artefacts and user-facing prose read as natural domain language with zero trace of internal planning structure.
|
|
30
|
+
- **Human-only authorship.** Git commit messages, PR descriptions, branch names, and tag annotations carry human contributors only — never the underlying language model, runtime, IDE extension, or any automated tool as a co-author.
|
|
31
|
+
- **Lean-context delegation.** Where the host provides delegated-worker dispatch, broad reads and heavy workloads route to a spawned worker by default so the main working context stays lean. The heavy parallel apparatus stays opt-in; routing delegable work away from the main thread is the standing posture once dispatch is available.
|
|
32
|
+
- **Observe-decide-act discipline.** Tool use runs as a loop — observe the current state, decide the next move from what was observed, then act — never an edit before a read or a result asserted before a check. Independent reads and searches run together in one pass, not one per turn; the loop closes on a verifiable condition (a gate green, a read confirmed), never a fixed number of tries. Advisory, never an auto-applied behavior.
|
|
33
|
+
- **Source accessibility.** When the authoritative source for a claim, convention, or version pin is closed, paywalled, login-gated, or otherwise unreachable, ask the operator for it in full rather than substituting a lower-trust open page. Trust outranks reachability.
|
|
34
|
+
|
|
35
|
+
## Refreshing the file
|
|
36
|
+
|
|
37
|
+
Re-run `apothem install --harness codebuddy --project <this-project-root>` to overwrite this file with the latest apothem template. The operation is idempotent. `apothem uninstall --harness codebuddy --project <this-project-root>` renames the file to a timestamped backup; `apothem verify --harness codebuddy --project <this-project-root>` checks the file is present and non-empty.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Uninstall logic for the codebuddy harness adapter."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from apothem.harnesses._shared import install_driver
|
|
10
|
+
|
|
11
|
+
_HARNESS_NAME: str = "codebuddy"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def uninstall(output_path: Path, *, project: Path | None = None) -> None:
|
|
15
|
+
"""Remove Apothem-managed CodeBuddy targets surgically.
|
|
16
|
+
|
|
17
|
+
The apothem-rules ``sentinel_merge`` anchor is cleaned by the shared driver,
|
|
18
|
+
which strips only Apothem's managed block (operator prose survives), deletes
|
|
19
|
+
an Apothem-only file, and backs the file up under the Apothem backup root —
|
|
20
|
+
no whole-file ``.bak`` sibling is left beside the operator's file.
|
|
21
|
+
"""
|
|
22
|
+
install_driver.run_uninstall(
|
|
23
|
+
_HARNESS_NAME,
|
|
24
|
+
project_root=project or output_path.parents[2],
|
|
25
|
+
)
|