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,47 @@
1
+ """Load the agent's knowledge base (the markdown in this folder).
2
+
3
+ The `guidance` action serves these so any session loads the methodology from ONE
4
+ registry-discoverable place instead of re-deriving it. The docs are the source of
5
+ truth; this module just reads them.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ from pathlib import Path
10
+
11
+ KB_DIR = Path(__file__).resolve().parent
12
+
13
+ # topic -> (filename, human label)
14
+ TOPICS: dict[str, tuple[str, str]] = {
15
+ "playbook": ("CONNECTOR-BUILDER-PLAYBOOK.md",
16
+ "Build → upload → test → improve operating procedure"),
17
+ "interop": ("CONNECTOR-BUILDER-PROCESIO-INTEROP.md",
18
+ "How this agent hands off to the procesio tool/agent"),
19
+ "troubleshooting": ("CONNECTOR-BUILDER-TROUBLESHOOTING.md",
20
+ "Operations: tool/skill inventory, live-run realities, failure "
21
+ "triage (NU1301 vs code), definition of done"),
22
+ "boundary": ("README.md",
23
+ "Agent overview + tool-vs-agent boundary"),
24
+ }
25
+
26
+
27
+ def topics() -> list[str]:
28
+ return list(TOPICS.keys())
29
+
30
+
31
+ def load(topic: str) -> dict:
32
+ if topic not in TOPICS:
33
+ raise KeyError(f"unknown topic: {topic}. Known: {', '.join(TOPICS)}")
34
+ filename, label = TOPICS[topic]
35
+ path = KB_DIR / filename
36
+ if not path.exists():
37
+ raise FileNotFoundError(f"knowledge file missing: {path}")
38
+ return {
39
+ "topic": topic,
40
+ "label": label,
41
+ "source": str(path),
42
+ "content": path.read_text(encoding="utf-8"),
43
+ }
44
+
45
+
46
+ def load_all() -> list[dict]:
47
+ return [load(t) for t in TOPICS]
@@ -0,0 +1,93 @@
1
+ """connector-builder agent entrypoint — action dispatch.
2
+
3
+ Orchestrates the `connector-builder` tool (the AI Connector Builder REST client)
4
+ and the `procesio` tool to run the full loop: build a connector from API docs →
5
+ download the .nupkg → upload it to PROCESIO → test it live → feed failures back
6
+ to improve the connector (and, for systemic issues, the builder's own knowledge).
7
+
8
+ It is the executable side of CONNECTOR-BUILDER-PLAYBOOK.md. Invoked like any
9
+ action-dispatch tool: action name first, JSON in / JSON out.
10
+
11
+ The agent dir name has a hyphen, so this agent's own modules are imported by BARE
12
+ name with the agent root on sys.path (mirrors the hyphenated tools); the shared
13
+ agent libs are imported as the valid package `agents._lib`.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import sys
18
+ from pathlib import Path
19
+
20
+ AGENT_ROOT = Path(__file__).resolve().parent
21
+ FRAMEWORK_ROOT = AGENT_ROOT.parents[1]
22
+ _VENV_PY = FRAMEWORK_ROOT / ".venv" / "Scripts" / "python.exe"
23
+ if _VENV_PY.exists() and Path(sys.executable).resolve() != _VENV_PY.resolve():
24
+ import subprocess
25
+ sys.exit(subprocess.run([str(_VENV_PY), __file__, *sys.argv[1:]]).returncode)
26
+
27
+ import argparse # noqa: E402
28
+
29
+ for _p in (str(AGENT_ROOT), str(FRAMEWORK_ROOT)):
30
+ if _p not in sys.path:
31
+ sys.path.insert(0, _p)
32
+
33
+ from tools._lib.io import emit, fail # noqa: E402
34
+ from agents._lib import errors # noqa: E402
35
+ from agents._lib.actiondef import ActionDef # noqa: E402
36
+
37
+
38
+ class _Parser(argparse.ArgumentParser):
39
+ def error(self, message: str):
40
+ raise errors.UsageError(message)
41
+
42
+
43
+ def collect_actions() -> dict[str, ActionDef]:
44
+ from handlers import status, guidance, nextstep, checklist
45
+ actions: dict[str, ActionDef] = {}
46
+ for module in (status, guidance, nextstep, checklist):
47
+ for name, defn in module.ACTIONS.items():
48
+ if name in actions:
49
+ raise RuntimeError(f"duplicate connector-builder agent action: {name}")
50
+ actions[name] = defn
51
+ return actions
52
+
53
+
54
+ ACTIONS = collect_actions()
55
+
56
+
57
+ def _build_context():
58
+ from context import ConnectorBuilderContext
59
+ return ConnectorBuilderContext.create()
60
+
61
+
62
+ def dispatch(action: str, argv: list[str], *, context_builder=None) -> dict:
63
+ if action not in ACTIONS:
64
+ raise errors.UsageError(
65
+ f"unknown action: {action}. Known: {', '.join(sorted(ACTIONS))}")
66
+ defn = ACTIONS[action]
67
+ parser = _Parser(prog=f"connector-builder {action}", description=defn.description)
68
+ defn.add_args(parser)
69
+ parsed = parser.parse_args(argv)
70
+ if defn.context:
71
+ builder = context_builder or _build_context
72
+ return defn.func(builder(), parsed)
73
+ return defn.func(parsed)
74
+
75
+
76
+ def main(argv=None) -> None:
77
+ argv = list(sys.argv[1:] if argv is None else argv)
78
+ if not argv or argv[0] in ("-h", "--help"):
79
+ print("Actions:", file=sys.stderr)
80
+ for name in sorted(ACTIONS):
81
+ print(f" {name:<14} {ACTIONS[name].description}", file=sys.stderr)
82
+ sys.exit(0)
83
+ action, rest = argv[0], argv[1:]
84
+ try:
85
+ result = dispatch(action, rest)
86
+ except Exception as exc: # noqa: BLE001
87
+ code, message, details, exit_code = errors.classify(exc)
88
+ fail(code, message, details, exit_code)
89
+ emit(result)
90
+
91
+
92
+ if __name__ == "__main__":
93
+ main()
@@ -0,0 +1,95 @@
1
+ """Pytest fixtures + hyphen-safe module loading for the connector-builder agent.
2
+
3
+ The agent dir name has a hyphen, so its own modules (knowledge, context,
4
+ handlers.*, main) are imported by BARE name at runtime with the agent root on
5
+ sys.path. Under pytest those bare names collide across hyphenated dirs, so — like
6
+ the hyphenated tools — we load THIS agent's modules under unique ``cba_*`` aliases
7
+ via importlib, registering the bare names only TRANSIENTLY during load, then
8
+ restore. Shared agent libs (``agents._lib.*``) are a normal package and import
9
+ directly.
10
+
11
+ NOTE: no tests/__init__.py here; every test file has a unique ``test_cba_*``
12
+ basename to avoid pytest rootdir import collisions.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import importlib.util
17
+ import sys
18
+ from pathlib import Path
19
+ from types import ModuleType
20
+
21
+ import pytest
22
+
23
+ AGENT_ROOT = Path(__file__).resolve().parents[1] # agents/connector-builder
24
+ FRAMEWORK_ROOT = Path(__file__).resolve().parents[3] # repo root
25
+
26
+ if str(FRAMEWORK_ROOT) not in sys.path:
27
+ sys.path.insert(0, str(FRAMEWORK_ROOT))
28
+
29
+ _BARE_NAMES = (
30
+ "knowledge", "context",
31
+ "handlers", "handlers.status", "handlers.guidance",
32
+ "handlers.nextstep", "handlers.checklist", "main",
33
+ )
34
+ _MISSING = object()
35
+ _saved_bare = {n: sys.modules.get(n, _MISSING) for n in _BARE_NAMES}
36
+
37
+
38
+ def _load(bare_name: str, relpath: str) -> ModuleType:
39
+ path = AGENT_ROOT / relpath
40
+ spec = importlib.util.spec_from_file_location(bare_name, path)
41
+ assert spec and spec.loader
42
+ mod = importlib.util.module_from_spec(spec)
43
+ sys.modules[bare_name] = mod
44
+ spec.loader.exec_module(mod)
45
+ sys.modules["cba_" + bare_name.replace(".", "_")] = mod
46
+ return mod
47
+
48
+
49
+ knowledge = _load("knowledge", "knowledge.py")
50
+ context = _load("context", "context.py")
51
+
52
+ _handlers_pkg = ModuleType("handlers")
53
+ _handlers_pkg.__path__ = [str(AGENT_ROOT / "handlers")] # type: ignore[attr-defined]
54
+ sys.modules["handlers"] = _handlers_pkg
55
+ sys.modules["cba_handlers"] = _handlers_pkg
56
+ status = _load("handlers.status", "handlers/status.py")
57
+ guidance = _load("handlers.guidance", "handlers/guidance.py")
58
+ nextstep = _load("handlers.nextstep", "handlers/nextstep.py")
59
+ checklist = _load("handlers.checklist", "handlers/checklist.py")
60
+
61
+ main = _load("main", "main.py")
62
+
63
+ sys.modules["cba_main"] = main
64
+ sys.modules["cba_knowledge"] = knowledge
65
+
66
+ _agent_root_str = str(AGENT_ROOT)
67
+ sys.path[:] = [p for p in sys.path if p != _agent_root_str]
68
+ for _bn, _prev in _saved_bare.items():
69
+ if _prev is _MISSING:
70
+ sys.modules.pop(_bn, None)
71
+ else:
72
+ sys.modules[_bn] = _prev
73
+
74
+
75
+ class FakeContext:
76
+ """Records tool invocations and returns canned responses keyed by
77
+ (tool, action)."""
78
+
79
+ def __init__(self, responses=None):
80
+ self.calls: list[tuple] = []
81
+ self.responses = responses or {}
82
+
83
+ def invoke(self, tool, action, *args):
84
+ self.calls.append((tool, action, args))
85
+ return self.responses.get((tool, action), {})
86
+
87
+
88
+ @pytest.fixture
89
+ def cba_main():
90
+ return main
91
+
92
+
93
+ @pytest.fixture
94
+ def fake_context():
95
+ return FakeContext()
@@ -0,0 +1,148 @@
1
+ """connector-builder agent: dispatch, manifest sync, next-step doctrine, checklist."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ from pathlib import Path
6
+
7
+ import pytest
8
+
9
+ import cba_main as main
10
+ from tools._lib.manifest import load_agent
11
+
12
+
13
+ # -- manifest sync -----------------------------------------------------------
14
+
15
+ def _manifest():
16
+ root = Path(main.__file__).resolve().parent
17
+ return load_agent(root / "agent.yaml")
18
+
19
+
20
+ def test_manifest_loads_and_names_match():
21
+ m = _manifest()
22
+ assert m.name == "connector-builder"
23
+ assert set(m.action_names()) == set(main.ACTIONS)
24
+
25
+
26
+ def test_manifest_args_match_argparse():
27
+ m = _manifest()
28
+ for name, defn in main.ACTIONS.items():
29
+ parser = argparse.ArgumentParser()
30
+ defn.add_args(parser)
31
+ argparse_names = {opt[2:] for a in parser._actions for opt in a.option_strings
32
+ if opt.startswith("--") and opt != "--help"}
33
+ manifest_names = {a.name for a in m.get_action(name).args}
34
+ assert manifest_names == argparse_names, name
35
+
36
+
37
+ def test_drives_connector_builder_and_procesio():
38
+ m = _manifest()
39
+ assert set(m.tools) == {"connector-builder", "procesio"}
40
+
41
+
42
+ # -- dispatch ----------------------------------------------------------------
43
+
44
+ def _run(action, argv, ctx=None):
45
+ return main.dispatch(action, argv, context_builder=(lambda: ctx) if ctx else None)
46
+
47
+
48
+ def test_unknown_action_raises():
49
+ from agents._lib import errors
50
+ with pytest.raises(errors.UsageError):
51
+ _run("nope", [])
52
+
53
+
54
+ def test_status_runs_without_network():
55
+ out = _run("status", [])
56
+ assert out["agent"] == "connector-builder"
57
+
58
+
59
+ def test_guidance_unknown_topic():
60
+ from agents._lib import errors
61
+ with pytest.raises(errors.AgentError):
62
+ _run("guidance", ["--topic", "bogus"])
63
+
64
+
65
+ def test_guidance_playbook_loads():
66
+ out = _run("guidance", ["--topic", "playbook"])
67
+ assert "content" in out and "build" in out["content"].lower()
68
+
69
+
70
+ def test_guidance_troubleshooting_loads():
71
+ out = _run("guidance", ["--topic", "troubleshooting"])
72
+ c = out["content"].lower()
73
+ # The operational knowledge from the live run must be present in the agent.
74
+ assert "nu1301" in c and "504" in c and "definition of done" in c
75
+
76
+
77
+ def test_guidance_all_includes_troubleshooting():
78
+ out = _run("guidance", ["--topic", "all"])
79
+ assert "troubleshooting" in out["topics"]
80
+
81
+
82
+ # -- next-step doctrine ------------------------------------------------------
83
+
84
+ def test_next_step_pending_recommends_start_or_gather(fake_context):
85
+ out = _run("next-step", ["--status", "pending"], fake_context)
86
+ actions = {r["action"] for r in out["recommended"]}
87
+ assert {"start-build", "gather"} <= actions
88
+
89
+
90
+ def test_next_step_generate_waiting_user(fake_context):
91
+ out = _run("next-step",
92
+ ["--status", "generating", "--step-status", "waiting_user"], fake_context)
93
+ assert out["phase"] == "generate-review"
94
+ assert "approve-generate" in {r["action"] for r in out["recommended"]}
95
+
96
+
97
+ def test_next_step_completed_hands_off_to_procesio(fake_context):
98
+ out = _run("next-step", ["--status", "completed"], fake_context)
99
+ assert any(h["tool"].startswith("procesio") for h in out["handoff"])
100
+
101
+
102
+ def test_next_step_live_build_id_invokes_tool(fake_context):
103
+ fake_context.responses[("connector-builder", "get-build")] = {
104
+ "status": "planning", "step_status": "waiting_user"}
105
+ out = _run("next-step", ["--build-id", "B1"], fake_context)
106
+ assert fake_context.calls[0] == ("connector-builder", "get-build", ("--build-id", "B1"))
107
+ assert out["phase"] == "plan-review"
108
+
109
+
110
+ def test_next_step_compile_restore_is_platform_not_code(fake_context):
111
+ fake_context.responses[("connector-builder", "get-build")] = {
112
+ "status": "failed", "last_failed_step": 6,
113
+ "error_message": "Compilation failed due to NuGet package restore error. "
114
+ "Failed to retrieve information about 'Ringhel.Procesio.Action.Core' (NU1301)."}
115
+ out = _run("next-step", ["--build-id", "B1"], fake_context)
116
+ assert out["diagnosis"]["kind"] == "platform_nuget_restore"
117
+ assert out["diagnosis"]["not_your_code"] is True
118
+
119
+
120
+ def test_next_step_bad_version_is_code(fake_context):
121
+ fake_context.responses[("connector-builder", "get-build")] = {
122
+ "status": "failed", "last_failed_step": 6,
123
+ "error_message": "NU1102: Unable to find package Foo with version 9.9.9"}
124
+ out = _run("next-step", ["--build-id", "B1"], fake_context)
125
+ assert out["diagnosis"]["kind"] == "bad_package_version"
126
+ assert out["diagnosis"]["not_your_code"] is False
127
+
128
+
129
+ def test_next_step_unknown_status_raises(fake_context):
130
+ from agents._lib import errors
131
+ with pytest.raises(errors.AgentError):
132
+ _run("next-step", ["--status", "weird"], fake_context)
133
+
134
+
135
+ def test_next_step_requires_input(fake_context):
136
+ from agents._lib import errors
137
+ with pytest.raises(errors.AgentError):
138
+ _run("next-step", [], fake_context)
139
+
140
+
141
+ # -- checklist ---------------------------------------------------------------
142
+
143
+ def test_checklist_covers_full_loop():
144
+ out = _run("checklist", ["--goal", "Stripe connector"])
145
+ phases = [s["phase"] for s in out["steps"]]
146
+ for expected in ("scope", "deliver", "install", "test", "improve"):
147
+ assert expected in phases
148
+ assert out["goal"] == "Stripe connector"
File without changes
@@ -0,0 +1,166 @@
1
+ """First-run detection + bootstrap of the user-data folder.
2
+
3
+ The wipe-safety contract: deleting context-state-knowledge/ must never break the
4
+ framework. Every component degrades to guidance ("no data - here is how to start"),
5
+ and this module is the guidance engine:
6
+
7
+ - **Templates** live in the FRAMEWORK, beside the component that owns them, as
8
+ ``<name>.template.json`` (e.g. ``agents/email-classifier/accounts.template.json``).
9
+ They contain placeholders only - never real user data - and map to
10
+ ``context-state-knowledge/config/<component>/<name>.json``.
11
+ - **freshness()** decides "fresh start": zero records in the store AND zero files
12
+ under config/. A brand-new (or wiped) install trips it; the orchestrator and
13
+ curator surface it so the driver prompts the user instead of acting blind.
14
+ - **bootstrap()** seeds the folder: ensures the store schema (via the context-store
15
+ tool - never opening the DB directly), regenerates the folder README, optionally
16
+ copies templates (never overwriting), and returns the onboarding checklist.
17
+ """
18
+ from __future__ import annotations
19
+
20
+ import shutil
21
+ from pathlib import Path
22
+
23
+ from tools._lib import userdata
24
+
25
+ FRAMEWORK_ROOT = Path(__file__).resolve().parents[2]
26
+
27
+ _TEMPLATE_SUFFIX = ".template.json"
28
+ # Only the top level of each component dir - deep matches would pick up fixtures.
29
+ _TEMPLATE_GLOBS = ("tools/*/*.template.json", "agents/*/*.template.json")
30
+
31
+
32
+ def find_templates() -> list[dict]:
33
+ """Discover framework config templates and their user-data targets."""
34
+ out: list[dict] = []
35
+ base = userdata.base()
36
+ for pattern in _TEMPLATE_GLOBS:
37
+ for tpl in sorted(FRAMEWORK_ROOT.glob(pattern)):
38
+ component = tpl.parent.name
39
+ target_name = tpl.name[: -len(_TEMPLATE_SUFFIX)] + ".json"
40
+ target = base / "config" / component / target_name
41
+ out.append({
42
+ "component": component,
43
+ "template": str(tpl.relative_to(FRAMEWORK_ROOT)),
44
+ "target": str(target),
45
+ "target_exists": target.exists(),
46
+ })
47
+ return out
48
+
49
+
50
+ def freshness(store_stats: dict | None) -> dict:
51
+ """Fresh start = empty store AND no user config. A folder that was wiped (or
52
+ never existed) scans exactly like this."""
53
+ scan = userdata.scan()
54
+ records = (store_stats or {}).get("records", 0) or 0
55
+ fresh = records == 0 and scan["config_files"] == 0
56
+ return {"fresh_start": fresh, "records": records, "scan": scan}
57
+
58
+
59
+ def onboarding_hint() -> dict:
60
+ """The prompt a driver surfaces to the user on a fresh start."""
61
+ templates = find_templates()
62
+ return {
63
+ "message": ("No user context/knowledge/state found - this is a fresh "
64
+ "install (or the user-data folder was wiped). The framework "
65
+ "works; it just knows nothing about you yet."),
66
+ "initialize": ("python scripts/run-agent.py orchestrator bootstrap "
67
+ "[--with-templates]"),
68
+ "steps": [
69
+ "Run bootstrap to seed the user-data folder (add --with-templates to "
70
+ "copy each component's config template for you to fill in).",
71
+ "Fill in the copied config templates (placeholders are marked; keep "
72
+ "accounts disabled until real).",
73
+ "Store credentials: python scripts/set-credential.py <tool> <secret> "
74
+ "(scripts/list-tools.py shows what each tool is missing).",
75
+ "Log in web sessions you need: run-tool web save-session --name <site> ...",
76
+ "Start building context: curator remember / curator capture as facts, "
77
+ "files and preferences come up - the store fills itself from use.",
78
+ ],
79
+ "templates": templates,
80
+ }
81
+
82
+
83
+ def _readme_text() -> str:
84
+ return """# context-state-knowledge/ - your data, not the framework's
85
+
86
+ Everything user-specific lives here: config, runtime state, knowledge, resources,
87
+ preferences, decisions, run history, exports. The folder is **never git-versioned**
88
+ and is **wipeable**: delete it and the framework still runs - it will detect the
89
+ fresh start and guide whoever uses it next through building new context. That is the
90
+ handover story: give the repo away, wipe this folder, done.
91
+
92
+ Generated by `orchestrator bootstrap` - do not keep notes here by hand; use the
93
+ curator (`curator remember` / `curator capture`) so knowledge stays structured.
94
+
95
+ ## Layout
96
+
97
+ ```
98
+ store.db SQLite store (records + runs) - access ONLY via the
99
+ context-store tool or the curator agent
100
+ config/<component>/ per-component user config (seeded from each component's
101
+ <name>.template.json in the framework)
102
+ state/<component>/ per-component runtime state
103
+ sessions/ saved web login sessions (when migrated)
104
+ exports/ human-readable dumps (curator export)
105
+ ```
106
+
107
+ ## Rebuilding after a wipe
108
+
109
+ ```
110
+ python scripts/run-agent.py orchestrator bootstrap --with-templates
111
+ ```
112
+
113
+ Then fill in the copied templates, store credentials with
114
+ `python scripts/set-credential.py <tool> <secret>`, and start working - the
115
+ orchestrator/curator build the rest from use. Secrets NEVER live in this folder;
116
+ they stay in the OS credential store.
117
+ """
118
+
119
+
120
+ def bootstrap(ctx, *, with_templates: bool = False) -> dict:
121
+ """Seed/repair the user-data folder. Idempotent; never overwrites user files."""
122
+ base = userdata.base()
123
+ # Ensure the store schema exists - through the tool, honoring the one-code-path
124
+ # rule. stats also tells us whether data already exists.
125
+ stats = ctx.cs("stats")
126
+ # Measure freshness BEFORE seeding: copying templates creates config files,
127
+ # which would otherwise hide that this was a fresh install needing onboarding.
128
+ fresh = freshness(stats)
129
+
130
+ readme = base / "README.md"
131
+ readme.write_text(_readme_text(), encoding="utf-8", newline="\n")
132
+
133
+ # Materialize the standard areas so the layout is visible.
134
+ for d in ("config", "state", "sessions", "exports"):
135
+ (base / d).mkdir(parents=True, exist_ok=True)
136
+
137
+ # Seed the schedule skeleton (commented, empty) so recurring work has a home.
138
+ from agents.orchestrator import schedulelib
139
+ seeded_schedule = schedulelib.ensure_skeleton()
140
+
141
+ copied, skipped = [], []
142
+ templates = find_templates()
143
+ if with_templates:
144
+ for t in templates:
145
+ target = Path(t["target"])
146
+ if target.exists():
147
+ skipped.append(t["target"])
148
+ continue
149
+ target.parent.mkdir(parents=True, exist_ok=True)
150
+ shutil.copyfile(FRAMEWORK_ROOT / t["template"], target)
151
+ copied.append(t["target"])
152
+
153
+ return {
154
+ "base": str(base),
155
+ "store": stats,
156
+ "readme": str(readme),
157
+ "schedule_seeded": str(seeded_schedule) if seeded_schedule else None,
158
+ "templates_found": len(templates),
159
+ "templates_copied": copied,
160
+ "templates_skipped_existing": skipped,
161
+ "fresh_start": fresh["fresh_start"],
162
+ "onboarding": onboarding_hint() if fresh["fresh_start"] else None,
163
+ "note": ("templates were NOT copied; pass --with-templates to copy them"
164
+ if not with_templates else
165
+ "fill in the copied templates before enabling anything"),
166
+ }
@@ -0,0 +1,60 @@
1
+ # Implementation patterns: how this team builds in PROCESIO
2
+
3
+ These patterns were distilled from a full audit of a production workspace: 9 forms, 91 processes and a
4
+ SQL Server database with 51 tables and 23 stored procedures. That workspace covers form-driven request
5
+ intake, agent review, LLM document extraction, ERP integration, SFTP archiving and multi-party
6
+ e-signing. Every client-specific value has been removed. What remains is the **house style**: the
7
+ techniques this team actually uses, stated so a builder in any workspace can apply them.
8
+
9
+ The best-practices and playbook docs say what good looks like. These docs show how we build it here.
10
+ Where the two disagree, trust the docs and treat the entry as a proposal to reconcile. Each entry
11
+ marks whether it is **NEW**, **REFINES** an existing rule, or **CONFIRMS** one.
12
+
13
+ | topic | file | covers |
14
+ |---|---|---|
15
+ | `patterns-processes` | 01-PROCESSES.md | result flags for forms, HTML rendered server-side, Node idioms, subprocess utilities, versioned scripts, status machines |
16
+ | `patterns-forms` | 02-FORMS.md | step and confirm structure, visibility driven by process flags, JS bridges into no-code conditions, validator and collector runtimes, the async-output caveat |
17
+ | `patterns-integrations` | 03-INTEGRATIONS.md | inbound webhooks with API keys, ERP step orchestration with a run log, SFTP layout, LLM extraction with strict schemas, document generation |
18
+ | `patterns-database` | 04-DATABASE.md | a JSON-in orchestrator SP, errors collected before writes, one fixed result shape, deploy conventions, how a process reads a result |
19
+
20
+ ## Every pattern file also lists the anti-patterns the audit found
21
+
22
+ Treat these as the house rules going forward:
23
+
24
+ - **Never paste a process variable into SQL text** (`N'{{v}}'`). Bind parameters instead (`sql-parameterize`).
25
+ In the audited workspace almost every SQL node pasted values. A single apostrophe broke the save, and a
26
+ token from a public URL reached the database unfiltered.
27
+ - **Hiding a section is not access control.** A public form that loads data on FORM_LOAD has already sent
28
+ that data to the browser.
29
+ - **Wire error ports on every integration node** (HTTP, SFTP, SQL, LLM). An integration with no error port
30
+ fails silently.
31
+ - **Keep secrets in credentials, never in application tables.**
32
+ - **When a later event in the same click chain needs a process's outputs, run that process with `syncRun`.**
33
+ - **Fix a JS runtime at one version on every element that installs it.** If each element carries a
34
+ different version, every one of them installs a fresh copy and the listeners pile up.
35
+
36
+ ## Workspace-specific knowledge (user data, not here)
37
+
38
+ An audit also produces knowledge that names the workspace's own processes, tables and findings. That goes
39
+ in the user-data folder, never in this framework folder:
40
+
41
+ ```
42
+ context-state-knowledge/resources/procesio-workspaces/<workspace-slug>/
43
+ raw/ API dumps (processes/, forms/) - input to the digests
44
+ processes/ flow-digest output (one .md per process + INDEX.md)
45
+ forms/ form-digest output (+ FORM-PROCESS-MAP.md, scripts, global code)
46
+ db-schema/ sqlserver schema-extract mirror
47
+ knowledge/ the curated knowledge + audit findings (README.md = entry point)
48
+ ```
49
+
50
+ Before building in a workspace, check whether it has such a folder: run `curator recall --query
51
+ "<workspace name> procesio knowledge"` or look in the folder directly. Build the same way its
52
+ knowledge describes.
53
+
54
+ To audit a new workspace, reproduce the folder with these steps:
55
+ 1. `request GET /api/Projects/<id>` for each process, and `form-get` plus `form-get-code` for each form,
56
+ into `raw/`.
57
+ 2. `flow-digest --in raw/processes --out processes --names names.json`.
58
+ 3. `form-digest --in raw/forms --processes raw/processes --out forms`.
59
+ 4. `sqlserver schema-extract --profile <p> --out db-schema`.
60
+ 5. Read and curate the results into `knowledge/`.