@atmem/architect 0.0.0-stage → 0.2.0-alpha.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/CONSTITUTION.md +144 -0
  2. package/README.md +33 -2
  3. package/agent-skills/discovery/SKILL.md +48 -0
  4. package/agent-skills/discovery/topics.json +139 -0
  5. package/agent-skills/generation-capabilities.json +760 -0
  6. package/agent-skills/service-lifecycle.json +21 -0
  7. package/agent-skills/specialists/architecture/SKILL.md +15 -0
  8. package/agent-skills/specialists/aws/SKILL.md +17 -0
  9. package/agent-skills/specialists/azure/SKILL.md +7 -0
  10. package/agent-skills/specialists/composition/SKILL.md +17 -0
  11. package/agent-skills/specialists/devops/SKILL.md +10 -0
  12. package/agent-skills/specialists/finops/SKILL.md +7 -0
  13. package/agent-skills/specialists/gcp/SKILL.md +7 -0
  14. package/agent-skills/specialists/ibm/SKILL.md +7 -0
  15. package/agent-skills/specialists/manifest.json +13 -0
  16. package/agent-skills/specialists/pulumi/SKILL.md +7 -0
  17. package/agent-skills/specialists/security/SKILL.md +7 -0
  18. package/agent-skills/specialists/terraform/SKILL.md +14 -0
  19. package/agent-skills/upstream/aws/LICENSE +175 -0
  20. package/agent-skills/upstream/aws/SKILL.md +125 -0
  21. package/agent-skills/upstream/azure/LICENSE +21 -0
  22. package/agent-skills/upstream/azure/SKILL.md +387 -0
  23. package/agent-skills/upstream/gcp/LICENSE +202 -0
  24. package/agent-skills/upstream/gcp/SKILL.md +159 -0
  25. package/agent-skills/upstream/manifest.json +57 -0
  26. package/agent-skills/upstream/pulumi/LICENSE +201 -0
  27. package/agent-skills/upstream/pulumi/SKILL.md +501 -0
  28. package/agent-skills/upstream/terraform/LICENSE +373 -0
  29. package/agent-skills/upstream/terraform/SKILL.md +316 -0
  30. package/agent-skills/workflows/workflows.json +601 -0
  31. package/cli/architect.mjs +3 -0
  32. package/cli/runtime.mjs +115 -0
  33. package/dist/assets/html2canvas.esm-QH1iLAAe.js +22 -0
  34. package/dist/assets/index-B97MkVMs.css +1 -0
  35. package/dist/assets/index-qtCM2D7O.js +21271 -0
  36. package/dist/assets/index.es-C6C0sneB.js +18 -0
  37. package/dist/assets/purify.es-CAi2OJFm.js +3 -0
  38. package/dist/assets/visual-export-DjbjgQbA.js +173 -0
  39. package/dist/favicon.svg +2 -0
  40. package/dist/fonts/DM-Sans-OFL.txt +93 -0
  41. package/dist/fonts/Manrope-OFL.txt +93 -0
  42. package/dist/fonts/NotoSans-Regular.ttf +0 -0
  43. package/dist/fonts/OFL.txt +94 -0
  44. package/dist/fonts/dm-sans-latin-wght-normal.woff2 +0 -0
  45. package/dist/fonts/manrope-latin-wght-normal.woff2 +0 -0
  46. package/dist/index.html +4 -0
  47. package/dist/licenses/aws-architect-LICENSE.txt +17 -0
  48. package/dist/licenses/aws-mcp-LICENSE.txt +175 -0
  49. package/dist/licenses/aws-mcp-NOTICE.txt +1 -0
  50. package/dist/licenses/cloud-emulation-notices.txt +36619 -0
  51. package/dist/licenses/dependency-notices.txt +6379 -0
  52. package/dist/licenses/emulation-notices.txt +717 -0
  53. package/dist/licenses/github-copilot-sdk-LICENSE.txt +21 -0
  54. package/dist/licenses/memory-dependency-notices.txt +3319 -0
  55. package/dist/licenses/openarchflow-LICENSE.txt +21 -0
  56. package/dist/licenses/python-dependency-notices.txt +11951 -0
  57. package/docs/upstream-lock.json +26 -0
  58. package/knowledge/engineering-practices.json +536 -0
  59. package/package.json +30 -4
  60. package/packaging/uv-release-lock.json +54 -0
  61. package/public/licenses/aws-architect-LICENSE.txt +17 -0
  62. package/public/licenses/aws-mcp-LICENSE.txt +175 -0
  63. package/public/licenses/aws-mcp-NOTICE.txt +1 -0
  64. package/public/licenses/cloud-emulation-notices.txt +36619 -0
  65. package/public/licenses/dependency-notices.txt +6379 -0
  66. package/public/licenses/emulation-notices.txt +717 -0
  67. package/public/licenses/github-copilot-sdk-LICENSE.txt +21 -0
  68. package/public/licenses/memory-dependency-notices.txt +3319 -0
  69. package/public/licenses/openarchflow-LICENSE.txt +21 -0
  70. package/public/licenses/python-dependency-notices.txt +11951 -0
  71. package/scripts/terraform-render.mjs +8 -0
  72. package/server/__init__.py +0 -0
  73. package/server/abstraction.py +28 -0
  74. package/server/agent_runtime.py +153 -0
  75. package/server/app.py +257 -0
  76. package/server/architect.py +112 -0
  77. package/server/architecture_activity.py +67 -0
  78. package/server/attachments.py +101 -0
  79. package/server/cloud-emulation-requirements.txt +29 -0
  80. package/server/codex_app_server.py +219 -0
  81. package/server/codex_engineering_backend.py +266 -0
  82. package/server/codex_worker_policy.py +170 -0
  83. package/server/contracts.py +315 -0
  84. package/server/copilot_worker.py +16 -0
  85. package/server/dependency_mirror.py +54 -0
  86. package/server/design_patch.py +43 -0
  87. package/server/emulation-requirements.txt +8 -0
  88. package/server/emulation_adapters.py +20 -0
  89. package/server/emulation_routes.py +98 -0
  90. package/server/emulation_worker.py +351 -0
  91. package/server/engineering_artifacts.py +215 -0
  92. package/server/engineering_assets/application-runtime.json +4372 -0
  93. package/server/engineering_assets/architecture_work.schema.json +79 -0
  94. package/server/engineering_assets/materialize_runtime.py +62 -0
  95. package/server/engineering_assets/prepare_tools.py +96 -0
  96. package/server/engineering_assets/sql_validation.py +59 -0
  97. package/server/engineering_contexts.py +120 -0
  98. package/server/engineering_delivery.py +210 -0
  99. package/server/engineering_finalization.py +210 -0
  100. package/server/engineering_handoff.py +163 -0
  101. package/server/engineering_jobs.py +206 -0
  102. package/server/engineering_knowledge.py +75 -0
  103. package/server/engineering_reconciliation.py +159 -0
  104. package/server/engineering_routes.py +469 -0
  105. package/server/engineering_sessions.py +273 -0
  106. package/server/engineering_tools.py +166 -0
  107. package/server/generation_lint.py +18 -0
  108. package/server/local_providers.py +181 -0
  109. package/server/local_validation.py +236 -0
  110. package/server/memory-requirements.lock +181 -0
  111. package/server/memory-requirements.txt +6 -0
  112. package/server/memory_routes.py +82 -0
  113. package/server/memory_service.py +273 -0
  114. package/server/memory_worker.py +66 -0
  115. package/server/openai_voice.py +80 -0
  116. package/server/packaged_app.py +9 -0
  117. package/server/pricing.py +84 -0
  118. package/server/process_control_observation.py +31 -0
  119. package/server/prompts.py +123 -0
  120. package/server/public_faq_emulation_worker.py +44 -0
  121. package/server/requirements.lock +1618 -0
  122. package/server/requirements.txt +68 -0
  123. package/server/runtime_dependency_locks.py +27 -0
  124. package/server/runtime_evidence.py +93 -0
  125. package/server/settings.py +14 -0
  126. package/server/skills.py +103 -0
  127. package/server/storage_emulation_worker.py +160 -0
  128. package/server/structured_emulation_worker.py +48 -0
  129. package/server/terraform_routes.py +118 -0
  130. package/server/upstream/__init__.py +0 -0
  131. package/server/upstream/agent/__init__.py +1 -0
  132. package/server/upstream/agent/aws_architect.py +600 -0
  133. package/server/upstream/agent/config/__init__.py +1 -0
  134. package/server/upstream/agent/config/agent_config.py +82 -0
  135. package/server/upstream/agent/config/prompts.py +138 -0
  136. package/server/upstream/agent/rate_limiter.py +62 -0
  137. package/server/upstream/utils/__init__.py +1 -0
  138. package/server/upstream/utils/file_writer.py +43 -0
  139. package/server/validation_applicability.py +85 -0
  140. package/server/validation_jobs.py +252 -0
  141. package/server/validation_workers.py +48 -0
  142. package/server/voice_routes.py +91 -0
  143. package/server/voice_worker.py +26 -0
  144. package/specs/028-convergence-evaluation/evidence/20261110-ibm-invoice-native/registry-structured/qualification.json +72 -0
  145. package/specs/028-convergence-evaluation/evidence/20261110-invoice-runtime/durable-current/receipt.json +61 -0
  146. package/specs/029-general-purpose-engine/evidence/20261111-runtime-dependencies/sdk/receipt.json +22 -0
  147. package/src/ArchitectureActivity.jsx +54 -0
  148. package/src/ArchitectureWorkPanel.jsx +46 -0
  149. package/src/ArtifactChecks.jsx +49 -0
  150. package/src/BlockRequirements.jsx +13 -0
  151. package/src/BrainActivity.jsx +11 -0
  152. package/src/ChatMessage.jsx +19 -0
  153. package/src/ChatResizeHandle.jsx +6 -0
  154. package/src/CodePreview.jsx +8 -0
  155. package/src/ComponentReview.jsx +31 -0
  156. package/src/DeliveryViews.jsx +59 -0
  157. package/src/EmulationPanel.jsx +44 -0
  158. package/src/EngagementViews.jsx +385 -0
  159. package/src/EngineeringPanel.jsx +151 -0
  160. package/src/ImplementationDelivery.jsx +55 -0
  161. package/src/JourneyViews.jsx +400 -0
  162. package/src/MemoryPanel.jsx +46 -0
  163. package/src/OpenAIVoicePanel.jsx +65 -0
  164. package/src/OutputsView.jsx +65 -0
  165. package/src/TerraformView.jsx +57 -0
  166. package/src/WorkbenchDialogs.jsx +532 -0
  167. package/src/activity-presentation.mjs +28 -0
  168. package/src/ai-qualification-scenarios.mjs +31 -0
  169. package/src/approval-application-files.mjs +32 -0
  170. package/src/approval-applications.mjs +82 -0
  171. package/src/approval-spec-kit.mjs +30 -0
  172. package/src/architecture-activity.css +28 -0
  173. package/src/architecture-activity.mjs +63 -0
  174. package/src/architecture-work.mjs +176 -0
  175. package/src/artifact-work.mjs +103 -0
  176. package/src/async-documents.mjs +191 -0
  177. package/src/atflow.css +1140 -0
  178. package/src/atforma.css +748 -0
  179. package/src/atmem-tokens.css +79 -0
  180. package/src/aws-preflight.mjs +60 -0
  181. package/src/aws-public-faq.mjs +102 -0
  182. package/src/aws-validation-scenarios.mjs +10 -0
  183. package/src/aws-validation.mjs +48 -0
  184. package/src/azure-plan-mocks.mjs +25 -0
  185. package/src/azure-structured.mjs +133 -0
  186. package/src/bedrock-summary.mjs +152 -0
  187. package/src/bounded-rag.mjs +60 -0
  188. package/src/brand.css +9 -0
  189. package/src/canvas-view.mjs +28 -0
  190. package/src/capability-composition.mjs +44 -0
  191. package/src/chat-attachments.mjs +13 -0
  192. package/src/cloud-provider-locks.mjs +9 -0
  193. package/src/cloud-storage-scenarios.mjs +2 -0
  194. package/src/component-review.mjs +55 -0
  195. package/src/composition-spec-kit.mjs +30 -0
  196. package/src/consultation-context.mjs +15 -0
  197. package/src/consultation.mjs +52 -0
  198. package/src/container-contracts.mjs +5 -0
  199. package/src/container-inspection.mjs +75 -0
  200. package/src/container-runtime.mjs +30 -0
  201. package/src/container-security-inspection.mjs +49 -0
  202. package/src/container-terraform.mjs +109 -0
  203. package/src/conversation.mjs +17 -0
  204. package/src/core.mjs +863 -0
  205. package/src/cross-cloud-storage.mjs +100 -0
  206. package/src/delivery-capabilities.mjs +25 -0
  207. package/src/delivery.mjs +58 -0
  208. package/src/deployment-ownership.mjs +10 -0
  209. package/src/deployment-region.mjs +11 -0
  210. package/src/derive.mjs +31 -0
  211. package/src/design-build-flow.mjs +10 -0
  212. package/src/diagram-attention.mjs +24 -0
  213. package/src/discovery.mjs +359 -0
  214. package/src/document.mjs +170 -0
  215. package/src/emulation-feedback.mjs +61 -0
  216. package/src/emulation-guidance.mjs +37 -0
  217. package/src/engagement.mjs +274 -0
  218. package/src/engineering-client.mjs +73 -0
  219. package/src/engineering-defaults.mjs +17 -0
  220. package/src/engineering.css +31 -0
  221. package/src/enterprise-application.mjs +76 -0
  222. package/src/enterprise-aws-host-infrastructure.mjs +62 -0
  223. package/src/enterprise-aws-host-tests.mjs +15 -0
  224. package/src/enterprise-aws-infrastructure-tests.mjs +38 -0
  225. package/src/enterprise-aws-infrastructure.mjs +138 -0
  226. package/src/enterprise-google-infrastructure.mjs +84 -0
  227. package/src/enterprise-google-tests.mjs +25 -0
  228. package/src/estimate.mjs +188 -0
  229. package/src/existing-references.mjs +18 -0
  230. package/src/external-identities.mjs +17 -0
  231. package/src/faq-lambda-build.mjs +28 -0
  232. package/src/gcp-structured.mjs +104 -0
  233. package/src/generation-provider.mjs +7 -0
  234. package/src/generation-quality.mjs +69 -0
  235. package/src/handoff.mjs +141 -0
  236. package/src/ibm-registry.mjs +12 -0
  237. package/src/ibm-structured.mjs +103 -0
  238. package/src/identifiers.mjs +15 -0
  239. package/src/implementation-map.mjs +14 -0
  240. package/src/implementation-outcome.mjs +8 -0
  241. package/src/incomplete-terraform.mjs +9 -0
  242. package/src/integrations.ts +137 -0
  243. package/src/interface-contracts.mjs +30 -0
  244. package/src/invoice-application.mjs +66 -0
  245. package/src/invoice-aws-operations.mjs +136 -0
  246. package/src/invoice-aws.mjs +143 -0
  247. package/src/invoice-azure-operations.mjs +147 -0
  248. package/src/invoice-azure.mjs +134 -0
  249. package/src/invoice-builder.mjs +35 -0
  250. package/src/invoice-dependencies.mjs +43 -0
  251. package/src/invoice-gcp-operations.mjs +178 -0
  252. package/src/invoice-gcp.mjs +104 -0
  253. package/src/invoice-ibm-operations.mjs +278 -0
  254. package/src/invoice-ibm.mjs +142 -0
  255. package/src/invoice-operations.mjs +143 -0
  256. package/src/invoice-plan.mjs +45 -0
  257. package/src/invoice-region.mjs +6 -0
  258. package/src/invoice-spec-kit.mjs +61 -0
  259. package/src/invoice-state.mjs +7 -0
  260. package/src/invoice-terraform.mjs +29 -0
  261. package/src/invoice-tests.mjs +122 -0
  262. package/src/journey-workspace.css +72 -0
  263. package/src/journey.mjs +87 -0
  264. package/src/levels.mjs +145 -0
  265. package/src/local-agent.mjs +184 -0
  266. package/src/main.jsx +2458 -0
  267. package/src/model-policy-preflight.mjs +34 -0
  268. package/src/openai-voice.mjs +102 -0
  269. package/src/output-bundle.mjs +11 -0
  270. package/src/ownership-inspection.mjs +28 -0
  271. package/src/pack.mjs +201 -0
  272. package/src/pricing.mjs +31 -0
  273. package/src/production-state.mjs +8 -0
  274. package/src/project-copy.mjs +10 -0
  275. package/src/project-file.mjs +160 -0
  276. package/src/project-links.mjs +3 -0
  277. package/src/protected-state.mjs +43 -0
  278. package/src/public-faq-builder.mjs +19 -0
  279. package/src/public-faq-clouds.mjs +251 -0
  280. package/src/public-faq.mjs +122 -0
  281. package/src/pulumi.mjs +123 -0
  282. package/src/python-container.mjs +25 -0
  283. package/src/python-runtime.mjs +50 -0
  284. package/src/rag-handler.mjs +43 -0
  285. package/src/rag-web-assets.mjs +52 -0
  286. package/src/rag-web.mjs +68 -0
  287. package/src/records.mjs +177 -0
  288. package/src/resources.mjs +163 -0
  289. package/src/review.mjs +252 -0
  290. package/src/runtime/EnterpriseDocument.java +89 -0
  291. package/src/runtime/approved_http_destination.py +72 -0
  292. package/src/runtime/aws-lambda-qualification-lock.json +7 -0
  293. package/src/runtime/aws-python-lock.json +82 -0
  294. package/src/runtime/aws-web-python-lock.json +887 -0
  295. package/src/runtime/aws_json_model.py +42 -0
  296. package/src/runtime/azure-python-lock.json +863 -0
  297. package/src/runtime/azure-sources.json +8 -0
  298. package/src/runtime/azure-test-lock.json +23 -0
  299. package/src/runtime/azure_acceptance.py +192 -0
  300. package/src/runtime/azure_structured.py +153 -0
  301. package/src/runtime/bounded_rag.py +126 -0
  302. package/src/runtime/catalog_admin.py +70 -0
  303. package/src/runtime/cloud-sql-proxy-lock.json +8 -0
  304. package/src/runtime/cloud-sql-proxy-security-review.json +30 -0
  305. package/src/runtime/connector_cli.py +50 -0
  306. package/src/runtime/connector_sync.py +70 -0
  307. package/src/runtime/durable-python-lock.json +247 -0
  308. package/src/runtime/durable_workflow.py +325 -0
  309. package/src/runtime/enterprise-application-manifest.json +110 -0
  310. package/src/runtime/enterprise-application-sources.json +266 -0
  311. package/src/runtime/enterprise-auth-python-lock.json +592 -0
  312. package/src/runtime/enterprise-aws-host-bootstrap-source.json +1 -0
  313. package/src/runtime/enterprise-aws-host-probe-source.json +1 -0
  314. package/src/runtime/enterprise-aws-task-template.json +235 -0
  315. package/src/runtime/enterprise-document-lock.json +18 -0
  316. package/src/runtime/enterprise-document.Dockerfile +15 -0
  317. package/src/runtime/enterprise-runtime-aws-python-lock.json +1115 -0
  318. package/src/runtime/enterprise-runtime-azure-python-lock.json +1106 -0
  319. package/src/runtime/enterprise-runtime-gcp-python-lock.json +1060 -0
  320. package/src/runtime/enterprise-runtime-ibm-python-lock.json +1096 -0
  321. package/src/runtime/enterprise-runtime-python-lock.json +1058 -0
  322. package/src/runtime/enterprise-runtime.Dockerfile +15 -0
  323. package/src/runtime/enterprise-web-app.js +1 -0
  324. package/src/runtime/enterprise-web-entry.js +105 -0
  325. package/src/runtime/enterprise-web-lock.json +29 -0
  326. package/src/runtime/enterprise-web-notices.txt +229 -0
  327. package/src/runtime/enterprise-web.css +4 -0
  328. package/src/runtime/enterprise-web.html +8 -0
  329. package/src/runtime/enterprise_audit.py +91 -0
  330. package/src/runtime/enterprise_audit_schema.sql +25 -0
  331. package/src/runtime/enterprise_auth_schema.sql +67 -0
  332. package/src/runtime/enterprise_auth_store.py +241 -0
  333. package/src/runtime/enterprise_aws_host_bootstrap.py +120 -0
  334. package/src/runtime/enterprise_aws_host_probe.py +105 -0
  335. package/src/runtime/enterprise_aws_hosts.py +136 -0
  336. package/src/runtime/enterprise_aws_jobs.py +300 -0
  337. package/src/runtime/enterprise_aws_objects.py +93 -0
  338. package/src/runtime/enterprise_aws_transfer.py +83 -0
  339. package/src/runtime/enterprise_azure_batch_api.py +128 -0
  340. package/src/runtime/enterprise_azure_host.py +599 -0
  341. package/src/runtime/enterprise_azure_jobs.py +294 -0
  342. package/src/runtime/enterprise_azure_objects.py +234 -0
  343. package/src/runtime/enterprise_azure_pool.py +161 -0
  344. package/src/runtime/enterprise_azure_transfer.py +122 -0
  345. package/src/runtime/enterprise_configuration.py +136 -0
  346. package/src/runtime/enterprise_document.py +116 -0
  347. package/src/runtime/enterprise_document_cli.py +32 -0
  348. package/src/runtime/enterprise_document_contract.py +54 -0
  349. package/src/runtime/enterprise_document_job.py +109 -0
  350. package/src/runtime/enterprise_document_jobs.py +122 -0
  351. package/src/runtime/enterprise_document_jobs_schema.sql +23 -0
  352. package/src/runtime/enterprise_extraction_cache.py +186 -0
  353. package/src/runtime/enterprise_extraction_schema.sql +17 -0
  354. package/src/runtime/enterprise_google_jobs.py +275 -0
  355. package/src/runtime/enterprise_google_transfer.py +85 -0
  356. package/src/runtime/enterprise_http.py +212 -0
  357. package/src/runtime/enterprise_identity.py +52 -0
  358. package/src/runtime/enterprise_knowledge.py +152 -0
  359. package/src/runtime/enterprise_models.py +94 -0
  360. package/src/runtime/enterprise_native.py +181 -0
  361. package/src/runtime/enterprise_oauth.py +132 -0
  362. package/src/runtime/enterprise_operator.py +160 -0
  363. package/src/runtime/enterprise_parser_service.py +136 -0
  364. package/src/runtime/enterprise_parser_transport.py +68 -0
  365. package/src/runtime/enterprise_queries.py +255 -0
  366. package/src/runtime/enterprise_queries_schema.sql +27 -0
  367. package/src/runtime/enterprise_query_service.py +111 -0
  368. package/src/runtime/enterprise_secrets.py +110 -0
  369. package/src/runtime/enterprise_sessions.py +95 -0
  370. package/src/runtime/enterprise_sources.py +260 -0
  371. package/src/runtime/enterprise_web.py +39 -0
  372. package/src/runtime/enterprise_worker.py +68 -0
  373. package/src/runtime/export_contract_acceptance.py +18 -0
  374. package/src/runtime/faq-output-contract.json +40 -0
  375. package/src/runtime/faq-web-app.js +41 -0
  376. package/src/runtime/faq-web.css +1 -0
  377. package/src/runtime/faq-web.html +6 -0
  378. package/src/runtime/gcp-sources.json +9 -0
  379. package/src/runtime/gcp_acceptance.py +110 -0
  380. package/src/runtime/gcp_structured.py +150 -0
  381. package/src/runtime/http_acceptance.py +39 -0
  382. package/src/runtime/iap-web-app.js +36 -0
  383. package/src/runtime/iap-web-source.json +1 -0
  384. package/src/runtime/ibm-python-lock.json +856 -0
  385. package/src/runtime/ibm-sources.json +9 -0
  386. package/src/runtime/ibm_acceptance.py +133 -0
  387. package/src/runtime/ibm_structured.py +113 -0
  388. package/src/runtime/invoice-azapi-provider-lock.json +7 -0
  389. package/src/runtime/invoice-ibm-provider-lock.json +7 -0
  390. package/src/runtime/invoice-parser-lock.json +1199 -0
  391. package/src/runtime/invoice-parser-python-lock.json +56 -0
  392. package/src/runtime/invoice-parser.Dockerfile +190 -0
  393. package/src/runtime/invoice-sources.json +58 -0
  394. package/src/runtime/invoice-test-sources.json +24 -0
  395. package/src/runtime/invoice-web.css +2 -0
  396. package/src/runtime/invoice-web.html +12 -0
  397. package/src/runtime/invoice-web.js +112 -0
  398. package/src/runtime/invoice_configuration.py +17 -0
  399. package/src/runtime/invoice_document.py +95 -0
  400. package/src/runtime/invoice_extraction.py +96 -0
  401. package/src/runtime/invoice_http.py +129 -0
  402. package/src/runtime/invoice_identity.py +5 -0
  403. package/src/runtime/invoice_maintenance.py +40 -0
  404. package/src/runtime/invoice_native.py +77 -0
  405. package/src/runtime/invoice_object_store.py +153 -0
  406. package/src/runtime/invoice_operations.py +108 -0
  407. package/src/runtime/invoice_operator.py +79 -0
  408. package/src/runtime/invoice_operator_core.py +39 -0
  409. package/src/runtime/invoice_operator_job.py +147 -0
  410. package/src/runtime/invoice_parser_cli.py +17 -0
  411. package/src/runtime/invoice_parser_identity.py +39 -0
  412. package/src/runtime/invoice_parser_service.py +89 -0
  413. package/src/runtime/invoice_parser_transport.py +89 -0
  414. package/src/runtime/invoice_processing.py +24 -0
  415. package/src/runtime/invoice_retention.py +16 -0
  416. package/src/runtime/invoice_runtime_secrets.py +43 -0
  417. package/src/runtime/invoice_stage.py +80 -0
  418. package/src/runtime/invoice_web.py +39 -0
  419. package/src/runtime/invoice_worker.py +50 -0
  420. package/src/runtime/lambda_faq.py +5 -0
  421. package/src/runtime/parser-requirements.lock +4 -0
  422. package/src/runtime/policy_review.py +18 -0
  423. package/src/runtime/postgres-qualification-lock.json +21 -0
  424. package/src/runtime/public-faq-sources.json +22 -0
  425. package/src/runtime/public_catalog_admin.py +122 -0
  426. package/src/runtime/public_catalog_store.py +125 -0
  427. package/src/runtime/public_faq.py +144 -0
  428. package/src/runtime/public_faq_app.py +49 -0
  429. package/src/runtime/python-container-lock.json +18 -0
  430. package/src/runtime/rag-sources.json +10 -0
  431. package/src/runtime/rag_acceptance.py +60 -0
  432. package/src/runtime/rag_aws_adapter.py +95 -0
  433. package/src/runtime/rds-ca-source.json +9 -0
  434. package/src/runtime/rds-global-ca.pem +2888 -0
  435. package/src/runtime/state-contract-check-source.json +4 -0
  436. package/src/runtime/state_contract_check.py +338 -0
  437. package/src/runtime/structured-source.json +1 -0
  438. package/src/runtime/structured-web-app.js +71 -0
  439. package/src/runtime/structured-web-source.json +1 -0
  440. package/src/runtime/structured_http.py +105 -0
  441. package/src/runtime/structured_output.py +48 -0
  442. package/src/runtime/web-python-lock.json +802 -0
  443. package/src/runtime/web_user_admin.py +44 -0
  444. package/src/runtime/workflow_application.py +62 -0
  445. package/src/runtime/workflow_bindings.py +128 -0
  446. package/src/runtime/workflow_configuration.py +40 -0
  447. package/src/runtime/workflow_connection.py +105 -0
  448. package/src/runtime/workflow_contract.py +54 -0
  449. package/src/runtime/workflow_database.py +94 -0
  450. package/src/runtime/workflow_errors.py +6 -0
  451. package/src/runtime/workflow_http.py +178 -0
  452. package/src/runtime/workflow_identity.py +69 -0
  453. package/src/runtime/workflow_payload.py +118 -0
  454. package/src/runtime/workflow_process_stage.py +88 -0
  455. package/src/runtime/workflow_profile.py +91 -0
  456. package/src/runtime/workflow_review.py +106 -0
  457. package/src/runtime/workflow_role_bootstrap.py +104 -0
  458. package/src/runtime/workflow_schema.sql +72 -0
  459. package/src/runtime/workflow_worker.py +142 -0
  460. package/src/runtime-settings.mjs +15 -0
  461. package/src/s3-access.mjs +14 -0
  462. package/src/source-contracts.mjs +17 -0
  463. package/src/spec-kit.mjs +186 -0
  464. package/src/state-custody.mjs +32 -0
  465. package/src/state-inspection.mjs +45 -0
  466. package/src/state-spec-kit.mjs +13 -0
  467. package/src/storage-tests.mjs +25 -0
  468. package/src/structured-api.mjs +133 -0
  469. package/src/structured-contract.mjs +19 -0
  470. package/src/structured-operation-policy.mjs +2 -0
  471. package/src/structured-web.mjs +17 -0
  472. package/src/style.css +1 -0
  473. package/src/system-description.mjs +26 -0
  474. package/src/terraform-admission.mjs +66 -0
  475. package/src/terraform-composition.mjs +83 -0
  476. package/src/terraform-expressions.mjs +46 -0
  477. package/src/terraform-validation-coverage.mjs +11 -0
  478. package/src/terraform.mjs +128 -0
  479. package/src/text-statistics.mjs +51 -0
  480. package/src/upstream/openarchflow/format-payload.ts +26 -0
  481. package/src/upstream/openarchflow/import/mermaid.ts +205 -0
  482. package/src/upstream/openarchflow/import/sql-ddl.ts +109 -0
  483. package/src/upstream/openarchflow/layout.ts +54 -0
  484. package/src/upstream/openarchflow/providers/aws.ts +196 -0
  485. package/src/upstream/openarchflow/providers/azure.ts +126 -0
  486. package/src/upstream/openarchflow/providers/cloudnative.ts +71 -0
  487. package/src/upstream/openarchflow/providers/generic.ts +227 -0
  488. package/src/upstream/openarchflow/providers/integration.ts +22 -0
  489. package/src/upstream/openarchflow/providers/types.ts +2 -0
  490. package/src/upstream/openarchflow/templates.ts +937 -0
  491. package/src/upstream-catalog.mjs +10 -0
  492. package/src/useChatScroll.jsx +36 -0
  493. package/src/useEmulation.jsx +36 -0
  494. package/src/validation-receipt.mjs +10 -0
  495. package/src/visual-export.mjs +92 -0
  496. package/src/voice-conversation.mjs +117 -0
  497. package/src/work-intake.mjs +24 -0
  498. package/src/workflow-runtime-inventory.mjs +3 -0
