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,316 @@
1
+ # PROCESIO implementation best practices (distilled)
2
+
3
+ Agent-scoped guidance: the standards a build must meet, not tool mechanics. The
4
+ agent applies these when designing and reviewing any process, form, or use case.
5
+
6
+ **Source:** Google Doc "Best practices for implementing with PROCESIO"
7
+ (`docId 1t0nqrVKEJwkuubhiIDpRcXd3OubClmfmmbfav953dZo`, captured 2026-06-25).
8
+ Captured here per Hard rule 6 so the standard survives chat compaction. Re-pull the
9
+ doc if it changes; this is a distillation, the doc is the source of truth.
10
+ Platform tricks: https://docs.procesio.com/platform-tricks
11
+
12
+ The source doc has 6 image-only examples (bad vs good parameter handling; the
13
+ 5-Decisional ~2s vs single-Decisional <200ms speed comparison; the JSON-to-Data-Model
14
+ extraction diagram) that carry no alt text and are not reproduced here - open the doc
15
+ for the visuals. The principles they illustrate are captured in sections 2, 9 and 10.
16
+
17
+ ---
18
+
19
+ ## 1. Frame the work
20
+
21
+ - One measurable KPI per process (e.g. "reduce onboarding cycle time by 30%").
22
+ - Map as-is -> to-be: triggers, systems, data contracts, SLAs, exceptions.
23
+ - Define RACI early: business owner, builder(s), reviewer/QA, approver, operator.
24
+ Use the `bpof-expert` skill for process mapping and RACI.
25
+
26
+ ## 2. Solution design
27
+
28
+ - **Modularize:** one main process + small reusable subprocesses (auth, paging,
29
+ validation, notifications). Trade-off both ways: too many subprocesses = harder
30
+ debugging + extra execution time; none = a monolith that re-runs steps it should
31
+ not. Choose deliberately.
32
+ - **Stable contracts:** standardize inputs/outputs as DTO-style variables. Do not
33
+ pass raw API payloads between steps.
34
+ - **Idempotency:** a retry or a double-trigger must not create duplicates. Use
35
+ external IDs and dedupe/once-only keys. Triggering twice must not change records.
36
+ - **Error ports:** wire them for error capture and error-handling logic.
37
+ - **Stateless core:** anything that must survive across runs (checkpoints, last-sync
38
+ time, job status, idempotency keys, approvals) lives in a durable system of record
39
+ (CRM/ERP/ticketing or a DB you own). PROCESIO variables are ephemeral - use them
40
+ only within a single execution (pass data between steps, hold tokens, page
41
+ cursors, correlation IDs).
42
+ - **Perceived speed is non-negotiable.** Users must feel the UI helps them, not that
43
+ they wait on PROCESIO. A slow form reads to the client as "PROCESIO is slow". Do
44
+ not let this happen. See sections 9 and 10.
45
+ - **Secrets:** never in processes. Credential Manager only.
46
+ - **Centralize parameters:** a value used in many processes (and that will change)
47
+ is set in ONE place and shared, so one change propagates. Never hardcode it in
48
+ many places. Hardcoding + scattering always creates future effort.
49
+
50
+ ## 3. Integrations (target 1-2 days for the first system)
51
+
52
+ - Wrap each external API in reusable subprocesses: `auth-get-token`,
53
+ `<system>-get-by-id`, `<system>-search`, `<system>-upsert`, plus a pagination
54
+ helper and a rate-limit handler.
55
+ - Exponential backoff with jitter. Example attempt -> wait: 1 -> ~5s, 2 -> ~10s,
56
+ 3 -> ~30s, 4 -> ~1min.
57
+ - Idempotency keys so the same logical action runs once even on retry/double-trigger.
58
+ - Standard error object across integrations.
59
+
60
+ ## 4. Data contracts
61
+
62
+ - Define DTO variables (Customer, OrderLine, Address).
63
+ - Reuse data-model children of the same data model where appropriate.
64
+
65
+ ## 5. Robustness
66
+
67
+ Global try/catch via Error Port + Decisional action. Classify and handle:
68
+ - **Retryable:** retry(max=3, backoff=2^n).
69
+ - **Business:** send to queue + notify owner.
70
+ - **Hard fail:** alert, capture context, stop.
71
+
72
+ ## 6. Observability
73
+
74
+ - Generate a correlation ID at start; pass it to all logs/requests.
75
+ - Store the main process instance ID; set an explicit status (success/fail/custom).
76
+ - Alert on thresholds when something fails repeatedly.
77
+
78
+ ## 7. Document & handover
79
+
80
+ - Document each process. Map the order processes trigger in (visual map if needed).
81
+ - Write SOPs so someone without prior context can debug or follow the logic.
82
+
83
+ ## 8. DB actions (SQL Server / MySQL) + Data Store
84
+
85
+ The DB credential (catalog type **`SQL`**) is now multi-engine: it carries a **server
86
+ type** (`DbClientType` — `MSSQL=1`, `MYSQL=2`), so the same `Execute Query` / `Execute
87
+ Command` actions run against **MySQL** by binding a MySQL-typed DB credential (PRC-3696).
88
+ **Redis** shipped as its own credential type + connector. No new action families — pick
89
+ the engine on the credential. Outbound DB hosts are SSRF-guarded by a host blacklist, so
90
+ a private/blacklisted host is rejected at connect time. Bind values as **parameters**,
91
+ never inline — the injection-safe `@param` map is engine-agnostic. **Data Store** (the
92
+ tenant table feature) is separate — see the `datastore` guidance topic; scheduling a
93
+ process on a cron is the `scheduling` topic.
94
+
95
+ Use the `sql-server-optimizer` skill for any SQL in a SQL action. Core rules:
96
+ - Inject data via action parameters; centralize all params at the top of the
97
+ statement for visibility.
98
+ - Parameters go on the RIGHT-hand side of an operation only. `WHERE I.Id =
99
+ @Param_Id` good; `SELECT *, @Param_Id` or `SET @Parameter = @SQLVariable` errors.
100
+ - Param names may match internal SQL variable names (the compiler resolves safely);
101
+ use each parameter once. After injection, clean the SQL variables holding param
102
+ data before the rest of the statement runs.
103
+ - FROM/JOIN: smallest record set first, largest last.
104
+ - Join conditions: most restrictive first. INNER joins before LEFT joins.
105
+ - Max 5-6 joins. Beyond that the engine cannot compute an optimal plan (5!=120,
106
+ 6!=720, 7!=5040) and falls back to running it as written.
107
+ - WHERE: most restrictive condition first.
108
+ - Pre-calculate values; do not call functions per row (no `ISNULL(...)`/`CASE` in a
109
+ per-row WHERE/SELECT when it can be computed once into a variable).
110
+ - Filters activate only when set: `(@p IS NULL OR (<col> LIKE '%'+@p+'%'))`, not a
111
+ `CASE` that always evaluates.
112
+
113
+ ## 9. Forms & Tasks - UX timing (outcome rules)
114
+
115
+ - **>=90% of clicks under 1s.** Limit calls to processes (Forms have features that
116
+ avoid most calls). When you must call a process, keep it to a minimum number of
117
+ actions (1 ideal, 3 still ok, 5 bad, >5 really bad) and optimize it for speed
118
+ (section 10). Use scoped loading visuals for the affected section, not a full
119
+ screen. Paginate and filter tables that can grow large.
120
+ - **<=10% of clicks in the 1-3s band.** Break a long task into steps each under 3s,
121
+ updating the UI as each finishes, so the UI feels faster.
122
+ - **No click ever over 3s.** Use an async mechanism: let the user continue and
123
+ notify them when done.
124
+
125
+ ## 10. Optimize for speed
126
+
127
+ - Every action costs ~10ms. Some are natively slower (Decisional), some faster
128
+ (numeric Add). An action gets slower when it parses/injects large data, or talks
129
+ to an external system (Call API, SQL, FTP).
130
+ - Levers: reduce action count at all costs; use scripting actions effectively
131
+ (do more per action); optimize the external systems (SQL statement + DB; use
132
+ Call API/FTP only where needed when form-call latency matters).
133
+ - Example: 5 Decisional actions ~2s -> a single Decisional <200ms -> best, a single
134
+ scripting action that does the whole thing.
135
+ - Do not extract from JSON with chains of actions. Model the JSON into a Data Model
136
+ and use the variable as `<DataModel>`; then read attributes directly, often with
137
+ no action at all.
138
+ - A Node that builds an LLM prompt should put the static rules FIRST and the per-run
139
+ data (history, records, a language hint) LAST. Provider prompt caches key on a
140
+ byte-identical prefix (OpenAI: >= 1024 tokens), so per-run data at the top makes
141
+ every call a cache miss. Order only, wording unchanged; diff the line multiset
142
+ before the PUT.
143
+
144
+ ---
145
+
146
+ ## Name every Call/Trigger Subprocess node suggestively (never leave the generic label)
147
+
148
+ When a flow contains a `Call Subprocess` / `Trigger Subprocess`, set the node's **`name`**
149
+ (the builder accepts `name` on any action) to describe **what that call does in this flow**,
150
+ or the **called process's name** — whichever reads clearer for the context. Never ship the
151
+ generic "Call Subprocess" label: on a canvas with several subprocess calls they become
152
+ indistinguishable and the flow is unreadable. Examples: `"Citește Contacte proprietari
153
+ (read-range)"`, `"Adaugă rândul în Colectare acte (append-row)"`, `"Creează folder Ap.<nr>
154
+ (create-folder)"`. The right name varies by context — pick the one that makes the canvas
155
+ self-explanatory.
156
+
157
+ ## Form: pre-fill controls from URL query params (validated live 2026-07-22)
158
+
159
+ A published PROCESIO form pre-fills a control from a URL query parameter **whose key
160
+ equals the control's binding `name`**. Open `https://forms.procesio.app/{tinyUrl}?<name>=<value>`
161
+ and the control renders with `<value>`. The match is on the config `name` (field/binding
162
+ name), NOT the DOM `id`/`name` (empty on the rendered input). Unmatched params are ignored.
163
+ Undocumented by PROCESIO, but confirmed live (form with `cod`+`apartament` controls opened
164
+ at `?cod=TEST123&apartament=27` → both pre-filled).
165
+
166
+ Use it to **seed a form from a per-record link**: give each record a stable, URL-safe token,
167
+ name a control after the query key, distribute `…?token=<value>`. Then a form event (e.g.
168
+ `on: open → do: process`) can read that seed control and fetch the rest. This is the mechanism
169
+ behind the Uranus 100 „colectare acte" access model (unique link per apartment, `?cod=`).
170
+ To make a form public + get the link: `isPrivate:false` + publish, then
171
+ `POST /api/CustomUrl/FormTemplate {Type:3,EntityType:1,EntityId:<formTemplateId>,Url:<slug>}`
172
+ → `tinyUrl` → `forms.procesio.app/{tinyUrl}`.
173
+
174
+ ## Recipe: a dynamic, TYPED PROCESIO document (AAT_ Company Brief — live)
175
+ A branded PDF whose repeating table + scalars are filled from a live API call:
176
+ 1. **Table rows <- `Call API` -> a typed `list<item>` model.** Point the Call API Response
177
+ Body at e.g. `AAT_GoogleResponse {items: list<AAT_SearchHit>}`; PROCESIO deserializes by
178
+ `jsonProperty`. docMap the doc's `hits` list `<- {var: googleResponse, path:[items_attr]}`.
179
+ (The Javascript action canNOT build a typed list — see tool PROCESIO-API-NOTES.)
180
+ 2. **Scalars** — use the **Node** scripting action (raw output) and map straight onto the doc
181
+ vars; OR with the **Javascript** action route through an envelope model
182
+ `{result:{searchTerm, generatedOn, resultCount, heroImageUrl}}` + docMap `path:[result,
183
+ field]`. Build the envelope model via the attribute-endpoint create flow so it COMPILES.
184
+ 3. **Never** feed a Javascript-action output downstream as a query/filename — the `{result}`
185
+ wrapper leaks. Drive the Call API query + file name from the ORIGINAL form inputs.
186
+ 4. Build every data model via the attribute-endpoint create flow (empty model -> POST each
187
+ attribute) so it's COMPILED — else the document renders "Unknown".
188
+
189
+ ## Email a generated file (Send Email)
190
+ - **Map attachment is `list<File>`** — declare the file input `isList:true`; a single File
191
+ -> designer "data type mismatch" + NO attachment (run still status 50, so green != attached).
192
+ Pass `[fileDTO]`. Form file-upload controls already hold a list.
193
+ - **To** can be a variable for a dynamic recipient (`<%0%>` + Variable[recipientEmail]).
194
+ - The Body can come from a document template via Generate Document's "HTML string" output,
195
+ or a templated HTML string.
196
+
197
+ ## Form: an "Email me" button enabled only once the file exists
198
+ Conflict: btnSearch must run with no file yet; btnEmail only once the file is present.
199
+ Resolve via FIELD VALIDITY, not JS `.disabled` toggling:
200
+ - `briefFile` (file-upload) **`required:true`** -> the form is invalid until the PDF lands.
201
+ - `btnEmail` **`disabledIfFormIsInvalid:true`** -> enabled only when ALL required (company +
202
+ valid email + file) are present.
203
+ - `btnSearch` **`disabledIfFormIsInvalid:false`** -> always clickable (it GENERATES the file).
204
+ - email field: `required:true` + `regex` = email pattern; file-upload `readonly:true` for a
205
+ download-only control.
206
+
207
+ ## Type-matching across resources + Required inputs (LOAD-BEARING)
208
+
209
+ **Variable TYPES must match EXACTLY for anything that passes between Process / Document /
210
+ Form.** An input's type, an output's type, and a binding's type must be identical, or the
211
+ consumer rejects it. Real failure (AAT_ v2): Send Email "Map attachment" is `List<File>`, so
212
+ Process 3's input was made `List<File>` — but the FORM sends a single `File`, so the form
213
+ **could not START the process** (a silent type mismatch between the form output and the
214
+ process input). Always check the chain: Form control type → process INPUT type → action
215
+ PARAMETER type → next resource. One mismatch anywhere breaks the hand-off.
216
+
217
+ **Bridge a single `T` → `List<T>` INSIDE the process** (do NOT change the upstream resource):
218
+ 1. Keep the process INPUT as the single `T` (so it matches what the form/webhook sends).
219
+ 2. Add a **Node** action: `return [<%0%>];` (Node returns RAW — no wrapper) bound to its
220
+ **List Result** output → a `List<T>` process var. **Node REQUIRES `Timeout` > 0** (it
221
+ defaults to `00:00:00`, which errors `value must be greater than 00:00:00`); set `Timeout: 60`.
222
+ 3. Feed that `List<T>` var to the action (e.g. Send Email Map attachment ← briefFileList).
223
+ (Use **Single Result** instead when the script returns a non-list value.)
224
+
225
+ **Required inputs block the start.** A process input marked `Required` that the trigger does
226
+ NOT supply prevents the process from starting at all. Ensure every Required input is provided
227
+ by the caller — the form button's inputMap, the webhook payload, or the run payload — or do
228
+ not mark it Required. Audit the form↔process input map against the process's Required vars.
229
+
230
+
231
+ ## Creating nodes/actions in a flow via API (WORKS - userpass; verified 2026-07-05)
232
+
233
+ Adding a NEW node to a flow via `PUT /api/Projects` works with the default userpass `account` profile.
234
+ No designer UI needed. The one trap: do NOT copy an existing node to make a new one - a copied node
235
+ carries the source flow's stale variable bindings in `customData.configuration`, and the validator then
236
+ throws a diagnostic-free `HTTP 500 "Object reference not set to an instance of an object"`. Instead:
237
+
238
+ 1. Fetch the CLEAN action template: `GET /api/Actions?getFullAction=true`, find by `actionId`/`name`.
239
+ `copy.deepcopy(template.configuration)` and fill only your setting values. A clean config makes the
240
+ validator return REAL errors (141/142) instead of the 500.
241
+ 2. A JS "Node" (templateId e0fc20c3): settings are Code (1e6a5523) = JS + input `<%N%>` bound in the
242
+ Code param's `variable` list; **Single Result** (51b9fcdc) = the JS `return` output (NOT Error
243
+ 9e0110c9); List Result (60237e88); Error (9e0110c9) = error port; Timeout (d3e52aab).
244
+ 3. New variables use key **`dataType`** (a type id) + `type` (10 input / 20 process / 30 output / 40 sys).
245
+ Missing type -> `statusCode 141 "type cannot be empty"`. Param/var type must MATCH the setting's
246
+ expected `dataTypeId` -> else `statusCode 142 data type mismatch`. Primitive ids: `...1211` number,
247
+ `...1214` string, `...1221` any/object; file `10c6ac59-...-121212121219` = FileDataModel
248
+ `{name,mimeType,path,size,id,hash}` (blob reference, NOT inline content).
249
+ 4. Files from text: a Node cannot return a FileModel (no inline content). Use **`Base64 To File`**
250
+ (actionId 6fad5599; settings Base64 String, File Name -> File output) to turn a base64 string into a
251
+ stored FileModel; then Call API `/media` upload (FORM_DATA `file`=FILE type, `type`=mime).
252
+ 5. Validate via `POST /api/Projects/validate` (empty body = valid) before PUT.
253
+
254
+ Best path: `tools/procesio/dto/process/builder.py` already builds correct DTOs data-driven from the live
255
+ catalog (`_action_node` = clean template config + values; `_edit` rebuilds a whole flow and PUTs). Prefer
256
+ it for full-flow builds; replicate `_action_node`'s recipe for a surgical single-node insert into a
257
+ fetched (lowercase-keyed) flow. Worked example: added Build VCF (Node) + Base64 To File to Chat Flow/Send
258
+ Export to produce a `.vcf` bulk export (scratchpad build_vcf_flow3.py pattern).
259
+
260
+
261
+ ## Field learnings 2026-07-05 (designer review + real-corpus E2E) — AUTHORITATIVE
262
+
263
+ 1. **Decisional icon**: when creating a Decisional via API set `customData.icon = "call_split"` (the
264
+ designer standard). `icon-decisional` or anything else renders NO icon in the run view. Same rule
265
+ class: give decisional CASES meaningful `name`s — the designer shows them as chips on the canvas.
266
+ 2. **Scripting (Node) actions FAIL SILENTLY**: a JS code error does NOT raise / does NOT take the
267
+ type-1 error port. The action reports SUCCESS and writes the error text to its **Error output**
268
+ setting (9e0110c9). ALWAYS: (a) bind Error output to a string var on every Node; (b) on hot paths,
269
+ follow the Node with a Decisional `errVar IS_NOT_EMPTY -> error join`; (c) compose the user-facing
270
+ error message from the error vars in one downstream Node (values from the FAILED action are unset —
271
+ never map them into the notice directly). Proven: 6 silently-dying turns became 6 successes.
272
+ 3. **Huge values (base64 media) are NOT an engine limit** (corrected 2026-09-21). A controlled probe through
273
+ `/run` carried a 4 MB string intact through a Node `<%N%>` injection, a Decisional `IS_NOT_EMPTY`, the native
274
+ **Length** action (template 057d754a: Input String, Result), Map Data, subprocess maps and SQL parameters, on a
275
+ plain variable and on a data-model attribute alike. The earlier note that 100 KB+ values "materialize as EMPTY"
276
+ in a Node or Decisional was an artefact of the middleware that fed the flow (it capped its own payload), not of
277
+ PROCESIO. Length is still the cheapest way to test a big value's presence; it is not a workaround.
278
+ 4. **For Each via API** (template dbef0804-66a9-4f8f-872c-ece1b89b8fdb, shape `area`): params =
279
+ For Each Item (57b5b1eb…, the per-iteration var) + In List (2d5f230f…) + timeout + 2 ignore
280
+ literals. The FE node has TWO type-0 ports: first -> loop-body entry child, second -> the after-loop
281
+ node. Children carry `parentId` = FE id; the LAST child ports BACK to the FE (loop-back edge).
282
+ 5. **Workspace header is mandatory on run/launch**: `ProcesioClient(workspace_id=…)`. Without it,
283
+ `/api/Webhooks/launch` and `run-process` bind LARGE attribute values as EMPTY (looks like an engine
284
+ bug, is actually your missing header), and admin flows 400/502.
285
+ 6. **WhatsApp bulk contact export**: document sends get the MIME's extension APPENDED by WhatsApp
286
+ (filename `Contacts.vcf` + text/plain ⇒ phone receives `Contacts.vcf.txt`, unimportable). No allowed
287
+ /media MIME maps to .vcf. Correct approach: native `type:"contacts"` messages (array, chunk ~15 per
288
+ message, For Each over chunks) — renders as a tappable contact stack ("X and N other contacts").
289
+
290
+
291
+ ### Validation: trust the designer's Process Errors (2026-07-06, corrected)
292
+ **A 2026-07-05 note wrongly dismissed the designer's Process Errors as stale phantoms. They are REAL
293
+ and block SAVE. Trust them.** There are two layers:
294
+ - **Runtime** — `POST /api/Projects/validate` (the only server validate endpoint): checks
295
+ `parameters[]`, returns EMPTY when valid. Does NOT catch designer-layer problems — a flow can pass
296
+ it yet be unsavable.
297
+ - **Designer** — the client-side "Process Errors" panel blocks SAVE; it validates `customData`
298
+ (designer maps + code chips). No server endpoint exists for it.
299
+ - **Replicate the designer check offline with `procesio flow-lint --id <flow> --workspace-id <ws>`**
300
+ (a Node binding an error-scope/undeclared variable in code; a required subprocess input left
301
+ unmapped or with a dead source in the `customData` process-inputs map). Never call a flow "done"
302
+ on `/validate` alone — always run flow-lint too, and if you can, confirm SAVE in the designer.
303
+ - **The recurring cause:** cloning a subprocess-call node copies its `customData` process-inputs, so
304
+ the clone keeps the SOURCE's subprocess-input ids and the real required input reads as "missing"
305
+ (the panel shows the stale ids as raw GUIDs). Fix: regenerate `customData` process-inputs from the
306
+ correct runtime map. Never bind an `isError` variable (an action's error-port output) into Node code.
307
+
308
+ ### How to actually find a designer validation error (2026-07-06)
309
+ When the designer's "Process Errors" flags a node but the data "looks correct", DON'T reverse-engineer
310
+ the rule from that one node (I guessed wrong twice). Instead COMPARE THREE THINGS: the FLAGGED node,
311
+ a HEALTHY node of the SAME actionTemplateName that the designer accepts, and the CLEAN template from
312
+ `GET /api/Actions?getFullAction=true`. The one field that differs between flagged and healthy is the
313
+ cause. That method found it in one shot: flagged subprocess nodes had a stale side-pannel setting id
314
+ (`1da555da`) vs the template's `5456caf0`; the designer couldn't find the mapping. Then encode the rule
315
+ into `procesio flow-lint` so it's caught mechanically next time — never call a flow done on
316
+ `/Projects/validate` alone.
@@ -0,0 +1,217 @@
1
+ # PROCESIO build-and-test playbook (agent operating procedure)
2
+
3
+ How the PROCESIO agent works when it creates or edits any resource or use case. The
4
+ rule: a build is not done when it is created. It is done when it has been run,
5
+ validated, and verified against real behavior, the learnings captured, and the
6
+ defects fixed. Building without testing is not allowed.
7
+
8
+ This is agent behavior. Tool mechanics live in `tools/procesio/` - this playbook
9
+ points at them, it does not duplicate them.
10
+
11
+ ---
12
+
13
+ ## The loop (run on every build/edit)
14
+
15
+ 1. **Frame** - state the outcome and KPI in one sentence, the scope, the
16
+ constraints, the RACI. (best practices section 1)
17
+ 2. **Design** - pick the approach; where it matters, weigh 2-3 with trade-offs.
18
+ Apply best practices up front: modular, DTO contracts, idempotent, stateless,
19
+ secrets in Credential Manager, centralized parameters.
20
+ 3. **Build programmatically** - via the `procesio` tool DTO sub-tools. Create data
21
+ models complete with all attributes up front (the runtime compiled-model cache
22
+ will not see attributes added by a later edit - PHASE4-E2E learning 12).
23
+ 4. **Self-test rigorously** - the checklist below. Non-negotiable.
24
+ 5. **Capture learnings** - write every discovery to the right durable note (routing
25
+ below). Compounding, not chat-only.
26
+ 6. **Fix** - bugs, inefficiencies, UX gaps, and any suggestion surfaced. Structural
27
+ defects get fixed in the builder/tool code, not just patched on the live
28
+ resource, so a fresh session builds it correctly.
29
+ 7. **Re-verify** - re-run the relevant checklist items on what changed.
30
+ 8. **Document & handover** - SOP, trigger order, resource ids. (best practices 7)
31
+
32
+ ## Definition of Done (outranks your own judgement)
33
+
34
+ Measured failure (a GPT-driven session, 2026-09-05): the agent said "verified / works
35
+ / done" over and over on FALSE evidence - a PDF existed, a DTO field existed, a call
36
+ returned `ok:true` - while the cache never cached, the button never fired, and the
37
+ report was empty. Nine hours, thirty user turns, because the human was the only oracle.
38
+ Do not repeat it.
39
+
40
+ - **A build is done only when `verify --process-id <id> --run` returns a passing
41
+ verdict** - not when you inspected it, not when a file was produced, not when the API
42
+ accepted the write. `ok:true` proves *acceptance*, never *effect*. If `verify` cannot
43
+ cover a step (forms/browser/E2E), it lists it in `manual_checks`; run those, do not
44
+ wave them through.
45
+ - **Clarify before you build.** In the Frame step, ask the questions that pin scope and
46
+ the load-bearing decisions first - the data source, and especially the **cache
47
+ mechanism** (native Data Store vs SQL; a cache MUST be a real Data Store / SQL action,
48
+ never a Call API dressed with a cache icon - `audit` now hard-fails that masquerade).
49
+ A task you *could* finish without asking finishes better, with fewer wrong-path loops,
50
+ when the spec is pinned up front.
51
+ - **A process is called from a form ONLY through a native `RUN_PROCESS` event**, never
52
+ by injected JS. Verify the event is actually bound (`form-get-element-events`), not
53
+ just that JS "should" trigger it.
54
+ - **Author processes through `process-create` / `process-edit`, never a raw
55
+ `PUT /api/Projects`.** The builder sets validity and the designer-config correctly; a
56
+ hand-authored flow JSON pushed via `request PUT /api/Projects` lands `isValid:false`
57
+ and the process will not launch (and hand-setting `isValid:true` only lies about it -
58
+ `verify --run` still fails because the flow itself is invalid). Build the flow through the
59
+ builder's structured config, never by hand-authoring node/edge DTOs: Data Store read/write
60
+ nodes via `dsWhere`/`dsMap`, and Decisional routing via the `branches` config - the builder
61
+ emits the correct `Ports[].Config` (the default branch is the string `"default"`, not a
62
+ boolean `isDefault`, which the BE rejects with `unexpected character 't'`). Guessing a
63
+ port/edge DTO is the same trap as guessing a node DTO.
64
+ - **Fix the cause in the generic tool, never patch the use case in the repo.** If a
65
+ capability is missing (e.g. the builder could not author a Data Store node), EXTEND
66
+ the builder with tests - the way `process-create` gained native Data Store authoring -
67
+ never drop a `patch_<usecase>.py` into `scripts/`. Use-case artefacts live in a
68
+ scratch dir; the guard `tests/test_no_usecase_scripts.py` fails the build otherwise
69
+ (CLAUDE.md Hard rules 5 + 10).
70
+
71
+ ## Self-test checklist - what "tested" actually means
72
+
73
+ Each item names the tool and the verified mechanic. Do not skip a layer because the
74
+ one above passed.
75
+
76
+ **The agent enforces the automatable layers.** Run them instead of doing them by hand:
77
+ - `python scripts/run-agent.py procesio verify --process-id <id> [--run]` - validates
78
+ the process (real PROCESIO validator), audits designer-vs-runtime parity, and with
79
+ `--run` executes it and reads the real instance status. Returns a `verdict`
80
+ (pass/warn/fail) and a `manual_checks` list of the steps it cannot run.
81
+ - `python scripts/run-agent.py procesio audit --process-id <id>` - static
82
+ best-practice + correctness smells (action count, slow actions, error handling,
83
+ inline secrets, parity).
84
+ - `python scripts/run-agent.py procesio checklist` - the full structured checklist.
85
+
86
+ `verify` cannot drive a real browser, so the forms/webhook/E2E steps below stay
87
+ manual - it names them in `manual_checks` precisely so they are not forgotten.
88
+
89
+ ### A. Static validation (before running anything)
90
+ - Validate the process: `procesio` -> `POST /api/Projects/validate`.
91
+ - Test credentials: `POST /api/Credentials/test` (returns a real upstream body when
92
+ the placement is right - PHASE4-E2E learnings 3-4).
93
+ - Test actions: `POST /api/Actions/test`.
94
+ - Designer-vs-runtime parity: every action's runtime `Parameters[]` must be mirrored
95
+ into the designer `CustomData.configuration` or the designer shows "not
96
+ configured" and Validate fails even when the process runs. The builder enforces
97
+ this with a build audit; if you hand-edit a DTO, re-check it. Bespoke shapes
98
+ (document-mapper, decisional-case) differ between runtime and designer - PHASE4-E2E
99
+ "CRITICAL process-builder fix" + rounds 3 and 5.
100
+
101
+ ### B. Run + instance verification
102
+ - Run synchronously: `run-process --synchronous`; read output vars under
103
+ `result.variable`.
104
+ - Read the instance status, do not assume success: 50 = finished, 40 = ran with
105
+ errors. Check per-action `errorMessage` via
106
+ `GET /api/Projects/instances/{iid}/status?flowTemplateId={pid}` (PHASE4-E2E 6, 15).
107
+ - Webhook-launched runs are async (launch returns an empty 200) - then poll
108
+ `GET /api/Projects/{id}/instances`.
109
+ - Download and open any generated file: `GET /api/File/download` with headers
110
+ `uploadFilePath`, `variableId`, `instanceId`, `flowTemplateId`.
111
+
112
+ ### C. Forms - render AND behavior, with diagnostics (MANDATORY before "done")
113
+ A form is NOT done until EVERY tab, EVERY control, and EVERY event/action has been
114
+ exercised live and the runtime diagnostics are clean. Screenshots alone are not enough
115
+ (they hide JS errors, failed launches, flicker). Steps:
116
+
117
+ 1. **Publish + URL:** publish, create a CustomUrl (`POST /api/CustomUrl/FormTemplate`),
118
+ open `https://forms.procesio.app/{tinyUrl}`. SPA needs ~15-20s to render; `wait`.
119
+ 2. **Drive every control/action with the `web` tool** (`run` steps: click tabs, `fill`
120
+ inputs, click buttons, open selects/dropdowns/side-panels, click menu items). The
121
+ CURRENT ui-builder forms (forms.procesio.app, pds/BootstrapVue design system) WORK
122
+ HEADLESS - verified 2026-06-29: `fill` updates the value, `RUN_JAVASCRIPT` form JS
123
+ fires, `RUN_PROCESS` triggers flow end-to-end (output mapped back into the field).
124
+ (The old "headless can't test forms / Angular model" caveat applied to the legacy
125
+ engine; it is superseded for these forms.)
126
+ 3. **Read `diagnostics` from the web-tool result** (added 2026-06-29). It returns
127
+ `{console, page_errors, failed_requests, bad_responses}`. **A build with any
128
+ page_error, any console error, or any 4xx/5xx on the form's OWN calls is NOT done** -
129
+ that is how a real failure shows (e.g. the RUN_PROCESS launch 400, a JS exception,
130
+ the icon-font break). Fix, re-run, confirm clean.
131
+ 4. **Assert the expected EFFECT per capability**, not just "it rendered": typed value
132
+ reflected, computed/JS output appears, dropdown opens un-clipped, process result
133
+ fills the target field, side-panel content shows, no flicker/scroll-trap.
134
+ 5. **Test the NEGATIVE / dismiss path of every stateful interaction**, not just the happy
135
+ click: open a dropdown/menu then **click OUTSIDE** it → only the menu should close,
136
+ nothing else should fire (a form-level click handler that substring-matches a menu label
137
+ up the ancestor chain will clear/trigger on outside-click — match exactly ONE label; see
138
+ form `description.md`). For a **chat reply via a process**, send a message and confirm a
139
+ bot reply renders (wire `messagesent`, NOT `messagesfetch`; produce the array with a
140
+ **Node** action `return …`→`List Result`, not JS `setOutput` which wraps `{result}`).
141
+ - **Process triggers:** RUN_PROCESS in/out maps must put the PROCESS variable GUID on
142
+ the LEFT (resolved from name->id) and the form value-path on the RIGHT, in BOTH maps;
143
+ a name or a form-path on the left = the designer can't render it / launch 400s
144
+ (2026-06-29). The builder resolves this (prepare_ctx); guarded by `test_form_parity.py`.
145
+ - Form data model: the field-value path is `root.<fields-const>.<elementId>.
146
+ <valueConfigId>`, attr ids must equal the element config ids, and the dataModel
147
+ root id must equal the form handle variable id - else the designer shows "Unknown"
148
+ and values do not flow. The builder handles this; verify after any manual change.
149
+ - **Structural parity is auto-tested:** `pytest tools/procesio/tests/test_form_parity.py`
150
+ (+ `test_form_sync`) assert the builder's DTO matches real exports. Run before shipping.
151
+ - **CSS/JS gotcha:** form CSS/JS lives in encrypted `Data.code`; never force a font on
152
+ `#app *` (breaks Material-Icons glyphs); the form JS runs in `iframe.trigger-sandbox`
153
+ (use `window.parent.document`). See `tools/procesio/dto/form/FORM-STYLING-NOTES.md`.
154
+ - **Theme + alignment (new):** if the form uses dark mode, toggle it and confirm the
155
+ 16-var palette applies; if it uses element alignment, confirm the `--fd/--jc/--ai`
156
+ vars lay the container out — both only in a REAL browser (`form-theme-render`).
157
+ - **Data Store trigger (new):** a `RUN_DATA_STORE_OPERATION` control must run its
158
+ READ/ADD/UPDATE/DELETE against the store and map the result back
159
+ (`form-datastore-trigger`). See the `datastore` guidance topic.
160
+
161
+ ### C2. Data Store (standalone)
162
+ - Round-trip a store: add → filtered read → update-by-PK → delete, asserting
163
+ `affectedRows` and that the filtered read returns exactly the expected rows
164
+ (`datastore-roundtrip`). Rows are keyed by column DISPLAY name; reads go through
165
+ `POST …/rows/filter`. Full guidance: the `datastore` topic.
166
+
167
+ ### C3. Scheduling
168
+ - Preview any crontab with `validate-crontab` before creating the schedule, then
169
+ `get-schedule` to confirm the stored recurrence (`schedule-cron`). See the
170
+ `scheduling` topic.
171
+
172
+ ### D. Webhooks
173
+ - Trigger the webhook with a real payload; confirm an async instance launches and
174
+ reaches status 50. The webhook body binds as a WHOLE to a model-typed variable
175
+ (not per-field) - bind it to a primitive and you get raw JSON (PHASE4-E2E 1).
176
+
177
+ ### E. End-to-end
178
+ - Exercise the use case as a user would: form -> process(es) -> document/email/SQL ->
179
+ external system. Verify the real artifact: open the file, confirm the email
180
+ delivered, confirm the record in the system of record.
181
+ - Idempotency: trigger twice, confirm no duplicate side effects (best practices 2).
182
+ - Timing: check against the forms UX rules (best practices 9) and the
183
+ optimize-for-speed rules (best practices 10 - action count, ~10ms each).
184
+
185
+ ## Implement the learnings (this is where it compounds)
186
+
187
+ Testing that does not change the build is wasted. After each test pass:
188
+
189
+ - **Fix every defect found.** Bugs; inefficiencies (too many actions, slow SQL,
190
+ unscoped loading screens, an avoidable process call from a form); UX gaps; and any
191
+ improvement you spotted. Address it, do not just note it.
192
+ - **Structural/tool defects go into the builder code + a regression test**, not only
193
+ the live resource. PHASE4-E2E is the proof of this discipline: every fix landed in
194
+ the builder so a fresh session's create/edit is already correct, backed by tests.
195
+ - **Platform limits you cannot fix** get documented so the next build avoids them
196
+ (e.g. JS output is always `{result:v}` and will not fill a typed model - use the
197
+ HTML-string shell pattern; PHASE4-E2E rounds 4 and 8-10).
198
+ - **Route the learning:**
199
+ - tool / platform API / DTO quirk / builder behavior -> `tools/procesio/*-NOTES.md`
200
+ (or the relevant tool folder).
201
+ - methodology / how to build well -> this folder (`agents/procesio/`).
202
+ - cross-cutting standing preference -> user memory.
203
+
204
+
205
+ ## Tools the agent drives
206
+
207
+ The registry is the source of truth - `python scripts/list-tools.py`, never a
208
+ hardcoded list. Core for building in PROCESIO:
209
+ - `procesio` - create/edit resources, validate, run, read instances.
210
+ - `web` - real-browser form render + behavior testing, screenshots, UX timing.
211
+
212
+ ## Read these (do not duplicate)
213
+
214
+ - Tool mechanics + verified gotchas: `tools/procesio/PHASE4-E2E-NOTES.md`,
215
+ `PROCESIO-API-NOTES.md`, `PROCESIO-AUTH-NOTES.md`, `DTO-SUBTOOLS-NOTE.md`,
216
+ `PROCESIO-SEND-EMAIL-NOTES.md`.
217
+ - Standards the build must meet: `PROCESIO-BEST-PRACTICES.md` (this folder).
@@ -0,0 +1,72 @@
1
+ # PROCESIO Data Store — build & use
2
+
3
+ **Data Store** is PROCESIO's user-defined dynamic-table feature: a tenant defines a
4
+ typed table (columns backed by a data model) and reads/writes its rows. It is
5
+ API-first, it surfaces as a **Process Designer action**, and it can be triggered from a
6
+ **form** — the same operation reachable three ways over one service.
7
+
8
+ ## The model (know this before building)
9
+
10
+ - A data store = **metadata** (name + typed columns) + **rows**. Rows are JSON objects
11
+ keyed by **column display name**, never the internal alias. Values are arbitrary JSON.
12
+ - **Primary-key columns** identify a row for update/delete. Four system columns are
13
+ read-only and managed by the platform (`CREATED_ON`, `UPDATED_ON`, and the created/
14
+ updated user ids).
15
+ - Two **permission entities** gate it: `DataStoreSchema` (create/alter/drop the table)
16
+ and `DataStoreRows` (read/write rows + CSV). A user may hold one without the other.
17
+
18
+ **When to use it.** Reach for a Data Store when a process needs a small, tenant-owned,
19
+ queryable table it can also read/write from a form (a lookup list, a queue, a
20
+ submissions log). Prefer a **data model** (data type) for the *shape* of a variable, and
21
+ an **external DB action** (Execute Query/Command over a DB credential) when the data
22
+ already lives in a real database you own.
23
+
24
+ ## Tool actions (`procesio datastore-*`)
25
+
26
+ Metadata: `datastore-create` / `-update` / `-modify-column` / `-delete` / `-get` /
27
+ `-list` / `-list-restricted` / `-from-data-model` / `-from-json` / `-get-data-model`.
28
+ Rows: `datastore-get-rows` (paged read with filters/sort), `-add-rows`, `-update-row`,
29
+ `-delete-rows`. CSV jobs: `datastore-export-start` / `-export-download` /
30
+ `-import-start` / `-import-failures`.
31
+
32
+ - **Reads: `POST …/rows/filter`** — **pagination on the query string**
33
+ (`?pageNumber=&pageItemCount=`), body a RECURSIVE filter tree + sort:
34
+ `{filter:{id,logic(0/1/2),items:[{id,type(1 condition|2 group),logic,condition:{id,column,
35
+ operator,value,auxValue?}}]}, sort:[{column,direction(1 asc|2 desc)}]}` (no body = read
36
+ all). `datastore-get-rows` builds this from `--filters '[{column,operator,value}]'`
37
+ (+`--logic and|or`) or takes a raw `--filter`/`--body`. Operators are `QueryOperators`
38
+ (0–20); pass a name (`Equals`,`Contains`,`Between`,`In`,`IsNull`,…) or number.
39
+ - **Update = `{values:{…}, filter:<tree>}`; delete = `{filter:<tree>}`** — a **non-empty
40
+ filter is mandatory** on both (there is no key-array form). `datastore-update-row`
41
+ takes `--values` + `--filter/--filters`; `datastore-delete-rows` takes `--filter/--filters`.
42
+ - Row dicts are keyed by **display name** everywhere (add/update/delete).
43
+
44
+ ## Process Designer — the "Data Store" action
45
+
46
+ A native **`Data Store`** node runs one operation against a store. Operation is
47
+ `DataStoreOperationType` shown as **SELECT / INSERT / UPDATE / DELETE**
48
+ (SelectRows=1 / InsertRows=2 / UpdateRows=3 / DeleteRows=4). Its inputs use a dedicated
49
+ FE mapper component (`Data_Store_Mapper`) to bind the store id, the operation, and the
50
+ Set-Values / Match-Where maps. It is a platform (native) action dispatched by
51
+ `IsProcesio`, so there is **no code-visible action GUID** — resolve it by name from the
52
+ live action catalog (`procesio list-actions-catalog`) when authoring a flow, and refresh
53
+ the tool's bundled catalog from `/api/Actions` after a platform release.
54
+
55
+ ## Forms — the Data Store trigger
56
+
57
+ A form element can trigger a Data Store operation the same way it triggers a process
58
+ (RUN_PROCESS). The event action is **`RUN_DATA_STORE_OPERATION`**; wire it surgically
59
+ with `procesio form-set-element-event --action RUN_DATA_STORE_OPERATION --data-store-id
60
+ <id> --operation READ|ADD|UPDATE|DELETE` (or in a full form rebuild via a control event
61
+ `do: datastore`). Config shape: `{dataStoreId, operation, inputMap, outputMap, filters?,
62
+ areFiltersConfigured?}`. **Filters apply to every operation except ADD.** The form
63
+ runtime calls the anonymous `api/Form/dataStore/{id}/rows(/filter)` endpoints with the
64
+ form context in headers — the form does not need the tenant's DataStore permissions.
65
+
66
+ ## Verify (never call it done on compile)
67
+
68
+ Round-trip a store end to end: create (from-json is quickest), add rows, read them back
69
+ with a filter, update one by its PK, delete it — asserting `affectedRows` each step and
70
+ that the filtered read returns exactly the rows you expect. Then build a process with a
71
+ Data Store SELECT node and run it, and (if a form is in scope) render the form and fire
72
+ the trigger. See the build-and-test playbook, forms section.