procesio-cli 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. procesio_cli/__init__.py +18 -0
  2. procesio_cli/_cli.py +71 -0
  3. procesio_cli/agents/__init__.py +0 -0
  4. procesio_cli/agents/_lib/__init__.py +0 -0
  5. procesio_cli/agents/_lib/actiondef.py +24 -0
  6. procesio_cli/agents/_lib/errors.py +40 -0
  7. procesio_cli/agents/_lib/reversibility.py +236 -0
  8. procesio_cli/agents/_lib/toolrunner.py +141 -0
  9. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
  10. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
  11. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
  12. procesio_cli/agents/connector-builder/README.md +51 -0
  13. procesio_cli/agents/connector-builder/agent.yaml +61 -0
  14. procesio_cli/agents/connector-builder/context.py +19 -0
  15. procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
  16. procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
  17. procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
  18. procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
  19. procesio_cli/agents/connector-builder/handlers/status.py +35 -0
  20. procesio_cli/agents/connector-builder/knowledge.py +47 -0
  21. procesio_cli/agents/connector-builder/main.py +93 -0
  22. procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
  23. procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
  24. procesio_cli/agents/orchestrator/__init__.py +0 -0
  25. procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
  26. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
  27. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
  28. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
  29. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
  30. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
  31. procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
  32. procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
  33. procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
  34. procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
  35. procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
  36. procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
  37. procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
  38. procesio_cli/agents/procesio/README.md +97 -0
  39. procesio_cli/agents/procesio/__init__.py +0 -0
  40. procesio_cli/agents/procesio/agent.yaml +73 -0
  41. procesio_cli/agents/procesio/audit.py +226 -0
  42. procesio_cli/agents/procesio/checklist.py +135 -0
  43. procesio_cli/agents/procesio/context.py +19 -0
  44. procesio_cli/agents/procesio/handlers/__init__.py +0 -0
  45. procesio_cli/agents/procesio/handlers/audit.py +39 -0
  46. procesio_cli/agents/procesio/handlers/checklist.py +34 -0
  47. procesio_cli/agents/procesio/handlers/guidance.py +36 -0
  48. procesio_cli/agents/procesio/handlers/status.py +33 -0
  49. procesio_cli/agents/procesio/handlers/verify.py +39 -0
  50. procesio_cli/agents/procesio/knowledge.py +115 -0
  51. procesio_cli/agents/procesio/main.py +89 -0
  52. procesio_cli/agents/procesio/tests/__init__.py +0 -0
  53. procesio_cli/agents/procesio/tests/conftest.py +62 -0
  54. procesio_cli/agents/procesio/tests/test_audit.py +91 -0
  55. procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
  56. procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
  57. procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
  58. procesio_cli/agents/procesio/tests/test_verify.py +134 -0
  59. procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
  60. procesio_cli/agents/procesio/verifylib.py +222 -0
  61. procesio_cli/dashboard/README.md +117 -0
  62. procesio_cli/dashboard/__init__.py +18 -0
  63. procesio_cli/dashboard/serve.py +98 -0
  64. procesio_cli/dashboard/server/__init__.py +1 -0
  65. procesio_cli/dashboard/server/config_schemas.py +92 -0
  66. procesio_cli/dashboard/server/google.py +103 -0
  67. procesio_cli/dashboard/server/handler.py +160 -0
  68. procesio_cli/dashboard/server/inventory.py +213 -0
  69. procesio_cli/dashboard/server/jobs.py +118 -0
  70. procesio_cli/dashboard/server/llmtest.py +181 -0
  71. procesio_cli/dashboard/server/procesio_env.py +94 -0
  72. procesio_cli/dashboard/server/routes.py +74 -0
  73. procesio_cli/dashboard/server/runner.py +150 -0
  74. procesio_cli/dashboard/server/security.py +29 -0
  75. procesio_cli/dashboard/server/setup.py +211 -0
  76. procesio_cli/dashboard/server/validate.py +152 -0
  77. procesio_cli/dashboard/tests/conftest.py +16 -0
  78. procesio_cli/dashboard/tests/test_dashboard.py +225 -0
  79. procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
  80. procesio_cli/dashboard/web/actions.js +274 -0
  81. procesio_cli/dashboard/web/api.js +79 -0
  82. procesio_cli/dashboard/web/app.js +385 -0
  83. procesio_cli/dashboard/web/copilot.js +72 -0
  84. procesio_cli/dashboard/web/google.js +121 -0
  85. procesio_cli/dashboard/web/index.html +67 -0
  86. procesio_cli/dashboard/web/procesio_env.js +187 -0
  87. procesio_cli/dashboard/web/styles.css +207 -0
  88. procesio_cli/registry.py +370 -0
  89. procesio_cli/scripts/build-router.py +249 -0
  90. procesio_cli/scripts/build-tool-skill.py +202 -0
  91. procesio_cli/scripts/check-requirements.py +131 -0
  92. procesio_cli/scripts/check-skill-governance.py +174 -0
  93. procesio_cli/scripts/evaluate-skill-routing.py +217 -0
  94. procesio_cli/scripts/evaluate-skills.py +316 -0
  95. procesio_cli/scripts/get-skill.py +122 -0
  96. procesio_cli/scripts/list-skills.py +68 -0
  97. procesio_cli/scripts/list-tools.py +73 -0
  98. procesio_cli/scripts/run-agent.py +59 -0
  99. procesio_cli/scripts/run-tool.py +123 -0
  100. procesio_cli/scripts/secret_scan.py +584 -0
  101. procesio_cli/scripts/set-credential.py +126 -0
  102. procesio_cli/scripts/validate-skills.py +530 -0
  103. procesio_cli/skills/PORTFOLIO.md +134 -0
  104. procesio_cli/skills/__init__.py +6 -0
  105. procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
  106. procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
  107. procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
  108. procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
  109. procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
  110. procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
  111. procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
  112. procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
  113. procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
  114. procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
  115. procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
  116. procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
  117. procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
  118. procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
  119. procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
  120. procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
  121. procesio_cli/skills/evals/baseline-catalog.json +14 -0
  122. procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
  123. procesio_cli/skills/evals/baseline.json +37 -0
  124. procesio_cli/skills/evals/behavioral.json +367 -0
  125. procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
  126. procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
  127. procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
  128. procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
  129. procesio_cli/skills/evals/routing.json +363 -0
  130. procesio_cli/skills/evals/validation-baseline.json +4 -0
  131. procesio_cli/skills/procesio-cli/SKILL.md +134 -0
  132. procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
  133. procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
  134. procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
  135. procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
  136. procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
  137. procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
  138. procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
  139. procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
  140. procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
  141. procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
  142. procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
  143. procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
  144. procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
  145. procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
  146. procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
  147. procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
  148. procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
  149. procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
  150. procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
  151. procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
  152. procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
  153. procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
  154. procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
  155. procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
  156. procesio_cli/skills/procesio-setup/SKILL.md +180 -0
  157. procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
  158. procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
  159. procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
  160. procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
  161. procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
  162. procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
  163. procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
  164. procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
  165. procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
  166. procesio_cli/skills/tests/__init__.py +0 -0
  167. procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
  168. procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
  169. procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
  170. procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
  171. procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
  172. procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
  173. procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
  174. procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
  175. procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
  176. procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
  177. procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
  178. procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
  179. procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
  180. procesio_cli/skills/tests/test_skill_routing.py +74 -0
  181. procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
  182. procesio_cli/skills/tests/test_validate_skills.py +115 -0
  183. procesio_cli/tools/__init__.py +0 -0
  184. procesio_cli/tools/_lib/README.md +119 -0
  185. procesio_cli/tools/_lib/__init__.py +0 -0
  186. procesio_cli/tools/_lib/accounting.py +120 -0
  187. procesio_cli/tools/_lib/contacts.py +544 -0
  188. procesio_cli/tools/_lib/creds.py +83 -0
  189. procesio_cli/tools/_lib/creds_backends.py +578 -0
  190. procesio_cli/tools/_lib/dbprofiles.py +147 -0
  191. procesio_cli/tools/_lib/dbquery.py +286 -0
  192. procesio_cli/tools/_lib/dbschema.py +225 -0
  193. procesio_cli/tools/_lib/io.py +54 -0
  194. procesio_cli/tools/_lib/manifest.py +297 -0
  195. procesio_cli/tools/_lib/skill_release.py +127 -0
  196. procesio_cli/tools/_lib/skill_resources.py +118 -0
  197. procesio_cli/tools/_lib/userdata.py +228 -0
  198. procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
  199. procesio_cli/tools/_lib/webserialize/admin.py +61 -0
  200. procesio_cli/tools/_lib/webserialize/client.py +264 -0
  201. procesio_cli/tools/_lib/webserialize/config.py +96 -0
  202. procesio_cli/tools/_lib/webserialize/errors.py +27 -0
  203. procesio_cli/tools/_lib/webserialize/framing.py +45 -0
  204. procesio_cli/tools/_lib/webserialize/registry.py +47 -0
  205. procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
  206. procesio_cli/tools/_lib/webserialize/server.py +510 -0
  207. procesio_cli/tools/_lib/websession.py +194 -0
  208. procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
  209. procesio_cli/tools/connector-builder/README.md +101 -0
  210. procesio_cli/tools/connector-builder/SKILL.md +248 -0
  211. procesio_cli/tools/connector-builder/__init__.py +7 -0
  212. procesio_cli/tools/connector-builder/actiondef.py +24 -0
  213. procesio_cli/tools/connector-builder/client.py +251 -0
  214. procesio_cli/tools/connector-builder/errors.py +44 -0
  215. procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
  216. procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
  217. procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
  218. procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
  219. procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
  220. procesio_cli/tools/connector-builder/handlers/common.py +104 -0
  221. procesio_cli/tools/connector-builder/handlers/files.py +111 -0
  222. procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
  223. procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
  224. procesio_cli/tools/connector-builder/main.py +94 -0
  225. procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
  226. procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
  227. procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
  228. procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
  229. procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
  230. procesio_cli/tools/connector-builder/tool.yaml +671 -0
  231. procesio_cli/tools/framework-map/.gitattributes +2 -0
  232. procesio_cli/tools/framework-map/README.md +98 -0
  233. procesio_cli/tools/framework-map/SKILL.md +30 -0
  234. procesio_cli/tools/framework-map/app.js +188 -0
  235. procesio_cli/tools/framework-map/fm_builder.py +476 -0
  236. procesio_cli/tools/framework-map/fm_catalog.py +19 -0
  237. procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
  238. procesio_cli/tools/framework-map/fm_strings.py +101 -0
  239. procesio_cli/tools/framework-map/main.py +95 -0
  240. procesio_cli/tools/framework-map/styles.css +214 -0
  241. procesio_cli/tools/framework-map/tests/conftest.py +33 -0
  242. procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
  243. procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
  244. procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
  245. procesio_cli/tools/framework-map/tool.yaml +61 -0
  246. procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
  247. procesio_cli/tools/mysql/README.md +196 -0
  248. procesio_cli/tools/mysql/SKILL.md +37 -0
  249. procesio_cli/tools/mysql/__init__.py +0 -0
  250. procesio_cli/tools/mysql/connection.py +191 -0
  251. procesio_cli/tools/mysql/main.py +487 -0
  252. procesio_cli/tools/mysql/profiles.template.json +1 -0
  253. procesio_cli/tools/mysql/schema.py +434 -0
  254. procesio_cli/tools/mysql/tests/__init__.py +0 -0
  255. procesio_cli/tools/mysql/tests/conftest.py +21 -0
  256. procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
  257. procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
  258. procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
  259. procesio_cli/tools/mysql/tool.yaml +112 -0
  260. procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
  261. procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
  262. procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
  263. procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
  264. procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
  265. procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
  266. procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
  267. procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
  268. procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
  269. procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
  270. procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
  271. procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
  272. procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
  273. procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
  274. procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
  275. procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
  276. procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
  277. procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
  278. procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
  279. procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
  280. procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
  281. procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
  282. procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
  283. procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
  284. procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
  285. procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
  286. procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
  287. procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
  288. procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
  289. procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
  290. procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
  291. procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
  292. procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
  293. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
  294. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
  295. procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
  296. procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
  297. procesio_cli/tools/procesio/README.md +341 -0
  298. procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
  299. procesio_cli/tools/procesio/SKILL.md +694 -0
  300. procesio_cli/tools/procesio/__init__.py +1 -0
  301. procesio_cli/tools/procesio/actiondef.py +27 -0
  302. procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
  303. procesio_cli/tools/procesio/auth.py +354 -0
  304. procesio_cli/tools/procesio/autogen.py +121 -0
  305. procesio_cli/tools/procesio/client.py +355 -0
  306. procesio_cli/tools/procesio/config.py +96 -0
  307. procesio_cli/tools/procesio/data/endpoints.json +2901 -0
  308. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
  309. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
  310. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
  311. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
  312. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
  313. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
  314. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
  315. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
  316. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
  317. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
  318. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
  319. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
  320. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
  321. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
  322. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
  323. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
  324. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
  325. procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
  326. procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
  327. procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
  328. procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
  329. procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
  330. procesio_cli/tools/procesio/dto/__init__.py +13 -0
  331. procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
  332. procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
  333. procesio_cli/tools/procesio/dto/credential/description.md +193 -0
  334. procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
  335. procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
  336. procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
  337. procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
  338. procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
  339. procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
  340. procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
  341. procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
  342. procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
  343. procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
  344. procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
  345. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
  346. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
  347. procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
  348. procesio_cli/tools/procesio/dto/document/builder.py +193 -0
  349. procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
  350. procesio_cli/tools/procesio/dto/document/description.md +124 -0
  351. procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
  352. procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
  353. procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
  354. procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
  355. procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
  356. procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
  357. procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
  358. procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
  359. procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
  360. procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
  361. procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
  362. procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
  363. procesio_cli/tools/procesio/dto/form/description.md +346 -0
  364. procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
  365. procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
  366. procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
  367. procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
  368. procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
  369. procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
  370. procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
  371. procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
  372. procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
  373. procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
  374. procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
  375. procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
  376. procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
  377. procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
  378. procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
  379. procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
  380. procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
  381. procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
  382. procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
  383. procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
  384. procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
  385. procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
  386. procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
  387. procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
  388. procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
  389. procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
  390. procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
  391. procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
  392. procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
  393. procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
  394. procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
  395. procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
  396. procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
  397. procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
  398. procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
  399. procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
  400. procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
  401. procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
  402. procesio_cli/tools/procesio/dto/framework.py +125 -0
  403. procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
  404. procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
  405. procesio_cli/tools/procesio/dto/process/description.md +218 -0
  406. procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
  407. procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
  408. procesio_cli/tools/procesio/dto/process/naming.py +305 -0
  409. procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
  410. procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
  411. procesio_cli/tools/procesio/dto/refdata.py +87 -0
  412. procesio_cli/tools/procesio/dto/registry.py +27 -0
  413. procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
  414. procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
  415. procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
  416. procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
  417. procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
  418. procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
  419. procesio_cli/tools/procesio/environments.py +264 -0
  420. procesio_cli/tools/procesio/errors.py +166 -0
  421. procesio_cli/tools/procesio/flowmodel/README.md +37 -0
  422. procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
  423. procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
  424. procesio_cli/tools/procesio/flowmodel/families.py +34 -0
  425. procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
  426. procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
  427. procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
  428. procesio_cli/tools/procesio/flowmodel/model.py +82 -0
  429. procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
  430. procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
  431. procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
  432. procesio_cli/tools/procesio/form_code_keys.py +50 -0
  433. procesio_cli/tools/procesio/formlint.py +292 -0
  434. procesio_cli/tools/procesio/gen_manifest.py +118 -0
  435. procesio_cli/tools/procesio/handlers/__init__.py +1 -0
  436. procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
  437. procesio_cli/tools/procesio/handlers/catalog.py +147 -0
  438. procesio_cli/tools/procesio/handlers/common.py +90 -0
  439. procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
  440. procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
  441. procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
  442. procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
  443. procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
  444. procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
  445. procesio_cli/tools/procesio/handlers/files.py +141 -0
  446. procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
  447. procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
  448. procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
  449. procesio_cli/tools/procesio/handlers/form_code.py +277 -0
  450. procesio_cli/tools/procesio/handlers/form_element.py +199 -0
  451. procesio_cli/tools/procesio/handlers/form_events.py +441 -0
  452. procesio_cli/tools/procesio/handlers/form_update.py +270 -0
  453. procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
  454. procesio_cli/tools/procesio/handlers/generic.py +135 -0
  455. procesio_cli/tools/procesio/handlers/layout.py +137 -0
  456. procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
  457. procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
  458. procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
  459. procesio_cli/tools/procesio/handlers/processes.py +416 -0
  460. procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
  461. procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
  462. procesio_cli/tools/procesio/handlers/schedules.py +320 -0
  463. procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
  464. procesio_cli/tools/procesio/handlers/transport.py +463 -0
  465. procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
  466. procesio_cli/tools/procesio/layout/README.md +196 -0
  467. procesio_cli/tools/procesio/layout/__init__.py +11 -0
  468. procesio_cli/tools/procesio/layout/adapter.py +736 -0
  469. procesio_cli/tools/procesio/layout/cycles.py +186 -0
  470. procesio_cli/tools/procesio/layout/dispatch.py +39 -0
  471. procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
  472. procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
  473. procesio_cli/tools/procesio/layout/elk/package.json +11 -0
  474. procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
  475. procesio_cli/tools/procesio/layout/engine.py +1311 -0
  476. procesio_cli/tools/procesio/layout/report.py +187 -0
  477. procesio_cli/tools/procesio/main.py +179 -0
  478. procesio_cli/tools/procesio/profiles.py +193 -0
  479. procesio_cli/tools/procesio/reliability.py +193 -0
  480. procesio_cli/tools/procesio/sqlformat.py +167 -0
  481. procesio_cli/tools/procesio/swagger.py +51 -0
  482. procesio_cli/tools/procesio/tests/__init__.py +0 -0
  483. procesio_cli/tools/procesio/tests/conftest.py +129 -0
  484. procesio_cli/tools/procesio/tests/test_auth.py +200 -0
  485. procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
  486. procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
  487. procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
  488. procesio_cli/tools/procesio/tests/test_client.py +114 -0
  489. procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
  490. procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
  491. procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
  492. procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
  493. procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
  494. procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
  495. procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
  496. procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
  497. procesio_cli/tools/procesio/tests/test_dto.py +734 -0
  498. procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
  499. procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
  500. procesio_cli/tools/procesio/tests/test_environments.py +214 -0
  501. procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
  502. procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
  503. procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
  504. procesio_cli/tools/procesio/tests/test_files.py +72 -0
  505. procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
  506. procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
  507. procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
  508. procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
  509. procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
  510. procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
  511. procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
  512. procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
  513. procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
  514. procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
  515. procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
  516. procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
  517. procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
  518. procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
  519. procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
  520. procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
  521. procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
  522. procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
  523. procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
  524. procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
  525. procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
  526. procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
  527. procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
  528. procesio_cli/tools/procesio/tests/test_guards.py +110 -0
  529. procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
  530. procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
  531. procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
  532. procesio_cli/tools/procesio/tests/test_layout.py +574 -0
  533. procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
  534. procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
  535. procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
  536. procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
  537. procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
  538. procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
  539. procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
  540. procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
  541. procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
  542. procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
  543. procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
  544. procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
  545. procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
  546. procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
  547. procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
  548. procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
  549. procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
  550. procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
  551. procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
  552. procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
  553. procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
  554. procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
  555. procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
  556. procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
  557. procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
  558. procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
  559. procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
  560. procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
  561. procesio_cli/tools/procesio/tests/test_transport.py +147 -0
  562. procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
  563. procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
  564. procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
  565. procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
  566. procesio_cli/tools/procesio/tool.yaml +12486 -0
  567. procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
  568. procesio_cli/tools/sqlserver/README.md +192 -0
  569. procesio_cli/tools/sqlserver/SKILL.md +37 -0
  570. procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
  571. procesio_cli/tools/sqlserver/__init__.py +0 -0
  572. procesio_cli/tools/sqlserver/connection.py +242 -0
  573. procesio_cli/tools/sqlserver/main.py +521 -0
  574. procesio_cli/tools/sqlserver/profiles.template.json +1 -0
  575. procesio_cli/tools/sqlserver/schema.py +600 -0
  576. procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
  577. procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
  578. procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
  579. procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
  580. procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
  581. procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
  582. procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
  583. procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
  584. procesio_cli/tools/sqlserver/tool.yaml +123 -0
  585. procesio_cli/tools/web/README.md +381 -0
  586. procesio_cli/tools/web/SKILL.md +37 -0
  587. procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
  588. procesio_cli/tools/web/__init__.py +21 -0
  589. procesio_cli/tools/web/actiondef.py +24 -0
  590. procesio_cli/tools/web/api.py +444 -0
  591. procesio_cli/tools/web/brokered.py +107 -0
  592. procesio_cli/tools/web/driver.py +839 -0
  593. procesio_cli/tools/web/drivercontract.py +44 -0
  594. procesio_cli/tools/web/errors.py +54 -0
  595. procesio_cli/tools/web/handlers/__init__.py +1 -0
  596. procesio_cli/tools/web/handlers/archive.py +367 -0
  597. procesio_cli/tools/web/handlers/browse.py +182 -0
  598. procesio_cli/tools/web/handlers/contacts.py +74 -0
  599. procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
  600. procesio_cli/tools/web/main.py +128 -0
  601. procesio_cli/tools/web/sessions.py +253 -0
  602. procesio_cli/tools/web/steps.py +162 -0
  603. procesio_cli/tools/web/tests/__init__.py +0 -0
  604. procesio_cli/tools/web/tests/conftest.py +197 -0
  605. procesio_cli/tools/web/tests/test_api.py +330 -0
  606. procesio_cli/tools/web/tests/test_archive.py +190 -0
  607. procesio_cli/tools/web/tests/test_brokered.py +138 -0
  608. procesio_cli/tools/web/tests/test_dispatch.py +132 -0
  609. procesio_cli/tools/web/tests/test_errors.py +60 -0
  610. procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
  611. procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
  612. procesio_cli/tools/web/tests/test_sessions.py +145 -0
  613. procesio_cli/tools/web/tests/test_steps.py +210 -0
  614. procesio_cli/tools/web/tool.yaml +184 -0
  615. procesio_cli/tools/xlsx/README.md +34 -0
  616. procesio_cli/tools/xlsx/SKILL.md +28 -0
  617. procesio_cli/tools/xlsx/__init__.py +0 -0
  618. procesio_cli/tools/xlsx/main.py +129 -0
  619. procesio_cli/tools/xlsx/reader.py +91 -0
  620. procesio_cli/tools/xlsx/tests/__init__.py +0 -0
  621. procesio_cli/tools/xlsx/tests/conftest.py +39 -0
  622. procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
  623. procesio_cli/tools/xlsx/tool.yaml +30 -0
  624. procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
  625. procesio_cli/webplatform/aat_mcp/README.md +78 -0
  626. procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
  627. procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
  628. procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
  629. procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
  630. procesio_cli/webplatform/aat_mcp/gate.py +68 -0
  631. procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
  632. procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
  633. procesio_cli/webplatform/aat_mcp/server.py +306 -0
  634. procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
  635. procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
  636. procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
  637. procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
  638. procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
  639. procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
  640. procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
  641. procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
  642. procesio_cli-0.1.1.dist-info/METADATA +467 -0
  643. procesio_cli-0.1.1.dist-info/RECORD +647 -0
  644. procesio_cli-0.1.1.dist-info/WHEEL +4 -0
  645. procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
  646. procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
  647. procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