@@ -0,0 +1,68 @@
1
+ annotated-doc==0.0.5
2
+ annotated-types==0.8.0
3
+ anthropic==0.125.0
4
+ anyio==4.15.1
5
+ attrs==26.1.0
6
+ aws-bedrock-token-generator==1.1.0
7
+ boto3==1.43.123
8
+ botocore==1.43.123
9
+ certifi==2026.10.23
10
+ cffi==2.1.1
11
+ charset-normalizer==3.5.2
12
+ click==8.5.0
13
+ cryptography==50.0.2
14
+ distro==1.9.0
15
+ docstring_parser==0.18.0
16
+ fastapi==0.162.0
17
+ github-copilot-sdk==1.0.28
18
+ google-auth==2.62.0
19
+ google-genai==2.34.0
20
+ h11==0.16.0
21
+ httpcore==1.0.9
22
+ httpcore2==2.16.0
23
+ httpx==0.28.1
24
+ httpx2==2.16.0
25
+ idna==3.20
26
+ jiter==0.18.0
27
+ jmespath==1.1.0
28
+ jsonschema==4.26.0
29
+ jsonschema-specifications==2025.9.1
30
+ mcp==2.3.0
31
+ mcp-types==2.3.0
32
+ openai==3.42.0
33
+ opentelemetry-api==1.45.2
34
+ opentelemetry-instrumentation==0.66b2
35
+ opentelemetry-instrumentation-threading==0.66b2
36
+ opentelemetry-sdk==1.45.2
37
+ opentelemetry-semantic-conventions==0.66b2
38
+ packaging==26.3
39
+ pyasn1==0.6.5
40
+ pyasn1_modules==0.4.2
41
+ pycparser==3.12
42
+ pydantic==2.14.2
43
+ pydantic_core==2.50.2
44
+ PyJWT==2.15.1
45
+ python-dateutil==2.9.0.post0
46
+ python-multipart==0.0.33
47
+ PyYAML==6.0.3
48
+ referencing==0.37.0
49
+ requests==2.34.2
50
+ rpds-py==2026.9.1
51
+ s3transfer==0.19.3
52
+ six==1.17.0
53
+ sniffio==1.3.1
54
+ sse-starlette==3.6.0
55
+ starlette==1.10.0
56
+ strands-agents==1.63.0
57
+ tenacity==9.1.4
58
+ truststore==0.10.5
59
+ typing-inspection==0.4.4
60
+ typing_extensions==4.16.0
61
+ urllib3==2.8.0
62
+ uvicorn==0.54.0
63
+ watchdog==6.0.0
64
+ websockets==17.4
65
+ wrapt==2.5.2
66
+
67
+ pypdf==7.0.0
68
+ Pillow==13.0.0
@@ -0,0 +1,27 @@
1
+ """Read-only reconciliation of hash-lock declarations and reviewed wheel dependencies."""
2
+ import re
3
+ from packaging.markers import default_environment
4
+ from packaging.requirements import Requirement
5
+ from packaging.utils import canonicalize_name
6
+ from packaging.version import Version
7
+
8
+ def dependency_gaps(lock):
9
+ records={canonicalize_name(row['name']):row for row in lock['sources']}
10
+ env={**default_environment(),'python_version':'3.13','python_full_version':'3.13.0','sys_platform':'linux','platform_system':'Linux','platform_machine':'x86_64','implementation_name':'cpython','platform_python_implementation':'CPython'}
11
+ extras={key:{''} for key in records}
12
+ gaps=set();changed=True
13
+ while changed:
14
+ changed=False
15
+ for name,row in records.items():
16
+ for text in row['requiresDist']:
17
+ requirement=Requirement(text)
18
+ if requirement.marker and not any(requirement.marker.evaluate({**env,'extra':extra}) for extra in extras[name]):continue
19
+ target=canonicalize_name(requirement.name)
20
+ if target not in records:gaps.add(name+' requires '+target);continue
21
+ if Version(records[target]['version']) not in requirement.specifier:gaps.add(name+' incompatible '+target)
22
+ new=requirement.extras-extras[target]
23
+ if new:extras[target].update(new);changed=True
24
+ pins={canonicalize_name(name):version for name,version in re.findall(r'^([A-Za-z0-9_.-]+)==([^\s\\]+)',lock['requirements'],re.M)}
25
+ if pins!={key:row['version'] for key,row in records.items()}:gaps.add('lock pins differ from reviewed wheel metadata')
26
+ return gaps
27
+
@@ -0,0 +1,93 @@
1
+ """Pinned operator-observed runtime facts, separate from application acceptance."""
2
+ import hashlib,json,os,re
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+ from server.process_control_observation import PYTHON_PROCESS_CONTROLS
6
+
7
+
8
+ def runtime_binding(spec):
9
+ return {'imageId':spec.image,'platform':spec.platform,'executable':spec.command[0],
10
+ 'bootstrapPython':spec.bootstrap_python,'isolationProfile':spec.isolation_profile,
11
+ 'environment':dict(spec.runtime_environment),**({'executableScratch':True}if spec.executable_scratch else {})}
12
+
13
+
14
+ def digest(value):return hashlib.sha256(json.dumps(value,sort_keys=True,separators=(',',':')).encode()).hexdigest()
15
+
16
+
17
+ class RuntimeEvidence:
18
+ def __init__(self,encoded,*,worker_identity=None,worker_policy=None,context_bound=False):
19
+ self._encoded=encoded
20
+ self._worker_identity,self._worker_policy=worker_identity,worker_policy
21
+ self.context_bound=context_bound
22
+
23
+ def public(self):return json.loads(self._encoded)
24
+
25
+ def matches_worker(self,worker):
26
+ return self._worker_identity==worker.identity_digest and self._worker_policy==worker.policy_digest
27
+
28
+ @classmethod
29
+ def load(cls,reference,spec):
30
+ if not isinstance(reference,dict) or set(reference)!={'path','sha256'} or not isinstance(reference['path'],str) or not Path(reference['path']).is_absolute() or not isinstance(reference.get('sha256'),str) or not re.fullmatch(r'[a-f0-9]{64}',reference['sha256']):
31
+ raise ValueError('Register an absolute pinned operator runtime receipt')
32
+ descriptor=os.open(reference['path'],os.O_RDONLY|os.O_NOFOLLOW|os.O_NONBLOCK)
33
+ try:
34
+ import stat
35
+ info=os.fstat(descriptor)
36
+ if not stat.S_ISREG(info.st_mode) or info.st_size>64000:raise ValueError('Runtime evidence must be a bounded regular receipt')
37
+ with os.fdopen(descriptor,'rb',closefd=False)as source:content=source.read(64001)
38
+ finally:os.close(descriptor)
39
+ if len(content)>64000 or hashlib.sha256(content).hexdigest()!=reference['sha256']:raise ValueError('Runtime receipt bytes differ from their operator pin')
40
+ receipt=json.loads(content)
41
+ binding=runtime_binding(spec)
42
+ if not isinstance(receipt,dict) or receipt.get('format')!='atmem.runtime-observation' or type(receipt.get('version')) is not int or receipt['version'] not in {1,2} or receipt.get('passed') is not True or receipt.get('runtime')!=binding or receipt.get('runtimeSha256')!=digest(binding):
43
+ raise ValueError('Runtime observation does not match the registered immutable runtime')
44
+ if datetime.fromisoformat(receipt.get('observedAt','')).tzinfo is None or any(not isinstance(receipt.get(key),str) or not re.fullmatch(r'[a-f0-9]{64}',receipt[key]) for key in ['observerSha256','workerPolicySha256','workerIdentitySha256']):raise ValueError('Runtime observation requires dated observer/worker provenance')
45
+ probe=receipt.get('probe')
46
+ if not isinstance(probe,dict) or probe.get('status')!='passed' or type(probe.get('exitCode')) is not int or probe['exitCode']!=0 or probe.get('outputTruncated') is not False or probe.get('artifactSha256')!=hashlib.sha256(b'PK\x05\x06'+b'\0'*18).hexdigest() or any(probe.get(key)!=expected for key,expected in [('imageId',spec.image),('platform',spec.platform),('isolationProfile',spec.isolation_profile),('runtimeEnvironment',dict(spec.runtime_environment))]) or not isinstance(probe.get('command'),list) or probe['command'][:1]!=[spec.command[0]]:
47
+ raise ValueError('Runtime evidence needs a successful empty-source probe of the same runtime')
48
+ observed=receipt.get('observed')
49
+ if probe.get('executableScratch',False)is not spec.executable_scratch:raise ValueError('Runtime observation does not match executable scratch capability')
50
+ if not isinstance(probe.get('output'),str) or json.loads(probe['output'])!=observed:raise ValueError('Observed facts differ from the complete probe output')
51
+ version=receipt['version']
52
+ extra={'processControls','executionContext'} if version==2 else set()
53
+ if not isinstance(observed,dict) or set(observed)-({'kind','executableVersion','packages','serviceOperations','browserVersion'}|extra) or observed.get('kind') not in {'python','node'}:
54
+ raise ValueError('Unrecognized observed runtime shape')
55
+ def text(value):return isinstance(value,str) and bool(value) and len(value)<=150 and not any(ord(c)<32 for c in value)
56
+ if not text(observed.get('executableVersion')):raise ValueError('An observed executable version is required')
57
+ packages=observed.get('packages',{})
58
+ if not isinstance(packages,dict) or len(packages)>32 or any(not text(key) or (value is not None and not text(value)) for key,value in packages.items()):raise ValueError('Runtime package observations must be bounded versions or explicit unknowns')
59
+ services=observed.get('serviceOperations',{})
60
+ if not isinstance(services,dict) or len(services)>16:raise ValueError('Bound service capability observations')
61
+ for name,operations in services.items():
62
+ if not text(name) or (operations is not None and (not isinstance(operations,list) or len(operations)>2000 or any(not text(operation) for operation in operations) or len(set(operations))!=len(operations))):raise ValueError('Unrecognized service capability observations')
63
+ if 'browserVersion' in observed and observed['browserVersion'] is not None and not text(observed['browserVersion']):raise ValueError('Invalid browser version observation')
64
+ if version==2:validate_process_observation(receipt,observed,probe,text)
65
+ result={'receiptSha256':reference['sha256'],'runtimeSha256':digest(binding),'observed':observed,
66
+ 'observedAt':receipt['observedAt'],'evidenceLevel':'operator_pinned_local_runtime_observation','scope':'Observed immutable image runtime only; artifact-vendored dependencies can differ. Null package versions mean unobserved distribution metadata, not proof an import is impossible. Null service operations are unknown; an actual operation list describes only the installed SDK model. Not application, account, cloud or requirement acceptance.'}
67
+ if version==2:
68
+ result.update(executionContextSha256=receipt['executionContextSha256'],processControlProbeSha256=receipt['processControlProbeSha256'])
69
+ result['scope']=result['scope'].replace('Observed immutable image runtime only;', 'Observed immutable image metadata and the last recorded execution context;')
70
+ result['scope']+=' Process controls describe only the last observed execution context, not an image-only capability or current availability guarantee. Reobserve after worker, kernel, boot or policy changes. Null process controls are unobserved, not unsupported. Observation never grants permissions or changes safeguards.'
71
+ return cls(json.dumps(result,ensure_ascii=False,allow_nan=False),worker_identity=receipt['workerIdentitySha256'],worker_policy=receipt['workerPolicySha256'],context_bound=version==2)
72
+
73
+
74
+ def validate_process_observation(receipt,observed,probe,text):
75
+ """Validate an opt-in context snapshot; do not turn it into authorization."""
76
+ expected=hashlib.sha256(PYTHON_PROCESS_CONTROLS.encode()).hexdigest()
77
+ if observed['kind']!='python' or receipt.get('processControlProbeSha256')!=expected or not any(isinstance(argument,str) and PYTHON_PROCESS_CONTROLS in argument for argument in probe['command']):
78
+ raise ValueError('Process-control evidence requires the reviewed Python probe')
79
+ controls=observed.get('processControls')
80
+ if not isinstance(controls,dict) or set(controls)!={'noNewPrivileges','seccompFilter'}:
81
+ raise ValueError('Unrecognized process-control observation')
82
+ def outcome(value):
83
+ if not isinstance(value,dict) or set(value)!={'supported','returnCode','errno'} or type(value['supported']) is not bool or type(value['returnCode']) is not int or type(value['errno']) is not int:
84
+ raise ValueError('Process controls need explicit typed syscall outcomes')
85
+ if (value['supported'] and (value['returnCode']!=0 or value['errno']!=0)) or (not value['supported'] and (value['returnCode']!=-1 or not 1<=value['errno']<=4095)):
86
+ raise ValueError('Inconsistent process-control outcome')
87
+ outcome(controls['noNewPrivileges'])
88
+ if controls['noNewPrivileges']['supported']:outcome(controls['seccompFilter'])
89
+ elif controls['seccompFilter'] is not None:
90
+ raise ValueError('A dependent control without its prerequisite must remain unknown')
91
+ context=observed.get('executionContext')
92
+ if not isinstance(context,dict) or set(context)!={'processMachine','kernelRelease','kernelBootSha256','uid'} or not text(context['processMachine']) or not text(context['kernelRelease']) or type(context['uid']) is not int or not 0<=context['uid']<2**32 or not isinstance(context['kernelBootSha256'],str) or not re.fullmatch(r'[a-f0-9]{64}',context['kernelBootSha256']) or receipt.get('executionContextSha256')!=digest(context):
93
+ raise ValueError('Process-control evidence requires a bound execution context')
@@ -0,0 +1,14 @@
1
+ """Current product settings, with legacy installation compatibility."""
2
+ import os
3
+ from pathlib import Path
4
+
5
+ def setting(name):
6
+ return os.getenv('ATMEM_ARCHITECT_' + name) or os.getenv('ATFORMA_' + name)
7
+
8
+ def home():
9
+ configured = setting('HOME')
10
+ if configured:
11
+ return Path(configured)
12
+ legacy = Path.home() / '.atforma'
13
+ # Preserve scoped memory identities and project history in existing installations.
14
+ return legacy if legacy.exists() else Path.home() / '.atmem-ai-architect'
@@ -0,0 +1,103 @@
1
+ """Small reviewed specialist registry; pinned upstream assets are references, never scripts."""
2
+ import hashlib
3
+ import json
4
+ import re
5
+ from pathlib import Path
6
+
7
+ ROOT = Path(__file__).resolve().parent.parent
8
+ GUIDANCE = [
9
+ ('composition','Architecture composition and engineering judgment','all',['discover','design','review','deploy'],'Choose and compose blocks through responsibility, contracts, state, identity, failure modes and trade-offs; verify the complete system.'),
10
+ ('architecture','AI architecture and discovery','all',['discover','design','review'], 'Clarify outcome, users, existing systems, data ownership and constraints. Evolve the diagram incrementally. Derive functional requirements and propose measurable quality targets as assumptions needing confirmation. Compare clouds against the actual requirements; do not assume an enterprise identity provider or a vendor. Keep proposed and accepted decisions distinct.'),
11
+ ('security','Security and reliability','all',['design','review','deploy'], 'Check data classification, residency, access boundaries, encryption choices, approval of automated actions, reliability and recovery. A drawn control is not enforcement evidence. Explain missing controls and tests. Propose requirements from the components and paths; mark default targets as suggestions, never existing company policy.'),
12
+ ('finops','FinOps and progressive estimation','all',['estimate','design'], 'Populate a bill of resources from the diagram. Separate monthly cloud charges from one-off build effort. Use pricing.lookup for supported current list pricing, and project.read for usage. Ask the largest missing usage/model/region question. Input and output tokens, storage, requests, duration, networking and observability can have separate charges. Never invent prices or effort. Options cost scores are qualitative judgements, not price quotes.'),
13
+ ('devops','Infrastructure and DevOps handoff','all',['deploy','review'], 'Prepare a reviewable plan, IaC sketch, CI/CD checks, secrets handling, observability, acceptance tests, rollback and ownership. Existing systems require integration planning. Every wire needs implementation. Access does not equal permission to deploy; the current broker has no write/deploy tools. Report implementation and validation gaps.'),
14
+ ('aws','AWS architecture guidance','aws',['design','review','estimate','deploy'], 'Apply AWS Well-Architected concerns to the drawn workload with evidence. Distinguish Bedrock on-demand model access, knowledge-base/vector storage, guardrails and IAM; they are separate concerns. S3 storage, requests and transfer are separate cost dimensions. A diagram is not a complete Well-Architected review. Native generation currently covers only S3 foundations.'),
15
+ ('azure','Azure architecture guidance','azure',['design','review','estimate','deploy'], 'Check Microsoft 365/Entra integration only when relevant to the user. Match model, retrieval, data and runtime services to requirements. Evaluate redundancy, regional availability, identity and recovery separately. The pinned Azure reliability reference specifically covers Functions and App Service; do not extend its validation claims to other services.'),
16
+ ('gcp','Google Cloud AI architecture guidance','gcp',['design','review','estimate','deploy'], 'Match model runtime, retrieval, storage, identity and network boundaries to the project. Distinguish architecture guidance from validated commands. Verify regional model availability, quotas and residency before estimating/deploying. The pinned platform architecture reference has additional companion manuals; those commands are not enabled in AtMem AI Architect.'),
17
+ ('ibm','IBM Cloud architecture guidance','ibm',['design','review','estimate','deploy'], 'Match watsonx, data services, identity, application runtime and observability to the same requirements used for other clouds. Check region, data residency, model access and IBM plan before pricing. Use a sourced IBM quote; do not substitute an AWS/Azure rate or claim an unsupported deployment is ready.'),
18
+ ('terraform','Terraform delivery guidance','all',['deploy','design'], 'Keep provider versions and configurable inputs explicit, use stable resource addresses, declare references and dependencies, and review state/import and destructive changes. Run validation before claiming a valid sketch. Current generated S3 foundations are partial; application resources and integrations remain engineering work.'),
19
+ ('pulumi','Pulumi delivery guidance','all',['deploy','design'], 'Declare resources predictably and pass Outputs through dependencies; do not create resources inside apply callbacks. Plan aliases and protection before refactors. Keep secrets in supported secret/config stores. Explain import versus refresh limits. AtMem AI Architect Pulumi output remains a metadata scaffold, not deployed provider resources.'),
20
+ ]
21
+
22
+
23
+ def generation_guidance():
24
+ catalogue = json.loads((ROOT / 'agent-skills/generation-capabilities.json').read_text())
25
+ return ('Compiler capability catalogue v' + str(catalogue['version']) + ': ' +
26
+ json.dumps(catalogue['contracts'], separators=(',', ':')) + '. ' + catalogue['evidenceBoundary'] +
27
+ ' Application source assembly contracts: ' + json.dumps(catalogue.get('applicationAssemblies', []), separators=(',', ':')) + '. ' +
28
+ ' Preserve required unsupported scope and identify missing compiler work; never substitute a different provider or present references as generated infrastructure.')
29
+
30
+
31
+ def registry():
32
+ refs = json.loads((ROOT / 'agent-skills/upstream/manifest.json').read_text())
33
+ by_id = {r['id']: r for r in refs}
34
+ result = []
35
+ for ident, name, provider, stages, content in GUIDANCE:
36
+ path = ROOT / 'agent-skills/specialists' / ident / 'SKILL.md'
37
+ expected = json.loads((ROOT / 'agent-skills/specialists/manifest.json').read_text())[ident]
38
+ data = path.read_bytes()
39
+ version_match = re.search(r'^version: ([0-9]+\.[0-9]+\.[0-9]+)$', data.decode(), re.MULTILINE)
40
+ valid = hashlib.sha256(data).hexdigest() == expected and version_match is not None
41
+ reference = by_id.get(ident)
42
+ if reference:
43
+ reference = {**reference, 'integrity': hashlib.sha256((ROOT / reference['file']).read_bytes()).hexdigest() == reference['sha256']}
44
+ valid = valid and reference['integrity']
45
+ result.append({'id': ident, 'name': name, 'provider': provider, 'stages': stages, 'version': version_match.group(1) if version_match else 'unknown', 'digest': expected,
46
+ 'instructions': data.decode(), 'summary': content, 'source': reference['url'] if reference else 'AtMem AI Architect reviewed specialist guidance',
47
+ 'reference': reference, 'integrity': valid, 'coverage': 'guidance; no cloud execution', 'tools': ['memory.lookup','project.read','skills.lookup'] + (['pricing.lookup'] if ident in {'aws','finops'} else [])})
48
+ return result
49
+
50
+
51
+ def catalogue(memory, project):
52
+ skills = registry()
53
+ with memory.db() as db:
54
+ settings = dict(db.execute('SELECT id,enabled FROM skill_settings'))
55
+ for skill in skills:
56
+ skill['enabled'] = bool(settings.get(skill['id'], 1)) and skill['integrity']
57
+ return skills
58
+
59
+
60
+ def select(memory, project, request, recalled):
61
+ skills = catalogue(memory, project)
62
+ text = request.message.lower()
63
+ providers = {request.project.provider, *(n.data.provider for n in request.project.nodes)}
64
+ if re.search(r'compar|versus|alternative|\bvs\b', text):
65
+ providers.update({'aws','azure','gcp','ibm'})
66
+ for provider, pattern in [('aws',r'\baws\b'),('azure',r'\bazure\b'),('gcp',r'google cloud|\bgcp\b'),('ibm',r'\bibm\b|watsonx')]:
67
+ if re.search(pattern,text): providers.add(provider)
68
+ selected = []
69
+ for skill in skills:
70
+ choose = skill['id'] in {'architecture','composition'} or ((request.stage in skill['stages'] or request.stage == 'discover') and skill['provider'] in providers)
71
+ choose |= skill['id'] == 'security' and (bool(request.project.nodes) or bool(re.search(r'authenticat|authoriz|sign.in|tenant|permission|access.boundary|security|private.memory|webhook', text)))
72
+ choose |= skill['id'] == 'finops' and (request.stage == 'estimate' or bool(re.search(r'cost|pric|estimat|budget', text)))
73
+ choose |= skill['id'] == 'devops' and (request.stage == 'deploy' or bool(re.search(r'deploy|devops|rollback|pipeline', text)))
74
+ if skill['id'] in {'terraform','pulumi'}:
75
+ choose = skill['id'] in text or request.stage == 'deploy' and skill['id'] in ' '.join(r['text'].lower() for r in recalled)
76
+ if choose and skill['enabled']:
77
+ selected.append(skill)
78
+ return selected[:8]
79
+
80
+
81
+ def publication_text(skill):
82
+ """Publish bounded guidance or an explicit index; never silently clip instructions."""
83
+ text = f'Skill {skill["id"]} v{skill["version"]}: {skill["instructions"]}\nSource: {skill["source"]}; artifact SHA256: {skill["digest"]}'
84
+ if len(text) > 1900:
85
+ text = f'Skill {skill["id"]} v{skill["version"]}: {skill["summary"]}\nIndex record only; full reviewed instructions are loaded by the skill registry.\nSource: {skill["source"]}; artifact SHA256: {skill["digest"]}'
86
+ if len(text) > 1900:
87
+ raise ValueError(f'Skill {skill["id"]} publication exceeds the AtMem boundary')
88
+ return text
89
+
90
+
91
+ def publish(memory, project):
92
+ if not memory.enabled(project): return
93
+ for skill in catalogue(memory, project):
94
+ if not skill['integrity']: continue
95
+ text = publication_text(skill)
96
+ memory.enqueue(project,'knowledge','skill.'+skill['id'],text,event_id='skill-'+skill['digest'],source=skill['source'])
97
+ from .engineering_knowledge import publish as publish_practices
98
+ publish_practices(memory,project)
99
+ memory.flush()
100
+
101
+
102
+ def public(skills):
103
+ return [{k:v for k,v in skill.items() if k != 'instructions'} for skill in skills]
@@ -0,0 +1,160 @@
1
+ """Bounded storage data-plane checks. Never calls a cloud control plane.
2
+
3
+ SDK clients target only a worker-owned loopback service; IBM uses Moto's S3
4
+ protocol model, explicitly not an IBM Cloud emulator. Generated adapters are
5
+ server-owned, never submitted as executable code by the caller.
6
+ """
7
+ import base64
8
+ from contextlib import contextmanager
9
+ import importlib.util
10
+ import importlib.metadata
11
+ import hashlib
12
+ import json
13
+ import os
14
+ from pathlib import Path
15
+ import socket
16
+ import subprocess
17
+ import sys
18
+ import time
19
+ from unittest.mock import patch
20
+
21
+ ROOT=Path(__file__).resolve().parents[1]
22
+
23
+ @contextmanager
24
+ def loopback_only(port):
25
+ connect=socket.socket.connect
26
+ connect_ex=socket.socket.connect_ex
27
+ resolve=socket.getaddrinfo
28
+ def allowed(address):
29
+ if not isinstance(address,tuple) or address[0]!='127.0.0.1' or address[1]!=port:
30
+ raise RuntimeError('Network request outside the isolated emulator is forbidden')
31
+ def guarded(sock,address):allowed(address);return connect(sock,address)
32
+ def guarded_ex(sock,address):allowed(address);return connect_ex(sock,address)
33
+ def dns(host,service,*args,**kwargs):
34
+ if host!='127.0.0.1' or int(service)!=port:raise RuntimeError('External DNS is forbidden')
35
+ return resolve(host,service,*args,**kwargs)
36
+ with patch.object(socket.socket,'connect',guarded),patch.object(socket.socket,'connect_ex',guarded_ex),patch.object(socket,'getaddrinfo',dns):yield
37
+
38
+ @contextmanager
39
+ def service(provider,folder):
40
+ with socket.socket() as sock:sock.bind(('127.0.0.1',0));port=sock.getsockname()[1]
41
+ endpoint=f'http://127.0.0.1:{port}'
42
+ env=dict(os.environ)
43
+ if provider=='azure':
44
+ key=base64.b64encode(b'synthetic-local-only-not-a-cloud-key'*2).decode()
45
+ env['AZURITE_ACCOUNTS']='atmememulator:'+key
46
+ command=[str(ROOT/'.local/cloud-emulators/node_modules/.bin/azurite-blob'),'--blobHost','127.0.0.1','--blobPort',str(port),'--inMemoryPersistence','--extentMemoryLimit','32','--disableTelemetry','--silent']
47
+ else:
48
+ key=None
49
+ command=[str(ROOT/'.local/cloud-emulators/fake-gcs/fake-gcs-server'),'-scheme','http','-host','127.0.0.1','-port',str(port),'-backend','memory','-public-host',f'127.0.0.1:{port}','-external-url',endpoint,'-log-level','error']
50
+ with (folder/'emulator.log').open('w') as log:
51
+ proc=subprocess.Popen(command,cwd=folder,env=env,stdout=log,stderr=log)
52
+ try:
53
+ for _ in range(100):
54
+ if proc.poll() is not None:raise RuntimeError('Local storage emulator exited during startup')
55
+ try:
56
+ with socket.create_connection(('127.0.0.1',port),timeout=.1):break
57
+ except OSError:time.sleep(.1)
58
+ else:raise RuntimeError('Local storage emulator startup timed out')
59
+ with loopback_only(port):yield endpoint,key
60
+ finally:
61
+ proc.terminate()
62
+ try:proc.wait(timeout=3)
63
+ except subprocess.TimeoutExpired:proc.kill();proc.wait(timeout=3)
64
+
65
+
66
+ def run(folder):
67
+ folder=Path(folder);plan=json.loads((folder/'resource-schedule.json').read_text());provider=plan.get('provider')
68
+ checks=[];limitations=['Local API checks do not validate Terraform apply, real IAM, account policy, region availability, networking, billing or production operations.','Synthetic client credentials are not deployment identities.','Only the explicit private object storage contract is exercised; other provider services are not emulated.']
69
+ def check(name,fn):
70
+ try:fn();checks.append({'name':name,'passed':True})
71
+ except Exception as error:checks.append({'name':name,'passed':False,'errorType':type(error).__name__,'message':str(error)[:500]})
72
+ def equal(actual,expected):
73
+ if actual!=expected:raise AssertionError(f'Expected {expected!r}, received {actual!r}')
74
+ spec=importlib.util.spec_from_file_location('generated_storage_client',folder/'storage_client.py');client=importlib.util.module_from_spec(spec);spec.loader.exec_module(client)
75
+ stores=plan.get('storageContracts',[])
76
+ if provider not in ('azure','gcp','ibm') or not 1<=len(stores)<=10:raise ValueError('Unsupported storage scope')
77
+ backend={'azure':'azurite','gcp':'fake-gcs-server','ibm':'moto-s3-compatibility'}[provider]
78
+ versions={'azure':'3.37.0','gcp':'1.56.1','ibm':'5.2.5'}
79
+ if provider=='azure':
80
+ installed=json.loads((ROOT/'.local/cloud-emulators/node_modules/azurite/package.json').read_text())['version']
81
+ if installed!=versions[provider]:raise RuntimeError('Azurite version differs from the qualified backend')
82
+ if provider=='gcp':
83
+ location=ROOT/'.local/cloud-emulators/fake-gcs';receipt=json.loads((location/'receipt.json').read_text())
84
+ if receipt.get('version')!=versions[provider] or receipt.get('binarySha256')!=hashlib.sha256((location/'fake-gcs-server').read_bytes()).hexdigest():raise RuntimeError('GCS emulator installation integrity mismatch; rerun setup')
85
+ if provider=='ibm':versions[provider]=importlib.metadata.version('moto')
86
+ sdk_name={'azure':'azure-storage-blob','gcp':'google-cloud-storage','ibm':'boto3'}[provider]
87
+
88
+ data='Synthetic document — café\n'.encode()
89
+ if provider=='azure':
90
+ from azure.storage.blob import BlobServiceClient
91
+ from azure.core.exceptions import ResourceNotFoundError,ResourceExistsError
92
+ with service(provider,folder) as (endpoint,key):
93
+ # Pin an API version implemented by the installed emulator, never skip checks.
94
+ sdk=BlobServiceClient(endpoint+'/atmememulator',credential={'account_name':'atmememulator','account_key':key},api_version='2025-11-05',retry_total=0,connection_timeout=3,read_timeout=3)
95
+ for i,store in enumerate(stores):
96
+ container=sdk.create_container(f'documents-{i}')
97
+ def roundtrip():client.azure_put(container,'report.txt',data);equal(client.azure_get(container,'report.txt'),data)
98
+ check(f'{store["id"]}: generated upload/read preserves UTF-8 bytes',roundtrip)
99
+ def overwrite():client.azure_put(container,'report.txt',b'updated');equal(client.azure_get(container,'report.txt'),b'updated');equal([b.name for b in container.list_blobs()],['report.txt'])
100
+ check(f'{store["id"]}: overwrite and listing',overwrite)
101
+ def deletion():
102
+ client.azure_delete(container,'report.txt')
103
+ try:client.azure_get(container,'report.txt')
104
+ except ResourceNotFoundError:return
105
+ raise AssertionError('Deleted object remained readable')
106
+ check(f'{store["id"]}: deletion and missing-object error',deletion)
107
+ container.delete_container()
108
+ sdk.close()
109
+ limitations.append('Azure Entra authorization, custom role enforcement, storage-account versioning and soft-delete retention remain unverified; Azurite CRUD does not establish these behaviors.')
110
+ elif provider=='gcp':
111
+ from google.cloud import storage
112
+ from google.auth.credentials import AnonymousCredentials
113
+ from google.api_core.exceptions import NotFound,PreconditionFailed
114
+ with service(provider,folder) as (endpoint,_):
115
+ sdk=storage.Client(project='synthetic-qualification',credentials=AnonymousCredentials(),client_options={'api_endpoint':endpoint})
116
+ for i,store in enumerate(stores):
117
+ bucket=storage.Bucket(sdk,f'atmem-documents-{i}');bucket.versioning_enabled=True;bucket=sdk.create_bucket(bucket,timeout=5,retry=None)
118
+ state={}
119
+ def roundtrip():state['generation']=client.gcp_put(bucket,'report.txt',data,0);equal(client.gcp_get(bucket,'report.txt'),data)
120
+ check(f'{store["id"]}: generated upload/read preserves UTF-8 bytes',roundtrip)
121
+ def conditional():
122
+ try:client.gcp_put(bucket,'report.txt',b'bad overwrite',0)
123
+ except PreconditionFailed:equal(client.gcp_get(bucket,'report.txt'),data);return
124
+ raise AssertionError('Stale generation precondition accepted')
125
+ check(f'{store["id"]}: stale write rejected without changing data',conditional)
126
+ def recovery():client.gcp_put(bucket,'report.txt',b'updated',state['generation']);equal(client.gcp_get(bucket,'report.txt',state['generation']),data);equal(client.gcp_get(bucket,'report.txt'),b'updated')
127
+ check(f'{store["id"]}: overwritten generation remains recoverable',recovery)
128
+ def deletion():
129
+ client.gcp_delete(bucket,'report.txt')
130
+ try:client.gcp_get(bucket,'report.txt')
131
+ except NotFound:return
132
+ raise AssertionError('Deleted object remained current')
133
+ check(f'{store["id"]}: deletion and missing-object error',deletion)
134
+ for blob in bucket.list_blobs(versions=True):blob.delete(timeout=5,retry=None)
135
+ bucket.delete(timeout=5,retry=None)
136
+ sdk.close()
137
+ limitations.append('GCP IAM, public-access prevention and signed URL authentication are not enforced by this test backend.')
138
+ else:
139
+ from moto import mock_aws
140
+ import boto3
141
+ # Moto intercepts S3 requests; deny all real sockets, including loopback.
142
+ with mock_aws(),loopback_only(0):
143
+ sdk=boto3.client('s3',region_name='us-east-1',aws_access_key_id='testing',aws_secret_access_key='testing')
144
+ for i,store in enumerate(stores):
145
+ bucket=f'atmem-documents-{i}';sdk.create_bucket(Bucket=bucket);sdk.put_bucket_versioning(Bucket=bucket,VersioningConfiguration={'Status':'Enabled'});state={}
146
+ def roundtrip():state['version']=client.ibm_put(sdk,bucket,'report.txt',data)['VersionId'];equal(client.ibm_get(sdk,bucket,'report.txt'),data)
147
+ check(f'{store["id"]}: generated S3-compatible upload/read preserves bytes',roundtrip)
148
+ def recovery():state['new']=client.ibm_put(sdk,bucket,'report.txt',b'updated')['VersionId'];equal(client.ibm_get(sdk,bucket,'report.txt',state['version']),data);equal(client.ibm_get(sdk,bucket,'report.txt'),b'updated')
149
+ check(f'{store["id"]}: prior object version recovery',recovery)
150
+ def deletion():
151
+ client.ibm_delete(sdk,bucket,'report.txt',state['new']);client.ibm_delete(sdk,bucket,'report.txt',state['version']);equal(sdk.list_object_versions(Bucket=bucket).get('Versions',[]),[])
152
+ check(f'{store["id"]}: exact-version cleanup',deletion);sdk.delete_bucket(Bucket=bucket)
153
+ sdk.close()
154
+ limitations.append('This is S3 protocol compatibility coverage, not IBM COS service emulation: IBM IAM, OAuth/HMAC behavior, endpoints and COS-specific errors require IBM validation.')
155
+ return {'status':'passed' if checks and all(c['passed'] for c in checks) else 'failed','backend':backend,'backendVersion':versions[provider],'sdk':{'name':sdk_name,'version':importlib.metadata.version(sdk_name)},'checks':checks,'capabilities':[{'service':provider+' object storage','mode':'generated-client data-plane checks'}],'limitations':limitations,'message':'Generated client functions exercised against local storage APIs. Review the unverified boundaries before planning deployment.'}
156
+
157
+ if __name__=='__main__':
158
+ try:result=run(sys.argv[1])
159
+ except Exception as error:result={'status':'failed','checks':[],'message':f'{type(error).__name__}: {str(error)[:500]}'}
160
+ print(json.dumps(result));sys.exit(0 if result['status']=='passed' else 1)
@@ -0,0 +1,48 @@
1
+ """Execute server-generated Azure source acceptance checks without Azure/network.
2
+
3
+ These are local source/cryptographic/ASGI checks with scripted key/model/policy
4
+ transport. Neither cloud authentication nor real inference is established.
5
+ """
6
+ import hashlib
7
+ import importlib.util
8
+ import io
9
+ import json
10
+ from pathlib import Path
11
+ import re
12
+ import sys
13
+ import unittest
14
+
15
+ sys.path.insert(0,str(Path(__file__).resolve().parent))
16
+ from emulation_worker import deny_network
17
+
18
+
19
+ def run(folder):
20
+ root=Path(folder).resolve()
21
+ plan=json.loads((root/'resource-schedule.json').read_text())
22
+ entries=[(entry,'azure') for entry in plan.get('azureStructuredPlan',{}).get('entries',[])]+[(entry,'gcp') for entry in plan.get('gcpStructuredPlan',{}).get('entries',[])]+[(entry,'ibm') for entry in plan.get('ibmStructuredPlan',{}).get('entries',[])]
23
+ checks=[]
24
+ with deny_network():
25
+ for entry,provider in entries:
26
+ address=entry['row']['address']
27
+ if not re.fullmatch(r'block_[0-9a-f]+',address):raise ValueError('Invalid compiler component address')
28
+ app=root/'applications'/address
29
+ script=app/(provider+'_acceptance.py')
30
+ old=list(sys.path)
31
+ try:
32
+ sys.path.insert(0,str(app))
33
+ for name in ['azure_structured','gcp_structured','ibm_structured','policy_review','structured_output','structured_http','http_acceptance','export_contract_acceptance']:sys.modules.pop(name,None)
34
+ spec=importlib.util.spec_from_file_location('acceptance_'+address,script)
35
+ module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
36
+ log=io.StringIO()
37
+ result=unittest.TextTestRunner(stream=log,verbosity=1).run(unittest.defaultTestLoader.loadTestsFromModule(module))
38
+ checks.append({'name':'Generated '+provider+' application JWT, HTTP, output and account-policy boundaries','passed':result.wasSuccessful() and result.testsRun>0,'testsRun':result.testsRun,'componentId':entry['row']['id'],'sourceSha256':hashlib.sha256((app/(provider+'_structured.py')).read_bytes()).hexdigest(),'evidence':'host-runtime-cryptographic-jwt-scripted-'+provider+'-transport','output':log.getvalue()[-6000:]})
39
+ finally:sys.path[:]=old
40
+ providers=sorted({provider for _,provider in entries})
41
+ return {'version':1,'kind':'local-structured-application-tests','backend':'host-asgi-scripted-'+('-'.join(providers)),'status':'passed' if checks and all(c['passed'] for c in checks) else 'failed','checks':checks,'modelMode':'scripted-fixture','cloudOperations':False,'terraformApply':'not_run','limitations':['Generated Python source executes on this host, not a provider container image.','Ephemeral RSA/ES256 JWT signatures and local ASGI requests are real; provider key retrieval, policy and model transports are scripted, with network denied.','Cloud sign-in, MFA, group assignment and token revocation, workload-identity exchange, model quality, regional capacity, container startup/scan, account plan and deployment remain unverified.','Token authorization is bounded by expiry/skew; these modules do not implement independent continuous group/user revocation.']}
42
+
43
+
44
+ if __name__=='__main__':
45
+ sys.dont_write_bytecode=True
46
+ try:report=run(sys.argv[1])
47
+ except Exception as error:report={'version':1,'status':'failed','checks':[],'message':'Generated source checks failed: '+type(error).__name__,'cloudOperations':False}
48
+ print(json.dumps(report));raise SystemExit(0 if report['status']=='passed' else 1)