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,164 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Name": "Customer",
|
|
3
|
+
"DisplayName": "Customer",
|
|
4
|
+
"IsPublic": true,
|
|
5
|
+
"Content": {
|
|
6
|
+
"Id": "00000000-0000-0000-0000-000000000001",
|
|
7
|
+
"Name": "Customer",
|
|
8
|
+
"DisplayName": "Customer",
|
|
9
|
+
"IsDataModel": true,
|
|
10
|
+
"IsPrimaryType": false,
|
|
11
|
+
"IsProcesio": false,
|
|
12
|
+
"IsPublic": true,
|
|
13
|
+
"CsharpCorrespondent": 0,
|
|
14
|
+
"Type": 1,
|
|
15
|
+
"ParentIds": [],
|
|
16
|
+
"Attributes": [
|
|
17
|
+
{
|
|
18
|
+
"Id": "00000000-0000-0000-0000-000000000002",
|
|
19
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
20
|
+
"Name": "id",
|
|
21
|
+
"DisplayName": "id",
|
|
22
|
+
"DataTypeName": null,
|
|
23
|
+
"IsPrimaryType": false,
|
|
24
|
+
"IsProcesio": false,
|
|
25
|
+
"IsPublic": false,
|
|
26
|
+
"Type": 1,
|
|
27
|
+
"IsList": false,
|
|
28
|
+
"jsonProperty": "id",
|
|
29
|
+
"hidden": false,
|
|
30
|
+
"Attributes": [],
|
|
31
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121222",
|
|
32
|
+
"IsDataModel": false,
|
|
33
|
+
"CsharpCorrespondent": 100
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"Id": "00000000-0000-0000-0000-000000000003",
|
|
37
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
38
|
+
"Name": "name",
|
|
39
|
+
"DisplayName": "name",
|
|
40
|
+
"DataTypeName": null,
|
|
41
|
+
"IsPrimaryType": false,
|
|
42
|
+
"IsProcesio": false,
|
|
43
|
+
"IsPublic": false,
|
|
44
|
+
"Type": 1,
|
|
45
|
+
"IsList": false,
|
|
46
|
+
"jsonProperty": "name",
|
|
47
|
+
"hidden": false,
|
|
48
|
+
"Attributes": [],
|
|
49
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
50
|
+
"IsDataModel": false,
|
|
51
|
+
"CsharpCorrespondent": 50
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"Id": "00000000-0000-0000-0000-000000000004",
|
|
55
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
56
|
+
"Name": "age",
|
|
57
|
+
"DisplayName": "age",
|
|
58
|
+
"DataTypeName": null,
|
|
59
|
+
"IsPrimaryType": false,
|
|
60
|
+
"IsProcesio": false,
|
|
61
|
+
"IsPublic": false,
|
|
62
|
+
"Type": 1,
|
|
63
|
+
"IsList": false,
|
|
64
|
+
"jsonProperty": "age",
|
|
65
|
+
"hidden": false,
|
|
66
|
+
"Attributes": [],
|
|
67
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121211",
|
|
68
|
+
"IsDataModel": false,
|
|
69
|
+
"CsharpCorrespondent": 20
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"Id": "00000000-0000-0000-0000-000000000005",
|
|
73
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
74
|
+
"Name": "tags",
|
|
75
|
+
"DisplayName": "tags",
|
|
76
|
+
"DataTypeName": null,
|
|
77
|
+
"IsPrimaryType": false,
|
|
78
|
+
"IsProcesio": false,
|
|
79
|
+
"IsPublic": false,
|
|
80
|
+
"Type": 1,
|
|
81
|
+
"IsList": true,
|
|
82
|
+
"jsonProperty": "tags",
|
|
83
|
+
"hidden": false,
|
|
84
|
+
"Attributes": [],
|
|
85
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
86
|
+
"IsDataModel": false,
|
|
87
|
+
"CsharpCorrespondent": 50
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"Id": "00000000-0000-0000-0000-000000000006",
|
|
91
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
92
|
+
"Name": "address",
|
|
93
|
+
"DisplayName": "address",
|
|
94
|
+
"DataTypeName": null,
|
|
95
|
+
"IsPrimaryType": false,
|
|
96
|
+
"IsProcesio": false,
|
|
97
|
+
"IsPublic": false,
|
|
98
|
+
"Type": 1,
|
|
99
|
+
"IsList": false,
|
|
100
|
+
"jsonProperty": "address",
|
|
101
|
+
"hidden": false,
|
|
102
|
+
"Attributes": [
|
|
103
|
+
{
|
|
104
|
+
"Id": "00000000-0000-0000-0000-000000000008",
|
|
105
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000006",
|
|
106
|
+
"Name": "city",
|
|
107
|
+
"DisplayName": "city",
|
|
108
|
+
"DataTypeName": null,
|
|
109
|
+
"IsPrimaryType": false,
|
|
110
|
+
"IsProcesio": false,
|
|
111
|
+
"IsPublic": false,
|
|
112
|
+
"Type": 1,
|
|
113
|
+
"IsList": false,
|
|
114
|
+
"jsonProperty": "city",
|
|
115
|
+
"hidden": false,
|
|
116
|
+
"Attributes": [],
|
|
117
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
118
|
+
"IsDataModel": false,
|
|
119
|
+
"CsharpCorrespondent": 50
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"Id": "00000000-0000-0000-0000-000000000009",
|
|
123
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000006",
|
|
124
|
+
"Name": "zip",
|
|
125
|
+
"DisplayName": "zip",
|
|
126
|
+
"DataTypeName": null,
|
|
127
|
+
"IsPrimaryType": false,
|
|
128
|
+
"IsProcesio": false,
|
|
129
|
+
"IsPublic": false,
|
|
130
|
+
"Type": 1,
|
|
131
|
+
"IsList": false,
|
|
132
|
+
"jsonProperty": "zip",
|
|
133
|
+
"hidden": false,
|
|
134
|
+
"Attributes": [],
|
|
135
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
136
|
+
"IsDataModel": false,
|
|
137
|
+
"CsharpCorrespondent": 50
|
|
138
|
+
}
|
|
139
|
+
],
|
|
140
|
+
"DataTypeId": "00000000-0000-0000-0000-000000000007",
|
|
141
|
+
"IsDataModel": true,
|
|
142
|
+
"CsharpCorrespondent": 0
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"Id": "00000000-0000-0000-0000-000000000010",
|
|
146
|
+
"ParentDataTypeId": "00000000-0000-0000-0000-000000000001",
|
|
147
|
+
"Name": "owner",
|
|
148
|
+
"DisplayName": "owner",
|
|
149
|
+
"DataTypeName": null,
|
|
150
|
+
"IsPrimaryType": false,
|
|
151
|
+
"IsProcesio": false,
|
|
152
|
+
"IsPublic": false,
|
|
153
|
+
"Type": 1,
|
|
154
|
+
"IsList": false,
|
|
155
|
+
"jsonProperty": "owner",
|
|
156
|
+
"hidden": false,
|
|
157
|
+
"Attributes": [],
|
|
158
|
+
"DataTypeId": "11111111-1111-1111-1111-111111111111",
|
|
159
|
+
"IsDataModel": true,
|
|
160
|
+
"CsharpCorrespondent": 0
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_note": "Golden CreateDataTypeDto shape (POST /api/DataTypes body). <PLACEHOLDERS> are filled by builder.py. The server REASSIGNS all Id/ParentDataTypeId values and derives attribute types from DataTypeId, so client ids are positional only. CsharpCorrespondent on the model is 0; on a primitive attribute it mirrors the PrimaryDataType enum (String=50, Integer=20, ...). Captured live 2026-06-24 against 4Export.",
|
|
3
|
+
"Name": "<name>",
|
|
4
|
+
"DisplayName": "<displayName>",
|
|
5
|
+
"IsPublic": true,
|
|
6
|
+
"Content": {
|
|
7
|
+
"Id": "<uuid: model>",
|
|
8
|
+
"Name": "<name>",
|
|
9
|
+
"DisplayName": "<displayName>",
|
|
10
|
+
"IsDataModel": true,
|
|
11
|
+
"IsPrimaryType": false,
|
|
12
|
+
"IsProcesio": false,
|
|
13
|
+
"IsPublic": true,
|
|
14
|
+
"CsharpCorrespondent": 0,
|
|
15
|
+
"Type": 1,
|
|
16
|
+
"ParentIds": [],
|
|
17
|
+
"Attributes": [
|
|
18
|
+
{
|
|
19
|
+
"Id": "<uuid: attr>",
|
|
20
|
+
"DataTypeId": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
21
|
+
"ParentDataTypeId": "<uuid: model>",
|
|
22
|
+
"Name": "<attr name>",
|
|
23
|
+
"DisplayName": "<attr name>",
|
|
24
|
+
"DataTypeName": null,
|
|
25
|
+
"IsDataModel": false,
|
|
26
|
+
"IsPrimaryType": false,
|
|
27
|
+
"IsProcesio": false,
|
|
28
|
+
"IsPublic": false,
|
|
29
|
+
"CsharpCorrespondent": 50,
|
|
30
|
+
"Type": 1,
|
|
31
|
+
"IsList": false,
|
|
32
|
+
"jsonProperty": "<attr name>",
|
|
33
|
+
"Attributes": []
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"""Document template builder — PURE config -> DocumentTemplateDto.
|
|
2
|
+
|
|
3
|
+
A document template is reusable rich-text/HTML with `<%placeholder%>` variables,
|
|
4
|
+
rendered by the "Generate Document" action in a process.
|
|
5
|
+
|
|
6
|
+
API (verified live 2026-06-24):
|
|
7
|
+
- Create: POST /api/DocumentTemplate (client-supplied id; returns empty)
|
|
8
|
+
- Get: GET /api/DocumentTemplate/{id}
|
|
9
|
+
- Edit: PUT /api/DocumentTemplate
|
|
10
|
+
- Delete: DELETE /api/DocumentTemplate/{id}
|
|
11
|
+
"""
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import re
|
|
15
|
+
import uuid
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from tools.procesio.dto import refdata
|
|
19
|
+
from tools.procesio.dto.framework import Component
|
|
20
|
+
from tools.procesio.errors import UsageError
|
|
21
|
+
|
|
22
|
+
DIR = Path(__file__).resolve().parent
|
|
23
|
+
|
|
24
|
+
_ORIENTATION = {"portrait": 0, "landscape": 1}
|
|
25
|
+
|
|
26
|
+
# The document designer's page sizes (its saved `documentPageSize` keys; "" is its "Default",
|
|
27
|
+
# A4). The designer matches them EXACTLY and case-sensitively, and any other value is silently
|
|
28
|
+
# reset to Default the next time someone re-saves the document in the UI. So a size is mapped to
|
|
29
|
+
# its canonical spelling here, and an unknown one is refused instead of being written.
|
|
30
|
+
_PAGE_SIZES = ("", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9",
|
|
31
|
+
"B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10",
|
|
32
|
+
"C5E", "Comm10E", "DLE", "Executive", "Folio", "Ledger", "Legal",
|
|
33
|
+
"Letter", "Tabloid")
|
|
34
|
+
_PAGE_SIZE_BY_KEY = {s.lower(): s for s in _PAGE_SIZES}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _page_size(value) -> str:
|
|
38
|
+
key = "" if value is None else str(value).strip()
|
|
39
|
+
canon = _PAGE_SIZE_BY_KEY.get(key.lower())
|
|
40
|
+
if canon is None:
|
|
41
|
+
valid = ", ".join(s or '""' for s in _PAGE_SIZES)
|
|
42
|
+
raise UsageError(f"unknown pageSize {value!r}: the document designer resets it to Default "
|
|
43
|
+
f"on the next save. Use one of: {valid}")
|
|
44
|
+
return canon
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _new_id(ctx) -> str:
|
|
48
|
+
return (ctx.get("new_id") or (lambda: str(uuid.uuid4())))()
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _esc(s: str) -> str:
|
|
52
|
+
"""HTML-entity-encode & < > " exactly like the PROCESIO document editor persists."""
|
|
53
|
+
return (s.replace("&", "&").replace("<", "<")
|
|
54
|
+
.replace(">", ">").replace('"', """))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _encode_body(body: str) -> str:
|
|
58
|
+
"""PROCESIO's document editor stores the body HTML-ENTITY-ENCODED and SINGLE-LINE.
|
|
59
|
+
The renderer DECODES then walks the resulting DOM to substitute placeholders and to
|
|
60
|
+
detect a list<model> repeating <tr> (the single <tbody><tr> whose <td>s carry
|
|
61
|
+
`<%listVarId.attrId%>` is cloned once per list element). A RAW, multi-line body pushed
|
|
62
|
+
via the API is never recognised by that DOM walk -> list-bound tables render every
|
|
63
|
+
`<%hits.*%>` cell as "Unknown" (verified live: every working list<model> doc stores
|
|
64
|
+
`<%`, our raw-HTML doc was the lone exception). So mirror the editor: collapse
|
|
65
|
+
whitespace around newlines to a single line, then entity-encode (placeholders
|
|
66
|
+
`<%id%>` become `<%id%>`)."""
|
|
67
|
+
return _esc(re.sub(r"\s*\n\s*", "", body or ""))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _variable(v: dict, ctx: dict) -> dict:
|
|
71
|
+
if "model" in v:
|
|
72
|
+
ref = v["model"].strip()
|
|
73
|
+
dt = ctx.get("models", {}).get(ref.lower()) or ref
|
|
74
|
+
else:
|
|
75
|
+
dt = refdata.primitive_type_id(v.get("type", "string"))
|
|
76
|
+
return {
|
|
77
|
+
"id": _new_id(ctx), "dataType": dt, "type": 10, "name": v["name"],
|
|
78
|
+
"defaultValue": v.get("default"), "isList": bool(v.get("isList", False)),
|
|
79
|
+
# Document-template variables are placeholders FILLED BY the Generate Document
|
|
80
|
+
# action (destinations) — never flow inputs. Real templates store isInput:false
|
|
81
|
+
# for every variable (scalar AND list). With isInput:true the designer treats a
|
|
82
|
+
# list<model> var as a flat input and WON'T expand its model attributes -> the
|
|
83
|
+
# repeating table can't bind those fields and renders "Unknown". So default false.
|
|
84
|
+
"isInput": bool(v.get("isInput", False)), "isOutput": bool(v.get("isOutput", False)),
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _resolve_body_placeholders(body: str, name_to_id: dict, var_attrs: dict) -> str:
|
|
89
|
+
"""The render engine resolves body placeholders by variable **id** (and for a
|
|
90
|
+
repeating table over a list model, by `<%listId.attrId%>`). Authors write
|
|
91
|
+
friendly names; translate `<%name%>` -> `<%id%>` and `<%listName.attrName%>` ->
|
|
92
|
+
`<%listId.attrId%>` (var_attrs[listName] = {attrName: attrId})."""
|
|
93
|
+
def sub(m):
|
|
94
|
+
inner = m.group(1)
|
|
95
|
+
head, _, rest = inner.partition(".")
|
|
96
|
+
key = head.strip().lower()
|
|
97
|
+
vid = name_to_id.get(key)
|
|
98
|
+
if not vid:
|
|
99
|
+
return m.group(0)
|
|
100
|
+
if rest:
|
|
101
|
+
attr_id = (var_attrs.get(key) or {}).get(rest.strip().lower(), rest)
|
|
102
|
+
return f"<%{vid}.{attr_id}%>"
|
|
103
|
+
return f"<%{vid}%>"
|
|
104
|
+
return re.sub(r"<%([^%]+)%>", sub, body)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def build(config: dict, ctx: dict) -> dict:
|
|
108
|
+
ctx = dict(ctx)
|
|
109
|
+
orient = config.get("orientation", "portrait")
|
|
110
|
+
orient_code = _ORIENTATION.get(str(orient).strip().lower(), orient if isinstance(orient, int) else 0)
|
|
111
|
+
variables = [_variable(v, ctx) for v in config.get("variables", [])]
|
|
112
|
+
name_to_id = {(c.get("name") or "").strip().lower(): v["id"]
|
|
113
|
+
for c, v in zip(config.get("variables", []), variables)}
|
|
114
|
+
body = _resolve_body_placeholders(config.get("body", ""), name_to_id,
|
|
115
|
+
ctx.get("var_attrs", {}))
|
|
116
|
+
body = _encode_body(body) # editor-format: encoded + single-line (binds list tables)
|
|
117
|
+
return {
|
|
118
|
+
"id": ctx.get("doc_id") or _new_id(ctx),
|
|
119
|
+
"name": config["name"],
|
|
120
|
+
"description": config.get("description"),
|
|
121
|
+
"body": body,
|
|
122
|
+
"placeholderDelimiterStart": _esc(config.get("placeholderStart", "<%")),
|
|
123
|
+
"placeholderDelimiterStop": _esc(config.get("placeholderStop", "%>")),
|
|
124
|
+
"documentPageSize": _page_size(config.get("pageSize", "A4")),
|
|
125
|
+
"documentPageOrientation": orient_code,
|
|
126
|
+
"variables": variables,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def prepare_ctx(client, config: dict) -> dict:
|
|
131
|
+
# NOTE: list<model> repeating tables DO work (proven by the Round 12 render test in
|
|
132
|
+
# PHASE4-E2E-NOTES.md) — bind `<%listVar.attr%>` in one <tr> and feed the whole list
|
|
133
|
+
# in one Generate-Document mapping (destination.attribute null), with the list fed
|
|
134
|
+
# via a process variable typed as the item model (isList:true) + a JSON-array
|
|
135
|
+
# DefaultValue. The two requirements: (1) the editor body encoding handled by
|
|
136
|
+
# _encode_body in build(); (2) the item data model must be created with ALL its
|
|
137
|
+
# attributes in the initial POST /api/DataTypes — attributes added later via the
|
|
138
|
+
# /api/DataTypes/attribute edit path are missing from the runtime's COMPILED model
|
|
139
|
+
# and render as "Unknown" / "Unable to find attribute <id>". There is no platform
|
|
140
|
+
# limit on list tables — the earlier "dead-end" warning was the stale compiled model.
|
|
141
|
+
model_vars = [v for v in config.get("variables", []) if v.get("model")]
|
|
142
|
+
if not model_vars:
|
|
143
|
+
return {}
|
|
144
|
+
models: dict[str, str] = {}
|
|
145
|
+
r = client.get("/api/DataTypes", {"addProperties": False, "pageNumber": 1,
|
|
146
|
+
"pageItemCount": 500, "includeProcesioEntries": True,
|
|
147
|
+
"includeExternalEntries": True})
|
|
148
|
+
for it in (r.get("pageItems") if isinstance(r, dict) else r) or []:
|
|
149
|
+
nm = (it.get("name") or it.get("Name") or "").strip().lower()
|
|
150
|
+
if nm:
|
|
151
|
+
models[nm] = it.get("id") or it.get("Id")
|
|
152
|
+
# for each model-typed variable, fetch its model's attribute name->id (so a body
|
|
153
|
+
# table `<%varName.attrName%>` can be translated to `<%varId.attrId%>`)
|
|
154
|
+
var_attrs: dict[str, dict] = {}
|
|
155
|
+
for v in model_vars:
|
|
156
|
+
ref = v["model"].strip()
|
|
157
|
+
mid = models.get(ref.lower()) or ref
|
|
158
|
+
try:
|
|
159
|
+
m = client.get(f"/api/DataTypes/{mid}")
|
|
160
|
+
var_attrs[(v.get("name") or "").strip().lower()] = {
|
|
161
|
+
(a.get("name") or "").strip().lower(): a.get("id")
|
|
162
|
+
for a in (m.get("attributes") or [])}
|
|
163
|
+
except Exception: # noqa: BLE001
|
|
164
|
+
pass
|
|
165
|
+
return {"models": models, "var_attrs": var_attrs}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _extract_id(resp, dto):
|
|
169
|
+
# POST returns empty; the template keeps the client-supplied id.
|
|
170
|
+
if isinstance(resp, dict) and (resp.get("id") or resp.get("Id")):
|
|
171
|
+
return resp.get("id") or resp.get("Id")
|
|
172
|
+
return dto.get("id") if isinstance(dto, dict) else None
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _edit(client, resource_id, config, ctx):
|
|
176
|
+
ctx = dict(ctx)
|
|
177
|
+
ctx["doc_id"] = resource_id
|
|
178
|
+
dto = build(config, ctx)
|
|
179
|
+
client.put("/api/DocumentTemplate", dto)
|
|
180
|
+
return client.get(f"/api/DocumentTemplate/{resource_id}")
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
COMPONENT = Component(
|
|
184
|
+
name="document",
|
|
185
|
+
description="PROCESIO document template: HTML body with <%placeholder%> variables.",
|
|
186
|
+
dir=DIR,
|
|
187
|
+
build=build,
|
|
188
|
+
create_endpoint=("POST", "/api/DocumentTemplate"),
|
|
189
|
+
get_path="/api/DocumentTemplate/{id}",
|
|
190
|
+
extract_id=_extract_id,
|
|
191
|
+
prepare_ctx=prepare_ctx,
|
|
192
|
+
edit=_edit,
|
|
193
|
+
)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"title": "PROCESIO Document Template config",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": ["name", "body"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {"type": "string", "minLength": 1},
|
|
9
|
+
"description": {"type": "string"},
|
|
10
|
+
"body": {"type": "string", "description": "HTML body; reference variables as <%name%>"},
|
|
11
|
+
"pageSize": {"type": "string", "default": "A4"},
|
|
12
|
+
"orientation": {"type": "string", "enum": ["portrait", "landscape"], "default": "portrait"},
|
|
13
|
+
"placeholderStart": {"type": "string", "default": "<%"},
|
|
14
|
+
"placeholderStop": {"type": "string", "default": "%>"},
|
|
15
|
+
"variables": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"additionalProperties": false,
|
|
20
|
+
"required": ["name"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"name": {"type": "string", "minLength": 1},
|
|
23
|
+
"type": {"type": "string", "enum": ["boolean", "integer", "float", "double", "string", "datetime", "json", "object", "guid", "bool", "int", "long", "number", "text", "str", "uuid", "date-time"]},
|
|
24
|
+
"model": {"type": "string"},
|
|
25
|
+
"isList": {"type": "boolean", "default": false},
|
|
26
|
+
"isInput": {"type": "boolean", "default": true},
|
|
27
|
+
"isOutput": {"type": "boolean", "default": false},
|
|
28
|
+
"default": {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Document Template sub-tool
|
|
2
|
+
|
|
3
|
+
Create/edit a PROCESIO **document template** — HTML with `<%placeholder%>`
|
|
4
|
+
variables, rendered to PDF/DOCX by the **Generate Document** action in a process.
|
|
5
|
+
|
|
6
|
+
## Config
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"name": "Invoice",
|
|
11
|
+
"body": "<div>Hello <%clientName%>, your total is <%total%>.</div>",
|
|
12
|
+
"pageSize": "A4",
|
|
13
|
+
"orientation": "portrait",
|
|
14
|
+
"variables": [
|
|
15
|
+
{"name": "clientName", "type": "string"},
|
|
16
|
+
{"name": "total", "type": "double"}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- **body** — author it as raw HTML; reference variables with `<%name%>` (default
|
|
22
|
+
delimiters, overridable via `placeholderStart`/`placeholderStop`). The builder does
|
|
23
|
+
NOT store it raw — it mirrors PROCESIO's document editor: HTML-entity-encoded
|
|
24
|
+
(`<%…%>`) and collapsed to a single line. That editor format is what lets the
|
|
25
|
+
renderer's DOM walk recognise and clone a repeating list `<tr>`; a raw multi-line body
|
|
26
|
+
pushed via the API renders list cells as "Unknown" (see `_encode_body` in `builder.py`).
|
|
27
|
+
- **variables** — `DocumentVariableDto`. `type` (primitive) or `model`; `isList`,
|
|
28
|
+
`isInput` (default **false** — template vars are destinations FILLED BY Generate
|
|
29
|
+
Document, not flow inputs; `isInput:true` stops the designer expanding a `list<model>`
|
|
30
|
+
var's attributes, so the repeating table can't bind), `isOutput`.
|
|
31
|
+
- **orientation** — `portrait` (0) or `landscape` (1). **pageSize** — e.g. `A4` (valid values
|
|
32
|
+
below).
|
|
33
|
+
|
|
34
|
+
## API contract (verified live 2026-06-24)
|
|
35
|
+
|
|
36
|
+
- **Create:** `POST /api/DocumentTemplate` — client-supplies `id`, returns empty.
|
|
37
|
+
- **Get:** `GET /api/DocumentTemplate/{id}`.
|
|
38
|
+
- **Edit:** `PUT /api/DocumentTemplate`.
|
|
39
|
+
- **Delete:** `DELETE /api/DocumentTemplate/{id}`.
|
|
40
|
+
|
|
41
|
+
## Using a document in a process
|
|
42
|
+
|
|
43
|
+
Add a **Generate Document** action: bind "Select Document Template" to the template
|
|
44
|
+
id (REQUIRED — without it the action 502s "Missing document information"; the
|
|
45
|
+
`HTML string` property is an OUTPUT, not an input), map the template variables via
|
|
46
|
+
"Map Document Data", choose "Save document as" (PDF=1/HTML=2) and "File Name", and
|
|
47
|
+
capture "Document Output" into a File variable. Run the process and read the output
|
|
48
|
+
file from the instance (`GET /api/File/download`).
|
|
49
|
+
|
|
50
|
+
## Scalar binding works; list-bound repeating tables ALSO work
|
|
51
|
+
|
|
52
|
+
**Verified live:** scalar `<%name%>` placeholders bind and render correctly; the
|
|
53
|
+
designer shows them as resolved chips. Bind a body image with `<img src="<%url%>">`.
|
|
54
|
+
|
|
55
|
+
**Repeating tables over a `list` model work too** (proven by the Round 12 decisive
|
|
56
|
+
render test in `PHASE4-E2E-NOTES.md`). A single `<tbody><tr>` whose `<td>`s carry
|
|
57
|
+
`<%listVar.attr%>` placeholders (`<%hits.title%>` -> `<%hitsId.attrId%>`) is cloned
|
|
58
|
+
once per list element — that one `<tr>` IS the repeating syntax. The fresh-model run
|
|
59
|
+
emitted one row per list item (3 hits -> 3 rows), zero "Unknown".
|
|
60
|
+
|
|
61
|
+
**Put the header row in `<thead>` and the repeating `<tr>` in `<tbody>`.** Generate
|
|
62
|
+
Document fails a list table whose header row sits in `<tbody>` with "Sequence contains no
|
|
63
|
+
elements" (checked at v3.0.0, 2026-10).
|
|
64
|
+
|
|
65
|
+
**Feed the typed list — no scripting required.** Declare a process variable typed as
|
|
66
|
+
the item model with `isList:true` and a `DefaultValue` that is a JSON array of
|
|
67
|
+
objects (or supply any already-populated list var); it hydrates into the typed list
|
|
68
|
+
at runtime. In the Generate Document `docMap`, map the doc's list variable to that
|
|
69
|
+
process list variable with `destination.attribute = null` — one mapping binds the
|
|
70
|
+
whole list to the table.
|
|
71
|
+
|
|
72
|
+
**Critical — create the data model with ALL attributes up front (`POST /api/DataTypes`).**
|
|
73
|
+
The earlier "Unknown" / `Unable to find attribute <id>` failures were NOT a platform
|
|
74
|
+
limit — they were a stale compiled model. Attributes added later via the
|
|
75
|
+
`/api/DataTypes/attribute` edit path are MISSING from the runtime's COMPILED model,
|
|
76
|
+
so the designer renders those cells as "Unknown" chips and Generate Document throws
|
|
77
|
+
`Unable to find attribute <id> ... ensure the data model attributes are defined
|
|
78
|
+
correctly` at render time. A model created with every attribute in the initial
|
|
79
|
+
`POST /api/DataTypes` compiles correctly and renders. (Round 12: a fresh 6-attribute
|
|
80
|
+
model + identical `<%hits.attr%>` table -> status 50, valid PDF, all rows; the
|
|
81
|
+
original attribute-edited model -> status 40, attribute-resolution error.)
|
|
82
|
+
|
|
83
|
+
**HTML-string shell — still a valid alternative** (use when the layout itself is
|
|
84
|
+
fully dynamic, not just the rows):
|
|
85
|
+
1. A document = a single `<%htmlContent%>` placeholder (one `string` variable).
|
|
86
|
+
2. A Scripting action builds the FULL HTML (header, table rows, image) as a string,
|
|
87
|
+
output into an envelope model `{result: string}` (a JS output is wrapped
|
|
88
|
+
`{result: v}`, and `result` maps cleanly only when it is a **primitive**).
|
|
89
|
+
3. Generate Document `docMap`: `htmlContent <- {var: htmlEnv, path: [result_attr_id]}`.
|
|
90
|
+
The `<%htmlContent%>` placeholder substitutes the raw HTML -> the PDF renders the full
|
|
91
|
+
branded layout, table and image. (Proven live: `AAT_BriefShell` + `AAT_Process_SearchGenerate`.)
|
|
92
|
+
|
|
93
|
+
## The designer re-save normalises the HTML (Tiptap, v3.0.0, 2026-10)
|
|
94
|
+
|
|
95
|
+
The document designer replaced Froala with **Tiptap 3**. The save payload is unchanged
|
|
96
|
+
(entity-encoded `body`, delimiters, `documentPageSize`, `documentPageOrientation`,
|
|
97
|
+
`variables`), but saving a template from the UI NORMALISES its HTML, so a body the tool
|
|
98
|
+
wrote is not byte-stable once someone opens and saves it in the designer:
|
|
99
|
+
|
|
100
|
+
- header rows move into `<thead>` (also leading all-`<th>` rows found in `<tbody>`);
|
|
101
|
+
- runs of spaces become ` `, and empty blocks get a `<br>`;
|
|
102
|
+
- `break-*` CSS becomes `page-break-*`;
|
|
103
|
+
- `on*`, `srcdoc` and `javascript:` attributes are stripped;
|
|
104
|
+
- `<style>`, `<script>`, `<form>` and `<svg>` are kept verbatim as raw HTML;
|
|
105
|
+
- placeholders inside attributes or raw HTML are left as written;
|
|
106
|
+
- `fr-*` classes are kept (the PDF is still styled with Froala's stylesheet);
|
|
107
|
+
- a leaf `<section>` / `<header>` becomes a `<div>`;
|
|
108
|
+
- entities are no longer double-decoded.
|
|
109
|
+
|
|
110
|
+
Compare a template before and after a designer save by these rules, not byte for byte.
|
|
111
|
+
|
|
112
|
+
**Header, footer and page-number markers.** The body carries them as a LEADING
|
|
113
|
+
`<style class="pup-c-template-page-number">`, a LEADING
|
|
114
|
+
`<header class="pup-c-template-header" data-height>`, and a TRAILING
|
|
115
|
+
`<footer class="pup-c-template-footer">`. Keep each in its position when editing a body.
|
|
116
|
+
|
|
117
|
+
**Valid `documentPageSize` values** (the config's `pageSize`): `A0`-`A9`, `B0`-`B10`, `C5E`,
|
|
118
|
+
`Comm10E`, `DLE`, `Executive`, `Folio`, `Ledger`, `Legal`, `Letter`, `Tabloid`, and `""` (the
|
|
119
|
+
designer's Default). An unknown value is silently reset to Default on the next UI save, so the
|
|
120
|
+
builder maps a size to its canonical spelling and refuses an unknown one.
|
|
121
|
+
|
|
122
|
+
**PDF styling is pinned.** Generate Document and HTML to PDF embed the **Froala 5.5.0** CSS in
|
|
123
|
+
the PDF, and the HTML-string output links the `froala-editor` package at version 5.5.0 instead of `@latest`. Document
|
|
124
|
+
CSS is kept as written, and a `url(data:image/png;base64,...)` is no longer truncated.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Invoice",
|
|
3
|
+
"body": "<div>Hello <%clientName%>, total <%total%>.</div>",
|
|
4
|
+
"pageSize": "A4",
|
|
5
|
+
"orientation": "portrait",
|
|
6
|
+
"variables": [
|
|
7
|
+
{
|
|
8
|
+
"name": "clientName",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "total",
|
|
13
|
+
"type": "double"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "00000000-0000-0000-0000-000000000003",
|
|
3
|
+
"name": "Invoice",
|
|
4
|
+
"description": null,
|
|
5
|
+
"body": "<div>Hello <%00000000-0000-0000-0000-000000000001%>, total <%00000000-0000-0000-0000-000000000002%>.</div>",
|
|
6
|
+
"placeholderDelimiterStart": "<%",
|
|
7
|
+
"placeholderDelimiterStop": "%>",
|
|
8
|
+
"documentPageSize": "A4",
|
|
9
|
+
"documentPageOrientation": 0,
|
|
10
|
+
"variables": [
|
|
11
|
+
{
|
|
12
|
+
"id": "00000000-0000-0000-0000-000000000001",
|
|
13
|
+
"dataType": "0317bfee-b2f5-4bde-bfe8-121212121214",
|
|
14
|
+
"type": 10,
|
|
15
|
+
"name": "clientName",
|
|
16
|
+
"defaultValue": null,
|
|
17
|
+
"isList": false,
|
|
18
|
+
"isInput": false,
|
|
19
|
+
"isOutput": false
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "00000000-0000-0000-0000-000000000002",
|
|
23
|
+
"dataType": "0317bfee-b2f5-4bde-bfe8-121212121213",
|
|
24
|
+
"type": 10,
|
|
25
|
+
"name": "total",
|
|
26
|
+
"defaultValue": null,
|
|
27
|
+
"isList": false,
|
|
28
|
+
"isInput": false,
|
|
29
|
+
"isOutput": false
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_note": "Golden DocumentTemplateDto (POST /api/DocumentTemplate body). Client supplies id (server returns empty on success). body is HTML with <%name%> placeholders (stored RAW — verified live, NOT escaped). documentPageOrientation: 0=portrait, 1=landscape. variables -> DocumentVariableDto {id, dataType, type:10, name, isList, isInput, isOutput}. Captured live 2026-06-24.",
|
|
3
|
+
"id": "<uuid: doc>",
|
|
4
|
+
"name": "<name>",
|
|
5
|
+
"description": null,
|
|
6
|
+
"body": "<div>Hello <%clientName%></div>",
|
|
7
|
+
"placeholderDelimiterStart": "<%",
|
|
8
|
+
"placeholderDelimiterStop": "%>",
|
|
9
|
+
"documentPageSize": "A4",
|
|
10
|
+
"documentPageOrientation": 0,
|
|
11
|
+
"variables": [
|
|
12
|
+
{"id": "<uuid: var>", "dataType": "0317bfee-b2f5-4bde-bfe8-121212121214", "type": 10, "name": "clientName", "defaultValue": null, "isList": false, "isInput": true, "isOutput": false}
|
|
13
|
+
]
|
|
14
|
+
}
|