research-copilot 0.2.16 → 0.2.20

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 (70) hide show
  1. package/README.md +6 -0
  2. package/app/out/main/index.mjs +124 -7
  3. package/app/out/preload/index.js +2 -0
  4. package/app/out/renderer/assets/{MilkdownMarkdownEditor-CuTa5j4S.js → MilkdownMarkdownEditor-Bj7JSjF5.js} +93 -51
  5. package/app/out/renderer/assets/{MilkdownMarkdownEditor-tTNRIB2K.css → MilkdownMarkdownEditor-CCdZ2mtg.css} +88 -15
  6. package/app/out/renderer/assets/{arc-BAWS3N-F.js → arc-CPL9nDFE.js} +1 -1
  7. package/app/out/renderer/assets/{blockDiagram-c4efeb88-BHadwPqY.js → blockDiagram-c4efeb88-BFOajDNs.js} +8 -8
  8. package/app/out/renderer/assets/{c4Diagram-c83219d4-B3kOxRad.js → c4Diagram-c83219d4-LeqnQ2-5.js} +3 -3
  9. package/app/out/renderer/assets/{channel-Bll9CBqI.js → channel-jk5Np8ud.js} +1 -1
  10. package/app/out/renderer/assets/{classDiagram-beda092f-Dv7owGyx.js → classDiagram-beda092f-CxOqB6OU.js} +6 -6
  11. package/app/out/renderer/assets/{classDiagram-v2-2358418a-cWrqk5tQ.js → classDiagram-v2-2358418a-CyP_5qLa.js} +10 -10
  12. package/app/out/renderer/assets/{clone-D-DQ4nnY.js → clone-PHFwh58n.js} +1 -1
  13. package/app/out/renderer/assets/{createText-1719965b-ciE8YuqI.js → createText-1719965b-CE_0jsfj.js} +2 -2
  14. package/app/out/renderer/assets/{edges-96097737-DycnAYk_.js → edges-96097737-DBk1JhZS.js} +3 -3
  15. package/app/out/renderer/assets/{erDiagram-0228fc6a-Sv78YNMY.js → erDiagram-0228fc6a-DnR_LkSB.js} +5 -5
  16. package/app/out/renderer/assets/{flowDb-c6c81e3f-BiOarg9b.js → flowDb-c6c81e3f-CJrZUKlS.js} +1 -1
  17. package/app/out/renderer/assets/{flowDiagram-50d868cf-19J80nxU.js → flowDiagram-50d868cf-CfNfrt17.js} +12 -12
  18. package/app/out/renderer/assets/{flowDiagram-v2-4f6560a1-c-kGsubV.js → flowDiagram-v2-4f6560a1-BGQtiK3j.js} +12 -12
  19. package/app/out/renderer/assets/{flowchart-elk-definition-6af322e1-DRrYbiSC.js → flowchart-elk-definition-6af322e1-BXLraghz.js} +6 -6
  20. package/app/out/renderer/assets/{ganttDiagram-a2739b55-BadmpvMy.js → ganttDiagram-a2739b55-CAwaEMMm.js} +3 -3
  21. package/app/out/renderer/assets/{gitGraphDiagram-82fe8481-BdVoj60Q.js → gitGraphDiagram-82fe8481-vuSEC6ny.js} +2 -2
  22. package/app/out/renderer/assets/{graph-jZhookGR.js → graph-CZfltE7S.js} +1 -1
  23. package/app/out/renderer/assets/{index-5325376f-CbxmatXv.js → index-5325376f-DWTrHDEo.js} +6 -6
  24. package/app/out/renderer/assets/{index-DEO9Jh2Y.js → index-7dcVwInU.js} +5 -5
  25. package/app/out/renderer/assets/{index-BTE0dEKO.js → index-B4V7cFWJ.js} +6 -6
  26. package/app/out/renderer/assets/{index-DQwFQR1s.js → index-B5Mkpo9f.js} +3 -3
  27. package/app/out/renderer/assets/{index-CirXkIv2.js → index-B6f2bVW_.js} +3 -3
  28. package/app/out/renderer/assets/{index-DO5LsHlM.js → index-BgAs-p8D.js} +1 -1
  29. package/app/out/renderer/assets/{index-DOUTte7i.js → index-BpdWQuss.js} +3 -3
  30. package/app/out/renderer/assets/{index-B9kkJj3J.js → index-C2tqvXjC.js} +6 -6
  31. package/app/out/renderer/assets/{index-D-ZMmLhv.js → index-CMfKxpBP.js} +3 -3
  32. package/app/out/renderer/assets/{index-B2UUF9y9.js → index-CUsEKU8Q.js} +1199 -386
  33. package/app/out/renderer/assets/{index-BXpNbFhG.js → index-CaYWMBXT.js} +3 -3
  34. package/app/out/renderer/assets/{index-47oNNEnx.js → index-Cc9coKGN.js} +6 -6
  35. package/app/out/renderer/assets/{index-lAZsmnj1.css → index-CogwQwDN.css} +185 -32
  36. package/app/out/renderer/assets/{index-CAlpJ3-o.js → index-CwPfquqm.js} +4 -4
  37. package/app/out/renderer/assets/{index-CZX0435B.js → index-CyDfvefg.js} +6 -6
  38. package/app/out/renderer/assets/{index-BUcSHPha.js → index-DB8ImtMy.js} +3 -3
  39. package/app/out/renderer/assets/{index-B8fh500_.js → index-DIZJXKQ6.js} +3 -3
  40. package/app/out/renderer/assets/{index-CMGDsC_t.js → index-D_7yOLk3.js} +6 -6
  41. package/app/out/renderer/assets/{index-B110aKST.js → index-Di3HmXc-.js} +3 -3
  42. package/app/out/renderer/assets/{index-HCRA2-Q6.js → index-DiCqe1UR.js} +6 -6
  43. package/app/out/renderer/assets/{index-BWCwSkxb.js → index-DpXI4mHb.js} +3 -3
  44. package/app/out/renderer/assets/{index-cavFRVgM.js → index-EaGZvaBp.js} +3 -3
  45. package/app/out/renderer/assets/{index-DF_C6DjR.js → index-K0o5fHYG.js} +3 -3
  46. package/app/out/renderer/assets/{index-BBUnWjLe.js → index-Ul-Kq9b2.js} +3 -3
  47. package/app/out/renderer/assets/{index-g91Iwgxa.js → index-t0-md-MG.js} +4 -4
  48. package/app/out/renderer/assets/{infoDiagram-8eee0895-DpVt3Scv.js → infoDiagram-8eee0895-BmPESCfj.js} +2 -2
  49. package/app/out/renderer/assets/{journeyDiagram-c64418c1-RYKX5mcV.js → journeyDiagram-c64418c1-BGsCbfr_.js} +4 -4
  50. package/app/out/renderer/assets/{layout-BsbNXXgR.js → layout-5MwFTPs7.js} +2 -2
  51. package/app/out/renderer/assets/{line-OzQTpJsh.js → line-D0U74KO0.js} +1 -1
  52. package/app/out/renderer/assets/{linear-DO5pdnqi.js → linear-BclyBoiT.js} +1 -1
  53. package/app/out/renderer/assets/{mindmap-definition-8da855dc-D3zWs3h1.js → mindmap-definition-8da855dc-un1bPKBj.js} +3 -3
  54. package/app/out/renderer/assets/{pieDiagram-a8764435-DDoNhSgQ.js → pieDiagram-a8764435-B7KM3duv.js} +3 -3
  55. package/app/out/renderer/assets/{quadrantDiagram-1e28029f-ZO85SsRM.js → quadrantDiagram-1e28029f-C8i5m3Os.js} +3 -3
  56. package/app/out/renderer/assets/{requirementDiagram-08caed73-C-vKE6g8.js → requirementDiagram-08caed73-FjqENNN5.js} +5 -5
  57. package/app/out/renderer/assets/{sankeyDiagram-a04cb91d-Cbqb2K-X.js → sankeyDiagram-a04cb91d-BKV22yuJ.js} +2 -2
  58. package/app/out/renderer/assets/{sequenceDiagram-c5b8d532-BK4uvpEA.js → sequenceDiagram-c5b8d532-DWO-Z2i3.js} +3 -3
  59. package/app/out/renderer/assets/{stateDiagram-1ecb1508-DXa_YqNi.js → stateDiagram-1ecb1508-BqohgALA.js} +6 -6
  60. package/app/out/renderer/assets/{stateDiagram-v2-c2b004d7-Dm203Z8l.js → stateDiagram-v2-c2b004d7-B3sEkrB8.js} +10 -10
  61. package/app/out/renderer/assets/{styles-b4e223ce-BV4b1eAh.js → styles-b4e223ce-BGytHk8n.js} +1 -1
  62. package/app/out/renderer/assets/{styles-ca3715f6-CKhYSe7r.js → styles-ca3715f6-B0PvBknL.js} +1 -1
  63. package/app/out/renderer/assets/{styles-d45a18b0-DTCMfE-4.js → styles-d45a18b0-C6F384ai.js} +4 -4
  64. package/app/out/renderer/assets/{svgDrawCommon-b86b1483-DK4i-dfJ.js → svgDrawCommon-b86b1483-BXgThwM_.js} +1 -1
  65. package/app/out/renderer/assets/{timeline-definition-faaaa080-CE2LmuDH.js → timeline-definition-faaaa080-iNn5igPR.js} +3 -3
  66. package/app/out/renderer/assets/{xychartDiagram-f5964ef8-Bd8KT9X9.js → xychartDiagram-f5964ef8-oF_gxlk1.js} +5 -5
  67. package/app/out/renderer/index.html +2 -2
  68. package/package.json +2 -1
  69. package/scripts/backfill-papers.mjs +142 -0
  70. package/scripts/fix-node-pty-perms.mjs +32 -0
