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,47 @@
|
|
|
1
|
+
"""Load the agent's knowledge base (the markdown in this folder).
|
|
2
|
+
|
|
3
|
+
The `guidance` action serves these so any session loads the methodology from ONE
|
|
4
|
+
registry-discoverable place instead of re-deriving it. The docs are the source of
|
|
5
|
+
truth; this module just reads them.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
KB_DIR = Path(__file__).resolve().parent
|
|
12
|
+
|
|
13
|
+
# topic -> (filename, human label)
|
|
14
|
+
TOPICS: dict[str, tuple[str, str]] = {
|
|
15
|
+
"playbook": ("CONNECTOR-BUILDER-PLAYBOOK.md",
|
|
16
|
+
"Build → upload → test → improve operating procedure"),
|
|
17
|
+
"interop": ("CONNECTOR-BUILDER-PROCESIO-INTEROP.md",
|
|
18
|
+
"How this agent hands off to the procesio tool/agent"),
|
|
19
|
+
"troubleshooting": ("CONNECTOR-BUILDER-TROUBLESHOOTING.md",
|
|
20
|
+
"Operations: tool/skill inventory, live-run realities, failure "
|
|
21
|
+
"triage (NU1301 vs code), definition of done"),
|
|
22
|
+
"boundary": ("README.md",
|
|
23
|
+
"Agent overview + tool-vs-agent boundary"),
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def topics() -> list[str]:
|
|
28
|
+
return list(TOPICS.keys())
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def load(topic: str) -> dict:
|
|
32
|
+
if topic not in TOPICS:
|
|
33
|
+
raise KeyError(f"unknown topic: {topic}. Known: {', '.join(TOPICS)}")
|
|
34
|
+
filename, label = TOPICS[topic]
|
|
35
|
+
path = KB_DIR / filename
|
|
36
|
+
if not path.exists():
|
|
37
|
+
raise FileNotFoundError(f"knowledge file missing: {path}")
|
|
38
|
+
return {
|
|
39
|
+
"topic": topic,
|
|
40
|
+
"label": label,
|
|
41
|
+
"source": str(path),
|
|
42
|
+
"content": path.read_text(encoding="utf-8"),
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def load_all() -> list[dict]:
|
|
47
|
+
return [load(t) for t in TOPICS]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""connector-builder agent entrypoint — action dispatch.
|
|
2
|
+
|
|
3
|
+
Orchestrates the `connector-builder` tool (the AI Connector Builder REST client)
|
|
4
|
+
and the `procesio` tool to run the full loop: build a connector from API docs →
|
|
5
|
+
download the .nupkg → upload it to PROCESIO → test it live → feed failures back
|
|
6
|
+
to improve the connector (and, for systemic issues, the builder's own knowledge).
|
|
7
|
+
|
|
8
|
+
It is the executable side of CONNECTOR-BUILDER-PLAYBOOK.md. Invoked like any
|
|
9
|
+
action-dispatch tool: action name first, JSON in / JSON out.
|
|
10
|
+
|
|
11
|
+
The agent dir name has a hyphen, so this agent's own modules are imported by BARE
|
|
12
|
+
name with the agent root on sys.path (mirrors the hyphenated tools); the shared
|
|
13
|
+
agent libs are imported as the valid package `agents._lib`.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
AGENT_ROOT = Path(__file__).resolve().parent
|
|
21
|
+
FRAMEWORK_ROOT = AGENT_ROOT.parents[1]
|
|
22
|
+
_VENV_PY = FRAMEWORK_ROOT / ".venv" / "Scripts" / "python.exe"
|
|
23
|
+
if _VENV_PY.exists() and Path(sys.executable).resolve() != _VENV_PY.resolve():
|
|
24
|
+
import subprocess
|
|
25
|
+
sys.exit(subprocess.run([str(_VENV_PY), __file__, *sys.argv[1:]]).returncode)
|
|
26
|
+
|
|
27
|
+
import argparse # noqa: E402
|
|
28
|
+
|
|
29
|
+
for _p in (str(AGENT_ROOT), str(FRAMEWORK_ROOT)):
|
|
30
|
+
if _p not in sys.path:
|
|
31
|
+
sys.path.insert(0, _p)
|
|
32
|
+
|
|
33
|
+
from tools._lib.io import emit, fail # noqa: E402
|
|
34
|
+
from agents._lib import errors # noqa: E402
|
|
35
|
+
from agents._lib.actiondef import ActionDef # noqa: E402
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class _Parser(argparse.ArgumentParser):
|
|
39
|
+
def error(self, message: str):
|
|
40
|
+
raise errors.UsageError(message)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def collect_actions() -> dict[str, ActionDef]:
|
|
44
|
+
from handlers import status, guidance, nextstep, checklist
|
|
45
|
+
actions: dict[str, ActionDef] = {}
|
|
46
|
+
for module in (status, guidance, nextstep, checklist):
|
|
47
|
+
for name, defn in module.ACTIONS.items():
|
|
48
|
+
if name in actions:
|
|
49
|
+
raise RuntimeError(f"duplicate connector-builder agent action: {name}")
|
|
50
|
+
actions[name] = defn
|
|
51
|
+
return actions
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
ACTIONS = collect_actions()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _build_context():
|
|
58
|
+
from context import ConnectorBuilderContext
|
|
59
|
+
return ConnectorBuilderContext.create()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def dispatch(action: str, argv: list[str], *, context_builder=None) -> dict:
|
|
63
|
+
if action not in ACTIONS:
|
|
64
|
+
raise errors.UsageError(
|
|
65
|
+
f"unknown action: {action}. Known: {', '.join(sorted(ACTIONS))}")
|
|
66
|
+
defn = ACTIONS[action]
|
|
67
|
+
parser = _Parser(prog=f"connector-builder {action}", description=defn.description)
|
|
68
|
+
defn.add_args(parser)
|
|
69
|
+
parsed = parser.parse_args(argv)
|
|
70
|
+
if defn.context:
|
|
71
|
+
builder = context_builder or _build_context
|
|
72
|
+
return defn.func(builder(), parsed)
|
|
73
|
+
return defn.func(parsed)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def main(argv=None) -> None:
|
|
77
|
+
argv = list(sys.argv[1:] if argv is None else argv)
|
|
78
|
+
if not argv or argv[0] in ("-h", "--help"):
|
|
79
|
+
print("Actions:", file=sys.stderr)
|
|
80
|
+
for name in sorted(ACTIONS):
|
|
81
|
+
print(f" {name:<14} {ACTIONS[name].description}", file=sys.stderr)
|
|
82
|
+
sys.exit(0)
|
|
83
|
+
action, rest = argv[0], argv[1:]
|
|
84
|
+
try:
|
|
85
|
+
result = dispatch(action, rest)
|
|
86
|
+
except Exception as exc: # noqa: BLE001
|
|
87
|
+
code, message, details, exit_code = errors.classify(exc)
|
|
88
|
+
fail(code, message, details, exit_code)
|
|
89
|
+
emit(result)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if __name__ == "__main__":
|
|
93
|
+
main()
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Pytest fixtures + hyphen-safe module loading for the connector-builder agent.
|
|
2
|
+
|
|
3
|
+
The agent dir name has a hyphen, so its own modules (knowledge, context,
|
|
4
|
+
handlers.*, main) are imported by BARE name at runtime with the agent root on
|
|
5
|
+
sys.path. Under pytest those bare names collide across hyphenated dirs, so — like
|
|
6
|
+
the hyphenated tools — we load THIS agent's modules under unique ``cba_*`` aliases
|
|
7
|
+
via importlib, registering the bare names only TRANSIENTLY during load, then
|
|
8
|
+
restore. Shared agent libs (``agents._lib.*``) are a normal package and import
|
|
9
|
+
directly.
|
|
10
|
+
|
|
11
|
+
NOTE: no tests/__init__.py here; every test file has a unique ``test_cba_*``
|
|
12
|
+
basename to avoid pytest rootdir import collisions.
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import importlib.util
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from types import ModuleType
|
|
20
|
+
|
|
21
|
+
import pytest
|
|
22
|
+
|
|
23
|
+
AGENT_ROOT = Path(__file__).resolve().parents[1] # agents/connector-builder
|
|
24
|
+
FRAMEWORK_ROOT = Path(__file__).resolve().parents[3] # repo root
|
|
25
|
+
|
|
26
|
+
if str(FRAMEWORK_ROOT) not in sys.path:
|
|
27
|
+
sys.path.insert(0, str(FRAMEWORK_ROOT))
|
|
28
|
+
|
|
29
|
+
_BARE_NAMES = (
|
|
30
|
+
"knowledge", "context",
|
|
31
|
+
"handlers", "handlers.status", "handlers.guidance",
|
|
32
|
+
"handlers.nextstep", "handlers.checklist", "main",
|
|
33
|
+
)
|
|
34
|
+
_MISSING = object()
|
|
35
|
+
_saved_bare = {n: sys.modules.get(n, _MISSING) for n in _BARE_NAMES}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _load(bare_name: str, relpath: str) -> ModuleType:
|
|
39
|
+
path = AGENT_ROOT / relpath
|
|
40
|
+
spec = importlib.util.spec_from_file_location(bare_name, path)
|
|
41
|
+
assert spec and spec.loader
|
|
42
|
+
mod = importlib.util.module_from_spec(spec)
|
|
43
|
+
sys.modules[bare_name] = mod
|
|
44
|
+
spec.loader.exec_module(mod)
|
|
45
|
+
sys.modules["cba_" + bare_name.replace(".", "_")] = mod
|
|
46
|
+
return mod
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
knowledge = _load("knowledge", "knowledge.py")
|
|
50
|
+
context = _load("context", "context.py")
|
|
51
|
+
|
|
52
|
+
_handlers_pkg = ModuleType("handlers")
|
|
53
|
+
_handlers_pkg.__path__ = [str(AGENT_ROOT / "handlers")] # type: ignore[attr-defined]
|
|
54
|
+
sys.modules["handlers"] = _handlers_pkg
|
|
55
|
+
sys.modules["cba_handlers"] = _handlers_pkg
|
|
56
|
+
status = _load("handlers.status", "handlers/status.py")
|
|
57
|
+
guidance = _load("handlers.guidance", "handlers/guidance.py")
|
|
58
|
+
nextstep = _load("handlers.nextstep", "handlers/nextstep.py")
|
|
59
|
+
checklist = _load("handlers.checklist", "handlers/checklist.py")
|
|
60
|
+
|
|
61
|
+
main = _load("main", "main.py")
|
|
62
|
+
|
|
63
|
+
sys.modules["cba_main"] = main
|
|
64
|
+
sys.modules["cba_knowledge"] = knowledge
|
|
65
|
+
|
|
66
|
+
_agent_root_str = str(AGENT_ROOT)
|
|
67
|
+
sys.path[:] = [p for p in sys.path if p != _agent_root_str]
|
|
68
|
+
for _bn, _prev in _saved_bare.items():
|
|
69
|
+
if _prev is _MISSING:
|
|
70
|
+
sys.modules.pop(_bn, None)
|
|
71
|
+
else:
|
|
72
|
+
sys.modules[_bn] = _prev
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class FakeContext:
|
|
76
|
+
"""Records tool invocations and returns canned responses keyed by
|
|
77
|
+
(tool, action)."""
|
|
78
|
+
|
|
79
|
+
def __init__(self, responses=None):
|
|
80
|
+
self.calls: list[tuple] = []
|
|
81
|
+
self.responses = responses or {}
|
|
82
|
+
|
|
83
|
+
def invoke(self, tool, action, *args):
|
|
84
|
+
self.calls.append((tool, action, args))
|
|
85
|
+
return self.responses.get((tool, action), {})
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@pytest.fixture
|
|
89
|
+
def cba_main():
|
|
90
|
+
return main
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@pytest.fixture
|
|
94
|
+
def fake_context():
|
|
95
|
+
return FakeContext()
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"""connector-builder agent: dispatch, manifest sync, next-step doctrine, checklist."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
import cba_main as main
|
|
10
|
+
from tools._lib.manifest import load_agent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# -- manifest sync -----------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
def _manifest():
|
|
16
|
+
root = Path(main.__file__).resolve().parent
|
|
17
|
+
return load_agent(root / "agent.yaml")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_manifest_loads_and_names_match():
|
|
21
|
+
m = _manifest()
|
|
22
|
+
assert m.name == "connector-builder"
|
|
23
|
+
assert set(m.action_names()) == set(main.ACTIONS)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_manifest_args_match_argparse():
|
|
27
|
+
m = _manifest()
|
|
28
|
+
for name, defn in main.ACTIONS.items():
|
|
29
|
+
parser = argparse.ArgumentParser()
|
|
30
|
+
defn.add_args(parser)
|
|
31
|
+
argparse_names = {opt[2:] for a in parser._actions for opt in a.option_strings
|
|
32
|
+
if opt.startswith("--") and opt != "--help"}
|
|
33
|
+
manifest_names = {a.name for a in m.get_action(name).args}
|
|
34
|
+
assert manifest_names == argparse_names, name
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_drives_connector_builder_and_procesio():
|
|
38
|
+
m = _manifest()
|
|
39
|
+
assert set(m.tools) == {"connector-builder", "procesio"}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# -- dispatch ----------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
def _run(action, argv, ctx=None):
|
|
45
|
+
return main.dispatch(action, argv, context_builder=(lambda: ctx) if ctx else None)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_unknown_action_raises():
|
|
49
|
+
from agents._lib import errors
|
|
50
|
+
with pytest.raises(errors.UsageError):
|
|
51
|
+
_run("nope", [])
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_status_runs_without_network():
|
|
55
|
+
out = _run("status", [])
|
|
56
|
+
assert out["agent"] == "connector-builder"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def test_guidance_unknown_topic():
|
|
60
|
+
from agents._lib import errors
|
|
61
|
+
with pytest.raises(errors.AgentError):
|
|
62
|
+
_run("guidance", ["--topic", "bogus"])
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_guidance_playbook_loads():
|
|
66
|
+
out = _run("guidance", ["--topic", "playbook"])
|
|
67
|
+
assert "content" in out and "build" in out["content"].lower()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_guidance_troubleshooting_loads():
|
|
71
|
+
out = _run("guidance", ["--topic", "troubleshooting"])
|
|
72
|
+
c = out["content"].lower()
|
|
73
|
+
# The operational knowledge from the live run must be present in the agent.
|
|
74
|
+
assert "nu1301" in c and "504" in c and "definition of done" in c
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_guidance_all_includes_troubleshooting():
|
|
78
|
+
out = _run("guidance", ["--topic", "all"])
|
|
79
|
+
assert "troubleshooting" in out["topics"]
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# -- next-step doctrine ------------------------------------------------------
|
|
83
|
+
|
|
84
|
+
def test_next_step_pending_recommends_start_or_gather(fake_context):
|
|
85
|
+
out = _run("next-step", ["--status", "pending"], fake_context)
|
|
86
|
+
actions = {r["action"] for r in out["recommended"]}
|
|
87
|
+
assert {"start-build", "gather"} <= actions
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_next_step_generate_waiting_user(fake_context):
|
|
91
|
+
out = _run("next-step",
|
|
92
|
+
["--status", "generating", "--step-status", "waiting_user"], fake_context)
|
|
93
|
+
assert out["phase"] == "generate-review"
|
|
94
|
+
assert "approve-generate" in {r["action"] for r in out["recommended"]}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_next_step_completed_hands_off_to_procesio(fake_context):
|
|
98
|
+
out = _run("next-step", ["--status", "completed"], fake_context)
|
|
99
|
+
assert any(h["tool"].startswith("procesio") for h in out["handoff"])
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_next_step_live_build_id_invokes_tool(fake_context):
|
|
103
|
+
fake_context.responses[("connector-builder", "get-build")] = {
|
|
104
|
+
"status": "planning", "step_status": "waiting_user"}
|
|
105
|
+
out = _run("next-step", ["--build-id", "B1"], fake_context)
|
|
106
|
+
assert fake_context.calls[0] == ("connector-builder", "get-build", ("--build-id", "B1"))
|
|
107
|
+
assert out["phase"] == "plan-review"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_next_step_compile_restore_is_platform_not_code(fake_context):
|
|
111
|
+
fake_context.responses[("connector-builder", "get-build")] = {
|
|
112
|
+
"status": "failed", "last_failed_step": 6,
|
|
113
|
+
"error_message": "Compilation failed due to NuGet package restore error. "
|
|
114
|
+
"Failed to retrieve information about 'Ringhel.Procesio.Action.Core' (NU1301)."}
|
|
115
|
+
out = _run("next-step", ["--build-id", "B1"], fake_context)
|
|
116
|
+
assert out["diagnosis"]["kind"] == "platform_nuget_restore"
|
|
117
|
+
assert out["diagnosis"]["not_your_code"] is True
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def test_next_step_bad_version_is_code(fake_context):
|
|
121
|
+
fake_context.responses[("connector-builder", "get-build")] = {
|
|
122
|
+
"status": "failed", "last_failed_step": 6,
|
|
123
|
+
"error_message": "NU1102: Unable to find package Foo with version 9.9.9"}
|
|
124
|
+
out = _run("next-step", ["--build-id", "B1"], fake_context)
|
|
125
|
+
assert out["diagnosis"]["kind"] == "bad_package_version"
|
|
126
|
+
assert out["diagnosis"]["not_your_code"] is False
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_next_step_unknown_status_raises(fake_context):
|
|
130
|
+
from agents._lib import errors
|
|
131
|
+
with pytest.raises(errors.AgentError):
|
|
132
|
+
_run("next-step", ["--status", "weird"], fake_context)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def test_next_step_requires_input(fake_context):
|
|
136
|
+
from agents._lib import errors
|
|
137
|
+
with pytest.raises(errors.AgentError):
|
|
138
|
+
_run("next-step", [], fake_context)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# -- checklist ---------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
def test_checklist_covers_full_loop():
|
|
144
|
+
out = _run("checklist", ["--goal", "Stripe connector"])
|
|
145
|
+
phases = [s["phase"] for s in out["steps"]]
|
|
146
|
+
for expected in ("scope", "deliver", "install", "test", "improve"):
|
|
147
|
+
assert expected in phases
|
|
148
|
+
assert out["goal"] == "Stripe connector"
|
|
File without changes
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""First-run detection + bootstrap of the user-data folder.
|
|
2
|
+
|
|
3
|
+
The wipe-safety contract: deleting context-state-knowledge/ must never break the
|
|
4
|
+
framework. Every component degrades to guidance ("no data - here is how to start"),
|
|
5
|
+
and this module is the guidance engine:
|
|
6
|
+
|
|
7
|
+
- **Templates** live in the FRAMEWORK, beside the component that owns them, as
|
|
8
|
+
``<name>.template.json`` (e.g. ``agents/email-classifier/accounts.template.json``).
|
|
9
|
+
They contain placeholders only - never real user data - and map to
|
|
10
|
+
``context-state-knowledge/config/<component>/<name>.json``.
|
|
11
|
+
- **freshness()** decides "fresh start": zero records in the store AND zero files
|
|
12
|
+
under config/. A brand-new (or wiped) install trips it; the orchestrator and
|
|
13
|
+
curator surface it so the driver prompts the user instead of acting blind.
|
|
14
|
+
- **bootstrap()** seeds the folder: ensures the store schema (via the context-store
|
|
15
|
+
tool - never opening the DB directly), regenerates the folder README, optionally
|
|
16
|
+
copies templates (never overwriting), and returns the onboarding checklist.
|
|
17
|
+
"""
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import shutil
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
from tools._lib import userdata
|
|
24
|
+
|
|
25
|
+
FRAMEWORK_ROOT = Path(__file__).resolve().parents[2]
|
|
26
|
+
|
|
27
|
+
_TEMPLATE_SUFFIX = ".template.json"
|
|
28
|
+
# Only the top level of each component dir - deep matches would pick up fixtures.
|
|
29
|
+
_TEMPLATE_GLOBS = ("tools/*/*.template.json", "agents/*/*.template.json")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def find_templates() -> list[dict]:
|
|
33
|
+
"""Discover framework config templates and their user-data targets."""
|
|
34
|
+
out: list[dict] = []
|
|
35
|
+
base = userdata.base()
|
|
36
|
+
for pattern in _TEMPLATE_GLOBS:
|
|
37
|
+
for tpl in sorted(FRAMEWORK_ROOT.glob(pattern)):
|
|
38
|
+
component = tpl.parent.name
|
|
39
|
+
target_name = tpl.name[: -len(_TEMPLATE_SUFFIX)] + ".json"
|
|
40
|
+
target = base / "config" / component / target_name
|
|
41
|
+
out.append({
|
|
42
|
+
"component": component,
|
|
43
|
+
"template": str(tpl.relative_to(FRAMEWORK_ROOT)),
|
|
44
|
+
"target": str(target),
|
|
45
|
+
"target_exists": target.exists(),
|
|
46
|
+
})
|
|
47
|
+
return out
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def freshness(store_stats: dict | None) -> dict:
|
|
51
|
+
"""Fresh start = empty store AND no user config. A folder that was wiped (or
|
|
52
|
+
never existed) scans exactly like this."""
|
|
53
|
+
scan = userdata.scan()
|
|
54
|
+
records = (store_stats or {}).get("records", 0) or 0
|
|
55
|
+
fresh = records == 0 and scan["config_files"] == 0
|
|
56
|
+
return {"fresh_start": fresh, "records": records, "scan": scan}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def onboarding_hint() -> dict:
|
|
60
|
+
"""The prompt a driver surfaces to the user on a fresh start."""
|
|
61
|
+
templates = find_templates()
|
|
62
|
+
return {
|
|
63
|
+
"message": ("No user context/knowledge/state found - this is a fresh "
|
|
64
|
+
"install (or the user-data folder was wiped). The framework "
|
|
65
|
+
"works; it just knows nothing about you yet."),
|
|
66
|
+
"initialize": ("python scripts/run-agent.py orchestrator bootstrap "
|
|
67
|
+
"[--with-templates]"),
|
|
68
|
+
"steps": [
|
|
69
|
+
"Run bootstrap to seed the user-data folder (add --with-templates to "
|
|
70
|
+
"copy each component's config template for you to fill in).",
|
|
71
|
+
"Fill in the copied config templates (placeholders are marked; keep "
|
|
72
|
+
"accounts disabled until real).",
|
|
73
|
+
"Store credentials: python scripts/set-credential.py <tool> <secret> "
|
|
74
|
+
"(scripts/list-tools.py shows what each tool is missing).",
|
|
75
|
+
"Log in web sessions you need: run-tool web save-session --name <site> ...",
|
|
76
|
+
"Start building context: curator remember / curator capture as facts, "
|
|
77
|
+
"files and preferences come up - the store fills itself from use.",
|
|
78
|
+
],
|
|
79
|
+
"templates": templates,
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _readme_text() -> str:
|
|
84
|
+
return """# context-state-knowledge/ - your data, not the framework's
|
|
85
|
+
|
|
86
|
+
Everything user-specific lives here: config, runtime state, knowledge, resources,
|
|
87
|
+
preferences, decisions, run history, exports. The folder is **never git-versioned**
|
|
88
|
+
and is **wipeable**: delete it and the framework still runs - it will detect the
|
|
89
|
+
fresh start and guide whoever uses it next through building new context. That is the
|
|
90
|
+
handover story: give the repo away, wipe this folder, done.
|
|
91
|
+
|
|
92
|
+
Generated by `orchestrator bootstrap` - do not keep notes here by hand; use the
|
|
93
|
+
curator (`curator remember` / `curator capture`) so knowledge stays structured.
|
|
94
|
+
|
|
95
|
+
## Layout
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
store.db SQLite store (records + runs) - access ONLY via the
|
|
99
|
+
context-store tool or the curator agent
|
|
100
|
+
config/<component>/ per-component user config (seeded from each component's
|
|
101
|
+
<name>.template.json in the framework)
|
|
102
|
+
state/<component>/ per-component runtime state
|
|
103
|
+
sessions/ saved web login sessions (when migrated)
|
|
104
|
+
exports/ human-readable dumps (curator export)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Rebuilding after a wipe
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
python scripts/run-agent.py orchestrator bootstrap --with-templates
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Then fill in the copied templates, store credentials with
|
|
114
|
+
`python scripts/set-credential.py <tool> <secret>`, and start working - the
|
|
115
|
+
orchestrator/curator build the rest from use. Secrets NEVER live in this folder;
|
|
116
|
+
they stay in the OS credential store.
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def bootstrap(ctx, *, with_templates: bool = False) -> dict:
|
|
121
|
+
"""Seed/repair the user-data folder. Idempotent; never overwrites user files."""
|
|
122
|
+
base = userdata.base()
|
|
123
|
+
# Ensure the store schema exists - through the tool, honoring the one-code-path
|
|
124
|
+
# rule. stats also tells us whether data already exists.
|
|
125
|
+
stats = ctx.cs("stats")
|
|
126
|
+
# Measure freshness BEFORE seeding: copying templates creates config files,
|
|
127
|
+
# which would otherwise hide that this was a fresh install needing onboarding.
|
|
128
|
+
fresh = freshness(stats)
|
|
129
|
+
|
|
130
|
+
readme = base / "README.md"
|
|
131
|
+
readme.write_text(_readme_text(), encoding="utf-8", newline="\n")
|
|
132
|
+
|
|
133
|
+
# Materialize the standard areas so the layout is visible.
|
|
134
|
+
for d in ("config", "state", "sessions", "exports"):
|
|
135
|
+
(base / d).mkdir(parents=True, exist_ok=True)
|
|
136
|
+
|
|
137
|
+
# Seed the schedule skeleton (commented, empty) so recurring work has a home.
|
|
138
|
+
from agents.orchestrator import schedulelib
|
|
139
|
+
seeded_schedule = schedulelib.ensure_skeleton()
|
|
140
|
+
|
|
141
|
+
copied, skipped = [], []
|
|
142
|
+
templates = find_templates()
|
|
143
|
+
if with_templates:
|
|
144
|
+
for t in templates:
|
|
145
|
+
target = Path(t["target"])
|
|
146
|
+
if target.exists():
|
|
147
|
+
skipped.append(t["target"])
|
|
148
|
+
continue
|
|
149
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
150
|
+
shutil.copyfile(FRAMEWORK_ROOT / t["template"], target)
|
|
151
|
+
copied.append(t["target"])
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
"base": str(base),
|
|
155
|
+
"store": stats,
|
|
156
|
+
"readme": str(readme),
|
|
157
|
+
"schedule_seeded": str(seeded_schedule) if seeded_schedule else None,
|
|
158
|
+
"templates_found": len(templates),
|
|
159
|
+
"templates_copied": copied,
|
|
160
|
+
"templates_skipped_existing": skipped,
|
|
161
|
+
"fresh_start": fresh["fresh_start"],
|
|
162
|
+
"onboarding": onboarding_hint() if fresh["fresh_start"] else None,
|
|
163
|
+
"note": ("templates were NOT copied; pass --with-templates to copy them"
|
|
164
|
+
if not with_templates else
|
|
165
|
+
"fill in the copied templates before enabling anything"),
|
|
166
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Implementation patterns: how this team builds in PROCESIO
|
|
2
|
+
|
|
3
|
+
These patterns were distilled from a full audit of a production workspace: 9 forms, 91 processes and a
|
|
4
|
+
SQL Server database with 51 tables and 23 stored procedures. That workspace covers form-driven request
|
|
5
|
+
intake, agent review, LLM document extraction, ERP integration, SFTP archiving and multi-party
|
|
6
|
+
e-signing. Every client-specific value has been removed. What remains is the **house style**: the
|
|
7
|
+
techniques this team actually uses, stated so a builder in any workspace can apply them.
|
|
8
|
+
|
|
9
|
+
The best-practices and playbook docs say what good looks like. These docs show how we build it here.
|
|
10
|
+
Where the two disagree, trust the docs and treat the entry as a proposal to reconcile. Each entry
|
|
11
|
+
marks whether it is **NEW**, **REFINES** an existing rule, or **CONFIRMS** one.
|
|
12
|
+
|
|
13
|
+
| topic | file | covers |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `patterns-processes` | 01-PROCESSES.md | result flags for forms, HTML rendered server-side, Node idioms, subprocess utilities, versioned scripts, status machines |
|
|
16
|
+
| `patterns-forms` | 02-FORMS.md | step and confirm structure, visibility driven by process flags, JS bridges into no-code conditions, validator and collector runtimes, the async-output caveat |
|
|
17
|
+
| `patterns-integrations` | 03-INTEGRATIONS.md | inbound webhooks with API keys, ERP step orchestration with a run log, SFTP layout, LLM extraction with strict schemas, document generation |
|
|
18
|
+
| `patterns-database` | 04-DATABASE.md | a JSON-in orchestrator SP, errors collected before writes, one fixed result shape, deploy conventions, how a process reads a result |
|
|
19
|
+
|
|
20
|
+
## Every pattern file also lists the anti-patterns the audit found
|
|
21
|
+
|
|
22
|
+
Treat these as the house rules going forward:
|
|
23
|
+
|
|
24
|
+
- **Never paste a process variable into SQL text** (`N'{{v}}'`). Bind parameters instead (`sql-parameterize`).
|
|
25
|
+
In the audited workspace almost every SQL node pasted values. A single apostrophe broke the save, and a
|
|
26
|
+
token from a public URL reached the database unfiltered.
|
|
27
|
+
- **Hiding a section is not access control.** A public form that loads data on FORM_LOAD has already sent
|
|
28
|
+
that data to the browser.
|
|
29
|
+
- **Wire error ports on every integration node** (HTTP, SFTP, SQL, LLM). An integration with no error port
|
|
30
|
+
fails silently.
|
|
31
|
+
- **Keep secrets in credentials, never in application tables.**
|
|
32
|
+
- **When a later event in the same click chain needs a process's outputs, run that process with `syncRun`.**
|
|
33
|
+
- **Fix a JS runtime at one version on every element that installs it.** If each element carries a
|
|
34
|
+
different version, every one of them installs a fresh copy and the listeners pile up.
|
|
35
|
+
|
|
36
|
+
## Workspace-specific knowledge (user data, not here)
|
|
37
|
+
|
|
38
|
+
An audit also produces knowledge that names the workspace's own processes, tables and findings. That goes
|
|
39
|
+
in the user-data folder, never in this framework folder:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
context-state-knowledge/resources/procesio-workspaces/<workspace-slug>/
|
|
43
|
+
raw/ API dumps (processes/, forms/) - input to the digests
|
|
44
|
+
processes/ flow-digest output (one .md per process + INDEX.md)
|
|
45
|
+
forms/ form-digest output (+ FORM-PROCESS-MAP.md, scripts, global code)
|
|
46
|
+
db-schema/ sqlserver schema-extract mirror
|
|
47
|
+
knowledge/ the curated knowledge + audit findings (README.md = entry point)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Before building in a workspace, check whether it has such a folder: run `curator recall --query
|
|
51
|
+
"<workspace name> procesio knowledge"` or look in the folder directly. Build the same way its
|
|
52
|
+
knowledge describes.
|
|
53
|
+
|
|
54
|
+
To audit a new workspace, reproduce the folder with these steps:
|
|
55
|
+
1. `request GET /api/Projects/<id>` for each process, and `form-get` plus `form-get-code` for each form,
|
|
56
|
+
into `raw/`.
|
|
57
|
+
2. `flow-digest --in raw/processes --out processes --names names.json`.
|
|
58
|
+
3. `form-digest --in raw/forms --processes raw/processes --out forms`.
|
|
59
|
+
4. `sqlserver schema-extract --profile <p> --out db-schema`.
|
|
60
|
+
5. Read and curate the results into `knowledge/`.
|