@orquentra/codebuddy 2.9.0 → 2.15.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 (117) hide show
  1. package/ARCHITECTURE.md +98 -0
  2. package/CLAUDE_CODEX.md +33 -0
  3. package/README.md +114 -9
  4. package/dist/{adapters-S4HHTWJW.js → adapters-OJRSVFV3.js} +2 -2
  5. package/dist/{chunk-GXOML4UZ.js → chunk-4BSO3HST.js} +126 -18
  6. package/dist/chunk-4BSO3HST.js.map +1 -0
  7. package/dist/{chunk-CAEPHLHC.js → chunk-57642NGU.js} +2 -44
  8. package/dist/chunk-57642NGU.js.map +1 -0
  9. package/dist/{chunk-ESZXCZIN.js → chunk-6YI2D5F5.js} +33 -5
  10. package/dist/chunk-6YI2D5F5.js.map +1 -0
  11. package/dist/{chunk-GKNYMNFM.js → chunk-7IPSDDO5.js} +10 -3
  12. package/dist/chunk-7IPSDDO5.js.map +1 -0
  13. package/dist/chunk-BTTQWSDS.js +372 -0
  14. package/dist/chunk-BTTQWSDS.js.map +1 -0
  15. package/dist/{chunk-2WH2Q4TA.js → chunk-D5E7SGI5.js} +304 -77
  16. package/dist/chunk-D5E7SGI5.js.map +1 -0
  17. package/dist/chunk-EMWGLKPR.js +45 -0
  18. package/dist/chunk-EMWGLKPR.js.map +1 -0
  19. package/dist/chunk-GQKWUHMA.js +20 -0
  20. package/dist/chunk-GQKWUHMA.js.map +1 -0
  21. package/dist/chunk-ITXE27SZ.js +358 -0
  22. package/dist/chunk-ITXE27SZ.js.map +1 -0
  23. package/dist/{chunk-UK6XTS2Y.js → chunk-JJQDVGF7.js} +23 -23
  24. package/dist/chunk-JJQDVGF7.js.map +1 -0
  25. package/dist/{chunk-F4BJ3DXW.js → chunk-KQCP3ZYH.js} +1273 -331
  26. package/dist/chunk-KQCP3ZYH.js.map +1 -0
  27. package/dist/{chunk-QN76UJP7.js → chunk-KYRM3HPP.js} +89 -21
  28. package/dist/chunk-KYRM3HPP.js.map +1 -0
  29. package/dist/{chunk-KNR2P2UY.js → chunk-M75SN4D4.js} +19 -4
  30. package/dist/chunk-M75SN4D4.js.map +1 -0
  31. package/dist/{chunk-J4T6HHI4.js → chunk-RZ266NHE.js} +538 -317
  32. package/dist/chunk-RZ266NHE.js.map +1 -0
  33. package/dist/chunk-U7KDM62P.js +43 -0
  34. package/dist/chunk-U7KDM62P.js.map +1 -0
  35. package/dist/chunk-UATJCD2T.js +368 -0
  36. package/dist/chunk-UATJCD2T.js.map +1 -0
  37. package/dist/{chunk-ENKDFLOO.js → chunk-UOTKHSQ5.js} +25 -8
  38. package/dist/chunk-UOTKHSQ5.js.map +1 -0
  39. package/dist/{chunk-TLWGZVPC.js → chunk-UR3DF74I.js} +1007 -132
  40. package/dist/chunk-UR3DF74I.js.map +1 -0
  41. package/dist/chunk-UTPC66MV.js +128 -0
  42. package/dist/chunk-UTPC66MV.js.map +1 -0
  43. package/dist/{chunk-W7GAXL6C.js → chunk-V7PT6ER5.js} +6 -5
  44. package/dist/chunk-V7PT6ER5.js.map +1 -0
  45. package/dist/chunk-WHKXUXHE.js +156 -0
  46. package/dist/chunk-WHKXUXHE.js.map +1 -0
  47. package/dist/{chunk-SRA4MDVG.js → chunk-YMXFSHXT.js} +978 -950
  48. package/dist/chunk-YMXFSHXT.js.map +1 -0
  49. package/dist/cli/index.js +23 -9
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/{codebuddy-DO7ZhoWn.d.ts → codebuddy-CHqMptZB.d.ts} +35 -0
  52. package/dist/config-TXQJCCVI.js +15 -0
  53. package/dist/expand-KWYGNCKZ.js +98 -0
  54. package/dist/expand-KWYGNCKZ.js.map +1 -0
  55. package/dist/file-vectors-MKXTSGGH.js +19 -0
  56. package/dist/index-facts-4MTEHKMN.js +38 -0
  57. package/dist/index-pass-TBDUEZCB.js +14 -0
  58. package/dist/index.d.ts +6 -4
  59. package/dist/index.js +25 -23
  60. package/dist/install-E3JWINTN.js +31 -0
  61. package/dist/langgraph/index.d.ts +1 -1
  62. package/dist/lean-MLTAFS5L.js +29 -0
  63. package/dist/local-75DJECVR.js +48 -0
  64. package/dist/local-llm-MECVJTVU.js +19 -0
  65. package/dist/{main-YJKSYFPT.js → main-RLMKQZW4.js} +999 -328
  66. package/dist/main-RLMKQZW4.js.map +1 -0
  67. package/dist/{memory-TGHVTBME.js → memory-PFFVMTCH.js} +9 -6
  68. package/dist/{memory-TGHVTBME.js.map → memory-PFFVMTCH.js.map} +1 -1
  69. package/dist/{operations-OG4ISWIM.js → operations-STR7S5UO.js} +8 -7
  70. package/dist/operations-STR7S5UO.js.map +1 -0
  71. package/dist/{pretool-command-PRFOIHMW.js → pretool-command-B5GY5T6E.js} +2 -2
  72. package/dist/pretool-command-B5GY5T6E.js.map +1 -0
  73. package/dist/prompt-gate-TDTFFQW2.js +8 -0
  74. package/dist/prompt-gate-TDTFFQW2.js.map +1 -0
  75. package/dist/{rerank-IQAEWLQR.js → rerank-XXKWDI5Q.js} +7 -4
  76. package/dist/{rerank-IQAEWLQR.js.map → rerank-XXKWDI5Q.js.map} +1 -1
  77. package/dist/{runtime-GCSEIAVD.js → runtime-SWFWGTQ4.js} +18 -9
  78. package/dist/runtime-SWFWGTQ4.js.map +1 -0
  79. package/dist/summaries-QXWFFDUZ.js +31 -0
  80. package/dist/summaries-QXWFFDUZ.js.map +1 -0
  81. package/dist/{zvec-XDZNZ2OL.js → zvec-F73IBWO5.js} +13 -6
  82. package/dist/zvec-F73IBWO5.js.map +1 -0
  83. package/package.json +13 -3
  84. package/dist/chunk-2WH2Q4TA.js.map +0 -1
  85. package/dist/chunk-6NZEZJYD.js +0 -206
  86. package/dist/chunk-6NZEZJYD.js.map +0 -1
  87. package/dist/chunk-CAEPHLHC.js.map +0 -1
  88. package/dist/chunk-ENKDFLOO.js.map +0 -1
  89. package/dist/chunk-ESZXCZIN.js.map +0 -1
  90. package/dist/chunk-F4BJ3DXW.js.map +0 -1
  91. package/dist/chunk-GKNYMNFM.js.map +0 -1
  92. package/dist/chunk-GXOML4UZ.js.map +0 -1
  93. package/dist/chunk-ITQO632W.js +0 -673
  94. package/dist/chunk-ITQO632W.js.map +0 -1
  95. package/dist/chunk-J4T6HHI4.js.map +0 -1
  96. package/dist/chunk-KNR2P2UY.js.map +0 -1
  97. package/dist/chunk-QN76UJP7.js.map +0 -1
  98. package/dist/chunk-SFMIMLXR.js +0 -63
  99. package/dist/chunk-SFMIMLXR.js.map +0 -1
  100. package/dist/chunk-SRA4MDVG.js.map +0 -1
  101. package/dist/chunk-TLWGZVPC.js.map +0 -1
  102. package/dist/chunk-UK6XTS2Y.js.map +0 -1
  103. package/dist/chunk-W7GAXL6C.js.map +0 -1
  104. package/dist/config-GEZFLXK6.js +0 -12
  105. package/dist/install-BXM56QCD.js +0 -19
  106. package/dist/lean-command-7DFW32MA.js +0 -19
  107. package/dist/main-YJKSYFPT.js.map +0 -1
  108. package/dist/summaries-ML53R7EL.js +0 -21
  109. /package/dist/{adapters-S4HHTWJW.js.map → adapters-OJRSVFV3.js.map} +0 -0
  110. /package/dist/{config-GEZFLXK6.js.map → config-TXQJCCVI.js.map} +0 -0
  111. /package/dist/{install-BXM56QCD.js.map → file-vectors-MKXTSGGH.js.map} +0 -0
  112. /package/dist/{lean-command-7DFW32MA.js.map → index-facts-4MTEHKMN.js.map} +0 -0
  113. /package/dist/{operations-OG4ISWIM.js.map → index-pass-TBDUEZCB.js.map} +0 -0
  114. /package/dist/{pretool-command-PRFOIHMW.js.map → install-E3JWINTN.js.map} +0 -0
  115. /package/dist/{runtime-GCSEIAVD.js.map → lean-MLTAFS5L.js.map} +0 -0
  116. /package/dist/{summaries-ML53R7EL.js.map → local-75DJECVR.js.map} +0 -0
  117. /package/dist/{zvec-XDZNZ2OL.js.map → local-llm-MECVJTVU.js.map} +0 -0