@@ -1,6 +1,6 @@
1
1
  import { a as array } from "./array-DgktLKBx.js";
2
2
  import { w as withPath, c as constant } from "./path-Cp2qmpkd.js";
3
- import { an as curveLinear } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
3
+ import { an as curveLinear } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
4
4
  function x(p) {
5
5
  return p[0];
6
6
  }
@@ -1,4 +1,4 @@
1
- import { a_ as constant, a$ as interpolateNumber, b0 as color, b1 as interpolateRgb, b2 as interpolateString } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
1
+ import { a_ as constant, a$ as interpolateNumber, b0 as color, b1 as interpolateRgb, b2 as interpolateString } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
2
  import { i as initRange } from "./init-ZxktEp_H.js";
3
3
  function ascending(a, b) {
4
4
  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
@@ -1,6 +1,6 @@
1
- import { v as log$1, r as getConfig, Z as selectSvgElement, ak as setupGraphViewbox$1, ab as defaultConfig$2, z as sanitizeText$2, aq as isDark, ar as lighten, as as darken, u as select, af as parseFontSize } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { c as commonjsGlobal$1, g as getDefaultExportFromCjs$1 } from "./index-B2UUF9y9.js";
3
- import { c as createText } from "./createText-1719965b-ciE8YuqI.js";
1
+ import { v as log$1, r as getConfig, Z as selectSvgElement, ak as setupGraphViewbox$1, ab as defaultConfig$2, z as sanitizeText$2, aq as isDark, ar as lighten, as as darken, u as select, af as parseFontSize } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { c as commonjsGlobal$1, g as getDefaultExportFromCjs$1 } from "./index-CUsEKU8Q.js";
3
+ import { c as createText } from "./createText-1719965b-CE_0jsfj.js";
4
4
  function _arrayLikeToArray(r, a) {
5
5
  (null == a || a > r.length) && (a = r.length);
6
6
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
@@ -1,9 +1,9 @@
1
- import { a3 as tau, n as getAccDescription, m as setAccDescription, o as getAccTitle, q as setAccTitle, H as getDiagramTitle, J as setDiagramTitle, v as log$1, r as getConfig$1, aM as cleanAndMerge, Z as selectSvgElement, af as parseFontSize, w as configureSvgSize, z as sanitizeText$2, M as clear$1, ab as defaultConfig$2 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { a as arc } from "./arc-BAWS3N-F.js";
1
+ import { a3 as tau, n as getAccDescription, m as setAccDescription, o as getAccTitle, q as setAccTitle, H as getDiagramTitle, J as setDiagramTitle, v as log$1, r as getConfig$1, aM as cleanAndMerge, Z as selectSvgElement, af as parseFontSize, w as configureSvgSize, z as sanitizeText$2, M as clear$1, ab as defaultConfig$2 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { a as arc } from "./arc-CPL9nDFE.js";
3
3
  import { o as ordinal } from "./ordinal-DSZU4PqD.js";
4
4
  import { a as array } from "./array-DgktLKBx.js";
5
5
  import { c as constant } from "./path-Cp2qmpkd.js";
6
- import "./index-B2UUF9y9.js";
6
+ import "./index-CUsEKU8Q.js";
7
7
  import "./init-ZxktEp_H.js";
8
8
  function descending(a, b) {
9
9
  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
@@ -1,6 +1,6 @@
1
- import { m as setAccDescription, n as getAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, r as getConfig, v as log$1, u as select, w as configureSvgSize, M as clear$1, ab as defaultConfig$2, z as sanitizeText$2, ac as getThemeVariables$2 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { l as linear } from "./linear-DO5pdnqi.js";
3
- import "./index-B2UUF9y9.js";
1
+ import { m as setAccDescription, n as getAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, r as getConfig, v as log$1, u as select, w as configureSvgSize, M as clear$1, ab as defaultConfig$2, z as sanitizeText$2, ac as getThemeVariables$2 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { l as linear } from "./linear-BclyBoiT.js";
3
+ import "./index-CUsEKU8Q.js";
4
4
  import "./init-ZxktEp_H.js";
5
5
  var parser = function() {
6
6
  var o = function(k, v, o2, l) {
@@ -1,8 +1,8 @@
1
- import { n as getAccDescription, m as setAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, u as select, w as configureSvgSize, M as clear$1, v as log$1, C as common$1 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { G as Graph } from "./graph-jZhookGR.js";
3
- import { l as layout } from "./layout-BsbNXXgR.js";
4
- import { l as line } from "./line-OzQTpJsh.js";
5
- import "./index-B2UUF9y9.js";
1
+ import { n as getAccDescription, m as setAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, u as select, w as configureSvgSize, M as clear$1, v as log$1, C as common$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { G as Graph } from "./graph-CZfltE7S.js";
3
+ import { l as layout } from "./layout-5MwFTPs7.js";
4
+ import { l as line } from "./line-D0U74KO0.js";
5
+ import "./index-CUsEKU8Q.js";
6
6
  import "./array-DgktLKBx.js";
7
7
  import "./path-Cp2qmpkd.js";
8
8
  var parser = function() {
@@ -1,7 +1,7 @@
1
- import { J as setDiagramTitle, H as getDiagramTitle, m as setAccDescription, n as getAccDescription, q as setAccTitle, o as getAccTitle, r as getConfig, K as defaultConfig, u as select, ak as setupGraphViewbox$1, M as clear$1, C as common$1 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
1
+ import { J as setDiagramTitle, H as getDiagramTitle, m as setAccDescription, n as getAccDescription, q as setAccTitle, o as getAccTitle, r as getConfig, K as defaultConfig, u as select, ak as setupGraphViewbox$1, M as clear$1, C as common$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
2
  import { o as ordinal } from "./ordinal-DSZU4PqD.js";
3
3
  import { s as schemeTableau10 } from "./Tableau10-BqnYsPR6.js";
4
- import "./index-B2UUF9y9.js";
4
+ import "./index-CUsEKU8Q.js";
5
5
  import "./init-ZxktEp_H.js";
6
6
  function max(values, valueof) {
7
7
  let max2;
@@ -1,6 +1,6 @@
1
- import { n as getAccDescription, m as setAccDescription, q as setAccTitle, J as setDiagramTitle, H as getDiagramTitle, o as getAccTitle, r as getConfig, u as select, v as log$1, A as dist, w as configureSvgSize, x as assignWithDepth$1, C as common$1, z as sanitizeText$2, M as clear$1, O as utils, ad as hasKatex, ae as calculateMathMLDimensions, af as parseFontSize, ag as ZERO_WIDTH_SPACE, ah as renderKatexSanitized, ai as getConfig$1 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { a as drawBackgroundRect$1, d as drawRect$1, b as getTextObj$1, c as drawEmbeddedImage, e as drawImage, g as getNoteRect$1 } from "./svgDrawCommon-b86b1483-DK4i-dfJ.js";
3
- import "./index-B2UUF9y9.js";
1
+ import { n as getAccDescription, m as setAccDescription, q as setAccTitle, J as setDiagramTitle, H as getDiagramTitle, o as getAccTitle, r as getConfig, u as select, v as log$1, A as dist, w as configureSvgSize, x as assignWithDepth$1, C as common$1, z as sanitizeText$2, M as clear$1, O as utils, ad as hasKatex, ae as calculateMathMLDimensions, af as parseFontSize, ag as ZERO_WIDTH_SPACE, ah as renderKatexSanitized, ai as getConfig$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { a as drawBackgroundRect$1, d as drawRect$1, b as getTextObj$1, c as drawEmbeddedImage, e as drawImage, g as getNoteRect$1 } from "./svgDrawCommon-b86b1483-BXgThwM_.js";
3
+ import "./index-CUsEKU8Q.js";
4
4
  var parser = function() {
5
5
  var o = function(k, v, o2, l) {
6
6
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
@@ -1,9 +1,9 @@
1
- import { s as styles, d as db, p as parser$1 } from "./styles-ca3715f6-CKhYSe7r.js";
2
- import { r as getConfig, u as select, v as log$1, w as configureSvgSize, C as common$1, R as curveBasis, O as utils } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
3
- import { G as Graph } from "./graph-jZhookGR.js";
4
- import { l as layout } from "./layout-BsbNXXgR.js";
5
- import { l as line } from "./line-OzQTpJsh.js";
6
- import "./index-B2UUF9y9.js";
1
+ import { s as styles, d as db, p as parser$1 } from "./styles-ca3715f6-B0PvBknL.js";
2
+ import { r as getConfig, u as select, v as log$1, w as configureSvgSize, C as common$1, R as curveBasis, O as utils } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
3
+ import { G as Graph } from "./graph-CZfltE7S.js";
4
+ import { l as layout } from "./layout-5MwFTPs7.js";
5
+ import { l as line } from "./line-D0U74KO0.js";
6
+ import "./index-CUsEKU8Q.js";
7
7
  import "./array-DgktLKBx.js";
8
8
  import "./path-Cp2qmpkd.js";
9
9
  const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", getConfig().state.sizeUnit).attr("cx", getConfig().state.padding + getConfig().state.sizeUnit).attr("cy", getConfig().state.padding + getConfig().state.sizeUnit);
@@ -1,13 +1,13 @@
1
- import { s as styles, d as db, p as parser$1, D as DEFAULT_NESTED_DOC_DIR, a as DEFAULT_STATE_TYPE, b as DIVIDER_TYPE, S as STMT_RELATION, c as STMT_STATE } from "./styles-ca3715f6-CKhYSe7r.js";
2
- import { G as Graph } from "./graph-jZhookGR.js";
3
- import { v as log$1, r as getConfig, u as select, O as utils, w as configureSvgSize, C as common$1 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
4
- import { r as render } from "./index-5325376f-CbxmatXv.js";
5
- import "./layout-BsbNXXgR.js";
6
- import "./index-B2UUF9y9.js";
7
- import "./clone-D-DQ4nnY.js";
8
- import "./edges-96097737-DycnAYk_.js";
9
- import "./createText-1719965b-ciE8YuqI.js";
10
- import "./line-OzQTpJsh.js";
1
+ import { s as styles, d as db, p as parser$1, D as DEFAULT_NESTED_DOC_DIR, a as DEFAULT_STATE_TYPE, b as DIVIDER_TYPE, S as STMT_RELATION, c as STMT_STATE } from "./styles-ca3715f6-B0PvBknL.js";
2
+ import { G as Graph } from "./graph-CZfltE7S.js";
3
+ import { v as log$1, r as getConfig, u as select, O as utils, w as configureSvgSize, C as common$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
4
+ import { r as render } from "./index-5325376f-DWTrHDEo.js";
5
+ import "./layout-5MwFTPs7.js";
6
+ import "./index-CUsEKU8Q.js";
7
+ import "./clone-PHFwh58n.js";
8
+ import "./edges-96097737-DBk1JhZS.js";
9
+ import "./createText-1719965b-CE_0jsfj.js";
10
+ import "./line-D0U74KO0.js";
11
11
  import "./array-DgktLKBx.js";
12
12
  import "./path-Cp2qmpkd.js";
13
13
  const SHAPE_STATE = "rect";
@@ -1,4 +1,4 @@
1
- import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, C as common$1, O as utils, v as log$1, M as clear$1, z as sanitizeText$2, aj as parseGenericTypes, u as select } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
1
+ import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, o as getAccTitle, q as setAccTitle, r as getConfig, C as common$1, O as utils, v as log$1, M as clear$1, z as sanitizeText$2, aj as parseGenericTypes, u as select } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
2
  var parser = function() {
3
3
  var o = function(k, v, o2, l) {
4
4
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
@@ -1,4 +1,4 @@
1
- import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, q as setAccTitle, o as getAccTitle, r as getConfig, C as common$1, v as log$1, M as clear$1, ao as generateId } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
1
+ import { H as getDiagramTitle, J as setDiagramTitle, m as setAccDescription, n as getAccDescription, q as setAccTitle, o as getAccTitle, r as getConfig, C as common$1, v as log$1, M as clear$1, ao as generateId } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
2
  var parser = function() {
3
3
  var o = function(k, v, o2, l) {
4
4
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
@@ -1,7 +1,7 @@
1
- import { aN as Selection, aO as root, aP as array, aQ as isPlainObject, aR as isFunction, v as log$1, r as getConfig, u as select, O as utils, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, an as curveLinear, ah as renderKatexSanitized, C as common$1, S as evaluate, at as rgba } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { G as Graph } from "./graph-jZhookGR.js";
3
- import { r as render } from "./index-5325376f-CbxmatXv.js";
4
- import { c as channel } from "./channel-Bll9CBqI.js";
1
+ import { aN as Selection, aO as root, aP as array, aQ as isPlainObject, aR as isFunction, v as log$1, r as getConfig, u as select, O as utils, ak as setupGraphViewbox$1, al as getStylesFromArray, am as interpolateToCurve, an as curveLinear, ah as renderKatexSanitized, C as common$1, S as evaluate, at as rgba } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { G as Graph } from "./graph-CZfltE7S.js";
3
+ import { r as render } from "./index-5325376f-DWTrHDEo.js";
4
+ import { c as channel } from "./channel-jk5Np8ud.js";
5
5
  function selectAll(selector) {
6
6
  return typeof selector === "string" ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) : new Selection([array(selector)], root);
7
7
  }
@@ -1,4 +1,4 @@
1
- import { G as lineBreakRegex, A as dist } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
1
+ import { G as lineBreakRegex, A as dist } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
2
  const drawRect = (element, rectData) => {
3
3
  const rectElement = element.append("rect");
4
4
  rectElement.attr("x", rectData.x);
@@ -1,6 +1,6 @@
1
- import { r as getConfig, v as log$1, u as select, ak as setupGraphViewbox$1, ap as commonDb, aq as isDark, ar as lighten, as as darken, M as clear$1 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { a as arc } from "./arc-BAWS3N-F.js";
3
- import "./index-B2UUF9y9.js";
1
+ import { r as getConfig, v as log$1, u as select, ak as setupGraphViewbox$1, ap as commonDb, aq as isDark, ar as lighten, as as darken, M as clear$1 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { a as arc } from "./arc-CPL9nDFE.js";
3
+ import "./index-CUsEKU8Q.js";
4
4
  import "./path-Cp2qmpkd.js";
5
5
  var parser = function() {
6
6
  var o = function(k, v, o2, l) {
@@ -1,10 +1,10 @@
1
- import { m as setAccDescription, n as getAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, v as log$1, Z as selectSvgElement, w as configureSvgSize, M as clear$1, ai as getConfig$1, z as sanitizeText$2, aM as cleanAndMerge, ab as defaultConfig$2, ac as getThemeVariables$2 } from "./MilkdownMarkdownEditor-CuTa5j4S.js";
2
- import { a as computeDimensionOfText } from "./createText-1719965b-ciE8YuqI.js";
1
+ import { m as setAccDescription, n as getAccDescription, H as getDiagramTitle, J as setDiagramTitle, o as getAccTitle, q as setAccTitle, v as log$1, Z as selectSvgElement, w as configureSvgSize, M as clear$1, ai as getConfig$1, z as sanitizeText$2, aM as cleanAndMerge, ab as defaultConfig$2, ac as getThemeVariables$2 } from "./MilkdownMarkdownEditor-Bj7JSjF5.js";
2
+ import { a as computeDimensionOfText } from "./createText-1719965b-CE_0jsfj.js";
3
3
  import { i as initRange } from "./init-ZxktEp_H.js";
4
4
  import { o as ordinal } from "./ordinal-DSZU4PqD.js";
5
- import { l as linear } from "./linear-DO5pdnqi.js";
6
- import { l as line } from "./line-OzQTpJsh.js";
7
- import "./index-B2UUF9y9.js";
5
+ import { l as linear } from "./linear-BclyBoiT.js";
6
+ import { l as line } from "./line-D0U74KO0.js";
7
+ import "./index-CUsEKU8Q.js";
8
8
  import "./array-DgktLKBx.js";
9
9
  import "./path-Cp2qmpkd.js";
10
10
  function range(start, stop, step) {
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Research Pilot</title>
7
- <script type="module" crossorigin src="./assets/index-B2UUF9y9.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-lAZsmnj1.css">
7
+ <script type="module" crossorigin src="./assets/index-CUsEKU8Q.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-CogwQwDN.css">
9
9
  </head>
10
10
  <body class="overflow-hidden">
11
11
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "research-copilot",
3
- "version": "0.2.16",
3
+ "version": "0.2.20",
4
4
  "description": "AI-powered research assistant for scientists — literature search, data analysis, academic writing, and project management",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,6 +12,7 @@
12
12
  "app/build/",
13
13
  "app/package.json",
14
14
  "lib/skills/",
15
+ "scripts/",
15
16
  "README.md",
16
17
  "LICENSE"
17
18
  ],
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+ // Backfill paper artifacts from existing literature-run review.json files.
3
+ // Usage: node scripts/backfill-papers.mjs <projectPath>
4
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync, existsSync } from 'fs'
5
+ import { join } from 'path'
6
+ import { randomUUID } from 'crypto'
7
+
8
+ const projectPath = process.argv[2]
9
+ if (!projectPath) {
10
+ console.error('Usage: node scripts/backfill-papers.mjs <projectPath>')
11
+ process.exit(1)
12
+ }
13
+
14
+ const litRunsDir = join(projectPath, '.research-pilot/literature-runs')
15
+ const papersDir = join(projectPath, '.research-pilot/artifacts/papers')
16
+ mkdirSync(papersDir, { recursive: true })
17
+
18
+ // Load existing papers for dedup
19
+ const existingPapers = []
20
+ if (existsSync(papersDir)) {
21
+ for (const f of readdirSync(papersDir)) {
22
+ if (!f.endsWith('.json')) continue
23
+ try {
24
+ const p = JSON.parse(readFileSync(join(papersDir, f), 'utf-8'))
25
+ existingPapers.push(p)
26
+ } catch {}
27
+ }
28
+ }
29
+
30
+ function normalizeTitle(t) {
31
+ return t.toLowerCase().replace(/[^\w\s]/g, ' ').replace(/\s+/g, ' ').trim()
32
+ }
33
+
34
+ function isDuplicate(title, year) {
35
+ const nt = normalizeTitle(title)
36
+ return existingPapers.some(p => {
37
+ const pt = normalizeTitle(p.title)
38
+ if (pt !== nt) return false
39
+ if (!year || !p.year) return true
40
+ return p.year === year
41
+ })
42
+ }
43
+
44
+ function generateCiteKey(authors, year) {
45
+ const firstAuthor = (authors?.[0] ?? 'unknown').split(/\s+/).pop()?.toLowerCase() ?? 'unknown'
46
+ return `${firstAuthor}${year ?? 'nd'}`
47
+ }
48
+
49
+ const AUTO_SAVE_THRESHOLD = 7
50
+ let saved = 0
51
+ let skippedDup = 0
52
+ let skippedScore = 0
53
+
54
+ if (!existsSync(litRunsDir)) {
55
+ console.error(`No literature-runs dir at ${litRunsDir}`)
56
+ process.exit(1)
57
+ }
58
+
59
+ const runs = readdirSync(litRunsDir)
60
+ for (const runId of runs) {
61
+ const reviewPath = join(litRunsDir, runId, 'review.json')
62
+ if (!existsSync(reviewPath)) continue
63
+
64
+ let data
65
+ try {
66
+ data = JSON.parse(readFileSync(reviewPath, 'utf-8'))
67
+ } catch { continue }
68
+
69
+ const papers = data.review?.relevantPapers ?? []
70
+ const subTopics = data.plan?.subTopics ?? []
71
+ const roundLabel = `R-${runId}`
72
+
73
+ for (const paper of papers) {
74
+ if ((paper.relevanceScore ?? 0) < AUTO_SAVE_THRESHOLD) {
75
+ skippedScore++
76
+ continue
77
+ }
78
+ if (isDuplicate(paper.title, paper.year)) {
79
+ skippedDup++
80
+ continue
81
+ }
82
+
83
+ const authors = paper.authors?.length > 0 ? paper.authors : ['Unknown']
84
+ const citeKey = generateCiteKey(authors, paper.year)
85
+ const doi = (paper.doi ?? '').trim() || `unknown:${citeKey}`
86
+ const now = new Date().toISOString()
87
+ const id = randomUUID()
88
+
89
+ // Match subtopic
90
+ const matchedSubTopic = subTopics.find(st =>
91
+ paper.relevanceJustification?.toLowerCase().includes(st.name.toLowerCase())
92
+ )?.name
93
+
94
+ const artifact = {
95
+ id,
96
+ type: 'paper',
97
+ title: paper.title,
98
+ authors,
99
+ abstract: paper.abstract ?? '',
100
+ citeKey,
101
+ doi,
102
+ bibtex: `@article{${citeKey},\n title = {${paper.title}},\n author = {${authors.join(' and ')}},${paper.year ? `\n year = {${paper.year}},` : ''}${paper.venue ? `\n journal = {${paper.venue}},` : ''}${doi ? `\n doi = {${doi}},` : ''}${paper.url ? `\n url = {${paper.url}},` : ''}\n}`,
103
+ year: paper.year ?? undefined,
104
+ venue: paper.venue ?? undefined,
105
+ url: paper.url ?? undefined,
106
+ tags: [],
107
+ provenance: {
108
+ source: 'agent',
109
+ sessionId: 'backfill',
110
+ agentId: 'literature-team',
111
+ extractedFrom: 'agent-response'
112
+ },
113
+ createdAt: now,
114
+ updatedAt: now,
115
+ externalSource: paper.source,
116
+ relevanceScore: paper.relevanceScore,
117
+ citationCount: paper.citationCount ?? undefined,
118
+ relevanceJustification: paper.relevanceJustification,
119
+ subTopic: matchedSubTopic,
120
+ addedInRound: roundLabel,
121
+ addedByTask: 'deep_literature_study',
122
+ identityConfidence: paper.doi ? 'high' : 'medium',
123
+ semanticScholarId: paper.source === 'semantic_scholar' ? paper.id : undefined,
124
+ arxivId: paper.source === 'arxiv' ? paper.id : undefined,
125
+ }
126
+
127
+ // Remove undefined keys for clean JSON
128
+ for (const [k, v] of Object.entries(artifact)) {
129
+ if (v === undefined) delete artifact[k]
130
+ }
131
+
132
+ const filePath = join(papersDir, `${id}.json`)
133
+ writeFileSync(filePath, JSON.stringify(artifact, null, 2), 'utf-8')
134
+
135
+ // Track for dedup within this run
136
+ existingPapers.push(artifact)
137
+ saved++
138
+ console.log(` + ${paper.title.slice(0, 80)} (score: ${paper.relevanceScore})`)
139
+ }
140
+ }
141
+
142
+ console.log(`\nDone: ${saved} papers saved, ${skippedDup} duplicates skipped, ${skippedScore} below threshold (< ${AUTO_SAVE_THRESHOLD})`)
@@ -0,0 +1,32 @@
1
+ import { chmodSync, readdirSync, statSync } from 'node:fs'
2
+ import { createRequire } from 'node:module'
3
+ import path from 'node:path'
4
+
5
+ // spawn-helper is only used on Unix platforms; Windows uses conpty.
6
+ if (process.platform === 'win32') process.exit(0)
7
+
8
+ const require = createRequire(import.meta.url)
9
+
10
+ try {
11
+ // Resolve from package.json so we rely only on node-pty's public layout,
12
+ // not internal modules or runtime-loaded native bindings.
13
+ const ptyDir = path.dirname(require.resolve('node-pty/package.json'))
14
+ const prebuildsDir = path.join(ptyDir, 'prebuilds')
15
+
16
+ for (const entry of readdirSync(prebuildsDir, { withFileTypes: true })) {
17
+ if (!entry.isDirectory()) continue
18
+ const helper = path.join(prebuildsDir, entry.name, 'spawn-helper')
19
+ try {
20
+ const stat = statSync(helper)
21
+ if ((stat.mode & 0o111) !== 0o111) {
22
+ chmodSync(helper, stat.mode | 0o755)
23
+ console.log(`[postinstall] fixed node-pty helper permissions: ${helper}`)
24
+ }
25
+ } catch {
26
+ // Arch dirs without spawn-helper (e.g., win32-*) — skip silently.
27
+ }
28
+ }
29
+ } catch (error) {
30
+ const message = error instanceof Error ? error.message : String(error)
31
+ console.warn(`[postinstall] skipped node-pty helper permission fix: ${message}`)
32
+ }