@skaile/workspaces 3.15.0 → 3.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/dist/{asset-feeds-XSUE5LE6.js → asset-feeds-TS76HDGE.js} +11 -11
- package/dist/{asset-feeds-XSUE5LE6.js.map → asset-feeds-TS76HDGE.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +7 -7
- package/dist/asset-manager/index.js +10 -10
- package/dist/asset-manager/installer.js +7 -7
- package/dist/bridge/drivers/claude-sdk.js +8 -8
- package/dist/bridge/drivers/codex.js +3 -3
- package/dist/bridge/drivers/continue.js +4 -4
- package/dist/bridge/drivers/echo.js +3 -3
- package/dist/bridge/drivers/gemini.js +5 -5
- package/dist/bridge/drivers/goose.js +4 -4
- package/dist/bridge/drivers/omp.js +3 -3
- package/dist/bridge/drivers/opencode.js +4 -4
- package/dist/bridge/drivers/qwen.js +5 -5
- package/dist/bridge/index.js +9 -9
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/{chunk-RUFTB7QN.js → chunk-3NCGSSCU.js} +3 -3
- package/dist/{chunk-RUFTB7QN.js.map → chunk-3NCGSSCU.js.map} +1 -1
- package/dist/{chunk-4VTBZ2MF.js → chunk-3XXQPHGL.js} +4 -4
- package/dist/{chunk-4VTBZ2MF.js.map → chunk-3XXQPHGL.js.map} +1 -1
- package/dist/{chunk-LAOS2TZU.js → chunk-4J24AU4Q.js} +8 -8
- package/dist/{chunk-LAOS2TZU.js.map → chunk-4J24AU4Q.js.map} +1 -1
- package/dist/{chunk-DTSKPMP3.js → chunk-5FCBPIOK.js} +9 -5
- package/dist/chunk-5FCBPIOK.js.map +1 -0
- package/dist/{chunk-3UU3D2Q3.js → chunk-5KSIVLOX.js} +5 -5
- package/dist/{chunk-3UU3D2Q3.js.map → chunk-5KSIVLOX.js.map} +1 -1
- package/dist/{chunk-FYLIY6TO.js → chunk-6KPCHQP5.js} +3 -3
- package/dist/{chunk-FYLIY6TO.js.map → chunk-6KPCHQP5.js.map} +1 -1
- package/dist/{chunk-LVZ5NGME.js → chunk-775OMGVP.js} +3 -3
- package/dist/{chunk-LVZ5NGME.js.map → chunk-775OMGVP.js.map} +1 -1
- package/dist/{chunk-GHWJHOYX.js → chunk-7BUZQVRR.js} +4 -4
- package/dist/{chunk-GHWJHOYX.js.map → chunk-7BUZQVRR.js.map} +1 -1
- package/dist/{chunk-JAHHMZWG.js → chunk-7IRJ4K4F.js} +3 -3
- package/dist/{chunk-JAHHMZWG.js.map → chunk-7IRJ4K4F.js.map} +1 -1
- package/dist/{chunk-QZ6XXD3A.js → chunk-BQMRUH7J.js} +3 -3
- package/dist/{chunk-QZ6XXD3A.js.map → chunk-BQMRUH7J.js.map} +1 -1
- package/dist/{chunk-O52DU5KU.js → chunk-BUKPS4YL.js} +3 -3
- package/dist/{chunk-O52DU5KU.js.map → chunk-BUKPS4YL.js.map} +1 -1
- package/dist/{chunk-Q7KWJO4J.js → chunk-C4AP3XZB.js} +5 -5
- package/dist/{chunk-Q7KWJO4J.js.map → chunk-C4AP3XZB.js.map} +1 -1
- package/dist/{chunk-F2WTSHZS.js → chunk-CIPK5JMJ.js} +4 -4
- package/dist/{chunk-F2WTSHZS.js.map → chunk-CIPK5JMJ.js.map} +1 -1
- package/dist/{chunk-PPKK5EV6.js → chunk-DZ4UZOFB.js} +3 -3
- package/dist/{chunk-PPKK5EV6.js.map → chunk-DZ4UZOFB.js.map} +1 -1
- package/dist/{chunk-6YDXCJGK.js → chunk-EVQDXN27.js} +3 -3
- package/dist/{chunk-6YDXCJGK.js.map → chunk-EVQDXN27.js.map} +1 -1
- package/dist/{chunk-G2CXWUO5.js → chunk-FAI2SMFE.js} +4 -4
- package/dist/{chunk-G2CXWUO5.js.map → chunk-FAI2SMFE.js.map} +1 -1
- package/dist/{chunk-5Q7HA4JP.js → chunk-FTG7CRFD.js} +3 -3
- package/dist/{chunk-5Q7HA4JP.js.map → chunk-FTG7CRFD.js.map} +1 -1
- package/dist/{chunk-FI4QNNMD.js → chunk-GP2AYOC2.js} +8 -8
- package/dist/{chunk-FI4QNNMD.js.map → chunk-GP2AYOC2.js.map} +1 -1
- package/dist/{chunk-VQ4P7UYE.js → chunk-MKZOK4JU.js} +3 -3
- package/dist/{chunk-VQ4P7UYE.js.map → chunk-MKZOK4JU.js.map} +1 -1
- package/dist/{chunk-Z5ED4E57.js → chunk-NIUG3MIH.js} +3 -3
- package/dist/{chunk-Z5ED4E57.js.map → chunk-NIUG3MIH.js.map} +1 -1
- package/dist/{chunk-5WMFU575.js → chunk-OEK2ACRR.js} +116 -29
- package/dist/chunk-OEK2ACRR.js.map +1 -0
- package/dist/{chunk-4OQ2HQCQ.js → chunk-OGTS7QJX.js} +4 -4
- package/dist/{chunk-4OQ2HQCQ.js.map → chunk-OGTS7QJX.js.map} +1 -1
- package/dist/{chunk-SH572OBN.js → chunk-OIDFK7SG.js} +4 -4
- package/dist/{chunk-SH572OBN.js.map → chunk-OIDFK7SG.js.map} +1 -1
- package/dist/{chunk-IP3GXHOB.js → chunk-OZ7UNMTK.js} +3 -3
- package/dist/{chunk-IP3GXHOB.js.map → chunk-OZ7UNMTK.js.map} +1 -1
- package/dist/{chunk-CWTL2QWL.js → chunk-PCDNZROC.js} +7 -7
- package/dist/{chunk-CWTL2QWL.js.map → chunk-PCDNZROC.js.map} +1 -1
- package/dist/{chunk-VFPFW67T.js → chunk-QA52GQQN.js} +10 -10
- package/dist/{chunk-VFPFW67T.js.map → chunk-QA52GQQN.js.map} +1 -1
- package/dist/{chunk-TMAGWRKY.js → chunk-QG6C3XOS.js} +6 -6
- package/dist/{chunk-TMAGWRKY.js.map → chunk-QG6C3XOS.js.map} +1 -1
- package/dist/{chunk-3DNCPQAR.js → chunk-RTM4SFLA.js} +9 -3
- package/dist/chunk-RTM4SFLA.js.map +1 -0
- package/dist/{chunk-X5EYJEEQ.js → chunk-S4UA244H.js} +4 -4
- package/dist/{chunk-X5EYJEEQ.js.map → chunk-S4UA244H.js.map} +1 -1
- package/dist/{chunk-WE7ONZNB.js → chunk-SUPIVTLX.js} +3 -3
- package/dist/{chunk-WE7ONZNB.js.map → chunk-SUPIVTLX.js.map} +1 -1
- package/dist/{chunk-DWO2N72K.js → chunk-U2UNQBXB.js} +4 -4
- package/dist/{chunk-DWO2N72K.js.map → chunk-U2UNQBXB.js.map} +1 -1
- package/dist/{chunk-MTCLDJPR.js → chunk-VC2MWHRH.js} +9 -9
- package/dist/{chunk-MTCLDJPR.js.map → chunk-VC2MWHRH.js.map} +1 -1
- package/dist/{chunk-3A5IKBHQ.js → chunk-W4IPN3DD.js} +61 -8
- package/dist/chunk-W4IPN3DD.js.map +1 -0
- package/dist/{chunk-M5D2QNTY.js → chunk-ZNCZ7RUO.js} +3 -3
- package/dist/{chunk-M5D2QNTY.js.map → chunk-ZNCZ7RUO.js.map} +1 -1
- package/dist/cli/index.js +56 -52
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/connectors/config.js +7 -7
- package/dist/connectors/index.js +12 -12
- package/dist/core/index.js +6 -6
- package/dist/core/logging.js +2 -2
- package/dist/core/manifest.js +2 -2
- package/dist/core/runtime-assets.js +4 -4
- package/dist/core/src/logging/index.d.ts +2 -0
- package/dist/core/src/logging/index.d.ts.map +1 -1
- package/dist/core/src/logging/log-store.d.ts.map +1 -1
- package/dist/core/src/logging/sinks/stdout-sink.d.ts +6 -1
- package/dist/core/src/logging/sinks/stdout-sink.d.ts.map +1 -1
- package/dist/core/src/logging/stream-health.d.ts +46 -0
- package/dist/core/src/logging/stream-health.d.ts.map +1 -0
- package/dist/core/workspace-config.js +3 -3
- package/dist/deploy/index.js +8 -7
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/src/targets/process-handle.d.ts.map +1 -1
- package/dist/discovery/index.js +3 -3
- package/dist/{ensure-sources-SFQT5GXY.js → ensure-sources-I2F6XBDJ.js} +13 -13
- package/dist/{ensure-sources-SFQT5GXY.js.map → ensure-sources-I2F6XBDJ.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +12 -12
- package/dist/factory-assets/connectors/deploy.js +12 -12
- package/dist/factory-assets/connectors/devserver.js +12 -12
- package/dist/factory-assets/connectors/flow/adapter.js +12 -12
- package/dist/factory-assets/connectors/flow/engine.js +7 -7
- package/dist/factory-assets/connectors/flow/run-flow.js +14 -14
- package/dist/factory-assets/connectors/flow.js +12 -12
- package/dist/factory-assets/connectors/git.js +12 -12
- package/dist/factory-assets/connectors/gmail.js +12 -12
- package/dist/factory-assets/connectors/googledrive.js +12 -12
- package/dist/factory-assets/connectors/local.js +12 -12
- package/dist/factory-assets/connectors/mattermost.js +12 -12
- package/dist/factory-assets/connectors/memory.js +12 -12
- package/dist/factory-assets/connectors/minio.js +12 -12
- package/dist/factory-assets/connectors/postgres.js +12 -12
- package/dist/factory-assets/connectors/s3.js +12 -12
- package/dist/factory-assets/connectors/sharepoint.js +12 -12
- package/dist/factory-assets/connectors/sqlite.js +12 -12
- package/dist/factory-assets/connectors/static-server.js +12 -12
- package/dist/factory-assets/connectors/tunnel.js +12 -12
- package/dist/factory-assets/connectors/webdav.js +12 -12
- package/dist/factory-assets/connectors/xstate-store.js +12 -12
- package/dist/factory-assets/connectors/xstate.js +12 -12
- package/dist/flows-2SUFOVVO.js +20 -0
- package/dist/{flows-Z3DM5BHF.js.map → flows-2SUFOVVO.js.map} +1 -1
- package/dist/{helpers-VRQXNHFR.js → helpers-Y66CM6LO.js} +13 -13
- package/dist/{helpers-VRQXNHFR.js.map → helpers-Y66CM6LO.js.map} +1 -1
- package/dist/library/index.js +8 -8
- package/dist/library/install.js +6 -6
- package/dist/{library-publish-DV3B2ITY.js → library-publish-SNUOWBUD.js} +17 -17
- package/dist/{library-publish-DV3B2ITY.js.map → library-publish-SNUOWBUD.js.map} +1 -1
- package/dist/{open-library-2BXBAC6Q.js → open-library-IO4TSO2H.js} +15 -15
- package/dist/{open-library-2BXBAC6Q.js.map → open-library-IO4TSO2H.js.map} +1 -1
- package/dist/paths-4APA2PKT.js +16 -0
- package/dist/{paths-AI7MDPNA.js.map → paths-4APA2PKT.js.map} +1 -1
- package/dist/{plugin-store-OO5EZBYP.js → plugin-store-JQAIKR3R.js} +8 -8
- package/dist/{plugin-store-OO5EZBYP.js.map → plugin-store-JQAIKR3R.js.map} +1 -1
- package/dist/{project-2TYDMEZB.js → project-OR524CQ3.js} +14 -14
- package/dist/{project-2TYDMEZB.js.map → project-OR524CQ3.js.map} +1 -1
- package/dist/resolver/index.js +7 -7
- package/dist/runner/index.js +17 -17
- package/dist/runner/src/process-safety-net.d.ts +61 -0
- package/dist/runner/src/process-safety-net.d.ts.map +1 -0
- package/dist/runner/src/serve.d.ts +10 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +10 -10
- package/dist/sdk/bridge.js +9 -9
- package/dist/sdk/core.js +6 -6
- package/dist/sdk/flow.js +7 -7
- package/dist/sdk/index.js +17 -17
- package/dist/sdk/resolver.js +7 -7
- package/dist/sdk/runner.js +17 -17
- package/dist/sdk/store.js +1 -1
- package/dist/{setup-EH4TZFMN.js → setup-5OG442AZ.js} +11 -11
- package/dist/{setup-EH4TZFMN.js.map → setup-5OG442AZ.js.map} +1 -1
- package/dist/skills-Q7PJVB3W.js +20 -0
- package/dist/{skills-XZOG6ZPX.js.map → skills-Q7PJVB3W.js.map} +1 -1
- package/dist/{source-PVTUMNAO.js → source-DTV7VK3C.js} +16 -16
- package/dist/{source-PVTUMNAO.js.map → source-DTV7VK3C.js.map} +1 -1
- package/dist/{source-manifest-publish-3XYTUVQQ.js → source-manifest-publish-HC3K7D63.js} +18 -18
- package/dist/{source-manifest-publish-3XYTUVQQ.js.map → source-manifest-publish-HC3K7D63.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/store.d.ts.map +1 -1
- package/dist/tui/index.js +17 -17
- package/dist/workspace-plugin/adapters/mcp.js +11 -11
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-3A5IKBHQ.js.map +0 -1
- package/dist/chunk-3DNCPQAR.js.map +0 -1
- package/dist/chunk-5WMFU575.js.map +0 -1
- package/dist/chunk-DTSKPMP3.js.map +0 -1
- package/dist/flows-Z3DM5BHF.js +0 -20
- package/dist/paths-AI7MDPNA.js +0 -16
- package/dist/skills-XZOG6ZPX.js +0 -20
|
@@ -1,7 +1,38 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import { ulid } from 'ulid';
|
|
3
3
|
|
|
4
|
-
// core/src/logging/
|
|
4
|
+
// core/src/logging/stream-health.ts
|
|
5
|
+
function codeOf(err) {
|
|
6
|
+
if (typeof err !== "object" || err === null) return void 0;
|
|
7
|
+
const code = err.code;
|
|
8
|
+
return typeof code === "string" ? code : void 0;
|
|
9
|
+
}
|
|
10
|
+
function isBrokenPipeError(err) {
|
|
11
|
+
return codeOf(err) === "EPIPE";
|
|
12
|
+
}
|
|
13
|
+
var UNWRITABLE_CODES = /* @__PURE__ */ new Set([
|
|
14
|
+
"EPIPE",
|
|
15
|
+
"EBADF",
|
|
16
|
+
"ERR_STREAM_DESTROYED",
|
|
17
|
+
"ERR_STREAM_WRITE_AFTER_END"
|
|
18
|
+
]);
|
|
19
|
+
function isUnwritableStreamError(err) {
|
|
20
|
+
const code = codeOf(err);
|
|
21
|
+
return code !== void 0 && UNWRITABLE_CODES.has(code);
|
|
22
|
+
}
|
|
23
|
+
function isStreamOpen(stream) {
|
|
24
|
+
return stream.destroyed !== true && stream.writableEnded !== true;
|
|
25
|
+
}
|
|
26
|
+
var brokenStreams = /* @__PURE__ */ new WeakSet();
|
|
27
|
+
function markStreamBroken(stream) {
|
|
28
|
+
brokenStreams.add(stream);
|
|
29
|
+
}
|
|
30
|
+
function __resetBrokenStreams() {
|
|
31
|
+
brokenStreams = /* @__PURE__ */ new WeakSet();
|
|
32
|
+
}
|
|
33
|
+
function isStreamUsable(stream) {
|
|
34
|
+
return !brokenStreams.has(stream) && isStreamOpen(stream);
|
|
35
|
+
}
|
|
5
36
|
var LEVEL_RANK = {
|
|
6
37
|
debug: 10,
|
|
7
38
|
info: 20,
|
|
@@ -116,12 +147,20 @@ var LogStore = class {
|
|
|
116
147
|
try {
|
|
117
148
|
sink.writeBatch(batch);
|
|
118
149
|
} catch (err) {
|
|
119
|
-
|
|
120
|
-
`);
|
|
150
|
+
reportSinkFailure(err);
|
|
121
151
|
}
|
|
122
152
|
}
|
|
123
153
|
}
|
|
124
154
|
};
|
|
155
|
+
function reportSinkFailure(err) {
|
|
156
|
+
if (!isStreamUsable(process.stderr)) return;
|
|
157
|
+
try {
|
|
158
|
+
process.stderr.write(`LogStore sink write failed: ${String(err)}
|
|
159
|
+
`);
|
|
160
|
+
} catch (writeErr) {
|
|
161
|
+
if (isUnwritableStreamError(writeErr)) markStreamBroken(process.stderr);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
125
164
|
|
|
126
165
|
// core/src/logging/sanitize.ts
|
|
127
166
|
function normalizeError(value) {
|
|
@@ -208,18 +247,27 @@ var StdoutSink = class {
|
|
|
208
247
|
format;
|
|
209
248
|
stream;
|
|
210
249
|
constructor(opts = {}) {
|
|
211
|
-
this.stream = opts.stream
|
|
250
|
+
this.stream = resolveStream(opts.stream);
|
|
212
251
|
this.format = opts.format ?? (this.stream.isTTY ? "pretty" : "json");
|
|
213
252
|
}
|
|
214
253
|
write(entry) {
|
|
215
|
-
|
|
254
|
+
if (!this.writable()) return;
|
|
255
|
+
try {
|
|
256
|
+
this.stream.write(`${this.render(entry)}
|
|
216
257
|
`);
|
|
258
|
+
} catch (err) {
|
|
259
|
+
if (isUnwritableStreamError(err)) markStreamBroken(this.stream);
|
|
260
|
+
}
|
|
217
261
|
}
|
|
218
262
|
writeBatch(entries) {
|
|
219
263
|
for (const e of entries) this.write(e);
|
|
220
264
|
}
|
|
221
265
|
close() {
|
|
222
266
|
}
|
|
267
|
+
/** False once the far end is gone; the sink then drops entries silently. */
|
|
268
|
+
writable() {
|
|
269
|
+
return isStreamUsable(this.stream);
|
|
270
|
+
}
|
|
223
271
|
render(entry) {
|
|
224
272
|
if (this.format === "json") {
|
|
225
273
|
return JSON.stringify(entry);
|
|
@@ -233,6 +281,11 @@ var StdoutSink = class {
|
|
|
233
281
|
return `${head} ${tail}${detail}${err}`;
|
|
234
282
|
}
|
|
235
283
|
};
|
|
284
|
+
function resolveStream(stream) {
|
|
285
|
+
if (stream === "stderr") return process.stderr;
|
|
286
|
+
if (stream === void 0 || stream === "stdout") return process.stdout;
|
|
287
|
+
return stream;
|
|
288
|
+
}
|
|
236
289
|
|
|
237
290
|
// core/src/logging/create-logger.ts
|
|
238
291
|
var ACTIVE_STORE_KEY = /* @__PURE__ */ Symbol.for("@skaile/workspaces:logging:activeStore");
|
|
@@ -295,6 +348,6 @@ function makeLogger(source, store) {
|
|
|
295
348
|
};
|
|
296
349
|
}
|
|
297
350
|
|
|
298
|
-
export { LogStore, LogStoreDisabledError, NoOpSink, StdoutSink, createLogger, getLogStore, normalizeError, registerLogStore, resetLogStore, sanitizeData };
|
|
299
|
-
//# sourceMappingURL=chunk-
|
|
300
|
-
//# sourceMappingURL=chunk-
|
|
351
|
+
export { LogStore, LogStoreDisabledError, NoOpSink, StdoutSink, __resetBrokenStreams, createLogger, getLogStore, isBrokenPipeError, isStreamOpen, isStreamUsable, isUnwritableStreamError, markStreamBroken, normalizeError, registerLogStore, resetLogStore, sanitizeData };
|
|
352
|
+
//# sourceMappingURL=chunk-W4IPN3DD.js.map
|
|
353
|
+
//# sourceMappingURL=chunk-W4IPN3DD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { factoryAssetRoots } from './chunk-
|
|
1
|
+
import { factoryAssetRoots } from './chunk-OIDFK7SG.js';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import path from 'path';
|
|
@@ -19,5 +19,5 @@ var MONOREPO_ROOT = findMonorepoRoot(__ownDir);
|
|
|
19
19
|
var AI_RESOURCES = factoryAssetRoots()[0] ?? path.join(os.homedir(), ".skaile", "libraries");
|
|
20
20
|
|
|
21
21
|
export { AI_RESOURCES, MONOREPO_ROOT };
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
22
|
+
//# sourceMappingURL=chunk-ZNCZ7RUO.js.map
|
|
23
|
+
//# sourceMappingURL=chunk-ZNCZ7RUO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/paths.ts"],"names":[],"mappings":";;;;;;AAgBA,IAAM,WAAW,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAW5D,SAAS,iBAAiB,IAAA,EAA6B;AACrD,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,EAAA,CAAG,WAAW,IAAA,CAAK,IAAA,CAAK,KAAK,YAAY,CAAC,GAAG,OAAO,GAAA;AACxD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAYO,IAAM,aAAA,GAA+B,iBAAiB,QAAQ;AAc9D,IAAM,YAAA,GACX,iBAAA,EAAkB,CAAE,CAAC,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,OAAA,EAAQ,EAAG,SAAA,EAAW,WAAW","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../cli/src/paths.ts"],"names":[],"mappings":";;;;;;AAgBA,IAAM,WAAW,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAW5D,SAAS,iBAAiB,IAAA,EAA6B;AACrD,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,EAAA,CAAG,WAAW,IAAA,CAAK,IAAA,CAAK,KAAK,YAAY,CAAC,GAAG,OAAO,GAAA;AACxD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AACA,EAAA,OAAO,IAAA;AACT;AAYO,IAAM,aAAA,GAA+B,iBAAiB,QAAQ;AAc9D,IAAM,YAAA,GACX,iBAAA,EAAkB,CAAE,CAAC,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,OAAA,EAAQ,EAAG,SAAA,EAAW,WAAW","file":"chunk-ZNCZ7RUO.js","sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { factoryAssetRoots } from \"@skaile/workspaces/core\";\n\n/**\n * The content-root policy lives in `@skaile/workspaces/core` so the flow\n * connector's resolution surfaces can reach it too — `factory-assets → cli`\n * would be a module cycle. Re-exported here because this module is the CLI's\n * documented path surface and every CLI caller imports it from here.\n *\n * @docLink cli/dev-guide#paths\n */\nexport { aiResourceRoots } from \"@skaile/workspaces/core\";\n\nconst __ownDir = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Walk up from `from` looking for the monorepo marker (`biome.json`, the\n * repo-root shared tooling config). Returns the matching directory or `null`\n * when none is found within eight levels — the latter is the typical case when\n * `@skaile/workspaces` has been installed via `npm i` without a skaile-dev\n * workspace context. Used only to gate dev-only commands (e.g.\n * `serve --compile-test`); first-party content is located via\n * {@link aiResourceRoots}, not this.\n */\nfunction findMonorepoRoot(from: string): string | null {\n let dir = from;\n for (let i = 0; i < 8; i++) {\n if (fs.existsSync(path.join(dir, \"biome.json\"))) return dir;\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\n/**\n * Absolute path to the monorepo root, or `null` when the CLI is running\n * outside the skaile-dev workspace (typical for `npm i -g` installs).\n *\n * Consumers that only make sense inside the workspace (e.g.\n * `skaile serve --compile-test`) MUST check for `null` and report a\n * \"monorepo-only feature\" error before proceeding.\n *\n * @docLink cli/dev-guide#paths\n */\nexport const MONOREPO_ROOT: string | null = findMonorepoRoot(__ownDir);\n\n/**\n * Default content root used by path display and the `validate` command.\n *\n * The primary first-party `factory-assets/` root resolved through the shared\n * `factoryAssetRoots()` helper — the `SKAILE_FACTORY_ASSETS_DIR` override when\n * set, else the in-repo source during dev / bundled `dist/factory-assets/` after\n * `npm i`. Falls back to `~/.skaile/libraries/` — the user-library directory\n * managed by `skaile library add` — when the package cannot be located.\n * Consumers `fs.existsSync` first and degrade to \"no skills / flows discovered\".\n *\n * @docLink cli/dev-guide#paths\n */\nexport const AI_RESOURCES: string =\n factoryAssetRoots()[0] ?? path.join(os.homedir(), \".skaile\", \"libraries\");\n"]}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportInstalledSoftDeps } from '../chunk-
|
|
3
|
-
import { makeSourceCommand, syncProjectSources } from '../chunk-
|
|
4
|
-
import { AI_RESOURCES } from '../chunk-
|
|
5
|
-
import { getStoreConfig, storeFetch, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, isStoreAuthenticated, getStoreToken, getStoreIdentity } from '../chunk-
|
|
6
|
-
import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-
|
|
7
|
-
import { logErr, S, logOk, logInfo, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, logWarn, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth } from '../chunk-
|
|
2
|
+
import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportInstalledSoftDeps } from '../chunk-PCDNZROC.js';
|
|
3
|
+
import { makeSourceCommand, syncProjectSources } from '../chunk-QA52GQQN.js';
|
|
4
|
+
import { AI_RESOURCES } from '../chunk-ZNCZ7RUO.js';
|
|
5
|
+
import { getStoreConfig, storeFetch, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, isStoreAuthenticated, getStoreToken, getStoreIdentity } from '../chunk-SUPIVTLX.js';
|
|
6
|
+
import { openCatalogSource, openLibraryManager, createFullRegistry, openLibrary } from '../chunk-QG6C3XOS.js';
|
|
7
|
+
import { logErr, S, logOk, logInfo, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, logWarn, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth } from '../chunk-775OMGVP.js';
|
|
8
8
|
import { LocalSecretsProvider } from '../chunk-6BEGKO2Q.js';
|
|
9
|
-
import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-
|
|
10
|
-
import { buildClaudePluginFiles } from '../chunk-
|
|
9
|
+
import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-OEK2ACRR.js';
|
|
10
|
+
import { buildClaudePluginFiles } from '../chunk-EVQDXN27.js';
|
|
11
11
|
import '../chunk-X5YPJV4N.js';
|
|
12
12
|
import '../chunk-W3UDISS2.js';
|
|
13
13
|
import '../chunk-O7SG5PC2.js';
|
|
@@ -15,47 +15,47 @@ import '../chunk-7QBNJTTQ.js';
|
|
|
15
15
|
import '../chunk-GTS2FODO.js';
|
|
16
16
|
import '../chunk-WQ7DE5UC.js';
|
|
17
17
|
import '../chunk-32NA4TVC.js';
|
|
18
|
-
import { runFlow, resumeFlow } from '../chunk-
|
|
18
|
+
import { runFlow, resumeFlow } from '../chunk-4J24AU4Q.js';
|
|
19
19
|
import '../chunk-4R6DROGN.js';
|
|
20
|
-
import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-
|
|
21
|
-
import '../chunk-
|
|
20
|
+
import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-3XXQPHGL.js';
|
|
21
|
+
import '../chunk-7BUZQVRR.js';
|
|
22
22
|
import '../chunk-NC5YXVZF.js';
|
|
23
|
-
import '../chunk-
|
|
24
|
-
import '../chunk-
|
|
25
|
-
import '../chunk-
|
|
26
|
-
import '../chunk-
|
|
23
|
+
import '../chunk-VC2MWHRH.js';
|
|
24
|
+
import '../chunk-5KSIVLOX.js';
|
|
25
|
+
import '../chunk-5FCBPIOK.js';
|
|
26
|
+
import '../chunk-3NCGSSCU.js';
|
|
27
27
|
import '../chunk-RRVQAE5D.js';
|
|
28
28
|
import '../chunk-GURXUF2J.js';
|
|
29
29
|
import '../chunk-GAH4YRCI.js';
|
|
30
|
-
import '../chunk-
|
|
30
|
+
import '../chunk-NIUG3MIH.js';
|
|
31
31
|
import '../chunk-6E6PKKAD.js';
|
|
32
32
|
import '../chunk-IFGTRL2I.js';
|
|
33
|
-
import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-
|
|
33
|
+
import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-BQMRUH7J.js';
|
|
34
34
|
import '../chunk-AXEOG4B5.js';
|
|
35
35
|
import '../chunk-HY6CIKFH.js';
|
|
36
36
|
import '../chunk-2D5BYAL6.js';
|
|
37
37
|
import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, flowSkillVersionPins } from '../chunk-ELPR5XBG.js';
|
|
38
38
|
import '../chunk-2KBA5OO2.js';
|
|
39
|
-
import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError, parseRefTolerant, normalizeRepoUrl, FACTORY_SOURCE_URL } from '../chunk-
|
|
40
|
-
import { getStoreManifestsDir, getDefaultValue, isSecretPlaceholder } from '../chunk-
|
|
41
|
-
import '../chunk-
|
|
39
|
+
import { AssetManager, NON_DEPLOYABLE_KINDS, MissingManifestError, parseRefTolerant, normalizeRepoUrl, FACTORY_SOURCE_URL } from '../chunk-GP2AYOC2.js';
|
|
40
|
+
import { getStoreManifestsDir, getDefaultValue, isSecretPlaceholder } from '../chunk-C4AP3XZB.js';
|
|
41
|
+
import '../chunk-DZ4UZOFB.js';
|
|
42
42
|
import '../chunk-UKJMQZV6.js';
|
|
43
43
|
import '../chunk-R7FOF242.js';
|
|
44
44
|
import '../chunk-JXT46QFC.js';
|
|
45
|
-
import '../chunk-
|
|
45
|
+
import '../chunk-S4UA244H.js';
|
|
46
46
|
import '../chunk-CGYEHQOX.js';
|
|
47
|
-
import { resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, aiResourceRoots, readLock } from '../chunk-
|
|
47
|
+
import { resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, aiResourceRoots, readLock } from '../chunk-CIPK5JMJ.js';
|
|
48
48
|
import '../chunk-F3HNW354.js';
|
|
49
49
|
import { DRIVER_DEFAULTS } from '../chunk-K5GBV4SA.js';
|
|
50
50
|
import { detectDomains, assetSearchDirs } from '../chunk-QVZA2MDT.js';
|
|
51
|
-
import { factoryAssetRoots } from '../chunk-
|
|
52
|
-
import { globalCacheRoot, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, matchPin, coerceVersion, loadSkWorkspaceConfig, resolveSkWorkspaceConfig, storeManifestSlug } from '../chunk-
|
|
51
|
+
import { factoryAssetRoots } from '../chunk-OIDFK7SG.js';
|
|
52
|
+
import { globalCacheRoot, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, matchPin, coerceVersion, loadSkWorkspaceConfig, resolveSkWorkspaceConfig, storeManifestSlug } from '../chunk-OZ7UNMTK.js';
|
|
53
53
|
import { SUPPORTED_DRIVER_TARGETS } from '../chunk-MENCWIHW.js';
|
|
54
54
|
import { SKAILE_MANIFEST_FILENAME, decodeSkaileManifest, loadSkPublishManifest, saveSkPublishManifest } from '../chunk-P4VHQA4N.js';
|
|
55
|
-
import { parseFrontmatter, scanDirectory } from '../chunk-
|
|
55
|
+
import { parseFrontmatter, scanDirectory } from '../chunk-MKZOK4JU.js';
|
|
56
56
|
import { parseAssetRef, ASSET_KINDS, isValidAssetName, slugifyAssetName, ASSET_NAME_HINT, assetRefToStr } from '../chunk-GEEW6SY2.js';
|
|
57
|
-
import { openSqlite } from '../chunk-
|
|
58
|
-
import '../chunk-
|
|
57
|
+
import { openSqlite } from '../chunk-FTG7CRFD.js';
|
|
58
|
+
import '../chunk-W4IPN3DD.js';
|
|
59
59
|
import '../chunk-KTBKW2FI.js';
|
|
60
60
|
import '../chunk-UQ6LFBPZ.js';
|
|
61
61
|
import '../chunk-DVSASEGO.js';
|
|
@@ -111,7 +111,7 @@ async function runSearch(kind, query, opts) {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
async function searchIndex(query, kind) {
|
|
114
|
-
const { openLibrary: openLibrary2 } = await import('../open-library-
|
|
114
|
+
const { openLibrary: openLibrary2 } = await import('../open-library-IO4TSO2H.js');
|
|
115
115
|
const library = await openLibrary2();
|
|
116
116
|
try {
|
|
117
117
|
const defs = await library.listAssetDefs(kind ? { kind } : {});
|
|
@@ -164,7 +164,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
|
|
|
164
164
|
const factory = await searchFactory(projectDir, query, kind);
|
|
165
165
|
let entries = unionEntries(await searchIndex(query, kind), factory);
|
|
166
166
|
if (entries.length === 0 && !query && !kind && !airGapped) {
|
|
167
|
-
const { autoSyncForSearch } = await import('../source-
|
|
167
|
+
const { autoSyncForSearch } = await import('../source-DTV7VK3C.js');
|
|
168
168
|
if (await autoSyncForSearch(projectDir)) {
|
|
169
169
|
entries = unionEntries(await searchIndex(query, kind), factory);
|
|
170
170
|
}
|
|
@@ -218,7 +218,7 @@ async function searchStore(query, kind, opts, airGapped) {
|
|
|
218
218
|
logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
|
|
219
219
|
return;
|
|
220
220
|
}
|
|
221
|
-
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-
|
|
221
|
+
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-IO4TSO2H.js');
|
|
222
222
|
try {
|
|
223
223
|
const remote = await openCatalogSource2({ projectDir: path35__default.resolve(opts.projectDir) });
|
|
224
224
|
const assets = await remote.listAssets(kind ? { kind } : {});
|
|
@@ -533,7 +533,7 @@ async function resolveInfoEntry(am2, ref, opts) {
|
|
|
533
533
|
return { entry: match ?? deployed };
|
|
534
534
|
}
|
|
535
535
|
const lookup = opts.storeLookup ?? (async (filter) => {
|
|
536
|
-
const { resolveCatalogSource } = await import('../open-library-
|
|
536
|
+
const { resolveCatalogSource } = await import('../open-library-IO4TSO2H.js');
|
|
537
537
|
const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
|
|
538
538
|
try {
|
|
539
539
|
return await source.listAssets(filter);
|
|
@@ -549,7 +549,7 @@ async function resolveInfoEntry(am2, ref, opts) {
|
|
|
549
549
|
);
|
|
550
550
|
return { entry: hit ? catalogAssetToEntry(hit) : null };
|
|
551
551
|
} catch (err) {
|
|
552
|
-
const { LocalCatalogDisabledError } = await import('../open-library-
|
|
552
|
+
const { LocalCatalogDisabledError } = await import('../open-library-IO4TSO2H.js');
|
|
553
553
|
const storeNote = err instanceof Error ? err.message : String(err);
|
|
554
554
|
const disabled = err instanceof LocalCatalogDisabledError || /catalog\.url/i.test(storeNote);
|
|
555
555
|
return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
|
|
@@ -1169,7 +1169,7 @@ function makeCatalogCommand() {
|
|
|
1169
1169
|
return catalog;
|
|
1170
1170
|
}
|
|
1171
1171
|
async function runLocalCatalogTest(projectDir) {
|
|
1172
|
-
const { resolveCatalogSource } = await import('../open-library-
|
|
1172
|
+
const { resolveCatalogSource } = await import('../open-library-IO4TSO2H.js');
|
|
1173
1173
|
let resolved;
|
|
1174
1174
|
try {
|
|
1175
1175
|
resolved = await resolveCatalogSource({ projectDir });
|
|
@@ -2153,7 +2153,7 @@ async function ensureTargetsRegistered(projectDir) {
|
|
|
2153
2153
|
const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
|
|
2154
2154
|
const config = resolveSkWorkspaceConfig2(projectDir);
|
|
2155
2155
|
if (config.plugins && config.plugins.length > 0) {
|
|
2156
|
-
const { ensurePluginsLoaded } = await import('../plugin-store-
|
|
2156
|
+
const { ensurePluginsLoaded } = await import('../plugin-store-JQAIKR3R.js');
|
|
2157
2157
|
const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
|
|
2158
2158
|
for (const f of result.failed) logWarn(f.error);
|
|
2159
2159
|
}
|
|
@@ -3408,16 +3408,16 @@ function makeLibraryCommand() {
|
|
|
3408
3408
|
});
|
|
3409
3409
|
cmd.command("publish <lib>").description("Push + register the library's manifest atomically (needs git backend)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--create-repo", "Provision + link a public github repo if the library has no remote").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; push nothing and call no store endpoint").action(
|
|
3410
3410
|
async (lib, opts) => {
|
|
3411
|
-
const { runLibraryPublish } = await import('../library-publish-
|
|
3411
|
+
const { runLibraryPublish } = await import('../library-publish-SNUOWBUD.js');
|
|
3412
3412
|
await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
|
|
3413
3413
|
}
|
|
3414
3414
|
);
|
|
3415
3415
|
cmd.command("register <lib>").description("Register the library's manifest without pushing (bytes already on github)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; call no store endpoint").action(async (lib, opts) => {
|
|
3416
|
-
const { runLibraryRegister } = await import('../library-publish-
|
|
3416
|
+
const { runLibraryRegister } = await import('../library-publish-SNUOWBUD.js');
|
|
3417
3417
|
await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
|
|
3418
3418
|
});
|
|
3419
3419
|
cmd.command("yank <lib>").description("Retract the library's published assets from the store").option("--asset <ref>", "Yank only the single asset matching this ref/name").action(async (lib, opts) => {
|
|
3420
|
-
const { runLibraryYank } = await import('../library-publish-
|
|
3420
|
+
const { runLibraryYank } = await import('../library-publish-SNUOWBUD.js');
|
|
3421
3421
|
await withStoreErrorHandling(() => runLibraryYank(lib, opts));
|
|
3422
3422
|
});
|
|
3423
3423
|
return cmd;
|
|
@@ -4139,7 +4139,7 @@ function scheduleSoftDepPreview() {
|
|
|
4139
4139
|
}
|
|
4140
4140
|
async function loadAssets() {
|
|
4141
4141
|
softDepPreviewCache.clear();
|
|
4142
|
-
const { gatherAssetFeeds } = await import('../asset-feeds-
|
|
4142
|
+
const { gatherAssetFeeds } = await import('../asset-feeds-TS76HDGE.js');
|
|
4143
4143
|
const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);
|
|
4144
4144
|
if (notes.length > 0) {
|
|
4145
4145
|
state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
|
|
@@ -4345,7 +4345,7 @@ function reconcileCollapsedSets(rows) {
|
|
|
4345
4345
|
async function loadSourcesAndLibraries() {
|
|
4346
4346
|
try {
|
|
4347
4347
|
const [{ openLibraryManager: openLibraryManager2 }, { skaileHomeDir }, { getGlobalCacheDir: getGlobalCacheDir2 }] = await Promise.all([
|
|
4348
|
-
import('../open-library-
|
|
4348
|
+
import('../open-library-IO4TSO2H.js'),
|
|
4349
4349
|
import('../library/index.js'),
|
|
4350
4350
|
import('../core/index.js')
|
|
4351
4351
|
]);
|
|
@@ -5634,7 +5634,7 @@ function action2(fn) {
|
|
|
5634
5634
|
};
|
|
5635
5635
|
}
|
|
5636
5636
|
async function reconcileAndReport(projectDir, plugins) {
|
|
5637
|
-
const { reconcilePlugins } = await import('../plugin-store-
|
|
5637
|
+
const { reconcilePlugins } = await import('../plugin-store-JQAIKR3R.js');
|
|
5638
5638
|
if (plugins.length === 0) {
|
|
5639
5639
|
logInfo("No plugins declared \u2014 nothing to reconcile.");
|
|
5640
5640
|
return;
|
|
@@ -5650,7 +5650,7 @@ async function reconcileAndReport(projectDir, plugins) {
|
|
|
5650
5650
|
async function runInstall2(spec, opts) {
|
|
5651
5651
|
const projectDir = path35__default.resolve(opts.projectDir);
|
|
5652
5652
|
const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
|
|
5653
|
-
const { specName } = await import('../plugin-store-
|
|
5653
|
+
const { specName } = await import('../plugin-store-JQAIKR3R.js');
|
|
5654
5654
|
const yamlPath = path35__default.join(projectDir, "skaile.yaml");
|
|
5655
5655
|
const editor = WorkspaceYamlEditor2.load(yamlPath);
|
|
5656
5656
|
const replaced = editor.addPlugin(spec, specName);
|
|
@@ -5662,7 +5662,7 @@ async function runInstall2(spec, opts) {
|
|
|
5662
5662
|
async function runRemove(name, opts) {
|
|
5663
5663
|
const projectDir = path35__default.resolve(opts.projectDir);
|
|
5664
5664
|
const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
|
|
5665
|
-
const { specName } = await import('../plugin-store-
|
|
5665
|
+
const { specName } = await import('../plugin-store-JQAIKR3R.js');
|
|
5666
5666
|
const yamlPath = path35__default.join(projectDir, "skaile.yaml");
|
|
5667
5667
|
const editor = WorkspaceYamlEditor2.load(yamlPath);
|
|
5668
5668
|
const removed = editor.removePlugin(name, specName);
|
|
@@ -5690,7 +5690,7 @@ async function runList(opts) {
|
|
|
5690
5690
|
const registry = createPluginRegistry();
|
|
5691
5691
|
if (declared.length > 0) {
|
|
5692
5692
|
try {
|
|
5693
|
-
const { loadPlugins } = await import('../plugin-store-
|
|
5693
|
+
const { loadPlugins } = await import('../plugin-store-JQAIKR3R.js');
|
|
5694
5694
|
const result = await loadPlugins(projectDir, declared, registry);
|
|
5695
5695
|
for (const f of result.failed) logWarn(f.error);
|
|
5696
5696
|
} catch (err) {
|
|
@@ -6768,6 +6768,10 @@ function makeServeCommand() {
|
|
|
6768
6768
|
const { startAgentServer } = await import('../runner/index.js');
|
|
6769
6769
|
await startAgentServer({
|
|
6770
6770
|
port: parseInt(opts.port, 10),
|
|
6771
|
+
// The CLI owns its process, so a dead stdout pipe is fatal here.
|
|
6772
|
+
// `SKAILE_SERVE_EXIT_ON_BROKEN_STDOUT=0` opts out — the `local` /
|
|
6773
|
+
// `nix` deploy targets set it for children meant to outlive them.
|
|
6774
|
+
exitOnBrokenPipe: process.env.SKAILE_SERVE_EXIT_ON_BROKEN_STDOUT !== "0",
|
|
6771
6775
|
projectDir: opts.projectDir,
|
|
6772
6776
|
driver: opts.driver,
|
|
6773
6777
|
model: opts.model,
|
|
@@ -6779,12 +6783,12 @@ function makeServeCommand() {
|
|
|
6779
6783
|
);
|
|
6780
6784
|
}
|
|
6781
6785
|
async function ensurePluginsLoadedForServe(projectDir) {
|
|
6782
|
-
const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-
|
|
6786
|
+
const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-Y66CM6LO.js');
|
|
6783
6787
|
try {
|
|
6784
6788
|
const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
|
|
6785
6789
|
const config = resolveSkWorkspaceConfig2(projectDir);
|
|
6786
6790
|
if (!config.plugins || config.plugins.length === 0) return;
|
|
6787
|
-
const { ensurePluginsLoaded } = await import('../plugin-store-
|
|
6791
|
+
const { ensurePluginsLoaded } = await import('../plugin-store-JQAIKR3R.js');
|
|
6788
6792
|
const { pluginRegistry } = await import('../plugin-registry/index.js');
|
|
6789
6793
|
const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
|
|
6790
6794
|
if (result.loaded.length > 0) {
|
|
@@ -6798,14 +6802,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
|
|
|
6798
6802
|
}
|
|
6799
6803
|
}
|
|
6800
6804
|
async function runCompileTest(opts) {
|
|
6801
|
-
const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-
|
|
6805
|
+
const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-Y66CM6LO.js');
|
|
6802
6806
|
const { tmpdir } = await import('os');
|
|
6803
6807
|
const { dirname: dirname4, join: join7, resolve: resolve5 } = await import('path');
|
|
6804
6808
|
const { fileURLToPath: fileURLToPath2 } = await import('url');
|
|
6805
6809
|
const { unlinkSync, existsSync: existsSync15 } = await import('fs');
|
|
6806
6810
|
const { spawn } = await import('child_process');
|
|
6807
6811
|
const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
|
|
6808
|
-
const { MONOREPO_ROOT } = await import('../paths-
|
|
6812
|
+
const { MONOREPO_ROOT } = await import('../paths-4APA2PKT.js');
|
|
6809
6813
|
if (MONOREPO_ROOT === null) {
|
|
6810
6814
|
logErr2("--compile-test is only available inside the skaile-dev workspace.");
|
|
6811
6815
|
logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
|
|
@@ -7680,7 +7684,7 @@ function makeStoreCommand() {
|
|
|
7680
7684
|
process.exit(2);
|
|
7681
7685
|
});
|
|
7682
7686
|
store.command("search <query>").description("Search the AI Asset Store catalog by name, description, or publisher").option("--kind <kind>", "Filter by asset kind (skill, agent, prompt, flow, \u2026)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
|
|
7683
|
-
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-
|
|
7687
|
+
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-IO4TSO2H.js');
|
|
7684
7688
|
try {
|
|
7685
7689
|
const remote = await openCatalogSource2({ projectDir: path35__default.resolve(opts.projectDir) });
|
|
7686
7690
|
const assets = await remote.listAssets(opts.kind ? { kind: opts.kind } : {});
|
|
@@ -7713,8 +7717,8 @@ function makeStoreCommand() {
|
|
|
7713
7717
|
}
|
|
7714
7718
|
});
|
|
7715
7719
|
store.command("show <ref>").description("Show a store asset's details + provenance (source, files, integrity)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (ref, opts) => {
|
|
7716
|
-
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-
|
|
7717
|
-
const { supportsInstallManifest } = await import('../project-
|
|
7720
|
+
const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError } = await import('../open-library-IO4TSO2H.js');
|
|
7721
|
+
const { supportsInstallManifest } = await import('../project-OR524CQ3.js');
|
|
7718
7722
|
try {
|
|
7719
7723
|
const remote = await openCatalogSource2({ projectDir: path35__default.resolve(opts.projectDir) });
|
|
7720
7724
|
const asset = await remote.resolve(ref);
|
|
@@ -8800,7 +8804,7 @@ async function bootstrapUserConfig() {
|
|
|
8800
8804
|
}
|
|
8801
8805
|
async function hydrateInitSources(resolved, created) {
|
|
8802
8806
|
try {
|
|
8803
|
-
const { ensureSourcesCloned } = await import('../ensure-sources-
|
|
8807
|
+
const { ensureSourcesCloned } = await import('../ensure-sources-I2F6XBDJ.js');
|
|
8804
8808
|
const hydrate = ensureSourcesCloned(resolved, { quiet: true });
|
|
8805
8809
|
for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
|
|
8806
8810
|
if (hydrate.failed.length > 0) {
|
|
@@ -8840,7 +8844,7 @@ function printInitSummary(resolved, projectDir, created) {
|
|
|
8840
8844
|
console.log();
|
|
8841
8845
|
}
|
|
8842
8846
|
program.command("setup").description("Interactive provider setup wizard").action(async () => {
|
|
8843
|
-
const { cmdSetup } = await import('../setup-
|
|
8847
|
+
const { cmdSetup } = await import('../setup-5OG442AZ.js');
|
|
8844
8848
|
await cmdSetup([], { projectDir: process.cwd() });
|
|
8845
8849
|
});
|
|
8846
8850
|
program.addCommand(makeInstallCommand());
|