arckit-cli 6.1.1__py3-none-any.whl
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.
- arckit_cli/__init__.py +1120 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/memory/sessions.md +293 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/_partials/RENDERING.md +22 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/_partials/document-control-uae.md +20 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/_partials/document-control-uk.md +16 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/adm-preliminary-template.md +135 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/adr-template.md +588 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-design-template.md +390 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-governance-template.md +90 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-integration-template.md +159 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-inventory-template.md +108 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-maturity-template.md +388 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/agent-security-template.md +213 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/analysis-report-template.md +323 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/application-inventory-template.md +221 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-board-template.md +194 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-change-template.md +205 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-diagram-template.md +610 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-principles-template.md +632 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-repository-template.md +107 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/architecture-strategy-template.md +666 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/at-bvergg-template.md +252 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/at-dsgvo-template.md +354 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/at-nisg-template.md +236 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-aescsf-template.md +189 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-ai-assurance-template.md +243 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-disp-attestation-template.md +297 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-dss-template.md +302 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-e8-posture-template.md +377 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-energy-compliance-template.md +189 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-ism-controls-template.md +462 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-ndb-playbook-template.md +288 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-ot-security-template.md +204 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-pia-template.md +394 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-pspf-template.md +380 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/au-soci-cirmp-template.md +206 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/aws-research-template.md +605 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/azure-research-template.md +559 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/backlog-template.md +465 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-aia-template.md +206 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-atip-template.md +192 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-charter-template.md +190 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-cloud-residency-template.md +173 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-fitaa-template.md +156 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-gc-digital-standards-template.md +208 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-itsg-33-template.md +228 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-ocap-template.md +205 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-ola-template.md +171 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-pia-template.md +193 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-pspc-template.md +214 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ca-soia-template.md +219 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/capability-map-template.md +125 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/competitors-template.md +113 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/conformance-assessment-template.md +507 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/data-mesh-contract-template.md +851 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/data-model-template.md +1043 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/data-source-profile-template.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/datascout-template.md +546 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/devops-template.md +961 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/dfd-template.md +161 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/dld-review-template.md +427 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/dos-requirements-template.md +506 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/dpia-template.md +1200 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-ai-act-template.md +227 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-cra-template.md +176 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-data-act-template.md +175 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-dora-template.md +197 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-dsa-template.md +183 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-nis2-template.md +196 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/eu-rgpd-template.md +198 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/evaluation-criteria-template.md +719 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/finops-template.md +662 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-algorithme-public-template.md +162 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-anssi-carto-template.md +196 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-anssi-template.md +190 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-code-reuse-template.md +190 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-dinum-template.md +195 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-dr-template.md +187 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-ebios-template.md +209 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-irn-template.md +311 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-marche-public-template.md +178 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-pssi-template.md +270 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-rgpd-template.md +195 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/fr-secnumcloud-template.md +188 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/framework-overview-template.md +247 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gap-analysis-template.md +198 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gcloud-clarify-template.md +340 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gcloud-requirements-template.md +370 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gcp-research-template.md +585 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/glossary-template.md +117 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gov-code-search-template.md +213 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gov-landscape-template.md +271 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/gov-reuse-template.md +214 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/grants-template.md +131 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/hld-review-template.md +760 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/jsp-936-template.md +1394 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/maturity-model-template.md +297 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/mlops-template.md +720 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/mod-secure-by-design-template.md +784 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/operationalize-template.md +1016 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/pages-template.html +5121 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/platform-design-template.md +1610 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/presentation-template.md +270 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/principles-compliance-assessment-template.md +389 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/project-plan-template.md +421 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/rationalization-template.md +208 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/requirements-template.md +1026 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/research-findings-template.md +939 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/risk-register-template.md +883 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/roadmap-template.md +787 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/service-assessment-prep-template.md +448 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/servicenow-design-template.md +273 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/sobc-template.md +1127 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/sow-template.md +785 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/stakeholder-drivers-template.md +493 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/story-template.md +889 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/tcop-review-template.md +593 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/tech-note-template.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/tenders-template.md +124 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/traceability-matrix-template.md +360 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/transition-architecture-template.md +286 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-ai-autonomy-tier-template.md +97 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-ai-charter-template.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-classification-template.md +86 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-cloud-residency-template.md +136 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-data-sharing-template.md +105 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-digital-records-template.md +97 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-ias-template.md +109 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-pdpl-template.md +105 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-priorities-alignment-template.md +99 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-procurement-template.md +115 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-uaepass-template.md +129 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uae-zero-bureaucracy-template.md +85 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-consumer-duty-board-report-template.md +49 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-consumer-duty-template.md +362 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-ctp-dependency-register-template.md +24 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-ctp-dependency-template.md +321 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-safeguarding-reconciliation-template.md +77 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-safeguarding-template.md +348 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-sca-rts-exemption-matrix-template.md +47 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-fs-sca-rts-template.md +273 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-gov-ai-playbook-template.md +942 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-gov-atrs-template.md +1087 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-mdr-classification-template.md +307 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0129-case-template.md +214 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0129-hazard-template.md +217 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0129-safety-template.md +78 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0129-template.md +13 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0160-deployment-case-template.md +207 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0160-deployment-hazard-template.md +290 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0160-deployment-safety-template.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dcb0160-template.md +13 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/uk-nhs-dtac-template.md +341 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/ukgov-secure-by-design-template.md +1031 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-ai-impact-template.md +212 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-ai-rmf-template.md +232 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-fedramp-readiness-template.md +209 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-fedramp-ssp-template.md +352 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-fisma-categorization-template.md +145 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-icam-template.md +216 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-nist-800-53-template.md +222 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-privacy-pia-template.md +191 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-sbom-eo-14028-template.md +253 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/us-zero-trust-template.md +234 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/vendor-profile-template.md +88 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/vendor-scoring-template.md +332 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/wardley-climate-template.md +269 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/wardley-doctrine-template.md +299 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/wardley-gameplay-template.md +346 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/wardley-map-template.md +587 -0
- arckit_cli-6.1.1.data/data/share/arckit/.arckit/templates/wardley-value-chain-template.md +256 -0
- arckit_cli-6.1.1.data/data/share/arckit/CHANGELOG.md +3554 -0
- arckit_cli-6.1.1.data/data/share/arckit/VERSION +1 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/DEPENDENCY-MATRIX.md +929 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/README.md +322 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/WORKFLOW-DIAGRAMS.md +1088 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/adm-preliminary.md +72 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/adr.md +60 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-design.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-governance.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-integration.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-inventory.md +60 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-maturity.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/agent-security.md +63 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ai-playbook.md +103 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/analyze.md +57 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/application-inventory.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/application-rationalization.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/architecture-board.md +60 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/architecture-change.md +73 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/architecture-repository.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/artifact-health.md +228 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/at-bvergg.md +86 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/at-dsgvo.md +75 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/at-nisg.md +94 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/atrs.md +98 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-aescsf.md +45 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-ai-assurance.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-disp-attestation.md +90 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-dss.md +76 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-e8-posture.md +73 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-energy-compliance.md +47 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-federal-overlay.md +199 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-ism-controls.md +78 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-ndb-playbook.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-ot-security.md +39 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-pia.md +72 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-pspf.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/au-soci-cirmp.md +40 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/autoresearch.md +334 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/aws-research.md +160 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/azure-research.md +157 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/backlog.md +58 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/build.md +132 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/business-capability-map.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/business-case.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/c4-layout-science.md +280 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-aia.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-atip.md +79 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-charter.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-cloud-residency.md +91 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-fitaa.md +81 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-gc-digital-standards.md +93 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-itsg-33.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-ocap.md +91 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-ola.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-pia.md +83 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-pspc.md +96 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/ca-soia.md +87 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/codes-of-practice.md +154 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/competitors.md +202 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/conformance.md +153 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/create.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/custom-commands.md +236 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/customize.md +108 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/data-mesh-contract.md +239 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/data-model.md +69 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/data-quality-framework.md +118 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/datascout.md +162 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/declaration.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/design-review.md +66 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/devops.md +96 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/dfd.md +187 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/diagram.md +118 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/dld-review.md +102 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/dos.md +109 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/dpia.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/enterprise-scale.md +260 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-ai-act.md +82 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-cra.md +90 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-data-act.md +85 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-dora.md +83 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-dsa.md +85 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-nis2.md +82 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/eu-rgpd.md +76 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/evaluate.md +115 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/export-okf.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/finops.md +117 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-algorithme-public.md +86 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-anssi-carto.md +69 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-anssi.md +79 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-code-reuse.md +86 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-dinum.md +83 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-dr.md +88 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-ebios.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-irn.md +103 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-marche-public.md +94 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-pssi.md +87 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-rgpd.md +75 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/fr-secnumcloud.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/framework.md +234 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gap-analysis.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gcloud-clarify.md +108 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gcloud-competitors.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gcloud-search.md +106 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gcp-research.md +169 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/glossary.md +190 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gov-code-search.md +119 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gov-landscape.md +114 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/gov-reuse.md +112 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/govs-007-security.md +93 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/grants.md +106 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/graph-report.md +77 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/health.md +234 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/hld-review.md +110 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/hooks.md +121 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/impact.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/import-okf.md +67 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/init.md +159 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/jsp-936.md +60 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/knowledge-compounding.md +140 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/maturity-model.md +186 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/mcp-servers.md +329 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/migration.md +333 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/mlops.md +126 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/mod-secure.md +124 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/national-data-strategy.md +115 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/navigator.md +86 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/operationalize.md +143 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/pages.md +227 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/pinecone-mcp.md +128 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/plan.md +66 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/platform-design.md +600 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/presentation.md +137 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/pricing.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/principles-compliance.md +63 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/principles.md +55 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/procurement.md +57 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/productivity.md +217 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/remote-control.md +151 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/requirements.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/research.md +65 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/review.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/risk-management.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/risk.md +132 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roadmap.md +58 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/README.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/business-analyst.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/business-architect.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/cdo.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/ciso.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/cto-cdio.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/data-architect.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/data-governance-manager.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/delivery-manager.md +63 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/devops-engineer.md +55 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/enterprise-architect.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/it-service-manager.md +55 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/network-architect.md +58 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/performance-analyst.md +67 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/product-manager.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/security-architect.md +78 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/service-owner.md +58 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/solution-architect.md +75 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/roles/technical-architect.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/score.md +91 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/sdd-lot1.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/sdd-lot2.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/sdd-lot3.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/search.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/secure.md +181 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/security-hooks.md +200 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/security.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/service-assessment.md +47 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/service-design.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/servicenow.md +152 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/session-memory.md +100 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/sobc.md +129 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/sow.md +125 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/stakeholder-analysis.md +51 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/stakeholders.md +138 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/start.md +276 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/story.md +61 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/strategy.md +211 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/submission-pack.md +72 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/supplier-profile.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/tcop.md +124 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/template-builder.md +125 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/tenders.md +193 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/testing-plugin-branches.md +79 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/traceability.md +58 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/transition-architecture.md +69 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/trello.md +139 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-ai-autonomy-tier.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-ai-charter.md +89 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-classification.md +73 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-cloud-residency.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-data-sharing.md +84 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-digital-records.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-ias.md +93 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-overlay-maintenance.md +154 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-overlay.md +208 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-pdpl.md +73 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-priorities-alignment.md +82 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-procurement.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-uaepass.md +83 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uae-zero-bureaucracy.md +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-fs-consumer-duty.md +178 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-fs-ctp-dependency.md +181 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-fs-payments-overlay.md +216 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-fs-safeguarding.md +176 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-fs-sca-rts.md +164 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/ai-playbook.md +56 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/algorithmic-transparency.md +44 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/digital-marketplace.md +55 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/secure-by-design.md +51 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/standards-map.md +108 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-government/technology-code-of-practice.md +63 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-mdr-classification.md +59 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-mod/secure-by-design.md +54 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-nhs-clinical-safety-overlay.md +214 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-nhs-dcb0129.md +64 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-nhs-dcb0160.md +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/uk-nhs-dtac.md +55 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/upgrading.md +130 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-ai-impact.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-ai-rmf.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-federal-overlay.md +111 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-fedramp-readiness.md +69 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-fedramp-ssp.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-fisma-categorization.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-icam.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-nist-800-53.md +70 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-privacy-pia.md +74 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-sbom-eo-14028.md +71 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/us-zero-trust.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/wardley-climate.md +122 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/wardley-doctrine.md +120 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/wardley-gameplay.md +123 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/wardley-value-chain.md +130 -0
- arckit_cli-6.1.1.data/data/share/arckit/docs/guides/wardley.md +173 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/.agents/plugins/marketplace.json +20 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/README.md +325 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/VERSION +1 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/docs/DEPENDENCY-MATRIX.md +616 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/arckit-codex-hook.mjs +1270 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/graph-inject.mjs +1497 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/graph-rollups.mjs +247 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/graph-utils.mjs +363 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/hook-utils.mjs +383 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/hooks.json +80 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/okf-frontmatter.mjs +279 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/project-context-builder.mjs +168 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-codex/hooks/sync-guides.mjs +1120 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-copilot/README.md +68 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-copilot/VERSION +1 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-copilot/docs/DEPENDENCY-MATRIX.md +616 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-opencode/LICENSE +21 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-opencode/README.md +65 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-opencode/VERSION +1 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-opencode/docs/DEPENDENCY-MATRIX.md +616 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-opencode/opencode.json +25 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-vibe/.mcp.json +63 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-vibe/LICENSE +26 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-vibe/README.md +407 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-vibe/VERSION +1 -0
- arckit_cli-6.1.1.data/data/share/arckit/extensions/arckit-vibe/vibe-config.toml +62 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/README.md +680 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/autoresearch/fixtures/000-global/ARC-000-PRIN-v1.0.md +120 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/autoresearch/fixtures/001-test-project/ARC-001-STKE-v1.0.md +100 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/autoresearch/fixtures/001-test-project/README.md +15 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/autoresearch/program-selfharness.md +748 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/autoresearch/program.md +269 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/check-prerequisites.sh +250 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/common.sh +359 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/create-project.sh +408 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/generate-document-id.sh +146 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/list-projects.sh +359 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bash/migrate-filenames.sh +553 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/bump-version.sh +293 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/check_doctype_collisions.py +30 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/check_recipes.py +94 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/check_references.py +144 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/convert_vibe_agents.py +198 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/convert_vibe_skills.py +499 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/converter.py +2002 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/create-sdg-repo.py +820 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/generate-arckit-architecture-hero.py +317 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/generate-arckit-hero.py +278 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/generate-release-notes.sh +112 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/managed-agents/README.md +105 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/managed-agents/arckit-agent.py +418 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/push-extensions.sh +424 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/apply_doc_control_marker.py +50 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/common.py +288 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/create-project.py +373 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/generate-document-id.py +96 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/list-projects.py +238 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/python/migrate_classification.py +94 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/render-brand-pngs.py +72 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/standardise-colon.py +128 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/sync-claude-plugin-layout.py +159 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/sync-shared-assets.py +132 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/tag-plugins.sh +65 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/tests/test-doc-types-dual-registration.mjs +57 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/tests/test-fde-templates.mjs +100 -0
- arckit_cli-6.1.1.data/data/share/arckit/scripts/tests/test-regime-registration.mjs +65 -0
- arckit_cli-6.1.1.dist-info/METADATA +1966 -0
- arckit_cli-6.1.1.dist-info/RECORD +482 -0
- arckit_cli-6.1.1.dist-info/WHEEL +4 -0
- arckit_cli-6.1.1.dist-info/entry_points.txt +2 -0
- arckit_cli-6.1.1.dist-info/licenses/LICENSE +26 -0
arckit_cli/__init__.py
ADDED
|
@@ -0,0 +1,1120 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
ArcKit CLI - The Enterprise Architecture Governance Harness
|
|
4
|
+
|
|
5
|
+
A toolkit for enterprise architects to manage:
|
|
6
|
+
- Architecture principles and governance
|
|
7
|
+
- Requirements documentation
|
|
8
|
+
- Vendor RFP/SOW generation
|
|
9
|
+
- Vendor evaluation and selection
|
|
10
|
+
- Design review processes (HLD/DLD)
|
|
11
|
+
- Requirements traceability
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import subprocess
|
|
16
|
+
import sys
|
|
17
|
+
import zipfile
|
|
18
|
+
import tempfile
|
|
19
|
+
import shutil
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Optional
|
|
22
|
+
|
|
23
|
+
import typer
|
|
24
|
+
import httpx
|
|
25
|
+
from rich.console import Console
|
|
26
|
+
from rich.panel import Panel
|
|
27
|
+
from rich.text import Text
|
|
28
|
+
from rich.align import Align
|
|
29
|
+
|
|
30
|
+
# For cross-platform keyboard input
|
|
31
|
+
import readchar
|
|
32
|
+
import ssl
|
|
33
|
+
import truststore
|
|
34
|
+
import platformdirs
|
|
35
|
+
|
|
36
|
+
ssl_context = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
|
37
|
+
client = httpx.Client(verify=ssl_context)
|
|
38
|
+
|
|
39
|
+
# Agent configuration for ArcKit
|
|
40
|
+
# Note: Claude Code support has moved to the ArcKit plugin (plugins/arckit-claude/).
|
|
41
|
+
# Gemini CLI support has moved to the ArcKit Gemini extension (extensions/arckit-gemini/).
|
|
42
|
+
# The CLI now only supports Codex.
|
|
43
|
+
AGENT_CONFIG = {
|
|
44
|
+
"codex": {
|
|
45
|
+
"name": "OpenAI Codex CLI",
|
|
46
|
+
"folder": ".codex/",
|
|
47
|
+
"install_url": "https://developers.openai.com/codex/cli/",
|
|
48
|
+
"requires_cli": True,
|
|
49
|
+
},
|
|
50
|
+
"opencode": {
|
|
51
|
+
"name": "OpenCode CLI",
|
|
52
|
+
"folder": ".opencode/",
|
|
53
|
+
"install_url": "https://opencode.net/cli/",
|
|
54
|
+
"requires_cli": True,
|
|
55
|
+
},
|
|
56
|
+
"copilot": {
|
|
57
|
+
"name": "GitHub Copilot",
|
|
58
|
+
"folder": ".github/",
|
|
59
|
+
"install_url": "https://github.com/features/copilot",
|
|
60
|
+
"requires_cli": False,
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
BANNER = """
|
|
65
|
+
█████╗ ██████╗ ██████╗██╗ ██╗██╗████████╗
|
|
66
|
+
██╔══██╗██╔══██╗██╔════╝██║ ██╔╝██║╚══██╔══╝
|
|
67
|
+
███████║██████╔╝██║ █████╔╝ ██║ ██║
|
|
68
|
+
██╔══██║██╔══██╗██║ ██╔═██╗ ██║ ██║
|
|
69
|
+
██║ ██║██║ ██║╚██████╗██║ ██╗██║ ██║
|
|
70
|
+
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
TAGLINE = "The Enterprise Architecture Governance Harness"
|
|
74
|
+
|
|
75
|
+
console = Console()
|
|
76
|
+
|
|
77
|
+
app = typer.Typer(
|
|
78
|
+
name="arckit",
|
|
79
|
+
help="The Enterprise Architecture Governance Harness",
|
|
80
|
+
add_completion=False,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def show_banner():
|
|
85
|
+
"""Display the ASCII art banner."""
|
|
86
|
+
banner_lines = BANNER.strip().split("\n")
|
|
87
|
+
colors = ["bright_blue", "blue", "cyan", "bright_cyan", "white", "bright_white"]
|
|
88
|
+
|
|
89
|
+
styled_banner = Text()
|
|
90
|
+
for i, line in enumerate(banner_lines):
|
|
91
|
+
color = colors[i % len(colors)]
|
|
92
|
+
styled_banner.append(line + "\n", style=color)
|
|
93
|
+
|
|
94
|
+
console.print(Align.center(styled_banner))
|
|
95
|
+
console.print(Align.center(Text(TAGLINE, style="italic bright_yellow")))
|
|
96
|
+
console.print()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def check_tool(tool: str) -> bool:
|
|
100
|
+
"""Check if a tool is installed."""
|
|
101
|
+
return shutil.which(tool) is not None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def is_git_repo(path: Path = None) -> bool:
|
|
105
|
+
"""Check if the specified path is inside a git repository."""
|
|
106
|
+
if path is None:
|
|
107
|
+
path = Path.cwd()
|
|
108
|
+
|
|
109
|
+
if not path.is_dir():
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
subprocess.run(
|
|
114
|
+
["git", "rev-parse", "--is-inside-work-tree"],
|
|
115
|
+
check=True,
|
|
116
|
+
capture_output=True,
|
|
117
|
+
cwd=path,
|
|
118
|
+
)
|
|
119
|
+
return True
|
|
120
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def init_git_repo(project_path: Path) -> bool:
|
|
125
|
+
"""Initialize a git repository in the specified path."""
|
|
126
|
+
try:
|
|
127
|
+
original_cwd = Path.cwd()
|
|
128
|
+
os.chdir(project_path)
|
|
129
|
+
console.print("[cyan]Initializing git repository...[/cyan]")
|
|
130
|
+
subprocess.run(["git", "init"], check=True, capture_output=True, text=True)
|
|
131
|
+
subprocess.run(["git", "add", "."], check=True, capture_output=True, text=True)
|
|
132
|
+
subprocess.run(
|
|
133
|
+
["git", "commit", "-m", "Initial commit from ArcKit"],
|
|
134
|
+
check=True,
|
|
135
|
+
capture_output=True,
|
|
136
|
+
text=True,
|
|
137
|
+
)
|
|
138
|
+
console.print("[green]✓[/green] Git repository initialized")
|
|
139
|
+
return True
|
|
140
|
+
except subprocess.CalledProcessError as e:
|
|
141
|
+
console.print(f"[red]Error initializing git repository:[/red] {e}")
|
|
142
|
+
return False
|
|
143
|
+
finally:
|
|
144
|
+
os.chdir(original_cwd)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def get_data_paths():
|
|
148
|
+
"""Get paths to templates, scripts, and commands from installed package or source."""
|
|
149
|
+
|
|
150
|
+
def build_paths(base_path):
|
|
151
|
+
"""Build the full paths dictionary from a base path."""
|
|
152
|
+
return {
|
|
153
|
+
"templates": base_path / ".arckit" / "templates",
|
|
154
|
+
"scripts": base_path / "scripts",
|
|
155
|
+
"opencode_root": base_path / "extensions" / "arckit-opencode",
|
|
156
|
+
"opencode_commands": base_path / "extensions" / "arckit-opencode" / "commands",
|
|
157
|
+
"opencode_agents": base_path / "extensions" / "arckit-opencode" / "agents",
|
|
158
|
+
"docs_guides": base_path / "docs" / "guides",
|
|
159
|
+
"docs_readme": base_path / "docs" / "README.md",
|
|
160
|
+
"dependency_matrix": base_path / "docs" / "DEPENDENCY-MATRIX.md",
|
|
161
|
+
"workflow_diagrams": base_path / "docs" / "WORKFLOW-DIAGRAMS.md",
|
|
162
|
+
"version": base_path / "VERSION",
|
|
163
|
+
"changelog": base_path / "CHANGELOG.md",
|
|
164
|
+
"codex_references": base_path / "extensions" / "arckit-codex" / "references",
|
|
165
|
+
"codex_skills": base_path / "extensions" / "arckit-codex" / "skills",
|
|
166
|
+
"codex_agents": base_path / "extensions" / "arckit-codex" / "agents",
|
|
167
|
+
"codex_hooks": base_path / "extensions" / "arckit-codex" / "hooks",
|
|
168
|
+
"codex_schemas": base_path / "extensions" / "arckit-codex" / "schemas",
|
|
169
|
+
"codex_validator": base_path / "extensions" / "arckit-codex" / "scripts" / "validate-handoff.mjs",
|
|
170
|
+
"codex_config": base_path / "extensions" / "arckit-codex" / "config.toml",
|
|
171
|
+
"copilot_prompts": base_path / "extensions" / "arckit-copilot" / "prompts",
|
|
172
|
+
"copilot_agents": base_path / "extensions" / "arckit-copilot" / "agents",
|
|
173
|
+
"copilot_instructions": base_path / "extensions" / "arckit-copilot" / "copilot-instructions.md",
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
# First, check if running from source (development mode)
|
|
177
|
+
# This allows testing local changes without re-installing
|
|
178
|
+
source_root = Path(__file__).parent.parent.parent
|
|
179
|
+
if (source_root / ".arckit").exists() and (source_root / "extensions" / "arckit-codex").exists():
|
|
180
|
+
return build_paths(source_root)
|
|
181
|
+
|
|
182
|
+
# Then try to find installed package data
|
|
183
|
+
try:
|
|
184
|
+
# Try to find the shared data directory for uv tool installs
|
|
185
|
+
# uv installs tools in ~/.local/share/uv/tools/{package-name}/share/{package}/
|
|
186
|
+
uv_tools_path = (
|
|
187
|
+
Path.home()
|
|
188
|
+
/ ".local"
|
|
189
|
+
/ "share"
|
|
190
|
+
/ "uv"
|
|
191
|
+
/ "tools"
|
|
192
|
+
/ "arckit-cli"
|
|
193
|
+
/ "share"
|
|
194
|
+
/ "arckit"
|
|
195
|
+
)
|
|
196
|
+
if uv_tools_path.exists():
|
|
197
|
+
return build_paths(uv_tools_path)
|
|
198
|
+
|
|
199
|
+
# Try to find the shared data directory for regular pip installs
|
|
200
|
+
import site
|
|
201
|
+
|
|
202
|
+
for site_dir in site.getsitepackages() + [site.getusersitepackages()]:
|
|
203
|
+
if site_dir:
|
|
204
|
+
# Try site-packages/share/arckit
|
|
205
|
+
share_path = Path(site_dir) / "share" / "arckit"
|
|
206
|
+
if share_path.exists():
|
|
207
|
+
return build_paths(share_path)
|
|
208
|
+
|
|
209
|
+
# Try ../../../share/arckit from site-packages (for system installs)
|
|
210
|
+
share_path = Path(site_dir).parent.parent.parent / "share" / "arckit"
|
|
211
|
+
if share_path.exists():
|
|
212
|
+
return build_paths(share_path)
|
|
213
|
+
|
|
214
|
+
# Try platformdirs approach for other installs
|
|
215
|
+
data_dir = Path(platformdirs.user_data_dir("arckit"))
|
|
216
|
+
if data_dir.exists():
|
|
217
|
+
return build_paths(data_dir)
|
|
218
|
+
|
|
219
|
+
except Exception:
|
|
220
|
+
pass
|
|
221
|
+
|
|
222
|
+
# Fallback to source directory if installation check failed
|
|
223
|
+
return build_paths(source_root)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def create_project_structure(
|
|
227
|
+
project_path: Path, ai_assistant: str, all_ai: bool = False
|
|
228
|
+
):
|
|
229
|
+
"""Create the basic ArcKit project structure."""
|
|
230
|
+
|
|
231
|
+
console.print("[cyan]Creating project structure...[/cyan]")
|
|
232
|
+
|
|
233
|
+
# Create directory structure
|
|
234
|
+
directories = [
|
|
235
|
+
".arckit/scripts/bash",
|
|
236
|
+
".arckit/templates",
|
|
237
|
+
".arckit/templates-custom",
|
|
238
|
+
"projects/000-global",
|
|
239
|
+
"projects/000-global/policies",
|
|
240
|
+
"projects/000-global/external",
|
|
241
|
+
]
|
|
242
|
+
|
|
243
|
+
if all_ai:
|
|
244
|
+
# Create directories for all AI assistants (Codex and OpenCode)
|
|
245
|
+
directories.extend(
|
|
246
|
+
[
|
|
247
|
+
".codex/agents",
|
|
248
|
+
".codex/hooks",
|
|
249
|
+
".agents/skills",
|
|
250
|
+
".opencode/commands",
|
|
251
|
+
".opencode/agents",
|
|
252
|
+
]
|
|
253
|
+
)
|
|
254
|
+
else:
|
|
255
|
+
agent_folder = AGENT_CONFIG[ai_assistant]["folder"]
|
|
256
|
+
if ai_assistant == "codex":
|
|
257
|
+
directories.append(".agents/skills")
|
|
258
|
+
directories.append(f"{agent_folder}agents")
|
|
259
|
+
directories.append(f"{agent_folder}hooks")
|
|
260
|
+
elif ai_assistant == "opencode":
|
|
261
|
+
directories.append(f"{agent_folder}commands")
|
|
262
|
+
directories.append(f"{agent_folder}agents")
|
|
263
|
+
elif ai_assistant == "copilot":
|
|
264
|
+
directories.append(f"{agent_folder}prompts")
|
|
265
|
+
directories.append(f"{agent_folder}agents")
|
|
266
|
+
|
|
267
|
+
for directory in directories:
|
|
268
|
+
(project_path / directory).mkdir(parents=True, exist_ok=True)
|
|
269
|
+
|
|
270
|
+
# Add .gitkeep files to empty directories so git tracks them
|
|
271
|
+
gitkeep_dirs = [
|
|
272
|
+
"projects/000-global",
|
|
273
|
+
"projects/000-global/policies",
|
|
274
|
+
"projects/000-global/external",
|
|
275
|
+
]
|
|
276
|
+
for directory in gitkeep_dirs:
|
|
277
|
+
gitkeep = project_path / directory / ".gitkeep"
|
|
278
|
+
if not gitkeep.exists():
|
|
279
|
+
gitkeep.touch()
|
|
280
|
+
|
|
281
|
+
# Create README for templates-custom directory
|
|
282
|
+
templates_custom_readme = (
|
|
283
|
+
project_path / ".arckit" / "templates-custom" / "README.md"
|
|
284
|
+
)
|
|
285
|
+
templates_custom_readme.write_text("""# Custom Templates
|
|
286
|
+
|
|
287
|
+
This directory is for your customized ArcKit templates.
|
|
288
|
+
|
|
289
|
+
## How Template Customization Works
|
|
290
|
+
|
|
291
|
+
1. **Default templates** are in `.arckit/templates/` (refreshed by `arckit init`)
|
|
292
|
+
2. **Your customizations** go here in `.arckit/templates-custom/`
|
|
293
|
+
3. Commands automatically check here first, falling back to defaults
|
|
294
|
+
|
|
295
|
+
## Getting Started
|
|
296
|
+
|
|
297
|
+
Use the `/arckit:customize` command to copy templates for editing:
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
/arckit:customize requirements # Copy requirements template
|
|
301
|
+
/arckit:customize all # Copy all templates
|
|
302
|
+
/arckit:customize list # See available templates
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Why This Pattern?
|
|
306
|
+
|
|
307
|
+
- Your customizations are preserved when running `arckit init` again
|
|
308
|
+
- Default templates can be updated without losing your changes
|
|
309
|
+
- Easy to see what you've customized vs defaults
|
|
310
|
+
|
|
311
|
+
## Common Customizations
|
|
312
|
+
|
|
313
|
+
- Add organization-specific document control fields
|
|
314
|
+
- Include mandatory compliance sections (ISO 27001, PCI-DSS)
|
|
315
|
+
- Add department-specific approval workflows
|
|
316
|
+
- Customize UK Government classification banners
|
|
317
|
+
""", encoding='utf-8')
|
|
318
|
+
|
|
319
|
+
console.print("[green]✓[/green] Project structure created")
|
|
320
|
+
|
|
321
|
+
return project_path
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
@app.command()
|
|
325
|
+
def init(
|
|
326
|
+
project_name: str = typer.Argument(
|
|
327
|
+
None,
|
|
328
|
+
help="Name for your new project directory (optional, use '.' for current directory)",
|
|
329
|
+
),
|
|
330
|
+
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: codex, opencode, copilot"),
|
|
331
|
+
no_git: bool = typer.Option(
|
|
332
|
+
False, "--no-git", help="Skip git repository initialization"
|
|
333
|
+
),
|
|
334
|
+
here: bool = typer.Option(
|
|
335
|
+
False, "--here", help="Initialize project in the current directory"
|
|
336
|
+
),
|
|
337
|
+
all_ai: bool = typer.Option(
|
|
338
|
+
False,
|
|
339
|
+
"--all-ai",
|
|
340
|
+
help="Install commands for all CLI-supported AI assistants (codex)",
|
|
341
|
+
),
|
|
342
|
+
minimal: bool = typer.Option(
|
|
343
|
+
False, "--minimal", help="Minimal install: skip docs and guides"
|
|
344
|
+
),
|
|
345
|
+
):
|
|
346
|
+
"""
|
|
347
|
+
Initialize a new ArcKit project for enterprise architecture governance.
|
|
348
|
+
|
|
349
|
+
This command will:
|
|
350
|
+
1. Create project directory structure
|
|
351
|
+
2. Copy templates for architecture principles, requirements, SOW, etc.
|
|
352
|
+
3. Set up AI assistant commands
|
|
353
|
+
4. Copy documentation and guides (unless --minimal)
|
|
354
|
+
5. Initialize git repository (optional)
|
|
355
|
+
|
|
356
|
+
Examples:
|
|
357
|
+
arckit init my-architecture-project
|
|
358
|
+
arckit init my-project --ai codex
|
|
359
|
+
arckit init . --ai codex
|
|
360
|
+
arckit init --here --ai codex --minimal
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
show_banner()
|
|
364
|
+
|
|
365
|
+
if project_name == ".":
|
|
366
|
+
here = True
|
|
367
|
+
project_name = None
|
|
368
|
+
|
|
369
|
+
if here and project_name:
|
|
370
|
+
console.print(
|
|
371
|
+
"[red]Error:[/red] Cannot specify both project name and --here flag"
|
|
372
|
+
)
|
|
373
|
+
raise typer.Exit(1)
|
|
374
|
+
|
|
375
|
+
if not here and not project_name:
|
|
376
|
+
console.print(
|
|
377
|
+
"[red]Error:[/red] Must specify either a project name or use '.' / --here flag"
|
|
378
|
+
)
|
|
379
|
+
raise typer.Exit(1)
|
|
380
|
+
|
|
381
|
+
if here:
|
|
382
|
+
try:
|
|
383
|
+
project_name = Path.cwd().name
|
|
384
|
+
project_path = Path.cwd()
|
|
385
|
+
except (FileNotFoundError, OSError):
|
|
386
|
+
console.print(
|
|
387
|
+
"[red]Error:[/red] Current directory does not exist. Please cd to a valid directory first."
|
|
388
|
+
)
|
|
389
|
+
raise typer.Exit(1)
|
|
390
|
+
else:
|
|
391
|
+
try:
|
|
392
|
+
project_path = Path(project_name).resolve()
|
|
393
|
+
except (FileNotFoundError, OSError):
|
|
394
|
+
project_path = Path.home() / project_name
|
|
395
|
+
if project_path.exists():
|
|
396
|
+
console.print(
|
|
397
|
+
f"[red]Error:[/red] Directory '{project_name}' already exists"
|
|
398
|
+
)
|
|
399
|
+
raise typer.Exit(1)
|
|
400
|
+
|
|
401
|
+
console.print(f"[cyan]Initializing ArcKit project:[/cyan] {project_name}")
|
|
402
|
+
console.print(f"[cyan]Location:[/cyan] {project_path}")
|
|
403
|
+
|
|
404
|
+
# Check git
|
|
405
|
+
should_init_git = False
|
|
406
|
+
if not no_git:
|
|
407
|
+
should_init_git = check_tool("git")
|
|
408
|
+
if not should_init_git:
|
|
409
|
+
console.print(
|
|
410
|
+
"[yellow]Git not found - will skip repository initialization[/yellow]"
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
# Select AI assistant
|
|
414
|
+
if not ai_assistant:
|
|
415
|
+
console.print("\n[cyan]Select your AI assistant:[/cyan]")
|
|
416
|
+
console.print("1. codex (OpenAI Codex CLI)")
|
|
417
|
+
console.print("2. opencode (OpenCode CLI)")
|
|
418
|
+
console.print("3. copilot (GitHub Copilot in VS Code)")
|
|
419
|
+
console.print()
|
|
420
|
+
console.print("[dim]For Claude Code, use the ArcKit plugin instead:[/dim]")
|
|
421
|
+
console.print("[dim] /plugin marketplace add tractorjuice/arc-kit[/dim]")
|
|
422
|
+
console.print("[dim]For Gemini CLI, use the ArcKit extension instead:[/dim]")
|
|
423
|
+
console.print(
|
|
424
|
+
"[dim] gemini extensions install https://github.com/tractorjuice/arckit-gemini[/dim]"
|
|
425
|
+
)
|
|
426
|
+
|
|
427
|
+
choice = typer.prompt("Enter choice", default="1")
|
|
428
|
+
ai_map = {"1": "codex", "2": "opencode", "3": "copilot"}
|
|
429
|
+
ai_assistant = ai_map.get(choice, "codex")
|
|
430
|
+
|
|
431
|
+
if ai_assistant == "claude":
|
|
432
|
+
console.print(
|
|
433
|
+
"[yellow]Claude Code support has moved to the ArcKit plugin.[/yellow]"
|
|
434
|
+
)
|
|
435
|
+
console.print("Install in Claude Code with:")
|
|
436
|
+
console.print(" [cyan]/plugin marketplace add tractorjuice/arc-kit[/cyan]")
|
|
437
|
+
console.print("\nThen enable the plugin from the Discover tab.")
|
|
438
|
+
raise typer.Exit(0)
|
|
439
|
+
|
|
440
|
+
if ai_assistant == "gemini":
|
|
441
|
+
console.print(
|
|
442
|
+
"[yellow]Gemini CLI support has moved to the ArcKit Gemini extension.[/yellow]"
|
|
443
|
+
)
|
|
444
|
+
console.print("Install in Gemini CLI with:")
|
|
445
|
+
console.print(
|
|
446
|
+
" [cyan]gemini extensions install https://github.com/tractorjuice/arckit-gemini[/cyan]"
|
|
447
|
+
)
|
|
448
|
+
console.print("\nThe extension provides all 48 commands with zero config.")
|
|
449
|
+
console.print("Updates via: [cyan]gemini extensions update arckit[/cyan]")
|
|
450
|
+
raise typer.Exit(0)
|
|
451
|
+
|
|
452
|
+
if ai_assistant not in AGENT_CONFIG:
|
|
453
|
+
console.print(f"[red]Error:[/red] Invalid AI assistant '{ai_assistant}'")
|
|
454
|
+
console.print(f"Choose from: {', '.join(AGENT_CONFIG.keys())}")
|
|
455
|
+
raise typer.Exit(1)
|
|
456
|
+
|
|
457
|
+
if all_ai:
|
|
458
|
+
console.print(f"[cyan]Selected AI assistant:[/cyan] All (Codex)")
|
|
459
|
+
else:
|
|
460
|
+
console.print(
|
|
461
|
+
f"[cyan]Selected AI assistant:[/cyan] {AGENT_CONFIG[ai_assistant]['name']}"
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
# Create project structure
|
|
465
|
+
create_project_structure(project_path, ai_assistant, all_ai)
|
|
466
|
+
|
|
467
|
+
# Copy templates from installed package or source
|
|
468
|
+
console.print("[cyan]Setting up templates...[/cyan]")
|
|
469
|
+
|
|
470
|
+
data_paths = get_data_paths()
|
|
471
|
+
templates_src = data_paths["templates"]
|
|
472
|
+
scripts_src = data_paths["scripts"]
|
|
473
|
+
|
|
474
|
+
console.print(f"[dim]Debug: Resolved data paths:[/dim]")
|
|
475
|
+
console.print(f"[dim] templates: {templates_src}[/dim]")
|
|
476
|
+
console.print(f"[dim] scripts: {scripts_src}[/dim]")
|
|
477
|
+
|
|
478
|
+
templates_dst = project_path / ".arckit" / "templates"
|
|
479
|
+
scripts_dst = project_path / ".arckit" / "scripts"
|
|
480
|
+
agent_folder = AGENT_CONFIG[ai_assistant]["folder"]
|
|
481
|
+
|
|
482
|
+
# Determine destination subfolder based on assistant type
|
|
483
|
+
subfolder = "commands" if ai_assistant == "opencode" else "prompts"
|
|
484
|
+
commands_dst = project_path / agent_folder / subfolder
|
|
485
|
+
|
|
486
|
+
# Copy templates if they exist
|
|
487
|
+
if templates_src.exists():
|
|
488
|
+
console.print(f"[dim]Copying templates from: {templates_src}[/dim]")
|
|
489
|
+
template_count = 0
|
|
490
|
+
for template_file in templates_src.glob("*.md"):
|
|
491
|
+
shutil.copy2(template_file, templates_dst / template_file.name)
|
|
492
|
+
template_count += 1
|
|
493
|
+
console.print(f"[green]✓[/green] Copied {template_count} templates")
|
|
494
|
+
else:
|
|
495
|
+
console.print(
|
|
496
|
+
f"[yellow]Warning: Templates not found at {templates_src}[/yellow]"
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
# Copy scripts if they exist
|
|
500
|
+
if scripts_src.exists():
|
|
501
|
+
console.print(f"[dim]Copying scripts from: {scripts_src}[/dim]")
|
|
502
|
+
shutil.copytree(
|
|
503
|
+
scripts_src,
|
|
504
|
+
scripts_dst,
|
|
505
|
+
dirs_exist_ok=True,
|
|
506
|
+
ignore=shutil.ignore_patterns("__pycache__", "*.pyc"),
|
|
507
|
+
)
|
|
508
|
+
console.print(f"[green]✓[/green] Scripts copied")
|
|
509
|
+
else:
|
|
510
|
+
console.print(f"[yellow]Warning: Scripts not found at {scripts_src}[/yellow]")
|
|
511
|
+
|
|
512
|
+
# Copy references if they exist
|
|
513
|
+
references_src = data_paths.get("codex_references")
|
|
514
|
+
if references_src and references_src.exists():
|
|
515
|
+
references_dst = project_path / ".arckit" / "references"
|
|
516
|
+
references_dst.mkdir(parents=True, exist_ok=True)
|
|
517
|
+
shutil.copytree(references_src, references_dst, dirs_exist_ok=True)
|
|
518
|
+
console.print(f"[green]✓[/green] References copied")
|
|
519
|
+
|
|
520
|
+
# Copy slash commands
|
|
521
|
+
# Copy Codex prompts (all_ai and single-AI both install codex)
|
|
522
|
+
if ai_assistant == "codex" or all_ai:
|
|
523
|
+
# Copy Codex skills to .agents/skills/ (replaces deprecated .codex/prompts/)
|
|
524
|
+
codex_skills_src = data_paths.get("codex_skills")
|
|
525
|
+
if codex_skills_src and codex_skills_src.exists():
|
|
526
|
+
skills_dst = project_path / ".agents" / "skills"
|
|
527
|
+
skills_dst.mkdir(parents=True, exist_ok=True)
|
|
528
|
+
shutil.copytree(codex_skills_src, skills_dst, dirs_exist_ok=True)
|
|
529
|
+
skill_count = sum(
|
|
530
|
+
1 for d in skills_dst.iterdir()
|
|
531
|
+
if d.is_dir() and not d.name.startswith(".")
|
|
532
|
+
)
|
|
533
|
+
console.print(f"[green]✓[/green] Copied {skill_count} skills to .agents/skills/")
|
|
534
|
+
else:
|
|
535
|
+
console.print(
|
|
536
|
+
f"[yellow]Warning: Codex skills not found at {codex_skills_src}[/yellow]"
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
# Copy Codex agent configs
|
|
540
|
+
codex_agents_src = data_paths.get("codex_agents")
|
|
541
|
+
if codex_agents_src and codex_agents_src.exists():
|
|
542
|
+
agents_dst = project_path / ".codex" / "agents"
|
|
543
|
+
agents_dst.mkdir(parents=True, exist_ok=True)
|
|
544
|
+
agent_count = 0
|
|
545
|
+
for agent_file in sorted(codex_agents_src.iterdir()):
|
|
546
|
+
if agent_file.suffix in (".toml", ".md"):
|
|
547
|
+
shutil.copy2(agent_file, agents_dst / agent_file.name)
|
|
548
|
+
agent_count += 1
|
|
549
|
+
console.print(f"[green]✓[/green] Copied {agent_count} agent configs to .codex/agents/")
|
|
550
|
+
|
|
551
|
+
# Copy Codex config.toml (MCP servers + agent roles)
|
|
552
|
+
codex_config_src = data_paths.get("codex_config")
|
|
553
|
+
if codex_config_src and codex_config_src.exists():
|
|
554
|
+
config_dst = project_path / ".codex" / "config.toml"
|
|
555
|
+
shutil.copy2(codex_config_src, config_dst)
|
|
556
|
+
console.print(f"[green]✓[/green] Copied config.toml (MCP servers + hooks + agent roles)")
|
|
557
|
+
|
|
558
|
+
# Copy Codex lifecycle hooks
|
|
559
|
+
codex_hooks_src = data_paths.get("codex_hooks")
|
|
560
|
+
if codex_hooks_src and codex_hooks_src.exists():
|
|
561
|
+
hooks_dst = project_path / ".codex" / "hooks"
|
|
562
|
+
hooks_dst.mkdir(parents=True, exist_ok=True)
|
|
563
|
+
for hook_file in sorted(codex_hooks_src.iterdir()):
|
|
564
|
+
if hook_file.is_file() and hook_file.name != "hooks.json":
|
|
565
|
+
shutil.copy2(hook_file, hooks_dst / hook_file.name)
|
|
566
|
+
console.print(f"[green]✓[/green] Copied Codex lifecycle hooks to .codex/hooks/")
|
|
567
|
+
|
|
568
|
+
# Copy Codex schemas and deterministic validators used by research workflows
|
|
569
|
+
codex_schemas_src = data_paths.get("codex_schemas")
|
|
570
|
+
if codex_schemas_src and codex_schemas_src.exists():
|
|
571
|
+
schemas_dst = project_path / ".arckit" / "schemas"
|
|
572
|
+
shutil.copytree(codex_schemas_src, schemas_dst, dirs_exist_ok=True)
|
|
573
|
+
console.print(f"[green]✓[/green] Copied Codex schemas to .arckit/schemas/")
|
|
574
|
+
|
|
575
|
+
codex_validator_src = data_paths.get("codex_validator")
|
|
576
|
+
if codex_validator_src and codex_validator_src.exists():
|
|
577
|
+
validator_dst = project_path / ".arckit" / "scripts" / "validate-handoff.mjs"
|
|
578
|
+
validator_dst.parent.mkdir(parents=True, exist_ok=True)
|
|
579
|
+
shutil.copy2(codex_validator_src, validator_dst)
|
|
580
|
+
console.print(f"[green]✓[/green] Copied handoff validator to .arckit/scripts/")
|
|
581
|
+
|
|
582
|
+
# Copy OpenCode commands and agents
|
|
583
|
+
if ai_assistant == "opencode" or all_ai:
|
|
584
|
+
# Copy commands
|
|
585
|
+
commands_src = data_paths["opencode_commands"]
|
|
586
|
+
if all_ai:
|
|
587
|
+
target_cmd_dst = project_path / ".opencode" / "commands"
|
|
588
|
+
target_agent_dst = project_path / ".opencode" / "agents"
|
|
589
|
+
else:
|
|
590
|
+
target_cmd_dst = project_path / agent_folder / "commands"
|
|
591
|
+
target_agent_dst = project_path / agent_folder / "agents"
|
|
592
|
+
|
|
593
|
+
if commands_src.exists():
|
|
594
|
+
console.print(f"[dim]Copying OpenCode commands from: {commands_src}[/dim]")
|
|
595
|
+
command_count = 0
|
|
596
|
+
target_cmd_dst.mkdir(parents=True, exist_ok=True)
|
|
597
|
+
for command_file in commands_src.glob("arckit.*.md"):
|
|
598
|
+
shutil.copy2(command_file, target_cmd_dst / command_file.name)
|
|
599
|
+
command_count += 1
|
|
600
|
+
console.print(f"[green]✓[/green] Copied {command_count} OpenCode commands")
|
|
601
|
+
else:
|
|
602
|
+
console.print(
|
|
603
|
+
f"[yellow]Warning: OpenCode commands not found at {commands_src}[/yellow]"
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
# Copy agents
|
|
607
|
+
agents_src = data_paths["opencode_agents"]
|
|
608
|
+
if agents_src.exists():
|
|
609
|
+
console.print(f"[dim]Copying OpenCode agents from: {agents_src}[/dim]")
|
|
610
|
+
agent_count = 0
|
|
611
|
+
target_agent_dst.mkdir(parents=True, exist_ok=True)
|
|
612
|
+
for agent_file in agents_src.glob("*.md"):
|
|
613
|
+
shutil.copy2(agent_file, target_agent_dst / agent_file.name)
|
|
614
|
+
agent_count += 1
|
|
615
|
+
console.print(f"[green]✓[/green] Copied {agent_count} OpenCode agents")
|
|
616
|
+
else:
|
|
617
|
+
console.print(
|
|
618
|
+
f"[yellow]Warning: OpenCode agents not found at {agents_src}[/yellow]"
|
|
619
|
+
)
|
|
620
|
+
|
|
621
|
+
# Copy Copilot prompt files and agents
|
|
622
|
+
if ai_assistant == "copilot":
|
|
623
|
+
console.print("[cyan]Setting up Copilot environment...[/cyan]")
|
|
624
|
+
|
|
625
|
+
# Copy prompt files to .github/prompts/
|
|
626
|
+
copilot_prompts_src = data_paths.get("copilot_prompts")
|
|
627
|
+
if copilot_prompts_src and copilot_prompts_src.exists():
|
|
628
|
+
prompts_dst = project_path / ".github" / "prompts"
|
|
629
|
+
prompts_dst.mkdir(parents=True, exist_ok=True)
|
|
630
|
+
prompt_count = 0
|
|
631
|
+
for prompt_file in copilot_prompts_src.glob("*.prompt.md"):
|
|
632
|
+
shutil.copy2(prompt_file, prompts_dst / prompt_file.name)
|
|
633
|
+
prompt_count += 1
|
|
634
|
+
console.print(f"[green]✓[/green] Copied {prompt_count} prompt files to .github/prompts/")
|
|
635
|
+
else:
|
|
636
|
+
console.print(
|
|
637
|
+
f"[yellow]Warning: Copilot prompts not found at {copilot_prompts_src}[/yellow]"
|
|
638
|
+
)
|
|
639
|
+
|
|
640
|
+
# Copy agent files to .github/agents/
|
|
641
|
+
copilot_agents_src = data_paths.get("copilot_agents")
|
|
642
|
+
if copilot_agents_src and copilot_agents_src.exists():
|
|
643
|
+
agents_dst = project_path / ".github" / "agents"
|
|
644
|
+
agents_dst.mkdir(parents=True, exist_ok=True)
|
|
645
|
+
agent_count = 0
|
|
646
|
+
for agent_file in copilot_agents_src.glob("*.agent.md"):
|
|
647
|
+
shutil.copy2(agent_file, agents_dst / agent_file.name)
|
|
648
|
+
agent_count += 1
|
|
649
|
+
console.print(f"[green]✓[/green] Copied {agent_count} agent files to .github/agents/")
|
|
650
|
+
|
|
651
|
+
# Copy copilot-instructions.md
|
|
652
|
+
copilot_instructions_src = data_paths.get("copilot_instructions")
|
|
653
|
+
if copilot_instructions_src and copilot_instructions_src.exists():
|
|
654
|
+
instructions_dst = project_path / ".github" / "copilot-instructions.md"
|
|
655
|
+
shutil.copy2(copilot_instructions_src, instructions_dst)
|
|
656
|
+
console.print(f"[green]✓[/green] Copied copilot-instructions.md")
|
|
657
|
+
|
|
658
|
+
console.print("[green]✓[/green] Copilot environment configured")
|
|
659
|
+
|
|
660
|
+
console.print("[green]✓[/green] Templates configured")
|
|
661
|
+
|
|
662
|
+
# Copy documentation (unless --minimal)
|
|
663
|
+
if not minimal:
|
|
664
|
+
console.print("[cyan]Setting up documentation...[/cyan]")
|
|
665
|
+
|
|
666
|
+
# Copy docs/guides/
|
|
667
|
+
docs_guides_src = data_paths["docs_guides"]
|
|
668
|
+
if docs_guides_src.exists():
|
|
669
|
+
docs_guides_dst = project_path / "docs" / "guides"
|
|
670
|
+
docs_guides_dst.mkdir(parents=True, exist_ok=True)
|
|
671
|
+
shutil.copytree(docs_guides_src, docs_guides_dst, dirs_exist_ok=True)
|
|
672
|
+
guide_count = len(list(docs_guides_dst.glob("*.md")))
|
|
673
|
+
console.print(f"[green]✓[/green] Copied {guide_count} command guides")
|
|
674
|
+
|
|
675
|
+
# Copy docs/README.md
|
|
676
|
+
docs_readme_src = data_paths["docs_readme"]
|
|
677
|
+
if docs_readme_src.exists():
|
|
678
|
+
docs_readme_dst = project_path / "docs" / "README.md"
|
|
679
|
+
docs_readme_dst.parent.mkdir(parents=True, exist_ok=True)
|
|
680
|
+
shutil.copy2(docs_readme_src, docs_readme_dst)
|
|
681
|
+
console.print(f"[green]✓[/green] Copied docs/README.md")
|
|
682
|
+
|
|
683
|
+
# Copy DEPENDENCY-MATRIX.md
|
|
684
|
+
dep_matrix_src = data_paths["dependency_matrix"]
|
|
685
|
+
if dep_matrix_src.exists():
|
|
686
|
+
shutil.copy2(dep_matrix_src, project_path / "docs" / "DEPENDENCY-MATRIX.md")
|
|
687
|
+
console.print(f"[green]✓[/green] Copied docs/DEPENDENCY-MATRIX.md")
|
|
688
|
+
|
|
689
|
+
# Copy WORKFLOW-DIAGRAMS.md
|
|
690
|
+
workflow_src = data_paths["workflow_diagrams"]
|
|
691
|
+
if workflow_src.exists():
|
|
692
|
+
shutil.copy2(workflow_src, project_path / "docs" / "WORKFLOW-DIAGRAMS.md")
|
|
693
|
+
console.print(f"[green]✓[/green] Copied docs/WORKFLOW-DIAGRAMS.md")
|
|
694
|
+
|
|
695
|
+
console.print("[green]✓[/green] Documentation configured")
|
|
696
|
+
|
|
697
|
+
# Copy VERSION and CHANGELOG.md (always, not gated by --minimal)
|
|
698
|
+
version_src = data_paths["version"]
|
|
699
|
+
if version_src.exists():
|
|
700
|
+
shutil.copy2(version_src, project_path / "VERSION")
|
|
701
|
+
console.print(f"[green]✓[/green] Copied VERSION")
|
|
702
|
+
|
|
703
|
+
changelog_src = data_paths["changelog"]
|
|
704
|
+
if changelog_src.exists():
|
|
705
|
+
shutil.copy2(changelog_src, project_path / "CHANGELOG.md")
|
|
706
|
+
console.print(f"[green]✓[/green] Copied CHANGELOG.md")
|
|
707
|
+
|
|
708
|
+
# Determine command prefix based on AI assistant
|
|
709
|
+
if ai_assistant == "codex":
|
|
710
|
+
p = "$arckit-" # skill invocation
|
|
711
|
+
elif ai_assistant == "copilot":
|
|
712
|
+
p = "/arckit-" # copilot prompt invocation
|
|
713
|
+
else:
|
|
714
|
+
p = "/arckit." # slash command
|
|
715
|
+
|
|
716
|
+
readme_content = f"""# {project_name}
|
|
717
|
+
|
|
718
|
+
Enterprise Architecture Governance Project
|
|
719
|
+
|
|
720
|
+
## Getting Started
|
|
721
|
+
|
|
722
|
+
This project uses ArcKit — The Enterprise Architecture Governance Harness — for strategy, architecture, delivery, and assurance.
|
|
723
|
+
|
|
724
|
+
### Available Commands
|
|
725
|
+
|
|
726
|
+
Once you start your AI assistant, you'll have access to these commands:
|
|
727
|
+
|
|
728
|
+
#### Project Planning
|
|
729
|
+
- `{p}plan` - Create project plan with timeline, phases, and gates
|
|
730
|
+
|
|
731
|
+
#### Core Workflow
|
|
732
|
+
- `{p}principles` - Create or update architecture principles
|
|
733
|
+
- `{p}stakeholders` - Analyze stakeholder drivers, goals, and outcomes
|
|
734
|
+
- `{p}risk` - Create comprehensive risk register (Orange Book)
|
|
735
|
+
- `{p}sobc` - Create Strategic Outline Business Case (Green Book 5-case)
|
|
736
|
+
- `{p}requirements` - Define comprehensive requirements
|
|
737
|
+
- `{p}data-model` - Create data model with ERD, GDPR compliance, data governance
|
|
738
|
+
- `{p}research` - Research technology, services, and products with build vs buy analysis
|
|
739
|
+
- `{p}wardley` - Create strategic Wardley Maps for build vs buy and procurement strategy
|
|
740
|
+
|
|
741
|
+
#### Vendor Procurement
|
|
742
|
+
- `{p}sow` - Generate Statement of Work (RFP)
|
|
743
|
+
- `{p}dos` - Digital Outcomes and Specialists (DOS) procurement (UK Digital Marketplace)
|
|
744
|
+
- `{p}gcloud-search` - Search G-Cloud services on UK Digital Marketplace
|
|
745
|
+
- `{p}gcloud-clarify` - Validate G-Cloud services and generate clarification questions
|
|
746
|
+
- `{p}evaluate` - Create vendor evaluation framework and score vendors
|
|
747
|
+
|
|
748
|
+
#### Design Review
|
|
749
|
+
- `{p}hld-review` - Review High-Level Design
|
|
750
|
+
- `{p}dld-review` - Review Detailed Design
|
|
751
|
+
|
|
752
|
+
#### Architecture Diagrams
|
|
753
|
+
- `{p}diagram` - Generate visual architecture diagrams using Mermaid
|
|
754
|
+
|
|
755
|
+
#### Sprint Planning
|
|
756
|
+
- `{p}backlog` - Generate prioritised product backlog with GDS user stories
|
|
757
|
+
|
|
758
|
+
#### Service Management
|
|
759
|
+
- `{p}servicenow` - Generate ServiceNow service design (CMDB, SLAs, incident/change management)
|
|
760
|
+
|
|
761
|
+
#### Traceability & Quality
|
|
762
|
+
- `{p}traceability` - Generate requirements traceability matrix
|
|
763
|
+
- `{p}analyze` - Comprehensive governance quality analysis
|
|
764
|
+
|
|
765
|
+
#### Template Customization
|
|
766
|
+
- `{p}customize` - Copy templates for customization (preserves across updates)
|
|
767
|
+
|
|
768
|
+
#### UK Government Compliance
|
|
769
|
+
- `{p}service-assessment` - GDS Service Standard assessment preparation
|
|
770
|
+
- `{p}tcop` - Technology Code of Practice assessment (all 13 points)
|
|
771
|
+
- `{p}ai-playbook` - AI Playbook compliance for responsible AI
|
|
772
|
+
- `{p}atrs` - Algorithmic Transparency Recording Standard (ATRS) record
|
|
773
|
+
|
|
774
|
+
#### Security Assessment
|
|
775
|
+
- `{p}secure` - UK Government Secure by Design (NCSC CAF, Cyber Essentials, UK GDPR)
|
|
776
|
+
- `{p}mod-secure` - MOD Secure by Design (JSP 440, IAMM, security clearances)
|
|
777
|
+
- `{p}jsp-936` - MOD JSP 936 AI assurance documentation
|
|
778
|
+
|
|
779
|
+
## Project Structure
|
|
780
|
+
|
|
781
|
+
```
|
|
782
|
+
{project_name}/
|
|
783
|
+
├── .arckit/
|
|
784
|
+
│ ├── scripts/
|
|
785
|
+
│ │ └── bash/
|
|
786
|
+
│ ├── templates/ # Default templates (refreshed by arckit init)
|
|
787
|
+
│ └── templates-custom/ # Your customizations (preserved across updates)
|
|
788
|
+
├── .agents/skills/ # Codex skills (auto-discovered)
|
|
789
|
+
├── projects/
|
|
790
|
+
│ ├── 000-global/
|
|
791
|
+
│ │ └── ARC-000-PRIN-v1.0.md (global principles)
|
|
792
|
+
│ └── 001-project-name/
|
|
793
|
+
│ ├── requirements.md
|
|
794
|
+
│ ├── sow.md
|
|
795
|
+
│ └── vendors/
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
## Template Customization
|
|
799
|
+
|
|
800
|
+
ArcKit templates can be customized without modifying the defaults:
|
|
801
|
+
|
|
802
|
+
1. Run `{p}customize <template-name>` to copy a template for editing
|
|
803
|
+
2. Your customizations are stored in `.arckit/templates-custom/`
|
|
804
|
+
3. Commands automatically use your custom templates when present
|
|
805
|
+
4. Running `arckit init` again preserves your customizations
|
|
806
|
+
|
|
807
|
+
Example:
|
|
808
|
+
```
|
|
809
|
+
{p}customize requirements # Copy requirements template
|
|
810
|
+
{p}customize all # Copy all templates
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
## Next Steps
|
|
814
|
+
|
|
815
|
+
1. Start your AI assistant ({AGENT_CONFIG[ai_assistant]["name"]})
|
|
816
|
+
2. Run `{p}principles` to establish architecture governance
|
|
817
|
+
3. Create your first project with `{p}requirements`
|
|
818
|
+
|
|
819
|
+
## Documentation
|
|
820
|
+
|
|
821
|
+
- [ArcKit Documentation](https://github.com/github/arc-kit)
|
|
822
|
+
- [Architecture Principles Guide](https://github.com/github/arc-kit/docs/principles.md)
|
|
823
|
+
- [Vendor Procurement Guide](https://github.com/github/arc-kit/docs/procurement.md)
|
|
824
|
+
"""
|
|
825
|
+
|
|
826
|
+
(project_path / "README.md").write_text(readme_content, encoding='utf-8')
|
|
827
|
+
console.print("[green]✓[/green] README created")
|
|
828
|
+
|
|
829
|
+
# Initialize git if requested
|
|
830
|
+
if should_init_git and not is_git_repo(project_path):
|
|
831
|
+
init_git_repo(project_path)
|
|
832
|
+
|
|
833
|
+
# Set up .gitignore for Codex projects
|
|
834
|
+
if ai_assistant == "codex":
|
|
835
|
+
gitignore_path = project_path / ".gitignore"
|
|
836
|
+
codex_ignore_entries = [
|
|
837
|
+
"# Codex CLI",
|
|
838
|
+
".codex/*",
|
|
839
|
+
"!.codex/agents/",
|
|
840
|
+
"!.codex/agents/**",
|
|
841
|
+
"!.codex/hooks/",
|
|
842
|
+
"!.codex/hooks/**",
|
|
843
|
+
"!.codex/config.toml",
|
|
844
|
+
]
|
|
845
|
+
|
|
846
|
+
if gitignore_path.exists():
|
|
847
|
+
existing_content = gitignore_path.read_text(encoding='utf-8')
|
|
848
|
+
if ".codex" not in existing_content:
|
|
849
|
+
with open(gitignore_path, 'a', encoding='utf-8') as f:
|
|
850
|
+
f.write("\n" + "\n".join(codex_ignore_entries) + "\n")
|
|
851
|
+
else:
|
|
852
|
+
gitignore_path.write_text("\n".join(codex_ignore_entries) + "\n", encoding='utf-8')
|
|
853
|
+
|
|
854
|
+
console.print("[green]✓[/green] Codex environment configured")
|
|
855
|
+
|
|
856
|
+
# Create .envrc for OpenCode projects
|
|
857
|
+
if ai_assistant == "opencode":
|
|
858
|
+
console.print("[cyan]Setting up OpenCode environment...[/cyan]")
|
|
859
|
+
|
|
860
|
+
# Create .envrc
|
|
861
|
+
envrc_path = project_path / ".envrc"
|
|
862
|
+
envrc_content = f"""# Auto-generated by arckit CLI for OpenCode CLI support
|
|
863
|
+
# This file sets OPENCODE_HOME so OpenCode can discover project-specific commands
|
|
864
|
+
|
|
865
|
+
export OPENCODE_HOME="$PWD/.opencode"
|
|
866
|
+
"""
|
|
867
|
+
envrc_path.write_text(envrc_content, encoding="utf-8")
|
|
868
|
+
|
|
869
|
+
# Copy .opencode/README.md if it exists
|
|
870
|
+
opencode_src = data_paths.get("opencode_root")
|
|
871
|
+
if opencode_src and opencode_src.exists():
|
|
872
|
+
opencode_readme_src = opencode_src / "README.md"
|
|
873
|
+
opencode_gitignore_src = opencode_src / ".gitignore"
|
|
874
|
+
opencode_dst = project_path / ".opencode"
|
|
875
|
+
opencode_dst.mkdir(parents=True, exist_ok=True)
|
|
876
|
+
|
|
877
|
+
if opencode_readme_src.exists():
|
|
878
|
+
shutil.copy2(opencode_readme_src, opencode_dst / "README.md")
|
|
879
|
+
console.print(f"[green]✓[/green] Copied .opencode/README.md")
|
|
880
|
+
|
|
881
|
+
if opencode_gitignore_src.exists():
|
|
882
|
+
shutil.copy2(opencode_gitignore_src, opencode_dst / ".gitignore")
|
|
883
|
+
console.print(f"[green]✓[/green] Copied .opencode/.gitignore")
|
|
884
|
+
|
|
885
|
+
# Create opencode.json with MCP configuration (workspace config)
|
|
886
|
+
# Using dictionary format with type="remote" matching SDK McpRemoteConfig
|
|
887
|
+
opencode_json_path = opencode_dst / "opencode.json"
|
|
888
|
+
opencode_json_content = """{
|
|
889
|
+
"$schema": "https://opencode.ai/config.json",
|
|
890
|
+
"mcp": {
|
|
891
|
+
"aws-knowledge": {
|
|
892
|
+
"type": "remote",
|
|
893
|
+
"url": "https://knowledge-mcp.global.api.aws/sse",
|
|
894
|
+
"enabled": true
|
|
895
|
+
},
|
|
896
|
+
"microsoft-learn": {
|
|
897
|
+
"type": "remote",
|
|
898
|
+
"url": "https://learn.microsoft.com/api/mcp/sse",
|
|
899
|
+
"enabled": true
|
|
900
|
+
},
|
|
901
|
+
"google-developer-knowledge": {
|
|
902
|
+
"type": "remote",
|
|
903
|
+
"url": "https://developerknowledge.googleapis.com/mcp/sse",
|
|
904
|
+
"headers": {
|
|
905
|
+
"X-Goog-Api-Key": "${GOOGLE_API_KEY}"
|
|
906
|
+
},
|
|
907
|
+
"enabled": false
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
"""
|
|
912
|
+
opencode_json_path.write_text(opencode_json_content, encoding="utf-8")
|
|
913
|
+
console.print(
|
|
914
|
+
f"[green]✓[/green] Created .opencode/opencode.json with MCP servers"
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
# Copy skills if they exist
|
|
918
|
+
opencode_skills_src = opencode_src / "skills"
|
|
919
|
+
if opencode_skills_src.exists():
|
|
920
|
+
opencode_skills_dst = opencode_dst / "skills"
|
|
921
|
+
shutil.copytree(
|
|
922
|
+
opencode_skills_src, opencode_skills_dst, dirs_exist_ok=True
|
|
923
|
+
)
|
|
924
|
+
console.print(f"[green]✓[/green] Copied .opencode/skills")
|
|
925
|
+
|
|
926
|
+
# Create/update .gitignore
|
|
927
|
+
|
|
928
|
+
gitignore_path = project_path / ".gitignore"
|
|
929
|
+
opencode_ignore_entries = [
|
|
930
|
+
"# OpenCode CLI - exclude auth tokens but include commands",
|
|
931
|
+
".opencode/*",
|
|
932
|
+
"!.opencode/commands/",
|
|
933
|
+
"!.opencode/README.md",
|
|
934
|
+
"!.opencode/.gitignore",
|
|
935
|
+
"",
|
|
936
|
+
"# direnv",
|
|
937
|
+
".envrc.local",
|
|
938
|
+
]
|
|
939
|
+
|
|
940
|
+
if gitignore_path.exists():
|
|
941
|
+
existing_content = gitignore_path.read_text(encoding="utf-8")
|
|
942
|
+
if ".opencode" not in existing_content:
|
|
943
|
+
with open(gitignore_path, "a", encoding="utf-8") as f:
|
|
944
|
+
f.write("\n" + "\n".join(opencode_ignore_entries) + "\n")
|
|
945
|
+
else:
|
|
946
|
+
gitignore_path.write_text("\n".join(opencode_ignore_entries) + "\n", encoding="utf-8")
|
|
947
|
+
|
|
948
|
+
console.print(
|
|
949
|
+
"[green]✓[/green] OpenCode environment configured (.envrc created)"
|
|
950
|
+
)
|
|
951
|
+
|
|
952
|
+
# Success message
|
|
953
|
+
console.print(
|
|
954
|
+
"\n[bold green]✓ ArcKit project initialized successfully![/bold green]\n"
|
|
955
|
+
)
|
|
956
|
+
|
|
957
|
+
next_steps = [
|
|
958
|
+
f"1. Navigate to project: [cyan]cd {project_name if not here else '.'}[/cyan]",
|
|
959
|
+
]
|
|
960
|
+
|
|
961
|
+
if ai_assistant == "codex":
|
|
962
|
+
next_steps.append("2. Start Codex: [cyan]codex[/cyan]")
|
|
963
|
+
next_steps.append(
|
|
964
|
+
"3. Establish architecture principles: [cyan]$arckit-principles[/cyan]"
|
|
965
|
+
)
|
|
966
|
+
next_steps.append(
|
|
967
|
+
"4. Create your first project: [cyan]$arckit-requirements[/cyan]"
|
|
968
|
+
)
|
|
969
|
+
elif ai_assistant == "opencode":
|
|
970
|
+
next_steps.append("2. Set up OPENCODE_HOME environment variable:")
|
|
971
|
+
next_steps.append(
|
|
972
|
+
" [cyan]RECOMMENDED[/cyan]: Install direnv and run [cyan]direnv allow[/cyan]"
|
|
973
|
+
)
|
|
974
|
+
next_steps.append(
|
|
975
|
+
' Alternative: Run [cyan]export OPENCODE_HOME="$PWD/.opencode"[/cyan]'
|
|
976
|
+
)
|
|
977
|
+
next_steps.append(f"3. Start OpenCode: [cyan]opencode[/cyan]")
|
|
978
|
+
next_steps.append(
|
|
979
|
+
"4. Establish architecture principles: [cyan]/arckit:principles[/cyan]"
|
|
980
|
+
)
|
|
981
|
+
next_steps.append("5. Create your first project: [cyan]/arckit:requirements[/cyan]"
|
|
982
|
+
)
|
|
983
|
+
elif ai_assistant == "copilot":
|
|
984
|
+
next_steps.append("2. Open in VS Code: [cyan]code .[/cyan]")
|
|
985
|
+
next_steps.append("3. Open Copilot Chat and type: [cyan]/arckit-principles[/cyan]")
|
|
986
|
+
next_steps.append(
|
|
987
|
+
"4. Create your first project: [cyan]/arckit-requirements[/cyan]"
|
|
988
|
+
)
|
|
989
|
+
|
|
990
|
+
console.print(Panel("\n".join(next_steps), title="Next Steps", border_style="cyan"))
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
@app.command(name="migrate-classification")
|
|
994
|
+
def migrate_classification(
|
|
995
|
+
apply: bool = typer.Option(
|
|
996
|
+
False,
|
|
997
|
+
"--apply",
|
|
998
|
+
help="Apply the proposed mappings (default: report only).",
|
|
999
|
+
),
|
|
1000
|
+
root: str = typer.Option(
|
|
1001
|
+
"projects",
|
|
1002
|
+
"--root",
|
|
1003
|
+
help="Root directory to walk (default: projects).",
|
|
1004
|
+
),
|
|
1005
|
+
):
|
|
1006
|
+
"""Migrate Document Control Classification from UK ladder to UAE Smart Data ladder.
|
|
1007
|
+
|
|
1008
|
+
One-time helper for projects switching to the UAE Federal Overlay (v4.10).
|
|
1009
|
+
Walks projects/ for ARC-* artefacts and proposes mappings:
|
|
1010
|
+
|
|
1011
|
+
PUBLIC -> Open, OFFICIAL -> Shared, OFFICIAL-SENSITIVE -> Confidential,
|
|
1012
|
+
SECRET -> Secret, TOP SECRET -> Top Secret
|
|
1013
|
+
|
|
1014
|
+
Default is report-only; pass --apply to write the changes.
|
|
1015
|
+
"""
|
|
1016
|
+
# Locate the migration script (works for source/dev, pip install, uv tool install).
|
|
1017
|
+
here = Path(__file__).resolve()
|
|
1018
|
+
candidates = [
|
|
1019
|
+
here.parents[2] / "scripts" / "python" / "migrate_classification.py", # source/dev
|
|
1020
|
+
Path.cwd() / "scripts" / "python" / "migrate_classification.py", # cwd-relative
|
|
1021
|
+
]
|
|
1022
|
+
# Also try the get_data_paths() fallback (covers pip and uv tool installs).
|
|
1023
|
+
try:
|
|
1024
|
+
data_paths = get_data_paths() # type: ignore[name-defined]
|
|
1025
|
+
if data_paths and "scripts" in data_paths:
|
|
1026
|
+
candidates.append(Path(data_paths["scripts"]) / "python" / "migrate_classification.py")
|
|
1027
|
+
except Exception:
|
|
1028
|
+
pass
|
|
1029
|
+
|
|
1030
|
+
script = next((c for c in candidates if c.is_file()), None)
|
|
1031
|
+
if script is None:
|
|
1032
|
+
console.print(
|
|
1033
|
+
"[red]Error:[/red] migrate_classification.py not found. "
|
|
1034
|
+
"Searched: " + ", ".join(str(c) for c in candidates)
|
|
1035
|
+
)
|
|
1036
|
+
raise typer.Exit(code=2)
|
|
1037
|
+
|
|
1038
|
+
cmd = [sys.executable, str(script), "--root", root]
|
|
1039
|
+
if apply:
|
|
1040
|
+
cmd.append("--apply")
|
|
1041
|
+
|
|
1042
|
+
result = subprocess.run(cmd)
|
|
1043
|
+
raise typer.Exit(code=result.returncode)
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
@app.command()
|
|
1047
|
+
def check():
|
|
1048
|
+
"""Check that all required tools are installed."""
|
|
1049
|
+
show_banner()
|
|
1050
|
+
console.print("[bold]Checking for installed tools...[/bold]\n")
|
|
1051
|
+
|
|
1052
|
+
tools = {
|
|
1053
|
+
"git": "Version control",
|
|
1054
|
+
"code": "Visual Studio Code",
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
for tool, description in tools.items():
|
|
1058
|
+
if check_tool(tool):
|
|
1059
|
+
console.print(f"[green]✓[/green] {description} ({tool})")
|
|
1060
|
+
else:
|
|
1061
|
+
console.print(f"[red]✗[/red] {description} ({tool}) - not found")
|
|
1062
|
+
|
|
1063
|
+
console.print("\n[bold green]ArcKit CLI is ready to use![/bold green]")
|
|
1064
|
+
|
|
1065
|
+
|
|
1066
|
+
@app.callback()
|
|
1067
|
+
def callback(ctx: typer.Context):
|
|
1068
|
+
"""Show banner when no subcommand is provided."""
|
|
1069
|
+
if (
|
|
1070
|
+
ctx.invoked_subcommand is None
|
|
1071
|
+
and "--help" not in sys.argv
|
|
1072
|
+
and "-h" not in sys.argv
|
|
1073
|
+
):
|
|
1074
|
+
show_banner()
|
|
1075
|
+
console.print(
|
|
1076
|
+
Align.center("[dim]Run 'arckit --help' for usage information[/dim]")
|
|
1077
|
+
)
|
|
1078
|
+
console.print()
|
|
1079
|
+
|
|
1080
|
+
|
|
1081
|
+
|
|
1082
|
+
@app.callback()
|
|
1083
|
+
def callback(ctx: typer.Context):
|
|
1084
|
+
"""Show banner when no subcommand is provided."""
|
|
1085
|
+
if (
|
|
1086
|
+
ctx.invoked_subcommand is None
|
|
1087
|
+
and "--help" not in sys.argv
|
|
1088
|
+
and "-h" not in sys.argv
|
|
1089
|
+
):
|
|
1090
|
+
show_banner()
|
|
1091
|
+
console.print(
|
|
1092
|
+
Align.center("[dim]Run 'arckit --help' for usage information[/dim]")
|
|
1093
|
+
)
|
|
1094
|
+
console.print()
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
@app.command()
|
|
1098
|
+
def version():
|
|
1099
|
+
"""Show ArcKit version."""
|
|
1100
|
+
# Try to read version from VERSION file or package metadata
|
|
1101
|
+
version = "unknown"
|
|
1102
|
+
# Try package metadata first
|
|
1103
|
+
try:
|
|
1104
|
+
from importlib.metadata import version as get_version
|
|
1105
|
+
version = get_version("arckit-cli")
|
|
1106
|
+
except Exception:
|
|
1107
|
+
# Fallback to VERSION file
|
|
1108
|
+
version_path = Path(__file__).parent.parent.parent / "VERSION"
|
|
1109
|
+
if version_path.exists():
|
|
1110
|
+
version = version_path.read_text().strip()
|
|
1111
|
+
console.print(f"arckit {version}")
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
def main():
|
|
1115
|
+
"""Main entry point for the ArcKit CLI."""
|
|
1116
|
+
app()
|
|
1117
|
+
|
|
1118
|
+
|
|
1119
|
+
if __name__ == "__main__":
|
|
1120
|
+
main()
|