@@ -1,17 +1,20 @@
1
+ import {
2
+ chatJson
3
+ } from "./chunk-6YI2D5F5.js";
1
4
  import {
2
5
  memoryCandidateSchema
3
6
  } from "./chunk-DFV2SK6C.js";
4
- import {
5
- chatJson
6
- } from "./chunk-ESZXCZIN.js";
7
7
  import {
8
8
  redactSensitive
9
9
  } from "./chunk-AL6VBTNA.js";
10
10
  import {
11
11
  resolveLlmConfig
12
- } from "./chunk-SFMIMLXR.js";
13
- import "./chunk-KNR2P2UY.js";
12
+ } from "./chunk-WHKXUXHE.js";
13
+ import "./chunk-M75SN4D4.js";
14
14
  import "./chunk-CG5B3LYG.js";
15
+ import "./chunk-BTTQWSDS.js";
16
+ import "./chunk-3QGW53GD.js";
17
+ import "./chunk-HPOR6YXA.js";
15
18
  import "./chunk-PZ5AY32C.js";
16
19
 
17
20
  // src/llm/memory.ts
@@ -55,4 +58,4 @@ export {
55
58
  createLlmMemoryExtractor,
56
59
  llmCaptureOptions
57
60
  };
58
- //# sourceMappingURL=memory-TGHVTBME.js.map
61
+ //# sourceMappingURL=memory-PFFVMTCH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/llm/memory.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { redactSensitive } from \"../core/sensitive.js\";\nimport type { MemoryExtractor } from \"../memory-extract/llm.js\";\nimport { type ExtractionInput, memoryCandidateSchema } from \"../memory-extract/types.js\";\nimport { chatJson } from \"./client.js\";\nimport { type EnabledLlmConfig, resolveLlmConfig } from \"./config.js\";\n\n/**\n * Optional BYOK memory extraction through the existing `MemoryExtractor`\n * seam. Output must match `memoryCandidateSchema` and then passes the same\n * gate as deterministic candidates (sensitive scan, confidence, review);\n * any failure falls back to deterministic extraction.\n */\nconst TIMEOUT_MS = 20_000;\nconst schema = z.object({ candidates: z.array(memoryCandidateSchema).max(10) });\n\nconst SYSTEM = [\n \"You turn the summary of one coding turn into durable project memory.\",\n 'Answer with JSON only: {\"candidates\":[{\"class\":\"fact|decision|incident|note|ignored\",\"content\":\"...\",\"subject\":\"...\",\"predicate\":\"...\",\"object\":\"...\",\"confidence\":0.0,\"paths\":[\"...\"],\"severity\":null}]}.',\n \"Keep only what will still be true and useful in a later session: decisions, confirmed bugs and their causes, project facts.\",\n \"Use only paths named in the input. Confidence below 0.7 for anything uncertain. Chatter is class ignored.\",\n \"Never include secrets.\",\n].join(\" \");\n\nexport function createLlmMemoryExtractor(root: string, config: EnabledLlmConfig): MemoryExtractor {\n return {\n async extract(input: ExtractionInput) {\n const result = await chatJson(config, {\n system: SYSTEM,\n user: JSON.stringify({\n summary: redactSensitive(input.summary),\n changedFiles: (input.changedFiles ?? []).map(redactSensitive),\n verification: (input.verification ?? []).map(redactSensitive),\n }),\n schema,\n maxTokens: 800,\n deadlineMs: TIMEOUT_MS,\n purpose: \"background\",\n repositoryRoot: root,\n });\n if (!result.ok) throw new Error(`llm memory extraction: ${result.reason}`);\n return result.value.candidates;\n },\n };\n}\n\n/** Extra `captureAfterTurn` options when the memory feature is on: one attempt, then deterministic. */\nexport async function llmCaptureOptions(\n root: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<{ extractor?: MemoryExtractor; retries?: number }> {\n const config = await resolveLlmConfig(root, env);\n if (!config.enabled || !config.features.memory) return {};\n return { extractor: createLlmMemoryExtractor(root, config), retries: 0 };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAalB,IAAM,aAAa;AACnB,IAAM,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,EAAE,IAAI,EAAE,EAAE,CAAC;AAE9E,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEH,SAAS,yBAAyB,MAAc,QAA2C;AAChG,SAAO;AAAA,IACL,MAAM,QAAQ,OAAwB;AACpC,YAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,SAAS,gBAAgB,MAAM,OAAO;AAAA,UACtC,eAAe,MAAM,gBAAgB,CAAC,GAAG,IAAI,eAAe;AAAA,UAC5D,eAAe,MAAM,gBAAgB,CAAC,GAAG,IAAI,eAAe;AAAA,QAC9D,CAAC;AAAA,QACD;AAAA,QACA,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AACD,UAAI,CAAC,OAAO,GAAI,OAAM,IAAI,MAAM,0BAA0B,OAAO,MAAM,EAAE;AACzE,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,EACF;AACF;AAGA,eAAsB,kBACpB,MACA,MAAyB,QAAQ,KAC2B;AAC5D,QAAM,SAAS,MAAM,iBAAiB,MAAM,GAAG;AAC/C,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,SAAS,OAAQ,QAAO,CAAC;AACxD,SAAO,EAAE,WAAW,yBAAyB,MAAM,MAAM,GAAG,SAAS,EAAE;AACzE;","names":[]}
1
+ {"version":3,"sources":["../src/llm/memory.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { redactSensitive } from \"../core/sensitive.js\";\nimport type { MemoryExtractor } from \"../memory-extract/llm.js\";\nimport { type ExtractionInput, memoryCandidateSchema } from \"../memory-extract/types.js\";\nimport { chatJson } from \"./client.js\";\nimport { type EnabledLlmConfig, resolveLlmConfig } from \"./config.js\";\n\n/**\n * Optional BYOK memory extraction through the existing `MemoryExtractor`\n * seam. Output must match `memoryCandidateSchema` and then passes the same\n * gate as deterministic candidates (sensitive scan, confidence, review);\n * any failure falls back to deterministic extraction.\n */\nconst TIMEOUT_MS = 20_000;\nconst schema = z.object({ candidates: z.array(memoryCandidateSchema).max(10) });\n\nconst SYSTEM = [\n \"You turn the summary of one coding turn into durable project memory.\",\n 'Answer with JSON only: {\"candidates\":[{\"class\":\"fact|decision|incident|note|ignored\",\"content\":\"...\",\"subject\":\"...\",\"predicate\":\"...\",\"object\":\"...\",\"confidence\":0.0,\"paths\":[\"...\"],\"severity\":null}]}.',\n \"Keep only what will still be true and useful in a later session: decisions, confirmed bugs and their causes, project facts.\",\n \"Use only paths named in the input. Confidence below 0.7 for anything uncertain. Chatter is class ignored.\",\n \"Never include secrets.\",\n].join(\" \");\n\nexport function createLlmMemoryExtractor(root: string, config: EnabledLlmConfig): MemoryExtractor {\n return {\n async extract(input: ExtractionInput) {\n const result = await chatJson(config, {\n system: SYSTEM,\n user: JSON.stringify({\n summary: redactSensitive(input.summary),\n changedFiles: (input.changedFiles ?? []).map(redactSensitive),\n verification: (input.verification ?? []).map(redactSensitive),\n }),\n schema,\n maxTokens: 800,\n deadlineMs: TIMEOUT_MS,\n purpose: \"background\",\n repositoryRoot: root,\n });\n if (!result.ok) throw new Error(`llm memory extraction: ${result.reason}`);\n return result.value.candidates;\n },\n };\n}\n\n/** Extra `captureAfterTurn` options when the memory feature is on: one attempt, then deterministic. */\nexport async function llmCaptureOptions(\n root: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<{ extractor?: MemoryExtractor; retries?: number }> {\n const config = await resolveLlmConfig(root, env);\n if (!config.enabled || !config.features.memory) return {};\n return { extractor: createLlmMemoryExtractor(root, config), retries: 0 };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAalB,IAAM,aAAa;AACnB,IAAM,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,EAAE,IAAI,EAAE,EAAE,CAAC;AAE9E,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEH,SAAS,yBAAyB,MAAc,QAA2C;AAChG,SAAO;AAAA,IACL,MAAM,QAAQ,OAAwB;AACpC,YAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,SAAS,gBAAgB,MAAM,OAAO;AAAA,UACtC,eAAe,MAAM,gBAAgB,CAAC,GAAG,IAAI,eAAe;AAAA,UAC5D,eAAe,MAAM,gBAAgB,CAAC,GAAG,IAAI,eAAe;AAAA,QAC9D,CAAC;AAAA,QACD;AAAA,QACA,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AACD,UAAI,CAAC,OAAO,GAAI,OAAM,IAAI,MAAM,0BAA0B,OAAO,MAAM,EAAE;AACzE,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,EACF;AACF;AAGA,eAAsB,kBACpB,MACA,MAAyB,QAAQ,KAC2B;AAC5D,QAAM,SAAS,MAAM,iBAAiB,MAAM,GAAG;AAC/C,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,SAAS,OAAQ,QAAO,CAAC;AACxD,SAAO,EAAE,WAAW,yBAAyB,MAAM,MAAM,GAAG,SAAS,EAAE;AACzE;","names":[]}
@@ -5,15 +5,16 @@ import {
5
5
  inspectNamespace,
6
6
  listFactsPage,
7
7
  runDoctor
8
- } from "./chunk-QN76UJP7.js";
9
- import "./chunk-SRA4MDVG.js";
10
- import "./chunk-CAEPHLHC.js";
8
+ } from "./chunk-KYRM3HPP.js";
9
+ import "./chunk-57642NGU.js";
10
+ import "./chunk-YMXFSHXT.js";
11
+ import "./chunk-EMWGLKPR.js";
12
+ import "./chunk-AL6VBTNA.js";
11
13
  import "./chunk-6JCKMIQY.js";
