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,360 @@
|
|
|
1
|
+
# PROCESIO DTO sub-tools — design note (IMPLEMENTED 2026-06-24)
|
|
2
|
+
|
|
3
|
+
Captured 2026-06-23; **built and live-verified 2026-06-24**. The plan below was
|
|
4
|
+
followed; implementation status is at the bottom (see "Implementation status").
|
|
5
|
+
|
|
6
|
+
## Purpose (obey this above the mechanism)
|
|
7
|
+
|
|
8
|
+
Create/edit PROCESIO objects so the result is:
|
|
9
|
+
1. **Deterministic & reliable** — DTOs built by scripts from known structures/patterns, reused.
|
|
10
|
+
2. **Fast** — script execution, not LLM inference.
|
|
11
|
+
3. **Cheap** — no tokens spent assembling the DTO.
|
|
12
|
+
4. **Independent** — builders usable outside this tool.
|
|
13
|
+
5. **Scalable** — portable into other solutions.
|
|
14
|
+
|
|
15
|
+
If a mechanism serves this purpose better than what's below, change the mechanism.
|
|
16
|
+
|
|
17
|
+
## Pipeline (the contract)
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
user request
|
|
21
|
+
→ [LLM] minimal config — smallest correct input, per component ← the ONLY non-deterministic step
|
|
22
|
+
→ [validate] config against the component's JSON Schema (fail-fast)
|
|
23
|
+
→ [build] deterministic builder MERGES config onto a golden DTO template → full PROCESIO DTO
|
|
24
|
+
→ [validate@source] call PROCESIO's own validate/test endpoint where one exists
|
|
25
|
+
→ [send] create (POST) OR edit (GET current → apply config delta → PUT)
|
|
26
|
+
→ [confirm] return id; for edits, re-GET and diff
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Per-component artifacts — the "3-part doc" is **executable files, not prose**
|
|
30
|
+
|
|
31
|
+
Per component, a folder `tools/procesio/dto/<component>/` containing:
|
|
32
|
+
|
|
33
|
+
1. `description.md` — what it is, when to use, gotchas *(the general description)*.
|
|
34
|
+
2. `config.schema.json` — JSON Schema the LLM fills *(point-2 "config structure")*.
|
|
35
|
+
Maximally constrained: enums for types, required-minimal surface, references
|
|
36
|
+
resolvable against live PROCESIO data.
|
|
37
|
+
3. `template.dto.json` — a **real, captured** golden DTO with placeholders
|
|
38
|
+
*(point-3 "actual DTO structure")*.
|
|
39
|
+
4. `builder.py` — **pure** function `config → DTO` (template-merge + expansion
|
|
40
|
+
rules). No I/O, no auth, no network. Separately unit-tested.
|
|
41
|
+
5. `fixtures/` — golden `config → DTO` pairs (regression tests) + a captured live
|
|
42
|
+
object for drift detection.
|
|
43
|
+
|
|
44
|
+
The schema + template **are** the documentation. Prose drifts; tested artifacts don't.
|
|
45
|
+
|
|
46
|
+
## Design principles (the challenge refinements)
|
|
47
|
+
|
|
48
|
+
- **Template-merge, not from-scratch translation.** The golden template carries
|
|
49
|
+
every undocumented boilerplate field (ids, positions, default flags) verbatim;
|
|
50
|
+
the builder only fills/repeats the semantic slots the config names. Less code,
|
|
51
|
+
higher fidelity, fewer ways to be wrong.
|
|
52
|
+
- **Use PROCESIO's own validation as a correctness oracle** before committing —
|
|
53
|
+
`POST /api/Projects/validate`, `POST /api/Credentials/test`,
|
|
54
|
+
`POST /api/Actions/test`, and any per-component validate. The cheapest place to
|
|
55
|
+
catch a bad DTO is PROCESIO itself, deterministically.
|
|
56
|
+
- **Builders are pure libraries.** `config → DTO`, zero side effects. The tool
|
|
57
|
+
wraps auth/transport; the builder ports into a process, a service, anything.
|
|
58
|
+
(serves *independent* + *scalable*.)
|
|
59
|
+
- **Win reliability at the config schema.** The LLM step is the only soft spot;
|
|
60
|
+
constrain it hard (enums, validated ID references, minimal required fields) so
|
|
61
|
+
mistakes fail at the schema, not in production.
|
|
62
|
+
- **Versioned templates + drift test.** Capture each template with date/API
|
|
63
|
+
version; a round-trip test re-GETs a known object and diffs it against the
|
|
64
|
+
template to detect platform drift before it breaks a build.
|
|
65
|
+
- **Composable builders.** A process references data models, credentials, and
|
|
66
|
+
actions — its builder composes the smaller builders. Build simple→complex so
|
|
67
|
+
the complex ones reuse the simple ones.
|
|
68
|
+
|
|
69
|
+
## DTO source (decided)
|
|
70
|
+
|
|
71
|
+
Primary: **a human annotates example DTOs** (the non-Swagger rules — required
|
|
72
|
+
fields, enums, what references what, what the UI auto-fills). Supplement only as
|
|
73
|
+
needed by round-tripping a live object (GET an existing one) and HAR-capturing
|
|
74
|
+
designer saves (for Documents/Forms whose save isn't a clean REST PUT).
|
|
75
|
+
|
|
76
|
+
## Tool surface (per component, once taught)
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
<component>-create --config '<json>' [--dry-run]
|
|
80
|
+
<component>-edit --id <id> --config '<json>' [--dry-run]
|
|
81
|
+
```
|
|
82
|
+
`--dry-run` returns the built DTO + the PROCESIO validate result and sends
|
|
83
|
+
nothing. These sit alongside the raw `post-*` / `put-*` endpoint actions already
|
|
84
|
+
generated (those remain the escape hatch).
|
|
85
|
+
|
|
86
|
+
## Build sequence (simple→complex; prove the pattern early)
|
|
87
|
+
|
|
88
|
+
1. **Webhooks** — small DTO, high frequency. First; establishes the pattern.
|
|
89
|
+
2. **Credentials** — small, has a `test` endpoint (built-in validation oracle).
|
|
90
|
+
3. **Data Models** (DataTypes) — medium; referenced by everything else.
|
|
91
|
+
4. **Forms & Tasks** — medium; depend on data models.
|
|
92
|
+
5. **Documents** (document designer) — designer payload; likely HAR-sourced.
|
|
93
|
+
6. **Processes** — largest (nodes, edges, variables, actions); composes the above.
|
|
94
|
+
|
|
95
|
+
## What I need from you to start a component
|
|
96
|
+
|
|
97
|
+
1. One or two **real example DTOs** (a create + an edit), exported or pasted.
|
|
98
|
+
2. **Notes on the non-obvious rules**: required fields, allowed enums, references,
|
|
99
|
+
what the UI fills automatically.
|
|
100
|
+
3. The create/edit endpoints (already generated) + any validate/test endpoint.
|
|
101
|
+
|
|
102
|
+
From those I produce `config.schema.json` + `template.dto.json` + `builder.py` +
|
|
103
|
+
`fixtures/`, and the two `<component>-create` / `-edit` actions.
|
|
104
|
+
|
|
105
|
+
## Open questions (resolve when we start)
|
|
106
|
+
|
|
107
|
+
- **Reference resolution** — builder fetches live IDs (datatype/credential/
|
|
108
|
+
workspace) to validate config references at build time, or assumes the LLM
|
|
109
|
+
supplies valid IDs? (Lean: resolve where cheap.)
|
|
110
|
+
- **Edit config shape** — full desired-state vs delta. (Lean: desired-state for
|
|
111
|
+
create; delta merged onto the re-GET for edit.)
|
|
112
|
+
- **Create idempotency** — guard against duplicates on retry.
|
|
113
|
+
|
|
114
|
+
## Implementation status (2026-06-24)
|
|
115
|
+
|
|
116
|
+
All six components built and **live-verified** in a real workspace
|
|
117
|
+
(`3fd85e9d-…`). Surface: `<component>-create` / `<component>-edit` actions
|
|
118
|
+
(`--config '<json>'` | `--config-file`, `--dry-run`), generated by
|
|
119
|
+
`handlers/dto_actions.py` from `dto/registry.py`. Framework: `dto/framework.py`
|
|
120
|
+
(jsonschema validate → pure `build` → create/validate/edit). Bundled reference:
|
|
121
|
+
`dto/data/platform_types.json`, `dto/data/action_catalog.json` (231 actions),
|
|
122
|
+
`dto/form/elements/*.json` (27 golden controls) + `data_shell.json`.
|
|
123
|
+
|
|
124
|
+
| Component | action(s) | live proof |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| **datatype** | datatype-create/edit | create+GET+edit; all primitives, lists, model-ref, inline nesting |
|
|
127
|
+
| **process** | process-create/edit | validate→create→**run→STATUS_FINISH**; any catalog action; literal/var/template/attr-path/output bindings; linear+explicit edges; **decisional branching**; webhook attach |
|
|
128
|
+
| **credential** | credential-create/edit | create + `POST /test` live connection (GitHub 200); **used in a process** via Call API v3 → 200 |
|
|
129
|
+
| **document** | document-create/edit | create; **used in a process** via Generate Document → rendered HTML |
|
|
130
|
+
| **webhook** | webhook-create/edit | create (generate-data model) + `launch` → **triggered a process instance** |
|
|
131
|
+
| **form** | form-create/edit | create + publish + **rendered at runtime** (forms.procesio.app/{tinyUrl}); 27 control types |
|
|
132
|
+
|
|
133
|
+
Resolved open questions: **reference resolution** = `prepare_ctx` resolves live
|
|
134
|
+
ids (models/credentials/catalog) into ctx, builders stay pure. **Edit** =
|
|
135
|
+
desired-state rebuild + PUT (datatype reconciles attributes via the attribute
|
|
136
|
+
endpoints). **Idempotency** = not guarded (each create is a new resource).
|
|
137
|
+
|
|
138
|
+
Tests: `tests/test_dto.py` (pure builders + golden fixtures + schema validation).
|
|
139
|
+
Manifest is regenerated by `python -m tools.procesio.gen_manifest` (the file is
|
|
140
|
+
too large to hand-edit). Per-component `description.md` + `template.dto.json` +
|
|
141
|
+
`fixtures/` document each contract.
|
|
142
|
+
|
|
143
|
+
### Key live-verified facts (also in PROCESIO-API-NOTES.md)
|
|
144
|
+
- **Forms render from `Data.elements`** — the encrypted `Data.code` blob is NOT
|
|
145
|
+
needed (proven: code="" + modified elements rendered the change). Forms are
|
|
146
|
+
reachable at runtime only via a **CustomUrl** (`POST /api/CustomUrl/FormTemplate`
|
|
147
|
+
→ `tinyUrl` → `forms.procesio.app/{tinyUrl}`); a bare `/forms/{id}` 404s.
|
|
148
|
+
- **Processes** keep the **client-supplied Id** (POST returns empty). Ports live
|
|
149
|
+
on the source action; a `00000000…`→Start entry edge is required; each branch
|
|
150
|
+
needs its own **Stop** (a Stop accepts one input port).
|
|
151
|
+
- **Webhooks** need the generated webhook-type DataModel (`generate-data`) +
|
|
152
|
+
`IsEdited:true`; MANUAL works, AUTO needs different handling.
|
|
153
|
+
|
|
154
|
+
## Phase 2 enhancements (2026-06-24, all live-verified)
|
|
155
|
+
|
|
156
|
+
**Process**
|
|
157
|
+
- **Scripting actions** (Javascript, Python) work via the generic builder: `Code`
|
|
158
|
+
(a `{template, vars}` binding with `<%0%>` index injection) + `Output` ({var},
|
|
159
|
+
typed `json`/`object`). JS outputs via `setOutput(v)` → `{"result": v}`; Python
|
|
160
|
+
outputs via `print(v)` → `{"result": "<stdout>"}`. Inputs inject by **index
|
|
161
|
+
`<%0%>`**, NOT by name. SQL = Execute Query (`list<object>`) / Execute Command
|
|
162
|
+
(rows-affected) with `@param`.
|
|
163
|
+
- **Global `<%N%>` indexing per action** — variable indices are now unique across
|
|
164
|
+
ALL of an action's parameters (was per-param), required for actions that reuse a
|
|
165
|
+
property facet for multiple params (JS Code+Output, Decisional Cases+Default,
|
|
166
|
+
document-mapper). `{template}` local `<%i%>` are remapped to the global index.
|
|
167
|
+
- **Error ports** — `onError: "<handlerId>"` on an action creates an
|
|
168
|
+
`ErrorDataModel` variable (`10c6ac59-…220`, `IsError`), sets `VariableErrorId`,
|
|
169
|
+
and adds an error port (`Type:1, Data:{isDefault:"error"}`) to the handler.
|
|
170
|
+
- **Join** convergence — the flow-control Join is `fb6a9d14-…` (`inputPorts=-1`,
|
|
171
|
+
accepts many); a list-`Join` shares the name, so control actions
|
|
172
|
+
(start/stop/join) are **pinned by id** in `_CONTROL_TEMPLATE`. Branches converge
|
|
173
|
+
via Join (each branch otherwise needs its own Stop — a Stop accepts 1 input).
|
|
174
|
+
Decisional **default** port = `Type:0, Data:{isDefault:"default"}` (done).
|
|
175
|
+
- **Canvas layout** — build-time positions come solely from the shared layout
|
|
176
|
+
engine (`_engine_layout` → `layout/engine.py`): nodes laid left-to-right by
|
|
177
|
+
layer, happy path on the main lane, parallel nodes fan into lanes, error
|
|
178
|
+
handlers drop to a low rail. Implements the PROCESIO design directives
|
|
179
|
+
(one-direction flow, minimize crossings, ≤50 actions, Join to declutter). The
|
|
180
|
+
legacy provisional `_layout()` was removed 2026-07-07 (it was always overwritten
|
|
181
|
+
by the engine; DTOs stayed byte-identical) — see
|
|
182
|
+
`todo/done/procesio-retire-builder-layout.md`.
|
|
183
|
+
- **`docMap`** (Generate Document) — maps document-template variables to process
|
|
184
|
+
variables: `[{id, source:{value:"<%N%>", variable:[…]}, destination:{id, variableId:<docVarId>, attribute}}]`.
|
|
185
|
+
`prepare_ctx` resolves the doc's variable ids from `Select Document Template`.
|
|
186
|
+
- All 231 catalog actions are reachable (data-driven by label); ~19 names are
|
|
187
|
+
ambiguous (versioned variants) → reference by actionId when it matters.
|
|
188
|
+
|
|
189
|
+
**Document**
|
|
190
|
+
- Body authored with friendly `<%name%>` placeholders is translated to
|
|
191
|
+
`<%varId%>` at build time (the render engine resolves by **variable id**, and the
|
|
192
|
+
server keeps client-supplied ids). URLs/images = plain HTML `<a>`/`<img>` in the
|
|
193
|
+
body. Repeating tables over a list var = one `<tr>` with `<%listId.attrId%>`
|
|
194
|
+
cells (the builder substitutes the leading var name → id; the `.attr` must be an
|
|
195
|
+
attribute id). End-to-end verified: a variable document populated via Generate
|
|
196
|
+
Document `docMap` rendered the values + the link.
|
|
197
|
+
|
|
198
|
+
**Forms**
|
|
199
|
+
- **Events + triggers** — `events: [{on, do, …}]` per control. `on` ∈
|
|
200
|
+
click/input/focus/blur/open/tabchange/rowadded/rowdeleted/paginated →
|
|
201
|
+
the right `on*Events` config = `{debounce, events:[{id, type, action, config}]}`.
|
|
202
|
+
`do` ∈ **map** (MAP_FORM_DATA), **process** (RUN_PROCESS: processId, syncRun,
|
|
203
|
+
inputMap/outputMap), **js** (RUN_JAVASCRIPT: code), **form** (RUN_FORM).
|
|
204
|
+
- **Tasks/assignees/approvals** — `assignee`/`assigneeReplacement` on
|
|
205
|
+
section/tabs/table; `approver`/`approverReplacement` on the approval control.
|
|
206
|
+
- **Themes/CSS** — `theme: {"--c-primary":"#…", …}` overrides the shell theme
|
|
207
|
+
(19 sections of `{type,label,value,cssVariable}`). All control properties are
|
|
208
|
+
settable via the named convenience keys or the raw `configs` passthrough.
|
|
209
|
+
|
|
210
|
+
## Phase 3 — systematic coverage (2026-06-24, live-verified)
|
|
211
|
+
|
|
212
|
+
- **All-actions audit** — every one of the **210 distinct catalog actions builds
|
|
213
|
+
AND validates** (`/api/Projects/validate`): 210/210, zero structural failures.
|
|
214
|
+
The data-driven builder genuinely covers all PROCESIO actions (versioned
|
|
215
|
+
duplicate-name variants → reference by actionId).
|
|
216
|
+
- **Error-port exclusions** — `onError` is rejected on Start/Stop/Join/For Each
|
|
217
|
+
(they have no error port), per PROCESIO.
|
|
218
|
+
- **Forms use a FLAT elements list + parentId** (NOT nested `children`) — corrected
|
|
219
|
+
a real bug: nested-children containers did **not** render. Now section/columns/
|
|
220
|
+
tabs children are flat with `parentId`, and columns/tabs keep an ordered
|
|
221
|
+
child-name list. **Verified live**: section child, 2-column layout, and a table
|
|
222
|
+
all render.
|
|
223
|
+
- **Form tables** — `{"type":"table","columns":[{"key","label","cell":{…}}]}` builds
|
|
224
|
+
the table + a `static-table-row` + the cell controls wired via
|
|
225
|
+
`childrenIdPerColumn` (colId→[cellId]). **Verified live** (PRODUCT/QUANTITY columns
|
|
226
|
+
with input/number cells render).
|
|
227
|
+
- **Document tables with variables** — a repeating table over a list-model variable:
|
|
228
|
+
one `<tr>` with `<%items.product%>` cells (friendly names → `<%listId.attrId%>`
|
|
229
|
+
via model-attribute resolution). **Verified live**: a 2-row table rendered from a
|
|
230
|
+
mapped list (Widget/Gadget), plus a scalar var + hyperlink.
|
|
231
|
+
- **Data Model from JSON** (platform trick) — `datatype-create … "fromJson":{…}`
|
|
232
|
+
infers the model via `/api/DataTypes/generate`. **Verified**: nested object +
|
|
233
|
+
list inferred. Other platform tricks are UI-only (canvas shortcuts); the
|
|
234
|
+
`group/name` process-naming convention is supported (just the name field).
|
|
235
|
+
- **Form events expanded** to the full documented vocabulary (ready/hover/
|
|
236
|
+
stepchange/nextstep/previousstep/before|afterapprove|reject/messages…) on top of
|
|
237
|
+
the export-verified click/input/focus/blur/tabchange/row/pagination set.
|
|
238
|
+
- **Design directives applied**: error-port→handler pattern, one-direction
|
|
239
|
+
left-to-right auto-layout with lanes + a low error lane, ≤50-action guidance,
|
|
240
|
+
secrets only in the credential vault, distinct action names (user-supplied).
|
|
241
|
+
|
|
242
|
+
**Webhooks — AUTO (listen+capture) + custom responses (corrected & verified).**
|
|
243
|
+
The docs clarified that **AUTO = the listen/capture METHOD** (not a stored type):
|
|
244
|
+
`type:"auto"` runs the real designer flow in the webhook `create` override —
|
|
245
|
+
create → get URL → `POST /api/Webhooks/listen` (start) → send the sample to
|
|
246
|
+
`/api/Webhooks/launch/{id}` → stop — returning a `capture` log. Verified: the
|
|
247
|
+
AUTO webhook is created via listen+capture and triggers a process. (The gateway
|
|
248
|
+
won't persist `Type:0` via REST — `POST Type:0` → 502 — so the stored type is 1;
|
|
249
|
+
AUTO is the method.) **Custom webhook responses are configured ON THE PROCESS**
|
|
250
|
+
(per docs): `process-create … "customResponse":{"var":"responseVar"}` sets the
|
|
251
|
+
flow `CustomResponseDto` (`{Variable, Value:"<%0%>"}`, matching production); the
|
|
252
|
+
value is computed and stored on the instance
|
|
253
|
+
(`GET …/instances/{iid}/customResponse` → verified "OK-"). The webhook-definition
|
|
254
|
+
`CustomResponseConfig` (static/JS/JSON-path) and the synchronous HTTP return are
|
|
255
|
+
designer-only (not persisted/exposed by REST). MANUAL + AUTO + trigger all work.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
## These capabilities are CURATED ACTIONS — do not reimplement
|
|
259
|
+
Everything described above is reachable through a runnable action (run `python scripts/run-tool.py procesio`
|
|
260
|
+
to list all ~330). In particular:
|
|
261
|
+
- Parse a flow/export into a node/edge graph → **`read-flow-graph`**; structural summary/smells → **`inspect-flow`**.
|
|
262
|
+
- Auto-layout a canvas (legacy or `LAYOUT_ENGINE=elk`) → **`layout-flow`**; verify positions → **`verify-layout`**;
|
|
263
|
+
cross-process map → **`layout-resource-map`**; re-lay-out a LIVE process in place → **`relayout-process`**.
|
|
264
|
+
- Duplicate a process → **`duplicate-process`**; validate one → **`process-validate`**; delete → **`process-delete`**.
|
|
265
|
+
Reach for the action first; only drop to a raw `<method>-<path>` wrapper or `request` if no curated action fits.
|
|
266
|
+
|
|
267
|
+
## Two builder gaps that only appear at SAVE time (fixed 2026-08-27)
|
|
268
|
+
|
|
269
|
+
Both were invisible to `--dry-run` reading and to the offline schema, and both blocked the save of
|
|
270
|
+
any config using them.
|
|
271
|
+
|
|
272
|
+
**1. `{"var": x, "path": [...]}` wrote the attribute NAME.** `attr_index` was documented but never
|
|
273
|
+
populated, so the name went straight into `attribute.attributeId` — a field the API parses as a
|
|
274
|
+
Guid — and the save died with `Error converting value "ToEmail" to type 'System.Guid'`. Every
|
|
275
|
+
model-typed attribute binding was affected. `prepare_ctx` now fetches each referenced model
|
|
276
|
+
(`GET /api/DataTypes/{id}`, recursively for model-typed attributes) and indexes its attributes by
|
|
277
|
+
name; each step of a path is resolved against the model the PREVIOUS step lands in, which is what
|
|
278
|
+
makes a nested path work. A value that already looks like a Guid passes through, an unknown name
|
|
279
|
+
raises and lists the attributes that do exist, and a variable with no known model still passes the
|
|
280
|
+
name through (offline behaviour unchanged).
|
|
281
|
+
|
|
282
|
+
**2. A SQL node was built without its `Parameters config tab`.** The builder emits only the
|
|
283
|
+
properties a config names; the designer renders that one from the TEMPLATE, finds no value, and
|
|
284
|
+
blocks the save with "Please make sure that the action is defined/configured properly". So NO
|
|
285
|
+
`process-create` config containing an Execute Query / Execute Command could be saved, bound or not.
|
|
286
|
+
The builder now always appends it (empty when unbound), keyed per family — the Command bind id is
|
|
287
|
+
not the Query one.
|
|
288
|
+
|
|
289
|
+
### A `For Each` needs its ports wired explicitly
|
|
290
|
+
The implicit linear chain walks every action including the loop BODY, which leaves the For Each with
|
|
291
|
+
one outgoing port and the last body action with none. Two BE errors, both `statusCode 391 "Action
|
|
292
|
+
has too few output ports"`, one after the other. The shape that validates:
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
["start","getPending"], ["getPending","loop"],
|
|
296
|
+
["loop","buildBody"], ["loop","stop"], <- body entry AND the continuation after the loop
|
|
297
|
+
["buildBody","send"], ["send","mark"], ["mark","loop"] <- the body closes back onto the For Each
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
So: a `For Each` takes TWO outgoing edges, and the last action of the body loops back to it. Body
|
|
301
|
+
actions still carry `parent: "<forEachId>"` as well — `parent` sets containment, `edges` set flow.
|
|
302
|
+
|
|
303
|
+
## The warm toolrunner daemon serves STALE tool code
|
|
304
|
+
|
|
305
|
+
`scripts/run-tool.py` routes through a persistent worker pool by default, and those workers keep the
|
|
306
|
+
modules they imported at start. **After editing any tool source, `run-tool.py` keeps running the OLD
|
|
307
|
+
code** — the same command produces the same pre-fix output while pytest against the same file is
|
|
308
|
+
green, which reads exactly like "my change did not apply". Nothing warns.
|
|
309
|
+
|
|
310
|
+
Use `AAT_RUNNER=0` (or `AAT_RUNNER_DIRECT=1`) for the first call after a code change, or restart the
|
|
311
|
+
daemon. The give-away is a fix that is provably present on import (`inspect.getsource`) and provably
|
|
312
|
+
absent from the tool's output.
|
|
313
|
+
|
|
314
|
+
## Engine-STATE properties: a `For Each` times out on iteration one without them
|
|
315
|
+
|
|
316
|
+
A template can declare properties of `type: "ignore"` — engine state the designer never shows and
|
|
317
|
+
no config names, carrying their seed value ON THE TEMPLATE. The builder emitted only the properties
|
|
318
|
+
a config named, so it dropped them, and the engine then fell back to its own defaults.
|
|
319
|
+
|
|
320
|
+
On `For Each` that is fatal and reads like a configuration problem: without **`Action start time`**
|
|
321
|
+
(template seed `2010-01-01T00:00:00.0000000Z`) elapsed time is measured from year one, so the loop
|
|
322
|
+
fails instantly with `Foreach timeout exceeded!` — whatever `Action timeout` says, including a
|
|
323
|
+
generous 300. The other one is `Zero based list index` (seed `-1`). `Call Subprocess` declares one
|
|
324
|
+
too; nothing else in the catalog does.
|
|
325
|
+
|
|
326
|
+
The builder now copies every `ignore`-typed property from the template. **Diagnosing this from the
|
|
327
|
+
error is impossible** — the fix came from diffing the node against a For Each in a working export,
|
|
328
|
+
which is the general technique: when an action fails on configuration the validator accepts, dump a
|
|
329
|
+
live working instance of the same action and compare `Parameters[]` property-by-property.
|
|
330
|
+
|
|
331
|
+
A working `For Each` in a live flow also sets `Action timeout` to `0` (no cap).
|
|
332
|
+
|
|
333
|
+
### `Send Email`: the From address is a property, and SendGrid checks it
|
|
334
|
+
`From (Display Name)` and `From (Entity)` differ only in their last four characters
|
|
335
|
+
(`…ca11e4ef116c` vs `…ca11e4ef11c6`), and only the second one is the ADDRESS. A config that names
|
|
336
|
+
neither gets neither emitted, so there is no property to patch afterwards — `node-set-param` answers
|
|
337
|
+
"property not found on node", because the builder only writes what the config asked for.
|
|
338
|
+
|
|
339
|
+
Over a SendGrid relay an unverified or blank From fails the send outright: *"The from address does
|
|
340
|
+
not match a verified Sender Identity"*. The SMTP credential's own `From` may be blank, in which case
|
|
341
|
+
the address must come from the action. `sendgrid list-verified-senders` lists what the account will
|
|
342
|
+
actually accept.
|
|
343
|
+
|
|
344
|
+
## `<component>-edit --dry-run` used to preview a CREATE, not the edit
|
|
345
|
+
|
|
346
|
+
The dry-run branch built the DTO straight from the config, skipping the component's own edit
|
|
347
|
+
preparation — which for a process is exactly what reuses the live flow's VARIABLE IDS by name and
|
|
348
|
+
its canvas positions. So the preview showed brand-new ids while the real edit kept them.
|
|
349
|
+
|
|
350
|
+
That is the worst direction for a preview to be wrong, because a process variable is referenced BY
|
|
351
|
+
GUID from outside the process (a form's RUN_PROCESS inputMap/outputMap binds it by id), so "do the
|
|
352
|
+
ids survive this edit?" is the question a dry-run is run to answer. It answered wrongly both ways: a
|
|
353
|
+
preserved id shown as changed, and a genuine rename shown as if nothing external would break.
|
|
354
|
+
|
|
355
|
+
Fixed by extracting the live-resource enrichment into a `Component.edit_ctx` hook that both the real
|
|
356
|
+
edit and the new `framework.build_edit_dto` call. A component without the hook is unaffected, and an
|
|
357
|
+
unreadable live resource still produces a preview rather than refusing one.
|
|
358
|
+
|
|
359
|
+
**The general lesson:** a dry-run is only as good as the code path it shares with the real write. If
|
|
360
|
+
it builds through a different path, it is a different operation wearing the same name.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# PROCESIO Form Development — the complete guide
|
|
2
|
+
|
|
3
|
+
Everything needed to build a **professional-grade** PROCESIO form: how the DTO is
|
|
4
|
+
shaped, how form-level CSS and JavaScript actually execute, what the runtime DOM
|
|
5
|
+
looks like, how to read and write field values, how to build a custom animated
|
|
6
|
+
stepper, how to hide and reveal controls, how to wire a control to a process and
|
|
7
|
+
get data back into fields, and how to deploy all of it without destroying the
|
|
8
|
+
form.
|
|
9
|
+
|
|
10
|
+
Everything here was **verified against a live form and against the renderer's own
|
|
11
|
+
source** (`docs_info/ui-builder-main`). Where something was learned by breaking
|
|
12
|
+
the live form, the symptom is recorded next to the rule — see
|
|
13
|
+
[08-PITFALLS.md](08-PITFALLS.md), which is the fastest way to avoid repeating a
|
|
14
|
+
day of debugging.
|
|
15
|
+
|
|
16
|
+
## The files, and when to attach which
|
|
17
|
+
|
|
18
|
+
| File | Attach it when you need to… |
|
|
19
|
+
|---|---|
|
|
20
|
+
| [01-ANATOMY.md](01-ANATOMY.md) | understand the FormTemplate DTO: elements, configs, sections, the data model, value paths, steppers |
|
|
21
|
+
| [02-CODE-INJECTION.md](02-CODE-INJECTION.md) | write ANY form-level JavaScript — this is the one non-negotiable prerequisite |
|
|
22
|
+
| [03-DOM-CONTRACT.md](03-DOM-CONTRACT.md) | write CSS or query the DOM — the selector reference and what the renderer guarantees |
|
|
23
|
+
| [04-INTERACTION-RECIPES.md](04-INTERACTION-RECIPES.md) | read/write a field, hide a field, gate a button, build a custom control, validate, toast, embed an interactive map (Leaflet) |
|
|
24
|
+
| [05-STEPPER-AND-MOTION.md](05-STEPPER-AND-MOTION.md) | build a custom stepper, a step transition, a loader veil, entrance animations |
|
|
25
|
+
| [06-PROCESS-INTEGRATION.md](06-PROCESS-INTEGRATION.md) | trigger a process from the form and land its results back in fields |
|
|
26
|
+
| [07-DEPLOY-WORKFLOW.md](07-DEPLOY-WORKFLOW.md) | actually ship the CSS/JS to a live form, and test before you do |
|
|
27
|
+
| [08-PITFALLS.md](08-PITFALLS.md) | anything — read it once, then keep it attached |
|
|
28
|
+
|
|
29
|
+
**Minimum viable attachment set** for "add an animation / behaviour to an existing
|
|
30
|
+
form": `02` + `03` + `05` + `08`.
|
|
31
|
+
|
|
32
|
+
## The five-sentence version
|
|
33
|
+
|
|
34
|
+
1. A form is a **flat list of elements**, each a bag of `configs`, plus a mirrored
|
|
35
|
+
**data model** whose attribute ids must equal the elements' config ids.
|
|
36
|
+
2. Form-level CSS and JS live **AES-encrypted in `Data.code`** and are edited with
|
|
37
|
+
`form-get-code` / `form-set-code`, never with `form-edit`.
|
|
38
|
+
3. The CSS is injected as a `<style>` into the real page; **the JS is replayed in a
|
|
39
|
+
throwaway sandbox iframe**, so anything that must survive is injected once into
|
|
40
|
+
`window.parent.document`.
|
|
41
|
+
4. The renderer destroys and rebuilds controls on every step change (`v-if`), so
|
|
42
|
+
**all state is recomputed from a MutationObserver**, never stored on a node.
|
|
43
|
+
5. Behaviour is layered ON TOP of the platform's own — you click the platform's
|
|
44
|
+
real control rather than setting values behind its back, because it is Vue-bound.
|
|
45
|
+
|
|
46
|
+
## Vocabulary
|
|
47
|
+
|
|
48
|
+
| Term | Meaning |
|
|
49
|
+
|---|---|
|
|
50
|
+
| **element** | one control in `Data.elements` — input, paragraph, column, stepper, step… |
|
|
51
|
+
| **config** | one `{id, key, value}` entry on an element; `label`, `name`, `visible`, `onClickEvents`… are all configs |
|
|
52
|
+
| **value path** | `{dmRootId}.{FIELDS_NS}.{elementId}.{valueConfigId}` — how a process addresses a form field |
|
|
53
|
+
| **`Data.code`** | the designer's "Switch to code" editor: the form-level `{CSS, JAVASCRIPT}` pair, stored encrypted |
|
|
54
|
+
| **runtime layer** | the JS you inject into the parent document; it outlives individual script runs |
|
|
55
|
+
| **veil** | a full-card loader overlay that masks the renderer rebuilding controls |
|
|
56
|
+
| **rail** | a custom step indicator drawn by your own JS, replacing the platform's nav |
|
|
57
|
+
| **gating** | hiding a control with `display: none` so it also leaves the tab order |
|
|
58
|
+
|
|
59
|
+
## Related framework notes
|
|
60
|
+
|
|
61
|
+
- [../dto/form/FORM-STYLING-NOTES.md](../dto/form/FORM-STYLING-NOTES.md) — the four
|
|
62
|
+
styling surfaces (theme, per-element style, element-event JS, form-level code)
|
|
63
|
+
- [../PROCESIO-RESOURCE-MODEL-NOTES.md](../PROCESIO-RESOURCE-MODEL-NOTES.md) — the
|
|
64
|
+
export DTO for every resource type, including the flow graph
|
|
65
|
+
- [../PROCESIO-API-NOTES.md](../PROCESIO-API-NOTES.md) — auth, endpoints, casing
|
|
66
|
+
- [../PROCESIO-FE-VALIDATION-NOTES.md](../PROCESIO-FE-VALIDATION-NOTES.md) — what the
|
|
67
|
+
save-time validation gate rejects
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# 01 — Anatomy of a PROCESIO form
|
|
2
|
+
|
|
3
|
+
What the DTO contains, what each part is for, and which parts are load-bearing for
|
|
4
|
+
runtime behaviour. Read this before you touch a form programmatically; the two
|
|
5
|
+
sections that cause the most silent breakage are **value paths** and the **data
|
|
6
|
+
model mirror**.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. The envelope
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
GET /api/FormTemplate/{id} -> camelCase body
|
|
14
|
+
PUT /api/FormTemplate -> PascalCase envelope, full DTO
|
|
15
|
+
POST /api/FormTemplate -> create (the client supplies the Id)
|
|
16
|
+
PATCH /api/FormTemplate/{id}?state= -> publish/unpublish
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**The casing flips between the two directions.** The GET returns
|
|
20
|
+
`{id, name, isPrivate, type, status, state, assignees, customUrl, data}`; the PUT
|
|
21
|
+
wants `{Id, Name, IsPrivate, Type, Status, State, Assignees, CustomUrl, Data}`.
|
|
22
|
+
Map explicitly — echoing back an unexpected extra field from the GET is how a PUT
|
|
23
|
+
starts failing for reasons nobody can see. The canonical map lives in
|
|
24
|
+
`handlers/form_code.py::_PUT_KEYS`.
|
|
25
|
+
|
|
26
|
+
`Status = 1` (PUBLISHED) + `State = true` publishes. A `CustomUrl` gives the form
|
|
27
|
+
its public short link (`forms.<host>/{tinyUrl}`).
|
|
28
|
+
|
|
29
|
+
## 2. `Data` — the five parts that matter
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Data = {
|
|
33
|
+
elements : [ … ], // the control tree (PLAINTEXT) — this is what renders
|
|
34
|
+
dataModel : { … }, // a mirror of elements, used for value addressing
|
|
35
|
+
theme : [ … ], // ~190 CSS variables in 18 groups, form-wide
|
|
36
|
+
code : "…", // AES-encrypted { CSS, JAVASCRIPT } (see 02 + 07)
|
|
37
|
+
messages : { … }, // platform copy
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**`elements` alone is enough to render.** Proven live: a form with `code: ""` and
|
|
42
|
+
modified elements rendered the modified elements. The encrypted code blob is a
|
|
43
|
+
presentation/behaviour layer on top, never a requirement.
|
|
44
|
+
|
|
45
|
+
## 3. `elements` — a FLAT list with `parentId`
|
|
46
|
+
|
|
47
|
+
PROCESIO does **not** nest children inside a parent element. Every control is a
|
|
48
|
+
top-level entry in one flat array and points at its parent:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"id": "<guid>",
|
|
53
|
+
"type": "input",
|
|
54
|
+
"parentId": "<guid of the column/step/section>",
|
|
55
|
+
"section": "header" | "body" | "footer",
|
|
56
|
+
"configs": [ {"id": "<guid>", "key": "label", "value": "CNP"}, … ]
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- **`section`** decides where in the shell it renders. `heading` defaults to
|
|
61
|
+
`header`, `button` to `footer`, everything else to `body`.
|
|
62
|
+
- **`type`** must be one of the known control types. The full list is the file
|
|
63
|
+
names in `dto/form/elements/*.json`:
|
|
64
|
+
|
|
65
|
+
`approval, assignee, button, chart, chat, checkbox, column, columns,
|
|
66
|
+
datetime-input, divider, dropdown, dynamic-table-row, file-upload, file-viewer,
|
|
67
|
+
heading, icon, image, input, list, number-input, paragraph, radiobox, section,
|
|
68
|
+
select, side-panel, signature-pad, static-table-row, step, stepper, tab, table,
|
|
69
|
+
tabs, textarea`
|
|
70
|
+
|
|
71
|
+
Each of those `.json` files is a **captured golden**: a real element of that type
|
|
72
|
+
with every config present and valid. Building a new element = clone the golden,
|
|
73
|
+
assign fresh ids, override the semantic configs. Never hand-author an element
|
|
74
|
+
from scratch — you will omit a config the renderer silently depends on.
|
|
75
|
+
|
|
76
|
+
### Layout containers
|
|
77
|
+
|
|
78
|
+
`columns` → `column` → controls. A `stepper` contains `step` elements; each `step`
|
|
79
|
+
contains the controls of that step. `section`, `tabs`/`tab`, `table` +
|
|
80
|
+
`static-table-row`/`dynamic-table-row` follow the same parent/child pattern.
|
|
81
|
+
|
|
82
|
+
## 4. `configs` — where all the meaning lives
|
|
83
|
+
|
|
84
|
+
A config is `{id, key, value}` (some carry `category`). The keys you will actually
|
|
85
|
+
set:
|
|
86
|
+
|
|
87
|
+
| Group | Keys |
|
|
88
|
+
|---|---|
|
|
89
|
+
| identity | `name`, `id`, `label`, `placeholder`, `tooltip`, `info-text` |
|
|
90
|
+
| behaviour | `required`, `readonly`, `visible`, `regex`, `defaultValue`, `min`, `max` |
|
|
91
|
+
| control-specific | `rows`, `mode`, `multiple`, `searchable`, `clearable`, `hasNow`, `maxFileSize`, `canAdd`, `canRemove`, `addText`, `variation`, `outlined` |
|
|
92
|
+
| options | `sourceType` (`static-list` \| `JSON` \| `URL`) + `sourceValue` |
|
|
93
|
+
| media/link | `src`, `url`, `alt`, `title`, `width`, `height`, `linkUrl` |
|
|
94
|
+
| submit | `submit`, `disabledIfFormIsInvalid` |
|
|
95
|
+
| tasks | `assignee`, `assigneeReplacement`, `approver`, `approverReplacement` |
|
|
96
|
+
| **value** | `value` — the live field value (see §5) |
|
|
97
|
+
| **styling** | `style` — a `CSSProperty[]`, per-element CSS variables |
|
|
98
|
+
| **events** | `on…Events` — see §6 |
|
|
99
|
+
|
|
100
|
+
### The `style` config (per-element styling)
|
|
101
|
+
|
|
102
|
+
`{key: "style", category: "styling", value: CSSProperty[]}` where each property is
|
|
103
|
+
`{label, value, cssVariable, type, enabled}`. The runtime applies **only**
|
|
104
|
+
`enabled: true` entries.
|
|
105
|
+
|
|
106
|
+
- Valid variables for a type = that type's CSS group in the theme (the first theme
|
|
107
|
+
group whose `types` include the element type — so input / number / datetime /
|
|
108
|
+
textarea / select all share the **Input** group).
|
|
109
|
+
- For `type == "css-variable-select"` (colours) pass a **theme variable**
|
|
110
|
+
(`--c-neutral--50`), not a hex: the runtime emits `var(<value>)`. Plain variables
|
|
111
|
+
(heights, paddings) take raw values.
|
|
112
|
+
- Non-stylable types (heading, paragraph, divider, image…) have no style group.
|
|
113
|
+
|
|
114
|
+
### `visible` is NOT a hide
|
|
115
|
+
|
|
116
|
+
`Element.component.vue` renders under `v-if`. Setting `visible: false` **removes
|
|
117
|
+
the node from the DOM** — it is not hidden, it is destroyed. Consequences run
|
|
118
|
+
through this whole guide: entrance animations re-fire on every step change (good),
|
|
119
|
+
exit transitions are impossible (the node is already gone), and any state you
|
|
120
|
+
attach to a node must be recomputed rather than remembered.
|
|
121
|
+
|
|
122
|
+
## 5. The data model mirror, and value paths
|
|
123
|
+
|
|
124
|
+
Every control is backed by a data-model attribute. The structure is three levels:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
root "form" id = formId
|
|
128
|
+
└── "fields" id = 11223344-5566-7788-99aa-aabbccddeeff (CONSTANT across all forms)
|
|
129
|
+
└── <element> id = elementId
|
|
130
|
+
└── attrs one per config, INCLUDING `value`
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
A process addresses a form field by the full path:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
{dmRootId}.{FIELDS_NS}.{elementId}.{valueConfigId}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Two id rules that are not optional**, both verified against real production
|
|
140
|
+
forms:
|
|
141
|
+
|
|
142
|
+
1. The value segment must be the element's **own `value` config id** — not a fresh
|
|
143
|
+
guid. With a fresh id the process-designer's "Form variable" selector shows
|
|
144
|
+
`Unknown`.
|
|
145
|
+
2. Every data-model attribute id must equal the element's **config id for that
|
|
146
|
+
key**. Measured on a real form: 15/16 attributes resolved with reused ids,
|
|
147
|
+
0/16 with fresh ones.
|
|
148
|
+
|
|
149
|
+
Get this wrong and nothing errors — the designer just renders raw guids and values
|
|
150
|
+
never flow.
|
|
151
|
+
|
|
152
|
+
## 6. Events on an element
|
|
153
|
+
|
|
154
|
+
Each trigger has its own config key whose value is `{debounce, events: [...]}`:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{"key": "onInputEvents",
|
|
158
|
+
"value": {"debounce": 0,
|
|
159
|
+
"events": [{"id": "<guid>", "type": "INPUT",
|
|
160
|
+
"action": "RUN_PROCESS", "config": { … }}]}}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**A fresh element carries the key with a `null` value.** That is what "no handler"
|
|
164
|
+
looks like — it is not an error and not a missing field.
|
|
165
|
+
|
|
166
|
+
### Trigger → config key → event type
|
|
167
|
+
|
|
168
|
+
| `on` | config key | `type` |
|
|
169
|
+
|---|---|---|
|
|
170
|
+
| click | `onClickEvents` | `CLICK` |
|
|
171
|
+
| input / change | `onInputEvents` | `INPUT` |
|
|
172
|
+
| focus / blur / hover | `onFocusEvents` / `onBlurEvents` / `onHoverEvents` | `FOCUS` / `BLUR` / `HOVER` |
|
|
173
|
+
| ready | `onReadyEvents` | `READY` |
|
|
174
|
+
| open / close | `onOpenEvents` / `onCloseEvents` | `SIDE_PANEL_OPEN` / `SIDE_PANEL_CLOSE` |
|
|
175
|
+
| tabchange | `onTabChangeEvents` | `TAB_CHANGE` |
|
|
176
|
+
| rowadded / rowdeleted | `onTableRowAddedEvents` / `onTableRowDeletedEvents` | `TABLE_ROW_ADDED` / `TABLE_ROW_DELETED` |
|
|
177
|
+
| paginated | `onPaginationChangedEvents` | `TABLE_PAGINATED` |
|
|
178
|
+
| stepchange | `onStepChangeEvents` | `STEPPER_STEP_CHANGE` |
|
|
179
|
+
| nextstep / previousstep | `onNextStepEvents` / `onPreviousStepEvents` | `STEPPER_NEXT_STEP` / `STEPPER_PREVIOUS_STEP` |
|
|
180
|
+
| beforeapprove / afterapprove | `onBeforeApproveEvents` / `onAfterApproveEvents` | `BEFORE_APPROVE` / `AFTER_APPROVE` |
|
|
181
|
+
| beforereject / afterreject | `onBeforeRejectEvents` / `onAfterRejectEvents` | `BEFORE_REJECT` / `AFTER_REJECT` |
|
|
182
|
+
| beforeapprovalsubmit / afterapprovalsubmit | `onBeforeApprovalSubmitEvents` / `onAfterApprovalSubmitEvents` | `BEFORE_APPROVE_OR_REJECT` / `AFTER_APPROVE_OR_REJECT` |
|
|
183
|
+
| messagesfetch / messagesent | `onMessagesFetchEvents` / `onMessageSentEvents` | `CHAT_MESSAGES_FETCH` / `CHAT_MESSAGE_SENT` |
|
|
184
|
+
|
|
185
|
+
Source of truth: `dto/form/builder.py::_EVENT_KEY` / `_EVENT_TYPE`, verified against
|
|
186
|
+
the renderer's `trigger.ts` `TriggerKey` enum and `FieldEvents.component.vue`.
|
|
187
|
+
**Never re-derive this table in new code** — import the builder's maps, as
|
|
188
|
+
`handlers/form_events.py` does. A wrong event type is silently accepted by the API
|
|
189
|
+
and simply never fires.
|
|
190
|
+
|
|
191
|
+
### Event actions
|
|
192
|
+
|
|
193
|
+
| `action` | config |
|
|
194
|
+
|---|---|
|
|
195
|
+
| `RUN_JAVASCRIPT` | `{code: "<js source, plaintext>"}` |
|
|
196
|
+
| `RUN_PROCESS` | `{processId, inputMap[], outputMap[], syncRun}` — see [06](06-PROCESS-INTEGRATION.md) |
|
|
197
|
+
| `MAP_FORM_DATA` | `{mapping: [{id, left, right}]}` |
|
|
198
|
+
| `TRIGGER_FORM` | `{formId, mapping: [...]}` |
|
|
199
|
+
|
|
200
|
+
## 7. Where the four styling surfaces live
|
|
201
|
+
|
|
202
|
+
| Surface | Scope | Where |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| Theme | whole form, by control type | `Data.theme` — ~190 CSS variables |
|
|
205
|
+
| Per-element style | one control | that element's `style` config |
|
|
206
|
+
| Element event JS | one control, one trigger | that element's `on…Events` config (**plaintext**) |
|
|
207
|
+
| Form-level CSS + JS | whole form | `Data.code` (**encrypted**) |
|
|
208
|
+
|
|
209
|
+
The last one is where all serious work happens; the rest of this guide is about it.
|