pybao-cli 1.5.23 → 1.5.25
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/dist/REPL-AWUJ6DTI.js +51 -0
- package/dist/{acp-5G7LPADD.js → acp-3G6FUTMV.js} +32 -31
- package/dist/{acp-5G7LPADD.js.map → acp-3G6FUTMV.js.map} +1 -1
- package/dist/{agentsValidate-BIRAVXBL.js → agentsValidate-7J62UR4G.js} +7 -7
- package/dist/{ask-XQZT6WIO.js → ask-DPX5KTMK.js} +31 -30
- package/dist/{ask-XQZT6WIO.js.map → ask-DPX5KTMK.js.map} +1 -1
- package/dist/{autoUpdater-DDJAJPKA.js → autoUpdater-7CK6CMUK.js} +3 -3
- package/dist/{chunk-XEVB4WON.js → chunk-2JSYG54Z.js} +15 -15
- package/dist/{chunk-GU4XA76N.js → chunk-3COHIXJE.js} +3 -3
- package/dist/{chunk-W7VIESST.js → chunk-3JZI3ZBU.js} +3 -3
- package/dist/{chunk-5B7UCAYL.js → chunk-3RKGBZUV.js} +1 -1
- package/dist/{chunk-ABJT5MG2.js → chunk-6PW6SJXE.js} +1 -1
- package/dist/{chunk-N7GEPTZB.js → chunk-6UGNUC4K.js} +3 -3
- package/dist/{chunk-4ZZYPG6P.js → chunk-BDHA3QOT.js} +4 -4
- package/dist/{chunk-MN77HNBB.js → chunk-BOOTTYGZ.js} +4 -4
- package/dist/{chunk-CNMNKSWQ.js → chunk-CVPWG3IX.js} +3 -3
- package/dist/{chunk-6QGIRDZS.js → chunk-FXUTVJRS.js} +1 -1
- package/dist/{chunk-2GHNW642.js → chunk-HL6ARNBJ.js} +1 -1
- package/dist/{chunk-MMW6MLFR.js → chunk-HSAO34GP.js} +2 -2
- package/dist/{chunk-KQZAS4DO.js → chunk-I377E5OW.js} +17 -25
- package/dist/chunk-I377E5OW.js.map +7 -0
- package/dist/{chunk-QSMZLK7K.js → chunk-IBRK4QMC.js} +3 -3
- package/dist/{chunk-2SVUNNJB.js → chunk-K3DSRWYV.js} +2 -2
- package/dist/chunk-KFEHHKZ2.js +145 -0
- package/dist/chunk-KFEHHKZ2.js.map +7 -0
- package/dist/{chunk-76BOJQUE.js → chunk-KNPPPVBG.js} +1 -1
- package/dist/{chunk-7SYDIES4.js → chunk-KP3LQCMR.js} +5 -1
- package/dist/chunk-KP3LQCMR.js.map +7 -0
- package/dist/{chunk-V22PQM4W.js → chunk-LGQJPZKC.js} +3 -3
- package/dist/{chunk-S65MIABQ.js → chunk-NSPYODPF.js} +4 -4
- package/dist/{chunk-A6QEPK5J.js → chunk-OZBYDL7N.js} +2 -2
- package/dist/{chunk-C2GNLGBM.js → chunk-RBLKS6FX.js} +1 -1
- package/dist/{chunk-G5MP72ZL.js → chunk-RVTZE6UF.js} +181 -15
- package/dist/chunk-RVTZE6UF.js.map +7 -0
- package/dist/{chunk-M7FEUIHO.js → chunk-SAVBIJ5O.js} +2 -2
- package/dist/{chunk-CT7LWVB7.js → chunk-SVRRQBLT.js} +1 -1
- package/dist/{chunk-VVXC3SNP.js → chunk-THSULC47.js} +35 -167
- package/dist/chunk-THSULC47.js.map +7 -0
- package/dist/{chunk-PUPDIRI6.js → chunk-TO2NPV6U.js} +2 -2
- package/dist/{chunk-652OMXEE.js → chunk-V4UJI656.js} +2 -2
- package/dist/{chunk-QCI5HPTA.js → chunk-VGFXCETY.js} +1 -1
- package/dist/{chunk-ZB3ZWD2K.js → chunk-VJFKQQTV.js} +2 -2
- package/dist/{chunk-ZB3ZWD2K.js.map → chunk-VJFKQQTV.js.map} +2 -2
- package/dist/{chunk-O7LWCCRJ.js → chunk-WIQFF44D.js} +3 -3
- package/dist/{chunk-LBDLSBXN.js → chunk-WLEPTDKU.js} +1 -1
- package/dist/{chunk-3CC7QXCN.js → chunk-Z75SOPJ5.js} +165 -40
- package/dist/{chunk-3CC7QXCN.js.map → chunk-Z75SOPJ5.js.map} +3 -3
- package/dist/{cli-YIANCHDD.js → cli-2DWH2RIO.js} +92 -91
- package/dist/{cli-YIANCHDD.js.map → cli-2DWH2RIO.js.map} +1 -1
- package/dist/commands-OXOLWX75.js +55 -0
- package/dist/{config-QVH3VNUQ.js → config-MDAX3T7G.js} +4 -4
- package/dist/{context-5VXEWH3G.js → context-S4ASBZ3O.js} +7 -6
- package/dist/{conversationPersistence-INUNJHOV.js → conversationPersistence-WIBFJR62.js} +3 -3
- package/dist/{conversationTracker-H25IOHBE.js → conversationTracker-X53D6RLQ.js} +4 -4
- package/dist/{customCommands-7RZHKH2K.js → customCommands-S3CSA3GB.js} +4 -4
- package/dist/{env-DPJTGHMP.js → env-P2GOYAXV.js} +2 -2
- package/dist/{file-D7W2FBZP.js → file-HUPYIU7Y.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-TOU5REY5.js → llm-KOMOHPJY.js} +108 -39
- package/dist/llm-KOMOHPJY.js.map +7 -0
- package/dist/{llmLazy-HSKKIGLC.js → llmLazy-MXAQT2DG.js} +1 -1
- package/dist/{loader-YUP6OJTJ.js → loader-CFPDXJTQ.js} +4 -4
- package/dist/{lsp-7QKC4DVK.js → lsp-XR7JCI4Q.js} +6 -6
- package/dist/{lspAnchor-LCRZ23GA.js → lspAnchor-CY46EOLW.js} +6 -6
- package/dist/{mcp-KK6BOD6I.js → mcp-MACS532E.js} +7 -7
- package/dist/{mentionProcessor-V6JH6HUD.js → mentionProcessor-WT7DIUO6.js} +5 -5
- package/dist/{messages-7NVTXWIJ.js → messages-TQAKPPWM.js} +1 -1
- package/dist/{model-QSDSUJDB.js → model-R7YMMBAR.js} +5 -5
- package/dist/{openai-JC3KJN3H.js → openai-BISFRGPN.js} +5 -5
- package/dist/{outputStyles-TPH3CCB4.js → outputStyles-HLA3OEH2.js} +4 -4
- package/dist/{pluginRuntime-7EK4LQDD.js → pluginRuntime-LD6VPBWN.js} +6 -6
- package/dist/{pluginValidation-BJWCS55I.js → pluginValidation-MQFVM3M5.js} +6 -6
- package/dist/prompts-BFS3LOCS.js +57 -0
- package/dist/{pybAgentSessionLoad-V3IAJJPS.js → pybAgentSessionLoad-BQJ2JPPT.js} +5 -4
- package/dist/{pybAgentSessionResume-WE7ET356.js → pybAgentSessionResume-BBX6KVFN.js} +5 -4
- package/dist/{pybAgentStreamJsonSession-VWDYV4XL.js → pybAgentStreamJsonSession-N2AYCHRN.js} +1 -1
- package/dist/{pybHooks-UV7BTIVT.js → pybHooks-U4ATAT57.js} +4 -4
- package/dist/query-PZKEVMJY.js +55 -0
- package/dist/{registry-FK6UGJPV.js → registry-G2FLVWSF.js} +5 -5
- package/dist/{ripgrep-CXJ4DFPU.js → ripgrep-NPYGQPV3.js} +3 -3
- package/dist/{skillMarketplace-QUJXDKZK.js → skillMarketplace-H5P3PRHJ.js} +3 -3
- package/dist/{state-GC3XELIE.js → state-RM2QGI3K.js} +2 -2
- package/dist/{theme-24PLJSPD.js → theme-6GGT3D7J.js} +5 -5
- package/dist/{toolPermissionSettings-S6NJPBKT.js → toolPermissionSettings-IC6ELOVR.js} +6 -6
- package/dist/tools-F4GLOVTV.js +56 -0
- package/dist/{userInput-4VZSNII7.js → userInput-O26M5EYX.js} +33 -32
- package/dist/{userInput-4VZSNII7.js.map → userInput-O26M5EYX.js.map} +1 -1
- package/package.json +5 -1
- package/scripts/protected-tool-names-gate.mjs +102 -0
- package/scripts/session-project-gate.mjs +95 -0
- package/dist/REPL-CI5ET6VF.js +0 -50
- package/dist/chunk-7SYDIES4.js.map +0 -7
- package/dist/chunk-G5MP72ZL.js.map +0 -7
- package/dist/chunk-KQZAS4DO.js.map +0 -7
- package/dist/chunk-VVXC3SNP.js.map +0 -7
- package/dist/commands-4YMZW52K.js +0 -54
- package/dist/llm-TOU5REY5.js.map +0 -7
- package/dist/prompts-KQNPPEOG.js +0 -56
- package/dist/query-KAZY5LOW.js +0 -54
- package/dist/tools-NC5R4I6F.js +0 -55
- /package/dist/{REPL-CI5ET6VF.js.map → REPL-AWUJ6DTI.js.map} +0 -0
- /package/dist/{agentsValidate-BIRAVXBL.js.map → agentsValidate-7J62UR4G.js.map} +0 -0
- /package/dist/{autoUpdater-DDJAJPKA.js.map → autoUpdater-7CK6CMUK.js.map} +0 -0
- /package/dist/{chunk-XEVB4WON.js.map → chunk-2JSYG54Z.js.map} +0 -0
- /package/dist/{chunk-GU4XA76N.js.map → chunk-3COHIXJE.js.map} +0 -0
- /package/dist/{chunk-W7VIESST.js.map → chunk-3JZI3ZBU.js.map} +0 -0
- /package/dist/{chunk-5B7UCAYL.js.map → chunk-3RKGBZUV.js.map} +0 -0
- /package/dist/{chunk-ABJT5MG2.js.map → chunk-6PW6SJXE.js.map} +0 -0
- /package/dist/{chunk-N7GEPTZB.js.map → chunk-6UGNUC4K.js.map} +0 -0
- /package/dist/{chunk-4ZZYPG6P.js.map → chunk-BDHA3QOT.js.map} +0 -0
- /package/dist/{chunk-MN77HNBB.js.map → chunk-BOOTTYGZ.js.map} +0 -0
- /package/dist/{chunk-CNMNKSWQ.js.map → chunk-CVPWG3IX.js.map} +0 -0
- /package/dist/{chunk-6QGIRDZS.js.map → chunk-FXUTVJRS.js.map} +0 -0
- /package/dist/{chunk-2GHNW642.js.map → chunk-HL6ARNBJ.js.map} +0 -0
- /package/dist/{chunk-MMW6MLFR.js.map → chunk-HSAO34GP.js.map} +0 -0
- /package/dist/{chunk-QSMZLK7K.js.map → chunk-IBRK4QMC.js.map} +0 -0
- /package/dist/{chunk-2SVUNNJB.js.map → chunk-K3DSRWYV.js.map} +0 -0
- /package/dist/{chunk-76BOJQUE.js.map → chunk-KNPPPVBG.js.map} +0 -0
- /package/dist/{chunk-V22PQM4W.js.map → chunk-LGQJPZKC.js.map} +0 -0
- /package/dist/{chunk-S65MIABQ.js.map → chunk-NSPYODPF.js.map} +0 -0
- /package/dist/{chunk-A6QEPK5J.js.map → chunk-OZBYDL7N.js.map} +0 -0
- /package/dist/{chunk-C2GNLGBM.js.map → chunk-RBLKS6FX.js.map} +0 -0
- /package/dist/{chunk-M7FEUIHO.js.map → chunk-SAVBIJ5O.js.map} +0 -0
- /package/dist/{chunk-CT7LWVB7.js.map → chunk-SVRRQBLT.js.map} +0 -0
- /package/dist/{chunk-PUPDIRI6.js.map → chunk-TO2NPV6U.js.map} +0 -0
- /package/dist/{chunk-652OMXEE.js.map → chunk-V4UJI656.js.map} +0 -0
- /package/dist/{chunk-QCI5HPTA.js.map → chunk-VGFXCETY.js.map} +0 -0
- /package/dist/{chunk-O7LWCCRJ.js.map → chunk-WIQFF44D.js.map} +0 -0
- /package/dist/{chunk-LBDLSBXN.js.map → chunk-WLEPTDKU.js.map} +0 -0
- /package/dist/{commands-4YMZW52K.js.map → commands-OXOLWX75.js.map} +0 -0
- /package/dist/{config-QVH3VNUQ.js.map → config-MDAX3T7G.js.map} +0 -0
- /package/dist/{context-5VXEWH3G.js.map → context-S4ASBZ3O.js.map} +0 -0
- /package/dist/{conversationPersistence-INUNJHOV.js.map → conversationPersistence-WIBFJR62.js.map} +0 -0
- /package/dist/{conversationTracker-H25IOHBE.js.map → conversationTracker-X53D6RLQ.js.map} +0 -0
- /package/dist/{customCommands-7RZHKH2K.js.map → customCommands-S3CSA3GB.js.map} +0 -0
- /package/dist/{env-DPJTGHMP.js.map → env-P2GOYAXV.js.map} +0 -0
- /package/dist/{file-D7W2FBZP.js.map → file-HUPYIU7Y.js.map} +0 -0
- /package/dist/{llmLazy-HSKKIGLC.js.map → llmLazy-MXAQT2DG.js.map} +0 -0
- /package/dist/{loader-YUP6OJTJ.js.map → loader-CFPDXJTQ.js.map} +0 -0
- /package/dist/{lsp-7QKC4DVK.js.map → lsp-XR7JCI4Q.js.map} +0 -0
- /package/dist/{lspAnchor-LCRZ23GA.js.map → lspAnchor-CY46EOLW.js.map} +0 -0
- /package/dist/{mcp-KK6BOD6I.js.map → mcp-MACS532E.js.map} +0 -0
- /package/dist/{mentionProcessor-V6JH6HUD.js.map → mentionProcessor-WT7DIUO6.js.map} +0 -0
- /package/dist/{messages-7NVTXWIJ.js.map → messages-TQAKPPWM.js.map} +0 -0
- /package/dist/{model-QSDSUJDB.js.map → model-R7YMMBAR.js.map} +0 -0
- /package/dist/{openai-JC3KJN3H.js.map → openai-BISFRGPN.js.map} +0 -0
- /package/dist/{outputStyles-TPH3CCB4.js.map → outputStyles-HLA3OEH2.js.map} +0 -0
- /package/dist/{pluginRuntime-7EK4LQDD.js.map → pluginRuntime-LD6VPBWN.js.map} +0 -0
- /package/dist/{pluginValidation-BJWCS55I.js.map → pluginValidation-MQFVM3M5.js.map} +0 -0
- /package/dist/{prompts-KQNPPEOG.js.map → prompts-BFS3LOCS.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-V3IAJJPS.js.map → pybAgentSessionLoad-BQJ2JPPT.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-WE7ET356.js.map → pybAgentSessionResume-BBX6KVFN.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-VWDYV4XL.js.map → pybAgentStreamJsonSession-N2AYCHRN.js.map} +0 -0
- /package/dist/{pybHooks-UV7BTIVT.js.map → pybHooks-U4ATAT57.js.map} +0 -0
- /package/dist/{query-KAZY5LOW.js.map → query-PZKEVMJY.js.map} +0 -0
- /package/dist/{registry-FK6UGJPV.js.map → registry-G2FLVWSF.js.map} +0 -0
- /package/dist/{ripgrep-CXJ4DFPU.js.map → ripgrep-NPYGQPV3.js.map} +0 -0
- /package/dist/{skillMarketplace-QUJXDKZK.js.map → skillMarketplace-H5P3PRHJ.js.map} +0 -0
- /package/dist/{state-GC3XELIE.js.map → state-RM2QGI3K.js.map} +0 -0
- /package/dist/{theme-24PLJSPD.js.map → theme-6GGT3D7J.js.map} +0 -0
- /package/dist/{toolPermissionSettings-S6NJPBKT.js.map → toolPermissionSettings-IC6ELOVR.js.map} +0 -0
- /package/dist/{tools-NC5R4I6F.js.map → tools-F4GLOVTV.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/session/sessionSqlStore.ts", "../src/utils/session/sessionStoreConfig.ts", "../src/utils/session/sessionStoreSchema.ts", "../src/utils/session/sessionProjectIdentity.ts", "../src/utils/session/sessionSqlDualWriteTelemetry.ts"],
|
|
4
|
+
"sourcesContent": ["import { createRequire } from 'node:module'\nimport { existsSync, mkdirSync } from 'fs'\nimport { dirname } from 'path'\nimport type {\n SessionStoreLoadedFileHistorySnapshot,\n SessionStoreLoadedMetaEvent,\n SessionStoreLoadedSummary,\n SessionStore,\n SessionStoreAppendFileHistorySnapshotInput,\n SessionStoreAppendMessageInput,\n SessionStoreAppendMetaEventInput,\n SessionStoreAppendPartInput,\n SessionStoreAppendSummaryInput,\n SessionStoreLoadOptions,\n SessionStoreLoadedMessage,\n} from './sessionStore'\nimport { getSessionStoreDbPath } from './sessionStoreConfig'\nimport { ensureSessionStoreSchema } from './sessionStoreSchema'\nimport { resolveSessionProjectIdentity } from './sessionProjectIdentity'\nimport {\n recordSessionProjectResolveFailure,\n recordSessionProjectResolveSuccess,\n} from './sessionSqlDualWriteTelemetry'\n\ntype BunSqliteDatabase = any\ntype BunSqliteDatabaseCtor = new (\n filePath: string,\n options?: { create?: boolean },\n) => BunSqliteDatabase\n\nconst requireForSqlite = createRequire(import.meta.url)\nlet cachedDatabaseCtor: BunSqliteDatabaseCtor | null | undefined\n\nfunction getDatabaseCtor(): BunSqliteDatabaseCtor | null {\n if (cachedDatabaseCtor !== undefined) return cachedDatabaseCtor\n try {\n const mod = requireForSqlite('bun:sqlite') as {\n Database?: BunSqliteDatabaseCtor\n }\n if (typeof mod?.Database === 'function') {\n cachedDatabaseCtor = mod.Database\n return cachedDatabaseCtor\n }\n } catch {}\n cachedDatabaseCtor = null\n return null\n}\n\nfunction getDatabaseCtorOrThrow(): BunSqliteDatabaseCtor {\n const Database = getDatabaseCtor()\n if (Database) return Database\n const error = new Error(\n 'PYB_SESSION_SQL_UNAVAILABLE: bun:sqlite is unavailable for session store',\n ) as Error & { code?: string }\n error.code = 'PYB_SESSION_SQL_UNAVAILABLE'\n throw error\n}\n\nfunction asNullableText(value: unknown): string | null {\n const text = String(value ?? '').trim()\n return text ? text : null\n}\n\nfunction asRole(value: unknown): 'user' | 'assistant' | 'progress' {\n return value === 'assistant' || value === 'progress' ? value : 'user'\n}\n\nfunction asProjectCwd(value: unknown): string | null {\n const text = String(value ?? '').trim()\n return text ? text : null\n}\n\nexport function createSessionSqlStore(options?: { dbFilePath?: string }): SessionStore {\n const dbFilePath = options?.dbFilePath ?? getSessionStoreDbPath()\n if (!existsSync(dirname(dbFilePath))) {\n mkdirSync(dirname(dbFilePath), { recursive: true })\n }\n const Database = getDatabaseCtorOrThrow()\n const db = new Database(dbFilePath, { create: true })\n ensureSessionStoreSchema(db)\n const upsertProject = db.prepare(`\n INSERT INTO project (id, cwd, normalized_cwd, name, vcs, time_created, time_updated)\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)\n ON CONFLICT(id) DO UPDATE SET\n cwd = excluded.cwd,\n normalized_cwd = excluded.normalized_cwd,\n name = COALESCE(excluded.name, project.name),\n vcs = COALESCE(excluded.vcs, project.vcs),\n time_updated = excluded.time_updated\n `)\n const upsertSession = db.prepare(`\n INSERT INTO session (id, project_id, cwd, created_at, updated_at)\n VALUES (?1, ?2, ?3, ?4, ?5)\n ON CONFLICT(id) DO UPDATE SET\n project_id = COALESCE(excluded.project_id, session.project_id),\n cwd = COALESCE(excluded.cwd, session.cwd),\n updated_at = excluded.updated_at\n `)\n const upsertMessage = db.prepare(`\n INSERT INTO message (\n uuid, session_id, agent_id, role, parent_uuid, logical_parent_uuid,\n request_id, is_api_error, time_created, raw_message_json, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)\n ON CONFLICT(uuid) DO UPDATE SET\n session_id = excluded.session_id,\n agent_id = excluded.agent_id,\n role = excluded.role,\n parent_uuid = excluded.parent_uuid,\n logical_parent_uuid = excluded.logical_parent_uuid,\n request_id = excluded.request_id,\n is_api_error = excluded.is_api_error,\n time_created = excluded.time_created,\n raw_message_json = excluded.raw_message_json,\n updated_at = excluded.updated_at\n `)\n const upsertPart = db.prepare(`\n INSERT INTO part (\n id, message_uuid, session_id, part_index, part_type, raw_part_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)\n ON CONFLICT(id) DO UPDATE SET\n message_uuid = excluded.message_uuid,\n session_id = excluded.session_id,\n part_index = excluded.part_index,\n part_type = excluded.part_type,\n raw_part_json = excluded.raw_part_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertSummary = db.prepare(`\n INSERT INTO session_summary (\n id, session_id, leaf_uuid, summary, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n leaf_uuid = excluded.leaf_uuid,\n summary = excluded.summary,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertMetaEvent = db.prepare(`\n INSERT INTO session_meta_event (\n id, session_id, event_type, payload_json, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n event_type = excluded.event_type,\n payload_json = excluded.payload_json,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const upsertFileHistorySnapshot = db.prepare(`\n INSERT INTO file_history_snapshot (\n id, session_id, message_uuid, snapshot_json, is_update, time_created, updated_at\n )\n VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)\n ON CONFLICT(id) DO UPDATE SET\n session_id = excluded.session_id,\n message_uuid = excluded.message_uuid,\n snapshot_json = excluded.snapshot_json,\n is_update = excluded.is_update,\n time_created = excluded.time_created,\n updated_at = excluded.updated_at\n `)\n const resolveProjectId = (\n projectCwd: string | null,\n timeCreated: number,\n now: number,\n ): string | null => {\n if (!projectCwd) return null\n try {\n const identity = resolveSessionProjectIdentity(projectCwd)\n upsertProject.run(\n identity.projectId,\n identity.projectCwd,\n identity.normalizedCwd,\n null,\n null,\n timeCreated,\n now,\n )\n recordSessionProjectResolveSuccess()\n return identity.projectId\n } catch {\n recordSessionProjectResolveFailure()\n return null\n }\n }\n const appendMessages = (messages: SessionStoreAppendMessageInput[]) => {\n if (!Array.isArray(messages) || messages.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMessageInput[]) => {\n for (const item of list) {\n const sessionId = String(item.sessionId ?? '').trim()\n const uuid = String(item.uuid ?? '').trim()\n if (!sessionId || !uuid) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertMessage.run(\n uuid,\n sessionId,\n asNullableText(item.agentId),\n asRole(item.role),\n asNullableText(item.parentUuid),\n asNullableText(item.logicalParentUuid),\n asNullableText(item.requestId),\n item.isApiError ? 1 : 0,\n timeCreated,\n JSON.stringify(item.rawMessage ?? {}),\n now,\n )\n }\n })\n tx(messages)\n return messages.length\n }\n const appendParts = (parts: SessionStoreAppendPartInput[]) => {\n if (!Array.isArray(parts) || parts.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendPartInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const messageUuid = String(item.messageUuid ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !messageUuid || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertPart.run(\n id,\n messageUuid,\n sessionId,\n Number(item.partIndex) || 0,\n String(item.partType ?? 'unknown'),\n JSON.stringify(item.rawPart ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(parts)\n return parts.length\n }\n const appendSessionSummaries = (records: SessionStoreAppendSummaryInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendSummaryInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertSummary.run(\n id,\n sessionId,\n asNullableText(item.leafUuid),\n String(item.summary ?? ''),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendSessionMetaEvents = (records: SessionStoreAppendMetaEventInput[]) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendMetaEventInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertMetaEvent.run(\n id,\n sessionId,\n String(item.eventType ?? 'unknown'),\n JSON.stringify(item.payload ?? {}),\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const appendFileHistorySnapshots = (\n records: SessionStoreAppendFileHistorySnapshotInput[],\n ) => {\n if (!Array.isArray(records) || records.length === 0) return 0\n const now = Date.now()\n const tx = db.transaction((list: SessionStoreAppendFileHistorySnapshotInput[]) => {\n for (const item of list) {\n const id = String(item.id ?? '').trim()\n const sessionId = String(item.sessionId ?? '').trim()\n if (!id || !sessionId) continue\n const timeCreated = Number(item.timeCreated) || now\n const projectCwd = asProjectCwd(item.projectCwd)\n const projectId = resolveProjectId(projectCwd, timeCreated, now)\n upsertSession.run(sessionId, projectId, projectCwd, timeCreated, now)\n upsertFileHistorySnapshot.run(\n id,\n sessionId,\n asNullableText(item.messageUuid),\n JSON.stringify(item.snapshot ?? {}),\n item.isSnapshotUpdate ? 1 : 0,\n timeCreated,\n now,\n )\n }\n })\n tx(records)\n return records.length\n }\n const loadMessages = (\n sessionId: string,\n options: SessionStoreLoadOptions = {},\n ): SessionStoreLoadedMessage[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const fromTime = Number.isFinite(options.fromTime) ? Number(options.fromTime) : null\n const toTime = Number.isFinite(options.toTime) ? Number(options.toTime) : null\n const rows = db\n .prepare(\n `\n SELECT\n session_id, uuid, role, time_created, raw_message_json,\n agent_id, parent_uuid, logical_parent_uuid, request_id, is_api_error\n FROM message\n WHERE session_id = ?1\n AND (?2 IS NULL OR time_created >= ?2)\n AND (?3 IS NULL OR time_created <= ?3)\n ORDER BY time_created ASC, uuid ASC\n `,\n )\n .all(target, fromTime, toTime) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n uuid: String(row.uuid),\n role: asRole(row.role),\n timeCreated: Number(row.time_created) || 0,\n rawMessage: JSON.parse(String(row.raw_message_json ?? '{}')),\n agentId: asNullableText(row.agent_id),\n parentUuid: asNullableText(row.parent_uuid),\n logicalParentUuid: asNullableText(row.logical_parent_uuid),\n requestId: asNullableText(row.request_id),\n isApiError: Number(row.is_api_error ?? 0) > 0,\n }))\n }\n const loadSessionSummaries = (sessionId: string): SessionStoreLoadedSummary[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, leaf_uuid, summary, time_created\n FROM session_summary\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n leafUuid: asNullableText(row.leaf_uuid),\n summary: String(row.summary ?? ''),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadSessionMetaEvents = (sessionId: string): SessionStoreLoadedMetaEvent[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, event_type, payload_json, time_created\n FROM session_meta_event\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n eventType: String(row.event_type ?? ''),\n payload: JSON.parse(String(row.payload_json ?? '{}')),\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const loadFileHistorySnapshots = (\n sessionId: string,\n ): SessionStoreLoadedFileHistorySnapshot[] => {\n const target = String(sessionId ?? '').trim()\n if (!target) return []\n const rows = db\n .prepare(\n `\n SELECT session_id, message_uuid, snapshot_json, is_update, time_created\n FROM file_history_snapshot\n WHERE session_id = ?1\n ORDER BY time_created ASC, id ASC\n `,\n )\n .all(target) as Array<Record<string, any>>\n return rows.map(row => ({\n sessionId: String(row.session_id),\n messageUuid: asNullableText(row.message_uuid),\n snapshot: JSON.parse(String(row.snapshot_json ?? '{}')),\n isSnapshotUpdate: Number(row.is_update ?? 0) > 0,\n timeCreated: Number(row.time_created) || 0,\n }))\n }\n const findLatestSessionId = (cwd?: string): string | null => {\n const projectScope = asProjectCwd(cwd)\n if (projectScope) {\n const scopeIdentity = resolveSessionProjectIdentity(projectScope)\n const projectRow = db\n .prepare(\n `\n SELECT id\n FROM session\n WHERE project_id = ?1\n ORDER BY updated_at DESC, id DESC\n LIMIT 1\n `,\n )\n .get(scopeIdentity.projectId) as { id?: string } | null\n const projectScopedId = asNullableText(projectRow?.id)\n if (projectScopedId) return projectScopedId\n\n const cwdRow = db\n .prepare(\n `\n SELECT id\n FROM session\n WHERE cwd = ?1\n ORDER BY updated_at DESC, id DESC\n LIMIT 1\n `,\n )\n .get(projectScope) as { id?: string } | null\n const cwdScopedId = asNullableText(cwdRow?.id)\n if (cwdScopedId) return cwdScopedId\n }\n const row = db\n .prepare(\n `\n SELECT session_id\n FROM message\n ORDER BY time_created DESC, uuid DESC\n LIMIT 1\n `,\n )\n .get() as { session_id?: string } | null\n return asNullableText(row?.session_id)\n }\n const close = () => {\n db.close()\n }\n return {\n appendMessages,\n appendParts,\n appendSessionSummaries,\n appendSessionMetaEvents,\n appendFileHistorySnapshots,\n loadSessionSummaries,\n loadSessionMetaEvents,\n loadFileHistorySnapshots,\n loadMessages,\n findLatestSessionId,\n close,\n }\n}\n", "import { resolveXdgDataPath } from '@utils/config/env'\n\nexport type SessionStoreFlags = {\n sqlWriteEnabled: boolean\n sqlReadEnabled: boolean\n}\n\nlet cachedFlags: SessionStoreFlags | null = null\n\nfunction parseBooleanFlag(\n rawValue: string | undefined,\n defaultValue: boolean,\n): boolean {\n const normalized = String(rawValue ?? '')\n .trim()\n .toLowerCase()\n if (!normalized) return defaultValue\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false\n return defaultValue\n}\n\nexport function getSessionStoreFlags(): SessionStoreFlags {\n if (cachedFlags) return cachedFlags\n cachedFlags = {\n sqlWriteEnabled: parseBooleanFlag(\n process.env.PYB_SESSION_STORE_SQL_WRITE,\n true,\n ),\n sqlReadEnabled: parseBooleanFlag(process.env.PYB_SESSION_STORE_SQL_READ, true),\n }\n return cachedFlags\n}\n\nexport function getSessionStoreDbPath(): string {\n const override = String(process.env.PYB_SESSION_STORE_DB_PATH ?? '').trim()\n if (override) return override\n return resolveXdgDataPath('sessions/session-store.db')\n}\n\nexport function resetSessionStoreFlagsForTest() {\n cachedFlags = null\n}\n", "type BunSqliteDatabase = any\n\nexport const SESSION_STORE_SCHEMA_VERSION = 2\n\nfunction applyRuntimePragmas(db: BunSqliteDatabase) {\n db.exec(`PRAGMA journal_mode=WAL;`)\n db.exec(`PRAGMA synchronous=NORMAL;`)\n db.exec(`PRAGMA busy_timeout=5000;`)\n db.exec(`PRAGMA foreign_keys=ON;`)\n}\n\nexport function ensureSessionStoreSchema(db: BunSqliteDatabase) {\n applyRuntimePragmas(db)\n db.exec(`\n CREATE TABLE IF NOT EXISTS schema_version (\n name TEXT PRIMARY KEY,\n version INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS project (\n id TEXT PRIMARY KEY,\n cwd TEXT NOT NULL,\n normalized_cwd TEXT NOT NULL,\n name TEXT,\n vcs TEXT,\n time_created INTEGER NOT NULL,\n time_updated INTEGER NOT NULL\n );\n `)\n db.exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS idx_project_normalized_cwd_unique\n ON project(normalized_cwd);\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n cwd TEXT,\n slug TEXT,\n git_branch TEXT,\n user_type TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `)\n const sessionColumns = db\n .prepare(`PRAGMA table_info(session)`)\n .all() as Array<{ name: string }>\n if (!sessionColumns.some(col => col.name === 'project_id')) {\n db.exec(`ALTER TABLE session ADD COLUMN project_id TEXT;`)\n }\n db.exec(`\n CREATE TABLE IF NOT EXISTS message (\n uuid TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n agent_id TEXT,\n role TEXT NOT NULL,\n parent_uuid TEXT,\n logical_parent_uuid TEXT,\n request_id TEXT,\n is_api_error INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n raw_message_json TEXT NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS part (\n id TEXT PRIMARY KEY,\n message_uuid TEXT NOT NULL,\n session_id TEXT NOT NULL,\n part_index INTEGER NOT NULL,\n part_type TEXT NOT NULL,\n raw_part_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(message_uuid) REFERENCES message(uuid) ON DELETE CASCADE,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_meta_event (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS session_summary (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n leaf_uuid TEXT,\n summary TEXT NOT NULL,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE TABLE IF NOT EXISTS file_history_snapshot (\n id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n message_uuid TEXT,\n snapshot_json TEXT NOT NULL,\n is_update INTEGER NOT NULL DEFAULT 0,\n time_created INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY(session_id) REFERENCES session(id) ON DELETE CASCADE\n );\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_message_session_time_uuid\n ON message(session_id, time_created, uuid);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_part_session_message_part_index\n ON part(session_id, message_uuid, part_index);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_meta_event_session_time\n ON session_meta_event(session_id, time_created);\n `)\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_session_project_updated\n ON session(project_id, updated_at, id);\n `)\n const now = Date.now()\n db.prepare(\n `\n INSERT INTO schema_version (name, version, updated_at)\n VALUES (?1, ?2, ?3)\n ON CONFLICT(name) DO UPDATE SET\n version = excluded.version,\n updated_at = excluded.updated_at\n `,\n ).run('session_store', SESSION_STORE_SCHEMA_VERSION, now)\n}\n", "import { createHash } from 'crypto'\r\nimport { realpathSync } from 'fs'\r\nimport { findGitRoot } from '@utils/config/projectInstructions'\r\n\r\ntype PlatformKind = NodeJS.Platform\r\n\r\ntype ResolveOptions = {\r\n platform?: PlatformKind\r\n realpathResolver?: (inputPath: string) => string\r\n}\r\n\r\ntype IdentityOptions = ResolveOptions & {\r\n findGitRoot?: (cwd: string) => string | null\r\n}\r\n\r\nexport type SessionProjectIdentity = {\r\n source: 'repo_root' | 'cwd'\r\n projectCwd: string\r\n normalizedCwd: string\r\n projectId: string\r\n}\r\n\r\nfunction defaultRealpath(inputPath: string): string {\r\n try {\r\n return realpathSync(inputPath)\r\n } catch {\r\n return inputPath\r\n }\r\n}\r\n\r\nexport function normalizeSessionProjectPath(\r\n inputPath: string,\r\n options: ResolveOptions = {},\r\n): string {\r\n const platform = options.platform ?? process.platform\r\n const realpathResolver = options.realpathResolver ?? defaultRealpath\r\n const resolved = realpathResolver(inputPath)\r\n let normalized = String(resolved).replace(/\\\\/g, '/')\r\n if (normalized.length > 1) {\r\n normalized = normalized.replace(/\\/+$/, '')\r\n }\r\n if (platform === 'win32') {\r\n normalized = normalized.replace(/^([A-Z]):/, (_m, drive: string) =>\r\n `${drive.toLowerCase()}:`,\r\n )\r\n normalized = normalized.toLowerCase()\r\n }\r\n return normalized\r\n}\r\n\r\nexport function computeSessionProjectId(normalizedCwd: string): string {\r\n return createHash('sha256').update(normalizedCwd, 'utf8').digest('hex')\r\n}\r\n\r\nexport function resolveSessionProjectIdentity(\r\n cwd: string,\r\n options: IdentityOptions = {},\r\n): SessionProjectIdentity {\r\n const gitRootRunner = options.findGitRoot ?? findGitRoot\r\n const repoRoot = gitRootRunner(cwd)\r\n const source: SessionProjectIdentity['source'] = repoRoot ? 'repo_root' : 'cwd'\r\n const projectCwd = repoRoot ?? cwd\r\n const normalizedCwd = normalizeSessionProjectPath(projectCwd, options)\r\n const projectId = computeSessionProjectId(normalizedCwd)\r\n return {\r\n source,\r\n projectCwd,\r\n normalizedCwd,\r\n projectId,\r\n }\r\n}\r\n", "export type SessionSqlDualWriteSnapshot = {\n successCount: number\n failCount: number\n totalLatencyMs: number\n lastErrorCode: string | null\n projectResolveSuccessCount: number\n projectResolveFailCount: number\n}\n\nexport type SessionSqlDualWriteMetrics = SessionSqlDualWriteSnapshot & {\n totalAttempts: number\n successRate: number\n avgSuccessLatencyMs: number\n}\n\nconst state: SessionSqlDualWriteSnapshot = {\n successCount: 0,\n failCount: 0,\n totalLatencyMs: 0,\n lastErrorCode: null,\n projectResolveSuccessCount: 0,\n projectResolveFailCount: 0,\n}\n\nexport function recordSessionSqlDualWriteSuccess(latencyMs: number) {\n state.successCount += 1\n state.totalLatencyMs += Math.max(0, Number(latencyMs) || 0)\n}\n\nexport function recordSessionSqlDualWriteFailure(errorCode?: string | null) {\n state.failCount += 1\n state.lastErrorCode = errorCode ? String(errorCode) : 'SESSION_SQL_DUALWRITE_FAILED'\n}\n\nexport function recordSessionProjectResolveSuccess() {\n state.projectResolveSuccessCount += 1\n}\n\nexport function recordSessionProjectResolveFailure() {\n state.projectResolveFailCount += 1\n}\n\nexport function getSessionSqlDualWriteSnapshot(): SessionSqlDualWriteSnapshot {\n return { ...state }\n}\n\nexport function getSessionSqlDualWriteMetrics(): SessionSqlDualWriteMetrics {\n const totalAttempts = state.successCount + state.failCount\n const successRate = totalAttempts > 0 ? state.successCount / totalAttempts : 0\n const avgSuccessLatencyMs =\n state.successCount > 0 ? state.totalLatencyMs / state.successCount : 0\n return {\n ...state,\n totalAttempts,\n successRate,\n avgSuccessLatencyMs,\n }\n}\n\nexport function resetSessionSqlDualWriteTelemetry() {\n state.successCount = 0\n state.failCount = 0\n state.totalLatencyMs = 0\n state.lastErrorCode = null\n state.projectResolveSuccessCount = 0\n state.projectResolveFailCount = 0\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["options"]
|
|
7
|
+
}
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
getSettingsFileCandidates,
|
|
8
8
|
loadSettingsWithLegacyFallback,
|
|
9
9
|
saveSettingsToPrimaryAndSyncLegacy
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6PW6SJXE.js";
|
|
11
11
|
import {
|
|
12
12
|
getSessionPlugins
|
|
13
13
|
} from "./chunk-BJSWTHRM.js";
|
|
14
14
|
import {
|
|
15
15
|
getCwd,
|
|
16
16
|
getXdgConfigDir
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WLEPTDKU.js";
|
|
18
18
|
|
|
19
19
|
// src/services/ui/outputStyles.ts
|
|
20
20
|
import figures from "figures";
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import { createRequire as __pybCreateRequire } from "node:module";
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
findGitRoot,
|
|
5
|
+
getDirsFromGitRootToCwd,
|
|
6
|
+
getProjectInstructionFiles,
|
|
7
|
+
readAndConcatProjectInstructionFiles
|
|
8
|
+
} from "./chunk-KFEHHKZ2.js";
|
|
3
9
|
import {
|
|
4
10
|
ripGrepWithStatus
|
|
5
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KNPPPVBG.js";
|
|
6
12
|
import {
|
|
7
13
|
getCurrentProjectConfig,
|
|
8
14
|
getGlobalConfig,
|
|
9
15
|
getOrCreateUserID,
|
|
10
16
|
saveCurrentProjectConfig
|
|
11
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LGQJPZKC.js";
|
|
12
18
|
import {
|
|
13
19
|
SESSION_ID,
|
|
14
20
|
env,
|
|
@@ -16,155 +22,17 @@ import {
|
|
|
16
22
|
getCwd,
|
|
17
23
|
isContextScanDisabled,
|
|
18
24
|
logError
|
|
19
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-WLEPTDKU.js";
|
|
20
26
|
import {
|
|
21
27
|
MACRO
|
|
22
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-KP3LQCMR.js";
|
|
23
29
|
import {
|
|
24
30
|
__require
|
|
25
31
|
} from "./chunk-I3J4JYES.js";
|
|
26
32
|
|
|
27
33
|
// src/utils/config/style.ts
|
|
28
|
-
import { readFileSync
|
|
34
|
+
import { readFileSync } from "fs";
|
|
29
35
|
import { memoize } from "lodash-es";
|
|
30
|
-
|
|
31
|
-
// src/utils/config/projectInstructions.ts
|
|
32
|
-
import { existsSync, readFileSync } from "fs";
|
|
33
|
-
import { dirname, join, parse, relative, resolve, sep } from "path";
|
|
34
|
-
var DEFAULT_PROJECT_DOC_MAX_BYTES = 32 * 1024;
|
|
35
|
-
function isRegularFile(path) {
|
|
36
|
-
try {
|
|
37
|
-
return existsSync(path);
|
|
38
|
-
} catch {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function findGitRoot(startDir) {
|
|
43
|
-
let currentDir = resolve(startDir);
|
|
44
|
-
const fsRoot = parse(currentDir).root;
|
|
45
|
-
while (true) {
|
|
46
|
-
const dotGitPath = join(currentDir, ".git");
|
|
47
|
-
if (existsSync(dotGitPath)) {
|
|
48
|
-
return currentDir;
|
|
49
|
-
}
|
|
50
|
-
if (currentDir === fsRoot) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
currentDir = dirname(currentDir);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function getDirsFromGitRootToCwd(gitRoot, cwd) {
|
|
57
|
-
const absoluteGitRoot = resolve(gitRoot);
|
|
58
|
-
const absoluteCwd = resolve(cwd);
|
|
59
|
-
const rel = relative(absoluteGitRoot, absoluteCwd);
|
|
60
|
-
if (!rel || rel === ".") {
|
|
61
|
-
return [absoluteGitRoot];
|
|
62
|
-
}
|
|
63
|
-
const parts = rel.split(sep).filter(Boolean);
|
|
64
|
-
const dirs = [absoluteGitRoot];
|
|
65
|
-
for (let i = 0; i < parts.length; i++) {
|
|
66
|
-
dirs.push(join(absoluteGitRoot, ...parts.slice(0, i + 1)));
|
|
67
|
-
}
|
|
68
|
-
return dirs;
|
|
69
|
-
}
|
|
70
|
-
function getProjectInstructionFiles(cwd) {
|
|
71
|
-
const gitRoot = findGitRoot(cwd);
|
|
72
|
-
const root = gitRoot ?? resolve(cwd);
|
|
73
|
-
const dirs = getDirsFromGitRootToCwd(root, cwd);
|
|
74
|
-
const results = [];
|
|
75
|
-
for (const dir of dirs) {
|
|
76
|
-
const overridePath = join(dir, "AGENTS.override.md");
|
|
77
|
-
const agentsPath = join(dir, "AGENTS.md");
|
|
78
|
-
if (isRegularFile(overridePath)) {
|
|
79
|
-
results.push({
|
|
80
|
-
absolutePath: overridePath,
|
|
81
|
-
relativePathFromGitRoot: relative(root, overridePath) || "AGENTS.override.md",
|
|
82
|
-
filename: "AGENTS.override.md"
|
|
83
|
-
});
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (isRegularFile(agentsPath)) {
|
|
87
|
-
results.push({
|
|
88
|
-
absolutePath: agentsPath,
|
|
89
|
-
relativePathFromGitRoot: relative(root, agentsPath) || "AGENTS.md",
|
|
90
|
-
filename: "AGENTS.md"
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return results;
|
|
95
|
-
}
|
|
96
|
-
function getProjectDocMaxBytes() {
|
|
97
|
-
const raw = process.env.PYB_PROJECT_DOC_MAX_BYTES;
|
|
98
|
-
if (!raw) return DEFAULT_PROJECT_DOC_MAX_BYTES;
|
|
99
|
-
const parsed = Number.parseInt(raw, 10);
|
|
100
|
-
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
101
|
-
return DEFAULT_PROJECT_DOC_MAX_BYTES;
|
|
102
|
-
return parsed;
|
|
103
|
-
}
|
|
104
|
-
function readAndConcatProjectInstructionFiles(files, {
|
|
105
|
-
maxBytes = getProjectDocMaxBytes(),
|
|
106
|
-
includeHeadings = true
|
|
107
|
-
} = {}) {
|
|
108
|
-
let totalBytes = 0;
|
|
109
|
-
let truncated = false;
|
|
110
|
-
const parts = [];
|
|
111
|
-
const truncateUtf8ToBytes = (value, bytes) => {
|
|
112
|
-
const buf = Buffer.from(value, "utf8");
|
|
113
|
-
if (buf.length <= bytes) return value;
|
|
114
|
-
return buf.subarray(0, Math.max(0, bytes)).toString("utf8");
|
|
115
|
-
};
|
|
116
|
-
for (const file of files) {
|
|
117
|
-
if (totalBytes >= maxBytes) {
|
|
118
|
-
truncated = true;
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
let raw;
|
|
122
|
-
try {
|
|
123
|
-
raw = readFileSync(file.absolutePath, "utf-8");
|
|
124
|
-
} catch {
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
if (!raw.trim()) continue;
|
|
128
|
-
const separator = parts.length > 0 ? "\n\n" : "";
|
|
129
|
-
const separatorBytes = Buffer.byteLength(separator, "utf8");
|
|
130
|
-
const remainingAfterSeparator = maxBytes - totalBytes - separatorBytes;
|
|
131
|
-
if (remainingAfterSeparator <= 0) {
|
|
132
|
-
truncated = true;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
const heading = includeHeadings ? `# ${file.filename}
|
|
136
|
-
|
|
137
|
-
_Path: ${file.relativePathFromGitRoot}_
|
|
138
|
-
|
|
139
|
-
` : "";
|
|
140
|
-
const block = `${heading}${raw}`.trimEnd();
|
|
141
|
-
const blockBytes = Buffer.byteLength(block, "utf8");
|
|
142
|
-
if (blockBytes <= remainingAfterSeparator) {
|
|
143
|
-
parts.push(`${separator}${block}`);
|
|
144
|
-
totalBytes += separatorBytes + blockBytes;
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
truncated = true;
|
|
148
|
-
const suffix = `
|
|
149
|
-
|
|
150
|
-
... (truncated: project instruction files exceeded ${maxBytes} bytes)`;
|
|
151
|
-
const suffixBytes = Buffer.byteLength(suffix, "utf8");
|
|
152
|
-
let finalBlock = "";
|
|
153
|
-
if (suffixBytes >= remainingAfterSeparator) {
|
|
154
|
-
finalBlock = truncateUtf8ToBytes(suffix, remainingAfterSeparator);
|
|
155
|
-
} else {
|
|
156
|
-
const prefixBudget = remainingAfterSeparator - suffixBytes;
|
|
157
|
-
const prefix = truncateUtf8ToBytes(block, prefixBudget);
|
|
158
|
-
finalBlock = `${prefix}${suffix}`;
|
|
159
|
-
}
|
|
160
|
-
parts.push(`${separator}${finalBlock}`);
|
|
161
|
-
totalBytes += separatorBytes + Buffer.byteLength(finalBlock, "utf8");
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
return { content: parts.join(""), truncated };
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// src/utils/config/style.ts
|
|
168
36
|
var STYLE_PROMPT = "The codebase follows strict style guidelines shown below. All code changes must strictly adhere to these guidelines to maintain consistency and quality.";
|
|
169
37
|
var getCodeStyle = memoize(() => {
|
|
170
38
|
const styles = [];
|
|
@@ -174,7 +42,7 @@ var getCodeStyle = memoize(() => {
|
|
|
174
42
|
styles.push(
|
|
175
43
|
`Contents of ${file.absolutePath}:
|
|
176
44
|
|
|
177
|
-
${
|
|
45
|
+
${readFileSync(file.absolutePath, "utf-8")}`
|
|
178
46
|
);
|
|
179
47
|
} catch {
|
|
180
48
|
}
|
|
@@ -265,9 +133,9 @@ async function getGitState() {
|
|
|
265
133
|
}
|
|
266
134
|
|
|
267
135
|
// src/context/index.ts
|
|
268
|
-
import { isAbsolute, join as
|
|
136
|
+
import { isAbsolute, join as join2, relative as relative2, resolve as resolve2, sep } from "path";
|
|
269
137
|
import { readFile } from "fs/promises";
|
|
270
|
-
import { existsSync as
|
|
138
|
+
import { existsSync as existsSync2, readdirSync as readdirSync2 } from "fs";
|
|
271
139
|
|
|
272
140
|
// src/utils/identity/user.ts
|
|
273
141
|
import { memoize as memoize3 } from "lodash-es";
|
|
@@ -301,20 +169,20 @@ var getUser = memoize3(async () => {
|
|
|
301
169
|
});
|
|
302
170
|
|
|
303
171
|
// src/utils/config/rules.ts
|
|
304
|
-
import { existsSync
|
|
305
|
-
import { join
|
|
172
|
+
import { existsSync, readdirSync, readFileSync as readFileSync2, statSync } from "fs";
|
|
173
|
+
import { join, relative, resolve } from "path";
|
|
306
174
|
import matter from "gray-matter";
|
|
307
175
|
import { minimatch } from "minimatch";
|
|
308
176
|
function getRulesFromDir(dir, root, cwd) {
|
|
309
|
-
if (!
|
|
177
|
+
if (!existsSync(dir)) return [];
|
|
310
178
|
const rules = [];
|
|
311
179
|
const files = readdirSync(dir);
|
|
312
180
|
for (const file of files) {
|
|
313
181
|
if (!file.endsWith(".md")) continue;
|
|
314
|
-
const filePath =
|
|
182
|
+
const filePath = join(dir, file);
|
|
315
183
|
if (!statSync(filePath).isFile()) continue;
|
|
316
184
|
try {
|
|
317
|
-
const fileContent =
|
|
185
|
+
const fileContent = readFileSync2(filePath, "utf-8");
|
|
318
186
|
const yaml = __require("js-yaml");
|
|
319
187
|
const matterOptions = {
|
|
320
188
|
engines: {
|
|
@@ -329,7 +197,7 @@ function getRulesFromDir(dir, root, cwd) {
|
|
|
329
197
|
rules.push(content.trim());
|
|
330
198
|
continue;
|
|
331
199
|
}
|
|
332
|
-
const relCwd =
|
|
200
|
+
const relCwd = relative(root, cwd);
|
|
333
201
|
const normalizedRelCwd = relCwd.split("\\").join("/");
|
|
334
202
|
const hasMatch = data.paths.some((pattern) => {
|
|
335
203
|
if (minimatch(normalizedRelCwd, pattern)) return true;
|
|
@@ -347,15 +215,15 @@ function getRulesFromDir(dir, root, cwd) {
|
|
|
347
215
|
}
|
|
348
216
|
function getProjectRules(cwd) {
|
|
349
217
|
const gitRoot = findGitRoot(cwd);
|
|
350
|
-
const root = gitRoot ??
|
|
218
|
+
const root = gitRoot ?? resolve(cwd);
|
|
351
219
|
const dirs = getDirsFromGitRootToCwd(root, cwd);
|
|
352
220
|
const rules = [];
|
|
353
221
|
for (const dir of dirs) {
|
|
354
|
-
const claudeRulesDir =
|
|
222
|
+
const claudeRulesDir = join(dir, ".claude", "rules");
|
|
355
223
|
rules.push(...getRulesFromDir(claudeRulesDir, root, cwd));
|
|
356
|
-
const cursorRulesDir =
|
|
224
|
+
const cursorRulesDir = join(dir, ".cursor", "rules");
|
|
357
225
|
rules.push(...getRulesFromDir(cursorRulesDir, root, cwd));
|
|
358
|
-
const pybRulesDir =
|
|
226
|
+
const pybRulesDir = join(dir, ".pyb", "rules");
|
|
359
227
|
rules.push(...getRulesFromDir(pybRulesDir, root, cwd));
|
|
360
228
|
}
|
|
361
229
|
return rules;
|
|
@@ -370,8 +238,8 @@ async function getInstructionFilesNote() {
|
|
|
370
238
|
}
|
|
371
239
|
const cwd = getCwd();
|
|
372
240
|
const instructionFiles = getProjectInstructionFiles(cwd);
|
|
373
|
-
const legacyPath =
|
|
374
|
-
const hasLegacy =
|
|
241
|
+
const legacyPath = join2(cwd, "CLAUDE.md");
|
|
242
|
+
const hasLegacy = existsSync2(legacyPath);
|
|
375
243
|
if (instructionFiles.length === 0 && !hasLegacy) {
|
|
376
244
|
return null;
|
|
377
245
|
}
|
|
@@ -410,8 +278,8 @@ function removeContext(key) {
|
|
|
410
278
|
}
|
|
411
279
|
var getReadme = memoize4(async () => {
|
|
412
280
|
try {
|
|
413
|
-
const readmePath =
|
|
414
|
-
if (!
|
|
281
|
+
const readmePath = join2(getCwd(), "README.md");
|
|
282
|
+
if (!existsSync2(readmePath)) {
|
|
415
283
|
return null;
|
|
416
284
|
}
|
|
417
285
|
const content = await readFile(readmePath, "utf-8");
|
|
@@ -424,7 +292,7 @@ var getReadme = memoize4(async () => {
|
|
|
424
292
|
async function getProjectDocsForCwd(cwd) {
|
|
425
293
|
try {
|
|
426
294
|
const instructionFiles = getProjectInstructionFiles(cwd);
|
|
427
|
-
const legacyPath =
|
|
295
|
+
const legacyPath = join2(cwd, "CLAUDE.md");
|
|
428
296
|
const docs = [];
|
|
429
297
|
if (instructionFiles.length > 0) {
|
|
430
298
|
const { content } = readAndConcatProjectInstructionFiles(
|
|
@@ -444,7 +312,7 @@ ${rules.join("\n\n")}
|
|
|
444
312
|
`.trim();
|
|
445
313
|
docs.unshift(formattedRules);
|
|
446
314
|
}
|
|
447
|
-
if (
|
|
315
|
+
if (existsSync2(legacyPath)) {
|
|
448
316
|
try {
|
|
449
317
|
const content = await readFile(legacyPath, "utf-8");
|
|
450
318
|
docs.push(
|
|
@@ -588,7 +456,7 @@ var buildDirectoryStructure = () => {
|
|
|
588
456
|
const directories = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort((a, b) => a.localeCompare(b));
|
|
589
457
|
const files = entries.filter((entry) => !entry.isDirectory()).map((entry) => entry.name).sort((a, b) => a.localeCompare(b));
|
|
590
458
|
const root = getCwd();
|
|
591
|
-
const rootLabel = root.endsWith(
|
|
459
|
+
const rootLabel = root.endsWith(sep) ? root : `${root}${sep}`;
|
|
592
460
|
return renderTopLevelTree(rootLabel, directories, files);
|
|
593
461
|
};
|
|
594
462
|
var ENV_STATS_IGNORE_PATTERNS = [
|
|
@@ -655,9 +523,9 @@ var computeWorkingDirectoryStructureStats = async () => {
|
|
|
655
523
|
(pattern) => pattern.endsWith("/") ? `${pattern}**` : pattern
|
|
656
524
|
);
|
|
657
525
|
const files = result.files.filter(Boolean).map((file) => {
|
|
658
|
-
const absolutePath = isAbsolute(file) ? file :
|
|
659
|
-
const relativePath =
|
|
660
|
-
const normalized = relativePath.split(
|
|
526
|
+
const absolutePath = isAbsolute(file) ? file : resolve2(cwd, file);
|
|
527
|
+
const relativePath = relative2(cwd, absolutePath);
|
|
528
|
+
const normalized = relativePath.split(sep).join("/");
|
|
661
529
|
return { normalized };
|
|
662
530
|
}).filter((entry) => {
|
|
663
531
|
if (matchIgnorePatterns.length === 0) return true;
|
|
@@ -710,7 +578,7 @@ var getDirectorySet = (paths) => {
|
|
|
710
578
|
};
|
|
711
579
|
var renderTopLevelTree = (rootLabel, directories, files) => {
|
|
712
580
|
const items = [
|
|
713
|
-
...directories.map((name) => ({ name: `${name}${
|
|
581
|
+
...directories.map((name) => ({ name: `${name}${sep}`, isDir: true })),
|
|
714
582
|
...files.map((name) => ({ name, isDir: false }))
|
|
715
583
|
];
|
|
716
584
|
const lines = [];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/config/style.ts", "../src/context/index.ts", "../src/utils/system/git.ts", "../src/utils/identity/user.ts", "../src/utils/config/rules.ts"],
|
|
4
|
+
"sourcesContent": ["import { readFileSync } from 'fs'\nimport { memoize } from 'lodash-es'\nimport { getCwd } from '@utils/state'\nimport { getProjectInstructionFiles } from './projectInstructions'\n\nconst STYLE_PROMPT =\n 'The codebase follows strict style guidelines shown below. All code changes must strictly adhere to these guidelines to maintain consistency and quality.'\n\nexport const getCodeStyle = memoize((): string => {\n const styles: string[] = []\n\n const instructionFiles = getProjectInstructionFiles(getCwd())\n for (const file of instructionFiles) {\n try {\n styles.push(\n `Contents of ${file.absolutePath}:\\n\\n${readFileSync(file.absolutePath, 'utf-8')}`,\n )\n } catch {\n }\n }\n\n if (styles.length === 0) {\n return ''\n }\n\n return `${STYLE_PROMPT}\\n\\n${styles.join('\\n\\n')}`\n})\n", "import {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\nimport { logError } from '@utils/log'\nimport { getCodeStyle } from '@utils/config/style'\nimport { isContextScanDisabled } from '@utils/config/env'\nimport { getCwd } from '@utils/state'\nimport { memoize, omit } from 'lodash-es'\nimport { getIsGit } from '@utils/system/git'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport { isAbsolute, join, relative, resolve, sep } from 'path'\nimport { readFile } from 'fs/promises'\nimport { existsSync, readdirSync } from 'fs'\nimport { getModelManager } from '@utils/model'\nimport { lastX } from '@utils/text/generators'\nimport { getGitEmail } from '@utils/identity/user'\nimport {\n getProjectInstructionFiles,\n readAndConcatProjectInstructionFiles,\n} from '@utils/config/projectInstructions'\nimport { getProjectRules } from '@utils/config/rules'\nimport { ripGrepWithStatus } from '@utils/system/ripgrep'\nimport { minimatch } from 'minimatch'\n\nexport async function getInstructionFilesNote(): Promise<string | null> {\n try {\n if (isContextScanDisabled()) {\n return null\n }\n const cwd = getCwd()\n const instructionFiles = getProjectInstructionFiles(cwd)\n const legacyPath = join(cwd, 'CLAUDE.md')\n const hasLegacy = existsSync(legacyPath)\n\n if (instructionFiles.length === 0 && !hasLegacy) {\n return null\n }\n\n const fileTypes = new Set<string>()\n for (const f of instructionFiles) fileTypes.add(f.filename)\n if (hasLegacy) fileTypes.add('CLAUDE.md (legacy)')\n\n const allFiles = [\n ...instructionFiles.map(f => f.absolutePath),\n ...(hasLegacy ? [legacyPath] : []),\n ]\n\n return `NOTE: Additional project instruction files (${Array.from(fileTypes).join(', ')}) were found. When working in these directories, make sure to read and follow the instructions in the corresponding files:\\n${allFiles\n .map(_ => `- ${_}`)\n .join('\\n')}`\n } catch (error) {\n logError(error)\n return null\n }\n}\n\nexport function setContext(key: string, value: string): void {\n const projectConfig = getCurrentProjectConfig()\n const context = omit(\n { ...projectConfig.context, [key]: value },\n 'codeStyle',\n 'directoryStructure',\n )\n saveCurrentProjectConfig({ ...projectConfig, context })\n}\n\nexport function removeContext(key: string): void {\n const projectConfig = getCurrentProjectConfig()\n const context = omit(\n projectConfig.context,\n key,\n 'codeStyle',\n 'directoryStructure',\n )\n saveCurrentProjectConfig({ ...projectConfig, context })\n}\n\nexport const getReadme = memoize(async (): Promise<string | null> => {\n try {\n const readmePath = join(getCwd(), 'README.md')\n if (!existsSync(readmePath)) {\n return null\n }\n const content = await readFile(readmePath, 'utf-8')\n return content\n } catch (e) {\n logError(e)\n return null\n }\n})\n\nexport async function getProjectDocsForCwd(\n cwd: string,\n): Promise<string | null> {\n try {\n const instructionFiles = getProjectInstructionFiles(cwd)\n const legacyPath = join(cwd, 'CLAUDE.md')\n\n const docs = []\n\n if (instructionFiles.length > 0) {\n const { content } = readAndConcatProjectInstructionFiles(\n instructionFiles,\n { includeHeadings: true },\n )\n if (content.trim().length > 0) docs.push(content)\n }\n\n const rules = getProjectRules(cwd)\n if (rules.length > 0) {\n const formattedRules = `\n# Project Rules (MANDATORY)\nThe following content represents the immutable rules for this project.\n<project_rules>\n${rules.join('\\n\\n')}\n</project_rules>\n`.trim()\n docs.unshift(formattedRules)\n }\n\n if (existsSync(legacyPath)) {\n try {\n const content = await readFile(legacyPath, 'utf-8')\n docs.push(\n `# Legacy instructions (CLAUDE.md)\\n\\n${content}`,\n )\n } catch (e) {\n logError(e)\n }\n }\n\n return docs.length > 0 ? docs.join('\\n\\n---\\n\\n') : null\n } catch (e) {\n logError(e)\n return null\n }\n}\n\nexport const getProjectDocs = memoize(async (): Promise<string | null> => {\n return getProjectDocsForCwd(getCwd())\n})\n\nexport const getGitStatus = memoize(async (): Promise<string | null> => {\n if (process.env.NODE_ENV === 'test') {\n return null\n }\n if (!(await getIsGit())) {\n return null\n }\n\n try {\n const [branch, mainBranch, status, log, authorLog] = await Promise.all([\n execFileNoThrow(\n 'git',\n ['branch', '--show-current'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'origin/HEAD'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.replace('origin/', '').trim()),\n execFileNoThrow(\n 'git',\n ['status', '--short'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n ['log', '--oneline', '-n', '5'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n [\n 'log',\n '--oneline',\n '-n',\n '5',\n '--author',\n (await getGitEmail()) || '',\n ],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n ])\n const statusLines = status.split('\\n').length\n const truncatedStatus =\n statusLines > 200\n ? status.split('\\n').slice(0, 200).join('\\n') +\n '\\n... (truncated because there are more than 200 lines. If you need more information, run \"git status\" using BashTool)'\n : status\n\n return `This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation.\\nCurrent branch: ${branch}\\n\\nMain branch (you will usually use this for PRs): ${mainBranch}\\n\\nStatus:\\n${truncatedStatus || '(clean)'}\\n\\nRecent commits:\\n${log}\\n\\nYour recent commits:\\n${authorLog || '(no recent commits)'}`\n } catch (error) {\n logError(error)\n return null\n }\n})\n\nexport const getContext = memoize(\n async (): Promise<{\n [k: string]: string\n }> => {\n const codeStyle = getCodeStyle()\n const projectConfig = getCurrentProjectConfig()\n const dontCrawl = projectConfig.dontCrawlDirectory || isContextScanDisabled()\n const [\n gitStatus,\n directoryStructure,\n instructionFilesNote,\n readme,\n projectDocs,\n ] = await Promise.all([\n getGitStatus(),\n dontCrawl ? Promise.resolve('') : getDirectoryStructure(),\n dontCrawl ? Promise.resolve('') : getInstructionFilesNote(),\n getReadme(),\n getProjectDocs(),\n ])\n return {\n ...projectConfig.context,\n ...(directoryStructure ? { directoryStructure } : {}),\n ...(gitStatus ? { gitStatus } : {}),\n ...(codeStyle ? { codeStyle } : {}),\n ...(instructionFilesNote ? { instructionFilesNote } : {}),\n ...(readme ? { readme } : {}),\n ...(projectDocs ? { projectDocs } : {}),\n }\n },\n)\n\nexport const getDirectoryStructure = memoize(\n async function (): Promise<string> {\n if (isContextScanDisabled()) {\n return ''\n }\n let lines: string\n try {\n lines = buildDirectoryStructure()\n } catch (error) {\n logError(error)\n return ''\n }\n\n return `Below is a snapshot of this project's file tree structure at the start of the conversation. This snapshot will NOT update during the conversation.\n\n${lines}`\n },\n)\n\nconst buildDirectoryStructure = (): string => {\n const entries = readdirSync(getCwd(), { withFileTypes: true })\n const directories = entries\n .filter(entry => entry.isDirectory())\n .map(entry => entry.name)\n .sort((a, b) => a.localeCompare(b))\n const files = entries\n .filter(entry => !entry.isDirectory())\n .map(entry => entry.name)\n .sort((a, b) => a.localeCompare(b))\n const root = getCwd()\n const rootLabel = root.endsWith(sep) ? root : `${root}${sep}`\n return renderTopLevelTree(rootLabel, directories, files)\n}\n\ntype WorkingDirectoryStructureStats = {\n topLevelDirectoryCount: number\n topLevelFileCount: number\n totalDirectoryCount: number\n totalFileCount: number\n directoryFileRatio: string\n maxDepth: number\n}\n\nconst ENV_STATS_IGNORE_PATTERNS = [\n 'node_modules/',\n '__pycache__/',\n '.git/',\n 'dist/',\n 'build/',\n 'target/',\n 'bin/',\n 'obj/',\n '.idea/',\n '.vscode/',\n '.zig-cache/',\n 'zig-out',\n '.coverage',\n 'coverage/',\n 'vendor/',\n 'tmp/',\n 'temp/',\n '.cache/',\n 'cache/',\n 'logs/',\n '.venv/',\n 'venv/',\n 'env/',\n]\n\nconst PROJECT_STRUCTURE_STATS_GUIDANCE =\n 'Based on current project structure statistics, preliminary complexity analysis: 1 High directory/file ratio \u2192 more fragmented structure, potentially finer hierarchy, higher complexity. 2 Deep max depth \u2192 obvious deep nesting, higher navigation and positioning cost. 3 Many top-level directories \u2192 scattered module entries, need stricter layer confirmation. 4 Large total files \u2192 more likely to trigger output truncation. Processing: Low complexity \u2192 use Glob \"dir/*\" to get structure clues then proceed to locate; High complexity \u2192 use Glob \"dir/*\" to get top-level clues first, then use Glob for layered path confirmation.'\n\nconst getWorkingDirectoryStructureStatsSnapshot = memoize(\n async (): Promise<WorkingDirectoryStructureStats | null> =>\n computeWorkingDirectoryStructureStats(),\n)\n\nexport function resetWorkingDirectoryStatsCacheForTests(): void {\n ;(getWorkingDirectoryStructureStatsSnapshot as any).cache?.clear?.()\n}\n\nexport async function getWorkingDirectoryStructureStats(): Promise<WorkingDirectoryStructureStats | null> {\n const mode = String(process.env.PYB_ENV_STATS_MODE || 'realtime')\n .trim()\n .toLowerCase()\n if (mode === 'snapshot') {\n return getWorkingDirectoryStructureStatsSnapshot()\n }\n return computeWorkingDirectoryStructureStats()\n}\n\nexport async function getProjectStructureStatisticsBlock(): Promise<string> {\n if (isContextScanDisabled()) return ''\n const stats = await getWorkingDirectoryStructureStats()\n if (!stats) return ''\n const statsLine = `\u5F53\u524D\u9879\u76EE\u7EDF\u8BA1\u4FE1\u606F: \u9876\u5C42\u76EE\u5F55\u6570\uFF1A${stats.topLevelDirectoryCount}\u4E2A\uFF0C\u9876\u5C42\u6587\u4EF6\u6570\uFF1A${stats.topLevelFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55\u6570\uFF1A${stats.totalDirectoryCount}\u4E2A\uFF0C\u603B\u6587\u4EF6\u6570\uFF1A${stats.totalFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B=${stats.directoryFileRatio}\uFF0C\u6700\u6DF1\u76EE\u5F55\u5C42\u7EA7=${stats.maxDepth}\u3002\uFF08\u7EDF\u8BA1\u6570\u636E\u4E0D\u5305\u542B\u7A7A\u76EE\u5F55\u4EE5\u53CA\u5E38\u89C1\u975E\u6838\u5FC3\u76EE\u5F55/\u6784\u5EFA\u4EA7\u7269/\u4F9D\u8D56\u7F13\u5B58\u7B49\u6587\u4EF6\u6216\u76EE\u5F55\uFF09`\n return `<context name=\"Project Structure Statistics\">\\n${PROJECT_STRUCTURE_STATS_GUIDANCE}\\n\\n${statsLine}</context>`\n}\n\nconst computeWorkingDirectoryStructureStats = async (): Promise<WorkingDirectoryStructureStats | null> => {\n const cwd = getCwd()\n const abortController = new AbortController()\n const rgIgnoreGlobs = ENV_STATS_IGNORE_PATTERNS.map(pattern => `!${pattern}*`)\n const rgArgs = [\n '--files',\n ...rgIgnoreGlobs.flatMap(pattern => ['--glob', pattern]),\n ]\n const result = await ripGrepWithStatus(rgArgs, cwd, abortController.signal)\n if (result.status !== 'ok') return null\n const matchIgnorePatterns = ENV_STATS_IGNORE_PATTERNS.map(pattern =>\n pattern.endsWith('/') ? `${pattern}**` : pattern,\n )\n const files = result.files\n .filter(Boolean)\n .map(file => {\n const absolutePath = isAbsolute(file) ? file : resolve(cwd, file)\n const relativePath = relative(cwd, absolutePath)\n const normalized = relativePath.split(sep).join('/')\n return { normalized }\n })\n .filter(entry => {\n if (matchIgnorePatterns.length === 0) return true\n return !matchIgnorePatterns.some(pattern =>\n minimatch(entry.normalized, pattern, { dot: true, nocase: false }),\n )\n })\n const totalFileCount = files.length\n const directorySet = getDirectorySet(files.map(entry => entry.normalized))\n let maxDepth = 0\n for (const entry of files) {\n const parts = entry.normalized.split('/').filter(Boolean)\n const depth = Math.max(0, parts.length - 1)\n if (depth > maxDepth) maxDepth = depth\n }\n const ratio =\n totalFileCount === 0\n ? '0.00'\n : (directorySet.size / totalFileCount).toFixed(2)\n const topLevelEntries = readdirSync(cwd, { withFileTypes: true })\n const visibleTopLevel = topLevelEntries.filter(entry => {\n const normalized = entry.isDirectory() ? `${entry.name}/` : entry.name\n if (matchIgnorePatterns.length === 0) return true\n return !matchIgnorePatterns.some(pattern =>\n minimatch(normalized, pattern, { dot: true, nocase: false }),\n )\n })\n const topLevelDirectoryCount = visibleTopLevel.filter(entry =>\n entry.isDirectory(),\n ).length\n const topLevelFileCount = visibleTopLevel.filter(\n entry => !entry.isDirectory(),\n ).length\n return {\n topLevelDirectoryCount,\n topLevelFileCount,\n totalDirectoryCount: directorySet.size,\n totalFileCount,\n directoryFileRatio: ratio,\n maxDepth,\n }\n}\n\nconst getDirectorySet = (paths: string[]) => {\n const directories = new Set<string>()\n for (const entry of paths) {\n const parts = entry.split('/').filter(Boolean)\n if (parts.length <= 1) continue\n for (let i = 0; i < parts.length - 1; i++) {\n directories.add(parts.slice(0, i + 1).join('/'))\n }\n }\n return directories\n}\n\nconst renderTopLevelTree = (\n rootLabel: string,\n directories: string[],\n files: string[],\n): string => {\n const items = [\n ...directories.map(name => ({ name: `${name}${sep}`, isDir: true })),\n ...files.map(name => ({ name, isDir: false })),\n ]\n const lines: string[] = []\n lines.push(rootLabel)\n for (let i = 0; i < items.length; i++) {\n const connector = i === items.length - 1 ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 '\n lines.push(`${connector}${items[i].name}`)\n }\n return lines.join('\\n')\n}\n", "import { memoize } from 'lodash-es'\nimport { execFileNoThrow } from './execFileNoThrow'\n\nexport const getIsGit = memoize(async (): Promise<boolean> => {\n const { code } = await execFileNoThrow('git', [\n 'rev-parse',\n '--is-inside-work-tree',\n ])\n return code === 0\n})\n\nexport const getHead = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\n return stdout.trim()\n}\n\nexport const getBranch = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim()\n}\n\nexport const getRemoteUrl = async (): Promise<string | null> => {\n const { stdout, code } = await execFileNoThrow(\n 'git',\n ['remote', 'get-url', 'origin'],\n undefined,\n undefined,\n false,\n )\n return code === 0 ? stdout.trim() : null\n}\n\nexport const getIsHeadOnRemote = async (): Promise<boolean> => {\n const { code } = await execFileNoThrow(\n 'git',\n ['rev-parse', '@{u}'],\n undefined,\n undefined,\n false,\n )\n return code === 0\n}\n\nexport const getIsClean = async (): Promise<boolean> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['status', '--porcelain'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim().length === 0\n}\n\nexport interface GitRepoState {\n commitHash: string\n branchName: string\n remoteUrl: string | null\n isHeadOnRemote: boolean\n isClean: boolean\n}\n\nexport async function getGitState(): Promise<GitRepoState | null> {\n try {\n const [commitHash, branchName, remoteUrl, isHeadOnRemote, isClean] =\n await Promise.all([\n getHead(),\n getBranch(),\n getRemoteUrl(),\n getIsHeadOnRemote(),\n getIsClean(),\n ])\n\n return {\n commitHash,\n branchName,\n remoteUrl,\n isHeadOnRemote,\n isClean,\n }\n } catch (_) {\n return null\n }\n}\n", "import { getGlobalConfig, getOrCreateUserID } from '@utils/config'\nimport { memoize } from 'lodash-es'\nimport { env } from '@utils/config/env'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport { logError, SESSION_ID } from '@utils/log'\nimport { MACRO } from '@constants/macros'\nexport const getGitEmail = memoize(async (): Promise<string | undefined> => {\n const result = await execFileNoThrow('git', ['config', 'user.email'])\n if (result.code !== 0) {\n logError(`Failed to get git email: ${result.stdout} ${result.stderr}`)\n return undefined\n }\n return result.stdout.trim() || undefined\n})\n\ntype SimpleUser = {\n customIDs?: Record<string, string>\n userID: string\n appVersion?: string\n userAgent?: string\n email?: string\n custom?: Record<string, unknown>\n}\n\nexport const getUser = memoize(async (): Promise<SimpleUser> => {\n const userID = getOrCreateUserID()\n const config = getGlobalConfig()\n const email = undefined\n return {\n customIDs: {\n sessionId: SESSION_ID,\n },\n userID,\n appVersion: MACRO.VERSION,\n userAgent: env.platform,\n email,\n custom: {\n nodeVersion: env.nodeVersion,\n userType: process.env.USER_TYPE,\n organizationUuid: config.oauthAccount?.organizationUuid,\n accountUuid: config.oauthAccount?.accountUuid,\n },\n }\n})\n", "import { existsSync, readdirSync, readFileSync, statSync } from 'fs'\r\nimport { join, relative, resolve } from 'path'\r\nimport matter from 'gray-matter'\r\nimport { minimatch } from 'minimatch'\r\nimport { findGitRoot, getDirsFromGitRootToCwd } from './projectInstructions'\r\nimport { logError } from '@utils/log'\r\n\r\nexport interface RuleFile {\r\n filename: string\r\n content: string\r\n paths?: string[]\r\n}\r\n\r\nfunction getRulesFromDir(dir: string, root: string, cwd: string): string[] {\r\n if (!existsSync(dir)) return []\r\n\r\n const rules: string[] = []\r\n const files = readdirSync(dir)\r\n\r\n for (const file of files) {\r\n if (!file.endsWith('.md')) continue\r\n\r\n const filePath = join(dir, file)\r\n if (!statSync(filePath).isFile()) continue\r\n\r\n try {\r\n const fileContent = readFileSync(filePath, 'utf-8')\r\n // gray-matter by default uses js-yaml.safeLoad which is removed in js-yaml v4.\r\n // We need to provide a custom parser if we want to be safe, or rely on gray-matter's auto-detection if updated.\r\n // However, looking at the error \"Function yaml.safeLoad is removed\", it seems gray-matter 4.0.3 (in package.json)\r\n // might not be fully compatible with js-yaml 4.x out of the box without options?\r\n // Actually, checking gray-matter docs/issues, v4.0.3 should work.\r\n // But the error comes from gray-matter calling yaml.safeLoad.\r\n \r\n // Solution: Pass a custom parser engine to gray-matter\r\n const yaml = require('js-yaml')\r\n const matterOptions = {\r\n engines: {\r\n yaml: {\r\n parse: yaml.load.bind(yaml),\r\n stringify: yaml.dump.bind(yaml)\r\n }\r\n }\r\n }\r\n \r\n const { content, data } = matter(fileContent, matterOptions)\r\n \r\n // User rule: If no paths (YAML frontmatter), it applies globally.\r\n if (!data.paths || !Array.isArray(data.paths) || data.paths.length === 0) {\r\n rules.push(content.trim())\r\n continue\r\n }\r\n\r\n // If paths are specified, check if current context (cwd) matches\r\n // This is a simplification. Ideally we'd check active files, but cwd is a good proxy.\r\n const relCwd = relative(root, cwd)\r\n // On Windows, relative paths might use backslashes, but glob patterns usually expect forward slashes.\r\n // Also ensure we don't have a leading slash unless absolute, but relative returns without leading slash usually.\r\n // However, if relCwd is empty (cwd == root), we want it to match \"**\" but maybe not \"src/**\".\r\n // If relCwd is \"src\", it matches \"src/**\".\r\n \r\n const normalizedRelCwd = relCwd.split('\\\\').join('/')\r\n\r\n // Let's iterate over paths patterns\r\n const hasMatch = data.paths.some((pattern: string) => {\r\n // minimatch(path, pattern)\r\n // If pattern is \"src/**\", and path is \"src\", minimatch(\"src\", \"src/**\") is FALSE.\r\n // We need to check if the path is INSIDE the pattern.\r\n // But the rules say: \"Rules are included when the file being edited matches the path\".\r\n // Since we are approximating by CWD, we should check:\r\n // 1. Is CWD inside the pattern? (e.g. pattern=\"src/**\", cwd=\"src/utils\" -> YES)\r\n // 2. Is CWD the pattern itself? (e.g. pattern=\"src\", cwd=\"src\" -> YES)\r\n // 3. Is the pattern inside CWD? (e.g. pattern=\"src/utils/**\", cwd=\"src\" -> Maybe? If I edit src/index.ts, no. If I edit src/utils/foo.ts, yes.)\r\n \r\n // Let's stick to: CWD must match the pattern OR be a child of the pattern.\r\n // minimatch(\"src/utils\", \"src/**\") -> true\r\n \r\n // Debugging logs in test might help, but let's try to be more robust.\r\n // Maybe \"src\" does NOT match \"src/**\" in minimatch?\r\n // \"src/\" matches \"src/**\"?\r\n \r\n if (minimatch(normalizedRelCwd, pattern)) return true\r\n \r\n // Try appending slash if not empty\r\n if (normalizedRelCwd && minimatch(normalizedRelCwd + '/', pattern)) return true\r\n \r\n return false\r\n })\r\n\r\n if (hasMatch) {\r\n rules.push(content.trim())\r\n }\r\n } catch (e) {\r\n logError(e)\r\n }\r\n }\r\n\r\n return rules\r\n}\r\n\r\nexport function getProjectRules(cwd: string): string[] {\r\n const gitRoot = findGitRoot(cwd)\r\n const root = gitRoot ?? resolve(cwd)\r\n const dirs = getDirsFromGitRootToCwd(root, cwd)\r\n\r\n const rules: string[] = []\r\n\r\n // Iterate from root down to cwd to collect rules from .claude/rules, .cursor/rules and .pyb/rules\r\n for (const dir of dirs) {\r\n // .claude/rules\r\n const claudeRulesDir = join(dir, '.claude', 'rules')\r\n rules.push(...getRulesFromDir(claudeRulesDir, root, cwd))\r\n\r\n // .cursor/rules\r\n const cursorRulesDir = join(dir, '.cursor', 'rules')\r\n rules.push(...getRulesFromDir(cursorRulesDir, root, cwd))\r\n\r\n // .pyb/rules\r\n const pybRulesDir = join(dir, '.pyb', 'rules')\r\n rules.push(...getRulesFromDir(pybRulesDir, root, cwd))\r\n }\r\n\r\n return rules\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["memoize", "memoize", "memoize", "join", "relative", "resolve", "existsSync", "readdirSync", "memoize", "memoize", "readFileSync", "readFileSync", "minimatch", "join", "existsSync", "memoize", "readdirSync", "resolve", "relative"]
|
|
7
|
+
}
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
} from "./chunk-BJSWTHRM.js";
|
|
6
6
|
import {
|
|
7
7
|
debug
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-3RKGBZUV.js";
|
|
9
9
|
import {
|
|
10
10
|
getCwd,
|
|
11
11
|
logError,
|
|
12
12
|
resolveXdgDataPath
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WLEPTDKU.js";
|
|
14
14
|
|
|
15
15
|
// src/services/plugins/customCommands.ts
|
|
16
16
|
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
@@ -2,10 +2,10 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
debug
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3RKGBZUV.js";
|
|
6
6
|
import {
|
|
7
7
|
logError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WLEPTDKU.js";
|
|
9
9
|
|
|
10
10
|
// src/services/system/systemReminder.ts
|
|
11
11
|
var SystemReminderService = class {
|
|
@@ -952,7 +952,7 @@ function getLastAssistantMessageId(messages) {
|
|
|
952
952
|
|
|
953
953
|
// src/utils/messages/index.ts
|
|
954
954
|
async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
|
|
955
|
-
const impl = await import("./userInput-
|
|
955
|
+
const impl = await import("./userInput-O26M5EYX.js");
|
|
956
956
|
return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
|
|
957
957
|
}
|
|
958
958
|
|
|
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
createSessionSqlStore
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RVTZE6UF.js";
|
|
6
6
|
|
|
7
7
|
// src/utils/protocol/pybAgentSessionLoad.ts
|
|
8
8
|
function loadPybAgentSessionLogData(args) {
|
|
@@ -81,7 +81,7 @@ function loadPybAgentSessionMessages(args) {
|
|
|
81
81
|
function findMostRecentPybAgentSessionId(_cwd) {
|
|
82
82
|
try {
|
|
83
83
|
const sqlStore = createSessionSqlStore();
|
|
84
|
-
const latest = sqlStore.findLatestSessionId();
|
|
84
|
+
const latest = sqlStore.findLatestSessionId(_cwd);
|
|
85
85
|
sqlStore.close();
|
|
86
86
|
if (latest) return latest;
|
|
87
87
|
} catch {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils/protocol/pybAgentSessionLoad.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Message } from '@query'\nimport { createSessionSqlStore } from '@utils/session/sessionSqlStore'\n\ntype JsonlFileHistorySnapshotEntry = {\n type: 'file-history-snapshot'\n messageId?: string\n snapshot?: unknown\n isSnapshotUpdate?: boolean\n}\n\nexport type PybAgentSessionLogData = {\n messages: Message[]\n summaries: Map<string, string>\n customTitles: Map<string, string>\n tags: Map<string, string>\n fileHistorySnapshots: Map<string, JsonlFileHistorySnapshotEntry>\n}\n\nexport function loadPybAgentSessionLogData(args: {\n cwd: string\n sessionId: string\n}): PybAgentSessionLogData {\n const fromSql = loadPybAgentSessionLogDataFromSql(args)\n if (hasAnyLoadedSessionData(fromSql)) {\n return fromSql\n }\n throw new Error(`No conversation found with session ID: ${args.sessionId}`)\n}\n\nfunction hasAnyLoadedSessionData(data: PybAgentSessionLogData): boolean {\n return (\n data.messages.length > 0 ||\n data.summaries.size > 0 ||\n data.customTitles.size > 0 ||\n data.tags.size > 0 ||\n data.fileHistorySnapshots.size > 0\n )\n}\n\nfunction loadPybAgentSessionLogDataFromSql(args: {\n sessionId: string\n}): PybAgentSessionLogData {\n const sqlStore = createSessionSqlStore()\n const loadedMessages = sqlStore.loadMessages(args.sessionId)\n const loadedSummaries = sqlStore.loadSessionSummaries(args.sessionId)\n const loadedMetaEvents = sqlStore.loadSessionMetaEvents(args.sessionId)\n const loadedSnapshots = sqlStore.loadFileHistorySnapshots(args.sessionId)\n sqlStore.close()\n const messages: Message[] = loadedMessages\n .map(item => {\n if (item.role === 'user') {\n return {\n type: 'user',\n uuid: item.uuid as any,\n message: item.rawMessage as any,\n } as Message\n }\n if (item.role === 'assistant') {\n return {\n type: 'assistant',\n uuid: item.uuid as any,\n costUSD: 0,\n durationMs: 0,\n message: item.rawMessage as any,\n ...(item.isApiError ? { isApiErrorMessage: true } : {}),\n ...(item.requestId ? { requestId: item.requestId } : {}),\n } as any\n }\n return null\n })\n .filter(Boolean) as Message[]\n const summaries = new Map<string, string>()\n for (const item of loadedSummaries) {\n const leafUuid = String(item.leafUuid ?? '').trim()\n const summary = String(item.summary ?? '').trim()\n if (leafUuid && summary) summaries.set(leafUuid, summary)\n }\n const customTitles = new Map<string, string>()\n const tags = new Map<string, string>()\n for (const item of loadedMetaEvents) {\n if (item.eventType === 'custom-title') {\n const title = String(item.payload?.customTitle ?? '').trim()\n if (title) customTitles.set(item.sessionId, title)\n continue\n }\n if (item.eventType === 'tag') {\n const tag = String(item.payload?.tag ?? '').trim()\n if (tag) tags.set(item.sessionId, tag)\n }\n }\n const fileHistorySnapshots = new Map<string, JsonlFileHistorySnapshotEntry>()\n for (const item of loadedSnapshots) {\n const messageId = String(item.messageUuid ?? '').trim()\n if (!messageId) continue\n fileHistorySnapshots.set(messageId, {\n type: 'file-history-snapshot',\n messageId,\n snapshot: item.snapshot,\n isSnapshotUpdate: item.isSnapshotUpdate,\n })\n }\n return { messages, summaries, customTitles, tags, fileHistorySnapshots }\n}\n\nexport function loadPybAgentSessionMessages(args: {\n cwd: string\n sessionId: string\n}): Message[] {\n return loadPybAgentSessionLogData(args).messages\n}\n\nexport function findMostRecentPybAgentSessionId(_cwd: string): string | null {\n try {\n const sqlStore = createSessionSqlStore()\n const latest = sqlStore.findLatestSessionId()\n sqlStore.close()\n if (latest) return latest\n } catch {}\n return null\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAkBO,SAAS,2BAA2B,MAGhB;AACzB,QAAM,UAAU,kCAAkC,IAAI;AACtD,MAAI,wBAAwB,OAAO,GAAG;AACpC,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,0CAA0C,KAAK,SAAS,EAAE;AAC5E;AAEA,SAAS,wBAAwB,MAAuC;AACtE,SACE,KAAK,SAAS,SAAS,KACvB,KAAK,UAAU,OAAO,KACtB,KAAK,aAAa,OAAO,KACzB,KAAK,KAAK,OAAO,KACjB,KAAK,qBAAqB,OAAO;AAErC;AAEA,SAAS,kCAAkC,MAEhB;AACzB,QAAM,WAAW,sBAAsB;AACvC,QAAM,iBAAiB,SAAS,aAAa,KAAK,SAAS;AAC3D,QAAM,kBAAkB,SAAS,qBAAqB,KAAK,SAAS;AACpE,QAAM,mBAAmB,SAAS,sBAAsB,KAAK,SAAS;AACtE,QAAM,kBAAkB,SAAS,yBAAyB,KAAK,SAAS;AACxE,WAAS,MAAM;AACf,QAAM,WAAsB,eACzB,IAAI,UAAQ;AACX,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,MAChB;AAAA,IACF;AACA,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,SAAS,KAAK;AAAA,QACd,GAAI,KAAK,aAAa,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAAA,QACrD,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,MACxD;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAO;AACjB,QAAM,YAAY,oBAAI,IAAoB;AAC1C,aAAW,QAAQ,iBAAiB;AAClC,UAAM,WAAW,OAAO,KAAK,YAAY,EAAE,EAAE,KAAK;AAClD,UAAM,UAAU,OAAO,KAAK,WAAW,EAAE,EAAE,KAAK;AAChD,QAAI,YAAY,QAAS,WAAU,IAAI,UAAU,OAAO;AAAA,EAC1D;AACA,QAAM,eAAe,oBAAI,IAAoB;AAC7C,QAAM,OAAO,oBAAI,IAAoB;AACrC,aAAW,QAAQ,kBAAkB;AACnC,QAAI,KAAK,cAAc,gBAAgB;AACrC,YAAM,QAAQ,OAAO,KAAK,SAAS,eAAe,EAAE,EAAE,KAAK;AAC3D,UAAI,MAAO,cAAa,IAAI,KAAK,WAAW,KAAK;AACjD;AAAA,IACF;AACA,QAAI,KAAK,cAAc,OAAO;AAC5B,YAAM,MAAM,OAAO,KAAK,SAAS,OAAO,EAAE,EAAE,KAAK;AACjD,UAAI,IAAK,MAAK,IAAI,KAAK,WAAW,GAAG;AAAA,IACvC;AAAA,EACF;AACA,QAAM,uBAAuB,oBAAI,IAA2C;AAC5E,aAAW,QAAQ,iBAAiB;AAClC,UAAM,YAAY,OAAO,KAAK,eAAe,EAAE,EAAE,KAAK;AACtD,QAAI,CAAC,UAAW;AAChB,yBAAqB,IAAI,WAAW;AAAA,MAClC,MAAM;AAAA,MACN;AAAA,MACA,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,IACzB,CAAC;AAAA,EACH;AACA,SAAO,EAAE,UAAU,WAAW,cAAc,MAAM,qBAAqB;AACzE;AAEO,SAAS,4BAA4B,MAG9B;AACZ,SAAO,2BAA2B,IAAI,EAAE;AAC1C;AAEO,SAAS,gCAAgC,MAA6B;AAC3E,MAAI;AACF,UAAM,WAAW,sBAAsB;AACvC,UAAM,SAAS,SAAS,oBAAoB;
|
|
4
|
+
"sourcesContent": ["import type { Message } from '@query'\nimport { createSessionSqlStore } from '@utils/session/sessionSqlStore'\n\ntype JsonlFileHistorySnapshotEntry = {\n type: 'file-history-snapshot'\n messageId?: string\n snapshot?: unknown\n isSnapshotUpdate?: boolean\n}\n\nexport type PybAgentSessionLogData = {\n messages: Message[]\n summaries: Map<string, string>\n customTitles: Map<string, string>\n tags: Map<string, string>\n fileHistorySnapshots: Map<string, JsonlFileHistorySnapshotEntry>\n}\n\nexport function loadPybAgentSessionLogData(args: {\n cwd: string\n sessionId: string\n}): PybAgentSessionLogData {\n const fromSql = loadPybAgentSessionLogDataFromSql(args)\n if (hasAnyLoadedSessionData(fromSql)) {\n return fromSql\n }\n throw new Error(`No conversation found with session ID: ${args.sessionId}`)\n}\n\nfunction hasAnyLoadedSessionData(data: PybAgentSessionLogData): boolean {\n return (\n data.messages.length > 0 ||\n data.summaries.size > 0 ||\n data.customTitles.size > 0 ||\n data.tags.size > 0 ||\n data.fileHistorySnapshots.size > 0\n )\n}\n\nfunction loadPybAgentSessionLogDataFromSql(args: {\n sessionId: string\n}): PybAgentSessionLogData {\n const sqlStore = createSessionSqlStore()\n const loadedMessages = sqlStore.loadMessages(args.sessionId)\n const loadedSummaries = sqlStore.loadSessionSummaries(args.sessionId)\n const loadedMetaEvents = sqlStore.loadSessionMetaEvents(args.sessionId)\n const loadedSnapshots = sqlStore.loadFileHistorySnapshots(args.sessionId)\n sqlStore.close()\n const messages: Message[] = loadedMessages\n .map(item => {\n if (item.role === 'user') {\n return {\n type: 'user',\n uuid: item.uuid as any,\n message: item.rawMessage as any,\n } as Message\n }\n if (item.role === 'assistant') {\n return {\n type: 'assistant',\n uuid: item.uuid as any,\n costUSD: 0,\n durationMs: 0,\n message: item.rawMessage as any,\n ...(item.isApiError ? { isApiErrorMessage: true } : {}),\n ...(item.requestId ? { requestId: item.requestId } : {}),\n } as any\n }\n return null\n })\n .filter(Boolean) as Message[]\n const summaries = new Map<string, string>()\n for (const item of loadedSummaries) {\n const leafUuid = String(item.leafUuid ?? '').trim()\n const summary = String(item.summary ?? '').trim()\n if (leafUuid && summary) summaries.set(leafUuid, summary)\n }\n const customTitles = new Map<string, string>()\n const tags = new Map<string, string>()\n for (const item of loadedMetaEvents) {\n if (item.eventType === 'custom-title') {\n const title = String(item.payload?.customTitle ?? '').trim()\n if (title) customTitles.set(item.sessionId, title)\n continue\n }\n if (item.eventType === 'tag') {\n const tag = String(item.payload?.tag ?? '').trim()\n if (tag) tags.set(item.sessionId, tag)\n }\n }\n const fileHistorySnapshots = new Map<string, JsonlFileHistorySnapshotEntry>()\n for (const item of loadedSnapshots) {\n const messageId = String(item.messageUuid ?? '').trim()\n if (!messageId) continue\n fileHistorySnapshots.set(messageId, {\n type: 'file-history-snapshot',\n messageId,\n snapshot: item.snapshot,\n isSnapshotUpdate: item.isSnapshotUpdate,\n })\n }\n return { messages, summaries, customTitles, tags, fileHistorySnapshots }\n}\n\nexport function loadPybAgentSessionMessages(args: {\n cwd: string\n sessionId: string\n}): Message[] {\n return loadPybAgentSessionLogData(args).messages\n}\n\nexport function findMostRecentPybAgentSessionId(_cwd: string): string | null {\n try {\n const sqlStore = createSessionSqlStore()\n const latest = sqlStore.findLatestSessionId(_cwd)\n sqlStore.close()\n if (latest) return latest\n } catch {}\n return null\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|