14
+ import "./chunk-M75SN4D4.js";
15
+ import "./chunk-CG5B3LYG.js";
12
16
  import "./chunk-3QGW53GD.js";
13
- import "./chunk-AL6VBTNA.js";
14
17
  import "./chunk-HPOR6YXA.js";
15
- import "./chunk-KNR2P2UY.js";
16
- import "./chunk-CG5B3LYG.js";
17
18
  import "./chunk-PZ5AY32C.js";
18
19
  export {
19
20
  createRuntime,
@@ -23,4 +24,4 @@ export {
23
24
  listFactsPage,
24
25
  runDoctor
25
26
  };
26
- //# sourceMappingURL=operations-OG4ISWIM.js.map
27
+ //# sourceMappingURL=operations-STR7S5UO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPreToolHookCommand
3
- } from "./chunk-ENKDFLOO.js";
3
+ } from "./chunk-UOTKHSQ5.js";
4
4
  import "./chunk-FJOTP632.js";
5
5
  import "./chunk-YN7TEIUH.js";
6
6
  import "./chunk-TGFTKWOR.js";
@@ -10,4 +10,4 @@ import "./chunk-PZ5AY32C.js";
10
10
  export {
11
11
  runPreToolHookCommand
12
12
  };
13
- //# sourceMappingURL=pretool-command-PRFOIHMW.js.map
13
+ //# sourceMappingURL=pretool-command-B5GY5T6E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,8 @@
1
+ import {
2
+ skipPromptRetrieval
3
+ } from "./chunk-GQKWUHMA.js";
4
+ import "./chunk-PZ5AY32C.js";
5
+ export {
6
+ skipPromptRetrieval
7
+ };
8
+ //# sourceMappingURL=prompt-gate-TDTFFQW2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,12 +1,15 @@
1
1
  import {
2
2
  chatJson
3
- } from "./chunk-ESZXCZIN.js";
3
+ } from "./chunk-6YI2D5F5.js";
4
4
  import {
5
5
  redactSensitive
6
6
  } from "./chunk-AL6VBTNA.js";
