@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 @@
1
+ "\"\"\"New dedicated ECS host preparation; no client content or credentials accepted.\"\"\"\nimport base64\nimport json\nimport os\nfrom pathlib import Path\nimport re\nimport stat\nimport subprocess\nimport sys\nimport uuid\nsys.path.insert(0,str(Path(__file__).resolve().parent))\nfrom enterprise_aws_host_probe import expected_policy,first_rule_matches\n\n\ndef unique(pairs):\n result={}\n for key,value in pairs:\n if key in result:raise ValueError('Ambiguous host configuration')\n result[key]=value\n return result\n\n\ndef environment(raw):\n values={}\n for line in raw.splitlines():\n if not line.strip()or line.lstrip().startswith('#'):continue\n key,separator,value=line.partition('=')\n if not separator or not re.fullmatch('[A-Z][A-Z0-9_]*',key)or key in values:raise ValueError('Invalid ECS environment')\n values[key]=value\n return values\n\n\ndef required(expected):\n expected=expected_policy(expected)\n return {'ECS_CLUSTER':expected['clusterArn'],'ECS_ENABLE_TASK_IAM_ROLE':'true','ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST':'false',\n 'ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION':'1s','ECS_INSTANCE_ATTRIBUTES':json.dumps({'atmem-document-policy':expected['policySha256']},sort_keys=True,separators=(',',':'))}\n\n\ndef read_optional(path):\n try:return Path(path).read_text()\n except FileNotFoundError:return ''\n\n\ndef atomic(path,text):\n path=Path(path);path.parent.mkdir(mode=0o755,parents=True,exist_ok=True)\n parent=os.open(path.parent,os.O_RDONLY|os.O_DIRECTORY|os.O_NOFOLLOW);temporary='.atmem-'+uuid.uuid4().hex\n try:\n info=os.fstat(parent)\n if info.st_uid!=os.geteuid()or stat.S_IMODE(info.st_mode)&0o022:raise ValueError('Unsafe host configuration directory')\n try:\n info=os.stat(path.name,dir_fd=parent,follow_symlinks=False)\n if not stat.S_ISREG(info.st_mode)or info.st_uid!=os.geteuid():raise ValueError('Refuse unowned host configuration')\n except FileNotFoundError:pass\n fd=os.open(temporary,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600,dir_fd=parent)\n with os.fdopen(fd,'w')as stream:stream.write(text);stream.flush();os.fsync(stream.fileno())\n os.replace(temporary,path.name,src_dir_fd=parent,dst_dir_fd=parent);os.fsync(parent)\n finally:\n try:os.unlink(temporary,dir_fd=parent)\n except FileNotFoundError:pass\n os.close(parent)\n\n\ndef prepare(expected,*,read=read_optional,write=atomic):\n updates=required(expected);raw=read('/etc/ecs/ecs.config');existing=environment(raw)\n if existing.get('ECS_CLUSTER')not in {None,'','default',updates['ECS_CLUSTER']}:raise ValueError('Do not adopt an existing ECS host')\n attributes=json.loads(existing.get('ECS_INSTANCE_ATTRIBUTES','{}'),object_pairs_hook=unique)\n if attributes not in [{},{'atmem-document-policy':expected['policySha256']}]:raise ValueError('Do not replace existing host ownership')\n daemon=json.loads(read('/etc/docker/daemon.json')or'{}',object_pairs_hook=unique)\n if not isinstance(daemon,dict):raise ValueError('Invalid native daemon configuration')\n daemon.update({'log-driver':'none','live-restore':False});daemon.pop('log-opts',None)\n lines=[];seen=set()\n for line in raw.splitlines():\n key=line.partition('=')[0]\n if key in updates:lines.append(key+'='+updates[key]);seen.add(key)\n else:lines.append(line)\n lines += [key+'='+value for key,value in updates.items()if key not in seen]\n write('/etc/docker/daemon.json',json.dumps(daemon,sort_keys=True,separators=(',',':'))+'\\n')\n write('/etc/ecs/ecs.config','\\n'.join(lines)+'\\n')\n\n\ndef command(argv,*,absent=False):\n if argv[0]=='/usr/bin/docker':argv=[argv[0],'--host','unix:///var/run/docker.sock',*argv[1:]]\n result=subprocess.run(argv,stdin=subprocess.DEVNULL,stdout=subprocess.PIPE,stderr=subprocess.DEVNULL,timeout=4,\n env={'PATH':'/usr/sbin:/usr/bin:/sbin:/bin','LANG':'C'})\n if absent and result.returncode==1:return None\n if result.returncode or len(result.stdout)>32768:raise ValueError('Native host preparation failed')\n return result.stdout.decode().strip()\n\n\ndef guard(expected,*,read=read_optional,run=command):\n updates=required(expected);values=environment(read('/etc/ecs/ecs.config'))\n if any(values.get(key)!=value for key,value in updates.items()):raise ValueError('ECS configuration not prepared')\n daemon=json.loads(read('/etc/docker/daemon.json'),object_pairs_hook=unique)\n if daemon.get('log-driver')!='none'or daemon.get('live-restore',False)is not False or daemon.get('bridge','docker0')!='docker0':raise ValueError('Unsafe prepared daemon')\n for field,value in [('LoggingDriver','none'),('LiveRestoreEnabled',False)]:\n if json.loads(run(['/usr/bin/docker','info','--format','{{json .'+field+'}}']))!=value:raise ValueError('Running daemon differs from prepared policy')\n options=json.loads(run(['/usr/bin/docker','info','--format','{{json .SecurityOptions}}']))\n if 'name=seccomp,profile=builtin'not in options:raise ValueError('Native seccomp is not active')\n bridge=json.loads(run(['/usr/bin/docker','network','inspect','bridge','--format','{{json .Options}}']))\n if bridge.get('com.docker.network.bridge.name')!='docker0':raise ValueError('Default bridge changed')\n for tool,destination in [('/usr/sbin/iptables','169.254.169.254/32'),('/usr/sbin/ip6tables','fd00:ec2::254/128')]:\n if run([tool,'-w','2','-S','DOCKER-USER'],absent=True)is None:run([tool,'-w','2','-N','DOCKER-USER'])\n for chain,rule in [('DOCKER-USER',['-i','docker0','-d',destination,'-j','DROP']),('FORWARD',['-j','DOCKER-USER'])]:\n for _ in range(4):\n if run([tool,'-w','2','-D',chain,*rule],absent=True)is None:break\n run([tool,'-w','2','-I',chain,'1',*rule])\n if not first_rule_matches(run([tool,'-w','2','-S','DOCKER-USER']),'DOCKER-USER',{'-i':'docker0','-d':destination,'-j':'DROP'}):raise ValueError('Metadata rule installation failed')\n if not first_rule_matches(run([tool,'-w','2','-S','FORWARD']),'FORWARD',{'-j':'DOCKER-USER'}):raise ValueError('Metadata forwarding hook installation failed')\n\n\ndef main():\n try:\n if os.geteuid()!=0 or len(sys.argv)!=3 or sys.argv[1]not in {'prepare','guard'}or len(sys.argv[2])>4096:raise ValueError()\n expected=json.loads(base64.b64decode(sys.argv[2],validate=True),object_pairs_hook=unique)\n (prepare if sys.argv[1]=='prepare'else guard)(expected)\n print(json.dumps({'status':'ok','phase':sys.argv[1]}))\n except Exception:raise SystemExit(2)from None\n\n\nif __name__=='__main__':main()\n"
@@ -0,0 +1 @@
1
+ "\"\"\"Fixed SSM host inspection. Standard library only; no document or secret input.\"\"\"\nimport base64\nimport json\nimport ipaddress\nfrom pathlib import Path\nimport re\nimport subprocess\nimport shlex\nimport sys\n\n\ndef run(argv):\n if argv and argv[0]=='/usr/bin/docker':\n # An operator's saved Docker context must never redirect this native\n # host inspection to another daemon, even with a scrubbed environment.\n argv=[argv[0],'--host','unix:///var/run/docker.sock',*argv[1:]]\n value=subprocess.run(argv,stdin=subprocess.DEVNULL,stdout=subprocess.PIPE,stderr=subprocess.DEVNULL,\n timeout=4,check=True,env={'PATH':'/usr/sbin:/usr/bin:/sbin:/bin','LANG':'C'})\n if len(value.stdout)>32768:raise ValueError('Invalid host observation')\n return value.stdout.decode().strip()\n\n\ndef expected_policy(expected):\n if (not isinstance(expected,dict)or set(expected)!={'format','clusterArn','policySha256'}or\n expected['format']!='enterprise-aws-host-policy-v1'or\n not isinstance(expected['policySha256'],str)or not re.fullmatch('[0-9a-f]{64}',expected['policySha256'])or\n not isinstance(expected['clusterArn'],str)or not re.fullmatch(r'arn:aws:ecs:[a-z]{2}-[a-z]+-[1-9]:[0-9]{12}:cluster/[A-Za-z0-9_-]{1,255}',expected['clusterArn'])):\n raise ValueError('Use the exact owned host policy')\n return dict(expected)\n\n\ndef first_rule_matches(lines,chain,pairs):\n active=[value for value in lines.splitlines()if value.startswith('-A ')]\n if not active:return False\n fields=shlex.split(active[0])\n if fields[:2]!=['-A',chain]or len(fields)!=2+2*len(pairs):return False\n actual={}\n for index in range(2,len(fields),2):\n key,value=fields[index:index+2]\n if key in actual:return False\n if key=='-d':\n try:value=str(ipaddress.ip_network(value,strict=True))\n except ValueError:return False\n actual[key]=value\n return actual==pairs\n\n\ndef inspect_host(expected,*,read=lambda name:Path(name).read_text(),command=run):\n expected=expected_policy(expected)\n # Parse values as inert text. Never source a host config into a shell.\n values={}\n for line in read('/etc/ecs/ecs.config').splitlines():\n if not line.strip()or line.lstrip().startswith('#'):continue\n key,separator,value=line.partition('=')\n if not separator or key in values:raise ValueError('Ambiguous ECS configuration')\n values[key]=value\n if (values.get('ECS_CLUSTER')!=expected['clusterArn']or\n values.get('ECS_ENABLE_TASK_IAM_ROLE')!='true'or\n values.get('ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION')!='1s'or\n values.get('ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST')!='false'):\n raise ValueError('ECS host policy changed')\n attributes=json.loads(values.get('ECS_INSTANCE_ATTRIBUTES','{}'))\n if attributes!={'atmem-document-policy':expected['policySha256']}:raise ValueError('Host policy selection changed')\n daemon=json.loads(read('/etc/docker/daemon.json'))\n if (daemon.get('log-driver')!='none'or daemon.get('live-restore',False)is not False or daemon.get('bridge','docker0')!='docker0'):\n raise ValueError('Unsafe daemon logging, network or task persistence')\n if json.loads(command(['/usr/bin/docker','info','--format','{{json .LoggingDriver}}']))!='none':raise ValueError('Actual daemon logging changed')\n if json.loads(command(['/usr/bin/docker','info','--format','{{json .LiveRestoreEnabled}}']))is not False:raise ValueError('Native live restore is active')\n options=json.loads(command(['/usr/bin/docker','info','--format','{{json .SecurityOptions}}']))\n if not isinstance(options,list)or 'name=seccomp,profile=builtin'not in options:\n raise ValueError('Native seccomp is not active')\n bridge=json.loads(command(['/usr/bin/docker','network','inspect','bridge','--format','{{json .Options}}']))\n if bridge.get('com.docker.network.bridge.name')!='docker0':raise ValueError('Actual default bridge changed')\n native_env=json.loads(command(['/usr/bin/docker','inspect','ecs-agent','--format','{{json .Config.Env}}']))\n if not isinstance(native_env,list)or any(not isinstance(v,str)for v in native_env):raise ValueError('Native ECS agent configuration unavailable')\n native={}\n for entry in native_env:\n key,separator,value=entry.partition('=')\n if not separator or key in native:raise ValueError('Ambiguous native ECS environment')\n native[key]=value\n for key in ['ECS_CLUSTER','ECS_ENABLE_TASK_IAM_ROLE','ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION','ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST','ECS_INSTANCE_ATTRIBUTES']:\n if native.get(key)!=values[key]:raise ValueError('Running ECS agent differs from host policy')\n # Both paths are fixed, read-only probes. A plain TCP bridge must not expose\n # instance-profile credentials to the transfer containers.\n for destination in ['169.254.169.254/32','fd00:ec2::254/128']:\n tool='/usr/sbin/iptables'if ':'not in destination else'/usr/sbin/ip6tables'\n rules=command([tool,'-w','2','-S','DOCKER-USER'])\n if not first_rule_matches(rules,'DOCKER-USER',{'-i':'docker0','-d':destination,'-j':'DROP'}):raise ValueError('IMDS rule is missing or shadowed')\n forward=command([tool,'-w','2','-S','FORWARD'])\n if not first_rule_matches(forward,'FORWARD',{'-j':'DOCKER-USER'}):raise ValueError('IMDS chain is not the first forwarding hook')\n boot=read('/proc/sys/kernel/random/boot_id').strip()\n if not re.fullmatch('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}',boot):raise ValueError('Invalid native boot identity')\n return {'format':'enterprise-aws-host-observation-v1','policySha256':expected['policySha256'],\n 'clusterArn':expected['clusterArn'],'bootId':boot}\n\n\ndef main():\n try:\n if len(sys.argv)!=2 or len(sys.argv[1])>4096:raise ValueError()\n expected=json.loads(base64.b64decode(sys.argv[1],validate=True))\n print(json.dumps(inspect_host(expected),separators=(',',':')))\n except Exception:raise SystemExit(2)from None\n\n\nif __name__=='__main__':main()\n"
@@ -0,0 +1,235 @@
1
+ {
2
+ "family": "__FAMILY__",
3
+ "networkMode": "bridge",
4
+ "requiresCompatibilities": [
5
+ "EC2"
6
+ ],
7
+ "runtimePlatform": {
8
+ "cpuArchitecture": "X86_64",
9
+ "operatingSystemFamily": "LINUX"
10
+ },
11
+ "placementConstraints": [
12
+ {
13
+ "type": "memberOf",
14
+ "expression": "attribute:atmem-document-policy == __POLICY_SHA256__"
15
+ }
16
+ ],
17
+ "taskRoleArn": "__TRANSFER_ROLE_ARN__",
18
+ "executionRoleArn": "__EXECUTION_ROLE_ARN__",
19
+ "containerDefinitions": [
20
+ {
21
+ "name": "download",
22
+ "image": "__TRANSFER_IMAGE__",
23
+ "user": "0:0",
24
+ "essential": false,
25
+ "cpu": 128,
26
+ "memory": 256,
27
+ "readonlyRootFilesystem": true,
28
+ "privileged": false,
29
+ "dockerSecurityOptions": [
30
+ "no-new-privileges"
31
+ ],
32
+ "linuxParameters": {
33
+ "capabilities": {
34
+ "drop": [
35
+ "ALL"
36
+ ],
37
+ "add": [
38
+ "CHOWN"
39
+ ]
40
+ },
41
+ "initProcessEnabled": true,
42
+ "maxSwap": 0
43
+ },
44
+ "stopTimeout": 5,
45
+ "ulimits": [
46
+ {
47
+ "name": "nofile",
48
+ "softLimit": 256,
49
+ "hardLimit": 256
50
+ }
51
+ ],
52
+ "entryPoint": [
53
+ "python"
54
+ ],
55
+ "command": [
56
+ "-I",
57
+ "/app/enterprise_aws_transfer.py",
58
+ "download"
59
+ ],
60
+ "environment": [
61
+ {
62
+ "name": "DOCUMENT_JOB",
63
+ "value": ""
64
+ }
65
+ ],
66
+ "mountPoints": [
67
+ {
68
+ "sourceVolume": "input",
69
+ "containerPath": "/work/input",
70
+ "readOnly": false
71
+ },
72
+ {
73
+ "sourceVolume": "output",
74
+ "containerPath": "/work/output",
75
+ "readOnly": false
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "name": "parser",
81
+ "image": "__PARSER_IMAGE__",
82
+ "user": "10001:10001",
83
+ "essential": false,
84
+ "cpu": 1792,
85
+ "memory": 2048,
86
+ "readonlyRootFilesystem": true,
87
+ "privileged": false,
88
+ "dockerSecurityOptions": [
89
+ "no-new-privileges"
90
+ ],
91
+ "linuxParameters": {
92
+ "capabilities": {
93
+ "drop": [
94
+ "ALL"
95
+ ]
96
+ },
97
+ "initProcessEnabled": true,
98
+ "maxSwap": 0,
99
+ "tmpfs": [
100
+ {
101
+ "containerPath": "/tmp",
102
+ "size": 128,
103
+ "mountOptions": [
104
+ "rw",
105
+ "noexec",
106
+ "nosuid",
107
+ "nodev"
108
+ ]
109
+ }
110
+ ]
111
+ },
112
+ "stopTimeout": 5,
113
+ "ulimits": [
114
+ {
115
+ "name": "nofile",
116
+ "softLimit": 256,
117
+ "hardLimit": 256
118
+ }
119
+ ],
120
+ "disableNetworking": true,
121
+ "entryPoint": [
122
+ "python"
123
+ ],
124
+ "command": [
125
+ "-I",
126
+ "/app/enterprise_document_cli.py",
127
+ "--job"
128
+ ],
129
+ "dependsOn": [
130
+ {
131
+ "containerName": "download",
132
+ "condition": "SUCCESS"
133
+ }
134
+ ],
135
+ "startTimeout": 60,
136
+ "mountPoints": [
137
+ {
138
+ "sourceVolume": "input",
139
+ "containerPath": "/input",
140
+ "readOnly": true
141
+ },
142
+ {
143
+ "sourceVolume": "output",
144
+ "containerPath": "/output",
145
+ "readOnly": false
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "name": "upload",
151
+ "image": "__TRANSFER_IMAGE__",
152
+ "user": "10001:10001",
153
+ "essential": true,
154
+ "cpu": 128,
155
+ "memory": 256,
156
+ "readonlyRootFilesystem": true,
157
+ "privileged": false,
158
+ "dockerSecurityOptions": [
159
+ "no-new-privileges"
160
+ ],
161
+ "linuxParameters": {
162
+ "capabilities": {
163
+ "drop": [
164
+ "ALL"
165
+ ]
166
+ },
167
+ "initProcessEnabled": true,
168
+ "maxSwap": 0
169
+ },
170
+ "stopTimeout": 5,
171
+ "ulimits": [
172
+ {
173
+ "name": "nofile",
174
+ "softLimit": 256,
175
+ "hardLimit": 256
176
+ }
177
+ ],
178
+ "entryPoint": [
179
+ "python"
180
+ ],
181
+ "command": [
182
+ "-I",
183
+ "/app/enterprise_aws_transfer.py",
184
+ "upload"
185
+ ],
186
+ "environment": [
187
+ {
188
+ "name": "DOCUMENT_JOB",
189
+ "value": ""
190
+ }
191
+ ],
192
+ "mountPoints": [
193
+ {
194
+ "sourceVolume": "input",
195
+ "containerPath": "/work/input",
196
+ "readOnly": true
197
+ },
198
+ {
199
+ "sourceVolume": "output",
200
+ "containerPath": "/work/output",
201
+ "readOnly": true
202
+ }
203
+ ],
204
+ "dependsOn": [
205
+ {
206
+ "containerName": "parser",
207
+ "condition": "SUCCESS"
208
+ }
209
+ ],
210
+ "startTimeout": 120
211
+ }
212
+ ],
213
+ "volumes": [
214
+ {
215
+ "name": "input",
216
+ "dockerVolumeConfiguration": {
217
+ "scope": "task",
218
+ "driver": "local"
219
+ }
220
+ },
221
+ {
222
+ "name": "output",
223
+ "dockerVolumeConfiguration": {
224
+ "scope": "task",
225
+ "driver": "local"
226
+ }
227
+ }
228
+ ],
229
+ "tags": [
230
+ {
231
+ "key": "atmem-workload",
232
+ "value": "document-parser"
233
+ }
234
+ ]
235
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "version": "3.3.3",
3
+ "url": "https://downloads.apache.org/tika/3.3.3/tika-app-3.3.3.jar",
4
+ "sha256": "f29d4e0d2cff1fc32396f6ac5ce436dfc7b19f9303d3b899e1f56fde85711c96",
5
+ "sha512": "3c6e62e864e32af234832ec6d928bbc58692d3ddd60564cd8c80dee7e161653d6efcba373b6cc9468c778010bea92bdee5ca75ab24f01923480bec1b29b573fd",
6
+ "releaseSignatureFingerprint": "184454FAD8697760F3E00D2E4A51A45B944FFD51",
7
+ "javaBuildImage": "docker.io/library/eclipse-temurin@sha256:f1309980e092cb762e6cbf78cf91b7fa0e7d3f3c5fc47a60a582f880b799aa48",
8
+ "javaVersion": "17.0.21+9",
9
+ "platform": "linux/amd64",
10
+ "license": "Apache-2.0; bundled dependencies retain their upstream LICENSE/NOTICE in the jar",
11
+ "reviewedPrimarySources": [
12
+ "https://tika.apache.org/download.html",
13
+ "https://tika.apache.org/security-model.html",
14
+ "https://tika.apache.org/security.html",
15
+ "https://tika.apache.org/3.3.3/gettingstarted.html"
16
+ ],
17
+ "reviewDate": "2026-11-10"
18
+ }
@@ -0,0 +1,15 @@
1
+ # Build the supplied invoice-parser.Dockerfile first, then pass its exact local image.
2
+ # The qualifier checks its source hashes before using it as the credentialless PDF base.
3
+ ARG PDF_PARSER_IMAGE
4
+ FROM docker.io/library/eclipse-temurin@sha256:f1309980e092cb762e6cbf78cf91b7fa0e7d3f3c5fc47a60a582f880b799aa48 AS document-build
5
+ ADD --checksum=sha256:f29d4e0d2cff1fc32396f6ac5ce436dfc7b19f9303d3b899e1f56fde85711c96 https://downloads.apache.org/tika/3.3.3/tika-app-3.3.3.jar /build/tika-app.jar
6
+ COPY EnterpriseDocument.java /build/EnterpriseDocument.java
7
+ RUN javac --release 17 -cp /build/tika-app.jar -d /build/classes /build/EnterpriseDocument.java && jlink --add-modules java.se,jdk.unsupported,jdk.crypto.ec --strip-debug --no-header-files --no-man-pages --output /build/java
8
+ FROM ${PDF_PARSER_IMAGE}
9
+ USER root
10
+ COPY --from=document-build /build/java /opt/java
11
+ COPY --chmod=0444 --from=document-build /build/tika-app.jar /app/tika-app.jar
12
+ COPY --from=document-build /build/classes /app/document-bridge
13
+ COPY enterprise_document_contract.py enterprise_document.py enterprise_document_cli.py enterprise_document_job.py enterprise_parser_service.py /app/
14
+ USER 10001:10001
15
+ CMD ["python", "-I", "/app/enterprise_document_cli.py"]