@pcircle/memesh 4.1.7 → 4.2.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 (127) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.de.md +43 -8
  4. package/README.es.md +77 -15
  5. package/README.fr.md +44 -9
  6. package/README.ja.md +78 -15
  7. package/README.ko.md +81 -18
  8. package/README.md +7 -5
  9. package/README.pt.md +43 -8
  10. package/README.th.md +41 -6
  11. package/README.vi.md +43 -8
  12. package/README.zh-CN.md +78 -15
  13. package/README.zh-TW.md +107 -44
  14. package/dashboard/dist/index.html +8 -8
  15. package/dist/cli/view-live.js +2 -2
  16. package/dist/cli/view.d.ts.map +1 -1
  17. package/dist/cli/view.js +8 -11
  18. package/dist/cli/view.js.map +1 -1
  19. package/dist/core/auto-tagger.d.ts +7 -2
  20. package/dist/core/auto-tagger.d.ts.map +1 -1
  21. package/dist/core/auto-tagger.js +12 -4
  22. package/dist/core/auto-tagger.js.map +1 -1
  23. package/dist/core/config.d.ts +2 -0
  24. package/dist/core/config.d.ts.map +1 -1
  25. package/dist/core/config.js +19 -11
  26. package/dist/core/config.js.map +1 -1
  27. package/dist/core/consolidator.d.ts.map +1 -1
  28. package/dist/core/consolidator.js +13 -4
  29. package/dist/core/consolidator.js.map +1 -1
  30. package/dist/core/digest-validator.d.ts +18 -0
  31. package/dist/core/digest-validator.d.ts.map +1 -0
  32. package/dist/core/digest-validator.js +79 -0
  33. package/dist/core/digest-validator.js.map +1 -0
  34. package/dist/core/doctor.d.ts.map +1 -1
  35. package/dist/core/doctor.js +28 -11
  36. package/dist/core/doctor.js.map +1 -1
  37. package/dist/core/dreamer.d.ts +8 -1
  38. package/dist/core/dreamer.d.ts.map +1 -1
  39. package/dist/core/dreamer.js +68 -14
  40. package/dist/core/dreamer.js.map +1 -1
  41. package/dist/core/embedder.d.ts.map +1 -1
  42. package/dist/core/embedder.js +2 -2
  43. package/dist/core/embedder.js.map +1 -1
  44. package/dist/core/extractor.d.ts.map +1 -1
  45. package/dist/core/extractor.js +2 -1
  46. package/dist/core/extractor.js.map +1 -1
  47. package/dist/core/failure-analyzer.d.ts +6 -1
  48. package/dist/core/failure-analyzer.d.ts.map +1 -1
  49. package/dist/core/failure-analyzer.js +10 -2
  50. package/dist/core/failure-analyzer.js.map +1 -1
  51. package/dist/core/install-hooks.d.ts.map +1 -1
  52. package/dist/core/install-hooks.js +1 -7
  53. package/dist/core/install-hooks.js.map +1 -1
  54. package/dist/core/install-id.d.ts.map +1 -1
  55. package/dist/core/install-id.js +2 -3
  56. package/dist/core/install-id.js.map +1 -1
  57. package/dist/core/kg-backfill.d.ts +30 -0
  58. package/dist/core/kg-backfill.d.ts.map +1 -0
  59. package/dist/core/kg-backfill.js +197 -0
  60. package/dist/core/kg-backfill.js.map +1 -0
  61. package/dist/core/llm-client.d.ts +13 -0
  62. package/dist/core/llm-client.d.ts.map +1 -1
  63. package/dist/core/llm-client.js +63 -3
  64. package/dist/core/llm-client.js.map +1 -1
  65. package/dist/core/llm-telemetry.d.ts +35 -0
  66. package/dist/core/llm-telemetry.d.ts.map +1 -0
  67. package/dist/core/llm-telemetry.js +96 -0
  68. package/dist/core/llm-telemetry.js.map +1 -0
  69. package/dist/core/llm-validator.d.ts.map +1 -1
  70. package/dist/core/llm-validator.js +3 -3
  71. package/dist/core/llm-validator.js.map +1 -1
  72. package/dist/core/operations.d.ts.map +1 -1
  73. package/dist/core/operations.js +4 -35
  74. package/dist/core/operations.js.map +1 -1
  75. package/dist/core/paths.d.ts +6 -0
  76. package/dist/core/paths.d.ts.map +1 -0
  77. package/dist/core/paths.js +27 -0
  78. package/dist/core/paths.js.map +1 -0
  79. package/dist/core/prompt-safety.d.ts.map +1 -1
  80. package/dist/core/prompt-safety.js.map +1 -1
  81. package/dist/core/scoring.d.ts +5 -0
  82. package/dist/core/scoring.d.ts.map +1 -1
  83. package/dist/core/scoring.js +8 -0
  84. package/dist/core/scoring.js.map +1 -1
  85. package/dist/core/serializer.js +1 -1
  86. package/dist/core/serializer.js.map +1 -1
  87. package/dist/core/skill-usage-log.js +2 -2
  88. package/dist/core/skill-usage-log.js.map +1 -1
  89. package/dist/core/types.d.ts +2 -2
  90. package/dist/core/types.d.ts.map +1 -1
  91. package/dist/core/verifier.d.ts.map +1 -1
  92. package/dist/core/verifier.js +4 -4
  93. package/dist/core/verifier.js.map +1 -1
  94. package/dist/core/version-check.d.ts.map +1 -1
  95. package/dist/core/version-check.js +4 -3
  96. package/dist/core/version-check.js.map +1 -1
  97. package/dist/db.d.ts.map +1 -1
  98. package/dist/db.js +71 -14
  99. package/dist/db.js.map +1 -1
  100. package/dist/knowledge-graph.d.ts +1 -1
  101. package/dist/knowledge-graph.d.ts.map +1 -1
  102. package/dist/knowledge-graph.js +1 -1
  103. package/dist/knowledge-graph.js.map +1 -1
  104. package/dist/skills-manifest.json +16 -16
  105. package/dist/storage/fts-index.js +1 -1
  106. package/dist/storage/fts-index.js.map +1 -1
  107. package/dist/transports/cli/cli.js +118 -6
  108. package/dist/transports/cli/cli.js.map +1 -1
  109. package/dist/transports/http/server.d.ts.map +1 -1
  110. package/dist/transports/http/server.js +192 -24
  111. package/dist/transports/http/server.js.map +1 -1
  112. package/dist/transports/mcp/handlers.d.ts +1 -1
  113. package/dist/transports/mcp/handlers.d.ts.map +1 -1
  114. package/dist/transports/mcp/handlers.js +1 -1
  115. package/dist/transports/mcp/handlers.js.map +1 -1
  116. package/package.json +2 -2
  117. package/scripts/hooks/_shared.js +177 -14
  118. package/scripts/hooks/post-commit.js +50 -8
  119. package/scripts/hooks/pre-bash-orchestration-nudge.js +8 -3
  120. package/scripts/hooks/pre-compact.js +13 -16
  121. package/scripts/hooks/pre-edit-recall.js +28 -13
  122. package/scripts/hooks/session-start.js +194 -184
  123. package/scripts/hooks/session-summary.js +377 -41
  124. package/dist/core/query-expander.d.ts +0 -4
  125. package/dist/core/query-expander.d.ts.map +0 -1
  126. package/dist/core/query-expander.js +0 -53
  127. package/dist/core/query-expander.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"failure-analyzer.js","sourceRoot":"","sources":["../../src/core/failure-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"failure-analyzer.js","sourceRoot":"","sources":["../../src/core/failure-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../src/core/install-hooks.ts"],"names":[],"mappings":"AAsDA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAmHD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAgFhE;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAqCtE;AAOD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAQxD"}
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../src/core/install-hooks.ts"],"names":[],"mappings":"AAsDA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAyGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAgFhE;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAqCtE;AAOD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,IAAI,CAQxD"}
@@ -1,13 +1,7 @@
1
1
  import fs from 'fs';
2
- import os from 'os';
3
2
  import path from 'path';
3
+ import { homeDir, memeshDir } from './paths.js';
4
4
  const MARKER_FILE = 'install-hooks.json';
5
- function homeDir() {
6
- return process.env.HOME ?? os.homedir();
7
- }
8
- function memeshDir() {
9
- return process.env.MEMESH_DIR ?? path.join(homeDir(), '.memesh');
10
- }
11
5
  function settingsPathFor(scope, cwd) {
12
6
  if (scope === 'project') {
13
7
  return path.join(cwd, '.claude', 'settings.json');
@@ -1 +1 @@
1
- {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/core/install-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../src/core/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install-id.d.ts","sourceRoot":"","sources":["../../src/core/install-id.ts"],"names":[],"mappings":"AAyBA,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,CAAC,CAAC;CACnB;AAkBD,wBAAgB,gBAAgB,IAAI,aAAa,CAmChD;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
1
+ {"version":3,"file":"install-id.d.ts","sourceRoot":"","sources":["../../src/core/install-id.ts"],"names":[],"mappings":"AAyBA,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,CAAC,CAAC;CACnB;AAiBD,wBAAgB,gBAAgB,IAAI,aAAa,CAmChD;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -1,11 +1,10 @@
1
1
  import fs from 'fs';
2
- import os from 'os';
3
2
  import path from 'path';
4
3
  import { randomUUID } from 'crypto';
4
+ import { memeshDir } from './paths.js';
5
5
  const SCHEMA_VERSION = 1;
6
6
  function installFilePath() {
7
- const dir = process.env.MEMESH_DIR ?? path.join(os.homedir(), '.memesh');
8
- return path.join(dir, 'install.json');
7
+ return path.join(memeshDir(), 'install.json');
9
8
  }
10
9
  export function getInstallRecord() {
11
10
  const filePath = installFilePath();
@@ -1 +1 @@
1
- {"version":3,"file":"install-id.js","sourceRoot":"","sources":["../../src/core/install-id.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,MAAM,cAAc,GAAG,CAAU,CAAC;AAElC,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACxC,CAAC;AAWD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;YACzD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO;oBACL,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAChG,cAAc,EAAE,cAAc;iBAC/B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,MAAM,MAAM,GAAkB;QAC5B,UAAU,EAAE,UAAU,EAAE;QACxB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,cAAc,EAAE,cAAc;KAC/B,CAAC;IAEF,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAiB,CAAC;QAC9E,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAiB,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;IAGT,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,MAAM,UAAU,YAAY;IAC1B,OAAO,gBAAgB,EAAE,CAAC,UAAU,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"install-id.js","sourceRoot":"","sources":["../../src/core/install-id.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,cAAc,GAAG,CAAU,CAAC;AAElC,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAWD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;YACzD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO;oBACL,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAChG,cAAc,EAAE,cAAc;iBAC/B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,MAAM,MAAM,GAAkB;QAC5B,UAAU,EAAE,UAAU,EAAE;QACxB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,cAAc,EAAE,cAAc;KAC/B,CAAC;IAEF,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAiB,CAAC;QAC9E,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAiB,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;IAGT,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,MAAM,UAAU,YAAY;IAC1B,OAAO,gBAAgB,EAAE,CAAC,UAAU,CAAC;AACvC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function isTopicalTag(tag: string): boolean;
3
+ export interface RelationCandidate {
4
+ fromEntityId: number;
5
+ fromName: string;
6
+ toEntityId: number;
7
+ toName: string;
8
+ relationType: 'related-to' | 'belongs-to-project';
9
+ reason: string;
10
+ strength: number;
11
+ }
12
+ export interface BackfillOptions {
13
+ project?: string;
14
+ maxEdgesPerSource?: number;
15
+ minSharedTags?: number;
16
+ includeArchived?: boolean;
17
+ dryRun?: boolean;
18
+ }
19
+ export interface BackfillResult {
20
+ candidatesProposed: number;
21
+ edgesWritten: number;
22
+ dryRun: boolean;
23
+ byRule: {
24
+ tagCooccurrence: number;
25
+ projectClustering: number;
26
+ };
27
+ }
28
+ export declare function backfillRelations(opts?: BackfillOptions, db?: Database.Database): BackfillResult;
29
+ export declare function proposeBackfillCandidates(opts?: BackfillOptions, db?: Database.Database): RelationCandidate[];
30
+ //# sourceMappingURL=kg-backfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-backfill.d.ts","sourceRoot":"","sources":["../../src/core/kg-backfill.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AA8B3C,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBjD;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAElD,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAE9B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAoBD,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,eAAoB,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,cAAc,CA+BpG;AAED,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,eAAoB,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,iBAAiB,EAAE,CAmKjH"}
@@ -0,0 +1,197 @@
1
+ import { getDatabase } from '../db.js';
2
+ const SYSTEM_TAG_PREFIXES = [
3
+ 'project:', 'week:', 'severity:', 'scope:', 'source:', 'date:',
4
+ 'type:', 'urgency:', 'host:', 'session:', 'release:',
5
+ ];
6
+ const SYSTEM_TAG_LITERALS = new Set([
7
+ 'session_end', 'auto_saved', 'commit', 'auto-tracked',
8
+ 'session-summary', 'session-insight', 'session_keypoint',
9
+ 'workflow_checkpoint', 'auto', 'auto-captured',
10
+ 'completed', 'plan-completion', 'lesson', 'verification',
11
+ 'engineering-judgment', 'reference', 'plan',
12
+ ]);
13
+ const DATE_TAG_RE = /^\d{4}-\d{2}-\d{2}/;
14
+ export function isTopicalTag(tag) {
15
+ if (!tag)
16
+ return false;
17
+ const lower = tag.toLowerCase();
18
+ if (DATE_TAG_RE.test(lower))
19
+ return false;
20
+ if (SYSTEM_TAG_LITERALS.has(lower))
21
+ return false;
22
+ for (const prefix of SYSTEM_TAG_PREFIXES) {
23
+ if (lower.startsWith(prefix)) {
24
+ if (prefix === 'topic:' || prefix === 'tech:')
25
+ return true;
26
+ return false;
27
+ }
28
+ }
29
+ if (lower.length < 2)
30
+ return false;
31
+ return true;
32
+ }
33
+ export function backfillRelations(opts = {}, db) {
34
+ const conn = db ?? getDatabase();
35
+ const candidates = proposeBackfillCandidates(opts, conn);
36
+ const result = {
37
+ candidatesProposed: candidates.length,
38
+ edgesWritten: 0,
39
+ dryRun: !!opts.dryRun,
40
+ byRule: { tagCooccurrence: 0, projectClustering: 0 },
41
+ };
42
+ if (opts.dryRun)
43
+ return result;
44
+ const insert = conn.prepare('INSERT OR IGNORE INTO relations (from_entity_id, to_entity_id, relation_type) VALUES (?, ?, ?)');
45
+ const tx = conn.transaction((rows) => {
46
+ for (const c of rows) {
47
+ const r = insert.run(c.fromEntityId, c.toEntityId, c.relationType);
48
+ if (r.changes > 0) {
49
+ result.edgesWritten++;
50
+ if (c.relationType === 'related-to')
51
+ result.byRule.tagCooccurrence++;
52
+ else if (c.relationType === 'belongs-to-project')
53
+ result.byRule.projectClustering++;
54
+ }
55
+ }
56
+ });
57
+ tx(candidates);
58
+ return result;
59
+ }
60
+ export function proposeBackfillCandidates(opts = {}, db) {
61
+ const conn = db ?? getDatabase();
62
+ const maxPerSource = opts.maxEdgesPerSource ?? 3;
63
+ const minShared = opts.minSharedTags ?? 2;
64
+ const statusFilter = opts.includeArchived ? "" : "AND e.status = 'active'";
65
+ const projectClause = opts.project ? "AND EXISTS (SELECT 1 FROM tags t2 WHERE t2.entity_id = e.id AND t2.tag = ?)" : "";
66
+ const projectArgs = opts.project ? [`project:${opts.project}`] : [];
67
+ const orphans = conn.prepare(`
68
+ SELECT e.id, e.name, e.type, e.metadata
69
+ FROM entities e
70
+ WHERE 1=1 ${statusFilter}
71
+ ${projectClause}
72
+ AND NOT EXISTS (SELECT 1 FROM relations r WHERE r.from_entity_id = e.id OR r.to_entity_id = e.id)
73
+ `).all(...projectArgs);
74
+ if (orphans.length === 0)
75
+ return [];
76
+ const allTagRows = conn.prepare(`
77
+ SELECT t.entity_id, t.tag
78
+ FROM tags t
79
+ JOIN entities e ON e.id = t.entity_id
80
+ WHERE 1=1 ${statusFilter}
81
+ `).all();
82
+ const tagsByEntity = new Map();
83
+ const entitiesByTag = new Map();
84
+ for (const row of allTagRows) {
85
+ if (!isTopicalTag(row.tag))
86
+ continue;
87
+ let set = tagsByEntity.get(row.entity_id);
88
+ if (!set) {
89
+ set = new Set();
90
+ tagsByEntity.set(row.entity_id, set);
91
+ }
92
+ set.add(row.tag);
93
+ let list = entitiesByTag.get(row.tag);
94
+ if (!list) {
95
+ list = [];
96
+ entitiesByTag.set(row.tag, list);
97
+ }
98
+ list.push(row.entity_id);
99
+ }
100
+ const candidates = [];
101
+ const orphanById = new Map();
102
+ for (const o of orphans)
103
+ orphanById.set(o.id, o);
104
+ const allEntities = conn.prepare(`SELECT e.id, e.name, e.type FROM entities e WHERE 1=1 ${statusFilter}`).all();
105
+ const entityById = new Map();
106
+ for (const e of allEntities)
107
+ entityById.set(e.id, e);
108
+ for (const orphan of orphans) {
109
+ const orphanTags = tagsByEntity.get(orphan.id);
110
+ if (!orphanTags || orphanTags.size < minShared)
111
+ continue;
112
+ const overlapByPeer = new Map();
113
+ for (const tag of orphanTags) {
114
+ const peerIds = entitiesByTag.get(tag) ?? [];
115
+ for (const peerId of peerIds) {
116
+ if (peerId === orphan.id)
117
+ continue;
118
+ overlapByPeer.set(peerId, (overlapByPeer.get(peerId) ?? 0) + 1);
119
+ }
120
+ }
121
+ const ranked = [...overlapByPeer.entries()]
122
+ .filter(([_, n]) => n >= minShared)
123
+ .sort((a, b) => b[1] - a[1])
124
+ .slice(0, maxPerSource);
125
+ for (const [peerId, sharedCount] of ranked) {
126
+ const peer = entityById.get(peerId);
127
+ if (!peer)
128
+ continue;
129
+ candidates.push({
130
+ fromEntityId: orphan.id,
131
+ fromName: orphan.name,
132
+ toEntityId: peer.id,
133
+ toName: peer.name,
134
+ relationType: 'related-to',
135
+ reason: `shares ${sharedCount} topical tag${sharedCount > 1 ? 's' : ''}`,
136
+ strength: sharedCount,
137
+ });
138
+ }
139
+ }
140
+ const consumerTypes = new Set(['lesson_learned', 'lesson', 'decision', 'bug_fix', 'pattern', 'mistake', 'best_practice']);
141
+ const anchorTypes = new Set(['release', 'feature', 'architecture', 'plan']);
142
+ const anchorsByProject = new Map();
143
+ const projectAnchorRows = conn.prepare(`
144
+ SELECT e.id, e.name, e.type, e.created_at, t.tag AS project_tag
145
+ FROM entities e
146
+ JOIN tags t ON t.entity_id = e.id AND t.tag LIKE 'project:%'
147
+ WHERE 1=1 ${statusFilter}
148
+ AND e.type IN (${[...anchorTypes].map(() => '?').join(',')})
149
+ `).all(...anchorTypes);
150
+ for (const r of projectAnchorRows) {
151
+ const project = r.project_tag.slice('project:'.length);
152
+ let list = anchorsByProject.get(project);
153
+ if (!list) {
154
+ list = [];
155
+ anchorsByProject.set(project, list);
156
+ }
157
+ list.push({ id: r.id, name: r.name, type: r.type, created_at: r.created_at });
158
+ }
159
+ for (const list of anchorsByProject.values()) {
160
+ list.sort((a, b) => b.created_at.localeCompare(a.created_at));
161
+ }
162
+ const orphanProjectRows = conn.prepare(`
163
+ SELECT t.entity_id, t.tag
164
+ FROM tags t
165
+ JOIN entities e ON e.id = t.entity_id
166
+ WHERE 1=1 ${statusFilter}
167
+ AND t.tag LIKE 'project:%'
168
+ AND NOT EXISTS (SELECT 1 FROM relations r WHERE r.from_entity_id = e.id OR r.to_entity_id = e.id)
169
+ `).all();
170
+ const orphanProject = new Map();
171
+ for (const r of orphanProjectRows)
172
+ orphanProject.set(r.entity_id, r.tag.slice('project:'.length));
173
+ for (const orphan of orphans) {
174
+ if (!consumerTypes.has(orphan.type))
175
+ continue;
176
+ const project = orphanProject.get(orphan.id);
177
+ if (!project)
178
+ continue;
179
+ const anchors = anchorsByProject.get(project);
180
+ if (!anchors || anchors.length === 0)
181
+ continue;
182
+ const anchor = anchors[0];
183
+ if (anchor.id === orphan.id)
184
+ continue;
185
+ candidates.push({
186
+ fromEntityId: orphan.id,
187
+ fromName: orphan.name,
188
+ toEntityId: anchor.id,
189
+ toName: anchor.name,
190
+ relationType: 'belongs-to-project',
191
+ reason: `same-project anchor (${anchor.type})`,
192
+ strength: 1,
193
+ });
194
+ }
195
+ return candidates;
196
+ }
197
+ //# sourceMappingURL=kg-backfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-backfill.js","sourceRoot":"","sources":["../../src/core/kg-backfill.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,19 @@
1
1
  import type { LLMConfig } from './config.js';
2
+ export type LLMErrorClass = 'auth' | 'rate_limit' | 'upstream' | 'bad_request' | 'network' | 'unknown';
3
+ export interface LLMAttempt {
4
+ provider: LLMConfig['provider'];
5
+ model?: string;
6
+ status: 'ok' | 'fail';
7
+ latencyMs: number;
8
+ errorClass?: LLMErrorClass;
9
+ errorMessage?: string;
10
+ index: number;
11
+ }
2
12
  export interface CallLLMOptions {
3
13
  maxTokens?: number;
14
+ fallbacks?: LLMConfig[];
15
+ onAttempt?: (attempts: LLMAttempt[]) => void;
4
16
  }
5
17
  export declare function callLLM(prompt: string, config: LLMConfig, opts?: CallLLMOptions): Promise<string>;
18
+ export declare function classifyError(e: Error): LLMErrorClass;
6
19
  //# sourceMappingURL=llm-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/core/llm-client.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,cAAc;IAE7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAiEjB"}
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/core/llm-client.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,YAAY,GACZ,UAAU,GACV,aAAa,GACb,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IAEtB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAE7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;IAQxB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;CAC9C;AAoBD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAqCjB;AA+ED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAgBrD"}
@@ -1,9 +1,48 @@
1
1
  export async function callLLM(prompt, config, opts = {}) {
2
- const maxTokens = opts.maxTokens ?? 200;
2
+ const chain = [config, ...(opts.fallbacks ?? [])];
3
+ const attempts = [];
4
+ const reportAttempts = () => {
5
+ if (!opts.onAttempt)
6
+ return;
7
+ try {
8
+ opts.onAttempt(attempts);
9
+ }
10
+ catch { }
11
+ };
12
+ let lastErr = null;
13
+ for (let i = 0; i < chain.length; i++) {
14
+ const cfg = chain[i];
15
+ const t0 = Date.now();
16
+ try {
17
+ const text = await callSingle(prompt, cfg, opts.maxTokens ?? 200);
18
+ attempts.push({
19
+ provider: cfg.provider, model: cfg.model,
20
+ status: 'ok', latencyMs: Date.now() - t0, index: i,
21
+ });
22
+ reportAttempts();
23
+ return text;
24
+ }
25
+ catch (err) {
26
+ const e = err instanceof Error ? err : new Error(String(err));
27
+ const klass = classifyError(e);
28
+ attempts.push({
29
+ provider: cfg.provider, model: cfg.model,
30
+ status: 'fail', latencyMs: Date.now() - t0,
31
+ errorClass: klass, errorMessage: redactSecrets(e.message), index: i,
32
+ });
33
+ lastErr = e;
34
+ if (klass === 'bad_request')
35
+ break;
36
+ }
37
+ }
38
+ reportAttempts();
39
+ throw lastErr ?? new Error('callLLM: no providers configured');
40
+ }
41
+ async function callSingle(prompt, config, maxTokens) {
3
42
  if (config.provider === 'anthropic') {
4
43
  const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY;
5
44
  if (!apiKey)
6
- throw new Error('No API key');
45
+ throw new Error('Anthropic: no API key configured');
7
46
  const res = await fetch('https://api.anthropic.com/v1/messages', {
8
47
  method: 'POST',
9
48
  headers: {
@@ -25,7 +64,7 @@ export async function callLLM(prompt, config, opts = {}) {
25
64
  if (config.provider === 'openai') {
26
65
  const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
27
66
  if (!apiKey)
28
- throw new Error('No API key');
67
+ throw new Error('OpenAI: no API key configured');
29
68
  const res = await fetch('https://api.openai.com/v1/chat/completions', {
30
69
  method: 'POST',
31
70
  headers: {
@@ -61,4 +100,25 @@ export async function callLLM(prompt, config, opts = {}) {
61
100
  }
62
101
  return '';
63
102
  }
103
+ export function classifyError(e) {
104
+ const msg = e.message;
105
+ if (/\b(401|403|invalid_api_key|authentication|x-api-key|unauthorized)\b/i.test(msg))
106
+ return 'auth';
107
+ if (/no API key/i.test(msg))
108
+ return 'auth';
109
+ if (/\b(429|rate.?limit|quota)\b/i.test(msg))
110
+ return 'rate_limit';
111
+ if (/\b(50[023]|service unavailable|bad gateway)\b/i.test(msg))
112
+ return 'upstream';
113
+ if (/\b400\b/.test(msg))
114
+ return 'bad_request';
115
+ if (/(ENOTFOUND|ECONNREFUSED|ECONNRESET|ETIMEDOUT|fetch failed|aborted)/i.test(msg))
116
+ return 'network';
117
+ return 'unknown';
118
+ }
119
+ function redactSecrets(msg) {
120
+ return msg
121
+ .replace(/sk-[A-Za-z0-9_-]{8,}/g, 'sk-<REDACTED>')
122
+ .replace(/Bearer\s+[A-Za-z0-9_.-]{8,}/gi, 'Bearer <REDACTED>');
123
+ }
64
124
  //# sourceMappingURL=llm-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/core/llm-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/core/llm-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { LLMAttempt } from './llm-client.js';
3
+ export interface RecordTelemetryOpts {
4
+ flow: string;
5
+ project?: string;
6
+ db?: Database.Database;
7
+ }
8
+ export declare function recordTelemetry(attempts: LLMAttempt[], opts: RecordTelemetryOpts): void;
9
+ export interface TelemetrySummary {
10
+ flow: string;
11
+ total_calls: number;
12
+ total_attempts: number;
13
+ successes: number;
14
+ failures: number;
15
+ fallback_used: number;
16
+ median_latency_ms: number | null;
17
+ by_provider: Record<string, {
18
+ ok: number;
19
+ fail: number;
20
+ }>;
21
+ by_error_class: Record<string, number>;
22
+ window_days: number;
23
+ }
24
+ export declare function summariseTelemetry(windowDays?: number, db?: Database.Database): TelemetrySummary[];
25
+ export interface PruneOptions {
26
+ olderThanDays?: number;
27
+ db?: Database.Database;
28
+ }
29
+ export interface PruneResult {
30
+ deletedRows: number;
31
+ cutoffIso: string;
32
+ totalRowsAfter: number;
33
+ }
34
+ export declare function pruneTelemetry(opts?: PruneOptions): PruneResult;
35
+ //# sourceMappingURL=llm-telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-telemetry.d.ts","sourceRoot":"","sources":["../../src/core/llm-telemetry.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,mBAAmB;IAElC,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;CACxB;AAcD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAyCvF;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,kBAAkB,CAAC,UAAU,SAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,gBAAgB,EAAE,CAkE9F;AAED,MAAM,WAAW,YAAY;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,WAAW,CAkBnE"}
@@ -0,0 +1,96 @@
1
+ import { getDatabase } from '../db.js';
2
+ export function recordTelemetry(attempts, opts) {
3
+ if (!attempts || attempts.length === 0)
4
+ return;
5
+ let db;
6
+ try {
7
+ db = opts.db ?? getDatabase();
8
+ }
9
+ catch {
10
+ return;
11
+ }
12
+ const stmt = db.prepare(`
13
+ INSERT INTO llm_telemetry (
14
+ flow, provider, model, project, attempt_index, status,
15
+ latency_ms, error_class, error_message, fallback_used
16
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
17
+ `);
18
+ const tx = db.transaction((rows) => {
19
+ for (const a of rows) {
20
+ try {
21
+ stmt.run(opts.flow, a.provider, a.model ?? null, opts.project ?? null, a.index, a.status, a.latencyMs, a.errorClass ?? null, a.errorMessage ?? null, a.index > 0 ? 1 : 0);
22
+ }
23
+ catch {
24
+ }
25
+ }
26
+ });
27
+ try {
28
+ tx(attempts);
29
+ }
30
+ catch { }
31
+ }
32
+ export function summariseTelemetry(windowDays = 30, db) {
33
+ const conn = db ?? getDatabase();
34
+ const since = new Date(Date.now() - windowDays * 86400000).toISOString();
35
+ const rows = conn.prepare(`
36
+ SELECT flow, provider, status, latency_ms, error_class, attempt_index, fallback_used
37
+ FROM llm_telemetry
38
+ WHERE ts >= ?
39
+ ORDER BY ts ASC
40
+ `).all(since);
41
+ const byFlow = new Map();
42
+ for (const r of rows) {
43
+ let bucket = byFlow.get(r.flow);
44
+ if (!bucket) {
45
+ bucket = { attempts: [], primaryAttempts: 0 };
46
+ byFlow.set(r.flow, bucket);
47
+ }
48
+ bucket.attempts.push(r);
49
+ if (r.attempt_index === 0)
50
+ bucket.primaryAttempts++;
51
+ }
52
+ const out = [];
53
+ for (const [flow, bucket] of byFlow) {
54
+ const successes = bucket.attempts.filter(a => a.status === 'ok').length;
55
+ const failures = bucket.attempts.filter(a => a.status === 'fail').length;
56
+ const fallbackUsed = bucket.attempts.filter(a => a.fallback_used === 1).length;
57
+ const okLatencies = bucket.attempts.filter(a => a.status === 'ok' && a.latency_ms != null).map(a => a.latency_ms).sort((a, b) => a - b);
58
+ const median = okLatencies.length === 0 ? null : okLatencies[Math.floor(okLatencies.length / 2)];
59
+ const byProvider = {};
60
+ for (const a of bucket.attempts) {
61
+ byProvider[a.provider] ??= { ok: 0, fail: 0 };
62
+ byProvider[a.provider][a.status === 'ok' ? 'ok' : 'fail']++;
63
+ }
64
+ const byErrorClass = {};
65
+ for (const a of bucket.attempts) {
66
+ if (a.error_class)
67
+ byErrorClass[a.error_class] = (byErrorClass[a.error_class] ?? 0) + 1;
68
+ }
69
+ out.push({
70
+ flow,
71
+ total_calls: bucket.primaryAttempts,
72
+ total_attempts: bucket.attempts.length,
73
+ successes,
74
+ failures,
75
+ fallback_used: fallbackUsed,
76
+ median_latency_ms: median,
77
+ by_provider: byProvider,
78
+ by_error_class: byErrorClass,
79
+ window_days: windowDays,
80
+ });
81
+ }
82
+ return out.sort((a, b) => b.total_attempts - a.total_attempts);
83
+ }
84
+ export function pruneTelemetry(opts = {}) {
85
+ const olderThanDays = opts.olderThanDays ?? 180;
86
+ const db = opts.db ?? getDatabase();
87
+ const cutoffIso = new Date(Date.now() - olderThanDays * 86400000).toISOString();
88
+ const result = db.prepare('DELETE FROM llm_telemetry WHERE ts < ?').run(cutoffIso);
89
+ const totalRowsAfter = db.prepare('SELECT COUNT(*) AS c FROM llm_telemetry').get().c;
90
+ return {
91
+ deletedRows: result.changes,
92
+ cutoffIso,
93
+ totalRowsAfter,
94
+ };
95
+ }
96
+ //# sourceMappingURL=llm-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-telemetry.js","sourceRoot":"","sources":["../../src/core/llm-telemetry.ts"],"names":[],"mappings":"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"}