@skaile/workspaces 4.10.0 → 4.12.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 +24 -0
- package/dist/{asset-feeds-W24JZM36.js → asset-feeds-WSKIL5GA.js} +13 -13
- package/dist/{asset-feeds-W24JZM36.js.map → asset-feeds-WSKIL5GA.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +9 -9
- package/dist/asset-manager/index.js +13 -13
- package/dist/asset-manager/installer.js +9 -9
- package/dist/bridge/drivers/claude-sdk.js +16 -14
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +11 -11
- package/dist/bridge/drivers/continue.js +13 -12
- package/dist/bridge/drivers/continue.js.map +1 -1
- package/dist/bridge/drivers/echo.js +10 -8
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +9 -8
- package/dist/bridge/drivers/goose.js +12 -11
- package/dist/bridge/drivers/goose.js.map +1 -1
- package/dist/bridge/drivers/omp.js +7 -6
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +14 -12
- package/dist/bridge/drivers/opencode.js.map +1 -1
- package/dist/bridge/drivers/qwen.js +9 -8
- package/dist/bridge/drivers/qwen.js.map +1 -1
- package/dist/bridge/index.js +13 -13
- package/dist/bridge/src/cloud.d.ts.map +1 -1
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
- package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
- package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
- package/dist/bridge/src/provider-materialize/env-drivers.d.ts +20 -5
- package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +1 -1
- package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +6 -2
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-MKZOK4JU.js → chunk-2FBPAR2V.js} +3 -3
- package/dist/{chunk-MKZOK4JU.js.map → chunk-2FBPAR2V.js.map} +1 -1
- package/dist/{chunk-HO4UO25I.js → chunk-2J3PASYF.js} +3 -3
- package/dist/{chunk-HO4UO25I.js.map → chunk-2J3PASYF.js.map} +1 -1
- package/dist/{chunk-FUCYTGAE.js → chunk-35G4M33T.js} +10 -4
- package/dist/chunk-35G4M33T.js.map +1 -0
- package/dist/{chunk-JECDED7B.js → chunk-3QCLMSXU.js} +5 -5
- package/dist/{chunk-JECDED7B.js.map → chunk-3QCLMSXU.js.map} +1 -1
- package/dist/{chunk-BXV6RLF4.js → chunk-4G6HFU27.js} +4 -4
- package/dist/{chunk-BXV6RLF4.js.map → chunk-4G6HFU27.js.map} +1 -1
- package/dist/{chunk-OUJVFZWJ.js → chunk-4SIMGJIU.js} +4 -9
- package/dist/chunk-4SIMGJIU.js.map +1 -0
- package/dist/{chunk-CSS3HHQ6.js → chunk-5UPJWC3M.js} +8 -8
- package/dist/{chunk-CSS3HHQ6.js.map → chunk-5UPJWC3M.js.map} +1 -1
- package/dist/{chunk-O3DHAGBO.js → chunk-626UIDZT.js} +6 -5
- package/dist/chunk-626UIDZT.js.map +1 -0
- package/dist/{chunk-2HUQUTJ3.js → chunk-6XIIGQXL.js} +4 -4
- package/dist/{chunk-2HUQUTJ3.js.map → chunk-6XIIGQXL.js.map} +1 -1
- package/dist/{chunk-A3X4LDOD.js → chunk-7EYRYGIM.js} +6 -6
- package/dist/{chunk-A3X4LDOD.js.map → chunk-7EYRYGIM.js.map} +1 -1
- package/dist/{chunk-7IRJ4K4F.js → chunk-7IH3RKKK.js} +3 -3
- package/dist/{chunk-7IRJ4K4F.js.map → chunk-7IH3RKKK.js.map} +1 -1
- package/dist/chunk-ALLCAFHQ.js +365 -0
- package/dist/chunk-ALLCAFHQ.js.map +1 -0
- package/dist/{chunk-W4IPN3DD.js → chunk-BOFL7GIF.js} +62 -10
- package/dist/chunk-BOFL7GIF.js.map +1 -0
- package/dist/{chunk-LFW2SH54.js → chunk-BVYTXIN5.js} +3 -3
- package/dist/{chunk-LFW2SH54.js.map → chunk-BVYTXIN5.js.map} +1 -1
- package/dist/{chunk-QV36ENWE.js → chunk-BYBIEHQX.js} +98 -39
- package/dist/chunk-BYBIEHQX.js.map +1 -0
- package/dist/{chunk-WXB6YEHZ.js → chunk-C7DPL3YA.js} +3 -3
- package/dist/{chunk-WXB6YEHZ.js.map → chunk-C7DPL3YA.js.map} +1 -1
- package/dist/{chunk-CJXSTOGW.js → chunk-C7R65ZTD.js} +4 -4
- package/dist/{chunk-CJXSTOGW.js.map → chunk-C7R65ZTD.js.map} +1 -1
- package/dist/{chunk-35PMOWAD.js → chunk-CPIAQTYM.js} +4 -4
- package/dist/chunk-CPIAQTYM.js.map +1 -0
- package/dist/{chunk-REYJKU7T.js → chunk-DHMBE5J7.js} +12 -364
- package/dist/chunk-DHMBE5J7.js.map +1 -0
- package/dist/chunk-DMJ4FUEO.js +141 -0
- package/dist/chunk-DMJ4FUEO.js.map +1 -0
- package/dist/{chunk-7ZJXFQ42.js → chunk-DPKRBLYC.js} +3 -3
- package/dist/{chunk-7ZJXFQ42.js.map → chunk-DPKRBLYC.js.map} +1 -1
- package/dist/{chunk-KSIRR5PL.js → chunk-DPLIN2RA.js} +3 -3
- package/dist/{chunk-KSIRR5PL.js.map → chunk-DPLIN2RA.js.map} +1 -1
- package/dist/{chunk-ILG4BXYE.js → chunk-GZZPKAV5.js} +27 -3
- package/dist/chunk-GZZPKAV5.js.map +1 -0
- package/dist/{chunk-M5H4DWIA.js → chunk-HGPSZXZP.js} +3 -3
- package/dist/{chunk-M5H4DWIA.js.map → chunk-HGPSZXZP.js.map} +1 -1
- package/dist/{chunk-MMLXSVQ3.js → chunk-IGI6M7MS.js} +5 -5
- package/dist/{chunk-MMLXSVQ3.js.map → chunk-IGI6M7MS.js.map} +1 -1
- package/dist/{chunk-VLXODO37.js → chunk-KECSNBET.js} +3 -3
- package/dist/{chunk-VLXODO37.js.map → chunk-KECSNBET.js.map} +1 -1
- package/dist/{chunk-3YTFHHMI.js → chunk-LHBWHIIT.js} +3 -3
- package/dist/{chunk-3YTFHHMI.js.map → chunk-LHBWHIIT.js.map} +1 -1
- package/dist/{chunk-DIQVQT5C.js → chunk-MH4GYGOW.js} +5 -5
- package/dist/{chunk-DIQVQT5C.js.map → chunk-MH4GYGOW.js.map} +1 -1
- package/dist/{chunk-WILO77HE.js → chunk-N4DHPRBS.js} +4 -4
- package/dist/{chunk-WILO77HE.js.map → chunk-N4DHPRBS.js.map} +1 -1
- package/dist/{chunk-5D5MCO4L.js → chunk-N5O6Z7HV.js} +10 -10
- package/dist/{chunk-5D5MCO4L.js.map → chunk-N5O6Z7HV.js.map} +1 -1
- package/dist/{chunk-FAI2SMFE.js → chunk-P2DLXBZK.js} +4 -4
- package/dist/{chunk-FAI2SMFE.js.map → chunk-P2DLXBZK.js.map} +1 -1
- package/dist/{chunk-EUWEMCYO.js → chunk-PCM75ICY.js} +4 -4
- package/dist/{chunk-EUWEMCYO.js.map → chunk-PCM75ICY.js.map} +1 -1
- package/dist/{chunk-7BUZQVRR.js → chunk-Q6NDQ6BH.js} +4 -4
- package/dist/{chunk-7BUZQVRR.js.map → chunk-Q6NDQ6BH.js.map} +1 -1
- package/dist/{chunk-OE2OMMOX.js → chunk-QOCH3LO7.js} +6 -6
- package/dist/{chunk-OE2OMMOX.js.map → chunk-QOCH3LO7.js.map} +1 -1
- package/dist/{chunk-CTQ4G3UY.js → chunk-QUSE2T4N.js} +173 -101
- package/dist/chunk-QUSE2T4N.js.map +1 -0
- package/dist/{chunk-ULX3R5PV.js → chunk-RE2XE2AP.js} +11 -11
- package/dist/chunk-RE2XE2AP.js.map +1 -0
- package/dist/{chunk-7J4YIVKJ.js → chunk-RJNBMEFG.js} +7 -7
- package/dist/{chunk-7J4YIVKJ.js.map → chunk-RJNBMEFG.js.map} +1 -1
- package/dist/{chunk-2D5BYAL6.js → chunk-RQLL7L72.js} +3 -3
- package/dist/{chunk-2D5BYAL6.js.map → chunk-RQLL7L72.js.map} +1 -1
- package/dist/{chunk-3T5DRUNZ.js → chunk-RQRWMKST.js} +5 -5
- package/dist/{chunk-3T5DRUNZ.js.map → chunk-RQRWMKST.js.map} +1 -1
- package/dist/{chunk-3HKYCT2M.js → chunk-RUBPZLMO.js} +3 -3
- package/dist/{chunk-3HKYCT2M.js.map → chunk-RUBPZLMO.js.map} +1 -1
- package/dist/{chunk-3XXQPHGL.js → chunk-T3YUSWVK.js} +4 -4
- package/dist/{chunk-3XXQPHGL.js.map → chunk-T3YUSWVK.js.map} +1 -1
- package/dist/{chunk-6XKQEDF7.js → chunk-TMOS6KL5.js} +6 -5
- package/dist/chunk-TMOS6KL5.js.map +1 -0
- package/dist/{chunk-37PUZERM.js → chunk-TVQPJZSO.js} +3 -3
- package/dist/{chunk-37PUZERM.js.map → chunk-TVQPJZSO.js.map} +1 -1
- package/dist/{chunk-IECQMSQ5.js → chunk-UE4AKJNQ.js} +4 -129
- package/dist/chunk-UE4AKJNQ.js.map +1 -0
- package/dist/{chunk-ELPR5XBG.js → chunk-V4RGCKYC.js} +5 -3
- package/dist/chunk-V4RGCKYC.js.map +1 -0
- package/dist/{chunk-UKJMQZV6.js → chunk-VOEBLPXO.js} +2 -2
- package/dist/chunk-VOEBLPXO.js.map +1 -0
- package/dist/{chunk-BZ7GHZ2J.js → chunk-WNDDWWGU.js} +7 -7
- package/dist/{chunk-BZ7GHZ2J.js.map → chunk-WNDDWWGU.js.map} +1 -1
- package/dist/{chunk-KLMXMW6Z.js → chunk-XPDB4O4H.js} +3 -3
- package/dist/{chunk-KLMXMW6Z.js.map → chunk-XPDB4O4H.js.map} +1 -1
- package/dist/{chunk-I3UWSGEB.js → chunk-ZK7DQRB2.js} +3 -3
- package/dist/{chunk-I3UWSGEB.js.map → chunk-ZK7DQRB2.js.map} +1 -1
- package/dist/{chunk-UXUDNBJM.js → chunk-ZSB2SPV4.js} +3 -3
- package/dist/{chunk-UXUDNBJM.js.map → chunk-ZSB2SPV4.js.map} +1 -1
- package/dist/cli/index.js +70 -69
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/config.js +4 -13
- package/dist/connectors/index.js +21 -20
- package/dist/connectors/src/config.d.ts.map +1 -1
- package/dist/connectors/src/connector-manager.d.ts +21 -1
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors/src/fleet-utils.d.ts +38 -0
- package/dist/connectors/src/fleet-utils.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +2 -2
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/materialized-connectors.d.ts.map +1 -1
- package/dist/connectors/src/secrets.d.ts.map +1 -1
- package/dist/{connectors-2OHRZDJZ.js → connectors-T57XL7EA.js} +3 -3
- package/dist/{connectors-2OHRZDJZ.js.map → connectors-T57XL7EA.js.map} +1 -1
- package/dist/core/index.js +8 -8
- package/dist/core/logging.js +2 -2
- package/dist/core/manifest.js +2 -2
- package/dist/core/provider-registry-credentials.js +2 -2
- package/dist/core/provider-registry.js +1 -1
- package/dist/core/runtime-assets.js +4 -4
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/logging/create-logger.d.ts.map +1 -1
- package/dist/core/src/logging/index.d.ts +1 -0
- package/dist/core/src/logging/index.d.ts.map +1 -1
- package/dist/core/src/logging/redact.d.ts +33 -0
- package/dist/core/src/logging/redact.d.ts.map +1 -0
- package/dist/core/src/logging/sanitize.d.ts +11 -0
- package/dist/core/src/logging/sanitize.d.ts.map +1 -1
- package/dist/core/src/provider-registry.d.ts +22 -0
- package/dist/core/src/provider-registry.d.ts.map +1 -1
- package/dist/core/workspace-config.js +3 -3
- package/dist/deploy/index.js +8 -8
- package/dist/discovery/index.js +3 -3
- package/dist/{ensure-sources-5ZYEU4BE.js → ensure-sources-ZZRU74UG.js} +16 -16
- package/dist/{ensure-sources-5ZYEU4BE.js.map → ensure-sources-ZZRU74UG.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +21 -20
- package/dist/factory-assets/connectors/deploy.js +21 -20
- package/dist/factory-assets/connectors/devserver.js +21 -20
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +4 -2
- package/dist/factory-assets/connectors/flow/adapter.js +21 -20
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts +12 -0
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract.js +4 -3
- package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +12 -11
- package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -2
- package/dist/factory-assets/connectors/flow/run-flow.js +23 -22
- package/dist/factory-assets/connectors/flow.js +21 -20
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +21 -20
- package/dist/factory-assets/connectors/gmail.js +21 -20
- package/dist/factory-assets/connectors/googledrive.js +21 -20
- package/dist/factory-assets/connectors/local.js +21 -20
- package/dist/factory-assets/connectors/mattermost.js +21 -20
- package/dist/factory-assets/connectors/memory.js +21 -20
- package/dist/factory-assets/connectors/minio.js +21 -20
- package/dist/factory-assets/connectors/postgres.js +21 -20
- package/dist/factory-assets/connectors/s3.js +21 -20
- package/dist/factory-assets/connectors/sharepoint.js +21 -20
- package/dist/factory-assets/connectors/sqlite.js +21 -20
- package/dist/factory-assets/connectors/static-server.js +21 -20
- package/dist/factory-assets/connectors/tunnel.js +21 -20
- package/dist/factory-assets/connectors/webdav.js +21 -20
- package/dist/factory-assets/connectors/xstate-store.js +21 -20
- package/dist/factory-assets/connectors/xstate.js +21 -20
- package/dist/flows-XHRUNYJV.js +23 -0
- package/dist/{flows-H6FL4NZU.js.map → flows-XHRUNYJV.js.map} +1 -1
- package/dist/{helpers-4SAB547F.js → helpers-M76C6JVC.js} +16 -16
- package/dist/{helpers-4SAB547F.js.map → helpers-M76C6JVC.js.map} +1 -1
- package/dist/library/index.js +11 -11
- package/dist/library/install.js +1 -15
- package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
- package/dist/{library-publish-GXIWW7NW.js → library-publish-EQYEJXWO.js} +23 -22
- package/dist/library-publish-EQYEJXWO.js.map +1 -0
- package/dist/open-library-YTP7CVVT.js +36 -0
- package/dist/{open-library-OOP3UQUP.js.map → open-library-YTP7CVVT.js.map} +1 -1
- package/dist/paths-BG3I2LPM.js +19 -0
- package/dist/{paths-RL6NZW5X.js.map → paths-BG3I2LPM.js.map} +1 -1
- package/dist/{plugin-store-ZTAJCMTY.js → plugin-store-BCNR6ZBP.js} +10 -10
- package/dist/{plugin-store-ZTAJCMTY.js.map → plugin-store-BCNR6ZBP.js.map} +1 -1
- package/dist/{project-P27CJXPB.js → project-THCZLS67.js} +17 -17
- package/dist/{project-P27CJXPB.js.map → project-THCZLS67.js.map} +1 -1
- package/dist/resolver/index.js +9 -9
- package/dist/runner/index.js +33 -32
- package/dist/runner/src/capability-registry.d.ts +13 -1
- package/dist/runner/src/capability-registry.d.ts.map +1 -1
- package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
- package/dist/runner/src/log-content.d.ts +22 -0
- package/dist/runner/src/log-content.d.ts.map +1 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +13 -13
- package/dist/sdk/bridge.js +13 -13
- package/dist/sdk/core.js +8 -8
- package/dist/sdk/flow.js +12 -11
- package/dist/sdk/index.js +33 -32
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +9 -9
- package/dist/sdk/runner.js +33 -32
- package/dist/{setup-JNGNZTTP.js → setup-QN4HKSFJ.js} +22 -22
- package/dist/{setup-JNGNZTTP.js.map → setup-QN4HKSFJ.js.map} +1 -1
- package/dist/skills-FKVBIDNM.js +23 -0
- package/dist/{skills-Y6MU2NRI.js.map → skills-FKVBIDNM.js.map} +1 -1
- package/dist/source-5EAGZA6K.js +37 -0
- package/dist/{source-LOGTGPGJ.js.map → source-5EAGZA6K.js.map} +1 -1
- package/dist/{source-manifest-publish-PH2XMOLW.js → source-manifest-publish-57SGT7Q3.js} +24 -23
- package/dist/source-manifest-publish-57SGT7Q3.js.map +1 -0
- package/dist/tui/index.js +33 -32
- package/dist/tui/index.js.map +1 -1
- package/dist/types/src/manifests/preset.d.ts +5 -5
- package/dist/workspace-plugin/adapters/mcp.js +15 -15
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +3 -3
- package/dist/workspace-plugin/src/tools/connectors.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/chunk-35PMOWAD.js.map +0 -1
- package/dist/chunk-6XKQEDF7.js.map +0 -1
- package/dist/chunk-CTQ4G3UY.js.map +0 -1
- package/dist/chunk-ELPR5XBG.js.map +0 -1
- package/dist/chunk-FUCYTGAE.js.map +0 -1
- package/dist/chunk-IECQMSQ5.js.map +0 -1
- package/dist/chunk-ILG4BXYE.js.map +0 -1
- package/dist/chunk-O3DHAGBO.js.map +0 -1
- package/dist/chunk-OUJVFZWJ.js.map +0 -1
- package/dist/chunk-QV36ENWE.js.map +0 -1
- package/dist/chunk-REYJKU7T.js.map +0 -1
- package/dist/chunk-UKJMQZV6.js.map +0 -1
- package/dist/chunk-ULX3R5PV.js.map +0 -1
- package/dist/chunk-W4IPN3DD.js.map +0 -1
- package/dist/flows-H6FL4NZU.js +0 -23
- package/dist/library-publish-GXIWW7NW.js.map +0 -1
- package/dist/open-library-OOP3UQUP.js +0 -35
- package/dist/paths-RL6NZW5X.js +0 -19
- package/dist/skills-Y6MU2NRI.js +0 -23
- package/dist/source-LOGTGPGJ.js +0 -36
- package/dist/source-manifest-publish-PH2XMOLW.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/src/logging/stream-health.ts","../core/src/logging/log-store.ts","../core/src/logging/sanitize.ts","../core/src/logging/sinks/types.ts","../core/src/logging/sinks/no-op-sink.ts","../core/src/logging/sinks/stdout-sink.ts","../core/src/logging/create-logger.ts"],"names":[],"mappings":"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","file":"chunk-W4IPN3DD.js","sourcesContent":["/**\n * Liveness checks for the stdio streams the logging layer writes to.\n *\n * Shared by `StdoutSink` (which stops writing to a dead stream) and the\n * runner's `watchOutputStream` (which stops the loop, and exits only when its\n * caller owns the process), so the two cannot disagree about what \"dead\" means.\n * See `_devlog/notes/2026-09-07-stdout-epipe-log-loop.md`.\n */\n\n/**\n * Structural subset of `process.stdout` these helpers need. Declared instead of\n * `NodeJS.WriteStream` so tests and embedders can pass an ordinary `Writable`.\n */\nexport type OutputStream = NodeJS.WritableStream & {\n isTTY?: boolean;\n destroyed?: boolean;\n writableEnded?: boolean;\n};\n\nfunction codeOf(err: unknown): string | undefined {\n if (typeof err !== \"object\" || err === null) return undefined;\n const code = (err as NodeJS.ErrnoException).code;\n return typeof code === \"string\" ? code : undefined;\n}\n\n/**\n * True only for `EPIPE` — the reader closed its end.\n *\n * Deliberately narrow, because callers act on it by killing the process: a\n * wider set would let an unrelated bad descriptor take a whole session down.\n * Use {@link isUnwritableStreamError} to decide whether to stop *writing*.\n */\nexport function isBrokenPipeError(err: unknown): boolean {\n return codeOf(err) === \"EPIPE\";\n}\n\n/**\n * Error codes meaning this stream will never accept another write. Broader\n * than {@link isBrokenPipeError} because latching a sink off is cheap and\n * reversible in a way that exiting the process is not.\n */\nconst UNWRITABLE_CODES = new Set([\n \"EPIPE\",\n \"EBADF\",\n \"ERR_STREAM_DESTROYED\",\n \"ERR_STREAM_WRITE_AFTER_END\",\n]);\n\n/** True when a further write to this stream can only fail the same way. */\nexport function isUnwritableStreamError(err: unknown): boolean {\n const code = codeOf(err);\n return code !== undefined && UNWRITABLE_CODES.has(code);\n}\n\n/** False once the stream has been destroyed or ended. */\nexport function isStreamOpen(stream: { destroyed?: boolean; writableEnded?: boolean }): boolean {\n return stream.destroyed !== true && stream.writableEnded !== true;\n}\n\n/**\n * Streams known to be unwritable. Sinks consult this and go quiet; nothing\n * here listens for `error`, because claiming that event suppresses Node's\n * default fatal-EPIPE exit — right for a long-lived server, wrong for a CLI\n * being piped into `head`. That listener belongs to whoever owns the process\n * lifecycle: see `watchOutputStream` in the runner.\n */\nlet brokenStreams = new WeakSet<object>();\n\n/** Record that a stream will never accept another write. Idempotent. */\nexport function markStreamBroken(stream: object): void {\n brokenStreams.add(stream);\n}\n\n/**\n * Forget every broken-stream mark. Test-only — the registry is process-wide by\n * design, so a suite that breaks a stream would otherwise leak that verdict.\n * @internal\n */\nexport function __resetBrokenStreams(): void {\n brokenStreams = new WeakSet();\n}\n\n/** True while a stream is worth writing to. */\nexport function isStreamUsable(stream: { destroyed?: boolean; writableEnded?: boolean }): boolean {\n return !brokenStreams.has(stream) && isStreamOpen(stream);\n}\n","import { EventEmitter } from \"node:events\";\nimport type {\n LogEntry,\n LogLevel,\n LogQuery,\n LogQueryResult,\n LogSource,\n} from \"@skaile/workspaces/types\";\nimport { ulid } from \"ulid\";\nimport { isStreamUsable, isUnwritableStreamError, markStreamBroken } from \"./stream-health.js\";\nimport type { LogSink } from \"./sinks/types.js\";\n\nexport interface LogStoreOptions {\n sessionId: string;\n level: LogLevel;\n sinks: LogSink[];\n flushIntervalMs?: number; // default 50\n flushBatchSize?: number; // default 100\n}\n\nexport interface RecordInput {\n source: LogSource;\n level: LogLevel;\n message: string;\n data?: Record<string, unknown>;\n error?: { name: string; message: string; stack?: string };\n}\n\nconst LEVEL_RANK: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\n/**\n * In-memory log buffer with periodic flush to sinks.\n *\n * The LogStore buffers log entries and flushes them to registered sinks\n * either when the buffer reaches a certain size, after a time interval,\n * or when explicitly flushed. Supports subscribing to live log entries.\n *\n * @see {@link LogStoreOptions} for configuration\n * @see {@link LogEntry} for the log entry format\n * @category Logging\n * @since 2.0.0\n */\nexport class LogStore {\n private sessionId: string;\n private level: LogLevel;\n private sinks: LogSink[];\n private flushIntervalMs: number;\n private flushBatchSize: number;\n private buffer: LogEntry[] = [];\n private timer: NodeJS.Timeout | null = null;\n private emitter = new EventEmitter();\n private closed = false;\n\n constructor(opts: LogStoreOptions) {\n this.sessionId = opts.sessionId;\n this.level = opts.level;\n this.sinks = opts.sinks;\n this.flushIntervalMs = opts.flushIntervalMs ?? 50;\n this.flushBatchSize = opts.flushBatchSize ?? 100;\n this.emitter.setMaxListeners(0);\n }\n\n getLevel(): LogLevel {\n return this.level;\n }\n\n setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n /** Append a sink after construction. Used by bridges (e.g. OnLogBridgeSink). */\n addSink(sink: LogSink): void {\n this.sinks.push(sink);\n }\n\n /** Returns true if the level is enabled. Used by createLogger to short-circuit. */\n isEnabled(level: LogLevel): boolean {\n return LEVEL_RANK[level] >= LEVEL_RANK[this.level];\n }\n\n record(input: RecordInput): void {\n if (this.closed) return;\n if (!this.isEnabled(input.level)) return;\n const entry: LogEntry = {\n id: ulid(),\n timestamp: new Date().toISOString(),\n sessionId: this.sessionId,\n source: input.source,\n level: input.level,\n message: input.message,\n data: input.data,\n error: input.error,\n };\n this.emitter.emit(\"entry\", entry);\n this.buffer.push(entry);\n if (this.buffer.length >= this.flushBatchSize) {\n this.flushSync();\n } else if (this.flushIntervalMs > 0 && this.timer === null) {\n this.timer = setTimeout(() => this.flushSync(), this.flushIntervalMs);\n } else if (this.flushIntervalMs === 0) {\n this.flushSync();\n }\n }\n\n /** Subscribe to live entries. Returns an unsubscribe function. */\n subscribe(handler: (entry: LogEntry) => void): () => void {\n this.emitter.on(\"entry\", handler);\n return () => this.emitter.off(\"entry\", handler);\n }\n\n /**\n * Query stored log entries.\n *\n * Queries the first sink that supports querying (typically SQLiteSink).\n * Returns empty result if no sink supports querying.\n *\n * @param q - Query parameters including filters and pagination\n * @returns Query result with matching entries\n */\n query(q: LogQuery): LogQueryResult {\n for (const sink of this.sinks) {\n if (sink.query) return sink.query(q);\n }\n return { entries: [] };\n }\n\n /** Force-flush. SQLite writes are synchronous, so this returns once writes complete. */\n flush(): void {\n this.flushSync();\n }\n\n /**\n * Close the log store and release resources.\n *\n * Flushes any pending entries, marks the store as closed, and closes\n * all registered sinks.\n */\n close(): void {\n if (this.closed) return;\n this.flushSync();\n this.closed = true;\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n for (const sink of this.sinks) sink.close();\n this.emitter.removeAllListeners();\n }\n\n private flushSync(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n if (this.buffer.length === 0) return;\n const batch = this.buffer;\n this.buffer = [];\n for (const sink of this.sinks) {\n try {\n sink.writeBatch(batch);\n } catch (err) {\n // Never let a sink failure crash the producer. `reportSinkFailure` is\n // itself failure-tolerant: a throw here would escape to the process\n // handler, which logs it back through this same store.\n reportSinkFailure(err);\n }\n }\n }\n}\n\n/**\n * Last-resort report of a sink failure. Silent once stderr is unusable —\n * a dead stderr fails asynchronously just like stdout, so the try/catch alone\n * would never latch. `isStreamUsable` is the shared verdict; the `catch` only\n * covers the synchronous throws (write-after-end, destroyed).\n */\nfunction reportSinkFailure(err: unknown): void {\n if (!isStreamUsable(process.stderr)) return;\n try {\n process.stderr.write(`LogStore sink write failed: ${String(err)}\\n`);\n } catch (writeErr) {\n if (isUnwritableStreamError(writeErr)) markStreamBroken(process.stderr);\n }\n}\n","import type { NormalizedError } from \"@skaile/workspaces/types\";\n\nexport function normalizeError(value: unknown): NormalizedError | undefined {\n if (value === undefined || value === null) return undefined;\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n if (typeof value === \"string\") {\n return { name: \"Error\", message: value };\n }\n try {\n return { name: \"Error\", message: JSON.stringify(value) };\n } catch {\n return { name: \"Error\", message: String(value) };\n }\n}\n\nexport function sanitizeData(value: unknown): Record<string, unknown> | undefined {\n if (value === undefined || value === null) return undefined;\n const seen = new WeakSet<object>();\n const walk = (v: unknown): unknown => {\n if (v === null || v === undefined) return v;\n if (typeof v === \"bigint\") return v.toString();\n if (typeof v === \"function\") return \"[Function]\";\n if (typeof v === \"symbol\") return v.toString();\n if (v instanceof Error) return normalizeError(v);\n if (typeof v !== \"object\") return v;\n if (seen.has(v as object)) return \"[Circular]\";\n seen.add(v as object);\n if (Array.isArray(v)) return v.map(walk);\n const out: Record<string, unknown> = {};\n for (const [k, child] of Object.entries(v as Record<string, unknown>)) {\n out[k] = walk(child);\n }\n return out;\n };\n const result = walk(value);\n if (typeof result !== \"object\" || result === null || Array.isArray(result)) {\n return { value: result };\n }\n return result as Record<string, unknown>;\n}\n","// LogSink interface lives in @skaile/workspaces/types so consumers can type-check\n// sink instances without depending on core. Runtime errors live here.\nexport type { LogSink } from \"@skaile/workspaces/types\";\n\nexport class LogStoreDisabledError extends Error {\n constructor() {\n super(\"LogStore is disabled (mode=off); query is unavailable\");\n this.name = \"LogStoreDisabledError\";\n }\n}\n","import type { LogEntry, LogQuery, LogQueryResult } from \"@skaile/workspaces/types\";\nimport { type LogSink, LogStoreDisabledError } from \"./types.js\";\n\nexport class NoOpSink implements LogSink {\n write(_entry: LogEntry): void {}\n writeBatch(_entries: LogEntry[]): void {}\n query(_q: LogQuery): LogQueryResult {\n throw new LogStoreDisabledError();\n }\n close(): void {}\n}\n","import type { LogEntry, LogSource } from \"@skaile/workspaces/types\";\nimport {\n isStreamUsable,\n isUnwritableStreamError,\n markStreamBroken,\n type OutputStream,\n} from \"../stream-health.js\";\nimport type { LogSink } from \"./types.js\";\n\nexport type StdoutFormat = \"pretty\" | \"json\";\n\n/** Which standard stream the sink writes to. */\nexport type StdoutStream = \"stdout\" | \"stderr\";\n\nexport type { OutputStream };\n\nexport interface StdoutSinkOptions {\n format?: StdoutFormat;\n /**\n * Standard stream to write to. Default: `\"stdout\"`. Set to `\"stderr\"` for\n * processes whose stdout is a reserved channel — e.g. a stdio MCP server,\n * where stdout carries JSON-RPC and any log line would corrupt the protocol.\n * An explicit stream object may be passed instead; used by tests.\n */\n stream?: StdoutStream | OutputStream;\n}\n\nfunction formatSource(source: LogSource): string {\n const parts = [source.kind, source.subkind];\n if (source.instance) parts.push(source.instance);\n return `[${parts.join(\":\")}]`;\n}\n\nfunction formatTime(iso: string): string {\n // HH:MM:SS.sss\n return iso.slice(11, 23);\n}\n\nconst LEVEL_LABEL = {\n debug: \"DEBUG\",\n info: \"INFO \",\n warn: \"WARN \",\n error: \"ERROR\",\n} as const;\n\nexport class StdoutSink implements LogSink {\n private format: StdoutFormat;\n private stream: OutputStream;\n\n constructor(opts: StdoutSinkOptions = {}) {\n this.stream = resolveStream(opts.stream);\n this.format = opts.format ?? (this.stream.isTTY ? \"pretty\" : \"json\");\n }\n\n write(entry: LogEntry): void {\n if (!this.writable()) return;\n try {\n this.stream.write(`${this.render(entry)}\\n`);\n } catch (err) {\n // Sync throws (write-after-end, destroyed) never reach the `error` event.\n if (isUnwritableStreamError(err)) markStreamBroken(this.stream);\n }\n }\n\n writeBatch(entries: LogEntry[]): void {\n // `write` re-checks per entry, so a batch stops at the first failure.\n for (const e of entries) this.write(e);\n }\n\n close(): void {}\n\n /** False once the far end is gone; the sink then drops entries silently. */\n private writable(): boolean {\n return isStreamUsable(this.stream);\n }\n\n private render(entry: LogEntry): string {\n if (this.format === \"json\") {\n return JSON.stringify(entry);\n }\n const head = `${formatTime(entry.timestamp)} ${LEVEL_LABEL[entry.level]} ${formatSource(entry.source)}`;\n const tail = entry.message;\n const detail = entry.data ? `\\n > ${JSON.stringify(entry.data)}` : \"\";\n const err = entry.error ? `\\n ! ${entry.error.name}: ${entry.error.message}` : \"\";\n return `${head} ${tail}${detail}${err}`;\n }\n}\n\nfunction resolveStream(stream: StdoutSinkOptions[\"stream\"]): OutputStream {\n if (stream === \"stderr\") return process.stderr;\n if (stream === undefined || stream === \"stdout\") return process.stdout;\n return stream;\n}\n","import type { Logger, LogSource } from \"@skaile/workspaces/types\";\nimport { LogStore } from \"./log-store.js\";\nimport { normalizeError, sanitizeData } from \"./sanitize.js\";\nimport { NoOpSink } from \"./sinks/no-op-sink.js\";\nimport { StdoutSink } from \"./sinks/stdout-sink.js\";\n\n/**\n * The active LogStore is a process-singleton. It is stored on `globalThis`\n * under a `Symbol.for` key so it survives module duplication — under vitest's\n * `skaile-src` aliasing and the runner's lazy `import(\"@skaile/workspaces/runner\")`,\n * `core/logging` can be evaluated as two distinct module instances. A plain\n * module-scoped `let` would give each instance its own store, so a logger\n * created on one instance would not see a store registered on the other.\n * The `globalThis` slot makes the singleton genuinely process-wide.\n */\nconst ACTIVE_STORE_KEY = Symbol.for(\"@skaile/workspaces:logging:activeStore\");\n\ntype GlobalWithStore = typeof globalThis & {\n [ACTIVE_STORE_KEY]?: LogStore | null;\n};\n\nconst globalStoreSlot = globalThis as GlobalWithStore;\n\nexport function registerLogStore(store: LogStore): void {\n globalStoreSlot[ACTIVE_STORE_KEY] = store;\n}\n\nexport function getLogStore(): LogStore | null {\n return globalStoreSlot[ACTIVE_STORE_KEY] ?? null;\n}\n\nexport function resetLogStore(): void {\n globalStoreSlot[ACTIVE_STORE_KEY] = null;\n}\n\nexport interface CreateLoggerOptions {\n /**\n * When true (default), create + register a lazy off-mode LogStore if none\n * is registered. When false, throw if no store has been registered.\n */\n fallback?: boolean;\n}\n\nfunction ensureLogStore(): LogStore {\n const existing = globalStoreSlot[ACTIVE_STORE_KEY];\n if (existing) return existing;\n // Lazy off-mode fallback: NoOp + Stdout, no SQLite, no sessionId.\n const fallback = new LogStore({\n sessionId: \"no-session\",\n level: \"info\",\n sinks: [new NoOpSink(), new StdoutSink()],\n });\n globalStoreSlot[ACTIVE_STORE_KEY] = fallback;\n return fallback;\n}\n\n/**\n * Creates a logger for the given source.\n *\n * If no LogStore is registered and fallback is enabled (default), a lazy\n * off-mode fallback store (NoOp + Stdout) is created.\n *\n * @param source - The log source (e.g., { kind: 'agent', name: 'my-agent' })\n * @param opts - Configuration options for logger creation\n * @param opts.fallback - When true (default), creates a fallback store if none registered\n * @returns A logger instance\n * @throws {Error} When no LogStore is registered and fallback is false\n *\n * @example\n * ```typescript\n * const logger = createLogger({ kind: 'agent', name: 'my-agent' });\n * logger.info('Agent started');\n * ```\n */\nexport function createLogger(source: LogSource, opts: CreateLoggerOptions = {}): Logger {\n const fallback = opts.fallback !== false;\n if (!getLogStore() && !fallback) {\n throw new Error(\"createLogger: no LogStore registered. Call registerLogStore() first.\");\n }\n const store = ensureLogStore();\n return makeLogger(source, store);\n}\n\nfunction makeLogger(source: LogSource, store: LogStore): Logger {\n const emit = (\n level: \"debug\" | \"info\" | \"warn\" | \"error\",\n message: string,\n data?: object,\n err?: unknown,\n ) => {\n if (!store.isEnabled(level)) return;\n store.record({\n source,\n level,\n message,\n data: sanitizeData(data),\n error: normalizeError(err),\n });\n };\n return {\n debug(message, data) {\n emit(\"debug\", message, data);\n },\n info(message, data) {\n emit(\"info\", message, data);\n },\n warn(message, data) {\n emit(\"warn\", message, data);\n },\n error(message, err, data) {\n emit(\"error\", message, data, err);\n },\n child(partial) {\n return makeLogger({ ...source, ...partial }, store);\n },\n };\n}\n"]}
|
package/dist/flows-H6FL4NZU.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow } from './chunk-3YTFHHMI.js';
|
|
2
|
-
import './chunk-7IRJ4K4F.js';
|
|
3
|
-
import './chunk-R6O6YWU7.js';
|
|
4
|
-
import './chunk-X5YPJV4N.js';
|
|
5
|
-
import './chunk-7BUZQVRR.js';
|
|
6
|
-
import './chunk-JECDED7B.js';
|
|
7
|
-
import './chunk-4GY63JU6.js';
|
|
8
|
-
import './chunk-WILO77HE.js';
|
|
9
|
-
import './chunk-F3HNW354.js';
|
|
10
|
-
import './chunk-K5GBV4SA.js';
|
|
11
|
-
import './chunk-QVZA2MDT.js';
|
|
12
|
-
import './chunk-HO4UO25I.js';
|
|
13
|
-
import './chunk-MENCWIHW.js';
|
|
14
|
-
import './chunk-P4VHQA4N.js';
|
|
15
|
-
import './chunk-MKZOK4JU.js';
|
|
16
|
-
import './chunk-GEEW6SY2.js';
|
|
17
|
-
import './chunk-3HKYCT2M.js';
|
|
18
|
-
import './chunk-KSIRR5PL.js';
|
|
19
|
-
import './chunk-ILG4BXYE.js';
|
|
20
|
-
import './chunk-W4IPN3DD.js';
|
|
21
|
-
import './chunk-NSBPE2FW.js';
|
|
22
|
-
//# sourceMappingURL=flows-H6FL4NZU.js.map
|
|
23
|
-
//# sourceMappingURL=flows-H6FL4NZU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/commands/library-publish.ts"],"names":[],"mappings":"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","file":"library-publish-GXIWW7NW.js","sourcesContent":["/**\n * `skaile library publish / register / yank` — the first-party publish flow.\n * A git-backed library you own carries an in-repo `skaile.manifest.yaml`; this\n * commits + pushes the library repo (publish), or takes the current remote HEAD\n * as-is (register), then registers + syncs it as a store source and publishes\n * the manifest's assets under the manifest's own `publisher` (no namespace\n * remap — first-party authors intend their declared namespace).\n *\n * - `publish` = commit (if dirty) + push + register + sync + publish.\n * - `register` = same, but skip the commit/push (bytes already on GitHub).\n * - `yank` = unpublish the library's published assets (all, or one).\n *\n * The store REST surface is reached through the injectable {@link PublisherClient}\n * (default HTTP); git side-effects go through an injectable `spawn`. Both seams\n * keep the flow unit/integration-testable without a live store or a real remote.\n *\n * @docLink cli/commands/library\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { decodeSkaileManifest, type SkPublishManifest } from \"@skaile/workspaces/core\";\nimport type { GitBackendConfig, Library } from \"@skaile/workspaces/library\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\nimport { isStoreAuthenticated } from \"../store-client.ts\";\nimport { makeHttpPublisherClient, type PublisherClient } from \"../store-publisher.ts\";\nimport {\n bareName,\n formatNamespaceAvailability,\n preflightNamespace,\n publishToStore,\n refFor,\n} from \"./publish-core.ts\";\n\n/** Injectable spawn contract — the subset of `spawnSync` these helpers use. */\ntype SpawnLike = typeof spawnSync;\n\n/** The fixed filename a library carries at its root for publication. */\nconst MANIFEST_FILENAME = \"skaile.manifest.yaml\";\n\n/** The remote url of a git-backed library, or `undefined` for a local one. */\nfunction remoteUrlOf(lib: Library): string | undefined {\n if (lib.backend !== \"git\") return undefined;\n return (lib.backendConfig as GitBackendConfig).url;\n}\n\n/** The publish branch of a git-backed library (defaults to `main`). */\nfunction branchOf(lib: Library): string {\n if (lib.backend !== \"git\") return \"main\";\n return (lib.backendConfig as GitBackendConfig).branch ?? \"main\";\n}\n\n/**\n * Read + decode the in-repo `skaile.manifest.yaml`. Prints each error\n * diagnostic and exits (1) — mirroring the sidecar flow's validation gate.\n */\nfunction loadManifest(libPath: string): SkPublishManifest {\n let text: string;\n try {\n text = readFileSync(join(libPath, MANIFEST_FILENAME), \"utf-8\");\n } catch {\n logErr(\n `No ${S.dim(MANIFEST_FILENAME)} in the library — author it (see \\`skaile library create\\`) ` +\n \"and run `skaile validate` before publishing.\",\n );\n process.exit(1);\n }\n const { manifest, diagnostics } = decodeSkaileManifest(text);\n const errors = diagnostics.filter((d) => d.severity === \"error\");\n if (errors.length > 0) {\n for (const d of errors) logErr(`${d.code}: ${d.message}`);\n logErr(\"The manifest has errors — fix them with `skaile validate` before publishing.\");\n process.exit(1);\n }\n return manifest;\n}\n\n/** Run a git command in `cwd` via the injected spawn; returns the result. */\nfunction runGit(spawn: SpawnLike, cwd: string, args: string[]) {\n return spawn(\"git\", [\"-C\", cwd, ...args], { encoding: \"utf-8\" });\n}\n\n/**\n * Ensure `libPath` is a git repo whose `origin` points at `remoteUrl`, then\n * commit any changes and push to `branch`. Idempotent re-publish: an unchanged\n * tree makes `git commit` fail with \"nothing to commit\" — swallowed. Push (or\n * any other git) failures surface as thrown Errors carrying git's stderr.\n */\nfunction commitAndPush(opts: {\n libPath: string;\n remoteUrl: string;\n branch: string;\n spawn: SpawnLike;\n}): void {\n const { libPath, remoteUrl, branch, spawn } = opts;\n\n const gitDir = runGit(spawn, libPath, [\"rev-parse\", \"--git-dir\"]);\n if (gitDir.status !== 0) {\n const init = runGit(spawn, libPath, [\"init\"]);\n if (init.status !== 0) {\n throw new Error(\n `git init failed: ${(init.stderr ?? \"\").toString().trim() || `exit ${init.status}`}`,\n );\n }\n }\n\n // Point origin at the resolved remote (add if absent, else set-url).\n const getUrl = runGit(spawn, libPath, [\"remote\", \"get-url\", \"origin\"]);\n const originArgs =\n getUrl.status === 0\n ? [\"remote\", \"set-url\", \"origin\", remoteUrl]\n : [\"remote\", \"add\", \"origin\", remoteUrl];\n const setOrigin = runGit(spawn, libPath, originArgs);\n if (setOrigin.status !== 0) {\n throw new Error(\n `git remote failed: ${(setOrigin.stderr ?? \"\").toString().trim() || `exit ${setOrigin.status}`}`,\n );\n }\n\n const add = runGit(spawn, libPath, [\"add\", \"-A\"]);\n if (add.status !== 0) {\n throw new Error(\n `git add failed: ${(add.stderr ?? \"\").toString().trim() || `exit ${add.status}`}`,\n );\n }\n\n // Fixed bot identity via -c so the commit succeeds regardless of the author's\n // git config (the publish commit is a machine action).\n const commit = spawn(\n \"git\",\n [\n \"-C\",\n libPath,\n \"-c\",\n \"user.email=publish@skaile.store\",\n \"-c\",\n \"user.name=skaile\",\n \"commit\",\n \"-m\",\n \"chore: publish\",\n ],\n { encoding: \"utf-8\" },\n );\n if (commit.status !== 0) {\n const out = `${commit.stdout ?? \"\"}${commit.stderr ?? \"\"}`;\n if (!/nothing to commit/i.test(out)) {\n throw new Error(`git commit failed: ${out.trim() || `exit ${commit.status}`}`);\n }\n }\n\n const push = runGit(spawn, libPath, [\"push\", \"origin\", `HEAD:${branch}`]);\n if (push.status !== 0) {\n throw new Error(\n `git push failed: ${(push.stderr ?? \"\").toString().trim() || `exit ${push.status}`}`,\n );\n }\n}\n\n/**\n * Provision a public GitHub repo `github.com/<you>/<name>` via `gh` and return\n * its https url. Parses the url `gh` prints on success. Throws on failure.\n */\nfunction createRepoViaGh(name: string, spawn: SpawnLike): string {\n const res = spawn(\"gh\", [\"repo\", \"create\", name, \"--public\"], { encoding: \"utf-8\" });\n if (res.status !== 0) {\n const stderr = (res.stderr ?? \"\").toString().trim();\n throw new Error(`gh repo create ${name} failed: ${stderr || `exit ${res.status}`}`);\n }\n // `gh repo create` prints the repo url (e.g. `https://github.com/<owner>/<name>`);\n // scan combined output for the first github.com url so we capture whatever\n // owner gh resolved (the authed user).\n const out = `${res.stdout ?? \"\"}\\n${res.stderr ?? \"\"}`;\n const match = out.match(/https:\\/\\/github\\.com\\/[^\\s]+/);\n if (!match) {\n throw new Error(`gh repo create ${name} succeeded but printed no repo url:\\n${out.trim()}`);\n }\n return match[0].replace(/\\.git$/, \"\").trim();\n}\n\n/** Shared publish body for `publish` (pushes) and `register` (skips the push). */\nasync function publishLibrary(\n name: string,\n opts: {\n asset?: string;\n createRepo?: boolean;\n ref?: string;\n dryRun?: boolean;\n skipPush: boolean;\n },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n const injected = client !== undefined;\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const manifest = loadManifest(lib.path);\n\n // Resolve the remote: git-backed → its url; local + --create-repo → provision\n // and link; else stop with a hint.\n let remoteUrl = remoteUrlOf(lib);\n let wouldCreateRepo = false;\n if (!remoteUrl) {\n if (opts.createRepo) {\n if (opts.dryRun) {\n // A dry-run must not provision anything — defer the real\n // `gh repo create` to the live run and just show the would-be remote.\n wouldCreateRepo = true;\n remoteUrl = `https://github.com/<your-account>/${lib.name}`;\n } else {\n remoteUrl = createRepoViaGh(lib.name, spawn);\n await manager.updateLibrary(name, {\n backend: \"git\",\n backendConfig: { url: remoteUrl, branch: \"main\", authHint: \"ssh\" },\n });\n logOk(`Created + linked ${S.dim(remoteUrl)}.`);\n }\n } else {\n logErr(\n `Library \"${name}\" has no remote — run ${S.cmd(`skaile library link ${name} <url>`)} ` +\n \"first, or pass `--create-repo` to provision a public repo.\",\n );\n process.exit(1);\n }\n }\n\n // The manifest's own publisher is the namespace (first-party — no remap).\n const namespace = manifest.publisher ?? \"<manifest publisher>\";\n const targetName = opts.asset ? bareName(opts.asset) : undefined;\n const wouldBeRefs = (manifest.assets ?? [])\n .filter((a) => !targetName || a.name === targetName)\n .map((a) => refFor(a.kind, namespace, a.name, a.version ?? manifest.version));\n\n const sourceRef = opts.ref ?? branchOf(lib);\n\n if (opts.dryRun) {\n logInfo(`Publish plan for ${S.bold(name)}:`);\n logInfo(\n ` remote: ${remoteUrl}${wouldCreateRepo ? \" (would be created via `gh repo create --public`)\" : \"\"}`,\n );\n logInfo(` publisher: ${namespace}`);\n // Best-effort namespace-availability probe — a read-only GET, only when\n // signed in (or a client is injected). A failure keeps dry-run offline-safe.\n if (manifest.publisher && (injected || isStoreAuthenticated())) {\n try {\n const avail = await (client ?? makeHttpPublisherClient()).namespaceAvailability(\n manifest.publisher,\n );\n logInfo(` namespace: ${formatNamespaceAvailability(avail)}`);\n } catch {\n // Store unreachable / not signed in — skip the advisory, never fail.\n }\n }\n logInfo(` source ref: ${sourceRef}`);\n logInfo(` would publish ${wouldBeRefs.length} asset(s):`);\n for (const r of wouldBeRefs) logInfo(` ${r}`);\n return;\n }\n\n // A real publish makes store calls, so it needs a token (injected fakes bypass).\n if (!injected && !isStoreAuthenticated()) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n const pub = client ?? makeHttpPublisherClient();\n\n // Preflight the namespace BEFORE the public git push, so a reserved/unclaimed\n // namespace fails fast with guidance instead of after publishing bytes.\n if (manifest.publisher) {\n const gate = await preflightNamespace(pub, manifest.publisher);\n if (!gate.ok) {\n logErr(gate.message ?? `Cannot publish under @${manifest.publisher}.`);\n process.exit(1);\n }\n }\n\n // publish commits + pushes the library repo; register takes the remote HEAD as-is.\n if (!opts.skipPush) {\n // `git add -A` stages every non-ignored file → a PUBLIC push. Surface it so\n // an unexpected file in the working tree is not silently published.\n logInfo(\n `Committing the library and pushing to the PUBLIC remote ${S.dim(remoteUrl)} ` +\n \"(.gitignore honored; anything else in the working tree becomes public).\",\n );\n commitAndPush({ libPath: lib.path, remoteUrl, branch: branchOf(lib), spawn });\n logOk(`Pushed ${S.dim(name)} to ${S.dim(remoteUrl)}.`);\n }\n\n const { published } = await publishToStore({\n sourceUrl: remoteUrl,\n ref: sourceRef,\n manifest,\n assetName: targetName,\n client: pub,\n });\n\n if (published.length > 0) {\n logInfo(`Consumers can now \\`skaile add ${published[0]}\\`.`);\n }\n } finally {\n close();\n }\n}\n\n/**\n * `skaile library publish <lib>` — commit + push the library repo, register +\n * sync it as a store source, and publish its manifest's assets under the\n * manifest publisher. See the module header for the full flow.\n */\nexport async function runLibraryPublish(\n name: string,\n opts: { asset?: string; createRepo?: boolean; ref?: string; dryRun?: boolean },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n await publishLibrary(name, { ...opts, skipPush: false }, client, spawn);\n}\n\n/**\n * `skaile library register <lib>` — same as publish but skips the commit/push\n * (the bytes are already on GitHub at the current remote HEAD). Still requires a\n * git-backed remote.\n */\nexport async function runLibraryRegister(\n name: string,\n opts: { asset?: string; ref?: string; dryRun?: boolean },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n await publishLibrary(name, { ...opts, skipPush: true }, client, spawn);\n}\n\n/**\n * `skaile library yank <lib>` — unpublish the library's published assets from\n * the store (all, or the single asset matching `opts.asset`'s name).\n * Auth-gated like publish.\n */\nexport async function runLibraryYank(\n name: string,\n opts: { asset?: string },\n client?: PublisherClient,\n): Promise<void> {\n const injected = client !== undefined;\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const remoteUrl = remoteUrlOf(lib);\n if (!remoteUrl) {\n logErr(`Library \"${name}\" has no remote — nothing published to yank.`);\n process.exit(1);\n }\n\n if (!injected && !isStoreAuthenticated()) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n const pub = client ?? makeHttpPublisherClient();\n const rows = await pub.sourcesList();\n const source = rows.find((r) => r.url === remoteUrl);\n if (!source) {\n logErr(`Library \"${name}\" is not registered in the store — nothing to yank.`);\n process.exit(1);\n }\n\n const targetName = opts.asset ? bareName(opts.asset) : undefined;\n const candidates = (await pub.sourceCandidates(source.id)).filter(\n (c) => c.published && (!targetName || c.name === targetName),\n );\n if (candidates.length === 0) {\n logInfo(\"No published assets matched — nothing to yank.\");\n return;\n }\n\n const yanked: string[] = [];\n for (const c of candidates) {\n try {\n await pub.assetUnpublish(c.id);\n yanked.push(`${c.kind}:${c.name}`);\n } catch (err) {\n logErr(\n `Failed to yank ${c.kind}:${c.name}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n logOk(`Yanked ${yanked.length} asset(s):`);\n for (const r of yanked) logInfo(` ${r}`);\n } finally {\n close();\n }\n}\n"]}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export { LocalCatalogDisabledError, openCatalogSource, openLibrary, openLibraryManager, resolveCatalogSource } from './chunk-OE2OMMOX.js';
|
|
2
|
-
import './chunk-LFW2SH54.js';
|
|
3
|
-
import './chunk-O3DHAGBO.js';
|
|
4
|
-
import './chunk-REYJKU7T.js';
|
|
5
|
-
import './chunk-ELPR5XBG.js';
|
|
6
|
-
import './chunk-CSS3HHQ6.js';
|
|
7
|
-
import './chunk-A3X4LDOD.js';
|
|
8
|
-
import './chunk-M5H4DWIA.js';
|
|
9
|
-
import './chunk-UKJMQZV6.js';
|
|
10
|
-
import './chunk-R7FOF242.js';
|
|
11
|
-
import './chunk-JXT46QFC.js';
|
|
12
|
-
import './chunk-CJXSTOGW.js';
|
|
13
|
-
import './chunk-CGYEHQOX.js';
|
|
14
|
-
import './chunk-JECDED7B.js';
|
|
15
|
-
import './chunk-4GY63JU6.js';
|
|
16
|
-
import './chunk-WILO77HE.js';
|
|
17
|
-
import './chunk-F3HNW354.js';
|
|
18
|
-
import './chunk-K5GBV4SA.js';
|
|
19
|
-
import './chunk-QVZA2MDT.js';
|
|
20
|
-
import './chunk-HO4UO25I.js';
|
|
21
|
-
import './chunk-MENCWIHW.js';
|
|
22
|
-
import './chunk-P4VHQA4N.js';
|
|
23
|
-
import './chunk-MKZOK4JU.js';
|
|
24
|
-
import './chunk-GEEW6SY2.js';
|
|
25
|
-
import './chunk-3HKYCT2M.js';
|
|
26
|
-
import './chunk-KSIRR5PL.js';
|
|
27
|
-
import './chunk-ILG4BXYE.js';
|
|
28
|
-
import './chunk-W4IPN3DD.js';
|
|
29
|
-
import './chunk-KTBKW2FI.js';
|
|
30
|
-
import './chunk-UQ6LFBPZ.js';
|
|
31
|
-
import './chunk-DKCFWSVW.js';
|
|
32
|
-
import './chunk-N7B3LZ7V.js';
|
|
33
|
-
import './chunk-NSBPE2FW.js';
|
|
34
|
-
//# sourceMappingURL=open-library-OOP3UQUP.js.map
|
|
35
|
-
//# sourceMappingURL=open-library-OOP3UQUP.js.map
|
package/dist/paths-RL6NZW5X.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export { AI_RESOURCES, MONOREPO_ROOT } from './chunk-UXUDNBJM.js';
|
|
2
|
-
export { aiResourceRoots } from './chunk-JECDED7B.js';
|
|
3
|
-
import './chunk-4GY63JU6.js';
|
|
4
|
-
import './chunk-WILO77HE.js';
|
|
5
|
-
import './chunk-F3HNW354.js';
|
|
6
|
-
import './chunk-K5GBV4SA.js';
|
|
7
|
-
import './chunk-QVZA2MDT.js';
|
|
8
|
-
import './chunk-HO4UO25I.js';
|
|
9
|
-
import './chunk-MENCWIHW.js';
|
|
10
|
-
import './chunk-P4VHQA4N.js';
|
|
11
|
-
import './chunk-MKZOK4JU.js';
|
|
12
|
-
import './chunk-GEEW6SY2.js';
|
|
13
|
-
import './chunk-3HKYCT2M.js';
|
|
14
|
-
import './chunk-KSIRR5PL.js';
|
|
15
|
-
import './chunk-ILG4BXYE.js';
|
|
16
|
-
import './chunk-W4IPN3DD.js';
|
|
17
|
-
import './chunk-NSBPE2FW.js';
|
|
18
|
-
//# sourceMappingURL=paths-RL6NZW5X.js.map
|
|
19
|
-
//# sourceMappingURL=paths-RL6NZW5X.js.map
|
package/dist/skills-Y6MU2NRI.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export { skillCheckRequirements, skillGetPreamble, skillList, skillListDomains, skillSearch, skillShow } from './chunk-FAI2SMFE.js';
|
|
2
|
-
import './chunk-7IRJ4K4F.js';
|
|
3
|
-
import './chunk-X5YPJV4N.js';
|
|
4
|
-
import './chunk-3XXQPHGL.js';
|
|
5
|
-
import './chunk-7BUZQVRR.js';
|
|
6
|
-
import './chunk-JECDED7B.js';
|
|
7
|
-
import './chunk-4GY63JU6.js';
|
|
8
|
-
import './chunk-WILO77HE.js';
|
|
9
|
-
import './chunk-F3HNW354.js';
|
|
10
|
-
import './chunk-K5GBV4SA.js';
|
|
11
|
-
import './chunk-QVZA2MDT.js';
|
|
12
|
-
import './chunk-HO4UO25I.js';
|
|
13
|
-
import './chunk-MENCWIHW.js';
|
|
14
|
-
import './chunk-P4VHQA4N.js';
|
|
15
|
-
import './chunk-MKZOK4JU.js';
|
|
16
|
-
import './chunk-GEEW6SY2.js';
|
|
17
|
-
import './chunk-3HKYCT2M.js';
|
|
18
|
-
import './chunk-KSIRR5PL.js';
|
|
19
|
-
import './chunk-ILG4BXYE.js';
|
|
20
|
-
import './chunk-W4IPN3DD.js';
|
|
21
|
-
import './chunk-NSBPE2FW.js';
|
|
22
|
-
//# sourceMappingURL=skills-Y6MU2NRI.js.map
|
|
23
|
-
//# sourceMappingURL=skills-Y6MU2NRI.js.map
|
package/dist/source-LOGTGPGJ.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export { autoSyncForSearch, ensureClone, findCacheKeyCollision, indexingHadFailures, legacySourceConfigHint, makeSourceCommand, normalizeSourceUrl, readProjectSources, sourceClonePath, sourceMatchesKey, syncProjectSources } from './chunk-5D5MCO4L.js';
|
|
2
|
-
import './chunk-OE2OMMOX.js';
|
|
3
|
-
import './chunk-LFW2SH54.js';
|
|
4
|
-
import './chunk-O3DHAGBO.js';
|
|
5
|
-
import './chunk-REYJKU7T.js';
|
|
6
|
-
import './chunk-ELPR5XBG.js';
|
|
7
|
-
import './chunk-CSS3HHQ6.js';
|
|
8
|
-
import './chunk-A3X4LDOD.js';
|
|
9
|
-
import './chunk-M5H4DWIA.js';
|
|
10
|
-
import './chunk-UKJMQZV6.js';
|
|
11
|
-
import './chunk-R7FOF242.js';
|
|
12
|
-
import './chunk-JXT46QFC.js';
|
|
13
|
-
import './chunk-CJXSTOGW.js';
|
|
14
|
-
import './chunk-CGYEHQOX.js';
|
|
15
|
-
import './chunk-JECDED7B.js';
|
|
16
|
-
import './chunk-4GY63JU6.js';
|
|
17
|
-
import './chunk-WILO77HE.js';
|
|
18
|
-
import './chunk-F3HNW354.js';
|
|
19
|
-
import './chunk-K5GBV4SA.js';
|
|
20
|
-
import './chunk-QVZA2MDT.js';
|
|
21
|
-
import './chunk-HO4UO25I.js';
|
|
22
|
-
import './chunk-MENCWIHW.js';
|
|
23
|
-
import './chunk-P4VHQA4N.js';
|
|
24
|
-
import './chunk-MKZOK4JU.js';
|
|
25
|
-
import './chunk-GEEW6SY2.js';
|
|
26
|
-
import './chunk-3HKYCT2M.js';
|
|
27
|
-
import './chunk-KSIRR5PL.js';
|
|
28
|
-
import './chunk-ILG4BXYE.js';
|
|
29
|
-
import './chunk-W4IPN3DD.js';
|
|
30
|
-
import './chunk-KTBKW2FI.js';
|
|
31
|
-
import './chunk-UQ6LFBPZ.js';
|
|
32
|
-
import './chunk-DKCFWSVW.js';
|
|
33
|
-
import './chunk-N7B3LZ7V.js';
|
|
34
|
-
import './chunk-NSBPE2FW.js';
|
|
35
|
-
//# sourceMappingURL=source-LOGTGPGJ.js.map
|
|
36
|
-
//# sourceMappingURL=source-LOGTGPGJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/commands/source-manifest-publish.ts"],"names":[],"mappings":"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","file":"source-manifest-publish-PH2XMOLW.js","sourcesContent":["/**\n * `skaile source manifest publish` / `yank` — the curator-publish flow. Takes a\n * locally-curated sidecar manifest (over a foreign public GitHub repo) and:\n *\n * 1. Pushes the curated `skaile.manifest.yaml` to the curator's OWN public\n * \"sidecar\" repo (bytes stay in the foreign source; the sidecar holds only\n * the manifest pointing at it).\n * 2. Registers the foreign source + the sidecar (url + pinned commit) with the\n * store, syncs it, and publishes each curated asset.\n *\n * `yank` is the inverse: unpublish each currently-published asset of the source.\n *\n * The store REST surface is reached through the injectable {@link PublisherClient}\n * (default HTTP client); git side-effects go through an injectable `spawn`. Both\n * seams keep the pure helpers + orchestration unit/integration-testable without a\n * live store or a real remote.\n *\n * @docLink cli/commands/source#manifest-publish\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport {\n decodeSkaileManifest,\n encodeSkaileManifest,\n type SkPublishManifest,\n sourceCacheKey,\n} from \"@skaile/workspaces/core\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { makeHttpPublisherClient, type PublisherClient } from \"../store-publisher.ts\";\nimport { isStoreAuthenticated } from \"../store-client.ts\";\nimport { bareName, publishToStore, refFor } from \"./publish-core.ts\";\nimport { sourceClonePath } from \"./source.ts\";\nimport { resolveSourceArg } from \"./source-manifest.ts\";\n\n/** The fixed filename a sidecar repo carries at its root. */\nconst SIDECAR_MANIFEST_FILENAME = \"skaile.manifest.yaml\";\n\n/** Injectable spawn contract — the subset of `spawnSync` these helpers use. */\ntype SpawnLike = typeof spawnSync;\n\n/**\n * Return a copy of `manifest` normalized for publication under `namespace`:\n * the top-level `publisher` is set to `namespace` and every per-asset\n * `publisher` override is removed so all assets inherit the top-level one.\n * Pure — the input is not mutated.\n */\nexport function normalizePublishedManifest(\n manifest: SkPublishManifest,\n namespace: string,\n): SkPublishManifest {\n const assets = (manifest.assets ?? []).map((a) => {\n const { publisher: _drop, ...rest } = a;\n return rest;\n });\n return { ...manifest, publisher: namespace, assets };\n}\n\n// ── Sidecar-repo association (~/.skaile/settings.json) ────────────────────────\n\n/**\n * Path to the user settings file — the same `~/.skaile/settings.json` the store\n * client reads tokens from. Resolves the `.skaile` root exactly as `getStoreRoot`\n * does (`SKAILE_HOME` when set — it IS the `.skaile` dir — else `~/.skaile`), so\n * the sidecar association lives beside the store manifests under one convention\n * and tests isolate through the same `SKAILE_HOME` seam.\n */\nfunction settingsFile(): string {\n const root = process.env.SKAILE_HOME ?? join(homedir(), \".skaile\");\n return join(root, \"settings.json\");\n}\n\nfunction readSettings(): Record<string, any> {\n const file = settingsFile();\n if (!existsSync(file)) return {};\n try {\n return JSON.parse(readFileSync(file, \"utf-8\"));\n } catch {\n return {};\n }\n}\n\n/**\n * The sidecar repo URL previously associated with a source `slug`, if any.\n * Reads `settings.sidecarRepos?.[slug]?.repo`.\n */\nexport function getSidecarRepo(slug: string): string | undefined {\n const settings = readSettings();\n return settings.sidecarRepos?.[slug]?.repo;\n}\n\n/**\n * Persist the sidecar repo URL for a source `slug`, preserving every other\n * settings key. Stored as an object (`{ repo }`) so a `path` (or other fields)\n * can be added later without a schema migration.\n */\nexport function saveSidecarRepo(slug: string, repo: string): void {\n const file = settingsFile();\n mkdirSync(dirname(file), { recursive: true });\n const settings = readSettings();\n const sidecarRepos = { ...(settings.sidecarRepos ?? {}) };\n sidecarRepos[slug] = { ...(sidecarRepos[slug] ?? {}), repo };\n settings.sidecarRepos = sidecarRepos;\n writeFileSync(file, JSON.stringify(settings, null, 2), \"utf-8\");\n}\n\n// ── Sidecar push ──────────────────────────────────────────────────────────────\n\n/**\n * Run a git command in `cwd` via the injected spawn, throwing with the captured\n * stderr on failure. Returns trimmed stdout.\n */\nfunction git(spawn: SpawnLike, cwd: string, args: string[]): string {\n const res = spawn(\"git\", [\"-C\", cwd, ...args], { encoding: \"utf-8\" });\n if (res.status !== 0) {\n const stderr = (res.stderr ?? \"\").toString().trim();\n throw new Error(`git ${args.join(\" \")} failed: ${stderr || `exit ${res.status}`}`);\n }\n return (res.stdout ?? \"\").toString().trim();\n}\n\n/**\n * Clone the curator's sidecar repo, write the curated manifest at its root, and\n * commit + push. Returns the pushed commit sha (used to pin the store source).\n *\n * Idempotent re-publish: when the manifest is unchanged `git commit` fails with\n * \"nothing to commit\" — we swallow that and return the current HEAD so a no-op\n * re-run still yields a valid pin. Any push/auth failure surfaces as a thrown\n * Error carrying git's stderr.\n */\nexport function pushSidecarManifest(opts: {\n sidecarRepoUrl: string;\n manifestText: string;\n spawn?: SpawnLike;\n}): { commitSha: string } {\n const spawn = opts.spawn ?? spawnSync;\n // Dedicated dir next to the source clone cache; wipe any stale clone first so\n // a re-publish always starts from a clean shallow checkout of the remote.\n const cloneDir = `${sourceClonePath(sourceCacheKey(opts.sidecarRepoUrl))}-sidecar-push`;\n rmSync(cloneDir, { recursive: true, force: true });\n mkdirSync(dirname(cloneDir), { recursive: true });\n\n // The clone is scratch — always remove it afterwards (success or failure) so a\n // failed push never leaves a stale checkout in the cache dir.\n try {\n const cloneRes = spawn(\"git\", [\"clone\", \"--depth\", \"1\", opts.sidecarRepoUrl, cloneDir], {\n encoding: \"utf-8\",\n });\n if (cloneRes.status !== 0) {\n const stderr = (cloneRes.stderr ?? \"\").toString().trim();\n throw new Error(\n `git clone ${opts.sidecarRepoUrl} failed: ${stderr || `exit ${cloneRes.status}`}`,\n );\n }\n\n writeFileSync(join(cloneDir, SIDECAR_MANIFEST_FILENAME), opts.manifestText, \"utf-8\");\n git(spawn, cloneDir, [\"add\", SIDECAR_MANIFEST_FILENAME]);\n\n // Fixed bot identity via -c so the commit succeeds regardless of the curator's\n // git config (the sidecar push is a machine action, not authored work).\n const commitRes = spawn(\n \"git\",\n [\n \"-C\",\n cloneDir,\n \"-c\",\n \"user.email=publish@skaile.store\",\n \"-c\",\n \"user.name=skaile\",\n \"commit\",\n \"-m\",\n \"chore(sidecar): publish curated manifest\",\n ],\n { encoding: \"utf-8\" },\n );\n if (commitRes.status !== 0) {\n const out = `${commitRes.stdout ?? \"\"}${commitRes.stderr ?? \"\"}`;\n // Nothing changed → idempotent re-publish; keep the existing HEAD.\n if (!/nothing to commit/i.test(out)) {\n throw new Error(`git commit failed: ${out.trim() || `exit ${commitRes.status}`}`);\n }\n } else {\n // `push origin HEAD` (not a bare `push`) so a fresh sidecar repo with an\n // unborn/renamed default branch still gets its branch created on the remote.\n git(spawn, cloneDir, [\"push\", \"origin\", \"HEAD\"]);\n }\n\n return { commitSha: git(spawn, cloneDir, [\"rev-parse\", \"HEAD\"]) };\n } finally {\n rmSync(cloneDir, { recursive: true, force: true });\n }\n}\n\n// ── Orchestration ───────────────────────────────────────────────────────────\n\n/**\n * `source manifest publish <src>` — publish a curated sidecar manifest to the\n * store. See the module header for the full flow. Store calls go through\n * `client` (default HTTP); git side-effects through `spawn` (default\n * `spawnSync`). The auth gate is enforced only for the default HTTP client so\n * injected fakes bypass it.\n */\nexport async function runPublish(\n arg: string,\n opts: {\n projectDir: string;\n as?: string;\n sidecarRepo?: string;\n ref?: string;\n dryRun?: boolean;\n },\n client?: PublisherClient,\n spawn: SpawnLike = spawnSync,\n): Promise<void> {\n const injected = client !== undefined;\n const pub = client ?? makeHttpPublisherClient();\n\n const { url, slug, manifestFile } = resolveSourceArg(arg, opts.projectDir);\n\n if (!existsSync(manifestFile)) {\n logErr(\n `No curated manifest for \"${slug}\" at ${S.dim(manifestFile)} — ` +\n \"run `skaile source manifest init` first.\",\n );\n process.exit(1);\n }\n\n const { manifest, diagnostics } = decodeSkaileManifest(readFileSync(manifestFile, \"utf-8\"));\n if (diagnostics.some((d) => d.severity === \"error\")) {\n for (const d of diagnostics.filter((x) => x.severity === \"error\")) {\n logErr(`${d.code}: ${d.message}`);\n }\n logErr(\n \"The curated manifest has errors — fix them with `skaile source manifest edit` / \" +\n \"`verify` before publishing.\",\n );\n process.exit(1);\n }\n\n // A real publish makes store calls (+ `me()` when `--as` is omitted), so it\n // needs a token. `--dry-run` is an offline preview: never gate it on auth.\n const authed = injected || isStoreAuthenticated();\n if (!opts.dryRun && !authed) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n // Namespace: `--as` wins; else the caller's verified identity. Prefer the\n // GitHub handle (`githubLogin`) over the store login (`username`) — for a user\n // whose login differs from their GitHub handle the login namespace may be\n // reserved (matches the CLI's `resolveLibraryPublisher` precedence). In an\n // unauthenticated dry-run we cannot call `me()`, so show a placeholder.\n let namespace: string;\n if (opts.as) namespace = opts.as;\n else if (authed) {\n const me = await pub.me();\n // `||` not `??`: an empty-string githubLogin (partially-connected account) is\n // not a usable namespace — fall back to the login rather than publish under \"\".\n namespace = me.githubLogin || me.username;\n } else namespace = \"<your store username>\";\n\n const normalized = normalizePublishedManifest(manifest, namespace);\n const publishedText = encodeSkaileManifest(normalized);\n\n const wouldBeRefs = (normalized.assets ?? []).map((a) =>\n refFor(a.kind, namespace, a.name, a.version ?? normalized.version),\n );\n\n if (opts.dryRun) {\n const sidecar = opts.sidecarRepo ?? getSidecarRepo(slug) ?? \"<none — pass --sidecar-repo>\";\n logInfo(`Publish plan for ${S.bold(slug)}:`);\n logInfo(` namespace: ${namespace}`);\n logInfo(` sidecar repo: ${sidecar}`);\n logInfo(` source ref: ${opts.ref ?? \"main\"}`);\n logInfo(` would publish ${wouldBeRefs.length} asset(s):`);\n for (const r of wouldBeRefs) logInfo(` ${r}`);\n return;\n }\n\n const sidecarRepoUrl = opts.sidecarRepo ?? getSidecarRepo(slug);\n if (!sidecarRepoUrl) {\n logErr(\n \"No sidecar repo associated with this source. Pass \" +\n `${S.cmd(\"--sidecar-repo https://github.com/<you>/<repo>\")} — it must be a ` +\n \"PUBLIC GitHub repo you own; the curated manifest is committed there and the \" +\n \"store pins to that commit.\",\n );\n process.exit(1);\n }\n if (opts.sidecarRepo) saveSidecarRepo(slug, sidecarRepoUrl);\n\n const { commitSha } = pushSidecarManifest({ sidecarRepoUrl, manifestText: publishedText, spawn });\n logOk(`Pushed curated manifest to ${S.dim(sidecarRepoUrl)} @ ${commitSha.slice(0, 10)}.`);\n\n // The FOREIGN repo's ref to ingest (branch/sha). Defaults to `main`.\n const sourceRef = opts.ref ?? \"main\";\n\n const { published } = await publishToStore({\n sourceUrl: url,\n ref: sourceRef,\n sidecar: { url: sidecarRepoUrl, ref: commitSha },\n manifest: normalized,\n client: pub,\n });\n\n if (published.length > 0) {\n logInfo(`Consumers can now install them with \\`skaile add ${published[0]}\\`.`);\n }\n}\n\n/**\n * `source manifest yank <src>` — unpublish the source's published assets (all,\n * or the single asset matching `opts.asset`'s name). Auth-gated like publish.\n */\nexport async function runYank(\n arg: string,\n opts: { projectDir: string; asset?: string },\n client?: PublisherClient,\n): Promise<void> {\n const injected = client !== undefined;\n const pub = client ?? makeHttpPublisherClient();\n\n const { url, slug } = resolveSourceArg(arg, opts.projectDir);\n\n if (!injected && !isStoreAuthenticated()) {\n logErr(\"Not signed in — run `skaile store login` first.\");\n process.exit(1);\n }\n\n const rows = await pub.sourcesList();\n const source = rows.find((r) => r.url === url);\n if (!source) {\n logErr(`Source \"${slug}\" is not registered in the store — nothing to yank.`);\n process.exit(1);\n }\n\n // Optionally narrow to a single asset by name (accept a bare name or a ref).\n const targetName = opts.asset ? bareName(opts.asset) : undefined;\n const candidates = (await pub.sourceCandidates(source.id)).filter(\n (c) => c.published && (!targetName || c.name === targetName),\n );\n if (candidates.length === 0) {\n logWarn(\"No published assets matched — nothing to yank.\");\n return;\n }\n\n const yanked: string[] = [];\n for (const c of candidates) {\n try {\n await pub.assetUnpublish(c.id);\n yanked.push(`${c.kind}:${c.name}`);\n } catch (err) {\n logWarn(\n `Failed to yank ${c.kind}:${c.name}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n logOk(`Yanked ${yanked.length} asset(s):`);\n for (const r of yanked) logInfo(` ${r}`);\n}\n"]}
|