@owlmeans/viable-common 0.0.4
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.
- package/README.md +68 -0
- package/agent-meta/manifest.json +16 -0
- package/agent-meta/skills/viable-common/SKILL.md +179 -0
- package/build/agent/index.d.ts +4 -0
- package/build/agent/index.d.ts.map +1 -0
- package/build/agent/index.js +3 -0
- package/build/agent/index.js.map +1 -0
- package/build/agent/memory.d.ts +12 -0
- package/build/agent/memory.d.ts.map +1 -0
- package/build/agent/memory.js +11 -0
- package/build/agent/memory.js.map +1 -0
- package/build/agent/spectator/consts.d.ts +9 -0
- package/build/agent/spectator/consts.d.ts.map +1 -0
- package/build/agent/spectator/consts.js +10 -0
- package/build/agent/spectator/consts.js.map +1 -0
- package/build/agent/spectator/index.d.ts +3 -0
- package/build/agent/spectator/index.d.ts.map +1 -0
- package/build/agent/spectator/index.js +2 -0
- package/build/agent/spectator/index.js.map +1 -0
- package/build/agent/spectator/types.d.ts +13 -0
- package/build/agent/spectator/types.d.ts.map +1 -0
- package/build/agent/spectator/types.js +2 -0
- package/build/agent/spectator/types.js.map +1 -0
- package/build/agent/types.d.ts +10 -0
- package/build/agent/types.d.ts.map +1 -0
- package/build/agent/types.js +2 -0
- package/build/agent/types.js.map +1 -0
- package/build/areas/consts.d.ts +88 -0
- package/build/areas/consts.d.ts.map +1 -0
- package/build/areas/consts.js +106 -0
- package/build/areas/consts.js.map +1 -0
- package/build/areas/index.d.ts +3 -0
- package/build/areas/index.d.ts.map +1 -0
- package/build/areas/index.js +2 -0
- package/build/areas/index.js.map +1 -0
- package/build/areas/types.d.ts +28 -0
- package/build/areas/types.d.ts.map +1 -0
- package/build/areas/types.js +2 -0
- package/build/areas/types.js.map +1 -0
- package/build/ba/consts.d.ts +38 -0
- package/build/ba/consts.d.ts.map +1 -0
- package/build/ba/consts.js +41 -0
- package/build/ba/consts.js.map +1 -0
- package/build/ba/helpers.d.ts +41 -0
- package/build/ba/helpers.d.ts.map +1 -0
- package/build/ba/helpers.js +79 -0
- package/build/ba/helpers.js.map +1 -0
- package/build/ba/index.d.ts +5 -0
- package/build/ba/index.d.ts.map +1 -0
- package/build/ba/index.js +4 -0
- package/build/ba/index.js.map +1 -0
- package/build/ba/schemas.d.ts +13 -0
- package/build/ba/schemas.d.ts.map +1 -0
- package/build/ba/schemas.js +181 -0
- package/build/ba/schemas.js.map +1 -0
- package/build/ba/types.d.ts +113 -0
- package/build/ba/types.d.ts.map +1 -0
- package/build/ba/types.js +2 -0
- package/build/ba/types.js.map +1 -0
- package/build/blueprint/case.d.ts +73 -0
- package/build/blueprint/case.d.ts.map +1 -0
- package/build/blueprint/case.js +244 -0
- package/build/blueprint/case.js.map +1 -0
- package/build/blueprint/consts.d.ts +11 -0
- package/build/blueprint/consts.d.ts.map +1 -0
- package/build/blueprint/consts.js +11 -0
- package/build/blueprint/consts.js.map +1 -0
- package/build/blueprint/index.d.ts +6 -0
- package/build/blueprint/index.d.ts.map +1 -0
- package/build/blueprint/index.js +6 -0
- package/build/blueprint/index.js.map +1 -0
- package/build/blueprint/resolve.d.ts +51 -0
- package/build/blueprint/resolve.d.ts.map +1 -0
- package/build/blueprint/resolve.js +108 -0
- package/build/blueprint/resolve.js.map +1 -0
- package/build/blueprint/schemas.d.ts +41 -0
- package/build/blueprint/schemas.d.ts.map +1 -0
- package/build/blueprint/schemas.js +27 -0
- package/build/blueprint/schemas.js.map +1 -0
- package/build/blueprint/types.d.ts +186 -0
- package/build/blueprint/types.d.ts.map +1 -0
- package/build/blueprint/types.js +32 -0
- package/build/blueprint/types.js.map +1 -0
- package/build/branding.d.ts +19 -0
- package/build/branding.d.ts.map +1 -0
- package/build/branding.js +32 -0
- package/build/branding.js.map +1 -0
- package/build/connect/consts.d.ts +378 -0
- package/build/connect/consts.d.ts.map +1 -0
- package/build/connect/consts.js +425 -0
- package/build/connect/consts.js.map +1 -0
- package/build/connect/entrypoints.d.ts +41 -0
- package/build/connect/entrypoints.d.ts.map +1 -0
- package/build/connect/entrypoints.js +141 -0
- package/build/connect/entrypoints.js.map +1 -0
- package/build/connect/errors.d.ts +50 -0
- package/build/connect/errors.d.ts.map +1 -0
- package/build/connect/errors.js +77 -0
- package/build/connect/errors.js.map +1 -0
- package/build/connect/index.d.ts +8 -0
- package/build/connect/index.d.ts.map +1 -0
- package/build/connect/index.js +6 -0
- package/build/connect/index.js.map +1 -0
- package/build/connect/ops.d.ts +192 -0
- package/build/connect/ops.d.ts.map +1 -0
- package/build/connect/ops.js +2 -0
- package/build/connect/ops.js.map +1 -0
- package/build/connect/references.d.ts +194 -0
- package/build/connect/references.d.ts.map +1 -0
- package/build/connect/references.js +62 -0
- package/build/connect/references.js.map +1 -0
- package/build/connect/schemas.d.ts +59 -0
- package/build/connect/schemas.d.ts.map +1 -0
- package/build/connect/schemas.js +346 -0
- package/build/connect/schemas.js.map +1 -0
- package/build/connect/types.d.ts +428 -0
- package/build/connect/types.d.ts.map +1 -0
- package/build/connect/types.js +2 -0
- package/build/connect/types.js.map +1 -0
- package/build/consts.d.ts +9 -0
- package/build/consts.d.ts.map +1 -0
- package/build/consts.js +31 -0
- package/build/consts.js.map +1 -0
- package/build/convert/consts.d.ts +539 -0
- package/build/convert/consts.d.ts.map +1 -0
- package/build/convert/consts.js +630 -0
- package/build/convert/consts.js.map +1 -0
- package/build/convert/helpers.d.ts +91 -0
- package/build/convert/helpers.d.ts.map +1 -0
- package/build/convert/helpers.js +301 -0
- package/build/convert/helpers.js.map +1 -0
- package/build/convert/index.d.ts +11 -0
- package/build/convert/index.d.ts.map +1 -0
- package/build/convert/index.js +4 -0
- package/build/convert/index.js.map +1 -0
- package/build/convert/schemas.d.ts +62 -0
- package/build/convert/schemas.d.ts.map +1 -0
- package/build/convert/schemas.js +626 -0
- package/build/convert/schemas.js.map +1 -0
- package/build/convert/types.d.ts +683 -0
- package/build/convert/types.d.ts.map +1 -0
- package/build/convert/types.js +2 -0
- package/build/convert/types.js.map +1 -0
- package/build/design/consts.d.ts +25 -0
- package/build/design/consts.d.ts.map +1 -0
- package/build/design/consts.js +26 -0
- package/build/design/consts.js.map +1 -0
- package/build/design/helpers.d.ts +60 -0
- package/build/design/helpers.d.ts.map +1 -0
- package/build/design/helpers.js +221 -0
- package/build/design/helpers.js.map +1 -0
- package/build/design/index.d.ts +6 -0
- package/build/design/index.d.ts.map +1 -0
- package/build/design/index.js +5 -0
- package/build/design/index.js.map +1 -0
- package/build/design/runtime.d.ts +126 -0
- package/build/design/runtime.d.ts.map +1 -0
- package/build/design/runtime.js +65 -0
- package/build/design/runtime.js.map +1 -0
- package/build/design/schemas.d.ts +21 -0
- package/build/design/schemas.d.ts.map +1 -0
- package/build/design/schemas.js +369 -0
- package/build/design/schemas.js.map +1 -0
- package/build/design/types.d.ts +199 -0
- package/build/design/types.d.ts.map +1 -0
- package/build/design/types.js +2 -0
- package/build/design/types.js.map +1 -0
- package/build/dev/consts.d.ts +32 -0
- package/build/dev/consts.d.ts.map +1 -0
- package/build/dev/consts.js +33 -0
- package/build/dev/consts.js.map +1 -0
- package/build/dev/index.d.ts +4 -0
- package/build/dev/index.d.ts.map +1 -0
- package/build/dev/index.js +3 -0
- package/build/dev/index.js.map +1 -0
- package/build/dev/schemas.d.ts +15 -0
- package/build/dev/schemas.d.ts.map +1 -0
- package/build/dev/schemas.js +116 -0
- package/build/dev/schemas.js.map +1 -0
- package/build/dev/types.d.ts +42 -0
- package/build/dev/types.d.ts.map +1 -0
- package/build/dev/types.js +2 -0
- package/build/dev/types.js.map +1 -0
- package/build/execution/consts.d.ts +36 -0
- package/build/execution/consts.d.ts.map +1 -0
- package/build/execution/consts.js +37 -0
- package/build/execution/consts.js.map +1 -0
- package/build/execution/index.d.ts +3 -0
- package/build/execution/index.d.ts.map +1 -0
- package/build/execution/index.js +2 -0
- package/build/execution/index.js.map +1 -0
- package/build/execution/types.d.ts +50 -0
- package/build/execution/types.d.ts.map +1 -0
- package/build/execution/types.js +2 -0
- package/build/execution/types.js.map +1 -0
- package/build/index.d.ts +22 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +21 -0
- package/build/index.js.map +1 -0
- package/build/integrity/consts.d.ts +226 -0
- package/build/integrity/consts.d.ts.map +1 -0
- package/build/integrity/consts.js +401 -0
- package/build/integrity/consts.js.map +1 -0
- package/build/integrity/index.d.ts +4 -0
- package/build/integrity/index.d.ts.map +1 -0
- package/build/integrity/index.js +3 -0
- package/build/integrity/index.js.map +1 -0
- package/build/integrity/types.d.ts +35 -0
- package/build/integrity/types.d.ts.map +1 -0
- package/build/integrity/types.js +2 -0
- package/build/integrity/types.js.map +1 -0
- package/build/integrity/verify.d.ts +23 -0
- package/build/integrity/verify.d.ts.map +1 -0
- package/build/integrity/verify.js +198 -0
- package/build/integrity/verify.js.map +1 -0
- package/build/metadata/consts.d.ts +101 -0
- package/build/metadata/consts.d.ts.map +1 -0
- package/build/metadata/consts.js +104 -0
- package/build/metadata/consts.js.map +1 -0
- package/build/metadata/index.d.ts +3 -0
- package/build/metadata/index.d.ts.map +1 -0
- package/build/metadata/index.js +3 -0
- package/build/metadata/index.js.map +1 -0
- package/build/metadata/types.d.ts +286 -0
- package/build/metadata/types.d.ts.map +1 -0
- package/build/metadata/types.js +39 -0
- package/build/metadata/types.js.map +1 -0
- package/build/moderation/consts.d.ts +58 -0
- package/build/moderation/consts.d.ts.map +1 -0
- package/build/moderation/consts.js +60 -0
- package/build/moderation/consts.js.map +1 -0
- package/build/moderation/index.d.ts +5 -0
- package/build/moderation/index.d.ts.map +1 -0
- package/build/moderation/index.js +4 -0
- package/build/moderation/index.js.map +1 -0
- package/build/moderation/schemas.d.ts +19 -0
- package/build/moderation/schemas.d.ts.map +1 -0
- package/build/moderation/schemas.js +26 -0
- package/build/moderation/schemas.js.map +1 -0
- package/build/moderation/types.d.ts +64 -0
- package/build/moderation/types.d.ts.map +1 -0
- package/build/moderation/types.js +2 -0
- package/build/moderation/types.js.map +1 -0
- package/build/moderation/utils.d.ts +21 -0
- package/build/moderation/utils.d.ts.map +1 -0
- package/build/moderation/utils.js +31 -0
- package/build/moderation/utils.js.map +1 -0
- package/build/preview/consts.d.ts +10 -0
- package/build/preview/consts.d.ts.map +1 -0
- package/build/preview/consts.js +11 -0
- package/build/preview/consts.js.map +1 -0
- package/build/preview/index.d.ts +3 -0
- package/build/preview/index.d.ts.map +1 -0
- package/build/preview/index.js +2 -0
- package/build/preview/index.js.map +1 -0
- package/build/preview/types.d.ts +60 -0
- package/build/preview/types.d.ts.map +1 -0
- package/build/preview/types.js +2 -0
- package/build/preview/types.js.map +1 -0
- package/build/scaffold/consts.d.ts +25 -0
- package/build/scaffold/consts.d.ts.map +1 -0
- package/build/scaffold/consts.js +26 -0
- package/build/scaffold/consts.js.map +1 -0
- package/build/scaffold/helpers.d.ts +35 -0
- package/build/scaffold/helpers.d.ts.map +1 -0
- package/build/scaffold/helpers.js +54 -0
- package/build/scaffold/helpers.js.map +1 -0
- package/build/scaffold/index.d.ts +5 -0
- package/build/scaffold/index.d.ts.map +1 -0
- package/build/scaffold/index.js +4 -0
- package/build/scaffold/index.js.map +1 -0
- package/build/scaffold/schemas.d.ts +5 -0
- package/build/scaffold/schemas.d.ts.map +1 -0
- package/build/scaffold/schemas.js +273 -0
- package/build/scaffold/schemas.js.map +1 -0
- package/build/scaffold/types.d.ts +144 -0
- package/build/scaffold/types.d.ts.map +1 -0
- package/build/scaffold/types.js +2 -0
- package/build/scaffold/types.js.map +1 -0
- package/build/skills/catalogue.d.ts +47 -0
- package/build/skills/catalogue.d.ts.map +1 -0
- package/build/skills/catalogue.js +1566 -0
- package/build/skills/catalogue.js.map +1 -0
- package/build/skills/consts.d.ts +104 -0
- package/build/skills/consts.d.ts.map +1 -0
- package/build/skills/consts.js +170 -0
- package/build/skills/consts.js.map +1 -0
- package/build/skills/index.d.ts +4 -0
- package/build/skills/index.d.ts.map +1 -0
- package/build/skills/index.js +4 -0
- package/build/skills/index.js.map +1 -0
- package/build/skills/roles.d.ts +52 -0
- package/build/skills/roles.d.ts.map +1 -0
- package/build/skills/roles.js +256 -0
- package/build/skills/roles.js.map +1 -0
- package/build/slot/consts.d.ts +305 -0
- package/build/slot/consts.d.ts.map +1 -0
- package/build/slot/consts.js +376 -0
- package/build/slot/consts.js.map +1 -0
- package/build/slot/helpers.d.ts +25 -0
- package/build/slot/helpers.d.ts.map +1 -0
- package/build/slot/helpers.js +27 -0
- package/build/slot/helpers.js.map +1 -0
- package/build/slot/index.d.ts +6 -0
- package/build/slot/index.d.ts.map +1 -0
- package/build/slot/index.js +5 -0
- package/build/slot/index.js.map +1 -0
- package/build/slot/layout.d.ts +72 -0
- package/build/slot/layout.d.ts.map +1 -0
- package/build/slot/layout.js +82 -0
- package/build/slot/layout.js.map +1 -0
- package/build/slot/schemas.d.ts +12 -0
- package/build/slot/schemas.d.ts.map +1 -0
- package/build/slot/schemas.js +43 -0
- package/build/slot/schemas.js.map +1 -0
- package/build/slot/types.d.ts +147 -0
- package/build/slot/types.d.ts.map +1 -0
- package/build/slot/types.js +2 -0
- package/build/slot/types.js.map +1 -0
- package/build/topology/card.d.ts +23 -0
- package/build/topology/card.d.ts.map +1 -0
- package/build/topology/card.js +95 -0
- package/build/topology/card.js.map +1 -0
- package/build/topology/consts.d.ts +32 -0
- package/build/topology/consts.d.ts.map +1 -0
- package/build/topology/consts.js +55 -0
- package/build/topology/consts.js.map +1 -0
- package/build/topology/helpers.d.ts +44 -0
- package/build/topology/helpers.d.ts.map +1 -0
- package/build/topology/helpers.js +112 -0
- package/build/topology/helpers.js.map +1 -0
- package/build/topology/index.d.ts +5 -0
- package/build/topology/index.d.ts.map +1 -0
- package/build/topology/index.js +4 -0
- package/build/topology/index.js.map +1 -0
- package/build/topology/types.d.ts +83 -0
- package/build/topology/types.d.ts.map +1 -0
- package/build/topology/types.js +2 -0
- package/build/topology/types.js.map +1 -0
- package/build/types.d.ts +88 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/build/ux/consts.d.ts +5 -0
- package/build/ux/consts.d.ts.map +1 -0
- package/build/ux/consts.js +6 -0
- package/build/ux/consts.js.map +1 -0
- package/build/ux/index.d.ts +4 -0
- package/build/ux/index.d.ts.map +1 -0
- package/build/ux/index.js +3 -0
- package/build/ux/index.js.map +1 -0
- package/build/ux/schemas.d.ts +8 -0
- package/build/ux/schemas.d.ts.map +1 -0
- package/build/ux/schemas.js +91 -0
- package/build/ux/schemas.js.map +1 -0
- package/build/ux/types.d.ts +21 -0
- package/build/ux/types.d.ts.map +1 -0
- package/build/ux/types.js +2 -0
- package/build/ux/types.js.map +1 -0
- package/package.json +71 -0
- package/src/agent/index.ts +4 -0
- package/src/agent/memory.ts +16 -0
- package/src/agent/spectator/consts.ts +10 -0
- package/src/agent/spectator/index.ts +3 -0
- package/src/agent/spectator/types.ts +14 -0
- package/src/agent/types.ts +10 -0
- package/src/areas/consts.ts +112 -0
- package/src/areas/index.ts +3 -0
- package/src/areas/types.ts +29 -0
- package/src/ba/consts.ts +40 -0
- package/src/ba/helpers.ts +93 -0
- package/src/ba/index.ts +5 -0
- package/src/ba/schemas.ts +196 -0
- package/src/ba/types.ts +125 -0
- package/src/blueprint/case.ts +272 -0
- package/src/blueprint/consts.ts +11 -0
- package/src/blueprint/index.ts +6 -0
- package/src/blueprint/resolve.ts +133 -0
- package/src/blueprint/schemas.ts +44 -0
- package/src/blueprint/types.ts +204 -0
- package/src/branding.ts +34 -0
- package/src/connect/consts.ts +441 -0
- package/src/connect/entrypoints.ts +291 -0
- package/src/connect/errors.ts +91 -0
- package/src/connect/index.ts +7 -0
- package/src/connect/ops.ts +208 -0
- package/src/connect/references.ts +89 -0
- package/src/connect/schemas.ts +384 -0
- package/src/connect/types.ts +456 -0
- package/src/consts.ts +34 -0
- package/src/convert/consts.ts +672 -0
- package/src/convert/helpers.ts +340 -0
- package/src/convert/index.ts +10 -0
- package/src/convert/schemas.ts +663 -0
- package/src/convert/types.ts +741 -0
- package/src/design/consts.ts +26 -0
- package/src/design/helpers.ts +255 -0
- package/src/design/index.ts +5 -0
- package/src/design/runtime.ts +142 -0
- package/src/design/schemas.ts +384 -0
- package/src/design/types.ts +191 -0
- package/src/dev/consts.ts +35 -0
- package/src/dev/index.ts +4 -0
- package/src/dev/schemas.ts +124 -0
- package/src/dev/types.ts +47 -0
- package/src/execution/consts.ts +37 -0
- package/src/execution/index.ts +3 -0
- package/src/execution/types.ts +55 -0
- package/src/index.ts +22 -0
- package/src/integrity/consts.ts +477 -0
- package/src/integrity/index.ts +3 -0
- package/src/integrity/types.ts +37 -0
- package/src/integrity/verify.ts +221 -0
- package/src/metadata/consts.ts +118 -0
- package/src/metadata/index.ts +3 -0
- package/src/metadata/types.ts +310 -0
- package/src/moderation/consts.ts +59 -0
- package/src/moderation/index.ts +4 -0
- package/src/moderation/schemas.ts +28 -0
- package/src/moderation/types.ts +68 -0
- package/src/moderation/utils.ts +35 -0
- package/src/preview/consts.ts +9 -0
- package/src/preview/index.ts +3 -0
- package/src/preview/types.ts +79 -0
- package/src/scaffold/consts.ts +26 -0
- package/src/scaffold/helpers.ts +84 -0
- package/src/scaffold/index.ts +4 -0
- package/src/scaffold/schemas.ts +283 -0
- package/src/scaffold/types.ts +118 -0
- package/src/skills/catalogue.ts +1617 -0
- package/src/skills/consts.ts +183 -0
- package/src/skills/index.ts +4 -0
- package/src/skills/roles.ts +299 -0
- package/src/slot/consts.ts +393 -0
- package/src/slot/helpers.ts +34 -0
- package/src/slot/index.ts +5 -0
- package/src/slot/layout.ts +141 -0
- package/src/slot/schemas.ts +46 -0
- package/src/slot/types.ts +164 -0
- package/src/topology/card.ts +106 -0
- package/src/topology/consts.ts +59 -0
- package/src/topology/helpers.ts +138 -0
- package/src/topology/index.ts +5 -0
- package/src/topology/types.ts +86 -0
- package/src/types.ts +104 -0
- package/src/ux/consts.ts +5 -0
- package/src/ux/index.ts +4 -0
- package/src/ux/schemas.ts +97 -0
- package/src/ux/types.ts +25 -0
- package/tests/connect-convert.spec.ts +161 -0
- package/tests/convert.spec.ts +318 -0
- package/tests/design.spec.ts +136 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { body, entrypoint, filter, gate, guard, params, query } from '@owlmeans/entrypoint'
|
|
2
|
+
import type { CommonEntrypoint, CommonEntrypointOptions } from '@owlmeans/entrypoint'
|
|
3
|
+
import { route, RouteMethod, socket } from '@owlmeans/route'
|
|
4
|
+
import { ConverterProjectLlmBodySchema } from '../convert/schemas.js'
|
|
5
|
+
import { connect } from './consts.js'
|
|
6
|
+
import {
|
|
7
|
+
ConnectAttachBodySchema, ConnectConfirmBodySchema, ConnectConvertCreateBodySchema,
|
|
8
|
+
ConnectConvertProceedBodySchema, ConnectCreateBodySchema, ConnectInquiryParamsSchema,
|
|
9
|
+
ConnectJobParamsSchema, ConnectModifyBodySchema, ConnectOpParamsSchema, ConnectOpResultSchema,
|
|
10
|
+
ConnectPipelineParamsSchema, ConnectPipelineResumeBodySchema, ConnectProjectIdSchema,
|
|
11
|
+
ConnectProjectLlmBodySchema, ConnectSessionOpenSchema, ConnectSessionParamsSchema,
|
|
12
|
+
ConnectStoryBodySchema, ConnectStoryParamsSchema, ConnectStoryQuerySchema,
|
|
13
|
+
ConnectWaitQuerySchema, InquiryAnswerSchema
|
|
14
|
+
} from './schemas.js'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* What the platform injects when it mounts the connector routes.
|
|
18
|
+
*
|
|
19
|
+
* The names of the guard and the gates belong to the deployment, not to the contract: a connector
|
|
20
|
+
* API on another platform would guard the same paths with its own vocabulary. Everything else —
|
|
21
|
+
* paths, methods, schemas, parents — is fixed here so a client cannot address them differently.
|
|
22
|
+
*/
|
|
23
|
+
export interface ConnectEntrypointOptions {
|
|
24
|
+
/** The guard alias every connector route carries. */
|
|
25
|
+
guard: string
|
|
26
|
+
/** The gate alias and parameters that decide project ownership. */
|
|
27
|
+
gate?: { alias: string, params: string[] }
|
|
28
|
+
/**
|
|
29
|
+
* The gate that decides whether the caller may use the local-LLM mode.
|
|
30
|
+
*
|
|
31
|
+
* Applied to the two routes that can turn it on — opening a delegated session and pinning a
|
|
32
|
+
* project to it. Everything else is free: `cloud` is the default and the platform writes it
|
|
33
|
+
* back by itself when a plan lapses.
|
|
34
|
+
*/
|
|
35
|
+
localLlm?: { alias: string, params: string[] }
|
|
36
|
+
/** The parent of the socket route — the platform's own websocket base. */
|
|
37
|
+
updateBase: string
|
|
38
|
+
/** Path prefix; defaults to `/connect`. */
|
|
39
|
+
path?: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Declare the connector's HTTP and socket surface.
|
|
44
|
+
*
|
|
45
|
+
* One list, spread into the platform's own entrypoints. Handlers are elevated onto these aliases
|
|
46
|
+
* server-side and onto client entrypoints in the SDK — the same declarations both times, which is
|
|
47
|
+
* what makes a path or a schema impossible to get wrong on one side only.
|
|
48
|
+
*/
|
|
49
|
+
export const connectEntrypoints = (opts: ConnectEntrypointOptions): CommonEntrypoint[] => {
|
|
50
|
+
const prefix = opts.path ?? '/connect'
|
|
51
|
+
const ownership = opts.gate != null
|
|
52
|
+
? guard(opts.guard, gate(opts.gate.alias, opts.gate.params))
|
|
53
|
+
: guard(opts.guard)
|
|
54
|
+
const paid: CommonEntrypointOptions | undefined = opts.localLlm != null
|
|
55
|
+
? gate(opts.localLlm.alias, opts.localLlm.params)
|
|
56
|
+
: undefined
|
|
57
|
+
|
|
58
|
+
return [
|
|
59
|
+
entrypoint(route(connect.base, prefix), ownership),
|
|
60
|
+
|
|
61
|
+
entrypoint(route(connect.capabilities, '/capabilities', {
|
|
62
|
+
parent: connect.base, method: RouteMethod.GET
|
|
63
|
+
})),
|
|
64
|
+
|
|
65
|
+
// --- session ---------------------------------------------------------------------------
|
|
66
|
+
entrypoint(
|
|
67
|
+
route(connect.session.open, '/session', { parent: connect.base, method: RouteMethod.POST }),
|
|
68
|
+
filter(body(ConnectSessionOpenSchema))
|
|
69
|
+
),
|
|
70
|
+
entrypoint(
|
|
71
|
+
route(connect.session.openDelegated, '/session/delegated', {
|
|
72
|
+
parent: connect.base, method: RouteMethod.POST
|
|
73
|
+
}),
|
|
74
|
+
filter(body(ConnectSessionOpenSchema), paid)
|
|
75
|
+
),
|
|
76
|
+
entrypoint(
|
|
77
|
+
route(connect.session.get, '/session/:sessionId', {
|
|
78
|
+
parent: connect.base, method: RouteMethod.GET
|
|
79
|
+
}),
|
|
80
|
+
filter(params(ConnectSessionParamsSchema))
|
|
81
|
+
),
|
|
82
|
+
entrypoint(
|
|
83
|
+
route(connect.session.heartbeat, '/session/:sessionId/heartbeat', {
|
|
84
|
+
parent: connect.base, method: RouteMethod.POST
|
|
85
|
+
}),
|
|
86
|
+
filter(params(ConnectSessionParamsSchema))
|
|
87
|
+
),
|
|
88
|
+
entrypoint(
|
|
89
|
+
route(connect.session.close, '/session/:sessionId/close', {
|
|
90
|
+
parent: connect.base, method: RouteMethod.POST
|
|
91
|
+
}),
|
|
92
|
+
filter(params(ConnectSessionParamsSchema))
|
|
93
|
+
),
|
|
94
|
+
entrypoint(
|
|
95
|
+
route(connect.session.socket, '/connect/:sessionId', socket(opts.updateBase)),
|
|
96
|
+
filter(params(ConnectSessionParamsSchema))
|
|
97
|
+
),
|
|
98
|
+
|
|
99
|
+
// --- operations ------------------------------------------------------------------------
|
|
100
|
+
entrypoint(
|
|
101
|
+
route(connect.op.pull, '/session/:sessionId/ops', {
|
|
102
|
+
parent: connect.base, method: RouteMethod.GET
|
|
103
|
+
}),
|
|
104
|
+
filter(params(ConnectSessionParamsSchema, query(ConnectWaitQuerySchema)))
|
|
105
|
+
),
|
|
106
|
+
entrypoint(
|
|
107
|
+
route(connect.op.submit, '/session/:sessionId/ops/:opId', {
|
|
108
|
+
parent: connect.base, method: RouteMethod.POST
|
|
109
|
+
}),
|
|
110
|
+
filter(params(ConnectOpParamsSchema, body(ConnectOpResultSchema)))
|
|
111
|
+
),
|
|
112
|
+
|
|
113
|
+
// --- project ---------------------------------------------------------------------------
|
|
114
|
+
entrypoint(
|
|
115
|
+
route(connect.project.create, '/project', { parent: connect.base, method: RouteMethod.POST }),
|
|
116
|
+
filter(body(ConnectCreateBodySchema))
|
|
117
|
+
),
|
|
118
|
+
entrypoint(route(connect.project.list, '/project', {
|
|
119
|
+
parent: connect.base, method: RouteMethod.GET
|
|
120
|
+
})),
|
|
121
|
+
entrypoint(
|
|
122
|
+
route(connect.project.attach, '/project/attach', {
|
|
123
|
+
parent: connect.base, method: RouteMethod.POST
|
|
124
|
+
}),
|
|
125
|
+
filter(body(ConnectAttachBodySchema))
|
|
126
|
+
),
|
|
127
|
+
entrypoint(
|
|
128
|
+
route(connect.project.confirm, '/project/:id/confirm', {
|
|
129
|
+
parent: connect.base, method: RouteMethod.POST
|
|
130
|
+
}),
|
|
131
|
+
filter(params(ConnectProjectIdSchema, body(ConnectConfirmBodySchema)))
|
|
132
|
+
),
|
|
133
|
+
entrypoint(
|
|
134
|
+
route(connect.project.status, '/project/:id/status', {
|
|
135
|
+
parent: connect.base, method: RouteMethod.GET
|
|
136
|
+
}),
|
|
137
|
+
filter(params(ConnectProjectIdSchema))
|
|
138
|
+
),
|
|
139
|
+
entrypoint(
|
|
140
|
+
route(connect.project.reinit, '/project/:id/reinit', {
|
|
141
|
+
parent: connect.base, method: RouteMethod.POST
|
|
142
|
+
}),
|
|
143
|
+
filter(params(ConnectProjectIdSchema))
|
|
144
|
+
),
|
|
145
|
+
entrypoint(
|
|
146
|
+
route(connect.project.modify, '/project/:id/modify', {
|
|
147
|
+
parent: connect.base, method: RouteMethod.POST
|
|
148
|
+
}),
|
|
149
|
+
filter(params(ConnectProjectIdSchema, body(ConnectModifyBodySchema)))
|
|
150
|
+
),
|
|
151
|
+
entrypoint(
|
|
152
|
+
route(connect.project.settings, '/project/:id/settings', {
|
|
153
|
+
parent: connect.base, method: RouteMethod.GET
|
|
154
|
+
}),
|
|
155
|
+
filter(params(ConnectProjectIdSchema))
|
|
156
|
+
),
|
|
157
|
+
entrypoint(
|
|
158
|
+
route(connect.project.llm, '/project/:id/llm', {
|
|
159
|
+
parent: connect.base, method: RouteMethod.POST
|
|
160
|
+
}),
|
|
161
|
+
filter(params(ConnectProjectIdSchema, body(ConnectProjectLlmBodySchema)), paid)
|
|
162
|
+
),
|
|
163
|
+
entrypoint(
|
|
164
|
+
route(connect.project.job, '/project/:id/job/:jobId', {
|
|
165
|
+
parent: connect.base, method: RouteMethod.GET
|
|
166
|
+
}),
|
|
167
|
+
filter(params(ConnectJobParamsSchema, query(ConnectWaitQuerySchema)))
|
|
168
|
+
),
|
|
169
|
+
|
|
170
|
+
// --- stories ---------------------------------------------------------------------------
|
|
171
|
+
entrypoint(
|
|
172
|
+
route(connect.story.list, '/story/:id', { parent: connect.base, method: RouteMethod.GET }),
|
|
173
|
+
filter(params(ConnectProjectIdSchema, query(ConnectStoryQuerySchema)))
|
|
174
|
+
),
|
|
175
|
+
entrypoint(
|
|
176
|
+
route(connect.story.create, '/story/:id', { parent: connect.base, method: RouteMethod.POST }),
|
|
177
|
+
filter(params(ConnectProjectIdSchema, body(ConnectStoryBodySchema)))
|
|
178
|
+
),
|
|
179
|
+
entrypoint(
|
|
180
|
+
route(connect.story.get, '/story/:id/:storyId', {
|
|
181
|
+
parent: connect.base, method: RouteMethod.GET
|
|
182
|
+
}),
|
|
183
|
+
filter(params(ConnectStoryParamsSchema))
|
|
184
|
+
),
|
|
185
|
+
entrypoint(
|
|
186
|
+
route(connect.story.update, '/story/:id/:storyId', {
|
|
187
|
+
parent: connect.base, method: RouteMethod.PUT
|
|
188
|
+
}),
|
|
189
|
+
filter(params(ConnectStoryParamsSchema, body(ConnectStoryBodySchema)))
|
|
190
|
+
),
|
|
191
|
+
entrypoint(
|
|
192
|
+
route(connect.story.delete, '/story/:id/:storyId', {
|
|
193
|
+
parent: connect.base, method: RouteMethod.DELETE
|
|
194
|
+
}),
|
|
195
|
+
filter(params(ConnectStoryParamsSchema))
|
|
196
|
+
),
|
|
197
|
+
entrypoint(
|
|
198
|
+
route(connect.story.develop, '/story/:id/:storyId/develop', {
|
|
199
|
+
parent: connect.base, method: RouteMethod.POST
|
|
200
|
+
}),
|
|
201
|
+
filter(params(ConnectStoryParamsSchema))
|
|
202
|
+
),
|
|
203
|
+
|
|
204
|
+
// --- generated files -------------------------------------------------------------------
|
|
205
|
+
entrypoint(
|
|
206
|
+
route(connect.files.list, '/project/:id/files', {
|
|
207
|
+
parent: connect.base, method: RouteMethod.GET
|
|
208
|
+
}),
|
|
209
|
+
filter(params(ConnectProjectIdSchema))
|
|
210
|
+
),
|
|
211
|
+
|
|
212
|
+
entrypoint(
|
|
213
|
+
route(connect.project.converterLlm, '/project/:id/converter-llm', {
|
|
214
|
+
parent: connect.base, method: RouteMethod.POST
|
|
215
|
+
}),
|
|
216
|
+
// No paid gate, unlike `project.llm`: delegated inference is the DEFAULT for a conversion,
|
|
217
|
+
// not an experimental capability. A conversion reads somebody else's whole repository, and
|
|
218
|
+
// handing those calls to the parent agent is what makes it affordable at all.
|
|
219
|
+
filter(params(ConnectProjectIdSchema, body(ConverterProjectLlmBodySchema)))
|
|
220
|
+
),
|
|
221
|
+
|
|
222
|
+
// --- conversion ------------------------------------------------------------------------
|
|
223
|
+
entrypoint(
|
|
224
|
+
route(connect.convert.create, '/convert', {
|
|
225
|
+
parent: connect.base, method: RouteMethod.POST
|
|
226
|
+
}),
|
|
227
|
+
filter(body(ConnectConvertCreateBodySchema))
|
|
228
|
+
),
|
|
229
|
+
entrypoint(
|
|
230
|
+
route(connect.convert.check, '/convert/:id/check', {
|
|
231
|
+
parent: connect.base, method: RouteMethod.GET
|
|
232
|
+
}),
|
|
233
|
+
filter(params(ConnectProjectIdSchema))
|
|
234
|
+
),
|
|
235
|
+
entrypoint(
|
|
236
|
+
route(connect.convert.start, '/convert/:id/start', {
|
|
237
|
+
parent: connect.base, method: RouteMethod.POST
|
|
238
|
+
}),
|
|
239
|
+
filter(params(ConnectProjectIdSchema))
|
|
240
|
+
),
|
|
241
|
+
entrypoint(
|
|
242
|
+
route(connect.convert.proceed, '/convert/:id/proceed', {
|
|
243
|
+
parent: connect.base, method: RouteMethod.POST
|
|
244
|
+
}),
|
|
245
|
+
filter(params(ConnectProjectIdSchema, body(ConnectConvertProceedBodySchema)))
|
|
246
|
+
),
|
|
247
|
+
entrypoint(
|
|
248
|
+
route(connect.convert.cancel, '/convert/:id/cancel', {
|
|
249
|
+
parent: connect.base, method: RouteMethod.POST
|
|
250
|
+
}),
|
|
251
|
+
filter(params(ConnectProjectIdSchema))
|
|
252
|
+
),
|
|
253
|
+
entrypoint(
|
|
254
|
+
route(connect.convert.status, '/convert/:id', {
|
|
255
|
+
parent: connect.base, method: RouteMethod.GET
|
|
256
|
+
}),
|
|
257
|
+
filter(params(ConnectProjectIdSchema))
|
|
258
|
+
),
|
|
259
|
+
entrypoint(
|
|
260
|
+
route(connect.convert.purge, '/convert/:id/purge', {
|
|
261
|
+
parent: connect.base, method: RouteMethod.POST
|
|
262
|
+
}),
|
|
263
|
+
filter(params(ConnectProjectIdSchema))
|
|
264
|
+
),
|
|
265
|
+
|
|
266
|
+
// --- inquiries -------------------------------------------------------------------------
|
|
267
|
+
// The fallback answer path: a connector answers through its own op id while it holds the
|
|
268
|
+
// question, but a run that parked while nobody was attached has no op to answer, and the
|
|
269
|
+
// question is then reachable only by its own id.
|
|
270
|
+
entrypoint(
|
|
271
|
+
route(connect.inquiry.answer, '/project/:id/inquiry/:inquiryId', {
|
|
272
|
+
parent: connect.base, method: RouteMethod.POST
|
|
273
|
+
}),
|
|
274
|
+
filter(params(ConnectInquiryParamsSchema, body(InquiryAnswerSchema)))
|
|
275
|
+
),
|
|
276
|
+
|
|
277
|
+
// --- pipelines -------------------------------------------------------------------------
|
|
278
|
+
entrypoint(
|
|
279
|
+
route(connect.pipeline.state, '/pipeline/:id/:runId', {
|
|
280
|
+
parent: connect.base, method: RouteMethod.GET
|
|
281
|
+
}),
|
|
282
|
+
filter(params(ConnectPipelineParamsSchema))
|
|
283
|
+
),
|
|
284
|
+
entrypoint(
|
|
285
|
+
route(connect.pipeline.resume, '/pipeline/:id/:runId/resume', {
|
|
286
|
+
parent: connect.base, method: RouteMethod.POST
|
|
287
|
+
}),
|
|
288
|
+
filter(params(ConnectPipelineParamsSchema, body(ConnectPipelineResumeBodySchema)))
|
|
289
|
+
),
|
|
290
|
+
]
|
|
291
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ResilientError } from '@owlmeans/error'
|
|
2
|
+
|
|
3
|
+
export class ConnectError extends ResilientError {
|
|
4
|
+
public static override typeName = `ViableConnect${ResilientError.typeName}`
|
|
5
|
+
|
|
6
|
+
constructor(message: string = 'error') {
|
|
7
|
+
super(ConnectError.typeName, `viable-connect:${message}`)
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** No session with that id, or it belongs to another profile. */
|
|
12
|
+
export class ConnectSessionNotFound extends ConnectError {
|
|
13
|
+
public static override typeName = `SessionNotFound${ConnectError.typeName}`
|
|
14
|
+
|
|
15
|
+
constructor(message: string = 'error') {
|
|
16
|
+
super(`session-not-found:${message}`)
|
|
17
|
+
this.type = ConnectSessionNotFound.typeName
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Nothing is attached to the project, and the operation needs a connector.
|
|
23
|
+
*
|
|
24
|
+
* FATAL by registration on the agent side: a run whose executor has gone away must stop at once
|
|
25
|
+
* rather than spend a retry ladder — the library retries a template write three times, the coder
|
|
26
|
+
* retries eight, and a model call retries eight inside that, so an unrecognised failure here costs
|
|
27
|
+
* minutes of nothing and a project lock held throughout. The step fails as an OUTCOME, the run row
|
|
28
|
+
* records where it stopped, and `pipeline.resume` picks it up when a connector returns.
|
|
29
|
+
*/
|
|
30
|
+
export class ConnectSessionGone extends ConnectError {
|
|
31
|
+
public static override typeName = `SessionGone${ConnectError.typeName}`
|
|
32
|
+
|
|
33
|
+
constructor(message: string = 'error') {
|
|
34
|
+
super(`session-gone:${message}`)
|
|
35
|
+
this.type = ConnectSessionGone.typeName
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** The connector did not answer within the command's own deadline. Retryable. */
|
|
40
|
+
export class ConnectOpTimeout extends ConnectError {
|
|
41
|
+
public static override typeName = `OpTimeout${ConnectError.typeName}`
|
|
42
|
+
|
|
43
|
+
constructor(message: string = 'error') {
|
|
44
|
+
super(`op-timeout:${message}`)
|
|
45
|
+
this.type = ConnectOpTimeout.typeName
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The connector executed the operation and refused it — a path outside the project, say. */
|
|
50
|
+
export class ConnectOpRefused extends ConnectError {
|
|
51
|
+
public static override typeName = `OpRefused${ConnectError.typeName}`
|
|
52
|
+
|
|
53
|
+
constructor(message: string = 'error') {
|
|
54
|
+
super(`op-refused:${message}`)
|
|
55
|
+
this.type = ConnectOpRefused.typeName
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The operation is meaningless for a local slot.
|
|
61
|
+
*
|
|
62
|
+
* Sandbox lifecycle, production, preview watching and remote git all address infrastructure a
|
|
63
|
+
* local target does not have. Refusing by name is what keeps a connector's tool list honest: the
|
|
64
|
+
* tool is hidden where it cannot work, and the API says so if one is called anyway.
|
|
65
|
+
*/
|
|
66
|
+
export class LocalSlotUnsupported extends ConnectError {
|
|
67
|
+
public static override typeName = `LocalUnsupported${ConnectError.typeName}`
|
|
68
|
+
|
|
69
|
+
constructor(message: string = 'error') {
|
|
70
|
+
super(`local-unsupported:${message}`)
|
|
71
|
+
this.type = LocalSlotUnsupported.typeName
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The op id is unknown, already answered, or belongs to another session. */
|
|
76
|
+
export class ConnectOpUnknown extends ConnectError {
|
|
77
|
+
public static override typeName = `OpUnknown${ConnectError.typeName}`
|
|
78
|
+
|
|
79
|
+
constructor(message: string = 'error') {
|
|
80
|
+
super(`op-unknown:${message}`)
|
|
81
|
+
this.type = ConnectOpUnknown.typeName
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ResilientError.registerErrorClass(ConnectError)
|
|
86
|
+
ResilientError.registerErrorClass(ConnectSessionNotFound)
|
|
87
|
+
ResilientError.registerErrorClass(ConnectSessionGone)
|
|
88
|
+
ResilientError.registerErrorClass(ConnectOpTimeout)
|
|
89
|
+
ResilientError.registerErrorClass(ConnectOpRefused)
|
|
90
|
+
ResilientError.registerErrorClass(LocalSlotUnsupported)
|
|
91
|
+
ResilientError.registerErrorClass(ConnectOpUnknown)
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { SlotCommandPayload } from '../slot/index.js'
|
|
2
|
+
import type {
|
|
3
|
+
ConnectInquiryKind, ConnectOpErrorKind, ConnectOpKind, ModelTaskMode, ModelTaskResultKind,
|
|
4
|
+
ModelTaskRole, ModelTier
|
|
5
|
+
} from './consts.js'
|
|
6
|
+
import type { ConnectServices } from './types.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* One thing the platform asks a connector to do.
|
|
10
|
+
*
|
|
11
|
+
* Operations are addressed to a PROJECT, not to a session: a connector that restarts mid-run
|
|
12
|
+
* re-attaches and is handed whatever is still pending, so an MCP server dying does not kill a
|
|
13
|
+
* pipeline that is minutes into its work. `sessionId` records which session it was published to,
|
|
14
|
+
* for tracing and for the redelivery counter — never for routing a result back.
|
|
15
|
+
*/
|
|
16
|
+
export interface ConnectOp {
|
|
17
|
+
id: string
|
|
18
|
+
projectId: string
|
|
19
|
+
sessionId: string
|
|
20
|
+
kind: ConnectOpKind
|
|
21
|
+
payload: SlotCommandPayload | ModelTask | ConfigurePayload | InquiryPayload
|
|
22
|
+
createdAt: string
|
|
23
|
+
/** When the asker stops waiting. A connector past this may skip the work and say so. */
|
|
24
|
+
deadlineAt: string
|
|
25
|
+
/** How many times this op has been delivered. > 1 means a connector reconnected. */
|
|
26
|
+
attempt: number
|
|
27
|
+
deliveredAt?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The answer to exactly one operation.
|
|
32
|
+
*
|
|
33
|
+
* `ok: false` with `kind: 'malformed'` is a RETRYABLE outcome — the platform asks again, with the
|
|
34
|
+
* problem quoted back. `'unavailable'` says the connector cannot do this at all and the run should
|
|
35
|
+
* fail rather than spin.
|
|
36
|
+
*/
|
|
37
|
+
export interface ConnectOpResult {
|
|
38
|
+
opId: string
|
|
39
|
+
sessionId: string
|
|
40
|
+
ok: boolean
|
|
41
|
+
value?: unknown
|
|
42
|
+
error?: ConnectOpError
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface ConnectOpError {
|
|
46
|
+
type: string
|
|
47
|
+
message: string
|
|
48
|
+
kind?: ConnectOpErrorKind
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The configuration a local target needs, as file CONTENT rather than as keys.
|
|
53
|
+
*
|
|
54
|
+
* The platform composes it — it is the only side that knows the OIDC client, its secret and the
|
|
55
|
+
* redirect URIs — and the connector writes it into the managed block of each named file, leaving
|
|
56
|
+
* every line the user added alone. `probe` names the services the platform wants to know about
|
|
57
|
+
* before it asks for a database migration or a boot check.
|
|
58
|
+
*/
|
|
59
|
+
export interface ConfigurePayload {
|
|
60
|
+
files: ConfigureFile[]
|
|
61
|
+
probe: Array<keyof ConnectServices>
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ConfigureFile {
|
|
65
|
+
/** Target-root-relative, e.g. `.env` or `sources/web/.env`. */
|
|
66
|
+
path: string
|
|
67
|
+
/** The managed block's content. Written between the connector's own markers. */
|
|
68
|
+
content: string
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface ConfigureResult {
|
|
72
|
+
written: string[]
|
|
73
|
+
/**
|
|
74
|
+
* Keys the target still needs and the user must supply — a local database URL, say.
|
|
75
|
+
*
|
|
76
|
+
* Read exactly like the publisher's configure acknowledgement: a key with an EMPTY value counts
|
|
77
|
+
* as missing, because a push that ran before a secret existed leaves one behind.
|
|
78
|
+
*/
|
|
79
|
+
missing: string[]
|
|
80
|
+
services: ConnectServices
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* One model call, handed to the parent agent.
|
|
85
|
+
*
|
|
86
|
+
* It carries everything a fresh subagent needs and nothing it does not: the persona as a system
|
|
87
|
+
* prompt, the conversation so far, and the shape the answer must take. There is no platform
|
|
88
|
+
* vocabulary in it — no pipeline, no step, no internal role semantics beyond a name and a tier —
|
|
89
|
+
* because it is read by a model the platform does not own.
|
|
90
|
+
*/
|
|
91
|
+
export interface ModelTask {
|
|
92
|
+
id: string
|
|
93
|
+
projectId: string
|
|
94
|
+
/** The job the call belongs to, so a parent can say what it is working on. */
|
|
95
|
+
jobId?: string
|
|
96
|
+
/** The platform role that asked. Informational; the tier is what decides the model. */
|
|
97
|
+
role: string
|
|
98
|
+
tier: ModelTier
|
|
99
|
+
/** Which attempt this is. > 0 means a previous answer was refused; `feedback` says why. */
|
|
100
|
+
attempt: number
|
|
101
|
+
mode: ModelTaskMode
|
|
102
|
+
system?: string
|
|
103
|
+
messages: ModelTaskMessage[]
|
|
104
|
+
/** `Tools` mode: what the subagent may call. JSON Schema per tool. */
|
|
105
|
+
tools?: ModelTaskTool[]
|
|
106
|
+
/** `Tools` mode: force one tool, or leave the choice open. */
|
|
107
|
+
toolChoice?: ModelTaskToolChoice
|
|
108
|
+
/** `Json` mode: the schema the single returned object must satisfy. */
|
|
109
|
+
outputSchema?: Record<string, unknown>
|
|
110
|
+
/** A soft cap, stated so a parent can size its own call. */
|
|
111
|
+
maxOutputChars?: number
|
|
112
|
+
/** Present on a retry: what was wrong with the previous answer. */
|
|
113
|
+
feedback?: string
|
|
114
|
+
expiresAt: string
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface ModelTaskMessage {
|
|
118
|
+
role: ModelTaskRole
|
|
119
|
+
content: string
|
|
120
|
+
/** Assistant messages that called tools. */
|
|
121
|
+
toolCalls?: ModelTaskToolCall[]
|
|
122
|
+
/** Tool messages answer one call. */
|
|
123
|
+
toolCallId?: string
|
|
124
|
+
/** Tool messages name the tool they answer. */
|
|
125
|
+
name?: string
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface ModelTaskTool {
|
|
129
|
+
name: string
|
|
130
|
+
description?: string
|
|
131
|
+
/** JSON Schema for the tool's arguments. */
|
|
132
|
+
parameters: Record<string, unknown>
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export type ModelTaskToolChoice = 'auto' | 'none' | { name: string }
|
|
136
|
+
|
|
137
|
+
export interface ModelTaskToolCall {
|
|
138
|
+
id?: string
|
|
139
|
+
name: string
|
|
140
|
+
args: Record<string, unknown>
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** What the parent's subagent produced. */
|
|
144
|
+
export interface ModelTaskResult {
|
|
145
|
+
taskId: string
|
|
146
|
+
kind: ModelTaskResultKind
|
|
147
|
+
text?: string
|
|
148
|
+
json?: unknown
|
|
149
|
+
toolCalls?: ModelTaskToolCall[]
|
|
150
|
+
/** Why the parent could not answer. Treated as a malformed answer and retried. */
|
|
151
|
+
error?: string
|
|
152
|
+
/** What the parent spent. Recorded for the trace; it costs the platform nothing. */
|
|
153
|
+
usage?: ModelTaskUsage
|
|
154
|
+
/** What the parent actually ran. Display only. */
|
|
155
|
+
model?: string
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export interface ModelTaskUsage {
|
|
159
|
+
inputTokens?: number
|
|
160
|
+
outputTokens?: number
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** One option a {@link ConnectInquiryKind.Choice} question offers. */
|
|
164
|
+
export interface ConnectInquiryOption {
|
|
165
|
+
value: string
|
|
166
|
+
label: string
|
|
167
|
+
description?: string
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* One question put to the person the connector is working for.
|
|
172
|
+
*
|
|
173
|
+
* It carries where it came from — the job, the run and the step — because an answer is recorded
|
|
174
|
+
* against the run that asked and re-read when that run resumes. `expiresAt` is what makes an
|
|
175
|
+
* unanswered question fail its step instead of parking a project lock forever.
|
|
176
|
+
*/
|
|
177
|
+
export interface InquiryPayload {
|
|
178
|
+
id: string
|
|
179
|
+
projectId: string
|
|
180
|
+
jobId?: string
|
|
181
|
+
runId?: string
|
|
182
|
+
/** The pipeline step that asked, so a resumed run can match the answer to the place it belongs. */
|
|
183
|
+
step?: string
|
|
184
|
+
kind: ConnectInquiryKind
|
|
185
|
+
question: string
|
|
186
|
+
/** What the asker already knows, so the person is not asked to go and find it out. */
|
|
187
|
+
context?: string
|
|
188
|
+
options?: ConnectInquiryOption[]
|
|
189
|
+
multiple?: boolean
|
|
190
|
+
/** Whether a choice question also accepts text the options do not cover. */
|
|
191
|
+
allowText?: boolean
|
|
192
|
+
/** What the asker will assume if nobody answers. Recorded as an assumption when it is used. */
|
|
193
|
+
default?: string | string[]
|
|
194
|
+
expiresAt: string
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* The answer to one question.
|
|
199
|
+
*
|
|
200
|
+
* `declined` is a real answer and not an absence: it says a person saw the question and chose not
|
|
201
|
+
* to decide, which the asker records as an assumption rather than waiting out the timeout.
|
|
202
|
+
*/
|
|
203
|
+
export interface InquiryAnswerPayload {
|
|
204
|
+
inquiryId: string
|
|
205
|
+
value?: string | string[]
|
|
206
|
+
text?: string
|
|
207
|
+
declined?: boolean
|
|
208
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { entrypointRef } from '@owlmeans/entrypoint'
|
|
2
|
+
import { connect } from './consts.js'
|
|
3
|
+
import type { ConnectOp, ConnectOpResult } from './ops.js'
|
|
4
|
+
import type { ConverterProjectLlmBody } from '../convert/index.js'
|
|
5
|
+
import type {
|
|
6
|
+
ConnectAttachBody, ConnectCapabilitiesView, ConnectConfirmBody, ConnectCreateBody, ConnectJob,
|
|
7
|
+
ConnectConvertCreateBody, ConnectConvertProceedBody, ConnectInquiryAnswerBody, ConnectJobParams,
|
|
8
|
+
ConnectModifyBody, ConnectOpSubmission, ConnectPipelineParams, ConnectPipelineResumeBody,
|
|
9
|
+
ConnectPipelineState, ConnectProjectLlmBody, ConnectProjectSettings, ConnectProjectStatus,
|
|
10
|
+
ConnectProjectSummary, ConnectSessionOpen, ConnectSessionParams, ConnectSessionView,
|
|
11
|
+
ConnectStoryBody, ConnectStoryDeletion, ConnectStoryItem, ConnectStoryList, ConnectStoryMutation,
|
|
12
|
+
ConnectStoryQuery, ConnectWaitQuery, ConversionStatusView, ConvertCheck,
|
|
13
|
+
} from './types.js'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Typed references for adapter packages that address the connector dynamically. Applications
|
|
17
|
+
* export protocol objects instead; an adapter may use this compact form because it never exposes
|
|
18
|
+
* aliases to UI or domain code.
|
|
19
|
+
*/
|
|
20
|
+
export const connectRef = {
|
|
21
|
+
capabilities: entrypointRef<{}, ConnectCapabilitiesView>(connect.capabilities),
|
|
22
|
+
session: {
|
|
23
|
+
open: entrypointRef<{ body: ConnectSessionOpen }, ConnectSessionView>(connect.session.open),
|
|
24
|
+
openDelegated: entrypointRef<{ body: ConnectSessionOpen }, ConnectSessionView>(connect.session.openDelegated),
|
|
25
|
+
get: entrypointRef<{ params: ConnectSessionParams }, ConnectSessionView>(connect.session.get),
|
|
26
|
+
heartbeat: entrypointRef<{ params: ConnectSessionParams }, ConnectSessionView>(connect.session.heartbeat),
|
|
27
|
+
close: entrypointRef<{ params: ConnectSessionParams }, ConnectSessionView>(connect.session.close),
|
|
28
|
+
},
|
|
29
|
+
op: {
|
|
30
|
+
pull: entrypointRef<{ params: ConnectSessionParams, query: ConnectWaitQuery }, ConnectOp[]>(connect.op.pull),
|
|
31
|
+
submit: entrypointRef<{
|
|
32
|
+
params: { sessionId: string, opId: string }, body: ConnectOpResult
|
|
33
|
+
}, ConnectOpSubmission>(connect.op.submit),
|
|
34
|
+
},
|
|
35
|
+
project: {
|
|
36
|
+
create: entrypointRef<{ body: ConnectCreateBody }, ConnectJob>(connect.project.create),
|
|
37
|
+
confirm: entrypointRef<{ params: { id: string }, body: ConnectConfirmBody }, ConnectJob>(connect.project.confirm),
|
|
38
|
+
list: entrypointRef<{}, ConnectProjectSummary[]>(connect.project.list),
|
|
39
|
+
status: entrypointRef<{ params: { id: string } }, ConnectProjectStatus>(connect.project.status),
|
|
40
|
+
attach: entrypointRef<{ body: ConnectAttachBody }, ConnectProjectStatus>(connect.project.attach),
|
|
41
|
+
reinit: entrypointRef<{ params: { id: string } }, ConnectJob>(connect.project.reinit),
|
|
42
|
+
modify: entrypointRef<{ params: { id: string }, body: ConnectModifyBody }, ConnectJob>(connect.project.modify),
|
|
43
|
+
settings: entrypointRef<{ params: { id: string } }, ConnectProjectSettings>(connect.project.settings),
|
|
44
|
+
llm: entrypointRef<{
|
|
45
|
+
params: { id: string }, body: ConnectProjectLlmBody
|
|
46
|
+
}, ConnectProjectSettings>(connect.project.llm),
|
|
47
|
+
converterLlm: entrypointRef<{
|
|
48
|
+
params: { id: string }, body: ConverterProjectLlmBody
|
|
49
|
+
}, ConnectProjectSettings>(connect.project.converterLlm),
|
|
50
|
+
job: entrypointRef<{ params: ConnectJobParams, query: ConnectWaitQuery }, ConnectJob>(connect.project.job),
|
|
51
|
+
},
|
|
52
|
+
convert: {
|
|
53
|
+
create: entrypointRef<{ body: ConnectConvertCreateBody }, ConnectJob>(connect.convert.create),
|
|
54
|
+
check: entrypointRef<{ params: { id: string } }, ConvertCheck>(connect.convert.check),
|
|
55
|
+
start: entrypointRef<{ params: { id: string } }, ConnectJob>(connect.convert.start),
|
|
56
|
+
proceed: entrypointRef<{
|
|
57
|
+
params: { id: string }, body: ConnectConvertProceedBody
|
|
58
|
+
}, ConnectJob>(connect.convert.proceed),
|
|
59
|
+
cancel: entrypointRef<{ params: { id: string } }, ConnectJob>(connect.convert.cancel),
|
|
60
|
+
status: entrypointRef<{
|
|
61
|
+
params: { id: string }
|
|
62
|
+
}, ConversionStatusView>(connect.convert.status),
|
|
63
|
+
purge: entrypointRef<{ params: { id: string } }, ConnectJob>(connect.convert.purge),
|
|
64
|
+
},
|
|
65
|
+
inquiry: {
|
|
66
|
+
answer: entrypointRef<{
|
|
67
|
+
params: { id: string, inquiryId: string }, body: ConnectInquiryAnswerBody
|
|
68
|
+
}, unknown>(connect.inquiry.answer),
|
|
69
|
+
},
|
|
70
|
+
story: {
|
|
71
|
+
list: entrypointRef<{ params: { id: string }, query: ConnectStoryQuery }, ConnectStoryList>(connect.story.list),
|
|
72
|
+
get: entrypointRef<{ params: { id: string, storyId: string } }, ConnectStoryItem>(connect.story.get),
|
|
73
|
+
create: entrypointRef<{ params: { id: string }, body: ConnectStoryBody }, ConnectStoryMutation>(connect.story.create),
|
|
74
|
+
update: entrypointRef<{
|
|
75
|
+
params: { id: string, storyId: string }, body: ConnectStoryBody
|
|
76
|
+
}, ConnectStoryMutation>(connect.story.update),
|
|
77
|
+
delete: entrypointRef<{ params: { id: string, storyId: string } }, ConnectStoryDeletion>(connect.story.delete),
|
|
78
|
+
develop: entrypointRef<{ params: { id: string, storyId: string } }, ConnectJob>(connect.story.develop),
|
|
79
|
+
},
|
|
80
|
+
files: {
|
|
81
|
+
list: entrypointRef<{ params: { id: string } }, string[]>(connect.files.list),
|
|
82
|
+
},
|
|
83
|
+
pipeline: {
|
|
84
|
+
state: entrypointRef<{ params: ConnectPipelineParams }, ConnectPipelineState>(connect.pipeline.state),
|
|
85
|
+
resume: entrypointRef<{
|
|
86
|
+
params: ConnectPipelineParams, body: ConnectPipelineResumeBody
|
|
87
|
+
}, ConnectJob>(connect.pipeline.resume),
|
|
88
|
+
},
|
|
89
|
+
}
|