@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,194 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""``apothem verify`` — verify a harness adapter installation."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import apothem.cli as _pkg
|
|
12
|
+
from apothem.cli import main
|
|
13
|
+
from apothem.cli._common_flags import (
|
|
14
|
+
common_options,
|
|
15
|
+
get_console,
|
|
16
|
+
get_error_console,
|
|
17
|
+
resolve_format,
|
|
18
|
+
)
|
|
19
|
+
from apothem.cli._epilogs import _EP_VERIFY
|
|
20
|
+
from apothem.cli._helpers import (
|
|
21
|
+
_EXIT_EXPECTED,
|
|
22
|
+
_adapter_failure_result,
|
|
23
|
+
_adapter_resolve_output_path,
|
|
24
|
+
_CliUserError,
|
|
25
|
+
_drift_state,
|
|
26
|
+
_emit_expected_error,
|
|
27
|
+
_harness_option,
|
|
28
|
+
_invoke_with_project,
|
|
29
|
+
_lifecycle_envelope,
|
|
30
|
+
_load_profile,
|
|
31
|
+
_profile_error,
|
|
32
|
+
_profile_option,
|
|
33
|
+
_project_option,
|
|
34
|
+
_resolve_profile_path,
|
|
35
|
+
_resolve_project_root,
|
|
36
|
+
)
|
|
37
|
+
from apothem.cli._json_formatter import emit_json
|
|
38
|
+
from apothem.lib.profile import ProfileValidationError
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@main.command(epilog=_EP_VERIFY)
|
|
42
|
+
@_harness_option
|
|
43
|
+
@_profile_option
|
|
44
|
+
@_project_option
|
|
45
|
+
@common_options
|
|
46
|
+
def verify(
|
|
47
|
+
harness: str,
|
|
48
|
+
profile: str | None,
|
|
49
|
+
project: str | None,
|
|
50
|
+
quiet: bool,
|
|
51
|
+
verbose: bool,
|
|
52
|
+
output_format: str,
|
|
53
|
+
no_color: bool,
|
|
54
|
+
json_flag: bool,
|
|
55
|
+
) -> None:
|
|
56
|
+
"""Verify a harness adapter installation.
|
|
57
|
+
|
|
58
|
+
Without ``--profile`` the check is structural: every managed target must be
|
|
59
|
+
present and valid. With ``--profile`` the check additionally requires
|
|
60
|
+
profile fidelity, so a present-but-drifted install fails verify — answering
|
|
61
|
+
"is THIS profile faithfully installed?" rather than merely "does it exist?".
|
|
62
|
+
"""
|
|
63
|
+
fmt = resolve_format(output_format, json_flag)
|
|
64
|
+
con = get_console(no_color=no_color, quiet=quiet)
|
|
65
|
+
profile_path = _resolve_profile_path(profile) if profile is not None else None
|
|
66
|
+
try:
|
|
67
|
+
project_root = _resolve_project_root(project)
|
|
68
|
+
shared_profile: dict[str, Any] | None = (
|
|
69
|
+
_load_profile(profile_path) if profile_path is not None else None
|
|
70
|
+
)
|
|
71
|
+
selected = _pkg._selected_harness_ids(
|
|
72
|
+
harness, shared_profile=None, apply_excludes=False
|
|
73
|
+
)
|
|
74
|
+
_pkg._require_project_for_selection(selected, project_root)
|
|
75
|
+
adapters = [
|
|
76
|
+
(
|
|
77
|
+
harness_id,
|
|
78
|
+
_pkg._load_adapter_for_entry(_pkg.get_harness_entry(harness_id)),
|
|
79
|
+
)
|
|
80
|
+
for harness_id in selected
|
|
81
|
+
]
|
|
82
|
+
except ProfileValidationError as exc:
|
|
83
|
+
_emit_expected_error(
|
|
84
|
+
command="verify",
|
|
85
|
+
fmt=fmt,
|
|
86
|
+
harness=harness,
|
|
87
|
+
profile_path=profile_path,
|
|
88
|
+
error=_profile_error(exc),
|
|
89
|
+
)
|
|
90
|
+
return
|
|
91
|
+
except _CliUserError as exc:
|
|
92
|
+
_emit_expected_error(
|
|
93
|
+
command="verify",
|
|
94
|
+
fmt=fmt,
|
|
95
|
+
harness=harness,
|
|
96
|
+
profile_path=profile_path,
|
|
97
|
+
error=exc.to_dict(),
|
|
98
|
+
)
|
|
99
|
+
return
|
|
100
|
+
|
|
101
|
+
results: list[dict[str, object]] = []
|
|
102
|
+
last_output_path: Path | None = None
|
|
103
|
+
all_verified = True
|
|
104
|
+
for harness_id, adapter in adapters:
|
|
105
|
+
output_path = _adapter_resolve_output_path(adapter, project_root)
|
|
106
|
+
last_output_path = output_path
|
|
107
|
+
try:
|
|
108
|
+
installed = bool(
|
|
109
|
+
_invoke_with_project(adapter.is_installed, project=project_root)
|
|
110
|
+
)
|
|
111
|
+
verified_struct = bool(
|
|
112
|
+
_invoke_with_project(adapter.verify, project=project_root)
|
|
113
|
+
)
|
|
114
|
+
drift: str | None = None
|
|
115
|
+
if shared_profile is not None:
|
|
116
|
+
entry = _pkg.get_harness_entry(harness_id)
|
|
117
|
+
drift = _drift_state(
|
|
118
|
+
entry, adapter, installed, project_root, shared_profile
|
|
119
|
+
)
|
|
120
|
+
except Exception as exc:
|
|
121
|
+
all_verified = False
|
|
122
|
+
failure = _adapter_failure_result(harness_id, "verify", output_path, exc)
|
|
123
|
+
failure["installed"] = False
|
|
124
|
+
failure["verified"] = False
|
|
125
|
+
if shared_profile is not None:
|
|
126
|
+
failure["drift"] = "error"
|
|
127
|
+
results.append(failure)
|
|
128
|
+
if fmt != "json":
|
|
129
|
+
get_error_console(no_color=no_color).print(
|
|
130
|
+
f"[red]✗[/] [cyan]{harness_id}[/] verify failed: {exc}"
|
|
131
|
+
)
|
|
132
|
+
continue
|
|
133
|
+
# With --profile the verdict is structural presence AND profile
|
|
134
|
+
# fidelity: a present-but-drifted install fails verify so a chosen
|
|
135
|
+
# profile is confirmed faithfully installed, not merely present.
|
|
136
|
+
verified = verified_struct and drift != "drift"
|
|
137
|
+
all_verified = all_verified and verified
|
|
138
|
+
outcome = "unchanged" if verified else "error"
|
|
139
|
+
if not verified_struct:
|
|
140
|
+
message = "managed targets missing or invalid"
|
|
141
|
+
elif drift == "drift":
|
|
142
|
+
message = "managed targets present but drifted from the profile"
|
|
143
|
+
elif shared_profile is not None:
|
|
144
|
+
message = "managed targets verified and profile-faithful"
|
|
145
|
+
else:
|
|
146
|
+
message = "managed targets verified"
|
|
147
|
+
row: dict[str, object] = {
|
|
148
|
+
"harness": harness_id,
|
|
149
|
+
"outcome": outcome,
|
|
150
|
+
"operation": "verify",
|
|
151
|
+
"path": str(output_path),
|
|
152
|
+
"message": message,
|
|
153
|
+
"installed": installed,
|
|
154
|
+
"verified": verified,
|
|
155
|
+
}
|
|
156
|
+
if drift is not None:
|
|
157
|
+
row["drift"] = drift
|
|
158
|
+
results.append(row)
|
|
159
|
+
if fmt != "json":
|
|
160
|
+
if verified:
|
|
161
|
+
con.print(
|
|
162
|
+
f"[green]✓[/] [cyan]{harness_id}[/] is verified at {output_path}"
|
|
163
|
+
)
|
|
164
|
+
elif verified_struct and drift == "drift":
|
|
165
|
+
con.print(
|
|
166
|
+
f"[red]✗[/] [cyan]{harness_id}[/] is installed but drifted "
|
|
167
|
+
f"from the profile at {output_path}"
|
|
168
|
+
)
|
|
169
|
+
else:
|
|
170
|
+
con.print(
|
|
171
|
+
f"[red]✗[/] [cyan]{harness_id}[/] is NOT verified "
|
|
172
|
+
f"(expected path: {output_path})"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
if fmt == "json":
|
|
176
|
+
payload = _lifecycle_envelope(
|
|
177
|
+
status="success" if all_verified else "error",
|
|
178
|
+
command="verify",
|
|
179
|
+
action="verified",
|
|
180
|
+
harness=harness,
|
|
181
|
+
profile_path=profile_path,
|
|
182
|
+
project_root=project_root,
|
|
183
|
+
files_written=[],
|
|
184
|
+
results=results,
|
|
185
|
+
warnings=[],
|
|
186
|
+
output_path=last_output_path if len(adapters) == 1 else None,
|
|
187
|
+
)
|
|
188
|
+
if len(results) == 1:
|
|
189
|
+
payload["installed"] = results[0]["installed"]
|
|
190
|
+
payload["verified"] = results[0]["verified"]
|
|
191
|
+
emit_json(payload)
|
|
192
|
+
|
|
193
|
+
if not all_verified:
|
|
194
|
+
sys.exit(_EXIT_EXPECTED)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Shared Click options + console factory for the apothem CLI.
|
|
4
|
+
|
|
5
|
+
Every subcommand in :mod:`apothem.cli` decorates itself with
|
|
6
|
+
:func:`common_options` to receive the standard cross-subcommand flag set:
|
|
7
|
+
``--quiet/-q``, ``--verbose/-v``, ``--format``, ``--no-color``, ``--json``
|
|
8
|
+
(shorthand for ``--format json``).
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from collections.abc import Callable
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
import click
|
|
17
|
+
from rich.console import Console
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def common_options(f: Callable[..., Any]) -> Callable[..., Any]:
|
|
21
|
+
"""Apply the standard cross-subcommand flag set to *f*.
|
|
22
|
+
|
|
23
|
+
Click stacks decorators bottom-up, so the order in which the
|
|
24
|
+
options appear in ``--help`` output is the *reverse* of the order
|
|
25
|
+
they are applied here. To get ``--quiet, --verbose, --format,
|
|
26
|
+
--no-color, --json`` in that visible order, the decorators below
|
|
27
|
+
are applied in reverse.
|
|
28
|
+
"""
|
|
29
|
+
f = click.option(
|
|
30
|
+
"--json",
|
|
31
|
+
"json_flag",
|
|
32
|
+
is_flag=True,
|
|
33
|
+
default=False,
|
|
34
|
+
help="Shorthand for --format json.",
|
|
35
|
+
)(f)
|
|
36
|
+
f = click.option(
|
|
37
|
+
"--no-color",
|
|
38
|
+
is_flag=True,
|
|
39
|
+
default=False,
|
|
40
|
+
help="Disable ANSI color codes in output.",
|
|
41
|
+
)(f)
|
|
42
|
+
f = click.option(
|
|
43
|
+
"--format",
|
|
44
|
+
"output_format",
|
|
45
|
+
type=click.Choice(["plain", "json"], case_sensitive=False),
|
|
46
|
+
default="plain",
|
|
47
|
+
show_default=True,
|
|
48
|
+
help="Output format.",
|
|
49
|
+
)(f)
|
|
50
|
+
f = click.option(
|
|
51
|
+
"--verbose",
|
|
52
|
+
"-v",
|
|
53
|
+
is_flag=True,
|
|
54
|
+
default=False,
|
|
55
|
+
help="Emit additional diagnostic output.",
|
|
56
|
+
)(f)
|
|
57
|
+
return click.option(
|
|
58
|
+
"--quiet",
|
|
59
|
+
"-q",
|
|
60
|
+
is_flag=True,
|
|
61
|
+
default=False,
|
|
62
|
+
help="Suppress informational output; only errors are emitted.",
|
|
63
|
+
)(f)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def get_console(no_color: bool = False, quiet: bool = False) -> Console:
|
|
67
|
+
"""Return a Rich :class:`Console` honoring ``--no-color`` and ``--quiet``."""
|
|
68
|
+
if quiet:
|
|
69
|
+
return Console(highlight=False, quiet=True)
|
|
70
|
+
if no_color:
|
|
71
|
+
return Console(highlight=False, no_color=True)
|
|
72
|
+
return Console(highlight=False)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_error_console(no_color: bool = False) -> Console:
|
|
76
|
+
"""Return a Rich error :class:`Console` that writes to stderr and is never quiet.
|
|
77
|
+
|
|
78
|
+
``--quiet`` suppresses informational output but the documented contract is
|
|
79
|
+
that errors are still emitted; an error console that ignores ``quiet`` and
|
|
80
|
+
targets stderr (the conventional error stream) honors that contract so a
|
|
81
|
+
batch failure under ``-q`` is never silent.
|
|
82
|
+
"""
|
|
83
|
+
return Console(stderr=True, highlight=False, no_color=no_color)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def resolve_format(output_format: str, json_flag: bool) -> str:
|
|
87
|
+
"""Return ``"json"`` when ``--json`` is set or ``--format json`` was chosen, else ``"plain"``."""
|
|
88
|
+
if json_flag:
|
|
89
|
+
return "json"
|
|
90
|
+
return output_format
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
"""Per-subcommand ``--help`` epilog blocks for the apothem CLI.
|
|
4
|
+
|
|
5
|
+
Each block carries Examples, Related commands, and Exit codes. Extracted
|
|
6
|
+
verbatim from the former monolithic ``cli/__init__.py`` so ``--help`` output
|
|
7
|
+
is byte-identical.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
_EP_INSTALL = """
|
|
13
|
+
Examples:
|
|
14
|
+
apothem install --harness claude-code
|
|
15
|
+
apothem install --harness all --project .
|
|
16
|
+
apothem install --harness claude-code --dry-run
|
|
17
|
+
apothem install --harness cursor --profile ~/profile.yaml --json
|
|
18
|
+
|
|
19
|
+
Related commands:
|
|
20
|
+
installing Continuous-form alias for install
|
|
21
|
+
update Re-apply current profile to a harness
|
|
22
|
+
uninstall Remove a harness configuration
|
|
23
|
+
verify Check installation status
|
|
24
|
+
|
|
25
|
+
Exit codes:
|
|
26
|
+
0 Adapter installed successfully
|
|
27
|
+
1 Expected validation, profile, harness, project, or adapter error
|
|
28
|
+
2 Partial batch materialization after at least one write
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
_EP_UNINSTALL = """
|
|
32
|
+
Examples:
|
|
33
|
+
apothem uninstall --harness claude-code
|
|
34
|
+
apothem uninstall --harness all --project . --yes
|
|
35
|
+
apothem uninstall --harness claude-code --yes
|
|
36
|
+
|
|
37
|
+
Related commands:
|
|
38
|
+
install Install a harness configuration
|
|
39
|
+
uninstalling Continuous-form alias for uninstall
|
|
40
|
+
verify Check installation status
|
|
41
|
+
|
|
42
|
+
Exit codes:
|
|
43
|
+
0 Adapter uninstalled or was not installed
|
|
44
|
+
1 Harness not found or user aborted confirmation
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
_EP_ROLLBACK = """
|
|
48
|
+
Examples:
|
|
49
|
+
apothem rollback --harness claude-code --last
|
|
50
|
+
apothem rollback --harness claude-code --install-id 01J9Z… --yes
|
|
51
|
+
apothem rollback --harness cursor --project . --last --json
|
|
52
|
+
|
|
53
|
+
Related commands:
|
|
54
|
+
install Install a harness configuration
|
|
55
|
+
uninstall Remove a harness configuration
|
|
56
|
+
verify Check installation status
|
|
57
|
+
|
|
58
|
+
Exit codes:
|
|
59
|
+
0 Pre-install state restored from the recorded backups
|
|
60
|
+
1 No matching install record, unknown install-id, harness/project error,
|
|
61
|
+
or user aborted confirmation
|
|
62
|
+
2 Partial restore after at least one backup was restored
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
_EP_UPDATE = """
|
|
66
|
+
Examples:
|
|
67
|
+
apothem update --harness claude-code
|
|
68
|
+
apothem update --harness all --project .
|
|
69
|
+
apothem update --harness claude-code --dry-run
|
|
70
|
+
|
|
71
|
+
Related commands:
|
|
72
|
+
install Install a harness configuration
|
|
73
|
+
updating Continuous-form alias for update
|
|
74
|
+
verify Check installation status
|
|
75
|
+
|
|
76
|
+
Exit codes:
|
|
77
|
+
0 Adapter updated successfully
|
|
78
|
+
1 Expected validation, profile, harness, project, or adapter error
|
|
79
|
+
2 Partial batch materialization after at least one write
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
_EP_VERIFY = """
|
|
83
|
+
Examples:
|
|
84
|
+
apothem verify --harness claude-code
|
|
85
|
+
apothem verify --harness all --project .
|
|
86
|
+
apothem verify --harness claude-code --profile ~/profile.yaml
|
|
87
|
+
apothem verify --harness claude-code --json
|
|
88
|
+
|
|
89
|
+
Notes:
|
|
90
|
+
Without --profile the check is structural (targets present and valid).
|
|
91
|
+
With --profile it also requires fidelity: a drifted install fails verify.
|
|
92
|
+
|
|
93
|
+
Related commands:
|
|
94
|
+
install Install a harness configuration
|
|
95
|
+
update Re-apply current profile to a harness
|
|
96
|
+
status Report install/verify/drift across every harness
|
|
97
|
+
|
|
98
|
+
Exit codes:
|
|
99
|
+
0 Harness is verified (with --profile, also faithful to it)
|
|
100
|
+
1 Harness is not verified (missing/invalid, or drifted from --profile)
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
_EP_STATUS = """
|
|
104
|
+
Examples:
|
|
105
|
+
apothem status
|
|
106
|
+
apothem status --project .
|
|
107
|
+
apothem status --profile ~/profile.yaml
|
|
108
|
+
apothem status --json
|
|
109
|
+
|
|
110
|
+
Notes:
|
|
111
|
+
--profile selects the drift baseline; without it the default profile
|
|
112
|
+
(~/.config/apothem/profile.yaml) is used.
|
|
113
|
+
|
|
114
|
+
Related commands:
|
|
115
|
+
verify Verify a specific harness installation
|
|
116
|
+
diff Preview pending changes for a harness
|
|
117
|
+
harnesses list List all registered harnesses
|
|
118
|
+
|
|
119
|
+
Exit codes:
|
|
120
|
+
0 Status reported (drift is reported, not an error)
|
|
121
|
+
2 At least one adapter failed to report its status
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
_EP_DIFF = """
|
|
125
|
+
Examples:
|
|
126
|
+
apothem diff --harness claude-code
|
|
127
|
+
apothem diff --harness cursor --project .
|
|
128
|
+
apothem diff --harness claude-code --json
|
|
129
|
+
|
|
130
|
+
Related commands:
|
|
131
|
+
status Report install/verify/drift across every harness
|
|
132
|
+
verify Verify a specific harness installation
|
|
133
|
+
install Apply the previewed changes
|
|
134
|
+
|
|
135
|
+
Exit codes:
|
|
136
|
+
0 Diff reported (pending changes are reported, not an error)
|
|
137
|
+
1 Expected validation, profile, harness, or project error
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
_EP_DOCTOR = """
|
|
141
|
+
Examples:
|
|
142
|
+
apothem doctor
|
|
143
|
+
apothem doctor --json
|
|
144
|
+
|
|
145
|
+
Related commands:
|
|
146
|
+
harnesses list List all registered harnesses
|
|
147
|
+
verify Check a specific harness
|
|
148
|
+
|
|
149
|
+
Exit codes:
|
|
150
|
+
0 All checks passed
|
|
151
|
+
1 One or more harnesses are not installed
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
_EP_PROFILE_SHOW = """
|
|
155
|
+
Examples:
|
|
156
|
+
apothem profile show
|
|
157
|
+
apothem profile show --json
|
|
158
|
+
|
|
159
|
+
Related commands:
|
|
160
|
+
profile init Create a schema-valid shared profile
|
|
161
|
+
profile set Set a key in the shared profile
|
|
162
|
+
profile edit Open the profile in the system editor
|
|
163
|
+
|
|
164
|
+
Exit codes:
|
|
165
|
+
0 Success
|
|
166
|
+
1 Profile missing or invalid
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
_EP_PROFILE_INIT = """
|
|
170
|
+
Examples:
|
|
171
|
+
apothem profile init
|
|
172
|
+
apothem profile init --profile ./profile.yaml --force
|
|
173
|
+
|
|
174
|
+
Related commands:
|
|
175
|
+
profile show Display the shared profile
|
|
176
|
+
profile edit Open the profile in the system editor
|
|
177
|
+
|
|
178
|
+
Exit codes:
|
|
179
|
+
0 Profile scaffold created
|
|
180
|
+
1 Profile exists or cannot be written
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
_EP_PROFILE_SET = """
|
|
184
|
+
Examples:
|
|
185
|
+
apothem profile set identity.name "Ada Lovelace"
|
|
186
|
+
apothem profile set preferences.style concise
|
|
187
|
+
apothem profile set seriousness SHARED
|
|
188
|
+
apothem profile set enforcement.sprints true
|
|
189
|
+
|
|
190
|
+
KEY is a dotted path into the profile; VALUE is stored literally (bare words are
|
|
191
|
+
not coerced) except true/false and explicit [..]/{..} input. The result is
|
|
192
|
+
validated against the schema before writing; an invalid set is refused.
|
|
193
|
+
|
|
194
|
+
Related commands:
|
|
195
|
+
profile show Display the shared profile
|
|
196
|
+
profile edit Open the profile in the system editor
|
|
197
|
+
|
|
198
|
+
Exit codes:
|
|
199
|
+
0 Key set successfully
|
|
200
|
+
2 Invalid key or value (profile unchanged)
|
|
201
|
+
"""
|
|
202
|
+
|
|
203
|
+
_EP_PROFILE_EDIT = """
|
|
204
|
+
Examples:
|
|
205
|
+
apothem profile edit
|
|
206
|
+
|
|
207
|
+
Related commands:
|
|
208
|
+
profile show Display the shared profile
|
|
209
|
+
profile set Set a key in the shared profile
|
|
210
|
+
|
|
211
|
+
Exit codes:
|
|
212
|
+
0 Editor exited normally
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
_EP_HARNESSES_LIST = """
|
|
216
|
+
Examples:
|
|
217
|
+
apothem harnesses list
|
|
218
|
+
apothem harnesses list --json
|
|
219
|
+
|
|
220
|
+
Related commands:
|
|
221
|
+
harnesses show Show details for a specific harness
|
|
222
|
+
doctor Run system diagnostics
|
|
223
|
+
|
|
224
|
+
Exit codes:
|
|
225
|
+
0 Success
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
_EP_HARNESSES_SHOW = """
|
|
229
|
+
Examples:
|
|
230
|
+
apothem harnesses show claude-code
|
|
231
|
+
apothem harnesses show claude-code --json
|
|
232
|
+
|
|
233
|
+
Related commands:
|
|
234
|
+
harnesses list List all registered harnesses
|
|
235
|
+
|
|
236
|
+
Exit codes:
|
|
237
|
+
0 Success
|
|
238
|
+
1 Harness not found
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
_EP_COMPLETION = """
|
|
242
|
+
Examples:
|
|
243
|
+
apothem completion bash >> ~/.bashrc
|
|
244
|
+
apothem completion zsh >> ~/.zshrc
|
|
245
|
+
apothem completion fish > ~/.config/fish/completions/apothem.fish
|
|
246
|
+
apothem completion powershell >> $PROFILE
|
|
247
|
+
|
|
248
|
+
Enabling completion is opt-in — this command only prints the script; it never
|
|
249
|
+
edits your shell startup files. Append the output to the file shown above (or
|
|
250
|
+
source it ad-hoc), then restart the shell.
|
|
251
|
+
|
|
252
|
+
Exit codes:
|
|
253
|
+
0 Completion script emitted
|
|
254
|
+
2 Unsupported shell requested
|
|
255
|
+
"""
|
|
256
|
+
|
|
257
|
+
_EP_QUICKSTART = """
|
|
258
|
+
Examples:
|
|
259
|
+
apothem quickstart
|
|
260
|
+
apothem quickstart --harness all --project . --yes
|
|
261
|
+
apothem quickstart --harness claude-code
|
|
262
|
+
apothem quickstart --json
|
|
263
|
+
|
|
264
|
+
Related commands:
|
|
265
|
+
install Materialize a harness from the shared profile
|
|
266
|
+
verify Confirm an installation is live
|
|
267
|
+
doctor Check environment + installation health
|
|
268
|
+
|
|
269
|
+
Exit codes:
|
|
270
|
+
0 Guided run completed
|
|
271
|
+
1 Expected validation, profile, harness, project, or adapter error
|
|
272
|
+
2 Partial batch materialization after at least one write
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
_EP_MIGRATE_WORKSPACE = """
|
|
276
|
+
Examples:
|
|
277
|
+
apothem migrate-workspace
|
|
278
|
+
apothem migrate-workspace --project .
|
|
279
|
+
apothem migrate-workspace --dry-run --json
|
|
280
|
+
|
|
281
|
+
Migrates a legacy per-harness data home (.apothem/<harness>/...) and a legacy
|
|
282
|
+
.plans/ tree into the single shared .apothem/{plans,memory,learning,contexts}
|
|
283
|
+
working directory. Per-harness memory/contexts/learning stores union-merge by
|
|
284
|
+
id; learning signals concatenate-dedup; .plans/ moves under .apothem/plans/.
|
|
285
|
+
Every consumed source is backed up first; a conflicting record is skipped, never
|
|
286
|
+
overwritten. The migration is idempotent — re-running on a migrated tree is a
|
|
287
|
+
no-op.
|
|
288
|
+
|
|
289
|
+
Related commands:
|
|
290
|
+
install Materialize a harness from the shared profile
|
|
291
|
+
status Report installed harnesses + drift
|
|
292
|
+
|
|
293
|
+
Exit codes:
|
|
294
|
+
0 Migration completed (or no legacy layout found)
|
|
295
|
+
1 Expected validation or project error
|
|
296
|
+
"""
|