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,226 @@
|
|
|
1
|
+
# PROCESIO API — live-validated auth & coverage notes
|
|
2
|
+
|
|
3
|
+
Recorded 2026-06-23 against the production Web API. No secrets in this file.
|
|
4
|
+
|
|
5
|
+
## Hosts & infrastructure
|
|
6
|
+
|
|
7
|
+
| Host | Resolves to | TLS | Role | Reachable from here |
|
|
8
|
+
|------|-------------|-----|------|---------------------|
|
|
9
|
+
| `webapi.procesio.app` | 86.105.154.113 (Kong) | valid `*.procesio.app` | **Web API** (v1.19 Swagger, 295 ops) | ✅ yes |
|
|
10
|
+
| `auth.procesio.app` | 86.105.154.113 (Kong) | **self-signed Kong default** (`CN=localhost,O=Kong`) | Proxy/Auth API (login) | ❌ Kong "no route" / cert fail |
|
|
11
|
+
| `procesio.app` | nginx | valid | the Vue SPA (`VUE_APP_*` build env) | SPA only, `/api` = 405 |
|
|
12
|
+
| `procesio.com` | Cloudflare | valid | Next.js marketing site | n/a |
|
|
13
|
+
|
|
14
|
+
All `*.procesio.app` names (auth, app, identity, login, sso, …) resolve to the
|
|
15
|
+
same Kong node; only `webapi` has a configured cert+route. So the documented
|
|
16
|
+
auth host `auth.procesio.app` currently serves Kong's default cert and 404s its
|
|
17
|
+
own `/api/Authentication` and `/swagger` from the public edge.
|
|
18
|
+
|
|
19
|
+
## Auth mode 1 — API key ✅ WORKING
|
|
20
|
+
|
|
21
|
+
Three request headers on every Web-API call:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
key: <api key name>
|
|
25
|
+
value: <api key value>
|
|
26
|
+
workspaceid: <workspace GUID> # required for workspace-scoped keys
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The Swagger security schemes define `key` (KeyName) and `value` (KeyValue); the
|
|
30
|
+
developer docs add `workspaceid`. Live results for the two showcase keys:
|
|
31
|
+
|
|
32
|
+
| Profile | key/value | workspaceid | `GET /api/Workspaces` |
|
|
33
|
+
|---------|-----------|-------------|------------------------|
|
|
34
|
+
| `personal` | valid | (none) | **200** — 146 workspaces |
|
|
35
|
+
| `ws-scoped` | valid | (none) | 401 Unauthorized |
|
|
36
|
+
| `ws-scoped` | valid | its own workspace GUID | **200** |
|
|
37
|
+
| `ws-scoped` | valid | a DIFFERENT workspace GUID | 401 |
|
|
38
|
+
|
|
39
|
+
**The `key` header is the key HANDLE, not its display name.** The API Keys page
|
|
40
|
+
shows each key with a human name (e.g. a short label) and a separate random
|
|
41
|
+
*handle* (~16 chars). Sending the display name as `key` returns **403
|
|
42
|
+
`Unauthorized`** on every endpoint; sending the handle returns 200. An empty
|
|
43
|
+
`key` returns 401 instead of 403, so a 403 with a valid value + workspaceid means
|
|
44
|
+
"wrong key name/handle", not "wrong workspace". Store the handle with
|
|
45
|
+
`add-credential --key <handle>`.
|
|
46
|
+
|
|
47
|
+
**Conclusion:** a personal/master key authenticates without `workspaceid`; a
|
|
48
|
+
workspace-scoped key **requires** the exact workspace GUID. Such a profile must be stored WITH its `workspace_id` to authenticate at all. Find any workspace's GUID with `list-workspaces` (`id`).
|
|
49
|
+
|
|
50
|
+
### Endpoints exercised live with the `personal` key (all 200)
|
|
51
|
+
- `GET /api/Workspaces` → 146 workspaces
|
|
52
|
+
- `GET /api/Projects` → `{totalItemCount, pageNumber, pageItemCount, pageItems}`
|
|
53
|
+
- `GET /api/DataTypes` → same paginated envelope
|
|
54
|
+
- `GET /api/Actions` → `{actions, grouping, prototypes}`
|
|
55
|
+
- `GET /api/Credentials/types` → 33 connection types
|
|
56
|
+
|
|
57
|
+
`GET /api/ApiKey` returns 401 even for the personal key — that endpoint needs a
|
|
58
|
+
`workspaceid`-scoped context (use a workspace profile).
|
|
59
|
+
|
|
60
|
+
## Auth mode 2 — username / password ✅ WORKING (cookie session)
|
|
61
|
+
|
|
62
|
+
Confirmed from a real login HAR (`procesio.app.har`) + live replay. The actual
|
|
63
|
+
flow is a **cookie session on the Web API**, NOT the OAuth/Bearer flow the docs
|
|
64
|
+
describe and NOT on `auth.procesio.app` (that host is obsolete — "auth moved to
|
|
65
|
+
webapi"):
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
POST https://webapi.procesio.app/api/authentication # lowercase path
|
|
69
|
+
Content-Type: application/x-www-form-urlencoded
|
|
70
|
+
x-requested-by: playground-v1 # REQUIRED (omitting it = 407)
|
|
71
|
+
body: username=<>&password=<>&client_id=procesio-ui # form, no realm/grant_type/client_secret
|
|
72
|
+
|
|
73
|
+
200 -> {"message":"Authentication successful"}
|
|
74
|
+
Set-Cookie: __Host-procesio.access (HttpOnly, Secure, Path=/)
|
|
75
|
+
Set-Cookie: __Host-procesio.refresh (HttpOnly, Secure, Path=/)
|
|
76
|
+
Response header: x-session-expires-at (exposed via Access-Control-Expose-Headers)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Every subsequent Web-API call carries those two cookies plus
|
|
80
|
+
`x-requested-by: playground-v1` (browser uses `credentials: include`;
|
|
81
|
+
`Access-Control-Allow-Credentials: true`). Live-verified end to end:
|
|
82
|
+
`POST /api/authentication` → 200, then `GET /api/users/me` → 200 (real user
|
|
83
|
+
`facaf267-…`), `GET /api/workspaces` → 200.
|
|
84
|
+
|
|
85
|
+
The tool implements exactly this: `login` form-posts and caches the cookies in
|
|
86
|
+
Credential Manager (`token-<profile>`), `auth_headers` sends `Cookie` +
|
|
87
|
+
`x-requested-by`, and a 401 transparently re-logs-in. The `client_id` is
|
|
88
|
+
overridable per profile; the gateway id defaults to `playground-v1`
|
|
89
|
+
(`requested_by` profile field to override). No Bearer token, no `auth_base` is
|
|
90
|
+
involved any more for login.
|
|
91
|
+
|
|
92
|
+
> Earlier 407/401 dead-ends were because the documented flow (JSON body,
|
|
93
|
+
> realm/grant_type, `auth.procesio.app`) is obsolete: the gateway needs the
|
|
94
|
+
> form body **and** the `x-requested-by` header on **webapi**.
|
|
95
|
+
|
|
96
|
+
### Session caching (Windows Credential Manager blob limit)
|
|
97
|
+
|
|
98
|
+
Windows Credential Manager rejects a blob over **2560 bytes** — `CredWrite` fails
|
|
99
|
+
with `WinError 1783 "stub received bad data"`. The trap: keyring stores the value
|
|
100
|
+
as **UTF-16LE**, so the real ceiling is **1280 CHARACTERS**, not 2560. Measured by
|
|
101
|
+
binary search on this machine: 1280 chars writes, 1281 fails. Budget in
|
|
102
|
+
characters and halve the byte figure, or you will conclude a payload fits when it
|
|
103
|
+
does not — the two cookies are ~1700 chars, which "fits" 2560 bytes on paper and
|
|
104
|
+
is rejected in practice.
|
|
105
|
+
|
|
106
|
+
### The login 401 is GENERIC — it never tells you which half is wrong
|
|
107
|
+
|
|
108
|
+
A rejected form login answers:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
401 "Authentication token is null!"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Verified by probing the endpoint with an account that does not exist: the body is
|
|
115
|
+
byte-identical to a real account with a wrong password. So the string proves only
|
|
116
|
+
that the gateway accepted the REQUEST shape (path, form body, `x-requested-by`)
|
|
117
|
+
and refused the CREDENTIALS. It does not distinguish, and must not be read as, a
|
|
118
|
+
missing/expired token despite what it says — nothing about a cached session is
|
|
119
|
+
involved on a login call.
|
|
120
|
+
|
|
121
|
+
Diagnose by elimination, in this order (cheapest first):
|
|
122
|
+
1. **Wrong environment.** A profile is bound to one environment; an account that
|
|
123
|
+
lives on QA/DEV (or a client installation) simply does not exist on PROD and is
|
|
124
|
+
rejected exactly like a bad password. Match the profile's environment to the
|
|
125
|
+
host the user actually logs into in the browser.
|
|
126
|
+
2. **Typo at the hidden prompt.** getpass echoes nothing, and `Ctrl+V` does not
|
|
127
|
+
paste in a Windows console — a truncated paste looks like a wrong password.
|
|
128
|
+
3. **SSO account.** An account that reaches the platform through an external IdP
|
|
129
|
+
has no platform-side password to submit; the redirect-based SSO flow is not
|
|
130
|
+
implemented here, so use an api-key profile instead.
|
|
131
|
+
|
|
132
|
+
Rule of thumb for any gateway that returns one opaque message for every auth
|
|
133
|
+
failure: probe it once with a knowingly invalid identity. If the response matches
|
|
134
|
+
what the user is getting, the message carries no information and the fault must be
|
|
135
|
+
located by varying one input at a time.
|
|
136
|
+
|
|
137
|
+
### Storing a credential needs the runner bypassed
|
|
138
|
+
|
|
139
|
+
`add-credential` deliberately prompts for the secret instead of taking it on the
|
|
140
|
+
command line (flags leak into shell history and process listings). But run-tool
|
|
141
|
+
routes tools through the persistent runner by default, so the tool runs in a
|
|
142
|
+
daemon worker with no TTY, `sys.stdin.isatty()` is False, and the prompt is
|
|
143
|
+
unreachable — even though the human IS at a console. Bypass it for that one call:
|
|
144
|
+
|
|
145
|
+
```powershell
|
|
146
|
+
$env:AAT_RUNNER_DIRECT = "1"
|
|
147
|
+
python scripts/run-tool.py procesio add-credential --name <profile> --type userpass --username <you> --make-default
|
|
148
|
+
Remove-Item Env:AAT_RUNNER_DIRECT
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Generalizes to every framework action that prompts for a secret. See
|
|
152
|
+
`tools/_lib/toolrunner/TOOLRUNNER-NOTES.md` ("Limitations").
|
|
153
|
+
|
|
154
|
+
### The dashboard's secret list is not where a profile is added
|
|
155
|
+
|
|
156
|
+
A tool that keeps its OWN multi-profile store shows only its bookkeeping secrets
|
|
157
|
+
in the dashboard's generic per-tool secret list — here `credentials` (the
|
|
158
|
+
non-secret JSON index of profile names) and `form-code-key` (unrelated to login).
|
|
159
|
+
Neither is the credential a user is hunting for, and hand-writing the index
|
|
160
|
+
desyncs it from the real `cred-<name>` entries. Profiles are added through the
|
|
161
|
+
tool's own action only; the dashboard panel manages environments and
|
|
162
|
+
set-default/remove for profiles that already exist.
|
|
163
|
+
|
|
164
|
+
The two JWTs therefore cannot share one entry, and both must survive (the access
|
|
165
|
+
cookie authenticates; the refresh cookie is what renews the session without the
|
|
166
|
+
password). They get **one entry each** — `token-<name>` for the access cookie
|
|
167
|
+
plus its expiry, `refresh-<name>` for the refresh cookie. At ~961 and ~733 chars
|
|
168
|
+
each fits comfortably.
|
|
169
|
+
|
|
170
|
+
So the tool: (1) keeps an **in-process** cookie cache (always works, avoids
|
|
171
|
+
re-login within one CLI invocation), and (2) best-effort persists both entries
|
|
172
|
+
independently — a failed refresh write only costs the next process a full login,
|
|
173
|
+
it does not break the access cache. If a write fails it logs to stderr and
|
|
174
|
+
re-logs-in next invocation. Never let a token cache write crash a request.
|
|
175
|
+
|
|
176
|
+
### Renewing a session — refresh, don't re-login
|
|
177
|
+
|
|
178
|
+
The access cookie is a **~30-minute JWT**; the refresh cookie outlives it. A
|
|
179
|
+
browser never notices, because for cookie/BFF clients the gateway refreshes
|
|
180
|
+
behind a `307` redirect. A programmatic cookie client gets no such help and must
|
|
181
|
+
ask explicitly:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
POST {web_base}/api/Authentication/refreshToken
|
|
185
|
+
Content-Type: application/x-www-form-urlencoded
|
|
186
|
+
x-requested-by: playground-v1
|
|
187
|
+
body: refresh_token=<value of __Host-procesio.refresh>&client_id=procesio-ui
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
→ `200 {"message":"Token refreshed successfully"}` plus a fresh **pair** of
|
|
191
|
+
Set-Cookie headers. Verified live: the refreshed access cookie authenticates an
|
|
192
|
+
ordinary Web-API call. This is why the refresh cookie must be cached — without
|
|
193
|
+
it the only way to renew is to re-send the account password every half hour.
|
|
194
|
+
|
|
195
|
+
Resolution order is therefore: in-process cache → persistent cache → **refresh**
|
|
196
|
+
→ full login. A refresh token that is dead by its own `exp` is skipped rather
|
|
197
|
+
than spending a round-trip proving it.
|
|
198
|
+
|
|
199
|
+
### Which status means "your session is stale"
|
|
200
|
+
|
|
201
|
+
Measured against the prod gateway with a bad access cookie:
|
|
202
|
+
|
|
203
|
+
| Cookie sent | Status |
|
|
204
|
+
| --- | --- |
|
|
205
|
+
| valid | `200` |
|
|
206
|
+
| present but rejected (bad/expired token) | **`403`** |
|
|
207
|
+
| present but unparseable | `401` |
|
|
208
|
+
| absent entirely | `401` |
|
|
209
|
+
|
|
210
|
+
The trap: a **rejected session comes back 403, not 401**. A client that
|
|
211
|
+
re-authenticates only on 401 surfaces a stale session as a permission error the
|
|
212
|
+
user cannot act on. Treat both as re-authable; make it one-shot so a genuine
|
|
213
|
+
permission denial still terminates. The cost of including 403 is one cheap
|
|
214
|
+
refresh round-trip when the denial was real.
|
|
215
|
+
|
|
216
|
+
### Bearer (token-in-body) is also available
|
|
217
|
+
|
|
218
|
+
Omitting `x-requested-by` on the login POST switches the gateway out of cookie/BFF
|
|
219
|
+
mode: the 200 body then carries `access_token` / `refresh_token` / `expires_in`
|
|
220
|
+
(1800) instead of setting cookies, and `Authorization: Bearer <access_token>`
|
|
221
|
+
authenticates Web-API calls normally (verified live). PROCESIO's own API
|
|
222
|
+
documentation recommends this style for integrations and reserves the cookie path
|
|
223
|
+
for the official SPA. This tool still uses the cookie flow — switching is a
|
|
224
|
+
migration to make deliberately, not a bug fix — but the option is real and
|
|
225
|
+
carries no extra dependency.
|
|
226
|
+
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# Building a PROCESIO card end to end — findings from the build loop
|
|
2
|
+
|
|
3
|
+
Mechanics learned while shipping a two-process card with forms, a scripted engine and an
|
|
4
|
+
oracle-checked acceptance pass. These are the things that cost time and were not already
|
|
5
|
+
written down. Companions: [PROCESIO-RECONCILIATION-PATTERNS.md](PROCESIO-RECONCILIATION-PATTERNS.md)
|
|
6
|
+
(what to build), [PROCESIO-FORM-API-HANG-NOTE.md](PROCESIO-FORM-API-HANG-NOTE.md) (the form
|
|
7
|
+
read hang), [PROCESIO-NODE-MODULE-WHITELIST.md](PROCESIO-NODE-MODULE-WHITELIST.md).
|
|
8
|
+
|
|
9
|
+
## 1. Scale every factor KIND separately, not just money
|
|
10
|
+
|
|
11
|
+
"Integer minor units for money" is necessary and not sufficient. The moment a figure is
|
|
12
|
+
produced by **multiplying two configured values**, each needs its own integer scale, or the
|
|
13
|
+
product re-introduces the float error the minor-unit rule exists to remove.
|
|
14
|
+
|
|
15
|
+
A default factor times a country multiplier is the canonical case: `11.2 * 1.15` evaluates
|
|
16
|
+
to `12.879999999999999`, and any downstream exact-equality assertion then fails on a figure
|
|
17
|
+
that is arithmetically right. Give the multiplier its own scale — **basis points, x10000** —
|
|
18
|
+
and do the multiply as integers with a rounded integer divide:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
var factorMilli = divRound(baseMilli * markupBp, 10000); // 11200 * 11500 / 10000 = 12880
|
|
22
|
+
function divRound(a, b) { return Math.floor((a + Math.floor(b / 2)) / b); } // positive only
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Pick the scale from the value's own precision (quantities in thousandths, rates in
|
|
26
|
+
thousandths, percentages and multipliers in basis points, money in cents), multiply into a
|
|
27
|
+
wider unit, and divide only at render. Check the widest product against `2^53` and put a row
|
|
28
|
+
limit in front of it, so a file large enough to break the assumption is refused rather than
|
|
29
|
+
silently wrong.
|
|
30
|
+
|
|
31
|
+
## 2. Never let a generated script's escape sequences cross a shell layer
|
|
32
|
+
|
|
33
|
+
Generating Node source from a script is the right way to keep the deployed code identical to
|
|
34
|
+
the locally tested code. But a `\n` written inside a JS **string literal** can be collapsed
|
|
35
|
+
into a real newline by an intervening shell, heredoc, or quoting layer. The result is a
|
|
36
|
+
literal that ends mid-string, and the failure surfaces as `SyntaxError: unexpected end of
|
|
37
|
+
string` at a line number that looks unrelated to the edit.
|
|
38
|
+
|
|
39
|
+
**Rule:** write the generator as a **file** and execute the file — never pipe the generator
|
|
40
|
+
source through a shell heredoc. Inside the generator, represent the escape as a token and
|
|
41
|
+
substitute it at write time, so no layer can interpret it:
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
NL = chr(92) + "n" # the two characters \ and n, as JS source
|
|
45
|
+
src = template.replace("~NL~", NL)
|
|
46
|
+
assert "~NL~" not in src
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Then assert the property you care about after writing: the file should contain **zero raw
|
|
50
|
+
newlines inside string literals**, which a grep for the escape sequence confirms cheaply.
|
|
51
|
+
|
|
52
|
+
## 3. A date control submits a LOCALISED display value, not an ISO date
|
|
53
|
+
|
|
54
|
+
A `datetime-input` bound to a string process variable does not necessarily deliver
|
|
55
|
+
`YYYY-MM-DD`. Given an ISO default it can render and submit a localised display value
|
|
56
|
+
(`"1 July 2026, 04:00"` — note the time, which is a timezone offset applied to midnight).
|
|
57
|
+
An engine that validates `^\d{4}-\d{2}-\d{2}$` then rejects a period the user set correctly.
|
|
58
|
+
|
|
59
|
+
Normalise defensively at the top of the engine: accept an ISO date, an ISO datetime, the
|
|
60
|
+
`DD/MM/YYYY` display form, and fall back to date parsing for anything else — reading the
|
|
61
|
+
result back in **UTC**, so an offset cannot shift the day across a period boundary. Keep a
|
|
62
|
+
clear fatal for what still will not parse, quoting the raw value.
|
|
63
|
+
|
|
64
|
+
This class of defect is invisible to an API-side test, because a programmatic submission
|
|
65
|
+
passes the payload directly and never exercises the control's own formatting. Only opening
|
|
66
|
+
the rendered form shows it.
|
|
67
|
+
|
|
68
|
+
## 4. The same flow comes back in two different casings
|
|
69
|
+
|
|
70
|
+
`GET /api/Projects/{id}` returns the flow **camelCase** (`variables`, `actions`, `name`,
|
|
71
|
+
`id`, `type`). The Transport **export** (`POST /api/Transport/export-entities`) returns the
|
|
72
|
+
same structure **PascalCase** (`Variables`, `Actions`, `Name`, `Id`, `Type`). Any tool that
|
|
73
|
+
reads a flow from both sources must accept either; a checker written against one silently
|
|
74
|
+
sees zero variables from the other and reports a clean pass over nothing.
|
|
75
|
+
|
|
76
|
+
## 5. Form event map rows are `left` / `right`, and `right` must have four segments
|
|
77
|
+
|
|
78
|
+
In the built form DTO, an `inputMap` / `outputMap` row is `{id, left, right}`:
|
|
79
|
+
|
|
80
|
+
- `left` — the **process variable GUID**
|
|
81
|
+
- `right` — the **form value path**, `formId.FIELDS_NS.elementId.valueConfigId`
|
|
82
|
+
|
|
83
|
+
A row whose `right` is still a raw field **name** is accepted by the API, renders blank in
|
|
84
|
+
the designer, and never carries a value. Assert `right.split(".")` has **exactly four**
|
|
85
|
+
GUID-shaped segments for every row, and that `left` resolves to a real variable of the right
|
|
86
|
+
direction (inputs to input variables, outputs to output variables). This is cheap, reads
|
|
87
|
+
only the DTO, and catches the whole class before a single run.
|
|
88
|
+
|
|
89
|
+
## 6. A file output and a JSON output look identical in a run result
|
|
90
|
+
|
|
91
|
+
In `run-process-with-file` output, a File variable arrives as an object
|
|
92
|
+
(`{id, name, mimeType, size, path, hash}`) — and so does a `json` machine-channel variable.
|
|
93
|
+
"Count the object-valued outputs" is therefore not a way to count produced artefacts, and an
|
|
94
|
+
assertion written that way fails the moment a structured output is added. Assert the file
|
|
95
|
+
variables **by name**, and check `size` is present and non-zero.
|
|
96
|
+
|
|
97
|
+
## 7. Form-level CSS is NOT a low-risk surface. A bad `Data.code` blob kills the form
|
|
98
|
+
|
|
99
|
+
Form-level CSS and JavaScript share one storage slot: `Data.code`, AES-encrypted with the
|
|
100
|
+
`procesio / form-code-key` passphrase. It is tempting to treat CSS as the safe half of that
|
|
101
|
+
pair, on the reasoning that the worst a stylesheet can do is look wrong. That is not the
|
|
102
|
+
failure mode.
|
|
103
|
+
|
|
104
|
+
If the public renderer cannot decrypt the blob it throws **`Malformed UTF-8 data`** out of
|
|
105
|
+
`FormWrapper.component` and **never mounts the form at all** — a spinner forever, every
|
|
106
|
+
control gone, the page unusable. Not "unstyled": absent. A form created with `code: ""`
|
|
107
|
+
renders perfectly; the same form with a `css` string can be dead on arrival, so this is
|
|
108
|
+
easy to introduce while believing you took the cautious option.
|
|
109
|
+
|
|
110
|
+
Combined with the `form-get` hang (every read-modify-write form action inherits it, so a
|
|
111
|
+
form gets ONE authoring pass over the API), the rule is:
|
|
112
|
+
|
|
113
|
+
> **Do not send `css` or `javascript` on a form you cannot afford to rebuild.** Express
|
|
114
|
+
> styling through `theme` and per-element `style` configs, which are ordinary DTO fields
|
|
115
|
+
> and cannot break the render.
|
|
116
|
+
|
|
117
|
+
Diagnose it from the browser console, not the API: creation returns a normal id and
|
|
118
|
+
`form-list` shows the form present and published. Only the console says why the page is
|
|
119
|
+
blank.
|
|
120
|
+
|
|
121
|
+
**What per-element `style` can and cannot reach.** It does apply: a `--c-input-background`
|
|
122
|
+
set on a textarea resolves on `.pds-c-input-group--wrapper` at runtime. But the design
|
|
123
|
+
system paints that wrapper's `background-color` from its own rule, so the variable is
|
|
124
|
+
plumbed and ignored, and the pane stays white. Colour vars must reference a theme variable
|
|
125
|
+
rather than a hex, so redefining a neutral in `theme` and pointing the element style at it
|
|
126
|
+
is the legal path — it just will not repaint a surface the design system hard-codes. Verify
|
|
127
|
+
the computed `background-color`, not the custom property, before believing a colour landed.
|
|
128
|
+
|
|
129
|
+
## 8. Prove the engine off-platform, in a real JS engine
|
|
130
|
+
|
|
131
|
+
The Node sources can be exercised locally under an embedded JS engine (Duktape via `dukpy`
|
|
132
|
+
installs from a wheel on Windows; a native-build engine such as `quickjs` needs a C++
|
|
133
|
+
toolchain and is not worth the dependency). PROCESIO wraps a Node action's code in a
|
|
134
|
+
function, so top-level `return` is legal there; locally, wrap it explicitly:
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
dukpy.evaljs("(function(){\n" + src + "\n})()")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Duktape is ES5.1, which is a useful constraint rather than a limitation: writing the engine
|
|
141
|
+
in ES5 keeps it inside what the sandbox reliably supports, and every logic defect surfaces
|
|
142
|
+
in a sub-second local run instead of a multi-minute platform round trip. Feed the same
|
|
143
|
+
source files to both, so what runs on the platform is byte-for-byte what was proved off it.
|
|
144
|
+
|
|
145
|
+
Assert the OUTPUT, not the call: open a generated workbook with a real reader and read the
|
|
146
|
+
figure back out of the file. "It returned base64" and "it produced a workbook" are different
|
|
147
|
+
claims, and only the second one is worth making.
|
|
148
|
+
|
|
149
|
+
## 9. Assembling a file-in / file-out card through the builder (the renderer wiring)
|
|
150
|
+
|
|
151
|
+
A reconciliation-style card is `File(s) in -> engine -> report renderers -> File(s) out`. Every
|
|
152
|
+
piece is a native action the **compact builder can wire by property label** — you do not splice
|
|
153
|
+
raw DTO. The labels (from the live action catalog `configuration[].settings[]`, which the builder's
|
|
154
|
+
`_property_index` reads, recursing into `side-pannel` nested `value` lists):
|
|
155
|
+
|
|
156
|
+
- **File To Base64** — `File` (input file var) → `Base64 Content` (output string var).
|
|
157
|
+
- **String To Base64** — `Input String` (input) → `Result` (output string var).
|
|
158
|
+
- **HTML To PDF** — a **side-panel** `Configure` holding `HTML string` (the HTML var), `File Name`
|
|
159
|
+
(a literal, e.g. `Bank-Reconciliation.pdf`) and `File Output` (the output File var).
|
|
160
|
+
- **Base64 To File** — `Base64 String` (the base64 var), `File Name` (a literal) and `File` (the
|
|
161
|
+
output File var).
|
|
162
|
+
|
|
163
|
+
⚠ **A File variable is declared with `model:<File datatype GUID 10c6ac59-…-121212121219>`, NOT
|
|
164
|
+
`type:"file"`** — the process-create schema's `type` enum has no `file` (it 400s: "'file' is not one
|
|
165
|
+
of [...]"). Same pattern as a Guid var (`model:<Guid GUID>`). The engine and the report builders are
|
|
166
|
+
ordinary `Node` actions (`Code:{template,vars}`); a downstream Node reads an upstream Node's output
|
|
167
|
+
by binding that output var as its input (`vars:["recon"]`). A linear `edges` chain is enough;
|
|
168
|
+
Start/Stop auto-inject.
|
|
169
|
+
|
|
170
|
+
**Run it with files, and prove the files, not the run.** `run-process-with-file --id <pid> --file
|
|
171
|
+
StatementFile=stmt.csv --file LedgerFile=ledg.csv --payload '{...non-file inputs...}'` publishes →
|
|
172
|
+
uploads bytes → launches → polls. The File outputs arrive as objects `{id,name,path,size,hash}`;
|
|
173
|
+
`file-download --from-run <result.json> --var ExcelFile --out out.xlsx` fetches one. Judge on
|
|
174
|
+
opening the file (openpyxl sheets + values; the `%PDF-` magic), never on status 50 — a clean 50
|
|
175
|
+
returning a null File is this platform's failure signature (Rule 8).
|
|
176
|
+
|
|
177
|
+
**Cross-workspace import is CONDITIONAL, not absolute.** The API-NOTES record `Transport/import`
|
|
178
|
+
answering `403 "workspace migration"`; that is the RELOCATION case. `import --file <pack>
|
|
179
|
+
--workspace-id <clean-different-ws>` into a workspace where the ids do not already exist **succeeds**
|
|
180
|
+
(measured: PL-120 B-022, PL-004 B-023) and preserves the flow id — so the round-trip proof (import
|
|
181
|
+
into a clean different ws, run there, judge on the produced files) is achievable over the API for a
|
|
182
|
+
process-bearing pack. Forms still need the designer (a form-bearing pack is not API-installable);
|
|
183
|
+
the process is the marketplace artefact, the intake form is the designer front door.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PROCESIO connectors & platform actions - what the tool resolves live vs what it bundles
|
|
2
|
+
|
|
3
|
+
Scope: how PROCESIO's built-in **connectors** and **platform actions** reach this tool,
|
|
4
|
+
and the specific ones added in the Aug-Sep 2026 wave and in v3.0.0 (2026-10). Companion to
|
|
5
|
+
`PROCESIO-CUSTOM-ACTION-NOTES.md` (which is about *building* NuGet custom actions) and
|
|
6
|
+
`PROCESIO-SQL-ACTIONS-NOTES.md`.
|
|
7
|
+
|
|
8
|
+
## The one rule that governs "is a new action supported?"
|
|
9
|
+
|
|
10
|
+
The process builder resolves the **action catalog live** at build time
|
|
11
|
+
(`dto/process/builder.py` `prepare_ctx` → `GET /api/Actions?getFullAction=true` on the
|
|
12
|
+
target workspace) and only falls back to the bundled `dto/data/action_catalog.json`
|
|
13
|
+
when the live fetch is slow or fails. Credential types are likewise live-resolved
|
|
14
|
+
(`GET /api/Credentials/types`). **Consequence:** a new platform action or a new
|
|
15
|
+
credential type works at runtime the moment PROCESIO ships it - no tool change. What
|
|
16
|
+
goes stale is the *offline* bundle (the fallback) and the human notes.
|
|
17
|
+
|
|
18
|
+
Refresh the offline bundle with `dto/data/_refresh.py`:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
python tools/procesio/dto/data/_refresh.py --profile <name> --workspace-id <guid> --procesio-only # report
|
|
22
|
+
python tools/procesio/dto/data/_refresh.py --profile <name> --workspace-id <guid> --procesio-only --write # apply
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Always pass **`--procesio-only`** when the refresh runs against a real workspace: it
|
|
26
|
+
keeps only `isProcesioAction=true` entries, so that workspace's own uploaded custom
|
|
27
|
+
actions never leak into the platform bundle. It is additive by default;
|
|
28
|
+
`--replace-existing` also updates the shape of actions already bundled (diff before
|
|
29
|
+
committing - an in-place shape change silently alters every process the builder emits).
|
|
30
|
+
|
|
31
|
+
## Three action kinds (do not conflate)
|
|
32
|
+
|
|
33
|
+
`RunActionDto.ActionType` has three values:
|
|
34
|
+
|
|
35
|
+
- **Platform (built-in) action** - seeded in the DB, `isProcesioAction=true`, global to
|
|
36
|
+
every workspace. Uploaded by admins via `POST /api/PlatformAction`. This is what the
|
|
37
|
+
catalog bundle mirrors. Connectors like Prelude/Redis/Data Store are platform actions.
|
|
38
|
+
- **Custom action** - a developer's NuGet package implementing `IAction`, uploaded per
|
|
39
|
+
workspace via `POST /api/Actions` (multipart), `isProcesioAction=false`, run by the
|
|
40
|
+
Action-Execution service. Namespace blacklist on upload (Reflection, Diagnostics.Process,
|
|
41
|
+
IO, InteropServices, Loader, …).
|
|
42
|
+
- **Connector action** - the *design-time* execution of a connector's property/event to
|
|
43
|
+
populate dynamic UI (chained dropdowns, previews): `POST /api/Actions/event`
|
|
44
|
+
(`ConnectorActionRequestDto`), async, results over SignalR (`ConnectionId`) or polled
|
|
45
|
+
at `GET /api/Actions/event/{id}`. A built-in connector (e.g. Data Store) exposes
|
|
46
|
+
`OnReady`/`OnChange` handlers with `OutputTarget.Options` to fill selects.
|
|
47
|
+
|
|
48
|
+
## New/relevant `FeComponentType` values (custom-action / connector control types)
|
|
49
|
+
|
|
50
|
+
Backend enum `Action-Core/.../Utils/FeComponentType.cs`; serialized lowercase-hyphenated
|
|
51
|
+
(e.g. `Data_Store_Decisional` → `data-store-decisional`). Do not confuse with the FE
|
|
52
|
+
form-element enum `ElementType`.
|
|
53
|
+
|
|
54
|
+
- `Ai_Decisional_Case = 44`, `Credentials_Ai = 45`
|
|
55
|
+
- `Data_Store_Mapper = 46`, `Data_Store_Decisional = 47`
|
|
56
|
+
- `Auto = 102` (Action-Core 2.x, v3.0.0); also new: `FeTextFormat.DATASTORE = 8`
|
|
57
|
+
- (also in play: `Map_Parameters = 43`, `Credentials_Db = 32`, `Document_Mapper = 38`,
|
|
58
|
+
`Document_Select = 39`, `Form_Template = 42`)
|
|
59
|
+
|
|
60
|
+
## The connectors/actions added in the Aug-Sep 2026 wave (all prod-verified)
|
|
61
|
+
|
|
62
|
+
- **Prelude** connector (`isProcesioAction=true`) - phone verification + lookup via
|
|
63
|
+
prelude.so. Credential is a **REST_API/Bearer** derived template ("REST API/ Prelude",
|
|
64
|
+
base `https://platform.prelude.so`); pick the operation via a `SelectedAction`/
|
|
65
|
+
`Operation` select. Inputs vary by operation (Target, TargetType, Code, Method,
|
|
66
|
+
PreferredChannel, SenderId, TemplateId, Variables, Locale, CodeSize, ForceChallenge,
|
|
67
|
+
CallbackUrl, CorrelationId, IncludeCallerName); output `Result`/`Status`/
|
|
68
|
+
`VerificationId`/`RequestId`. Confirms the old "Prelude" worked-example in
|
|
69
|
+
`PROCESIO-API-NOTES.md` is now a **real shipped connector**, not just an illustration.
|
|
70
|
+
- **Redis** connector + Redis credential - code merged (Web-Api #1452 validation +
|
|
71
|
+
test client, Process-Execution #250), but **NOT yet activated on PROD**: as of
|
|
72
|
+
2026-09-21 `Redis` is still absent from `GET /api/Credentials/types` (35 types, no
|
|
73
|
+
Redis), so a Redis credential cannot be created there yet. Contract is documented in
|
|
74
|
+
`dto/credential/description.md`; treat as shipped-not-activated until it appears live.
|
|
75
|
+
Still NOT activated at the v3.0.0 release (2026-10-21): `Redis` is absent from
|
|
76
|
+
`GET /api/Credentials/types`.
|
|
77
|
+
- **Query Store** action (`DataStoreQueryAction`) - query a data store from a process.
|
|
78
|
+
Input `Query` in a **code-editor whose text format is `datastore`** (the new format,
|
|
79
|
+
alongside `sql`/`python`/`ruby`), plus `Parameters` (map-parameters) and `Timeout`
|
|
80
|
+
(60-1800); output `ResultRows` (datatype) + `TotalCount`. This is the read path a
|
|
81
|
+
process uses; the interactive rows API is the `DataStore` REST surface the tool
|
|
82
|
+
already maps. Since v3.0.0 (2026-10) `Query` is a `;`-separated script: no transaction, at
|
|
83
|
+
most one row-returning statement (error 2003 otherwise, raised after the script ran), user
|
|
84
|
+
variables allowed, a misspelled `@param` reads as NULL silently. Full contract in
|
|
85
|
+
`PROCESIO-QUERY-STORE-NOTES.md`.
|
|
86
|
+
- **CURL** action (`CurlAction`) - `CurlCommand` (code-editor) in → `Result` (datatype),
|
|
87
|
+
`Status` (number), `Error`. "Run curl commands."
|
|
88
|
+
- **Data Store** connector in the process designer - operations
|
|
89
|
+
`SelectAll/SelectWhere/InsertRows/UpdateRows/DeleteRows` (sent by NAME), a WHERE tree
|
|
90
|
+
using the 21-value `QueryOperators` vocabulary (superset of the REST filter operators;
|
|
91
|
+
the tool already carries 0-20 in `handlers/datastore_ops.py`), and the
|
|
92
|
+
`Data_Store_Mapper`/`Data_Store_Decisional` control types above. In the FORM designer,
|
|
93
|
+
a data store is not an element - it is an event action
|
|
94
|
+
`RUN_DATA_STORE_OPERATION` (config `{dataStoreId, operation READ|ADD|UPDATE|DELETE,
|
|
95
|
+
inputMap[], outputMap[]}`) attachable to any element's `field-events`.
|
|
96
|
+
|
|
97
|
+
## The connectors/actions added in v3.0.0 (2026-10, prod-verified)
|
|
98
|
+
|
|
99
|
+
- **GUID Converter** (Utilitary, listed after Generate GUID), actionId
|
|
100
|
+
`77f61c6d-0000-0200-0000-00000000b001`. Input `Input` (required) plus `InputFormat`, a select
|
|
101
|
+
of AutoDetect / Standard / Hex / HexBigEndian / Number / Base64 / Base64DotNet. Outputs
|
|
102
|
+
Standard, Guid, Hex, HexBigEndian, Number, Base64, Base64DotNet. It converts between the
|
|
103
|
+
standard text form, the `0x` hex literal PROCESIO stores for a Data Store Guid column
|
|
104
|
+
(`BINARY(16)`, the `Hex` output), a decimal number and Base64, in both byte orders.
|
|
105
|
+
AutoDetect refuses ambiguous input (codes 1009-1012), so name the format when it is known.
|
|
106
|
+
See the Guid sections of `PROCESIO-QUERY-STORE-NOTES.md` for why the byte order matters.
|
|
107
|
+
- **Azure Storage** connector, id `83838383-0000-0000-0000-aaaaaaaaaaaa`. Inputs Credentials,
|
|
108
|
+
Resource (Blob / Container), Operation (14 operations, e.g. Upload blob, List blobs by
|
|
109
|
+
prefix, Copy blob, Create container), Container, BlobName, InputFile, Prefix, BlobNames,
|
|
110
|
+
DestinationContainer, DestinationBlobName; outputs Result, UploadedBlobName, OutputFile,
|
|
111
|
+
Names, Details.
|
|
112
|
+
- **"Azure Storage Account" credential**, a new ROOT credential type `AZURE_STORAGE` (= 10),
|
|
113
|
+
live in `GET /api/Credentials/types`. Fields (`be_id`): `AuthenticationType` (radio; the
|
|
114
|
+
option values are GUIDs, their `be_value`s are `SharedKey` / `ServicePrincipal`),
|
|
115
|
+
`AccountName`, `AccountKey`, `TenantId`, `ClientId`, `ClientSecret`, `BlobEndpoint`. It is
|
|
116
|
+
NOT the older derived template "OAuth2 (REST API) / Azure Storage"
|
|
117
|
+
(`REST_API_OAUTH_PREDEFINED`). Contract in `dto/credential/description.md`.
|
|
118
|
+
- **Call Subprocess** gained two engine-written OUTPUT settings: "Call subprocess child
|
|
119
|
+
instance id" (`...a03fe3`) and "Call subprocess child instance id list" (`...a03fe4`). They
|
|
120
|
+
fill `Auto` (type 50) variables on the INSTANCE, named `{ActionName}_{PropertyName}` (e.g.
|
|
121
|
+
`Call_Subprocess_ChildInstanceId`). **Fixed in prod 2026-10-22:** both settings now come
|
|
122
|
+
back as type `auto` and their instance variables as `Auto` (type 50). The earlier state is
|
|
123
|
+
gone (2026-10-21 the settings were still served `ignore` and the variables typed 20, which
|
|
124
|
+
is why the old advice was to read them by name — no longer needed). The started-flow slot
|
|
125
|
+
(`...a03fe2`) stays type `ignore`; the builder treats `ignore` and `auto` alike and finds it
|
|
126
|
+
by id, so the fix needs no builder change (`_HIDDEN_SETTING_TYPES` already covers both). The
|
|
127
|
+
offline bundle (`dto/data/action_catalog.json`) was corrected to type the two slots `auto` to
|
|
128
|
+
match. Auto variables are engine-owned: read-only, always returned on instance / history /
|
|
129
|
+
archive reads, and kept through data-retention cleanup. The child instance ids are also kept
|
|
130
|
+
after the parent resumes.
|
|
131
|
+
- **Query Store** became multi-statement (see its entry above).
|
|
132
|
+
|
|
133
|
+
The offline bundle was refreshed for this wave on 2026-10-21 (238 actions: GUID Converter and
|
|
134
|
+
Azure Storage added, Call Subprocess and Query Store replaced).
|
|
135
|
+
|
|
136
|
+
## Scripting languages
|
|
137
|
+
|
|
138
|
+
Python, Javascript, Node, **Ruby**, and **CURL** - no C# scripting action (C# is the
|
|
139
|
+
custom-action NuGet path). Each takes a `Code` string and returns an output; Node adds a
|
|
140
|
+
`Timeout` (60-300) and a `Stdout` output (console.log capture, added 2026-09). See
|
|
141
|
+
`PROCESIO-NODE-MODULE-WHITELIST.md` / `PROCESIO-PYTHON-ACTION-NOTES.md` for the sandbox.
|