@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,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)
|