@electric-agent/studio 1.0.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 (104) hide show
  1. package/dist/bridge/daytona.d.ts +35 -0
  2. package/dist/bridge/daytona.d.ts.map +1 -0
  3. package/dist/bridge/daytona.js +146 -0
  4. package/dist/bridge/daytona.js.map +1 -0
  5. package/dist/bridge/docker-stdio.d.ts +30 -0
  6. package/dist/bridge/docker-stdio.d.ts.map +1 -0
  7. package/dist/bridge/docker-stdio.js +141 -0
  8. package/dist/bridge/docker-stdio.js.map +1 -0
  9. package/dist/bridge/hosted.d.ts +28 -0
  10. package/dist/bridge/hosted.d.ts.map +1 -0
  11. package/dist/bridge/hosted.js +113 -0
  12. package/dist/bridge/hosted.js.map +1 -0
  13. package/dist/bridge/index.d.ts +6 -0
  14. package/dist/bridge/index.d.ts.map +1 -0
  15. package/dist/bridge/index.js +5 -0
  16. package/dist/bridge/index.js.map +1 -0
  17. package/dist/bridge/sprites.d.ts +32 -0
  18. package/dist/bridge/sprites.d.ts.map +1 -0
  19. package/dist/bridge/sprites.js +138 -0
  20. package/dist/bridge/sprites.js.map +1 -0
  21. package/dist/bridge/types.d.ts +97 -0
  22. package/dist/bridge/types.d.ts.map +1 -0
  23. package/dist/bridge/types.js +2 -0
  24. package/dist/bridge/types.js.map +1 -0
  25. package/dist/client/assets/OpenSauceOne-Bold-BeiFYFR5.woff2 +0 -0
  26. package/dist/client/assets/OpenSauceOne-ExtraBold-DO6BqiNe.woff2 +0 -0
  27. package/dist/client/assets/OpenSauceOne-Light-NEdTeQp-.woff2 +0 -0
  28. package/dist/client/assets/OpenSauceOne-Medium-Cu5cjAHY.woff2 +0 -0
  29. package/dist/client/assets/OpenSauceOne-Regular-BivIUdzJ.woff2 +0 -0
  30. package/dist/client/assets/SourceCodePro-Regular-CoIbWt_c.woff2 +0 -0
  31. package/dist/client/assets/index-CK__1-6e.css +1 -0
  32. package/dist/client/assets/index-DKL-jl7t.js +241 -0
  33. package/dist/client/favicon.ico +0 -0
  34. package/dist/client/img/brand/favicon.png +0 -0
  35. package/dist/client/img/brand/favicon.svg +4 -0
  36. package/dist/client/img/brand/icon.svg +4 -0
  37. package/dist/client/img/brand/logo.inverse.svg +13 -0
  38. package/dist/client/img/brand/logo.svg +13 -0
  39. package/dist/client/index.html +16 -0
  40. package/dist/electric-api.d.ts +14 -0
  41. package/dist/electric-api.d.ts.map +1 -0
  42. package/dist/electric-api.js +70 -0
  43. package/dist/electric-api.js.map +1 -0
  44. package/dist/gate.d.ts +28 -0
  45. package/dist/gate.d.ts.map +1 -0
  46. package/dist/gate.js +72 -0
  47. package/dist/gate.js.map +1 -0
  48. package/dist/git.d.ts +30 -0
  49. package/dist/git.d.ts.map +1 -0
  50. package/dist/git.js +115 -0
  51. package/dist/git.js.map +1 -0
  52. package/dist/index.d.ts +8 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +6 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/project-utils.d.ts +9 -0
  57. package/dist/project-utils.d.ts.map +1 -0
  58. package/dist/project-utils.js +17 -0
  59. package/dist/project-utils.js.map +1 -0
  60. package/dist/sandbox/daytona-push.d.ts +3 -0
  61. package/dist/sandbox/daytona-push.d.ts.map +1 -0
  62. package/dist/sandbox/daytona-push.js +56 -0
  63. package/dist/sandbox/daytona-push.js.map +1 -0
  64. package/dist/sandbox/daytona-registry.d.ts +41 -0
  65. package/dist/sandbox/daytona-registry.d.ts.map +1 -0
  66. package/dist/sandbox/daytona-registry.js +127 -0
  67. package/dist/sandbox/daytona-registry.js.map +1 -0
  68. package/dist/sandbox/daytona.d.ts +41 -0
  69. package/dist/sandbox/daytona.d.ts.map +1 -0
  70. package/dist/sandbox/daytona.js +282 -0
  71. package/dist/sandbox/daytona.js.map +1 -0
  72. package/dist/sandbox/docker.d.ts +29 -0
  73. package/dist/sandbox/docker.d.ts.map +1 -0
  74. package/dist/sandbox/docker.js +465 -0
  75. package/dist/sandbox/docker.js.map +1 -0
  76. package/dist/sandbox/index.d.ts +5 -0
  77. package/dist/sandbox/index.d.ts.map +1 -0
  78. package/dist/sandbox/index.js +4 -0
  79. package/dist/sandbox/index.js.map +1 -0
  80. package/dist/sandbox/sprites-bootstrap.d.ts +26 -0
  81. package/dist/sandbox/sprites-bootstrap.d.ts.map +1 -0
  82. package/dist/sandbox/sprites-bootstrap.js +127 -0
  83. package/dist/sandbox/sprites-bootstrap.js.map +1 -0
  84. package/dist/sandbox/sprites.d.ts +55 -0
  85. package/dist/sandbox/sprites.d.ts.map +1 -0
  86. package/dist/sandbox/sprites.js +323 -0
  87. package/dist/sandbox/sprites.js.map +1 -0
  88. package/dist/sandbox/types.d.ts +73 -0
  89. package/dist/sandbox/types.d.ts.map +1 -0
  90. package/dist/sandbox/types.js +5 -0
  91. package/dist/sandbox/types.js.map +1 -0
  92. package/dist/server.d.ts +26 -0
  93. package/dist/server.d.ts.map +1 -0
  94. package/dist/server.js +1266 -0
  95. package/dist/server.js.map +1 -0
  96. package/dist/sessions.d.ts +46 -0
  97. package/dist/sessions.d.ts.map +1 -0
  98. package/dist/sessions.js +66 -0
  99. package/dist/sessions.js.map +1 -0
  100. package/dist/streams.d.ts +34 -0
  101. package/dist/streams.d.ts.map +1 -0
  102. package/dist/streams.js +42 -0
  103. package/dist/streams.js.map +1 -0
  104. package/package.json +84 -0