@@ -0,0 +1,372 @@
1
+ # The PUBLISHED chat surface: exactly which PROCESIO operations are offered to a
2
+ # general chat client, under which names, with which public wording.
3
+ #
4
+ # WHY THIS FILE EXISTS. The registry is the source of truth for what a tool IS
5
+ # (Hard rule 3) and server.py rightly tracks it - that surface dispatches whatever
6
+ # exists. A directory listing is a different kind of thing: a contract with people
7
+ # who did not write the manifests. If the published list were derived from them,
8
+ # renaming an action would silently remove a published tool, adding an argument
9
+ # would silently reshape a published schema, and a new tool would silently appear
10
+ # in a surface someone had reviewed. All three are invisible at the moment they
11
+ # happen, which is the worst property a published contract can have.
12
+ #
13
+ # So this file is the source of truth for ONE fact no manifest records: which
14
+ # operations we stand behind publicly, and how they are described to a stranger.
15
+ # It holds no behaviour. When it disagrees with the registry, CI fails
16
+ # (tests/test_chat_surface.py) - deliberately, and at build time.
17
+ #
18
+ # CURATION RULES, applied when adding an entry:
19
+ # - It serves creating something in PROCESIO, or seeing what you created.
20
+ # - It is nameable. A tool called "run any action" tells a model nothing and
21
+ # reads to a reviewer as an unbounded surface.
22
+ # - Its failure mode is legible. An action that can hang a client does not go
23
+ # here whatever else it does (see `excluded:` at the bottom).
24
+ # - `description` is written for someone who has never used PROCESIO. It is NOT
25
+ # copied from the manifest: manifest text addresses an operator who already
26
+ # knows the platform, and generating it from there would reintroduce exactly
27
+ # the coupling this file removes.
28
+ #
29
+ # read_only: true means the call changes nothing, anywhere. A client may run it
30
+ # without asking. It is NOT the same question as the reversibility gate, which
31
+ # asks whether a change can be undone - process-create is reversible and is
32
+ # emphatically not read-only. The gate is still enforced: a conformance test
33
+ # asserts read_only entries are also reversible, so a mislabel cannot widen what
34
+ # runs unattended.
35
+
36
+ # Semver, and the contract this number describes is the published tool list: names,
37
+ # schemas and wording. Adding a tool is a minor bump, removing or renaming one or
38
+ # tightening a schema is a major bump, and rewording a description is a patch. It is
39
+ # NOT the package version - server.json aligns that with the release - because a
40
+ # client pins to a surface and a release can ship with the surface unchanged.
41
+ surface_version: "0.1.0"
42
+
43
+ # A tool result goes straight into a model's context, so an unbounded one is a
44
+ # context leak rather than a large answer. Results over the cap are truncated and
45
+ # carry a note telling the caller how to narrow the request, which is more useful
46
+ # to a model than a silently short list. Per-tool `max_response_bytes` overrides.
47
+ limits:
48
+ max_response_bytes: 60000
49
+
50
+ # Arguments every PROCESIO action accepts and this surface exposes by default.
51
+ # `profile` is deliberately NOT among them: it selects a local credential profile,
52
+ # which is an installation detail rather than something a chat user should choose.
53
+ common_args:
54
+ workspace_id:
55
+ flag: workspace-id
56
+ type: string
57
+ description: "Workspace to act in. Omit to use the default workspace."
58
+ environment:
59
+ flag: environment
60
+ type: string
61
+ description: "Named environment, e.g. Internal-QA. Omit for the default."
62
+
63
+ tools:
64
+
65
+ # --- Pillar 1: Process Designer ------------------------------------------
66
+ - name: procesio_list_processes
67
+ pillar: process
68
+ title: List PROCESIO processes
69
+ description: >
70
+ List the automation processes in a PROCESIO workspace, newest first.
71
+ Use this to find the id of a process before running, editing or validating it.
72
+ target: {tool: procesio, action: list-processes}
73
+ read_only: true
74
+ common: [workspace_id, environment]
75
+ args:
76
+ - {flag: search, type: string, description: "Only processes whose name matches this text."}
77
+ - {flag: page, type: integer, description: "1-based page number."}
78
+ - {flag: page-size, type: integer, expose: page_size, description: "Processes per page."}
79
+
80
+ - name: procesio_create_process
81
+ pillar: process
82
+ title: Create a PROCESIO process
83
+ description: >
84
+ Create a new automation process from a JSON definition of its steps and
85
+ connections. Returns the new process id. Pass dry_run to see what would be
86
+ built without creating anything.
87
+ target: {tool: procesio, action: process-create}
88
+ read_only: false
89
+ common: [workspace_id, environment]
90
+ args:
91
+ - {flag: config, type: string, description: "The process definition, as a JSON object."}
92
+ - {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be created; create nothing."}
93
+
94
+ - name: procesio_edit_process
95
+ pillar: process
96
+ title: Edit a PROCESIO process
97
+ description: >
98
+ Change an existing process - add, retarget or reconfigure its steps. Pass
99
+ dry_run first to see the diff. Removing steps additionally requires
100
+ allow_remove, so a partial definition cannot silently delete work.
101
+ target: {tool: procesio, action: process-edit}
102
+ read_only: false
103
+ common: [workspace_id, environment]
104
+ args:
105
+ - {flag: id, type: string, required: true, description: "The process id."}
106
+ - {flag: config, type: string, description: "The changes, as a JSON object."}
107
+ - {flag: dry-run, type: boolean, expose: dry_run, description: "Report the diff; change nothing."}
108
+ - {flag: allow-remove, type: boolean, expose: allow_remove, description: "Permit this edit to delete steps."}
109
+
110
+ - name: procesio_validate_process
111
+ pillar: process
112
+ title: Validate a PROCESIO process
113
+ description: >
114
+ Check a process for errors without running it - unconnected steps, missing
115
+ required inputs, broken references. Do this before running a process you
116
+ just built. Validating is not the same as running: a process can validate
117
+ and still fail at execution.
118
+ target: {tool: procesio, action: process-validate}
119
+ read_only: true
120
+ common: [workspace_id, environment]
121
+ args:
122
+ - {flag: id, type: string, required: true, description: "The process id."}
123
+
124
+ - name: procesio_run_process
125
+ pillar: process
126
+ title: Run a PROCESIO process
127
+ description: >
128
+ Execute a process and return its run id. A process does real work - it can
129
+ send mail, write to databases and call external systems - so this is never
130
+ run unattended. Follow it with procesio_get_run_status and procesio_get_run_output.
131
+ target: {tool: procesio, action: run-process}
132
+ read_only: false
133
+ common: [workspace_id, environment]
134
+ args:
135
+ - {flag: id, type: string, required: true, description: "The process id."}
136
+ - {flag: payload, type: string, description: "Input values for the run, as a JSON object."}
137
+ - {flag: synchronous, type: boolean, description: "Wait for the run to finish instead of returning immediately."}
138
+ - {flag: timeout, type: integer, description: "Seconds to wait when synchronous."}
139
+
140
+ - name: procesio_get_run_status
141
+ pillar: process
142
+ title: Check a PROCESIO run
143
+ description: >
144
+ Report whether a run is still going, finished or failed, and which step it
145
+ reached. Takes the run id returned by procesio_run_process.
146
+ target: {tool: procesio, action: get-instance-status}
147
+ read_only: true
148
+ common: [workspace_id, environment]
149
+ args:
150
+ - {flag: id, type: string, required: true, description: "The run id."}
151
+ - {flag: actions, type: boolean, description: "Include per-step detail."}
152
+
153
+ - name: procesio_get_run_output
154
+ pillar: process
155
+ title: Read a PROCESIO run output
156
+ description: >
157
+ Return the values a finished run produced. Only meaningful once the run has
158
+ completed - check with procesio_get_run_status first.
159
+ target: {tool: procesio, action: get-instance-output}
160
+ read_only: true
161
+ common: [workspace_id, environment]
162
+ args:
163
+ - {flag: id, type: string, required: true, description: "The run id."}
164
+
165
+ - name: procesio_tidy_process_layout
166
+ pillar: process
167
+ title: Tidy a process canvas
168
+ description: >
169
+ Re-arrange a process's steps on the design canvas so it is readable. Changes
170
+ only the visual layout, never what the process does. Worth running after
171
+ building a process through the API, which places steps without arranging them.
172
+ target: {tool: procesio, action: relayout-process}
173
+ read_only: false
174
+ common: [workspace_id, environment]
175
+ args:
176
+ - {flag: id, type: string, required: true, description: "The process id."}
177
+ - {flag: dry-run, type: boolean, expose: dry_run, description: "Report the new layout; change nothing."}
178
+
179
+ # --- Pillar 2: Form Designer ---------------------------------------------
180
+ - name: procesio_list_forms
181
+ pillar: form
182
+ title: List PROCESIO forms
183
+ description: >
184
+ List the forms in a workspace. A form is the screen a person fills in to
185
+ start or feed a process.
186
+ target: {tool: procesio, action: form-list}
187
+ read_only: true
188
+ common: [workspace_id, environment]
189
+ args: []
190
+
191
+ - name: procesio_get_form
192
+ pillar: form
193
+ title: Read a PROCESIO form
194
+ description: >
195
+ Return a form's definition - its fields, their types and how they are laid out.
196
+ target: {tool: procesio, action: form-get}
197
+ read_only: true
198
+ common: [workspace_id, environment]
199
+ args:
200
+ - {flag: id, type: string, required: true, description: "The form id."}
201
+
202
+ - name: procesio_create_form
203
+ pillar: form
204
+ title: Create a PROCESIO form
205
+ description: >
206
+ Create a form from a JSON definition. Returns the new form id. Add fields
207
+ afterwards with procesio_add_form_field.
208
+ target: {tool: procesio, action: form-create}
209
+ read_only: false
210
+ common: [workspace_id, environment]
211
+ args:
212
+ - {flag: config, type: string, description: "The form definition, as a JSON object."}
213
+ - {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be created; create nothing."}
214
+
215
+ - name: procesio_add_form_field
216
+ pillar: form
217
+ title: Add fields to a PROCESIO form
218
+ description: >
219
+ Add one or more input fields to an existing form.
220
+ target: {tool: procesio, action: form-add-element}
221
+ read_only: false
222
+ common: [workspace_id, environment]
223
+ args:
224
+ - {flag: id, type: string, required: true, description: "The form id."}
225
+ - {flag: elements, type: string, description: "The fields to add, as a JSON array."}
226
+ - {flag: parent, type: string, description: "Id of the container to add them into."}
227
+ - {flag: dry-run, type: boolean, expose: dry_run, description: "Report what would be added; add nothing."}
228
+
229
+ # --- Pillar 3: AI Connector Builder --------------------------------------
230
+ - name: procesio_build_connector
231
+ pillar: connector
232
+ title: Build a PROCESIO connector from API docs
233
+ description: >
234
+ Start building a custom PROCESIO connector from an API's documentation. Give
235
+ it the docs URL and what you need the connector to do; it reads the docs,
236
+ asks what it still needs, and generates a connector package. Returns a build
237
+ id - follow it with procesio_get_connector_build.
238
+ target: {tool: connector-builder, action: create-build}
239
+ read_only: false
240
+ common: []
241
+ args:
242
+ - {flag: api-url, type: string, expose: api_url, description: "URL of the API documentation to read."}
243
+ - {flag: api-docs-text, type: string, expose: api_docs_text, description: "The documentation itself, if there is no public URL."}
244
+ - {flag: user-requirements, type: string, expose: user_requirements, description: "What the connector needs to do, in plain language."}
245
+
246
+ - name: procesio_list_connector_builds
247
+ pillar: connector
248
+ title: List connector builds
249
+ description: >
250
+ List connector builds and their current stage.
251
+ target: {tool: connector-builder, action: list-builds}
252
+ read_only: true
253
+ common: []
254
+ args:
255
+ - {flag: status, type: string, description: "Only builds in this stage."}
256
+ - {flag: page, type: integer, description: "1-based page number."}
257
+
258
+ - name: procesio_get_connector_build
259
+ pillar: connector
260
+ title: Check a connector build
261
+ description: >
262
+ Report a build's stage, what it is waiting on, and whether a connector
263
+ package is ready to download.
264
+ target: {tool: connector-builder, action: get-build}
265
+ read_only: true
266
+ common: []
267
+ args:
268
+ - {flag: build-id, type: string, expose: build_id, required: true, description: "The build id."}
269
+
270
+ - name: procesio_download_connector
271
+ pillar: connector
272
+ title: Download a built connector
273
+ description: >
274
+ Save a finished build's connector package to a local file, ready to install
275
+ with procesio_install_connector.
276
+ target: {tool: connector-builder, action: download-artifact}
277
+ read_only: false
278
+ common: []
279
+ args:
280
+ - {flag: build-id, type: string, expose: build_id, required: true, description: "The build id."}
281
+ - {flag: out, type: string, required: true, description: "Local path to write the package to."}
282
+
283
+ - name: procesio_install_connector
284
+ pillar: connector
285
+ title: Install a connector into PROCESIO
286
+ description: >
287
+ Install a connector package into a workspace, after which its operations
288
+ appear as steps you can use when building a process.
289
+ target: {tool: procesio, action: customaction-upload}
290
+ read_only: false
291
+ common: [workspace_id, environment]
292
+ args:
293
+ - {flag: file, type: string, required: true, description: "Path to the connector package."}
294
+ - {flag: name, type: string, description: "Name to show in the designer."}
295
+
296
+ - name: procesio_list_connectors
297
+ pillar: connector
298
+ title: List installed connectors
299
+ description: >
300
+ List the connectors installed in a workspace - the extra step types available
301
+ when building a process.
302
+ target: {tool: procesio, action: customaction-list}
303
+ read_only: true
304
+ common: [workspace_id, environment]
305
+ args: []
306
+
307
+ # --- Workspace ------------------------------------------------------------
308
+ - name: procesio_list_workspaces
309
+ pillar: workspace
310
+ title: List PROCESIO workspaces
311
+ description: >
312
+ List the workspaces this account can reach. A workspace holds its own
313
+ processes, forms, connectors and credentials.
314
+ target: {tool: procesio, action: list-workspaces}
315
+ read_only: true
316
+ common: [workspace_id, environment]
317
+ args: []
318
+
319
+ - name: procesio_list_environments
320
+ pillar: workspace
321
+ title: List PROCESIO environments
322
+ description: >
323
+ List the configured environments, so a call can be pointed at the right one.
324
+ target: {tool: procesio, action: list-environments}
325
+ read_only: true
326
+ common: []
327
+ args: []
328
+
329
+ - name: procesio_test_credential
330
+ pillar: workspace
331
+ title: Test a PROCESIO credential
332
+ description: >
333
+ Check that a stored credential can still reach the system it belongs to.
334
+ Answers whether a connection is working without running a whole process.
335
+ target: {tool: procesio, action: credential-test}
336
+ read_only: true
337
+ common: [workspace_id, environment]
338
+ args:
339
+ - {flag: config, type: string, description: "The credential to test, as a JSON object."}
340
+
341
+ # Operations kept OUT of the published surface, with the reason. This list is part
342
+ # of the contract: it is where a future "why isn't X here?" gets answered, and it
343
+ # stops an exclusion being quietly reversed by someone who assumes it was an oversight.
344
+ excluded:
345
+ - target: "procesio/get-process"
346
+ reason: >
347
+ Prints its JSON and then does not exit. Over stdio that is an unrecoverable
348
+ hang rather than an error, and a chat client has no way to recover from it.
349
+ procesio_list_processes plus procesio_validate_process cover the same need. Revisit only when
350
+ the action is proven to terminate.
351
+ - target: "procesio/*-delete"
352
+ reason: >
353
+ Irreversible with a data-loss blast class. A first public surface has no
354
+ deletion in it; the full surface still reaches these behind confirmation.
355
+ There is a second reason, and it is the stronger one: deleting a resource with a
356
+ large run history takes longer server-side than the client's read timeout, so the
357
+ call returns a transport error while the delete goes on to complete. Retrying
358
+ returns the same error, which reads like a permanent failure and is not one. A
359
+ caller therefore cannot tell from the response whether the deletion happened - and
360
+ a tool whose failure signal does not distinguish "nothing happened" from "it is
361
+ done" has no safe place on a surface a model drives. Confirm by listing the
362
+ resource, never from the error. (Deletes of credentials and Data Stores return
363
+ promptly; it is the instance history that costs the time.)
364
+ - target: "procesio/<generated REST passthroughs>"
365
+ reason: >
366
+ Several hundred generated get-/post-/put-/delete- actions mirroring raw API
367
+ endpoints. They are why the freeform surface exists. Publishing them would
368
+ make the tool list unreadable and turn the schema into the API reference.
369
+ - target: "procesio/profile (argument)"
370
+ reason: >
371
+ Selects a local credential profile. An installation detail, not a choice a
372
+ chat user should be asked to make. The default profile is used.
@@ -0,0 +1,68 @@
1
+ """Reversibility gate for the MCP bridge - code-authoritative, pre-execution.
2
+
3
+ Reuses the ONE shared definition of "irreversible" (agents/_lib/reversibility) that
4
+ already guards `orchestrator drive` and the `deputy`, so the web platform cannot
5
+ drift into a second policy. The gate decides which execution PATH an action takes:
6
+
7
+ reversible -> runs on `run_tool` / `run_agent`
8
+ irreversible -> refused there; must go through `run_tool_confirmed` /
9
+ `run_agent_confirmed`, which opencode marks `ask` so a HUMAN
10
+ approves the click. A model cannot forge that approval, and it
11
+ cannot bypass by choosing the plain tool - the plain tool refuses
12
+ and names the confirmed path. That is the gate being code, not a
13
+ prompt (reversibility.py:1-8).
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import os
18
+ import sys
19
+ from pathlib import Path
20
+
21
+ _REPO = Path(__file__).resolve().parents[2]
22
+ if str(_REPO) not in sys.path:
23
+ sys.path.insert(0, str(_REPO))
24
+
25
+ from agents._lib import reversibility # noqa: E402
26
+
27
+
28
+ def classify(name: str, action: str | None) -> dict:
29
+ """Classify on the tool/agent NAME + the ACTION verb (send-message,
30
+ delete-messages, issue-invoice, post-message). Deliberately NOT on arg values -
31
+ a subject line "please send me..." must not trip the gate; the verb lives in the
32
+ action name for every AAT side effect. Returns reversibility.classify()'s dict:
33
+ {reversible, verb, blast_class, reason}."""
34
+ argv = [action] if action else []
35
+ return reversibility.classify(name, argv)
36
+
37
+
38
+ def deny_irreversible_env() -> bool:
39
+ """Headless/autonomous fail-safe. When AAT_MCP_DENY_IRREVERSIBLE is set, even the
40
+ *_confirmed tools refuse irreversible actions - there is no human in the seat to
41
+ approve. Default (unset) = interactive: opencode's `ask` on the confirmed tools
42
+ is the human gate."""
43
+ return os.environ.get("AAT_MCP_DENY_IRREVERSIBLE", "").strip().lower() in (
44
+ "1", "true", "yes", "on")
45
+
46
+
47
+ def decide(name: str, action: str | None, *, level: str = "L1", scopes=None,
48
+ role: str | None = None, ws_cap: str | None = None) -> dict:
49
+ """Graded autonomy decision for the MCP layer (spec P0.0-07). Clamps the requested
50
+ level by the caller's role and any workspace cap, then applies the code-authoritative
51
+ reversibility gate at the effective level. The `AAT_MCP_DENY_IRREVERSIBLE` fail-safe
52
+ still hard-denies anything that would need human approval.
53
+
54
+ Default (level='L1', no role/cap) reproduces the binary gate exactly: reversible
55
+ runs, irreversible needs approval - so existing callers are unaffected."""
56
+ argv = [action] if action else []
57
+ if role is not None or ws_cap is not None:
58
+ eff = reversibility.clamp(level, role=role, ws_cap=ws_cap)
59
+ else:
60
+ eff = level
61
+ if eff is None:
62
+ return {"allow": False, "needs_confirmation": False, "level": None,
63
+ "reason": "role has no AAT access", "verb": None, "blast_class": None}
64
+ d = reversibility.decide(name, argv, level=eff, scopes=scopes)
65
+ if d.get("needs_confirmation") and deny_irreversible_env():
66
+ return {**d, "allow": False, "needs_confirmation": False,
67
+ "reason": "AAT_MCP_DENY_IRREVERSIBLE: " + d["reason"]}
68
+ return d
@@ -0,0 +1,139 @@
1
+ """aat-mcp over HTTP (MCP Streamable-HTTP transport) - for containers / k8s, where
2
+ opencode connects as a *remote* MCP client. Reuses server.handle() so stdio and HTTP
3
+ share ONE dispatch + the same reversibility gate.
4
+
5
+ Endpoint: a single path (default /mcp). Client POSTs a JSON-RPC message (or a batch);
6
+ the server replies with application/json. Notifications (no id) get 202 Accepted. On
7
+ `initialize` the server issues an Mcp-Session-Id header (not enforced - single local
8
+ tenant). GET returns 405 (no server-initiated stream is needed for these tools).
9
+
10
+ Run: python webplatform/aat_mcp/http_server.py --host 0.0.0.0 --port 8901 [--token X]
11
+ Auth: if --token or AAT_MCP_HTTP_TOKEN is set, requests must send
12
+ `Authorization: Bearer <token>` (use for any non-loopback bind).
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import argparse
17
+ import json
18
+ import os
19
+ import sys
20
+ import uuid
21
+ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
22
+
23
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
24
+ import server # noqa: E402 (reuse handle/TOOLS/dispatch)
25
+
26
+ PATH = "/mcp"
27
+
28
+
29
+ def _make_handler(token: str | None):
30
+ class Handler(BaseHTTPRequestHandler):
31
+ protocol_version = "HTTP/1.1"
32
+
33
+ def log_message(self, fmt, *args): # quiet; logs to stderr only if needed
34
+ sys.stderr.write("[aat-mcp-http] " + (fmt % args) + "\n")
35
+
36
+ def _authed(self) -> bool:
37
+ if not token:
38
+ return True
39
+ got = self.headers.get("Authorization", "")
40
+ return got == f"Bearer {token}"
41
+
42
+ def _send(self, code: int, body: bytes | None, ctype: str = "application/json",
43
+ extra: dict | None = None):
44
+ self.send_response(code)
45
+ if body is not None:
46
+ self.send_header("Content-Type", ctype)
47
+ self.send_header("Content-Length", str(len(body)))
48
+ else:
49
+ self.send_header("Content-Length", "0")
50
+ for k, v in (extra or {}).items():
51
+ self.send_header(k, v)
52
+ self.end_headers()
53
+ if body is not None:
54
+ self.wfile.write(body)
55
+
56
+ def do_GET(self):
57
+ # Health probe convenience + MCP: no server-initiated SSE stream offered.
58
+ if self.path.rstrip("/") in ("", "/health", "/healthz"):
59
+ self._send(200, json.dumps({"ok": True, "server": server.SERVER_INFO,
60
+ "tools": [t["name"] for t in server.TOOLS]}
61
+ ).encode())
62
+ return
63
+ self._send(405, json.dumps({"error": "GET not supported; POST JSON-RPC to "
64
+ + PATH}).encode())
65
+
66
+ def do_POST(self):
67
+ if self.path.rstrip("/") != PATH.rstrip("/"):
68
+ self._send(404, json.dumps({"error": f"unknown path; use {PATH}"}).encode())
69
+ return
70
+ if not self._authed():
71
+ self._send(401, json.dumps({"error": "unauthorized"}).encode())
72
+ return
73
+ length = int(self.headers.get("Content-Length") or 0)
74
+ raw = self.rfile.read(length) if length else b""
75
+ try:
76
+ msg = json.loads(raw.decode("utf-8")) if raw else None
77
+ except ValueError:
78
+ self._send(400, json.dumps(
79
+ {"jsonrpc": "2.0", "id": None,
80
+ "error": {"code": -32700, "message": "parse error"}}).encode())
81
+ return
82
+
83
+ # Server-established user (multi-user platform). The auth gateway sets
84
+ # X-AAT-User; it is NEVER taken from the JSON-RPC body / model output. Bound
85
+ # for this request only, so the tool subprocess runs as that user.
86
+ uid = self.headers.get("X-AAT-User") or None
87
+ _utok = server.bridge.set_user(uid)
88
+ # Same rule for the managed-turn flag: it comes from the CALLER's config (the worker sets
89
+ # it on every turn it drives), never from the JSON-RPC body, so the model cannot clear it
90
+ # to unlock a competing orchestration loop.
91
+ _mtok = server.bridge.set_managed_turn(
92
+ (self.headers.get("X-AAT-Managed-Turn") or "").strip().lower() in ("1", "true", "yes"))
93
+ try:
94
+ batch = msg if isinstance(msg, list) else [msg]
95
+ responses = []
96
+ is_initialize = False
97
+ for m in batch:
98
+ if not isinstance(m, dict):
99
+ continue
100
+ if m.get("method") == "initialize":
101
+ is_initialize = True
102
+ # Legacy era only: modern Streamable HTTP requires the Mcp-Method / Mcp-Name
103
+ # header rules, which this transport does not implement.
104
+ resp = server.handle(m, modern=False)
105
+ if resp is not None:
106
+ responses.append(resp)
107
+ finally:
108
+ server.bridge.reset_managed_turn(_mtok)
109
+ server.bridge.reset_user(_utok)
110
+
111
+ if not responses:
112
+ self._send(202, None) # only notifications
113
+ return
114
+ out = responses if isinstance(msg, list) else responses[0]
115
+ extra = {"Mcp-Session-Id": uuid.uuid4().hex} if is_initialize else None
116
+ self._send(200, json.dumps(out, ensure_ascii=False).encode(), extra=extra)
117
+
118
+ return Handler
119
+
120
+
121
+ def main() -> int:
122
+ ap = argparse.ArgumentParser()
123
+ ap.add_argument("--host", default="127.0.0.1")
124
+ ap.add_argument("--port", type=int, default=8901)
125
+ ap.add_argument("--token", default=os.environ.get("AAT_MCP_HTTP_TOKEN", ""))
126
+ a = ap.parse_args()
127
+ httpd = ThreadingHTTPServer((a.host, a.port), _make_handler(a.token or None))
128
+ sys.stderr.write(f"[aat-mcp-http] listening on http://{a.host}:{a.port}{PATH} "
129
+ f"(auth: {'on' if a.token else 'off'})\n")
130
+ sys.stderr.flush()
131
+ try:
132
+ httpd.serve_forever()
133
+ except KeyboardInterrupt:
134
+ pass
135
+ return 0
136
+
137
+
138
+ if __name__ == "__main__":
139
+ raise SystemExit(main())