7
- import "./chunk-SFMIMLXR.js";
8
- import "./chunk-KNR2P2UY.js";
7
+ import "./chunk-WHKXUXHE.js";
8
+ import "./chunk-M75SN4D4.js";
9
9
  import "./chunk-CG5B3LYG.js";
10
+ import "./chunk-BTTQWSDS.js";
11
+ import "./chunk-3QGW53GD.js";
12
+ import "./chunk-HPOR6YXA.js";
10
13
  import "./chunk-PZ5AY32C.js";
11
14
 
12
15
  // src/llm/rerank.ts
@@ -58,4 +61,4 @@ export {
58
61
  RERANK_PROMPT_VERSION,
59
62
  rerankCandidates
60
63
  };
61
- //# sourceMappingURL=rerank-IQAEWLQR.js.map
64
+ //# sourceMappingURL=rerank-XXKWDI5Q.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/llm/rerank.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { redactSensitive } from \"../core/sensitive.js\";\nimport { chatJson, type LlmResult } from \"./client.js\";\nimport type { EnabledLlmConfig } from \"./config.js\";\n\n/**\n * Prompt-time rerank: the model sees the task and up to 15 candidate files\n * (path, one-line summary, a few signatures, never bodies) and picks at most\n * three, or abstains. The caller validates every pick against the candidates,\n * the symbol table and the evidence rules; this module only asks.\n */\nexport const RERANK_PROMPT_VERSION = 1;\nconst LIMITS = { candidates: 15, picks: 3, signatures: 5, reason: 80, maxTokens: 300 } as const;\n\nexport type RerankCandidate = { path: string; summary: string; signatures: string[] };\nexport type RerankPick = { path: string; symbols: string[]; reason: string };\n\nconst schema = z.object({\n files: z\n .array(\n z.object({\n path: z.string(),\n symbols: z.array(z.string()).default([]),\n reason: z.string().default(\"\"),\n }),\n )\n .default([]),\n abstain: z.boolean().default(false),\n});\n\nconst SYSTEM = [\n \"You pick the source files a coding agent must open for a task.\",\n 'Answer with JSON only: {\"files\":[{\"path\":\"...\",\"symbols\":[\"...\"],\"reason\":\"...\"}],\"abstain\":false}.',\n `Choose at most ${LIMITS.picks} files, best first, only from the candidates given;`,\n \"name the functions or classes to look at when you can (from the listed signatures);\",\n \"reason: a few words. If no candidate fits the task, answer with an empty files list and abstain true.\",\n].join(\" \");\n\nexport async function rerankCandidates(\n root: string,\n config: EnabledLlmConfig,\n task: string,\n candidates: RerankCandidate[],\n deadlineMs: number,\n): Promise<LlmResult<{ files: RerankPick[]; abstain: boolean }>> {\n const sent = candidates.slice(0, LIMITS.candidates).map((candidate) => ({\n path: candidate.path,\n summary: redactSensitive(candidate.summary),\n signatures: candidate.signatures.slice(0, LIMITS.signatures).map(redactSensitive),\n }));\n const user = JSON.stringify({ task: redactSensitive(task), candidates: sent });\n const result = await chatJson(config, {\n system: SYSTEM,\n user,\n schema,\n maxTokens: LIMITS.maxTokens,\n deadlineMs,\n purpose: \"prompt\",\n repositoryRoot: root,\n cacheKey: createHash(\"sha256\").update(`rerank:${RERANK_PROMPT_VERSION}:${user}`).digest(\"hex\"),\n });\n if (!result.ok) return result;\n const allowed = new Set(sent.map((candidate) => candidate.path));\n const seen = new Set<string>();\n const files = result.value.files\n .filter((file) => allowed.has(file.path) && !seen.has(file.path) && seen.add(file.path))\n .slice(0, LIMITS.picks)\n .map((file) => ({ ...file, reason: file.reason.slice(0, LIMITS.reason) }));\n return { ...result, value: { files, abstain: result.value.abstain && files.length === 0 } };\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAS;AAWX,IAAM,wBAAwB;AACrC,IAAM,SAAS,EAAE,YAAY,IAAI,OAAO,GAAG,YAAY,GAAG,QAAQ,IAAI,WAAW,IAAI;AAKrF,IAAM,SAAS,EAAE,OAAO;AAAA,EACtB,OAAO,EACJ;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,MACvC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,IAC/B,CAAC;AAAA,EACH,EACC,QAAQ,CAAC,CAAC;AAAA,EACb,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AACpC,CAAC;AAED,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO,KAAK;AAAA,EAC9B;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,eAAsB,iBACpB,MACA,QACA,MACA,YACA,YAC+D;AAC/D,QAAM,OAAO,WAAW,MAAM,GAAG,OAAO,UAAU,EAAE,IAAI,CAAC,eAAe;AAAA,IACtE,MAAM,UAAU;AAAA,IAChB,SAAS,gBAAgB,UAAU,OAAO;AAAA,IAC1C,YAAY,UAAU,WAAW,MAAM,GAAG,OAAO,UAAU,EAAE,IAAI,eAAe;AAAA,EAClF,EAAE;AACF,QAAM,OAAO,KAAK,UAAU,EAAE,MAAM,gBAAgB,IAAI,GAAG,YAAY,KAAK,CAAC;AAC7E,QAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,WAAW,OAAO;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU,WAAW,QAAQ,EAAE,OAAO,UAAU,qBAAqB,IAAI,IAAI,EAAE,EAAE,OAAO,KAAK;AAAA,EAC/F,CAAC;AACD,MAAI,CAAC,OAAO,GAAI,QAAO;AACvB,QAAM,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,UAAU,IAAI,CAAC;AAC/D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,QAAQ,OAAO,MAAM,MACxB,OAAO,CAAC,SAAS,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC,EACtF,MAAM,GAAG,OAAO,KAAK,EACrB,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,QAAQ,KAAK,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,EAAE;AAC3E,SAAO,EAAE,GAAG,QAAQ,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,WAAW,EAAE,EAAE;AAC5F;","names":[]}
1
+ {"version":3,"sources":["../src/llm/rerank.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { redactSensitive } from \"../core/sensitive.js\";\nimport { chatJson, type LlmResult } from \"./client.js\";\nimport type { EnabledLlmConfig } from \"./config.js\";\n\n/**\n * Prompt-time rerank: the model sees the task and up to 15 candidate files\n * (path, one-line summary, a few signatures, never bodies) and picks at most\n * three, or abstains. The caller validates every pick against the candidates,\n * the symbol table and the evidence rules; this module only asks.\n */\nexport const RERANK_PROMPT_VERSION = 1;\nconst LIMITS = { candidates: 15, picks: 3, signatures: 5, reason: 80, maxTokens: 300 } as const;\n\nexport type RerankCandidate = { path: string; summary: string; signatures: string[] };\nexport type RerankPick = { path: string; symbols: string[]; reason: string };\n\nconst schema = z.object({\n files: z\n .array(\n z.object({\n path: z.string(),\n symbols: z.array(z.string()).default([]),\n reason: z.string().default(\"\"),\n }),\n )\n .default([]),\n abstain: z.boolean().default(false),\n});\n\nconst SYSTEM = [\n \"You pick the source files a coding agent must open for a task.\",\n 'Answer with JSON only: {\"files\":[{\"path\":\"...\",\"symbols\":[\"...\"],\"reason\":\"...\"}],\"abstain\":false}.',\n `Choose at most ${LIMITS.picks} files, best first, only from the candidates given;`,\n \"name the functions or classes to look at when you can (from the listed signatures);\",\n \"reason: a few words. If no candidate fits the task, answer with an empty files list and abstain true.\",\n].join(\" \");\n\nexport async function rerankCandidates(\n root: string,\n config: EnabledLlmConfig,\n task: string,\n candidates: RerankCandidate[],\n deadlineMs: number,\n): Promise<LlmResult<{ files: RerankPick[]; abstain: boolean }>> {\n const sent = candidates.slice(0, LIMITS.candidates).map((candidate) => ({\n path: candidate.path,\n summary: redactSensitive(candidate.summary),\n signatures: candidate.signatures.slice(0, LIMITS.signatures).map(redactSensitive),\n }));\n const user = JSON.stringify({ task: redactSensitive(task), candidates: sent });\n const result = await chatJson(config, {\n system: SYSTEM,\n user,\n schema,\n maxTokens: LIMITS.maxTokens,\n deadlineMs,\n purpose: \"prompt\",\n repositoryRoot: root,\n cacheKey: createHash(\"sha256\").update(`rerank:${RERANK_PROMPT_VERSION}:${user}`).digest(\"hex\"),\n });\n if (!result.ok) return result;\n const allowed = new Set(sent.map((candidate) => candidate.path));\n const seen = new Set<string>();\n const files = result.value.files\n .filter((file) => allowed.has(file.path) && !seen.has(file.path) && seen.add(file.path))\n .slice(0, LIMITS.picks)\n .map((file) => ({ ...file, reason: file.reason.slice(0, LIMITS.reason) }));\n return { ...result, value: { files, abstain: result.value.abstain && files.length === 0 } };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAS;AAWX,IAAM,wBAAwB;AACrC,IAAM,SAAS,EAAE,YAAY,IAAI,OAAO,GAAG,YAAY,GAAG,QAAQ,IAAI,WAAW,IAAI;AAKrF,IAAM,SAAS,EAAE,OAAO;AAAA,EACtB,OAAO,EACJ;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,MACvC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,IAC/B,CAAC;AAAA,EACH,EACC,QAAQ,CAAC,CAAC;AAAA,EACb,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AACpC,CAAC;AAED,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA,kBAAkB,OAAO,KAAK;AAAA,EAC9B;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,eAAsB,iBACpB,MACA,QACA,MACA,YACA,YAC+D;AAC/D,QAAM,OAAO,WAAW,MAAM,GAAG,OAAO,UAAU,EAAE,IAAI,CAAC,eAAe;AAAA,IACtE,MAAM,UAAU;AAAA,IAChB,SAAS,gBAAgB,UAAU,OAAO;AAAA,IAC1C,YAAY,UAAU,WAAW,MAAM,GAAG,OAAO,UAAU,EAAE,IAAI,eAAe;AAAA,EAClF,EAAE;AACF,QAAM,OAAO,KAAK,UAAU,EAAE,MAAM,gBAAgB,IAAI,GAAG,YAAY,KAAK,CAAC;AAC7E,QAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,WAAW,OAAO;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU,WAAW,QAAQ,EAAE,OAAO,UAAU,qBAAqB,IAAI,IAAI,EAAE,EAAE,OAAO,KAAK;AAAA,EAC/F,CAAC;AACD,MAAI,CAAC,OAAO,GAAI,QAAO;AACvB,QAAM,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc,UAAU,IAAI,CAAC;AAC/D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,QAAQ,OAAO,MAAM,MACxB,OAAO,CAAC,SAAS,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC,EACtF,MAAM,GAAG,OAAO,KAAK,EACrB,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,QAAQ,KAAK,OAAO,MAAM,GAAG,OAAO,MAAM,EAAE,EAAE;AAC3E,SAAO,EAAE,GAAG,QAAQ,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,WAAW,EAAE,EAAE;AAC5F;","names":[]}
@@ -2,46 +2,55 @@ import {
2
2
  CONTEXT_HOOK_BUDGET_MS,
3
3
  deriveSummary,
4
4
  extractEditedPaths,
5
+ isFollowUpPrompt,
5
6
  lastAssistantMessage,
6
7
  llmMemoryOptions,
8
+ readCaptureTurn,
7
9
  renderContextBlock,
8
10
  runCaptureHook,
11
+ runCheckpointHook,
9
12
  runContextHook,
10
13
  runResetHook,
14
+ runResumeHook,
11
15
  runStageHook,
12
16
  runSyncHook,
13
17
  turnUserPrompts,
14
18
  turnVerification,
15
19
  verificationLines
16
- } from "./chunk-F4BJ3DXW.js";
17
- import "./chunk-GKNYMNFM.js";
20
+ } from "./chunk-KQCP3ZYH.js";
18
21
  import "./chunk-YN7TEIUH.js";
