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,180 @@
1
+ """Protocol behaviour both MCP surfaces must share: version negotiation and the 2026-07-28 era.
2
+
3
+ Two eras of MCP coexist. Legacy clients (2025-11-25 and earlier) open with an `initialize`
4
+ handshake. Modern clients (2026-07-28) send no handshake at all: every request carries its
5
+ protocol version in `_meta`, and servers MUST implement `server/discover`. A server may serve
6
+ both, which the spec calls dual-era. A modern-only stdio server would fail every legacy
7
+ client, because legacy clients have no way to fall forward, so dual-era is the target here.
8
+
9
+ What these pin, and why each one matters:
10
+
11
+ - **A server must never agree to a version it does not implement.** Both servers used to
12
+ echo whatever a client asked for, including `1999-01-01`. Every MCP revision since
13
+ 2024-11-05 requires the server to answer with a version IT supports. A client that asks
14
+ for `2026-07-28` inside `initialize` (one Claude Code release briefly did) would have been
15
+ told yes, and would then expect fields the server never sends.
16
+ - **Modern results carry `resultType`, and list results carry `ttlMs` and `cacheScope`.**
17
+ - **An unsupported modern version gets `-32022` with the list of supported versions.**
18
+ That code is what tells a dual-era client the server is modern and it should retry,
19
+ rather than fall back to `initialize`.
20
+ - **The HTTP transport stays legacy-only.** Modern Streamable HTTP adds header rules
21
+ (`Mcp-Method`, `Mcp-Name`) that transport does not implement, so advertising the modern
22
+ era over it would claim more than it does.
23
+ """
24
+ from __future__ import annotations
25
+
26
+ import ast
27
+ import hashlib
28
+ import json
29
+ import re
30
+ from pathlib import Path
31
+
32
+ import pytest
33
+
34
+ import chat_server
35
+ import server
36
+
37
+ MODERN = "2026-07-28"
38
+ LEGACY_LATEST = "2025-11-25"
39
+ LEGACY_SUPPORTED = ("2025-11-25", "2025-06-18", "2025-03-26", "2024-11-05")
40
+ META_VERSION = "io.modelcontextprotocol/protocolVersion"
41
+ META_SERVER_INFO = "io.modelcontextprotocol/serverInfo"
42
+ DIGEST_KEY = "com.procesio/toolsDigest"
43
+ HERE = Path(__file__).resolve().parents[1]
44
+
45
+ SURFACES = [pytest.param(server, id="full-surface"), pytest.param(chat_server, id="chat-surface")]
46
+
47
+
48
+ def _legacy(method, params=None, id_=1):
49
+ req = {"jsonrpc": "2.0", "id": id_, "method": method}
50
+ if params is not None:
51
+ req["params"] = params
52
+ return req
53
+
54
+
55
+ def _modern(method, params=None, version=MODERN, id_=1):
56
+ p = dict(params or {})
57
+ p["_meta"] = {META_VERSION: version, "io.modelcontextprotocol/clientInfo": {"name": "t", "version": "0"}}
58
+ return {"jsonrpc": "2.0", "id": id_, "method": method, "params": p}
59
+
60
+
61
+ # --- 1. version negotiation (the echo bug) --------------------------------------------------
62
+
63
+ @pytest.mark.parametrize("surface", SURFACES)
64
+ @pytest.mark.parametrize("asked", ["1999-01-01", "2099-12-31", MODERN])
65
+ def test_initialize_never_agrees_to_a_version_it_does_not_implement(surface, asked):
66
+ got = surface.handle(_legacy("initialize", {"protocolVersion": asked}))["result"]["protocolVersion"]
67
+ assert got != asked, f"agreed to {asked!r}, which this server does not implement over initialize"
68
+ assert got == LEGACY_LATEST
69
+
70
+
71
+ @pytest.mark.parametrize("surface", SURFACES)
72
+ @pytest.mark.parametrize("asked", LEGACY_SUPPORTED)
73
+ def test_initialize_honours_a_legacy_version_it_supports(surface, asked):
74
+ assert surface.handle(_legacy("initialize", {"protocolVersion": asked}))["result"]["protocolVersion"] == asked
75
+
76
+
77
+ @pytest.mark.parametrize("surface", SURFACES)
78
+ def test_initialize_with_no_version_gets_the_latest_legacy_one(surface):
79
+ assert surface.handle(_legacy("initialize", {}))["result"]["protocolVersion"] == LEGACY_LATEST
80
+
81
+
82
+ # --- 3. the 2026-07-28 era -------------------------------------------------------------------
83
+
84
+ @pytest.mark.parametrize("surface", SURFACES)
85
+ def test_server_discover_advertises_the_modern_era(surface):
86
+ r = surface.handle(_modern("server/discover"))["result"]
87
+ assert r["resultType"] == "complete"
88
+ assert r["supportedVersions"] == [MODERN]
89
+ assert "tools" in r["capabilities"]
90
+ assert r["_meta"][META_SERVER_INFO]["name"]
91
+ assert r["ttlMs"] > 0 and r["cacheScope"] == "public"
92
+
93
+
94
+ @pytest.mark.parametrize("surface", SURFACES)
95
+ def test_a_modern_tool_list_carries_the_required_fields_and_the_same_tools(surface):
96
+ modern = surface.handle(_modern("tools/list"))["result"]
97
+ legacy = surface.handle(_legacy("tools/list"))["result"]
98
+ assert modern["resultType"] == "complete"
99
+ assert modern["ttlMs"] > 0 and modern["cacheScope"] == "public"
100
+ assert modern["_meta"][META_SERVER_INFO]["name"]
101
+ assert modern["tools"] == legacy["tools"], "the two eras must publish one contract"
102
+
103
+
104
+ @pytest.mark.parametrize("surface", SURFACES)
105
+ def test_the_legacy_shape_is_unchanged(surface):
106
+ """Legacy clients get exactly what they got before: no modern-only fields."""
107
+ legacy = surface.handle(_legacy("tools/list"))["result"]
108
+ assert set(legacy) == {"tools"}
109
+
110
+
111
+ @pytest.mark.parametrize("surface", SURFACES)
112
+ def test_a_modern_tool_call_is_marked_complete(surface):
113
+ r = surface.handle(_modern("tools/call", {"name": "procesio_not_a_tool", "arguments": {}}))["result"]
114
+ assert r["resultType"] == "complete"
115
+ assert r["isError"] is True
116
+
117
+
118
+ @pytest.mark.parametrize("surface", SURFACES)
119
+ @pytest.mark.parametrize("method", ["tools/list", "server/discover", "tools/call"])
120
+ def test_an_unsupported_modern_version_is_refused_with_what_is_supported(surface, method):
121
+ resp = surface.handle(_modern(method, version="2099-01-01"))
122
+ assert resp["error"]["code"] == -32022
123
+ assert resp["error"]["data"] == {"supported": [MODERN], "requested": "2099-01-01"}
124
+
125
+
126
+ @pytest.mark.parametrize("surface", SURFACES)
127
+ def test_legacy_server_discover_is_still_method_not_found_when_modern_is_off(surface):
128
+ """A plain -32601 is the answer a dual-era client reads as 'legacy server, fall back'.
129
+ A version-gated message here is what made one public MCP server unusable in Claude Code."""
130
+ resp = surface.handle(_modern("server/discover"), modern=False)
131
+ assert resp["error"]["code"] == -32601
132
+
133
+
134
+ def test_the_http_transport_serves_the_legacy_era_only():
135
+ src = (HERE / "http_server.py").read_text(encoding="utf-8")
136
+ assert re.search(r"server\.handle\(\s*m\s*,\s*modern\s*=\s*False\s*\)", src), (
137
+ "http_server.py must call server.handle(m, modern=False): it does not implement the "
138
+ "Streamable HTTP header rules the modern era requires")
139
+
140
+
141
+ # --- 4. a pinnable digest of the published tool surface -------------------------------------
142
+
143
+ def _canonical_digest(tools) -> str:
144
+ raw = json.dumps(tools, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
145
+ return "sha256:" + hashlib.sha256(raw).hexdigest()
146
+
147
+
148
+ def test_the_digest_is_the_documented_canonical_hash():
149
+ import protocol
150
+ tools = chat_server.TOOLS
151
+ assert protocol.tools_digest(tools) == _canonical_digest(tools)
152
+
153
+
154
+ def test_the_published_snapshot_has_the_digest_the_server_reports():
155
+ """The snapshot ships in the public repo and its digest goes into server.json. A client
156
+ or gateway can therefore hash the tool list it actually received and compare it with a
157
+ value the server cannot change after publication. The self-report is a convenience, not
158
+ the control: the spec says self-reported server info must not drive security decisions."""
159
+ snapshot = json.loads((HERE / "chat_surface.snapshot.json").read_text(encoding="utf-8"))
160
+ reported = chat_server.handle(_modern("server/discover"))["result"]["_meta"][DIGEST_KEY]
161
+ assert reported == _canonical_digest(snapshot)
162
+
163
+
164
+ def test_any_change_to_a_tool_changes_the_digest():
165
+ import protocol
166
+ tools = json.loads(json.dumps(chat_server.TOOLS))
167
+ before = protocol.tools_digest(tools)
168
+ tools[0]["description"] += " "
169
+ assert protocol.tools_digest(tools) != before
170
+
171
+
172
+ def test_the_protocol_module_depends_on_nothing_but_the_standard_library():
173
+ tree = ast.parse((HERE / "protocol.py").read_text(encoding="utf-8"))
174
+ names = set()
175
+ for node in ast.walk(tree):
176
+ if isinstance(node, ast.Import):
177
+ names |= {a.name.split(".")[0] for a in node.names}
178
+ elif isinstance(node, ast.ImportFrom) and node.module and node.level == 0:
179
+ names.add(node.module.split(".")[0])
180
+ assert names <= {"__future__", "hashlib", "json", "sys", "typing", "collections"}, names
@@ -0,0 +1,23 @@
1
+ from __future__ import annotations
2
+
3
+ from types import SimpleNamespace
4
+
5
+ import pytest
6
+
7
+ import bridge
8
+ from tools._lib.skill_resources import SkillResourceError
9
+
10
+
11
+ def test_get_skill_exposes_index_and_resource_read(monkeypatch, tmp_path):
12
+ root = tmp_path / "demo"
13
+ (root / "references").mkdir(parents=True)
14
+ (root / "SKILL.md").write_text("---\nname: demo\ndescription: demo\n---\n# Demo\n")
15
+ (root / "references" / "guide.md").write_text("guide", encoding="utf-8")
16
+ monkeypatch.setattr(bridge.registry, "get_skill",
17
+ lambda name: SimpleNamespace(name=name, path=root))
18
+ skill = bridge.get_skill("demo")
19
+ assert skill["resources"]["references"] == ["references/guide.md"]
20
+ resource = bridge.get_skill_resource("demo", "references/guide.md")
21
+ assert resource["resource"]["content"] == "guide"
22
+ with pytest.raises(SkillResourceError):
23
+ bridge.get_skill_resource("demo", "../outside")
@@ -0,0 +1,467 @@
1
+ Metadata-Version: 2.5
2
+ Name: procesio-cli
3
+ Version: 0.1.1
4
+ Summary: Command-line tooling and an AI agent for the PROCESIO automation platform: drive processes, forms, documents and custom actions from a terminal or from an AI coding assistant.
5
+ Project-URL: Homepage, https://procesio.com
6
+ Project-URL: Documentation, https://docs.procesio.com
7
+ Project-URL: Repository, https://github.com/Procesio-Externals/procesio-cli
8
+ Project-URL: Issues, https://github.com/Procesio-Externals/procesio-cli/issues
9
+ Project-URL: Changelog, https://github.com/Procesio-Externals/procesio-cli/blob/main/CHANGELOG.md
10
+ Author: Ringhel TEAM SRL (PROCESIO)
11
+ License: Apache-2.0
12
+ License-File: LICENSE
13
+ License-File: NOTICE
14
+ Keywords: agent,automation,cli,ipaas,low-code,mcp,procesio,workflow
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Environment :: Console
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Intended Audience :: System Administrators
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Software Development :: Build Tools
24
+ Classifier: Topic :: System :: Systems Administration
25
+ Requires-Python: >=3.11
26
+ Requires-Dist: cryptography>=42.0
27
+ Requires-Dist: jsonschema>=4.20
28
+ Requires-Dist: keyring>=24.0
29
+ Requires-Dist: pydantic>=2.5
30
+ Requires-Dist: pyyaml>=6.0
31
+ Requires-Dist: requests>=2.31
32
+ Provides-Extra: browser
33
+ Requires-Dist: beautifulsoup4>=4.12; extra == 'browser'
34
+ Requires-Dist: lxml>=5.0; extra == 'browser'
35
+ Requires-Dist: playwright>=1.60.0; extra == 'browser'
36
+ Requires-Dist: pymupdf>=1.24; extra == 'browser'
37
+ Requires-Dist: pypdf>=6.15.0; extra == 'browser'
38
+ Provides-Extra: databases
39
+ Requires-Dist: pymysql>=1.1; extra == 'databases'
40
+ Requires-Dist: pyodbc>=5.1; extra == 'databases'
41
+ Provides-Extra: excel
42
+ Requires-Dist: openpyxl>=3.1; extra == 'excel'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # PROCESIO CLI + Agent
46
+
47
+ <!-- mcp-name: io.github.Procesio-Externals/procesio-cli -->
48
+
49
+ Command-line tooling and an AI agent for the PROCESIO automation platform: drive processes, forms, documents and custom actions from a terminal or from an AI coding assistant.
50
+
51
+ Everything here talks to a PROCESIO installation over its public API. You point it at
52
+ your workspace, store your credentials in your operating system's own secret store,
53
+ and drive processes, forms, documents and custom actions from a terminal, a script, or
54
+ an AI coding assistant.
55
+
56
+ - The platform this talks to, where your workspaces live: https://procesio.app
57
+ - API and platform documentation: https://docs.procesio.com
58
+ - About PROCESIO: https://procesio.com
59
+
60
+ ## Install
61
+
62
+ Requires Python 3.11. [uv](https://docs.astral.sh/uv/) is the quickest
63
+ route, but a plain virtualenv works the same way.
64
+
65
+ ```bash
66
+ git clone https://github.com/Procesio-Externals/procesio-cli.git
67
+ cd procesio-cli
68
+ uv sync
69
+ ```
70
+
71
+ The base install is six packages. Everything heavier is an optional extra, pulled
72
+ in only if you use the tool that needs it:
73
+
74
+ ```bash
75
+ uv sync --extra browser # real-browser form testing (then: uv run playwright install chromium)
76
+ uv sync --extra excel # reading .xlsx workbooks
77
+ uv sync --extra databases # SQL Server / MySQL queries (pyodbc also needs an ODBC driver)
78
+ uv sync --all-extras # everything
79
+ ```
80
+
81
+ ## Connect it to your workspace
82
+
83
+ Credentials never live in a file in this repo. They go into your machine's own store:
84
+ Windows Credential Manager, the macOS login Keychain, or the Linux desktop keyring,
85
+ all under the name `agents-and-tools:procesio:<secret>`.
86
+
87
+ PROCESIO accepts two ways of authenticating, and they are not equivalent. Store either
88
+ one as a named profile:
89
+
90
+ ```bash
91
+ # Your user account. Carries everything that account can do.
92
+ python scripts/run-tool.py procesio add-credential --name account --type userpass --username you@example.com --make-default
93
+
94
+ # An API key, scoped to one workspace.
95
+ python scripts/run-tool.py procesio add-credential --name qa --type apikey --workspace-id <workspace-guid>
96
+
97
+ python scripts/run-tool.py procesio check-auth
98
+ ```
99
+
100
+ Omit `--password`, `--key` or `--value` and you are prompted without echoing, so the
101
+ secret never reaches your shell history or a process listing. Add
102
+ `--environment <Client>-<ENV>` to bind a profile to a specific installation.
103
+
104
+ ### Which one to use
105
+
106
+ | | User and password | API key |
107
+ |---|---|---|
108
+ | Reaches | everything the account can reach, across workspaces | one workspace |
109
+ | Needs a workspace GUID | no | yes, its own, and no other will do |
110
+ | Good for | day-to-day building, anything that spans workspaces | CI, a script pinned to one environment, sharing narrow access |
111
+
112
+ The scoping is enforced by the platform, not by this tool. A workspace-scoped key sends
113
+ three headers: the key name, the key value, and `workspaceid`. Send it without that
114
+ header and the call is a `401`; send it with a **different** workspace's GUID and it is
115
+ also a `401`. So an api-key profile has to be stored with its `workspace_id` to
116
+ authenticate at all. `python scripts/run-tool.py procesio list-workspaces` gives you the
117
+ GUID.
118
+
119
+ The practical consequence is worth knowing before you pick. A user profile reaches
120
+ endpoints an API key cannot: listing a master workspace's sub-workspaces, for example,
121
+ answers `401` for a key and `200` for a user. Prefer the user account while you are
122
+ building, and reach for a key when you deliberately want to pin something to a single
123
+ workspace.
124
+
125
+ On a headless machine there is no OS keyring to write to. Pick a store explicitly:
126
+
127
+ ```bash
128
+ export AAT_CREDS_BACKEND=encrypted-file
129
+ export AAT_SECRETS_PASSPHRASE='...' # or you will be prompted on a terminal
130
+ python scripts/set-credential.py procesio username
131
+ ```
132
+
133
+ `AAT_CREDS_BACKEND=file` and `=env` read secrets your host or cluster already manages
134
+ (a mounted Kubernetes Secret, or one JSON blob) and are read-only by design, so a
135
+ container can never pretend to own the store it reads from.
136
+
137
+ ## First commands
138
+
139
+ ```bash
140
+ python scripts/list-tools.py # what is installed, and is it ready
141
+ python scripts/run-tool.py procesio --help # every action, with its arguments
142
+ python scripts/run-tool.py procesio list-processes
143
+ python scripts/run-tool.py procesio run-process --id <process-id> --payload '{}'
144
+ ```
145
+
146
+ Every tool prints exactly one JSON object on stdout and nothing else, so you can pipe
147
+ it straight into `jq` or into another script. Progress and warnings go to stderr.
148
+ Failures print `{"error": {"code", "message", "details"}}` and exit non-zero.
149
+
150
+ ## Using it from an AI assistant
151
+
152
+ This repo is built to be discovered rather than memorised, which is what makes it
153
+ usable by an assistant that has never seen it before.
154
+
155
+ - `CLAUDE.md` carries a generated **capability router**: a compact map from "what the
156
+ user asked for" to the exact command that does it. It is regenerated from the
157
+ manifests with `python scripts/build-router.py`, so it cannot drift from the code.
158
+ - `tools/procesio/SKILL.md` is the tool's full manual, also generated from its
159
+ manifest. An assistant reads it instead of guessing at `--help` output.
160
+ - `python scripts/list-tools.py` returns the same information as JSON, including which
161
+ credentials are missing, so an assistant can tell "not installed" from "not
162
+ configured yet".
163
+
164
+ Point your assistant at the repo root and let it run `scripts/run-tool.py`. Nothing
165
+ else is required.
166
+
167
+ ### Or install it into Claude Code as a plugin
168
+
169
+ One command, and Claude Code carries the tools, the MCP server and the Agent Skills
170
+ together. No clone, no path to write into a config file.
171
+
172
+ ```
173
+ /plugin marketplace add Procesio-Externals/procesio-cli
174
+ /plugin install procesio@procesio-cli
175
+ ```
176
+
177
+ The plugin is the `plugin/` folder: the MCP server configuration, four skills and an
178
+ icon. It launches the exact PyPI release of this package through `uvx`, so
179
+ [uv](https://docs.astral.sh/uv/) has to be on the machine; everything else it resolves
180
+ itself on first run. Authenticate with `add-credential` below, run as
181
+ `uvx --from procesio-cli procesio add-credential ...` when there is no clone.
182
+
183
+ **What gets installed is pinned.** The plugin names one exact release and passes
184
+ `constraints.txt` and `build-constraints.txt` to `uvx`, so a fresh launch installs exactly the versions that
185
+ were resolved and checked for this release, not whatever is newest on PyPI that day. The
186
+ pins are checked to have prebuilt wheels for Python 3.11 to 3.14 on Windows, Linux
187
+ (x86-64 and ARM) and Apple Silicon. Intel Macs are not covered: `cryptography` no longer
188
+ publishes wheels for them, so installing there needs a Rust toolchain.
189
+
190
+ **On Windows with Smart App Control.** Windows 11 can refuse to load a Python file
191
+ whose publisher it cannot confirm, and shows "Part of this app has been blocked" for
192
+ each one. The Python builds uv downloads for itself are not signed, so the plugin asks
193
+ uv for a Python that is already installed first (`--python-preference system`, never
194
+ older than 3.11) and uses uv's own build only when there is none. If
195
+ you see those notifications, install Python 3.11 or newer from
196
+ [python.org](https://www.python.org/downloads/windows/) (for example
197
+ `winget install Python.Python.3.12`), whose files are signed, then restart Claude Code.
198
+ Do not ignore them: when the refused file is Python's networking module, no tool call
199
+ can reach PROCESIO.
200
+
201
+ **You can check the tool list you were given.** The MCP server's published tools are
202
+ fixed per release, and `server.json` records their digest under
203
+ `_meta` > `io.modelcontextprotocol.registry/publisher-provided` > `com.procesio/toolsDigest`.
204
+ That file cannot be changed once a version is in the MCP Registry. Hash the `tools` array
205
+ a `tools/list` call returns and compare:
206
+
207
+ ```python
208
+ import hashlib, json
209
+ raw = json.dumps(tools, sort_keys=True, separators=(",", ":"), ensure_ascii=False)
210
+ print("sha256:" + hashlib.sha256(raw.encode("utf-8")).hexdigest())
211
+ ```
212
+
213
+ A mismatch means the server is not offering what was published for that version. The
214
+ server also reports its digest in `server/discover`, but treat that only as a label: a
215
+ server cannot vouch for itself.
216
+
217
+ ### Or connect it over MCP, with no shell at all
218
+
219
+ There are two MCP servers in `webplatform/aat_mcp/`, over the same substrate, for two
220
+ different jobs. Both speak JSON-RPC over stdio.
221
+
222
+ | | `procesio-mcp-chat` | `procesio-mcp` |
223
+ |---|---|---|
224
+ | tools | 21, one per operation | 6, generic |
225
+ | picks up a tool you add | no, it is a declared list | yes, immediately |
226
+ | what it is for | a chat client, where each tool has to say what it does | driving the whole registry |
227
+ | launched by | the plugin, via `.mcp.json` | your own client config |
228
+
229
+ **From the MCP Registry, or as a one-click bundle.** The chat server is listed in the
230
+ official MCP Registry as `io.github.Procesio-Externals/procesio-cli`, and each release attaches
231
+ `procesio-mcp-<version>.mcpb` to its
232
+ [GitHub release](https://github.com/Procesio-Externals/procesio-cli/releases). Open that file in
233
+ Claude Desktop to install it; the host fetches the Python dependencies with uv. Both are
234
+ produced by the tag-driven `release` workflow, which fills in the bundle's hash and
235
+ publishes `server.json`, so nothing in the registry is edited by hand.
236
+
237
+ The curated surface is grouped by what you are building — processes, forms, connectors —
238
+ and nothing in it takes a caller-supplied action, so every tool in the list is legible to
239
+ a person reading it and to a model choosing between them. Its contents are declared in
240
+ `webplatform/aat_mcp/chat_surface.yaml`, and CI checks that every operation it names still
241
+ exists with the arguments it claims.
242
+
243
+ The generic surface is the one to reach for when you want reach rather than a short list.
244
+ It exposes the whole registry through six tools rather than one per action:
245
+
246
+ | tool | what it does |
247
+ |---|---|
248
+ | `capabilities` | list tools, agents and skills, or one capability's full argument schema |
249
+ | `run_tool` | run a tool with structured JSON arguments |
250
+ | `run_agent` | run an agent |
251
+ | `run_tool_confirmed`, `run_agent_confirmed` | the same, including irreversible actions |
252
+ | `get_skill` | fetch a skill's markdown |
253
+
254
+ Because it reads the registry, a tool you add next to `tools/procesio/` appears in
255
+ your assistant immediately, with its argument schema, and you write no integration
256
+ code for it.
257
+
258
+ Point your MCP client at the server with an absolute path to this checkout's Python:
259
+
260
+ ```json
261
+ {
262
+ "mcpServers": {
263
+ "procesio": {
264
+ "command": "/abs/path/to/procesio-cli/.venv/bin/python",
265
+ "args": ["/abs/path/to/procesio-cli/webplatform/aat_mcp/server.py"]
266
+ }
267
+ }
268
+ }
269
+ ```
270
+
271
+ On Windows the interpreter is `.venv\Scripts\python.exe`. The key name differs per
272
+ client (`mcpServers` for Claude Desktop and Cursor, `mcp` with `"type": "local"` for
273
+ opencode), but the command and args are the same everywhere. For a container there is
274
+ also an HTTP transport: `python webplatform/aat_mcp/http_server.py --host 0.0.0.0
275
+ --port 8901 --token <secret>`, which requires `Authorization: Bearer <secret>` on
276
+ every request. Do not bind it off loopback without a token.
277
+
278
+ **About the safety gate.** `run_tool` refuses an action the reversibility check calls
279
+ irreversible and returns `approval_required`, naming the `*_confirmed` path. MCP
280
+ clients mark those as ask, so a person approves each side effect and a model cannot
281
+ bypass the gate by picking the plain tool. Know what the check is: it matches English
282
+ verbs in the action name and arguments. An action whose name carries no verb it knows
283
+ comes back reversible, so silence is absence of evidence rather than a guarantee.
284
+ Treat it as a guard rail against obvious mistakes, not as a sandbox, and add verbs to
285
+ `agents/_lib/reversibility.py` when you find a gap. Set `AAT_MCP_DENY_IRREVERSIBLE`
286
+ for a headless run where even confirmed actions must be refused.
287
+
288
+ ## The rules that are not obvious
289
+
290
+ Before you build anything, read
291
+ [`tools/procesio/PROCESIO-USAGE-GUIDE.md`](tools/procesio/PROCESIO-USAGE-GUIDE.md). It
292
+ indexes the platform behaviours that read as failures until you know them, and they all
293
+ share a shape: the call succeeds, the status says finished, nothing is logged, and the
294
+ thing you asked for did not happen. There is no error to search for, so you look in the
295
+ wrong place.
296
+
297
+ A few of them, so you can judge whether it is worth your time: `<%N%>` in a Node pastes
298
+ the value into the source rather than binding it, so a string becomes a subtraction; the
299
+ Python action returns only what the script PRINTS, so an assignment returns empty; and an
300
+ empty form control bound to a typed variable kills the launch with nothing on screen at
301
+ all.
302
+
303
+ The guide is generated from the tool's own notes, carries the rule and a link, and the
304
+ reasoning stays in the note. One copy of every fact.
305
+
306
+ ## The agent
307
+
308
+ Beyond the raw API tool there is a build-and-test agent that carries the method rather
309
+ than the mechanics: how to build a process properly, how to verify it against a live
310
+ run, and which smells to look for in someone else's flow.
311
+
312
+ ```bash
313
+ python scripts/run-agent.py procesio guidance # the playbook and best practices
314
+ python scripts/run-agent.py procesio checklist # the self-test discipline
315
+ python scripts/run-agent.py procesio verify --process-id <id>
316
+ python scripts/run-agent.py procesio audit --process-id <id>
317
+ ```
318
+
319
+ `verify` is the one worth wiring into CI: it validates the process, compares what the
320
+ designer shows against what the runtime does, launches it and reads the instance
321
+ status back.
322
+
323
+ ## Set up in a browser instead
324
+
325
+ If you would rather not touch a terminal for setup, there is a local console:
326
+
327
+ ```bash
328
+ python dashboard/serve.py
329
+ ```
330
+
331
+ It binds to loopback only and opens a page that lists every tool, agent and skill
332
+ from the live registry. From there you can store credentials straight into your OS
333
+ credential store (they never touch a file), edit schema-validated config, see which
334
+ tools are ready and which are missing a secret, and run a tool to check it works.
335
+ Nothing you enter leaves your machine.
336
+
337
+ ## Build a connector from API documentation
338
+
339
+ Custom actions are the platform's main extension point: they are how a process calls an
340
+ API that PROCESIO does not already speak. `connector-builder` turns API documentation
341
+ into a compiled custom action, so the route from a third-party API to something a
342
+ process can call is a build rather than a C# project.
343
+
344
+ The builder is a hosted service at
345
+ [connector-builder.procesio.app](https://connector-builder.procesio.app/). Anyone can
346
+ create an account there; you do not need anything from us first. Two things to know
347
+ before you start:
348
+
349
+ - **You bring your own LLM key.** The build pipeline runs on a model, and it runs on
350
+ *your* provider account rather than ours. Set it once, in the builder, or from here.
351
+ - **You authenticate either with an `acb_` API key or with the account's email and
352
+ password.** The key is long-lived and simplest for a script; the login mints a JWT.
353
+
354
+ ```bash
355
+ python scripts/set-credential.py connector-builder api-key # acb_...
356
+ # or: set-credential.py connector-builder username / password
357
+
358
+ python scripts/run-tool.py connector-builder set-llm-key --provider anthropic --api-key sk-ant-...
359
+ python scripts/run-tool.py connector-builder create-build --api-url <docs-url> --user-requirements "what the connector should do"
360
+ ```
361
+
362
+ From there the agent drives the loop rather than you memorising the stages:
363
+
364
+ ```bash
365
+ python scripts/run-agent.py connector-builder next-step --build-id <id>
366
+ ```
367
+
368
+ It answers the builder's clarifying questions, approves the plan, generates, compiles,
369
+ and hands back the `.nupkg` to upload to your workspace.
370
+
371
+ ## Test the form you just built
372
+
373
+ Building a form is half the job. The agent's playbook is blunt about the other half:
374
+ a form is not done until every tab, every control and every event has been exercised
375
+ live and the runtime diagnostics are clean. Screenshots hide JS errors, failed
376
+ launches and flicker.
377
+
378
+ ```bash
379
+ python scripts/run-tool.py web save-session --name mine --url https://forms.procesio.app
380
+ python scripts/run-tool.py web run --session mine --url <form-url> --steps @steps.json
381
+ ```
382
+
383
+ The result carries a `diagnostics` block: console output, page errors, failed
384
+ requests and bad responses. Any page error, any console error, or any 4xx or 5xx on
385
+ the form's own calls means it is not done.
386
+
387
+ ## What is in here
388
+
389
+ Seven tools, two agents, two skills, and two components that are neither. The
390
+ registry is the authority on all of it: `python scripts/list-tools.py` prints what is
391
+ installed, how many actions each one exposes, and which credentials are still
392
+ missing. The counts below come from that listing.
393
+
394
+ ### Tools
395
+
396
+ Run any of them with `python scripts/run-tool.py <tool> <action> [options]`. An
397
+ action is required; `--help` lists the actions a tool exposes.
398
+
399
+ | Tool | Actions | What it does |
400
+ |---|--:|---|
401
+ | `procesio` | 442 | The platform API: processes, forms, documents, custom actions, environments, credentials, schedules. |
402
+ | `connector-builder` | 55 | Turns API documentation into a compiled PROCESIO custom action. Custom actions are the platform's main extension point, so this is the shortest route from a third-party API to something a process can call. |
403
+ | `mysql` | 9 | Query the MySQL database a SQL action talks to, to see what a process actually wrote. |
404
+ | `sqlserver` | 9 | The same, for SQL Server. |
405
+ | `web` | 9 | Drive a real browser: render, click, fill, screenshot, read runtime diagnostics. |
406
+ | `xlsx` | 3 | Read a workbook outside a process. PROCESIO's Node allowlist ships no xlsx library. |
407
+ | `framework-map` | 2 | Render everything installed as one bilingual page: `python scripts/run-tool.py framework-map build`. |
408
+
409
+ ### Agents
410
+
411
+ An agent carries method rather than mechanics. Run one with
412
+ `python scripts/run-agent.py <agent> <action>`.
413
+
414
+ | Agent | Actions | What it does |
415
+ |---|--:|---|
416
+ | `procesio` | 5 | Build and test: the playbook, the self-test checklist, a verify gate against a live process, and a static audit for inefficiency and robustness smells. |
417
+ | `connector-builder` | 4 | Drives the connector loop end to end: gather, plan, generate, compile, improve from the feedback. |
418
+
419
+ ### Skills
420
+
421
+ Knowledge an AI assistant loads on its own from the description; there is nothing to
422
+ run. `python scripts/get-skill.py <name> --content` prints one.
423
+
424
+ | Skill | What it covers |
425
+ |---|---|
426
+ | `procesio-platform-advisor` | Platform knowledge: capabilities, use cases, feasibility evaluation, implementation practice. |
427
+ | `sql-server-optimizer` | Reviews the T-SQL a process runs. Inlining flow variables into SQL text is both injection-prone and the wrong action configuration, and this is what catches it. |
428
+
429
+ ### Two components that are not tools
430
+
431
+ `dashboard/` is the setup console, started with `python dashboard/serve.py`. It is not
432
+ in the registry and does not run through `run-tool.py`.
433
+
434
+ `webplatform/aat_mcp/` is the MCP server, started by your MCP client rather than by
435
+ you. See the section above.
436
+
437
+ ## Layout
438
+
439
+ ```
440
+ tools/procesio/ the API client, DTOs, flow model, layout engine, handlers
441
+ agents/procesio/ the build-and-test agent and its doctrine
442
+ tools/_lib/ credentials, JSON I/O contract, manifest loading
443
+ skills/ knowledge your assistant loads on its own
444
+ dashboard/ the local setup console
445
+ scripts/ run-tool, run-agent, list-tools, set-credential, build-router
446
+ registry.py manifest discovery; nothing has a hardcoded tool list
447
+ ```
448
+
449
+ A tool is a directory with a `tool.yaml` manifest, an entrypoint, and a README. The
450
+ manifest is the contract: the registry reads manifests, and everything else reads the
451
+ registry. If you add a tool of your own next to `tools/procesio/`, it shows up in
452
+ `list-tools.py` and in the router without registering it anywhere.
453
+
454
+ ## Contributing
455
+
456
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for how to open an issue or a pull request, and
457
+ for the two rules that come from how this repository is built: don't move files, and
458
+ never commit a `.procesio` export. Short version of the mechanics: this repo is
459
+ generated from an internal monorepo, so a merged change is copied upstream and comes
460
+ back on the next publish. That is invisible to you as a contributor, but it explains
461
+ why commits here arrive in batches.
462
+
463
+ For a security problem, don't open an issue. See [SECURITY.md](SECURITY.md).
464
+
465
+ ## License
466
+
467
+ Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).