research-copilot 0.2.20 → 0.2.21

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 (81) hide show
  1. package/README.md +1 -1
  2. package/app/out/main/index.mjs +2585 -48
  3. package/app/out/renderer/assets/{MilkdownMarkdownEditor-CCdZ2mtg.css → MilkdownMarkdownEditor-BW0Pt28W.css} +16 -1
  4. package/app/out/renderer/assets/{MilkdownMarkdownEditor-Bj7JSjF5.js → MilkdownMarkdownEditor-OhCrq3X0.js} +56 -51
  5. package/app/out/renderer/assets/{arc-CPL9nDFE.js → arc-DLr0RP8F.js} +1 -1
  6. package/app/out/renderer/assets/{blockDiagram-c4efeb88-BFOajDNs.js → blockDiagram-c4efeb88-XhKChw2n.js} +8 -8
  7. package/app/out/renderer/assets/{c4Diagram-c83219d4-LeqnQ2-5.js → c4Diagram-c83219d4-DDoJmoIQ.js} +3 -3
  8. package/app/out/renderer/assets/{channel-jk5Np8ud.js → channel-CJCgJSqV.js} +1 -1
  9. package/app/out/renderer/assets/{classDiagram-beda092f-CxOqB6OU.js → classDiagram-beda092f-CAmimZpz.js} +6 -6
  10. package/app/out/renderer/assets/{classDiagram-v2-2358418a-CyP_5qLa.js → classDiagram-v2-2358418a-Bma4E_Eg.js} +10 -10
  11. package/app/out/renderer/assets/{clone-PHFwh58n.js → clone-C338dmoI.js} +1 -1
  12. package/app/out/renderer/assets/{createText-1719965b-CE_0jsfj.js → createText-1719965b-_up4NJqB.js} +2 -2
  13. package/app/out/renderer/assets/{edges-96097737-DBk1JhZS.js → edges-96097737-Bpp6hVLn.js} +3 -3
  14. package/app/out/renderer/assets/{erDiagram-0228fc6a-DnR_LkSB.js → erDiagram-0228fc6a-bjTh_7ap.js} +5 -5
  15. package/app/out/renderer/assets/{flowDb-c6c81e3f-CJrZUKlS.js → flowDb-c6c81e3f-BjVV4DVk.js} +1 -1
  16. package/app/out/renderer/assets/{flowDiagram-50d868cf-CfNfrt17.js → flowDiagram-50d868cf-gmeaaZ6z.js} +12 -12
  17. package/app/out/renderer/assets/{flowDiagram-v2-4f6560a1-BGQtiK3j.js → flowDiagram-v2-4f6560a1-nem5zs2M.js} +12 -12
  18. package/app/out/renderer/assets/{flowchart-elk-definition-6af322e1-BXLraghz.js → flowchart-elk-definition-6af322e1-DPaGAYRw.js} +6 -6
  19. package/app/out/renderer/assets/{ganttDiagram-a2739b55-CAwaEMMm.js → ganttDiagram-a2739b55-CnAti19E.js} +3 -3
  20. package/app/out/renderer/assets/{gitGraphDiagram-82fe8481-vuSEC6ny.js → gitGraphDiagram-82fe8481-DQWHD3SJ.js} +2 -2
  21. package/app/out/renderer/assets/{graph-CZfltE7S.js → graph-DKiKgH8m.js} +1 -1
  22. package/app/out/renderer/assets/{index-DIZJXKQ6.js → index-4s-c5d65.js} +3 -3
  23. package/app/out/renderer/assets/{index-5325376f-DWTrHDEo.js → index-5325376f-G-0aO-2i.js} +6 -6
  24. package/app/out/renderer/assets/{index-CwPfquqm.js → index-9q_P5ULR.js} +4 -4
  25. package/app/out/renderer/assets/{index-EaGZvaBp.js → index-B1A3JxQj.js} +3 -3
  26. package/app/out/renderer/assets/{index-C2tqvXjC.js → index-BBUrmGmY.js} +6 -6
  27. package/app/out/renderer/assets/{index-D_7yOLk3.js → index-BQho5LH-.js} +6 -6
  28. package/app/out/renderer/assets/{index-B6f2bVW_.js → index-BUVlmsgO.js} +3 -3
  29. package/app/out/renderer/assets/{index-DpXI4mHb.js → index-BzEthrJ4.js} +3 -3
  30. package/app/out/renderer/assets/{index-CUsEKU8Q.js → index-C1YzkB4z.js} +93 -36
  31. package/app/out/renderer/assets/{index-CMfKxpBP.js → index-CGo665vD.js} +3 -3
  32. package/app/out/renderer/assets/{index-B5Mkpo9f.js → index-CPZaxR35.js} +3 -3
  33. package/app/out/renderer/assets/{index-BpdWQuss.js → index-CSyD1mbL.js} +3 -3
  34. package/app/out/renderer/assets/{index-DB8ImtMy.js → index-Cf7vlFSn.js} +3 -3
  35. package/app/out/renderer/assets/{index-CyDfvefg.js → index-CluH1o2q.js} +6 -6
  36. package/app/out/renderer/assets/{index-7dcVwInU.js → index-Cw1n3klA.js} +5 -5
  37. package/app/out/renderer/assets/{index-Ul-Kq9b2.js → index-DFzvntIw.js} +3 -3
  38. package/app/out/renderer/assets/{index-t0-md-MG.js → index-DHzyAhWM.js} +4 -4
  39. package/app/out/renderer/assets/{index-Cc9coKGN.js → index-DhliHfCM.js} +6 -6
  40. package/app/out/renderer/assets/{index-K0o5fHYG.js → index-DkVFbCxC.js} +3 -3
  41. package/app/out/renderer/assets/{index-DiCqe1UR.js → index-DpZJP5MT.js} +6 -6
  42. package/app/out/renderer/assets/{index-CaYWMBXT.js → index-Gfd_DiMG.js} +3 -3
  43. package/app/out/renderer/assets/{index-Di3HmXc-.js → index-jOvNAYyP.js} +3 -3
  44. package/app/out/renderer/assets/{index-B4V7cFWJ.js → index-rrJkk8KV.js} +6 -6
  45. package/app/out/renderer/assets/{index-BgAs-p8D.js → index-vfSerSmF.js} +1 -1
  46. package/app/out/renderer/assets/{infoDiagram-8eee0895-BmPESCfj.js → infoDiagram-8eee0895-BCnBkXXS.js} +2 -2
  47. package/app/out/renderer/assets/{journeyDiagram-c64418c1-BGsCbfr_.js → journeyDiagram-c64418c1-Bq2wSX3k.js} +4 -4
  48. package/app/out/renderer/assets/{layout-5MwFTPs7.js → layout-BvkumzoT.js} +2 -2
  49. package/app/out/renderer/assets/{line-D0U74KO0.js → line-eU4el-G4.js} +1 -1
  50. package/app/out/renderer/assets/{linear-BclyBoiT.js → linear-DlBjMBEa.js} +1 -1
  51. package/app/out/renderer/assets/{mindmap-definition-8da855dc-un1bPKBj.js → mindmap-definition-8da855dc-CzLBu7ao.js} +3 -3
  52. package/app/out/renderer/assets/{pieDiagram-a8764435-B7KM3duv.js → pieDiagram-a8764435--olrXFr_.js} +3 -3
  53. package/app/out/renderer/assets/{quadrantDiagram-1e28029f-C8i5m3Os.js → quadrantDiagram-1e28029f-BnpnBBgc.js} +3 -3
  54. package/app/out/renderer/assets/{requirementDiagram-08caed73-FjqENNN5.js → requirementDiagram-08caed73-6O9WS7hn.js} +5 -5
  55. package/app/out/renderer/assets/{sankeyDiagram-a04cb91d-BKV22yuJ.js → sankeyDiagram-a04cb91d-D-iJnK91.js} +2 -2
  56. package/app/out/renderer/assets/{sequenceDiagram-c5b8d532-DWO-Z2i3.js → sequenceDiagram-c5b8d532-DBlK15cV.js} +3 -3
  57. package/app/out/renderer/assets/{stateDiagram-1ecb1508-BqohgALA.js → stateDiagram-1ecb1508-DKXKPYuk.js} +6 -6
  58. package/app/out/renderer/assets/{stateDiagram-v2-c2b004d7-B3sEkrB8.js → stateDiagram-v2-c2b004d7-DY288Eo5.js} +10 -10
  59. package/app/out/renderer/assets/{styles-b4e223ce-BGytHk8n.js → styles-b4e223ce-CRJ_xgJ-.js} +1 -1
  60. package/app/out/renderer/assets/{styles-ca3715f6-B0PvBknL.js → styles-ca3715f6-Bp_k5KLD.js} +1 -1
  61. package/app/out/renderer/assets/{styles-d45a18b0-C6F384ai.js → styles-d45a18b0-DLA8Gg6D.js} +4 -4
  62. package/app/out/renderer/assets/{svgDrawCommon-b86b1483-BXgThwM_.js → svgDrawCommon-b86b1483-Dm5CK2gQ.js} +1 -1
  63. package/app/out/renderer/assets/{timeline-definition-faaaa080-iNn5igPR.js → timeline-definition-faaaa080-D-m9BHUg.js} +3 -3
  64. package/app/out/renderer/assets/{xychartDiagram-f5964ef8-oF_gxlk1.js → xychartDiagram-f5964ef8-Drn4Rqev.js} +5 -5
  65. package/app/out/renderer/index.html +1 -1
  66. package/lib/skills/builtin/academic-marp-slides/SKILL.md +933 -0
  67. package/lib/skills/builtin/research-grants/SKILL.md +15 -11
  68. package/lib/skills/builtin/scholar-evaluation/SKILL.md +12 -11
  69. package/lib/skills/builtin/scientific-schematics/SKILL.md +463 -560
  70. package/lib/skills/builtin/teaching-marp-slides/SKILL.md +1218 -0
  71. package/package.json +1 -1
  72. package/scripts/audit-diagram-prompts.mjs +67 -0
  73. package/scripts/test-skill-routing.mjs +238 -0
  74. package/lib/skills/builtin/marp-slides/SKILL.md +0 -642
  75. package/lib/skills/builtin/scientific-schematics/references/QUICK_REFERENCE.md +0 -182
  76. package/lib/skills/builtin/scientific-schematics/references/README.md +0 -292
  77. package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic.cpython-312.pyc +0 -0
  78. package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic_ai.cpython-312.pyc +0 -0
  79. package/lib/skills/builtin/scientific-schematics/scripts/example_usage.sh +0 -85
  80. package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic.py +0 -141
  81. package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic_ai.py +0 -910
