@skaile/workspaces 6.8.1 → 6.9.1
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/CHANGELOG.md +54 -0
- package/dist/ai-sdk.js +5 -5
- package/dist/{asset-feeds-R75MH2WW.js → asset-feeds-PANNQPEE.js} +19 -19
- package/dist/{asset-feeds-R75MH2WW.js.map → asset-feeds-PANNQPEE.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +4 -4
- package/dist/asset-manager/history.js +19 -1
- package/dist/asset-manager/index.js +11 -11
- package/dist/asset-manager/installer.js +7 -7
- package/dist/asset-manager/renderers.js +6 -6
- package/dist/asset-manager/src/history.d.ts.map +1 -1
- package/dist/asset-manager/src/index.d.ts +65 -3
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +9 -9
- package/dist/bridge/harnesses/codex.js +29 -12
- package/dist/bridge/harnesses/codex.js.map +1 -1
- package/dist/bridge/harnesses/continue.js +8 -8
- package/dist/bridge/harnesses/echo.js +3 -3
- package/dist/bridge/harnesses/gemini.js +8 -8
- package/dist/bridge/harnesses/goose.js +8 -8
- package/dist/bridge/harnesses/omp.js +191 -24
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +8 -8
- package/dist/bridge/harnesses/qwen.js +8 -8
- package/dist/bridge/index.js +14 -14
- package/dist/bridge/src/codex/friendly-error.d.ts +7 -1
- package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
- package/dist/bridge/src/codex/login-fallback.d.ts +5 -0
- package/dist/bridge/src/codex/login-fallback.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/codex.d.ts +2 -0
- package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts +28 -0
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/{chunk-PKC2AHOB.js → chunk-2UKNI2HJ.js} +2 -2
- package/dist/{chunk-PKC2AHOB.js.map → chunk-2UKNI2HJ.js.map} +1 -1
- package/dist/{chunk-SBNUXJ6E.js → chunk-3AIEJSQR.js} +3 -3
- package/dist/{chunk-SBNUXJ6E.js.map → chunk-3AIEJSQR.js.map} +1 -1
- package/dist/{chunk-TMJBEGS4.js → chunk-4KPQ6ILH.js} +5 -34
- package/dist/chunk-4KPQ6ILH.js.map +1 -0
- package/dist/{chunk-G7NMF5WQ.js → chunk-4ROXSQEG.js} +3 -3
- package/dist/{chunk-G7NMF5WQ.js.map → chunk-4ROXSQEG.js.map} +1 -1
- package/dist/{chunk-WFK4MUBL.js → chunk-5J6JWGY4.js} +3 -3
- package/dist/{chunk-WFK4MUBL.js.map → chunk-5J6JWGY4.js.map} +1 -1
- package/dist/{chunk-ORXV3UB6.js → chunk-5J6N6LHL.js} +3 -3
- package/dist/{chunk-ORXV3UB6.js.map → chunk-5J6N6LHL.js.map} +1 -1
- package/dist/{chunk-O5Y7VMVQ.js → chunk-5KWQMCH7.js} +3 -3
- package/dist/{chunk-O5Y7VMVQ.js.map → chunk-5KWQMCH7.js.map} +1 -1
- package/dist/{chunk-KTBKW2FI.js → chunk-7QYBKUAS.js} +4 -3
- package/dist/chunk-7QYBKUAS.js.map +1 -0
- package/dist/{chunk-SILFO5RY.js → chunk-7TF5MNFK.js} +2 -2
- package/dist/{chunk-SILFO5RY.js.map → chunk-7TF5MNFK.js.map} +1 -1
- package/dist/{chunk-XIIIGLSL.js → chunk-7UCPGQCW.js} +9 -9
- package/dist/{chunk-XIIIGLSL.js.map → chunk-7UCPGQCW.js.map} +1 -1
- package/dist/{chunk-NAEXYRHR.js → chunk-AQTAULXT.js} +10 -10
- package/dist/{chunk-NAEXYRHR.js.map → chunk-AQTAULXT.js.map} +1 -1
- package/dist/{chunk-LL5GMUQG.js → chunk-BDAXHJC5.js} +7 -7
- package/dist/{chunk-LL5GMUQG.js.map → chunk-BDAXHJC5.js.map} +1 -1
- package/dist/{chunk-DXBHGNSI.js → chunk-BLBXOG5Q.js} +6 -6
- package/dist/{chunk-DXBHGNSI.js.map → chunk-BLBXOG5Q.js.map} +1 -1
- package/dist/{chunk-Y6LC5PEZ.js → chunk-C324IAXI.js} +14 -5
- package/dist/chunk-C324IAXI.js.map +1 -0
- package/dist/{chunk-NW7Y5SNK.js → chunk-CPMLMNI5.js} +4 -4
- package/dist/{chunk-NW7Y5SNK.js.map → chunk-CPMLMNI5.js.map} +1 -1
- package/dist/{chunk-DFP476EU.js → chunk-DJSGQW2Q.js} +89 -4
- package/dist/chunk-DJSGQW2Q.js.map +1 -0
- package/dist/{chunk-QCR5AE5E.js → chunk-E675QKFG.js} +5 -5
- package/dist/{chunk-QCR5AE5E.js.map → chunk-E675QKFG.js.map} +1 -1
- package/dist/{chunk-7RBFYW24.js → chunk-EMSU6L7K.js} +5 -5
- package/dist/{chunk-7RBFYW24.js.map → chunk-EMSU6L7K.js.map} +1 -1
- package/dist/{chunk-O7ADRMCR.js → chunk-FZO64PLQ.js} +45 -16
- package/dist/chunk-FZO64PLQ.js.map +1 -0
- package/dist/{chunk-I4DI5DAX.js → chunk-FZTHL6SK.js} +18 -18
- package/dist/chunk-FZTHL6SK.js.map +1 -0
- package/dist/{chunk-CMXDFTA2.js → chunk-GYPPVANR.js} +3 -3
- package/dist/{chunk-CMXDFTA2.js.map → chunk-GYPPVANR.js.map} +1 -1
- package/dist/{chunk-G44FFUMA.js → chunk-GZL6RN4Z.js} +92 -14
- package/dist/chunk-GZL6RN4Z.js.map +1 -0
- package/dist/{chunk-N65H7YYI.js → chunk-IISEBVMA.js} +5 -5
- package/dist/{chunk-N65H7YYI.js.map → chunk-IISEBVMA.js.map} +1 -1
- package/dist/{chunk-BGATDUYX.js → chunk-J45JCYS4.js} +4 -4
- package/dist/{chunk-BGATDUYX.js.map → chunk-J45JCYS4.js.map} +1 -1
- package/dist/{chunk-6ZM5X2XW.js → chunk-KVTV4LT2.js} +3 -3
- package/dist/{chunk-6ZM5X2XW.js.map → chunk-KVTV4LT2.js.map} +1 -1
- package/dist/{chunk-SAL72A7T.js → chunk-LMADWO4Q.js} +9 -6
- package/dist/chunk-LMADWO4Q.js.map +1 -0
- package/dist/{chunk-3HSLJAMJ.js → chunk-LYVLDGML.js} +3 -3
- package/dist/{chunk-3HSLJAMJ.js.map → chunk-LYVLDGML.js.map} +1 -1
- package/dist/{chunk-SGI5MRKP.js → chunk-MDCI4RSG.js} +40 -5
- package/dist/chunk-MDCI4RSG.js.map +1 -0
- package/dist/{chunk-QGA2OBUJ.js → chunk-MPO5CQUZ.js} +3 -3
- package/dist/{chunk-QGA2OBUJ.js.map → chunk-MPO5CQUZ.js.map} +1 -1
- package/dist/{chunk-KO3VSZQP.js → chunk-NDBHEOIA.js} +6 -6
- package/dist/{chunk-KO3VSZQP.js.map → chunk-NDBHEOIA.js.map} +1 -1
- package/dist/{chunk-OLZE4IHX.js → chunk-PBEDRYHP.js} +4093 -3886
- package/dist/chunk-PBEDRYHP.js.map +1 -0
- package/dist/{chunk-YMO4ZDLC.js → chunk-PLVM6OIV.js} +45 -13
- package/dist/chunk-PLVM6OIV.js.map +1 -0
- package/dist/{chunk-LZ3E6TML.js → chunk-Q5SSRVD5.js} +18 -9
- package/dist/chunk-Q5SSRVD5.js.map +1 -0
- package/dist/{chunk-4CD2R4MJ.js → chunk-QBUJTVMY.js} +4 -4
- package/dist/{chunk-4CD2R4MJ.js.map → chunk-QBUJTVMY.js.map} +1 -1
- package/dist/{chunk-REAF7ZFA.js → chunk-QIV7H3GJ.js} +398 -36
- package/dist/chunk-QIV7H3GJ.js.map +1 -0
- package/dist/{chunk-I6XH46Q6.js → chunk-RP3ML3QD.js} +3 -3
- package/dist/{chunk-I6XH46Q6.js.map → chunk-RP3ML3QD.js.map} +1 -1
- package/dist/{chunk-SVMIUCTT.js → chunk-RZRJTCP2.js} +4 -4
- package/dist/{chunk-SVMIUCTT.js.map → chunk-RZRJTCP2.js.map} +1 -1
- package/dist/{chunk-N2W7OJC6.js → chunk-S47KU4YB.js} +3 -3
- package/dist/{chunk-N2W7OJC6.js.map → chunk-S47KU4YB.js.map} +1 -1
- package/dist/{chunk-EDKTS44C.js → chunk-SME3PK4L.js} +6 -6
- package/dist/{chunk-EDKTS44C.js.map → chunk-SME3PK4L.js.map} +1 -1
- package/dist/{chunk-QW5B3TEO.js → chunk-TMQFOJ6F.js} +3 -3
- package/dist/{chunk-QW5B3TEO.js.map → chunk-TMQFOJ6F.js.map} +1 -1
- package/dist/{chunk-BB5EJLKZ.js → chunk-TUOHA6BM.js} +2 -2
- package/dist/{chunk-BB5EJLKZ.js.map → chunk-TUOHA6BM.js.map} +1 -1
- package/dist/{chunk-HLAEYFUN.js → chunk-U3FI4DVT.js} +3 -3
- package/dist/{chunk-HLAEYFUN.js.map → chunk-U3FI4DVT.js.map} +1 -1
- package/dist/{chunk-237BMOZW.js → chunk-UWD7YBDR.js} +4 -4
- package/dist/{chunk-237BMOZW.js.map → chunk-UWD7YBDR.js.map} +1 -1
- package/dist/{chunk-56PIAGD6.js → chunk-VEIWFS7Z.js} +331 -59
- package/dist/chunk-VEIWFS7Z.js.map +1 -0
- package/dist/{chunk-7O2CR5SZ.js → chunk-WEPTGUR4.js} +41 -35
- package/dist/chunk-WEPTGUR4.js.map +1 -0
- package/dist/{chunk-VT6G5AJV.js → chunk-WS3BOCAT.js} +4 -3
- package/dist/chunk-WS3BOCAT.js.map +1 -0
- package/dist/{chunk-JAGBPHXB.js → chunk-X5SGUBUV.js} +3 -3
- package/dist/{chunk-JAGBPHXB.js.map → chunk-X5SGUBUV.js.map} +1 -1
- package/dist/{chunk-62NNP7LU.js → chunk-XB4XHGIE.js} +3 -3
- package/dist/{chunk-62NNP7LU.js.map → chunk-XB4XHGIE.js.map} +1 -1
- package/dist/{chunk-VQFA5DR7.js → chunk-YPTDPN2B.js} +3 -3
- package/dist/{chunk-VQFA5DR7.js.map → chunk-YPTDPN2B.js.map} +1 -1
- package/dist/{chunk-Z5EPCIB6.js → chunk-ZUROGXJM.js} +93 -14
- package/dist/chunk-ZUROGXJM.js.map +1 -0
- package/dist/{claude-code-DS26HI3K.js → claude-code-ILZ46SLO.js} +5 -5
- package/dist/{claude-code-DS26HI3K.js.map → claude-code-ILZ46SLO.js.map} +1 -1
- package/dist/cli/index.js +277 -143
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-pins.d.ts +8 -0
- package/dist/cli/src/agent-pins.d.ts.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +4 -4
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/connector.d.ts.map +1 -1
- package/dist/cli/src/commands/deploy.d.ts.map +1 -1
- package/dist/cli/src/commands/flow.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +42 -0
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/npx.d.ts.map +1 -1
- package/dist/cli/src/commands/patch.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts +10 -0
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts +5 -3
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/session.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/store.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts +13 -0
- package/dist/cli/src/config-checks.d.ts.map +1 -1
- package/dist/cli/src/group-help.d.ts +11 -0
- package/dist/cli/src/group-help.d.ts.map +1 -0
- package/dist/connectors/config.js +2 -2
- package/dist/connectors/index.js +17 -17
- package/dist/connectors/src/config.d.ts.map +1 -1
- package/dist/{connectors-3ST6PGWP.js → connectors-KTRUUKWG.js} +20 -20
- package/dist/{connectors-3ST6PGWP.js.map → connectors-KTRUUKWG.js.map} +1 -1
- package/dist/core/index.js +4 -4
- package/dist/core/logging.js +1 -1
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/logging/config.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +6 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/run-state-ignore.d.ts +6 -4
- package/dist/core/src/run-state-ignore.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +6 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/deploy/index.js +4 -4
- package/dist/discovery/index.js +2 -2
- package/dist/{ensure-sources-VELKRM6X.js → ensure-sources-5QWKUIUD.js} +23 -23
- package/dist/{ensure-sources-VELKRM6X.js.map → ensure-sources-5QWKUIUD.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +17 -17
- package/dist/factory-assets/connectors/deploy.js +17 -17
- package/dist/factory-assets/connectors/devserver.js +17 -17
- package/dist/factory-assets/connectors/flow/adapter.js +17 -17
- package/dist/factory-assets/connectors/flow/engine.js +5 -5
- package/dist/factory-assets/connectors/flow/run-flow.js +18 -18
- package/dist/factory-assets/connectors/flow.js +17 -17
- package/dist/factory-assets/connectors/git.js +17 -17
- package/dist/factory-assets/connectors/gmail.js +17 -17
- package/dist/factory-assets/connectors/googledrive.js +17 -17
- package/dist/factory-assets/connectors/local.js +17 -17
- package/dist/factory-assets/connectors/mattermost.js +17 -17
- package/dist/factory-assets/connectors/memory.js +17 -17
- package/dist/factory-assets/connectors/minio.js +17 -17
- package/dist/factory-assets/connectors/postgres.js +17 -17
- package/dist/factory-assets/connectors/s3.js +17 -17
- package/dist/factory-assets/connectors/sharepoint.js +17 -17
- package/dist/factory-assets/connectors/sqlite.js +17 -17
- package/dist/factory-assets/connectors/static-server.js +17 -17
- package/dist/factory-assets/connectors/tunnel.js +17 -17
- package/dist/factory-assets/connectors/webdav.js +17 -17
- package/dist/factory-assets/connectors/xstate-store.js +17 -17
- package/dist/factory-assets/connectors/xstate.js +17 -17
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +4 -4
- package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +10 -10
- package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +15 -15
- package/dist/factory-assets/skills/manifest-compliance/SKILL.md +1 -1
- package/dist/{flows-I6ODIPZZ.js → flows-UCP6ZUYS.js} +7 -7
- package/dist/{flows-I6ODIPZZ.js.map → flows-UCP6ZUYS.js.map} +1 -1
- package/dist/{helpers-LWNKX56Y.js → helpers-INS4B7OQ.js} +23 -23
- package/dist/{helpers-LWNKX56Y.js.map → helpers-INS4B7OQ.js.map} +1 -1
- package/dist/library/index.js +7 -7
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/remote/index.d.ts +1 -1
- package/dist/library/src/remote/index.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +33 -2
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/{library-publish-WJVCT2IK.js → library-publish-AZTYRASL.js} +61 -47
- package/dist/library-publish-AZTYRASL.js.map +1 -0
- package/dist/model-endpoint/index.js +7 -7
- package/dist/model-endpoint/src/index.d.ts +1 -1
- package/dist/model-endpoint/src/index.d.ts.map +1 -1
- package/dist/model-endpoint/src/openai-agent.d.ts +60 -0
- package/dist/model-endpoint/src/openai-agent.d.ts.map +1 -0
- package/dist/model-endpoint/src/resolve.d.ts +12 -3
- package/dist/model-endpoint/src/resolve.d.ts.map +1 -1
- package/dist/model-endpoint/src/server.d.ts.map +1 -1
- package/dist/model-endpoint/src/types.d.ts +33 -0
- package/dist/model-endpoint/src/types.d.ts.map +1 -1
- package/dist/model-endpoint/src/upstream-models.d.ts +20 -0
- package/dist/model-endpoint/src/upstream-models.d.ts.map +1 -0
- package/dist/{open-library-Q7QZJY5D.js → open-library-3HMXYGUF.js} +26 -26
- package/dist/{open-library-Q7QZJY5D.js.map → open-library-3HMXYGUF.js.map} +1 -1
- package/dist/{open-registry-RZW2AFD6.js → open-registry-BHBHQMBA.js} +11 -11
- package/dist/{open-registry-RZW2AFD6.js.map → open-registry-BHBHQMBA.js.map} +1 -1
- package/dist/{paths-RPK5PNZQ.js → paths-77PXOXZY.js} +7 -7
- package/dist/{paths-RPK5PNZQ.js.map → paths-77PXOXZY.js.map} +1 -1
- package/dist/{plugin-store-OJTERUEZ.js → plugin-store-XQP2CRYH.js} +7 -7
- package/dist/{plugin-store-OJTERUEZ.js.map → plugin-store-XQP2CRYH.js.map} +1 -1
- package/dist/{project-WVPRL7CP.js → project-HVNPK2ZF.js} +39 -40
- package/dist/{project-WVPRL7CP.js.map → project-HVNPK2ZF.js.map} +1 -1
- package/dist/resolver/index.js +4 -4
- package/dist/runner/index.js +28 -28
- package/dist/runner/src/agent-loop.d.ts +42 -0
- package/dist/runner/src/agent-loop.d.ts.map +1 -0
- package/dist/runner/src/agents/in-process-host.d.ts +9 -6
- package/dist/runner/src/agents/in-process-host.d.ts.map +1 -1
- package/dist/runner/src/model-endpoint-discovery.d.ts +3 -0
- package/dist/runner/src/model-endpoint-discovery.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts +6 -4
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/runner/src/turn-end-contract.d.ts.map +1 -1
- package/dist/runner/src/turn-scheduler.d.ts +37 -2
- package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +11 -11
- package/dist/sdk/bridge.js +14 -14
- package/dist/sdk/core.js +4 -4
- package/dist/sdk/flow.js +5 -5
- package/dist/sdk/index.js +28 -28
- package/dist/sdk/resolver.js +4 -4
- package/dist/sdk/runner.js +28 -28
- package/dist/sdk/transport/ws/server.js +5 -5
- package/dist/sdk/transport/ws.js +5 -5
- package/dist/sdk/transport.js +5 -5
- package/dist/{serve-preflight-24YWWYUG.js → serve-preflight-NHZOKHIC.js} +27 -26
- package/dist/{serve-preflight-24YWWYUG.js.map → serve-preflight-NHZOKHIC.js.map} +1 -1
- package/dist/{setup-F5JX64UP.js → setup-EX7Z7XRN.js} +24 -24
- package/dist/{setup-F5JX64UP.js.map → setup-EX7Z7XRN.js.map} +1 -1
- package/dist/{skills-KHHW3RZ3.js → skills-DE2BDQ6G.js} +6 -6
- package/dist/{skills-KHHW3RZ3.js.map → skills-DE2BDQ6G.js.map} +1 -1
- package/dist/{source-DG5IAAGZ.js → source-URRPRGMZ.js} +39 -39
- package/dist/{source-DG5IAAGZ.js.map → source-URRPRGMZ.js.map} +1 -1
- package/dist/{source-manifest-publish-76S2JD3O.js → source-manifest-publish-ZWRYRJ2U.js} +41 -41
- package/dist/{source-manifest-publish-76S2JD3O.js.map → source-manifest-publish-ZWRYRJ2U.js.map} +1 -1
- package/dist/transport/index.js +5 -5
- package/dist/transport/ws/server.js +5 -5
- package/dist/transport/ws.js +5 -5
- package/dist/tui/index.js +29 -29
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +20 -20
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-56PIAGD6.js.map +0 -1
- package/dist/chunk-7O2CR5SZ.js.map +0 -1
- package/dist/chunk-DFP476EU.js.map +0 -1
- package/dist/chunk-E5AZA2FL.js +0 -83
- package/dist/chunk-E5AZA2FL.js.map +0 -1
- package/dist/chunk-G44FFUMA.js.map +0 -1
- package/dist/chunk-I4DI5DAX.js.map +0 -1
- package/dist/chunk-KTBKW2FI.js.map +0 -1
- package/dist/chunk-LZ3E6TML.js.map +0 -1
- package/dist/chunk-O7ADRMCR.js.map +0 -1
- package/dist/chunk-OLZE4IHX.js.map +0 -1
- package/dist/chunk-REAF7ZFA.js.map +0 -1
- package/dist/chunk-SAL72A7T.js.map +0 -1
- package/dist/chunk-SGI5MRKP.js.map +0 -1
- package/dist/chunk-TMJBEGS4.js.map +0 -1
- package/dist/chunk-VT6G5AJV.js.map +0 -1
- package/dist/chunk-Y6LC5PEZ.js.map +0 -1
- package/dist/chunk-YMO4ZDLC.js.map +0 -1
- package/dist/chunk-Z5EPCIB6.js.map +0 -1
- package/dist/library-publish-WJVCT2IK.js.map +0 -1
|
@@ -1,62 +1,61 @@
|
|
|
1
|
-
import { makeHttpPublisherClient } from './chunk-
|
|
2
|
-
import { scanIdentities } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-BB5EJLKZ.js';
|
|
1
|
+
import { makeHttpPublisherClient } from './chunk-YPTDPN2B.js';
|
|
2
|
+
import { scanIdentities } from './chunk-WEPTGUR4.js';
|
|
3
|
+
import './chunk-DJSGQW2Q.js';
|
|
4
|
+
import './chunk-TMQFOJ6F.js';
|
|
5
|
+
import { isStoreAuthenticated } from './chunk-J45JCYS4.js';
|
|
6
|
+
import { exitOnEmptyAsset, bareName, assetNamespace, refFor, exitOnManifestPublisherProblems, exitOnLibrarySymlinks, exitOnManifestPathProblems, exitOnRootSkillExtraAssets, assetEntryRef, readOnlyLibraryAt, manifestNamespaces, composeRefContext, registeredAssetKeys, plannedRefs, manifestRequiresProblems, manifestDependencyProblems, declaredVersion, formatNamespaceAvailability, preflightNamespace, publishToStore, findEntryManifestFile, checkAsset, duplicateAssetMessage, manifestParseErrorText, checkAssetFile, renameFileFix, invalidSemverText } from './chunk-ZUROGXJM.js';
|
|
7
|
+
import { openLibraryManager, openCatalogSource } from './chunk-RZRJTCP2.js';
|
|
8
|
+
import { getKindRegistry } from './chunk-E675QKFG.js';
|
|
9
|
+
import { logErr, logInfo, logOk, logWarn, S } from './chunk-BLBXOG5Q.js';
|
|
10
|
+
import './chunk-PBEDRYHP.js';
|
|
11
|
+
import './chunk-2UKNI2HJ.js';
|
|
12
|
+
import './chunk-EMSU6L7K.js';
|
|
13
|
+
import './chunk-S47KU4YB.js';
|
|
14
|
+
import './chunk-TUOHA6BM.js';
|
|
16
15
|
import './chunk-WYZXSJBK.js';
|
|
17
16
|
import './chunk-GTAHU4N4.js';
|
|
18
17
|
import './chunk-HQAPUPBE.js';
|
|
19
18
|
import './chunk-KW37WNXY.js';
|
|
20
19
|
import './chunk-3MWQKQUB.js';
|
|
21
|
-
import './chunk-
|
|
20
|
+
import './chunk-QIV7H3GJ.js';
|
|
22
21
|
import './chunk-O7SG5PC2.js';
|
|
23
22
|
import './chunk-7QBNJTTQ.js';
|
|
24
23
|
import './chunk-O2SYFJWP.js';
|
|
25
|
-
import './chunk-
|
|
24
|
+
import './chunk-U3FI4DVT.js';
|
|
26
25
|
import './chunk-32NA4TVC.js';
|
|
27
26
|
import './chunk-W3UDISS2.js';
|
|
28
|
-
import './chunk-
|
|
29
|
-
import './chunk-
|
|
27
|
+
import './chunk-GYPPVANR.js';
|
|
28
|
+
import './chunk-SME3PK4L.js';
|
|
30
29
|
import './chunk-4R6DROGN.js';
|
|
31
30
|
import './chunk-PTJTOPE5.js';
|
|
32
31
|
import './chunk-USSP43U3.js';
|
|
33
|
-
import './chunk-
|
|
32
|
+
import './chunk-AQTAULXT.js';
|
|
34
33
|
import './chunk-BRPEW3UL.js';
|
|
35
|
-
import './chunk-
|
|
36
|
-
import './chunk-
|
|
37
|
-
import './chunk-
|
|
38
|
-
import './chunk-
|
|
39
|
-
import './chunk-
|
|
34
|
+
import './chunk-LMADWO4Q.js';
|
|
35
|
+
import './chunk-7UCPGQCW.js';
|
|
36
|
+
import './chunk-CPMLMNI5.js';
|
|
37
|
+
import './chunk-KVTV4LT2.js';
|
|
38
|
+
import './chunk-C324IAXI.js';
|
|
40
39
|
import './chunk-LOO5CB5M.js';
|
|
41
40
|
import './chunk-YEOG7CWQ.js';
|
|
42
|
-
import './chunk-
|
|
41
|
+
import './chunk-3AIEJSQR.js';
|
|
43
42
|
import './chunk-WWSRIT3J.js';
|
|
44
|
-
import './chunk-
|
|
43
|
+
import './chunk-RP3ML3QD.js';
|
|
45
44
|
import './chunk-5DE3DGVR.js';
|
|
46
45
|
import './chunk-7DN6JKP2.js';
|
|
47
|
-
import './chunk-
|
|
48
|
-
import './chunk-
|
|
46
|
+
import './chunk-5J6N6LHL.js';
|
|
47
|
+
import './chunk-7TF5MNFK.js';
|
|
49
48
|
import './chunk-G5SUWZEU.js';
|
|
50
|
-
import './chunk-
|
|
49
|
+
import './chunk-LYVLDGML.js';
|
|
51
50
|
import './chunk-6UP2EDFN.js';
|
|
52
51
|
import './chunk-IFGTRL2I.js';
|
|
53
|
-
import './chunk-
|
|
52
|
+
import './chunk-5J6JWGY4.js';
|
|
54
53
|
import './chunk-WD3L5QSU.js';
|
|
55
54
|
import './chunk-7RGTAEG6.js';
|
|
56
55
|
import './chunk-7NN3P6VF.js';
|
|
57
|
-
import './chunk-
|
|
58
|
-
import { missingRootAssets, upsertManifestAsset, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-
|
|
59
|
-
import { parseManifestFile } from './chunk-
|
|
56
|
+
import './chunk-VEIWFS7Z.js';
|
|
57
|
+
import { missingRootAssets, upsertManifestAsset, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-GZL6RN4Z.js';
|
|
58
|
+
import { parseManifestFile } from './chunk-5KWQMCH7.js';
|
|
60
59
|
import './chunk-OSABUEWA.js';
|
|
61
60
|
import './chunk-F3D25RGM.js';
|
|
62
61
|
import './chunk-3TXEJN4W.js';
|
|
@@ -64,19 +63,19 @@ import './chunk-ISHJITXJ.js';
|
|
|
64
63
|
import './chunk-LNFKL23K.js';
|
|
65
64
|
import './chunk-JRN5QF4C.js';
|
|
66
65
|
import './chunk-NUELZWCF.js';
|
|
67
|
-
import './chunk-
|
|
66
|
+
import './chunk-NDBHEOIA.js';
|
|
68
67
|
import './chunk-PKE3PXOK.js';
|
|
69
|
-
import './chunk-
|
|
68
|
+
import './chunk-7QYBKUAS.js';
|
|
70
69
|
import './chunk-UQ6LFBPZ.js';
|
|
71
|
-
import './chunk-
|
|
72
|
-
import './chunk-
|
|
73
|
-
import './chunk-
|
|
70
|
+
import './chunk-QBUJTVMY.js';
|
|
71
|
+
import './chunk-WS3BOCAT.js';
|
|
72
|
+
import './chunk-4KPQ6ILH.js';
|
|
74
73
|
import './chunk-4GY63JU6.js';
|
|
75
|
-
import './chunk-
|
|
74
|
+
import './chunk-4ROXSQEG.js';
|
|
76
75
|
import './chunk-5KRMNUL4.js';
|
|
77
76
|
import './chunk-C5HFK34M.js';
|
|
78
77
|
import './chunk-MWXYN6NY.js';
|
|
79
|
-
import { matchPin } from './chunk-
|
|
78
|
+
import { matchPin } from './chunk-FZO64PLQ.js';
|
|
80
79
|
import './chunk-L5VSIPQD.js';
|
|
81
80
|
import './chunk-VTETQCR6.js';
|
|
82
81
|
import { loadSkPublishManifest, decodeSkaileManifest, isSecretFileName } from './chunk-QC5BYUED.js';
|
|
@@ -85,7 +84,7 @@ import './chunk-RVRB27AN.js';
|
|
|
85
84
|
import './chunk-V5KG6CCV.js';
|
|
86
85
|
import './chunk-VSX2G7LA.js';
|
|
87
86
|
import './chunk-RXGPFAMN.js';
|
|
88
|
-
import './chunk-
|
|
87
|
+
import './chunk-MDCI4RSG.js';
|
|
89
88
|
import './chunk-C3CAXQMA.js';
|
|
90
89
|
import './chunk-BOFL7GIF.js';
|
|
91
90
|
import './chunk-NSBPE2FW.js';
|
|
@@ -133,6 +132,12 @@ function exitOnUnknownRef(libPath, libName, ref, spawn) {
|
|
|
133
132
|
process.exit(1);
|
|
134
133
|
}
|
|
135
134
|
if (runGit(spawn, libPath, ["rev-parse", "--git-dir"]).status !== 0) return;
|
|
135
|
+
if (!libraryHasCommit(spawn, libPath)) {
|
|
136
|
+
logErr(
|
|
137
|
+
`--ref "${ref}" names nothing: library "${libName}" has no commit yet. Run \`skaile library commit ${libName} -m "init"\` first, or leave --ref out (the publish commits the library itself).`
|
|
138
|
+
);
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
136
141
|
const exists = [ref, `refs/remotes/origin/${ref}`].some(
|
|
137
142
|
(candidate) => runGit(spawn, libPath, ["rev-parse", "--verify", "--quiet", `${candidate}^{commit}`]).status === 0
|
|
138
143
|
);
|
|
@@ -143,6 +148,9 @@ function exitOnUnknownRef(libPath, libName, ref, spawn) {
|
|
|
143
148
|
process.exit(1);
|
|
144
149
|
}
|
|
145
150
|
}
|
|
151
|
+
function libraryHasCommit(spawn, libPath) {
|
|
152
|
+
return runGit(spawn, libPath, ["rev-parse", "--verify", "--quiet", "HEAD^{commit}"]).status === 0;
|
|
153
|
+
}
|
|
146
154
|
function commitAndPush(opts) {
|
|
147
155
|
const { libPath, remoteUrl, branch, spawn } = opts;
|
|
148
156
|
const gitDir = runGit(spawn, libPath, ["rev-parse", "--git-dir"]);
|
|
@@ -270,8 +278,9 @@ function assetRefusals(assets, manifest) {
|
|
|
270
278
|
}
|
|
271
279
|
const fileName = entry.kind === "flow" ? parsed.data.id : parsed.data.name;
|
|
272
280
|
if (typeof fileName === "string" && fileName !== "" && fileName !== entry.name) {
|
|
281
|
+
const fileFix = renameFileFix(entry.kind, entry.name, fileName, rel);
|
|
273
282
|
refusals.push(
|
|
274
|
-
`${ref} (${rel}) \u2014 the asset file now names "${fileName}": run \`skaile library index
|
|
283
|
+
`${ref} (${rel}) \u2014 the asset file now names "${fileName}": ` + (fileFix ? `${fileFix}, then run \`skaile library index\`.` : "run `skaile library index` to rename the entry, or restore the name.")
|
|
275
284
|
);
|
|
276
285
|
}
|
|
277
286
|
const entryInvalid = entry.version === void 0 ? void 0 : invalidSemverText(entry.version);
|
|
@@ -471,13 +480,15 @@ async function publishLibrary(name, opts, client, spawn = spawnSync) {
|
|
|
471
480
|
exitOnManifestPublisherProblems(lib.path, name);
|
|
472
481
|
exitOnLibrarySymlinks(lib.path, `skaile library publish ${name}`);
|
|
473
482
|
exitOnManifestPathProblems(lib.path, `skaile library publish ${name}`);
|
|
483
|
+
exitOnRootSkillExtraAssets(lib.path, `skaile library publish ${name}`);
|
|
474
484
|
const missing = missingRootAssets(lib.path, manifest);
|
|
475
485
|
if (missing.length > 0) {
|
|
476
486
|
for (const a of missing) {
|
|
477
487
|
logErr(`${assetEntryRef(a, manifest)} \u2014 root "${a.root}" does not exist in the library.`);
|
|
478
488
|
}
|
|
489
|
+
const readOnly = await readOnlyLibraryAt(lib.path);
|
|
479
490
|
logErr(
|
|
480
|
-
|
|
491
|
+
"The manifest lists assets that are no longer on disk. " + (readOnly ? `"${name}" is a read-only clone: ask the owner to push the folders or drop the entries from skaile.manifest.yaml, then run \`${readOnly.refresh}\` and re-run.` : `Run \`skaile library index ${name}\` to drop them from the manifest, then re-run.`)
|
|
481
492
|
);
|
|
482
493
|
process.exit(1);
|
|
483
494
|
}
|
|
@@ -605,7 +616,10 @@ async function publishLibrary(name, opts, client, spawn = spawnSync) {
|
|
|
605
616
|
}
|
|
606
617
|
}
|
|
607
618
|
}
|
|
608
|
-
|
|
619
|
+
const unborn = opts.ref === void 0 && runGit(spawn, lib.path, ["rev-parse", "--git-dir"]).status === 0 && !libraryHasCommit(spawn, lib.path);
|
|
620
|
+
logInfo(
|
|
621
|
+
` source ref: ${sourceRef}${unborn ? " (no commit yet: the publish commits the library first)" : ""}`
|
|
622
|
+
);
|
|
609
623
|
logInfo(` would publish ${wouldBeRefs.length} asset(s):`);
|
|
610
624
|
for (const r of wouldBeRefs) logInfo(` ${r}`);
|
|
611
625
|
for (const d of drift) logInfo(` would update the manifest: ${describeDrift(d)}`);
|
|
@@ -713,5 +727,5 @@ async function runLibraryYank(name, opts, client) {
|
|
|
713
727
|
}
|
|
714
728
|
|
|
715
729
|
export { isGithubRemote, notGithubRemoteMessage, runLibraryPublish, runLibraryRegister, runLibraryYank };
|
|
716
|
-
//# sourceMappingURL=library-publish-
|
|
717
|
-
//# sourceMappingURL=library-publish-
|
|
730
|
+
//# sourceMappingURL=library-publish-AZTYRASL.js.map
|
|
731
|
+
//# sourceMappingURL=library-publish-AZTYRASL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/commands/library-publish.ts"],"names":[],"mappings":"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","file":"library-publish-AZTYRASL.js","sourcesContent":["/**\n * `skaile library publish / register / yank` — the first-party publish flow.\n * A git-backed library you own carries an in-repo `skaile.manifest.yaml`; this\n * commits + pushes the library repo (publish), or takes the current remote HEAD\n * as-is (register), then registers + syncs it as a store source and publishes\n * the manifest's assets, each under its own namespace — `assets[].publisher`,\n * else the manifest's top-level `publisher` (no namespace remap — first-party\n * authors intend their declared namespace). Every distinct namespace is\n * preflighted before the push. The plan phase (dry-run and real) also requires the\n * remote to be a GitHub url and warns about a missing LICENSE and, for `publish`,\n * untracked files that `git add -A` would make public.\n *\n * - `publish` = commit (if dirty) + push + register + sync + publish.\n * - `register` = same, but skip the commit/push (bytes already on GitHub).\n * - `yank` = unpublish the library's published assets (all, or one).\n *\n * The store REST surface is reached through the injectable {@link PublisherClient}\n * (default HTTP); git side-effects go through an injectable `spawn`. Both seams\n * keep the flow unit/integration-testable without a live store or a real remote.\n *\n * @docLink cli/commands/library\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, dirname, join, relative, sep } from \"node:path\";\nimport {\n type AssetEntry,\n decodeSkaileManifest,\n loadSkPublishManifest,\n matchPin,\n type SkPublishManifest,\n readAssetBody,\n} from \"@skaile/workspaces/core\";\nimport { isSecretFileName } from \"@skaile/workspaces/core/publish-manifest\";\nimport { type ParseManifestResult, parseManifestFile } from \"@skaile/workspaces/discovery\";\nimport {\n type GitBackendConfig,\n type Library,\n missingRootAssets,\n scanUnlistedAssets,\n UNLISTED_SCAN_SKIP_DIRS,\n upsertManifestAsset,\n} from \"@skaile/workspaces/library\";\nimport { type ComposeRefContext, composeRefContext } from \"../agent-checks.ts\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openCatalogSource, openLibraryManager } from \"../open-library.ts\";\nimport { getKindRegistry } from \"../open-registry.ts\";\nimport {\n type AssetCheckResult,\n checkAsset,\n checkAssetFile,\n declaredVersion,\n duplicateAssetMessage,\n findEntryManifestFile,\n invalidSemverText,\n manifestParseErrorText,\n} from \"../skill-checks.ts\";\nimport { isStoreAuthenticated } from \"../store-client.ts\";\nimport { makeHttpPublisherClient, type PublisherClient } from \"../store-publisher.ts\";\nimport {\n exitOnLibrarySymlinks,\n exitOnManifestPublisherProblems,\n exitOnManifestPathProblems,\n exitOnRootSkillExtraAssets,\n type ManifestDependencyProblem,\n manifestDependencyProblems,\n manifestRequiresProblems,\n readOnlyLibraryAt,\n registeredAssetKeys,\n renameFileFix,\n} from \"./library-index.ts\";\nimport { scanIdentities } from \"./validate.ts\";\nimport {\n assetEntryRef,\n assetNamespace,\n bareName,\n exitOnEmptyAsset,\n formatNamespaceAvailability,\n manifestNamespaces,\n plannedRefs,\n preflightNamespace,\n publishToStore,\n refFor,\n} from \"./publish-core.ts\";\n\n/** Injectable spawn contract — the subset of `spawnSync` these helpers use. */\ntype SpawnLike = typeof spawnSync;\n\n/** The fixed filename a library carries at its root for publication. */\nconst MANIFEST_FILENAME = \"skaile.manifest.yaml\";\n\n/** The remote url of a git-backed library, or `undefined` for a local one. */\nfunction remoteUrlOf(lib: Library): string | undefined {\n if (lib.backend !== \"git\") return undefined;\n return (lib.backendConfig as GitBackendConfig).url;\n}\n\n/** The publish branch of a git-backed library (defaults to `main`). */\nfunction branchOf(lib: Library): string {\n if (lib.backend !== \"git\") return \"main\";\n return (lib.backendConfig as GitBackendConfig).branch ?? \"main\";\n}\n\n/**\n * Read + decode the in-repo `skaile.manifest.yaml`. Prints each error\n * diagnostic and exits (1) — mirroring the sidecar flow's validation gate.\n */\nfunction loadManifest(libPath: string): SkPublishManifest {\n let text: string;\n try {\n text = readFileSync(join(libPath, MANIFEST_FILENAME), \"utf-8\");\n } catch {\n logErr(\n `No ${S.dim(MANIFEST_FILENAME)} in the library — author it (see \\`skaile library create\\`) ` +\n \"and run `skaile validate` before publishing.\",\n );\n process.exit(1);\n }\n const { manifest, diagnostics } = decodeSkaileManifest(text);\n const errors = diagnostics.filter((d) => d.severity === \"error\");\n if (errors.length > 0) {\n for (const d of errors) logErr(`${d.code}: ${d.message}`);\n logErr(\"The manifest has errors — fix them with `skaile validate` before publishing.\");\n process.exit(1);\n }\n return manifest;\n}\n\n/** Run a git command in `cwd` via the injected spawn; returns the result. */\nfunction runGit(spawn: SpawnLike, cwd: string, args: string[]) {\n return spawn(\"git\", [\"-C\", cwd, ...args], { encoding: \"utf-8\" });\n}\n\n/**\n * Refuse (exit 1) a `--ref` that is not a valid git ref name, or that names no branch, tag\n * or commit of the library repo (local, or fetched from `origin`). A library directory that\n * is not a git repo yet has nothing to check against and passes: `publish` creates the repo.\n *\n * The ref is sent to the store as a plain string and the store ingests the GitHub repo at that\n * name, so only what GitHub resolves by name is accepted: a branch, a tag or a commit id. A\n * revision expression (`HEAD~1`, `v1.0^{}`) resolves locally but not in the store, so it is\n * refused here rather than published under a ref the store cannot read.\n */\nfunction exitOnUnknownRef(libPath: string, libName: string, ref: string, spawn: SpawnLike): void {\n const wellFormed =\n !ref.startsWith(\"-\") &&\n spawn(\"git\", [\"check-ref-format\", \"--allow-onelevel\", ref], { encoding: \"utf-8\" }).status === 0;\n if (!wellFormed) {\n logErr(\n `--ref \"${ref}\" is not a valid git ref name; pass a branch or tag name or a commit id ` +\n \"(revision expressions like HEAD~1 are not accepted).\",\n );\n process.exit(1);\n }\n if (runGit(spawn, libPath, [\"rev-parse\", \"--git-dir\"]).status !== 0) return;\n // A repo with no commit has no branch to name: `pull` fetches nothing for it.\n if (!libraryHasCommit(spawn, libPath)) {\n logErr(\n `--ref \"${ref}\" names nothing: library \"${libName}\" has no commit yet. ` +\n `Run \\`skaile library commit ${libName} -m \"init\"\\` first, or leave --ref out (the publish commits the library itself).`,\n );\n process.exit(1);\n }\n const exists = [ref, `refs/remotes/origin/${ref}`].some(\n (candidate) =>\n runGit(spawn, libPath, [\"rev-parse\", \"--verify\", \"--quiet\", `${candidate}^{commit}`])\n .status === 0,\n );\n if (!exists) {\n logErr(\n `--ref \"${ref}\" is not a branch, tag or commit of library \"${libName}\"; ` +\n `fetch it first (\\`skaile library pull ${libName}\\`) if it only exists on the remote.`,\n );\n process.exit(1);\n }\n}\n\n/** Whether the git repo at `libPath` has at least one commit (`HEAD` resolves). */\nfunction libraryHasCommit(spawn: SpawnLike, libPath: string): boolean {\n return runGit(spawn, libPath, [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD^{commit}\"]).status === 0;\n}\n\n/**\n * Ensure `libPath` is a git repo whose `origin` points at `remoteUrl`, then\n * commit any changes and push to `branch`. Idempotent re-publish: an unchanged\n * tree makes `git commit` fail with \"nothing to commit\" — swallowed. Push (or\n * any other git) failures surface as thrown Errors carrying git's stderr.\n */\nfunction commitAndPush(opts: {\n libPath: string;\n remoteUrl: string;\n branch: string;\n spawn: SpawnLike;\n}): void {\n const { libPath, remoteUrl, branch, spawn } = opts;\n\n const gitDir = runGit(spawn, libPath, [\"rev-parse\", \"--git-dir\"]);\n if (gitDir.status !== 0) {\n const init = runGit(spawn, libPath, [\"init\"]);\n if (init.status !== 0) {\n throw new Error(\n `git init failed: ${(init.stderr ?? \"\").toString().trim() || `exit ${init.status}`}`,\n );\n }\n }\n\n // Point origin at the resolved remote (add if absent, else set-url).\n const getUrl = runGit(spawn, libPath, [\"remote\", \"get-url\", \"origin\"]);\n const originArgs =\n getUrl.status === 0\n ? [\"remote\", \"set-url\", \"origin\", remoteUrl]\n : [\"remote\", \"add\", \"origin\", remoteUrl];\n const setOrigin = runGit(spawn, libPath, originArgs);\n if (setOrigin.status !== 0) {\n throw new Error(\n `git remote failed: ${(setOrigin.stderr ?? \"\").toString().trim() || `exit ${setOrigin.status}`}`,\n );\n }\n\n const add = runGit(spawn, libPath, [\"add\", \"-A\"]);\n if (add.status !== 0) {\n throw new Error(\n `git add failed: ${(add.stderr ?? \"\").toString().trim() || `exit ${add.status}`}`,\n );\n }\n\n // Fixed bot identity via -c so the commit succeeds regardless of the author's\n // git config (the publish commit is a machine action).\n const commit = spawn(\n \"git\",\n [\n \"-C\",\n libPath,\n \"-c\",\n \"user.email=publish@skaile.store\",\n \"-c\",\n \"user.name=skaile\",\n \"commit\",\n \"-m\",\n \"chore: publish\",\n ],\n { encoding: \"utf-8\" },\n );\n if (commit.status !== 0) {\n const out = `${commit.stdout ?? \"\"}${commit.stderr ?? \"\"}`;\n if (!/nothing to commit/i.test(out)) {\n throw new Error(`git commit failed: ${out.trim() || `exit ${commit.status}`}`);\n }\n }\n\n const push = runGit(spawn, libPath, [\"push\", \"origin\", `HEAD:${branch}`]);\n if (push.status !== 0) {\n throw new Error(\n `git push failed: ${(push.stderr ?? \"\").toString().trim() || `exit ${push.status}`}`,\n );\n }\n}\n\n/**\n * `true` when `url` is a GitHub repo remote the store can fetch: `https://github.com/<o>/<r>[.git]`,\n * `git@github.com:<o>/<r>[.git]` or `ssh://git@github.com/<o>/<r>[.git]`. The store is\n * pointer-only and fetches bytes from GitHub, so any other remote (a local path, a `file://`\n * url, another host) can be pushed to but never published.\n */\nexport function isGithubRemote(url: string): boolean {\n return /^(?:https:\\/\\/github\\.com\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)[^/\\s]+\\/[^/\\s]+?(?:\\.git)?\\/?$/i.test(\n url.trim(),\n );\n}\n\n/** The advisory for a remote `library publish` cannot use (see {@link isGithubRemote}). */\nexport function notGithubRemoteMessage(name: string, url: string): string {\n return (\n `The remote of library \"${name}\" is not a GitHub url: ${url}. ` +\n \"The store fetches published assets from GitHub — repoint it with \" +\n `\\`skaile library set ${name} backendConfig.url=https://github.com/<owner>/<repo>\\`.`\n );\n}\n\n/** How many untracked paths the publish plan lists before collapsing to \"and N more\". */\nconst MAX_LISTED_UNTRACKED = 10;\n\n/** A first-party manifest asset resolved to its on-disk manifest file, read and parsed. */\ninterface PlanAsset {\n entry: AssetEntry;\n /** Path relative to the library root, for messages. */\n rel: string;\n parsed: ParseManifestResult;\n /** The shared per-asset checks ({@link checkAsset}); `undefined` when the file did not parse. */\n checked: AssetCheckResult | undefined;\n}\n\n/**\n * The first-party assets the plan covers (a `root:` entry or a `files:` list), each with its\n * manifest file read. Curated entries (`source`) carry no library directory and a root with no\n * manifest file is `missingRootAssets`' concern, so both are left out.\n */\nfunction planAssets(\n libPath: string,\n manifest: SkPublishManifest,\n targetName: string | undefined,\n composeRefs: ComposeRefContext,\n): PlanAsset[] {\n const out: PlanAsset[] = [];\n const registry = getKindRegistry();\n for (const entry of manifest.assets ?? []) {\n if (targetName && entry.name !== targetName) continue;\n if (entry.source || manifest.source) continue;\n const file = findEntryManifestFile(libPath, entry);\n if (!file) continue;\n const text = readFileSync(file, \"utf-8\");\n const parsed = parseManifestFile(file, text);\n let checked: AssetCheckResult | undefined;\n if (parsed.ok) {\n checked = checkAsset(\n entry.kind,\n parsed.data,\n readAssetBody(file, text),\n basename(dirname(file)),\n registry,\n text,\n basename(file),\n { dir: dirname(file), libraryRoot: libPath, composeRefs },\n );\n }\n out.push({ entry, rel: relative(libPath, file), parsed, checked });\n }\n return out;\n}\n\n/**\n * The manifest with every entry's `version` replaced by the one in its asset\n * file — the version a publish ships (the file is the source of truth; the\n * entry only mirrors it after `skaile library index`).\n */\nfunction manifestWithFileVersions(\n manifest: SkPublishManifest,\n assets: PlanAsset[],\n): SkPublishManifest {\n return {\n ...manifest,\n assets: manifest.assets?.map((entry) => {\n const planned = assets.find((a) => a.entry === entry);\n const fileVersion = planned?.parsed.ok ? declaredVersion(planned.parsed.data) : undefined;\n return fileVersion === undefined ? entry : { ...entry, version: fileVersion };\n }),\n };\n}\n\n/** A manifest entry whose version differs from the one in its asset file. */\ninterface VersionDrift {\n asset: PlanAsset;\n ref: string;\n /** The version the manifest records (`assets[].version ?? version`), `undefined` when none. */\n entryVersion: string | undefined;\n fileVersion: string;\n}\n\n/**\n * The planned assets whose manifest entry does not carry the version of their asset\n * file. The store reads the manifest it finds in the pushed repo, so a publish\n * records the entry's version — {@link manifestWithFileVersions} is what the plan\n * shows, and these are the entries a real publish has to rewrite to match it.\n */\nfunction versionDrift(assets: PlanAsset[], manifest: SkPublishManifest): VersionDrift[] {\n const out: VersionDrift[] = [];\n for (const asset of assets) {\n if (!asset.parsed.ok) continue;\n const fileVersion = declaredVersion(asset.parsed.data);\n const entryVersion = asset.entry.version ?? manifest.version;\n if (fileVersion !== undefined && fileVersion !== entryVersion) {\n out.push({ asset, ref: assetEntryRef(asset.entry, manifest), entryVersion, fileVersion });\n }\n }\n return out;\n}\n\nconst describeDrift = (d: VersionDrift): string =>\n `${d.ref}: manifest version ${d.entryVersion ?? \"(none)\"} → ${d.fileVersion} (${d.asset.rel.split(sep).join(\"/\")})`;\n\n/**\n * Reasons the plan cannot publish an asset: its manifest file cannot be parsed (an\n * empty `SKILL.md`), or it fails the errors of the shared per-asset check list\n * ({@link checkAsset}: version not semver, the kind's manifest schema — the skill\n * schema refuses the scaffold `TODO:` description — and the flow definition parser),\n * or its manifest entry carries a version that is not semver. These are the cases\n * `skaile validate` fails on and `skaile library index` keeps out of the manifest;\n * a hand-edited manifest can still list one, so the plan stops rather than ships it.\n */\nfunction assetRefusals(assets: PlanAsset[], manifest: SkPublishManifest): string[] {\n const refusals: string[] = [];\n for (const { entry, rel, parsed, checked } of assets) {\n const ref = assetEntryRef(entry, manifest);\n if (!parsed.ok || !checked) {\n const reason = parsed.ok ? \"the manifest file could not be read\" : parsed.reason;\n refusals.push(`${ref} (${rel}) [${entry.kind}] — ${manifestParseErrorText(reason)}`);\n continue;\n }\n for (const f of checked.errors) refusals.push(`${ref} (${rel}) [${f.tag}] — ${f.text}`);\n // An untouched scaffold body is an error in `validate` too: a publish would ship an empty asset.\n // (A `requires:` ref no registered library holds is judged against the store: see `storeHolderVerdicts`.)\n for (const f of checked.advisories.filter((a) => a.scaffoldBody)) {\n refusals.push(`${ref} (${rel}) [${f.tag}] — ${f.text}`);\n }\n // The asset file renamed in place: the entry is a ref `add` cannot resolve (p700).\n const fileName = entry.kind === \"flow\" ? parsed.data.id : parsed.data.name;\n if (typeof fileName === \"string\" && fileName !== \"\" && fileName !== entry.name) {\n const fileFix = renameFileFix(entry.kind, entry.name, fileName, rel);\n refusals.push(\n `${ref} (${rel}) — the asset file now names \"${fileName}\": ` +\n (fileFix\n ? `${fileFix}, then run \\`skaile library index\\`.`\n : \"run `skaile library index` to rename the entry, or restore the name.\"),\n );\n }\n // The file's own version is checked above; the entry's can differ from it.\n const entryInvalid = entry.version === undefined ? undefined : invalidSemverText(entry.version);\n if (entryInvalid && entry.version !== declaredVersion(parsed.data)) {\n refusals.push(`${ref} (${rel}) — ${entryInvalid}`);\n }\n }\n return refusals;\n}\n\n/**\n * Per-asset advisories for the assets the plan would publish — the advisories of the\n * shared check list `skaile validate` runs (agentskills.io conformance for skills, the\n * untouched `library create` scaffold for skill, agent, prompt, contract, flow and\n * preset), one line per asset/finding. An unparsable manifest is {@link assetRefusals}'\n * to report.\n */\nfunction assetWarnings(assets: PlanAsset[], manifest: SkPublishManifest): string[] {\n const warnings: string[] = [];\n for (const { entry, rel, parsed, checked } of assets) {\n if (!parsed.ok || !checked || Object.keys(parsed.data).length === 0) continue;\n for (const f of checked.advisories.filter((a) => !a.scaffoldBody && !a.unheldRef)) {\n warnings.push(`${assetEntryRef(entry, manifest)} (${rel}) [${f.tag}] — ${f.text}`);\n }\n }\n return warnings;\n}\n\n/** Asks the store whether it lists `ref` (`kind:@publisher/name`); rejects when it cannot be asked. */\ntype StoreHolds = (ref: string) => Promise<boolean>;\n\nasync function storeListsRef(ref: string): Promise<boolean> {\n const remote = await openCatalogSource({ projectDir: process.cwd() });\n return (await remote.resolve(ref)) !== null;\n}\n\ntype HolderAnswer = { listed: true } | { listed: false } | { error: string };\n\nasync function holdsAnswer(holds: StoreHolds, ref: string): Promise<HolderAnswer> {\n try {\n return { listed: await holds(ref) };\n } catch (err) {\n return { error: err instanceof Error ? err.message : String(err) };\n }\n}\n\n/**\n * What the publish plan says about every `requires:` (asset file) and `dependencies:` (manifest)\n * ref that no registered library holds (p1200). `validate` and `library index` warn from what is\n * registered on this machine alone; the plan also asks the store. A store that lists the ref\n * says nothing; one that does not refuses the plan, since `add` would fail on the consumer's\n * side; one that cannot be asked only warns.\n */\nasync function storeHolderVerdicts(\n assets: PlanAsset[],\n manifest: SkPublishManifest,\n dependencies: ManifestDependencyProblem[],\n holds: StoreHolds,\n): Promise<{ refusals: string[]; warnings: string[] }> {\n const wanted: Array<{ where: string; what: string; ref: string }> = [];\n for (const { entry, rel, checked } of assets) {\n for (const f of checked?.advisories ?? []) {\n if (!f.unheldRef) continue;\n wanted.push({\n where: `${assetEntryRef(entry, manifest)} (${rel}) [${f.tag}]`,\n what: \"requires\",\n ref: f.unheldRef,\n });\n }\n }\n for (const p of dependencies) {\n if (!p.unheldRef) continue;\n wanted.push({\n where: `${MANIFEST_FILENAME} [assets] — ${p.asset}`,\n what: \"dependency\",\n ref: p.unheldRef,\n });\n }\n const answers = new Map<string, HolderAnswer>();\n const out = { refusals: [] as string[], warnings: [] as string[] };\n for (const { where, what, ref } of wanted) {\n let answer = answers.get(ref);\n if (answer === undefined) {\n answer = await holdsAnswer(holds, ref);\n answers.set(ref, answer);\n }\n if (\"listed\" in answer && answer.listed) continue;\n const base = `${where} — ${what} \"${ref}\" is not held by any registered library`;\n if (\"error\" in answer) {\n out.warnings.push(\n `${base} and the store could not be asked (${answer.error.split(\"\\n\")[0]}). \\`skaile add\\` fails for a consumer unless the store or a registered library holds it`,\n );\n } else {\n out.refusals.push(\n `${base} and the store does not list it, so \\`skaile add\\` would fail with \"${what} … not found\". Publish that asset first, register the library that holds it, or drop the ${what}.`,\n );\n }\n }\n return out;\n}\n\n/**\n * Advisory publish-plan warnings: a missing LICENSE (a public repo without one grants\n * consumers no rights), per-asset skill warnings ({@link assetWarnings}) and — for `publish`,\n * which runs `git add -A` — untracked files that would become public. Never throws; a\n * non-git directory simply yields no untracked warning.\n */\nfunction publishWarnings(\n libPath: string,\n spawn: SpawnLike,\n skipPush: boolean,\n manifest: SkPublishManifest,\n assets: PlanAsset[],\n): string[] {\n const warnings: string[] = [];\n if (!existsSync(join(libPath, \"LICENSE\")) && !existsSync(join(libPath, \"LICENSE.md\"))) {\n warnings.push(\n \"No LICENSE or LICENSE.md in the library root — a public repo without a license grants consumers no rights to use it.\",\n );\n }\n warnings.push(...assetWarnings(assets, manifest));\n if (!skipPush) {\n const status = runGit(spawn, libPath, [\"status\", \"--porcelain\", \"--untracked-files=all\"]);\n if (status.status === 0) {\n const lines = (status.stdout ?? \"\").toString().split(\"\\n\");\n const untracked = lines.filter((l) => l.startsWith(\"?? \")).map((l) => l.slice(3));\n if (untracked.length > 0) {\n const shown = untracked.slice(0, MAX_LISTED_UNTRACKED).join(\", \");\n const more =\n untracked.length > MAX_LISTED_UNTRACKED\n ? ` and ${untracked.length - MAX_LISTED_UNTRACKED} more`\n : \"\";\n warnings.push(\n `${untracked.length} untracked file(s) will be committed by \\`git add -A\\` and published: ${shown}${more}.`,\n );\n }\n // `git add -A` also stages every change of a tracked file: name them too.\n const changed = lines\n .filter((l) => l.length > 3 && !l.startsWith(\"?? \") && !l.startsWith(\"!! \"))\n .map((l) => {\n const code = l.slice(0, 2);\n const label = code.includes(\"D\")\n ? \"deleted\"\n : code.includes(\"R\")\n ? \"renamed\"\n : code.includes(\"A\")\n ? \"added\"\n : \"modified\";\n return `${label} ${l.slice(3)}`;\n });\n if (changed.length > 0) {\n const shown = changed.slice(0, MAX_LISTED_UNTRACKED).join(\", \");\n const more =\n changed.length > MAX_LISTED_UNTRACKED\n ? ` and ${changed.length - MAX_LISTED_UNTRACKED} more`\n : \"\";\n warnings.push(\n `${changed.length} changed tracked file(s) will be committed by \\`git add -A\\` and published: ${shown}${more}.`,\n );\n }\n // A secret the commit would publish: a `.env`, a private key (p704).\n const secrets = lines\n .filter((l) => l.length > 3 && !l.startsWith(\"!! \") && !l.slice(0, 2).includes(\"D\"))\n .map((l) => l.slice(3).split(\" -> \").pop() ?? \"\")\n .filter((file) => isSecretFileName(basename(file.replace(/^\"|\"$/g, \"\"))));\n if (secrets.length > 0) {\n warnings.push(\n `${secrets.length} file(s) look like secrets and will be committed by \\`git add -A\\` and published: ${secrets.join(\", \")}. Delete them or add them to .gitignore.`,\n );\n }\n }\n }\n return warnings;\n}\n\n/**\n * The store only registers PUBLIC repos (the backend rejects a private one with \"must be\n * public\"), so a repo provisioned with `--private` can be created and linked but not published.\n */\nconst PRIVATE_REPO_WARNING =\n \"--private: the store only accepts PUBLIC repos — registering a private repo is rejected. \" +\n \"The repo will be created private, but publishing it will fail; share it directly \" +\n \"(`skaile source add <url>` with the consumer's own git credentials) instead.\";\n\n/**\n * Provision a GitHub repo `github.com/<you>/<name>` via `gh` (public unless `isPrivate`) and\n * return its https url. Parses the url `gh` prints on success. Throws on failure.\n */\nfunction createRepoViaGh(name: string, spawn: SpawnLike, isPrivate: boolean): string {\n const res = spawn(\"gh\", [\"repo\", \"create\", name, isPrivate ? \"--private\" : \"--public\"], {\n encoding: \"utf-8\",\n });\n if (res.status !== 0) {\n const stderr = (res.stderr ?? \"\").toString().trim();\n throw new Error(`gh repo create ${name} failed: ${stderr || `exit ${res.status}`}`);\n }\n // `gh repo create` prints the repo url (e.g. `https://github.com/<owner>/<name>`);\n // scan combined output for the first github.com url so we capture whatever\n // owner gh resolved (the authed user).\n const out = `${res.stdout ?? \"\"}\\n${res.stderr ?? \"\"}`;\n const match = out.match(/https:\\/\\/github\\.com\\/[^\\s]+/);\n if (!match) {\n throw new Error(`gh repo create ${name} succeeded but printed no repo url:\\n${out.trim()}`);\n }\n return match[0].replace(/\\.git$/, \"\").trim();\n}\n\n/** `--asset <ref>` split into its parts: `[kind:][@publisher/]name[#pin]`. */\ninterface AssetSelection {\n kind?: string;\n publisher?: string;\n name: string;\n pin?: string;\n}\n\nfunction parseAssetSelection(ref: string): AssetSelection {\n const [head, ...pinParts] = ref.trim().split(\"#\");\n const pin = pinParts.join(\"#\") || undefined;\n const colon = head.indexOf(\":\");\n const kind = colon > 0 ? head.slice(0, colon) : undefined;\n const rest = colon > 0 ? head.slice(colon + 1) : head;\n const scoped = rest.startsWith(\"@\") ? rest.indexOf(\"/\") : -1;\n const publisher = scoped > 0 ? rest.slice(1, scoped) : undefined;\n const name = scoped > 0 ? rest.slice(scoped + 1) : rest;\n return { kind, publisher, name, pin };\n}\n\n/** The manifest entries `--asset` selects: same name, and kind / publisher when the ref names them. */\nfunction selectedEntries(manifest: SkPublishManifest, sel: AssetSelection): AssetEntry[] {\n return (manifest.assets ?? []).filter(\n (a) =>\n a.name === sel.name &&\n (!sel.kind || a.kind === sel.kind) &&\n (!sel.publisher || assetNamespace(a, manifest) === sel.publisher),\n );\n}\n\n/**\n * What the plan says about asset directories the manifest does not list - the ones\n * `skaile library index` would add or skip. A directory holding a kind + name the manifest\n * already names elsewhere is refused (index skips it and exits 1); a new asset the shared\n * checks reject is refused with the same finding text `validate` prints; a valid new asset is\n * refused as well, as `validate` does: the plan would not ship it, but `git add -A` would commit\n * its files (p1193).\n */\nasync function unlistedAssetProblems(\n libPath: string,\n manifest: SkPublishManifest,\n libName: string,\n targetName: string | undefined,\n composeRefs: ComposeRefContext,\n): Promise<string[]> {\n const refusals: string[] = [];\n const registry = getKindRegistry();\n const unlisted = await scanUnlistedAssets(\n libPath,\n manifest.publisher ?? libName,\n registry,\n UNLISTED_SCAN_SKIP_DIRS,\n );\n for (const u of unlisted) {\n if (targetName && u.entry.name !== targetName) continue;\n const rel = relative(libPath, u.entry.source);\n if (u.registeredAt) {\n refusals.push(\n duplicateAssetMessage(\n u.entry.kind,\n u.entry.name,\n u.root,\n `already registered at \"${u.registeredAt}\"`,\n libName,\n ),\n );\n continue;\n }\n if (u.parseFailure) {\n // `library index` rejects the file too: send the author to the file, not to the command.\n refusals.push(\n `${u.entry.kind}:${u.entry.name} (${rel}) [${u.entry.kind}] — ${manifestParseErrorText(u.parseFailure)}`,\n );\n continue;\n }\n const errors = checkAssetFile(u.entry.source, u.entry.kind, registry, libPath, composeRefs);\n for (const f of errors)\n refusals.push(`${u.entry.kind}:${u.entry.name} (${rel}) [${f.tag}] — ${f.text}`);\n if (errors.length === 0) {\n refusals.push(\n `${u.entry.kind}:${u.entry.name} (${rel}) is on disk but not in the manifest, so it is not published; run \\`skaile library index ${libName}\\`.`,\n );\n }\n }\n return refusals;\n}\n\n/** Shared publish body for `publish` (pushes) and `register` (skips the push). */\nasync function publishLibrary(\n name: string,\n opts: {\n asset?: string;\n createRepo?: boolean;\n private?: boolean;\n ref?: string;\n dryRun?: boolean;\n skipPush: boolean;\n /** Asks the store whether it lists a ref; injected by tests. */\n storeHolds?: StoreHolds;\n },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n exitOnEmptyAsset(opts.asset);\n const injected = client !== undefined;\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibraryDir(name);\n const manifest = loadManifest(lib.path);\n\n // A publisher that is not a valid slug would publish refs `add` cannot parse: refuse\n // (dry-run included) with the text `library index` and `validate` print.\n exitOnManifestPublisherProblems(lib.path, name);\n // The same symlink refusal as `validate` and `library index`.\n exitOnLibrarySymlinks(lib.path, `skaile library publish ${name}`);\n // A `root:` or `files:` entry outside the library, through a symlink or naming a missing file is never found by `add` (p701, p1403, p1404).\n exitOnManifestPathProblems(lib.path, `skaile library publish ${name}`);\n // A library that is itself one skill holds that one asset (p2142).\n exitOnRootSkillExtraAssets(lib.path, `skaile library publish ${name}`);\n\n // A manifest entry whose directory is gone would publish a catalog entry\n // that points at nothing — refuse (dry-run included) rather than plan it.\n const missing = missingRootAssets(lib.path, manifest);\n if (missing.length > 0) {\n for (const a of missing) {\n logErr(`${assetEntryRef(a, manifest)} — root \"${a.root}\" does not exist in the library.`);\n }\n const readOnly = await readOnlyLibraryAt(lib.path);\n logErr(\n \"The manifest lists assets that are no longer on disk. \" +\n (readOnly\n ? `\"${name}\" is a read-only clone: ask the owner to push the folders or drop the entries from skaile.manifest.yaml, then run \\`${readOnly.refresh}\\` and re-run.`\n : `Run \\`skaile library index ${name}\\` to drop them from the manifest, then re-run.`),\n );\n process.exit(1);\n }\n\n // `--asset` must select something: a plan of 0 assets that exits 0 reads as a publish.\n const selection = opts.asset ? parseAssetSelection(opts.asset) : undefined;\n if (opts.asset && selection && selectedEntries(manifest, selection).length === 0) {\n const listed = (manifest.assets ?? []).map((a) => assetEntryRef(a, manifest));\n logErr(\n `No asset matches \"${opts.asset}\" in library \"${name}\"` +\n (listed.length > 0\n ? ` (the manifest lists: ${listed.join(\", \")}).`\n : \" (the manifest lists no assets).\"),\n );\n process.exit(1);\n }\n\n // `--ref` must name a ref the library repo has: a plan for `source ref: nosuchref` reads as a\n // publish of it.\n if (opts.ref !== undefined) exitOnUnknownRef(lib.path, name, opts.ref, spawn);\n\n // Resolve the remote: git-backed → its url; local + --create-repo → provision\n // and link; else stop with a hint.\n let remoteUrl = remoteUrlOf(lib);\n let wouldCreateRepo = false;\n if (opts.private && !opts.createRepo) {\n logErr(\n \"--private only applies together with --create-repo (it sets the new repo's visibility).\",\n );\n process.exit(1);\n }\n const visibility = opts.private ? \"private\" : \"public\";\n if (!remoteUrl) {\n if (opts.createRepo) {\n if (opts.private) logWarn(PRIVATE_REPO_WARNING);\n if (opts.dryRun) {\n // A dry-run must not provision anything — defer the real\n // `gh repo create` to the live run and just show the would-be remote.\n wouldCreateRepo = true;\n remoteUrl = `https://github.com/<your-account>/${lib.name}`;\n } else {\n remoteUrl = createRepoViaGh(lib.name, spawn, opts.private === true);\n await manager.updateLibrary(name, {\n backend: \"git\",\n backendConfig: { url: remoteUrl, branch: \"main\", authHint: \"ssh\" },\n });\n logOk(`Created + linked ${S.dim(remoteUrl)} (${visibility}).`);\n }\n } else {\n logErr(\n `Library \"${name}\" has no remote — run ${S.cmd(`skaile library link ${name} <url>`)} ` +\n \"first, or pass `--create-repo` to provision a public repo.\",\n );\n process.exit(1);\n }\n } else if (!isGithubRemote(remoteUrl)) {\n // Plan-phase gate (dry-run and real): the store fetches from GitHub, so a\n // local-path / other-host remote can never be published. A remote here means\n // the library is already git-backed, where `library link` refuses.\n logErr(notGithubRemoteMessage(name, remoteUrl));\n process.exit(1);\n }\n\n // Each asset publishes under `assets[].publisher ?? manifest.publisher`\n // (first-party — no remap), so one library can span several namespaces.\n const targetName = opts.asset ? bareName(opts.asset) : undefined;\n const namespaces = manifestNamespaces(manifest, targetName);\n\n // An asset whose manifest file cannot be parsed or carries a non-semver version\n // must not be planned (dry-run included): it would publish as a broken entry.\n // An agent's `composes:` refs resolve as in `validate` and `library index` (p415).\n const composeRefs = composeRefContext(\n scanIdentities(lib.path),\n await registeredAssetKeys(lib.path),\n manifest.publisher,\n );\n const assets = planAssets(lib.path, manifest, targetName, composeRefs);\n const wouldBeRefs = plannedRefs(manifestWithFileVersions(manifest, assets), targetName);\n const unlisted = await unlistedAssetProblems(lib.path, manifest, name, targetName, composeRefs);\n // A manifest `dependencies:` entry `validate` and `index` reject would ship as an unresolvable ref.\n const requiresRefusals = manifestRequiresProblems(lib.path)\n .filter((p) => !targetName || p.asset.endsWith(`:${targetName}`))\n .map(\n (p) =>\n `${MANIFEST_FILENAME} [assets] — ${p.asset}: ${p.message}. ` +\n \"Use the `kind:@<publisher>/name[#version]` form.\",\n );\n // A `requires:` / `dependencies:` ref no registered library holds: the store has the last word.\n const unheldDependencies = (await manifestDependencyProblems(lib.path)).filter(\n (p) => p.unheldRef && (!targetName || p.asset.endsWith(`:${targetName}`)),\n );\n const storeVerdicts = await storeHolderVerdicts(\n assets,\n manifest,\n unheldDependencies,\n opts.storeHolds ?? storeListsRef,\n );\n const refusals = [\n ...assetRefusals(assets, manifest),\n ...requiresRefusals,\n ...unlisted,\n ...storeVerdicts.refusals,\n ];\n if (selection?.pin !== undefined) {\n const held = selectedEntries(manifest, selection).map((e) => {\n const planned = assets.find((a) => a.entry === e);\n const fileVersion = planned?.parsed.ok ? declaredVersion(planned.parsed.data) : undefined;\n return fileVersion ?? e.version ?? manifest.version;\n });\n if (!held.some((v) => v !== undefined && matchPin(selection.pin, v))) {\n logErr(\n `${opts.asset}: the library holds ${held.filter((v) => v).join(\", \") || \"no version\"} of this asset, not #${selection.pin}. ` +\n \"A publish ships the version in the asset file; drop the pin or change the file version.\",\n );\n process.exit(1);\n }\n }\n if (refusals.length > 0) {\n for (const r of refusals) logErr(r);\n logErr(\n \"These assets cannot be published. Fix them (see `skaile validate`), then run \" +\n `\\`skaile library index ${name}\\` and re-run.`,\n );\n process.exit(1);\n }\n\n // The store records the version of the manifest it finds in the pushed repo, so\n // the plan (file versions) and the publish only agree when the entries match the\n // files. `publish` rewrites them before it commits; `register` pushes nothing,\n // so it cannot, and stops instead.\n const drift = versionDrift(assets, manifest);\n if (drift.length > 0 && opts.skipPush) {\n for (const d of drift) logErr(describeDrift(d));\n logErr(\n \"register publishes the remote HEAD as-is, so these manifest versions would be recorded \" +\n `instead of the file versions. Run \\`skaile library index ${name}\\`, commit and push, then re-run.`,\n );\n process.exit(1);\n }\n\n const sourceRef = opts.ref ?? branchOf(lib);\n const warnings = [\n ...publishWarnings(lib.path, spawn, opts.skipPush, manifest, assets),\n ...storeVerdicts.warnings,\n ];\n\n if (opts.dryRun) {\n logInfo(`Publish plan for ${S.bold(name)}:`);\n logInfo(\n ` remote: ${remoteUrl}${wouldCreateRepo ? ` (would be created ${visibility} via \\`gh repo create --${visibility}\\`)` : \"\"}`,\n );\n logInfo(\n ` publisher: ${namespaces.length > 0 ? namespaces.join(\", \") : \"<manifest publisher>\"}`,\n );\n // Best-effort namespace-availability probe — a read-only GET, only when\n // signed in (or a client is injected). A failure keeps dry-run offline-safe.\n const canCheck = injected || isStoreAuthenticated();\n if (!canCheck) {\n // The real run stops at \"Not signed in\" before any namespace check.\n logWarn(\"namespace check skipped: not signed in (run `skaile store login`)\");\n } else if (namespaces.length > 0) {\n for (const ns of namespaces) {\n try {\n const avail = await (client ?? makeHttpPublisherClient()).namespaceAvailability(ns);\n const prefix = namespaces.length > 1 ? `@${ns} — ` : \"\";\n logInfo(` namespace: ${prefix}${formatNamespaceAvailability(avail)}`);\n } catch {\n // Store unreachable / not signed in — skip the advisory, never fail.\n }\n }\n }\n const unborn =\n opts.ref === undefined &&\n runGit(spawn, lib.path, [\"rev-parse\", \"--git-dir\"]).status === 0 &&\n !libraryHasCommit(spawn, lib.path);\n logInfo(\n ` source ref: ${sourceRef}${unborn ? \" (no commit yet: the publish commits the library first)\" : \"\"}`,\n );\n logInfo(` would publish ${wouldBeRefs.length} asset(s):`);\n for (const r of wouldBeRefs) logInfo(` ${r}`);\n for (const d of drift) logInfo(` would update the manifest: ${describeDrift(d)}`);\n for (const w of warnings) logWarn(w);\n return;\n }\n\n // Real run: surface the same advisories before anything is pushed.\n for (const w of warnings) logWarn(w);\n\n // A real publish makes store calls, so it needs a token (injected fakes bypass).\n if (!injected && !isStoreAuthenticated()) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n const pub = client ?? makeHttpPublisherClient();\n\n // Preflight EVERY distinct namespace BEFORE the public git push, so a\n // reserved/unclaimed one fails fast with guidance instead of after publishing bytes.\n for (const ns of namespaces) {\n const gate = await preflightNamespace(pub, ns);\n if (!gate.ok) {\n logErr(gate.message ?? `Cannot publish under @${ns}.`);\n process.exit(1);\n }\n }\n\n // Bring the entries to the file versions the plan showed, before they are committed.\n for (const d of drift) {\n upsertManifestAsset(lib.path, {\n kind: d.asset.entry.kind,\n name: d.asset.entry.name,\n root: d.asset.entry.root ?? \"\",\n version: d.fileVersion,\n });\n logInfo(`Updated the manifest: ${describeDrift(d)}`);\n }\n\n // publish commits + pushes the library repo; register takes the remote HEAD as-is.\n if (!opts.skipPush) {\n // `git add -A` stages every non-ignored file → a PUBLIC push. Surface it so\n // an unexpected file in the working tree is not silently published.\n logInfo(\n `Committing the library and pushing to the PUBLIC remote ${S.dim(remoteUrl)} ` +\n \"(.gitignore honored; anything else in the working tree becomes public).\",\n );\n commitAndPush({ libPath: lib.path, remoteUrl, branch: branchOf(lib), spawn });\n logOk(`Pushed ${S.dim(name)} to ${S.dim(remoteUrl)}.`);\n }\n\n const { published } = await publishToStore({\n sourceUrl: remoteUrl,\n ref: sourceRef,\n manifest: manifestWithFileVersions(manifest, assets),\n assetName: targetName,\n client: pub,\n });\n\n if (published.length > 0) {\n logInfo(`Consumers can now \\`skaile add ${published[0]}\\`.`);\n }\n } finally {\n close();\n }\n}\n\n/**\n * `skaile library publish <lib>` — commit + push the library repo, register +\n * sync it as a store source, and publish its manifest's assets under the\n * manifest publisher. See the module header for the full flow.\n */\nexport async function runLibraryPublish(\n name: string,\n opts: {\n asset?: string;\n createRepo?: boolean;\n private?: boolean;\n ref?: string;\n dryRun?: boolean;\n storeHolds?: StoreHolds;\n },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n await publishLibrary(name, { ...opts, skipPush: false }, client, spawn);\n}\n\n/**\n * `skaile library register <lib>` — same as publish but skips the commit/push\n * (the bytes are already on GitHub at the current remote HEAD). Still requires a\n * git-backed remote.\n */\nexport async function runLibraryRegister(\n name: string,\n opts: { asset?: string; ref?: string; dryRun?: boolean },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n await publishLibrary(name, { ...opts, skipPush: true }, client, spawn);\n}\n\n/**\n * `skaile library yank <lib>` — unpublish the library's published assets from\n * the store (all, or the single asset matching `opts.asset`'s name).\n * Auth-gated like publish.\n */\nexport async function runLibraryYank(\n name: string,\n opts: { asset?: string },\n client?: PublisherClient,\n): Promise<void> {\n exitOnEmptyAsset(opts.asset);\n const injected = client !== undefined;\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const remoteUrl = remoteUrlOf(lib);\n if (!remoteUrl) {\n logErr(`Library \"${name}\" has no remote — nothing published to yank.`);\n process.exit(1);\n }\n\n if (!injected && !isStoreAuthenticated()) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n const pub = client ?? makeHttpPublisherClient();\n const rows = await pub.sourcesList();\n const source = rows.find((r) => r.url === remoteUrl);\n if (!source) {\n logErr(`Library \"${name}\" is not registered in the store — nothing to yank.`);\n process.exit(1);\n }\n\n const targetName = opts.asset ? bareName(opts.asset) : undefined;\n const candidates = (await pub.sourceCandidates(source.id)).filter(\n (c) => c.published && (!targetName || c.name === targetName),\n );\n if (candidates.length === 0) {\n logInfo(\"No published assets matched — nothing to yank.\");\n return;\n }\n\n // Report each yanked asset under its own namespace\n // (`assets[].publisher ?? manifest.publisher`); fall back to `kind:name`\n // when the manifest is absent or declares no namespace for it.\n const manifest = loadSkPublishManifest(lib.path);\n const yanked: string[] = [];\n for (const c of candidates) {\n try {\n await pub.assetUnpublish(c.id);\n const entry = manifest?.assets?.find((a) => a.kind === c.kind && a.name === c.name);\n const ns = manifest && entry ? assetNamespace(entry, manifest) : undefined;\n yanked.push(ns ? refFor(c.kind, ns, c.name, c.version) : `${c.kind}:${c.name}`);\n } catch (err) {\n logErr(\n `Failed to yank ${c.kind}:${c.name}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n logOk(`Yanked ${yanked.length} asset(s):`);\n for (const r of yanked) logInfo(` ${r}`);\n } finally {\n close();\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { ModelEndpointError, checkPiAiInstalled, listModels, resolveModel, startModelEndpoint } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { AGENT_MODEL_ID, ModelEndpointError, checkPiAiInstalled, listModels, resolveModel, startModelEndpoint } from '../chunk-QIV7H3GJ.js';
|
|
2
|
+
import '../chunk-RP3ML3QD.js';
|
|
3
|
+
import '../chunk-7TF5MNFK.js';
|
|
4
4
|
import '../chunk-G5SUWZEU.js';
|
|
5
5
|
import '../chunk-6UP2EDFN.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-4KPQ6ILH.js';
|
|
7
7
|
import '../chunk-4GY63JU6.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-4ROXSQEG.js';
|
|
9
9
|
import '../chunk-5KRMNUL4.js';
|
|
10
10
|
import '../chunk-C5HFK34M.js';
|
|
11
11
|
import '../chunk-MWXYN6NY.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-FZO64PLQ.js';
|
|
13
13
|
import '../chunk-L5VSIPQD.js';
|
|
14
14
|
import '../chunk-VTETQCR6.js';
|
|
15
15
|
import '../chunk-QC5BYUED.js';
|
|
@@ -18,7 +18,7 @@ import '../chunk-RVRB27AN.js';
|
|
|
18
18
|
import '../chunk-V5KG6CCV.js';
|
|
19
19
|
import '../chunk-VSX2G7LA.js';
|
|
20
20
|
import '../chunk-RXGPFAMN.js';
|
|
21
|
-
import '../chunk-
|
|
21
|
+
import '../chunk-MDCI4RSG.js';
|
|
22
22
|
import '../chunk-C3CAXQMA.js';
|
|
23
23
|
import '../chunk-BOFL7GIF.js';
|
|
24
24
|
import '../chunk-NSBPE2FW.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { listModels, type ResolveDeps, resolveModel } from "./resolve.js";
|
|
2
2
|
export { checkPiAiInstalled, startModelEndpoint } from "./server.js";
|
|
3
|
-
export { ModelEndpointError, type ModelEndpointErrorType, type ModelEndpointHandle, type ModelEndpointLog, type ModelEndpointOptions, type PiApiModule, type ResolvedModel, type StreamFn, } from "./types.js";
|
|
3
|
+
export { AGENT_MODEL_ID, type AgentLoop, type AgentLoopPrompt, type AgentLoopRun, ModelEndpointError, type ModelEndpointErrorType, type ModelEndpointHandle, type ModelEndpointLog, type ModelEndpointOptions, type PiApiModule, type ResolvedModel, type StreamFn, } from "./types.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,cAAc,EACd,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `skaile-agent` pseudo-model on `POST /v1/chat/completions`: the running
|
|
3
|
+
* workspace agent's turn, expressed as an OpenAI chat completion.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `openai-chat.ts`, but its input is the agent's wire events
|
|
6
|
+
* (`AgentEvent`), not pi events. The answer text is `content`; what the agent did
|
|
7
|
+
* on the way (tool calls and results, non-fatal errors, retractions) is
|
|
8
|
+
* `reasoning_content`, one line each.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentEvent } from "@skaile/workspaces/types";
|
|
11
|
+
import type { ChatCompletion, ChatCompletionChunk, ChatCompletionRequest, ChatResponseMeta } from "./openai-chat.js";
|
|
12
|
+
/**
|
|
13
|
+
* The text to hand the agent: the last `user` message of the request. Earlier
|
|
14
|
+
* messages (system, assistant, older user turns) are ignored because the agent
|
|
15
|
+
* session keeps its own context; `tools`, `tool_choice` and the sampling
|
|
16
|
+
* parameters are ignored because the agent runs its workspace tools.
|
|
17
|
+
*/
|
|
18
|
+
export declare function agentPromptText(request: ChatCompletionRequest): string;
|
|
19
|
+
/** Whether `event` is the last one a turn's completion needs: the turn finished or parked on a question. */
|
|
20
|
+
export declare function endsAgentTurn(event: AgentEvent): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Folds one turn's events into a chat completion. Reads `events` until the turn
|
|
23
|
+
* ends (`finished` or `question`) or the iterable does. A fatal `error` becomes a
|
|
24
|
+
* 502 `turn_failed`, like an upstream failure on the model path.
|
|
25
|
+
*/
|
|
26
|
+
export declare function toAgentCompletion(events: AsyncIterable<AgentEvent>, meta: ChatResponseMeta): Promise<ChatCompletion>;
|
|
27
|
+
/** Mutable per-stream mapper state. */
|
|
28
|
+
export interface AgentStreamState {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly created: number;
|
|
31
|
+
readonly model: string;
|
|
32
|
+
readonly includeUsage: boolean;
|
|
33
|
+
/** Set by a fatal `error` event; the server follows the final chunks with its SSE error frame. */
|
|
34
|
+
error?: string;
|
|
35
|
+
/** The role chunk went out. */
|
|
36
|
+
started: boolean;
|
|
37
|
+
/** The closing chunk (finish reason) went out. */
|
|
38
|
+
closed: boolean;
|
|
39
|
+
/** Answer text went out (a question after it starts on a new line). */
|
|
40
|
+
hasContent: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare function createAgentStreamState(init: {
|
|
43
|
+
id: string;
|
|
44
|
+
created: number;
|
|
45
|
+
model: string;
|
|
46
|
+
includeUsage: boolean;
|
|
47
|
+
}): AgentStreamState;
|
|
48
|
+
/**
|
|
49
|
+
* Stateful agent-event → OpenAI chunk mapper. The role chunk goes out with the
|
|
50
|
+
* first chunk of the turn; events with no OpenAI counterpart (`status`,
|
|
51
|
+
* `prompt_ack`, `file_changed`, …) map to nothing.
|
|
52
|
+
*/
|
|
53
|
+
export declare function agentCompletionChunks(event: AgentEvent, state: AgentStreamState): ChatCompletionChunk[];
|
|
54
|
+
/**
|
|
55
|
+
* The chunks that close a stream whose events ended without `finished` or
|
|
56
|
+
* `question` (the prompt ended without a harness turn: flow hand-off, aborted
|
|
57
|
+
* while queued). Empty when the stream already closed.
|
|
58
|
+
*/
|
|
59
|
+
export declare function agentCompletionEnd(state: AgentStreamState): ChatCompletionChunk[];
|
|
60
|
+
//# sourceMappingURL=openai-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agent.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/openai-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EAEnB,qBAAqB,EAGrB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAU1B;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAoBtE;AA+BD,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAExD;AAqBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,cAAc,CAAC,CA6CzB;AAID,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kGAAkG;IAClG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,gBAAgB,CAEnB;AA8DD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,gBAAgB,GACtB,mBAAmB,EAAE,CAKvB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,EAAE,CAMjF"}
|
|
@@ -8,11 +8,14 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { type MergedAIProviderRegistry } from "@skaile/workspaces/core/provider-registry";
|
|
10
10
|
import { type ResolvedModel } from "./types.js";
|
|
11
|
+
import type { UpstreamModels } from "./upstream-models.js";
|
|
11
12
|
/** What {@link resolveModel} reads from the live session. */
|
|
12
13
|
export interface ResolveDeps {
|
|
13
14
|
registry: MergedAIProviderRegistry;
|
|
14
15
|
lookupEnv: Record<string, string | undefined>;
|
|
15
16
|
roles?: Record<string, string>;
|
|
17
|
+
/** What the upstreams of the open entries list; read for a bare id no entry declares. */
|
|
18
|
+
upstreamModels?: UpstreamModels;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
21
|
* Resolve a request's `model` selector to everything one upstream call needs.
|
|
@@ -20,10 +23,16 @@ export interface ResolveDeps {
|
|
|
20
23
|
* The selector is `<providerId>/<model>`, a bare model id, or `@role`
|
|
21
24
|
* (see `parseModelRef`). An entry that declares models (`model_map` /
|
|
22
25
|
* `capabilities`) is a closed list: ids outside it are 404, matching what
|
|
23
|
-
* `/v1/models` advertises. An entry that declares none is open
|
|
24
|
-
* id to the provider unchanged (discovery-based presets)
|
|
26
|
+
* `/v1/models` advertises. An entry that declares none is open: `<entry>/<id>` forwards the
|
|
27
|
+
* id to the provider unchanged (discovery-based presets), and a bare id reaches it only when
|
|
28
|
+
* its upstream lists the id.
|
|
25
29
|
*/
|
|
26
30
|
export declare function resolveModel(selector: string, deps: ResolveDeps): ResolvedModel;
|
|
31
|
+
/**
|
|
32
|
+
* Whether `selector` is a bare model id no entry declares: only an upstream that lists
|
|
33
|
+
* it can take it, so the caller fetches the upstream lists before {@link resolveModel}.
|
|
34
|
+
*/
|
|
35
|
+
export declare function needsUpstreamModels(selector: string, deps: ResolveDeps): boolean;
|
|
27
36
|
/**
|
|
28
37
|
* Ids of the entries that declare no models: any `<id>/<model>` is forwarded to
|
|
29
38
|
* them as is, so `/v1/models` cannot list models for them.
|
|
@@ -34,7 +43,7 @@ export declare function listPassThroughProviders(registry: MergedAIProviderRegis
|
|
|
34
43
|
* `<providerId>/<logicalId>` so two providers serving the same logical id stay
|
|
35
44
|
* distinguishable. Bare logical ids remain accepted on request.
|
|
36
45
|
*/
|
|
37
|
-
export declare function listModels(registry: MergedAIProviderRegistry): Array<{
|
|
46
|
+
export declare function listModels(registry: MergedAIProviderRegistry, upstreamModels?: UpstreamModels): Array<{
|
|
38
47
|
id: string;
|
|
39
48
|
owned_by: string;
|
|
40
49
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,wBAAwB,EAG9B,MAAM,2CAA2C,CAAC;AAQnD,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yFAAyF;IACzF,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA+BD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CA4D/E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAGhF;AA6DD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,EAAE,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,wBAAwB,EAClC,cAAc,GAAE,cAAmB,GAClC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAOzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../model-endpoint/src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuCH,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAgBpB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAqX9B;AA6BD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOnF"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* `resolve.ts` cast to pi-ai's own types at the call into pi-ai.
|
|
9
9
|
*/
|
|
10
10
|
import type { MergedAIProviderRegistry } from "@skaile/workspaces/core/provider-registry";
|
|
11
|
+
import type { AgentEvent } from "@skaile/workspaces/types";
|
|
11
12
|
/** The fields of a pi-ai `Model` the endpoint sets (pi-ai's own type is assignable to it). */
|
|
12
13
|
export interface PiModel {
|
|
13
14
|
/** Provider-side model id (`model_map`). */
|
|
@@ -87,6 +88,12 @@ export interface ModelEndpointOptions {
|
|
|
87
88
|
loadApi?(surface: string): Promise<PiApiModule>;
|
|
88
89
|
/** Test seam for the `/v1/embeddings` pass-through and for the upstream calls of openai-completions chat requests. Default `globalThis.fetch`. */
|
|
89
90
|
fetch?: typeof fetch;
|
|
91
|
+
/**
|
|
92
|
+
* The running workspace agent, read per request (the runner rebuilds its session on
|
|
93
|
+
* `session_init`). `undefined` (or absent) turns the `skaile-agent` pseudo-model off:
|
|
94
|
+
* it is then unknown (404 `model_not_found`) and not listed in `/v1/models`.
|
|
95
|
+
*/
|
|
96
|
+
getAgentLoop?(): AgentLoop | undefined;
|
|
90
97
|
}
|
|
91
98
|
/** A running endpoint. */
|
|
92
99
|
export interface ModelEndpointHandle {
|
|
@@ -96,6 +103,32 @@ export interface ModelEndpointHandle {
|
|
|
96
103
|
token: string;
|
|
97
104
|
close(): Promise<void>;
|
|
98
105
|
}
|
|
106
|
+
/** The pseudo-model id under which the endpoint offers the running workspace agent. */
|
|
107
|
+
export declare const AGENT_MODEL_ID = "skaile-agent";
|
|
108
|
+
/** One prompt the endpoint hands the running workspace agent. */
|
|
109
|
+
export interface AgentLoopPrompt {
|
|
110
|
+
/** The text of the request's last `user` message. */
|
|
111
|
+
text: string;
|
|
112
|
+
/** Unique per HTTP request; the runner uses it as the prompt's sender and message id. */
|
|
113
|
+
requestId: string;
|
|
114
|
+
}
|
|
115
|
+
/** One running (or queued) agent turn. */
|
|
116
|
+
export interface AgentLoopRun {
|
|
117
|
+
/**
|
|
118
|
+
* Wire events of this turn only, in send order, from the moment the turn takes the
|
|
119
|
+
* harness. Ends after `finished`, or after `question` (a parked question ends the
|
|
120
|
+
* turn without `finished`), or when the prompt ended without a harness turn (flow
|
|
121
|
+
* hand-off, aborted while queued).
|
|
122
|
+
*/
|
|
123
|
+
events: AsyncIterable<AgentEvent>;
|
|
124
|
+
/** Queued: leave the queue. Running: abort the harness turn (same path as `cancel`). Idempotent. */
|
|
125
|
+
abort(): Promise<void>;
|
|
126
|
+
}
|
|
127
|
+
/** The running workspace agent, as the endpoint drives it. */
|
|
128
|
+
export interface AgentLoop {
|
|
129
|
+
/** Rejects with `ModelEndpointError(503, …, "session_not_ready")` when no live session can take a prompt. */
|
|
130
|
+
prompt(prompt: AgentLoopPrompt): Promise<AgentLoopRun>;
|
|
131
|
+
}
|
|
99
132
|
/** The OpenAI error `type` values the endpoint emits. */
|
|
100
133
|
export type ModelEndpointErrorType = "invalid_request_error" | "authentication_error" | "not_found_error" | "upstream_error" | "server_error";
|
|
101
134
|
/**
|