@goondocks/myco 0.16.1 → 0.17.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 (167) hide show
  1. package/CONTRIBUTING.md +3 -3
  2. package/README.md +4 -3
  3. package/dist/{agent-run-LOZGH6P5.js → agent-run-ZDHXORE2.js} +7 -7
  4. package/dist/{agent-tasks-SNQ55FUN.js → agent-tasks-IPUWMMDZ.js} +7 -7
  5. package/dist/{chunk-P6C6ADBU.js → chunk-2IJ6C63F.js} +2 -2
  6. package/dist/{chunk-V2ZBYKDU.js → chunk-2WRXLYG6.js} +3 -3
  7. package/dist/{chunk-TIAYBVSI.js → chunk-4JPUC6RL.js} +170 -56
  8. package/dist/chunk-4JPUC6RL.js.map +1 -0
  9. package/dist/{chunk-34NHDRWI.js → chunk-6SDC6V3N.js} +2 -2
  10. package/dist/{chunk-34NHDRWI.js.map → chunk-6SDC6V3N.js.map} +1 -1
  11. package/dist/{chunk-6JZEAOLG.js → chunk-CPL76CYD.js} +3 -3
  12. package/dist/{chunk-VWXDSDJU.js → chunk-DKSQMH5X.js} +2 -2
  13. package/dist/{chunk-GSKXOCFG.js → chunk-EBIYONNZ.js} +21 -1
  14. package/dist/chunk-EBIYONNZ.js.map +1 -0
  15. package/dist/{chunk-XAXQ72L3.js → chunk-FEX6ALLH.js} +2 -2
  16. package/dist/{chunk-UILSK6DK.js → chunk-GBYLHPML.js} +2 -2
  17. package/dist/{chunk-DZWSHCAC.js → chunk-KGL5QSDN.js} +2 -2
  18. package/dist/{chunk-4JVHWBZF.js → chunk-KKEMVH6D.js} +2 -2
  19. package/dist/{chunk-35FAQCKJ.js → chunk-MSM775XQ.js} +6 -5
  20. package/dist/{chunk-35FAQCKJ.js.map → chunk-MSM775XQ.js.map} +1 -1
  21. package/dist/{chunk-CJ2KTRWI.js → chunk-OGNEW5CN.js} +2 -2
  22. package/dist/{chunk-VTSNXAW7.js → chunk-PFF4KB4O.js} +2 -2
  23. package/dist/{chunk-HA7HO2X2.js → chunk-QBB6LX57.js} +3 -3
  24. package/dist/{chunk-C3GNF7RJ.js → chunk-QQ7CXA7Q.js} +5 -5
  25. package/dist/{chunk-I3S6L7QC.js → chunk-U3SSOSIR.js} +2 -2
  26. package/dist/{chunk-G42PTGMC.js → chunk-U63GDHYJ.js} +3 -3
  27. package/dist/{chunk-IRSNOBGD.js → chunk-UDBCAFXS.js} +2 -2
  28. package/dist/{chunk-SGYYOTNM.js → chunk-VGVRBSLC.js} +2 -2
  29. package/dist/{chunk-W7ZOOZMK.js → chunk-VQQ57UPG.js} +3 -3
  30. package/dist/{chunk-TPTF3R77.js → chunk-XVWJ273L.js} +4 -4
  31. package/dist/{chunk-RPILIIYT.js → chunk-Y7QCKCEJ.js} +2 -2
  32. package/dist/{chunk-D63XTGBV.js → chunk-YTOD6L6N.js} +6 -6
  33. package/dist/{chunk-D2NTFSVO.js → chunk-ZUSTCXHT.js} +3 -3
  34. package/dist/{cli-W66XNY2H.js → cli-BRDOPJW3.js} +40 -40
  35. package/dist/{client-IZM3GJMT.js → client-AQZMD3LB.js} +4 -4
  36. package/dist/{config-VHHCGE4F.js → config-K3CJEFFO.js} +3 -3
  37. package/dist/{detect-6FNYONJF.js → detect-NJ2OREDP.js} +2 -2
  38. package/dist/{detect-providers-R7QOB3H6.js → detect-providers-OE6HWW3M.js} +4 -4
  39. package/dist/{doctor-WLV7QNRP.js → doctor-YOUCIJJY.js} +14 -13
  40. package/dist/doctor-YOUCIJJY.js.map +1 -0
  41. package/dist/{executor-PUKL76TU.js → executor-UYNV4EOQ.js} +50 -24
  42. package/dist/executor-UYNV4EOQ.js.map +1 -0
  43. package/dist/{init-5TB6A2RV.js → init-MTMEFG4E.js} +17 -17
  44. package/dist/{init-wizard-2Y52AX2A.js → init-wizard-ZS3CV6CM.js} +7 -7
  45. package/dist/{installer-AARSFXI6.js → installer-CTWQB4RS.js} +2 -2
  46. package/dist/{llm-LS7U7BHC.js → llm-PGETQHZ2.js} +7 -7
  47. package/dist/{loader-QDWQTBX4.js → loader-AVWL7PNO.js} +3 -3
  48. package/dist/{loader-YQDG5GI5.js → loader-J56KP27U.js} +3 -3
  49. package/dist/{main-3ZXFA56L.js → main-ZIMYW2AB.js} +105 -60
  50. package/dist/main-ZIMYW2AB.js.map +1 -0
  51. package/dist/{open-ZOZLFBEA.js → open-77QXL7VY.js} +7 -7
  52. package/dist/{openai-embeddings-FUW6CSN2.js → openai-embeddings-LZKY6RV5.js} +4 -4
  53. package/dist/{openrouter-YSIUSUQL.js → openrouter-UTOZG6Z5.js} +4 -4
  54. package/dist/{post-compact-QSID23PX.js → post-compact-CA7O7QPL.js} +7 -7
  55. package/dist/{post-tool-use-4MTNNDTO.js → post-tool-use-JNXJIGNK.js} +6 -6
  56. package/dist/{post-tool-use-failure-WKSMUGJI.js → post-tool-use-failure-V52CZWVZ.js} +7 -7
  57. package/dist/{pre-compact-HFGKNBYV.js → pre-compact-J2GSDQCJ.js} +7 -7
  58. package/dist/{provider-check-VEYONGNU.js → provider-check-CESRPIY5.js} +4 -4
  59. package/dist/{registry-5R3DLJQH.js → registry-SPKP2WLI.js} +4 -4
  60. package/dist/{remove-S5G6VGVT.js → remove-ODPLWK7O.js} +9 -9
  61. package/dist/{resolution-events-CHOKR35X.js → resolution-events-CLDXZF67.js} +4 -4
  62. package/dist/{restart-A7HJTFFM.js → restart-6KKZODOI.js} +8 -8
  63. package/dist/{search-HKBGO3QV.js → search-U6N2DSOI.js} +8 -8
  64. package/dist/{server-UAATWKNX.js → server-SP4G7MY7.js} +5 -5
  65. package/dist/{server-UAATWKNX.js.map → server-SP4G7MY7.js.map} +1 -1
  66. package/dist/{session-D2WPQTSR.js → session-6R3RNVKD.js} +9 -9
  67. package/dist/{session-end-S4RYJG3Y.js → session-end-TCFCYDBL.js} +6 -6
  68. package/dist/{session-start-4RJ32KS5.js → session-start-XXN2TVNI.js} +11 -11
  69. package/dist/{setup-llm-EZRNEIW2.js → setup-llm-GISFI73Z.js} +8 -8
  70. package/dist/src/cli.js +1 -1
  71. package/dist/src/daemon/main.js +1 -1
  72. package/dist/src/hooks/post-tool-use.js +1 -1
  73. package/dist/src/hooks/session-end.js +1 -1
  74. package/dist/src/hooks/session-start.js +1 -1
  75. package/dist/src/hooks/stop.js +1 -1
  76. package/dist/src/hooks/user-prompt-submit.js +1 -1
  77. package/dist/src/mcp/server.js +1 -1
  78. package/dist/src/symbionts/manifests/claude-code.yaml +4 -0
  79. package/dist/src/symbionts/manifests/opencode.yaml +26 -0
  80. package/dist/src/symbionts/templates/opencode/mcp.json +6 -0
  81. package/dist/src/symbionts/templates/opencode/package.json +5 -0
  82. package/dist/src/symbionts/templates/opencode/plugin.ts +690 -0
  83. package/dist/src/symbionts/templates/opencode/settings.json +8 -0
  84. package/dist/{stats-PW7OGIBR.js → stats-MYQD4OVD.js} +9 -9
  85. package/dist/{stop-FVMLTWXU.js → stop-K6TDJORY.js} +6 -6
  86. package/dist/{stop-failure-MD52CGFX.js → stop-failure-U635O5A3.js} +7 -7
  87. package/dist/{subagent-start-ZJZA7EAJ.js → subagent-start-LLGQBC5Q.js} +7 -7
  88. package/dist/{subagent-stop-56H22JSE.js → subagent-stop-BO3GZWXD.js} +7 -7
  89. package/dist/{task-completed-TQ4WW2HW.js → task-completed-3ZJHSI2E.js} +7 -7
  90. package/dist/{team-RXYFXGUT.js → team-OJLQCVE3.js} +5 -5
  91. package/dist/ui/assets/{index-RYHXSJv1.js → index-2UyTdjlV.js} +12 -12
  92. package/dist/ui/assets/index-Cts1wLEW.css +1 -0
  93. package/dist/ui/index.html +2 -2
  94. package/dist/{update-HIJUK5ZK.js → update-HR7WMESA.js} +9 -9
  95. package/dist/{user-prompt-submit-SLQNTQFL.js → user-prompt-submit-NM73R4I3.js} +6 -6
  96. package/dist/{verify-ITBMLK67.js → verify-PSERIZPF.js} +8 -8
  97. package/dist/{version-4YUDRPU4.js → version-YCODQZSX.js} +2 -2
  98. package/package.json +1 -1
  99. package/skills/rules/SKILL.md +1 -1
  100. package/dist/chunk-GSKXOCFG.js.map +0 -1
  101. package/dist/chunk-TIAYBVSI.js.map +0 -1
  102. package/dist/doctor-WLV7QNRP.js.map +0 -1
  103. package/dist/executor-PUKL76TU.js.map +0 -1
  104. package/dist/main-3ZXFA56L.js.map +0 -1
  105. package/dist/ui/assets/index-Bjv_ck3c.css +0 -1
  106. /package/dist/{agent-run-LOZGH6P5.js.map → agent-run-ZDHXORE2.js.map} +0 -0
  107. /package/dist/{agent-tasks-SNQ55FUN.js.map → agent-tasks-IPUWMMDZ.js.map} +0 -0
  108. /package/dist/{chunk-P6C6ADBU.js.map → chunk-2IJ6C63F.js.map} +0 -0
  109. /package/dist/{chunk-V2ZBYKDU.js.map → chunk-2WRXLYG6.js.map} +0 -0
  110. /package/dist/{chunk-6JZEAOLG.js.map → chunk-CPL76CYD.js.map} +0 -0
  111. /package/dist/{chunk-VWXDSDJU.js.map → chunk-DKSQMH5X.js.map} +0 -0
  112. /package/dist/{chunk-XAXQ72L3.js.map → chunk-FEX6ALLH.js.map} +0 -0
  113. /package/dist/{chunk-UILSK6DK.js.map → chunk-GBYLHPML.js.map} +0 -0
  114. /package/dist/{chunk-DZWSHCAC.js.map → chunk-KGL5QSDN.js.map} +0 -0
  115. /package/dist/{chunk-4JVHWBZF.js.map → chunk-KKEMVH6D.js.map} +0 -0
  116. /package/dist/{chunk-CJ2KTRWI.js.map → chunk-OGNEW5CN.js.map} +0 -0
  117. /package/dist/{chunk-VTSNXAW7.js.map → chunk-PFF4KB4O.js.map} +0 -0
  118. /package/dist/{chunk-HA7HO2X2.js.map → chunk-QBB6LX57.js.map} +0 -0
  119. /package/dist/{chunk-C3GNF7RJ.js.map → chunk-QQ7CXA7Q.js.map} +0 -0
  120. /package/dist/{chunk-I3S6L7QC.js.map → chunk-U3SSOSIR.js.map} +0 -0
  121. /package/dist/{chunk-G42PTGMC.js.map → chunk-U63GDHYJ.js.map} +0 -0
  122. /package/dist/{chunk-IRSNOBGD.js.map → chunk-UDBCAFXS.js.map} +0 -0
  123. /package/dist/{chunk-SGYYOTNM.js.map → chunk-VGVRBSLC.js.map} +0 -0
  124. /package/dist/{chunk-W7ZOOZMK.js.map → chunk-VQQ57UPG.js.map} +0 -0
  125. /package/dist/{chunk-TPTF3R77.js.map → chunk-XVWJ273L.js.map} +0 -0
  126. /package/dist/{chunk-RPILIIYT.js.map → chunk-Y7QCKCEJ.js.map} +0 -0
  127. /package/dist/{chunk-D63XTGBV.js.map → chunk-YTOD6L6N.js.map} +0 -0
  128. /package/dist/{chunk-D2NTFSVO.js.map → chunk-ZUSTCXHT.js.map} +0 -0
  129. /package/dist/{cli-W66XNY2H.js.map → cli-BRDOPJW3.js.map} +0 -0
  130. /package/dist/{client-IZM3GJMT.js.map → client-AQZMD3LB.js.map} +0 -0
  131. /package/dist/{config-VHHCGE4F.js.map → config-K3CJEFFO.js.map} +0 -0
  132. /package/dist/{detect-6FNYONJF.js.map → detect-NJ2OREDP.js.map} +0 -0
  133. /package/dist/{detect-providers-R7QOB3H6.js.map → detect-providers-OE6HWW3M.js.map} +0 -0
  134. /package/dist/{init-5TB6A2RV.js.map → init-MTMEFG4E.js.map} +0 -0
  135. /package/dist/{init-wizard-2Y52AX2A.js.map → init-wizard-ZS3CV6CM.js.map} +0 -0
  136. /package/dist/{installer-AARSFXI6.js.map → installer-CTWQB4RS.js.map} +0 -0
  137. /package/dist/{llm-LS7U7BHC.js.map → llm-PGETQHZ2.js.map} +0 -0
  138. /package/dist/{loader-QDWQTBX4.js.map → loader-AVWL7PNO.js.map} +0 -0
  139. /package/dist/{loader-YQDG5GI5.js.map → loader-J56KP27U.js.map} +0 -0
  140. /package/dist/{open-ZOZLFBEA.js.map → open-77QXL7VY.js.map} +0 -0
  141. /package/dist/{openai-embeddings-FUW6CSN2.js.map → openai-embeddings-LZKY6RV5.js.map} +0 -0
  142. /package/dist/{openrouter-YSIUSUQL.js.map → openrouter-UTOZG6Z5.js.map} +0 -0
  143. /package/dist/{post-compact-QSID23PX.js.map → post-compact-CA7O7QPL.js.map} +0 -0
  144. /package/dist/{post-tool-use-4MTNNDTO.js.map → post-tool-use-JNXJIGNK.js.map} +0 -0
  145. /package/dist/{post-tool-use-failure-WKSMUGJI.js.map → post-tool-use-failure-V52CZWVZ.js.map} +0 -0
  146. /package/dist/{pre-compact-HFGKNBYV.js.map → pre-compact-J2GSDQCJ.js.map} +0 -0
  147. /package/dist/{provider-check-VEYONGNU.js.map → provider-check-CESRPIY5.js.map} +0 -0
  148. /package/dist/{registry-5R3DLJQH.js.map → registry-SPKP2WLI.js.map} +0 -0
  149. /package/dist/{remove-S5G6VGVT.js.map → remove-ODPLWK7O.js.map} +0 -0
  150. /package/dist/{resolution-events-CHOKR35X.js.map → resolution-events-CLDXZF67.js.map} +0 -0
  151. /package/dist/{restart-A7HJTFFM.js.map → restart-6KKZODOI.js.map} +0 -0
  152. /package/dist/{search-HKBGO3QV.js.map → search-U6N2DSOI.js.map} +0 -0
  153. /package/dist/{session-D2WPQTSR.js.map → session-6R3RNVKD.js.map} +0 -0
  154. /package/dist/{session-end-S4RYJG3Y.js.map → session-end-TCFCYDBL.js.map} +0 -0
  155. /package/dist/{session-start-4RJ32KS5.js.map → session-start-XXN2TVNI.js.map} +0 -0
  156. /package/dist/{setup-llm-EZRNEIW2.js.map → setup-llm-GISFI73Z.js.map} +0 -0
  157. /package/dist/{stats-PW7OGIBR.js.map → stats-MYQD4OVD.js.map} +0 -0
  158. /package/dist/{stop-FVMLTWXU.js.map → stop-K6TDJORY.js.map} +0 -0
  159. /package/dist/{stop-failure-MD52CGFX.js.map → stop-failure-U635O5A3.js.map} +0 -0
  160. /package/dist/{subagent-start-ZJZA7EAJ.js.map → subagent-start-LLGQBC5Q.js.map} +0 -0
  161. /package/dist/{subagent-stop-56H22JSE.js.map → subagent-stop-BO3GZWXD.js.map} +0 -0
  162. /package/dist/{task-completed-TQ4WW2HW.js.map → task-completed-3ZJHSI2E.js.map} +0 -0
  163. /package/dist/{team-RXYFXGUT.js.map → team-OJLQCVE3.js.map} +0 -0
  164. /package/dist/{update-HIJUK5ZK.js.map → update-HR7WMESA.js.map} +0 -0
  165. /package/dist/{user-prompt-submit-SLQNTQFL.js.map → user-prompt-submit-NM73R4I3.js.map} +0 -0
  166. /package/dist/{verify-ITBMLK67.js.map → verify-PSERIZPF.js.map} +0 -0
  167. /package/dist/{version-4YUDRPU4.js.map → version-YCODQZSX.js.map} +0 -0
