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,164 @@
1
+ {
2
+ "Name": "Customer",
3
+ "DisplayName": "Customer",
4
+ "IsPublic": true,
5
+ "Content": {
6
+ "Id": "00000000-0000-0000-0000-000000000001",
7
+ "Name": "Customer",
8
+ "DisplayName": "Customer",
9
+ "IsDataModel": true,
10
+ "IsPrimaryType": false,
11
+ "IsProcesio": false,
12
+ "IsPublic": true,
13
+ "CsharpCorrespondent": 0,
14
+ "Type": 1,
15
+ "ParentIds": [],
16
+ "Attributes": [
17
+ {
18
+ "Id": "00000000-0000-0000-0000-000000000002",
19
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
20
+ "Name": "id",
21
+ "DisplayName": "id",
22
+ "DataTypeName": null,
23
+ "IsPrimaryType": false,
24
+ "IsProcesio": false,
25
+ "IsPublic": false,
26
+ "Type": 1,
27
+ "IsList": false,
28
+ "jsonProperty": "id",
29
+ "hidden": false,
30
+ "Attributes": [],
31
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121222",
32
+ "IsDataModel": false,
33
+ "CsharpCorrespondent": 100
34
+ },
35
+ {
36
+ "Id": "00000000-0000-0000-0000-000000000003",
37
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
38
+ "Name": "name",
39
+ "DisplayName": "name",
40
+ "DataTypeName": null,
41
+ "IsPrimaryType": false,
42
+ "IsProcesio": false,
43
+ "IsPublic": false,
44
+ "Type": 1,
45
+ "IsList": false,
46
+ "jsonProperty": "name",
47
+ "hidden": false,
48
+ "Attributes": [],
49
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
50
+ "IsDataModel": false,
51
+ "CsharpCorrespondent": 50
52
+ },
53
+ {
54
+ "Id": "00000000-0000-0000-0000-000000000004",
55
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
56
+ "Name": "age",
57
+ "DisplayName": "age",
58
+ "DataTypeName": null,
59
+ "IsPrimaryType": false,
60
+ "IsProcesio": false,
61
+ "IsPublic": false,
62
+ "Type": 1,
63
+ "IsList": false,
64
+ "jsonProperty": "age",
65
+ "hidden": false,
66
+ "Attributes": [],
67
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121211",
68
+ "IsDataModel": false,
69
+ "CsharpCorrespondent": 20
70
+ },
71
+ {
72
+ "Id": "00000000-0000-0000-0000-000000000005",
73
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
74
+ "Name": "tags",
75
+ "DisplayName": "tags",
76
+ "DataTypeName": null,
77
+ "IsPrimaryType": false,
78
+ "IsProcesio": false,
79
+ "IsPublic": false,
80
+ "Type": 1,
81
+ "IsList": true,
82
+ "jsonProperty": "tags",
83
+ "hidden": false,
84
+ "Attributes": [],
85
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
86
+ "IsDataModel": false,
87
+ "CsharpCorrespondent": 50
88
+ },
89
+ {
90
+ "Id": "00000000-0000-0000-0000-000000000006",
91
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
92
+ "Name": "address",
93
+ "DisplayName": "address",
94
+ "DataTypeName": null,
95
+ "IsPrimaryType": false,
96
+ "IsProcesio": false,
97
+ "IsPublic": false,
98
+ "Type": 1,
99
+ "IsList": false,
100
+ "jsonProperty": "address",
101
+ "hidden": false,
102
+ "Attributes": [
103
+ {
104
+ "Id": "00000000-0000-0000-0000-000000000008",
105
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000006",
106
+ "Name": "city",
107
+ "DisplayName": "city",
108
+ "DataTypeName": null,
109
+ "IsPrimaryType": false,
110
+ "IsProcesio": false,
111
+ "IsPublic": false,
112
+ "Type": 1,
113
+ "IsList": false,
114
+ "jsonProperty": "city",
115
+ "hidden": false,
116
+ "Attributes": [],
117
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
118
+ "IsDataModel": false,
119
+ "CsharpCorrespondent": 50
120
+ },
121
+ {
122
+ "Id": "00000000-0000-0000-0000-000000000009",
123
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000006",
124
+ "Name": "zip",
125
+ "DisplayName": "zip",
126
+ "DataTypeName": null,
127
+ "IsPrimaryType": false,
128
+ "IsProcesio": false,
129
+ "IsPublic": false,
130
+ "Type": 1,
131
+ "IsList": false,
132
+ "jsonProperty": "zip",
133
+ "hidden": false,
134
+ "Attributes": [],
135
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
136
+ "IsDataModel": false,
137
+ "CsharpCorrespondent": 50
138
+ }
139
+ ],
140
+ "DataTypeId": "00000000-0000-0000-0000-000000000007",
141
+ "IsDataModel": true,
142
+ "CsharpCorrespondent": 0
143
+ },
144
+ {
145
+ "Id": "00000000-0000-0000-0000-000000000010",
146
+ "ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
147
+ "Name": "owner",
148
+ "DisplayName": "owner",
149
+ "DataTypeName": null,
150
+ "IsPrimaryType": false,
151
+ "IsProcesio": false,
152
+ "IsPublic": false,
153
+ "Type": 1,
154
+ "IsList": false,
155
+ "jsonProperty": "owner",
156
+ "hidden": false,
157
+ "Attributes": [],
158
+ "DataTypeId": "11111111-1111-1111-1111-111111111111",
159
+ "IsDataModel": true,
160
+ "CsharpCorrespondent": 0
161
+ }
162
+ ]
163
+ }
164
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "_note": "Golden CreateDataTypeDto shape (POST /api/DataTypes body). <PLACEHOLDERS> are filled by builder.py. The server REASSIGNS all Id/ParentDataTypeId values and derives attribute types from DataTypeId, so client ids are positional only. CsharpCorrespondent on the model is 0; on a primitive attribute it mirrors the PrimaryDataType enum (String=50, Integer=20, ...). Captured live 2026-06-24 against 4Export.",
3
+ "Name": "<name>",
4
+ "DisplayName": "<displayName>",
5
+ "IsPublic": true,
6
+ "Content": {
7
+ "Id": "<uuid: model>",
8
+ "Name": "<name>",
9
+ "DisplayName": "<displayName>",
10
+ "IsDataModel": true,
11
+ "IsPrimaryType": false,
12
+ "IsProcesio": false,
13
+ "IsPublic": true,
14
+ "CsharpCorrespondent": 0,
15
+ "Type": 1,
16
+ "ParentIds": [],
17
+ "Attributes": [
18
+ {
19
+ "Id": "<uuid: attr>",
20
+ "DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
21
+ "ParentDataTypeId": "<uuid: model>",
22
+ "Name": "<attr name>",
23
+ "DisplayName": "<attr name>",
24
+ "DataTypeName": null,
25
+ "IsDataModel": false,
26
+ "IsPrimaryType": false,
27
+ "IsProcesio": false,
28
+ "IsPublic": false,
29
+ "CsharpCorrespondent": 50,
30
+ "Type": 1,
31
+ "IsList": false,
32
+ "jsonProperty": "<attr name>",
33
+ "Attributes": []
34
+ }
35
+ ]
36
+ }
37
+ }
@@ -0,0 +1,193 @@
1
+ """Document template builder — PURE config -> DocumentTemplateDto.
2
+
3
+ A document template is reusable rich-text/HTML with `<%placeholder%>` variables,
4
+ rendered by the "Generate Document" action in a process.
5
+
6
+ API (verified live 2026-06-24):
7
+ - Create: POST /api/DocumentTemplate (client-supplied id; returns empty)
8
+ - Get: GET /api/DocumentTemplate/{id}
9
+ - Edit: PUT /api/DocumentTemplate
10
+ - Delete: DELETE /api/DocumentTemplate/{id}
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import re
15
+ import uuid
16
+ from pathlib import Path
17
+
18
+ from tools.procesio.dto import refdata
19
+ from tools.procesio.dto.framework import Component
20
+ from tools.procesio.errors import UsageError
21
+
22
+ DIR = Path(__file__).resolve().parent
23
+
24
+ _ORIENTATION = {"portrait": 0, "landscape": 1}
25
+
26
+ # The document designer's page sizes (its saved `documentPageSize` keys; "" is its "Default",
27
+ # A4). The designer matches them EXACTLY and case-sensitively, and any other value is silently
28
+ # reset to Default the next time someone re-saves the document in the UI. So a size is mapped to
29
+ # its canonical spelling here, and an unknown one is refused instead of being written.
30
+ _PAGE_SIZES = ("", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9",
31
+ "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10",
32
+ "C5E", "Comm10E", "DLE", "Executive", "Folio", "Ledger", "Legal",
33
+ "Letter", "Tabloid")
34
+ _PAGE_SIZE_BY_KEY = {s.lower(): s for s in _PAGE_SIZES}
35
+
36
+
37
+ def _page_size(value) -> str:
38
+ key = "" if value is None else str(value).strip()
39
+ canon = _PAGE_SIZE_BY_KEY.get(key.lower())
40
+ if canon is None:
41
+ valid = ", ".join(s or '""' for s in _PAGE_SIZES)
42
+ raise UsageError(f"unknown pageSize {value!r}: the document designer resets it to Default "
43
+ f"on the next save. Use one of: {valid}")
44
+ return canon
45
+
46
+
47
+ def _new_id(ctx) -> str:
48
+ return (ctx.get("new_id") or (lambda: str(uuid.uuid4())))()
49
+
50
+
51
+ def _esc(s: str) -> str:
52
+ """HTML-entity-encode & < > " exactly like the PROCESIO document editor persists."""
53
+ return (s.replace("&", "&amp;").replace("<", "&lt;")
54
+ .replace(">", "&gt;").replace('"', "&quot;"))
55
+
56
+
57
+ def _encode_body(body: str) -> str:
58
+ """PROCESIO's document editor stores the body HTML-ENTITY-ENCODED and SINGLE-LINE.
59
+ The renderer DECODES then walks the resulting DOM to substitute placeholders and to
60
+ detect a list<model> repeating <tr> (the single <tbody><tr> whose <td>s carry
61
+ `<%listVarId.attrId%>` is cloned once per list element). A RAW, multi-line body pushed
62
+ via the API is never recognised by that DOM walk -> list-bound tables render every
63
+ `<%hits.*%>` cell as "Unknown" (verified live: every working list<model> doc stores
64
+ `&lt;%`, our raw-HTML doc was the lone exception). So mirror the editor: collapse
65
+ whitespace around newlines to a single line, then entity-encode (placeholders
66
+ `<%id%>` become `&lt;%id%&gt;`)."""
67
+ return _esc(re.sub(r"\s*\n\s*", "", body or ""))
68
+
69
+
70
+ def _variable(v: dict, ctx: dict) -> dict:
71
+ if "model" in v:
72
+ ref = v["model"].strip()
73
+ dt = ctx.get("models", {}).get(ref.lower()) or ref
74
+ else:
75
+ dt = refdata.primitive_type_id(v.get("type", "string"))
76
+ return {
77
+ "id": _new_id(ctx), "dataType": dt, "type": 10, "name": v["name"],
78
+ "defaultValue": v.get("default"), "isList": bool(v.get("isList", False)),
79
+ # Document-template variables are placeholders FILLED BY the Generate Document
80
+ # action (destinations) — never flow inputs. Real templates store isInput:false
81
+ # for every variable (scalar AND list). With isInput:true the designer treats a
82
+ # list<model> var as a flat input and WON'T expand its model attributes -> the
83
+ # repeating table can't bind those fields and renders "Unknown". So default false.
84
+ "isInput": bool(v.get("isInput", False)), "isOutput": bool(v.get("isOutput", False)),
85
+ }
86
+
87
+
88
+ def _resolve_body_placeholders(body: str, name_to_id: dict, var_attrs: dict) -> str:
89
+ """The render engine resolves body placeholders by variable **id** (and for a
90
+ repeating table over a list model, by `<%listId.attrId%>`). Authors write
91
+ friendly names; translate `<%name%>` -> `<%id%>` and `<%listName.attrName%>` ->
92
+ `<%listId.attrId%>` (var_attrs[listName] = {attrName: attrId})."""
93
+ def sub(m):
94
+ inner = m.group(1)
95
+ head, _, rest = inner.partition(".")
96
+ key = head.strip().lower()
97
+ vid = name_to_id.get(key)
98
+ if not vid:
99
+ return m.group(0)
100
+ if rest:
101
+ attr_id = (var_attrs.get(key) or {}).get(rest.strip().lower(), rest)
102
+ return f"<%{vid}.{attr_id}%>"
103
+ return f"<%{vid}%>"
104
+ return re.sub(r"<%([^%]+)%>", sub, body)
105
+
106
+
107
+ def build(config: dict, ctx: dict) -> dict:
108
+ ctx = dict(ctx)
109
+ orient = config.get("orientation", "portrait")
110
+ orient_code = _ORIENTATION.get(str(orient).strip().lower(), orient if isinstance(orient, int) else 0)
111
+ variables = [_variable(v, ctx) for v in config.get("variables", [])]
112
+ name_to_id = {(c.get("name") or "").strip().lower(): v["id"]
113
+ for c, v in zip(config.get("variables", []), variables)}
114
+ body = _resolve_body_placeholders(config.get("body", ""), name_to_id,
115
+ ctx.get("var_attrs", {}))
116
+ body = _encode_body(body) # editor-format: encoded + single-line (binds list tables)
117
+ return {
118
+ "id": ctx.get("doc_id") or _new_id(ctx),
119
+ "name": config["name"],
120
+ "description": config.get("description"),
121
+ "body": body,
122
+ "placeholderDelimiterStart": _esc(config.get("placeholderStart", "<%")),
123
+ "placeholderDelimiterStop": _esc(config.get("placeholderStop", "%>")),
124
+ "documentPageSize": _page_size(config.get("pageSize", "A4")),
125
+ "documentPageOrientation": orient_code,
126
+ "variables": variables,
127
+ }
128
+
129
+
130
+ def prepare_ctx(client, config: dict) -> dict:
131
+ # NOTE: list<model> repeating tables DO work (proven by the Round 12 render test in
132
+ # PHASE4-E2E-NOTES.md) — bind `<%listVar.attr%>` in one <tr> and feed the whole list
133
+ # in one Generate-Document mapping (destination.attribute null), with the list fed
134
+ # via a process variable typed as the item model (isList:true) + a JSON-array
135
+ # DefaultValue. The two requirements: (1) the editor body encoding handled by
136
+ # _encode_body in build(); (2) the item data model must be created with ALL its
137
+ # attributes in the initial POST /api/DataTypes — attributes added later via the
138
+ # /api/DataTypes/attribute edit path are missing from the runtime's COMPILED model
139
+ # and render as "Unknown" / "Unable to find attribute <id>". There is no platform
140
+ # limit on list tables — the earlier "dead-end" warning was the stale compiled model.
141
+ model_vars = [v for v in config.get("variables", []) if v.get("model")]
142
+ if not model_vars:
143
+ return {}
144
+ models: dict[str, str] = {}
145
+ r = client.get("/api/DataTypes", {"addProperties": False, "pageNumber": 1,
146
+ "pageItemCount": 500, "includeProcesioEntries": True,
147
+ "includeExternalEntries": True})
148
+ for it in (r.get("pageItems") if isinstance(r, dict) else r) or []:
149
+ nm = (it.get("name") or it.get("Name") or "").strip().lower()
150
+ if nm:
151
+ models[nm] = it.get("id") or it.get("Id")
152
+ # for each model-typed variable, fetch its model's attribute name->id (so a body
153
+ # table `<%varName.attrName%>` can be translated to `<%varId.attrId%>`)
154
+ var_attrs: dict[str, dict] = {}
155
+ for v in model_vars:
156
+ ref = v["model"].strip()
157
+ mid = models.get(ref.lower()) or ref
158
+ try:
159
+ m = client.get(f"/api/DataTypes/{mid}")
160
+ var_attrs[(v.get("name") or "").strip().lower()] = {
161
+ (a.get("name") or "").strip().lower(): a.get("id")
162
+ for a in (m.get("attributes") or [])}
163
+ except Exception: # noqa: BLE001
164
+ pass
165
+ return {"models": models, "var_attrs": var_attrs}
166
+
167
+
168
+ def _extract_id(resp, dto):
169
+ # POST returns empty; the template keeps the client-supplied id.
170
+ if isinstance(resp, dict) and (resp.get("id") or resp.get("Id")):
171
+ return resp.get("id") or resp.get("Id")
172
+ return dto.get("id") if isinstance(dto, dict) else None
173
+
174
+
175
+ def _edit(client, resource_id, config, ctx):
176
+ ctx = dict(ctx)
177
+ ctx["doc_id"] = resource_id
178
+ dto = build(config, ctx)
179
+ client.put("/api/DocumentTemplate", dto)
180
+ return client.get(f"/api/DocumentTemplate/{resource_id}")
181
+
182
+
183
+ COMPONENT = Component(
184
+ name="document",
185
+ description="PROCESIO document template: HTML body with <%placeholder%> variables.",
186
+ dir=DIR,
187
+ build=build,
188
+ create_endpoint=("POST", "/api/DocumentTemplate"),
189
+ get_path="/api/DocumentTemplate/{id}",
190
+ extract_id=_extract_id,
191
+ prepare_ctx=prepare_ctx,
192
+ edit=_edit,
193
+ )
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "PROCESIO Document Template config",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["name", "body"],
7
+ "properties": {
8
+ "name": {"type": "string", "minLength": 1},
9
+ "description": {"type": "string"},
10
+ "body": {"type": "string", "description": "HTML body; reference variables as <%name%>"},
11
+ "pageSize": {"type": "string", "default": "A4"},
12
+ "orientation": {"type": "string", "enum": ["portrait", "landscape"], "default": "portrait"},
13
+ "placeholderStart": {"type": "string", "default": "<%"},
14
+ "placeholderStop": {"type": "string", "default": "%>"},
15
+ "variables": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "required": ["name"],
21
+ "properties": {
22
+ "name": {"type": "string", "minLength": 1},
23
+ "type": {"type": "string", "enum": ["boolean", "integer", "float", "double", "string", "datetime", "json", "object", "guid", "bool", "int", "long", "number", "text", "str", "uuid", "date-time"]},
24
+ "model": {"type": "string"},
25
+ "isList": {"type": "boolean", "default": false},
26
+ "isInput": {"type": "boolean", "default": true},
27
+ "isOutput": {"type": "boolean", "default": false},
28
+ "default": {}
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,124 @@
1
+ # Document Template sub-tool
2
+
3
+ Create/edit a PROCESIO **document template** — HTML with `<%placeholder%>`
4
+ variables, rendered to PDF/DOCX by the **Generate Document** action in a process.
5
+
6
+ ## Config
7
+
8
+ ```json
9
+ {
10
+ "name": "Invoice",
11
+ "body": "<div>Hello <%clientName%>, your total is <%total%>.</div>",
12
+ "pageSize": "A4",
13
+ "orientation": "portrait",
14
+ "variables": [
15
+ {"name": "clientName", "type": "string"},
16
+ {"name": "total", "type": "double"}
17
+ ]
18
+ }
19
+ ```
20
+
21
+ - **body** — author it as raw HTML; reference variables with `<%name%>` (default
22
+ delimiters, overridable via `placeholderStart`/`placeholderStop`). The builder does
23
+ NOT store it raw — it mirrors PROCESIO's document editor: HTML-entity-encoded
24
+ (`&lt;%…%&gt;`) and collapsed to a single line. That editor format is what lets the
25
+ renderer's DOM walk recognise and clone a repeating list `<tr>`; a raw multi-line body
26
+ pushed via the API renders list cells as "Unknown" (see `_encode_body` in `builder.py`).
27
+ - **variables** — `DocumentVariableDto`. `type` (primitive) or `model`; `isList`,
28
+ `isInput` (default **false** — template vars are destinations FILLED BY Generate
29
+ Document, not flow inputs; `isInput:true` stops the designer expanding a `list<model>`
30
+ var's attributes, so the repeating table can't bind), `isOutput`.
31
+ - **orientation** — `portrait` (0) or `landscape` (1). **pageSize** — e.g. `A4` (valid values
32
+ below).
33
+
34
+ ## API contract (verified live 2026-06-24)
35
+
36
+ - **Create:** `POST /api/DocumentTemplate` — client-supplies `id`, returns empty.
37
+ - **Get:** `GET /api/DocumentTemplate/{id}`.
38
+ - **Edit:** `PUT /api/DocumentTemplate`.
39
+ - **Delete:** `DELETE /api/DocumentTemplate/{id}`.
40
+
41
+ ## Using a document in a process
42
+
43
+ Add a **Generate Document** action: bind "Select Document Template" to the template
44
+ id (REQUIRED — without it the action 502s "Missing document information"; the
45
+ `HTML string` property is an OUTPUT, not an input), map the template variables via
46
+ "Map Document Data", choose "Save document as" (PDF=1/HTML=2) and "File Name", and
47
+ capture "Document Output" into a File variable. Run the process and read the output
48
+ file from the instance (`GET /api/File/download`).
49
+
50
+ ## Scalar binding works; list-bound repeating tables ALSO work
51
+
52
+ **Verified live:** scalar `<%name%>` placeholders bind and render correctly; the
53
+ designer shows them as resolved chips. Bind a body image with `<img src="<%url%>">`.
54
+
55
+ **Repeating tables over a `list` model work too** (proven by the Round 12 decisive
56
+ render test in `PHASE4-E2E-NOTES.md`). A single `<tbody><tr>` whose `<td>`s carry
57
+ `<%listVar.attr%>` placeholders (`<%hits.title%>` -> `<%hitsId.attrId%>`) is cloned
58
+ once per list element — that one `<tr>` IS the repeating syntax. The fresh-model run
59
+ emitted one row per list item (3 hits -> 3 rows), zero "Unknown".
60
+
61
+ **Put the header row in `<thead>` and the repeating `<tr>` in `<tbody>`.** Generate
62
+ Document fails a list table whose header row sits in `<tbody>` with "Sequence contains no
63
+ elements" (checked at v3.0.0, 2026-10).
64
+
65
+ **Feed the typed list — no scripting required.** Declare a process variable typed as
66
+ the item model with `isList:true` and a `DefaultValue` that is a JSON array of
67
+ objects (or supply any already-populated list var); it hydrates into the typed list
68
+ at runtime. In the Generate Document `docMap`, map the doc's list variable to that
69
+ process list variable with `destination.attribute = null` — one mapping binds the
70
+ whole list to the table.
71
+
72
+ **Critical — create the data model with ALL attributes up front (`POST /api/DataTypes`).**
73
+ The earlier "Unknown" / `Unable to find attribute <id>` failures were NOT a platform
74
+ limit — they were a stale compiled model. Attributes added later via the
75
+ `/api/DataTypes/attribute` edit path are MISSING from the runtime's COMPILED model,
76
+ so the designer renders those cells as "Unknown" chips and Generate Document throws
77
+ `Unable to find attribute <id> ... ensure the data model attributes are defined
78
+ correctly` at render time. A model created with every attribute in the initial
79
+ `POST /api/DataTypes` compiles correctly and renders. (Round 12: a fresh 6-attribute
80
+ model + identical `<%hits.attr%>` table -> status 50, valid PDF, all rows; the
81
+ original attribute-edited model -> status 40, attribute-resolution error.)
82
+
83
+ **HTML-string shell — still a valid alternative** (use when the layout itself is
84
+ fully dynamic, not just the rows):
85
+ 1. A document = a single `<%htmlContent%>` placeholder (one `string` variable).
86
+ 2. A Scripting action builds the FULL HTML (header, table rows, image) as a string,
87
+ output into an envelope model `{result: string}` (a JS output is wrapped
88
+ `{result: v}`, and `result` maps cleanly only when it is a **primitive**).
89
+ 3. Generate Document `docMap`: `htmlContent <- {var: htmlEnv, path: [result_attr_id]}`.
90
+ The `<%htmlContent%>` placeholder substitutes the raw HTML -> the PDF renders the full
91
+ branded layout, table and image. (Proven live: `AAT_BriefShell` + `AAT_Process_SearchGenerate`.)
92
+
93
+ ## The designer re-save normalises the HTML (Tiptap, v3.0.0, 2026-10)
94
+
95
+ The document designer replaced Froala with **Tiptap 3**. The save payload is unchanged
96
+ (entity-encoded `body`, delimiters, `documentPageSize`, `documentPageOrientation`,
97
+ `variables`), but saving a template from the UI NORMALISES its HTML, so a body the tool
98
+ wrote is not byte-stable once someone opens and saves it in the designer:
99
+
100
+ - header rows move into `<thead>` (also leading all-`<th>` rows found in `<tbody>`);
101
+ - runs of spaces become `&nbsp;`, and empty blocks get a `<br>`;
102
+ - `break-*` CSS becomes `page-break-*`;
103
+ - `on*`, `srcdoc` and `javascript:` attributes are stripped;
104
+ - `<style>`, `<script>`, `<form>` and `<svg>` are kept verbatim as raw HTML;
105
+ - placeholders inside attributes or raw HTML are left as written;
106
+ - `fr-*` classes are kept (the PDF is still styled with Froala's stylesheet);
107
+ - a leaf `<section>` / `<header>` becomes a `<div>`;
108
+ - entities are no longer double-decoded.
109
+
110
+ Compare a template before and after a designer save by these rules, not byte for byte.
111
+
112
+ **Header, footer and page-number markers.** The body carries them as a LEADING
113
+ `<style class="pup-c-template-page-number">`, a LEADING
114
+ `<header class="pup-c-template-header" data-height>`, and a TRAILING
115
+ `<footer class="pup-c-template-footer">`. Keep each in its position when editing a body.
116
+
117
+ **Valid `documentPageSize` values** (the config's `pageSize`): `A0`-`A9`, `B0`-`B10`, `C5E`,
118
+ `Comm10E`, `DLE`, `Executive`, `Folio`, `Ledger`, `Legal`, `Letter`, `Tabloid`, and `""` (the
119
+ designer's Default). An unknown value is silently reset to Default on the next UI save, so the
120
+ builder maps a size to its canonical spelling and refuses an unknown one.
121
+
122
+ **PDF styling is pinned.** Generate Document and HTML to PDF embed the **Froala 5.5.0** CSS in
123
+ the PDF, and the HTML-string output links the `froala-editor` package at version 5.5.0 instead of `@latest`. Document
124
+ CSS is kept as written, and a `url(data:image/png;base64,...)` is no longer truncated.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "Invoice",
3
+ "body": "<div>Hello <%clientName%>, total <%total%>.</div>",
4
+ "pageSize": "A4",
5
+ "orientation": "portrait",
6
+ "variables": [
7
+ {
8
+ "name": "clientName",
9
+ "type": "string"
10
+ },
11
+ {
12
+ "name": "total",
13
+ "type": "double"
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "id": "00000000-0000-0000-0000-000000000003",
3
+ "name": "Invoice",
4
+ "description": null,
5
+ "body": "&lt;div&gt;Hello &lt;%00000000-0000-0000-0000-000000000001%&gt;, total &lt;%00000000-0000-0000-0000-000000000002%&gt;.&lt;/div&gt;",
6
+ "placeholderDelimiterStart": "&lt;%",
7
+ "placeholderDelimiterStop": "%&gt;",
8
+ "documentPageSize": "A4",
9
+ "documentPageOrientation": 0,
10
+ "variables": [
11
+ {
12
+ "id": "00000000-0000-0000-0000-000000000001",
13
+ "dataType": "0317bfee-b2f5-4bde-bfe8-121212121214",
14
+ "type": 10,
15
+ "name": "clientName",
16
+ "defaultValue": null,
17
+ "isList": false,
18
+ "isInput": false,
19
+ "isOutput": false
20
+ },
21
+ {
22
+ "id": "00000000-0000-0000-0000-000000000002",
23
+ "dataType": "0317bfee-b2f5-4bde-bfe8-121212121213",
24
+ "type": 10,
25
+ "name": "total",
26
+ "defaultValue": null,
27
+ "isList": false,
28
+ "isInput": false,
29
+ "isOutput": false
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_note": "Golden DocumentTemplateDto (POST /api/DocumentTemplate body). Client supplies id (server returns empty on success). body is HTML with <%name%> placeholders (stored RAW — verified live, NOT escaped). documentPageOrientation: 0=portrait, 1=landscape. variables -> DocumentVariableDto {id, dataType, type:10, name, isList, isInput, isOutput}. Captured live 2026-06-24.",
3
+ "id": "<uuid: doc>",
4
+ "name": "<name>",
5
+ "description": null,
6
+ "body": "<div>Hello <%clientName%></div>",
7
+ "placeholderDelimiterStart": "<%",
8
+ "placeholderDelimiterStop": "%>",
9
+ "documentPageSize": "A4",
10
+ "documentPageOrientation": 0,
11
+ "variables": [
12
+ {"id": "<uuid: var>", "dataType": "0317bfee-b2f5-4bde-bfe8-121212121214", "type": 10, "name": "clientName", "defaultValue": null, "isList": false, "isInput": true, "isOutput": false}
13
+ ]
14
+ }