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,308 @@
|
|
|
1
|
+
# 09 — Navigation between forms, public URLs, and what the host shell always shows
|
|
2
|
+
|
|
3
|
+
Verified in a live browser against the deployed runtime, 2026-09-03. This is the chapter to
|
|
4
|
+
read before designing a multi-form product (a control panel, a wizard, a "app made of forms").
|
|
5
|
+
|
|
6
|
+
## 1. A form has NO URL until one is minted — and only the server's tiny URL resolves
|
|
7
|
+
|
|
8
|
+
There is no id-based public URL. `GET <gateway>/<formId>` is a 404. A form is unreachable
|
|
9
|
+
until a CustomUrl record exists, and what then resolves is the **server-minted `tinyUrl`**,
|
|
10
|
+
not the human slug you supplied.
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
POST /api/CustomUrl/FormTemplate
|
|
14
|
+
{"workspaceId": "...", "entityId": "<formId>", "entityType": 1, "type": 3, "url": "my-slug"}
|
|
15
|
+
→ {"id": "...", "url": "my-slug", "tinyUrl": "q0aQ3f_zmC"}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| tried | result |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `<host>/q0aQ3f_zmC` (server tinyUrl) | **200** |
|
|
21
|
+
| `<host>/my-slug` (your slug) | 404 |
|
|
22
|
+
| `<host>/<formId>` | 404 |
|
|
23
|
+
|
|
24
|
+
The SPA route table has exactly two public shapes:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/:entityUrl ← the tinyUrl route
|
|
28
|
+
/:masterWorkspaceUrl/:subWorkspaceUrl/:entityUrl ← vanity, needs BOTH other segments minted
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Your slug is only ever the **third** segment. The readable 3-segment address therefore needs
|
|
32
|
+
`CustomUrl/MasterWorkspace` and `CustomUrl/Workspace` records minted first (bare JSON-string
|
|
33
|
+
bodies, reserved words rejected) — an installation-wide act, not a per-form one.
|
|
34
|
+
|
|
35
|
+
**CustomUrl changes a PATH, never a hostname.** The host is fixed per installation.
|
|
36
|
+
|
|
37
|
+
## 2. Navigating from one form to another — the proven recipe
|
|
38
|
+
|
|
39
|
+
A button can navigate. Use an element-event, never form-level code:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python scripts/run-tool.py procesio form-set-element-event \
|
|
43
|
+
--id <form> --element <buttonName> --on click --action RUN_JAVASCRIPT --config-file nav.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{"code": "var W = (window.parent && window.parent !== window) ? window.parent : window;\nW.location.assign('https://<forms-host>/<tinyUrl>');"}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Why it is allowed:** the trigger sandbox is a same-origin `srcdoc` iframe carrying **no
|
|
51
|
+
`sandbox` attribute**, so assigning `window.parent.location` is permitted.
|
|
52
|
+
|
|
53
|
+
**The event config is PLAINTEXT** — verified by reading it back from a fresh GET, and again in
|
|
54
|
+
the anonymous payload served to any browser. This is a different surface from `Data.code`
|
|
55
|
+
(which is AES-encrypted); element-event JS does not depend on the form-code key.
|
|
56
|
+
|
|
57
|
+
### Adding an event without destroying the one already there
|
|
58
|
+
|
|
59
|
+
| flag | effect |
|
|
60
|
+
|---|---|
|
|
61
|
+
| none (append) | adds; existing events survive (`event_count` 1 → 2) |
|
|
62
|
+
| `--replace` | **discards ALL events on that trigger**, with a warning that does not block |
|
|
63
|
+
| `--replace-action <ACTION>` | swaps that one action in place; others untouched; slot order kept, event id is new |
|
|
64
|
+
|
|
65
|
+
Never use bare `--replace` on a trigger you did not just create.
|
|
66
|
+
|
|
67
|
+
`TRIGGER_FORM` is a different mechanism — the assignee / task-dispatch path, executed by the
|
|
68
|
+
host app — and is **not** established as browser navigation. Use `RUN_JAVASCRIPT`.
|
|
69
|
+
|
|
70
|
+
## 3. What the host shell shows no matter what you configure
|
|
71
|
+
|
|
72
|
+
`hideBranding: true` removes **exactly one thing**: the bottom "Built with PROCESIO" banner
|
|
73
|
+
and its click-through. Confirmed against the renderer source and side by side in a browser.
|
|
74
|
+
|
|
75
|
+
Everything else in the topbar is unconditional: the platform logo linking to the main app, the
|
|
76
|
+
form's **name** (not `browserTitle`), a theme toggle, and a hard-coded ` - PROCESIO` suffix on
|
|
77
|
+
the tab title. For a **signed-in** visitor it additionally renders `Workspace: <name>` and a
|
|
78
|
+
user-avatar menu — platform chrome inside what you may have promised as a plain app.
|
|
79
|
+
|
|
80
|
+
There is also an anti-hiding guard in the deployed bundle: form-level CSS is scrubbed of the
|
|
81
|
+
branding class name before injection. (It uses a string `replace`, so it removes only the
|
|
82
|
+
first occurrence — but do not build on that.)
|
|
83
|
+
|
|
84
|
+
**Consequence for product promises:** "the user never sees the platform" is not achievable
|
|
85
|
+
through form configuration on a shared host. It is a property of the installation, not of the
|
|
86
|
+
form DTO. Establish which host a customer will be on before promising a white-labelled app.
|
|
87
|
+
|
|
88
|
+
### Form CSS CAN hide the topbar (measured 2026-10-17)
|
|
89
|
+
|
|
90
|
+
"Unconditional" above is about configuration: no DTO flag removes the topbar. Form-level CSS
|
|
91
|
+
does. On a public form opened anonymously, `.pds-c-topbar { display: none !important; }`
|
|
92
|
+
removed it completely (computed `display: none`, nothing left on screen). Only the branding
|
|
93
|
+
class is scrubbed from form CSS, and the topbar does not carry it, so the bottom
|
|
94
|
+
"Built with PROCESIO" banner is the one piece of host chrome that stays.
|
|
95
|
+
|
|
96
|
+
Since the form CSS became scoped (v3.0.0, 2026-10), a plain `.pds-c-topbar` rule no longer
|
|
97
|
+
reaches the topbar. Put it in an `@import` of a `data:` stylesheet, which is not scoped and
|
|
98
|
+
hides the topbar from the first frame ([02](02-CODE-INJECTION.md) §2).
|
|
99
|
+
|
|
100
|
+
### Drawing a whole web page over a form (measured 2026-10-17)
|
|
101
|
+
|
|
102
|
+
A form can serve as a website: keep the native controls as an off-screen bridge and draw the
|
|
103
|
+
visible page yourself from the form-JS runtime ([02](02-CODE-INJECTION.md) §4).
|
|
104
|
+
- Move the form off screen, do not remove it: `.form-builder--form { position: absolute;
|
|
105
|
+
left: -10000px; }`. Its controls must stay registered to carry values to a process.
|
|
106
|
+
- **The host page scrolls inside its own container, not the body.** A node appended to
|
|
107
|
+
`document.body` renders below the fold and the screen looks empty. Pin the page over the
|
|
108
|
+
viewport (`position: fixed; top: 0; left: 0; right: 0; bottom: 32px; overflow-y: auto`)
|
|
109
|
+
so it scrolls itself; the 32px leaves the branding banner visible.
|
|
110
|
+
- Inter-page links work with context in the query string (`?visitor=…&unit=…`): the target
|
|
111
|
+
form pre-fills the matching controls and its runtime reads them.
|
|
112
|
+
- Measured on the public host: the drawn page appeared about 2.2 s after navigation and the
|
|
113
|
+
first process-backed results about 3.1 s after. Show a skeleton, not a blank screen.
|
|
114
|
+
|
|
115
|
+
## 4. Private forms and anonymous visitors
|
|
116
|
+
|
|
117
|
+
A private form opened without a session returns 401 and renders a dead end — *"Form not
|
|
118
|
+
found — the link may be outdated, the form may have been removed, or you may not have
|
|
119
|
+
access."* **There is no sign-in prompt and no redirect to a login.** A runner handed a link
|
|
120
|
+
who is not already signed in simply cannot get in from there.
|
|
121
|
+
|
|
122
|
+
A public form renders immediately with no login, as a bare form card.
|
|
123
|
+
|
|
124
|
+
Also: opening a **private** form over a tinyUrl calls `setActiveWorkspace(form.workspaceId)` —
|
|
125
|
+
it **switches the signed-in user's active workspace**. Worth knowing before a control panel
|
|
126
|
+
links across workspaces.
|
|
127
|
+
|
|
128
|
+
## 5. Reading and writing field values from event JS
|
|
129
|
+
|
|
130
|
+
`ProcesioForm.data.fields.<elementName>.value` works for read and write (also `.visible`,
|
|
131
|
+
`.required`, `.readonly`); `ProcesioForm.variables.<name>` for form variables. The field key is
|
|
132
|
+
the element **name**, lowercased by the runtime.
|
|
133
|
+
|
|
134
|
+
**The snapshot lags by one interaction.** A field typed into immediately before the click can
|
|
135
|
+
read back empty on that click and correct on the next. Do not assume the keystroke preceding a
|
|
136
|
+
click is visible to it — and do not conclude "there are no values" from a single probe.
|
|
137
|
+
|
|
138
|
+
## 6. Which elements have a value at all
|
|
139
|
+
|
|
140
|
+
Only value-bearing controls get a `value` config, and therefore a `value` attribute in the data
|
|
141
|
+
model. A **button** and a **paragraph** correctly have none. The invariant that holds for every
|
|
142
|
+
type is the §5 rule: *every data-model attribute id equals the element's config id for that key*.
|
|
143
|
+
Asserting "a new element has a `value`" is the wrong check for a button, and will read as a
|
|
144
|
+
failure when authoring is correct.
|
|
145
|
+
|
|
146
|
+
## 7. `Data.events` — the form-level trigger surface (plaintext, and the ONLY on-load hook)
|
|
147
|
+
|
|
148
|
+
There is a **third** event surface beside element events and the encrypted `Data.code`: a
|
|
149
|
+
flat array at `Data.events`, the designer's *onLoad / onBeforeSubmit / onAfterSubmit*. It is
|
|
150
|
+
**plaintext**, so it does not depend on the form-code key that `form-set-code` needs.
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
[{"id": "<guid>", "type": "FORM_LOAD", "action": "RUN_JAVASCRIPT", "config": {"code": "…"}}]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Types: `FORM_LOAD`, `FORM_BEFORE_SUBMIT`, `FORM_AFTER_SUBMIT`. Note the shape: a **flat list of
|
|
157
|
+
event objects**, NOT the `{debounce, events:[…]}` wrapper an element config uses.
|
|
158
|
+
|
|
159
|
+
Write it with `form-update --data-file '{"events": […]}'` — the merge replaces arrays wholesale,
|
|
160
|
+
and it touches nothing else (`code`, `theme`, `elements` survive). Read it back from a fresh
|
|
161
|
+
`form-get`.
|
|
162
|
+
|
|
163
|
+
**Why it matters: no ordinary control has a load trigger.** Of every element golden, only `chat`
|
|
164
|
+
carries `onReadyEvents`. So anything that must happen *before the first click* — greeting the
|
|
165
|
+
viewer, hiding a branch, seeding a label — has exactly one place to live, and it is not the
|
|
166
|
+
encrypted code blob.
|
|
167
|
+
|
|
168
|
+
It runs in the **same sandbox** as an element event, so `ProcesioForm` is available.
|
|
169
|
+
|
|
170
|
+
It fires about a second after the form is drawn (measured: 1.0 s on a live form), so a
|
|
171
|
+
load script cannot keep the native form off the screen. See [08](08-PITFALLS.md), *The
|
|
172
|
+
native form shows for about a second before any script runs*.
|
|
173
|
+
|
|
174
|
+
### The viewer's identity, addressable from any trigger
|
|
175
|
+
|
|
176
|
+
The renderer generates an `instance` node into the data model and fills it from the signed-in
|
|
177
|
+
session, so JS can read who is looking:
|
|
178
|
+
|
|
179
|
+
```js
|
|
180
|
+
ProcesioForm.data.instance.currentUser.id // user id ("" / null when anonymous)
|
|
181
|
+
ProcesioForm.data.instance.currentUser.name // full name
|
|
182
|
+
ProcesioForm.data.instance.currentUser.email
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
`instance.submitter` (id / name) and `instance.ID` (the instance id) sit beside it. The attribute
|
|
186
|
+
ids are **constants baked into the renderer**, not per-form guids, so the node works on any form.
|
|
187
|
+
|
|
188
|
+
**This is orientation, never authorization.** Anything a browser can read, a viewer can edit, and
|
|
189
|
+
the event config is served to them in plaintext — so an allow-list held in form JS is a UI hint
|
|
190
|
+
wearing a lock's clothing. It also puts a roster of real addresses into a document every viewer
|
|
191
|
+
can read. Let the platform's permission profile refuse server-side, and use identity to tell a
|
|
192
|
+
viewer *which account they are on* before they choose a route.
|
|
193
|
+
|
|
194
|
+
### Writing a config other than `value`
|
|
195
|
+
|
|
196
|
+
`ProcesioForm.data.fields.<name>.<attr> = …` reaches **any exposed config**, not just `value` —
|
|
197
|
+
`label`, `visible`, `readonly`, `required`. That is how a paragraph or a heading gets rewritten at
|
|
198
|
+
runtime. Two rules decide the key:
|
|
199
|
+
|
|
200
|
+
- only configs marked `exposed: true` get a data-model attribute (`style` has none, so it is
|
|
201
|
+
unreachable from JS);
|
|
202
|
+
- the attribute name is the **camelCase of the config's designer label**, not its `key` — the
|
|
203
|
+
config `{key: "info-text", label: "Info text"}` is addressed as `.infoText`.
|
|
204
|
+
|
|
205
|
+
A write that lands on a readonly attribute is not an error: the sandbox logs *"Readonly property
|
|
206
|
+
… can not be set!"* and moves on.
|
|
207
|
+
|
|
208
|
+
Element **functions** are reached the same way and called. The stepper's are
|
|
209
|
+
`goToNextStep()` and `goToPreviousStep()` (renamed from `next` / `previous` in v3.0.0,
|
|
210
|
+
2026-10, so a script still calling the old names needs updating):
|
|
211
|
+
`ProcesioForm.data.fields.<stepperName>.goToNextStep()`.
|
|
212
|
+
|
|
213
|
+
### Two rules for any form-load script
|
|
214
|
+
|
|
215
|
+
1. **Wrap the whole body in `try`/`catch`.** An unhandled top-level throw stops the sandbox
|
|
216
|
+
reporting completion, and the trigger is only released after a **60-second** timeout — the
|
|
217
|
+
console says so, but the form has been sitting there the whole time.
|
|
218
|
+
2. **Write the static copy so it is already correct, and let the script only improve it.** The
|
|
219
|
+
script is one cached bundle, one renaming, one absent identity away from not running.
|
|
220
|
+
`"Welcome."` → `"Welcome, <name>."` degrades invisibly; `"Welcome, "` does not.
|
|
221
|
+
|
|
222
|
+
## 8. A public front door with delegated sign-in (the safe way past §4's dead end)
|
|
223
|
+
|
|
224
|
+
§4's dead end has exactly one fix that keeps every private form private: **one public
|
|
225
|
+
signpost form** whose only job is to name the thing and hand sign-in off to PROCESIO.
|
|
226
|
+
|
|
227
|
+
**Publishing is per-template, not per-workspace.** Flip one form public with
|
|
228
|
+
`form-update --id <form> --is-private false`. Proven on a live workspace: with one form
|
|
229
|
+
public, an anonymous `GET /api/FormTemplate/{workspaceId}/{id}` returned **200 for that
|
|
230
|
+
form and 401 for every other form in the same workspace**, and the workspace's
|
|
231
|
+
form-backed data stores stayed **401** (`GET /api/Form/dataStore/{id}/rows` with the
|
|
232
|
+
`formTemplateWorkspaceId` header). So making a signpost public does **not** widen the
|
|
233
|
+
anonymous surface to the private forms or their stores beside it — the earlier worry that
|
|
234
|
+
"publishing any form exposes every store in the workspace" is wrong. Keep the signpost
|
|
235
|
+
safe by construction: **no input fields, no backing flow, no data-store binding** — a form
|
|
236
|
+
that collects nothing and launches nothing has nothing to leak, whoever opens it.
|
|
237
|
+
|
|
238
|
+
**Delegated sign-in — never collect the password.** The signpost's primary button
|
|
239
|
+
navigates the top window to the platform's own login (`https://<app-host>`, e.g.
|
|
240
|
+
`procesio.app`), which signed-out shows the real email + SSO login. That is the whole
|
|
241
|
+
"pass the credentials to PROCESIO encrypted" story: the user types them on PROCESIO's own
|
|
242
|
+
origin, TLS-encrypted to its auth service, and PROCESIO sets the HTTP-only session cookie.
|
|
243
|
+
Do **not** build a login form that collects the password into its own fields, even to
|
|
244
|
+
"encrypt and forward" it: (a) it trains users to type their platform password into a
|
|
245
|
+
non-login page — the phishing pattern; and (b) it cannot work anyway — event JS runs in a
|
|
246
|
+
sandboxed same-origin `srcdoc` iframe and HTTP-only auth cookies are unreadable/unsettable
|
|
247
|
+
from page script, so the form could capture the password but never establish the session.
|
|
248
|
+
|
|
249
|
+
**Two things the login handoff cannot do — design around them, don't fight them:**
|
|
250
|
+
- **No return-to-form.** The login UI drops any `redirect_uri` that points at a form (the
|
|
251
|
+
URL reverts to the bare app host); after sign-in the user lands on the dashboard, not
|
|
252
|
+
back on your form. So the round trip is: signpost → login → dashboard → the user opens
|
|
253
|
+
the form link (bookmark). You cannot auto-forward them onto the form after login.
|
|
254
|
+
- **No role from the client.** `GET /api/Users/me` returns only `userId / username /
|
|
255
|
+
firstName / lastName / email` (plus `otpEnabled` since v3.0.0, 2026-10) — **no role, no userType, no per-workspace permissions** —
|
|
256
|
+
and `ProcesioForm.data.instance.currentUser` exposes only id/name/email (empty when
|
|
257
|
+
anonymous). So a form cannot branch "runner vs admin" client-side. Offer both
|
|
258
|
+
destinations as buttons and let the **permission profile refuse server-side** (a runner
|
|
259
|
+
clicking an admin door hits §4's 401); role-based *auto*-routing would need a backing
|
|
260
|
+
flow that reads the permission catalog with a bound credential, which forfeits the
|
|
261
|
+
export/import-clean, credential-free property that makes a pack marketplace-ready.
|
|
262
|
+
|
|
263
|
+
**Adding the button (`form-add-element`) takes a MINIMAL spec, not a cloned element.**
|
|
264
|
+
Pass `{"type":"button","label":"…","name":"…"}` and the tool synthesises the element and
|
|
265
|
+
its data-model sub-model. Passing a full element you read back (with a `configs` list, a
|
|
266
|
+
dict `onClickEvents`, a `style: []`) throws `'list' object has no attribute 'items'`. To
|
|
267
|
+
give the new button its navigation, add it minimal, then set the click JS separately with
|
|
268
|
+
`form-set-element-event --on click --action RUN_JAVASCRIPT` (see §2's recipe).
|
|
269
|
+
|
|
270
|
+
## 9. App tiles (`FormApplication`) — the only tenant-portable navigation
|
|
271
|
+
|
|
272
|
+
§2's recipe (a button whose JS assigns `location` to `https://forms.procesio.app/<tinyUrl>`) is
|
|
273
|
+
correct **inside one installation and nowhere else**. A tinyUrl is minted per workspace, so every
|
|
274
|
+
absolute inter-form URL you bake into a form is a pointer at *your* tenant. Export a pack built that
|
|
275
|
+
way and every importer's buttons lead back to the author's forms — a broken app, the author's form
|
|
276
|
+
and process ids shipped inside a "clean" bundle, and a live cross-tenant redirect the moment the
|
|
277
|
+
author publishes any of those forms. Runtime repair is not available either: from a form's origin,
|
|
278
|
+
`GET /api/FormTemplate/{ws}/{id}` on a private sibling returns **401**, so a form cannot look its
|
|
279
|
+
neighbours up and self-heal.
|
|
280
|
+
|
|
281
|
+
**Use `FormApplication` instead.** It registers a form as an **app tile** on the workspace dashboard
|
|
282
|
+
(the same mechanism the built-in apps use), and it is bound to the form by **`pid` = the form
|
|
283
|
+
template id**, never by URL. Ids survive import, so a tile resolves to whichever tenant it is
|
|
284
|
+
installed in. This is what makes a multi-form pack portable, and it removes bookmark-passing: a user
|
|
285
|
+
signs in, lands on the dashboard, and the apps are there.
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
POST /api/FormApplication
|
|
289
|
+
{ "pid": "<form template id>", "name": "…", "description": "…",
|
|
290
|
+
"image": { "url": "", "name": "icon.png", "value": "data:image/png;base64,…", "source": 2 },
|
|
291
|
+
"type": 2, "enabled": true, "isProcesio": false }
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
- **`image.source` is REQUIRED and is the trap.** Omit it and the create fails with HTTP 500
|
|
295
|
+
`Data truncated for column 'ImageSource'` — an error that reads like a length problem and is not.
|
|
296
|
+
`source: 2` goes with a base64 `value`.
|
|
297
|
+
- **Tiles are NOT carried by a `.procesio` export.** Verified: a bundle containing forms, flows and
|
|
298
|
+
a store carries no `FormApplications`. They are created at install — one POST per tile, which is
|
|
299
|
+
far cheaper than minting a URL per form *and* hand-editing navigation JS.
|
|
300
|
+
- The tile opens the form in a **new tab**, so a scripted click on the dashboard will not move the
|
|
301
|
+
original page.
|
|
302
|
+
|
|
303
|
+
**What still belongs in a form.** Two navigation targets are tenant-independent and safe to hardcode:
|
|
304
|
+
the platform root (`https://<app-host>`, for sign-in or platform admin), and **going back** — use
|
|
305
|
+
`W.history.back()` (with the same top-window `W` as §2), never a hardcoded "back to X" URL. Between
|
|
306
|
+
tiles for forward navigation and `history.back()` for return, a portable pack needs no per-tenant
|
|
307
|
+
URL anywhere. Before shipping, grep the exported forms for `forms.<host>/` and for any
|
|
308
|
+
`admin/process/designer/<guid>` deep-link: both should be zero.
|