@@ -31,10 +31,10 @@ import {
31
31
  updateRunStatus,
32
32
  updateSkillRecord,
33
33
  upsertDigestExtract
34
- } from "./chunk-D63XTGBV.js";
34
+ } from "./chunk-YTOD6L6N.js";
35
35
  import {
36
36
  fullTextSearch
37
- } from "./chunk-UILSK6DK.js";
37
+ } from "./chunk-GBYLHPML.js";
38
38
  import {
39
39
  cleanupStagedSkill,
40
40
  readStagedManifest,
@@ -44,7 +44,7 @@ import {
44
44
  } from "./chunk-U5EW2VIQ.js";
45
45
  import {
46
46
  loadAllTasks
47
- } from "./chunk-D2NTFSVO.js";
47
+ } from "./chunk-ZUSTCXHT.js";
48
48
  import {
49
49
  getAgent,
50
50
  getDefaultTask,
@@ -53,33 +53,33 @@ import {
53
53
  loadSystemPrompt,
54
54
  resolveDefinitionsDir,
55
55
  resolveEffectiveConfig
56
- } from "./chunk-W7ZOOZMK.js";
56
+ } from "./chunk-VQQ57UPG.js";
57
57
  import {
58
58
  insertTurn
59
59
  } from "./chunk-QLCD77AN.js";
