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.
- procesio_cli/__init__.py +18 -0
- procesio_cli/_cli.py +71 -0
- procesio_cli/agents/__init__.py +0 -0
- procesio_cli/agents/_lib/__init__.py +0 -0
- procesio_cli/agents/_lib/actiondef.py +24 -0
- procesio_cli/agents/_lib/errors.py +40 -0
- procesio_cli/agents/_lib/reversibility.py +236 -0
- procesio_cli/agents/_lib/toolrunner.py +141 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
- procesio_cli/agents/connector-builder/README.md +51 -0
- procesio_cli/agents/connector-builder/agent.yaml +61 -0
- procesio_cli/agents/connector-builder/context.py +19 -0
- procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
- procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
- procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
- procesio_cli/agents/connector-builder/handlers/status.py +35 -0
- procesio_cli/agents/connector-builder/knowledge.py +47 -0
- procesio_cli/agents/connector-builder/main.py +93 -0
- procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
- procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
- procesio_cli/agents/orchestrator/__init__.py +0 -0
- procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
- procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
- procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
- procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
- procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
- procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
- procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
- procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
- procesio_cli/agents/procesio/README.md +97 -0
- procesio_cli/agents/procesio/__init__.py +0 -0
- procesio_cli/agents/procesio/agent.yaml +73 -0
- procesio_cli/agents/procesio/audit.py +226 -0
- procesio_cli/agents/procesio/checklist.py +135 -0
- procesio_cli/agents/procesio/context.py +19 -0
- procesio_cli/agents/procesio/handlers/__init__.py +0 -0
- procesio_cli/agents/procesio/handlers/audit.py +39 -0
- procesio_cli/agents/procesio/handlers/checklist.py +34 -0
- procesio_cli/agents/procesio/handlers/guidance.py +36 -0
- procesio_cli/agents/procesio/handlers/status.py +33 -0
- procesio_cli/agents/procesio/handlers/verify.py +39 -0
- procesio_cli/agents/procesio/knowledge.py +115 -0
- procesio_cli/agents/procesio/main.py +89 -0
- procesio_cli/agents/procesio/tests/__init__.py +0 -0
- procesio_cli/agents/procesio/tests/conftest.py +62 -0
- procesio_cli/agents/procesio/tests/test_audit.py +91 -0
- procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
- procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
- procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
- procesio_cli/agents/procesio/tests/test_verify.py +134 -0
- procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
- procesio_cli/agents/procesio/verifylib.py +222 -0
- procesio_cli/dashboard/README.md +117 -0
- procesio_cli/dashboard/__init__.py +18 -0
- procesio_cli/dashboard/serve.py +98 -0
- procesio_cli/dashboard/server/__init__.py +1 -0
- procesio_cli/dashboard/server/config_schemas.py +92 -0
- procesio_cli/dashboard/server/google.py +103 -0
- procesio_cli/dashboard/server/handler.py +160 -0
- procesio_cli/dashboard/server/inventory.py +213 -0
- procesio_cli/dashboard/server/jobs.py +118 -0
- procesio_cli/dashboard/server/llmtest.py +181 -0
- procesio_cli/dashboard/server/procesio_env.py +94 -0
- procesio_cli/dashboard/server/routes.py +74 -0
- procesio_cli/dashboard/server/runner.py +150 -0
- procesio_cli/dashboard/server/security.py +29 -0
- procesio_cli/dashboard/server/setup.py +211 -0
- procesio_cli/dashboard/server/validate.py +152 -0
- procesio_cli/dashboard/tests/conftest.py +16 -0
- procesio_cli/dashboard/tests/test_dashboard.py +225 -0
- procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
- procesio_cli/dashboard/web/actions.js +274 -0
- procesio_cli/dashboard/web/api.js +79 -0
- procesio_cli/dashboard/web/app.js +385 -0
- procesio_cli/dashboard/web/copilot.js +72 -0
- procesio_cli/dashboard/web/google.js +121 -0
- procesio_cli/dashboard/web/index.html +67 -0
- procesio_cli/dashboard/web/procesio_env.js +187 -0
- procesio_cli/dashboard/web/styles.css +207 -0
- procesio_cli/registry.py +370 -0
- procesio_cli/scripts/build-router.py +249 -0
- procesio_cli/scripts/build-tool-skill.py +202 -0
- procesio_cli/scripts/check-requirements.py +131 -0
- procesio_cli/scripts/check-skill-governance.py +174 -0
- procesio_cli/scripts/evaluate-skill-routing.py +217 -0
- procesio_cli/scripts/evaluate-skills.py +316 -0
- procesio_cli/scripts/get-skill.py +122 -0
- procesio_cli/scripts/list-skills.py +68 -0
- procesio_cli/scripts/list-tools.py +73 -0
- procesio_cli/scripts/run-agent.py +59 -0
- procesio_cli/scripts/run-tool.py +123 -0
- procesio_cli/scripts/secret_scan.py +584 -0
- procesio_cli/scripts/set-credential.py +126 -0
- procesio_cli/scripts/validate-skills.py +530 -0
- procesio_cli/skills/PORTFOLIO.md +134 -0
- procesio_cli/skills/__init__.py +6 -0
- procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
- procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
- procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
- procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
- procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
- procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
- procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
- procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
- procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
- procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
- procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
- procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
- procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
- procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
- procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
- procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
- procesio_cli/skills/evals/baseline-catalog.json +14 -0
- procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
- procesio_cli/skills/evals/baseline.json +37 -0
- procesio_cli/skills/evals/behavioral.json +367 -0
- procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
- procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
- procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
- procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
- procesio_cli/skills/evals/routing.json +363 -0
- procesio_cli/skills/evals/validation-baseline.json +4 -0
- procesio_cli/skills/procesio-cli/SKILL.md +134 -0
- procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
- procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
- procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
- procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
- procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
- procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
- procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
- procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
- procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
- procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
- procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
- procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
- procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
- procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
- procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
- procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
- procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
- procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
- procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
- procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
- procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
- procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
- procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
- procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
- procesio_cli/skills/procesio-setup/SKILL.md +180 -0
- procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
- procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
- procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
- procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
- procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
- procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
- procesio_cli/skills/tests/__init__.py +0 -0
- procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
- procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
- procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
- procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
- procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
- procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
- procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
- procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
- procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
- procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
- procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
- procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
- procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
- procesio_cli/skills/tests/test_skill_routing.py +74 -0
- procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
- procesio_cli/skills/tests/test_validate_skills.py +115 -0
- procesio_cli/tools/__init__.py +0 -0
- procesio_cli/tools/_lib/README.md +119 -0
- procesio_cli/tools/_lib/__init__.py +0 -0
- procesio_cli/tools/_lib/accounting.py +120 -0
- procesio_cli/tools/_lib/contacts.py +544 -0
- procesio_cli/tools/_lib/creds.py +83 -0
- procesio_cli/tools/_lib/creds_backends.py +578 -0
- procesio_cli/tools/_lib/dbprofiles.py +147 -0
- procesio_cli/tools/_lib/dbquery.py +286 -0
- procesio_cli/tools/_lib/dbschema.py +225 -0
- procesio_cli/tools/_lib/io.py +54 -0
- procesio_cli/tools/_lib/manifest.py +297 -0
- procesio_cli/tools/_lib/skill_release.py +127 -0
- procesio_cli/tools/_lib/skill_resources.py +118 -0
- procesio_cli/tools/_lib/userdata.py +228 -0
- procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
- procesio_cli/tools/_lib/webserialize/admin.py +61 -0
- procesio_cli/tools/_lib/webserialize/client.py +264 -0
- procesio_cli/tools/_lib/webserialize/config.py +96 -0
- procesio_cli/tools/_lib/webserialize/errors.py +27 -0
- procesio_cli/tools/_lib/webserialize/framing.py +45 -0
- procesio_cli/tools/_lib/webserialize/registry.py +47 -0
- procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
- procesio_cli/tools/_lib/webserialize/server.py +510 -0
- procesio_cli/tools/_lib/websession.py +194 -0
- procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
- procesio_cli/tools/connector-builder/README.md +101 -0
- procesio_cli/tools/connector-builder/SKILL.md +248 -0
- procesio_cli/tools/connector-builder/__init__.py +7 -0
- procesio_cli/tools/connector-builder/actiondef.py +24 -0
- procesio_cli/tools/connector-builder/client.py +251 -0
- procesio_cli/tools/connector-builder/errors.py +44 -0
- procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
- procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
- procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
- procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
- procesio_cli/tools/connector-builder/handlers/common.py +104 -0
- procesio_cli/tools/connector-builder/handlers/files.py +111 -0
- procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
- procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
- procesio_cli/tools/connector-builder/main.py +94 -0
- procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
- procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
- procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
- procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
- procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
- procesio_cli/tools/connector-builder/tool.yaml +671 -0
- procesio_cli/tools/framework-map/.gitattributes +2 -0
- procesio_cli/tools/framework-map/README.md +98 -0
- procesio_cli/tools/framework-map/SKILL.md +30 -0
- procesio_cli/tools/framework-map/app.js +188 -0
- procesio_cli/tools/framework-map/fm_builder.py +476 -0
- procesio_cli/tools/framework-map/fm_catalog.py +19 -0
- procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
- procesio_cli/tools/framework-map/fm_strings.py +101 -0
- procesio_cli/tools/framework-map/main.py +95 -0
- procesio_cli/tools/framework-map/styles.css +214 -0
- procesio_cli/tools/framework-map/tests/conftest.py +33 -0
- procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
- procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
- procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
- procesio_cli/tools/framework-map/tool.yaml +61 -0
- procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/mysql/README.md +196 -0
- procesio_cli/tools/mysql/SKILL.md +37 -0
- procesio_cli/tools/mysql/__init__.py +0 -0
- procesio_cli/tools/mysql/connection.py +191 -0
- procesio_cli/tools/mysql/main.py +487 -0
- procesio_cli/tools/mysql/profiles.template.json +1 -0
- procesio_cli/tools/mysql/schema.py +434 -0
- procesio_cli/tools/mysql/tests/__init__.py +0 -0
- procesio_cli/tools/mysql/tests/conftest.py +21 -0
- procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
- procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
- procesio_cli/tools/mysql/tool.yaml +112 -0
- procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
- procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
- procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
- procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
- procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
- procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
- procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
- procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
- procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
- procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
- procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
- procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
- procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
- procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
- procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
- procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
- procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
- procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
- procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
- procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
- procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
- procesio_cli/tools/procesio/README.md +341 -0
- procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
- procesio_cli/tools/procesio/SKILL.md +694 -0
- procesio_cli/tools/procesio/__init__.py +1 -0
- procesio_cli/tools/procesio/actiondef.py +27 -0
- procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
- procesio_cli/tools/procesio/auth.py +354 -0
- procesio_cli/tools/procesio/autogen.py +121 -0
- procesio_cli/tools/procesio/client.py +355 -0
- procesio_cli/tools/procesio/config.py +96 -0
- procesio_cli/tools/procesio/data/endpoints.json +2901 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
- procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
- procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
- procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
- procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
- procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
- procesio_cli/tools/procesio/dto/__init__.py +13 -0
- procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
- procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
- procesio_cli/tools/procesio/dto/credential/description.md +193 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
- procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
- procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
- procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
- procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
- procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
- procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
- procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
- procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
- procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
- procesio_cli/tools/procesio/dto/document/builder.py +193 -0
- procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
- procesio_cli/tools/procesio/dto/document/description.md +124 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
- procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
- procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
- procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
- procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
- procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
- procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
- procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
- procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
- procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
- procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
- procesio_cli/tools/procesio/dto/form/description.md +346 -0
- procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
- procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
- procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
- procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
- procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
- procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
- procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
- procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
- procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
- procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
- procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
- procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
- procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
- procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
- procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
- procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
- procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
- procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
- procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
- procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
- procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
- procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
- procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
- procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
- procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
- procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
- procesio_cli/tools/procesio/dto/framework.py +125 -0
- procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
- procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
- procesio_cli/tools/procesio/dto/process/description.md +218 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
- procesio_cli/tools/procesio/dto/process/naming.py +305 -0
- procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
- procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
- procesio_cli/tools/procesio/dto/refdata.py +87 -0
- procesio_cli/tools/procesio/dto/registry.py +27 -0
- procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
- procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
- procesio_cli/tools/procesio/environments.py +264 -0
- procesio_cli/tools/procesio/errors.py +166 -0
- procesio_cli/tools/procesio/flowmodel/README.md +37 -0
- procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
- procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
- procesio_cli/tools/procesio/flowmodel/families.py +34 -0
- procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
- procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
- procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
- procesio_cli/tools/procesio/flowmodel/model.py +82 -0
- procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
- procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
- procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
- procesio_cli/tools/procesio/form_code_keys.py +50 -0
- procesio_cli/tools/procesio/formlint.py +292 -0
- procesio_cli/tools/procesio/gen_manifest.py +118 -0
- procesio_cli/tools/procesio/handlers/__init__.py +1 -0
- procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
- procesio_cli/tools/procesio/handlers/catalog.py +147 -0
- procesio_cli/tools/procesio/handlers/common.py +90 -0
- procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
- procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
- procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
- procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
- procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
- procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
- procesio_cli/tools/procesio/handlers/files.py +141 -0
- procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
- procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
- procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
- procesio_cli/tools/procesio/handlers/form_code.py +277 -0
- procesio_cli/tools/procesio/handlers/form_element.py +199 -0
- procesio_cli/tools/procesio/handlers/form_events.py +441 -0
- procesio_cli/tools/procesio/handlers/form_update.py +270 -0
- procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
- procesio_cli/tools/procesio/handlers/generic.py +135 -0
- procesio_cli/tools/procesio/handlers/layout.py +137 -0
- procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
- procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
- procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
- procesio_cli/tools/procesio/handlers/processes.py +416 -0
- procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
- procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
- procesio_cli/tools/procesio/handlers/schedules.py +320 -0
- procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
- procesio_cli/tools/procesio/handlers/transport.py +463 -0
- procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
- procesio_cli/tools/procesio/layout/README.md +196 -0
- procesio_cli/tools/procesio/layout/__init__.py +11 -0
- procesio_cli/tools/procesio/layout/adapter.py +736 -0
- procesio_cli/tools/procesio/layout/cycles.py +186 -0
- procesio_cli/tools/procesio/layout/dispatch.py +39 -0
- procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
- procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
- procesio_cli/tools/procesio/layout/elk/package.json +11 -0
- procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
- procesio_cli/tools/procesio/layout/engine.py +1311 -0
- procesio_cli/tools/procesio/layout/report.py +187 -0
- procesio_cli/tools/procesio/main.py +179 -0
- procesio_cli/tools/procesio/profiles.py +193 -0
- procesio_cli/tools/procesio/reliability.py +193 -0
- procesio_cli/tools/procesio/sqlformat.py +167 -0
- procesio_cli/tools/procesio/swagger.py +51 -0
- procesio_cli/tools/procesio/tests/__init__.py +0 -0
- procesio_cli/tools/procesio/tests/conftest.py +129 -0
- procesio_cli/tools/procesio/tests/test_auth.py +200 -0
- procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
- procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
- procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
- procesio_cli/tools/procesio/tests/test_client.py +114 -0
- procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
- procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
- procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
- procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
- procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
- procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
- procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
- procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
- procesio_cli/tools/procesio/tests/test_dto.py +734 -0
- procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
- procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
- procesio_cli/tools/procesio/tests/test_environments.py +214 -0
- procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
- procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
- procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
- procesio_cli/tools/procesio/tests/test_files.py +72 -0
- procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
- procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
- procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
- procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
- procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
- procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
- procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
- procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
- procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
- procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
- procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
- procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
- procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
- procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
- procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
- procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
- procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
- procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
- procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
- procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
- procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
- procesio_cli/tools/procesio/tests/test_guards.py +110 -0
- procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
- procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
- procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
- procesio_cli/tools/procesio/tests/test_layout.py +574 -0
- procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
- procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
- procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
- procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
- procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
- procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
- procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
- procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
- procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
- procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
- procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
- procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
- procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
- procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
- procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
- procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
- procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
- procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
- procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
- procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
- procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
- procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
- procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
- procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
- procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
- procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
- procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
- procesio_cli/tools/procesio/tests/test_transport.py +147 -0
- procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
- procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
- procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
- procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
- procesio_cli/tools/procesio/tool.yaml +12486 -0
- procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/sqlserver/README.md +192 -0
- procesio_cli/tools/sqlserver/SKILL.md +37 -0
- procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
- procesio_cli/tools/sqlserver/__init__.py +0 -0
- procesio_cli/tools/sqlserver/connection.py +242 -0
- procesio_cli/tools/sqlserver/main.py +521 -0
- procesio_cli/tools/sqlserver/profiles.template.json +1 -0
- procesio_cli/tools/sqlserver/schema.py +600 -0
- procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
- procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
- procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
- procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
- procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
- procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
- procesio_cli/tools/sqlserver/tool.yaml +123 -0
- procesio_cli/tools/web/README.md +381 -0
- procesio_cli/tools/web/SKILL.md +37 -0
- procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
- procesio_cli/tools/web/__init__.py +21 -0
- procesio_cli/tools/web/actiondef.py +24 -0
- procesio_cli/tools/web/api.py +444 -0
- procesio_cli/tools/web/brokered.py +107 -0
- procesio_cli/tools/web/driver.py +839 -0
- procesio_cli/tools/web/drivercontract.py +44 -0
- procesio_cli/tools/web/errors.py +54 -0
- procesio_cli/tools/web/handlers/__init__.py +1 -0
- procesio_cli/tools/web/handlers/archive.py +367 -0
- procesio_cli/tools/web/handlers/browse.py +182 -0
- procesio_cli/tools/web/handlers/contacts.py +74 -0
- procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
- procesio_cli/tools/web/main.py +128 -0
- procesio_cli/tools/web/sessions.py +253 -0
- procesio_cli/tools/web/steps.py +162 -0
- procesio_cli/tools/web/tests/__init__.py +0 -0
- procesio_cli/tools/web/tests/conftest.py +197 -0
- procesio_cli/tools/web/tests/test_api.py +330 -0
- procesio_cli/tools/web/tests/test_archive.py +190 -0
- procesio_cli/tools/web/tests/test_brokered.py +138 -0
- procesio_cli/tools/web/tests/test_dispatch.py +132 -0
- procesio_cli/tools/web/tests/test_errors.py +60 -0
- procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
- procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
- procesio_cli/tools/web/tests/test_sessions.py +145 -0
- procesio_cli/tools/web/tests/test_steps.py +210 -0
- procesio_cli/tools/web/tool.yaml +184 -0
- procesio_cli/tools/xlsx/README.md +34 -0
- procesio_cli/tools/xlsx/SKILL.md +28 -0
- procesio_cli/tools/xlsx/__init__.py +0 -0
- procesio_cli/tools/xlsx/main.py +129 -0
- procesio_cli/tools/xlsx/reader.py +91 -0
- procesio_cli/tools/xlsx/tests/__init__.py +0 -0
- procesio_cli/tools/xlsx/tests/conftest.py +39 -0
- procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
- procesio_cli/tools/xlsx/tool.yaml +30 -0
- procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
- procesio_cli/webplatform/aat_mcp/README.md +78 -0
- procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
- procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
- procesio_cli/webplatform/aat_mcp/gate.py +68 -0
- procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
- procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
- procesio_cli/webplatform/aat_mcp/server.py +306 -0
- procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
- procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
- procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
- procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
- procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
- procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
- procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
- procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
- procesio_cli-0.1.1.dist-info/METADATA +467 -0
- procesio_cli-0.1.1.dist-info/RECORD +647 -0
- procesio_cli-0.1.1.dist-info/WHEEL +4 -0
- procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
- procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
- procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Deterministic DESIGNER-layer normalizer.
|
|
2
|
+
|
|
3
|
+
Regenerates an action's `customData.configuration[].settings[].value` (the DESIGNER layer the Process
|
|
4
|
+
Designer reads) from that action's RUNTIME `parameters[]` (the source of truth = what executes), for
|
|
5
|
+
the ONE class where the two layers are a clean, reversible mirror: a STRING setting value that may hold
|
|
6
|
+
a `<%N%>` placeholder. It substitutes each `<%N%>` for its bound variable GUID (with the attribute chain,
|
|
7
|
+
`varId.attrId...`), which is exactly what the designer expects and what the runtime placeholder maps to.
|
|
8
|
+
This permanently kills the "customData holds `<%N%>` instead of the variable GUID -> designer paints it
|
|
9
|
+
red" class of bug: hand-place an action however, then normalize, and a string designer value can no
|
|
10
|
+
longer drift from its runtime parameter.
|
|
11
|
+
|
|
12
|
+
SCOPE - deliberately STRING-ONLY. LIST/dict-shaped settings (process-inputs/outputs, map-parameters,
|
|
13
|
+
map-process-data, document-mapper, decisional-case, ai-decisional-case) are LEFT UNTOUCHED, because their
|
|
14
|
+
runtime<->designer relationship is NOT a clean mirror: the builder's build-from-spec transforms drop the
|
|
15
|
+
attribute chain on subprocess maps and emit the runtime shape for map-parameters, i.e. regenerating them
|
|
16
|
+
from live runtime CORRUPTS them (verified live: process-outputs `varId.attrId` -> `varId`). Those settings
|
|
17
|
+
also never carry the `<%N%>`-in-a-string bug (they store GUID-form refs), so skipping them loses nothing.
|
|
18
|
+
The flowlint CUSTOMDATA_PLACEHOLDER guard remains the backstop for any residual case.
|
|
19
|
+
|
|
20
|
+
REUSES `builder._config_value_from_param` (never re-implements it). Contract: mutate `flow` IN PLACE
|
|
21
|
+
(matches flowpatch's _load->mutate->_save model); return a diff report. Idempotent and a NO-OP on
|
|
22
|
+
already-compliant flows (a value with no `<%N%>` passes through byte-identical).
|
|
23
|
+
"""
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
from tools.procesio.dto.process import builder as _b
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _index_settings(cfg_tree: list) -> dict:
|
|
30
|
+
"""{setting.id: setting}, recursing into list-valued settings (side-pannel nesting) - mirrors
|
|
31
|
+
the builder's _apply_values_to_config index()."""
|
|
32
|
+
byid: dict = {}
|
|
33
|
+
|
|
34
|
+
def walk(settings):
|
|
35
|
+
for s in settings or []:
|
|
36
|
+
if isinstance(s, dict):
|
|
37
|
+
if s.get("id"):
|
|
38
|
+
byid[s["id"]] = s
|
|
39
|
+
if isinstance(s.get("value"), list):
|
|
40
|
+
walk(s["value"])
|
|
41
|
+
for tab in cfg_tree or []:
|
|
42
|
+
walk(tab.get("settings") or [])
|
|
43
|
+
return byid
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def normalize_designer_layer(flow: dict) -> dict:
|
|
47
|
+
"""Regenerate STRING designer setting values from their runtime parameters, in place. Returns a
|
|
48
|
+
report {changed: bool, actions: [{id,name,settings:[{id,type,label}]}], warnings: [...]}."""
|
|
49
|
+
report: dict = {"changed": False, "actions": [], "warnings": []}
|
|
50
|
+
for a in flow.get("actions") or []:
|
|
51
|
+
cfg_tree = (a.get("customData") or {}).get("configuration") or []
|
|
52
|
+
byid = _index_settings(cfg_tree)
|
|
53
|
+
changed_settings: list = []
|
|
54
|
+
for p in a.get("parameters") or []:
|
|
55
|
+
s = byid.get(p.get("tabPropertyId"))
|
|
56
|
+
if s is None:
|
|
57
|
+
# a runtime param with no designer setting to mirror into - a malformed/hand-built
|
|
58
|
+
# node smell. Never clobber; surface it so a human looks.
|
|
59
|
+
if p.get("value") not in (None, "", [], {}):
|
|
60
|
+
report["warnings"].append({"action": a.get("actionName"),
|
|
61
|
+
"param": p.get("tabPropertyId"), "why": "param_without_setting"})
|
|
62
|
+
continue
|
|
63
|
+
# STRING-ONLY: only a string designer value can hold the <%N%> bug and is a clean mirror of
|
|
64
|
+
# its runtime param. Anything list/dict-shaped is left exactly as-is (see module doc).
|
|
65
|
+
if not isinstance(s.get("value"), str):
|
|
66
|
+
continue
|
|
67
|
+
new = _b._config_value_from_param(p.get("value"), p.get("variable"))
|
|
68
|
+
if new != s.get("value"):
|
|
69
|
+
s["value"] = new
|
|
70
|
+
changed_settings.append({"id": s.get("id"), "type": s.get("type"), "label": s.get("label")})
|
|
71
|
+
if changed_settings:
|
|
72
|
+
report["changed"] = True
|
|
73
|
+
report["actions"].append({"id": a.get("id"), "name": a.get("actionName"), "settings": changed_settings})
|
|
74
|
+
return report
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_note": "Golden FlowRequestDto shape (POST /api/Projects body), PascalCase. The client supplies Id (the gateway persists it and returns empty on success). Variables -> VariableDto; Actions -> ActionDto with CustomData (designer/position) + Parameters (TabPropertyId binding); Ports are edges held on the SOURCE action (plus a null->Start entry edge). Verified live 2026-06-24: validates, persists, runs to STATUS_FINISH. Most fields below are filled by builder.py.",
|
|
3
|
+
"Id": "<uuid: flow>",
|
|
4
|
+
"ParentId": null,
|
|
5
|
+
"Status": 1,
|
|
6
|
+
"Title": "<title>",
|
|
7
|
+
"Description": "",
|
|
8
|
+
"IsValid": true,
|
|
9
|
+
"Active": true,
|
|
10
|
+
"Timeout": 0,
|
|
11
|
+
"CurrentActionId": null,
|
|
12
|
+
"DebugMode": false,
|
|
13
|
+
"IsNotification": false,
|
|
14
|
+
"Variables": [
|
|
15
|
+
{"Id": "<uuid: var>", "ContextId": null, "DataType": "0317bfee-b2f5-4bde-bfe8-121212121222", "Type": 30, "Name": "result", "DefaultValue": null, "IsList": false, "IsError": false, "IsRequired": false}
|
|
16
|
+
],
|
|
17
|
+
"Actions": [
|
|
18
|
+
{
|
|
19
|
+
"Id": "<uuid: action>", "FlowId": "<uuid: flow>", "TemplateId": "<actionId>",
|
|
20
|
+
"ParentId": null, "VariableErrorId": null, "Status": 1, "Category": "",
|
|
21
|
+
"ActionName": "Generate GUID", "ActionTemplateName": "Generate GUID",
|
|
22
|
+
"Ports": [{"Id": "<uuid: port>", "FlowId": "<uuid: flow>", "SourceId": "<src action>", "DestinationId": "<dst action>", "Type": 0, "State": 1, "Data": {}, "Errors": {}, "Config": {}}],
|
|
23
|
+
"Parameters": [{"TabPropertyId": "<template property id>", "Variable": [{"id": 0, "variableId": "<uuid: var>", "attribute": null}], "Value": "<%0%>"}],
|
|
24
|
+
"CustomData": {"type": "square", "name": "Generate GUID", "icon": "vpn_key", "position": {"x": 400, "y": 300}, "configuration": [], "inputPorts": 1, "outputPorts": 1, "wasDropped": true, "areaSize": {"width": 48, "height": 48, "x": 0, "y": 0}},
|
|
25
|
+
"IsTestable": true, "IsDisabled": false, "BreakPoint": null, "TestValues": null, "ErrorMessage": "", "Events": null
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"Webhooks": [],
|
|
29
|
+
"CustomResponse": null,
|
|
30
|
+
"DataRetention": null,
|
|
31
|
+
"CanvasData": null
|
|
32
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Bundled platform reference data + lookups for the DTO builders.
|
|
2
|
+
|
|
3
|
+
The builders are PURE (config -> DTO, no network). Anything they need from the
|
|
4
|
+
platform that is *stable* (primitive data-type ids, procesio built-in models)
|
|
5
|
+
ships bundled in data/platform_types.json so a build needs no live calls. Live,
|
|
6
|
+
workspace-specific ids (a credential template, an existing data model referenced
|
|
7
|
+
by a webhook, an action template's properties) are resolved by the handler and
|
|
8
|
+
passed into the builder as `ctx`, keeping the builder side-effect free.
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
from functools import lru_cache
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
|
|
16
|
+
_DATA = Path(__file__).resolve().parent / "data" / "platform_types.json"
|
|
17
|
+
|
|
18
|
+
# PrimaryDataType enum (Domain/Enums) — the value carried as CsharpCorrespondent.
|
|
19
|
+
CSHARP = {
|
|
20
|
+
"boolean": 10, "integer": 20, "float": 30, "double": 40, "string": 50,
|
|
21
|
+
"date": 60, "relationship": 70, "time": 80, "datetime": 90, "guid": 100,
|
|
22
|
+
"uri": 110, "json": 120, "credentials": 130, "object": 140,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@lru_cache(maxsize=1)
|
|
27
|
+
def platform_types() -> dict:
|
|
28
|
+
return json.loads(_DATA.read_text(encoding="utf-8"))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@lru_cache(maxsize=1)
|
|
32
|
+
def _primitive_by_name() -> dict[str, dict]:
|
|
33
|
+
out: dict[str, dict] = {}
|
|
34
|
+
for d in platform_types().get("primary", []):
|
|
35
|
+
if d.get("name"):
|
|
36
|
+
out[d["name"].strip().lower()] = d
|
|
37
|
+
return out
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@lru_cache(maxsize=1)
|
|
41
|
+
def _procesio_by_name() -> dict[str, dict]:
|
|
42
|
+
out: dict[str, dict] = {}
|
|
43
|
+
for d in platform_types().get("procesio", []):
|
|
44
|
+
if d.get("name"):
|
|
45
|
+
out[d["name"].strip().lower()] = d
|
|
46
|
+
return out
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# Friendly aliases -> the platform's primitive type name.
|
|
50
|
+
_ALIAS = {
|
|
51
|
+
"bool": "boolean", "int": "integer", "long": "integer", "number": "double",
|
|
52
|
+
"text": "string", "str": "string", "datetime": "datetime", "date-time": "datetime",
|
|
53
|
+
"uuid": "guid",
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def primitive_type_id(name: str) -> str:
|
|
58
|
+
"""Map a primitive type name (case-insensitive, with aliases) to its stable
|
|
59
|
+
platform DataType id. Raises KeyError for an unknown type."""
|
|
60
|
+
key = (name or "").strip().lower()
|
|
61
|
+
key = _ALIAS.get(key, key)
|
|
62
|
+
prim = _primitive_by_name()
|
|
63
|
+
if key in prim:
|
|
64
|
+
return prim[key]["id"]
|
|
65
|
+
raise KeyError(
|
|
66
|
+
f"unknown primitive type {name!r}; known: {sorted(prim)} (aliases: {sorted(_ALIAS)})"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def primitive_names() -> list[str]:
|
|
71
|
+
"""The accepted primitive type names (for schema enums)."""
|
|
72
|
+
return sorted(set(_primitive_by_name()) | set(_ALIAS))
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def csharp_correspondent(name: str) -> int:
|
|
76
|
+
key = (name or "").strip().lower()
|
|
77
|
+
key = _ALIAS.get(key, key)
|
|
78
|
+
return CSHARP.get(key, 0)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def procesio_model_id(name: str) -> str:
|
|
82
|
+
"""Id of a procesio built-in data model (e.g. 'FileDataModel')."""
|
|
83
|
+
by = _procesio_by_name()
|
|
84
|
+
key = (name or "").strip().lower()
|
|
85
|
+
if key in by:
|
|
86
|
+
return by[key]["id"]
|
|
87
|
+
raise KeyError(f"unknown procesio model {name!r}; known: {sorted(by)}")
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Registry of DTO components. Explicit (no import magic) for reliability —
|
|
2
|
+
add a component's COMPONENT here and it gets <name>-create / <name>-edit actions.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from functools import lru_cache
|
|
7
|
+
|
|
8
|
+
from tools.procesio.dto.framework import Component
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@lru_cache(maxsize=1)
|
|
12
|
+
def all_components() -> dict[str, Component]:
|
|
13
|
+
from tools.procesio.dto.credential import builder as credential
|
|
14
|
+
from tools.procesio.dto.datatype import builder as datatype
|
|
15
|
+
from tools.procesio.dto.document import builder as document
|
|
16
|
+
from tools.procesio.dto.form import builder as form
|
|
17
|
+
from tools.procesio.dto.process import builder as process
|
|
18
|
+
from tools.procesio.dto.webhook import builder as webhook
|
|
19
|
+
comps = [
|
|
20
|
+
datatype.COMPONENT,
|
|
21
|
+
process.COMPONENT,
|
|
22
|
+
credential.COMPONENT,
|
|
23
|
+
document.COMPONENT,
|
|
24
|
+
webhook.COMPONENT,
|
|
25
|
+
form.COMPONENT,
|
|
26
|
+
]
|
|
27
|
+
return {c.name: c for c in comps}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""Webhook builder — PURE config -> WebhookDto.
|
|
2
|
+
|
|
3
|
+
A webhook ties an inbound HTTP request to a process flow. Its payload shape is a
|
|
4
|
+
*webhook-type* data model (DataModelTypeParam.Webhook = 2) generated from a sample
|
|
5
|
+
payload via POST /api/Webhooks/generate-data (done in prepare_ctx).
|
|
6
|
+
|
|
7
|
+
Working create recipe (cracked live 2026-06-24): POST /api/Webhooks with the
|
|
8
|
+
generated DataModel embedded + DataModelId + the sample Definition + IsEdited=true
|
|
9
|
+
(PascalCase). Without the generated webhook-type DataModel the gateway returns a
|
|
10
|
+
generic 502 "resource is not able to be created or modified".
|
|
11
|
+
|
|
12
|
+
API:
|
|
13
|
+
- generate model: POST /api/Webhooks/generate-data {Definition: "<json>"} -> {dataModel, payloadIsList}
|
|
14
|
+
- Create: POST /api/Webhooks (WebhookDto) -> created webhook
|
|
15
|
+
- Get: GET /api/Webhooks/{id}
|
|
16
|
+
- Edit: PUT /api/Webhooks
|
|
17
|
+
- Trigger (anonymous): GET|POST /api/Webhooks/launch/{id}
|
|
18
|
+
"""
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import json
|
|
22
|
+
import uuid
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
from tools.procesio import config
|
|
26
|
+
from tools.procesio.dto.framework import Component
|
|
27
|
+
from tools.procesio.errors import UsageError
|
|
28
|
+
|
|
29
|
+
DIR = Path(__file__).resolve().parent
|
|
30
|
+
|
|
31
|
+
_TYPE = {"auto": 0, "manual": 1}
|
|
32
|
+
_RESP_TYPE = {"staticjson": 1, "static": 1, "javascript": 2, "js": 2, "jsonpath": 3}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _new_id(ctx) -> str:
|
|
36
|
+
return (ctx.get("new_id") or (lambda: str(uuid.uuid4())))()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _custom_response(cfg):
|
|
40
|
+
if not cfg:
|
|
41
|
+
return None
|
|
42
|
+
ct = cfg.get("type", "staticjson")
|
|
43
|
+
return {"ConfigType": _RESP_TYPE.get(str(ct).strip().lower(), ct),
|
|
44
|
+
"Config": cfg.get("config", "")}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def build(config: dict, ctx: dict) -> dict:
|
|
48
|
+
dm = ctx.get("data_model")
|
|
49
|
+
if dm is None:
|
|
50
|
+
raise UsageError("webhook build needs a generated data model in ctx "
|
|
51
|
+
"(prepare_ctx calls /api/Webhooks/generate-data on the sample)")
|
|
52
|
+
sample = config.get("sample", {})
|
|
53
|
+
definition = config.get("definition") or json.dumps(sample)
|
|
54
|
+
wtype = config.get("type", "manual")
|
|
55
|
+
return {
|
|
56
|
+
"Id": ctx.get("webhook_id") or _new_id(ctx),
|
|
57
|
+
"Name": config["name"],
|
|
58
|
+
"PayloadIsList": bool(config.get("payloadIsList", ctx.get("payload_is_list", False))),
|
|
59
|
+
"HasHeader": bool(config.get("hasHeader", False)),
|
|
60
|
+
"HasQuery": bool(config.get("hasQuery", False)),
|
|
61
|
+
"DataModelId": dm.get("id"),
|
|
62
|
+
"Type": _TYPE.get(str(wtype).strip().lower(), wtype),
|
|
63
|
+
"Definition": definition,
|
|
64
|
+
"IsEdited": True,
|
|
65
|
+
"DataModel": dm,
|
|
66
|
+
"CustomResponseConfig": _custom_response(config.get("customResponse")),
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def prepare_ctx(client, config: dict) -> dict:
|
|
71
|
+
"""Generate the webhook-type data model from the sample payload."""
|
|
72
|
+
sample = config.get("sample")
|
|
73
|
+
definition = config.get("definition") or (json.dumps(sample) if sample is not None else None)
|
|
74
|
+
if not definition:
|
|
75
|
+
raise UsageError("provide config.sample (a representative payload object) "
|
|
76
|
+
"so the webhook data model can be generated")
|
|
77
|
+
gen = client.post("/api/Webhooks/generate-data", {"Definition": definition})
|
|
78
|
+
return {"data_model": gen.get("dataModel"), "payload_is_list": gen.get("payloadIsList", False)}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _extract_id(resp, dto):
|
|
82
|
+
if isinstance(resp, dict):
|
|
83
|
+
return resp.get("id") or resp.get("Id") or dto.get("Id")
|
|
84
|
+
return dto.get("Id") if isinstance(dto, dict) else None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _edit(client, resource_id, config, ctx):
|
|
88
|
+
ctx = dict(ctx)
|
|
89
|
+
ctx["webhook_id"] = resource_id
|
|
90
|
+
dto = build(config, ctx)
|
|
91
|
+
client.put("/api/Webhooks", dto)
|
|
92
|
+
return client.get(f"/api/Webhooks/{resource_id}")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _create(client, dto, ctx):
|
|
96
|
+
"""Create the webhook. For an AUTO webhook (Type=0) run the listen+capture flow
|
|
97
|
+
the designer uses: create -> get URL -> start listening -> send a request to the
|
|
98
|
+
URL -> capture the data -> stop. (The gateway won't persist Type=0 via REST, so
|
|
99
|
+
the stored webhook is Type=1; AUTO is the capture *method*.) The capture log is
|
|
100
|
+
returned under `_capture`."""
|
|
101
|
+
auto = dto.get("Type") == 0
|
|
102
|
+
body = dict(dto)
|
|
103
|
+
if auto:
|
|
104
|
+
body["Type"] = 1
|
|
105
|
+
resp = client.post("/api/Webhooks", body)
|
|
106
|
+
rid = resp.get("id") if isinstance(resp, dict) and resp.get("id") else dto.get("Id")
|
|
107
|
+
if not auto:
|
|
108
|
+
return resp
|
|
109
|
+
capture = {"method": "AUTO listen+capture", "webhookId": rid,
|
|
110
|
+
"url": f"{config.web_base(client.profile)}/api/Webhooks/launch/{rid}"}
|
|
111
|
+
conn = str(uuid.uuid4())
|
|
112
|
+
listen = {"ConnectionId": conn, "Listen": True, "ListenType": 1, "WebhookId": rid,
|
|
113
|
+
"WebhookName": dto.get("Name"), "HasQuery": dto.get("HasQuery", False),
|
|
114
|
+
"HasHeader": dto.get("HasHeader", False), "HandshakeConfig": None}
|
|
115
|
+
try:
|
|
116
|
+
client.post("/api/Webhooks/listen", listen) # start listening
|
|
117
|
+
capture["listening"] = True
|
|
118
|
+
sample = dto.get("Definition") # send a request to the URL
|
|
119
|
+
client.post(f"/api/Webhooks/launch/{rid}", json.loads(sample) if sample else {})
|
|
120
|
+
capture["sent_sample"] = True
|
|
121
|
+
client.post("/api/Webhooks/listen", {**listen, "Listen": False}) # stop
|
|
122
|
+
capture["captured"] = True
|
|
123
|
+
except Exception as e: # noqa: BLE001 - the webhook exists either way
|
|
124
|
+
capture["error"] = str(e)[:200]
|
|
125
|
+
out = client.get(f"/api/Webhooks/{rid}")
|
|
126
|
+
if isinstance(out, dict):
|
|
127
|
+
out["_capture"] = capture
|
|
128
|
+
return out
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
COMPONENT = Component(
|
|
132
|
+
name="webhook",
|
|
133
|
+
description="PROCESIO webhook: an inbound HTTP trigger whose payload is a generated data model.",
|
|
134
|
+
dir=DIR,
|
|
135
|
+
build=build,
|
|
136
|
+
create_endpoint=("POST", "/api/Webhooks"),
|
|
137
|
+
get_path="/api/Webhooks/{id}",
|
|
138
|
+
extract_id=_extract_id,
|
|
139
|
+
prepare_ctx=prepare_ctx,
|
|
140
|
+
create=_create,
|
|
141
|
+
edit=_edit,
|
|
142
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "PROCESIO Webhook config",
|
|
4
|
+
"description": "Create/edit a webhook. The payload data model is generated from 'sample' (a representative payload). Attach the webhook to a process to trigger it.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["name", "sample"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"name": {"type": "string", "minLength": 1},
|
|
10
|
+
"sample": {"description": "a representative inbound payload object/array; its shape becomes the webhook data model"},
|
|
11
|
+
"definition": {"type": "string", "description": "raw JSON definition (alternative to sample)"},
|
|
12
|
+
"type": {"type": "string", "enum": ["auto", "manual"], "default": "manual"},
|
|
13
|
+
"hasHeader": {"type": "boolean", "default": false},
|
|
14
|
+
"hasQuery": {"type": "boolean", "default": false},
|
|
15
|
+
"payloadIsList": {"type": "boolean"},
|
|
16
|
+
"customResponse": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"properties": {
|
|
20
|
+
"type": {"type": "string", "enum": ["staticjson", "static", "javascript", "js", "jsonpath"]},
|
|
21
|
+
"config": {"type": "string"}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Webhook sub-tool
|
|
2
|
+
|
|
3
|
+
Create/edit a PROCESIO **webhook** — an inbound HTTP trigger. Its payload shape is
|
|
4
|
+
a webhook-type data model generated from a sample; attach the webhook to a process
|
|
5
|
+
to fire the flow when the URL is called.
|
|
6
|
+
|
|
7
|
+
## Config
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"name": "Order webhook",
|
|
12
|
+
"sample": {"orderId": "abc", "amount": 12.5, "items": ["a", "b"]},
|
|
13
|
+
"type": "manual",
|
|
14
|
+
"hasHeader": false,
|
|
15
|
+
"hasQuery": false,
|
|
16
|
+
"customResponse": {"type": "staticjson", "config": "{\"ok\":true}"}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **sample** — a representative payload; the builder calls `generate-data` to infer
|
|
21
|
+
the webhook data model from it (or pass a raw `definition` string).
|
|
22
|
+
- **type** — `manual` (1, fires on call — verified) or `auto` (0).
|
|
23
|
+
- **customResponse** — optional synchronous response: `staticjson` / `javascript` / `jsonpath`.
|
|
24
|
+
|
|
25
|
+
## API contract (verified live 2026-06-24)
|
|
26
|
+
|
|
27
|
+
- **Generate model:** `POST /api/Webhooks/generate-data {Definition}` → `{dataModel, payloadIsList}`
|
|
28
|
+
(the `dataModel` is a webhook-type model, `type:2`).
|
|
29
|
+
- **Create:** `POST /api/Webhooks` (`WebhookDto`) — must embed the generated
|
|
30
|
+
`DataModel` + `DataModelId` + `Definition` + `IsEdited:true`, else a generic 502.
|
|
31
|
+
- **Get:** `GET /api/Webhooks/{id}`. **Edit:** `PUT /api/Webhooks`. **Delete:** `DELETE /api/Webhooks/{id}`.
|
|
32
|
+
- **Trigger (anonymous):** `GET|POST|PUT|PATCH|DELETE /api/Webhooks/launch/{id}`
|
|
33
|
+
(body = payload; `?respondOk=true` for a bare 200). Verified: returns 200.
|
|
34
|
+
|
|
35
|
+
## Triggering a process
|
|
36
|
+
|
|
37
|
+
Attach the webhook to a flow via the flow's `Webhooks[]` (`WebhookInstanceDto`) and
|
|
38
|
+
bind the generated webhook payload as **one model object** to a compatible model-typed
|
|
39
|
+
process input. The current `WebhookVariableDto` attachment carries the process
|
|
40
|
+
`variableId` and `variableType`; it does not provide a field-by-field mapping table
|
|
41
|
+
that fans the body into several primitive inputs.
|
|
42
|
+
|
|
43
|
+
For a retained process whose public contract is primitive inputs, use a bounded adapter
|
|
44
|
+
process:
|
|
45
|
+
|
|
46
|
+
1. accept one input typed to the generated webhook model;
|
|
47
|
+
2. extract its attributes deterministically into plain process variables;
|
|
48
|
+
3. synchronously call the retained process through those plain variables;
|
|
49
|
+
4. bind all scripting/action errors;
|
|
50
|
+
5. detach/delete a temporary adapter together with the webhook when the drill ends.
|
|
51
|
+
|
|
52
|
+
A webhook attached directly to several primitive inputs can create a never-started
|
|
53
|
+
instance even though the webhook DTO and process validation look correct. Prove one
|
|
54
|
+
real launch by reconciling the target/child instance tree and the final business-key
|
|
55
|
+
side effect; do not infer mapping success from attachment alone.
|
|
56
|
+
|
|
57
|
+
## AUTO vs MANUAL (verified live 2026-06-24)
|
|
58
|
+
|
|
59
|
+
Per the docs, **AUTO is the listen/capture method**, MANUAL is paste-the-payload:
|
|
60
|
+
- **`type:"manual"`** — you supply `sample`; the builder generates the model from it.
|
|
61
|
+
- **`type:"auto"`** — the builder runs the designer's flow: create the webhook →
|
|
62
|
+
get its URL → **start listening** → **send the sample to the URL** → capture →
|
|
63
|
+
stop. The `capture` log (`listening/sent_sample/captured`) is returned. The
|
|
64
|
+
webhook is functional (triggers processes) either way.
|
|
65
|
+
- The gateway does **not persist `Type:0`** via REST (`POST` → 502), so the
|
|
66
|
+
stored webhook is `Type:1`; AUTO is the capture *method*, not a stored type.
|
|
67
|
+
The capture step is real (listen + a live request to the URL).
|
|
68
|
+
|
|
69
|
+
## Custom webhook responses
|
|
70
|
+
|
|
71
|
+
The custom response is configured **on the process** (per the docs: "Custom
|
|
72
|
+
Response: configured within a process; settings persist"): set the flow's
|
|
73
|
+
`customResponse` (in `process-create`) to a process variable —
|
|
74
|
+
`"customResponse": {"var": "responseVar"}`. **A synchronous run returns this value
|
|
75
|
+
directly** (verified: `POST /api/Projects/{id}/run?runSynchronous=true` returns
|
|
76
|
+
the `customResponse` value, not the status object), and so does a form's
|
|
77
|
+
RUN_PROCESS trigger with `syncRun:true`. It's also stored on the instance
|
|
78
|
+
(`GET …/instances/{iid}/customResponse`).
|
|
79
|
+
- The webhook **definition**'s `CustomResponseConfig` (static/JS/JSON-path) is
|
|
80
|
+
designer-only (not persisted by REST). The anonymous webhook **launch** fires the
|
|
81
|
+
flow asynchronously, so it doesn't block on the response — that webhook-side
|
|
82
|
+
"respond synchronously" toggle isn't exposed over REST. The custom-response
|
|
83
|
+
*value* mechanism itself is fully working via synchronous run / form trigger.
|
|
84
|
+
|
|
85
|
+
## Gotchas
|
|
86
|
+
|
|
87
|
+
- `HasHeader`/`HasQuery` only persist if the data model includes header/query
|
|
88
|
+
sub-models — a body-only sample resets them to false.
|
|
89
|
+
- One webhook launch can create an adapter instance, a retained child-process instance,
|
|
90
|
+
and further nested instances. Count the complete causal tree in execution budgets.
|
|
91
|
+
- After an ambiguous launch response, reconcile by webhook ID, stable business key,
|
|
92
|
+
and launch window; never resend blindly.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Id": "00000000-0000-0000-0000-000000000001",
|
|
3
|
+
"Name": "OrderHook",
|
|
4
|
+
"PayloadIsList": false,
|
|
5
|
+
"HasHeader": false,
|
|
6
|
+
"HasQuery": false,
|
|
7
|
+
"DataModelId": "dm-1",
|
|
8
|
+
"Type": 1,
|
|
9
|
+
"Definition": "{\"orderId\": \"abc\", \"amount\": 12.5}",
|
|
10
|
+
"IsEdited": true,
|
|
11
|
+
"DataModel": {
|
|
12
|
+
"id": "dm-1",
|
|
13
|
+
"name": "InternalWebhookDto",
|
|
14
|
+
"isDataModel": true,
|
|
15
|
+
"type": 2,
|
|
16
|
+
"attributes": [
|
|
17
|
+
{
|
|
18
|
+
"id": "a1",
|
|
19
|
+
"name": "orderId",
|
|
20
|
+
"dataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"CustomResponseConfig": null
|
|
25
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_note": "Golden WebhookDto (POST /api/Webhooks body), PascalCase. The DataModel MUST be a webhook-type model (DataModelTypeParam.Webhook=2) from POST /api/Webhooks/generate-data; IsEdited:true and Definition (the sample JSON) are required, else the gateway returns a generic 502. Type: AUTO=0, MANUAL=1 (MANUAL verified live 2026-06-24; AUTO needs different handling). HasHeader/HasQuery only stick if the data model includes header/query sub-models. The server persists a fresh DataModelId on save.",
|
|
3
|
+
"Id": "<uuid: webhook>",
|
|
4
|
+
"Name": "<name>",
|
|
5
|
+
"PayloadIsList": false,
|
|
6
|
+
"HasHeader": false,
|
|
7
|
+
"HasQuery": false,
|
|
8
|
+
"DataModelId": "<generated data model id>",
|
|
9
|
+
"Type": 1,
|
|
10
|
+
"Definition": "<sample payload as JSON string>",
|
|
11
|
+
"IsEdited": true,
|
|
12
|
+
"DataModel": {"_": "the full webhook-type DataModelDto from generate-data"},
|
|
13
|
+
"CustomResponseConfig": null
|
|
14
|
+
}
|