22
+ import "./chunk-7IPSDDO5.js";
19
23
  import "./chunk-TGFTKWOR.js";
24
+ import "./chunk-GQKWUHMA.js";
20
25
  import "./chunk-DFV2SK6C.js";
21
- import "./chunk-SRA4MDVG.js";
22
- import "./chunk-CAEPHLHC.js";
23
- import "./chunk-TLWGZVPC.js";
24
- import "./chunk-ITQO632W.js";
26
+ import "./chunk-UR3DF74I.js";
25
27
  import "./chunk-Y7D7PUBE.js";
28
+ import "./chunk-57642NGU.js";
29
+ import "./chunk-YMXFSHXT.js";
30
+ import "./chunk-EMWGLKPR.js";
26
31
  import "./chunk-AL6VBTNA.js";
27
- import "./chunk-HPOR6YXA.js";
28
- import "./chunk-KNR2P2UY.js";
32
+ import "./chunk-M75SN4D4.js";
29
33
  import "./chunk-CG5B3LYG.js";
34
+ import "./chunk-HPOR6YXA.js";
30
35
  import "./chunk-PZ5AY32C.js";
31
36
  export {
32
37
  CONTEXT_HOOK_BUDGET_MS,
33
38
  deriveSummary,
34
39
  extractEditedPaths,
40
+ isFollowUpPrompt,
35
41
  lastAssistantMessage,
36
42
  llmMemoryOptions,
43
+ readCaptureTurn,
37
44
  renderContextBlock,
38
45
  runCaptureHook,
46
+ runCheckpointHook,
39
47
  runContextHook,
40
48
  runResetHook,
49
+ runResumeHook,
41
50
  runStageHook,
42
51
  runSyncHook,
43
52
  turnUserPrompts,
44
53
  turnVerification,
45
54
  verificationLines
46
55
  };