60
60
  import {
61
61
  insertResolutionEvent
62
- } from "./chunk-P6C6ADBU.js";
62
+ } from "./chunk-2IJ6C63F.js";
63
63
  import "./chunk-IB76KGBY.js";
64
64
  import {
65
65
  DEFAULT_IMPORTANCE,
66
66
  insertSpore,
67
67
  listSpores,
68
68
  updateSporeStatus
69
- } from "./chunk-IRSNOBGD.js";
69
+ } from "./chunk-UDBCAFXS.js";
70
70
  import {
71
71
  listSessions,
72
72
  updateSession
73
- } from "./chunk-SGYYOTNM.js";
74
- import "./chunk-4JVHWBZF.js";
73
+ } from "./chunk-VGVRBSLC.js";
74
+ import "./chunk-KKEMVH6D.js";
75
75
  import {
76
76
  AGENT_SETTABLE_STATUSES,
77
77
  CANDIDATE_STATUS,
78
78
  createSchema
79
- } from "./chunk-CJ2KTRWI.js";
79
+ } from "./chunk-OGNEW5CN.js";
80
80
  import {
81
81
  loadConfig
82
- } from "./chunk-XAXQ72L3.js";
82
+ } from "./chunk-FEX6ALLH.js";
83
83
  import {
84
84
  getDatabase,
85
85
  initDatabase,
@@ -87,7 +87,7 @@ import {
87
87
  } from "./chunk-MYX5NCRH.js";
88
88
  import {
89
89
  getPluginVersion
90
- } from "./chunk-VTSNXAW7.js";
90
+ } from "./chunk-PFF4KB4O.js";
91
91
  import {
92
92
  findPackageRoot
93
93
  } from "./chunk-LPUQPDC2.js";
