@codemieai/code 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -56
- package/bin/codemie-copilot.js +224 -0
- package/bin/codemie-pi.js +18 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +16 -10
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +43 -19
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/agent-aliases.d.ts +17 -0
- package/dist/agents/core/agent-aliases.d.ts.map +1 -0
- package/dist/agents/core/agent-aliases.js +41 -0
- package/dist/agents/core/agent-aliases.js.map +1 -0
- package/dist/agents/core/session/session-origin-audit.d.ts +13 -0
- package/dist/agents/core/session/session-origin-audit.d.ts.map +1 -1
- package/dist/agents/core/session/session-origin-audit.js +34 -0
- package/dist/agents/core/session/session-origin-audit.js.map +1 -1
- package/dist/agents/core/session/stale-session-reconciliation.d.ts +42 -0
- package/dist/agents/core/session/stale-session-reconciliation.d.ts.map +1 -0
- package/dist/agents/core/session/stale-session-reconciliation.js +141 -0
- package/dist/agents/core/session/stale-session-reconciliation.js.map +1 -0
- package/dist/agents/core/session/types.d.ts +19 -0
- package/dist/agents/core/session/types.d.ts.map +1 -1
- package/dist/agents/core/session/types.js +17 -1
- package/dist/agents/core/session/types.js.map +1 -1
- package/dist/agents/core/types.d.ts +1 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.reconciliation.d.ts +15 -35
- package/dist/agents/plugins/codex/codex.reconciliation.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.reconciliation.js +8 -139
- package/dist/agents/plugins/codex/codex.reconciliation.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts +4 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js +4 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts +8 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts.map +1 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.models.js +195 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.models.js.map +1 -0
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts +4 -20
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js +237 -38
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.session.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.session.js +14 -2
- package/dist/agents/plugins/copilot-cli/copilot-cli.session.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/index.d.ts +2 -1
- package/dist/agents/plugins/copilot-cli/index.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/index.js +2 -1
- package/dist/agents/plugins/copilot-cli/index.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts +6 -3
- package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js +298 -5
- package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts +12 -0
- package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts.map +1 -0
- package/dist/agents/plugins/pi/__tests__/home-redirect.js +27 -0
- package/dist/agents/plugins/pi/__tests__/home-redirect.js.map +1 -0
- package/dist/agents/plugins/pi/extension/README.md +68 -0
- package/dist/agents/plugins/pi/extension/index.js +161 -0
- package/dist/agents/plugins/pi/extension/package.json +8 -0
- package/dist/agents/plugins/pi/index.d.ts +3 -0
- package/dist/agents/plugins/pi/index.d.ts.map +1 -0
- package/dist/agents/plugins/pi/index.js +3 -0
- package/dist/agents/plugins/pi/index.js.map +1 -0
- package/dist/agents/plugins/pi/pi.extension.d.ts +60 -0
- package/dist/agents/plugins/pi/pi.extension.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.extension.js +201 -0
- package/dist/agents/plugins/pi/pi.extension.js.map +1 -0
- package/dist/agents/plugins/pi/pi.incremental-sync.d.ts +63 -0
- package/dist/agents/plugins/pi/pi.incremental-sync.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.incremental-sync.js +266 -0
- package/dist/agents/plugins/pi/pi.incremental-sync.js.map +1 -0
- package/dist/agents/plugins/pi/pi.models.d.ts +20 -0
- package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.models.js +201 -0
- package/dist/agents/plugins/pi/pi.models.js.map +1 -0
- package/dist/agents/plugins/pi/pi.packages.d.ts +11 -0
- package/dist/agents/plugins/pi/pi.packages.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.packages.js +35 -0
- package/dist/agents/plugins/pi/pi.packages.js.map +1 -0
- package/dist/agents/plugins/pi/pi.paths.d.ts +37 -0
- package/dist/agents/plugins/pi/pi.paths.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.paths.js +146 -0
- package/dist/agents/plugins/pi/pi.paths.js.map +1 -0
- package/dist/agents/plugins/pi/pi.plugin.d.ts +30 -0
- package/dist/agents/plugins/pi/pi.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.plugin.js +453 -0
- package/dist/agents/plugins/pi/pi.plugin.js.map +1 -0
- package/dist/agents/plugins/pi/pi.session.d.ts +114 -0
- package/dist/agents/plugins/pi/pi.session.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.session.js +388 -0
- package/dist/agents/plugins/pi/pi.session.js.map +1 -0
- package/dist/agents/plugins/pi/pi.setup.d.ts +2 -0
- package/dist/agents/plugins/pi/pi.setup.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.setup.js +33 -0
- package/dist/agents/plugins/pi/pi.setup.js.map +1 -0
- package/dist/agents/plugins/pi/pi.types.d.ts +143 -0
- package/dist/agents/plugins/pi/pi.types.d.ts.map +1 -0
- package/dist/agents/plugins/pi/pi.types.js +74 -0
- package/dist/agents/plugins/pi/pi.types.js.map +1 -0
- package/dist/agents/plugins/pi/session/pi-file-operations.d.ts +17 -0
- package/dist/agents/plugins/pi/session/pi-file-operations.d.ts.map +1 -0
- package/dist/agents/plugins/pi/session/pi-file-operations.js +98 -0
- package/dist/agents/plugins/pi/session/pi-file-operations.js.map +1 -0
- package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts +52 -0
- package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts.map +1 -0
- package/dist/agents/plugins/pi/session/pi-named-invocations.js +189 -0
- package/dist/agents/plugins/pi/session/pi-named-invocations.js.map +1 -0
- package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts +14 -0
- package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts.map +1 -0
- package/dist/agents/plugins/pi/session/pi-user-prompt.js +51 -0
- package/dist/agents/plugins/pi/session/pi-user-prompt.js.map +1 -0
- package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts +52 -0
- package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts.map +1 -0
- package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js +716 -0
- package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js.map +1 -0
- package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts +104 -0
- package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js +595 -0
- package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js.map +1 -0
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +2 -2
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/analytics/agent-labels.d.ts.map +1 -1
- package/dist/cli/commands/analytics/agent-labels.js +1 -0
- package/dist/cli/commands/analytics/agent-labels.js.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts +24 -0
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +199 -54
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/index.js +1 -0
- package/dist/cli/commands/analytics/index.js.map +1 -1
- package/dist/cli/commands/analytics/native-loader.d.ts +21 -4
- package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/native-loader.js +250 -96
- package/dist/cli/commands/analytics/native-loader.js.map +1 -1
- package/dist/cli/commands/analytics/report/client/app.js +47 -3
- package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/payload-builder.js +25 -2
- package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
- package/dist/cli/commands/analytics/report/types.d.ts +1 -0
- package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +71 -29
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +7 -5
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +3 -1
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/commands/uninstall.js +5 -3
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +5 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/first-time.d.ts.map +1 -1
- package/dist/cli/first-time.js +7 -6
- package/dist/cli/first-time.js.map +1 -1
- package/dist/providers/core/auth-validation.d.ts +7 -2
- package/dist/providers/core/auth-validation.d.ts.map +1 -1
- package/dist/providers/core/auth-validation.js +11 -5
- package/dist/providers/core/auth-validation.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts +8 -3
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +46 -11
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +23 -13
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +75 -18
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts +21 -0
- package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js +133 -0
- package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +4 -2
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/types.d.ts +11 -0
- package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts +2 -0
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +37 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.js +13 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +6 -0
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts +0 -6
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js +28 -19
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -1
- package/dist/utils/interactive.d.ts +14 -0
- package/dist/utils/interactive.d.ts.map +1 -0
- package/dist/utils/interactive.js +16 -0
- package/dist/utils/interactive.js.map +1 -0
- package/package.json +6 -4
- package/scripts/copy-plugins.js +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/pi/pi.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,0BAA0B,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAEvF;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAc,EAAE,IAAY;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAc;IAC7C,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAc,EACd,YAAqC;IAErC,kFAAkF;IAClF,kFAAkF;IAClF,uEAAuE;IACvE,6EAA6E;IAC7E,6EAA6E;IAC7E,iFAAiF;IACjF,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3E,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAA2B,EAAE,GAAG,YAAY,EAAE,CAAC;IAE9D,oFAAoF;IACpF,iFAAiF;IACjF,2EAA2E;IAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,CAAC,2BAA2B,GAAG,UAAU,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAsB,EAAE,SAAiB;IAClE,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;QACpC,SAAS;QACT,QAAQ,EAAE,GAAG,CAAC,gBAAgB;QAC9B,UAAU,EAAE,GAAG,CAAC,gBAAgB;QAChC,MAAM,EAAE,GAAG,CAAC,WAAW;QACvB,UAAU,EAAE,GAAG,CAAC,oBAAoB;QACpC,OAAO,EAAE,GAAG,CAAC,mBAAmB;QAChC,WAAW,EAAE,GAAG,CAAC,oBAAoB;QACrC,OAAO,EAAE,GAAG,CAAC,eAAe;QAC5B,KAAK,EAAE,GAAG,CAAC,aAAa;QACxB,UAAU,EAAE,YAAY;KACzB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,MAAmB;IACzE,IAAI,CAAC,MAAM,CAAC,iBAAiB;QAAE,OAAO;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,8BAA8B,SAAS,wBAAwB,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QAED,OAAO,CAAC,WAAW,GAAG;YACpB,GAAG,OAAO,CAAC,WAAW;YACtB,MAAM,EAAE,SAAS;YACjB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;YAC1C,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;YACjE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;QAEF,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,GAAG,SAAS,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC;YACtC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC7C,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC3B,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;aAChC,CAAC,CAAC;YACH,IAAI,MAAM;gBAAE,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;YACvC,IAAI,UAAU;gBAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAClD,CAAC;QAED,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjC,gFAAgF;QAChF,iBAAiB;QACjB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,yEAAyE,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,uCAAuC;IACpD,UAAU,EAAE,iCAAiC;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI;IAE9C,sBAAsB,EAAE,IAAI;IAE5B,aAAa,EAAE;QACb,sBAAsB,EAAE,CAAC,MAAM,CAAC;KACjC;IAED,SAAS,EAAE;QACT,IAAI,EAAE,KAAK;KACZ;IAED;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,EAAE;QAChB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,UAAU;QAC3B,QAAQ,EAAE;YACR,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,KAAK,EAAE,CAAC,YAAY,CAAC;YACrB,KAAK,EAAE,EAAE;SACV;KACF;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,SAAS,EAAE;QACT,KAAK,EAAE;YACL,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,YAAY;SACvB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,YAAY;SACvB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,4BAA4B;gBAC5B,wBAAwB;gBACxB,oBAAoB;gBACpB,wBAAwB;aACzB;YACD,QAAQ,EAAE,YAAY;SACvB;KACF;IAED,UAAU,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;KACV;IAED,kBAAkB,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC;IAE5D,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,YAAY;KACzB;IAED;;;;;OAKG;IACH,YAAY,EAAE;QACZ,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;SACb;KACF;IAED,SAAS,EAAE;QACT,KAAK,CAAC,SAAS,CAAC,GAAsB,EAAE,OAAoB;YAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,GAAG,CAAC,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAE7C,8EAA8E;YAC9E,gFAAgF;YAChF,6EAA6E;YAC7E,kCAAkC;YAClC,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAC9D,GAAG,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;YAC5C,CAAC;YAED,0EAA0E;YAC1E,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,2BAA2B,GAAG,UAAU,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,UAAU,CAAC;YACvD,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACvF,OAAO,GAAG,CAAC;QACb,CAAC;QAED,UAAU,CAAC,IAAc,EAAE,OAAoB;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC;YAE3C,+EAA+E;YAC/E,iFAAiF;YACjF,gFAAgF;YAChF,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YAErE,sEAAsE;YACtE,wEAAwE;YACxE,4EAA4E;YAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACjD,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtF,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACvF,CAAC;YAED,8EAA8E;YAC9E,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;gBACjF,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACxE,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,GAAsB;YAC5D,IAAI,CAAC;gBACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;gBACvE,MAAM,YAAY,CAChB;oBACE,eAAe,EAAE,cAAc;oBAC/B,UAAU,EAAE,SAAS;oBACrB,eAAe,EAAE,EAAE;oBACnB,eAAe,EAAE,SAAS;oBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,MAAM,EAAE,SAAS;iBAClB,EACD,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAClC,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,gDAAgD,SAAS,EAAE,CAAC,CAAC;YAC3E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,iDAAiD,GAAG,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,0FAA0F;YAC1F,wFAAwF;YACxF,8EAA8E;YAC9E,KAAK,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACjF,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,4DAA4D,GAAG,EAAE,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;YAEH,yFAAyF;YACzF,mFAAmF;YACnF,oCAAoC;YACpC,sBAAsB,CAAC;gBACrB,SAAS;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnB,SAAS;oBACT,UAAU,EAAE,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,gBAAgB,IAAI,EAAE;oBAClE,OAAO,EAAE,EAAE;oBACX,UAAU,EAAE,YAAY;oBACxB,OAAO,EAAE,GAAG,CAAC,mBAAmB,IAAI,EAAE;oBACtC,MAAM,EAAE,KAAK;iBACd,CAAC;gBACF,MAAM,EAAE,GAAG,CAAC,WAAW;gBACvB,UAAU,EAAE,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,gBAAgB;gBAC5D,UAAU,EAAE,GAAG,CAAC,mBAAmB;aACpC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,GAAsB;YACzD,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,CAAC;YACzC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YAED,yFAAyF;YACzF,sFAAsF;YACtF,4EAA4E;YAC5E,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAEvC,2EAA2E;YAC3E,0EAA0E;YAC1E,uEAAuE;YACvE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;YAEhD,0FAA0F;YAC1F,4FAA4F;YAC5F,iDAAiD;YACjD,IAAI,CAAC;gBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC;gBACpE,IAAI,OAAO,YAAY,gBAAgB,EAAE,CAAC;oBACxC,OAAO,CAAC,oBAAoB,CAAC;wBAC3B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;wBAC7C,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,4DAA4D,GAAG,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CACT,+EAA+E;sBAC7E,kFAAkF,CACrF,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB;gBACpC,CAAC,CAAC,UAAU,GAAG,CAAC,mBAAmB,GAAG;gBACtC,CAAC,CAAC,QAAQ,KAAK,CAAC;oBACd,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,QAAQ,QAAQ,GAAG,CAAC;YAE1B,IAAI,CAAC;gBACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;gBACvE,MAAM,YAAY,CAChB;oBACE,eAAe,EAAE,YAAY;oBAC7B,qEAAqE;oBACrE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;oBAC3C,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC5C,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;oBAChF,eAAe,EAAE,SAAS;oBAC1B,wEAAwE;oBACxE,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oBAChC,MAAM;iBACP,EACD,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAClC,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;KACF;CACF,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,gBAAgB;IACpC,cAAc,CAAiB;IAEvC;QACE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CACP,IAAc,EACd,YAAqC,EACrC,UAAiC;QAEjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,QAAiE;QAEjE,MAAM,yBAAyB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi Session Adapter
|
|
3
|
+
*
|
|
4
|
+
* Discovers and parses Pi JSONL session files, then runs the metrics processor.
|
|
5
|
+
*/
|
|
6
|
+
import type { SessionAdapter, ParsedSession, AggregatedResult, SessionDiscoveryOptions, SessionDescriptor } from '../../core/session/BaseSessionAdapter.js';
|
|
7
|
+
import type { SessionProcessor, ProcessingContext } from '../../core/session/BaseProcessor.js';
|
|
8
|
+
import type { AgentMetadata } from '../../core/types.js';
|
|
9
|
+
export interface PiDiscoveryOptions extends SessionDiscoveryOptions {
|
|
10
|
+
/** Environment variables used to resolve Pi session-directory overrides. */
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
}
|
|
13
|
+
/** One transcript linked to a parsed session, as {@link ParsedSession.subagents} carries it. */
|
|
14
|
+
type LinkedTranscript = NonNullable<ParsedSession['subagents']>[number];
|
|
15
|
+
/**
|
|
16
|
+
* `subagents[].agentType` for a nested sub-agent run: a delegated agent Pi ran under this
|
|
17
|
+
* transcript, stored at `<transcript-without-.jsonl>/<agentId>/run-N/session.jsonl`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PI_SUBAGENT_RUN = "pi-subagent-run";
|
|
20
|
+
/**
|
|
21
|
+
* `subagents[].agentType` for a transcript that CONTINUED this one (`/fork`, `/branch`).
|
|
22
|
+
* Its inherited entries are byte-identical copies of this transcript's, ids included, so
|
|
23
|
+
* consumers must fold it in by entry identity rather than concatenating blindly.
|
|
24
|
+
*
|
|
25
|
+
* Never attached by this adapter — see {@link PiSessionAdapter.loadSubagentRuns} for why folding
|
|
26
|
+
* a fork family is the analytics layer's job. `native-loader.ts` attaches it.
|
|
27
|
+
*/
|
|
28
|
+
export declare const PI_FORKED_CONTINUATION = "pi-forked-continuation";
|
|
29
|
+
/** The transcripts that continued `parsed` via `/fork` or `/branch`, in discovery order. */
|
|
30
|
+
export declare function piForkedContinuations(parsed: ParsedSession): LinkedTranscript[];
|
|
31
|
+
import { type PiLedgerInvocations } from './session/processors/pi.metrics-processor.js';
|
|
32
|
+
export declare class PiSessionAdapter implements SessionAdapter {
|
|
33
|
+
private readonly metadata;
|
|
34
|
+
readonly agentName = "pi";
|
|
35
|
+
private processors;
|
|
36
|
+
constructor(metadata: AgentMetadata);
|
|
37
|
+
private initializeProcessors;
|
|
38
|
+
/**
|
|
39
|
+
* Supply the run-ledger counts the metrics processor cannot derive from a transcript.
|
|
40
|
+
*
|
|
41
|
+
* Pi expands a prompt template into plain user text before persisting it, so `/review` never
|
|
42
|
+
* appears in the JSONL — the only record of it is the ledger the CodeMie extension wrote
|
|
43
|
+
* (`pi.extension.ts`). The processing pipeline reaches this adapter through the registry
|
|
44
|
+
* singleton, and `ProcessingContext` is shared by every agent, so the counts are handed over
|
|
45
|
+
* here rather than threaded through a field only Pi would ever read.
|
|
46
|
+
*/
|
|
47
|
+
setLedgerInvocations(ledgerInvocations: PiLedgerInvocations | undefined): void;
|
|
48
|
+
registerProcessor(processor: SessionProcessor): void;
|
|
49
|
+
parseSessionFile(filePath: string, sessionId: string): Promise<ParsedSession>;
|
|
50
|
+
/**
|
|
51
|
+
* Nested sub-agent transcripts, stored under `<transcript-without-.jsonl>/<agentId>/run-N/`.
|
|
52
|
+
*
|
|
53
|
+
* A delegated agent gets its own session file there. The parent records tool results for those
|
|
54
|
+
* dispatches but NO usage on them (measured on a real corpus: 1707 `toolResult` entries, zero
|
|
55
|
+
* carrying `usage`), so every token a sub-agent burned lives only in the nested file and a
|
|
56
|
+
* reader that walks `messages` alone misses all of it.
|
|
57
|
+
*
|
|
58
|
+
* Attached WITHOUT a `toolUseId`: this is session-level spend, not the allocation of one
|
|
59
|
+
* dispatch, and `cost-enricher.enrichDispatchCosts` keys on `toolUseId` precisely so it skips
|
|
60
|
+
* these.
|
|
61
|
+
*
|
|
62
|
+
* **Forked continuations are deliberately NOT linked here.** `/fork` writes a new file that
|
|
63
|
+
* replays the prior conversation verbatim, so folding it into its source looks tempting — but
|
|
64
|
+
* `codemie pi --fork` is a second MANAGED run with a CodeMie session of its own, and the cost
|
|
65
|
+
* enricher walks sessions in `startTime` order against a shared `seen` set. Anything attached
|
|
66
|
+
* to the earlier session's transcript is consumed by the earlier session, so the forked run
|
|
67
|
+
* reports as free and its spend lands on the wrong session, date and branch. Collapsing a fork
|
|
68
|
+
* family is the analytics layer's job, where the set of sessions being reported is known;
|
|
69
|
+
* `native-loader.ts` does it for untracked runs.
|
|
70
|
+
*
|
|
71
|
+
* This is identity, not attribution: a directory Pi named after this transcript. Nothing here
|
|
72
|
+
* guesses ownership from mtime, id shape, or timing — see {@link discoverSessions}.
|
|
73
|
+
*/
|
|
74
|
+
private loadSubagentRuns;
|
|
75
|
+
private static readonly HEADER_READ_BYTES;
|
|
76
|
+
private readSessionHeader;
|
|
77
|
+
private readJsonlFile;
|
|
78
|
+
processSession(filePath: string, sessionId: string, context: ProcessingContext): Promise<AggregatedResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Enumerate the Pi transcripts visible from this project.
|
|
81
|
+
*
|
|
82
|
+
* This is a plain listing, and deliberately so: it answers "which Pi transcripts
|
|
83
|
+
* exist here", never "which of them belong to the run that just finished".
|
|
84
|
+
*
|
|
85
|
+
* That second question cannot be answered from a directory. A concurrent `pi` — or
|
|
86
|
+
* a second CodeMie run in the same cwd — writes files indistinguishable from this
|
|
87
|
+
* run's by id, mtime, or `parentSession` lineage, and claiming one of them uploads
|
|
88
|
+
* a stranger's prompts and tool output under this user's session. Successive
|
|
89
|
+
* rounds of increasingly careful heuristics here were each shown to be reachable-
|
|
90
|
+
* wrong, so ownership is no longer inferred at all: the CodeMie extension records
|
|
91
|
+
* each transcript path from inside Pi, and `readPiRunLedger` reads it back.
|
|
92
|
+
*
|
|
93
|
+
* Scope follows the caller. With a `cwd`, the listing is that project's: the transcripts in
|
|
94
|
+
* that project's session directory whose own header declares that cwd — what a managed run
|
|
95
|
+
* needs. Without one, the listing is every project's, because that is what analytics needs:
|
|
96
|
+
* Claude and Codex discovery is global, so a cwd-scoped Pi would report zero usage whenever
|
|
97
|
+
* `codemie analytics` is run from anywhere but the project directory.
|
|
98
|
+
*
|
|
99
|
+
* @see pi.extension.ts
|
|
100
|
+
*/
|
|
101
|
+
discoverSessions(options?: SessionDiscoveryOptions): Promise<SessionDescriptor[]>;
|
|
102
|
+
/**
|
|
103
|
+
* Every transcript in `sessionDir` recent enough to matter, optionally narrowed to one project.
|
|
104
|
+
*
|
|
105
|
+
* A session directory can be shared between projects (`--session-dir`, or a
|
|
106
|
+
* `sessionDir` in the project's `.pi/settings.json`), so when a `projectPath` is
|
|
107
|
+
* given each file's own header must declare that cwd. Filtering is on mtime rather
|
|
108
|
+
* than header timestamp so a long-running session is not dropped while it is still
|
|
109
|
+
* being written to.
|
|
110
|
+
*/
|
|
111
|
+
private listTranscripts;
|
|
112
|
+
}
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=pi.session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/pi/pi.session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC5J,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IACjE,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,gGAAgG;AAChG,KAAK,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;GAGG;AACH,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAE/E;AAiDD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,8CAA8C,CAAC;AAItD,qBAAa,gBAAiB,YAAW,cAAc;IAIzC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,QAAQ;IAC1B,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAIpD,OAAO,CAAC,oBAAoB;IAM5B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI;IAK9E,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAM9C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BnF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;YACW,gBAAgB;IAyC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAS;YAEpC,iBAAiB;YAuBjB,aAAa;IAoBrB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4ChH;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuBvF;;;;;;;;OAQG;YACW,eAAe;CAqD9B"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi Session Adapter
|
|
3
|
+
*
|
|
4
|
+
* Discovers and parses Pi JSONL session files, then runs the metrics processor.
|
|
5
|
+
*/
|
|
6
|
+
import { open, readFile, readdir, stat } from 'fs/promises';
|
|
7
|
+
import { dirname, join, resolve } from 'path';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import { logger } from '../../../utils/logger.js';
|
|
10
|
+
import { getUserPiAgentDir, resolvePiSessionDir } from './pi.paths.js';
|
|
11
|
+
/**
|
|
12
|
+
* `subagents[].agentType` for a nested sub-agent run: a delegated agent Pi ran under this
|
|
13
|
+
* transcript, stored at `<transcript-without-.jsonl>/<agentId>/run-N/session.jsonl`.
|
|
14
|
+
*/
|
|
15
|
+
export const PI_SUBAGENT_RUN = 'pi-subagent-run';
|
|
16
|
+
/**
|
|
17
|
+
* `subagents[].agentType` for a transcript that CONTINUED this one (`/fork`, `/branch`).
|
|
18
|
+
* Its inherited entries are byte-identical copies of this transcript's, ids included, so
|
|
19
|
+
* consumers must fold it in by entry identity rather than concatenating blindly.
|
|
20
|
+
*
|
|
21
|
+
* Never attached by this adapter — see {@link PiSessionAdapter.loadSubagentRuns} for why folding
|
|
22
|
+
* a fork family is the analytics layer's job. `native-loader.ts` attaches it.
|
|
23
|
+
*/
|
|
24
|
+
export const PI_FORKED_CONTINUATION = 'pi-forked-continuation';
|
|
25
|
+
/** The transcripts that continued `parsed` via `/fork` or `/branch`, in discovery order. */
|
|
26
|
+
export function piForkedContinuations(parsed) {
|
|
27
|
+
return (parsed.subagents ?? []).filter((sub) => sub.agentType === PI_FORKED_CONTINUATION);
|
|
28
|
+
}
|
|
29
|
+
/** The immediate subdirectories of `root`, or [] when it is absent or unreadable. */
|
|
30
|
+
async function subdirectoriesOf(root) {
|
|
31
|
+
try {
|
|
32
|
+
const entries = await readdir(root, { withFileTypes: true });
|
|
33
|
+
return entries.filter((e) => e.isDirectory()).map((e) => join(root, e.name));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Every project's session directory, for an unscoped (analytics) listing.
|
|
41
|
+
*
|
|
42
|
+
* Pi transcripts live under TWO roots, and a listing that reads one of them is blind to
|
|
43
|
+
* whichever half of the user's usage lives in the other:
|
|
44
|
+
*
|
|
45
|
+
* - `<cwd>/.pi/codemie/agent/sessions` — where CodeMie points Pi (`beforeRun` sets
|
|
46
|
+
* `PI_CODING_AGENT_DIR`), so every MANAGED run lands here. In practice it holds exactly
|
|
47
|
+
* one directory, the project's own.
|
|
48
|
+
* - `~/.pi/agent/sessions` — Pi's own default (upstream `getDefaultSessionDir`), so every
|
|
49
|
+
* BARE `pi` run lands here. Native discovery exists precisely to report those runs, and
|
|
50
|
+
* this is the only root that has them.
|
|
51
|
+
*
|
|
52
|
+
* Both use the same one-directory-per-cwd layout, so a root's subdirectories ARE the projects.
|
|
53
|
+
* A directory the user pointed Pi at explicitly (`PI_CODING_AGENT_SESSION_DIR`, or `sessionDir`
|
|
54
|
+
* in settings) is not part of that layout — its siblings are arbitrary directories that have
|
|
55
|
+
* nothing to do with Pi — so a custom resolution stays alone.
|
|
56
|
+
*/
|
|
57
|
+
async function allProjectSessionDirs(resolution) {
|
|
58
|
+
const { sessionDir, isCustom } = resolution;
|
|
59
|
+
if (isCustom) {
|
|
60
|
+
return [sessionDir];
|
|
61
|
+
}
|
|
62
|
+
const dirs = [];
|
|
63
|
+
const seen = new Set();
|
|
64
|
+
for (const root of [dirname(sessionDir), join(getUserPiAgentDir(), 'sessions')]) {
|
|
65
|
+
for (const dir of await subdirectoriesOf(root)) {
|
|
66
|
+
const key = resolve(dir);
|
|
67
|
+
if (seen.has(key))
|
|
68
|
+
continue;
|
|
69
|
+
seen.add(key);
|
|
70
|
+
dirs.push(dir);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Both roots unreadable — fall back to the project's own directory.
|
|
74
|
+
return dirs.length > 0 ? dirs : [sessionDir];
|
|
75
|
+
}
|
|
76
|
+
import { PI_METRICS_PROCESSOR_NAME, PiMetricsProcessor, } from './session/processors/pi.metrics-processor.js';
|
|
77
|
+
import { PiConversationsProcessor } from './session/processors/pi.conversations-processor.js';
|
|
78
|
+
import { isPiSessionHeader } from './pi.types.js';
|
|
79
|
+
export class PiSessionAdapter {
|
|
80
|
+
metadata;
|
|
81
|
+
agentName = 'pi';
|
|
82
|
+
processors = [];
|
|
83
|
+
constructor(metadata) {
|
|
84
|
+
this.metadata = metadata;
|
|
85
|
+
this.initializeProcessors();
|
|
86
|
+
}
|
|
87
|
+
initializeProcessors() {
|
|
88
|
+
this.registerProcessor(new PiMetricsProcessor(this.metadata));
|
|
89
|
+
this.registerProcessor(new PiConversationsProcessor());
|
|
90
|
+
logger.debug(`[pi-adapter] Initialized ${this.processors.length} processors`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Supply the run-ledger counts the metrics processor cannot derive from a transcript.
|
|
94
|
+
*
|
|
95
|
+
* Pi expands a prompt template into plain user text before persisting it, so `/review` never
|
|
96
|
+
* appears in the JSONL — the only record of it is the ledger the CodeMie extension wrote
|
|
97
|
+
* (`pi.extension.ts`). The processing pipeline reaches this adapter through the registry
|
|
98
|
+
* singleton, and `ProcessingContext` is shared by every agent, so the counts are handed over
|
|
99
|
+
* here rather than threaded through a field only Pi would ever read.
|
|
100
|
+
*/
|
|
101
|
+
setLedgerInvocations(ledgerInvocations) {
|
|
102
|
+
this.processors = this.processors.filter((processor) => processor.name !== PI_METRICS_PROCESSOR_NAME);
|
|
103
|
+
this.registerProcessor(new PiMetricsProcessor(this.metadata, ledgerInvocations));
|
|
104
|
+
}
|
|
105
|
+
registerProcessor(processor) {
|
|
106
|
+
this.processors.push(processor);
|
|
107
|
+
this.processors.sort((a, b) => a.priority - b.priority);
|
|
108
|
+
logger.debug(`[pi-adapter] Registered processor: ${processor.name} (priority: ${processor.priority})`);
|
|
109
|
+
}
|
|
110
|
+
async parseSessionFile(filePath, sessionId) {
|
|
111
|
+
try {
|
|
112
|
+
const entries = await this.readJsonlFile(filePath);
|
|
113
|
+
const header = await this.readSessionHeader(filePath);
|
|
114
|
+
const projectPath = header?.cwd ?? process.cwd();
|
|
115
|
+
const subagents = await this.loadSubagentRuns(filePath);
|
|
116
|
+
return {
|
|
117
|
+
sessionId,
|
|
118
|
+
agentName: this.metadata.displayName || 'Pi',
|
|
119
|
+
metadata: {
|
|
120
|
+
projectPath,
|
|
121
|
+
...(header?.timestamp && { createdAt: header.timestamp }),
|
|
122
|
+
...(header?.id && { agentSessionId: header.id }),
|
|
123
|
+
// The file's own statement of which transcript it was forked from. Analytics uses
|
|
124
|
+
// it to collapse a fork family into the one conversation it really is.
|
|
125
|
+
...(header?.parentSession && { parentSession: header.parentSession }),
|
|
126
|
+
},
|
|
127
|
+
messages: entries,
|
|
128
|
+
...(subagents.length > 0 && { subagents }),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
logger.error(`[pi-adapter] Failed to parse session file ${filePath}:`, error);
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Nested sub-agent transcripts, stored under `<transcript-without-.jsonl>/<agentId>/run-N/`.
|
|
138
|
+
*
|
|
139
|
+
* A delegated agent gets its own session file there. The parent records tool results for those
|
|
140
|
+
* dispatches but NO usage on them (measured on a real corpus: 1707 `toolResult` entries, zero
|
|
141
|
+
* carrying `usage`), so every token a sub-agent burned lives only in the nested file and a
|
|
142
|
+
* reader that walks `messages` alone misses all of it.
|
|
143
|
+
*
|
|
144
|
+
* Attached WITHOUT a `toolUseId`: this is session-level spend, not the allocation of one
|
|
145
|
+
* dispatch, and `cost-enricher.enrichDispatchCosts` keys on `toolUseId` precisely so it skips
|
|
146
|
+
* these.
|
|
147
|
+
*
|
|
148
|
+
* **Forked continuations are deliberately NOT linked here.** `/fork` writes a new file that
|
|
149
|
+
* replays the prior conversation verbatim, so folding it into its source looks tempting — but
|
|
150
|
+
* `codemie pi --fork` is a second MANAGED run with a CodeMie session of its own, and the cost
|
|
151
|
+
* enricher walks sessions in `startTime` order against a shared `seen` set. Anything attached
|
|
152
|
+
* to the earlier session's transcript is consumed by the earlier session, so the forked run
|
|
153
|
+
* reports as free and its spend lands on the wrong session, date and branch. Collapsing a fork
|
|
154
|
+
* family is the analytics layer's job, where the set of sessions being reported is known;
|
|
155
|
+
* `native-loader.ts` does it for untracked runs.
|
|
156
|
+
*
|
|
157
|
+
* This is identity, not attribution: a directory Pi named after this transcript. Nothing here
|
|
158
|
+
* guesses ownership from mtime, id shape, or timing — see {@link discoverSessions}.
|
|
159
|
+
*/
|
|
160
|
+
async loadSubagentRuns(transcriptPath) {
|
|
161
|
+
if (!transcriptPath.endsWith('.jsonl')) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
const runsRoot = transcriptPath.slice(0, -'.jsonl'.length);
|
|
165
|
+
let agentDirs;
|
|
166
|
+
try {
|
|
167
|
+
agentDirs = await readdir(runsRoot);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return []; // no sub-agent ran under this transcript
|
|
171
|
+
}
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const agentDir of agentDirs.sort()) {
|
|
174
|
+
let runDirs;
|
|
175
|
+
try {
|
|
176
|
+
runDirs = await readdir(join(runsRoot, agentDir));
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
for (const runDir of runDirs.sort()) {
|
|
182
|
+
const sessionPath = join(runsRoot, agentDir, runDir, 'session.jsonl');
|
|
183
|
+
if (!existsSync(sessionPath)) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
out.push({
|
|
188
|
+
agentId: `${agentDir}/${runDir}`,
|
|
189
|
+
filePath: sessionPath,
|
|
190
|
+
agentType: PI_SUBAGENT_RUN,
|
|
191
|
+
messages: (await this.readJsonlFile(sessionPath)),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
logger.debug(`[pi-adapter] Could not read sub-agent run: ${sessionPath}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return out;
|
|
200
|
+
}
|
|
201
|
+
static HEADER_READ_BYTES = 65536;
|
|
202
|
+
async readSessionHeader(filePath) {
|
|
203
|
+
let handle;
|
|
204
|
+
try {
|
|
205
|
+
handle = await open(filePath, 'r');
|
|
206
|
+
const buffer = Buffer.alloc(PiSessionAdapter.HEADER_READ_BYTES);
|
|
207
|
+
const { bytesRead } = await handle.read(buffer, 0, PiSessionAdapter.HEADER_READ_BYTES, 0);
|
|
208
|
+
if (bytesRead === 0)
|
|
209
|
+
return undefined;
|
|
210
|
+
const firstLine = buffer.toString('utf-8', 0, bytesRead).split('\n')[0]?.trim();
|
|
211
|
+
if (!firstLine)
|
|
212
|
+
return undefined;
|
|
213
|
+
const parsed = JSON.parse(firstLine);
|
|
214
|
+
if (isPiSessionHeader(parsed)) {
|
|
215
|
+
return parsed;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// ignore — malformed header is handled by caller
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
await handle?.close().catch(() => {
|
|
223
|
+
// best-effort close
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
async readJsonlFile(filePath) {
|
|
229
|
+
const content = await readFile(filePath, 'utf-8');
|
|
230
|
+
const entries = [];
|
|
231
|
+
for (const line of content.split('\n')) {
|
|
232
|
+
const trimmed = line.trim();
|
|
233
|
+
if (!trimmed)
|
|
234
|
+
continue;
|
|
235
|
+
try {
|
|
236
|
+
const parsed = JSON.parse(trimmed);
|
|
237
|
+
if (parsed && typeof parsed === 'object') {
|
|
238
|
+
entries.push(parsed);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
logger.debug(`[pi-adapter] Skipping non-object JSONL line in ${filePath}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
logger.debug(`[pi-adapter] Skipping malformed JSONL line in ${filePath}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return entries;
|
|
249
|
+
}
|
|
250
|
+
async processSession(filePath, sessionId, context) {
|
|
251
|
+
const parsedSession = await this.parseSessionFile(filePath, sessionId);
|
|
252
|
+
if (context.gitBranch && parsedSession.metadata) {
|
|
253
|
+
parsedSession.metadata.gitBranch = context.gitBranch;
|
|
254
|
+
}
|
|
255
|
+
const processorResults = {};
|
|
256
|
+
const failedProcessors = [];
|
|
257
|
+
let totalRecords = 0;
|
|
258
|
+
for (const processor of this.processors) {
|
|
259
|
+
try {
|
|
260
|
+
if (!processor.shouldProcess(parsedSession)) {
|
|
261
|
+
logger.debug(`[pi-adapter] Processor ${processor.name} skipped`);
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
const result = await processor.process(parsedSession, context);
|
|
265
|
+
processorResults[processor.name] = {
|
|
266
|
+
success: result.success,
|
|
267
|
+
message: result.message,
|
|
268
|
+
recordsProcessed: result.metadata?.recordsProcessed,
|
|
269
|
+
};
|
|
270
|
+
if (!result.success) {
|
|
271
|
+
failedProcessors.push(processor.name);
|
|
272
|
+
}
|
|
273
|
+
if (typeof result.metadata?.recordsProcessed === 'number') {
|
|
274
|
+
totalRecords += result.metadata.recordsProcessed;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
const msg = error instanceof Error ? error.message : 'Unknown error';
|
|
279
|
+
logger.error(`[pi-adapter] Processor ${processor.name} threw:`, error);
|
|
280
|
+
processorResults[processor.name] = { success: false, message: msg };
|
|
281
|
+
failedProcessors.push(processor.name);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
success: failedProcessors.length === 0,
|
|
286
|
+
processors: processorResults,
|
|
287
|
+
totalRecords,
|
|
288
|
+
failedProcessors,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Enumerate the Pi transcripts visible from this project.
|
|
293
|
+
*
|
|
294
|
+
* This is a plain listing, and deliberately so: it answers "which Pi transcripts
|
|
295
|
+
* exist here", never "which of them belong to the run that just finished".
|
|
296
|
+
*
|
|
297
|
+
* That second question cannot be answered from a directory. A concurrent `pi` — or
|
|
298
|
+
* a second CodeMie run in the same cwd — writes files indistinguishable from this
|
|
299
|
+
* run's by id, mtime, or `parentSession` lineage, and claiming one of them uploads
|
|
300
|
+
* a stranger's prompts and tool output under this user's session. Successive
|
|
301
|
+
* rounds of increasingly careful heuristics here were each shown to be reachable-
|
|
302
|
+
* wrong, so ownership is no longer inferred at all: the CodeMie extension records
|
|
303
|
+
* each transcript path from inside Pi, and `readPiRunLedger` reads it back.
|
|
304
|
+
*
|
|
305
|
+
* Scope follows the caller. With a `cwd`, the listing is that project's: the transcripts in
|
|
306
|
+
* that project's session directory whose own header declares that cwd — what a managed run
|
|
307
|
+
* needs. Without one, the listing is every project's, because that is what analytics needs:
|
|
308
|
+
* Claude and Codex discovery is global, so a cwd-scoped Pi would report zero usage whenever
|
|
309
|
+
* `codemie analytics` is run from anywhere but the project directory.
|
|
310
|
+
*
|
|
311
|
+
* @see pi.extension.ts
|
|
312
|
+
*/
|
|
313
|
+
async discoverSessions(options) {
|
|
314
|
+
const piOptions = options;
|
|
315
|
+
const projectScoped = piOptions?.cwd !== undefined;
|
|
316
|
+
const cwd = piOptions?.cwd ?? process.cwd();
|
|
317
|
+
const resolution = resolvePiSessionDir(cwd, piOptions?.env);
|
|
318
|
+
const maxAgeDays = piOptions?.maxAgeDays ?? 30;
|
|
319
|
+
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
320
|
+
const sessionDirs = projectScoped ? [resolution.sessionDir] : await allProjectSessionDirs(resolution);
|
|
321
|
+
const found = [];
|
|
322
|
+
for (const dir of sessionDirs) {
|
|
323
|
+
found.push(...(await this.listTranscripts(dir, cutoff, projectScoped ? cwd : undefined)));
|
|
324
|
+
}
|
|
325
|
+
found.sort((a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0));
|
|
326
|
+
const limited = piOptions?.limit && piOptions.limit > 0 ? found.slice(0, piOptions.limit) : found;
|
|
327
|
+
logger.debug(`[pi-discovery] ${found.length} transcript(s) in ${sessionDirs.length} dir(s), returning ${limited.length}`);
|
|
328
|
+
return limited;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Every transcript in `sessionDir` recent enough to matter, optionally narrowed to one project.
|
|
332
|
+
*
|
|
333
|
+
* A session directory can be shared between projects (`--session-dir`, or a
|
|
334
|
+
* `sessionDir` in the project's `.pi/settings.json`), so when a `projectPath` is
|
|
335
|
+
* given each file's own header must declare that cwd. Filtering is on mtime rather
|
|
336
|
+
* than header timestamp so a long-running session is not dropped while it is still
|
|
337
|
+
* being written to.
|
|
338
|
+
*/
|
|
339
|
+
async listTranscripts(sessionDir, cutoff, projectPath) {
|
|
340
|
+
if (!existsSync(sessionDir)) {
|
|
341
|
+
return [];
|
|
342
|
+
}
|
|
343
|
+
const resolvedCwd = projectPath === undefined ? undefined : resolve(projectPath);
|
|
344
|
+
const transcripts = [];
|
|
345
|
+
try {
|
|
346
|
+
for (const file of await readdir(sessionDir)) {
|
|
347
|
+
if (!file.endsWith('.jsonl'))
|
|
348
|
+
continue;
|
|
349
|
+
const filePath = join(sessionDir, file);
|
|
350
|
+
let statResult;
|
|
351
|
+
try {
|
|
352
|
+
statResult = await stat(filePath);
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
if (!statResult.isFile())
|
|
358
|
+
continue;
|
|
359
|
+
const updatedAt = statResult.mtime.getTime();
|
|
360
|
+
if (updatedAt < cutoff)
|
|
361
|
+
continue;
|
|
362
|
+
const header = await this.readSessionHeader(filePath);
|
|
363
|
+
if (!header) {
|
|
364
|
+
logger.debug(`[pi-discovery] Skipping file with invalid header: ${filePath}`);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (resolvedCwd !== undefined && resolve(header.cwd) !== resolvedCwd) {
|
|
368
|
+
logger.debug(`[pi-discovery] Skipping session from different cwd: ${header.cwd}`);
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
const createdAt = Date.parse(header.timestamp);
|
|
372
|
+
transcripts.push({
|
|
373
|
+
sessionId: header.id,
|
|
374
|
+
filePath,
|
|
375
|
+
projectPath: header.cwd,
|
|
376
|
+
createdAt: Number.isNaN(createdAt) ? updatedAt : createdAt,
|
|
377
|
+
updatedAt,
|
|
378
|
+
agentName: 'pi',
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
logger.debug(`[pi-discovery] Failed to scan session dir ${sessionDir}:`, error);
|
|
384
|
+
}
|
|
385
|
+
return transcripts;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=pi.session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.session.js","sourceRoot":"","sources":["../../../../src/agents/plugins/pi/pi.session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.setup.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/pi/pi.setup.ts"],"names":[],"mappings":"AAMA,wBAAsB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BlF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { cp, mkdir } from 'fs/promises';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { logger } from '../../../utils/logger.js';
|
|
5
|
+
import { getPiAgentDir, getUserPiAgentDir } from './pi.paths.js';
|
|
6
|
+
export async function preparePiAgentDir(cwd = process.cwd()) {
|
|
7
|
+
const sourceDir = getUserPiAgentDir();
|
|
8
|
+
const destDir = getPiAgentDir(cwd);
|
|
9
|
+
if (existsSync(destDir)) {
|
|
10
|
+
logger.debug(`[pi-setup] CodeMie Pi agent dir already exists, skipping copy: ${destDir}`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (!existsSync(sourceDir)) {
|
|
14
|
+
logger.warn(`[pi-setup] User Pi agent dir not found, starting fresh: ${sourceDir}`);
|
|
15
|
+
await mkdir(destDir, { recursive: true });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
logger.debug(`[pi-setup] Copying ${sourceDir} → ${destDir}`);
|
|
19
|
+
try {
|
|
20
|
+
const excludedSessionsDir = join(sourceDir, 'sessions');
|
|
21
|
+
await cp(sourceDir, destDir, {
|
|
22
|
+
recursive: true,
|
|
23
|
+
force: true,
|
|
24
|
+
filter: (source) => source !== excludedSessionsDir,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
logger.warn(`[pi-setup] Failed to copy user Pi agent dir, starting fresh: ${message}`);
|
|
30
|
+
await mkdir(destDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pi.setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi.setup.js","sourceRoot":"","sources":["../../../../src/agents/plugins/pi/pi.setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,kEAAkE,OAAO,EAAE,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,2DAA2D,SAAS,EAAE,CAAC,CAAC;QACpF,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,SAAS,MAAM,OAAO,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE;YAC3B,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,mBAAmB;SACnD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,gEAAgE,OAAO,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
|