@skaile/workspaces 4.9.2 → 4.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/{asset-feeds-ZKMRNVV2.js → asset-feeds-WHWQJOAQ.js} +5 -5
- package/dist/{asset-feeds-ZKMRNVV2.js.map → asset-feeds-WHWQJOAQ.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +1 -1
- package/dist/asset-manager/index.js +2 -2
- package/dist/asset-manager/installer.js +1 -1
- package/dist/bridge/drivers/claude-sdk.js +3 -3
- package/dist/bridge/drivers/codex.js +4 -4
- package/dist/bridge/drivers/continue.js +3 -3
- package/dist/bridge/drivers/echo.js +2 -2
- package/dist/bridge/drivers/gemini.js +5 -5
- package/dist/bridge/drivers/goose.js +3 -3
- package/dist/bridge/drivers/omp.js +2 -2
- package/dist/bridge/drivers/opencode.js +3 -3
- package/dist/bridge/drivers/qwen.js +5 -5
- package/dist/bridge/index.js +4 -4
- package/dist/{chunk-45LLHKQ2.js → chunk-2HUQUTJ3.js} +3 -3
- package/dist/{chunk-45LLHKQ2.js.map → chunk-2HUQUTJ3.js.map} +1 -1
- package/dist/{chunk-OZAF24OQ.js → chunk-3BDWW7OE.js} +6 -6
- package/dist/{chunk-OZAF24OQ.js.map → chunk-3BDWW7OE.js.map} +1 -1
- package/dist/{chunk-FTG7CRFD.js → chunk-3HKYCT2M.js} +69 -6
- package/dist/chunk-3HKYCT2M.js.map +1 -0
- package/dist/{chunk-6YIFJW2I.js → chunk-5HZWDH3L.js} +88 -67
- package/dist/chunk-5HZWDH3L.js.map +1 -0
- package/dist/{chunk-7ZYKHL6Y.js → chunk-7F4FGEMI.js} +3 -3
- package/dist/{chunk-7ZYKHL6Y.js.map → chunk-7F4FGEMI.js.map} +1 -1
- package/dist/{chunk-5VKBD3QV.js → chunk-FTSXFA7P.js} +5 -5
- package/dist/{chunk-5VKBD3QV.js.map → chunk-FTSXFA7P.js.map} +1 -1
- package/dist/{chunk-5YB4GYMB.js → chunk-HRVXHRL4.js} +225 -39
- package/dist/chunk-HRVXHRL4.js.map +1 -0
- package/dist/{chunk-NHZR3NVY.js → chunk-KQTMJP3X.js} +3 -3
- package/dist/{chunk-NHZR3NVY.js.map → chunk-KQTMJP3X.js.map} +1 -1
- package/dist/{chunk-QBH7PC4D.js → chunk-LDQB5VEC.js} +2 -2
- package/dist/{chunk-QBH7PC4D.js.map → chunk-LDQB5VEC.js.map} +1 -1
- package/dist/{chunk-TLMDSUEL.js → chunk-OIXSGSKM.js} +3 -3
- package/dist/{chunk-TLMDSUEL.js.map → chunk-OIXSGSKM.js.map} +1 -1
- package/dist/{chunk-BZBRCPEB.js → chunk-PROIKXJR.js} +3 -3
- package/dist/{chunk-BZBRCPEB.js.map → chunk-PROIKXJR.js.map} +1 -1
- package/dist/{chunk-6QMWCPME.js → chunk-R5NALZHK.js} +6 -6
- package/dist/{chunk-6QMWCPME.js.map → chunk-R5NALZHK.js.map} +1 -1
- package/dist/{chunk-XJLB4OH2.js → chunk-SPAG2BWG.js} +2 -2
- package/dist/{chunk-XJLB4OH2.js.map → chunk-SPAG2BWG.js.map} +1 -1
- package/dist/{chunk-5OZVZI2E.js → chunk-TXXPJ5CQ.js} +2 -2
- package/dist/{chunk-5OZVZI2E.js.map → chunk-TXXPJ5CQ.js.map} +1 -1
- package/dist/{chunk-TAHJRTAD.js → chunk-US3NCUQF.js} +4 -4
- package/dist/{chunk-TAHJRTAD.js.map → chunk-US3NCUQF.js.map} +1 -1
- package/dist/{chunk-DB6H7M5O.js → chunk-WPW5XS6I.js} +2 -2
- package/dist/{chunk-DB6H7M5O.js.map → chunk-WPW5XS6I.js.map} +1 -1
- package/dist/{chunk-CJCZIWW6.js → chunk-XEWX4V7T.js} +3 -3
- package/dist/{chunk-CJCZIWW6.js.map → chunk-XEWX4V7T.js.map} +1 -1
- package/dist/{chunk-7LBL25WI.js → chunk-YCIW4YOT.js} +3 -3
- package/dist/{chunk-7LBL25WI.js.map → chunk-YCIW4YOT.js.map} +1 -1
- package/dist/{chunk-X5VZOIAP.js → chunk-YMHRKIMQ.js} +3 -3
- package/dist/{chunk-X5VZOIAP.js.map → chunk-YMHRKIMQ.js.map} +1 -1
- package/dist/{chunk-6DN6U2CK.js → chunk-ZVYWMD6Q.js} +3 -3
- package/dist/{chunk-6DN6U2CK.js.map → chunk-ZVYWMD6Q.js.map} +1 -1
- package/dist/cli/index.js +42 -42
- package/dist/connectors/config.js +1 -1
- package/dist/connectors/index.js +5 -5
- package/dist/core/index.js +1 -1
- package/dist/core/logging.js +1 -1
- package/dist/core/src/logging/index.d.ts +3 -1
- package/dist/core/src/logging/index.d.ts.map +1 -1
- package/dist/core/src/logging/retention.d.ts +29 -0
- package/dist/core/src/logging/retention.d.ts.map +1 -0
- package/dist/core/src/logging/sinks/sqlite-runtime.d.ts +6 -1
- package/dist/core/src/logging/sinks/sqlite-runtime.d.ts.map +1 -1
- package/dist/deploy/index.js +1 -1
- package/dist/{ensure-sources-FRG6HKPM.js → ensure-sources-QOQSDYIW.js} +5 -5
- package/dist/{ensure-sources-FRG6HKPM.js.map → ensure-sources-QOQSDYIW.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +5 -5
- package/dist/factory-assets/connectors/deploy.js +5 -5
- package/dist/factory-assets/connectors/devserver.js +5 -5
- package/dist/factory-assets/connectors/flow/adapter.js +5 -5
- package/dist/factory-assets/connectors/flow/engine.js +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +6 -6
- package/dist/factory-assets/connectors/flow.js +5 -5
- package/dist/factory-assets/connectors/git/CONNECTOR.md +7 -1
- package/dist/factory-assets/connectors/git/driver.d.ts +60 -10
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +5 -5
- package/dist/factory-assets/connectors/gmail.js +5 -5
- package/dist/factory-assets/connectors/googledrive.js +5 -5
- package/dist/factory-assets/connectors/local.js +5 -5
- package/dist/factory-assets/connectors/mattermost.js +5 -5
- package/dist/factory-assets/connectors/memory.js +5 -5
- package/dist/factory-assets/connectors/minio.js +5 -5
- package/dist/factory-assets/connectors/postgres.js +5 -5
- package/dist/factory-assets/connectors/s3.js +5 -5
- package/dist/factory-assets/connectors/sharepoint.js +5 -5
- package/dist/factory-assets/connectors/sqlite.js +5 -5
- package/dist/factory-assets/connectors/static-server.js +5 -5
- package/dist/factory-assets/connectors/tunnel.js +5 -5
- package/dist/factory-assets/connectors/webdav.js +5 -5
- package/dist/factory-assets/connectors/xstate-store.js +5 -5
- package/dist/factory-assets/connectors/xstate.js +5 -5
- package/dist/{flows-377JICTL.js → flows-SYYQDDCT.js} +4 -4
- package/dist/{flows-377JICTL.js.map → flows-SYYQDDCT.js.map} +1 -1
- package/dist/{helpers-JHGUA7T7.js → helpers-HGDWKXLE.js} +5 -5
- package/dist/{helpers-JHGUA7T7.js.map → helpers-HGDWKXLE.js.map} +1 -1
- package/dist/library/index.js +1 -1
- package/dist/library/install.js +1 -1
- package/dist/{library-publish-CUFLZUEV.js → library-publish-6QYWX635.js} +7 -7
- package/dist/{library-publish-CUFLZUEV.js.map → library-publish-6QYWX635.js.map} +1 -1
- package/dist/{open-library-ZI6TWEM6.js → open-library-R74XCRPC.js} +6 -6
- package/dist/{open-library-ZI6TWEM6.js.map → open-library-R74XCRPC.js.map} +1 -1
- package/dist/{paths-WJUPZXFS.js → paths-NHONUGUU.js} +3 -3
- package/dist/{paths-WJUPZXFS.js.map → paths-NHONUGUU.js.map} +1 -1
- package/dist/{plugin-store-ZW4GDES3.js → plugin-store-4RALGK5S.js} +3 -3
- package/dist/{plugin-store-ZW4GDES3.js.map → plugin-store-4RALGK5S.js.map} +1 -1
- package/dist/{project-TVZ6Y6AR.js → project-OFUZ5D3S.js} +6 -6
- package/dist/{project-TVZ6Y6AR.js.map → project-OFUZ5D3S.js.map} +1 -1
- package/dist/resolver/index.js +1 -1
- package/dist/runner/index.js +11 -11
- package/dist/runner/src/logging-bootstrap.d.ts +11 -0
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +2 -2
- package/dist/sdk/bridge.js +4 -4
- package/dist/sdk/core.js +1 -1
- package/dist/sdk/flow.js +1 -1
- package/dist/sdk/index.js +11 -11
- package/dist/sdk/resolver.js +1 -1
- package/dist/sdk/runner.js +11 -11
- package/dist/{setup-54FNPLTS.js → setup-OYXGVHBF.js} +9 -9
- package/dist/{setup-54FNPLTS.js.map → setup-OYXGVHBF.js.map} +1 -1
- package/dist/{skills-J6KZ2WUT.js → skills-VUPPILR5.js} +3 -3
- package/dist/{skills-J6KZ2WUT.js.map → skills-VUPPILR5.js.map} +1 -1
- package/dist/{source-SPMRD7S2.js → source-MEQTWW3S.js} +7 -7
- package/dist/{source-SPMRD7S2.js.map → source-MEQTWW3S.js.map} +1 -1
- package/dist/{source-manifest-publish-3LSSDCSI.js → source-manifest-publish-EPPOGSLD.js} +8 -8
- package/dist/{source-manifest-publish-3LSSDCSI.js.map → source-manifest-publish-EPPOGSLD.js.map} +1 -1
- package/dist/tui/index.js +11 -11
- package/dist/workspace-plugin/adapters/mcp.js +3 -3
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-5YB4GYMB.js.map +0 -1
- package/dist/chunk-6YIFJW2I.js.map +0 -1
- package/dist/chunk-FTG7CRFD.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/src/logging/sinks/sqlite-runtime.ts","../core/src/logging/sinks/sqlite-sink.ts","../core/src/logging/config.ts","../core/src/logging/sinks/on-log-bridge-sink.ts","../core/src/logging/sinks/ws-log-sink.ts"],"names":["path"],"mappings":"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","file":"chunk-FTG7CRFD.js","sourcesContent":["/**\n * Runtime-portable embedded SQLite for the logging sink.\n *\n * The log store needs a synchronous, embedded SQLite driver. Bun ships\n * `bun:sqlite`; Node 22.5+ ships `node:sqlite`. This shim selects the right\n * one at runtime so the CLI and runtime run unmodified under either — no Bun\n * dependency baked into the published build.\n *\n * Both drivers accept `$`-prefixed named-parameter keys directly, so callers\n * use one binding convention. The only API gap is transactions: `bun:sqlite`\n * has `db.transaction()`, `node:sqlite` does not — {@link openSqlite}\n * synthesizes it with manual `BEGIN`/`COMMIT`/`ROLLBACK`.\n */\nimport { createRequire } from \"node:module\";\n\nconst nodeRequire = createRequire(import.meta.url);\n\n/** True when executing under the Bun runtime. */\nconst isBun = typeof (globalThis as { Bun?: unknown }).Bun !== \"undefined\";\n\n/** A prepared statement bound with `$`-prefixed named parameters. */\nexport interface PortableStatement {\n run(params?: Record<string, unknown>): void;\n all<T = unknown>(params?: Record<string, unknown>): T[];\n get<T = unknown>(params?: Record<string, unknown>): T | undefined;\n}\n\n/** A synchronous embedded SQLite handle, uniform across Bun and Node. */\nexport interface PortableDatabase {\n exec(sql: string): void;\n prepare(sql: string): PortableStatement;\n /** Wrap `fn` so the statements it runs commit as one transaction. */\n transaction<A extends unknown[]>(fn: (...args: A) => void): (...args: A) => void;\n close(): void;\n}\n\nexport interface OpenSqliteOptions {\n /** Open read-only. The database file must already exist. */\n readonly?: boolean;\n}\n\n/** Minimal structural shape shared by `bun:sqlite` and `node:sqlite` handles. */\ninterface RawStatement {\n run(params?: unknown): unknown;\n all(params?: unknown): unknown[];\n get(params?: unknown): unknown;\n}\ninterface RawDatabase {\n exec(sql: string): unknown;\n prepare(sql: string): RawStatement;\n close(): void;\n}\n\nfunction wrapStatement(stmt: RawStatement): PortableStatement {\n return {\n run: (params) => {\n if (params === undefined) stmt.run();\n else stmt.run(params);\n },\n all: (params) => (params === undefined ? stmt.all() : stmt.all(params)) as never,\n get: (params) => (params === undefined ? stmt.get() : stmt.get(params)) as never,\n };\n}\n\nfunction openBunSqlite(path: string, opts: OpenSqliteOptions): PortableDatabase {\n const { Database } = nodeRequire(\"bun:sqlite\") as {\n Database: new (\n p: string,\n o?: { readonly?: boolean },\n ) => RawDatabase & {\n transaction<A extends unknown[]>(fn: (...args: A) => void): (...args: A) => void;\n };\n };\n const db = opts.readonly ? new Database(path, { readonly: true }) : new Database(path);\n return {\n exec: (sql) => {\n db.exec(sql);\n },\n prepare: (sql) => wrapStatement(db.prepare(sql)),\n transaction: (fn) => db.transaction(fn),\n close: () => {\n db.close();\n },\n };\n}\n\nfunction openNodeSqlite(path: string, opts: OpenSqliteOptions): PortableDatabase {\n const { DatabaseSync } = nodeRequire(\"node:sqlite\") as {\n DatabaseSync: new (p: string, o?: { readOnly?: boolean }) => RawDatabase;\n };\n const db = opts.readonly ? new DatabaseSync(path, { readOnly: true }) : new DatabaseSync(path);\n return {\n exec: (sql) => {\n db.exec(sql);\n },\n prepare: (sql) => wrapStatement(db.prepare(sql)),\n transaction:\n (fn) =>\n (...args) => {\n db.exec(\"BEGIN\");\n try {\n fn(...args);\n db.exec(\"COMMIT\");\n } catch (err) {\n db.exec(\"ROLLBACK\");\n throw err;\n }\n },\n close: () => {\n db.close();\n },\n };\n}\n\n/**\n * Open an embedded SQLite database using the runtime's native driver —\n * `bun:sqlite` under Bun, `node:sqlite` under Node 22.5+.\n */\nexport function openSqlite(path: string, opts: OpenSqliteOptions = {}): PortableDatabase {\n return isBun ? openBunSqlite(path, opts) : openNodeSqlite(path, opts);\n}\n","import { chmodSync } from \"node:fs\";\nimport type { LogEntry, LogQuery, LogQueryResult } from \"@skaile/workspaces/types\";\nimport { openSqlite, type PortableDatabase, type PortableStatement } from \"./sqlite-runtime.js\";\nimport type { LogSink } from \"./types.js\";\n\nexport interface SqliteSinkOptions {\n path: string; // ':memory:' or filesystem path\n}\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS log_entries (\n id TEXT PRIMARY KEY,\n timestamp TEXT NOT NULL,\n session_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n subkind TEXT NOT NULL,\n instance TEXT,\n level TEXT NOT NULL,\n message TEXT NOT NULL,\n data_json TEXT,\n error_json TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_logs_timestamp ON log_entries(timestamp);\nCREATE INDEX IF NOT EXISTS idx_logs_kind_level ON log_entries(kind, level);\nCREATE INDEX IF NOT EXISTS idx_logs_source ON log_entries(kind, subkind, instance);\n`;\n\ninterface LogEntryRow {\n id: string;\n timestamp: string;\n session_id: string;\n kind: string;\n subkind: string;\n instance: string | null;\n level: string;\n message: string;\n data_json: string | null;\n error_json: string | null;\n}\n\nexport class SqliteSink implements LogSink {\n private db: PortableDatabase;\n private insertStmt: PortableStatement;\n private insertMany: (entries: LogEntry[]) => void;\n private closed = false;\n\n constructor(opts: SqliteSinkOptions) {\n this.db = openSqlite(opts.path);\n if (opts.path !== \":memory:\") {\n this.db.exec(\"PRAGMA journal_mode = WAL\");\n }\n this.db.exec(SCHEMA);\n if (opts.path !== \":memory:\") {\n // Group-writable so a co-grouped host process can open read-write for retention.\n makeGroupWritable(opts.path);\n }\n this.insertStmt = this.db.prepare(\n `INSERT INTO log_entries (id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json)\n VALUES ($id, $timestamp, $session_id, $kind, $subkind, $instance, $level, $message, $data_json, $error_json)`,\n );\n this.insertMany = this.db.transaction((entries: LogEntry[]) => {\n for (const e of entries) this.insertStmt.run(this.toRow(e));\n });\n }\n\n write(entry: LogEntry): void {\n if (this.closed) return;\n this.insertStmt.run(this.toRow(entry));\n }\n\n writeBatch(entries: LogEntry[]): void {\n if (this.closed || entries.length === 0) return;\n this.insertMany(entries);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.db.close();\n }\n\n query(q: LogQuery): LogQueryResult {\n if (this.closed) return { entries: [] };\n const where: string[] = [\"session_id = $sessionId\"];\n const params: Record<string, unknown> = { $sessionId: q.sessionId };\n\n if (q.source?.kind) {\n where.push(\"kind = $kind\");\n params.$kind = q.source.kind;\n }\n if (q.source?.subkind) {\n where.push(\"subkind = $subkind\");\n params.$subkind = q.source.subkind;\n }\n if (q.source?.instance) {\n where.push(\"instance = $instance\");\n params.$instance = q.source.instance;\n }\n if (q.levels && q.levels.length > 0) {\n const placeholders = q.levels.map((_, i) => `$level${i}`).join(\", \");\n where.push(`level IN (${placeholders})`);\n q.levels.forEach((lvl, i) => {\n params[`$level${i}`] = lvl;\n });\n }\n if (q.since) {\n where.push(\"timestamp >= $since\");\n params.$since = q.since;\n }\n if (q.until) {\n where.push(\"timestamp < $until\");\n params.$until = q.until;\n }\n if (q.search) {\n // Escape SQL LIKE wildcards so a search for \"100%\" matches the literal string,\n // not \"100<anything>\". \\\\ is also escaped because it's the escape character itself.\n const escaped = q.search.replace(/[\\\\%_]/g, \"\\\\$&\");\n where.push(\"message LIKE $search ESCAPE '\\\\'\");\n params.$search = `%${escaped}%`;\n }\n if (q.cursor) {\n where.push(\"id < $cursor\");\n params.$cursor = q.cursor;\n }\n\n const limit = Math.min(q.limit ?? 500, 5000);\n params.$limit = limit + 1;\n\n const sql = `SELECT id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json\n FROM log_entries\n WHERE ${where.join(\" AND \")}\n ORDER BY id DESC\n LIMIT $limit`;\n\n const rows = this.db.prepare(sql).all<LogEntryRow>(params);\n\n const hasMore = rows.length > limit;\n const sliced = hasMore ? rows.slice(0, limit) : rows;\n const entries: LogEntry[] = sliced.map((r) => ({\n id: r.id,\n timestamp: r.timestamp,\n sessionId: r.session_id,\n source: {\n kind: r.kind as LogEntry[\"source\"][\"kind\"],\n subkind: r.subkind,\n instance: r.instance ?? undefined,\n },\n level: r.level as LogEntry[\"level\"],\n message: r.message,\n data: r.data_json ? JSON.parse(r.data_json) : undefined,\n error: r.error_json ? JSON.parse(r.error_json) : undefined,\n }));\n\n return {\n entries,\n nextCursor: hasMore ? entries[entries.length - 1].id : undefined,\n };\n }\n\n // Both bun:sqlite and node:sqlite bind `$name` SQL placeholders from\n // matching `$`-prefixed object keys.\n private toRow(e: LogEntry): Record<string, unknown> {\n return {\n $id: e.id,\n $timestamp: e.timestamp,\n $session_id: e.sessionId,\n $kind: e.source.kind,\n $subkind: e.source.subkind,\n $instance: e.source.instance ?? null,\n $level: e.level,\n $message: e.message,\n $data_json: e.data ? JSON.stringify(e.data) : null,\n $error_json: e.error ? JSON.stringify(e.error) : null,\n };\n }\n}\n\n/**\n * Best-effort `chmod 0664` on the db file and its WAL/SHM siblings. Swallows all\n * errors (missing sibling, EPERM when not the owner) so logging never throws.\n */\nfunction makeGroupWritable(dbPath: string): void {\n for (const p of [dbPath, `${dbPath}-wal`, `${dbPath}-shm`]) {\n try {\n chmodSync(p, 0o664);\n } catch {\n // Sibling may not exist yet, or this process may not own the file.\n // Either way, retention degrades cleanly — never break logging.\n }\n }\n}\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport type { LogLevel, LogStoreConfig, LogStoreMode } from \"@skaile/workspaces/types\";\nimport { LogStore } from \"./log-store.js\";\nimport { NoOpSink } from \"./sinks/no-op-sink.js\";\nimport { SqliteSink } from \"./sinks/sqlite-sink.js\";\nimport { StdoutSink } from \"./sinks/stdout-sink.js\";\n\nconst VALID_MODES: LogStoreMode[] = [\"persistent\", \"ephemeral\", \"off\"];\nconst VALID_LEVELS: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\"];\n\nexport interface ResolveLogStoreConfigInput {\n sessionId: string;\n workspacePath?: string;\n yamlBlock?: Partial<{\n mode: LogStoreMode;\n level: LogLevel;\n retention: { maxEntries?: number; maxAgeDays?: number };\n }>;\n}\n\nexport function resolveLogStoreConfig(input: ResolveLogStoreConfigInput): LogStoreConfig {\n const yaml = input.yamlBlock ?? {};\n const envMode = process.env.SKAILE_LOG_MODE as LogStoreMode | undefined;\n const envLevel = process.env.SKAILE_LOG_LEVEL as LogLevel | undefined;\n\n const mode = envMode ?? yaml.mode ?? \"persistent\";\n if (!VALID_MODES.includes(mode)) {\n throw new Error(`Invalid logging.mode: ${mode}`);\n }\n const level = envLevel ?? yaml.level ?? \"info\";\n if (!VALID_LEVELS.includes(level)) {\n throw new Error(`Invalid logging.level: ${level}`);\n }\n\n return {\n sessionId: input.sessionId,\n workspacePath: input.workspacePath,\n mode,\n level,\n retention: yaml.retention,\n };\n}\n\nexport function createLogStoreFromConfig(cfg: LogStoreConfig): LogStore {\n const sinks = [];\n if (cfg.mode === \"off\") {\n sinks.push(new NoOpSink());\n } else if (cfg.mode === \"ephemeral\") {\n sinks.push(new SqliteSink({ path: \":memory:\" }));\n } else {\n if (!cfg.workspacePath) {\n throw new Error(\"logging.mode=persistent requires workspacePath\");\n }\n const dir = path.join(cfg.workspacePath, \".skaile\");\n mkdirSync(dir, { recursive: true });\n const dbPath = path.join(dir, \"logs.db\");\n sinks.push(new SqliteSink({ path: dbPath }));\n }\n // Always include stdout for live container logs (dev-friendly).\n sinks.push(new StdoutSink());\n return new LogStore({\n sessionId: cfg.sessionId,\n level: cfg.level,\n sinks,\n });\n}\n","import type { LogEntry, LogSink } from \"@skaile/workspaces/types\";\n\n/**\n * OnLogBridgeSink — forwards every entry as a single formatted text line to\n * a legacy `onLog(line)` callback. Used as a back-compat bridge for callers\n * that historically received plain text lines from the runner.\n *\n * Format: `[level] [kind:subkind[:instance]] message [data-json] [— error.message]`\n */\nexport class OnLogBridgeSink implements LogSink {\n constructor(private readonly onLog: (line: string) => void) {}\n\n write(entry: LogEntry): void {\n const tag = entry.source.instance\n ? `${entry.source.kind}:${entry.source.subkind}:${entry.source.instance}`\n : `${entry.source.kind}:${entry.source.subkind}`;\n let line = `[${entry.level}] [${tag}] ${entry.message}`;\n if (entry.data && Object.keys(entry.data).length > 0) {\n line += ` ${JSON.stringify(entry.data)}`;\n }\n if (entry.error?.message) {\n line += ` — ${entry.error.message}`;\n }\n this.onLog(line);\n }\n\n writeBatch(entries: LogEntry[]): void {\n for (const e of entries) this.write(e);\n }\n\n close(): void {\n /* no-op */\n }\n}\n","import type { LogEntry, LogEntryEvent } from \"@skaile/workspaces/types\";\nimport type { LogSink } from \"./types.js\";\n\nexport interface WsLogSinkOptions {\n /**\n * Transport send callback. Typically wired to `transport.send` on the\n * runner's `WebSocketServerTransport`. The transport already drops sends\n * when no client is connected — this sink does not buffer.\n */\n send: (event: LogEntryEvent) => void;\n}\n\n/**\n * Forwards every LogEntry recorded by LogStore as a `log_entry` AgentEvent\n * over the configured transport. Used by the runner to make container-side\n * structured logs visible to the platform gateway in real time. Historical\n * reads still go through SQLite — this sink is for live tail only.\n */\nexport class WsLogSink implements LogSink {\n private readonly send: (event: LogEntryEvent) => void;\n\n constructor(opts: WsLogSinkOptions) {\n this.send = opts.send;\n }\n\n write(entry: LogEntry): void {\n try {\n this.send({ type: \"log_entry\", entry });\n } catch {\n // Logging must never break the agent — drop on transport failure.\n }\n }\n\n writeBatch(entries: LogEntry[]): void {\n for (const e of entries) this.write(e);\n }\n\n close(): void {\n /* nothing to release — transport lifecycle is owned by the caller */\n }\n}\n"]}
|