Binary file
@@ -0,0 +1,4 @@
1
+ <svg width="192" height="192" viewBox="0 0 192 192" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M106.992 16.1244C107.711 15.4029 108.683 15 109.692 15H170L84.0082 101.089C83.2888 101.811 82.3171 102.213 81.3081 102.213H21L106.992 16.1244Z" fill="#D0BCFF"/>
3
+ <path d="M96.4157 104.125C96.4157 103.066 97.2752 102.204 98.331 102.204H170L96.4157 176V104.125Z" fill="#D0BCFF"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="192" height="192" viewBox="0 0 192 192" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M106.992 16.1244C107.711 15.4029 108.683 15 109.692 15H170L84.0082 101.089C83.2888 101.811 82.3171 102.213 81.3081 102.213H21L106.992 16.1244Z" fill="currentColor"/>
3
+ <path d="M96.4157 104.125C96.4157 103.066 97.2752 102.204 98.331 102.204H170L96.4157 176V104.125Z" fill="currentColor"/>
4
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg width="1024" height="284" viewBox="0 0 1024 284" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M127.992 62.1244C128.711 61.4029 129.683 61 130.692 61H191L105.008 147.089C104.289 147.811 103.317 148.213 102.308 148.213H42L127.992 62.1244Z" fill="#131517"/>
3
+ <path d="M117.416 150.125C117.416 149.066 118.275 148.204 119.331 148.204H191L117.416 222V150.125Z" fill="#131517"/>
4
+ <path d="M350.051 108.42C341.717 103.936 332.038 101.665 321.277 101.665C310.517 101.665 300.49 104.218 291.996 109.24C283.483 114.281 276.786 121.46 272.073 130.59C267.38 139.682 265 150.357 265 162.332C265 174.308 267.455 184.804 272.299 193.971C277.162 203.186 284.104 210.403 292.918 215.434C301.703 220.456 312.078 223 323.761 223C337.183 223 348.706 219.109 357.99 211.43C367.283 203.751 373.171 193.726 375.485 181.638L375.862 179.678H353.86L353.541 180.903C351.697 187.875 348 193.387 342.545 197.278C337.061 201.198 330.288 203.186 322.397 203.186C312.219 203.186 303.876 199.926 297.611 193.509C291.328 187.074 287.998 178.35 287.697 167.59H376.971L377.094 166.082C377.404 162.389 377.555 159.741 377.555 157.989C377.244 146.617 374.667 136.545 369.889 128.056C365.091 119.529 358.413 112.924 350.042 108.42H350.051ZM289.052 148.925C290.209 141.02 293.736 134.472 299.558 129.431C305.842 123.995 313.226 121.244 321.512 121.244C330.843 121.244 338.651 123.853 344.718 128.998C350.343 133.775 353.766 140.474 354.886 148.925H289.052Z" fill="#131517"/>
5
+ <path d="M410.608 61H388.805V221.643H410.608V61Z" fill="#131517"/>
6
+ <path d="M506.899 108.42C498.566 103.936 488.887 101.665 478.126 101.665C467.365 101.665 457.338 104.218 448.844 109.24C440.332 114.281 433.634 121.46 428.922 130.59C424.228 139.673 421.849 150.357 421.849 162.323C421.849 174.289 424.304 184.794 429.148 193.962C434.011 203.176 440.953 210.393 449.766 215.425C458.552 220.447 468.927 222.991 480.609 222.991C494.032 222.991 505.554 219.099 514.838 211.42C524.132 203.742 530.02 193.717 532.334 181.628L532.71 179.669H510.709L510.389 180.894C508.546 187.866 504.849 193.378 499.393 197.269C493.909 201.188 487.137 203.176 479.245 203.176C469.068 203.176 460.724 199.916 454.46 193.5C448.176 187.065 444.847 178.34 444.546 167.58H533.811L533.933 166.073C534.243 162.38 534.394 159.732 534.394 157.98C534.083 146.607 531.506 136.535 526.728 128.046C521.931 119.519 515.252 112.915 506.881 108.411L506.899 108.42ZM445.9 148.925C447.057 141.02 450.584 134.472 456.407 129.431C462.69 123.995 470.074 121.244 478.361 121.244C487.692 121.244 495.499 123.853 501.566 128.998C507.191 133.775 510.615 140.474 511.734 148.925H445.9Z" fill="#131517"/>
7
+ <path d="M632.256 179.848C630.685 187.112 627.177 192.869 621.806 196.977C616.406 201.104 609.606 203.195 601.582 203.195C591.141 203.195 582.563 199.389 576.073 191.889C569.526 184.323 566.206 174.298 566.206 162.106C566.206 149.914 569.526 140.153 576.073 132.663C582.563 125.238 591.141 121.47 601.582 121.47C609.295 121.47 615.955 123.561 621.354 127.688C626.744 131.815 630.337 137.43 632.04 144.412L632.35 145.665H654.342L653.994 143.724C651.68 130.722 645.895 120.348 636.827 112.886C627.76 105.434 616.134 101.655 602.26 101.655C590.887 101.655 580.663 104.199 571.868 109.221C563.055 114.253 556.122 121.441 551.25 130.571C546.406 139.663 543.951 150.272 543.951 162.097C543.951 173.921 546.368 184.568 551.137 193.726C555.925 202.931 562.735 210.186 571.398 215.302C580.042 220.409 590.201 222.991 601.582 222.991C615.607 222.991 627.346 219.175 636.489 211.647C645.632 204.119 651.52 193.632 653.994 180.488L654.361 178.538H632.538L632.256 179.838V179.848Z" fill="#131517"/>
8
+ <path d="M698.071 67.8591H676.268V103.022H655.499V123.279H676.268V189.92C676.268 200.717 678.732 208.782 683.604 213.898C688.496 219.043 696.679 221.643 707.938 221.643H727.193V201.386H709.067C704.9 201.386 702.003 200.538 700.451 198.861C698.871 197.156 698.071 194.065 698.071 189.694V123.279H727.193V103.022H698.071V67.8591Z" fill="#131517"/>
9
+ <path d="M772.973 108.006C769.06 110.352 765.504 113.763 762.617 117.908L762.645 103.022H740.794V221.643H762.598V161.202C762.598 150.725 764.902 141.812 769.445 134.736C773.838 127.886 781.316 124.409 791.654 124.409H805.377V103.022H795.717C786.123 103.022 778.475 104.699 772.973 108.006Z" fill="#131517"/>
10
+ <path d="M839.127 103.022H817.323V221.643H839.127V103.022Z" fill="#131517"/>
11
+ <path d="M839.512 61H816.938V83.6125H839.512V61Z" fill="#131517"/>
12
+ <path d="M940.178 178.548L939.895 179.848C938.334 187.112 934.816 192.869 929.445 196.977C924.046 201.104 917.245 203.195 909.222 203.195C898.781 203.195 890.202 199.389 883.712 191.889C877.165 184.323 873.845 174.298 873.845 162.106C873.845 149.914 877.165 140.163 883.712 132.663C890.202 125.238 898.79 121.47 909.222 121.47C916.935 121.47 923.594 123.561 928.994 127.688C934.383 131.806 937.977 137.43 939.679 144.412L939.989 145.665H961.981L961.633 143.724C959.319 130.722 953.544 120.348 944.467 112.886C935.399 105.434 923.773 101.655 909.899 101.655C898.527 101.655 888.302 104.199 879.508 109.221C870.694 114.253 863.762 121.441 858.889 130.571C854.045 139.663 851.581 150.272 851.581 162.097C851.581 173.921 853.998 184.568 858.767 193.726C863.555 202.931 870.374 210.196 879.028 215.302C887.672 220.409 897.831 222.991 909.212 222.991C923.237 222.991 934.976 219.175 944.119 211.647C953.262 204.119 959.15 193.632 961.624 180.488L961.991 178.538H940.168L940.178 178.548Z" fill="#131517"/>
13
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg width="512" height="142" viewBox="0 0 1024 284" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M127.992 62.1244C128.711 61.4029 129.683 61 130.692 61H191L105.008 147.089C104.289 147.811 103.317 148.213 102.308 148.213H42L127.992 62.1244Z" fill="#D0BCFF"/>
3
+ <path d="M117.416 150.125C117.416 149.066 118.275 148.204 119.331 148.204H191L117.416 222V150.125Z" fill="#D0BCFF"/>
4
+ <path d="M349.47 108.35C341.191 103.904 331.574 101.653 320.883 101.653C310.193 101.653 300.237 104.177 291.797 109.16C283.358 114.152 276.698 121.273 272.027 130.315C267.364 139.329 265 149.935 265 161.822C265 173.708 267.44 184.135 272.262 193.234C277.094 202.361 283.979 209.52 292.73 214.502C301.452 219.476 311.766 222 323.379 222C336.707 222 348.142 218.148 357.363 210.537C366.575 202.936 372.424 193.008 374.723 181.027L374.996 179.624H353.897L353.662 180.5C351.787 187.573 348.02 193.178 342.472 197.134C336.905 201.118 330.02 203.134 322.023 203.134C311.7 203.134 303.232 199.828 296.865 193.319C290.479 186.792 287.088 177.928 286.805 167.012V166.606H376.23L376.324 165.523C376.635 161.84 376.776 159.222 376.776 157.479C376.465 146.186 373.913 136.192 369.165 127.772C364.399 119.323 357.778 112.786 349.48 108.321L349.47 108.35ZM288.067 148.899C289.16 140.638 292.767 133.809 298.824 128.591C305.201 123.081 312.708 120.284 321.109 120.284C330.566 120.284 338.488 122.93 344.648 128.139C350.497 133.093 354.001 140.073 355.065 148.899H288.067Z" fill="#F5F5F5"/>
5
+ <path d="M409.865 61H388.973V220.653H409.865V61Z" fill="#F5F5F5"/>
6
+ <path d="M506.542 108.35C498.263 103.904 488.646 101.653 477.955 101.653C467.265 101.653 457.309 104.177 448.869 109.16C440.43 114.152 433.771 121.273 429.099 130.315C424.436 139.329 422.072 149.935 422.072 161.822C422.072 173.708 424.512 184.135 429.334 193.234C434.166 202.361 441.052 209.52 449.802 214.502C458.524 219.476 468.838 222 480.452 222C493.779 222 505.214 218.148 514.435 210.537C523.647 202.936 529.497 193.008 531.795 181.027L532.068 179.624H510.969L510.734 180.5C508.859 187.573 505.092 193.178 499.544 197.134C493.977 201.118 487.092 203.134 479.095 203.134C468.772 203.134 460.304 199.828 453.937 193.319C447.551 186.792 444.16 177.928 443.877 167.012V166.606H533.302L533.396 165.523C533.707 161.84 533.848 159.222 533.848 157.479C533.537 146.186 530.985 136.192 526.238 127.772C521.472 119.323 514.85 112.786 506.552 108.321L506.542 108.35ZM445.139 148.899C446.232 140.638 449.84 133.809 455.896 128.591C462.273 123.081 469.78 120.284 478.182 120.284C487.638 120.284 495.56 122.93 501.72 128.139C507.569 133.093 511.073 140.073 512.137 148.899H445.139Z" fill="#F5F5F5"/>
7
+ <path d="M632.748 179.445C631.157 186.82 627.577 192.669 622.105 196.842C616.614 201.033 609.7 203.152 601.571 203.152C590.975 203.152 582.262 199.3 575.669 191.689C569.038 184.041 565.675 173.916 565.675 161.605C565.675 149.294 569.038 139.442 575.669 131.86C582.262 124.324 590.975 120.51 601.571 120.51C609.408 120.51 616.161 122.638 621.653 126.82C627.135 131.012 630.789 136.72 632.522 143.793L632.739 144.688H653.828L653.583 143.304C651.285 130.418 645.549 120.142 636.554 112.758C627.568 105.383 616.02 101.643 602.24 101.643C590.937 101.643 580.774 104.167 572.043 109.141C563.302 114.133 556.416 121.244 551.584 130.296C546.771 139.319 544.322 149.85 544.322 161.596C544.322 173.341 546.724 183.909 551.462 192.999C556.209 202.126 562.981 209.313 571.572 214.38C580.152 219.438 590.24 222 601.552 222C615.483 222 627.144 218.223 636.205 210.772C645.276 203.322 651.116 192.933 653.565 179.906L653.828 178.512H632.918L632.72 179.445H632.748Z" fill="#F5F5F5"/>
8
+ <path d="M697.73 67.8571H676.839V103.009H656.042V122.318H676.839V189.41C676.839 200.073 679.269 208.032 684.063 213.052C688.867 218.091 696.949 220.653 708.082 220.653H726.892V201.344H709.212C704.898 201.344 701.884 200.44 700.245 198.669C698.578 196.87 697.73 193.677 697.73 189.184V122.318H726.892V103.009H697.73V67.8571Z" fill="#F5F5F5"/>
9
+ <path d="M773.441 107.926C769.165 110.488 765.331 114.331 762.345 118.974L762.383 103.009H741.444V220.653H762.336V160.701C762.336 150.133 764.672 141.147 769.268 133.988C773.761 126.999 781.381 123.449 791.902 123.449H805.174V103.009H795.971C786.449 103.009 778.876 104.667 773.441 107.926Z" fill="#F5F5F5"/>
10
+ <path d="M838.97 103.009H818.078V220.653H838.97V103.009Z" fill="#F5F5F5"/>
11
+ <path d="M839.356 61H817.692V82.6639H839.356V61Z" fill="#F5F5F5"/>
12
+ <path d="M941.015 178.512L940.818 179.445C939.226 186.81 935.647 192.669 930.174 196.842C924.683 201.033 917.779 203.152 909.641 203.152C899.044 203.152 890.331 199.3 883.738 191.689C877.107 184.041 873.744 173.916 873.744 161.605C873.744 149.294 877.107 139.442 883.738 131.86C890.331 124.324 899.044 120.51 909.641 120.51C917.477 120.51 924.231 122.638 929.722 126.82C935.204 131.002 938.858 136.72 940.592 143.793L940.808 144.688H961.897L961.653 143.304C959.354 130.418 953.627 120.142 944.623 112.758C935.628 105.383 924.089 101.643 910.309 101.643C899.006 101.643 888.843 104.167 880.112 109.141C871.361 114.133 864.476 121.244 859.654 130.296C854.84 139.319 852.391 149.85 852.391 161.596C852.391 173.341 854.793 183.909 859.531 192.999C864.278 202.126 871.051 209.313 879.641 214.38C888.222 219.438 898.309 222 909.622 222C923.552 222 935.213 218.223 944.274 210.772C953.345 203.322 959.185 192.933 961.634 179.906L961.897 178.512H940.987H941.015Z" fill="#F5F5F5"/>
13
+ </svg>
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Electric Agent</title>
7
+ <link rel="icon" type="image/svg+xml" href="/img/brand/favicon.svg" />
8
+ <link rel="icon" type="image/png" href="/img/brand/favicon.png" />
9
+ <link rel="shortcut icon" href="/favicon.ico" />
10
+ <script type="module" crossorigin src="/assets/index-DKL-jl7t.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-CK__1-6e.css">
12
+ </head>
13
+ <body>
14
+ <div id="root"></div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,14 @@
1
+ export interface ElectricCredentials {
2
+ source_id: string;
3
+ secret: string;
4
+ DATABASE_URL: string;
5
+ }
6
+ export interface ClaimableSourceResponse {
7
+ claimId: string;
8
+ }
9
+ export declare const DEFAULT_ELECTRIC_API_BASE = "https://dashboard.electric-sql.cloud/api";
10
+ export declare const DEFAULT_ELECTRIC_URL = "https://api.electric-sql.cloud";
11
+ export declare const DEFAULT_ELECTRIC_DASHBOARD_URL = "https://dashboard.electric-sql.cloud";
12
+ export declare function getClaimUrl(claimId: string): string;
13
+ export declare function provisionElectricResources(): Promise<ElectricCredentials & ClaimableSourceResponse>;
14
+ //# sourceMappingURL=electric-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electric-api.d.ts","sourceRoot":"","sources":["../src/electric-api.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,MAAM,CAAA;CACf;AAcD,eAAO,MAAM,yBAAyB,6CAA6C,CAAA;AACnF,eAAO,MAAM,oBAAoB,mCAAmC,CAAA;AACpE,eAAO,MAAM,8BAA8B,yCAAyC,CAAA;AAEpF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AA6CD,wBAAsB,0BAA0B,IAAI,OAAO,CAC1D,mBAAmB,GAAG,uBAAuB,CAC7C,CAqCA"}
@@ -0,0 +1,70 @@
1
+ // Claim API client — provisions temporary Electric Cloud resources via the
2
+ // Electric dashboard's public claimable-sources endpoint.
3
+ export const DEFAULT_ELECTRIC_API_BASE = "https://dashboard.electric-sql.cloud/api";
4
+ export const DEFAULT_ELECTRIC_URL = "https://api.electric-sql.cloud";
5
+ export const DEFAULT_ELECTRIC_DASHBOARD_URL = "https://dashboard.electric-sql.cloud";
6
+ export function getClaimUrl(claimId) {
7
+ const dashboardUrl = process.env.ELECTRIC_DASHBOARD_URL ?? DEFAULT_ELECTRIC_DASHBOARD_URL;
8
+ return `${dashboardUrl}/claim?uuid=${claimId}`;
9
+ }
10
+ function getElectricApiBase() {
11
+ return process.env.ELECTRIC_API_BASE_URL ?? DEFAULT_ELECTRIC_API_BASE;
12
+ }
13
+ const POLL_INTERVAL_MS = 1000;
14
+ const MAX_POLL_ATTEMPTS = 60;
15
+ async function pollClaimableSource(claimId, maxAttempts = MAX_POLL_ATTEMPTS) {
16
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
17
+ const response = await fetch(`${getElectricApiBase()}/public/v1/claimable-sources/${claimId}`, {
18
+ method: "GET",
19
+ headers: { "User-Agent": "create-electric-app" },
20
+ });
21
+ // 404 means still being provisioned — continue polling
22
+ if (response.status === 404) {
23
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
24
+ continue;
25
+ }
26
+ if (!response.ok) {
27
+ throw new Error(`Electric API error: ${response.status} ${response.statusText}`);
28
+ }
29
+ const status = (await response.json());
30
+ if (status.state === "ready") {
31
+ return status;
32
+ }
33
+ if (status.state === "failed" || status.error) {
34
+ throw new Error(`Resource provisioning failed${status.error ? `: ${status.error}` : ""}`);
35
+ }
36
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
37
+ }
38
+ throw new Error(`Timeout waiting for resources to be provisioned after ${maxAttempts} attempts`);
39
+ }
40
+ export async function provisionElectricResources() {
41
+ console.log("[electric-api] Provisioning claimable resources...");
42
+ const response = await fetch(`${getElectricApiBase()}/public/v1/claimable-sources`, {
43
+ method: "POST",
44
+ headers: {
45
+ "Content-Type": "application/json",
46
+ "User-Agent": "create-electric-app",
47
+ },
48
+ body: JSON.stringify({}),
49
+ });
50
+ if (!response.ok) {
51
+ throw new Error(`Electric API error: ${response.status} ${response.statusText}`);
52
+ }
53
+ const { claimId } = (await response.json());
54
+ if (!claimId) {
55
+ throw new Error("Invalid response from Electric API — missing claimId");
56
+ }
57
+ console.log(`[electric-api] Got claimId=${claimId}, polling for ready state...`);
58
+ const status = await pollClaimableSource(claimId);
59
+ if (!status.source?.source_id || !status.source?.secret || !status.connection_uri) {
60
+ throw new Error("Invalid response from Electric API — missing required credentials");
61
+ }
62
+ console.log("[electric-api] Resources provisioned successfully");
63
+ return {
64
+ source_id: status.source.source_id,
65
+ secret: status.source.secret,
66
+ DATABASE_URL: status.connection_uri,
67
+ claimId,
68
+ };
69
+ }
70
+ //# sourceMappingURL=electric-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electric-api.js","sourceRoot":"","sources":["../src/electric-api.ts"],"names":[],"mappings":"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"}
package/dist/gate.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Gate management for orchestrator <-> web UI communication.
3
+ *
4
+ * When the orchestrator hits a decision point (plan approval, clarification, continue),
5
+ * it pauses on a Promise. The web UI resolves that Promise by POSTing to the API.
6
+ */
7
+ /**
8
+ * Create a gate that blocks until resolved via resolveGate().
9
+ */
10
+ export declare function createGate<T>(sessionId: string, gate: string): Promise<T>;
11
+ /**
12
+ * Resolve a pending gate with a value.
13
+ * Returns true if a gate was found and resolved, false otherwise.
14
+ */
15
+ export declare function resolveGate(sessionId: string, gate: string, value: unknown): boolean;
16
+ /**
17
+ * Reject a pending gate (e.g., on session cancellation).
18
+ */
19
+ export declare function rejectGate(sessionId: string, gate: string, reason: string): boolean;
20
+ /**
21
+ * Check if a gate is pending.
22
+ */
23
+ export declare function hasGate(sessionId: string, gate: string): boolean;
24
+ /**
25
+ * Reject all gates for a session (cleanup on cancel/error).
26
+ */
27
+ export declare function rejectAllGates(sessionId: string): void;
28
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAYzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAcpF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CASnF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOtD"}
package/dist/gate.js ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Gate management for orchestrator <-> web UI communication.
3
+ *
4
+ * When the orchestrator hits a decision point (plan approval, clarification, continue),
5
+ * it pauses on a Promise. The web UI resolves that Promise by POSTing to the API.
6
+ */
7
+ const gates = new Map();
8
+ function gateKey(sessionId, gate) {
9
+ return `${sessionId}:${gate}`;
10
+ }
11
+ /**
12
+ * Create a gate that blocks until resolved via resolveGate().
13
+ */
14
+ export function createGate(sessionId, gate) {
15
+ const key = gateKey(sessionId, gate);
16
+ console.log(`[gate] creating gate key=${key} (existing gates: ${[...gates.keys()].join(", ") || "none"})`);
17
+ return new Promise((resolve, reject) => {
18
+ gates.set(key, {
19
+ resolve: resolve,
20
+ reject,
21
+ });
22
+ console.log(`[gate] gate registered key=${key}`);
23
+ });
24
+ }
25
+ /**
26
+ * Resolve a pending gate with a value.
27
+ * Returns true if a gate was found and resolved, false otherwise.
28
+ */
29
+ export function resolveGate(sessionId, gate, value) {
30
+ const key = gateKey(sessionId, gate);
31
+ console.log(`[gate] resolving key=${key} (existing gates: ${[...gates.keys()].join(", ") || "none"})`);
32
+ const pending = gates.get(key);
33
+ if (pending) {
34
+ pending.resolve(value);
35
+ gates.delete(key);
36
+ console.log(`[gate] resolved key=${key}`);
37
+ return true;
38
+ }
39
+ console.log(`[gate] NOT FOUND key=${key}`);
40
+ return false;
41
+ }
42
+ /**
43
+ * Reject a pending gate (e.g., on session cancellation).
44
+ */
45
+ export function rejectGate(sessionId, gate, reason) {
46
+ const key = gateKey(sessionId, gate);
47
+ const pending = gates.get(key);
48
+ if (pending) {
49
+ pending.reject(new Error(reason));
50
+ gates.delete(key);
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ /**
56
+ * Check if a gate is pending.
57
+ */
58
+ export function hasGate(sessionId, gate) {
59
+ return gates.has(gateKey(sessionId, gate));
60
+ }
61
+ /**
62
+ * Reject all gates for a session (cleanup on cancel/error).
63
+ */
64
+ export function rejectAllGates(sessionId) {
65
+ for (const [key, pending] of gates) {
66
+ if (key.startsWith(`${sessionId}:`)) {
67
+ pending.reject(new Error("Session cancelled"));
68
+ gates.delete(key);
69
+ }
70
+ }
71
+ }
72
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;AAE5C,SAAS,OAAO,CAAC,SAAiB,EAAE,IAAY;IAC/C,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAI,SAAiB,EAAE,IAAY;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CACV,4BAA4B,GAAG,qBAAqB,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAC7F,CAAA;IACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,OAAmC;YAC5C,MAAM;SACN,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAc;IAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CACV,wBAAwB,GAAG,qBAAqB,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CACzF,CAAA;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;IAC1C,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,IAAY,EAAE,MAAc;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QACjC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,IAAY;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAA;YAC9C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACF,CAAC;AACF,CAAC"}
package/dist/git.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export interface GhRepo {
2
+ nameWithOwner: string;
3
+ url: string;
4
+ updatedAt: string;
5
+ }
6
+ export interface GhBranch {
7
+ name: string;
8
+ isDefault: boolean;
9
+ }
10
+ export interface GhAccount {
11
+ login: string;
12
+ type: "user" | "org";
13
+ }
14
+ /**
15
+ * List the authenticated user's personal account + organizations.
16
+ */
17
+ export declare function ghListAccounts(token?: string): GhAccount[];
18
+ /**
19
+ * List the authenticated user's GitHub repos.
20
+ */
21
+ export declare function ghListRepos(limit?: number, token?: string): GhRepo[];
22
+ /**
23
+ * List branches for a GitHub repo.
24
+ */
25
+ export declare function ghListBranches(repoFullName: string, token?: string): GhBranch[];
26
+ /**
27
+ * Check if gh CLI is available and authenticated.
28
+ */
29
+ export declare function isGhAuthenticated(token?: string): boolean;
30
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,MAAM;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;CACpB;AA2BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiChE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmB/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAOzD"}
package/dist/git.js ADDED
@@ -0,0 +1,115 @@
1
+ import { execFileSync } from "node:child_process";
2
+ // ---------------------------------------------------------------------------
3
+ // Internal helpers
4
+ // ---------------------------------------------------------------------------
5
+ function execGh(args, opts) {
6
+ try {
7
+ return execFileSync("gh", args, {
8
+ cwd: opts?.cwd,
9
+ encoding: "utf-8",
10
+ timeout: 30_000,
11
+ env: { ...process.env, ...opts?.env },
12
+ stdio: ["pipe", "pipe", "pipe"],
13
+ }).trim();
14
+ }
15
+ catch (e) {
16
+ const stderr = e?.stderr || "";
17
+ const stdout = e?.stdout || "";
18
+ const detail = stderr || stdout || (e instanceof Error ? e.message : "gh command failed");
19
+ throw new Error(`gh ${args.join(" ")}: ${detail}`);
20
+ }
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // Public API
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * List the authenticated user's personal account + organizations.
27
+ */
28
+ export function ghListAccounts(token) {
29
+ const ghOpts = token ? { env: { GH_TOKEN: token } } : undefined;
30
+ const accounts = [];
31
+ try {
32
+ const username = execGh(["api", "/user", "--jq", ".login"], ghOpts);
33
+ if (username) {
34
+ accounts.push({ login: username, type: "user" });
35
+ }
36
+ }
37
+ catch {
38
+ // ignore
39
+ }
40
+ try {
41
+ const output = execGh(["api", "/user/orgs", "--jq", "[.[] | .login]"], ghOpts);
42
+ const orgs = JSON.parse(output);
43
+ for (const org of orgs) {
44
+ accounts.push({ login: org, type: "org" });
45
+ }
46
+ }
47
+ catch {
48
+ // ignore
49
+ }
50
+ return accounts;
51
+ }
52
+ /**
53
+ * List the authenticated user's GitHub repos.
54
+ */
55
+ export function ghListRepos(limit = 50, token) {
56
+ const ghOpts = token ? { env: { GH_TOKEN: token } } : undefined;
57
+ try {
58
+ const output = execGh([
59
+ "api",
60
+ `/user/repos?sort=updated&per_page=${limit}&affiliation=owner,collaborator,organization_member`,
61
+ "--jq",
62
+ `[.[] | {nameWithOwner: .full_name, url: .html_url, updatedAt: .updated_at}]`,
63
+ ], ghOpts);
64
+ return JSON.parse(output);
65
+ }
66
+ catch {
67
+ try {
68
+ const output = execGh([
69
+ "repo",
70
+ "list",
71
+ "--json",
72
+ "nameWithOwner,url,updatedAt",
73
+ "--limit",
74
+ String(limit),
75
+ "--sort",
76
+ "updated",
77
+ ], ghOpts);
78
+ return JSON.parse(output);
79
+ }
80
+ catch {
81
+ return [];
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * List branches for a GitHub repo.
87
+ */
88
+ export function ghListBranches(repoFullName, token) {
89
+ const ghOpts = token ? { env: { GH_TOKEN: token } } : undefined;
90
+ try {
91
+ const defaultBranch = execGh(["api", `/repos/${repoFullName}`, "--jq", ".default_branch"], ghOpts);
92
+ const output = execGh(["api", `/repos/${repoFullName}/branches?per_page=100`, "--jq", `[.[] | {name: .name}]`], ghOpts);
93
+ const branches = JSON.parse(output);
94
+ return branches.map((b) => ({
95
+ name: b.name,
96
+ isDefault: b.name === defaultBranch,
97
+ }));
98
+ }
99
+ catch {
100
+ return [];
101
+ }
102
+ }
103
+ /**
104
+ * Check if gh CLI is available and authenticated.
105
+ */
106
+ export function isGhAuthenticated(token) {
107
+ try {
108
+ execGh(["auth", "status"], token ? { env: { GH_TOKEN: token } } : undefined);
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { createGate, rejectAllGates, resolveGate } from "./gate.js";
2
+ export { resolveProjectDir } from "./project-utils.js";
3
+ export { createApp, startWebServer } from "./server.js";
4
+ export type { SessionInfo } from "./sessions.js";
5
+ export { addSession, cleanupStaleSessions, deleteSession, getSession, readSessionIndex, updateSessionInfo, } from "./sessions.js";
6
+ export type { StreamConfig, StreamConnectionInfo } from "./streams.js";
7
+ export { getStreamConfig, getStreamConnectionInfo, getStreamEnvVars } from "./streams.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EACN,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { createGate, rejectAllGates, resolveGate } from "./gate.js";
2
+ export { resolveProjectDir } from "./project-utils.js";
3
+ export { createApp, startWebServer } from "./server.js";
4
+ export { addSession, cleanupStaleSessions, deleteSession, getSession, readSessionIndex, updateSessionInfo, } from "./sessions.js";
5
+ export { getStreamConfig, getStreamConnectionInfo, getStreamEnvVars } from "./streams.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEvD,OAAO,EACN,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Resolve a unique project directory name under `baseDir`.
3
+ * If the directory already exists, appends a random 4-char hex suffix.
4
+ */
5
+ export declare function resolveProjectDir(baseDir: string, name: string): {
6
+ projectName: string;
7
+ projectDir: string;
8
+ };
9
+ //# sourceMappingURL=project-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-utils.d.ts","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACV;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAQ7C"}
@@ -0,0 +1,17 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ /**
5
+ * Resolve a unique project directory name under `baseDir`.
6
+ * If the directory already exists, appends a random 4-char hex suffix.
7
+ */
8
+ export function resolveProjectDir(baseDir, name) {
9
+ const candidate = path.resolve(baseDir, name);
10
+ if (!fs.existsSync(candidate)) {
11
+ return { projectName: name, projectDir: candidate };
12
+ }
13
+ const suffix = crypto.randomBytes(2).toString("hex");
14
+ const uniqueName = `${name}-${suffix}`;
15
+ return { projectName: uniqueName, projectDir: path.resolve(baseDir, uniqueName) };
16
+ }
17
+ //# sourceMappingURL=project-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-utils.js","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAChC,OAAe,EACf,IAAY;IAEZ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAA;IACtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAA;AAClF,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env tsx
2
+ import "dotenv/config";
3
+ //# sourceMappingURL=daytona-push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona-push.d.ts","sourceRoot":"","sources":["../../src/sandbox/daytona-push.ts"],"names":[],"mappings":";AAiBA,OAAO,eAAe,CAAA"}
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * CLI script to build a linux/amd64 sandbox image, push it to Daytona's
4
+ * transient registry, and create a snapshot.
5
+ *
6
+ * Required env vars:
7
+ * DAYTONA_API_KEY — Daytona API key
8
+ *
9
+ * Optional:
10
+ * DAYTONA_API_URL — Daytona API URL (default: https://app.daytona.io/api)
11
+ * DAYTONA_TARGET — Daytona target region (default: eu)
12
+ * SANDBOX_IMAGE — Local image name (default: electric-agent-sandbox)
13
+ *
14
+ * Usage:
15
+ * npm run push:sandbox:daytona
16
+ */
17
+ import { execSync } from "node:child_process";
18
+ import "dotenv/config";
19
+ import { Daytona } from "@daytonaio/sdk";
20
+ import { ensureSnapshot } from "./daytona-registry.js";
21
+ async function main() {
22
+ const apiKey = process.env.DAYTONA_API_KEY;
23
+ if (!apiKey) {
24
+ console.error("Error: DAYTONA_API_KEY environment variable is required.");
25
+ process.exit(1);
26
+ }
27
+ const apiUrl = process.env.DAYTONA_API_URL ?? "https://app.daytona.io/api";
28
+ const target = process.env.DAYTONA_TARGET ?? "eu";
29
+ const localImage = process.env.SANDBOX_IMAGE || "electric-agent-sandbox";
30
+ // Build linux/amd64 image (Daytona requires x86)
31
+ console.log(`Building ${localImage} for linux/amd64...`);
32
+ execSync(`docker build --platform linux/amd64 -f Dockerfile.sandbox -t ${localImage} .`, {
33
+ stdio: "inherit",
34
+ timeout: 600_000,
35
+ });
36
+ console.log();
37
+ console.log(`Pushing sandbox image "${localImage}" to Daytona...`);
38
+ console.log(` API URL: ${apiUrl}`);
39
+ console.log(` Target: ${target}`);
40
+ console.log();
41
+ const daytona = new Daytona({ apiKey, apiUrl, target });
42
+ const snapshotName = await ensureSnapshot(daytona, {
43
+ apiKey,
44
+ apiUrl,
45
+ localImage,
46
+ });
47
+ console.log();
48
+ console.log(`Snapshot ready: "${snapshotName}"`);
49
+ console.log("Sandboxes will now use this snapshot automatically.");
50
+ process.exit(0);
51
+ }
52
+ main().catch((err) => {
53
+ console.error("Failed to push sandbox image:", err);
54
+ process.exit(1);
55
+ });
56
+ //# sourceMappingURL=daytona-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona-push.js","sourceRoot":"","sources":["../../src/sandbox/daytona-push.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,eAAe,CAAA;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,KAAK,UAAU,IAAI;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,4BAA4B,CAAA;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAA;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wBAAwB,CAAA;IAExE,iDAAiD;IACjD,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,qBAAqB,CAAC,CAAA;IACxD,QAAQ,CAAC,gEAAgE,UAAU,IAAI,EAAE;QACxF,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,OAAO;KAChB,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,iBAAiB,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvD,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;QAClD,MAAM;QACN,MAAM;QACN,UAAU;KACV,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,GAAG,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;IAElE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import type { Daytona } from "@daytonaio/sdk";
2
+ export interface PushImageOpts {
3
+ apiKey: string;
4
+ apiUrl?: string;
5
+ localImage?: string;
6
+ }
7
+ export interface PushImageResult {
8
+ remoteImage: string;
9
+ registryUrl: string;
10
+ project: string;
11
+ }
12
+ /**
13
+ * Push a local Docker image to Daytona's transient registry.
14
+ *
15
+ * 1. Gets temporary push credentials via `DockerRegistryApi.getTransientPushAccess()`
16
+ * 2. Tags the local image with the remote registry path
17
+ * 3. Logs in, pushes, and logs out
18
+ */
19
+ export declare function pushImageToDaytona(opts: PushImageOpts): Promise<PushImageResult>;
20
+ export interface EnsureSnapshotOpts {
21
+ apiKey: string;
22
+ apiUrl?: string;
23
+ localImage?: string;
24
+ /** Callback for snapshot creation logs */
25
+ onLogs?: (chunk: string) => void;
26
+ }
27
+ /**
28
+ * Ensure a Daytona snapshot exists for the sandbox image.
29
+ *
30
+ * - If a snapshot with the expected name already exists and is active, returns its name.
31
+ * - Otherwise, pushes the local image to the transient registry and creates a snapshot.
32
+ */
33
+ export declare function ensureSnapshot(daytona: Daytona, opts: EnsureSnapshotOpts): Promise<string>;
34
+ /**
35
+ * Check if a snapshot exists and is active (non-throwing).
36
+ */
37
+ export declare function getSnapshotStatus(daytona: Daytona, snapshotName?: string): Promise<{
38
+ exists: boolean;
39
+ state?: string;
40
+ }>;
41
+ //# sourceMappingURL=daytona-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daytona-registry.d.ts","sourceRoot":"","sources":["../../src/sandbox/daytona-registry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAoB7C,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAgDtF;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ChG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9C"}