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,230 @@
|
|
|
1
|
+
# Process-building patterns (generalized)
|
|
2
|
+
|
|
3
|
+
These patterns were distilled from a production PROCESIO workspace (form-driven request intake,
|
|
4
|
+
agent review, multi-party e-signing). They contain no client-specific values. Each entry gives the
|
|
5
|
+
pattern, the problem, the mechanics, when to use it and its pitfalls. **Refines** marks an entry that
|
|
6
|
+
sharpens or corrects a rule in `agents/procesio/PROCESIO-BEST-PRACTICES.md` (BP) or
|
|
7
|
+
`PROCESIO-BUILD-AND-TEST-PLAYBOOK.md` (PB).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## P1. Dual outcome flags for form bindings (`e_ok` + `e_not_ok`)
|
|
12
|
+
- **Problem:** a form output binding cannot negate a boolean, yet a result usually has to show one
|
|
13
|
+
element and hide another.
|
|
14
|
+
- **Mechanics:** declare two Boolean outputs with pessimistic defaults (`e_ok=false`,
|
|
15
|
+
`e_not_ok=true`). One Map Data at the very end of the happy path flips both. The form binds
|
|
16
|
+
`successPanel.visible ← e_ok` and `inputPanel.visible ← e_not_ok`. Any early exit (error port, empty
|
|
17
|
+
guard) leaves the defaults, so the UI shows the "not ok" state automatically.
|
|
18
|
+
- **When:** every process a form calls to decide visibility.
|
|
19
|
+
- **Pitfalls:** optimistic defaults (`e_ok=true`) turn every crash into a false success. Keep one
|
|
20
|
+
casing for boolean literals (`true`, not `True`). Inside JSON results, don't switch the name to
|
|
21
|
+
`e_notOk`.
|
|
22
|
+
- **Refines BP §9 / §5:** this is the cheapest way to surface failure to the user without extra calls.
|
|
23
|
+
|
|
24
|
+
## P2. Render display blocks server-side as one inline-styled HTML string
|
|
25
|
+
- **Problem:** status cards, dashboards, receipts and error banners need rich layout, but forms only
|
|
26
|
+
bind scalars.
|
|
27
|
+
- **Mechanics:** a Node builds one root `<div>` with **inline styles only** (no `<style>`, no classes,
|
|
28
|
+
no JS), SVG icons inline, a palette constant object and `escapeHtml` on every value, then
|
|
29
|
+
`return html`. Bind it to `Paragraph.label`. For static messages a Map Data literal is enough.
|
|
30
|
+
- **When:** any read-only visual summary. The same builder can feed Generate Document for a PDF.
|
|
31
|
+
- **Pitfalls:** for HTML→PDF use tables + SVG, not flex/grid. Escape `'` too (`'`) so the HTML
|
|
32
|
+
can later be stored through an `N'…'` SQL literal. Never let the node return null: render the error
|
|
33
|
+
into the HTML instead.
|
|
34
|
+
|
|
35
|
+
## P3. Selector feeds as `{label, value}` lists
|
|
36
|
+
- **Problem:** select and dropdown controls need `sourceValue` in a fixed shape. DB rows don't have
|
|
37
|
+
that shape.
|
|
38
|
+
- **Mechanics:** one query per list, then one Node:
|
|
39
|
+
`(Array.isArray(rows)?rows:[]).map(r=>({label:r.X, value:r.X}))`. Put all lists for one form step
|
|
40
|
+
in **one** "render" process that returns every list plus the classification flags, so a single
|
|
41
|
+
click fills the whole step.
|
|
42
|
+
- **When:** any form step with more than one data-driven selector.
|
|
43
|
+
- **Pitfalls:** one Node per list is copy-paste. Write one Node that maps a dictionary of result
|
|
44
|
+
lists, or one SQL that returns every list as a JSON column. That also meets BP §10 (fewer actions).
|
|
45
|
+
|
|
46
|
+
## P4. Whole-form-in, SPEC-driven reshaping server-side
|
|
47
|
+
- **Problem:** form element names change between form versions (`SelectN` / `InputN`, renamed ids).
|
|
48
|
+
Mapping in the form is brittle and spread across many places.
|
|
49
|
+
- **Mechanics:** pass the whole form instance (`instance / flow / fields`) as one JSON input. A single
|
|
50
|
+
Node holds a declarative SPEC object (`target.path: "Element.value"`) plus directives for the hard
|
|
51
|
+
cases:
|
|
52
|
+
- first available source among renamed elements
|
|
53
|
+
- repeating rows
|
|
54
|
+
- a value taken from the active branch of a cascading selector
|
|
55
|
+
- a value derived from section visibility
|
|
56
|
+
|
|
57
|
+
It also records `warnings[]`, a `SCRIPT_VERSION` marker, and `e_ok/errorMessage` inside a
|
|
58
|
+
try/catch.
|
|
59
|
+
- **When:** any form with more than about 20 fields that feeds a DB or document.
|
|
60
|
+
- **Pitfalls:**
|
|
61
|
+
- Keep exactly one copy of the engine (a Utils process). Forking it per flow produces divergent
|
|
62
|
+
versions.
|
|
63
|
+
- An automatic `SelectN`↔`InputN` fallback must be disabled where the twin id exists with a
|
|
64
|
+
different meaning.
|
|
65
|
+
- Inactive branches keep stale values, so read only from the branch the controlling selector
|
|
66
|
+
points to.
|
|
67
|
+
|
|
68
|
+
## P5. Server-owned identity: overwrite the client-supplied key
|
|
69
|
+
- **Problem:** a form can send any id. The primary key must come from the server.
|
|
70
|
+
- **Mechanics:** right after reshaping, run Generate GUID **into the id attribute of the form object**
|
|
71
|
+
(Generate GUID can target an attribute path), then persist.
|
|
72
|
+
- **When:** every create/submit from a public or guest form.
|
|
73
|
+
- **Pitfalls:** return the generated id to the form (receipt number) so later steps (signature, file
|
|
74
|
+
uploads) are keyed to the same record.
|
|
75
|
+
|
|
76
|
+
## P6. Validate in the stored procedure, persist the messages, then Throw
|
|
77
|
+
- **Problem:** business validation spread across Decisionals is slow and hard to keep in sync with
|
|
78
|
+
the DB.
|
|
79
|
+
- **Mechanics:** a single `EXEC <schema>.usp_…_Save @json` validates and writes in one transaction and
|
|
80
|
+
returns a status row: `e_ok`, the generated ids, and one row per validation message on failure. The
|
|
81
|
+
process branches on `e_ok`:
|
|
82
|
+
- failure: For Each message → insert into a validation-log table keyed by the request id →
|
|
83
|
+
`Throw` with a short message
|
|
84
|
+
- success: continue with side effects (files, documents, notifications)
|
|
85
|
+
- **When:** multi-table inserts from one form submit.
|
|
86
|
+
- **Pitfalls:**
|
|
87
|
+
- The SP commit is not atomic with the later side effects, so design for resume and make the
|
|
88
|
+
submit idempotent (dedupe key).
|
|
89
|
+
- Ids for branches that don't apply come back as the all-zero GUID. Branch on "non-empty AND not
|
|
90
|
+
the zero GUID".
|
|
91
|
+
- **Refines BP §2 (idempotency) and §8.**
|
|
92
|
+
|
|
93
|
+
## P7. SQL values: bind, or at minimum escape in a Node first
|
|
94
|
+
- **Problem:** Execute Query text with `'{{var}}'` breaks on the first apostrophe in a name and is
|
|
95
|
+
injectable. It is worst when the value comes from a URL parameter.
|
|
96
|
+
- **Mechanics:**
|
|
97
|
+
- Preferred (BP §8): parameter binding.
|
|
98
|
+
- If a whole JSON object must be passed as one string, run a Node first:
|
|
99
|
+
`return { json_sql: JSON.stringify(obj).replace(/'/g,"''") }` and inject that into `N'…'`.
|
|
100
|
+
- Validate tokens and ids taken from URLs as GUIDs before they reach SQL.
|
|
101
|
+
- **When:** always.
|
|
102
|
+
- **Pitfalls:** escaping is easy to forget on the next process that copies the pattern (seen: one
|
|
103
|
+
submit path escaped, its sibling did not). Treat an unbound interpolation of user input as a defect
|
|
104
|
+
in review.
|
|
105
|
+
- **Refines BP §8:** adds the JSON-payload-to-SP case and the "URL-sourced value" severity.
|
|
106
|
+
|
|
107
|
+
## P8. Guarded state transitions, then notify
|
|
108
|
+
- **Problem:** "accept" or "deny" buttons can be clicked twice or on stale data.
|
|
109
|
+
- **Mechanics:** `UPDATE … SET status='<next>' WHERE id=@id AND status='<expected>'`, check the
|
|
110
|
+
affected rows (or re-select), and only then send the e-mail. Flip `e_ok` only on a real transition.
|
|
111
|
+
- **When:** every workflow status change.
|
|
112
|
+
- **Pitfalls:** e-mailing before the guarded update notifies the customer about a transition that
|
|
113
|
+
never happened. A disabled status-update node leaves the item in the queue while the customer
|
|
114
|
+
believes it is closed. Keep status names in one place (lookup table or constants), not as literals
|
|
115
|
+
in every query.
|
|
116
|
+
|
|
117
|
+
## P9. One click, one orchestrating process
|
|
118
|
+
- **Problem:** attaching several async RUN_PROCESS actions to one button causes races (a later status
|
|
119
|
+
overwritten by an earlier one, a refresh that reads before the writes).
|
|
120
|
+
- **Mechanics:** one process runs the steps in order (update → notify → re-read) and returns
|
|
121
|
+
everything the form needs. Use **Trigger Subprocess** only for side effects the user must not wait
|
|
122
|
+
for (e.g. notifying staff).
|
|
123
|
+
- **When:** any button whose steps depend on each other.
|
|
124
|
+
- **Pitfalls:** fire-and-forget hides failures. Log or flag them somewhere readable.
|
|
125
|
+
- **Refines BP §9:** parallel async calls feel fast but are only safe when independent.
|
|
126
|
+
|
|
127
|
+
## P10. Tokenised signer links through hash-routed form URLs
|
|
128
|
+
- **Problem:** external signers need a personal link to one form page with their context.
|
|
129
|
+
- **Mechanics:**
|
|
130
|
+
- One shared request id plus a unique per-signer token column.
|
|
131
|
+
- Link = `https://<forms-host>/forms/<formId>#<pageId>?req_id=<token>`. The parameter sits **after
|
|
132
|
+
the `#`** because the form uses hash routing.
|
|
133
|
+
- Page load calls a "verify token" process: look up by token → documents + flags.
|
|
134
|
+
- Signing calls a "sign by token" process: store the signature, `status='signed'`.
|
|
135
|
+
- Status lifecycle: created → sent → signed → submitted (countersign).
|
|
136
|
+
- **When:** multi-party approval or signature without accounts.
|
|
137
|
+
- **Pitfalls:**
|
|
138
|
+
- The token is a bearer credential. Give it an expiry and one-time use, and never put it into SQL
|
|
139
|
+
unbound.
|
|
140
|
+
- Build the base URL from one setting. A literal copied into several e-mail templates and code
|
|
141
|
+
nodes drifts when the form is republished.
|
|
142
|
+
- **Refines BP "pre-fill controls from URL query params":** the hash-routing placement and the
|
|
143
|
+
security caveats.
|
|
144
|
+
|
|
145
|
+
## P11. Business-day windows computed in code, with the calendar in Python
|
|
146
|
+
- **Problem:** a date picker must allow only dates that give staff N working days, bounded by the
|
|
147
|
+
validity of the current offer period.
|
|
148
|
+
- **Mechanics:**
|
|
149
|
+
- Python (has `zoneinfo`, `calendar`) prints the month's days
|
|
150
|
+
`{zi, data, ziuaSaptamanii, esteWeekend}` for the current and the target month.
|
|
151
|
+
- A Node merges both calendars into one sorted timeline keyed by date, counts the Nth working day
|
|
152
|
+
strictly after today, and returns `YYYY-MM-DDT00:00:00Z` or `""` when it falls past the period
|
|
153
|
+
end.
|
|
154
|
+
- The form binds min, max and default of the date input. An empty result swaps in an HTML "period
|
|
155
|
+
closed" banner (P2).
|
|
156
|
+
- **When:** any "earliest allowed date" rule.
|
|
157
|
+
- **Pitfalls:**
|
|
158
|
+
- Use the business's real timezone id.
|
|
159
|
+
- Include public holidays, not just weekends.
|
|
160
|
+
- Compare dates as `YYYY-MM-DD` strings or regex parts, not `new Date()` local getters (they shift
|
|
161
|
+
around midnight UTC).
|
|
162
|
+
- Put N and the timezone in one setting.
|
|
163
|
+
|
|
164
|
+
## P12. Python action output is always `{"result": …}`
|
|
165
|
+
- **Problem:** a Python action's `print(x)` arrives as `{"result": "<x as string>"}`, sometimes
|
|
166
|
+
double-encoded.
|
|
167
|
+
- **Mechanics:** in the consuming Node, unwrap repeatedly: if string → `JSON.parse`; if object with
|
|
168
|
+
`result` → take `.result`; stop after about 5 levels. Or read `result` with Extract Objects when the
|
|
169
|
+
value is flat.
|
|
170
|
+
- **When:** every Python → JS hand-off.
|
|
171
|
+
- **Pitfalls:** interpolate strings into Python inside quotes (`'''{{v}}'''`). The value is injected
|
|
172
|
+
raw.
|
|
173
|
+
|
|
174
|
+
## P13. Same script offline and in the platform
|
|
175
|
+
- **Problem:** big code nodes (renderers, parsers) are hard to debug inside the designer.
|
|
176
|
+
- **Mechanics:** write the node as a standalone file with a `LOCAL: node preview.js payload.json`
|
|
177
|
+
header. Treat an unreplaced placeholder (`/^<%[^%]*%>$/`) as empty, so the same text runs with
|
|
178
|
+
sample JSON locally and with bound variables in PROCESIO. Add a `SCRIPT_VERSION` constant to the
|
|
179
|
+
output.
|
|
180
|
+
- **When:** any node over about 100 lines.
|
|
181
|
+
- **Pitfalls:** placeholder-tolerance also hides a variable that was **never bound** (a literal
|
|
182
|
+
`<%name%>` left in the pasted code). After pasting, check that every placeholder became a bound
|
|
183
|
+
variable.
|
|
184
|
+
|
|
185
|
+
## P14. Layout-tolerant spreadsheet parsing by label
|
|
186
|
+
- **Problem:** tariff or price sheets from third parties move rows and columns between editions.
|
|
187
|
+
- **Mechanics:**
|
|
188
|
+
- Read Range a generous block.
|
|
189
|
+
- A Node converts whatever shape comes back into a 2-D grid (array of arrays, row objects keyed by
|
|
190
|
+
letter or number, or a wrapper object).
|
|
191
|
+
- Locate blocks by label prefix (`findCell(grid,"total taxe")`) and read the values to the right.
|
|
192
|
+
- Parse numbers tolerantly (`"35,34 (note)"` → `35.34` + note).
|
|
193
|
+
- Emit a clean JSON document and pass it to one import SP.
|
|
194
|
+
- **When:** any inbound Excel from outside your control, especially via webhook.
|
|
195
|
+
- **Pitfalls:** keep the Read Range bounds and the comments in sync, or let the parser find the used
|
|
196
|
+
range. Protect the webhook with a header key that is compared to a value stored outside the process.
|
|
197
|
+
|
|
198
|
+
## P15. File-to-PDF normaliser via template placeholder swap
|
|
199
|
+
- **Problem:** uploads arrive as PDF or image, and downstream needs a PDF.
|
|
200
|
+
- **Mechanics:** if the MIME type is already `application/pdf`, pass it through. Otherwise:
|
|
201
|
+
File To Base64 → render an HTML template containing a placeholder base64 image to an HTML string →
|
|
202
|
+
Replace the placeholder base64 with the upload's base64 → Generate Document from that HTML.
|
|
203
|
+
- **When:** ID cards, invoices, any user-uploaded proof.
|
|
204
|
+
- **Pitfalls:** non-image, non-PDF files (docx, heic) produce a broken image, so whitelist the MIME
|
|
205
|
+
types. Very large base64 values vanish when injected into Node code (BP field learning 3), which is
|
|
206
|
+
why the swap happens in Replace, not in JS.
|
|
207
|
+
|
|
208
|
+
## P16. Shared-library hygiene for Utils
|
|
209
|
+
- **Problem:** helpers get copy-pasted into node after node: label/value mapper, first-row field
|
|
210
|
+
extractor, date formatter, HTML helpers, e-mail shell, entity load chain.
|
|
211
|
+
- **Mechanics:** anything pasted twice becomes a `Utils/ …` process with a typed contract, or one
|
|
212
|
+
multi-purpose Node that takes a dictionary of inputs. An identical load chain in three processes
|
|
213
|
+
becomes one "load aggregate by id" subprocess. Company contact and legal blocks, URLs, timezones and
|
|
214
|
+
lead times come from a single settings source.
|
|
215
|
+
- **When:** at the second copy.
|
|
216
|
+
- **Pitfalls:**
|
|
217
|
+
- Destructive admin utilities (bulk DELETE) do not belong in the production library.
|
|
218
|
+
- Empty stubs and disabled nodes should be deleted before handover.
|
|
219
|
+
- Two processes with the same title make subprocess binding ambiguous. Titles must be unique.
|
|
220
|
+
- **Refines BP §2 "Centralize parameters" / "Modularize"** with concrete extraction triggers.
|
|
221
|
+
|
|
222
|
+
## P17. Every Decisional needs a Default that reports
|
|
223
|
+
- **Problem:** a Decisional with only positive cases dead-ends when no case matches. The run ends
|
|
224
|
+
with default outputs and the form cannot tell "no data" from "broken".
|
|
225
|
+
- **Mechanics:** always wire a Default to a Map Data that sets `e_not_ok` plus a readable error
|
|
226
|
+
(text or HTML banner), then route it to the common Join and the single Stop.
|
|
227
|
+
- **When:** every Decisional, especially classifiers (type A/B, energy X/Y, accept/deny).
|
|
228
|
+
- **Pitfalls:** error-port branches that go straight to a bare Stop have the same problem. Prefer
|
|
229
|
+
"set error → Join → Stop".
|
|
230
|
+
- **Refines BP §5.**
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# Form patterns: generalized techniques (PROCESIO forms ↔ processes)
|
|
2
|
+
|
|
3
|
+
These patterns were distilled from a production multi-step form workspace. Only reusable mechanics
|
|
4
|
+
are kept here: no client, id or business value. Each pattern says how it relates to
|
|
5
|
+
`tools/procesio/FORM-DEV-GUIDE/`: **NEW** (not covered), **REFINES** (adds to or corrects a
|
|
6
|
+
section) or **CONFIRMS+** (covered, plus a field-tested detail).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## P1. Hidden status field as a JS → no-code bridge — NEW
|
|
11
|
+
- **Problem.** Validation logic lives in JavaScript, but the reaction (show a button, lock fields,
|
|
12
|
+
reveal a step) is easiest to express as MAP_FORM_DATA conditions. A JS block cannot stop or steer
|
|
13
|
+
the rest of an event chain.
|
|
14
|
+
- **Mechanics.** Add a number-input per step (`validation-of-<step>`) and hide it with CSS
|
|
15
|
+
(`display:none` on the control and, through `:has()`, on its wrapper). The JS block, placed before
|
|
16
|
+
the MAP blocks in the same click chain, computes pass or fail and writes `"1"` / `"0"` using the
|
|
17
|
+
**native value setter** (`Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set.call(input, v)`)
|
|
18
|
+
followed by `input`, `change` and `blur` events. The native setter plus events is what makes Vue's
|
|
19
|
+
`v-model` take the value. The next events are `MAP_FORM_DATA when validation-of-<step>.value EQUALS 1`
|
|
20
|
+
(success actions) and `EQUALS 0` (failure actions).
|
|
21
|
+
- **When.** Any rule too complex for MAP conditions (regex sets, cross-field rules, repeated rows)
|
|
22
|
+
whose outcome should drive no-code visibility or locking.
|
|
23
|
+
- **Pitfalls.**
|
|
24
|
+
- **A MAP in the SAME chain as the JS never sees the flag it just wrote** (verified live): input
|
|
25
|
+
values reach the model after a 500 ms debounce, so the first click always reads the old value
|
|
26
|
+
and users learn to click twice. Read the flag from a LATER chain, through the trigger field of
|
|
27
|
+
P2 (FORM-DEV-GUIDE 04 §16), never from the button's own chain.
|
|
28
|
+
- The field must be *rendered* for JS to find it, so hide it with CSS, not `visible=false` (a
|
|
29
|
+
hidden element is not in the DOM).
|
|
30
|
+
- Also re-check silently on later edits and reset the flag to 0, or a user can pass, edit and still
|
|
31
|
+
confirm.
|
|
32
|
+
- Make a "Modify" action reset the flag through MAP as well.
|
|
33
|
+
|
|
34
|
+
## P2. Forward-only step unlocking: one-click Validate + Modify — NEW (supersedes the triad)
|
|
35
|
+
- **Current form (build new steps this way).** One **Validate** button per step. Its chain runs the
|
|
36
|
+
validator, then asks a global runtime to write the button's branch into a hidden
|
|
37
|
+
`step-flow-branch` field and increment a hidden `step-flow-trigger` field. That field's own
|
|
38
|
+
`onInput` chain holds one MAP per step and branch on `flag == 1 AND branch == <its branch>`:
|
|
39
|
+
lock the step, hide Validate, show **Modify**, reveal the next step. Its last JS block clicks
|
|
40
|
+
Next. The branch comes from the clicked button, never from a Boolean form variable (P3). **Modify**
|
|
41
|
+
unlocks the step, resets its flag, hides every later step and resets them to their first-pass
|
|
42
|
+
state. Measured at about 0.8 s from click to the next step. Recipe, rules and the renderer facts
|
|
43
|
+
behind it: FORM-DEV-GUIDE 04 §16. Wiring: `procesio form-set-element-chains`.
|
|
44
|
+
- **Legacy form (what production forms were built with).** The triad below needs three clicks per
|
|
45
|
+
step (validate twice because of the P1 pitfall, then confirm). Migrate it rather than copy it.
|
|
46
|
+
- **Problem.** The native stepper lets users move freely, and a step's data should be final before
|
|
47
|
+
the next step unlocks.
|
|
48
|
+
- **Mechanics (legacy triad).**
|
|
49
|
+
- Every step after the first is `visible=false` in the designer.
|
|
50
|
+
- Each step ends with three buttons: **Validate** (visible), **Modify** and **Confirm** (hidden).
|
|
51
|
+
- When Validate passes (P1): MAP sets `disabled=true` on every field of the step and shows Modify
|
|
52
|
+
and Confirm.
|
|
53
|
+
- Modify: re-enables the fields, resets the flag, hides Confirm.
|
|
54
|
+
- Confirm: `MAP set <next-step>.visible = true`, then a JS block clicks the stepper's own Next
|
|
55
|
+
(`.form-builder--stepper--buttons--next button`).
|
|
56
|
+
- The first step can be unlocked by a process instead (for example a "compute allowed date range"
|
|
57
|
+
process returns `e_ok` → `<step>.visible`).
|
|
58
|
+
- **When.** Long regulated forms: KYC, contracts, onboarding.
|
|
59
|
+
- **Pitfalls.**
|
|
60
|
+
- The lock and unlock field lists are hand-maintained in two MAP blocks. Generate or diff them,
|
|
61
|
+
because copy-paste slips (a field locked twice, another never locked, Modify hiding the wrong
|
|
62
|
+
button) are the typical bug.
|
|
63
|
+
- The programmatic Next still passes through any capture-phase Next guard (P6), which is
|
|
64
|
+
intentional.
|
|
65
|
+
|
|
66
|
+
## P3. Server-side "render" process drives visibility and options — NEW
|
|
67
|
+
- **Problem.** Which blocks, selects and validate buttons appear depends on a few configuration
|
|
68
|
+
choices (applicant type × product type × date), and option lists are master data.
|
|
69
|
+
- **Mechanics.** One process takes the configuration selects and returns primitive Booleans
|
|
70
|
+
(`isA`, `isB`…) plus JSON option lists. The outputMap fans **one Boolean out to many targets**:
|
|
71
|
+
a form variable (for later conditions), `visible` of each block, and `visible` of that branch's
|
|
72
|
+
Validate button. Each option list goes to a select's `sourceValue`, and one list can feed several
|
|
73
|
+
selects.
|
|
74
|
+
- **When.** More than two or three configuration axes, or options that must stay in sync with a DB.
|
|
75
|
+
- **Pitfalls.**
|
|
76
|
+
- **Never test these Boolean variables with `IS_TRUE` / `IS_FALSE`.** The designer default is the
|
|
77
|
+
TEXT "False"/"false", and a condition reads any non-empty text as true (measured live). Until
|
|
78
|
+
the process result lands, every `isX IS_TRUE` passes, so exclusive branches all run. Give the
|
|
79
|
+
variables a `null` default, or branch with `EQUALS` on the source select. `formlint` flags it.
|
|
80
|
+
- If later events in the **same** chain read the form variables this process writes, the process
|
|
81
|
+
must be `syncRun:true`, or they read the previous values (see P13).
|
|
82
|
+
- Feed downstream processes from the source selects, not from the derived variables.
|
|
83
|
+
|
|
84
|
+
## P4. Outcome flag pair (`e_ok` / `e_not_ok`) → screen swap — NEW
|
|
85
|
+
- **Problem.** Show a result screen or keep the input screen after an action, without JS.
|
|
86
|
+
- **Mechanics.** Every action process declares two Boolean outputs, `e_ok` (default **false**) and
|
|
87
|
+
`e_not_ok` (default **true**), and sets them at the end. The outputMap writes `e_ok` → `visible` of
|
|
88
|
+
the success section and `e_not_ok` → `visible` of the input section or stepper (or of a "retry"
|
|
89
|
+
button).
|
|
90
|
+
- **When.** Any submit, accept or deny, or sign action.
|
|
91
|
+
- **Pitfalls.**
|
|
92
|
+
- Keep the defaults pessimistic. A process that stops early then leaves the form on the input
|
|
93
|
+
screen instead of showing a false success.
|
|
94
|
+
- Keep one spelling across the workspace (`e_not_ok`, not `e_noOk` / `e_notOk`), or outputMaps
|
|
95
|
+
silently target nothing.
|
|
96
|
+
- Never map a Boolean into a file or value slot.
|
|
97
|
+
|
|
98
|
+
## P5. Cross-step value store read from the Vue model — REFINES 02 §7 / 04 §1
|
|
99
|
+
- **Problem.** The renderer destroys other steps' controls (`v-if`), so client-side validation or a
|
|
100
|
+
semantic payload spanning steps cannot read their DOM. `ProcesioForm.data.fields` is incomplete
|
|
101
|
+
for some props (08 "info-text").
|
|
102
|
+
- **Mechanics.** Walk the Vue 3 vnode tree from every element carrying `_vnode`
|
|
103
|
+
(`vnode.component` → `component.subTree` → `children`, depth-capped). For each component with
|
|
104
|
+
`props.modelValue`, match it to a field wrapper by DOM containment (`wrap === el ||
|
|
105
|
+
wrap.contains(el)`). For each id in an explicit `FIELD_IDS` list, store the model value when the
|
|
106
|
+
field is rendered (even when it is empty, since the model is the truth) and keep the last known
|
|
107
|
+
value when it is not. Fall back to the DOM value (`checked` for checkboxes). Refresh on a debounced
|
|
108
|
+
capture listener (`input/change/click/focusout`) and on every `get()`. Expose
|
|
109
|
+
`get()/json()/values` on `window.parent`.
|
|
110
|
+
- **When.** Multi-step forms whose validation or payload needs values from earlier steps.
|
|
111
|
+
- **Pitfalls.**
|
|
112
|
+
- `FIELD_IDS` must be the **union** of all steps and **identical** wherever the script is attached.
|
|
113
|
+
With two copies at the same version and different lists, the first installed wins and later
|
|
114
|
+
fields are never collected.
|
|
115
|
+
- Dynamic-table rows repeat ids, so read them separately (P9).
|
|
116
|
+
- Internals (`_vnode`, `modelValue`) are undocumented. Guard every access.
|
|
117
|
+
|
|
118
|
+
## P6. Rules-table client validator with step scoping and a Next click-guard — CONFIRMS+ 04 §7 / §15
|
|
119
|
+
- **Mechanics.**
|
|
120
|
+
- `RULES = { <fieldId>: {required, regex, regexMessage, when(values), optional, date, stripSpaces} }`.
|
|
121
|
+
- Only fields **currently rendered** are validated, which scopes validation per step for free.
|
|
122
|
+
- `when` handles conditional branches (for example document type A vs B).
|
|
123
|
+
- `optional` means "validate the format only if filled". `date:true` means "any parseable date".
|
|
124
|
+
Date values arrive as ISO, display text or Date objects depending on the read path, so a strict
|
|
125
|
+
ISO regex gives false negatives.
|
|
126
|
+
- `stripSpaces` suits bank or ID numbers typed in groups.
|
|
127
|
+
- Treat arrays, selector option objects (`{label/value}`) and file objects (`{id,name}`) as filled
|
|
128
|
+
when they have content. A naive `String(value)` check marks them empty.
|
|
129
|
+
- Errors render under the field, scroll to the first one and clear on edit (only for fields
|
|
130
|
+
already in error, so the user is not scolded at the first keystroke).
|
|
131
|
+
- A document **capture** click listener on the stepper's Next blocks navigation on failure and
|
|
132
|
+
hides any loader.
|
|
133
|
+
- Also expose semantic payload builders whose keys equal the ones the process-side code expects,
|
|
134
|
+
so the client and server share one vocabulary.
|
|
135
|
+
- **Pitfalls.**
|
|
136
|
+
- Port the regexes from the server-side validation and keep them in sync.
|
|
137
|
+
- See P12 for versioning.
|
|
138
|
+
|
|
139
|
+
## P7. Global branded loader API bracketing every process chain — REFINES 05 §5
|
|
140
|
+
- **Problem.** Async processes give no feedback, and chains mix JS, process and MAP events.
|
|
141
|
+
- **Mechanics.**
|
|
142
|
+
- Form-level JS defines `window.parent.__<name>Loader = {show(text,{unsafe,timeout,timeoutMessage}), hide()}`.
|
|
143
|
+
The overlay and style are injected once by id into the parent document.
|
|
144
|
+
- Every chain that triggers a process is bracketed: first event `RUN_JAVASCRIPT show('<message>')`,
|
|
145
|
+
last event `RUN_JAVASCRIPT hide()`, or the navigation block that hides in `finally`.
|
|
146
|
+
- An optional `unsafe` timeout switches the overlay to a warning state and auto-closes it.
|
|
147
|
+
- **When.** Any form whose processes take over a second.
|
|
148
|
+
- **Pitfalls.**
|
|
149
|
+
- `hide()` at the end of a chain whose processes are **async** fires before the result arrives,
|
|
150
|
+
so the loader only covers the launch. Use `syncRun:true` when the loader must cover the work.
|
|
151
|
+
- Every guard that blocks a click must also call `hide()`, or the veil stays up (08 "loader never
|
|
152
|
+
lifts").
|
|
153
|
+
- The element-script `try/catch` around `window.parent.__loader` keeps forms without the loader
|
|
154
|
+
working.
|
|
155
|
+
|
|
156
|
+
## P8. Programmatic Next + multi-point scroll reset — REFINES 04 §14
|
|
157
|
+
- **Mechanics.**
|
|
158
|
+
- Click the stepper's own Next button instead of changing the step index.
|
|
159
|
+
- Then reset scroll on every candidate (parent window, `top`, `document.scrollingElement`, and any
|
|
160
|
+
element with `scrollTop>0 && scrollHeight>clientHeight`) at several delays (≈100/400/900 ms)
|
|
161
|
+
to catch the async re-render.
|
|
162
|
+
- **Skip** the reset when a validation error element exists, because the validator has already
|
|
163
|
+
scrolled to the error.
|
|
164
|
+
- **Pitfalls.** The frame hierarchy decides which element scrolls, which is why every candidate is
|
|
165
|
+
reset.
|
|
166
|
+
|
|
167
|
+
## P9. Repeated-id rows: pick the visible instance, iterate rows by cell order — CONFIRMS+ 04 §15
|
|
168
|
+
- **Mechanics.** Dynamic-table rows repeat the child's DOM id. Use `querySelectorAll('[id="x"]')`
|
|
169
|
+
and keep the instance with `offsetParent!==null || offsetWidth>0`. For per-row work, find the
|
|
170
|
+
enclosing `tr` / `[role=row]` and read the cells in `tableColumnsSourceValue` order. Fall back to
|
|
171
|
+
row text plus regex when the cell count does not match.
|
|
172
|
+
- **Pitfalls.** Keep row inputs out of the scalar collector and validate them per row instance.
|
|
173
|
+
|
|
174
|
+
## P10. Whole-form object → declarative SPEC mapper Node — NEW
|
|
175
|
+
- **Problem.** A final submit needs ~150 fields reshaped into a semantic JSON. Mapping each field to
|
|
176
|
+
a process input is unmaintainable.
|
|
177
|
+
- **Mechanics.**
|
|
178
|
+
- Map the special source `form` into one JSON process input. It carries `fields.<ElementName>…`
|
|
179
|
+
plus `instance.*` / `flow.*`.
|
|
180
|
+
- A reusable subprocess Node holds a SPEC: target keys mapped to source strings like
|
|
181
|
+
`"Input2.value"` or `"FileUpload1.value.id"`, with annotations after " =" or " (" ignored.
|
|
182
|
+
- Directives handle the irregular cases: an array from table rows, "first available of A|B",
|
|
183
|
+
"value of the active sub-select chosen by another select".
|
|
184
|
+
- A guarded fallback (`SelectN` ↔ `InputN`) is used **only when the source is missing**, and every
|
|
185
|
+
use is reported in `warnings`.
|
|
186
|
+
- Dates are normalized. A `SCRIPT_VERSION` marker is emitted in the output so the running version
|
|
187
|
+
is visible in instance data.
|
|
188
|
+
- **When.** Any large form submit, and any process shared by several variants of the same form.
|
|
189
|
+
- **Pitfalls.**
|
|
190
|
+
- Field keys are element **names**, so a duplicate name silently collides.
|
|
191
|
+
- Names can be re-derived in lower case after a designer save (see `PROCESIO-API-NOTES.md`), so
|
|
192
|
+
resolve case-insensitively.
|
|
193
|
+
- Files needed as `File` inputs should still be mapped explicitly.
|
|
194
|
+
|
|
195
|
+
## P11. Process-built HTML into a paragraph label — NEW
|
|
196
|
+
- **Mechanics.** A Node builds a self-contained, **inline-styled** HTML string (counts, percentage
|
|
197
|
+
bars, inline SVG icons) and returns it as a String output mapped to a paragraph's `label`. Static
|
|
198
|
+
decoration (separators, section cards, footers) uses the same trick directly in designer labels.
|
|
199
|
+
- **When.** Read-only dashboards, extraction summaries and status cards, with no JS needed.
|
|
200
|
+
- **Pitfalls.**
|
|
201
|
+
- Only inline styles are reliable, because the page CSS may not target injected markup (08 "A
|
|
202
|
+
`<div>` written into a paragraph…").
|
|
203
|
+
- Escape any user or DB text you interpolate, since the label is rendered as HTML.
|
|
204
|
+
|
|
205
|
+
## P12. Versioned idempotent installers for element-event scripts — REFINES 02 §4–5
|
|
206
|
+
- **Mechanics.**
|
|
207
|
+
- Each shared script family installs itself on `window.parent.__<family>` with a numeric `v`.
|
|
208
|
+
- The guard is "install if missing or `v` differs". It runs its action on every execution: install
|
|
209
|
+
once, act every click.
|
|
210
|
+
- Iron rule: guard version == exported version, and one file identical everywhere it is attached.
|
|
211
|
+
- **Pitfalls (observed).**
|
|
212
|
+
- If different buttons carry **different versions**, every step reinstalls. The old document
|
|
213
|
+
listeners are never removed, so N runtimes then run per click and keystroke.
|
|
214
|
+
- Header comments drift from the runtime `v`.
|
|
215
|
+
- A shared style tag guarded by one id keeps the **first** version's CSS.
|
|
216
|
+
- Prefer the form-level injected-runtime pattern (02 §4), or at minimum keep one canonical file and
|
|
217
|
+
diff all attachments before publishing.
|
|
218
|
+
- Listeners created in the sandbox realm are more fragile than an injected `<script>` in the
|
|
219
|
+
parent.
|
|
220
|
+
|
|
221
|
+
## P13. Async RUN_PROCESS: outputs do land, but the chain does not wait — REFINES 06 §1 / 08 "outputMap populates nothing"
|
|
222
|
+
- **Observation.** Production forms here map dozens of outputs from `syncRun:false` events (71 async
|
|
223
|
+
events against 12 sync) and depend on them for visibility and tables. This matches
|
|
224
|
+
`PROCESIO-API-NOTES.md`: async outputs **arrive later**. It contradicts the guide's "fire and
|
|
225
|
+
forget, outputMap can never populate" and should be re-verified live.
|
|
226
|
+
- **Rule.** Async is fine when the outputs only paint the UI. Use `syncRun:true` whenever a **later
|
|
227
|
+
event in the same chain** (MAP condition, JS, another process's inputMap) reads those outputs, or
|
|
228
|
+
when a loader or Next must wait for them.
|
|
229
|
+
- **Pitfall.** Several async processes on one click (status change + notify + refresh) have no
|
|
230
|
+
ordering guarantee. Chain them inside one process instead.
|
|
231
|
+
|
|
232
|
+
## P14. File outputs: `src` to preview, upload `value` to download or carry — NEW
|
|
233
|
+
- **Mechanics.** Map a generated or fetched File output to a file-viewer's `src` (preview) **and** to
|
|
234
|
+
a file-upload's `value`. The upload then acts as a download link or holds the file so a later
|
|
235
|
+
event can pass it on as a File input. For uploads, pair the extraction process with a
|
|
236
|
+
"convert to PDF" process on the same trigger so the preview works for photos too.
|
|
237
|
+
- **Pitfalls.** Keep outputMap targets pointed at existing elements. A deleted viewer leaves a raw
|
|
238
|
+
path target that fails silently.
|
|
239
|
+
|
|
240
|
+
## P15. Row object as process input (master/detail) with an explicit reset — NEW
|
|
241
|
+
- **Mechanics.**
|
|
242
|
+
- A button inside a dynamic row maps `DynamicRowN.$.item` (the whole row object) into a JSON or
|
|
243
|
+
typed process input.
|
|
244
|
+
- The detail process returns files and flags. A MAP swaps the list section for the detail section
|
|
245
|
+
and copies the row into a form variable for later actions.
|
|
246
|
+
- A "back" button re-loads the list and runs **one MAP that clears every field, viewer and
|
|
247
|
+
visibility the detail view set**.
|
|
248
|
+
- **Pitfalls.**
|
|
249
|
+
- Ship only the columns needed. Whole DB rows in a table reach the browser.
|
|
250
|
+
- Conditions on detail outputs need `syncRun:true` (P13).
|
|
251
|
+
|
|
252
|
+
## P16. Identity gate via FORM_LOAD → exclusive sections — NEW (with a security caveat)
|
|
253
|
+
- **Mechanics.** FORM_LOAD passes `instance.currentUser.email/name` to a process that returns
|
|
254
|
+
mutually exclusive Booleans (anonymous / known-but-unregistered / pending / approved), mapped to
|
|
255
|
+
`visible` of four sections (or of the stepper).
|
|
256
|
+
- **Pitfall (critical).** `visible` is presentation, not authorization. Any data-loading process on
|
|
257
|
+
the same FORM_LOAD still runs and ships its outputs to the browser. Load protected data only in a
|
|
258
|
+
process that re-checks the current user itself and returns nothing otherwise.
|
|
259
|
+
- A condition does not fix that either. `when isConfirmed IS_TRUE` on the data-loading event is
|
|
260
|
+
evaluated on the variable's default, the TEXT "false", which a condition reads as true (measured
|
|
261
|
+
live, P3). The load therefore runs for every visitor, and a correct condition would still be only
|
|
262
|
+
a browser-side check.
|
|
263
|
+
|
|
264
|
+
## P17. CSS by attribute-id families — NEW
|
|
265
|
+
- **Mechanics.** Style with `[id="…"]` and prefix families (`[id^="separator"]`,
|
|
266
|
+
`[id^="button-header-"]`) inside `:is()`. Class-level specificity is kept, and decorative elements
|
|
267
|
+
intentionally share ids so a new one inherits its styling. Hide helper fields on the control and
|
|
268
|
+
on its wrapper through `:has(> …)` / `:has(> * > …)` so no empty row remains. Every rule is
|
|
269
|
+
`!important` against the builder's styles.
|
|
270
|
+
- **Pitfalls.**
|
|
271
|
+
- Duplicate **ids** are fine for decoration only. Keep element **names** unique.
|
|
272
|
+
- Never reuse a decorative id prefix for a field.
|
|
273
|
+
|
|
274
|
+
## P18. Process-computed input constraints — NEW
|
|
275
|
+
- **Mechanics.** A load-time or click-time process returns `start_date`, `end_date`, `error` and
|
|
276
|
+
`e_not_ok`, mapped to a datetime input's `minValue`, `maxValue`, `defaultValue` and `readonly`,
|
|
277
|
+
and to an error paragraph `label`. Business calendars stay server-side.
|
|
278
|
+
|
|
279
|
+
## P19. Public token-addressed signing form — NEW
|
|
280
|
+
- **Mechanics.** An email link opens a public form with the token prefilled into an input inside a
|
|
281
|
+
hidden section. FORM_LOAD verifies the token and returns the documents to viewers plus `e_ok` →
|
|
282
|
+
section visible. The signature-pad value (a File) plus the token go to a signing process, and a
|
|
283
|
+
flag pair swaps to a thank-you section.
|
|
284
|
+
- **Pitfalls.**
|
|
285
|
+
- The token is attacker-controlled. Never interpolate it into SQL: use parameters or validate the
|
|
286
|
+
format.
|
|
287
|
+
- Make tokens single-use and expiring.
|