@orquentra/codebuddy 2.8.0 → 2.14.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.
Files changed (73) hide show
  1. package/CLAUDE_CODEX.md +33 -0
  2. package/README.md +27 -3
  3. package/dist/{adapters-S4HHTWJW.js → adapters-OJRSVFV3.js} +2 -2
  4. package/dist/{chunk-GKNYMNFM.js → chunk-4DKYKDHI.js} +6 -1
  5. package/dist/chunk-4DKYKDHI.js.map +1 -0
  6. package/dist/{chunk-6KGYAFG7.js → chunk-7QMHIJBA.js} +30 -3
  7. package/dist/chunk-7QMHIJBA.js.map +1 -0
  8. package/dist/{chunk-6NZEZJYD.js → chunk-ESC4Y3L7.js} +3 -5
  9. package/dist/{chunk-6NZEZJYD.js.map → chunk-ESC4Y3L7.js.map} +1 -1
  10. package/dist/chunk-GQKWUHMA.js +20 -0
  11. package/dist/chunk-GQKWUHMA.js.map +1 -0
  12. package/dist/{chunk-J4T6HHI4.js → chunk-L6BRYZ6G.js} +537 -316
  13. package/dist/chunk-L6BRYZ6G.js.map +1 -0
  14. package/dist/{chunk-UK6XTS2Y.js → chunk-LRQNPYCK.js} +13 -19
  15. package/dist/chunk-LRQNPYCK.js.map +1 -0
  16. package/dist/{chunk-GXOML4UZ.js → chunk-LW75SKZR.js} +2 -2
  17. package/dist/{chunk-EJQVGFH2.js → chunk-UOTKHSQ5.js} +26 -9
  18. package/dist/chunk-UOTKHSQ5.js.map +1 -0
  19. package/dist/{chunk-W7GAXL6C.js → chunk-V7PT6ER5.js} +6 -5
  20. package/dist/chunk-V7PT6ER5.js.map +1 -0
  21. package/dist/{chunk-ZNLSCV3J.js → chunk-XSNW6Y3X.js} +1253 -315
  22. package/dist/chunk-XSNW6Y3X.js.map +1 -0
  23. package/dist/{chunk-6DONJW3W.js → chunk-YJPCS2GP.js} +274 -69
  24. package/dist/chunk-YJPCS2GP.js.map +1 -0
  25. package/dist/{chunk-XL2HLACE.js → chunk-YN7TEIUH.js} +1 -1
  26. package/dist/chunk-YN7TEIUH.js.map +1 -0
  27. package/dist/{chunk-TLWGZVPC.js → chunk-YNSTIMCF.js} +746 -66
  28. package/dist/chunk-YNSTIMCF.js.map +1 -0
  29. package/dist/{chunk-NY2YXP3R.js → chunk-YWDH6DQ6.js} +70 -4
  30. package/dist/chunk-YWDH6DQ6.js.map +1 -0
  31. package/dist/cli/index.js +23 -9
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/{codebuddy-DO7ZhoWn.d.ts → codebuddy-CHqMptZB.d.ts} +35 -0
  34. package/dist/index.d.ts +6 -4
  35. package/dist/index.js +9 -9
  36. package/dist/install-EU35ERK5.js +30 -0
  37. package/dist/langgraph/index.d.ts +1 -1
  38. package/dist/lean-43ADYTBW.js +28 -0
  39. package/dist/{main-QUASSFP7.js → main-SFC5LV4E.js} +1333 -437
  40. package/dist/main-SFC5LV4E.js.map +1 -0
  41. package/dist/{operations-WJR7AZZF.js → operations-6Z6ZDVBP.js} +3 -3
  42. package/dist/{pretool-command-JTKX6G3M.js → pretool-command-B5GY5T6E.js} +3 -3
  43. package/dist/prompt-gate-TDTFFQW2.js +8 -0
  44. package/dist/{runtime-OQQ22VJF.js → runtime-W5AW32SD.js} +15 -7
  45. package/dist/{summaries-ML53R7EL.js → summaries-32PHOB6L.js} +3 -4
  46. package/dist/{zvec-XDZNZ2OL.js → zvec-24HLAFGN.js} +3 -4
  47. package/dist/zvec-24HLAFGN.js.map +1 -0
  48. package/package.json +11 -2
  49. package/dist/chunk-6DONJW3W.js.map +0 -1
  50. package/dist/chunk-6KGYAFG7.js.map +0 -1
  51. package/dist/chunk-EJQVGFH2.js.map +0 -1
  52. package/dist/chunk-GKNYMNFM.js.map +0 -1
  53. package/dist/chunk-ITQO632W.js +0 -673
  54. package/dist/chunk-ITQO632W.js.map +0 -1
  55. package/dist/chunk-J4T6HHI4.js.map +0 -1
  56. package/dist/chunk-NY2YXP3R.js.map +0 -1
  57. package/dist/chunk-TLWGZVPC.js.map +0 -1
  58. package/dist/chunk-UK6XTS2Y.js.map +0 -1
  59. package/dist/chunk-W7GAXL6C.js.map +0 -1
  60. package/dist/chunk-XL2HLACE.js.map +0 -1
  61. package/dist/chunk-ZNLSCV3J.js.map +0 -1
  62. package/dist/install-BXM56QCD.js +0 -19
  63. package/dist/lean-command-7DFW32MA.js +0 -19
  64. package/dist/main-QUASSFP7.js.map +0 -1
  65. /package/dist/{adapters-S4HHTWJW.js.map → adapters-OJRSVFV3.js.map} +0 -0
  66. /package/dist/{chunk-GXOML4UZ.js.map → chunk-LW75SKZR.js.map} +0 -0
  67. /package/dist/{install-BXM56QCD.js.map → install-EU35ERK5.js.map} +0 -0
  68. /package/dist/{lean-command-7DFW32MA.js.map → lean-43ADYTBW.js.map} +0 -0
  69. /package/dist/{operations-WJR7AZZF.js.map → operations-6Z6ZDVBP.js.map} +0 -0
  70. /package/dist/{pretool-command-JTKX6G3M.js.map → pretool-command-B5GY5T6E.js.map} +0 -0
  71. /package/dist/{runtime-OQQ22VJF.js.map → prompt-gate-TDTFFQW2.js.map} +0 -0
  72. /package/dist/{summaries-ML53R7EL.js.map → runtime-W5AW32SD.js.map} +0 -0
  73. /package/dist/{zvec-XDZNZ2OL.js.map → summaries-32PHOB6L.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/clients/adapters.ts"],"sourcesContent":["/**\n * Client adapters: the one place that says, per coding agent, where its rules\n * file lives, how its MCP config is written, and which lifecycle events\n * CodeBuddy can wire automatically. Everything else (rules install, hooks,\n * `codebuddy clients`) reads this table instead of branching on client names.\n *\n * Capabilities are what CodeBuddy actually implements today, not what the host\n * might support: a host with plugin events but no CodeBuddy bridge reports its\n * lifecycle as missing, with the reason in `gap`.\n */\n\nexport const AUTOMATION_MODES = [\"agent\", \"hooks\", \"mcp-only\", \"lean\"] as const;\nexport type AutomationMode = (typeof AUTOMATION_MODES)[number];\n\nexport const MODE_LABELS: Record<AutomationMode, string> = {\n agent: \"agent-driven\",\n hooks: \"hook-driven\",\n \"mcp-only\": \"MCP-only\",\n lean: \"Lean (token reduction)\",\n};\n\nexport const LIFECYCLE_EVENTS = [\"prompt\", \"edit\", \"turn-end\", \"compaction\"] as const;\nexport type LifecycleEvent = (typeof LIFECYCLE_EVENTS)[number];\n\n/**\n * Project-local JSON MCP config CodeBuddy writes, or a global config file it\n * edits only with `clients install --global` (otherwise `manual` is shown).\n */\nexport type McpTarget =\n | { file: string; format: \"mcpServers\" | \"opencode\" }\n | { global: \"codex\" | \"hermes\"; manual: string };\n\n/** Where a client's CodeBuddy lifecycle hooks are installed (see `hooks/install.ts`). */\nexport type HookSurface = \"claude-settings\" | \"codex-hooks\" | \"opencode-plugin\" | \"hermes-plugin\";\n\nexport type ClientAdapter = {\n name: string;\n /** Host binary and the version (or source commit) this adapter was verified against. */\n host: { bin: string; verified: string };\n rulesFile: \"CLAUDE.md\" | \"AGENTS.md\";\n mcp: McpTarget;\n /** Lifecycle events CodeBuddy hooks handle automatically for this client. */\n hookEvents: readonly LifecycleEvent[];\n /** Set exactly when `hookEvents` is non-empty. */\n hooks?: HookSurface;\n /** Why lifecycle automation is missing (verified host surface, not certification). */\n gap?: string;\n /** Host-side caveat that is not a missing lifecycle event. */\n note?: string;\n /** How the host frames CodeBuddy's per-turn costs (source- or live-verified, not measured). */\n framing: string;\n /** The host drops an injected context block after the turn, so each prompt gets it in full. */\n ephemeralContext?: true;\n /** The host lists MCP tools by name and loads a schema only when a tool is used. */\n defersMcpSchemas?: true;\n};\n\nexport const CLIENT_IDS = [\"claude\", \"codex\", \"opencode\", \"freebuff\", \"hermes\"] as const;\nexport type ClientId = (typeof CLIENT_IDS)[number];\n\nexport const CLIENT_ADAPTERS: Record<ClientId, ClientAdapter> = {\n claude: {\n name: \"Claude Code\",\n host: { bin: \"claude\", verified: \"2.1.287\" },\n rulesFile: \"CLAUDE.md\",\n mcp: { file: \".mcp.json\", format: \"mcpServers\" },\n hookEvents: LIFECYCLE_EVENTS,\n hooks: \"claude-settings\",\n framing:\n \"UserPromptSubmit stdout is added to the prompt as hook context (wrapper is host-defined); unchanged lines are not resent; MCP schemas may be deferred by tool search\",\n defersMcpSchemas: true,\n },\n codex: {\n name: \"Codex\",\n host: { bin: \"codex\", verified: \"0.169.0\" },\n rulesFile: \"AGENTS.md\",\n mcp: { global: \"codex\", manual: \"codebuddy codex install (global ~/.codex/config.toml)\" },\n hookEvents: LIFECYCLE_EVENTS,\n hooks: \"codex-hooks\",\n note: \"Requires Codex hook support (verified 0.169.0), a trusted project and review of the installed definitions in /hooks. CodeBuddy never bypasses hook trust. Rollout import remains available for older sessions.\",\n framing:\n \"native hook additionalContext is developer context; project instructions remain in AGENTS.md\",\n },\n opencode: {\n name: \"OpenCode\",\n host: { bin: \"opencode\", verified: \"1.18.32\" },\n rulesFile: \"AGENTS.md\",\n // opencode.jsonc is used instead when it is the only one present.\n mcp: { file: \"opencode.json\", format: \"opencode\" },\n // Plugin bridge: chat.message (prompt), tool.execute.after (edit),\n // session.idle (turn-end), session.compacted.\n hookEvents: LIFECYCLE_EVENTS,\n hooks: \"opencode-plugin\",\n framing:\n \"block appended verbatim as a synthetic text part that stays in history; unchanged lines are not resent\",\n },\n freebuff: {\n name: \"Freebuff\",\n // Not installed; checked against source CodebuffAI/freebuff@f9ae64dd.\n host: { bin: \"freebuff\", verified: \"source f9ae64dd\" },\n rulesFile: \"AGENTS.md\",\n mcp: { file: \".agents/mcp.json\", format: \"mcpServers\" },\n hookEvents: [],\n gap: \"no lifecycle surface at CodebuffAI/freebuff@f9ae64dd: no user hook config, and the SDK run_file_change_hooks tool is a no-op (sdk/src/tools/run-file-change-hooks.ts)\",\n note: \"reads AGENTS.md, and CLAUDE.md only in a directory without one (common/src/constants/knowledge.ts)\",\n framing:\n \"agent mode only; AGENTS.md is sent as a fenced block under a fixed project-instructions header\",\n },\n hermes: {\n name: \"Hermes Agent\",\n host: { bin: \"hermes\", verified: \"0.17.0\" },\n rulesFile: \"AGENTS.md\",\n mcp: {\n global: \"hermes\",\n manual: \"add a codebuddy entry under mcp_servers in ~/.hermes/config.yaml\",\n },\n // Project Python plugin: pre_llm_call (prompt), post_tool_call (edit),\n // on_session_end (turn-end). Compaction has no plugin hook; the context is\n // resent in full every turn and the session ledger reset with it.\n hookEvents: LIFECYCLE_EVENTS,\n hooks: \"hermes-plugin\",\n ephemeralContext: true,\n framing:\n \"block appended to this turn's user message only and never persisted, so it is resent in full every turn\",\n note: \"hooks load only with HERMES_ENABLE_PROJECT_PLUGINS=1 and codebuddy in plugins.enabled of ~/.hermes/config.yaml; .hermes.md takes precedence over AGENTS.md\",\n },\n};\n\nexport function parseClient(value: string | undefined): ClientId {\n const client = value ?? \"claude\";\n if (!(CLIENT_IDS as readonly string[]).includes(client)) {\n throw new Error(`Unknown client \"${client}\". Use one of: ${CLIENT_IDS.join(\", \")}.`);\n }\n return client as ClientId;\n}\n\nexport function parseMode(value: string): AutomationMode {\n if (!(AUTOMATION_MODES as readonly string[]).includes(value)) {\n throw new Error(`Unknown mode \"${value}\". Use one of: ${AUTOMATION_MODES.join(\", \")}.`);\n }\n return value as AutomationMode;\n}\n\n/** Hook-driven mode needs every lifecycle event wired; partial coverage would drop captures. */\nexport function supportedModes(adapter: ClientAdapter): AutomationMode[] {\n return adapter.hookEvents.length === LIFECYCLE_EVENTS.length\n ? [...AUTOMATION_MODES]\n : [\"agent\", \"mcp-only\"];\n}\n\n/** Other clients that read the same rules file (a managed block there serves all of them). */\nexport function sharedRulesReaders(client: ClientId): ClientId[] {\n const file = CLIENT_ADAPTERS[client].rulesFile;\n return CLIENT_IDS.filter((id) => id !== client && CLIENT_ADAPTERS[id].rulesFile === file);\n}\n"],"mappings":";AAWO,IAAM,mBAAmB,CAAC,SAAS,SAAS,YAAY,MAAM;AAG9D,IAAM,cAA8C;AAAA,EACzD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AACR;AAEO,IAAM,mBAAmB,CAAC,UAAU,QAAQ,YAAY,YAAY;AAoCpE,IAAM,aAAa,CAAC,UAAU,SAAS,YAAY,YAAY,QAAQ;AAGvE,IAAM,kBAAmD;AAAA,EAC9D,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,UAAU,UAAU,UAAU;AAAA,IAC3C,WAAW;AAAA,IACX,KAAK,EAAE,MAAM,aAAa,QAAQ,aAAa;AAAA,IAC/C,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SACE;AAAA,IACF,kBAAkB;AAAA,EACpB;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,SAAS,UAAU,UAAU;AAAA,IAC1C,WAAW;AAAA,IACX,KAAK,EAAE,QAAQ,SAAS,QAAQ,wDAAwD;AAAA,IACxF,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SACE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,YAAY,UAAU,UAAU;AAAA,IAC7C,WAAW;AAAA;AAAA,IAEX,KAAK,EAAE,MAAM,iBAAiB,QAAQ,WAAW;AAAA;AAAA;AAAA,IAGjD,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA;AAAA,IAEN,MAAM,EAAE,KAAK,YAAY,UAAU,kBAAkB;AAAA,IACrD,WAAW;AAAA,IACX,KAAK,EAAE,MAAM,oBAAoB,QAAQ,aAAa;AAAA,IACtD,YAAY,CAAC;AAAA,IACb,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SACE;AAAA,EACJ;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,UAAU,UAAU,SAAS;AAAA,IAC1C,WAAW;AAAA,IACX,KAAK;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAIA,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,kBAAkB;AAAA,IAClB,SACE;AAAA,IACF,MAAM;AAAA,EACR;AACF;AAEO,SAAS,YAAY,OAAqC;AAC/D,QAAM,SAAS,SAAS;AACxB,MAAI,CAAE,WAAiC,SAAS,MAAM,GAAG;AACvD,UAAM,IAAI,MAAM,mBAAmB,MAAM,kBAAkB,WAAW,KAAK,IAAI,CAAC,GAAG;AAAA,EACrF;AACA,SAAO;AACT;AAEO,SAAS,UAAU,OAA+B;AACvD,MAAI,CAAE,iBAAuC,SAAS,KAAK,GAAG;AAC5D,UAAM,IAAI,MAAM,iBAAiB,KAAK,kBAAkB,iBAAiB,KAAK,IAAI,CAAC,GAAG;AAAA,EACxF;AACA,SAAO;AACT;AAGO,SAAS,eAAe,SAA0C;AACvE,SAAO,QAAQ,WAAW,WAAW,iBAAiB,SAClD,CAAC,GAAG,gBAAgB,IACpB,CAAC,SAAS,UAAU;AAC1B;AAGO,SAAS,mBAAmB,QAA8B;AAC/D,QAAM,OAAO,gBAAgB,MAAM,EAAE;AACrC,SAAO,WAAW,OAAO,CAAC,OAAO,OAAO,UAAU,gBAAgB,EAAE,EAAE,cAAc,IAAI;AAC1F;","names":[]}