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,194 @@
1
+ """Web-session lifecycle abstraction: hydrate / dehydrate / lease (spec P0.0-09).
2
+
3
+ The PROCESIO web-tool service hosts per-(workspace, user) browser profiles: hydrate a
4
+ profile from object storage -> run -> dehydrate it back, with a per-session lease so one
5
+ profile is driven by one browser at a time (the single-owner ``SingletonLock`` reality
6
+ of a persistent Chrome profile - memory ``web-profile-no-parallel``; the local
7
+ serialize-web-profile broker). See
8
+ ``todo/on-hold/procesio-aat-module/09-web-tool-service.md``.
9
+
10
+ This module factors that lifecycle into a reusable abstraction with a **local
11
+ filesystem** implementation, so the platform swaps the storage + lease backends
12
+ (object storage + a distributed lease) without changing any caller. P0.0 delivers the
13
+ shape + the local impl + the object-store swap point - NOT a hosted browser fleet.
14
+
15
+ Metadata mirrors the CSK session pointer: {name, site, kind, created, rotated, health}.
16
+ """
17
+ from __future__ import annotations
18
+
19
+ import json
20
+ import os
21
+ import sys
22
+ import time
23
+ from abc import ABC, abstractmethod
24
+ from contextlib import contextmanager
25
+ from pathlib import Path
26
+
27
+ _REPO = Path(__file__).resolve().parents[2]
28
+ if str(_REPO) not in sys.path:
29
+ sys.path.insert(0, str(_REPO))
30
+
31
+ from tools._lib import userdata # noqa: E402
32
+
33
+
34
+ class LeaseTimeout(RuntimeError):
35
+ """Raised when a per-session lease cannot be acquired within the timeout - the
36
+ session is in use by another browser (serialized single-owner access)."""
37
+
38
+
39
+ class WebSessionStore(ABC):
40
+ """Persistence + lease contract for web-login profiles. Backends are dumb: the
41
+ caller decides when to hydrate/dehydrate; the store moves bytes and guards leases."""
42
+
43
+ @abstractmethod
44
+ def hydrate(self, ws: str | None, user: str | None, name: str) -> Path:
45
+ """Materialize the session's profile locally and return its directory."""
46
+
47
+ @abstractmethod
48
+ def dehydrate(self, ws: str | None, user: str | None, name: str, profile_dir: Path) -> None:
49
+ """Persist profile changes back to durable storage."""
50
+
51
+ @abstractmethod
52
+ def list_sessions(self, ws: str | None, user: str | None) -> list[dict]:
53
+ ...
54
+
55
+ @abstractmethod
56
+ def pointer(self, ws: str | None, user: str | None, name: str) -> dict | None:
57
+ ...
58
+
59
+ @abstractmethod
60
+ def _lock_path(self, ws: str | None, user: str | None, name: str) -> Path:
61
+ ...
62
+
63
+ @contextmanager
64
+ def lease(self, ws: str | None, user: str | None, name: str, *,
65
+ timeout: float = 30.0, poll: float = 0.1):
66
+ """Acquire exclusive use of one session, hydrate it, yield the profile dir, then
67
+ dehydrate + release. Serializes same-session access (a second acquirer waits up
68
+ to ``timeout`` then raises ``LeaseTimeout``); different sessions run in parallel.
69
+ The platform swaps this for a distributed lease with identical semantics."""
70
+ lock = self._lock_path(ws, user, name)
71
+ lock.parent.mkdir(parents=True, exist_ok=True)
72
+ fd = _acquire_lock(lock, timeout=timeout, poll=poll)
73
+ try:
74
+ profile_dir = self.hydrate(ws, user, name)
75
+ try:
76
+ yield profile_dir
77
+ finally:
78
+ self.dehydrate(ws, user, name, profile_dir)
79
+ finally:
80
+ _release_lock(fd, lock)
81
+
82
+
83
+ class LocalWebSessionStore(WebSessionStore):
84
+ """Filesystem implementation. Profiles live under ``userdata.sessions_dir()`` which
85
+ is already per-(workspace, user) once ``AAT_WORKSPACE_ID`` / ``AAT_USER_ID`` are set
86
+ (item P0.0-01), so tenant isolation is automatic. Hydrate/dehydrate are in-place
87
+ (the durable copy IS the local dir); the object-store impl overrides them to move
88
+ bytes to/from S3/MinIO."""
89
+
90
+ def _root(self, ws: str | None, user: str | None) -> Path:
91
+ # sessions_dir() derives from userdata.base(), which already folds in (ws,user).
92
+ return userdata.sessions_dir()
93
+
94
+ def _session_dir(self, ws, user, name: str) -> Path:
95
+ return self._root(ws, user) / userdata._safe_component(name)
96
+
97
+ def _index_path(self, ws, user) -> Path:
98
+ return self._root(ws, user) / "sessions_index.json"
99
+
100
+ def _lock_path(self, ws, user, name: str) -> Path:
101
+ return self._session_dir(ws, user, name).with_suffix(".lock")
102
+
103
+ def hydrate(self, ws, user, name: str) -> Path:
104
+ d = self._session_dir(ws, user, name)
105
+ (d / "profile").mkdir(parents=True, exist_ok=True)
106
+ return d / "profile"
107
+
108
+ def dehydrate(self, ws, user, name: str, profile_dir: Path) -> None:
109
+ # Local: the profile dir IS durable; just touch the pointer's rotated time.
110
+ self._touch_pointer(ws, user, name)
111
+
112
+ def _load_index(self, ws, user) -> dict:
113
+ p = self._index_path(ws, user)
114
+ if p.exists():
115
+ try:
116
+ return json.loads(p.read_text(encoding="utf-8"))
117
+ except (ValueError, OSError):
118
+ return {}
119
+ return {}
120
+
121
+ def _save_index(self, ws, user, idx: dict) -> None:
122
+ p = self._index_path(ws, user)
123
+ p.parent.mkdir(parents=True, exist_ok=True)
124
+ p.write_text(json.dumps(idx, ensure_ascii=False, indent=2), encoding="utf-8")
125
+
126
+ def put_pointer(self, ws, user, name: str, *, site: str = "",
127
+ kind: str = "profile", health: str = "unknown") -> dict:
128
+ idx = self._load_index(ws, user)
129
+ now = _now_iso()
130
+ meta = idx.get(name) or {"name": name, "created": now}
131
+ meta.update({"name": name, "site": site or meta.get("site", ""),
132
+ "kind": kind, "health": health, "rotated": now})
133
+ meta.setdefault("created", now)
134
+ idx[name] = meta
135
+ self._save_index(ws, user, idx)
136
+ return meta
137
+
138
+ def _touch_pointer(self, ws, user, name: str) -> None:
139
+ idx = self._load_index(ws, user)
140
+ if name in idx:
141
+ idx[name]["rotated"] = _now_iso()
142
+ self._save_index(ws, user, idx)
143
+
144
+ def pointer(self, ws, user, name: str) -> dict | None:
145
+ return self._load_index(ws, user).get(name)
146
+
147
+ def list_sessions(self, ws, user) -> list[dict]:
148
+ return list(self._load_index(ws, user).values())
149
+
150
+
151
+ class ObjectStoreWebSessionStore(WebSessionStore):
152
+ """Swap point for the platform: hydrate/dehydrate move the profile between an
153
+ ephemeral local dir and object storage (S3/MinIO) per (workspace, user); the lease
154
+ is a distributed lock. Not implemented in P0.0 - the hosted browser fleet + object
155
+ storage + streamed login-capture are platform-phase, highest-risk (SPIKE 3)."""
156
+
157
+ def __init__(self, *_a, **_k) -> None:
158
+ raise NotImplementedError(
159
+ "ObjectStoreWebSessionStore is the platform-phase swap point (spec P0.0-09 / "
160
+ "procesio-aat-module/09); use LocalWebSessionStore locally.")
161
+
162
+ def hydrate(self, ws, user, name): ...
163
+ def dehydrate(self, ws, user, name, profile_dir): ...
164
+ def list_sessions(self, ws, user): ...
165
+ def pointer(self, ws, user, name): ...
166
+ def _lock_path(self, ws, user, name): ...
167
+
168
+
169
+ # -- lease primitives (local lockfile; the platform swaps a distributed lease) --------
170
+
171
+ def _acquire_lock(lock: Path, *, timeout: float, poll: float) -> int:
172
+ deadline = time.monotonic() + timeout
173
+ while True:
174
+ try:
175
+ return os.open(str(lock), os.O_CREAT | os.O_EXCL | os.O_WRONLY)
176
+ except FileExistsError:
177
+ if time.monotonic() >= deadline:
178
+ raise LeaseTimeout(f"session lock held: {lock.name}")
179
+ time.sleep(poll)
180
+
181
+
182
+ def _release_lock(fd: int, lock: Path) -> None:
183
+ try:
184
+ os.close(fd)
185
+ finally:
186
+ try:
187
+ lock.unlink()
188
+ except OSError:
189
+ pass
190
+
191
+
192
+ def _now_iso() -> str:
193
+ from datetime import datetime, timezone
194
+ return datetime.now(timezone.utc).isoformat(timespec="seconds")
@@ -0,0 +1,91 @@
1
+ # Connector Builder — API notes (durable)
2
+
3
+ Hard-won facts about the AI Connector Builder backend so future sessions don't re-derive them. Source repo (the app itself): the AI Connector Builder checkout — see its `documentation/03-API-REFERENCE.md`, `04-PIPELINE-ENGINE.md`, and `deploy/Caddyfile.example`.
4
+
5
+ ## What the platform is
6
+
7
+ A FastAPI + Postgres app that generates **.NET/C# PROCESIO Custom Action connectors** from API docs via an 8-stage LLM pipeline (LiteLLM, vendor-agnostic). A standalone compiler service runs `dotnet restore/build/pack` and returns a `.nupkg`. Frontend is Next.js. Admin-configurable: prompts, spec modules, examples, validation rules all editable through the API (the "knowledge" endpoints).
8
+
9
+ ## Base URL & routing (verified live 2026-06-30)
10
+
11
+ - Production host: `https://connector-builder.procesio.app`. Caddy reverse-proxies **`/api/*` → backend** (the `/api` prefix is stripped before reaching FastAPI). So the REST surface documented without a prefix in `03-API-REFERENCE.md` lives under **`/api`** in production.
12
+ - `GET https://connector-builder.procesio.app/api/auth/me` → works.
13
+ - The bare host root serves the Next.js frontend (so `GET /health` at the root returns the SPA 404, not the backend health — health is a backend route under `/api` semantics in prod).
14
+ - Dev: backend at `:8000`, frontend at `:3001`. Swagger at `/docs`, OpenAPI at `/openapi.json`.
15
+ - Tool default base = `https://connector-builder.procesio.app/api`; override with env `CONNECTOR_BUILDER_BASE_URL`.
16
+
17
+ ## Auth — BOTH modes are just a bearer token
18
+
19
+ `backend/app/core/permissions.py::get_current_user` requires `Authorization: Bearer <token>`. If the token **starts with `acb_`** it's looked up as an API key (sha256 hash match in the `api_keys` table); otherwise it's verified as a JWT access token.
20
+
21
+ So:
22
+ 1. **API key**: `Authorization: Bearer acb_...` — verbatim, no login call. Simplest. The key belongs to a specific user (and inherits that user's role).
23
+ 2. **Username/password**: `POST /api/auth/login {"email","password"}` → `{"access_token","refresh_token","token_type":"bearer"}`; use the `access_token` as the bearer. (The login field is **`email`**, not `username`.)
24
+
25
+ The provided account (a platform login email) and the provided API key `acb_...091` both resolve to the **same admin user** (`role: admin`), so the tool can reach every `/admin/*` endpoint. There is no functional difference between the two modes for this account beyond JWT expiry vs. a long-lived key.
26
+
27
+ Roles: `viewer` / `builder` / `admin`. Most build endpoints need `builder` or `admin`; knowledge/config/users/issues need `admin`.
28
+
29
+ ## Pipeline state machine (drives the agent's `next-step`)
30
+
31
+ `status` (overall) × `step_status` decide what to call next:
32
+
33
+ - `pending` → `start-build` (full auto) OR `gather` (manual, synchronous GATHER+CLARIFY).
34
+ - `clarifying` (after gather) → `answer --answers '{...}'` (keys are the question ids) → moves to `planning`.
35
+ - `planning` (plan present) → `approve-plan` (→ generate) or `revise-plan --feedback`.
36
+ - `generating` + `step_status=waiting_user` → review files, then `approve-generate` (→ validate/compile/fix/deliver) or `regenerate` / `regenerate-file`.
37
+ - `validating` + `waiting_user` → `validate-autofix` | `validate-continue` | `validate-return-to-generate`.
38
+ - `failed` → `retry [--from-step N]` (1-3 single stage; 4-5 generate→deliver; ≥6 compile→deliver) or `reset` (only from failed/clarifying/planning).
39
+ - `completed` → `download-artifact`.
40
+ - Jump anywhere with `override-stage --target-step N --target-status running|waiting_user`. **Semantics matter**: `running` clears the target step's own data and re-runs it; `waiting_user` PRESERVES the target step's data and just re-opens its review screen (use this to revisit a plan without wiping it — otherwise `revise-plan` returns "no plan to revise").
41
+
42
+ ## Endpoints worth knowing
43
+
44
+ - `GET /builds` paginates (`per_page` max 500) with `status` / `archive_status` / `created_by` filters. Each build carries `version_prefix`/`version_build`/`package_version`.
45
+ - `PATCH /builds/{id}/version` only works at **step 3 (Plan) + waiting_user**, and only allows non-decreasing semver.
46
+ - Binary endpoints (stream, not JSON): `GET /builds/{id}/artifact` (the `.nupkg`), `…/files/{file}/download`, `…/files/download-all` (zip). The tool's `download` helper streams these to `--out` and reads the real filename from `Content-Disposition`.
47
+ - `POST /admin/build-selftest` compiles a trivial 2-file C# project end-to-end — a fast health check of the compiler service without burning LLM tokens.
48
+ - **Knowledge** = how the builder itself is tuned. `GET/POST/PUT/DELETE /admin/knowledge/{module_type}/{name}` where `module_type ∈ {prompt, spec_module, example, validation_rule, clarification}`. After editing, `POST /admin/config/reload` to refresh the in-memory cache. Editing `spec_module`/`example`/`prompt` changes generation quality for **all future builds** — this is the deepest improvement loop.
49
+
50
+ ## Errors
51
+
52
+ Backend returns `{"detail": "..."}` on error (FastAPI default). The compiler internal API returns `{"detail","error_code"}`. The tool maps non-2xx → `ApiError` (`auth_failed` for 401/403, else `api_error`) and surfaces the server `detail` in the message.
53
+
54
+ ## PROCESIO interop (the whole point)
55
+
56
+ The connector this platform builds is a PROCESIO Custom Action package. The `procesio` tool already installs one:
57
+
58
+ ```
59
+ procesio customaction-upload --file <connector.nupkg> # POST /api/actions multipart field "package" → {id}
60
+ procesio customaction-list # confirm it installed
61
+ procesio customaction-delete --id <actionId> # uninstall before re-upload
62
+ ```
63
+
64
+ End-to-end loop: `connector-builder download-artifact` → `procesio customaction-upload` → exercise it in a PROCESIO process (run-process / forms / webhooks) → capture failures → feed them back via `connector-builder revise-plan` / `regenerate-file` / (for systemic issues) `knowledge-update` → recompile → re-upload. The **connector-builder agent** encodes this loop; the procesio agent's build-and-test playbook governs the PROCESIO-side testing.
65
+
66
+ ## Tool internals
67
+
68
+ - Dir name is hyphenated → modules imported by BARE name (`import client`, `from handlers import builds`) with the tool root on sys.path (see `main.py`); tests use an importlib-alias conftest (`cb_*`), NO `tests/__init__.py`, unique `test_cb_*` basenames.
69
+ - `tool.yaml` is GENERATED by `gen_manifest.py` from the live `ACTIONS` dict; never hand-edit actions/args.
70
+
71
+ ## Live-run learnings (first real E2E build, 2026-06-30)
72
+
73
+ Built a "Send Slack Message" custom action (Slack `chat.postMessage`) end-to-end to exercise the tool+agent. The pipeline ran correctly through create → gather → clarify (10 PROCESIO-aware questions) → plan → generate (6 files, idiomatic SDK code) → compile. Operational facts learned:
74
+
75
+ - **Synchronous LLM endpoints return 504 at the proxy but COMPLETE server-side.** `gather`, `answers` (PLAN), and `revise-plan` each took longer than Caddy's upstream timeout → without `--wait` the tool got a clean `api_error` 504. The backend kept working. **Handled since v0.2:** pass `--wait` to `gather` / `answer` / `revise-plan` and the tool swallows a 502/503/504 (or client-side timeout) and polls `get-build` to the settled state (`--wait-timeout` default 600s, `--poll-interval` 8s), returning the full build detail with `waited`/`settled` markers. A standalone `wait-build --build-id [--until settled|terminal]` blocks after the fast background stages (`approve-generate`/`retry`/`start-build`) until compile finishes. Robustness detail: the wait guards on `updated_at` advancing past a pre-trigger baseline so a fast poll can't return the stale pre-stage `waiting_user` state. `approve-plan` / `approve-generate` / `retry` return fast (background tasks), so no 504 there.
76
+ - **clarification_questions shape:** `{"questions": [ {id, question, default, options, context, category, required}, ... ]}` — a dict with a `questions` list, NOT a bare list. Each question carries a sensible `default`; answering `{id: default}` for all is a good baseline. The CLARIFY stage is PROCESIO-aware (asks about Credentials_Rest vs secret text, tab structure, FeComponentType, HTTP-200-but-ok=false handling, namespace/class naming).
77
+ - **Generated code quality is high:** correct `Ringhel.Procesio.Action.Core` decorators (`ClassDecorator`, `FETabDecorator`, `FEDecorator` Type=`Credentials_Rest`, `BEDecorator`, `Validator`), `IAction`, `APICredentialsManager`. Matches the procesio-custom-actions skill conventions.
78
+ - **COMPILE blocker — NU1301 restoring the PROCESIO SDK from GitHub Packages.** `compile attempt_1` fails: "Failed to retrieve information about 'Ringhel.Procesio.Action.Core' from remote source 'https://nuget.pkg.github.com/PROCESIO/download/ringhel.procesio.action.core/index.json'." This is **NU1301 (source/package-index access)**, not NU1102 (missing version) — so the pinned version (`1.41.0`) is NOT the cause. `GET /admin/platform-settings` shows `github_packages_pat_set: true` and `POST /admin/platform-settings/test-nuget` returns "PAT is valid" — but test-nuget only checks the ORG index (`/PROCESIO/index.json`), not the package-level download index, so it passing does not prove the SDK package is restorable. `POST /admin/build-selftest` returns "pass" because its trivial 2-file project does NOT reference the SDK, so it never exercises the GitHub Packages restore. **Net: the connector-builder compiler cannot download the PROCESIO SDK package** — a server-side PAT package-scope / egress issue. Fix is platform-side (grant the GitHub Packages PAT read access to the `Ringhel.Procesio.Action.Core` package, or mirror the SDK to a reachable feed), then `retry --from-step 6`. The generated code is already correct and waiting; once restore works, compile→deliver→`download-artifact`→`procesio customaction-upload` completes unchanged.
79
+ - **MSYS path-conversion gotcha (Git Bash on Windows):** the `api --path /admin/...` escape hatch gets its leading-slash path rewritten to `C:/Program Files/Git/admin/...` by MSYS, causing a 404. Run those calls with `MSYS_NO_PATHCONV=1` (or from PowerShell). First-class actions are unaffected (they build the path internally).
80
+
81
+ ## .NET 10 runtime and the knowledge overrides (2026-10-21)
82
+
83
+ PROCESIO prod runs custom actions on Action-Execution v3 (`net10.0`, `Ringhel.Procesio.Action.Core` 2.1.0) since 2026-10-21, and the builder now generates for it: plan `target_framework: net10.0`, Action-Core 2.1.0 with Newtonsoft.Json 13.0.4 (2.1.0 depends on it, so 13.0.3 is a NU1605 downgrade), compiler image on the .NET 10 SDK. A finished package carries only `lib/net10.0/` and declares one `net10.0` dependency group. Verified end to end on prod: build, compile, upload to PROCESIO, run inside a process, exact outputs. A net8.0 package built earlier still loads on the v3 runtime.
84
+
85
+ - **Only three libraries are host copies on the v3 runtime:** Action-Core 2.1.0, Newtonsoft.Json 13.0.4 and DocumentFormat.OpenXml 3.5.1. CsvHelper, HtmlAgilityPack, MsgReader, PdfPig and SimMetrics are no longer on the host, so the copy bundled in the package is the one that loads. A host copy still wins over a bundled one of the same name, so code compiled against a different version of those three can throw `MissingMethodException` at run time.
86
+ - **SDK restore from GitHub Packages works** (Action-Core 2.1.0 restores fine); the NU1301 blocker recorded in June is resolved.
87
+ - **Knowledge overrides beat the baked files.** Each knowledge module resolves as: tombstone, else an admin DB override, else the base file baked into the image. An override does not follow later edits of the base, so after changing a base file always check `knowledge-list --module-type <type>` for `"source": "database"` rows of the same name and rewrite them with `knowledge-update --content-file <the committed file>`. Never `knowledge-delete` an override to "fall back" to the base: delete writes a tombstone that hides the base file as well. Read the result back with `knowledge-get` and compare it byte for byte; an earlier override had been stored with every em-dash as mojibake (`—`).
88
+ - **Pipeline config also lives in the DB** (seeded once from `config/pipeline.yaml`). A YAML change only affects a fresh seed; change prod with `update-config --which pipeline --data '{"stages": {...}}'` (merged per stage and validated before saving) and check `get-config --which pipeline` → `budget_warnings`. clarify/plan `max_spec_tokens` below `spec_tokens_total` means those stages silently drop spec modules.
89
+ - **Upload error 261 on a nullable output:** `int?` with `Expects = ExpectedType.Number` compiles but PROCESIO rejects the upload ("ValidatorAttribute.Expects value type does not match the property type"). Use a non-nullable `int` (document what 0 means) or a string. Encoded in the builder's `decorators.md`.
90
+ - **Some API hosts are unreachable from PROCESIO.** A connector can run fine and still time out on its HTTP call because PROCESIO's egress cannot reach that host (seen with `api.agify.io` and the other APIs on its server). Probe a host first from PROCESIO itself: `procesio credential-create --dry-run` with a no-auth `REST API` credential runs a live connection test from PROCESIO's servers.
91
+ - **A credential-free connector pauses at validate** on the warning "No new HttpClient" (the rule expects `Credentials.Client`). It is non-blocking: `validate-continue` proceeds, and a raw `HttpClient` call works on the PROCESIO runtime.
@@ -0,0 +1,101 @@
1
+ # connector-builder
2
+
3
+ Drive the **AI Connector Builder** ([connector-builder.procesio.app](https://connector-builder.procesio.app)) — the platform that turns API documentation into a compiled **PROCESIO Custom Action `.nupkg`** connector through an 8-stage LLM pipeline:
4
+
5
+ ```
6
+ gather → clarify → plan → generate → validate → compile → fix → deliver
7
+ ```
8
+
9
+ This tool is the **REST client** for that platform. It covers the whole build lifecycle, file read/write, artifact/zip download, logs & telemetry, and the admin knowledge base (the prompts/specs/examples that control how every build generates code).
10
+
11
+ > The compiled `.nupkg` is the bridge to PROCESIO: download it with `download-artifact`, then install it with `procesio customaction-upload --file <nupkg>` to test the connector live. See the **connector-builder agent** for the full build → upload → test → improve loop.
12
+
13
+ ## Auth — two modes, one header
14
+
15
+ Both modes resolve to an `Authorization: Bearer <token>` header (verified against the backend's `permissions.py` — an API key is just a bearer token starting with `acb_`):
16
+
17
+ 1. **API key** (default): the `acb_...` key, used verbatim.
18
+ 2. **Username / password**: `POST /auth/login` → JWT access token. This is the "web-tool" login, done over the REST API (no browser needed — the app exposes the same backend under `/api/*`).
19
+
20
+ Selection: API key if stored, else username+password. Force with `CONNECTOR_BUILDER_AUTH=apikey|userpass`. Base URL overridable with `CONNECTOR_BUILDER_BASE_URL` (default `https://connector-builder.procesio.app/api`).
21
+
22
+ ### Store credentials
23
+
24
+ ```powershell
25
+ python scripts/set-credential.py connector-builder api-key # acb_...
26
+ # and/or
27
+ python scripts/set-credential.py connector-builder username # the platform login email
28
+ python scripts/set-credential.py connector-builder password
29
+ ```
30
+
31
+ (Use `--from-file` on this terminal — interactive paste corrupts secrets.)
32
+
33
+ ## Quick start
34
+
35
+ ```bash
36
+ # Sanity / auth probe
37
+ python scripts/run-tool.py connector-builder check
38
+
39
+ # 1. Create a build from API docs
40
+ python scripts/run-tool.py connector-builder create-build \
41
+ --api-url "https://api.example.com/docs" \
42
+ --user-requirements "A connector that lists and creates orders."
43
+
44
+ # 2. Gather + clarify → returns clarification questions.
45
+ # The sync LLM stages (gather/answer/revise-plan) 504 at the proxy but finish
46
+ # server-side — pass --wait to swallow the 504 and poll to the settled state.
47
+ python scripts/run-tool.py connector-builder gather --build-id <ID> --wait
48
+
49
+ # 3. Answer the questions → triggers PLAN
50
+ python scripts/run-tool.py connector-builder answer --build-id <ID> \
51
+ --answers '{"q1":"OAuth2 client credentials","q2":"JSON"}'
52
+
53
+ # 4. Approve the plan → GENERATE (pauses for review)
54
+ python scripts/run-tool.py connector-builder approve-plan --build-id <ID>
55
+
56
+ # 5. Accept generated files → VALIDATE → COMPILE → FIX → DELIVER
57
+ python scripts/run-tool.py connector-builder approve-generate --build-id <ID>
58
+
59
+ # 6. Download the compiled connector
60
+ python scripts/run-tool.py connector-builder download-artifact --build-id <ID> --out connector.nupkg
61
+ ```
62
+
63
+ Prefer the **fully automatic** path? `start-build --build-id <ID>` runs every stage as one background task (no per-stage pauses); poll `get-build` for status.
64
+
65
+ ## Actions
66
+
67
+ Run `python scripts/run-tool.py connector-builder --help` for the full list. Grouped:
68
+
69
+ **Auth / identity** — `check`, `whoami`, `list-api-keys`, `create-api-key`, `revoke-api-key`, `set-llm-key`, `delete-llm-key`
70
+
71
+ **Build lifecycle** — `list-builds`, `get-build`, `create-build`, `start-build`, `gather`, `answer`, `approve-plan`, `revise-plan`, `approve-generate`, `regenerate`, `regenerate-file`, `validate-autofix`, `validate-continue`, `validate-return-to-generate`, `retry`, `override-stage`, `stage-override-options`, `reset`, `set-version`, `archive`, `unarchive`, `wait-build`
72
+
73
+ > **Surviving the proxy 504:** the synchronous LLM stages (`gather`, `answer`, `revise-plan`) can exceed the gateway timeout and return a 504 while completing server-side. Pass `--wait` (with optional `--wait-timeout` / `--poll-interval`) to swallow that and poll to the settled state. After the background stages (`approve-generate`, `retry`, `start-build`), use `wait-build --build-id <ID>` (optionally `--until terminal`) to block until compile finishes.
74
+
75
+ **Diagnostics** — `logs`, `events`, `list-messages`, `post-message`, `telemetry`, `list-issues`, `get-issue`, `build-selftest`
76
+
77
+ **Files & artifact** — `list-file-versions`, `get-file-version`, `update-file`, `set-file-instructions`, `download-file`, `download-all`, `download-artifact`
78
+
79
+ **Admin / improve-the-builder** — `get-config`, `update-config`, `reload-config`, `knowledge-list`, `knowledge-get`, `knowledge-create`, `knowledge-update`, `knowledge-delete`, `list-users`
80
+
81
+ **Escape hatch** — `api --method --path --query --body [--out]` for any endpoint not first-classed.
82
+
83
+ ## Feedback loops (how you improve a connector)
84
+
85
+ | Where it fails | Action |
86
+ |---|---|
87
+ | Plan is wrong | `revise-plan --feedback "..."` |
88
+ | Generated code is wrong | `regenerate-file --filename X --instructions "..."` or `regenerate` |
89
+ | Validation findings | `validate-autofix` / `validate-continue` / `validate-return-to-generate` |
90
+ | Compile failed | `retry --from-step 6` (skips straight to compile→fix→deliver) |
91
+ | Need to jump stages | `override-stage --target-step N --target-status running|waiting_user` |
92
+ | **Builder generates badly across all builds** | edit `knowledge-*` (prompts / spec_module / example / validation_rule / clarification) then `reload-config` |
93
+
94
+ ## Contract
95
+
96
+ JSON in / JSON out. Success → one JSON object on stdout, exit 0. Failure → `{"error": {"code","message","details"}}`, non-zero exit. Error codes: `invalid_argument` (2), `auth_required`, `auth_failed`, `api_error`, `error`.
97
+
98
+ ## Notes & internals
99
+
100
+ - `tool.yaml` is **generated** from the handlers by `gen_manifest.py` — edit handlers + the header consts, then rerun `.venv/Scripts/python tools/connector-builder/gen_manifest.py`. A manifest-sync test enforces this.
101
+ - Wire details, gotchas, and the PROCESIO interop are in **CONNECTOR-BUILDER-API-NOTES.md**.
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: connector-builder
3
+ description: 'AI Connector Builder (connector-builder.procesio.app): turn API documentation into a compiled PROCESIO Custom Action .nupkg connector via an 8-stage LLM pipeline (gather -> clarify -> plan -> generate -> validate -> compile -> fix -> deliver). Drive the whole build lifecycle, read/write generated files, download the .nupkg artifact (to upload to PROCESIO for live testing), inspect logs/telemetry,…'
4
+ ---
5
+
6
+ # connector-builder
7
+
8
+ AI Connector Builder (connector-builder.procesio.app): turn API documentation into a compiled PROCESIO Custom Action .nupkg connector via an 8-stage LLM pipeline (gather -> clarify -> plan -> generate -> validate -> compile -> fix -> deliver). Drive the whole build lifecycle, read/write generated files, download the .nupkg artifact (to upload to PROCESIO for live testing), inspect logs/telemetry, and edit the builder's own knowledge base (prompts, spec modules, examples, validation rules). Two auth modes, both -> Bearer token: an acb_ API key, or username/password via /auth/login.
9
+
10
+ ## How to call it
11
+
12
+ ```bash
13
+ python scripts/run-tool.py connector-builder <action> [--args]
14
+ # e.g. connector-builder create-build --api-url <docs-url> --user-requirements '...' (then gather / answer / approve-plan / approve-generate / download-artifact)
15
+ ```
16
+
17
+ One JSON object on stdout for success; `{"error": {"code", "message", "details"}}` and a non-zero exit on failure. Progress and logs go to stderr only.
18
+
19
+ **Start with `create-build`.**
20
+
21
+ ## Credentials
22
+
23
+ Stored in the OS credential store, never in files. Missing ones are reported by `python scripts/list-tools.py`.
24
+
25
+ - `agents-and-tools:connector-builder:api-key` — Connector Builder API key (acb_...). Used verbatim as the bearer token.
26
+ - `agents-and-tools:connector-builder:username` — Login email for username/password auth mode (e.g. user@example.com).
27
+ - `agents-and-tools:connector-builder:password` — Login password for username/password auth mode (-> POST /auth/login -> JWT).
28
+
29
+ ## Actions
30
+
31
+ ### answer
32
+
33
+ | action | required args | what it does |
34
+ |---|---|---|
35
+ | `answer` | `--build-id`, `--answers` | Submit clarification answers; triggers PLAN. |
36
+
37
+ ### api
38
+
39
+ | action | required args | what it does |
40
+ |---|---|---|
41
+ | `api` | `--path` | Call any endpoint (method/path/query/body); --out streams binary. |
42
+
43
+ ### approve
44
+
45
+ | action | required args | what it does |
46
+ |---|---|---|
47
+ | `approve-generate` | `--build-id` | Accept generated files; runs VALIDATE->COMPILE->FIX->DELIVER. |
48
+ | `approve-plan` | `--build-id` | Approve plan; triggers GENERATE (then pauses). |
49
+
50
+ ### archive
51
+
52
+ | action | required args | what it does |
53
+ |---|---|---|
54
+ | `archive` | `--build-id` | Archive a build (admin). |
55
+
56
+ ### build
57
+
58
+ | action | required args | what it does |
59
+ |---|---|---|
60
+ | `build-selftest` | — | Compiler health self-test (trivial C#). |
61
+
62
+ ### check
63
+
64
+ | action | required args | what it does |
65
+ |---|---|---|
66
+ | `check` | — | Connectivity + auth probe (GET /auth/me). |
67
+
68
+ ### create
69
+
70
+ | action | required args | what it does |
71
+ |---|---|---|
72
+ | `create-api-key` | `--name` | Create an API key (full_key shown only once). |
73
+ | `create-build` | — | Create a build from URL(s) / pasted docs. |
74
+
75
+ ### delete
76
+
77
+ | action | required args | what it does |
78
+ |---|---|---|
79
+ | `delete-llm-key` | — | Remove the stored LLM provider key. |
80
+
81
+ ### download
82
+
83
+ | action | required args | what it does |
84
+ |---|---|---|
85
+ | `download-all` | `--build-id`, `--out` | Download all generated files as a zip to --out. |
86
+ | `download-artifact` | `--build-id`, `--out` | Download the compiled .nupkg to --out (upload to PROCESIO). |
87
+ | `download-file` | `--build-id`, `--filename`, `--out` | Download one generated file to --out. |
88
+
89
+ ### events
90
+
91
+ | action | required args | what it does |
92
+ |---|---|---|
93
+ | `events` | `--build-id` | Per-build pipeline events. |
94
+
95
+ ### gather
96
+
97
+ | action | required args | what it does |
98
+ |---|---|---|
99
+ | `gather` | `--build-id` | Run GATHER+CLARIFY (profile+questions); --wait survives the 504. |
100
+
101
+ ### get
102
+
103
+ | action | required args | what it does |
104
+ |---|---|---|
105
+ | `get-build` | `--build-id` | Full build detail (all JSONB fields). |
106
+ | `get-config` | `--which` | Read a config block (pipeline/providers/...). |
107
+ | `get-file-version` | `--build-id`, `--filename`, `--version` | Full content of one file at a specific version. |
108
+ | `get-issue` | `--id` | Full issue-case detail incl. snapshots. |
109
+
110
+ ### knowledge
111
+
112
+ | action | required args | what it does |
113
+ |---|---|---|
114
+ | `knowledge-create` | `--module-type`, `--name` | Create a new knowledge module. |
115
+ | `knowledge-delete` | `--module-type`, `--name` | Delete a knowledge module. |
116
+ | `knowledge-get` | `--module-type`, `--name` | Get one knowledge module's content. |
117
+ | `knowledge-list` | `--module-type` | List knowledge modules of a type. |
118
+ | `knowledge-update` | `--module-type`, `--name` | Update an existing knowledge module. |
119
+
120
+ ### list
121
+
122
+ | action | required args | what it does |
123
+ |---|---|---|
124
+ | `list-api-keys` | — | List your API keys. |
125
+ | `list-builds` | — | List builds (paginated, filterable). |
126
+ | `list-file-versions` | `--build-id` | Version metadata for every file in a build (no content). |
127
+ | `list-issues` | — | List issue cases (failures), filterable. |
128
+ | `list-messages` | `--build-id` | Chat/system messages for a build. |
129
+ | `list-users` | — | List all users (admin). |
130
+
131
+ ### logs
132
+
133
+ | action | required args | what it does |
134
+ |---|---|---|
135
+ | `logs` | `--build-id` | Per-build stage logs (model/cost/token breakdown). |
136
+
137
+ ### override
138
+
139
+ | action | required args | what it does |
140
+ |---|---|---|
141
+ | `override-stage` | `--build-id`, `--target-step`, `--target-status` | Jump the build to a target step/status. |
142
+
143
+ ### post
144
+
145
+ | action | required args | what it does |
146
+ |---|---|---|
147
+ | `post-message` | `--build-id`, `--step`, `--content` | Post a chat message to a build/step. |
148
+
149
+ ### regenerate
150
+
151
+ | action | required args | what it does |
152
+ |---|---|---|
153
+ | `regenerate` | `--build-id` | Regenerate files with per-file/general instructions. |
154
+ | `regenerate-file` | `--build-id`, `--filename`, `--instructions` | Regenerate a single file with instructions. |
155
+
156
+ ### reload
157
+
158
+ | action | required args | what it does |
159
+ |---|---|---|
160
+ | `reload-config` | — | Reload all YAML config + knowledge cache. |
161
+
162
+ ### reset
163
+
164
+ | action | required args | what it does |
165
+ |---|---|---|
166
+ | `reset` | `--build-id` | Reset a failed/clarifying/planning build to pending. |
167
+
168
+ ### retry
169
+
170
+ | action | required args | what it does |
171
+ |---|---|---|
172
+ | `retry` | `--build-id` | Retry the pipeline from a step (or last failed). |
173
+
174
+ ### revise
175
+
176
+ | action | required args | what it does |
177
+ |---|---|---|
178
+ | `revise` | `--build-id` | Re-open a COMPLETED build to the generate pause for a small fix (then regenerate-file + approve-generate); bumps the version. |
179
+ | `revise-plan` | `--build-id`, `--feedback` | Revise the plan with free-text feedback. |
180
+
181
+ ### revoke
182
+
183
+ | action | required args | what it does |
184
+ |---|---|---|
185
+ | `revoke-api-key` | `--id` | Revoke an API key by id. |
186
+
187
+ ### set
188
+
189
+ | action | required args | what it does |
190
+ |---|---|---|
191
+ | `set-file-instructions` | `--build-id`, `--filename`, `--instructions` | Save per-file regeneration instructions. |
192
+ | `set-llm-key` | `--api-key`, `--provider` | Set the LLM provider key that powers builds. |
193
+ | `set-version` | `--build-id`, `--major`, `--minor`, `--patch` | Set Major.Minor.Patch (at Plan/waiting_user). |
194
+
195
+ ### stage
196
+
197
+ | action | required args | what it does |
198
+ |---|---|---|
199
+ | `stage-override-options` | — | Valid stage-override targets for override-stage. |
200
+
201
+ ### start
202
+
203
+ | action | required args | what it does |
204
+ |---|---|---|
205
+ | `start-build` | `--build-id` | Run the FULL pipeline as a background task. |
206
+
207
+ ### telemetry
208
+
209
+ | action | required args | what it does |
210
+ |---|---|---|
211
+ | `telemetry` | — | Cross-build LLM telemetry (cost/tokens/latency), filterable. |
212
+
213
+ ### unarchive
214
+
215
+ | action | required args | what it does |
216
+ |---|---|---|
217
+ | `unarchive` | `--build-id` | Unarchive a build (admin). |
218
+
219
+ ### update
220
+
221
+ | action | required args | what it does |
222
+ |---|---|---|
223
+ | `update-config` | `--which` | Update a config block from JSON. |
224
+ | `update-file` | `--build-id`, `--filename` | Overwrite a file's content (inline or from --content-file). |
225
+
226
+ ### validate
227
+
228
+ | action | required args | what it does |
229
+ |---|---|---|
230
+ | `validate-autofix` | `--build-id` | Auto-fix validation findings. |
231
+ | `validate-continue` | `--build-id` | Continue past validation to COMPILE. |
232
+ | `validate-return-to-generate` | `--build-id` | Return from VALIDATE back to GENERATE. |
233
+
234
+ ### wait
235
+
236
+ | action | required args | what it does |
237
+ |---|---|---|
238
+ | `wait-build` | `--build-id` | Poll get-build until settled/terminal (use after approve-generate/retry). |
239
+
240
+ ### whoami
241
+
242
+ | action | required args | what it does |
243
+ |---|---|---|
244
+ | `whoami` | — | Full current-user record (GET /auth/me). |
245
+
246
+ ---
247
+
248
+ Generated from `tools/connector-builder/tool.yaml` by `scripts/build-tool-skill.py`. Do not edit by hand — change the manifest and regenerate.
@@ -0,0 +1,7 @@
1
+ """connector-builder tool package marker.
2
+
3
+ The dir name has a hyphen, so this tool's own modules are imported by BARE name
4
+ (``import client``, ``from handlers import builds``) with the tool root on
5
+ sys.path at runtime — see main.py. This file just makes the folder importable
6
+ as ``tools.connector_builder`` is NOT possible (hyphen); kept for parity.
7
+ """