@skaile/workspaces 5.15.0 → 5.16.0
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 +60 -0
- package/dist/{asset-feeds-LIDC7547.js → asset-feeds-BELBSJEE.js} +18 -18
- package/dist/{asset-feeds-LIDC7547.js.map → asset-feeds-BELBSJEE.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +7 -7
- package/dist/asset-manager/index.js +13 -13
- package/dist/asset-manager/installer.js +9 -9
- package/dist/asset-manager/renderers.js +8 -8
- package/dist/asset-manager/src/index.d.ts +105 -6
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +11 -2
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +150 -19
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +15 -128
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +10 -10
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/gemini.js +7 -7
- package/dist/bridge/drivers/goose.js +10 -10
- package/dist/bridge/drivers/omp.js +61 -5
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +10 -10
- package/dist/bridge/drivers/qwen.js +7 -7
- package/dist/bridge/index.js +13 -12
- package/dist/bridge/src/approval-card.d.ts +24 -0
- package/dist/bridge/src/approval-card.d.ts.map +1 -0
- package/dist/bridge/src/driver-model-check.d.ts +21 -0
- package/dist/bridge/src/driver-model-check.d.ts.map +1 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts +22 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +2 -0
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +23 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-YUURCZWY.js → chunk-2SKPPIV7.js} +5 -5
- package/dist/{chunk-YUURCZWY.js.map → chunk-2SKPPIV7.js.map} +1 -1
- package/dist/{chunk-PK5XQBOC.js → chunk-46IRZJV4.js} +4 -4
- package/dist/{chunk-PK5XQBOC.js.map → chunk-46IRZJV4.js.map} +1 -1
- package/dist/{chunk-AXNX2SKZ.js → chunk-5CE6J4DB.js} +46 -67
- package/dist/chunk-5CE6J4DB.js.map +1 -0
- package/dist/{chunk-54TVXZP3.js → chunk-5DCOG5B5.js} +3 -3
- package/dist/{chunk-54TVXZP3.js.map → chunk-5DCOG5B5.js.map} +1 -1
- package/dist/{chunk-X7DIT65W.js → chunk-5RDZ5JHH.js} +4 -4
- package/dist/{chunk-X7DIT65W.js.map → chunk-5RDZ5JHH.js.map} +1 -1
- package/dist/{chunk-BV7NLPI6.js → chunk-6GSE63K2.js} +4 -4
- package/dist/{chunk-BV7NLPI6.js.map → chunk-6GSE63K2.js.map} +1 -1
- package/dist/{chunk-GQ5OYFVD.js → chunk-6Q7NKTDG.js} +47 -47
- package/dist/chunk-6Q7NKTDG.js.map +1 -0
- package/dist/chunk-6RTEUWXX.js +125 -0
- package/dist/chunk-6RTEUWXX.js.map +1 -0
- package/dist/{chunk-RTYDYSUV.js → chunk-72KZJE3G.js} +82 -22
- package/dist/chunk-72KZJE3G.js.map +1 -0
- package/dist/{chunk-SAKVAG23.js → chunk-A26MUUN7.js} +7 -7
- package/dist/{chunk-SAKVAG23.js.map → chunk-A26MUUN7.js.map} +1 -1
- package/dist/{chunk-KUB4HFGK.js → chunk-A7AZ3RL5.js} +6 -6
- package/dist/{chunk-KUB4HFGK.js.map → chunk-A7AZ3RL5.js.map} +1 -1
- package/dist/{chunk-LEOXPIC6.js → chunk-AP24HESN.js} +3 -3
- package/dist/{chunk-LEOXPIC6.js.map → chunk-AP24HESN.js.map} +1 -1
- package/dist/{chunk-SRKU7QUG.js → chunk-CQFVKN6S.js} +230 -62
- package/dist/chunk-CQFVKN6S.js.map +1 -0
- package/dist/{chunk-OOQ5Q75W.js → chunk-D3PU3C6F.js} +41 -16
- package/dist/chunk-D3PU3C6F.js.map +1 -0
- package/dist/{chunk-WXKNM2JJ.js → chunk-D5REDKVU.js} +3 -3
- package/dist/{chunk-WXKNM2JJ.js.map → chunk-D5REDKVU.js.map} +1 -1
- package/dist/{chunk-XX4C72CC.js → chunk-DADAZLFW.js} +648 -76
- package/dist/chunk-DADAZLFW.js.map +1 -0
- package/dist/{chunk-AVUJBSFA.js → chunk-DQOAPR4M.js} +2 -2
- package/dist/{chunk-AVUJBSFA.js.map → chunk-DQOAPR4M.js.map} +1 -1
- package/dist/{chunk-SCUEPCSJ.js → chunk-E634MBP6.js} +12 -9
- package/dist/chunk-E634MBP6.js.map +1 -0
- package/dist/{chunk-NKDSU4Q7.js → chunk-ES6ARJPQ.js} +21 -7
- package/dist/chunk-ES6ARJPQ.js.map +1 -0
- package/dist/{chunk-WWUWMOX2.js → chunk-FSLVMZXR.js} +37 -17
- package/dist/chunk-FSLVMZXR.js.map +1 -0
- package/dist/{chunk-MKTJZLQM.js → chunk-FSSRBWYL.js} +4 -4
- package/dist/{chunk-MKTJZLQM.js.map → chunk-FSSRBWYL.js.map} +1 -1
- package/dist/{chunk-VY6NTFE7.js → chunk-FT4ZHLYR.js} +3 -2
- package/dist/chunk-FT4ZHLYR.js.map +1 -0
- package/dist/chunk-FWAJUWXQ.js +1016 -0
- package/dist/chunk-FWAJUWXQ.js.map +1 -0
- package/dist/{chunk-ANSZULXH.js → chunk-H7R7R5BN.js} +21 -6
- package/dist/chunk-H7R7R5BN.js.map +1 -0
- package/dist/{chunk-4AKR4XPQ.js → chunk-HG52NGAV.js} +3 -3
- package/dist/chunk-HG52NGAV.js.map +1 -0
- package/dist/{plugin-store-BIITCNOZ.js → chunk-HUKUYWBJ.js} +32 -23
- package/dist/chunk-HUKUYWBJ.js.map +1 -0
- package/dist/{chunk-D2MZZ2KB.js → chunk-ISSYT5AZ.js} +3 -3
- package/dist/{chunk-D2MZZ2KB.js.map → chunk-ISSYT5AZ.js.map} +1 -1
- package/dist/{chunk-2LTF2ZHH.js → chunk-J4RRH2NP.js} +4 -4
- package/dist/{chunk-2LTF2ZHH.js.map → chunk-J4RRH2NP.js.map} +1 -1
- package/dist/{chunk-NOF73BUH.js → chunk-L6UMSKDF.js} +10 -2
- package/dist/chunk-L6UMSKDF.js.map +1 -0
- package/dist/{chunk-TCWECSEB.js → chunk-NSNM2ZXF.js} +28 -4
- package/dist/chunk-NSNM2ZXF.js.map +1 -0
- package/dist/{chunk-QR7W5JV4.js → chunk-OHNNCXMB.js} +114 -81
- package/dist/chunk-OHNNCXMB.js.map +1 -0
- package/dist/{chunk-DP6YRAPZ.js → chunk-OJHPG6HK.js} +57 -13
- package/dist/chunk-OJHPG6HK.js.map +1 -0
- package/dist/{chunk-SZPE55SB.js → chunk-PGZDSDOB.js} +3 -3
- package/dist/{chunk-SZPE55SB.js.map → chunk-PGZDSDOB.js.map} +1 -1
- package/dist/{chunk-4QINFQ27.js → chunk-PIC23DDE.js} +59 -17
- package/dist/chunk-PIC23DDE.js.map +1 -0
- package/dist/{chunk-GLMKS6V6.js → chunk-RTNWU2UD.js} +4 -4
- package/dist/{chunk-GLMKS6V6.js.map → chunk-RTNWU2UD.js.map} +1 -1
- package/dist/{chunk-YL23KWBX.js → chunk-SAGBVBY2.js} +5 -5
- package/dist/{chunk-YL23KWBX.js.map → chunk-SAGBVBY2.js.map} +1 -1
- package/dist/{chunk-JHP6MIW2.js → chunk-SMUIYYCH.js} +70 -34
- package/dist/chunk-SMUIYYCH.js.map +1 -0
- package/dist/{chunk-N36S36OZ.js → chunk-SPV2CXJ3.js} +3 -3
- package/dist/{chunk-N36S36OZ.js.map → chunk-SPV2CXJ3.js.map} +1 -1
- package/dist/{chunk-KRRHADE7.js → chunk-SXWGLW23.js} +4 -4
- package/dist/{chunk-KRRHADE7.js.map → chunk-SXWGLW23.js.map} +1 -1
- package/dist/{chunk-74THIMZV.js → chunk-TADJCATD.js} +3 -3
- package/dist/{chunk-74THIMZV.js.map → chunk-TADJCATD.js.map} +1 -1
- package/dist/{chunk-PQF5QHVS.js → chunk-TKI7YDWE.js} +19 -5
- package/dist/chunk-TKI7YDWE.js.map +1 -0
- package/dist/{chunk-O673TBWJ.js → chunk-TXGVG7VH.js} +3 -3
- package/dist/{chunk-O673TBWJ.js.map → chunk-TXGVG7VH.js.map} +1 -1
- package/dist/{chunk-PIDMOE7R.js → chunk-VJ2DZLDM.js} +62 -6
- package/dist/chunk-VJ2DZLDM.js.map +1 -0
- package/dist/{chunk-PV47EEHD.js → chunk-WKEBNB5S.js} +4 -4
- package/dist/{chunk-PV47EEHD.js.map → chunk-WKEBNB5S.js.map} +1 -1
- package/dist/{chunk-ESXZJP4M.js → chunk-WXWQNJCT.js} +3 -3
- package/dist/{chunk-ESXZJP4M.js.map → chunk-WXWQNJCT.js.map} +1 -1
- package/dist/{chunk-DPCEQOIZ.js → chunk-XGR7IDTY.js} +3 -3
- package/dist/{chunk-DPCEQOIZ.js.map → chunk-XGR7IDTY.js.map} +1 -1
- package/dist/{chunk-I3JO3NIZ.js → chunk-Y25V2MW2.js} +4 -4
- package/dist/{chunk-I3JO3NIZ.js.map → chunk-Y25V2MW2.js.map} +1 -1
- package/dist/{chunk-MGM5EJQQ.js → chunk-YK3XLEQJ.js} +40 -26
- package/dist/chunk-YK3XLEQJ.js.map +1 -0
- package/dist/{chunk-SP5NGNBV.js → chunk-YW2BNDSE.js} +11 -4
- package/dist/chunk-YW2BNDSE.js.map +1 -0
- package/dist/{chunk-J76LDUDS.js → chunk-ZVZTCDUN.js} +26 -10
- package/dist/chunk-ZVZTCDUN.js.map +1 -0
- package/dist/cli/index.js +899 -1617
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/agent-checks.d.ts +22 -10
- package/dist/cli/src/agent-checks.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.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 +6 -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/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/codex.d.ts +10 -0
- package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin/types.d.ts +5 -2
- package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-export.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +6 -0
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/rebuild.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 +13 -0
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/show.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +2 -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/update.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts +6 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/commands/verify.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +23 -0
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +8 -0
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/load.d.ts +1 -0
- package/dist/cli/src/plugin-store/load.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +9 -21
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +16 -15
- package/dist/{connectors-JQR5RAMC.js → connectors-44RE2QEM.js} +19 -18
- package/dist/{connectors-JQR5RAMC.js.map → connectors-44RE2QEM.js.map} +1 -1
- package/dist/core/index.js +6 -6
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/publish-manifest.js +3 -3
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/conformance.d.ts.map +1 -1
- package/dist/core/src/driver-sdk.d.ts +12 -2
- package/dist/core/src/driver-sdk.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +4 -4
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +7 -0
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +9 -0
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/publish-manifest.d.ts +5 -2
- package/dist/core/src/publish-manifest.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +14 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +6 -6
- package/dist/discovery/index.js +5 -5
- package/dist/discovery/src/index.d.ts +2 -2
- package/dist/discovery/src/index.d.ts.map +1 -1
- package/dist/discovery/src/parse-manifest.d.ts +7 -0
- package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
- package/dist/discovery/src/source-config.d.ts +6 -0
- package/dist/discovery/src/source-config.d.ts.map +1 -1
- package/dist/{ensure-sources-NAGBSMJE.js → ensure-sources-R6AHZ7RV.js} +16 -16
- package/dist/{ensure-sources-NAGBSMJE.js.map → ensure-sources-R6AHZ7RV.js.map} +1 -1
- package/dist/factory-assets/README.md +1 -1
- package/dist/factory-assets/connectors/box.js +16 -15
- package/dist/factory-assets/connectors/deploy.js +16 -15
- package/dist/factory-assets/connectors/devserver.js +16 -15
- package/dist/factory-assets/connectors/flow/adapter.js +16 -15
- package/dist/factory-assets/connectors/flow/engine.js +7 -7
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +18 -17
- package/dist/factory-assets/connectors/flow.js +16 -15
- package/dist/factory-assets/connectors/git/CONNECTOR.md +1 -0
- package/dist/factory-assets/connectors/git/lifecycle.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git/repo.d.ts +17 -3
- package/dist/factory-assets/connectors/git/repo.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +16 -15
- package/dist/factory-assets/connectors/gmail.js +16 -15
- package/dist/factory-assets/connectors/googledrive.js +16 -15
- package/dist/factory-assets/connectors/local.js +16 -15
- package/dist/factory-assets/connectors/mattermost.js +16 -15
- package/dist/factory-assets/connectors/memory.js +16 -15
- package/dist/factory-assets/connectors/minio.js +16 -15
- package/dist/factory-assets/connectors/postgres.js +16 -15
- package/dist/factory-assets/connectors/s3.js +16 -15
- package/dist/factory-assets/connectors/sharepoint.js +16 -15
- package/dist/factory-assets/connectors/sqlite.js +16 -15
- package/dist/factory-assets/connectors/static-server.js +16 -15
- package/dist/factory-assets/connectors/tunnel.js +16 -15
- package/dist/factory-assets/connectors/webdav.js +16 -15
- package/dist/factory-assets/connectors/xstate-store.js +16 -15
- package/dist/factory-assets/connectors/xstate.js +16 -15
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +12 -11
- package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +11 -7
- package/dist/factory-assets/skills/skailify/SKILL.md +3 -3
- package/dist/{flows-CYJI3URW.js → flows-YKC53LDP.js} +11 -11
- package/dist/{flows-CYJI3URW.js.map → flows-YKC53LDP.js.map} +1 -1
- package/dist/{helpers-XFHJDJOA.js → helpers-FNQL5PI7.js} +16 -16
- package/dist/{helpers-XFHJDJOA.js.map → helpers-FNQL5PI7.js.map} +1 -1
- package/dist/library/index.js +10 -10
- package/dist/library/install.js +4 -4
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/local/store-paths.d.ts +8 -0
- package/dist/library/src/local/store-paths.d.ts.map +1 -1
- package/dist/library/src/manifest-writer.d.ts +5 -1
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +3 -2
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/{library-publish-FC3ZABR2.js → library-publish-GHPVY42Y.js} +56 -48
- package/dist/library-publish-GHPVY42Y.js.map +1 -0
- package/dist/model-endpoint/index.js +19 -3
- 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/resolve.d.ts +5 -0
- package/dist/model-endpoint/src/resolve.d.ts.map +1 -1
- package/dist/model-endpoint/src/server.d.ts +7 -0
- package/dist/model-endpoint/src/server.d.ts.map +1 -1
- package/dist/model-endpoint/src/types.d.ts +41 -7
- package/dist/model-endpoint/src/types.d.ts.map +1 -1
- package/dist/{open-library-5ET7SAJC.js → open-library-YSUGNP36.js} +19 -19
- package/dist/{open-library-5ET7SAJC.js.map → open-library-YSUGNP36.js.map} +1 -1
- package/dist/{open-registry-X6YQVP7V.js → open-registry-YPRQDUMK.js} +14 -14
- package/dist/{open-registry-X6YQVP7V.js.map → open-registry-YPRQDUMK.js.map} +1 -1
- package/dist/{paths-NXWIBZCX.js → paths-P55DTBEK.js} +9 -9
- package/dist/{paths-NXWIBZCX.js.map → paths-P55DTBEK.js.map} +1 -1
- package/dist/plugin-store-IPIBZRBX.js +23 -0
- package/dist/plugin-store-IPIBZRBX.js.map +1 -0
- package/dist/project-NDSLXERO.js +83 -0
- package/dist/{project-2UXHSVVA.js.map → project-NDSLXERO.js.map} +1 -1
- package/dist/resolver/index.js +7 -7
- package/dist/resolver/src/types.d.ts +1 -0
- package/dist/resolver/src/types.d.ts.map +1 -1
- package/dist/resolver/src/validator.d.ts +1 -1
- package/dist/runner/index.js +32 -31
- package/dist/runner/src/agent.d.ts +9 -1
- package/dist/runner/src/agent.d.ts.map +1 -1
- package/dist/runner/src/agents/in-process-host.d.ts.map +1 -1
- package/dist/runner/src/composition/content-source.d.ts.map +1 -1
- package/dist/runner/src/composition/index.d.ts +1 -1
- package/dist/runner/src/composition/index.d.ts.map +1 -1
- package/dist/runner/src/composition/resolve-instance.d.ts +20 -0
- package/dist/runner/src/composition/resolve-instance.d.ts.map +1 -1
- package/dist/runner/src/model-endpoint-discovery.d.ts.map +1 -1
- package/dist/runner/src/resource-handler.d.ts.map +1 -1
- package/dist/runner/src/runner-capabilities.d.ts +9 -3
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts +10 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts +20 -1
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/runner/src/session-capability-wiring.d.ts +5 -0
- package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +13 -13
- package/dist/sdk/bridge.js +13 -12
- package/dist/sdk/core.js +6 -6
- package/dist/sdk/flow.js +7 -7
- package/dist/sdk/index.js +32 -31
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +7 -7
- package/dist/sdk/runner.js +32 -31
- package/dist/sdk/transport/ws/server.js +1 -1
- package/dist/sdk/transport/ws.js +1 -1
- package/dist/sdk/transport.js +1 -1
- package/dist/{serve-preflight-GD7IQFA3.js → serve-preflight-ON2LS3SD.js} +15 -9
- package/dist/serve-preflight-ON2LS3SD.js.map +1 -0
- package/dist/{setup-IKH4R7UN.js → setup-MFPEQS2I.js} +23 -22
- package/dist/setup-MFPEQS2I.js.map +1 -0
- package/dist/{skills-XVHOXOOH.js → skills-7G6QCDEM.js} +12 -12
- package/dist/{skills-XVHOXOOH.js.map → skills-7G6QCDEM.js.map} +1 -1
- package/dist/{source-M6IARYNO.js → source-4QVRD5NV.js} +42 -41
- package/dist/{source-M6IARYNO.js.map → source-4QVRD5NV.js.map} +1 -1
- package/dist/{source-manifest-publish-UP2IS2QW.js → source-manifest-publish-ZIO24GUM.js} +44 -43
- package/dist/source-manifest-publish-ZIO24GUM.js.map +1 -0
- package/dist/transport/index.js +1 -1
- package/dist/transport/src/ws/server.d.ts +9 -0
- package/dist/transport/src/ws/server.d.ts.map +1 -1
- package/dist/transport/ws/server.js +1 -1
- package/dist/transport/ws.js +1 -1
- package/dist/tui/index.js +107 -41
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/repl-session.d.ts +7 -0
- package/dist/tui/src/repl-session.d.ts.map +1 -1
- package/dist/tui/src/repl.d.ts +16 -0
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/index.d.ts +1 -0
- package/dist/types/src/manifests/index.d.ts.map +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts +8 -0
- package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -0
- package/dist/workspace-plugin/adapters/mcp.js +23 -22
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4AKR4XPQ.js.map +0 -1
- package/dist/chunk-4QINFQ27.js.map +0 -1
- package/dist/chunk-ANSZULXH.js.map +0 -1
- package/dist/chunk-AXNX2SKZ.js.map +0 -1
- package/dist/chunk-DP6YRAPZ.js.map +0 -1
- package/dist/chunk-GQ5OYFVD.js.map +0 -1
- package/dist/chunk-J76LDUDS.js.map +0 -1
- package/dist/chunk-JHP6MIW2.js.map +0 -1
- package/dist/chunk-MGM5EJQQ.js.map +0 -1
- package/dist/chunk-NKDSU4Q7.js.map +0 -1
- package/dist/chunk-NOF73BUH.js.map +0 -1
- package/dist/chunk-OOQ5Q75W.js.map +0 -1
- package/dist/chunk-PIDMOE7R.js.map +0 -1
- package/dist/chunk-PQF5QHVS.js.map +0 -1
- package/dist/chunk-QR7W5JV4.js.map +0 -1
- package/dist/chunk-RTYDYSUV.js.map +0 -1
- package/dist/chunk-SCUEPCSJ.js.map +0 -1
- package/dist/chunk-SP5NGNBV.js.map +0 -1
- package/dist/chunk-SRKU7QUG.js.map +0 -1
- package/dist/chunk-TCWECSEB.js.map +0 -1
- package/dist/chunk-VY6NTFE7.js.map +0 -1
- package/dist/chunk-WWUWMOX2.js.map +0 -1
- package/dist/chunk-XX4C72CC.js.map +0 -1
- package/dist/library-publish-FC3ZABR2.js.map +0 -1
- package/dist/plugin-store-BIITCNOZ.js.map +0 -1
- package/dist/project-2UXHSVVA.js +0 -82
- package/dist/serve-preflight-GD7IQFA3.js.map +0 -1
- package/dist/setup-IKH4R7UN.js.map +0 -1
- package/dist/source-manifest-publish-UP2IS2QW.js.map +0 -1
package/dist/sdk/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../sdk/src/agent-session.ts","../../sdk/src/transport.ts","../../sdk/src/local-runtime.ts","../../sdk/src/workspace.ts","../../sdk/src/factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCO,IAAM,gBAAA,GAAmB;AAWzB,IAAM,eAAN,MAAmB;AAAA,EAexB,YAA+B,OAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,CAAC,CAAA,KAAM,IAAA,CAAK,YAAY,CAAC,CAAA;AAC7C,IAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EACnC;AAAA,EAH+B,OAAA;AAAA,EAd/B,KAAA,GAAsB,UAAA;AAAA,EACb,SAAuB,EAAC;AAAA,EACjC,QAAA;AAAA;AAAA,EAGQ,GAAA,GAAuB,IAAA;AAAA;AAAA,EAGvB,eAAA,GAA0D,IAAA;AAAA;AAAA,EAEjD,YAAA;AAAA;AAAA,EAET,SAAA;AAAA;AAAA;AAAA,EAUR,KAAK,IAAA,EAAoB;AACvB,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,SAAA,IAAa,IAAA,CAAK,UAAU,UAAA,EAAY;AAC3D,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAC/C,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAG5B,MAAA,MAAM,WAAW,IAAA,CAAK,GAAA,KAAQ,QAAQ,IAAA,CAAK,GAAA,CAAI,QAAO,CAAE,QAAA;AACxD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,QAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,MACf;AACA,MAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAAA,IAC9B,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AACb,MAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,IAAA,GAAa;AACX,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC9B,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AACvC,IAAA,KAAK,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAC1B,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oBAAoB,CAAA;AAC/D,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,SAAA,IAAY;AAAA,EACnB;AAAA;AAAA,EAGA,iBAAiB,EAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,EACnB;AAAA;AAAA,EAIU,YAAY,KAAA,EAAyB;AAC7C,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,IAAA,CAAK,sBAAA,CAAuB,MAAM,OAAO,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,iBAAiB,KAAK,CAAA;AAC3B,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAC5B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,IAAA,CAAK,wBAAwB,KAAK,CAAA;AAClC,QAAA;AAAA;AAGJ,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEQ,gBAAgB,KAAA,EAAyB;AAC/C,IAAA,MAAM,UAAU,SAAA,IAAa,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,EAAA;AAC7D,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,gBAAgB,OAAA,IAAW,OAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAsC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AACpE,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AACrB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,uBAAuB,OAAA,EAAuB;AACpD,IAAA,MAAM,OAAO,IAAA,CAAK,eAAA;AAClB,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1D,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAM,CAAA;AACzE,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACtC,MAAA,IAAI,UAAU,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAC7C,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,IAAA,GACJ,MAAA,IAAU,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA,IAAU,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AAChF,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,IAAA,GACJ,UAAA,IAAc,CAAA,GACV,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA,GACjB,MAAA,IAAU,CAAA,GACR,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,GACb,2BAAA;AACR,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAE1C,IAAA,MAAM,YAAY,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,EAAE,SAAA,GAAY,MAAA;AAClE,IAAA,IAAA,CAAK,GAAA,KAAQ,IAAI,QAAA,EAAS;AAC1B,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,EACf;AAAA,EAEQ,iBAAiB,KAAA,EAAyB;AAChD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,UAAU,SAAA,IAAa,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,oBAAA;AAC7D,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,CAAA;AAC1C,IAAA,IAAI,OAAA,IAAW,KAAA,IAAS,KAAA,CAAM,KAAA,OAAY,GAAA,GAAM,IAAA;AAChD,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,EACf;AAAA,EAEQ,kBAAkB,KAAA,EAAyB;AACjD,IAAA,MAAM,QAAQ,OAAA,IAAW,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,EAAA;AACvD,IAAA,IAAI,KAAA,KAAU,UAAA,IAAc,IAAA,CAAK,eAAA,KAAoB,IAAA,EAAM;AAC3D,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,EACtD;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,OAAO,MAAA,IAAU,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,GAAI,SAAA;AAC5C,IAAA,MAAM,SAAS,QAAA,IAAY,CAAA,GAAK,MAAA,CAAO,CAAA,CAAE,MAAM,CAAA,GAA+B,SAAA;AAC9E,IAAA,MAAM,cAAc,aAAA,IAAiB,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,WAAW,CAAA,GAAI,EAAA;AACjE,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,YAAY,IAAA,EAAM,MAAA,EAAQ,aAAa,CAAA;AAC/D,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AACrC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,EACf;AAAA,EAEQ,wBAAwB,KAAA,EAAyB;AACvD,IAAA,IAAI,OAAA,IAAW,KAAA,IAAU,KAAA,CAAkC,KAAA,KAAU,SAAA,EAAW;AAC9E,MAAA,IAAA,CAAK,QAAA,EAAS;AACd,MAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,kBAAkB,CAAA;AAC7D,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,MAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAmB;AACzB,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,IAAA,IAAQ,IAAA,CAAK,UAAU,SAAA,EAAW;AACnD,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,EACf;AAAA;AAAA,EAIU,WAAW,IAAA,EAAwB;AAC3C,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AACrB,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA,EAEU,MAAA,GAAe;AACvB,IAAA,IAAA,CAAK,QAAA,IAAW;AAAA,EAClB;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,EACzB;AAAA,EAEQ,UAAA,GAAmB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,gBAAA,EAAkB;AAC5C,MAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IACpB;AAAA,EACF;AACF;;;ACxPO,IAAM,qBAAN,MAAoD;AAAA,EACxC,eAAA,uBAAsB,GAAA,EAAiC;AAAA,EACvD,aAAA,uBAAoB,GAAA,EAAiC;AAAA;AAAA;AAAA;AAAA,EAIrD,kBAAkC,EAAC;AAAA;AAAA;AAAA;AAAA,EAMpD,MAAM,MAAA,GAAwB;AAAA,EAAC;AAAA,EAE/B,MAAM,KAAA,GAAuB;AAAA,EAAC;AAAA,EAE9B,KAAK,KAAA,EAAyB;AAC5B,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,aAAA,EAAe,CAAA,CAAE,KAAK,CAAA;AAAA,EAC7C;AAAA,EAEA,UAAU,OAAA,EAAkD;AAC1D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,IAAA,KAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,OAAO,CAAA;AAChC,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA;AAC9C,MAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,QAAA,KAAK,QAAQ,OAAA,EAAQ,CAAE,KAAK,MAAM,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,UAAU,QAAA,EAAkC;AAC1C,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAAA,EAEA,aAAa,QAAA,EAAkC;AAC7C,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,gBAAgB,IAAA,GAAO,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAA,EAA6B;AAClC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,KAAS,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,OAAO,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,eAAA,EAAiB;AACpC,MAAA,KAAK,QAAQ,OAAA,EAAQ,CAAE,KAAK,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA,EAGA,QAAQ,OAAA,EAAkD;AACxD,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,MAAM,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA;AAAA,EAChD;AACF;;;ACjDO,IAAM,eAAN,MAAyE;AAAA,EAC7D,SAAA,GAAY,IAAI,kBAAA,EAAmB;AAAA,EACnC,QAAA,uBAAe,GAAA,EAA6B;AAAA,EACrD,OAAA,GAAU,KAAA;AAAA,EACV,YAAA;AAAA,EACS,YAAA,GAAe,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAC7D,IAAA,IAAA,CAAK,YAAA,GAAe,OAAA;AAAA,EACtB,CAAC,CAAA;AAAA,EAED,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC5B,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,CAAC,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,IAAA,EAA+C;AACzD,IAAA,IAAI,KAAK,OAAA,EAAS;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,MAAM,gBAAA,CAAiB;AAAA,MACrB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,OAAO,IAAA,CAAK,KAAA;AAAA;AAAA,MAEZ,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,MAAM,OAAO,OAAA,EAAgC;AAC3C,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,EAAE,MAAM,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,MAAM,MAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,EAC5C;AAAA,EAEA,QAAQ,OAAA,EAAwC;AAC9C,IAAA,IAAA,CAAK,QAAA,CAAS,IAAI,OAAO,CAAA;AAAA,EAC3B;AAAA,EAEA,SAAS,OAAA,EAAwC;AAC/C,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA;AAAA,EACxB;AACF;ACvFO,SAAS,iBAAiB,IAAA,EAG/B;AACA,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,CAAK,YAAA,EAAc,SAAS,MAAA,EAAU;AAAA,EACtD;AAIA,EAAA,MAAM,MAAM,WAAA,CAAY,IAAA,CAAK,MAAA,EAAO,EAAG,aAAa,CAAC,CAAA;AAErD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,GACjB,MAAA,GACA,MAAM,MAAA,CAAO,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAEtD,EAAA,OAAO,EAAE,KAAK,OAAA,EAAQ;AACxB;AAaO,SAAS,eAAA,CAAgB,KAAa,IAAA,EAAuC;AAClF,EAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,IAAA,CAAK,QAAQ,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY,MAAA,EAAQ;AACrE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,aAAa,CAAA;AACpC,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AAEtB,EAAA,MAAM,GAAA,GAA+B;AAAA,IACnC,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,cAAc,CAAA,GAAI;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,GAAI,KAAK,KAAA,CAAM,MAAA,IAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,MAAA,EAAO;AAAA,QACrD,GAAI,KAAK,KAAA,CAAM,QAAA,IAAY,EAAE,QAAA,EAAU,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,QAC3D,GAAI,KAAK,KAAA,CAAM,KAAA,IAAS,EAAE,KAAA,EAAO,IAAA,CAAK,MAAM,KAAA;AAAM;AACpD,KACF;AAEA,IAAA,IAAI,KAAK,KAAA,CAAM,QAAA,KAAa,UAAa,IAAA,CAAK,KAAA,CAAM,mBAAmB,MAAA,EAAW;AAChF,MAAA,GAAA,CAAI,KAAA,GAAQ;AAAA,QACV,WAAA,EAAa;AAAA,UACX,GAAI,KAAK,KAAA,CAAM,QAAA,KAAa,UAAa,EAAE,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAAA,UAC1E,GAAI,IAAA,CAAK,KAAA,CAAM,cAAA,KAAmB,MAAA,IAAa;AAAA,YAC7C,eAAA,EAAiB,KAAK,KAAA,CAAM;AAAA;AAC9B;AACF,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,IAAA,GAAA,CAAI,SAAS,IAAA,CAAK,MAAA;AAAA,EACpB;AAEA,EAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAQ;AAG3B,IAAA,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC3C,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,QAAQ,CAAA,CAAE,OAAA;AAAA,MACV,GAAI,CAAA,CAAE,MAAA,IAAU,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,MACnC,GAAI,CAAA,CAAE,IAAA,IAAQ,EAAE,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,MAC7B,GAAI,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,EAAS,EAAE,OAAA;AAAQ,KACxC,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,aAAA,CAAc,IAAA,EAAM,SAAA,CAAU,GAAG,CAAC,CAAA;AACpC;;;AC7EA,eAAsB,kBAAA,CACpB,IAAA,GAAkC,EAAC,EACZ;AACvB,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAQ,GAAI,iBAAiB,IAAI,CAAA;AAC9C,EAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAEzB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,MAAM,OAAA,EAAQ;AAC1C,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,MAAM,CAAA,GAAI,IAAI,YAAA,EAAa;AAC3B,IAAA,MAAM,CAAA,CAAE,MAAM,EAAE,UAAA,EAAY,KAAK,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAC1D,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,IAAI,wBAAA,CAAyB,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAChE,IAAA,MAAM,UAAU,OAAA,EAAQ;AACxB,IAAA,OAAA,GAAU,IAAI,YAAY,SAAS,CAAA;AAAA,EACrC;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,YAAA,CAAa,OAAO,CAAA;AACxC,EAAA,OAAA,CAAQ,KAAA,GAAQ,MAAA;AAEhB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,IAAA,CAAK,aAAA,EAAe,IAAA,EAAK,EAAG;AAC9B,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC;AAEA,EAAA,OAAO,OAAA;AACT","file":"index.js","sourcesContent":["/**\n * AgentSession — stateful wrapper over any IAgentRuntime-compatible object.\n *\n * Provides:\n * - AgentEvent → OutputLine conversion with streaming text accumulation\n * - State machine: starting → idle ↔ active ↔ waiting → stopped\n * - Circular output buffer (500 lines, see {@link MAX_OUTPUT_LINES})\n * - send() routes to prompt() or reply() based on current state\n * - stop() disposes the runtime and fires optional cleanup\n * - onChange callback for reactive UIs (React forceUpdate, EventEmitter, etc.)\n *\n * Works with LocalRuntime (in-process) and AgentClient (remote/WebSocket).\n * Extend to add identity fields (id, name, profileName…):\n *\n * class MySession extends AgentSession {\n * constructor(readonly id: string, runtime: LocalRuntime | AgentClient) {\n * super(runtime);\n * }\n * }\n *\n * @docLink packages/sdk/concepts#agent-session\n */\n\nimport { AskSlots } from \"../../types/src/ask-slots.js\";\nimport type { AgentEvent } from \"@skaile/workspaces/types\";\nimport type { OutputLine, SessionState } from \"./types.js\";\n\n/**\n * Maximum number of {@link OutputLine} entries retained in {@link AgentSession.output}.\n *\n * When the buffer exceeds this limit the oldest lines are dropped from the front,\n * keeping memory use bounded for long-running sessions.\n *\n * @docLink packages/sdk/concepts#agent-session\n */\nexport const MAX_OUTPUT_LINES = 500;\n\ninterface MinimalRuntime {\n prompt(message: string): Promise<void>;\n reply(answer: string): Promise<void>;\n abort(): Promise<void>;\n dispose(): Promise<void>;\n onEvent(handler: (e: AgentEvent) => void): void;\n offEvent(handler: (e: AgentEvent) => void): void;\n}\n\nexport class AgentSession {\n state: SessionState = \"starting\";\n readonly output: OutputLine[] = [];\n onChange?: () => void;\n\n /** The parked multi-question ask; null when no question waits for an answer. */\n private ask: AskSlots | null = null;\n\n /** Pointer to the streaming text line being accumulated in-place. */\n private currentTextLine: (OutputLine & { type: \"text\" }) | null = null;\n /** Registered in constructor so we can offEvent on stop. */\n private readonly eventHandler: (e: AgentEvent) => void;\n /** Optional cleanup hook registered by the factory (temp dir removal, etc.). */\n private cleanupFn?: () => void;\n\n constructor(protected readonly runtime: MinimalRuntime) {\n this.eventHandler = (e) => this.handleEvent(e);\n runtime.onEvent(this.eventHandler);\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n\n /** Send a user message. Routes to reply() or prompt() based on state. */\n send(text: string): void {\n if (this.state === \"stopped\" || this.state === \"starting\") return;\n this.appendLine({ type: \"user\", content: text });\n if (this.state === \"waiting\") {\n // A multi-question ask stays parked until every sub-question has an answer.\n // `reply()` carries no question name, so each answer fills the oldest open one.\n const complete = this.ask === null || this.ask.answer().complete;\n if (complete) {\n this.ask = null;\n this.state = \"active\";\n }\n void this.runtime.reply(text);\n } else {\n // A prompt abandons any unanswered question.\n this.ask = null;\n this.state = \"active\";\n void this.runtime.prompt(text);\n }\n }\n\n /** Stop the session and dispose the runtime. */\n stop(): void {\n if (this.state === \"stopped\") return;\n this.ask = null;\n this.state = \"stopped\";\n this.runtime.offEvent(this.eventHandler);\n void this.runtime.dispose();\n this.appendLine({ type: \"system\", message: \"Session stopped.\" });\n this.notify();\n this.cleanupFn?.();\n }\n\n /** Register a cleanup function called when the session stops. Used by the factory. */\n _registerCleanup(fn: () => void): void {\n this.cleanupFn = fn;\n }\n\n // ── Event → OutputLine ────────────────────────────────────────────────────\n\n protected handleEvent(event: AgentEvent): void {\n switch (event.type) {\n case \"text\":\n this.handleTextEvent(event);\n break;\n case \"text_retract\":\n this.handleTextRetractEvent(event.content);\n break;\n case \"tool_call\":\n this.handleToolCallEvent(event);\n break;\n case \"question\":\n this.handleQuestionEvent(event);\n break;\n case \"error\":\n this.handleErrorEvent(event);\n break;\n case \"status\":\n this.handleStatusEvent(event);\n break;\n case \"subagent\":\n this.handleSubagentEvent(event);\n break;\n case \"finished\":\n this.handleFinishedEvent();\n break;\n case \"state_changed\":\n this.handleStateChangedEvent(event);\n break;\n }\n\n this.notify();\n }\n\n private handleTextEvent(event: AgentEvent): void {\n const content = \"content\" in event ? String(event.content) : \"\";\n if (this.currentTextLine) {\n this.currentTextLine.content += content;\n } else {\n const line: OutputLine & { type: \"text\" } = { type: \"text\", content };\n this.output.push(line);\n this.currentTextLine = line;\n this.trimOutput();\n }\n this.markActive();\n }\n\n /**\n * Cut an abandoned attempt's fragment off the open text line, dropping the\n * line when nothing is left. A sealed line or a mismatched tail stays as is.\n */\n private handleTextRetractEvent(content: string): void {\n const line = this.currentTextLine;\n if (!line || !content || !line.content.endsWith(content)) return;\n line.content = line.content.slice(0, line.content.length - content.length);\n if (line.content.length === 0) {\n const index = this.output.indexOf(line);\n if (index !== -1) this.output.splice(index, 1);\n this.currentTextLine = null;\n }\n }\n\n private handleToolCallEvent(event: AgentEvent): void {\n this.sealText();\n const name =\n \"name\" in event ? String(event.name) : \"tool\" in event ? String(event.tool) : \"tool\";\n this.appendLine({ type: \"tool\", name });\n this.markActive();\n }\n\n private handleQuestionEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const text =\n \"question\" in e\n ? String(e.question)\n : \"text\" in e\n ? String(e.text)\n : \"The agent has a question.\";\n this.appendLine({ type: \"question\", text });\n // One event arrives per sub-question; they share an ask until it is answered.\n const requestId = typeof e.requestId === \"string\" ? e.requestId : undefined;\n this.ask ??= new AskSlots();\n this.ask.add(text, requestId);\n this.state = \"waiting\";\n }\n\n private handleErrorEvent(event: AgentEvent): void {\n this.sealText();\n const message = \"message\" in event ? String(event.message) : \"An error occurred.\";\n this.appendLine({ type: \"error\", message });\n if (\"fatal\" in event && event.fatal) this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStatusEvent(event: AgentEvent): void {\n const phase = \"phase\" in event ? String(event.phase) : \"\";\n if (phase === \"thinking\" && this.currentTextLine !== null) return;\n if (phase) this.appendLine({ type: \"status\", phase });\n }\n\n private handleSubagentEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const name = \"name\" in e ? String(e.name) : \"unknown\";\n const status = \"status\" in e ? (String(e.status) as \"started\" | \"finished\") : \"started\";\n const description = \"description\" in e ? String(e.description) : \"\";\n this.appendLine({ type: \"subagent\", name, status, description });\n if (status === \"started\") {\n this.markActive();\n }\n }\n\n private handleFinishedEvent(): void {\n this.sealText();\n this.appendLine({ type: \"separator\" });\n this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStateChangedEvent(event: AgentEvent): void {\n if (\"state\" in event && (event as Record<string, unknown>).state === \"stopped\") {\n this.sealText();\n this.appendLine({ type: \"system\", message: \"Agent stopped.\" });\n this.ask = null;\n this.state = \"stopped\";\n }\n }\n\n /**\n * The agent is working. Not while an ask is parked: the driver keeps the turn\n * paused until every sub-question has an answer, and follows the question\n * events with tool activity for the same block.\n */\n private markActive(): void {\n if (this.ask !== null && this.state === \"waiting\") return;\n this.state = \"active\";\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n protected appendLine(line: OutputLine): void {\n this.output.push(line);\n this.trimOutput();\n }\n\n protected notify(): void {\n this.onChange?.();\n }\n\n private sealText(): void {\n this.currentTextLine = null;\n }\n\n private trimOutput(): void {\n while (this.output.length > MAX_OUTPUT_LINES) {\n this.output.shift();\n }\n }\n}\n","/**\n * InProcessTransport — ServerTransport that runs entirely in-process.\n *\n * Used internally by {@link LocalRuntime}. Also exported for consumers building\n * custom integrations that need direct transport access without WebSocket overhead.\n *\n * Runner side (startAgentServer):\n * onCommand(handler) — registers the runner's command handler\n * send(event) — delivers AgentEvents to onEvent subscribers\n *\n * Application side:\n * inject(command) — sends a command to the agent (deferred to avoid re-entrancy)\n * onEvent(handler) — subscribes to AgentEvents; returns unsubscribe fn\n *\n * @docLink packages/sdk/concepts#in-process-transport\n */\n\nimport type { AgentCommand, AgentEvent, ServerTransport } from \"@skaile/workspaces/types\";\n\nexport class InProcessTransport implements ServerTransport {\n private readonly commandHandlers = new Set<(cmd: AgentCommand) => void>();\n private readonly eventHandlers = new Set<(event: AgentEvent) => void>();\n // Commands injected before any handler is registered are buffered here and\n // flushed on the first onCommand() — without this they iterate an empty set\n // and are silently lost (e.g. a prompt sent during start()'s wiring window).\n private readonly pendingCommands: AgentCommand[] = [];\n\n // ── ServerTransport ───────────────────────────────────────────────────────\n\n // In-process: no socket to open or tear down — both are no-ops so serve()\n // can drive any transport's lifecycle without an instanceof check.\n async listen(): Promise<void> {}\n\n async close(): Promise<void> {}\n\n send(event: AgentEvent): void {\n for (const h of this.eventHandlers) h(event);\n }\n\n onCommand(handler: (cmd: AgentCommand) => void): () => void {\n const wasEmpty = this.commandHandlers.size === 0;\n this.commandHandlers.add(handler);\n if (wasEmpty && this.pendingCommands.length > 0) {\n const buffered = this.pendingCommands.splice(0);\n for (const cmd of buffered) {\n void Promise.resolve().then(() => handler(cmd));\n }\n }\n return () => this.commandHandlers.delete(handler);\n }\n\n onConnect(_handler: () => void): () => void {\n return () => {};\n }\n\n onDisconnect(_handler: () => void): () => void {\n return () => {};\n }\n\n /** True once a command handler is wired (i.e. the runner has started). */\n get connected(): boolean {\n return this.commandHandlers.size > 0;\n }\n\n // ── Application API ───────────────────────────────────────────────────────\n\n /**\n * Send a command into the agent runner. Deferred to avoid re-entrancy.\n * Commands injected before a handler is registered are buffered and\n * flushed when the runner wires its handler, so none are dropped.\n */\n inject(command: AgentCommand): void {\n if (this.commandHandlers.size === 0) {\n this.pendingCommands.push(command);\n return;\n }\n for (const h of this.commandHandlers) {\n void Promise.resolve().then(() => h(command));\n }\n }\n\n /** Subscribe to AgentEvents. Returns an unsubscribe function. */\n onEvent(handler: (event: AgentEvent) => void): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n}\n","/**\n * LocalRuntime — IAgentRuntime implementation that runs the agent in the same process.\n *\n * Mirror image of AgentClient: same interface, no WebSocket.\n * Uses InProcessTransport + startAgentServer() internally.\n *\n * Usage:\n * const runtime = new LocalRuntime();\n * runtime.onEvent(e => console.log(e));\n * await runtime.start({ projectDir: \"/path/to/workspace\" });\n * await runtime.prompt(\"Hello\");\n * await runtime.dispose();\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\n\nimport { startAgentServer } from \"@skaile/workspaces/runner\";\nimport type { AgentEvent, IAgentRuntime } from \"@skaile/workspaces/types\";\nimport { InProcessTransport } from \"./transport.js\";\n\n/**\n * Options passed to {@link LocalRuntime.start}.\n *\n * `projectDir` is the only required field — it points to the workspace directory\n * containing `skaile.yaml`. All other fields override the manifest's agent configuration.\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\nexport interface LocalRuntimeStartOptions {\n projectDir: string;\n agentDir?: string;\n driver?: string;\n model?: string;\n provider?: string;\n onLog?: (line: string) => void;\n}\n\nexport class LocalRuntime implements Omit<IAgentRuntime, \"start\" | \"configure\"> {\n private readonly transport = new InProcessTransport();\n private readonly handlers = new Set<(e: AgentEvent) => void>();\n private started = false;\n private resolveReady!: () => void;\n private readonly readyPromise = new Promise<void>((resolve) => {\n this.resolveReady = resolve;\n });\n\n constructor() {\n this.transport.onEvent((e) => {\n for (const h of this.handlers) h(e);\n });\n }\n\n /**\n * Start the agent server. Resolves when the runner is wired and ready\n * to accept commands. Must be called before prompt() / reply().\n */\n async start(opts: LocalRuntimeStartOptions): Promise<void> {\n if (this.started) return;\n this.started = true;\n await startAgentServer({\n projectDir: opts.projectDir,\n agentDir: opts.agentDir,\n driver: opts.driver,\n model: opts.model,\n provider: opts.provider,\n transport: this.transport,\n onLog: opts.onLog,\n // The embedder owns stdout; log records go to the project's log db and to `onLog`.\n stdout: false,\n });\n this.resolveReady();\n }\n\n /**\n * Resolves once the runner is wired and accepting commands. Await this\n * before issuing commands that expect a reply (e.g. debug queries) so a\n * pre-start command isn't buffered indefinitely. Never rejects.\n */\n whenReady(): Promise<void> {\n return this.readyPromise;\n }\n\n async prompt(message: string): Promise<void> {\n this.transport.inject({ type: \"prompt\", prompt: message });\n }\n\n async reply(answer: string): Promise<void> {\n this.transport.inject({ type: \"reply\", answer });\n }\n\n async abort(): Promise<void> {\n this.transport.inject({ type: \"cancel\" });\n }\n\n async dispose(): Promise<void> {\n this.transport.inject({ type: \"shutdown\" });\n }\n\n onEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.add(handler);\n }\n\n offEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.delete(handler);\n }\n\n get isRunning(): boolean {\n return this.transport.connected;\n }\n}\n","/**\n * Workspace utilities — prepare session directories and write skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\n\n/**\n * Prepare a workspace directory for a session. Returns the path and cleanup fn.\n *\n * If `opts.workspaceDir` is set, that directory is created (if needed) and returned\n * with no cleanup. Otherwise a unique temporary directory (`skaile-sdk-*` under the\n * OS temp dir) is created via `mkdtempSync`; the cleanup function removes it on\n * session stop unless `keepWorkspace` is true.\n *\n * @param opts - Session creation options providing `workspaceDir` and `keepWorkspace`.\n * @returns An object with the resolved `dir` path and an optional `cleanup` function.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function prepareWorkspace(opts: CreateAgentSessionOptions): {\n dir: string;\n cleanup: (() => void) | undefined;\n} {\n if (opts.workspaceDir) {\n mkdirSync(opts.workspaceDir, { recursive: true });\n return { dir: opts.workspaceDir, cleanup: undefined };\n }\n\n // mkdtemp yields an unpredictable, collision-free name (vs. a guessable\n // timestamp path) — avoids cross-session clobbering and symlink races in /tmp.\n const dir = mkdtempSync(join(tmpdir(), \"skaile-sdk-\"));\n\n const cleanup = opts.keepWorkspace\n ? undefined\n : () => rmSync(dir, { recursive: true, force: true });\n\n return { dir, cleanup };\n}\n\n/**\n * Write skaile.yaml from inline {@link CreateAgentSessionOptions}.\n *\n * Only writes if `agent`, `mounts`, or `connectors` are provided and no `skaile.yaml`\n * already exists in `dir` (existing config takes precedence). Connector `adapter` fields\n * are mapped to the `driver` field expected by the core runtime.\n *\n * @param dir - Absolute path to the workspace directory.\n * @param opts - Session options containing agent config, mounts, and connectors to serialize.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function writeSkaileYaml(dir: string, opts: CreateAgentSessionOptions): void {\n if (!opts.agent && !opts.mounts?.length && !opts.connectors?.length) return;\n const dest = join(dir, \"skaile.yaml\");\n if (existsSync(dest)) return; // existing config wins\n\n const cfg: Record<string, unknown> = {\n name: \"sdk-session\",\n };\n\n if (opts.agent) {\n cfg[\"agent-config\"] = {\n default: {\n ...(opts.agent.driver && { driver: opts.agent.driver }),\n ...(opts.agent.provider && { provider: opts.agent.provider }),\n ...(opts.agent.model && { model: opts.agent.model }),\n },\n };\n\n if (opts.agent.maxTurns !== undefined || opts.agent.permissionMode !== undefined) {\n cfg.agent = {\n permissions: {\n ...(opts.agent.maxTurns !== undefined && { max_turns: opts.agent.maxTurns }),\n ...(opts.agent.permissionMode !== undefined && {\n permission_mode: opts.agent.permissionMode,\n }),\n },\n };\n }\n }\n\n if (opts.mounts?.length) {\n cfg.mounts = opts.mounts;\n }\n\n if (opts.connectors?.length) {\n // Map SDK field names to core's ConnectorDeclaration field names:\n // SDK uses `adapter` → core expects `driver`\n cfg.connectors = opts.connectors.map((c) => ({\n id: c.id,\n driver: c.adapter,\n ...(c.access && { access: c.access }),\n ...(c.auth && { auth: c.auth }),\n ...(c.options && { options: c.options }),\n }));\n }\n\n writeFileSync(dest, stringify(cfg));\n}\n","/**\n * createAgentSession() — universal factory for agent sessions.\n *\n * Handles workspace preparation, skaile.yaml writing, runtime selection,\n * startup, and cleanup registration. Returns a ready-to-use {@link AgentSession}.\n *\n * For multi-session managers (forge-tui) or bots (forge-mattermost) that need\n * custom session subclasses, use LocalRuntime directly:\n *\n * const runtime = new LocalRuntime();\n * await runtime.start({ projectDir: dir, agentDir });\n * const session = new MySession(id, name, runtime);\n *\n * @docLink packages/sdk/concepts#create-agent-session\n */\n\nimport { AgentClient } from \"@skaile/workspaces/client\";\nimport { WebSocketClientTransport } from \"@skaile/workspaces/transport/ws/client\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { LocalRuntime } from \"./local-runtime.js\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\nimport { prepareWorkspace, writeSkaileYaml } from \"./workspace.js\";\n\nexport async function createAgentSession(\n opts: CreateAgentSessionOptions = {},\n): Promise<AgentSession> {\n const { dir, cleanup } = prepareWorkspace(opts);\n writeSkaileYaml(dir, opts);\n\n const mode = opts.mode ?? { type: \"local\" };\n let runtime: LocalRuntime | AgentClient;\n\n if (mode.type === \"local\") {\n const r = new LocalRuntime();\n await r.start({ projectDir: dir, agentDir: opts.agentDir });\n runtime = r;\n } else {\n const transport = new WebSocketClientTransport({ url: mode.url });\n await transport.connect();\n runtime = new AgentClient(transport);\n }\n\n const session = new AgentSession(runtime);\n session.state = \"idle\";\n\n if (cleanup) {\n session._registerCleanup(cleanup);\n }\n\n if (opts.initialPrompt?.trim()) {\n session.send(opts.initialPrompt.trim());\n }\n\n return session;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../sdk/src/agent-session.ts","../../sdk/src/transport.ts","../../sdk/src/local-runtime.ts","../../sdk/src/workspace.ts","../../sdk/src/factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCO,IAAM,gBAAA,GAAmB;AAWzB,IAAM,eAAN,MAAmB;AAAA,EAexB,YAA+B,OAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,CAAC,CAAA,KAAM,IAAA,CAAK,YAAY,CAAC,CAAA;AAC7C,IAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EACnC;AAAA,EAH+B,OAAA;AAAA,EAd/B,KAAA,GAAsB,UAAA;AAAA,EACb,SAAuB,EAAC;AAAA,EACjC,QAAA;AAAA;AAAA,EAGQ,GAAA,GAAuB,IAAA;AAAA;AAAA,EAGvB,eAAA,GAA0D,IAAA;AAAA;AAAA,EAEjD,YAAA;AAAA;AAAA,EAET,SAAA;AAAA;AAAA;AAAA,EAUR,KAAK,IAAA,EAAoB;AACvB,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,SAAA,IAAa,IAAA,CAAK,UAAU,UAAA,EAAY;AAC3D,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAC/C,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAG5B,MAAA,MAAM,WAAW,IAAA,CAAK,GAAA,KAAQ,QAAQ,IAAA,CAAK,GAAA,CAAI,QAAO,CAAE,QAAA;AACxD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,QAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,MACf;AACA,MAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAAA,IAC9B,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AACb,MAAA,KAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,IAAA,GAAa;AACX,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC9B,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA;AACvC,IAAA,KAAK,IAAA,CAAK,QAAQ,OAAA,EAAQ;AAC1B,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oBAAoB,CAAA;AAC/D,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,SAAA,IAAY;AAAA,EACnB;AAAA;AAAA,EAGA,iBAAiB,EAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AAAA,EACnB;AAAA;AAAA,EAIU,YAAY,KAAA,EAAyB;AAC7C,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,IAAA,CAAK,sBAAA,CAAuB,MAAM,OAAO,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,iBAAiB,KAAK,CAAA;AAC3B,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAC5B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,IAAA,CAAK,wBAAwB,KAAK,CAAA;AAClC,QAAA;AAAA;AAGJ,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEQ,gBAAgB,KAAA,EAAyB;AAC/C,IAAA,MAAM,UAAU,SAAA,IAAa,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,EAAA;AAC7D,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,gBAAgB,OAAA,IAAW,OAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAsC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AACpE,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AACrB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,uBAAuB,OAAA,EAAuB;AACpD,IAAA,MAAM,OAAO,IAAA,CAAK,eAAA;AAClB,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1D,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,OAAA,CAAQ,KAAA,CAAM,GAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAM,CAAA;AACzE,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACtC,MAAA,IAAI,UAAU,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAC7C,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,IAAA,GACJ,MAAA,IAAU,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA,IAAU,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AAChF,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,IAAA,GACJ,UAAA,IAAc,CAAA,GACV,MAAA,CAAO,CAAA,CAAE,QAAQ,CAAA,GACjB,MAAA,IAAU,CAAA,GACR,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,GACb,2BAAA;AACR,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAE1C,IAAA,MAAM,YAAY,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,EAAE,SAAA,GAAY,MAAA;AAClE,IAAA,IAAA,CAAK,GAAA,KAAQ,IAAI,QAAA,EAAS;AAC1B,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,EACf;AAAA,EAEQ,iBAAiB,KAAA,EAAyB;AAChD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,UAAU,SAAA,IAAa,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,oBAAA;AAC7D,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,CAAA;AAC1C,IAAA,IAAI,OAAA,IAAW,KAAA,IAAS,KAAA,CAAM,KAAA,OAAY,GAAA,GAAM,IAAA;AAChD,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,EACf;AAAA,EAEQ,kBAAkB,KAAA,EAAyB;AACjD,IAAA,MAAM,QAAQ,OAAA,IAAW,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,EAAA;AACvD,IAAA,IAAI,KAAA,KAAU,UAAA,IAAc,IAAA,CAAK,eAAA,KAAoB,IAAA,EAAM;AAC3D,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,EACtD;AAAA,EAEQ,oBAAoB,KAAA,EAAyB;AACnD,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,OAAO,MAAA,IAAU,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,GAAI,SAAA;AAC5C,IAAA,MAAM,SAAS,QAAA,IAAY,CAAA,GAAK,MAAA,CAAO,CAAA,CAAE,MAAM,CAAA,GAA+B,SAAA;AAC9E,IAAA,MAAM,cAAc,aAAA,IAAiB,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,WAAW,CAAA,GAAI,EAAA;AACjE,IAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,YAAY,IAAA,EAAM,MAAA,EAAQ,aAAa,CAAA;AAC/D,IAAA,IAAI,WAAW,SAAA,EAAW;AACxB,MAAA,IAAA,CAAK,UAAA,EAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,IAAA,CAAK,QAAA,EAAS;AACd,IAAA,IAAA,CAAK,UAAA,CAAW,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AACrC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,EACf;AAAA,EAEQ,wBAAwB,KAAA,EAAyB;AACvD,IAAA,IAAI,OAAA,IAAW,KAAA,IAAU,KAAA,CAAkC,KAAA,KAAU,SAAA,EAAW;AAC9E,MAAA,IAAA,CAAK,QAAA,EAAS;AACd,MAAA,IAAA,CAAK,WAAW,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,kBAAkB,CAAA;AAC7D,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,MAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAmB;AACzB,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,IAAA,IAAQ,IAAA,CAAK,UAAU,SAAA,EAAW;AACnD,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,EACf;AAAA;AAAA,EAIU,WAAW,IAAA,EAAwB;AAC3C,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AACrB,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA,EAEU,MAAA,GAAe;AACvB,IAAA,IAAA,CAAK,QAAA,IAAW;AAAA,EAClB;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,EACzB;AAAA,EAEQ,UAAA,GAAmB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,gBAAA,EAAkB;AAC5C,MAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IACpB;AAAA,EACF;AACF;;;ACxPO,IAAM,qBAAN,MAAoD;AAAA,EACxC,eAAA,uBAAsB,GAAA,EAAiC;AAAA,EACvD,aAAA,uBAAoB,GAAA,EAAiC;AAAA;AAAA;AAAA;AAAA,EAIrD,kBAAkC,EAAC;AAAA;AAAA;AAAA;AAAA,EAMpD,MAAM,MAAA,GAAwB;AAAA,EAAC;AAAA,EAE/B,MAAM,KAAA,GAAuB;AAAA,EAAC;AAAA,EAE9B,KAAK,KAAA,EAAyB;AAC5B,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,aAAA,EAAe,CAAA,CAAE,KAAK,CAAA;AAAA,EAC7C;AAAA,EAEA,UAAU,OAAA,EAAkD;AAC1D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,IAAA,KAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,OAAO,CAAA;AAChC,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA;AAC9C,MAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,QAAA,KAAK,QAAQ,OAAA,EAAQ,CAAE,KAAK,MAAM,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAAA,EAClD;AAAA,EAEA,UAAU,QAAA,EAAkC;AAC1C,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAAA,EAEA,aAAa,QAAA,EAAkC;AAC7C,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,gBAAgB,IAAA,GAAO,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,OAAA,EAA6B;AAClC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,KAAS,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,OAAO,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,eAAA,EAAiB;AACpC,MAAA,KAAK,QAAQ,OAAA,EAAQ,CAAE,KAAK,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA,EAGA,QAAQ,OAAA,EAAkD;AACxD,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,MAAM,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA;AAAA,EAChD;AACF;;;ACjDO,IAAM,eAAN,MAAyE;AAAA,EAC7D,SAAA,GAAY,IAAI,kBAAA,EAAmB;AAAA,EACnC,QAAA,uBAAe,GAAA,EAA6B;AAAA,EACrD,OAAA,GAAU,KAAA;AAAA,EACV,YAAA;AAAA,EACS,YAAA,GAAe,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAC7D,IAAA,IAAA,CAAK,YAAA,GAAe,OAAA;AAAA,EACtB,CAAC,CAAA;AAAA,EAED,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC5B,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,CAAC,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,IAAA,EAA+C;AACzD,IAAA,IAAI,KAAK,OAAA,EAAS;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,MAAM,gBAAA,CAAiB;AAAA,MACrB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,OAAO,IAAA,CAAK,KAAA;AAAA;AAAA,MAEZ,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,IAAA,CAAK,YAAA,EAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,MAAM,OAAO,OAAA,EAAgC;AAC3C,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,EAAE,MAAM,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,MAAM,MAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,EAC5C;AAAA,EAEA,QAAQ,OAAA,EAAwC;AAC9C,IAAA,IAAA,CAAK,QAAA,CAAS,IAAI,OAAO,CAAA;AAAA,EAC3B;AAAA,EAEA,SAAS,OAAA,EAAwC;AAC/C,IAAA,IAAA,CAAK,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA;AAAA,EACxB;AACF;ACvFO,SAAS,iBAAiB,IAAA,EAG/B;AACA,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,CAAK,YAAA,EAAc,SAAS,MAAA,EAAU;AAAA,EACtD;AAIA,EAAA,MAAM,MAAM,WAAA,CAAY,IAAA,CAAK,MAAA,EAAO,EAAG,aAAa,CAAC,CAAA;AAErD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,GACjB,MAAA,GACA,MAAM,MAAA,CAAO,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAEtD,EAAA,OAAO,EAAE,KAAK,OAAA,EAAQ;AACxB;AAaO,SAAS,eAAA,CAAgB,KAAa,IAAA,EAAuC;AAClF,EAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,CAAC,IAAA,CAAK,QAAQ,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY,MAAA,EAAQ;AACrE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAK,aAAa,CAAA;AACpC,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AAEtB,EAAA,MAAM,GAAA,GAA+B;AAAA,IACnC,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,cAAc,CAAA,GAAI;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,GAAI,KAAK,KAAA,CAAM,MAAA,IAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAM,MAAA,EAAO;AAAA,QACrD,GAAI,KAAK,KAAA,CAAM,QAAA,IAAY,EAAE,QAAA,EAAU,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,QAC3D,GAAI,KAAK,KAAA,CAAM,KAAA,IAAS,EAAE,KAAA,EAAO,IAAA,CAAK,MAAM,KAAA;AAAM;AACpD,KACF;AAEA,IAAA,IAAI,KAAK,KAAA,CAAM,QAAA,KAAa,UAAa,IAAA,CAAK,KAAA,CAAM,mBAAmB,MAAA,EAAW;AAChF,MAAA,GAAA,CAAI,KAAA,GAAQ;AAAA,QACV,WAAA,EAAa;AAAA,UACX,GAAI,KAAK,KAAA,CAAM,QAAA,KAAa,UAAa,EAAE,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,QAAA,EAAS;AAAA,UAC1E,GAAI,IAAA,CAAK,KAAA,CAAM,cAAA,KAAmB,MAAA,IAAa;AAAA,YAC7C,eAAA,EAAiB,KAAK,KAAA,CAAM;AAAA;AAC9B;AACF,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,IAAA,GAAA,CAAI,SAAS,IAAA,CAAK,MAAA;AAAA,EACpB;AAEA,EAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAQ;AAG3B,IAAA,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC3C,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,QAAQ,CAAA,CAAE,OAAA;AAAA,MACV,GAAI,CAAA,CAAE,MAAA,IAAU,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,MACnC,GAAI,CAAA,CAAE,IAAA,IAAQ,EAAE,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,MAC7B,GAAI,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,EAAS,EAAE,OAAA;AAAQ,KACxC,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,aAAA,CAAc,IAAA,EAAM,SAAA,CAAU,GAAG,CAAC,CAAA;AACpC;;;AC7EA,eAAsB,kBAAA,CACpB,IAAA,GAAkC,EAAC,EACZ;AACvB,EAAA,MAAM,EAAE,GAAA,EAAK,OAAA,EAAQ,GAAI,iBAAiB,IAAI,CAAA;AAC9C,EAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAEzB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,MAAM,OAAA,EAAQ;AAC1C,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,MAAM,CAAA,GAAI,IAAI,YAAA,EAAa;AAC3B,IAAA,MAAM,CAAA,CAAE,MAAM,EAAE,UAAA,EAAY,KAAK,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAC1D,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAO;AACL,IAAA,MAAM,YAAY,IAAI,wBAAA,CAAyB,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAChE,IAAA,MAAM,UAAU,OAAA,EAAQ;AACxB,IAAA,OAAA,GAAU,IAAI,YAAY,SAAS,CAAA;AAAA,EACrC;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,YAAA,CAAa,OAAO,CAAA;AACxC,EAAA,OAAA,CAAQ,KAAA,GAAQ,MAAA;AAEhB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,IAAA,CAAK,aAAA,EAAe,IAAA,EAAK,EAAG;AAC9B,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC;AAEA,EAAA,OAAO,OAAA;AACT","file":"index.js","sourcesContent":["/**\n * AgentSession — stateful wrapper over any IAgentRuntime-compatible object.\n *\n * Provides:\n * - AgentEvent → OutputLine conversion with streaming text accumulation\n * - State machine: starting → idle ↔ active ↔ waiting → stopped\n * - Circular output buffer (500 lines, see {@link MAX_OUTPUT_LINES})\n * - send() routes to prompt() or reply() based on current state\n * - stop() disposes the runtime and fires optional cleanup\n * - onChange callback for reactive UIs (React forceUpdate, EventEmitter, etc.)\n *\n * Works with LocalRuntime (in-process) and AgentClient (remote/WebSocket).\n * Extend to add identity fields (id, name, profileName…):\n *\n * class MySession extends AgentSession {\n * constructor(readonly id: string, runtime: LocalRuntime | AgentClient) {\n * super(runtime);\n * }\n * }\n *\n * @docLink packages/sdk/concepts#agent-session\n */\n\nimport { AskSlots } from \"../../types/src/ask-slots.js\";\nimport type { AgentEvent } from \"@skaile/workspaces/types\";\nimport type { OutputLine, SessionState } from \"./types.js\";\n\n/**\n * Maximum number of {@link OutputLine} entries retained in {@link AgentSession.output}.\n *\n * When the buffer exceeds this limit the oldest lines are dropped from the front,\n * keeping memory use bounded for long-running sessions.\n *\n * @docLink packages/sdk/concepts#agent-session\n */\nexport const MAX_OUTPUT_LINES = 500;\n\ninterface MinimalRuntime {\n prompt(message: string): Promise<void>;\n reply(answer: string): Promise<void>;\n abort(): Promise<void>;\n dispose(): Promise<void>;\n onEvent(handler: (e: AgentEvent) => void): void;\n offEvent(handler: (e: AgentEvent) => void): void;\n}\n\nexport class AgentSession {\n state: SessionState = \"starting\";\n readonly output: OutputLine[] = [];\n onChange?: () => void;\n\n /** The parked multi-question ask; null when no question waits for an answer. */\n private ask: AskSlots | null = null;\n\n /** Pointer to the streaming text line being accumulated in-place. */\n private currentTextLine: (OutputLine & { type: \"text\" }) | null = null;\n /** Registered in constructor so we can offEvent on stop. */\n private readonly eventHandler: (e: AgentEvent) => void;\n /** Optional cleanup hook registered by the factory (temp dir removal, etc.). */\n private cleanupFn?: () => void;\n\n constructor(protected readonly runtime: MinimalRuntime) {\n this.eventHandler = (e) => this.handleEvent(e);\n runtime.onEvent(this.eventHandler);\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n\n /** Send a user message. Routes to reply() or prompt() based on state. */\n send(text: string): void {\n if (this.state === \"stopped\" || this.state === \"starting\") return;\n this.appendLine({ type: \"user\", content: text });\n if (this.state === \"waiting\") {\n // A multi-question ask stays parked until every sub-question has an answer.\n // `reply()` carries no question name, so each answer fills the oldest open one.\n const complete = this.ask === null || this.ask.answer().complete;\n if (complete) {\n this.ask = null;\n this.state = \"active\";\n }\n void this.runtime.reply(text);\n } else {\n // A prompt abandons any unanswered question.\n this.ask = null;\n this.state = \"active\";\n void this.runtime.prompt(text);\n }\n }\n\n /** Stop the session and dispose the runtime. */\n stop(): void {\n if (this.state === \"stopped\") return;\n this.ask = null;\n this.state = \"stopped\";\n this.runtime.offEvent(this.eventHandler);\n void this.runtime.dispose();\n this.appendLine({ type: \"system\", message: \"Session stopped.\" });\n this.notify();\n this.cleanupFn?.();\n }\n\n /** Register a cleanup function called when the session stops. Used by the factory. */\n _registerCleanup(fn: () => void): void {\n this.cleanupFn = fn;\n }\n\n // ── Event → OutputLine ────────────────────────────────────────────────────\n\n protected handleEvent(event: AgentEvent): void {\n switch (event.type) {\n case \"text\":\n this.handleTextEvent(event);\n break;\n case \"text_retract\":\n this.handleTextRetractEvent(event.content);\n break;\n case \"tool_call\":\n this.handleToolCallEvent(event);\n break;\n case \"question\":\n this.handleQuestionEvent(event);\n break;\n case \"error\":\n this.handleErrorEvent(event);\n break;\n case \"status\":\n this.handleStatusEvent(event);\n break;\n case \"subagent\":\n this.handleSubagentEvent(event);\n break;\n case \"finished\":\n this.handleFinishedEvent();\n break;\n case \"state_changed\":\n this.handleStateChangedEvent(event);\n break;\n }\n\n this.notify();\n }\n\n private handleTextEvent(event: AgentEvent): void {\n const content = \"content\" in event ? String(event.content) : \"\";\n if (this.currentTextLine) {\n this.currentTextLine.content += content;\n } else {\n const line: OutputLine & { type: \"text\" } = { type: \"text\", content };\n this.output.push(line);\n this.currentTextLine = line;\n this.trimOutput();\n }\n this.markActive();\n }\n\n /**\n * Cut an abandoned attempt's fragment off the open text line, dropping the\n * line when nothing is left. A sealed line or a mismatched tail stays as is.\n */\n private handleTextRetractEvent(content: string): void {\n const line = this.currentTextLine;\n if (!line || !content || !line.content.endsWith(content)) return;\n line.content = line.content.slice(0, line.content.length - content.length);\n if (line.content.length === 0) {\n const index = this.output.indexOf(line);\n if (index !== -1) this.output.splice(index, 1);\n this.currentTextLine = null;\n }\n }\n\n private handleToolCallEvent(event: AgentEvent): void {\n this.sealText();\n const name =\n \"name\" in event ? String(event.name) : \"tool\" in event ? String(event.tool) : \"tool\";\n this.appendLine({ type: \"tool\", name });\n this.markActive();\n }\n\n private handleQuestionEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const text =\n \"question\" in e\n ? String(e.question)\n : \"text\" in e\n ? String(e.text)\n : \"The agent has a question.\";\n this.appendLine({ type: \"question\", text });\n // One event arrives per sub-question; they share an ask until it is answered.\n const requestId = typeof e.requestId === \"string\" ? e.requestId : undefined;\n this.ask ??= new AskSlots();\n this.ask.add(text, requestId);\n this.state = \"waiting\";\n }\n\n private handleErrorEvent(event: AgentEvent): void {\n this.sealText();\n const message = \"message\" in event ? String(event.message) : \"An error occurred.\";\n this.appendLine({ type: \"error\", message });\n if (\"fatal\" in event && event.fatal) this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStatusEvent(event: AgentEvent): void {\n const phase = \"phase\" in event ? String(event.phase) : \"\";\n if (phase === \"thinking\" && this.currentTextLine !== null) return;\n if (phase) this.appendLine({ type: \"status\", phase });\n }\n\n private handleSubagentEvent(event: AgentEvent): void {\n this.sealText();\n const e = event as Record<string, unknown>;\n const name = \"name\" in e ? String(e.name) : \"unknown\";\n const status = \"status\" in e ? (String(e.status) as \"started\" | \"finished\") : \"started\";\n const description = \"description\" in e ? String(e.description) : \"\";\n this.appendLine({ type: \"subagent\", name, status, description });\n if (status === \"started\") {\n this.markActive();\n }\n }\n\n private handleFinishedEvent(): void {\n this.sealText();\n this.appendLine({ type: \"separator\" });\n this.ask = null;\n this.state = \"idle\";\n }\n\n private handleStateChangedEvent(event: AgentEvent): void {\n if (\"state\" in event && (event as Record<string, unknown>).state === \"stopped\") {\n this.sealText();\n this.appendLine({ type: \"system\", message: \"Agent stopped.\" });\n this.ask = null;\n this.state = \"stopped\";\n }\n }\n\n /**\n * The agent is working. Not while an ask is parked: the driver keeps the turn\n * paused until every sub-question has an answer, and follows the question\n * events with tool activity for the same block.\n */\n private markActive(): void {\n if (this.ask !== null && this.state === \"waiting\") return;\n this.state = \"active\";\n }\n\n // ── Internals ─────────────────────────────────────────────────────────────\n\n protected appendLine(line: OutputLine): void {\n this.output.push(line);\n this.trimOutput();\n }\n\n protected notify(): void {\n this.onChange?.();\n }\n\n private sealText(): void {\n this.currentTextLine = null;\n }\n\n private trimOutput(): void {\n while (this.output.length > MAX_OUTPUT_LINES) {\n this.output.shift();\n }\n }\n}\n","/**\n * InProcessTransport — ServerTransport that runs entirely in-process.\n *\n * Used internally by {@link LocalRuntime}. Also exported for consumers building\n * custom integrations that need direct transport access without WebSocket overhead.\n *\n * Runner side (startAgentServer):\n * onCommand(handler) — registers the runner's command handler\n * send(event) — delivers AgentEvents to onEvent subscribers\n *\n * Application side:\n * inject(command) — sends a command to the agent (deferred to avoid re-entrancy)\n * onEvent(handler) — subscribes to AgentEvents; returns unsubscribe fn\n *\n * @docLink packages/sdk/concepts#in-process-transport\n */\n\nimport type { AgentCommand, AgentEvent, ServerTransport } from \"@skaile/workspaces/types\";\n\nexport class InProcessTransport implements ServerTransport {\n private readonly commandHandlers = new Set<(cmd: AgentCommand) => void>();\n private readonly eventHandlers = new Set<(event: AgentEvent) => void>();\n // Commands injected before any handler is registered are buffered here and\n // flushed on the first onCommand() — without this they iterate an empty set\n // and are silently lost (e.g. a prompt sent during start()'s wiring window).\n private readonly pendingCommands: AgentCommand[] = [];\n\n // ── ServerTransport ───────────────────────────────────────────────────────\n\n // In-process: no socket to open or tear down — both are no-ops so serve()\n // can drive any transport's lifecycle without an instanceof check.\n async listen(): Promise<void> {}\n\n async close(): Promise<void> {}\n\n send(event: AgentEvent): void {\n for (const h of this.eventHandlers) h(event);\n }\n\n onCommand(handler: (cmd: AgentCommand) => void): () => void {\n const wasEmpty = this.commandHandlers.size === 0;\n this.commandHandlers.add(handler);\n if (wasEmpty && this.pendingCommands.length > 0) {\n const buffered = this.pendingCommands.splice(0);\n for (const cmd of buffered) {\n void Promise.resolve().then(() => handler(cmd));\n }\n }\n return () => this.commandHandlers.delete(handler);\n }\n\n onConnect(_handler: () => void): () => void {\n return () => {};\n }\n\n onDisconnect(_handler: () => void): () => void {\n return () => {};\n }\n\n /** True once a command handler is wired (i.e. the runner has started). */\n get connected(): boolean {\n return this.commandHandlers.size > 0;\n }\n\n // ── Application API ───────────────────────────────────────────────────────\n\n /**\n * Send a command into the agent runner. Deferred to avoid re-entrancy.\n * Commands injected before a handler is registered are buffered and\n * flushed when the runner wires its handler, so none are dropped.\n */\n inject(command: AgentCommand): void {\n if (this.commandHandlers.size === 0) {\n this.pendingCommands.push(command);\n return;\n }\n for (const h of this.commandHandlers) {\n void Promise.resolve().then(() => h(command));\n }\n }\n\n /** Subscribe to AgentEvents. Returns an unsubscribe function. */\n onEvent(handler: (event: AgentEvent) => void): () => void {\n this.eventHandlers.add(handler);\n return () => this.eventHandlers.delete(handler);\n }\n}\n","/**\n * LocalRuntime — IAgentRuntime implementation that runs the agent in the same process.\n *\n * Mirror image of AgentClient: same interface, no WebSocket.\n * Uses InProcessTransport + startAgentServer() internally.\n *\n * Usage:\n * const runtime = new LocalRuntime();\n * runtime.onEvent(e => console.log(e));\n * await runtime.start({ projectDir: \"/path/to/workspace\" });\n * await runtime.prompt(\"Hello\");\n * await runtime.dispose();\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\n\nimport { startAgentServer } from \"@skaile/workspaces/runner\";\nimport type { AgentEvent, IAgentRuntime } from \"@skaile/workspaces/types\";\nimport { InProcessTransport } from \"./transport.js\";\n\n/**\n * Options passed to {@link LocalRuntime.start}.\n *\n * `projectDir` is the only required field — it points to the workspace directory\n * containing `skaile.yaml`. All other fields override the manifest's agent configuration.\n *\n * @docLink packages/sdk/concepts#local-runtime\n */\nexport interface LocalRuntimeStartOptions {\n projectDir: string;\n agentDir?: string;\n driver?: string;\n model?: string;\n provider?: string;\n onLog?: (line: string) => void;\n}\n\nexport class LocalRuntime implements Omit<IAgentRuntime, \"start\" | \"configure\"> {\n private readonly transport = new InProcessTransport();\n private readonly handlers = new Set<(e: AgentEvent) => void>();\n private started = false;\n private resolveReady!: () => void;\n private readonly readyPromise = new Promise<void>((resolve) => {\n this.resolveReady = resolve;\n });\n\n constructor() {\n this.transport.onEvent((e) => {\n for (const h of this.handlers) h(e);\n });\n }\n\n /**\n * Start the agent server. Resolves when the runner is wired and ready\n * to accept commands. Must be called before prompt() / reply().\n */\n async start(opts: LocalRuntimeStartOptions): Promise<void> {\n if (this.started) return;\n this.started = true;\n await startAgentServer({\n projectDir: opts.projectDir,\n agentDir: opts.agentDir,\n driver: opts.driver,\n model: opts.model,\n provider: opts.provider,\n transport: this.transport,\n onLog: opts.onLog,\n // The embedder owns stdout; log records go to the project's log db and to `onLog`.\n stdout: false,\n });\n this.resolveReady();\n }\n\n /**\n * Resolves once the runner is wired and accepting commands. Await this\n * before issuing commands that expect a reply (e.g. debug queries) so a\n * pre-start command isn't buffered indefinitely. Never rejects.\n */\n whenReady(): Promise<void> {\n return this.readyPromise;\n }\n\n async prompt(message: string): Promise<void> {\n this.transport.inject({ type: \"prompt\", prompt: message });\n }\n\n async reply(answer: string): Promise<void> {\n this.transport.inject({ type: \"reply\", answer });\n }\n\n async abort(): Promise<void> {\n this.transport.inject({ type: \"cancel\" });\n }\n\n async dispose(): Promise<void> {\n this.transport.inject({ type: \"shutdown\" });\n }\n\n onEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.add(handler);\n }\n\n offEvent(handler: (e: AgentEvent) => void): void {\n this.handlers.delete(handler);\n }\n\n get isRunning(): boolean {\n return this.transport.connected;\n }\n}\n","/**\n * Workspace utilities — prepare session directories and write skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\n\n/**\n * Prepare a workspace directory for a session. Returns the path and cleanup fn.\n *\n * If `opts.workspaceDir` is set, that directory is created (if needed) and returned\n * with no cleanup. Otherwise a unique temporary directory (`skaile-sdk-*` under the\n * OS temp dir) is created via `mkdtempSync`; the cleanup function removes it on\n * session stop unless `keepWorkspace` is true.\n *\n * @param opts - Session creation options providing `workspaceDir` and `keepWorkspace`.\n * @returns An object with the resolved `dir` path and an optional `cleanup` function.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function prepareWorkspace(opts: CreateAgentSessionOptions): {\n dir: string;\n cleanup: (() => void) | undefined;\n} {\n if (opts.workspaceDir) {\n mkdirSync(opts.workspaceDir, { recursive: true });\n return { dir: opts.workspaceDir, cleanup: undefined };\n }\n\n // mkdtemp yields an unpredictable, collision-free name (vs. a guessable\n // timestamp path) — avoids cross-session clobbering and symlink races in /tmp.\n const dir = mkdtempSync(join(tmpdir(), \"skaile-sdk-\"));\n\n const cleanup = opts.keepWorkspace\n ? undefined\n : () => rmSync(dir, { recursive: true, force: true });\n\n return { dir, cleanup };\n}\n\n/**\n * Write skaile.yaml from inline {@link CreateAgentSessionOptions}.\n *\n * Only writes if `agent`, `mounts`, or `connectors` are provided and no `skaile.yaml`\n * already exists in `dir` (existing config takes precedence). Connector `adapter` fields\n * are mapped to the `driver` field expected by the core runtime.\n *\n * @param dir - Absolute path to the workspace directory.\n * @param opts - Session options containing agent config, mounts, and connectors to serialize.\n * @docLink packages/sdk/concepts#workspace-helpers\n */\nexport function writeSkaileYaml(dir: string, opts: CreateAgentSessionOptions): void {\n if (!opts.agent && !opts.mounts?.length && !opts.connectors?.length) return;\n const dest = join(dir, \"skaile.yaml\");\n if (existsSync(dest)) return; // existing config wins\n\n const cfg: Record<string, unknown> = {\n name: \"sdk-session\",\n };\n\n if (opts.agent) {\n cfg[\"agent-config\"] = {\n default: {\n ...(opts.agent.driver && { driver: opts.agent.driver }),\n ...(opts.agent.provider && { provider: opts.agent.provider }),\n ...(opts.agent.model && { model: opts.agent.model }),\n },\n };\n\n if (opts.agent.maxTurns !== undefined || opts.agent.permissionMode !== undefined) {\n cfg.agent = {\n permissions: {\n ...(opts.agent.maxTurns !== undefined && { max_turns: opts.agent.maxTurns }),\n ...(opts.agent.permissionMode !== undefined && {\n permission_mode: opts.agent.permissionMode,\n }),\n },\n };\n }\n }\n\n if (opts.mounts?.length) {\n cfg.mounts = opts.mounts;\n }\n\n if (opts.connectors?.length) {\n // Map SDK field names to core's ConnectorDeclaration field names:\n // SDK uses `adapter` → core expects `driver`\n cfg.connectors = opts.connectors.map((c) => ({\n id: c.id,\n driver: c.adapter,\n ...(c.access && { access: c.access }),\n ...(c.auth && { auth: c.auth }),\n ...(c.options && { options: c.options }),\n }));\n }\n\n writeFileSync(dest, stringify(cfg));\n}\n","/**\n * createAgentSession() — universal factory for agent sessions.\n *\n * Handles workspace preparation, skaile.yaml writing, runtime selection,\n * startup, and cleanup registration. Returns a ready-to-use {@link AgentSession}.\n *\n * For multi-session managers (forge-tui) or bots (forge-mattermost) that need\n * custom session subclasses, use LocalRuntime directly:\n *\n * const runtime = new LocalRuntime();\n * await runtime.start({ projectDir: dir, agentDir });\n * const session = new MySession(id, name, runtime);\n *\n * @docLink packages/sdk/concepts#create-agent-session\n */\n\nimport { AgentClient } from \"@skaile/workspaces/client\";\nimport { WebSocketClientTransport } from \"@skaile/workspaces/transport/ws/client\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { LocalRuntime } from \"./local-runtime.js\";\nimport type { CreateAgentSessionOptions } from \"./types.js\";\nimport { prepareWorkspace, writeSkaileYaml } from \"./workspace.js\";\n\nexport async function createAgentSession(\n opts: CreateAgentSessionOptions = {},\n): Promise<AgentSession> {\n const { dir, cleanup } = prepareWorkspace(opts);\n writeSkaileYaml(dir, opts);\n\n const mode = opts.mode ?? { type: \"local\" };\n let runtime: LocalRuntime | AgentClient;\n\n if (mode.type === \"local\") {\n const r = new LocalRuntime();\n await r.start({ projectDir: dir, agentDir: opts.agentDir });\n runtime = r;\n } else {\n const transport = new WebSocketClientTransport({ url: mode.url });\n await transport.connect();\n runtime = new AgentClient(transport);\n }\n\n const session = new AgentSession(runtime);\n session.state = \"idle\";\n\n if (cleanup) {\n session._registerCleanup(cleanup);\n }\n\n if (opts.initialPrompt?.trim()) {\n session.send(opts.initialPrompt.trim());\n }\n\n return session;\n}\n"]}
|
package/dist/sdk/resolver.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { buildRequiresPreamble, parseCompactionDirectives, parseSkillFrontmatter, parseSkillRequirements, validateConnectorRequirements, validateFlowVersions, validateRequirements } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { buildRequiresPreamble, parseCompactionDirectives, parseSkillFrontmatter, parseSkillRequirements, validateConnectorRequirements, validateFlowVersions, validateRequirements } from '../chunk-D5REDKVU.js';
|
|
2
|
+
import '../chunk-PIC23DDE.js';
|
|
3
3
|
import '../chunk-4GY63JU6.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-5RDZ5JHH.js';
|
|
5
5
|
import '../chunk-D54T2F54.js';
|
|
6
6
|
import '../chunk-5BEFNLOR.js';
|
|
7
7
|
import '../chunk-A2ULN3KX.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-ZVZTCDUN.js';
|
|
9
9
|
import '../chunk-L5VSIPQD.js';
|
|
10
10
|
import '../chunk-IG5LZ3WU.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-H7R7R5BN.js';
|
|
12
12
|
import '../chunk-RVRB27AN.js';
|
|
13
|
-
import '../chunk-
|
|
14
|
-
import '../chunk-
|
|
13
|
+
import '../chunk-YW2BNDSE.js';
|
|
14
|
+
import '../chunk-FT4ZHLYR.js';
|
|
15
15
|
import '../chunk-ICSCSM5D.js';
|
|
16
16
|
import '../chunk-DKXNKFKP.js';
|
|
17
17
|
import '../chunk-MJHSLODD.js';
|
package/dist/sdk/runner.js
CHANGED
|
@@ -1,67 +1,68 @@
|
|
|
1
|
-
export { AgentRunError, CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CONNECTOR_MUTATE_NOT_READY, CapabilityRegistry, CompileManifestEntrySchema, CompositionError, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, DEFAULT_MAX_FINISHED_TREES, DEFAULT_RUN_LIMITS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_READ_MAX_CHUNK_BYTES, MOUNT_STAT_BUDGET_MS, MOUNT_STAT_MAX_ENTRIES, MOUNT_TREE_OP_DEADLINE_FACTOR, MOUNT_WRITE_MAX_CHUNK_BYTES, MarkdownStreamer, PreInitRingSink, ResourceOperationError, SESSION_ROOT_WRITABLE_DIRS, SESSION_ROOT_WRITABLE_FILES, UnknownCompositionKindError, WRITE_RANGE_PARTIAL_TTL_MS, WS_AUTH_TOKEN_ENV, WS_AUTH_TOKEN_FILE_ENV, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildCompositionRunSnapshot, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildRunnerAgentSections, buildStoreSnapshotReplay, builtinCapabilities, canonicalJson, capabilityLogInstance, capabilitySignatureInputs, clearPreInitRingSink, clearSession, compileComposition, compositionRunSnapshotPath, computeCapabilitySignature, computeDirectoryTotals, computeRevisionHash, connectorRefreshKind, createAgentSession, createCompositionContentSource, createFinalTextFallback, createFlowConnectorReadiness, createInMemoryRunStore, createManagedCodexSubpromptDriver, createRunController, createSessionStimulusBus, defineCapability, deleteSession, describeComposition, dispatchResourceRequest, dispatchRunnerCapabilityInvocation, driverActiveAfterTurnEnd, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, flowStartNeedsDriverRestart, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, handleSessionRootResourceRequest, hasNonTerminalFlow, hashAgentFiles, hashContent, hostOpResumeStimulus, installPreInitRingSink, instanceForSession, isCompositionError, isEmptyKnowledgeIndex, isSessionRootPathAllowed, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadCompositionRunSnapshot, loadKnowledgeDir, loadManagedCodexHostConfig, loadSession, loadSessionById, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickChatFlowTarget, pickFlowToolTarget, pickRepointedManager, planFlowMutate, prepareCodexTools, reconcilePendingDecisions, reconnectedRunNeedsAgentTurn, recreateKeepingLiveFlows, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, rejectPendingCapabilityCallsOnDisconnect, resetRunnerLogStore, resolveAgentInstance, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveMixin, resolveSessionId, restoredRunHasWorkToResume, runAgentChat, saveCompositionRunSnapshot, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, stripFrontmatter, takeRunnerWsAuthToken, toActiveFlowTarget, touchSession, unresolvedCredentialNotices, validateInputResponse, verifyConventionItems, writeClaudeCodeCredentialsFile, writeRangeChunk, writeRangePartialPath } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { AgentRunError, CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CONNECTOR_MUTATE_NOT_READY, CapabilityRegistry, CompileManifestEntrySchema, CompositionError, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, DEFAULT_MAX_FINISHED_TREES, DEFAULT_RUN_LIMITS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_READ_MAX_CHUNK_BYTES, MOUNT_STAT_BUDGET_MS, MOUNT_STAT_MAX_ENTRIES, MOUNT_TREE_OP_DEADLINE_FACTOR, MOUNT_WRITE_MAX_CHUNK_BYTES, MarkdownStreamer, PreInitRingSink, ResourceOperationError, SESSION_ROOT_WRITABLE_DIRS, SESSION_ROOT_WRITABLE_FILES, UnknownCompositionKindError, WRITE_RANGE_PARTIAL_TTL_MS, WS_AUTH_TOKEN_ENV, WS_AUTH_TOKEN_FILE_ENV, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildCompositionRunSnapshot, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildRunnerAgentSections, buildStoreSnapshotReplay, builtinCapabilities, canonicalJson, capabilityLogInstance, capabilitySignatureInputs, clearPreInitRingSink, clearSession, compileComposition, compositionRunSnapshotPath, computeCapabilitySignature, computeDirectoryTotals, computeRevisionHash, connectorRefreshKind, createAgentSession, createCompositionContentSource, createFinalTextFallback, createFlowConnectorReadiness, createInMemoryRunStore, createManagedCodexSubpromptDriver, createRunController, createSessionStimulusBus, defineCapability, deleteSession, describeComposition, dispatchResourceRequest, dispatchRunnerCapabilityInvocation, driverActiveAfterTurnEnd, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, flowStartNeedsDriverRestart, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, handleSessionRootResourceRequest, hasNonTerminalFlow, hashAgentFiles, hashContent, hostOpResumeStimulus, installPreInitRingSink, instanceForSession, instanceSessionOverrides, isCompositionError, isEmptyKnowledgeIndex, isSessionRootPathAllowed, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadCompositionRunSnapshot, loadKnowledgeDir, loadManagedCodexHostConfig, loadSession, loadSessionById, manifestModelForDriver, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickChatFlowTarget, pickFlowToolTarget, pickRepointedManager, planFlowMutate, prepareCodexTools, reconcilePendingDecisions, reconnectedRunNeedsAgentTurn, recreateKeepingLiveFlows, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, rejectPendingCapabilityCallsOnDisconnect, resetRunnerLogStore, resolveAgentInstance, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveInstanceAgentDir, resolveMixin, resolveSessionId, restoredRunHasWorkToResume, runAgentChat, saveCompositionRunSnapshot, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, stripFrontmatter, takeRunnerWsAuthToken, toActiveFlowTarget, touchSession, unresolvedCredentialNotices, validateInputResponse, verifyConventionItems, writeClaudeCodeCredentialsFile, writeRangeChunk, writeRangePartialPath } from '../chunk-CQFVKN6S.js';
|
|
2
|
+
import '../chunk-DQOAPR4M.js';
|
|
3
|
+
import '../chunk-A7AZ3RL5.js';
|
|
4
|
+
import '../chunk-TADJCATD.js';
|
|
5
|
+
import '../chunk-5DCOG5B5.js';
|
|
6
6
|
import '../chunk-R6O6YWU7.js';
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-46IRZJV4.js';
|
|
8
|
+
import '../chunk-PGZDSDOB.js';
|
|
9
9
|
import '../chunk-4ZTPYIBE.js';
|
|
10
10
|
import '../chunk-X5YPJV4N.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-72KZJE3G.js';
|
|
12
12
|
import '../chunk-O7SG5PC2.js';
|
|
13
13
|
import '../chunk-7QBNJTTQ.js';
|
|
14
14
|
import '../chunk-O2SYFJWP.js';
|
|
15
|
-
import '../chunk-
|
|
15
|
+
import '../chunk-L6UMSKDF.js';
|
|
16
16
|
import '../chunk-32NA4TVC.js';
|
|
17
17
|
export { assembleSystemPrompt, buildCapabilitiesPromptSection, buildLinkedPeersPromptSection } from '../chunk-W3UDISS2.js';
|
|
18
18
|
import '../chunk-PHRNUTSG.js';
|
|
19
|
-
import '../chunk-
|
|
20
|
-
import '../chunk-
|
|
19
|
+
import '../chunk-TXGVG7VH.js';
|
|
20
|
+
import '../chunk-E634MBP6.js';
|
|
21
21
|
import '../chunk-4R6DROGN.js';
|
|
22
|
-
import '../chunk-
|
|
23
|
-
import '../chunk-
|
|
22
|
+
import '../chunk-D5REDKVU.js';
|
|
23
|
+
import '../chunk-AP24HESN.js';
|
|
24
24
|
import '../chunk-ISHJITXJ.js';
|
|
25
|
-
import '../chunk-
|
|
25
|
+
import '../chunk-OJHPG6HK.js';
|
|
26
26
|
import '../chunk-ZIW34FGO.js';
|
|
27
|
-
import '../chunk-
|
|
28
|
-
import '../chunk-
|
|
29
|
-
import '../chunk-
|
|
27
|
+
import '../chunk-FSSRBWYL.js';
|
|
28
|
+
import '../chunk-TKI7YDWE.js';
|
|
29
|
+
import '../chunk-NSNM2ZXF.js';
|
|
30
|
+
import '../chunk-6RTEUWXX.js';
|
|
30
31
|
import '../chunk-LOO5CB5M.js';
|
|
31
32
|
import '../chunk-PW3TYWOI.js';
|
|
32
|
-
import '../chunk-
|
|
33
|
+
import '../chunk-RTNWU2UD.js';
|
|
33
34
|
import '../chunk-B4X2N7JQ.js';
|
|
34
35
|
import '../chunk-YROR332M.js';
|
|
35
|
-
import '../chunk-
|
|
36
|
-
import '../chunk-
|
|
36
|
+
import '../chunk-HG52NGAV.js';
|
|
37
|
+
import '../chunk-6Q7NKTDG.js';
|
|
37
38
|
import '../chunk-6E6PKKAD.js';
|
|
38
39
|
import '../chunk-IFGTRL2I.js';
|
|
39
|
-
import '../chunk-
|
|
40
|
+
import '../chunk-SPV2CXJ3.js';
|
|
40
41
|
import '../chunk-LNFKL23K.js';
|
|
41
42
|
import '../chunk-X3RMRJNR.js';
|
|
42
43
|
import '../chunk-M3WPBTGJ.js';
|
|
43
44
|
import '../chunk-7RGTAEG6.js';
|
|
44
45
|
import '../chunk-NUELZWCF.js';
|
|
45
46
|
import '../chunk-D5WTOVLG.js';
|
|
46
|
-
import '../chunk-
|
|
47
|
-
import '../chunk-
|
|
48
|
-
import '../chunk-
|
|
47
|
+
import '../chunk-D3PU3C6F.js';
|
|
48
|
+
import '../chunk-ES6ARJPQ.js';
|
|
49
|
+
import '../chunk-SXWGLW23.js';
|
|
49
50
|
import '../chunk-BFMYYNDT.js';
|
|
50
51
|
import '../chunk-3TXEJN4W.js';
|
|
51
|
-
import '../chunk-
|
|
52
|
-
export { globalSettingsPath, loadSettings, mapLegacyFields, projectSettingsPath, resolveSettings, saveSettings } from '../chunk-
|
|
52
|
+
import '../chunk-YK3XLEQJ.js';
|
|
53
|
+
export { globalSettingsPath, loadSettings, mapLegacyFields, projectSettingsPath, resolveSettings, saveSettings } from '../chunk-PIC23DDE.js';
|
|
53
54
|
import '../chunk-4GY63JU6.js';
|
|
54
|
-
import '../chunk-
|
|
55
|
+
import '../chunk-5RDZ5JHH.js';
|
|
55
56
|
import '../chunk-D54T2F54.js';
|
|
56
57
|
export { DRIVER_DEFAULTS, resolveDriverPaths } from '../chunk-5BEFNLOR.js';
|
|
57
58
|
import '../chunk-A2ULN3KX.js';
|
|
58
|
-
import '../chunk-
|
|
59
|
+
import '../chunk-ZVZTCDUN.js';
|
|
59
60
|
import '../chunk-L5VSIPQD.js';
|
|
60
61
|
export { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS } from '../chunk-IG5LZ3WU.js';
|
|
61
|
-
import '../chunk-
|
|
62
|
+
import '../chunk-H7R7R5BN.js';
|
|
62
63
|
import '../chunk-RVRB27AN.js';
|
|
63
|
-
import '../chunk-
|
|
64
|
-
import '../chunk-
|
|
64
|
+
import '../chunk-YW2BNDSE.js';
|
|
65
|
+
import '../chunk-FT4ZHLYR.js';
|
|
65
66
|
import '../chunk-ICSCSM5D.js';
|
|
66
67
|
import '../chunk-DKXNKFKP.js';
|
|
67
68
|
import '../chunk-MJHSLODD.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { WebSocketServerTransport, needsWildcardProbe } from '../../../chunk-
|
|
1
|
+
export { WebSocketServerTransport, needsWildcardProbe } from '../../../chunk-L6UMSKDF.js';
|
|
2
2
|
import '../../../chunk-32NA4TVC.js';
|
|
3
3
|
import '../../../chunk-NSBPE2FW.js';
|
|
4
4
|
//# sourceMappingURL=server.js.map
|
package/dist/sdk/transport/ws.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '../../chunk-7QBNJTTQ.js';
|
|
2
2
|
export { WebSocketClientTransport } from '../../chunk-O2SYFJWP.js';
|
|
3
|
-
export { WebSocketServerTransport } from '../../chunk-
|
|
3
|
+
export { WebSocketServerTransport } from '../../chunk-L6UMSKDF.js';
|
|
4
4
|
export { BEARER_SUBPROTOCOL_PREFIX, decodeBearerFromHeader, encodeBearerSubprotocol, tokensEqual } from '../../chunk-32NA4TVC.js';
|
|
5
5
|
import '../../chunk-NSBPE2FW.js';
|
|
6
6
|
//# sourceMappingURL=ws.js.map
|
package/dist/sdk/transport.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../chunk-O7SG5PC2.js';
|
|
2
2
|
import '../chunk-7QBNJTTQ.js';
|
|
3
3
|
export { WebSocketClientTransport } from '../chunk-O2SYFJWP.js';
|
|
4
|
-
export { WebSocketServerTransport } from '../chunk-
|
|
4
|
+
export { WebSocketServerTransport } from '../chunk-L6UMSKDF.js';
|
|
5
5
|
import '../chunk-32NA4TVC.js';
|
|
6
6
|
import '../chunk-NSBPE2FW.js';
|
|
7
7
|
//# sourceMappingURL=transport.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { loadDriverSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-
|
|
1
|
+
import { loadDriverSdk, resolveSettings, sdkLookupPlaces, installCommandFor } from './chunk-PIC23DDE.js';
|
|
2
2
|
import './chunk-4GY63JU6.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-5RDZ5JHH.js';
|
|
4
4
|
import './chunk-D54T2F54.js';
|
|
5
5
|
import { DEFAULT_DRIVER_ID } from './chunk-5BEFNLOR.js';
|
|
6
6
|
import './chunk-A2ULN3KX.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import { resolveSkWorkspaceConfig } from './chunk-ZVZTCDUN.js';
|
|
8
8
|
import './chunk-L5VSIPQD.js';
|
|
9
9
|
import './chunk-IG5LZ3WU.js';
|
|
10
|
-
import './chunk-
|
|
10
|
+
import './chunk-H7R7R5BN.js';
|
|
11
11
|
import './chunk-RVRB27AN.js';
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
12
|
+
import './chunk-YW2BNDSE.js';
|
|
13
|
+
import './chunk-FT4ZHLYR.js';
|
|
14
14
|
import './chunk-ICSCSM5D.js';
|
|
15
15
|
import './chunk-DKXNKFKP.js';
|
|
16
16
|
import './chunk-MJHSLODD.js';
|
|
@@ -48,7 +48,13 @@ async function checkDriverSdk(projectDir, driverOverride, probe = DRIVER_SDKS) {
|
|
|
48
48
|
return `The ${driver} driver needs ${sdk.pkg}, which is not installed. Looked in ${sdkLookupPlaces(projectDir)}. Run in the project: ${installCommandFor(sdk.pkg, projectDir)} (or pick another driver with --driver).`;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
+
async function checkModelEndpointPeer(projectDir, flag, probe) {
|
|
52
|
+
const enabled = flag?.enabled ?? resolveSkWorkspaceConfig(projectDir).model_endpoint?.enabled === true;
|
|
53
|
+
if (!enabled) return null;
|
|
54
|
+
const check = probe ?? (await import('./model-endpoint/index.js')).checkPiAiInstalled;
|
|
55
|
+
return check(projectDir);
|
|
56
|
+
}
|
|
51
57
|
|
|
52
|
-
export { checkDriverSdk };
|
|
53
|
-
//# sourceMappingURL=serve-preflight-
|
|
54
|
-
//# sourceMappingURL=serve-preflight-
|
|
58
|
+
export { checkDriverSdk, checkModelEndpointPeer };
|
|
59
|
+
//# sourceMappingURL=serve-preflight-ON2LS3SD.js.map
|
|
60
|
+
//# sourceMappingURL=serve-preflight-ON2LS3SD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/commands/serve-preflight.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAeA,IAAM,WAAA,GACJ;AAAA,EACE,YAAA,EAAc;AAAA,IACZ,GAAA,EAAK,gCAAA;AAAA,IACL,IAAA,EAAM,CAAC,UAAA,KACL,aAAA;AAAA,MACE,gCAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAM,OAAO,gCAAgC;AAAA;AAC/C,GACJ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,mBAAA;AAAA,IACL,IAAA,EAAM,CAAC,UAAA,KACL,aAAA,CAAc,qBAAqB,UAAA,EAAY,MAAM,OAAO,mBAAmB,CAAC;AAAA;AAEtF,CAAA;AAYF,eAAsB,cAAA,CACpB,UAAA,EACA,cAAA,EACA,KAAA,GAA4B,WAAA,EACJ;AACxB,EAAA,MAAM,WAAW,MAAM,eAAA;AAAA,IACrB,UAAA;AAAA,IACA,cAAA,GAAiB,EAAE,MAAA,EAAQ,cAAA,KAAmB;AAAC,GACjD;AACA,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,iBAAA;AAClC,EAAA,MAAM,GAAA,GAAM,MAAM,MAAM,CAAA;AACxB,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,CAAI,KAAK,UAAU,CAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,CAAA,IAAA,EAAO,MAAM,CAAA,cAAA,EAAiB,GAAA,CAAI,GAAG,CAAA,oCAAA,EAAuC,eAAA,CAAgB,UAAU,CAAC,CAAA,sBAAA,EAAyB,iBAAA,CAAkB,GAAA,CAAI,GAAA,EAAK,UAAU,CAAC,CAAA,wCAAA,CAAA;AAAA,EAC/K;AACF;AAYA,eAAsB,sBAAA,CACpB,UAAA,EACA,IAAA,EACA,KAAA,EACwB;AACxB,EAAA,MAAM,UACJ,IAAA,EAAM,OAAA,IAAW,yBAAyB,UAAU,CAAA,CAAE,gBAAgB,OAAA,KAAY,IAAA;AACpF,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,KAAA,IAAA,CAAU,MAAM,OAAO,2BAAmC,CAAA,EAAG,kBAAA;AAC3E,EAAA,OAAO,MAAM,UAAU,CAAA;AACzB","file":"serve-preflight-ON2LS3SD.js","sourcesContent":["/**\n * Start-up checks for `skaile serve`: fail with one actionable line before the\n * runner reports ready, instead of on the first prompt.\n */\n\nimport {\n DEFAULT_DRIVER_ID,\n installCommandFor,\n loadDriverSdk,\n resolveSettings,\n resolveSkWorkspaceConfig,\n sdkLookupPlaces,\n} from \"@skaile/workspaces/core\";\n\n/** Optional SDK a driver needs at run time, and how to probe that it loads from a project. */\nconst DRIVER_SDKS: Record<string, { pkg: string; load: (projectDir: string) => Promise<unknown> }> =\n {\n \"claude-sdk\": {\n pkg: \"@anthropic-ai/claude-agent-sdk\",\n load: (projectDir) =>\n loadDriverSdk(\n \"@anthropic-ai/claude-agent-sdk\",\n projectDir,\n () => import(\"@anthropic-ai/claude-agent-sdk\"),\n ),\n },\n codex: {\n pkg: \"@openai/codex-sdk\",\n load: (projectDir) =>\n loadDriverSdk(\"@openai/codex-sdk\", projectDir, () => import(\"@openai/codex-sdk\")),\n },\n };\n\n/**\n * Check that the driver `skaile serve` would start can load its SDK. The probe\n * is the same lookup the driver runs in `start()` (the project's `node_modules`,\n * then next to skaile), so a compiled binary that bundles the SDK passes.\n *\n * @param projectDir - Project the server serves.\n * @param driverOverride - `--driver`, when given.\n * @param probe - Replaceable loader table, for tests.\n * @returns The one-line problem, or `null` when the driver can start.\n */\nexport async function checkDriverSdk(\n projectDir: string,\n driverOverride?: string,\n probe: typeof DRIVER_SDKS = DRIVER_SDKS,\n): Promise<string | null> {\n const settings = await resolveSettings(\n projectDir,\n driverOverride ? { driver: driverOverride } : {},\n );\n const driver = settings.driver ?? DEFAULT_DRIVER_ID;\n const sdk = probe[driver];\n if (!sdk) return null;\n try {\n await sdk.load(projectDir);\n return null;\n } catch {\n return `The ${driver} driver needs ${sdk.pkg}, which is not installed. Looked in ${sdkLookupPlaces(projectDir)}. Run in the project: ${installCommandFor(sdk.pkg, projectDir)} (or pick another driver with --driver).`;\n }\n}\n\n/**\n * Check that the model endpoint can load pi-ai, when `skaile serve` will start the\n * endpoint (`--model-endpoint`, or `model_endpoint.enabled` in skaile.yaml). Without\n * this the endpoint printed its ready line and answered every request with a 500.\n *\n * @param projectDir - Project the server serves.\n * @param flag - Parsed `--model-endpoint`, when given.\n * @param probe - Replaceable pi-ai check, for tests.\n * @returns The one-line problem (both places looked in, the install command), or `null`.\n */\nexport async function checkModelEndpointPeer(\n projectDir: string,\n flag: { enabled?: boolean } | undefined,\n probe?: (projectDir: string) => Promise<string | null>,\n): Promise<string | null> {\n const enabled =\n flag?.enabled ?? resolveSkWorkspaceConfig(projectDir).model_endpoint?.enabled === true;\n if (!enabled) return null;\n const check = probe ?? (await import(\"@skaile/workspaces/model-endpoint\")).checkPiAiInstalled;\n return check(projectDir);\n}\n"]}
|
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import { addProviderEntry, ProviderRegistryWriteError, loadRegistryView, credentialEnvVarName } from './chunk-
|
|
1
|
+
import { addProviderEntry, ProviderRegistryWriteError, loadRegistryView, credentialEnvVarName } from './chunk-SAGBVBY2.js';
|
|
2
2
|
import { createSpinner } from './chunk-NESV47MF.js';
|
|
3
|
-
import './chunk-
|
|
4
|
-
import { validateApiKey } from './chunk-
|
|
5
|
-
import './chunk-
|
|
3
|
+
import './chunk-VJ2DZLDM.js';
|
|
4
|
+
import { validateApiKey } from './chunk-TKI7YDWE.js';
|
|
5
|
+
import './chunk-NSNM2ZXF.js';
|
|
6
|
+
import './chunk-6RTEUWXX.js';
|
|
6
7
|
import './chunk-LOO5CB5M.js';
|
|
7
8
|
import './chunk-PW3TYWOI.js';
|
|
8
|
-
import { getModels } from './chunk-
|
|
9
|
+
import { getModels } from './chunk-RTNWU2UD.js';
|
|
9
10
|
import './chunk-B4X2N7JQ.js';
|
|
10
11
|
import './chunk-YROR332M.js';
|
|
11
|
-
import './chunk-
|
|
12
|
-
import { listProviderPresets } from './chunk-
|
|
12
|
+
import './chunk-HG52NGAV.js';
|
|
13
|
+
import { listProviderPresets } from './chunk-6Q7NKTDG.js';
|
|
13
14
|
import './chunk-6E6PKKAD.js';
|
|
14
15
|
import './chunk-D5WTOVLG.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
17
|
-
import './chunk-
|
|
18
|
-
import './chunk-
|
|
16
|
+
import './chunk-DADAZLFW.js';
|
|
17
|
+
import './chunk-D3PU3C6F.js';
|
|
18
|
+
import './chunk-ES6ARJPQ.js';
|
|
19
|
+
import './chunk-SXWGLW23.js';
|
|
19
20
|
import './chunk-BFMYYNDT.js';
|
|
20
21
|
import './chunk-3TXEJN4W.js';
|
|
21
|
-
import './chunk-
|
|
22
|
+
import './chunk-FSLVMZXR.js';
|
|
22
23
|
import './chunk-NOA6EJXE.js';
|
|
23
24
|
import './chunk-KTBKW2FI.js';
|
|
24
25
|
import './chunk-UQ6LFBPZ.js';
|
|
25
|
-
import './chunk-
|
|
26
|
-
import './chunk-
|
|
27
|
-
import { projectSettingsPath, loadSettings, saveSettings, resolveSettings, WorkspaceYamlEditor, maskApiKey } from './chunk-
|
|
26
|
+
import './chunk-6GSE63K2.js';
|
|
27
|
+
import './chunk-YK3XLEQJ.js';
|
|
28
|
+
import { projectSettingsPath, loadSettings, saveSettings, resolveSettings, WorkspaceYamlEditor, maskApiKey } from './chunk-PIC23DDE.js';
|
|
28
29
|
import './chunk-4GY63JU6.js';
|
|
29
|
-
import './chunk-
|
|
30
|
+
import './chunk-5RDZ5JHH.js';
|
|
30
31
|
import './chunk-D54T2F54.js';
|
|
31
32
|
import { DEFAULT_DRIVER_ID } from './chunk-5BEFNLOR.js';
|
|
32
33
|
import './chunk-A2ULN3KX.js';
|
|
33
|
-
import './chunk-
|
|
34
|
+
import './chunk-ZVZTCDUN.js';
|
|
34
35
|
import './chunk-L5VSIPQD.js';
|
|
35
36
|
import './chunk-IG5LZ3WU.js';
|
|
36
|
-
import './chunk-
|
|
37
|
+
import './chunk-H7R7R5BN.js';
|
|
37
38
|
import './chunk-RVRB27AN.js';
|
|
38
|
-
import './chunk-
|
|
39
|
-
import './chunk-
|
|
39
|
+
import './chunk-YW2BNDSE.js';
|
|
40
|
+
import './chunk-FT4ZHLYR.js';
|
|
40
41
|
import './chunk-ICSCSM5D.js';
|
|
41
42
|
import './chunk-DKXNKFKP.js';
|
|
42
43
|
import './chunk-MJHSLODD.js';
|
|
@@ -437,5 +438,5 @@ async function cmdSetup(_args, opts) {
|
|
|
437
438
|
}
|
|
438
439
|
|
|
439
440
|
export { applySetupPlan, cmdSetup };
|
|
440
|
-
//# sourceMappingURL=setup-
|
|
441
|
-
//# sourceMappingURL=setup-
|
|
441
|
+
//# sourceMappingURL=setup-MFPEQS2I.js.map
|
|
442
|
+
//# sourceMappingURL=setup-MFPEQS2I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/setup.ts"],"names":["result"],"mappings":"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","file":"setup-MFPEQS2I.js","sourcesContent":["/**\n * skaile setup — interactive AI provider setup wizard.\n *\n * Front-end over `skaile providers add` and `skaile config`: it discovers what\n * is already configured, picks endpoints out of the catalog, writes them to\n * `~/.skaile/providers.yml` with `env:` credential references, and saves the\n * driver plus one namespaced model selector to `skaile.yaml` or\n * `.skaile/settings.json`.\n *\n * It never stores a secret. The registry holds a reference; the value goes to\n * a `.env` file or stays in the operator's shell.\n *\n * @see PROVIDER-CONFIG-PLAN.md §1.6, §2.5\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport {\n type AIProviderPreset,\n getModels,\n listProviderPresets,\n validateApiKey,\n} from \"@skaile/workspaces/bridge\";\nimport {\n DEFAULT_DRIVER_ID,\n loadSettings,\n maskApiKey,\n projectSettingsPath,\n resolveSettings,\n type SkaileSettings,\n saveSettings,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport {\n addProviderEntry,\n credentialEnvVarName,\n loadRegistryView,\n ProviderRegistryWriteError,\n} from \"./commands/providers.ts\";\nimport { createSpinner } from \"./spinner.ts\";\n\n// ---------------------------------------------------------------------------\n// Catalog\n// ---------------------------------------------------------------------------\n\n/** LLM presets, in catalog order — the wizard never shows voice endpoints. */\nfunction llmPresets(): AIProviderPreset[] {\n return listProviderPresets().filter((preset) => preset.kind === \"llm\");\n}\n\n/** Where the operator gets a key, for the presets that have a console. */\nconst PRESET_KEY_URLS: Record<string, string> = {\n anthropic: \"https://console.anthropic.com/settings/keys\",\n openai: \"https://platform.openai.com/api-keys\",\n google: \"https://aistudio.google.com/apikey\",\n mistral: \"https://console.mistral.ai/api-keys\",\n groq: \"https://console.groq.com/keys\",\n openrouter: \"https://openrouter.ai/settings/keys\",\n deepseek: \"https://platform.deepseek.com/api_keys\",\n xai: \"https://console.x.ai/\",\n together: \"https://api.together.ai/settings/api-keys\",\n fireworks: \"https://fireworks.ai/api-keys\",\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Where a freshly entered secret is written — never `settings.json`. */\nexport type SecretTarget = \"env-project\" | \"env-global\" | \"skip\";\nexport type DefaultsTarget = \"project\" | \"personal\";\n\n/** One endpoint the wizard will make sure exists in the registry. */\nexport interface ProviderChoice {\n /** Catalog preset id; also the registry entry id. */\n id: string;\n /** Env var the entry's `credential.ref` points at. */\n envVar: string;\n /** A secret the operator just typed, if any. */\n secret?: string;\n /** The registry already has this entry with this reference. */\n satisfied: boolean;\n}\n\n/** The wizard's answers, in the order {@link applySetupPlan} writes them. */\nexport interface SetupPlan {\n providers: ProviderChoice[];\n secretTarget: SecretTarget;\n defaultsTarget: DefaultsTarget;\n /** `<providerId>/<modelId>` — what lands in `model:`. */\n modelRef: string;\n driver: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction exitOnCancel<T>(value: T): asserts value is Exclude<T, symbol> {\n if (p.isCancel(value)) {\n p.cancel(\"Setup cancelled.\");\n process.exit(0);\n }\n}\n\n/** Load .env files from common locations and parse key=value pairs */\nfunction loadDotenvKeys(): Record<string, string> {\n const locations = [path.join(process.cwd(), \".env\"), path.join(os.homedir(), \".env\")];\n const result: Record<string, string> = {};\n for (const loc of locations) {\n try {\n const content = fs.readFileSync(loc, \"utf-8\");\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = trimmed.indexOf(\"=\");\n if (eq === -1) continue;\n const key = trimmed.slice(0, eq).trim();\n let val = trimmed.slice(eq + 1).trim();\n // Strip surrounding quotes\n if (\n (val.startsWith('\"') && val.endsWith('\"')) ||\n (val.startsWith(\"'\") && val.endsWith(\"'\"))\n ) {\n val = val.slice(1, -1);\n }\n result[key] = val;\n }\n } catch {\n // file doesn't exist, skip\n }\n }\n return result;\n}\n\n/** Append key=value entries to a .env file without overwriting existing keys */\nfunction appendEnvFile(filePath: string, entries: Record<string, string>): void {\n let existing = \"\";\n try {\n existing = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n // file doesn't exist yet\n }\n\n const existingKeys = new Set<string>();\n for (const line of existing.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = trimmed.indexOf(\"=\");\n if (eq !== -1) existingKeys.add(trimmed.slice(0, eq).trim());\n }\n\n const lines: string[] = [];\n for (const [key, value] of Object.entries(entries)) {\n if (existingKeys.has(key)) {\n p.log.warn(` ${key} already exists in ${filePath} — skipping`);\n continue;\n }\n lines.push(`${key}=${value}`);\n }\n\n if (lines.length === 0) return;\n\n const separator = existing.endsWith(\"\\n\") || existing === \"\" ? \"\" : \"\\n\";\n const content = `${separator + lines.join(\"\\n\")}\\n`;\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.appendFileSync(filePath, content, \"utf-8\");\n}\n\n/** The env var a preset's credential conventionally lives in. */\nfunction presetEnvVar(preset: AIProviderPreset): string {\n return preset.credential.env ?? `${preset.id.toUpperCase().replace(/[^A-Z0-9]/g, \"_\")}_API_KEY`;\n}\n\n/** Entries already in the registry, keyed by id, with their `env:` var name. */\nfunction configuredEntries(projectDir: string): Record<string, string | undefined> {\n const view = loadRegistryView({ projectDir });\n const out: Record<string, string | undefined> = {};\n for (const id of view.merged.order) {\n out[id] = credentialEnvVarName(view.merged.providers[id]);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Wizard steps\n// ---------------------------------------------------------------------------\n\nfunction showCurrentState(\n settings: SkaileSettings,\n configured: Record<string, string | undefined>,\n env: Record<string, string>,\n): void {\n const lines: string[] = [\"Configured providers (~/.skaile/providers.yml):\"];\n const ids = Object.keys(configured);\n if (ids.length === 0) {\n lines.push(\" (none)\");\n } else {\n for (const id of ids) {\n const envVar = configured[id];\n const value = envVar ? env[envVar] : undefined;\n lines.push(\n ` ${id.padEnd(14)} ${envVar ?? \"no credential ref\"}` +\n (value ? ` ${maskApiKey(value)}` : envVar ? \" (not set in this environment)\" : \"\"),\n );\n }\n }\n lines.push(\"\");\n lines.push(\"Current defaults:\");\n lines.push(` Model: ${settings.model ?? \"(not set)\"}`);\n lines.push(` Driver: ${settings.driver ?? \"(not set)\"}`);\n\n p.note(lines.join(\"\\n\"), \"Current configuration\");\n}\n\nasync function selectPresets(\n configured: Record<string, string | undefined>,\n env: Record<string, string>,\n): Promise<AIProviderPreset[]> {\n const presets = llmPresets();\n const result = await p.multiselect({\n message: \"Which providers do you want to configure?\",\n options: presets.map((preset) => ({\n value: preset.id,\n label: preset.label,\n hint: configured[preset.id]\n ? \"configured\"\n : env[presetEnvVar(preset)]\n ? `${presetEnvVar(preset)} is set`\n : undefined,\n })),\n initialValues: presets\n .filter((preset) => configured[preset.id] || env[presetEnvVar(preset)])\n .map((preset) => preset.id),\n required: true,\n });\n exitOnCancel(result);\n const chosen = new Set(result as string[]);\n return presets.filter((preset) => chosen.has(preset.id));\n}\n\n/**\n * Run the optional validation step for a freshly entered key.\n * Returns true if the key should be kept (valid, or user opted to keep anyway),\n * false if it should be discarded.\n */\nasync function confirmKeyAfterValidation(provider: string, key: string): Promise<boolean> {\n const shouldValidate = await p.confirm({ message: \"Validate this key?\", initialValue: true });\n exitOnCancel(shouldValidate);\n if (!shouldValidate) return true;\n\n const s = createSpinner();\n s.start(`Validating ${provider} key...`);\n const result = await validateApiKey(provider, key);\n if (result.ok) {\n s.stop(`${provider} key is valid`);\n return true;\n }\n s.stop(`${provider} validation failed: ${result.error}`);\n const retry = await p.confirm({ message: \"Use this key anyway?\", initialValue: false });\n exitOnCancel(retry);\n return retry;\n}\n\n/**\n * Decide what one provider needs: the env var its credential reference points\n * at, and — only when that variable is not already populated — the secret to\n * put in it.\n */\nasync function collectProvider(\n preset: AIProviderPreset,\n configured: Record<string, string | undefined>,\n env: Record<string, string>,\n): Promise<ProviderChoice> {\n const envVar = configured[preset.id] ?? presetEnvVar(preset);\n const known = env[envVar];\n\n if (preset.credential.kind !== \"api_key_header\" && preset.credential.kind !== \"bearer\") {\n // sigv4 / google_adc / azure_entra / none — nothing to type in.\n p.log.info(`${preset.label}: credential comes from ${preset.credential.kind}, no key needed`);\n return { id: preset.id, envVar, satisfied: !!configured[preset.id] };\n }\n\n if (known) {\n p.log.info(`${preset.label}: ${envVar} is already set (${maskApiKey(known)})`);\n return { id: preset.id, envVar, satisfied: !!configured[preset.id] };\n }\n\n const keyUrl = PRESET_KEY_URLS[preset.id];\n const key = await p.password({\n message: `${preset.label} API key${keyUrl ? ` (get one at ${keyUrl})` : \"\"}, or leave blank to set ${envVar} yourself:`,\n });\n exitOnCancel(key);\n if (!key) return { id: preset.id, envVar, satisfied: !!configured[preset.id] };\n\n const keep = await confirmKeyAfterValidation(preset.id, key as string);\n if (!keep) return { id: preset.id, envVar, satisfied: !!configured[preset.id] };\n return { id: preset.id, envVar, secret: key as string, satisfied: !!configured[preset.id] };\n}\n\nasync function selectSecretTarget(): Promise<SecretTarget> {\n const result = await p.select({\n message: \"Where should the secrets be written? (skaile stores only the variable name)\",\n options: [\n { value: \"env-project\" as const, label: `${process.cwd()}/.env (project-level)` },\n { value: \"env-global\" as const, label: `${os.homedir()}/.env (global)` },\n { value: \"skip\" as const, label: \"Skip — I'll export the variables myself\" },\n ],\n });\n exitOnCancel(result);\n return result as SecretTarget;\n}\n\nasync function selectDefaultProvider(choices: ProviderChoice[], current?: string): Promise<string> {\n if (choices.length === 1) return choices[0].id;\n const initial = choices.find((choice) => current?.startsWith(`${choice.id}/`))?.id;\n const result = await p.select({\n message: \"Which provider should the default model come from?\",\n options: choices.map((choice) => ({ value: choice.id, label: choice.id })),\n initialValue: initial ?? choices[0].id,\n });\n exitOnCancel(result);\n return result as string;\n}\n\n/**\n * Pick the model id for `providerId`, returning the namespaced selector.\n * A live list needs a key; without one the built-in catalog is offered.\n */\nasync function selectModelRef(\n providerId: string,\n current?: string,\n apiKey?: string,\n): Promise<string> {\n const currentModel = current?.startsWith(`${providerId}/`)\n ? current.slice(providerId.length + 1)\n : undefined;\n\n const s = apiKey ? createSpinner() : undefined;\n if (s) s.start(`Fetching models from ${providerId}...`);\n const fetchResult = await getModels(providerId, apiKey);\n if (s) {\n if (fetchResult.source === \"api\") {\n s.stop(`Loaded ${fetchResult.models.length} models from ${providerId}`);\n } else if (fetchResult.error) {\n s.stop(`Could not fetch live models (${fetchResult.error}) — using built-in catalog`);\n } else {\n s.stop(\"Using built-in model catalog\");\n }\n }\n\n const models = fetchResult.models;\n if (models.length === 0) {\n p.log.warn(`No models found for ${providerId} — enter a model id manually`);\n const result = await p.text({ message: \"Model id:\", initialValue: currentModel ?? \"\" });\n exitOnCancel(result);\n return `${providerId}/${result as string}`;\n }\n\n const result = await p.select({\n message: `Default model (${providerId}):`,\n options: models.map((m) => ({ value: m.id, label: `${m.name} (${m.id})` })),\n initialValue:\n currentModel && models.some((m) => m.id === currentModel) ? currentModel : models[0].id,\n });\n exitOnCancel(result);\n return `${providerId}/${result as string}`;\n}\n\nasync function selectDriver(current?: string): Promise<string> {\n const result = await p.select({\n message: \"Default agent driver:\",\n options: [\n { value: \"omp\", label: \"omp (oh-my-pi — multi-provider, recommended)\" },\n { value: \"claude-sdk\", label: \"claude-sdk (Anthropic Agent SDK, Claude only)\" },\n { value: \"codex\", label: \"codex (OpenAI Codex SDK, OpenAI only)\" },\n ],\n initialValue: current ?? DEFAULT_DRIVER_ID,\n });\n exitOnCancel(result);\n return result as string;\n}\n\nasync function selectDefaultsTarget(projectDir: string): Promise<DefaultsTarget> {\n if (!fs.existsSync(path.join(projectDir, \"skaile.yaml\"))) return \"personal\";\n\n const result = await p.select({\n message: \"Where should the driver and model selector be saved?\",\n options: [\n {\n value: \"project\" as const,\n label: \"skaile.yaml (project-wide, shared with team)\",\n hint: \"recommended\",\n },\n { value: \"personal\" as const, label: \".skaile/settings.json (personal only, gitignored)\" },\n ],\n initialValue: \"project\" as const,\n });\n exitOnCancel(result);\n return result as DefaultsTarget;\n}\n\n/** Build the human-readable summary shown before applying the plan. */\nfunction buildSummaryLines(plan: SetupPlan, settingsFile: string): string[] {\n const lines: string[] = [\"Providers (~/.skaile/providers.yml):\"];\n for (const choice of plan.providers) {\n lines.push(\n ` ${choice.id.padEnd(14)} credential env:${choice.envVar}` +\n (choice.satisfied ? \" (already configured)\" : \"\"),\n );\n }\n\n const withSecrets = plan.providers.filter((choice) => choice.secret);\n if (withSecrets.length > 0) {\n const targetLabels: Record<SecretTarget, string> = {\n \"env-project\": `${process.cwd()}/.env`,\n \"env-global\": `${os.homedir()}/.env`,\n skip: \"not saved (export them yourself)\",\n };\n lines.push(\"\");\n lines.push(\"Secrets:\");\n for (const choice of withSecrets) {\n lines.push(` ${choice.envVar.padEnd(24)} ${maskApiKey(choice.secret ?? \"\")}`);\n }\n lines.push(` Written to: ${targetLabels[plan.secretTarget]}`);\n }\n\n lines.push(\"\");\n lines.push(\"Defaults:\");\n lines.push(` Model: ${plan.modelRef}`);\n lines.push(` Driver: ${plan.driver}`);\n lines.push(\n ` Saved to: ${plan.defaultsTarget === \"project\" ? \"skaile.yaml (project-wide)\" : settingsFile}`,\n );\n return lines;\n}\n\n/**\n * Create or update each chosen registry entry through the same write path as\n * `skaile providers add`. An entry that already points at the chosen variable\n * is left exactly as it is — the operator may have tuned its base URL or model\n * map, and re-running the wizard must not undo that.\n */\nfunction persistProviders(plan: SetupPlan, projectDir: string): void {\n for (const choice of plan.providers) {\n if (choice.satisfied) {\n p.log.info(`${choice.id}: keeping the existing registry entry`);\n continue;\n }\n try {\n const added = addProviderEntry({\n id: choice.id,\n presetId: choice.id,\n credentialRef: `env:${choice.envVar}`,\n projectDir,\n force: true,\n });\n p.log.success(`${choice.id} → ${added.path}`);\n } catch (error) {\n if (!(error instanceof ProviderRegistryWriteError)) throw error;\n p.log.error(`${choice.id}: ${error.message}`);\n }\n }\n}\n\n/** Write the secrets the operator typed to the chosen `.env` file. */\nfunction persistSecrets(plan: SetupPlan): void {\n const entries: Record<string, string> = {};\n for (const choice of plan.providers) {\n if (choice.secret) entries[choice.envVar] = choice.secret;\n }\n if (Object.keys(entries).length === 0) return;\n\n if (plan.secretTarget === \"skip\") {\n p.log.info(\n `Export these before starting a session: ${Object.keys(entries)\n .map((name) => `${name}=…`)\n .join(\" \")}`,\n );\n return;\n }\n const file =\n plan.secretTarget === \"env-project\"\n ? path.join(process.cwd(), \".env\")\n : path.join(os.homedir(), \".env\");\n appendEnvFile(file, entries);\n p.log.success(`Appended ${Object.keys(entries).length} variable(s) to ${file}`);\n}\n\n/**\n * Apply the plan's defaults: write them to skaile.yaml when saving project-wide,\n * and set/strip the corresponding personal settings fields on `merged` (mutated\n * in place) so they don't shadow project-wide values.\n */\nfunction applyDefaults(plan: SetupPlan, projectDir: string, merged: SkaileSettings): void {\n if (plan.defaultsTarget === \"project\") {\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n const editor = WorkspaceYamlEditor.load(yamlPath);\n editor.setAgentConfig(\"default\", { model: plan.modelRef, driver: plan.driver });\n editor.save();\n p.log.success(`Saved defaults to ${yamlPath}`);\n delete merged.model;\n delete merged.driver;\n return;\n }\n merged.model = plan.modelRef;\n merged.driver = plan.driver;\n}\n\n/**\n * Everything the wizard writes, once the operator has approved the plan:\n * registry entries, `.env` secrets, and the defaults.\n *\n * Separate from the prompting so the wizard's effect on disk is exercisable\n * without a terminal — and so there is exactly one place that writes.\n */\nexport async function applySetupPlan(plan: SetupPlan, projectDir: string): Promise<void> {\n const settingsFile = projectSettingsPath(projectDir);\n persistProviders(plan, projectDir);\n persistSecrets(plan);\n\n const merged: SkaileSettings = { ...(await loadSettings(settingsFile)) };\n applyDefaults(plan, projectDir, merged);\n await saveSettings(merged, settingsFile);\n p.log.success(`Saved settings to ${settingsFile}`);\n}\n\nasync function reviewAndSave(plan: SetupPlan, projectDir: string): Promise<void> {\n p.note(buildSummaryLines(plan, projectSettingsPath(projectDir)).join(\"\\n\"), \"Summary\");\n\n const confirmed = await p.confirm({ message: \"Apply these settings?\", initialValue: true });\n exitOnCancel(confirmed);\n if (!confirmed) {\n p.cancel(\"Setup cancelled — no changes were made.\");\n process.exit(0);\n }\n\n await applySetupPlan(plan, projectDir);\n}\n\n// ---------------------------------------------------------------------------\n// Main entry\n// ---------------------------------------------------------------------------\n\n/** Check whether Claude Code OAuth credentials exist on disk */\nfunction hasClaudeCodeCredentials(): boolean {\n const credPath = path.join(os.homedir(), \".claude\", \".credentials.json\");\n try {\n const parsed = JSON.parse(fs.readFileSync(credPath, \"utf-8\"));\n return parsed && (parsed.accessToken || parsed.refreshToken || parsed.oauthToken);\n } catch {\n return false;\n }\n}\n\n/** The presets a driver can actually talk to (§2.3 plurality). */\nfunction presetsForDriver(driver: string): AIProviderPreset[] | undefined {\n if (driver === \"claude-sdk\") return llmPresets().filter((preset) => preset.id === \"anthropic\");\n if (driver === \"codex\") return llmPresets().filter((preset) => preset.id === \"openai\");\n return undefined;\n}\n\n/**\n * Interactive provider setup wizard: discovers what the AI provider registry\n * already holds, adds the endpoints the operator picks (credential references\n * only), and writes the driver plus a `<providerId>/<modelId>` selector to\n * `skaile.yaml` or `.skaile/settings.json`.\n *\n * @param _args - Unused positional args (reserved for future use).\n * @param opts - Options including an optional `projectDir` override.\n * @docLink cli/dev-guide#setup\n */\nexport async function cmdSetup(_args: string[], opts: { projectDir?: string }): Promise<void> {\n p.intro(\"skaile setup\");\n\n const projectDir = opts.projectDir ?? process.cwd();\n\n let settings: SkaileSettings;\n try {\n settings = await resolveSettings(projectDir);\n } catch (error) {\n // A pre-registry skaile.yaml cannot be read at all — say so once, with the\n // command that fixes it, instead of walking the operator through a wizard\n // whose result the file would reject.\n p.cancel(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n const env = { ...loadDotenvKeys(), ...process.env } as Record<string, string>;\n const configured = configuredEntries(projectDir);\n showCurrentState(settings, configured, env);\n\n // The driver comes first: it decides which endpoints are even selectable.\n const driver = await selectDriver(settings.driver);\n const forced = presetsForDriver(driver);\n if (forced && driver === \"claude-sdk\" && !env.ANTHROPIC_API_KEY && hasClaudeCodeCredentials()) {\n p.log.info(\"Claude Code subscription detected — the SDK can use that login instead of a key.\");\n }\n const presets = forced ?? (await selectPresets(configured, env));\n\n const providers: ProviderChoice[] = [];\n for (const preset of presets) {\n providers.push(await collectProvider(preset, configured, env));\n }\n\n const secretTarget = providers.some((choice) => choice.secret)\n ? await selectSecretTarget()\n : \"skip\";\n\n const defaultProvider = await selectDefaultProvider(providers, settings.model);\n const chosen = providers.find((choice) => choice.id === defaultProvider);\n const modelRef = await selectModelRef(\n defaultProvider,\n settings.model,\n chosen?.secret ?? (chosen ? env[chosen.envVar] : undefined),\n );\n\n const defaultsTarget = await selectDefaultsTarget(projectDir);\n\n await reviewAndSave({ providers, secretTarget, defaultsTarget, modelRef, driver }, projectDir);\n\n p.outro(\"Setup complete!\");\n}\n"]}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
export { skillCheckRequirements, skillGetPreamble, skillList, skillSearch, skillShow } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { skillCheckRequirements, skillGetPreamble, skillList, skillSearch, skillShow } from './chunk-46IRZJV4.js';
|
|
2
|
+
import './chunk-PGZDSDOB.js';
|
|
3
3
|
import './chunk-X5YPJV4N.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import './chunk-D5REDKVU.js';
|
|
5
|
+
import './chunk-AP24HESN.js';
|
|
6
|
+
import './chunk-PIC23DDE.js';
|
|
7
7
|
import './chunk-4GY63JU6.js';
|
|
8
|
-
import './chunk-
|
|
8
|
+
import './chunk-5RDZ5JHH.js';
|
|
9
9
|
import './chunk-D54T2F54.js';
|
|
10
10
|
import './chunk-5BEFNLOR.js';
|
|
11
11
|
import './chunk-A2ULN3KX.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-ZVZTCDUN.js';
|
|
13
13
|
import './chunk-L5VSIPQD.js';
|
|
14
14
|
import './chunk-IG5LZ3WU.js';
|
|
15
|
-
import './chunk-
|
|
15
|
+
import './chunk-H7R7R5BN.js';
|
|
16
16
|
import './chunk-RVRB27AN.js';
|
|
17
|
-
import './chunk-
|
|
18
|
-
import './chunk-
|
|
17
|
+
import './chunk-YW2BNDSE.js';
|
|
18
|
+
import './chunk-FT4ZHLYR.js';
|
|
19
19
|
import './chunk-ICSCSM5D.js';
|
|
20
20
|
import './chunk-DKXNKFKP.js';
|
|
21
21
|
import './chunk-MJHSLODD.js';
|
|
22
22
|
import './chunk-C3CAXQMA.js';
|
|
23
23
|
import './chunk-BOFL7GIF.js';
|
|
24
24
|
import './chunk-NSBPE2FW.js';
|
|
25
|
-
//# sourceMappingURL=skills-
|
|
26
|
-
//# sourceMappingURL=skills-
|
|
25
|
+
//# sourceMappingURL=skills-7G6QCDEM.js.map
|
|
26
|
+
//# sourceMappingURL=skills-7G6QCDEM.js.map
|