47
- //# sourceMappingURL=runtime-GCSEIAVD.js.map
56
+ //# sourceMappingURL=runtime-SWFWGTQ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,31 @@
1
+ import {
2
+ SUMMARY_PROMPT_VERSION,
3
+ cardEligible,
4
+ cardProgress,
5
+ cardText,
6
+ cardWords,
7
+ loadLlmSummaries,
8
+ summarizeRepository
9
+ } from "./chunk-ITXE27SZ.js";
10
+ import "./chunk-6YI2D5F5.js";
11
+ import "./chunk-4BSO3HST.js";
12
+ import "./chunk-UR3DF74I.js";
13
+ import "./chunk-Y7D7PUBE.js";
14
+ import "./chunk-AL6VBTNA.js";
15
+ import "./chunk-WHKXUXHE.js";
16
+ import "./chunk-M75SN4D4.js";
17
+ import "./chunk-CG5B3LYG.js";
18
+ import "./chunk-BTTQWSDS.js";
19
+ import "./chunk-3QGW53GD.js";
20
+ import "./chunk-HPOR6YXA.js";
21
+ import "./chunk-PZ5AY32C.js";
22
+ export {
23
+ SUMMARY_PROMPT_VERSION,
24
+ cardEligible,
25
+ cardProgress,
26
+ cardText,
27
+ cardWords,
28
+ loadLlmSummaries,
29
+ summarizeRepository
30
+ };
31
+ //# sourceMappingURL=summaries-QXWFFDUZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,31 +1,38 @@
1
1
  import {
2
+ CARDS_DIR,
3
+ DEFAULT_CARD_MODEL,
2
4
  DEFAULT_ZVEC_MIN_SCORE,
3
5
  DEFAULT_ZVEC_MODEL,
4
6
  buildZvecIndex,
7
+ ensureZvecServer,
5
8
  parseHits,
9
+ refreshZvecCardIndex,
6
10
  refreshZvecIndex,
7
11
  resetZvecCache,
8
12
  zvecCandidates,
9
13
  zvecExcludeGlobs,
10
14
  zvecStatus
11
- } from "./chunk-GXOML4UZ.js";
12
- import "./chunk-TLWGZVPC.js";
13
- import "./chunk-ITQO632W.js";
15
+ } from "./chunk-4BSO3HST.js";
16
+ import "./chunk-UR3DF74I.js";
14
17
  import "./chunk-Y7D7PUBE.js";