@@ -99,7 +99,7 @@ import {
99
99
  SEARCH_SIMILARITY_THRESHOLD,
100
100
  TEAM_SOURCE_PREFIX,
101
101
  epochSeconds
102
- } from "./chunk-34NHDRWI.js";
102
+ } from "./chunk-6SDC6V3N.js";
103
103
  import "./chunk-E7NUADTQ.js";
104
104
  import "./chunk-D7TYRPRM.js";
105
105
  import "./chunk-E4VLWIJC.js";
@@ -694,6 +694,14 @@ function parseAllowedTools(rawValue) {
694
694
  if (parts.some((p) => sentinels.has(p))) return null;
695
695
  return parts;
696
696
  }
697
+ function stemToken(word) {
698
+ let w = word;
699
+ if (w.length > 5 && w.endsWith("ing")) w = w.slice(0, -3);
700
+ else if (w.length > 5 && w.endsWith("ed")) w = w.slice(0, -2);
701
+ if (w.length > 4 && w.endsWith("s")) w = w.slice(0, -1);
702
+ if (w.length > 4 && w.endsWith("e")) w = w.slice(0, -1);
703
+ return w;
704
+ }
697
705
  function tokenSet(text) {
698
706
  const stopwords = /* @__PURE__ */ new Set([
699
707
  "the",
@@ -753,21 +761,34 @@ function tokenSet(text) {
753
761
  "makes"
754
762
  ]);
755
763
  return new Set(
756
- text.toLowerCase().replace(/[^a-z0-9_\s]/g, " ").split(/\s+/).filter((w) => w.length >= 4 && !stopwords.has(w))
764
+ text.toLowerCase().replace(/[^a-z0-9_\s]/g, " ").split(/\s+/).filter((w) => w.length >= 4 && !stopwords.has(w)).map(stemToken)
757
765
  );
758
766
  }
767
+ function intersectionSize(a, b) {
768
+ let count = 0;
769
+ for (const token of a) {
770
+ if (b.has(token)) count++;
771
+ }
772
+ return count;
773
+ }
759
774
  function descriptionSimilarity(a, b) {
760
775
  const aTokens = tokenSet(a);
761
776
  const bTokens = tokenSet(b);
762
777
  if (aTokens.size === 0 || bTokens.size === 0) return 0;
763
- let intersection = 0;
764
- for (const token of aTokens) {
765
- if (bTokens.has(token)) intersection++;
766
- }
778
+ const intersection = intersectionSize(aTokens, bTokens);
767
779
  const union = aTokens.size + bTokens.size - intersection;
768
780
  return union === 0 ? 0 : intersection / union;
769
781
  }
782
+ function topicOverlapSimilarity(a, b, minTokens = 3) {
783
+ const aTokens = tokenSet(a);
784
+ const bTokens = tokenSet(b);
785
+ if (aTokens.size < minTokens || bTokens.size < minTokens) return 0;
786
+ const intersection = intersectionSize(aTokens, bTokens);
787
+ const smaller = Math.min(aTokens.size, bTokens.size);
788
+ return smaller === 0 ? 0 : intersection / smaller;
789
+ }
770
790
  var DESCRIPTION_DUPLICATE_THRESHOLD = 0.4;
791
+ var TOPIC_OVERLAP_THRESHOLD = 0.6;
771
792
  function checkFrontmatterPreservation(existing, incoming) {
772
793
  const violations = [];
773
794
  for (const field of PROTECTED_FRONTMATTER_FIELDS) {
@@ -849,8 +870,13 @@ function createSkillTools(deps) {
849
870
  function findOverlappingCandidate(newTopic, existing) {
850
871
  let best = null;
851
872
  for (const candidate of existing) {
852
- const score = descriptionSimilarity(newTopic, candidate.topic);
853
- if (score >= DESCRIPTION_DUPLICATE_THRESHOLD && (!best || score > best.score)) {
873
+ const jaccard = descriptionSimilarity(newTopic, candidate.topic);
874
+ const overlap = topicOverlapSimilarity(newTopic, candidate.topic);
875
+ const hitsJaccard = jaccard >= DESCRIPTION_DUPLICATE_THRESHOLD;
876
+ const hitsOverlap = overlap >= TOPIC_OVERLAP_THRESHOLD;
877
+ if (!hitsJaccard && !hitsOverlap) continue;
878
+ const score = Math.max(jaccard, overlap);
879
+ if (!best || score > best.score) {
854
880
  best = { candidate, score };
855
881
  }
856
882
  }
@@ -959,7 +985,7 @@ function createSkillTools(deps) {
959
985
  );
960
986
  }
961
987
  try {
962
- const { syncSkillSymlinks } = await import("./installer-AARSFXI6.js");
988
+ const { syncSkillSymlinks } = await import("./installer-CTWQB4RS.js");
963
989
  syncSkillSymlinks(root, params.name, { remove: true });
964
990
  } catch (rollbackErr) {
965
991
  console.warn(
@@ -977,7 +1003,7 @@ function createSkillTools(deps) {
977
1003
  };
978
1004
  }
979
1005
  try {
980
- const { syncSkillSymlinks } = await import("./installer-AARSFXI6.js");
1006
+ const { syncSkillSymlinks } = await import("./installer-CTWQB4RS.js");
981
1007
  syncSkillSymlinks(root, params.name);
982
1008
  } catch (err) {
983
1009
  console.warn(
@@ -1210,7 +1236,7 @@ function createSkillTools(deps) {
1210
1236
  console.warn("[vault_skill_records] Failed to remove skill directory:", err instanceof Error ? err.message : err);
1211
1237
  }
1212
1238
  try {
1213
- const { syncSkillSymlinks } = await import("./installer-AARSFXI6.js");
1239
+ const { syncSkillSymlinks } = await import("./installer-CTWQB4RS.js");
1214
1240
  syncSkillSymlinks(root, result.name, { remove: true });
1215
1241
  } catch (err) {
1216
1242
  console.warn("[vault_skill_records] Failed to remove symlinks:", err instanceof Error ? err.message : err);
@@ -1329,7 +1355,7 @@ function createSkillTools(deps) {
1329
1355
  return textResult({ error: `Failed to write skill file: ${err instanceof Error ? err.message : String(err)}` });
1330
1356
  }
1331
1357
  try {
1332
- const { syncSkillSymlinks } = await import("./installer-AARSFXI6.js");
1358
+ const { syncSkillSymlinks } = await import("./installer-CTWQB4RS.js");
1333
1359
  syncSkillSymlinks(root, args.name);
1334
1360
  } catch (err) {
1335
1361
  console.warn("[vault_write_skill] syncSkillSymlinks failed:", err instanceof Error ? err.message : err);
@@ -2650,4 +2676,4 @@ export {
2650
2676
  computeWaves,
2651
2677
  runAgent
2652
2678
  };
2653
- //# sourceMappingURL=executor-PUKL76TU.js.map
2679
+ //# sourceMappingURL=executor-UYNV4EOQ.js.map