@@ -1,15 +1,15 @@
1
- import { f as flowDb, p as parser$1 } from "./flowDb-c6c81e3f-CJrZUKlS.js";
2
- import { u as select, an as curveLinear, v as log$1, r as getConfig, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, S as evaluate, ah as renderKatexSanitized, C as common$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import { G as Graph } from "./graph-CZfltE7S.js";
4
- import { u as uniqueId, r as range, p as pick, l as layout, d as defaults } from "./layout-5MwFTPs7.js";
5
- import { b as applyStyle, c as addHtmlLabel, i as isSubgraph, d as applyTransition, e as edgeToId, g as applyClass, f as flowStyles, a as flowRendererV2, s as selectAll } from "./styles-d45a18b0-C6F384ai.js";
6
- import { l as line } from "./line-D0U74KO0.js";
7
- import "./index-CUsEKU8Q.js";
8
- import "./index-5325376f-DWTrHDEo.js";
9
- import "./clone-PHFwh58n.js";
10
- import "./edges-96097737-DBk1JhZS.js";
11
- import "./createText-1719965b-CE_0jsfj.js";
12
- import "./channel-jk5Np8ud.js";
1
+ import { f as flowDb, p as parser$1 } from "./flowDb-c6c81e3f-BjVV4DVk.js";
2
+ import { u as select, an as curveLinear, v as log$1, r as getConfig, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, S as evaluate, ah as renderKatexSanitized, C as common$1 } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import { G as Graph } from "./graph-DKiKgH8m.js";
4
+ import { u as uniqueId, r as range, p as pick, l as layout, d as defaults } from "./layout-BvkumzoT.js";
5
+ import { b as applyStyle, c as addHtmlLabel, i as isSubgraph, d as applyTransition, e as edgeToId, g as applyClass, f as flowStyles, a as flowRendererV2, s as selectAll } from "./styles-d45a18b0-DLA8Gg6D.js";
6
+ import { l as line } from "./line-eU4el-G4.js";
7
+ import "./index-C1YzkB4z.js";
8
+ import "./index-5325376f-G-0aO-2i.js";
9
+ import "./clone-C338dmoI.js";
10
+ import "./edges-96097737-Bpp6hVLn.js";
11
+ import "./createText-1719965b-_up4NJqB.js";
12
+ import "./channel-CJCgJSqV.js";
13
13
  import "./array-DgktLKBx.js";
14
14
  import "./path-Cp2qmpkd.js";
15
15
  function responseText(response) {
@@ -1,17 +1,17 @@
1
- import { f as flowDb, p as parser$1 } from "./flowDb-c6c81e3f-CJrZUKlS.js";
2
- import { f as flowStyles, a as flowRendererV2 } from "./styles-d45a18b0-C6F384ai.js";
3
- import { W as setConfig } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
4
- import "./graph-CZfltE7S.js";
5
- import "./layout-5MwFTPs7.js";
6
- import "./index-5325376f-DWTrHDEo.js";
7
- import "./clone-PHFwh58n.js";
8
- import "./edges-96097737-DBk1JhZS.js";
9
- import "./createText-1719965b-CE_0jsfj.js";
10
- import "./index-CUsEKU8Q.js";
11
- import "./line-D0U74KO0.js";
1
+ import { f as flowDb, p as parser$1 } from "./flowDb-c6c81e3f-BjVV4DVk.js";
2
+ import { f as flowStyles, a as flowRendererV2 } from "./styles-d45a18b0-DLA8Gg6D.js";
3
+ import { W as setConfig } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
4
+ import "./graph-DKiKgH8m.js";
5
+ import "./layout-BvkumzoT.js";
6
+ import "./index-5325376f-G-0aO-2i.js";
7
+ import "./clone-C338dmoI.js";
8
+ import "./edges-96097737-Bpp6hVLn.js";
9
+ import "./createText-1719965b-_up4NJqB.js";
10
+ import "./index-C1YzkB4z.js";
11
+ import "./line-eU4el-G4.js";
12
12
  import "./array-DgktLKBx.js";
13
13
  import "./path-Cp2qmpkd.js";
14
- import "./channel-jk5Np8ud.js";
14
+ import "./channel-CJCgJSqV.js";
15
15
  const diagram = {
16
16
  parser: parser$1,
17
17
  db: flowDb,
@@ -1,9 +1,9 @@
1
- import { p as parser$1, d as db } from "./flowDb-c6c81e3f-CJrZUKlS.js";
2
- import { u as select, v as log$1, ai as getConfig$1, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, an as curveLinear, C as common$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import { i as insertMarkers$1, c as insertNode, l as labelHelper, b as insertEdgeLabel, k as getLineFunctionsWithOffset, m as addEdgeMarkers } from "./edges-96097737-DBk1JhZS.js";
4
- import { g as getDefaultExportFromCjs, c as commonjsGlobal } from "./index-CUsEKU8Q.js";
5
- import { l as line } from "./line-D0U74KO0.js";
6
- import "./createText-1719965b-CE_0jsfj.js";
1
+ import { p as parser$1, d as db } from "./flowDb-c6c81e3f-BjVV4DVk.js";
2
+ import { u as select, v as log$1, ai as getConfig$1, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, an as curveLinear, C as common$1 } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import { i as insertMarkers$1, c as insertNode, l as labelHelper, b as insertEdgeLabel, k as getLineFunctionsWithOffset, m as addEdgeMarkers } from "./edges-96097737-Bpp6hVLn.js";
4
+ import { g as getDefaultExportFromCjs, c as commonjsGlobal } from "./index-C1YzkB4z.js";
5
+ import { l as line } from "./line-eU4el-G4.js";
6
+ import "./createText-1719965b-_up4NJqB.js";
7
7
  import "./array-DgktLKBx.js";
8
8
  import "./path-Cp2qmpkd.js";
9
9
  function commonjsRequire(path) {
@@ -1,6 +1,6 @@
1
- import { aS as Rgb, aT as rgbConvert, aU as define, aV as extend, aW as Color, aX as nogamma, aY as hue, n as getAccDescription, m as setAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, r as getConfig, u as select, w as configureSvgSize, aZ as dayjs, v as log$1, C as common$1, A as dist, M as clear$1, O as utils } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import { c as commonjsGlobal, g as getDefaultExportFromCjs } from "./index-CUsEKU8Q.js";
3
- import { b as bisector, t as tickStep, c as continuous, a as copy, l as linear } from "./linear-BclyBoiT.js";
1
+ import { aS as Rgb, aT as rgbConvert, aU as define, aV as extend, aW as Color, aX as nogamma, aY as hue, n as getAccDescription, m as setAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, r as getConfig, u as select, w as configureSvgSize, aZ as dayjs, v as log$1, C as common$1, A as dist, M as clear$1, O as utils } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import { c as commonjsGlobal, g as getDefaultExportFromCjs } from "./index-C1YzkB4z.js";
3
+ import { b as bisector, t as tickStep, c as continuous, a as copy, l as linear } from "./linear-DlBjMBEa.js";
4
4
  import { i as initRange } from "./init-ZxktEp_H.js";
5
5
  function max(values, valueof) {
6
6
  let max2;
@@ -1,5 +1,5 @@
1
- import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, v as log$1, u as select, O as utils, X as setupGraphViewbox, M as clear$2, C as common$1, Y as random } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import "./index-CUsEKU8Q.js";
1
+ import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, v as log$1, u as select, O as utils, X as setupGraphViewbox, M as clear$2, C as common$1, Y as random } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import "./index-C1YzkB4z.js";
3
3
  var parser = function() {
4
4
  var o = function(k, v, o2, l) {
5
5
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
@@ -1,4 +1,4 @@
1
- import { bn as Symbol$1, bc as isArray, bf as isSymbol, bb as isArrayLike, bo as arrayLikeKeys, bp as baseKeys, bq as memoize, br as isArguments, bs as copyObject, b9 as keysIn, bt as getPrototype, bu as cloneArrayBuffer, bv as cloneTypedArray, bw as isObjectLike, bx as getTag, bk as baseUnary, by as nodeUtil, bh as isObject, bz as copyArray, bA as isBuffer, bB as cloneBuffer, bC as initCloneObject, bD as Stack, bj as assignValue, bE as MapCache, ba as eq, bF as Uint8Array, bG as isTypedArray, bH as isLength, bi as isIndex, bg as identity, bd as baseFor, bI as Set, b7 as baseRest, bJ as isArrayLikeObject, bl as constant, aR as isFunction, bK as isEmpty } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
1
+ import { bn as Symbol$1, bc as isArray, bf as isSymbol, bb as isArrayLike, bo as arrayLikeKeys, bp as baseKeys, bq as memoize, br as isArguments, bs as copyObject, b9 as keysIn, bt as getPrototype, bu as cloneArrayBuffer, bv as cloneTypedArray, bw as isObjectLike, bx as getTag, bk as baseUnary, by as nodeUtil, bh as isObject, bz as copyArray, bA as isBuffer, bB as cloneBuffer, bC as initCloneObject, bD as Stack, bj as assignValue, bE as MapCache, ba as eq, bF as Uint8Array, bG as isTypedArray, bH as isLength, bi as isIndex, bg as identity, bd as baseFor, bI as Set, b7 as baseRest, bJ as isArrayLikeObject, bl as constant, aR as isFunction, bK as isEmpty } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
2
  function arrayMap(array, iteratee) {
3
3
  var index = -1, length = array == null ? 0 : array.length, result = Array(length);
4
4
  while (++index < length) {
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const blockEnd = 63, eof = 64, DirectiveEnd = 1, DocEnd = 2, sequenceStartMark = 3, sequenceContinueMark = 4, explicitMapStartMark = 5, explicitMapContinueMark = 6, flowMapMark = 7, mapStartMark = 65, mapContinueMark = 66, Literal = 8, QuotedLiteral = 9, Anchor = 10, Alias = 11, Tag = 12, BlockLiteralContent = 13, BracketL = 19, FlowSequence = 20, Colon = 29, BraceL = 33, FlowMapping = 34, BlockLiteralHeader = 47;
5
5
  const type_Top = 0, type_Seq = 1, type_Map = 2, type_Flow = 3, type_Lit = 4;
6
6
  class Context {
@@ -1,9 +1,9 @@
1
- import { i as isUndefined, G as Graph } from "./graph-CZfltE7S.js";
2
- import { m as map, l as layout } from "./layout-5MwFTPs7.js";
3
- import { c as clone } from "./clone-PHFwh58n.js";
4
- import { i as insertMarkers$1, u as updateNodeBounds, s as setNodeElem, c as insertNode, b as insertEdgeLabel, g as getSubGraphTitleMargins, d as positionNode, a as insertEdge, p as positionEdgeLabel, e as intersectRect$1, f as createLabel$1, h as clear$1$1, j as clear$2 } from "./edges-96097737-DBk1JhZS.js";
5
- import { v as log$1, r as getConfig, S as evaluate, u as select } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
6
- import { c as createText } from "./createText-1719965b-CE_0jsfj.js";
1
+ import { i as isUndefined, G as Graph } from "./graph-DKiKgH8m.js";
2
+ import { m as map, l as layout } from "./layout-BvkumzoT.js";
3
+ import { c as clone } from "./clone-C338dmoI.js";
4
+ import { i as insertMarkers$1, u as updateNodeBounds, s as setNodeElem, c as insertNode, b as insertEdgeLabel, g as getSubGraphTitleMargins, d as positionNode, a as insertEdge, p as positionEdgeLabel, e as intersectRect$1, f as createLabel$1, h as clear$1$1, j as clear$2 } from "./edges-96097737-Bpp6hVLn.js";
5
+ import { v as log$1, r as getConfig, S as evaluate, u as select } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
6
+ import { c as createText } from "./createText-1719965b-_up4NJqB.js";
7
7
  function write(g) {
8
8
  var json = {
9
9
  options: {
@@ -1,7 +1,7 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, f as foldNodeProp, j as foldInside, i as indentNodeProp, c as continuedIndent } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import { defineCSSCompletionSource } from "./index-B5Mkpo9f.js";
4
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, f as foldNodeProp, j as foldInside, i as indentNodeProp, c as continuedIndent } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import { defineCSSCompletionSource } from "./index-CPZaxR35.js";
4
+ import "./index-C1YzkB4z.js";
5
5
  const indent = 168, dedent = 169, descendantOp = 170, InterpolationEnd = 1, InterpolationContinue = 2, Unit = 3, callee = 171, identifier = 172, VariableName = 4, queryIdentifier = 173, InterpolationStart = 5, newline = 174, blankLineStart = 175, eof = 176, whitespace = 177, LineComment = 6, Comment = 7, IndentedMixin = 8, IndentedInclude = 9, Dialect_indented = 0;
6
6
  const space = [
7
7
  9,
@@ -1,6 +1,6 @@
1
- import { L as LRLanguage, a as LanguageSupport, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, s as styleTags, t as tags, b as ifNotIn, d as completeFromList, e as syntaxTree } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import { E as ExternalTokenizer, L as LRParser } from "./index-BgAs-p8D.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRLanguage, a as LanguageSupport, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, s as styleTags, t as tags, b as ifNotIn, d as completeFromList, e as syntaxTree } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import { E as ExternalTokenizer, L as LRParser } from "./index-vfSerSmF.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const whitespace = 36, LineComment = 1, BlockComment = 2, String$1 = 3, Number = 4, Bool = 5, Null = 6, ParenL = 7, ParenR = 8, BraceL = 9, BraceR = 10, BracketL = 11, BracketR = 12, Semi = 13, Dot = 14, Operator = 15, Punctuation = 16, SpecialVar = 17, Identifier = 18, QuotedIdentifier = 19, Keyword = 20, Type = 21, Bits = 22, Bytes = 23, Builtin = 24;
5
5
  function isAlpha(ch) {
6
6
  return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57;
@@ -1,9 +1,9 @@
1
- import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import { html } from "./index-7dcVwInU.js";
3
- import { javascriptLanguage } from "./index-K0o5fHYG.js";
4
- import { L as LRParser, E as ExternalTokenizer } from "./index-BgAs-p8D.js";
5
- import "./index-CUsEKU8Q.js";
6
- import "./index-B5Mkpo9f.js";
1
+ import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import { html } from "./index-Cw1n3klA.js";
3
+ import { javascriptLanguage } from "./index-DkVFbCxC.js";
4
+ import { L as LRParser, E as ExternalTokenizer } from "./index-vfSerSmF.js";
5
+ import "./index-C1YzkB4z.js";
6
+ import "./index-CPZaxR35.js";
7
7
  const Text = 1, attributeContentSingle = 33, attributeContentDouble = 34, scriptAttributeContentSingle = 35, scriptAttributeContentDouble = 36;
8
8
  const text = /* @__PURE__ */ new ExternalTokenizer((input) => {
9
9
  let start = input.pos;
@@ -1,9 +1,9 @@
1
- import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import { html } from "./index-7dcVwInU.js";
3
- import { javascriptLanguage } from "./index-K0o5fHYG.js";
4
- import { L as LRParser, a as LocalTokenGroup } from "./index-BgAs-p8D.js";
5
- import "./index-CUsEKU8Q.js";
6
- import "./index-B5Mkpo9f.js";
1
+ import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import { html } from "./index-Cw1n3klA.js";
3
+ import { javascriptLanguage } from "./index-DkVFbCxC.js";
4
+ import { L as LRParser, a as LocalTokenGroup } from "./index-vfSerSmF.js";
5
+ import "./index-C1YzkB4z.js";
6
+ import "./index-CPZaxR35.js";
7
7
  const parser = /* @__PURE__ */ LRParser.deserialize({
8
8
  version: 14,
9
9
  states: "%pOVOWOOObQPOOOpOSO'#C_OOOO'#Cp'#CpQVOWOOQxQPOOO!TQQOOQ!YQPOOOOOO,58y,58yO!_OSO,58yOOOO-E6n-E6nO!dQQO'#CqQ{QPOOO!iQPOOQ{QPOOO!qQPOOOOOO1G.e1G.eOOQO,59],59]OOQO-E6o-E6oO!yOpO'#CiO#RO`O'#CiQOQPOOO#ZO#tO'#CmO#fO!bO'#CmOOQO,59T,59TO#qOpO,59TO#vO`O,59TOOOO'#Cr'#CrO#{O#tO,59XOOQO,59X,59XOOOO'#Cs'#CsO$WO!bO,59XOOQO1G.o1G.oOOOO-E6p-E6pOOQO1G.s1G.sOOOO-E6q-E6q",
@@ -1,6 +1,6 @@
1
- import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
- import { L as LRParser } from "./index-BgAs-p8D.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
2
+ import { L as LRParser } from "./index-vfSerSmF.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const spec_Keyword = { __proto__: null, anyref: 34, dataref: 34, eqref: 34, externref: 34, i31ref: 34, funcref: 34, i8: 34, i16: 34, i32: 34, i64: 34, f32: 34, f64: 34 };
5
5
  const parser = /* @__PURE__ */ LRParser.deserialize({
6
6
  version: 14,
@@ -1,6 +1,6 @@
1
- import { L as LRParser } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const javaHighlighting = styleTags({
5
5
  null: tags.null,
6
6
  instanceof: tags.operatorKeyword,
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./MilkdownMarkdownEditor-Bj7JSjF5.js","./MilkdownMarkdownEditor-CCdZ2mtg.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./MilkdownMarkdownEditor-OhCrq3X0.js","./MilkdownMarkdownEditor-BW0Pt28W.css"])))=>i.map(i=>d[i]);
2
2
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
3
3
  function getDefaultExportFromCjs(x) {
4
4
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -12993,6 +12993,17 @@ const Hash = createLucideIcon("Hash", [
12993
12993
  ["line", { x1: "10", x2: "8", y1: "3", y2: "21", key: "1ggp8o" }],
12994
12994
  ["line", { x1: "16", x2: "14", y1: "3", y2: "21", key: "weycgp" }]
12995
12995
  ]);
12996
+ /**
12997
+ * @license lucide-react v0.469.0 - ISC
12998
+ *
12999
+ * This source code is licensed under the ISC license.
13000
+ * See the LICENSE file in the root directory of this source tree.
13001
+ */
13002
+ const Image = createLucideIcon("Image", [
13003
+ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2", key: "1m3agn" }],
13004
+ ["circle", { cx: "9", cy: "9", r: "2", key: "af1f0g" }],
13005
+ ["path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21", key: "1xmnt7" }]
13006
+ ]);
12996
13007
  /**
12997
13008
  * @license lucide-react v0.469.0 - ISC
12998
13009
  *
@@ -13484,7 +13495,7 @@ const KEY_FIELDS = [
13484
13495
  name: "OPENAI_API_KEY",
13485
13496
  label: "OpenAI",
13486
13497
  placeholder: "sk-...",
13487
- hint: "Powers GPT / o-series models. Get a key at platform.openai.com",
13498
+ hint: "Powers GPT / o-series models AND publication-quality diagram generation (gpt-image-2 + PNG-anchored SVG transcription). Without this key, diagrams fall back to a chat-model-only path with reduced quality. Get a key at platform.openai.com",
13488
13499
  url: "https://platform.openai.com/api-keys",
13489
13500
  required: true
13490
13501
  },
@@ -13997,6 +14008,42 @@ function formatRelativeTime(isoString) {
13997
14008
  if (hours < 24) return `${hours} hour${hours > 1 ? "s" : ""} ago`;
13998
14009
  return new Date(isoString).toLocaleDateString();
13999
14010
  }
14011
+ function DiagramSettings({ reviewProvider, onChangeReviewProvider }) {
14012
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
14013
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
14014
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold t-text mb-1.5", children: "Generation Provider" }),
14015
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[11px] t-text-muted", children: [
14016
+ "Diagram images are generated via OpenAI ",
14017
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "font-mono", children: "gpt-image-2" }),
14018
+ " and require ",
14019
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "font-mono", children: "OPENAI_API_KEY" }),
14020
+ ". Claude cannot generate images, so this is fixed for now."
14021
+ ] })
14022
+ ] }),
14023
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
14024
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold t-text mb-1.5", children: "Review Provider" }),
14025
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] t-text-muted mb-2.5", children: "Which model evaluates each draft and decides whether to accept, edit, or regenerate." }),
14026
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
14027
+ SegmentedControl,
14028
+ {
14029
+ options: [
14030
+ { label: "Auto", value: "auto" },
14031
+ { label: "OpenAI", value: "openai" },
14032
+ { label: "Anthropic", value: "anthropic" }
14033
+ ],
14034
+ value: reviewProvider,
14035
+ onChange: onChangeReviewProvider
14036
+ }
14037
+ ),
14038
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[10px] t-text-muted mt-1.5", children: [
14039
+ reviewProvider === "auto" && "Prefer heterogeneous review (Anthropic when available, so the generator does not grade its own family).",
14040
+ reviewProvider === "openai" && "GPT-4o vision with JSON-schema output. Requires OPENAI_API_KEY.",
14041
+ reviewProvider === "anthropic" && "Claude Opus vision with tool-use constrained output. Requires ANTHROPIC_API_KEY."
14042
+ ] }),
14043
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] t-text-muted mt-2 leading-relaxed", children: "Score thresholds are calibrated per reviewer and are not directly comparable across providers. An 8.0 from OpenAI and an 8.0 from Claude represent similar quality targets, but the underlying numbers are not interchangeable." })
14044
+ ] })
14045
+ ] });
14046
+ }
14000
14047
  const DEFAULT_SETTINGS = {
14001
14048
  research: {
14002
14049
  researchIntensity: "medium",
@@ -14009,6 +14056,9 @@ const DEFAULT_SETTINGS = {
14009
14056
  wikiAgent: {
14010
14057
  model: "none",
14011
14058
  speed: "medium"
14059
+ },
14060
+ diagram: {
14061
+ reviewProvider: "auto"
14012
14062
  }
14013
14063
  };
14014
14064
  const api$e = window.api;
@@ -14016,7 +14066,8 @@ const TABS = [
14016
14066
  { id: "api-keys", label: "API Keys", icon: Key },
14017
14067
  { id: "research", label: "Research", icon: BookOpen },
14018
14068
  { id: "data-analysis", label: "Data Analysis", icon: ChartNoAxesColumn },
14019
- { id: "paper-wiki", label: "Paper Wiki", icon: BookMarked }
14069
+ { id: "paper-wiki", label: "Paper Wiki", icon: BookMarked },
14070
+ { id: "diagram", label: "Diagrams", icon: Image }
14020
14071
  ];
14021
14072
  const FOCUSABLE_SELECTOR = [
14022
14073
  "button:not([disabled])",
@@ -14108,6 +14159,7 @@ function SettingsModal({ open, onClose, initialTab }) {
14108
14159
  if (patch2.research) next.research = { ...prev.research, ...patch2.research };
14109
14160
  if (patch2.dataAnalysis) next.dataAnalysis = { ...prev.dataAnalysis, ...patch2.dataAnalysis };
14110
14161
  if (patch2.wikiAgent) next.wikiAgent = { ...prev.wikiAgent, ...patch2.wikiAgent };
14162
+ if (patch2.diagram) next.diagram = { ...prev.diagram, ...patch2.diagram };
14111
14163
  return next;
14112
14164
  });
14113
14165
  setDirty(true);
@@ -14218,6 +14270,13 @@ function SettingsModal({ open, onClose, initialTab }) {
14218
14270
  onChangeModel: (v3) => updateSettings({ wikiAgent: { ...settings.wikiAgent, model: v3 } }),
14219
14271
  onChangeSpeed: (v3) => updateSettings({ wikiAgent: { ...settings.wikiAgent, speed: v3 } })
14220
14272
  }
14273
+ ),
14274
+ activeTab === "diagram" && loaded && /* @__PURE__ */ jsxRuntimeExports.jsx(
14275
+ DiagramSettings,
14276
+ {
14277
+ reviewProvider: settings.diagram?.reviewProvider ?? "auto",
14278
+ onChangeReviewProvider: (v3) => updateSettings({ diagram: { reviewProvider: v3 } })
14279
+ }
14221
14280
  )
14222
14281
  ] }),
14223
14282
  activeTab !== "api-keys" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-6 py-2.5 border-t t-border-subtle", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] t-text-muted", children: "Settings are saved automatically. Changes to research and analysis settings take effect for new agent sessions. Existing sessions require an app restart." }) })
@@ -27650,7 +27709,6 @@ const TEXT_EXTENSIONS = /* @__PURE__ */ new Set([
27650
27709
  "ts",
27651
27710
  "js",
27652
27711
  "css",
27653
- "html",
27654
27712
  "yml",
27655
27713
  "yaml",
27656
27714
  "toml",
@@ -28976,9 +29034,6 @@ function EntityTabs() {
28976
29034
  const notes = useEntityStore((s15) => s15.notes);
28977
29035
  const data = useEntityStore((s15) => s15.data);
28978
29036
  const refreshAll = useEntityStore((s15) => s15.refreshAll);
28979
- reactExports.useEffect(() => {
28980
- refreshAll();
28981
- }, []);
28982
29037
  const handleTabKeyDown = (e) => {
28983
29038
  const tabKeys = tabs.map((t) => t.key);
28984
29039
  const idx = tabKeys.indexOf(leftTab);
@@ -32552,14 +32607,13 @@ function SortHeader({
32552
32607
  }
32553
32608
  );
32554
32609
  }
32555
- function PaperRow({
32556
- paper,
32610
+ const PaperRow = React$2.memo(function PaperRow2({
32611
+ row,
32557
32612
  expanded,
32558
- onToggle,
32559
- wikiSlug,
32560
32613
  isActive,
32561
- source = "project"
32614
+ onToggle
32562
32615
  }) {
32616
+ const { paper, source, wikiSlug } = row;
32563
32617
  const setWikiSlug = useUIStore((s15) => s15.setWikiReaderSlug);
32564
32618
  const authors = paper.authors || [];
32565
32619
  const authorStr = authors.length <= 3 ? authors.join(", ") : `${authors.slice(0, 2).join(", ")} et al.`;
@@ -32570,7 +32624,7 @@ function PaperRow({
32570
32624
  "div",
32571
32625
  {
32572
32626
  className: `flex items-center gap-3 px-3 py-2 transition-colors cursor-pointer ${isActive ? "bg-[var(--color-accent-soft)]/10" : "hover:bg-[var(--color-accent-soft)]/5"}`,
32573
- onClick: onToggle,
32627
+ onClick: () => onToggle(row),
32574
32628
  children: [
32575
32629
  /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "shrink-0 t-text-muted", children: expanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 14 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 14 }) }),
32576
32630
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
@@ -32651,7 +32705,7 @@ function PaperRow({
32651
32705
  ] })
32652
32706
  ] })
32653
32707
  ] });
32654
- }
32708
+ });
32655
32709
  function WikiStatusPill() {
32656
32710
  const [status, setStatus] = reactExports.useState(null);
32657
32711
  reactExports.useEffect(() => {
@@ -32830,6 +32884,14 @@ function LiteratureView() {
32830
32884
  const wikiReaderSlug = useUIStore((s15) => s15.wikiReaderSlug);
32831
32885
  const setWikiSlug = useUIStore((s15) => s15.setWikiReaderSlug);
32832
32886
  const [expandedKey, setExpandedKey] = reactExports.useState(null);
32887
+ const handleRowToggle = reactExports.useCallback((row) => {
32888
+ setExpandedKey((prev) => prev === row.key ? null : row.key);
32889
+ if (row.source === "wiki") {
32890
+ setWikiSlug(row.wikiSlug);
32891
+ } else {
32892
+ setWikiSlug(row.wikiSlug || `paper:${row.paper.id}`);
32893
+ }
32894
+ }, [setWikiSlug]);
32833
32895
  const [wikiSlugs, setWikiSlugs] = reactExports.useState({});
32834
32896
  const [wikiMeta, setWikiMeta] = reactExports.useState([]);
32835
32897
  reactExports.useEffect(() => {
@@ -33021,19 +33083,10 @@ function LiteratureView() {
33021
33083
  ] }) : filteredRows.map((row) => /* @__PURE__ */ jsxRuntimeExports.jsx(
33022
33084
  PaperRow,
33023
33085
  {
33024
- paper: row.paper,
33025
- source: row.source,
33086
+ row,
33026
33087
  expanded: expandedKey === row.key,
33027
33088
  isActive: activeRowKey === row.key,
33028
- onToggle: () => {
33029
- setExpandedKey(expandedKey === row.key ? null : row.key);
33030
- if (row.source === "wiki") {
33031
- setWikiSlug(row.wikiSlug);
33032
- } else {
33033
- setWikiSlug(row.wikiSlug || `paper:${row.paper.id}`);
33034
- }
33035
- },
33036
- wikiSlug: row.wikiSlug
33089
+ onToggle: handleRowToggle
33037
33090
  },
33038
33091
  row.key
33039
33092
  )) })
@@ -33500,7 +33553,6 @@ const NAVIGABLE_FILE_EXTS = /* @__PURE__ */ new Set([
33500
33553
  "ts",
33501
33554
  "js",
33502
33555
  "css",
33503
- "html",
33504
33556
  "yml",
33505
33557
  "yaml",
33506
33558
  "toml",
@@ -33521,7 +33573,7 @@ const NAVIGABLE_FILE_EXTS = /* @__PURE__ */ new Set([
33521
33573
  "gitignore"
33522
33574
  ]);
33523
33575
  const LazyMilkdownMarkdownEditor = reactExports.lazy(async () => {
33524
- const mod = await __vitePreload(() => import("./MilkdownMarkdownEditor-Bj7JSjF5.js").then((n) => n.bL), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
33576
+ const mod = await __vitePreload(() => import("./MilkdownMarkdownEditor-OhCrq3X0.js").then((n) => n.bL), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
33525
33577
  return { default: mod.MilkdownMarkdownEditor };
33526
33578
  });
33527
33579
  const typeIcons = {
@@ -43563,7 +43615,6 @@ function TipsBlock() {
43563
43615
  function FolderGate({ onOpenSettings }) {
43564
43616
  const pickFolder = useSessionStore((s15) => s15.pickFolder);
43565
43617
  const openPath = useSessionStore((s15) => s15.openPath);
43566
- const refreshEntities = useEntityStore((s15) => s15.refreshAll);
43567
43618
  const [recents, setRecents] = reactExports.useState([]);
43568
43619
  const [projectStats, setProjectStats] = reactExports.useState({});
43569
43620
  const [activeIndex, setActiveIndex] = reactExports.useState(0);
@@ -43599,22 +43650,20 @@ function FolderGate({ onOpenSettings }) {
43599
43650
  if (opening) return;
43600
43651
  setOpening(true);
43601
43652
  try {
43602
- const ok2 = await openPath(path2);
43603
- if (ok2) await refreshEntities();
43653
+ await openPath(path2);
43604
43654
  } finally {
43605
43655
  setOpening(false);
43606
43656
  }
43607
- }, [openPath, refreshEntities, opening]);
43657
+ }, [openPath, opening]);
43608
43658
  const handlePickNew = reactExports.useCallback(async () => {
43609
43659
  if (opening) return;
43610
43660
  setOpening(true);
43611
43661
  try {
43612
- const ok2 = await pickFolder();
43613
- if (ok2) await refreshEntities();
43662
+ await pickFolder();
43614
43663
  } finally {
43615
43664
  setOpening(false);
43616
43665
  }
43617
- }, [pickFolder, refreshEntities, opening]);
43666
+ }, [pickFolder, opening]);
43618
43667
  const handleRemove = reactExports.useCallback(async (path2) => {
43619
43668
  await api.removeRecentProject?.(path2);
43620
43669
  setRecents((prev) => {
@@ -43880,10 +43929,17 @@ function App() {
43880
43929
  const unsubSkillLoaded = api.onSkillLoaded((skillName) => {
43881
43930
  useActivityStore.getState().addSkill(skillName);
43882
43931
  });
43932
+ let entityRefreshTimer = null;
43933
+ const scheduleEntityRefresh = () => {
43934
+ if (entityRefreshTimer) clearTimeout(entityRefreshTimer);
43935
+ entityRefreshTimer = setTimeout(() => {
43936
+ entityRefreshTimer = null;
43937
+ refreshEntities();
43938
+ }, 300);
43939
+ };
43883
43940
  const unsub1 = api.onStreamChunk((chunk) => appendChunk(chunk));
43884
43941
  const unsub2 = api.onAgentDone((result) => {
43885
43942
  finalize(result);
43886
- refreshEntities();
43887
43943
  const text2 = result.response || "";
43888
43944
  const projectRoot = useSessionStore.getState().projectPath;
43889
43945
  const filePathRegex = /(?:^|\s)((?:[\w.-]+\/)+[\w.-]+\.\w+|(?:\/[\w.-]+)+\.\w+)/gm;
@@ -43911,7 +43967,7 @@ function App() {
43911
43967
  useUIStore.getState().addWorkingFile(path2);
43912
43968
  });
43913
43969
  const unsub6 = api.onEntityCreated(() => {
43914
- refreshEntities();
43970
+ scheduleEntityRefresh();
43915
43971
  });
43916
43972
  if (api?.isComputeEnabled?.()) {
43917
43973
  api.probeComputeEnvironment?.().catch(() => {
@@ -43927,6 +43983,7 @@ function App() {
43927
43983
  useComputeStore.getState().setEnvironment(event);
43928
43984
  });
43929
43985
  return () => {
43986
+ if (entityRefreshTimer) clearTimeout(entityRefreshTimer);
43930
43987
  unsub1();
43931
43988
  unsub2();
43932
43989
  unsub3();
@@ -1,6 +1,6 @@
1
- import { L as LRParser } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const jsonHighlighting = styleTags({
5
5
  String: tags.string,
6
6
  Number: tags.number,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags$1, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside, e as syntaxTree, aw as NodeWeakMap, I as IterMode } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags$1, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside, e as syntaxTree, aw as NodeWeakMap, I as IterMode } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const descendantOp = 122, Unit = 1, identifier$1 = 123, callee = 124, VariableName = 2, queryIdentifier = 125, queryVariableName = 3, QueryCallee = 4;
5
5
  const space = [
6
6
  9,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const RawString = 1, templateArgsEndFallback = 2, MacroName = 3;
5
5
  const R = 82, L = 76, u = 117, U = 85, a = 97, z = 122, A = 65, Z = 90, Underscore = 95, Zero = 48, Quote = 34, ParenL = 40, ParenR = 41, Space = 32, GreaterThan = 62;
6
6
  const rawString = new ExternalTokenizer((input) => {
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, b as ifNotIn, e as syntaxTree, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, aw as NodeWeakMap, I as IterMode, d as completeFromList, av as snippetCompletion } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, b as ifNotIn, e as syntaxTree, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, aw as NodeWeakMap, I as IterMode, d as completeFromList, av as snippetCompletion } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const printKeyword = 1, indent = 194, dedent = 195, newline$1 = 196, blankLineStart = 197, newlineBracketed = 198, eof = 199, stringContent = 200, Escape = 2, replacementStart = 3, stringEnd = 201, ParenL = 24, ParenthesizedExpression = 25, TupleExpression = 49, ComprehensionExpression = 50, BracketL = 55, ArrayExpression = 56, ArrayComprehensionExpression = 57, BraceL = 59, DictionaryExpression = 60, DictionaryComprehensionExpression = 61, SetExpression = 62, SetComprehensionExpression = 63, ArgList = 65, subscript = 238, String$1 = 71, stringStart = 241, stringStartD = 242, stringStartL = 243, stringStartLD = 244, stringStartR = 245, stringStartRD = 246, stringStartRL = 247, stringStartRLD = 248, FormatString = 72, stringStartF = 249, stringStartFD = 250, stringStartFL = 251, stringStartFLD = 252, stringStartFR = 253, stringStartFRD = 254, stringStartFRL = 255, stringStartFRLD = 256, FormatReplacement = 73, nestedFormatReplacement = 77, importList = 263, TypeParamList = 112, ParamList = 130, SequencePattern = 151, MappingPattern = 152, PatternArgList = 155;
5
5
  const newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46, braceOpen = 123, braceClose = 125, singleQuote = 39, doubleQuote = 34, backslash = 92, letter_o = 111, letter_x = 120, letter_N = 78, letter_u = 117, letter_U = 85;
6
6
  const bracketed = /* @__PURE__ */ new Set([
@@ -1,9 +1,9 @@
1
- import { L as LRParser, E as ExternalTokenizer } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import { html } from "./index-7dcVwInU.js";
4
- import "./index-CUsEKU8Q.js";
5
- import "./index-B5Mkpo9f.js";
6
- import "./index-K0o5fHYG.js";
1
+ import { L as LRParser, E as ExternalTokenizer } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import { html } from "./index-Cw1n3klA.js";
4
+ import "./index-C1YzkB4z.js";
5
+ import "./index-CPZaxR35.js";
6
+ import "./index-DkVFbCxC.js";
7
7
  const castOpen = 1, HeredocString = 2, interpolatedStringContent = 275, EscapeSequence = 3, afterInterpolation = 276, automaticSemicolon = 277, eof = 278, abstract = 4, and = 5, array = 6, as = 7, Boolean = 8, _break = 9, _case = 10, _catch = 11, clone = 12, _const = 13, _continue = 14, _default = 15, declare = 16, _do = 17, echo = 18, _else = 19, elseif = 20, enddeclare = 21, endfor = 22, endforeach = 23, endif = 24, endswitch = 25, endwhile = 26, _enum = 27, _extends = 28, final = 29, _finally = 30, fn = 31, _for = 32, foreach = 33, from = 34, _function = 35, global = 36, goto = 37, _if = 38, _implements = 39, include = 40, include_once = 41, _instanceof = 42, insteadof = 43, _interface = 44, list = 45, match = 46, namespace = 47, _new = 48, _null = 49, or = 50, print = 51, readonly = 52, _require = 53, require_once = 54, _return = 55, _switch = 56, _throw = 57, trait = 58, _try = 59, unset = 60, use = 61, _var = 62, Visibility = 63, _while = 64, xor = 65, _yield = 66;
8
8
  const keywordMap = {
9
9
  abstract,
@@ -1,8 +1,8 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-BgAs-p8D.js";
2
- import { p as parseMixed, s as styleTags, t as tags, E as EditorView, e as syntaxTree, g as EditorSelection, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, f as foldNodeProp, aK as bracketMatchingHandle } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import { cssLanguage, css } from "./index-B5Mkpo9f.js";
4
- import { typescriptLanguage, jsxLanguage, tsxLanguage, javascriptLanguage, javascript } from "./index-K0o5fHYG.js";
5
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-vfSerSmF.js";
2
+ import { p as parseMixed, s as styleTags, t as tags, E as EditorView, e as syntaxTree, g as EditorSelection, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, f as foldNodeProp, aK as bracketMatchingHandle } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import { cssLanguage, css } from "./index-CPZaxR35.js";
4
+ import { typescriptLanguage, jsxLanguage, tsxLanguage, javascriptLanguage, javascript } from "./index-DkVFbCxC.js";
5
+ import "./index-C1YzkB4z.js";
6
6
  const scriptText = 55, StartCloseScriptTag = 1, styleText = 56, StartCloseStyleTag = 2, textareaText = 57, StartCloseTextareaTag = 3, EndTag = 4, SelfClosingEndTag = 5, StartTag = 6, StartScriptTag = 7, StartStyleTag = 8, StartTextareaTag = 9, StartSelfClosingTag = 10, StartCloseTag = 11, NoMatchStartCloseTag = 12, MismatchedStartCloseTag = 13, missingCloseTag = 58, IncompleteTag = 14, IncompleteCloseTag = 15, commentContent$1 = 59, Element = 21, TagName = 23, Attribute = 24, AttributeName = 25, AttributeValue = 27, UnquotedAttributeValue = 28, ScriptText = 29, StyleText = 32, TextareaText = 35, OpenTag = 37, CloseTag = 38, Dialect_noMatch = 0, Dialect_selfClosing = 1;
7
7
  const selfClosers$1 = {
8
8
  area: true,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer } from "./index-BgAs-p8D.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
- import "./index-CUsEKU8Q.js";
1
+ import { L as LRParser, E as ExternalTokenizer } from "./index-vfSerSmF.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-OhCrq3X0.js";
3
+ import "./index-C1YzkB4z.js";
4
4
  const closureParamDelim = 1, tpOpen = 2, tpClose = 3, RawString = 4, Float = 5;
5
5
  const _b = 98, _e = 101, _f = 102, _r = 114, _E = 69, Zero = 48, Dot = 46, Plus = 43, Minus = 45, Hash = 35, Quote = 34, Pipe = 124, LessThan = 60, GreaterThan = 62;
6
6
  function isNum(ch) {