15
18
  import "./chunk-AL6VBTNA.js";
16
- import "./chunk-HPOR6YXA.js";
17
- import "./chunk-KNR2P2UY.js";
19
+ import "./chunk-M75SN4D4.js";
18
20
  import "./chunk-CG5B3LYG.js";
21
+ import "./chunk-HPOR6YXA.js";
19
22
  import "./chunk-PZ5AY32C.js";
20
23
  export {
24
+ CARDS_DIR,
25
+ DEFAULT_CARD_MODEL,
21
26
  DEFAULT_ZVEC_MIN_SCORE,
22
27
  DEFAULT_ZVEC_MODEL,
23
28
  buildZvecIndex,
29
+ ensureZvecServer,
24
30
  parseHits,
31
+ refreshZvecCardIndex,
25
32
  refreshZvecIndex,
26
33
  resetZvecCache,
27
34
  zvecCandidates,
28
35
  zvecExcludeGlobs,
29
36
  zvecStatus
30
37
  };
31
- //# sourceMappingURL=zvec-XDZNZ2OL.js.map
38
+ //# sourceMappingURL=zvec-F73IBWO5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orquentra/codebuddy",
3
- "version": "2.9.0",
4
- "description": "Local-first project context and memory for AI coding agents.",
3
+ "version": "2.15.0",
4
+ "description": "CodeBuddy by Orquentra: local-first MCP server and CLI for project context and durable memory in Claude Code, Codex, and other AI coding agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "publishConfig": {
@@ -58,13 +58,23 @@
58
58
  "eval:semantic": "tsx scripts/eval-semantic.mts"
59
59
  },
60
60
  "keywords": [
61
+ "codebuddy",
62
+ "orquentra",
61
63
  "mcp",
64
+ "mcp-server",
65
+ "model-context-protocol",
66
+ "claude-code",
67
+ "codex",
68
+ "opencode",
69
+ "ai-agent",
70
+ "coding-agent",
71
+ "context-engine",
62
72
  "memory",
63
73
  "agent",
64
74
  "multi-agent",
65
- "huggingface",
66
75
  "pgvector",
67
76
  "postgres",
77
+ "huggingface",
68
78
  "langgraph",
69
79
  "claude"
70
80
  ],