@phenx-inc/ctlsurf 0.11.0 → 0.12.1
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.
- package/out/headless/index.mjs +115 -5
- package/out/headless/index.mjs.map +3 -3
- package/out/main/index.js +316 -8
- package/out/preload/index.js +9 -0
- package/out/renderer/assets/{cssMode-Bmzy9hKX.js → cssMode-D7r66wvO.js} +3 -3
- package/out/renderer/assets/{freemarker2-CDAsExTa.js → freemarker2-jSWJIjPG.js} +1 -1
- package/out/renderer/assets/{handlebars-CvpBYG1L.js → handlebars-BnFyz5RH.js} +1 -1
- package/out/renderer/assets/{html-CNhEQqr8.js → html-Bl5UFavp.js} +1 -1
- package/out/renderer/assets/{htmlMode-DD7YPgga.js → htmlMode-D4VByBT6.js} +3 -3
- package/out/renderer/assets/{index-CGHeDwZa.css → index-Cc_TqOCL.css} +318 -0
- package/out/renderer/assets/{index-BDlCPzCG.js → index-DxhW1emk.js} +558 -85
- package/out/renderer/assets/{javascript-CsGLsswK.js → javascript-CMN1OmwG.js} +2 -2
- package/out/renderer/assets/{jsonMode-CTuGgRvC.js → jsonMode-CJ5AYSPV.js} +3 -3
- package/out/renderer/assets/{liquid-BrrN4uul.js → liquid-BGMIDTEm.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-Bhdn2Eqy.js → lspLanguageFeatures-DGifVYB5.js} +1 -1
- package/out/renderer/assets/{mdx-DJo-gax4.js → mdx-B2Z7R10Q.js} +1 -1
- package/out/renderer/assets/{python-DYHeg5b2.js → python-LMDMSSdn.js} +1 -1
- package/out/renderer/assets/{razor-Cqcks14K.js → razor-BZSrziPu.js} +1 -1
- package/out/renderer/assets/{tsMode-YTLgCayh.js → tsMode-DF9m6_3n.js} +1 -1
- package/out/renderer/assets/{typescript-oxBn_Vcw.js → typescript-rZeCMf0a.js} +1 -1
- package/out/renderer/assets/{xml-BEqGMCTc.js → xml-fNSZ-7so.js} +1 -1
- package/out/renderer/assets/{yaml-BGSrk5HC.js → yaml-1wxIuvzh.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/main/agents.ts +9 -1
- package/src/main/ctlsurfApi.ts +7 -0
- package/src/main/index.ts +62 -4
- package/src/main/orchestrator.ts +112 -4
- package/src/main/ssh.ts +348 -0
- package/src/preload/index.ts +26 -0
- package/src/renderer/App.tsx +25 -1
- package/src/renderer/components/AgentPicker.tsx +18 -0
- package/src/renderer/components/ProjectPicker.tsx +121 -0
- package/src/renderer/components/RemoteConnect.tsx +315 -0
- package/src/renderer/components/SpeakControls.tsx +8 -2
- package/src/renderer/components/TerminalPanel.tsx +134 -23
- package/src/renderer/components/TicketPanel.tsx +67 -26
- package/src/renderer/styles.css +318 -0
|
@@ -7486,6 +7486,17 @@ html, body, #root {
|
|
|
7486
7486
|
background: #1f2335;
|
|
7487
7487
|
}
|
|
7488
7488
|
|
|
7489
|
+
.titlebar-btn:disabled {
|
|
7490
|
+
opacity: 0.4;
|
|
7491
|
+
cursor: not-allowed;
|
|
7492
|
+
}
|
|
7493
|
+
|
|
7494
|
+
/* Keep the greyed-out look stable on hover for disabled buttons. */
|
|
7495
|
+
.titlebar-btn:disabled:hover {
|
|
7496
|
+
color: #565f89;
|
|
7497
|
+
border-color: #3b3d57;
|
|
7498
|
+
}
|
|
7499
|
+
|
|
7489
7500
|
.titlebar-separator {
|
|
7490
7501
|
width: 1px;
|
|
7491
7502
|
height: 16px;
|
|
@@ -7652,6 +7663,15 @@ html, body, #root {
|
|
|
7652
7663
|
}
|
|
7653
7664
|
|
|
7654
7665
|
/* Terminal container */
|
|
7666
|
+
.terminal-wrap {
|
|
7667
|
+
position: relative;
|
|
7668
|
+
flex: 1;
|
|
7669
|
+
min-width: 0;
|
|
7670
|
+
min-height: 0;
|
|
7671
|
+
width: 100%;
|
|
7672
|
+
height: 100%;
|
|
7673
|
+
}
|
|
7674
|
+
|
|
7655
7675
|
.terminal-container {
|
|
7656
7676
|
width: 100%;
|
|
7657
7677
|
height: 100%;
|
|
@@ -7663,6 +7683,34 @@ html, body, #root {
|
|
|
7663
7683
|
height: 100%;
|
|
7664
7684
|
}
|
|
7665
7685
|
|
|
7686
|
+
/* Floating "jump to latest" pill — shown only while scrolled up. */
|
|
7687
|
+
.term-jump-latest {
|
|
7688
|
+
position: absolute;
|
|
7689
|
+
bottom: 14px;
|
|
7690
|
+
right: 20px;
|
|
7691
|
+
z-index: 5;
|
|
7692
|
+
display: inline-flex;
|
|
7693
|
+
align-items: center;
|
|
7694
|
+
gap: 5px;
|
|
7695
|
+
padding: 5px 12px;
|
|
7696
|
+
border-radius: 14px;
|
|
7697
|
+
background: #2a2b3d;
|
|
7698
|
+
border: 1px solid #7aa2f7;
|
|
7699
|
+
color: #c0caf5;
|
|
7700
|
+
font-family: inherit;
|
|
7701
|
+
font-size: 11.5px;
|
|
7702
|
+
font-weight: 600;
|
|
7703
|
+
cursor: pointer;
|
|
7704
|
+
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
|
|
7705
|
+
transition: background 0.13s ease, transform 0.06s ease;
|
|
7706
|
+
}
|
|
7707
|
+
.term-jump-latest:hover {
|
|
7708
|
+
background: #343650;
|
|
7709
|
+
}
|
|
7710
|
+
.term-jump-latest:active {
|
|
7711
|
+
transform: translateY(1px);
|
|
7712
|
+
}
|
|
7713
|
+
|
|
7666
7714
|
.terminal-fullscreen {
|
|
7667
7715
|
width: 100%;
|
|
7668
7716
|
height: 100%;
|
|
@@ -8536,6 +8584,9 @@ html, body, #root {
|
|
|
8536
8584
|
border-radius: 12px;
|
|
8537
8585
|
padding: 32px 40px;
|
|
8538
8586
|
min-width: 360px;
|
|
8587
|
+
max-width: 460px;
|
|
8588
|
+
max-height: 88vh;
|
|
8589
|
+
overflow-y: auto;
|
|
8539
8590
|
text-align: center;
|
|
8540
8591
|
}
|
|
8541
8592
|
|
|
@@ -8604,6 +8655,7 @@ html, body, #root {
|
|
|
8604
8655
|
display: flex;
|
|
8605
8656
|
align-items: center;
|
|
8606
8657
|
justify-content: space-between;
|
|
8658
|
+
gap: 16px;
|
|
8607
8659
|
padding: 14px 18px;
|
|
8608
8660
|
background: #16161e;
|
|
8609
8661
|
border: 1px solid #2a2b3d;
|
|
@@ -8622,11 +8674,13 @@ html, body, #root {
|
|
|
8622
8674
|
font-size: 14px;
|
|
8623
8675
|
font-weight: 600;
|
|
8624
8676
|
color: #c0caf5;
|
|
8677
|
+
flex-shrink: 0;
|
|
8625
8678
|
}
|
|
8626
8679
|
|
|
8627
8680
|
.agent-picker-desc {
|
|
8628
8681
|
font-size: 11px;
|
|
8629
8682
|
color: #565f89;
|
|
8683
|
+
text-align: right;
|
|
8630
8684
|
}
|
|
8631
8685
|
|
|
8632
8686
|
.agent-picker-hint {
|
|
@@ -8651,6 +8705,201 @@ html, body, #root {
|
|
|
8651
8705
|
accent-color: #7aa2f7;
|
|
8652
8706
|
}
|
|
8653
8707
|
|
|
8708
|
+
/* ─── Remote (SSH) connect ───────────────────────── */
|
|
8709
|
+
|
|
8710
|
+
.remote-section-label {
|
|
8711
|
+
font-size: 10px;
|
|
8712
|
+
color: #565f89;
|
|
8713
|
+
text-transform: uppercase;
|
|
8714
|
+
letter-spacing: 1px;
|
|
8715
|
+
text-align: left;
|
|
8716
|
+
margin: 16px 0 8px;
|
|
8717
|
+
}
|
|
8718
|
+
|
|
8719
|
+
/* Scroll the host list rather than letting it grow the whole modal. */
|
|
8720
|
+
.remote-host-scroll {
|
|
8721
|
+
max-height: 40vh;
|
|
8722
|
+
overflow-y: auto;
|
|
8723
|
+
padding-right: 4px;
|
|
8724
|
+
}
|
|
8725
|
+
|
|
8726
|
+
/* Project rows: title on top, path muted + truncated below (paths are long). */
|
|
8727
|
+
.project-item {
|
|
8728
|
+
flex-direction: column;
|
|
8729
|
+
align-items: flex-start;
|
|
8730
|
+
gap: 4px;
|
|
8731
|
+
}
|
|
8732
|
+
|
|
8733
|
+
.project-item .agent-picker-name {
|
|
8734
|
+
max-width: 100%;
|
|
8735
|
+
overflow: hidden;
|
|
8736
|
+
text-overflow: ellipsis;
|
|
8737
|
+
white-space: nowrap;
|
|
8738
|
+
}
|
|
8739
|
+
|
|
8740
|
+
.project-item .agent-picker-desc {
|
|
8741
|
+
text-align: left;
|
|
8742
|
+
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
|
8743
|
+
font-size: 10px;
|
|
8744
|
+
max-width: 100%;
|
|
8745
|
+
overflow: hidden;
|
|
8746
|
+
text-overflow: ellipsis;
|
|
8747
|
+
white-space: nowrap;
|
|
8748
|
+
}
|
|
8749
|
+
|
|
8750
|
+
/* Compact host rows so more fit before scrolling. */
|
|
8751
|
+
.remote-host-scroll .agent-picker-item {
|
|
8752
|
+
padding: 10px 14px;
|
|
8753
|
+
}
|
|
8754
|
+
|
|
8755
|
+
.remote-toggle {
|
|
8756
|
+
display: flex;
|
|
8757
|
+
align-items: center;
|
|
8758
|
+
gap: 8px;
|
|
8759
|
+
margin-bottom: 4px;
|
|
8760
|
+
}
|
|
8761
|
+
|
|
8762
|
+
.remote-toggle-label {
|
|
8763
|
+
font-size: 12px;
|
|
8764
|
+
color: #565f89;
|
|
8765
|
+
}
|
|
8766
|
+
|
|
8767
|
+
.remote-toggle-btn {
|
|
8768
|
+
flex: 1;
|
|
8769
|
+
padding: 8px 10px;
|
|
8770
|
+
background: #16161e;
|
|
8771
|
+
border: 1px solid #2a2b3d;
|
|
8772
|
+
border-radius: 8px;
|
|
8773
|
+
color: #a9b1d6;
|
|
8774
|
+
font-size: 12px;
|
|
8775
|
+
cursor: pointer;
|
|
8776
|
+
transition: all 0.15s;
|
|
8777
|
+
}
|
|
8778
|
+
|
|
8779
|
+
.remote-toggle-btn:hover {
|
|
8780
|
+
border-color: #7aa2f7;
|
|
8781
|
+
}
|
|
8782
|
+
|
|
8783
|
+
.remote-toggle-btn.is-active {
|
|
8784
|
+
border-color: #7aa2f7;
|
|
8785
|
+
background: #1a1b2e;
|
|
8786
|
+
color: #c0caf5;
|
|
8787
|
+
font-weight: 600;
|
|
8788
|
+
}
|
|
8789
|
+
|
|
8790
|
+
.remote-manual {
|
|
8791
|
+
display: flex;
|
|
8792
|
+
gap: 8px;
|
|
8793
|
+
}
|
|
8794
|
+
|
|
8795
|
+
.remote-input {
|
|
8796
|
+
flex: 1;
|
|
8797
|
+
padding: 10px 12px;
|
|
8798
|
+
background: #16161e;
|
|
8799
|
+
border: 1px solid #2a2b3d;
|
|
8800
|
+
border-radius: 8px;
|
|
8801
|
+
color: #c0caf5;
|
|
8802
|
+
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
|
8803
|
+
font-size: 12px;
|
|
8804
|
+
outline: none;
|
|
8805
|
+
}
|
|
8806
|
+
|
|
8807
|
+
.remote-input:focus {
|
|
8808
|
+
border-color: #7aa2f7;
|
|
8809
|
+
}
|
|
8810
|
+
|
|
8811
|
+
.remote-btn {
|
|
8812
|
+
padding: 10px 16px;
|
|
8813
|
+
background: #7aa2f7;
|
|
8814
|
+
border: none;
|
|
8815
|
+
border-radius: 8px;
|
|
8816
|
+
color: #1f2335;
|
|
8817
|
+
font-size: 12px;
|
|
8818
|
+
font-weight: 600;
|
|
8819
|
+
cursor: pointer;
|
|
8820
|
+
}
|
|
8821
|
+
|
|
8822
|
+
.remote-btn:disabled {
|
|
8823
|
+
opacity: 0.4;
|
|
8824
|
+
cursor: default;
|
|
8825
|
+
}
|
|
8826
|
+
|
|
8827
|
+
.remote-link {
|
|
8828
|
+
margin-top: 18px;
|
|
8829
|
+
background: none;
|
|
8830
|
+
border: none;
|
|
8831
|
+
color: #7aa2f7;
|
|
8832
|
+
font-size: 12px;
|
|
8833
|
+
cursor: pointer;
|
|
8834
|
+
}
|
|
8835
|
+
|
|
8836
|
+
.remote-status {
|
|
8837
|
+
padding: 24px 8px;
|
|
8838
|
+
color: #a9b1d6;
|
|
8839
|
+
font-size: 13px;
|
|
8840
|
+
}
|
|
8841
|
+
|
|
8842
|
+
.remote-status-sub {
|
|
8843
|
+
margin-top: 6px;
|
|
8844
|
+
font-size: 11px;
|
|
8845
|
+
color: #565f89;
|
|
8846
|
+
word-break: break-word;
|
|
8847
|
+
}
|
|
8848
|
+
|
|
8849
|
+
.remote-spinner {
|
|
8850
|
+
width: 22px;
|
|
8851
|
+
height: 22px;
|
|
8852
|
+
margin: 0 auto 14px;
|
|
8853
|
+
border: 2px solid #2a2b3d;
|
|
8854
|
+
border-top-color: #7aa2f7;
|
|
8855
|
+
border-radius: 50%;
|
|
8856
|
+
animation: remote-spin 0.8s linear infinite;
|
|
8857
|
+
}
|
|
8858
|
+
|
|
8859
|
+
@keyframes remote-spin {
|
|
8860
|
+
to { transform: rotate(360deg); }
|
|
8861
|
+
}
|
|
8862
|
+
|
|
8863
|
+
.remote-target-line {
|
|
8864
|
+
font-size: 13px;
|
|
8865
|
+
color: #a9b1d6;
|
|
8866
|
+
margin-bottom: 4px;
|
|
8867
|
+
}
|
|
8868
|
+
|
|
8869
|
+
.remote-note {
|
|
8870
|
+
font-size: 11px;
|
|
8871
|
+
color: #e0af68;
|
|
8872
|
+
background: rgba(224, 175, 104, 0.08);
|
|
8873
|
+
border: 1px solid rgba(224, 175, 104, 0.25);
|
|
8874
|
+
border-radius: 8px;
|
|
8875
|
+
padding: 8px 12px;
|
|
8876
|
+
margin: 8px 0;
|
|
8877
|
+
text-align: left;
|
|
8878
|
+
line-height: 1.4;
|
|
8879
|
+
}
|
|
8880
|
+
|
|
8881
|
+
.remote-error {
|
|
8882
|
+
font-size: 13px;
|
|
8883
|
+
color: #f7768e;
|
|
8884
|
+
margin-bottom: 4px;
|
|
8885
|
+
}
|
|
8886
|
+
|
|
8887
|
+
.remote-pw {
|
|
8888
|
+
margin: 8px 0 4px;
|
|
8889
|
+
}
|
|
8890
|
+
|
|
8891
|
+
.remote-pw .remote-input {
|
|
8892
|
+
width: 100%;
|
|
8893
|
+
box-sizing: border-box;
|
|
8894
|
+
}
|
|
8895
|
+
|
|
8896
|
+
.remote-pw-hint {
|
|
8897
|
+
margin-top: 6px;
|
|
8898
|
+
font-size: 10px;
|
|
8899
|
+
color: #565f89;
|
|
8900
|
+
text-align: left;
|
|
8901
|
+
}
|
|
8902
|
+
|
|
8654
8903
|
/* Settings dialog */
|
|
8655
8904
|
.settings-overlay {
|
|
8656
8905
|
position: fixed;
|
|
@@ -8897,6 +9146,32 @@ html, body, #root {
|
|
|
8897
9146
|
color: #7aa2f7;
|
|
8898
9147
|
font-weight: 600;
|
|
8899
9148
|
}
|
|
9149
|
+
/* "+ New" action in the header (replaces the old footer button). */
|
|
9150
|
+
.ticket-drawer-new {
|
|
9151
|
+
flex-shrink: 0;
|
|
9152
|
+
align-self: center;
|
|
9153
|
+
display: inline-flex;
|
|
9154
|
+
align-items: center;
|
|
9155
|
+
gap: 3px;
|
|
9156
|
+
padding: 5px 11px;
|
|
9157
|
+
border-radius: 7px;
|
|
9158
|
+
background: rgba(122, 162, 247, 0.14);
|
|
9159
|
+
border: 1px solid rgba(122, 162, 247, 0.3);
|
|
9160
|
+
color: #9db4f5;
|
|
9161
|
+
font-family: inherit;
|
|
9162
|
+
font-size: 12px;
|
|
9163
|
+
font-weight: 600;
|
|
9164
|
+
cursor: pointer;
|
|
9165
|
+
transition: background 0.13s ease, border-color 0.13s ease, color 0.13s ease, transform 0.06s ease;
|
|
9166
|
+
}
|
|
9167
|
+
.ticket-drawer-new:hover {
|
|
9168
|
+
background: rgba(122, 162, 247, 0.22);
|
|
9169
|
+
border-color: rgba(122, 162, 247, 0.5);
|
|
9170
|
+
color: #c0d0fb;
|
|
9171
|
+
}
|
|
9172
|
+
.ticket-drawer-new:active {
|
|
9173
|
+
transform: translateY(1px);
|
|
9174
|
+
}
|
|
8900
9175
|
.ticket-drawer-warn {
|
|
8901
9176
|
color: #e0af68;
|
|
8902
9177
|
}
|
|
@@ -9094,6 +9369,49 @@ html, body, #root {
|
|
|
9094
9369
|
text-align: center;
|
|
9095
9370
|
}
|
|
9096
9371
|
|
|
9372
|
+
/* ── collapsible "Done" section header ── */
|
|
9373
|
+
.ticket-done-toggle {
|
|
9374
|
+
display: flex;
|
|
9375
|
+
align-items: center;
|
|
9376
|
+
gap: 7px;
|
|
9377
|
+
width: 100%;
|
|
9378
|
+
margin-top: 3px;
|
|
9379
|
+
padding: 7px 4px;
|
|
9380
|
+
background: none;
|
|
9381
|
+
border: none;
|
|
9382
|
+
border-top: 1px solid #262a3f;
|
|
9383
|
+
color: #6b739b;
|
|
9384
|
+
font-family: inherit;
|
|
9385
|
+
font-size: 11.5px;
|
|
9386
|
+
font-weight: 600;
|
|
9387
|
+
letter-spacing: 0.03em;
|
|
9388
|
+
text-transform: uppercase;
|
|
9389
|
+
cursor: pointer;
|
|
9390
|
+
transition: color 0.13s ease;
|
|
9391
|
+
}
|
|
9392
|
+
.ticket-done-toggle:hover {
|
|
9393
|
+
color: #a9b1d6;
|
|
9394
|
+
}
|
|
9395
|
+
.ticket-done-caret {
|
|
9396
|
+
display: inline-block;
|
|
9397
|
+
font-size: 10px;
|
|
9398
|
+
transition: transform 0.13s ease;
|
|
9399
|
+
}
|
|
9400
|
+
.ticket-done-caret.open {
|
|
9401
|
+
transform: rotate(90deg);
|
|
9402
|
+
}
|
|
9403
|
+
.ticket-done-count {
|
|
9404
|
+
margin-left: auto;
|
|
9405
|
+
min-width: 18px;
|
|
9406
|
+
padding: 1px 6px;
|
|
9407
|
+
border-radius: 9px;
|
|
9408
|
+
background: #262a3f;
|
|
9409
|
+
color: #8088ac;
|
|
9410
|
+
font-size: 11px;
|
|
9411
|
+
font-weight: 600;
|
|
9412
|
+
text-align: center;
|
|
9413
|
+
}
|
|
9414
|
+
|
|
9097
9415
|
.ticket-empty {
|
|
9098
9416
|
display: flex;
|
|
9099
9417
|
flex-direction: column;
|