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,242 @@
1
+ # PROCESIO instance-history API — notes
2
+
3
+ How run history is read (endpoints + native actions), and the traps. Generalized
4
+ API facts; no client data. Measured live against Internal-PROD, 28/08/2026.
5
+
6
+ ## The endpoints (contract + measured shapes)
7
+
8
+ - **`GET /api/Projects/{id}/history`** (`get-projects-by-id-history`) — finished,
9
+ non-archived instances of a process, in a **time window**. Query: `pageNumber`,
10
+ `pageItemCount` (both required), `filter` (`ProcessTimeSpanFilterType`, default
11
+ `Last30Days=5`), `monthFilter` (with `CertainMonth=14`).
12
+ - **`GET /api/Projects/{id}/instances`** (`get-projects-by-id-instances`) — **live**
13
+ runtime instances only. Query: paging + `filterStatus` (repeatable `FlowStatus`).
14
+ No date filter.
15
+ - **`GET /api/Projects/{id}/instances/count`** — returns `{"result": <int>}`.
16
+ - **`GET /api/Projects/{id}/archive`** — archived (Cassandra) instances, same query
17
+ as `/history`. Hidden from Swagger; reachable.
18
+ - **`GET /api/Projects/instances/{id}/status`** (`get-instance-status`) — the
19
+ **primary result reader**. `flowTemplateId` required; `isArchived`/`getActions`/
20
+ `getVariables`/`getInternalVariables`/`addExtras` default true. Returns
21
+ `{"instance": {...}}`.
22
+ Status-poll cost (changed in v3.0.0, 2026-10): `addExtras=true` costs 2-6 extra backend
23
+ look-ups per call (starter name, webhook, schedule, form names, resource usage). A poll
24
+ loop that only reads `status` should send all four flags as `false` and fetch the values
25
+ once at the end (the tool's `run-process` poll does this, then reads `/output`).
26
+
27
+ **List envelope:** `{result:{totalItemCount, pageNumber, pageItemCount, pageItems[]}}`.
28
+ Read `totalItemCount`, not the row count, to know the true size (page cap hides the rest).
29
+
30
+ **Paging past the end (changed in v3.0.0, 2026-10).** A `pageNumber` beyond the last page
31
+ no longer returns an empty page: it returns the LAST page again, and `pageNumber` in the
32
+ envelope echoes the page actually served. A paging loop over `/instances`, `/history` or
33
+ `/archive` must stop at `ceil(totalItemCount / <requested page size>)` (use the size you
34
+ sent, not the echoed `pageItemCount`, which shrinks to the total on page 1); waiting for an
35
+ empty page never terminates while rows exist. With `totalItemCount: 0` and `pageNumber > 1`
36
+ the envelope can report `pageNumber: 0`.
37
+
38
+ ## Traps (each cost a real diagnosis)
39
+
40
+ - ⚠ **`filter` values are calendar buckets, not rolling windows.** `LastYear=13` is the
41
+ **previous calendar year**, not "last 12 months"; `ThisYear=8` is the current year.
42
+ A `/history` read with the wrong `filter` returns a well-formed **all-zero envelope
43
+ indistinguishable from "no history exists."** Runs in the current year need `filter=8`;
44
+ the endpoint default is `Last30Days=5`. Probe more than one window before concluding empty.
45
+ - ⚠ **`/instances/count` and `/instances` report different tiers.** The count can equal
46
+ the **history** total while the live `/instances` list is **empty** (finished runs have
47
+ left the live tier). For finished runs read `/history` (right window), not `/instances`.
48
+ - ⚠ **A history/instance list ROW carries no variables.** camelCase, ~26 fields: identity
49
+ = `id` (instance id) + `parentId` (the process id) + `title` + trigger (`formName` /
50
+ `webhookName` / `scheduleName`); timing = `createdOn` / `updatedOn` / `timeConsumed` /
51
+ `totalTimeConsumed` / `actionsConsumed`; `status` = `FlowStatus` (50 `STATUS_FINISH`,
52
+ 40 `STATUS_RUNNING_WITH_ERRORS`, 6 `STATUS_STOP_BY_USER`). The **outcome is not in the
53
+ row** — read it per instance from `/status`.
54
+ - ⚠ **`/status` `instance.variables[]` is VariableDto SCHEMA, not runtime values on a
55
+ historical read.** Each element has `id, name, type` (10 INPUT / 20 PROCESS / 30 OUTPUT /
56
+ 40 SYSTEM / 50 AUTO),
57
+ `dataType, isList, isError, isRequired, defaultValue` — **no `value` field**.
58
+ Type 50 AUTO (new in v3.0.0, 2026-10) is engine-written and read-only: the engine creates
59
+ it on the INSTANCE from action settings meant for it, named `{ActionName}_{PropertyName}`
60
+ (suffix `_2`, `_3` on a clash, 64-char cap), with the value in `defaultValue`. Today only
61
+ Call Subprocess uses it (e.g. `Call_Subprocess_ChildInstanceId`, plus a child instance id
62
+ list). AUTO and SYSTEM variables are always returned on instance / history / archive reads
63
+ (no `getInternalVariables` needed) and survive data-retention cleanup; PROCESS (20) values
64
+ are still deleted by it. Clients cannot create or retype either. So a past
65
+ run's `/status` gives the run record + the variable *definitions*; the concrete output
66
+ *values* are not on that path (use `isArchived=true` or the `Get Instance Outputs`
67
+ action). `/output` (`GetInstanceOutput`) is deprecated ("Not used by FE+BE"); prefer
68
+ `/status`. Casing: **live reads are camelCase; export bundles are PascalCase** — running
69
+ one shape's keys against the other yields a census of zeros.
70
+
71
+ ## Reading history from INSIDE a flow — binding matters
72
+
73
+ - ✅ **Native actions read run history with NO credential and NO store binding**
74
+ (`isProcesioAction=true`, `credential_params=0`):
75
+ - **`Get Recent Instances`** (`cf514e01-bd19-3b48-8e58-db786c0d7fd2`) — recent instances,
76
+ status filter ALL/1/6/30/50/40, optional process-id list.
77
+ - **`Count Recent Instances`** (`d42b8056-4cba-d34d-819c-00295ef66d53`).
78
+ - **`Get Instance Outputs`** (`98ab31ca-1dd2-fb47-bde7-40171612e4b1`) — a specific
79
+ instance's OUTPUT variables by name (needs flow + instance id + output selection).
80
+ - Their process-template-id list is **optional**: *"If this list is null or empty … the
81
+ entire workspace"* (`docs_info/Procesio Platform Actions.json`). So a flow reads its own
82
+ workspace's runs/counts/outputs with no foreign binding — the only ids are the pack's own.
83
+ - ⚠ **Call API to the platform's OWN REST API needs a bound REST credential.** `Call API`
84
+ v1/v2/v3 carry a **required** `credentials` param; only the legacy `Call API`
85
+ (`cd8bd0bc-9c9c-476c-b16e-975acde804de`) makes it optional — and the history endpoints
86
+ require a Bearer JWT, so a credential-less legacy call reaches them unauthenticated and
87
+ fails. A REST credential is a per-workspace, id-bound object that does not travel with an
88
+ exported pack. **To read run history binding-free, use the native actions, not Call API.**
89
+
90
+ ## Retention — how long a record lives
91
+
92
+ - **Customer process data: default UNLIMITED**, configurable per Master Workspace and per
93
+ process (security refs `07-data-protection-gdpr.md`, `13-questionnaire-template.md`). The
94
+ 2-week / 7-day figures are platform **logs** and **backups**, not run data.
95
+ - Per-process **`DataRetentionPolicyDto`** = `{deleteOnSuccess, deleteOnError,
96
+ deleteOnStopped}`, each `FlowDataRetentionType` (`Never=0`, `AtEndOfRuntime=1`,
97
+ `AtMoveToHistory=2`). `PATCH /api/Projects/{id}/dataRetention` sets it;
98
+ `DELETE /api/Projects/instances/{id}/dataRetention` deletes an instance's data.
99
+ A flow/instance with `DataRetention: null` inherits the workspace default (unlimited).
100
+ - **HIPAA Mode** is opt-in: "Controlled data retention + secure output retrieval"
101
+ (`08-application-security.md`) — can delete/secure outputs when enabled.
102
+ - Tiers: live `/instances` → `/history` (non-archived, windowed) → `/archive` (Cassandra,
103
+ `isArchived=true`). Tier moves are storage progression, **not deletion by default**.
104
+ - **Consequence for a run-history feature:** history is durable by default, so it can back a
105
+ log — but a customer's per-workspace/per-process retention policy or HIPAA Mode can delete
106
+ it, and a silently-aged-out history turns "did we process this?" into a confident wrong "no".
107
+
108
+ ### Process-History v3.0.0 fixes (2026-10, shipped without an announcement)
109
+
110
+ - A failed history insert no longer deletes the runtime row. Before, such an instance vanished
111
+ from BOTH `/instances` and `/history`; an instance missing from both on an older run may be
112
+ this defect, not retention.
113
+ - A retry of the move no longer overwrites the archived variables with an empty list.
114
+ - Instances move from `/instances` to `/history` faster, so the window in which a fresh run is
115
+ visible only in `/instances` is shorter. Still read both tiers before calling a run unlisted.
116
+
117
+ ## `Get Recent Instances` at RUNTIME — measured, and it corrects the action doc
118
+
119
+ Executed live (E-166); two documented behaviours did **not** reproduce, so verify before you
120
+ rely on them:
121
+
122
+ - **It is a RECENT-WINDOW read.** A process's older *finished* runs read as `griTotal 0`
123
+ until a fresh run appears, then the fresh one shows. A run-history view MUST set the window
124
+ deliberately (default `Last30Days`); trusting the default to reach back far enough returns
125
+ a well-formed zero for runs that really happened (the census-of-zeros, on the native action
126
+ now, not only the `/history` calendar bucket).
127
+ - **A single process id filters correctly** in EITHER `Select Process` or `Process Template
128
+ Id`. The Result rows carry `{Id, Status, UpdatedOn}` **only — no `parentId`/title**, so you
129
+ cannot tell processes apart per-row; the *filter value* is the only scoping.
130
+ - ⚠ **A LIST value in the process filter FAULTS at runtime.** A two-element id list
131
+ (`[pidA, pidB]`) in either param validates and `put-projects` fine, but the run returns
132
+ `griTotal = null` / 0 rows (a fault, not "0 matches") — tested with both processes freshly
133
+ run, so not a window effect. The friendly builder DSL additionally rejects a list literal at
134
+ the config-schema layer and a variable binding at back-end validation.
135
+ - ⚠ **An omitted / null filter returns 0 — NOT the whole workspace.** The action doc's "if
136
+ this list is null or empty … the entire workspace" did not reproduce for an omitted filter.
137
+ - **Therefore: to show N processes' histories, do N single-id reads and union them** — not one
138
+ list value, not the null=whole-workspace shortcut. (Bounded residual: the designer's own
139
+ multi-select picker may store a Value shape the action accepts that a bare id-list does not;
140
+ untested.) Reading a past run's OUTPUT *values* back works — via `/status` `defaultValue`
141
+ and `/output` `result.variable[<name>]`, not gated by `isArchived` (E-164 F-1310).
142
+
143
+ ## Capturing a run's output — capture it LIVE, don't count on reading it back
144
+
145
+ - ⚠ **`run-process` (POST /api/Projects/{id}/run) is fire-and-forget: it returns only
146
+ `{instanceId}` and launches asynchronously.** To get the run's output in one call pass
147
+ **`--synchronous`** (`run-process --id … --synchronous --timeout N`) — it polls to a terminal
148
+ status and returns `{instanceId, status, variable{<name>: <value>}, error}`. Without it you get
149
+ the id and nothing else. `run-process-with-file` already publishes → uploads → launches →
150
+ **polls** → returns that same output shape, so it needs no flag.
151
+ - ⚠ **A finished instance's output can be UNREADABLE afterwards, so capture at run time.**
152
+ Measured 01/09/2026 on finished scratch instances (status 50, minutes old): `/status`
153
+ (`get-instance-status`) returned **HTTP 400 / statusCode 450 "Database requested information not
154
+ found"** *even with `flowTemplateId` supplied*, and `/output` (`get-instance-output`) returned
155
+ **HTTP 500 wrapping 403** (it is the deprecated path). This does **not** contradict E-164's
156
+ "past-run values readable via `/status` `defaultValue`" as a rule — that was measured on a
157
+ deployed card, likely inside its retention/live window — but it shows the read-back is **not
158
+ guaranteed** for an arbitrary finished instance (retention policy, elapsed window, or workspace
159
+ tier can take it away). **The reliable pattern: capture the output synchronously as the run
160
+ finishes** (`--synchronous` / `run-process-with-file`); treat a later `/status` read-back as a
161
+ best-effort bonus, not the capture path. The list-instances row (identity + `status` + timing) is
162
+ always there to prove a run landed; the run's *values* are not.
163
+
164
+ ## Only FORM-launched instances are LISTED; API-launched ones are only COUNTED
165
+
166
+ > ⚠⚠ **CONTRADICTED 2026-09-16 — re-measure before relying on this section.** Runs launched
167
+ > through `POST /api/Projects/{id}/run` (synchronous and asynchronous) and through an anonymous
168
+ > webhook launch WERE listed: they appeared in `…/instances` first and then in `…/history`
169
+ > within minutes, in three workspaces, with and without recording enabled. The rows move
170
+ > between tiers on a timer, so a list read a few minutes after a run can show nothing in
171
+ > `/instances` while `/history` holds the run. The most likely explanation of the reading
172
+ > below is that tier move, not a route-dependent listing rule; that explanation is inferred,
173
+ > not measured. Always read `/instances` AND `/history` before concluding a run is unlisted.
174
+
175
+ Verified live on one flow, both ways, same day:
176
+
177
+ | launch route | `…/instances/count` | `…/instances` (list) | `Get Recent Instances` |
178
+ |---|---|---|---|
179
+ | process API (`/api/Projects/{id}/run`, publish→launch) | 41 | `totalItemCount: 0`, `pageItems: []` | `[]` |
180
+ | form API (`/api/FormProcess/…` — what a browser does) | +1 | the run, with `formName` populated | the run |
181
+
182
+ The listed row carries `formName`, `actionsConsumed`, `timeConsumed` and the submitter's
183
+ name — fields an API launch has no value for. That is the tell: the history list is a record
184
+ of **form submissions**, not of flow executions.
185
+
186
+ **Consequences.**
187
+
188
+ - A run-history view tested only through the process API reads as permanently empty, and the
189
+ natural conclusion — "the history flow is broken" — is wrong. Nothing is broken; the query
190
+ is correct and the store genuinely holds no listable rows yet.
191
+ - `Get Recent Instances` returning `[]` while `Count Recent Instances` returns a positive
192
+ number is not a contradiction and not a bug. Count and list are answering different
193
+ questions.
194
+ - **Acceptance for any card shipping a run-history view must include one submission through
195
+ `run-form-with-files`.** Without it the view cannot be distinguished from a broken one, and
196
+ a mockup render will fill the gap in review — which is exactly how a fabricated "-LIVE"
197
+ view gets shipped.
198
+
199
+ Generalises: where a platform exposes both a machine route and a UI route to the same
200
+ action, the audit trail may only record the UI route. Test the route the user will take.
201
+
202
+ ## The three response shapes, measured field-by-field (10/09/2026)
203
+
204
+ Measured against a scratch workspace on Internal-PROD. Field NAMES only; no values recorded.
205
+ These are the shapes anything that pre-fills a diagnostic bundle from the product has to bind to.
206
+
207
+ **Envelope:** `GET /api/Projects/instances/{id}/status` returns `{"result": {"instance": {…}}}`.
208
+
209
+ **`instance` — 33 fields:** `actions, actionsConsumed, active, canvasData, createdBy, createdById,
210
+ createdOn, currentActionId, customResponse, dataRetention, debugMode, description, firstName, formName,
211
+ id, isNotification, isValid, lastName, parentFlow, parentId, scheduleName, status, timeConsumed,
212
+ timeout, title, updatedBy, updatedById, updatedOn, variables, webhookName, webhooks, workspaceId,
213
+ workspaceName`.
214
+
215
+ **`instance.actions[]` — 19 fields:** `actionName, actionTemplateName, breakPoint, category, customData,
216
+ errorMessage, events, flowId, id, isDisabled, isTestable, parameters, parentId, ports, status,
217
+ templateId, testValues, variableErrorId`.
218
+ → **The error lives on the ACTION, not on the instance.** Select failed actions as those whose
219
+ `errorMessage` is non-empty; `variableErrorId` names the error-port variable. `currentActionId` on the
220
+ instance points at the action in flight.
221
+
222
+ **`instance.variables[]` — 9 fields:** `contextId, dataType, defaultValue, id, isError, isList,
223
+ isRequired, name, type`. **No `value` field**, confirming that a historical read yields the variable
224
+ SCHEMA and not runtime values. Values need the `Get Instance Outputs` native action or a synchronous run.
225
+ `type` takes 10 INPUT / 20 PROCESS / 30 OUTPUT / 40 SYSTEM / 50 AUTO (50 added in v3.0.0, 2026-10:
226
+ engine-written, value in `defaultValue`, always returned, survives retention cleanup; see the
227
+ Traps section above). **Measured live in prod:** on 2026-10-21 the engine already created these variables with the new readable names (`Call_Subprocess_InstanceId`, `Call_Subprocess_ChildInstanceId` holding the child's id, `Call_Subprocess_ChildInstanceIdList`) but typed them 20 (PROCESS), because the Call Subprocess template still served those settings as `ignore`. From 2026-10-22 the template serves `auto` and new runs type `Call_Subprocess_ChildInstanceId` and `Call_Subprocess_ChildInstanceIdList` as **50 (AUTO)**, holding the child's id; `Call_Subprocess_InstanceId` stays 20 because its setting is still `ignore`. Instances started before the fix keep type 20, so a reader that must cover older history should match by NAME, not by `type == 50`. Survival through data-retention cleanup is not verified yet.
228
+
229
+ **`/history` row — 26 fields:** as listed earlier in this note, plus confirmed presence of
230
+ **`currentActionId` and `workspaceId` on the row itself**, so a sweep can shortlist candidates without a
231
+ per-instance `/status` call. The outcome is still not on the row.
232
+
233
+ ### ⚠ There is no version anywhere on either object
234
+
235
+ `instance` has no version-shaped key, and `GET /api/Projects/{id}` returns `{result:{flow:{…}}}` whose 27
236
+ keys contain none either. `updatedOn` / `updatedBy` / `updatedById` record **that** a flow was edited and
237
+ **by whom**, never **what** changed: no endpoint returns a diff, a revision or a change log.
238
+
239
+ Generalises: **a record that carries an "updated" timestamp and an author is not a version history, and
240
+ treating it as one turns "what changed?" into an unanswerable question at exactly the moment it is
241
+ asked.** Any workflow whose next step depends on the previous definition must capture that definition
242
+ itself at the time it runs, because the platform will not reconstruct it afterwards.
@@ -0,0 +1,201 @@
1
+ # PROCESIO metering — where run cost actually lives, and where it does not
2
+
3
+ How to read what a process run consumed. Written after an attempt to measure the
4
+ cost of a long-running run found the obvious endpoint empty and a better one
5
+ undocumented. Auth/connection mechanics stay in
6
+ [PROCESIO-AUTH-NOTES.md](PROCESIO-AUTH-NOTES.md).
7
+
8
+ > ## ⚠ CORRECTION, 31/08/2026 — READ THIS BEFORE §2
9
+ >
10
+ > **§2 below was wrong about what the per-instance figures mean, and the error
11
+ > was the expensive kind: it named a live-looking instrument as the fallback for
12
+ > a dead one.** Controlled measurement on an unmetered workspace, with a positive
13
+ > control on every reading:
14
+ >
15
+ > | what was done | what the platform recorded |
16
+ > |---|---|
17
+ > | 100,001 ms of busy loop inside Node actions, 5 runs | **31 ms** total |
18
+ > | a Call API blocked for 30,000 ms by the callee | **14 ms** |
19
+ > | a Call API blocked for 120,000 ms | **8 ms** |
20
+ > | a Call API blocked for 300,000 ms | **15 ms** |
21
+ >
22
+ > `timeConsumed` is **not** wall-clock occupancy and does **not** include time
23
+ > spent waiting on a reply. It is flat in the single-to-low-double-digit
24
+ > milliseconds whatever the action does, and `timeConsumed == totalTimeConsumed`
25
+ > in every reading — including a five-minute wait, where §2 predicts the widest
26
+ > divergence. Treat both fields as **per-action orchestration overhead**, not as
27
+ > a measure of work.
28
+ >
29
+ > **The rule this leaves.** On a workspace with `subscriptionType: null` there is
30
+ > no endpoint that prices a run: the quota counter is dead (§1), the per-instance
31
+ > figures are blind to compute and to waiting, and the per-process endpoints
32
+ > return empty. If a decision needs the cost of a long wait, it cannot be
33
+ > measured on an unmetered account — say so and name it as a blocker, rather than
34
+ > substituting a number from an instrument that has not been shown to track the
35
+ > work. **Prove the instrument moves with the work before believing any figure it
36
+ > reports** — the same rule §1 states for the quota counter applies to its
37
+ > replacement, and skipping that step is exactly how the fallback was adopted.
38
+ >
39
+ > The instance-level fields remain useful for what they DO report reliably:
40
+ > `actionsConsumed` (an action count) and the existence and status of an instance.
41
+
42
+ ---
43
+
44
+ ## 1. `/api/Resources/used` is the QUOTA, and it may carry no consumption at all
45
+
46
+ `GET /api/Resources/used` returns the workspace's time budget:
47
+
48
+ ```json
49
+ {"result": {"subscriptionType": null, "price": 0.0,
50
+ "time": {"consumed": 0, "masterConsumed": 0, "canExceedPaidTime": true,
51
+ "limit": {"soft": 36000000, "hard": 36000000},
52
+ "notifyThreshold": 28800000},
53
+ "average": {"platform": {"total": 0, "internal": 0, "external": 0}, "custom": 0},
54
+ "expirationDate": "...", "autoRenewable": true}}
55
+ ```
56
+
57
+ **The budget is published even when nothing is counted against it.** On a workspace
58
+ with **`subscriptionType: null`** every consumption field stays at `0` — before a
59
+ run, after it, and after many runs across an hour. It is not a settling lag and it
60
+ is not a disabled recorder: `GET /api/ResourceTrackingConfig` reports
61
+ **`isRecordingEnabled: true`** on the same workspace.
62
+
63
+ **The trap:** the endpoint answers `200` with a plausible-looking body, so a
64
+ before/after diff reads as "this run cost nothing" rather than "this endpoint does
65
+ not measure". **Never infer cost from a zero delta here.** Prove the counter moves
66
+ at all before interpreting any reading from it; if `subscriptionType` is null,
67
+ expect it not to.
68
+
69
+ Scope note: these endpoints are workspace-scoped. `MasterWorkspace.Read` variants
70
+ (`/api/Resources/used/subworkspaces`, `/api/Subscriptions`, the
71
+ `executionEnvironment/concurrency` analytics) return **403** to a sub-workspace
72
+ credential.
73
+
74
+ ## 2. The real per-run meter is per INSTANCE, and it is in two places
75
+
76
+ Both are populated immediately and on any workspace, metered or not.
77
+
78
+ **`GET /api/Projects/{processId}/instances`** — each `pageItems[]` entry carries:
79
+
80
+ | Field | Meaning |
81
+ |---|---|
82
+ | `actionsConsumed` | actions executed in that instance |
83
+ | `timeConsumed` | **wall-clock occupancy**, including time spent waiting on a reply |
84
+ | `totalTimeConsumed` | **compute**, the time actions spent executing |
85
+ | `timeout` | the instance's own timeout setting |
86
+
87
+ **`GET /api/Resources/analytics/instances/{instanceId}/details`** — the same run
88
+ broken down by action type:
89
+
90
+ ```json
91
+ {"result": [{"instanceId": "...", "actionName": "Node",
92
+ "totalRuns": 15, "totalTime": 200, "actionExecutionTime": 198}]}
93
+ ```
94
+
95
+ `totalTime` ↔ `timeConsumed`; `actionExecutionTime` ↔ `totalTimeConsumed`.
96
+
97
+ ### The naming is inverted from intuition — check it, do not trust it
98
+
99
+ **`totalTimeConsumed` is the SMALLER figure.** It is compute. `timeConsumed`, which
100
+ sounds like the subset, is the larger occupancy figure. Verify the pairing on a
101
+ known instance before building anything on it: read both endpoints for the same
102
+ instance id and confirm which number is larger.
103
+
104
+ ### The two columns diverge exactly where a wait is
105
+
106
+ Occupancy minus compute is the time an action spent blocked. On a flow whose actions
107
+ are all local the two are nearly equal; on a Call API waiting for a reply they
108
+ separate sharply (observed: an action at `totalTime` 747 ms against
109
+ `actionExecutionTime` 5 ms). Across repeated runs **compute is stable and occupancy
110
+ is volatile**, and all the volatility sits in the calls that wait.
111
+
112
+ ## 3. The two endpoints can permanently DISAGREE about the same instance
113
+
114
+ Observed on the run with the longest wait in a set: the details endpoint reported
115
+ fewer actions and a lower total than the instance list, and **the two never
116
+ converged** across re-reads minutes and then tens of minutes apart.
117
+
118
+ Worse for anyone testing for lag: **the details endpoint was stable across two reads
119
+ thirty seconds apart while still being incomplete.** Two matching reads are not proof
120
+ of settlement. Reconcile the two endpoints against each other rather than trusting a
121
+ repeat read of one.
122
+
123
+ ## 4. Nested processes are metered SEPARATELY, and occupancy double-counts them
124
+
125
+ A process reaching another through **Call API** launches a **separate instance** with
126
+ its own `actionsConsumed` / `timeConsumed` / `totalTimeConsumed`. While the caller's
127
+ Call API waits, the callee is executing and billing its own instance.
128
+
129
+ Consequences:
130
+
131
+ - **Count the whole call tree, not the entry instance.** An entry process's action
132
+ count can be a fraction of the request's true total once its callees are added.
133
+ Comparing an entry instance's count against a whole-tree figure loses the
134
+ difference silently.
135
+ - **On the occupancy column the same stretch of time appears twice** — as the
136
+ caller's wait and as the callee's run. On the compute column it appears once.
137
+
138
+ ## 5. What the vendor documents about which time is charged
139
+
140
+ From the PROCESIO docs (processing-time FAQ). **Documented, not verified by
141
+ measurement** — the endpoint that would confirm it is the one in §1:
142
+
143
+ - *"the processing time is consumed while waiting for an external service to reply
144
+ as a running process consumes resources on our infrastructure"* — **a blocking
145
+ external call is charged for the whole wait.**
146
+ - *"Delay action is counted only while during its processing. But for the period set
147
+ to delay... the action is not processing, and therefore this delay time is not
148
+ counted"* — **a parked Delay is exempt.**
149
+ - *"webhooks that trigger a process are not counted against the processing time"*.
150
+ - The stated platform average is **~100 ms per action**.
151
+
152
+ **The measurement trap this creates:** a Delay is the natural way to synthesise a
153
+ long run, and it is the one mechanism documented as exempt. Timing a Delay therefore
154
+ measures the exempt case and says nothing about a blocking call. **To measure what a
155
+ long external wait costs, the long run must be produced by a call that blocks**, not
156
+ by a Delay.
157
+
158
+ ## 6. Timeouts
159
+
160
+ | Timeout | Value | Applies to |
161
+ |---|---|---|
162
+ | **Instance / process** | **none.** Per-instance `timeout: 0`; docs state a per-process timeout "is not possible" and the feature does not exist | nothing kills a long run |
163
+ | **Call API action** | min **60 s**, max **3600 s** | one HTTP call |
164
+ | **AI Decisional action** | 1–3600 s, default 60 s | one provider call |
165
+ | **Node action** | integer; throws on expiry | one script |
166
+ | **Synchronous launch** | `?runSynchronous=true&secondsTimeOut=N` (300 in the documented example, **no maximum stated**) | the caller's own wait |
167
+
168
+ A run is not bounded by the platform. It is bounded by whichever action timeout it
169
+ trips first.
170
+
171
+ ## 7. Instance history is trimmed aggressively, and the two endpoints differ
172
+
173
+ Only a handful of instances per process survive. **Do not plan to read an
174
+ interesting run later** — capture its figures in the same script that launches
175
+ them.
176
+
177
+ Trimming is faster than "within days": rows have been observed ageing out of
178
+ `GET /api/Projects/{id}/instances` **within about eight minutes**, one by one,
179
+ with no new runs to displace them. The analytics **details endpoint outlived the
180
+ list** for the same instance, so the two have different retention and a missing
181
+ row in one is not proof the run is gone from the other.
182
+
183
+ ## 9. Resource recording defaults to OFF on a new workspace
184
+
185
+ `GET /api/ResourceTrackingConfig` reports `isRecordingEnabled` per workspace, and
186
+ a freshly created workspace can arrive with it **false** and a zeroed `gid`. In
187
+ that state the analytics details endpoint returns an **empty array** while the
188
+ instance list still answers — so a zero from the details endpoint is confounded
189
+ between "not recorded" and "not consumed" until the flag is read.
190
+
191
+ Check the flag before interpreting any analytics zero.
192
+ `PUT /api/ResourceTrackingConfig/toggle/{true|false}` sets it (needs
193
+ `Workspace.Admin`) and creates the per-workspace record. Note that enabling it
194
+ does **not** make the figures track the work — see the correction at the top of
195
+ this file; it only makes the details endpoint answer at all.
196
+
197
+ ## 8. Wall-clock measured by a polling harness is not the run
198
+
199
+ A harness that polls on an interval quantises to that interval: runs the platform
200
+ records at a few hundred milliseconds read as ~9 s against a 5 s poll. **Use the
201
+ platform's own figures for duration**, never the harness's elapsed time.