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,55 @@
1
+ {
2
+ "_note": "Curated action name -> {family, desc} grouping. Source of truth for inspect-flow's action_families bucket and list-actions-catalog --by-family. Seeded from PROCESIO-RESOURCE-MODEL-NOTES.md §2 (the common actions). Actions not listed bucket as 'other'.",
3
+ "families": ["control", "subprocess", "scripting", "data", "integration", "datetime", "file", "document", "other"],
4
+ "actions": {
5
+ "Start": {"family": "control", "desc": "flow source"},
6
+ "Stop": {"family": "control", "desc": "flow terminal"},
7
+ "Decisional": {"family": "control", "desc": "branch (N-way cases + default)"},
8
+ "Join": {"family": "control", "desc": "merge branches back to one path"},
9
+ "For Each": {"family": "control", "desc": "loop over a list (renders as an area)"},
10
+ "Delay": {"family": "control", "desc": "wait"},
11
+ "Throw": {"family": "control", "desc": "raise a controlled error into the error port"},
12
+ "Call Subprocess": {"family": "subprocess", "desc": "run another process synchronously, map vars"},
13
+ "Trigger Subprocess": {"family": "subprocess", "desc": "fire another process async"},
14
+ "Node": {"family": "scripting", "desc": "NodeJS script (raw typed output; needs Timeout>0)"},
15
+ "Javascript": {"family": "scripting", "desc": "JS script (output wrapped {result})"},
16
+ "Python": {"family": "scripting", "desc": "Python script"},
17
+ "Map Data": {"family": "data", "desc": "copy/transform variables between shapes"},
18
+ "Extract Objects": {"family": "data", "desc": "pull objects out of a collection/JSON"},
19
+ "Extract List": {"family": "data", "desc": "pull a list out of data"},
20
+ "Extract Object": {"family": "data", "desc": "pull one object out of data"},
21
+ "Extract Text": {"family": "data", "desc": "extract text"},
22
+ "String To JSON": {"family": "data", "desc": "parse a string into JSON"},
23
+ "Object To String": {"family": "data", "desc": "serialize an object to string"},
24
+ "Object To File": {"family": "data", "desc": "write an object to a file"},
25
+ "Get Element": {"family": "data", "desc": "index/key into a collection"},
26
+ "Has Elements": {"family": "data", "desc": "test a collection is non-empty"},
27
+ "List Keys": {"family": "data", "desc": "list a map's keys"},
28
+ "Length": {"family": "data", "desc": "length of a string/list"},
29
+ "Trim": {"family": "data", "desc": "trim whitespace"},
30
+ "Concatenate": {"family": "data", "desc": "concatenate strings"},
31
+ "Replace": {"family": "data", "desc": "string replace"},
32
+ "RegEx Replace": {"family": "data", "desc": "regex replace"},
33
+ "Add": {"family": "data", "desc": "numeric/string add"},
34
+ "Call API": {"family": "integration", "desc": "HTTP request (REST)"},
35
+ "Execute Query": {"family": "integration", "desc": "SQL SELECT"},
36
+ "Execute Query V1": {"family": "integration", "desc": "SQL SELECT (v1)"},
37
+ "Execute Query V2": {"family": "integration", "desc": "SQL SELECT (v2)"},
38
+ "Execute Command": {"family": "integration", "desc": "SQL non-query (INSERT/UPDATE/DELETE)"},
39
+ "Execute Command V1": {"family": "integration", "desc": "SQL non-query (v1)"},
40
+ "Send Email": {"family": "integration", "desc": "SMTP email"},
41
+ "UTC Now": {"family": "datetime", "desc": "current UTC time"},
42
+ "Today": {"family": "datetime", "desc": "current date"},
43
+ "Format DateTime": {"family": "datetime", "desc": "format a datetime"},
44
+ "Update DateTime": {"family": "datetime", "desc": "add/subtract on a datetime"},
45
+ "Generate GUID": {"family": "datetime", "desc": "new GUID"},
46
+ "Upload File": {"family": "file", "desc": "upload a file"},
47
+ "Get File Data": {"family": "file", "desc": "read a file's data"},
48
+ "Move File v1": {"family": "file", "desc": "move/rename a file"},
49
+ "Create Folder": {"family": "file", "desc": "create a folder"},
50
+ "Read Range": {"family": "file", "desc": "read an Excel range"},
51
+ "Get Last Used Row": {"family": "file", "desc": "last used Excel row"},
52
+ "Export To XLSX": {"family": "file", "desc": "write rows to an .xlsx"},
53
+ "Generate Document": {"family": "document", "desc": "render a document template (file or HTML)"}
54
+ }
55
+ }
@@ -0,0 +1,182 @@
1
+ {
2
+ "_note": "Platform data types (primitive + procesio built-in). Stable ids. Fetched live 2026-06-24 from /api/DataTypes/primary and /api/DataTypes/procesio. Regenerate with dto/data/_refresh.py.",
3
+ "primary": [
4
+ {
5
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121210",
6
+ "name": "Boolean",
7
+ "displayName": "Boolean",
8
+ "csharpCorrespondent": 10,
9
+ "isDataModel": false
10
+ },
11
+ {
12
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121211",
13
+ "name": "Integer",
14
+ "displayName": "Integer",
15
+ "csharpCorrespondent": 20,
16
+ "isDataModel": false
17
+ },
18
+ {
19
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121212",
20
+ "name": "Float",
21
+ "displayName": "Float",
22
+ "csharpCorrespondent": 30,
23
+ "isDataModel": false
24
+ },
25
+ {
26
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121213",
27
+ "name": "Double",
28
+ "displayName": "Double",
29
+ "csharpCorrespondent": 40,
30
+ "isDataModel": false
31
+ },
32
+ {
33
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121214",
34
+ "name": "String",
35
+ "displayName": "String",
36
+ "csharpCorrespondent": 50,
37
+ "isDataModel": false
38
+ },
39
+ {
40
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121218",
41
+ "name": "DateTime",
42
+ "displayName": "DateTime",
43
+ "csharpCorrespondent": 90,
44
+ "isDataModel": false
45
+ },
46
+ {
47
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121220",
48
+ "name": "Json",
49
+ "displayName": "Json",
50
+ "csharpCorrespondent": 120,
51
+ "isDataModel": false
52
+ },
53
+ {
54
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121221",
55
+ "name": "Object",
56
+ "displayName": "Object",
57
+ "csharpCorrespondent": 140,
58
+ "isDataModel": false
59
+ },
60
+ {
61
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121222",
62
+ "name": "Guid",
63
+ "displayName": "Guid",
64
+ "csharpCorrespondent": 100,
65
+ "isDataModel": false
66
+ }
67
+ ],
68
+ "procesio": [
69
+ {
70
+ "id": "10c6ac59-3929-49e6-99dc-121212121219",
71
+ "name": "FileDataModel",
72
+ "displayName": "File",
73
+ "csharpCorrespondent": 0,
74
+ "isDataModel": true
75
+ },
76
+ {
77
+ "id": "10c6ac59-3929-49e6-99dc-121212121220",
78
+ "name": "ErrorDataModel",
79
+ "displayName": "Error",
80
+ "csharpCorrespondent": 0,
81
+ "isDataModel": true
82
+ },
83
+ {
84
+ "id": "10c6ac59-3929-49e6-99dc-121212121221",
85
+ "name": "SystemDataModel",
86
+ "displayName": "System variable model",
87
+ "csharpCorrespondent": 0,
88
+ "isDataModel": true
89
+ },
90
+ {
91
+ "id": "7bd4db6d-42c6-4ee3-bd9e-b906c1d93e23",
92
+ "name": "inboundEmailInformation",
93
+ "displayName": "InboundEmailInformation",
94
+ "csharpCorrespondent": 0,
95
+ "isDataModel": true
96
+ },
97
+ {
98
+ "id": "62808178-eae9-4916-9ead-c1ba3e4d8281",
99
+ "name": "correlation",
100
+ "displayName": "Correlation",
101
+ "csharpCorrespondent": 0,
102
+ "isDataModel": true
103
+ },
104
+ {
105
+ "id": "a09d55c4-c26a-40b3-951d-77c3d4fffe18",
106
+ "name": "FileContent",
107
+ "displayName": "FileContent",
108
+ "csharpCorrespondent": 0,
109
+ "isDataModel": true
110
+ },
111
+ {
112
+ "id": "a09d55c4-c26a-40b3-951d-77c3d4fffe19",
113
+ "name": "FTPFilesInformations",
114
+ "displayName": "SFTPFilesInformation",
115
+ "csharpCorrespondent": 0,
116
+ "isDataModel": true
117
+ },
118
+ {
119
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121210",
120
+ "name": "Boolean",
121
+ "displayName": "Boolean",
122
+ "csharpCorrespondent": 10,
123
+ "isDataModel": false
124
+ },
125
+ {
126
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121211",
127
+ "name": "Integer",
128
+ "displayName": "Integer",
129
+ "csharpCorrespondent": 20,
130
+ "isDataModel": false
131
+ },
132
+ {
133
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121212",
134
+ "name": "Float",
135
+ "displayName": "Float",
136
+ "csharpCorrespondent": 30,
137
+ "isDataModel": false
138
+ },
139
+ {
140
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121213",
141
+ "name": "Double",
142
+ "displayName": "Double",
143
+ "csharpCorrespondent": 40,
144
+ "isDataModel": false
145
+ },
146
+ {
147
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121214",
148
+ "name": "String",
149
+ "displayName": "String",
150
+ "csharpCorrespondent": 50,
151
+ "isDataModel": false
152
+ },
153
+ {
154
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121218",
155
+ "name": "DateTime",
156
+ "displayName": "DateTime",
157
+ "csharpCorrespondent": 90,
158
+ "isDataModel": false
159
+ },
160
+ {
161
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121220",
162
+ "name": "Json",
163
+ "displayName": "Json",
164
+ "csharpCorrespondent": 120,
165
+ "isDataModel": false
166
+ },
167
+ {
168
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121221",
169
+ "name": "Object",
170
+ "displayName": "Object",
171
+ "csharpCorrespondent": 140,
172
+ "isDataModel": false
173
+ },
174
+ {
175
+ "id": "0317bfee-b2f5-4bde-bfe8-121212121222",
176
+ "name": "Guid",
177
+ "displayName": "Guid",
178
+ "csharpCorrespondent": 100,
179
+ "isDataModel": false
180
+ }
181
+ ]
182
+ }
@@ -0,0 +1,223 @@
1
+ """Data Model (DataType) builder — PURE config -> CreateDataTypeDto.
2
+
3
+ Verified against POST /api/DataTypes (the server assigns the real model/attribute
4
+ ids, ignoring ours; it derives each attribute's type from DataTypeId). See
5
+ description.md. Edit is desired-state: PUT renames the model, then attributes are
6
+ reconciled (add new / delete removed / replace changed) via the attribute
7
+ endpoints — DataType edit cannot change attributes in a single PUT.
8
+ """
9
+ from __future__ import annotations
10
+
11
+ import json
12
+ import uuid
13
+ from pathlib import Path
14
+
15
+ from tools.procesio.dto import refdata
16
+ from tools.procesio.dto.framework import Component
17
+
18
+ DIR = Path(__file__).resolve().parent
19
+
20
+
21
+ def _new_id() -> str:
22
+ return str(uuid.uuid4())
23
+
24
+
25
+ def _attribute(a: dict, parent_id: str, ctx: dict) -> dict:
26
+ """Expand one config attribute into a DataAttributeDto. Recursive for inline
27
+ nested objects."""
28
+ nid = ctx.get("new_id") or _new_id
29
+ name = a["name"]
30
+ disp = a.get("displayName") or name
31
+ is_list = bool(a.get("isList", False))
32
+ aid = nid()
33
+ node = {
34
+ "Id": aid, "ParentDataTypeId": parent_id, "Name": name, "DisplayName": disp,
35
+ "DataTypeName": None, "IsPrimaryType": False, "IsProcesio": False,
36
+ "IsPublic": bool(a.get("isPublic", False)), "Type": 1, "IsList": is_list,
37
+ "jsonProperty": a.get("jsonProperty") or name, "hidden": bool(a.get("hidden", False)),
38
+ "Attributes": [],
39
+ }
40
+ if "attributes" in a: # inline nested object -> sub data model
41
+ node["DataTypeId"] = nid()
42
+ node["IsDataModel"] = True
43
+ node["CsharpCorrespondent"] = 0
44
+ node["Attributes"] = [_attribute(x, node["Id"], ctx) for x in a["attributes"]]
45
+ elif "model" in a: # reference an existing data model
46
+ ref = a["model"].strip()
47
+ node["DataTypeId"] = (ctx.get("models", {}).get(ref.lower()) or ref)
48
+ node["IsDataModel"] = True
49
+ node["CsharpCorrespondent"] = 0
50
+ else: # primitive
51
+ node["DataTypeId"] = refdata.primitive_type_id(a["type"])
52
+ node["IsDataModel"] = False
53
+ node["CsharpCorrespondent"] = refdata.csharp_correspondent(a["type"])
54
+ return node
55
+
56
+
57
+ def build(config: dict, ctx: dict) -> dict:
58
+ """config -> CreateDataTypeDto (the POST /api/DataTypes body)."""
59
+ nid = ctx.get("new_id") or _new_id
60
+ name = config["name"]
61
+ disp = config.get("displayName") or name
62
+ public = bool(config.get("isPublic", True))
63
+ # platform trick: Data Model from JSON — `fromJson` infers the model server-side
64
+ # (prepare_ctx calls POST /api/DataTypes/generate); we wrap it as the Content.
65
+ if ctx.get("generated_content"):
66
+ content = dict(ctx["generated_content"])
67
+ content.update({"Name": name, "DisplayName": disp, "IsDataModel": True,
68
+ "IsPrimaryType": False, "IsProcesio": False, "IsPublic": public,
69
+ "CsharpCorrespondent": 0, "Type": 1})
70
+ return {"Name": name, "DisplayName": disp, "IsPublic": public, "Content": content}
71
+ model_id = nid()
72
+ content = {
73
+ "Id": model_id, "Name": name, "DisplayName": disp,
74
+ "IsDataModel": True, "IsPrimaryType": False, "IsProcesio": False,
75
+ "IsPublic": public, "CsharpCorrespondent": 0, "Type": 1, "ParentIds": [],
76
+ "Attributes": [_attribute(a, model_id, ctx) for a in config.get("attributes", [])],
77
+ }
78
+ return {"Name": name, "DisplayName": disp, "IsPublic": public, "Content": content}
79
+
80
+
81
+ # -- live id resolution for `model` references (impure, runs in the handler) ----
82
+
83
+ def prepare_ctx(client, config: dict) -> dict:
84
+ """Resolve any `model: <name>` references to live data-model ids in the active
85
+ workspace, so the pure build step can stay offline."""
86
+ out: dict = {}
87
+ fj = config.get("fromJson")
88
+ if fj is not None: # Data Model from JSON (platform trick)
89
+ content = fj if isinstance(fj, str) else json.dumps(fj)
90
+ gen = client.post("/api/DataTypes/generate",
91
+ {"Name": config["name"], "DisplayName": config.get("displayName") or config["name"],
92
+ "Content": content})
93
+ out["generated_content"] = gen
94
+ return out
95
+ refs = _collect_model_refs(config)
96
+ if not refs:
97
+ return {"models": {}}
98
+ models: dict[str, str] = {}
99
+ r = client.get("/api/DataTypes", {"addProperties": False, "pageNumber": 1,
100
+ "pageItemCount": 500, "includeProcesioEntries": True,
101
+ "includeExternalEntries": True})
102
+ items = r.get("pageItems") if isinstance(r, dict) else r
103
+ for it in (items or []):
104
+ nm = (it.get("name") or it.get("Name") or "").strip().lower()
105
+ if nm:
106
+ models[nm] = it.get("id") or it.get("Id")
107
+ return {"models": models}
108
+
109
+
110
+ def _collect_model_refs(config: dict) -> set[str]:
111
+ found: set[str] = set()
112
+
113
+ def walk(attrs):
114
+ for a in attrs or []:
115
+ if "model" in a:
116
+ found.add(a["model"].strip().lower())
117
+ if "attributes" in a:
118
+ walk(a["attributes"])
119
+ walk(config.get("attributes", []))
120
+ # An id reference (a guid) needn't be resolved; only names do, but resolving
121
+ # all is harmless — the builder falls back to the literal when not found.
122
+ return found
123
+
124
+
125
+ def _add_one_attribute(client, parent_id: str, a: dict) -> None:
126
+ """Add ONE attribute to a model via POST /api/DataTypes/attribute/{parentId} — the
127
+ SAME minimal call the PROCESIO UI makes (HAR-verified). For a model-REFERENCE
128
+ attribute (dataTypeId = another model's id) the server auto-inlines that model's
129
+ whole attribute tree into the parent AND compiles it. For an inline NEW sub-model
130
+ (the config used `attributes:`), create the sub-model first (empty + its own
131
+ attributes) then reference it by id — the UI never inlines a brand-new model in one
132
+ call. The minimal payload the UI sends: {id, displayName, name, dataTypeId, isList,
133
+ jsonProperty, parentDataTypeId}; the server derives isDataModel/type/etc."""
134
+ data_type_id = a.get("DataTypeId")
135
+ if a.get("IsDataModel") and a.get("Attributes"): # inline NEW sub-model -> create first
136
+ sub = client.post("/api/DataTypes", {
137
+ "name": a.get("Name"), "displayName": a.get("DisplayName") or a.get("Name"),
138
+ "content": None, "isPublic": True})
139
+ sub_id = sub.get("id") or sub.get("Id")
140
+ for child in a.get("Attributes") or []:
141
+ _add_one_attribute(client, sub_id, child)
142
+ data_type_id = sub_id
143
+ payload = {
144
+ "id": None, "displayName": a.get("DisplayName") or a.get("Name"),
145
+ "name": a.get("Name"), "dataTypeId": data_type_id,
146
+ "isList": bool(a.get("IsList")), "jsonProperty": a.get("jsonProperty") or a.get("Name"),
147
+ "parentDataTypeId": parent_id}
148
+ if a.get("hidden"):
149
+ payload["hidden"] = True
150
+ if a.get("IsPublic"):
151
+ payload["isPublic"] = True
152
+ client.post(f"/api/DataTypes/attribute/{parent_id}", payload)
153
+
154
+
155
+ def _create(client, dto, ctx):
156
+ """Create a data model exactly the way the PROCESIO UI does (HAR-verified): POST an
157
+ EMPTY model (content:null), then add EVERY attribute one-by-one via the attribute
158
+ endpoint. Attributes placed in the initial POST /api/DataTypes `Content` show up in
159
+ GET but are NEVER compiled into the runtime model — so documents binding the model
160
+ render "Unknown" and Generate Document throws "Unable to find attribute <id>". The
161
+ attribute endpoint is what compiles them (and inlines referenced child models). The
162
+ Data-Model-from-JSON path (generated_content) keeps the single POST — there the
163
+ server infers and creates the nested private models itself."""
164
+ if ctx.get("generated_content"):
165
+ return client.post("/api/DataTypes", dto)
166
+ content = (dto.get("Content") if isinstance(dto, dict) else None) or {}
167
+ resp = client.post("/api/DataTypes", {
168
+ "name": dto.get("Name"), "displayName": dto.get("DisplayName"),
169
+ "content": None, "isPublic": dto.get("IsPublic", True)})
170
+ model_id = (resp.get("id") or resp.get("Id")) if isinstance(resp, dict) else None
171
+ for a in content.get("Attributes") or []:
172
+ _add_one_attribute(client, model_id, a)
173
+ return resp
174
+
175
+
176
+ def _extract_id(resp, dto):
177
+ if isinstance(resp, dict):
178
+ return resp.get("id") or resp.get("Id")
179
+ return None
180
+
181
+
182
+ # -- desired-state edit: PUT rename + reconcile attributes ---------------------
183
+
184
+ def _edit(client, resource_id, config: dict, ctx: dict):
185
+ name = config["name"]
186
+ disp = config.get("displayName") or name
187
+ # 1) top-level rename / displayName
188
+ client.put("/api/DataTypes", {"Id": resource_id, "Name": name, "DisplayName": disp})
189
+ # 2) reconcile attributes against current
190
+ current = client.get(f"/api/DataTypes/{resource_id}")
191
+ cur_attrs = {(a.get("name") or "").lower(): a for a in (current.get("attributes") or [])}
192
+ want = {a["name"].lower(): a for a in config.get("attributes", [])}
193
+ # delete removed
194
+ for nm, a in cur_attrs.items():
195
+ if nm not in want:
196
+ client.delete(f"/api/DataTypes/attribute/{resource_id}/{a.get('id')}")
197
+ # add new / replace changed
198
+ for nm, a in want.items():
199
+ built = _attribute(a, resource_id, ctx)
200
+ if nm not in cur_attrs:
201
+ _add_one_attribute(client, resource_id, built) # compiles + inlines model refs
202
+ else:
203
+ cur = cur_attrs[nm]
204
+ same = (cur.get("dataTypeId") == built["DataTypeId"]
205
+ and bool(cur.get("isList")) == built["IsList"])
206
+ if not same:
207
+ built["Id"] = cur.get("id")
208
+ client.put(f"/api/DataTypes/attribute/{resource_id}", built)
209
+ return client.get(f"/api/DataTypes/{resource_id}")
210
+
211
+
212
+ COMPONENT = Component(
213
+ name="datatype",
214
+ description="PROCESIO data model (DataType): a named set of typed attributes.",
215
+ dir=DIR,
216
+ build=build,
217
+ create_endpoint=("POST", "/api/DataTypes"),
218
+ create=_create, # add model-reference attrs via the attribute endpoint -> parentIds back-link
219
+ get_path="/api/DataTypes/{id}",
220
+ extract_id=_extract_id,
221
+ prepare_ctx=prepare_ctx,
222
+ edit=_edit,
223
+ )
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "PROCESIO Data Model (DataType) config",
4
+ "description": "Minimal config to create/edit a PROCESIO custom data model. The builder expands each attribute into a full DataAttributeDto and wraps it in a CreateDataTypeDto. Primitive types resolve to stable platform ids; 'model' references another data model by name or id; 'attributes' defines an inline nested object.",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["name"],
8
+ "properties": {
9
+ "name": {"type": "string", "minLength": 1, "description": "Internal model name (the JSON key/identifier)."},
10
+ "displayName": {"type": "string", "description": "UI display name; defaults to name."},
11
+ "isPublic": {"type": "boolean", "default": true, "description": "Whether the model is public in the workspace."},
12
+ "fromJson": {"description": "Platform trick: infer the whole model from a JSON sample (object or JSON string) via /api/DataTypes/generate. Overrides attributes."},
13
+ "attributes": {
14
+ "type": "array",
15
+ "description": "The model's fields. Empty is allowed (an empty object model). Omit when using fromJson.",
16
+ "items": {"$ref": "#/$defs/attribute"}
17
+ }
18
+ },
19
+ "$defs": {
20
+ "attribute": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["name"],
24
+ "properties": {
25
+ "name": {"type": "string", "minLength": 1},
26
+ "displayName": {"type": "string"},
27
+ "jsonProperty": {"type": "string", "description": "JSON key this field maps to (defaults to name)."},
28
+ "isList": {"type": "boolean", "default": false, "description": "Field holds a list/array of the type."},
29
+ "hidden": {"type": "boolean", "default": false, "description": "Hide the attribute in the model UI."},
30
+ "isPublic": {"type": "boolean", "default": false, "description": "Mark the attribute public."},
31
+ "type": {
32
+ "type": "string",
33
+ "description": "A primitive type. Exactly one of type|model|attributes per attribute.",
34
+ "enum": ["boolean", "integer", "float", "double", "string", "datetime", "json", "object", "guid",
35
+ "bool", "int", "long", "number", "text", "str", "uuid", "date-time"]
36
+ },
37
+ "model": {"type": "string", "description": "Reference another data model by name or id (makes this a nested model field)."},
38
+ "attributes": {"type": "array", "items": {"$ref": "#/$defs/attribute"}, "description": "Inline nested object — its own fields."}
39
+ },
40
+ "oneOf": [
41
+ {"required": ["type"]},
42
+ {"required": ["model"]},
43
+ {"required": ["attributes"]}
44
+ ]
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,85 @@
1
+ # Data Model (DataType) sub-tool
2
+
3
+ Full lifecycle for a PROCESIO **custom data model** — a named set of typed attributes
4
+ referenced by process variables, documents, webhooks, forms, and data stores.
5
+
6
+ ## Actions
7
+
8
+ | Action | What |
9
+ |---|---|
10
+ | `datatype-create` | Build a model from a config (attribute-by-attribute, **or** `fromJson`). |
11
+ | `datatype-edit` | Desired-state edit: rename + add/replace/remove attributes. |
12
+ | `datatype-get` | `GET /api/DataTypes/{id}` — model + attributes. |
13
+ | `datatype-delete` | Delete a model. |
14
+ | `datatype-add-attribute` | Add ONE attribute (`--id --name --data-type [--is-list --hidden --public …]`). |
15
+ | `datatype-edit-attribute` | Edit ONE attribute (`--id --attribute` + fields to change). |
16
+ | `datatype-delete-attribute` | Remove ONE attribute. |
17
+ | `datatype-change-to-public` | Promote a **private** inner model (from `fromJson`) to **public**. |
18
+ | `datatype-clone` | Clone an inner model. |
19
+
20
+ (Raw 1:1 endpoints — `post-datatypes`, `post-datatypes-attribute-by-rootdatatypeid`,
21
+ `post-datatypes-private`, `post-datatypes-generate-file`, etc. — are also auto-exposed.)
22
+
23
+ ## Config (`datatype-create` / `datatype-edit`)
24
+
25
+ ```json
26
+ {
27
+ "name": "OrderResult", "displayName": "Order Result", "isPublic": true,
28
+ "attributes": [
29
+ {"name": "orderId", "type": "guid"},
30
+ {"name": "total", "type": "double"},
31
+ {"name": "lines", "type": "string", "isList": true},
32
+ {"name": "customer", "model": "CustomerModel"},
33
+ {"name": "items", "model": "OrderLine", "isList": true},
34
+ {"name": "meta", "attributes": [{"name": "source", "type": "string", "hidden": true}]}
35
+ ]
36
+ }
37
+ ```
38
+
39
+ Each attribute is exactly one of:
40
+ - **primitive** — `type` ∈ `boolean integer float double string datetime json object guid`
41
+ (aliases: `bool int long number text str uuid date-time`); `isList:true` for an array.
42
+ - **model reference** — `model`: another data model by **name** (resolved live) or id →
43
+ a nested-model field (`isList:true` for a list-of-model, e.g. a document repeating table).
44
+ - **inline nested object** — `attributes`: a brand-new sub-model defined inline.
45
+
46
+ Per-attribute options: `displayName`, `jsonProperty`, `isList`, `hidden`, `isPublic`.
47
+
48
+ **Data Model from JSON:** instead of `attributes`, pass `"fromJson": {…sample JSON…}`; the
49
+ model (incl. nested objects/lists) is inferred via `/api/DataTypes/generate`.
50
+
51
+ ## How it works on the wire (HAR-verified — this is the load-bearing detail)
52
+
53
+ **Create = EMPTY model first, then EACH attribute via the attribute endpoint.** The UI (and
54
+ now this tool) does NOT put attributes in the create POST:
55
+ 1. `POST /api/DataTypes` body `{name, displayName, content: null, isPublic}` → `{id}`.
56
+ 2. For EACH attribute: `POST /api/dataTypes/attribute/{modelId}` body
57
+ `{id:null, displayName, name, dataTypeId, isList, jsonProperty, parentDataTypeId}`.
58
+
59
+ A **model-reference** attribute (`dataTypeId` = another model's id) added this way makes the
60
+ server **auto-inline that child's whole attribute tree into the parent AND link the child's
61
+ `parentIds`**, and COMPILE it. Attributes placed in the create POST's `Content` instead show
62
+ up in `GET /api/DataTypes/{id}` but are **NEVER compiled into the runtime model** — a document
63
+ binding the model then renders every cell **"Unknown"** and Generate Document throws *"Unable
64
+ to find attribute &lt;id&gt;"*. (This cost ~10 debugging rounds; see the
65
+ `procesio-datatype-create` memory note.) Inline nested children are created as their own empty
66
+ model first, then referenced.
67
+
68
+ **Edit:** `PUT /api/DataTypes` renames only (ignores attributes/parentIds); attributes are
69
+ reconciled via `POST` (add — compiles), `PUT /api/dataTypes/attribute/{id}` (full object,
70
+ change), `DELETE /api/dataTypes/attribute/{id}/{attrId}` (remove).
71
+
72
+ ## Public vs private models — REUSABILITY (important)
73
+
74
+ - **Attribute-by-attribute** (`datatype-create` with `attributes`): a `model:` reference points
75
+ at an existing model, which **stays reusable** in other models.
76
+ - **`fromJson`**: the inferred nested inner models are created **PRIVATE — they cannot be
77
+ reused in other data models.** Promote one with `datatype-change-to-public`
78
+ (`--root-id <root model> --id <inner model>`) to make it reusable; `datatype-clone` clones an
79
+ inner model. (`POST /api/dataTypes/changeToPublic|clone` body `{rootDataTypeId, dataTypeId}`.)
80
+
81
+ ## Gotchas
82
+ - `IsProcesio`/`IsPrimaryType` true is rejected on update; always false for custom models.
83
+ - Primitive type ids are stable platform constants, bundled in `dto/data/platform_types.json`.
84
+ - `searchName` filters need ≥ 3 chars to take effect (server-side).
85
+ - `--data-type` on attribute actions accepts a primitive name, an existing model name, or a guid.
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "Customer",
3
+ "displayName": "Customer",
4
+ "isPublic": true,
5
+ "attributes": [
6
+ {
7
+ "name": "id",
8
+ "type": "guid"
9
+ },
10
+ {
11
+ "name": "name",
12
+ "type": "string"
13
+ },
14
+ {
15
+ "name": "age",
16
+ "type": "integer"
17
+ },
18
+ {
19
+ "name": "tags",
20
+ "type": "string",
21
+ "isList": true
22
+ },
23
+ {
24
+ "name": "address",
25
+ "attributes": [
26
+ {
27
+ "name": "city",
28
+ "type": "string"
29
+ },
30
+ {
31
+ "name": "zip",
32
+ "type": "string"
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ "name": "owner",
38
+ "model": "PersonModel"
39
+ }
40
+ ]
41
+ }