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,179 @@
1
+ # PROCESIO C# Custom Actions — packaging, whitelist, and the file channel
2
+
3
+ What the platform documents about the **C# Custom Action** (`.nupkg` upload), and how
4
+ that compares with the scripting actions. Everything below is **vendor-documented**,
5
+ read from `docs.procesio.com/llms-full.txt`, and is labelled as such: none of it has
6
+ been executed against a live instance from this framework. Read
7
+ [`PROCESIO-NODE-MODULE-WHITELIST.md`](PROCESIO-NODE-MODULE-WHITELIST.md) for the
8
+ sandbox facts that **were** probed live.
9
+
10
+ ## The build contract
11
+
12
+ - **C# only**, class library, implementing `IAction` from `Ringhel.Procesio.Action.Core`
13
+ with `ClassDecorator` / `FEDecorator` / `BEDecorator` / `Validator` attributes.
14
+ - **Target framework (changed in v3.0.0, 2026-10).** The hosts run on **net10.0**. Target
15
+ `net10.0` for a new build (preferred), or multi-target
16
+ `<TargetFrameworks>net8.0;net10.0</TargetFrameworks>`; a `net8.0` package still loads. The
17
+ public docs still say .NET Core 3.1 / net6.0 in places, which is stale, and the earlier advice
18
+ here ("target net6.0, keep 3.1 as the fallback") is withdrawn: Action-Core 2.x ships only
19
+ `net8.0;net10.0`, so there is no net6 build of the core package to compile against. Upload
20
+ runs server-side validations, so a wrong target fails late, at upload, not at build. See
21
+ "Runtime, loader and upload (v3.0.0)" below.
22
+ - The core package comes from a **GitHub Packages feed** and needs a GitHub PAT with
23
+ `read:packages`. It is not on nuget.org.
24
+ - The `.csproj` must set `CopyLocalLockFileAssemblies`, `GeneratePackageOnBuild` and an
25
+ `IncludeDepsInPackage` target, because **dependencies ship inside the `.nupkg`**.
26
+
27
+ ## Runtime, loader and upload (v3.0.0, 2026-10)
28
+
29
+ Unlike the rest of this note, this section comes from the platform's own v3.0.0 release
30
+ (Action-Core 2.0 / 2.1, Action-Execution v3, Test-Action v2, the Web-Api upload validator), not
31
+ from the public docs.
32
+
33
+ - **Which lib folder loads.** Action-Execution v3 loads the package's `lib/<tfm>` folder closest
34
+ to the host at or below net10.0, so net8, net6 and netstandard packages still load. (Before, it
35
+ probed only netcoreapp3.1 / net6 / net8 and loaded nothing from a net10-only package.)
36
+ Assemblies the host already holds (Action-Core, Newtonsoft.Json) are skipped, so a package
37
+ built against Action-Core 1.x binds to the host's 2.1 at run time.
38
+ - **Multi-targeting passes upload.** The validator reads only the lib folder the host would
39
+ load, so a `net8.0;net10.0` package no longer fails with `MULTIPLE_ACTIONS`. The whitelist,
40
+ the blacklist and the codes are unchanged: `MULTIPLE_ACTIONS`, `FORBIDDEN_NAMESPACE`,
41
+ `FORBIDDEN_ASSEMBLY`, `INVALID_NUGET_PACKAGE`.
42
+ - **The one breaking change (Action-Core 2.1):** `AiCredentialsManager`,
43
+ `AiCredentialsConfiguration` and `StructuredOutputMode` moved from namespace
44
+ `...Models.Credentials.API` to `...Models.Credentials.AI_API`. A package compiled against 2.1
45
+ must use the new namespace; a 1.x package that uses the AI credential types may fail to bind
46
+ on a 2.1 host, so rebuild it. The REST and DB credential types did not move.
47
+ - **Additive in Action-Core 2.x:** `FeComponentType.Auto = 102`, `FeTextFormat.DATASTORE = 8`,
48
+ and the Azure Storage credential models (`AzureStorageCredentialsManager`,
49
+ `IAzureStorageClient`, `AzureStorageAuthenticationType`). Newtonsoft.Json is 13.0.4.
50
+ - **The NuGet store is switchable per environment** (`ActiveNugetStore` = `None` /
51
+ `CodeArtifact` / `GitHub`). With `None`, upload and delete fail with `statusCode` 1013
52
+ (`FEATURE_DISABLED`), value "This feature is disabled on this environment.", target
53
+ `Action Library`; custom-action lists come back empty and the front end hides the feature. So
54
+ an empty custom-action list is not proof that nothing was uploaded: an upload answering 1013
55
+ means the environment has no store. Action-Execution downloads each package from the store
56
+ path recorded on its own template.
57
+ - **Upload and delete stamp `UpdatedOn` / `UpdatedById`** on the action template.
58
+ - **`Credentials_Rest` uploads no longer fail with `TEMPLATE_ERROR`.** A credential type now
59
+ resolves to its ROOT template. Before v3.0.0 a derived template that kept its parent's `Type`
60
+ (the REST API / Prelude template, for one) made every upload whose action had a
61
+ `Credentials_Rest` property fail with `TEMPLATE_ERROR`.
62
+ - **Test-Action v2** is .NET 10 only, with no API change: `/api/Actions/test` and
63
+ `/api/Credentials/test` are unchanged.
64
+
65
+ ## Lifecycle — plan for it, it is unusually rigid
66
+
67
+ - **A Custom Action cannot be updated in place.** The only route is a new package version
68
+ and a fresh create.
69
+ - **It cannot be deleted once used in at least one process.** Deletion is guaranteed only
70
+ while the action has never been placed on a canvas. **Anything that promises to clean up
71
+ after itself must either never drag the action onto a process, or exercise it through the
72
+ action's own test area** (`IsTestable = true` opens one), or the cleanup fails by design.
73
+
74
+ ## The dependency whitelist — two lists, and the second is the sharp one
75
+
76
+ "Other libraries that are not offered by Microsoft need to be whitelisted with us." The
77
+ docs publish both lists as a JSON configuration block.
78
+
79
+ **Packages:** `Ringhel.Procesio.Action.Core`, `Newtonsoft.Json`, `JetBrains.Annotations`,
80
+ `SimMetrics.Net`, `CsvHelper`, `DocumentFormat`, `DocumentFormat.OpenXml`,
81
+ `DocumentFormat.OpenXml.Packaging`, `DocumentFormat.OpenXml.Spreadsheet`, `Ical.Net`.
82
+
83
+ **Namespaces:** the packages above plus `System.Runtime`, `System.Linq`,
84
+ `System.Threading.Tasks`, `System.Collections`, `System.Private.CoreLib`,
85
+ `System.Private.Uri`, `corlib`, `System.Text.RegularExpression`,
86
+ `System.Diagnostics.Debug`, `System.ComponentModel`, `System.Data`, `System.Console`,
87
+ and five `System.Net.*` entries.
88
+
89
+ Four things fall out, and they decide designs:
90
+
91
+ 1. **The package list allows OpenXml; the namespace list only names `.Packaging` and
92
+ `.Spreadsheet`.** `DocumentFormat.OpenXml.Wordprocessing` (a DOCX body) and
93
+ `DocumentFormat.OpenXml.Presentation` (a PPTX) are **absent**. So the documented
94
+ capability is **XLSX-shaped**, and the common assumption that one library buys three
95
+ formats does not survive the namespace list. Untested; treat DOCX and PPTX in C# as
96
+ unproven until someone runs it.
97
+ 2. **`System.IO` is absent** while the core assemblies are present. The file example in
98
+ the same docs uses a `Stream`. Read that as **streams yes, file system unstated** —
99
+ and do not design against a temp path without measuring first.
100
+ 3. **Also absent**: `System.Net.Http`, `System.Security.Cryptography`, `System.Text.Json`,
101
+ `System.IO.Compression`. No PDF library of any kind appears, so **PDF inside a Custom
102
+ Action is a vendor request**, while PDF text extraction is available with no gate at all
103
+ through the native action and the Python action.
104
+ 4. **The published list contains two misspellings**, `WhitelistNamesapaces` and
105
+ `System.Text.RegularExpression` in the singular. If namespaces are matched literally,
106
+ `System.Text.RegularExpressions` is not whitelisted. A typo inside an allowlist is
107
+ load-bearing; verify before relying on regex.
108
+
109
+ The whitelist is published **as a configuration block**, which is a deployment-owned
110
+ artefact. Whether a self-hosted operator can edit it, and therefore whether the dependency
111
+ constraint is topology-dependent, **is not documented**. Ask before promising a customer a
112
+ library that is not on the list.
113
+
114
+ ## How a file reaches a Custom Action — a stream, never a path
115
+
116
+ ```csharp
117
+ IEnumerable<FileModel> FileList { get; set; } // or a single FileModel
118
+
119
+ foreach (var file in FileList)
120
+ {
121
+ _ = file.Name; // string
122
+ _ = file.File; // Stream — the content
123
+ }
124
+ ```
125
+
126
+ `FileModel` has exactly two properties, `Name` and `File`. The front end binds it with
127
+ `[FEDecorator(Type = FeComponentType.File)]` against a file-typed process variable.
128
+ **Nothing in the documentation states that a Custom Action has a file system**, in either
129
+ direction, and nothing states whether anything written during one invocation survives into
130
+ the next. Both are open questions, and the second one is the expensive one: a per-run
131
+ filesystem and no filesystem look identical in the docs and behave very differently across
132
+ an async split.
133
+
134
+ ## The scripting actions, for comparison
135
+
136
+ Four exist, and they are not one sandbox with four languages.
137
+
138
+ | Action | Libraries | File position |
139
+ |---|---|---|
140
+ | **Javascript** | none ("no access to specific libraries") | — |
141
+ | **Node** | a fixed list of **24**, no additions | docs state plainly it "does not support working with files" |
142
+ | **Python** | 9 preinstalled, including **pdfplumber**, **PyPDF2**, **pandas**, **spacy**, **pillow** | "Files cannot be added in Python script", then the base64 bridge below |
143
+ | **Ruby** | 9 gems, none document-related | — |
144
+
145
+ **The platform's documented file channel for a script is base64 through process
146
+ variables**, not a file system: `File to BASE64` turns a File variable into a string, the
147
+ script works on the string, and `Base64 to File` turns the result back into a File. Use
148
+ that bridge rather than looking for a path.
149
+
150
+ ## Before building a Custom Action, check the catalogue
151
+
152
+ A large amount of file work needs no custom code, no upload and no whitelisting request:
153
+
154
+ - **PDF**: Extract Text (returns concatenated text **plus** per-word JSON with position and
155
+ font), Extract Embedded Files, Area Mapper, Merge Files, Select/Remove pages,
156
+ Acroform Insert Image.
157
+ - **Excel**: Create Workbook, Split Workbook, XLS To XLSX, Insert/Rename/Delete Sheet,
158
+ Get Sheet Names, Read Range, Read Range from CSV, Copy Paste, Apply Formula,
159
+ Get Named Range, Get Last Used Row.
160
+ - **Documents**: Generate Document (from a Document Designer template), HTML to PDF,
161
+ DOCX to PDF, DOCX to HTML, Word Mail Merge, Export to CSV/XLSX, Write (list) to file,
162
+ Read file, File to Base64, plus an Archive sub-folder for compress and decompress.
163
+
164
+ **Rule of thumb: catalogue action first, then Python action, then Node, then a Custom
165
+ Action.** The order tracks cost — the first three need no upload, no versioning ritual, no
166
+ GitHub PAT and no vendor whitelisting request, and only the Custom Action carries a
167
+ lifecycle you cannot undo.
168
+
169
+ ## Documented size limits — and which ones do not apply
170
+
171
+ | Limit | Applies to |
172
+ |---|---|
173
+ | 100 MB | FTP/sFTP **Download File** |
174
+ | 1 GB | FTP/sFTP **Upload File** |
175
+ | 500 MB (default `maxfilesize`) | form **File Upload** element |
176
+
177
+ **None of these binds a Custom Action.** No size limit, timeout, memory limit or
178
+ concurrency statement is documented for Custom Actions at all. Measure before quoting a
179
+ figure to anyone.
@@ -0,0 +1,123 @@
1
+ # PROCESIO API docs — corrections needed
2
+
3
+ Audience: the PROCESIO docs/dev team.
4
+ Source of truth: a real login HAR from `procesio.app` + live calls against
5
+ `webapi.procesio.app` (2026-06-23). Target page:
6
+ `https://docs.procesio.com/developers-guide/procesio-api-documentation`.
7
+
8
+ The **username/password authentication** chapter is materially out of date — it
9
+ documents an OAuth/Bearer flow on a host that no longer serves it. The API-key /
10
+ run-a-process chapter is mostly correct. Details below.
11
+
12
+ ---
13
+
14
+ ## 1. Authentication host moved: `auth.procesio.app` → `webapi.procesio.app`
15
+
16
+ **Docs say:** *"Use the Proxy API `https://auth.procesio.app/swagger/index.html`
17
+ to reach the Authentication Service … POST `/api/Authentication`."*
18
+
19
+ **Reality:** login happens on the Web API host. `auth.procesio.app` now answers
20
+ with Kong's **default self-signed certificate** (`CN=localhost, O=Kong`) and
21
+ returns `{"message":"no Route matched"}` for `/api/Authentication` and
22
+ `/swagger/index.html`. Any integrator following the docs hits a TLS/404 wall.
23
+
24
+ **Fix:** point the auth chapter at `https://webapi.procesio.app`, and remove (or
25
+ repoint) the dead `auth.procesio.app/swagger/index.html` link.
26
+
27
+ ## 2. Login request shape is wrong (JSON+OAuth → form + `x-requested-by`)
28
+
29
+ **Docs say:** `POST /api/Authentication` with a JSON body
30
+ `{realm:"procesio01", grant_type:"password", username, password,
31
+ client_id:"procesio-ui", client_secret:""}`.
32
+
33
+ **Reality (from the HAR):**
34
+
35
+ ```http
36
+ POST https://webapi.procesio.app/api/authentication
37
+ Content-Type: application/x-www-form-urlencoded
38
+ x-requested-by: playground-v1
39
+
40
+ username=<user>&password=<pass>&client_id=procesio-ui
41
+ ```
42
+
43
+ Differences to correct:
44
+ - **Content type is `application/x-www-form-urlencoded`**, not JSON.
45
+ - Body fields are only **`username`, `password`, `client_id`**. `realm`,
46
+ `grant_type`, and `client_secret` are **not used** — drop them from the docs.
47
+ - A **`x-requested-by`** request header is **required**. Without it the gateway
48
+ returns **`407`**. (The web app sends `x-requested-by: playground-v1`.) This
49
+ header is currently undocumented and is the single most common reason an
50
+ integration "mysteriously" fails to authenticate.
51
+ - Path casing in production is lowercase `/api/authentication` (ASP.NET is
52
+ case-insensitive, so both resolve, but the docs/Swagger differ — align them).
53
+
54
+ ## 3. Token delivery: Bearer JWT → HttpOnly cookie session
55
+
56
+ **Docs say:** *"you will receive an access token in the response which you will
57
+ be able to use to access the Web API"* and a **"Bearer Authentication"** section
58
+ (Authorize with `Bearer {token}`).
59
+
60
+ **Reality:** the `200` response body contains **no token** — it is literally
61
+ `{"message":"Authentication successful"}`. Authentication is delivered as **two
62
+ HttpOnly cookies**:
63
+
64
+ ```
65
+ Set-Cookie: __Host-procesio.access (HttpOnly, Secure, Path=/)
66
+ Set-Cookie: __Host-procesio.refresh (HttpOnly, Secure, Path=/)
67
+ ```
68
+
69
+ Subsequent Web-API calls authenticate by **sending those cookies** (the SPA uses
70
+ `fetch(..., {credentials:"include"})`; the server replies with
71
+ `Access-Control-Allow-Credentials: true`) plus the same `x-requested-by` header.
72
+ Lifetimes come from the cookies' own `Expires` attribute — observed
73
+ **~24 h for `.access`** and a longer window for `.refresh` (values were 961 and
74
+ 733 bytes, i.e. JWTs). The `x-session-expires-at` header is declared in
75
+ `Access-Control-Expose-Headers` but was **empty** in the login response we
76
+ captured — either populate it consistently or remove it from the contract.
77
+
78
+ **Fix:** replace the "access token + Bearer {token}" narrative for the
79
+ username/password flow with a **cookie-session** description:
80
+ - list the two `__Host-procesio.*` cookies and that they are HttpOnly/Secure,
81
+ - state that callers must send cookies (`credentials: include`) + `x-requested-by`,
82
+ - document `x-session-expires-at` and the refresh mechanism (what calls the
83
+ refresh cookie, and the refresh endpoint, if any),
84
+ - if `Authorization: Bearer` is still accepted by the Web API for
85
+ machine-to-machine use, document **how to obtain that token now** (the login
86
+ no longer returns one); otherwise remove the Bearer section for this flow.
87
+
88
+ ## 4. API-key auth — mostly correct, two clarifications
89
+
90
+ The run-a-process chapter correctly lists the three headers `key` (key name),
91
+ `value` (key value), `workspaceid` (workspace GUID) on
92
+ `POST https://webapi.procesio.app/api/projects/{id}/run` with body
93
+ `{"payload":{}, "connectionid":null}`. Confirmed working live. Two additions:
94
+
95
+ - **State that `workspaceid` is required for workspace-scoped keys.** Live: a
96
+ workspace-scoped key returns **`401`** with no `workspaceid`; supplying the
97
+ correct workspace GUID returns `200`. (A master/personal key happens to work
98
+ without one.) This isn't obvious and bites integrators.
99
+ - The Swagger security schemes name these headers `KeyName`→`key` and
100
+ `KeyValue`→`value`. Make sure the prose and Swagger use the same names
101
+ (`key`/`value`, not `api_key`).
102
+
103
+ ## 5. Minor path/casing alignments
104
+
105
+ - Process **list** is `GET /api/Projects`; **run** is `POST /api/Projects/{id}/run`
106
+ (capital `P`; the run endpoint also accepts `runSynchronous` &
107
+ `secondsTimeOut` query params). The "ProcessTemplate" tag maps to the
108
+ `/api/Projects` path — worth a note so readers don't look for `/api/ProcessTemplate`.
109
+ - Workspace **list** is `GET /api/Workspaces` (plural). `GET /api/Workspace`
110
+ (singular) is not a route → 401/404. Align docs/examples to the plural form.
111
+ - The `webapi.procesio.app` v1.19 Swagger is accurate and reachable — keep it as
112
+ the canonical Web-API reference; just fix the **auth chapter** that precedes it.
113
+
114
+ ---
115
+
116
+ ### TL;DR for the doc owner
117
+ 1. Auth host: `auth.procesio.app` → `webapi.procesio.app`.
118
+ 2. Login is **form-urlencoded** with **`username`+`password`+`client_id`** and a
119
+ required **`x-requested-by`** header — not JSON/OAuth.
120
+ 3. Auth is a **cookie session** (`__Host-procesio.access`/`.refresh`), not a
121
+ Bearer token in the body.
122
+ 4. Spell out that **`workspaceid` is required** for workspace-scoped API keys.
123
+ 5. Fix the dead `auth.procesio.app/swagger` link and small path-casing mismatches.
@@ -0,0 +1,94 @@
1
+ # PROCESIO environments — model & mechanics
2
+
3
+ PROCESIO ships as independent installations with no data path between them (each has
4
+ its own hosts, its own accounts). This tool models each installation as a named
5
+ **environment** `<Client>-<ENV>` carrying the four hosts it lives on, and binds each
6
+ credential to one environment.
7
+
8
+ ## The four hosts
9
+
10
+ | field | what it is | prod value |
11
+ |--------------|------------------------------------------|----------------------------|
12
+ | `web_base` | Web API — every REST call | `https://webapi.procesio.app` |
13
+ | `app_base` | designer / front-end — designer URLs + the login CORS `Origin`/`Referer` | `https://procesio.app` |
14
+ | `forms_base` | public forms host — rendered-form URLs | `https://forms.procesio.app` |
15
+ | `auth_base` | legacy Proxy/Authentication host (login actually goes to `web_base`; rarely used) | `https://auth.procesio.app` |
16
+
17
+ The `-qa` / `-dev` installations follow a host family: `webapi-qa.` / `qa.` /
18
+ `forms-qa.` and `webapi-dev.` / `dev.` / `forms-dev.`.
19
+
20
+ ## Two layers, merged at read time
21
+
22
+ - **Built-in presets** in `environments.py::BUILTIN` (`Internal-PROD/QA/DEV`) — PROCESIO's
23
+ own infra, framework-shared, available with zero setup. These are *framework* data
24
+ (public app hostnames), like the historical hard-coded defaults were.
25
+ - **User registry** at `context-state-knowledge/config/procesio/environments.json`
26
+ (per-user, wipeable) — client-specific environments (`Acme-*`, …) and the
27
+ `default` pointer. A user entry with a built-in's name **overrides** it (correct a
28
+ moved Internal host without a code change). Client installation URLs are
29
+ customer-specific, so they are **user data** and live here, never in shared code.
30
+
31
+ ## Resolution precedence (both credential + URL)
32
+
33
+ Active **environment** for a call, highest first:
34
+ 1. `--environment <name>` flag,
35
+ 2. the credential's own `environment` binding,
36
+ 3. the stored `default` environment,
37
+ 4. `Internal-PROD`.
38
+
39
+ The resolved environment's URLs are folded into the profile the client holds, so
40
+ `config.web_base/app_base/forms_base/auth_base` pick them up. An explicit per-profile
41
+ URL override (a rare `web_base` on the credential blob itself) still wins — injection
42
+ uses `setdefault`.
43
+
44
+ Active **credential** for a call: `--profile` → the credential bound to the active
45
+ environment → the stored default profile. So switching environment also switches which
46
+ account/key is used, provided exactly one credential is bound there.
47
+
48
+ ## Backward compatibility (why nothing breaks on upgrade)
49
+
50
+ A pre-existing single-credential setup keeps working as production with **nothing to
51
+ re-enter**: no registry file + an **unbound** credential ⇒ `Internal-PROD` ⇒ the exact
52
+ historical hard-coded URLs. Existing credentials carry no `environment` field, so they
53
+ resolve to `Internal-PROD` automatically.
54
+
55
+ ## Operating it
56
+
57
+ ```
58
+ list-environments # what exists, which is default, bound creds
59
+ add-environment --name Acme-PROD \ # register a client installation
60
+ --web-base https://webapi.acme… --app-base https://acme… --forms-base https://forms.acme…
61
+ set-environment --name Internal-QA # move the default pointer (persists)
62
+ add-credential --name qa-me --type userpass --username … --environment Internal-QA
63
+ <any action> --environment Internal-DEV # one call against another env, default unchanged
64
+ ```
65
+
66
+ `add-environment` needs all three of `--web-base/--app-base/--forms-base`; `client`/`env`
67
+ are derived from the `<Client>-<ENV>` name when omitted. Built-in `Internal-*` cannot be
68
+ removed. Names are matched case-insensitively.
69
+
70
+ ## The form-code-key is per environment too
71
+
72
+ A form's "Switch to code" CSS and JavaScript (`Data.code`) is AES-encrypted with a key
73
+ the installation's web app holds. The platform team confirmed it is one key per
74
+ INSTALLATION: the same on every workspace of it, not guaranteed to match on another. So
75
+ the tool stores it per environment, `form-code-key@<environment>`, and resolves it from
76
+ the call's environment like everything else here (`form_code_keys.py`):
77
+
78
+ - `form-code-key@<env>` when stored;
79
+ - else, for the DEFAULT environment only, the bare legacy `form-code-key` (the same
80
+ backward-compatible rule as an unbound credential);
81
+ - else an error naming the secret to store. Never another environment's key: a blob
82
+ encrypted with the wrong installation's key is one its renderer cannot open, and the
83
+ form goes blank.
84
+
85
+ ```
86
+ python scripts/set-credential.py procesio form-code-key@Internal-QA
87
+ ```
88
+
89
+ ## Tests / isolation
90
+
91
+ The suite's autouse `_isolate_userdata` fixture (conftest) pins `AAT_USERDATA_DIR` to a
92
+ temp dir, so every test starts from the built-ins with `default = Internal-PROD` and no
93
+ test reads or writes the developer's real registry. Userpass login tests must also take
94
+ the `store` fixture (in-memory creds) or a persistent cached token skips the login.
@@ -0,0 +1,107 @@
1
+ # PROCESIO front-end (designer-layer) validation — notes
2
+
3
+ Born 2026-07-06. Ports the Process Designer's client-side **"Process Errors"** checks
4
+ (the ones that BLOCK designer *Save*) into an offline validator, and auto-runs it before
5
+ every process save. Source of truth for the rules: `docs_info/process-validation-reference-1.md`
6
+ (the FE team's verbatim dump of `Validation.ts` + `ControlValidators/*`).
7
+
8
+ ## Why this exists (the core insight)
9
+
10
+ `POST /api/Projects/validate` validates only the **runtime** layer (parameters) and
11
+ returns EMPTY even when the designer would REFUSE to save. The designer's "Process
12
+ Errors" panel is a **separate client-side check of the DESIGNER layer (`customData`)**
13
+ with **no server endpoint**. So a tool-driven save was held to a *lower* bar than a human
14
+ clicking Save. This closes that gap: FE (designer) checks run first, then BE, then save.
15
+
16
+ ## Pieces
17
+
18
+ - `flowmodel/fevalidation.py` — **pure**, offline, case-insensitive validator over a flow
19
+ DTO. `validate_flow(flow, *, datatypes=None, target_vars_of=None, include_types=True)`
20
+ → `list[warning]`. `split_severity()` → `(errors, warnings)`.
21
+ - `handlers/fevalidate.py` — impure layer: gathers the datatype catalog + subprocess-var
22
+ resolver from the live API, exposes the **`process-fe-validate`** action, and provides
23
+ the **`pre_save_validate(client, dto, *, force)`** gate (FE → BE, raises
24
+ `ValidationBlocked` on blocking errors unless `force`).
25
+ - Wiring: `dto/framework.py` gained a `save_gate` field on `Component`;
26
+ `dto/process/builder.py` defines `_save_gate` and calls it inside `_edit` before the PUT
27
+ and registers it on `COMPONENT`; `handlers/dto_actions.py` runs the gate in
28
+ `_make_create` before POST and threads `--force` / `--no-types` into `ctx`.
29
+ - `errors.py` gained `ValidationBlocked` → classified as `validation_failed`, exit 2,
30
+ with the full `{fe, be, blocked, forced}` report as `details`.
31
+
32
+ ## Severity model (deliberate)
33
+
34
+ - **error** (blocks save): the deterministic, high-signal checks — connectivity, exactly
35
+ 1 Start / ≥1 Stop, node names, unique/primitive-named variables, numeric limits,
36
+ required-empty fields, leftover placeholders, number/integer value-format, and
37
+ subprocess required-input mapping.
38
+ - **warning** (never blocks): the **data-type MISMATCH** layer. The FE helper
39
+ `getValueDataTypes` (which resolves a value's variable refs to their datatypes) is NOT
40
+ in the reference file, so it was reconstructed best-effort. Kept non-blocking so an
41
+ imperfect reconstruction can never wrongly block a legit save. Ported for the default
42
+ validator + column-definition; the other composite type-checks (TabsPayload,
43
+ MapProcessData, Conditional) are left for a later tuned pass. `--no-types` skips it.
44
+
45
+ ## DTO ↔ FE-model mapping — quirks discovered the hard way
46
+
47
+ The reference describes the FE's **in-memory** model; the persisted/live DTO differs.
48
+ These bit me during live verification — get them right or you get false positives:
49
+
50
+ 1. **Node name = `customData.name`, NOT `actionName`.** The FE's `node.name` (the canvas
51
+ label, defaults from the template, e.g. "Start"/"Call API") is stored in
52
+ `customData.name`. On many live DTOs `actionName` is `None`. Reading `actionName`
53
+ flagged `NODE_NAME` on 9/25 valid processes. `_action_name` reads `customData.name`
54
+ first (sentinel `_ABSENT` when the key is truly absent → falls back to `actionName`
55
+ for older/fixture DTOs).
56
+ 2. **`actionTemplateId` / `actionTemplateName` can BOTH be `None`** on legacy DTOs (e.g.
57
+ "Github API", "Old/*"). Template-family detection (`_kind`) keys off the GUID first,
58
+ then the template name, then falls back to `customData.name` for the structural
59
+ templates (Start/Stop/For Each/(Trigger) Subprocess). A renamed non-structural node
60
+ just reads as "other" (safe false-negative, never a false block).
61
+ 3. **Settings carry the FULL FE `Setting` shape** in `customData.configuration[].settings[]`:
62
+ `id, type (SettingType), label, value, dataTypeId, isList, isRequired, limits`. So the
63
+ FE field-level checks CAN run offline — no need to enrich from `/api/Actions`.
64
+ 4. **Empty ≠ format error.** The FE's `isValidNumber`/`isValidInteger` treat `""` as
65
+ valid; emptiness is the *required* check's job. An optional numeric field left blank
66
+ (e.g. a Delay's unused "Runtime Amount", `type=number dataTypeId=INTEGER value=""`)
67
+ must NOT be flagged. `_default_value_check` and `_check_limits` skip empty values.
68
+ This was a real false positive on "AI Decisional Test" (BE-valid).
69
+ 5. **`lineArray` is reconstructed from `Ports`.** Edges live on the *source* action's
70
+ `Ports` (`sourceId`/`destinationId`/`type`/`data.isDefault`). Each line touches BOTH
71
+ endpoints. **Error path** = `Type == 1` OR `data.isDefault == "error"` (the reference
72
+ keys on `isDefault === "error"`; the DTO also uses `Type == 1`).
73
+ 6. **`flow-list` (subprocess target) setting has NO `id`.** Locate it via a loose walk
74
+ (`_walk_settings_loose`) that recurses one level into side-panel values; the id-based
75
+ `getAllSettings` flatten skips it.
76
+ 7. Case: exports are PascalCase (`Actions`, `CustomData`), live API is camelCase. Every
77
+ field access goes through `_g` (case-insensitive). Live flow is under `resp["flow"]`.
78
+
79
+ ## Live verification (2026-07-06)
80
+
81
+ Swept 25 real processes in the default workspace: **24 FE-clean, 0 false positives**; the
82
+ only FE-flagged one ("AI Connector Builder Result") is genuinely `isValid=False` (an
83
+ `UNCONNECTED` action). FE errors correctly line up with BE invalidity where they overlap.
84
+
85
+ ## Relationship to `flow-lint`
86
+
87
+ `flow-lint` (handlers/flowlint.py) predates this and covers a few designer checks NOT in
88
+ the reference file: stale subprocess **side-pannel id**, Execute-Query **Output** null /
89
+ scalar-typed, and Node **code binding error-scope/undeclared vars**. Those are
90
+ complementary. **As of 2026-07-06 those three unique flow-lint checks are FOLDED INTO the
91
+ gate**: `run_fe_validation` calls `flowlint.lint_flow_dto` and merges its unique findings
92
+ (SIDEPANEL_ID, EXECQUERY_*, CODE_*, missing_error_variable) as blocking errors — the
93
+ overlapping subprocess-mapping ones are excluded to avoid double-reporting. It's
94
+ best-effort (wrapped in try/except): a flow-lint infra hiccup never blocks a legit save.
95
+ So a stale-sidepanel / bad-Execute-Query / error-scope-code flow is now blocked on save too.
96
+
97
+ ## Gotchas / do-nots
98
+
99
+ - The gate is process-only (via `Component.save_gate`); other components (form/document)
100
+ are unaffected — their existing `validate` oracle still runs.
101
+ - `--force` bypasses BOTH FE and BE and saves anyway. `--dry-run` runs the gate in
102
+ report-only mode (forced open) so you see the validation without saving.
103
+ - The type (warning) layer needs the datatype catalog (`GET /api/DataTypes`,
104
+ `pageItemCount=1000`); it's fetched best-effort and silently skipped if that call fails.
105
+ - After changing any action's arg/description surface, regenerate the manifest:
106
+ `python -m tools.procesio.gen_manifest` (never hand-edit tool.yaml; ~236 KB, capped
107
+ Write). `tests/test_manifest_sync.py` guards it.