pinokiod 7.5.6 → 7.5.8
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/kernel/api/shell/index.js +7 -2
- package/kernel/bin/node.js +13 -8
- package/kernel/shell.js +20 -1
- package/kernel/shell_conda_runtime_guard.js +647 -0
- package/kernel/shells.js +8 -2
- package/package.json +1 -1
- package/server/index.js +3 -0
- package/server/public/common.js +11 -4
- package/server/public/logs.js +597 -4
- package/server/public/style.css +203 -42
- package/server/views/app.ejs +39 -31
- package/server/views/editor.ejs +1 -0
- package/server/views/install.ejs +1 -0
- package/server/views/logs.ejs +9 -5
- package/server/views/terminal.ejs +34 -5
- package/test/node-bin.test.js +39 -0
- package/test/shell-api.test.js +99 -9
- package/test/shell-conda-runtime-guard.test.js +558 -0
- package/test/shells-live-error.test.js +24 -2
package/server/public/style.css
CHANGED
|
@@ -5055,21 +5055,42 @@ body.dark .logs-icon-button:focus-visible {
|
|
|
5055
5055
|
.logs-community-footer {
|
|
5056
5056
|
flex: 0 0 auto;
|
|
5057
5057
|
min-width: 0;
|
|
5058
|
+
position: relative;
|
|
5058
5059
|
display: grid;
|
|
5059
|
-
grid-template-columns: minmax(
|
|
5060
|
+
grid-template-columns: minmax(240px, 0.3fr) minmax(320px, 1fr) auto;
|
|
5060
5061
|
align-items: center;
|
|
5061
|
-
gap:
|
|
5062
|
-
min-height:
|
|
5063
|
-
padding:
|
|
5062
|
+
gap: 12px;
|
|
5063
|
+
min-height: 64px;
|
|
5064
|
+
padding: 12px 20px;
|
|
5064
5065
|
border: 0;
|
|
5065
|
-
border-top: 1px solid rgba(
|
|
5066
|
+
border-top: 1px solid rgba(78, 111, 176, 0.22);
|
|
5066
5067
|
border-radius: 0;
|
|
5067
|
-
background:
|
|
5068
|
-
|
|
5068
|
+
background:
|
|
5069
|
+
linear-gradient(90deg, rgba(236, 243, 255, 0.96), rgba(248, 250, 252, 0.96));
|
|
5070
|
+
box-shadow:
|
|
5071
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.82),
|
|
5072
|
+
0 -1px 0 rgba(78, 111, 176, 0.06);
|
|
5073
|
+
}
|
|
5074
|
+
.logs-community-footer::before {
|
|
5075
|
+
content: "";
|
|
5076
|
+
position: absolute;
|
|
5077
|
+
left: 0;
|
|
5078
|
+
top: 10px;
|
|
5079
|
+
bottom: 10px;
|
|
5080
|
+
width: 3px;
|
|
5081
|
+
border-radius: 0 3px 3px 0;
|
|
5082
|
+
background: #4568b2;
|
|
5069
5083
|
}
|
|
5070
5084
|
body.dark .logs-community-footer {
|
|
5071
|
-
border-top-color: rgba(
|
|
5072
|
-
background:
|
|
5085
|
+
border-top-color: rgba(139, 171, 235, 0.18);
|
|
5086
|
+
background:
|
|
5087
|
+
linear-gradient(90deg, rgba(45, 65, 110, 0.34), rgba(255, 255, 255, 0.045));
|
|
5088
|
+
box-shadow:
|
|
5089
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.05),
|
|
5090
|
+
0 -1px 0 rgba(0, 0, 0, 0.18);
|
|
5091
|
+
}
|
|
5092
|
+
body.dark .logs-community-footer::before {
|
|
5093
|
+
background: #8daeff;
|
|
5073
5094
|
}
|
|
5074
5095
|
.logs-community-copy {
|
|
5075
5096
|
min-width: 0;
|
|
@@ -5078,25 +5099,31 @@ body.dark .logs-community-footer {
|
|
|
5078
5099
|
display: inline-flex;
|
|
5079
5100
|
align-items: center;
|
|
5080
5101
|
gap: 8px;
|
|
5081
|
-
color: #
|
|
5102
|
+
color: #172033;
|
|
5082
5103
|
font-size: 13px;
|
|
5083
5104
|
line-height: 1.2;
|
|
5084
5105
|
font-weight: 800;
|
|
5085
5106
|
}
|
|
5086
5107
|
.logs-community-heading i {
|
|
5087
|
-
color:
|
|
5108
|
+
color: #345aa2;
|
|
5088
5109
|
font-size: 13px;
|
|
5089
5110
|
}
|
|
5090
5111
|
body.dark .logs-community-heading {
|
|
5091
|
-
color:
|
|
5112
|
+
color: rgba(248, 250, 252, 0.9);
|
|
5113
|
+
}
|
|
5114
|
+
body.dark .logs-community-heading i {
|
|
5115
|
+
color: #a7c0ff;
|
|
5092
5116
|
}
|
|
5093
5117
|
.logs-community-subtitle {
|
|
5094
5118
|
margin-top: 3px;
|
|
5095
|
-
color:
|
|
5119
|
+
color: #536079;
|
|
5096
5120
|
font-size: 12px;
|
|
5097
5121
|
line-height: 1.25;
|
|
5098
5122
|
font-weight: 500;
|
|
5099
5123
|
}
|
|
5124
|
+
body.dark .logs-community-subtitle {
|
|
5125
|
+
color: rgba(224, 232, 255, 0.7);
|
|
5126
|
+
}
|
|
5100
5127
|
.logs-community-title-field {
|
|
5101
5128
|
min-width: 0;
|
|
5102
5129
|
display: grid;
|
|
@@ -5107,17 +5134,18 @@ body.dark .logs-community-heading {
|
|
|
5107
5134
|
.logs-community-title-control {
|
|
5108
5135
|
min-width: 0;
|
|
5109
5136
|
width: 100%;
|
|
5110
|
-
height:
|
|
5137
|
+
height: 38px;
|
|
5111
5138
|
display: flex;
|
|
5112
5139
|
align-items: center;
|
|
5113
|
-
border: 1px solid
|
|
5140
|
+
border: 1px solid rgba(78, 111, 176, 0.26);
|
|
5114
5141
|
border-radius: 7px;
|
|
5115
5142
|
padding: 0;
|
|
5116
|
-
background: rgba(255, 255, 255, 0.
|
|
5143
|
+
background: rgba(255, 255, 255, 0.82);
|
|
5117
5144
|
overflow: hidden;
|
|
5118
5145
|
}
|
|
5119
5146
|
body.dark .logs-community-title-control {
|
|
5120
|
-
|
|
5147
|
+
border-color: rgba(167, 192, 255, 0.2);
|
|
5148
|
+
background: rgba(255, 255, 255, 0.045);
|
|
5121
5149
|
}
|
|
5122
5150
|
.logs-community-title-prefix {
|
|
5123
5151
|
flex: 0 0 auto;
|
|
@@ -5125,16 +5153,18 @@ body.dark .logs-community-title-control {
|
|
|
5125
5153
|
display: inline-flex;
|
|
5126
5154
|
align-items: center;
|
|
5127
5155
|
padding: 0 11px;
|
|
5128
|
-
border-right: 1px solid
|
|
5129
|
-
color:
|
|
5156
|
+
border-right: 1px solid rgba(78, 111, 176, 0.16);
|
|
5157
|
+
color: #69758d;
|
|
5130
5158
|
font-size: 10px;
|
|
5131
5159
|
line-height: 1;
|
|
5132
5160
|
font-weight: 760;
|
|
5133
5161
|
text-transform: uppercase;
|
|
5134
5162
|
white-space: nowrap;
|
|
5135
|
-
background: rgba(
|
|
5163
|
+
background: rgba(78, 111, 176, 0.06);
|
|
5136
5164
|
}
|
|
5137
5165
|
body.dark .logs-community-title-prefix {
|
|
5166
|
+
border-right-color: rgba(167, 192, 255, 0.12);
|
|
5167
|
+
color: rgba(224, 232, 255, 0.58);
|
|
5138
5168
|
background: rgba(255, 255, 255, 0.035);
|
|
5139
5169
|
}
|
|
5140
5170
|
.logs-community-title-input {
|
|
@@ -5148,17 +5178,91 @@ body.dark .logs-community-title-prefix {
|
|
|
5148
5178
|
color: var(--logs-text);
|
|
5149
5179
|
font-size: 12px;
|
|
5150
5180
|
font-weight: 650;
|
|
5151
|
-
line-height:
|
|
5181
|
+
line-height: 38px;
|
|
5152
5182
|
outline: none;
|
|
5153
5183
|
}
|
|
5154
5184
|
.logs-community-title-control:focus-within {
|
|
5155
|
-
border-color:
|
|
5156
|
-
box-shadow: 0 0 0 2px
|
|
5185
|
+
border-color: rgba(78, 111, 176, 0.48);
|
|
5186
|
+
box-shadow: 0 0 0 2px rgba(78, 111, 176, 0.13);
|
|
5157
5187
|
}
|
|
5158
5188
|
.logs-community-title-input:disabled {
|
|
5159
5189
|
opacity: 0.62;
|
|
5160
5190
|
cursor: not-allowed;
|
|
5161
5191
|
}
|
|
5192
|
+
.logs-help-actions {
|
|
5193
|
+
min-width: 0;
|
|
5194
|
+
display: inline-flex;
|
|
5195
|
+
align-items: center;
|
|
5196
|
+
justify-content: flex-end;
|
|
5197
|
+
gap: 8px;
|
|
5198
|
+
}
|
|
5199
|
+
.logs-help-action {
|
|
5200
|
+
border: 1px solid rgba(78, 111, 176, 0.24);
|
|
5201
|
+
border-radius: 7px;
|
|
5202
|
+
min-width: 126px;
|
|
5203
|
+
min-height: 38px;
|
|
5204
|
+
padding: 0 14px;
|
|
5205
|
+
display: inline-flex;
|
|
5206
|
+
align-items: center;
|
|
5207
|
+
justify-content: center;
|
|
5208
|
+
gap: 7px;
|
|
5209
|
+
color: #172033;
|
|
5210
|
+
background: rgba(255, 255, 255, 0.82);
|
|
5211
|
+
font-size: 13px;
|
|
5212
|
+
line-height: 1;
|
|
5213
|
+
font-weight: 820;
|
|
5214
|
+
cursor: pointer;
|
|
5215
|
+
white-space: nowrap;
|
|
5216
|
+
transition: background 140ms ease, border-color 140ms ease, color 140ms ease, transform 140ms ease;
|
|
5217
|
+
}
|
|
5218
|
+
.logs-help-action:hover,
|
|
5219
|
+
.logs-help-action:focus-visible {
|
|
5220
|
+
outline: none;
|
|
5221
|
+
border-color: rgba(78, 111, 176, 0.36);
|
|
5222
|
+
background: rgba(255, 255, 255, 0.96);
|
|
5223
|
+
}
|
|
5224
|
+
.logs-help-action:active {
|
|
5225
|
+
transform: translateY(1px);
|
|
5226
|
+
}
|
|
5227
|
+
.logs-help-action:disabled {
|
|
5228
|
+
opacity: 0.58;
|
|
5229
|
+
cursor: not-allowed;
|
|
5230
|
+
transform: none;
|
|
5231
|
+
}
|
|
5232
|
+
.logs-help-action--ai {
|
|
5233
|
+
border-color: #172033;
|
|
5234
|
+
background: #172033;
|
|
5235
|
+
color: #fff;
|
|
5236
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.18);
|
|
5237
|
+
}
|
|
5238
|
+
.logs-help-action--ai:hover,
|
|
5239
|
+
.logs-help-action--ai:focus-visible {
|
|
5240
|
+
border-color: #0f1625;
|
|
5241
|
+
background: #0f1625;
|
|
5242
|
+
color: #fff;
|
|
5243
|
+
}
|
|
5244
|
+
body.dark .logs-help-action--community {
|
|
5245
|
+
border-color: rgba(167, 192, 255, 0.2);
|
|
5246
|
+
}
|
|
5247
|
+
body.dark .logs-help-action {
|
|
5248
|
+
background: rgba(255, 255, 255, 0.045);
|
|
5249
|
+
color: rgba(248, 250, 252, 0.9);
|
|
5250
|
+
}
|
|
5251
|
+
body.dark .logs-help-action:hover,
|
|
5252
|
+
body.dark .logs-help-action:focus-visible {
|
|
5253
|
+
background: rgba(255, 255, 255, 0.075);
|
|
5254
|
+
}
|
|
5255
|
+
body.dark .logs-help-action--ai {
|
|
5256
|
+
border-color: rgba(248, 250, 252, 0.88);
|
|
5257
|
+
background: rgba(248, 250, 252, 0.9);
|
|
5258
|
+
color: #111827;
|
|
5259
|
+
}
|
|
5260
|
+
body.dark .logs-help-action--ai:hover,
|
|
5261
|
+
body.dark .logs-help-action--ai:focus-visible {
|
|
5262
|
+
border-color: #fff;
|
|
5263
|
+
background: #fff;
|
|
5264
|
+
color: #111827;
|
|
5265
|
+
}
|
|
5162
5266
|
.logs-community-title-note {
|
|
5163
5267
|
display: none;
|
|
5164
5268
|
max-width: 130px;
|
|
@@ -5173,13 +5277,60 @@ body.dark .logs-community-title-prefix {
|
|
|
5173
5277
|
.logs-community-title-note:not(:empty) {
|
|
5174
5278
|
display: inline;
|
|
5175
5279
|
}
|
|
5176
|
-
.logs-
|
|
5177
|
-
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
|
|
5181
|
-
|
|
5182
|
-
|
|
5280
|
+
.logs-ask-ai-launcher-panel {
|
|
5281
|
+
width: min(620px, calc(100vw - 28px));
|
|
5282
|
+
}
|
|
5283
|
+
.logs-ask-ai-launcher-body {
|
|
5284
|
+
min-height: 270px;
|
|
5285
|
+
}
|
|
5286
|
+
.logs-ask-ai-launcher-textarea {
|
|
5287
|
+
min-height: 96px;
|
|
5288
|
+
}
|
|
5289
|
+
.logs-ask-ai-launcher-footer {
|
|
5290
|
+
min-height: 66px;
|
|
5291
|
+
}
|
|
5292
|
+
.logs-ask-ai-launcher-tool-section {
|
|
5293
|
+
flex: 0 1 440px;
|
|
5294
|
+
min-width: min(440px, 58vw);
|
|
5295
|
+
}
|
|
5296
|
+
.logs-ask-ai-tool-picker {
|
|
5297
|
+
position: relative;
|
|
5298
|
+
width: 100%;
|
|
5299
|
+
}
|
|
5300
|
+
.logs-ask-ai-tool-trigger {
|
|
5301
|
+
pointer-events: none;
|
|
5302
|
+
}
|
|
5303
|
+
.logs-ask-ai-tool-picker:focus-within .logs-ask-ai-tool-trigger {
|
|
5304
|
+
border-color: var(--universal-launcher-border-strong);
|
|
5305
|
+
background: var(--universal-launcher-control-surface);
|
|
5306
|
+
outline: none;
|
|
5307
|
+
}
|
|
5308
|
+
.logs-ask-ai-tool-select {
|
|
5309
|
+
position: absolute;
|
|
5310
|
+
inset: 0;
|
|
5311
|
+
width: 100%;
|
|
5312
|
+
height: 100%;
|
|
5313
|
+
appearance: none;
|
|
5314
|
+
border: 0;
|
|
5315
|
+
opacity: 0;
|
|
5316
|
+
cursor: pointer;
|
|
5317
|
+
}
|
|
5318
|
+
.logs-ask-ai-tool-select:disabled {
|
|
5319
|
+
cursor: default;
|
|
5320
|
+
}
|
|
5321
|
+
.logs-ask-ai-tool-trigger-icon {
|
|
5322
|
+
display: inline-flex;
|
|
5323
|
+
align-items: center;
|
|
5324
|
+
justify-content: center;
|
|
5325
|
+
color: var(--universal-launcher-text);
|
|
5326
|
+
font-size: 14px;
|
|
5327
|
+
}
|
|
5328
|
+
.logs-ask-ai-tool-trigger-image {
|
|
5329
|
+
display: block;
|
|
5330
|
+
width: 20px;
|
|
5331
|
+
height: 20px;
|
|
5332
|
+
object-fit: contain;
|
|
5333
|
+
border-radius: 4px;
|
|
5183
5334
|
}
|
|
5184
5335
|
.logs-report-pane,
|
|
5185
5336
|
.logs-redaction-pane {
|
|
@@ -5871,13 +6022,6 @@ body.dark .logs-zip-status.is-error {
|
|
|
5871
6022
|
background: var(--logs-soft);
|
|
5872
6023
|
outline: none;
|
|
5873
6024
|
}
|
|
5874
|
-
.logs-primary-button.logs-community-submit {
|
|
5875
|
-
min-width: 154px;
|
|
5876
|
-
min-height: 38px;
|
|
5877
|
-
padding: 0 16px;
|
|
5878
|
-
font-size: 13px;
|
|
5879
|
-
font-weight: 850;
|
|
5880
|
-
}
|
|
5881
6025
|
.logs-flat-button.is-busy::after {
|
|
5882
6026
|
content: '\f110';
|
|
5883
6027
|
font-family: 'Font Awesome 6 Free';
|
|
@@ -6205,9 +6349,9 @@ body.dark .logs-resizer:hover .logs-resizer-toggle {
|
|
|
6205
6349
|
.logs-community-title-field {
|
|
6206
6350
|
grid-column: 1;
|
|
6207
6351
|
}
|
|
6208
|
-
.logs-
|
|
6352
|
+
.logs-help-actions {
|
|
6209
6353
|
grid-column: 2;
|
|
6210
|
-
|
|
6354
|
+
justify-content: flex-end;
|
|
6211
6355
|
}
|
|
6212
6356
|
}
|
|
6213
6357
|
@media (max-width: 720px) {
|
|
@@ -6224,7 +6368,7 @@ body.dark .logs-resizer:hover .logs-resizer-toggle {
|
|
|
6224
6368
|
}
|
|
6225
6369
|
.logs-community-copy,
|
|
6226
6370
|
.logs-community-title-field,
|
|
6227
|
-
.logs-
|
|
6371
|
+
.logs-help-actions {
|
|
6228
6372
|
grid-column: 1;
|
|
6229
6373
|
}
|
|
6230
6374
|
.logs-community-title-field {
|
|
@@ -6234,8 +6378,25 @@ body.dark .logs-resizer:hover .logs-resizer-toggle {
|
|
|
6234
6378
|
grid-column: 1;
|
|
6235
6379
|
max-width: none;
|
|
6236
6380
|
}
|
|
6237
|
-
.logs-
|
|
6238
|
-
|
|
6381
|
+
.logs-help-actions {
|
|
6382
|
+
display: grid;
|
|
6383
|
+
grid-template-columns: 1fr 1fr;
|
|
6384
|
+
width: 100%;
|
|
6385
|
+
}
|
|
6386
|
+
.logs-help-action {
|
|
6387
|
+
width: 100%;
|
|
6388
|
+
}
|
|
6389
|
+
.logs-ask-ai-launcher-footer {
|
|
6390
|
+
align-items: stretch;
|
|
6391
|
+
flex-direction: column;
|
|
6392
|
+
}
|
|
6393
|
+
.logs-ask-ai-launcher-tool-section {
|
|
6394
|
+
flex-basis: auto;
|
|
6395
|
+
min-width: 0;
|
|
6396
|
+
width: 100%;
|
|
6397
|
+
}
|
|
6398
|
+
.logs-ask-ai-launcher-footer .universal-launcher-footer-actions,
|
|
6399
|
+
.logs-ask-ai-launcher-footer .universal-launcher-button {
|
|
6239
6400
|
width: 100%;
|
|
6240
6401
|
}
|
|
6241
6402
|
}
|
package/server/views/app.ejs
CHANGED
|
@@ -1504,19 +1504,9 @@ body.dark .ask-ai-drawer-location-input {
|
|
|
1504
1504
|
body.dark .ask-ai-drawer-empty {
|
|
1505
1505
|
color: rgba(255,255,255,0.7);
|
|
1506
1506
|
}
|
|
1507
|
-
.ask-ai-drawer-empty-title {
|
|
1508
|
-
font-size: 14px;
|
|
1509
|
-
font-weight: 600;
|
|
1510
|
-
line-height: 1.25;
|
|
1511
|
-
color: rgba(15, 23, 42, 0.92);
|
|
1512
|
-
}
|
|
1513
|
-
body.dark .ask-ai-drawer-empty-title {
|
|
1514
|
-
color: rgba(248, 250, 252, 0.95);
|
|
1515
|
-
}
|
|
1516
1507
|
.ask-ai-drawer-empty-subtitle {
|
|
1517
1508
|
font-size: 12px;
|
|
1518
1509
|
line-height: 1.4;
|
|
1519
|
-
margin-top: -6px;
|
|
1520
1510
|
color: rgba(75, 85, 99, 0.78);
|
|
1521
1511
|
}
|
|
1522
1512
|
body.dark .ask-ai-drawer-empty-subtitle {
|
|
@@ -1592,6 +1582,12 @@ body.dark .ask-ai-drawer-search-input::placeholder {
|
|
|
1592
1582
|
opacity: 0.58;
|
|
1593
1583
|
padding: 0 2px 3px;
|
|
1594
1584
|
}
|
|
1585
|
+
.ask-ai-drawer-picker-group-description {
|
|
1586
|
+
font-size: 11px;
|
|
1587
|
+
line-height: 1.35;
|
|
1588
|
+
opacity: 0.62;
|
|
1589
|
+
padding: 0 2px 5px;
|
|
1590
|
+
}
|
|
1595
1591
|
.ask-ai-drawer-picker-option {
|
|
1596
1592
|
appearance: none;
|
|
1597
1593
|
-webkit-appearance: none;
|
|
@@ -7875,10 +7871,10 @@ body.dark .pinokio-custom-terminal-header {
|
|
|
7875
7871
|
</div>
|
|
7876
7872
|
</div>
|
|
7877
7873
|
<div class='mobile-drawer-actions' aria-label="App actions">
|
|
7878
|
-
<button type='button' class='btn header-item mobile-nav-logs' data-mobile-proxy="#logs-toggle" data-mobile-panel="logs" data-mobile-close-menu="true" aria-pressed="false" aria-label="
|
|
7874
|
+
<button type='button' class='btn header-item mobile-nav-logs' data-mobile-proxy="#logs-toggle" data-mobile-panel="logs" data-mobile-close-menu="true" aria-pressed="false" aria-label="Get Help">
|
|
7879
7875
|
<div class='tab'>
|
|
7880
|
-
<i class="fa-solid fa-circle-
|
|
7881
|
-
<div class='display'>
|
|
7876
|
+
<i class="fa-solid fa-circle-question menu-action-leading-icon"></i>
|
|
7877
|
+
<div class='display'>Get Help</div>
|
|
7882
7878
|
<div class='flexible'></div>
|
|
7883
7879
|
</div>
|
|
7884
7880
|
</button>
|
|
@@ -7912,10 +7908,10 @@ body.dark .pinokio-custom-terminal-header {
|
|
|
7912
7908
|
<% if (type === 'browse') { %>
|
|
7913
7909
|
<%- include('./partials/fs_status') %>
|
|
7914
7910
|
<% } %>
|
|
7915
|
-
<button type='button' id='logs-toggle' class="btn header-item" data-tippy-content="
|
|
7911
|
+
<button type='button' id='logs-toggle' class="btn header-item" data-tippy-content="Get help with logs" aria-expanded="false" aria-controls="app-logs-drawer">
|
|
7916
7912
|
<div class='tab'>
|
|
7917
|
-
<i class="fa-solid fa-circle-
|
|
7918
|
-
<div class='display'>
|
|
7913
|
+
<i class="fa-solid fa-circle-question menu-action-leading-icon"></i>
|
|
7914
|
+
<div class='display'>Get Help</div>
|
|
7919
7915
|
<div class='flexible'></div>
|
|
7920
7916
|
<span class='logs-new-badge hidden' id='logs-new-badge'>New</span>
|
|
7921
7917
|
</div>
|
|
@@ -8077,14 +8073,13 @@ body.dark .pinokio-custom-terminal-header {
|
|
|
8077
8073
|
</div>
|
|
8078
8074
|
<div class='ask-ai-drawer-body'>
|
|
8079
8075
|
<div class='ask-ai-drawer-empty'>
|
|
8076
|
+
<div class='ask-ai-drawer-empty-subtitle'>Ask questions, debug errors, fix bugs, or edit files. Agents can read this project's code, scripts, environment, and recent logs.</div>
|
|
8080
8077
|
<div class='ask-ai-drawer-search'>
|
|
8081
8078
|
<i class="fa-solid fa-magnifying-glass" aria-hidden="true"></i>
|
|
8082
|
-
<input class='ask-ai-drawer-search-input' type='search' placeholder="Search
|
|
8079
|
+
<input class='ask-ai-drawer-search-input' type='search' placeholder="Search agents and shells" autocomplete="off" spellcheck="false" aria-label="Search agents and shells">
|
|
8083
8080
|
</div>
|
|
8084
|
-
<div class='ask-ai-drawer-
|
|
8085
|
-
<div class='ask-ai-drawer-
|
|
8086
|
-
<div class='ask-ai-drawer-picker-list' role="list" aria-label="Ask AI shells and plugins"></div>
|
|
8087
|
-
<div class='ask-ai-drawer-picker-status muted'>Choose a shell or plugin to start an agent.</div>
|
|
8081
|
+
<div class='ask-ai-drawer-picker-list' role="list" aria-label="Ask AI agents and shells"></div>
|
|
8082
|
+
<div class='ask-ai-drawer-picker-status muted'>Choose an agent to start, or open a project shell.</div>
|
|
8088
8083
|
</div>
|
|
8089
8084
|
<iframe class='ask-ai-frame hidden' title="Panel" allow="fullscreen *;" allowfullscreen></iframe>
|
|
8090
8085
|
</div>
|
|
@@ -10732,7 +10727,7 @@ const rerenderMenuSection = (container, html) => {
|
|
|
10732
10727
|
}
|
|
10733
10728
|
if (mobileLogsButton) {
|
|
10734
10729
|
mobileLogsButton.classList.toggle("has-new", show)
|
|
10735
|
-
mobileLogsButton.setAttribute("aria-label", show ? "
|
|
10730
|
+
mobileLogsButton.setAttribute("aria-label", show ? "Get Help, new report available" : "Get Help")
|
|
10736
10731
|
}
|
|
10737
10732
|
try {
|
|
10738
10733
|
if (show) {
|
|
@@ -16434,7 +16429,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16434
16429
|
}
|
|
16435
16430
|
}
|
|
16436
16431
|
|
|
16437
|
-
const normalizeLaunchUrl = (rawUrl, workspaceCwd) => {
|
|
16432
|
+
const normalizeLaunchUrl = (rawUrl, workspaceCwd, prompt) => {
|
|
16438
16433
|
if (!rawUrl) {
|
|
16439
16434
|
return null
|
|
16440
16435
|
}
|
|
@@ -16447,6 +16442,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16447
16442
|
if (parsed.origin !== window.location.origin) {
|
|
16448
16443
|
return null
|
|
16449
16444
|
}
|
|
16445
|
+
const hasPromptOverride = typeof prompt === "string"
|
|
16446
|
+
const normalizedPrompt = hasPromptOverride ? prompt.trim() : ""
|
|
16450
16447
|
if (
|
|
16451
16448
|
parsed.pathname.startsWith("/run/plugin/")
|
|
16452
16449
|
|| parsed.pathname.startsWith("/pinokio/run/plugin/")
|
|
@@ -16457,6 +16454,9 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16457
16454
|
}
|
|
16458
16455
|
parsed.searchParams.set("ask_ai", "1")
|
|
16459
16456
|
parsed.searchParams.delete("prompt")
|
|
16457
|
+
if (hasPromptOverride && normalizedPrompt) {
|
|
16458
|
+
parsed.searchParams.set("prompt", normalizedPrompt)
|
|
16459
|
+
}
|
|
16460
16460
|
}
|
|
16461
16461
|
return `${parsed.pathname}${parsed.search}${parsed.hash}`
|
|
16462
16462
|
}
|
|
@@ -16784,7 +16784,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16784
16784
|
clearPickerList()
|
|
16785
16785
|
const sourceTools = Array.isArray(tools) ? tools : []
|
|
16786
16786
|
if (sourceTools.length === 0) {
|
|
16787
|
-
setPickerStatus("No
|
|
16787
|
+
setPickerStatus("No agents or shells available.")
|
|
16788
16788
|
return
|
|
16789
16789
|
}
|
|
16790
16790
|
const normalizedQuery = normalizePickerQuery(query)
|
|
@@ -16792,7 +16792,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16792
16792
|
? sourceTools.filter((tool) => toolMatchesPickerQuery(tool, normalizedQuery))
|
|
16793
16793
|
: sourceTools
|
|
16794
16794
|
if (visibleTools.length === 0) {
|
|
16795
|
-
setPickerStatus("No matching
|
|
16795
|
+
setPickerStatus("No matching agents or shells.")
|
|
16796
16796
|
return
|
|
16797
16797
|
}
|
|
16798
16798
|
const groups = new Map()
|
|
@@ -16803,7 +16803,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16803
16803
|
}
|
|
16804
16804
|
groups.get(category).push(tool)
|
|
16805
16805
|
})
|
|
16806
|
-
const ordered = ["
|
|
16806
|
+
const ordered = ["CLI", "IDE", "SHELL"].concat(Array.from(groups.keys()).filter((name) => !["SHELL", "CLI", "IDE"].includes(name)))
|
|
16807
16807
|
let renderedCount = 0
|
|
16808
16808
|
ordered.forEach((category) => {
|
|
16809
16809
|
const items = (groups.get(category) || []).slice().sort((a, b) =>
|
|
@@ -16817,14 +16817,20 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16817
16817
|
return
|
|
16818
16818
|
}
|
|
16819
16819
|
const displayCategory = category === "SHELL"
|
|
16820
|
-
? "Project
|
|
16821
|
-
: (category === "IDE" ? "Desktop
|
|
16820
|
+
? "Project Shells"
|
|
16821
|
+
: (category === "IDE" ? "Desktop Agents" : (category === "CLI" ? "Terminal Agents" : category))
|
|
16822
16822
|
const group = document.createElement("div")
|
|
16823
16823
|
group.className = "ask-ai-drawer-picker-group"
|
|
16824
16824
|
const label = document.createElement("div")
|
|
16825
16825
|
label.className = "ask-ai-drawer-picker-group-label"
|
|
16826
16826
|
label.textContent = displayCategory
|
|
16827
16827
|
group.appendChild(label)
|
|
16828
|
+
if (category === "SHELL") {
|
|
16829
|
+
const description = document.createElement("div")
|
|
16830
|
+
description.className = "ask-ai-drawer-picker-group-description"
|
|
16831
|
+
description.textContent = "Open a shell in this project without starting an AI agent."
|
|
16832
|
+
group.appendChild(description)
|
|
16833
|
+
}
|
|
16828
16834
|
items.forEach((tool) => {
|
|
16829
16835
|
group.appendChild(createPickerOption(tool, workspaceCwd))
|
|
16830
16836
|
renderedCount += 1
|
|
@@ -16834,7 +16840,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16834
16840
|
}
|
|
16835
16841
|
})
|
|
16836
16842
|
if (!renderedCount) {
|
|
16837
|
-
setPickerStatus("No
|
|
16843
|
+
setPickerStatus("No agents or shells available.")
|
|
16838
16844
|
return
|
|
16839
16845
|
}
|
|
16840
16846
|
setPickerStatus("")
|
|
@@ -16843,7 +16849,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16843
16849
|
const openWithUrl = (rawUrl, opts = {}) => {
|
|
16844
16850
|
const workspaceCwd = opts && typeof opts.workspaceCwd === "string" ? opts.workspaceCwd : ""
|
|
16845
16851
|
const frameName = opts && typeof opts.frameName === "string" ? opts.frameName.trim() : ""
|
|
16846
|
-
const
|
|
16852
|
+
const prompt = opts && typeof opts.prompt === "string" ? opts.prompt : undefined
|
|
16853
|
+
const normalized = normalizeLaunchUrl(rawUrl, workspaceCwd, prompt)
|
|
16847
16854
|
if (!normalized) {
|
|
16848
16855
|
return false
|
|
16849
16856
|
}
|
|
@@ -16871,7 +16878,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
16871
16878
|
return false
|
|
16872
16879
|
}
|
|
16873
16880
|
return openWithUrl(payload.agentHref, {
|
|
16874
|
-
workspaceCwd: resolveWorkspaceCwd(payload)
|
|
16881
|
+
workspaceCwd: resolveWorkspaceCwd(payload),
|
|
16882
|
+
prompt: typeof payload.prompt === "string" ? payload.prompt : undefined
|
|
16875
16883
|
})
|
|
16876
16884
|
}
|
|
16877
16885
|
|
package/server/views/editor.ejs
CHANGED
package/server/views/install.ejs
CHANGED
package/server/views/logs.ejs
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
<link href="/markdown.css" rel="stylesheet"/>
|
|
12
12
|
<link href="/noty.css" rel="stylesheet"/>
|
|
13
13
|
<link href="/style.css" rel="stylesheet"/>
|
|
14
|
+
<link href="/universal-launcher.css" rel="stylesheet"/>
|
|
14
15
|
<% if (agent === "electron") { %>
|
|
15
16
|
<link href="/electron.css" rel="stylesheet"/>
|
|
16
17
|
<% } %>
|
|
@@ -128,10 +129,10 @@
|
|
|
128
129
|
</div>
|
|
129
130
|
</aside>
|
|
130
131
|
</div>
|
|
131
|
-
<footer class="logs-community-footer" aria-label="
|
|
132
|
+
<footer class="logs-community-footer logs-help-footer" aria-label="Get help with this report">
|
|
132
133
|
<div class="logs-community-copy">
|
|
133
|
-
<div class="logs-community-heading"><i class="fa-solid fa-
|
|
134
|
-
<div class="logs-community-subtitle">
|
|
134
|
+
<div class="logs-community-heading"><i class="fa-solid fa-circle-question" aria-hidden="true"></i><span>Get help</span></div>
|
|
135
|
+
<div class="logs-community-subtitle">Use this report with a local AI agent or post it on Pinokio Community.</div>
|
|
135
136
|
</div>
|
|
136
137
|
<div class="logs-community-title-field">
|
|
137
138
|
<label class="logs-community-title-control" for="logs-draft-title">
|
|
@@ -140,7 +141,10 @@
|
|
|
140
141
|
</label>
|
|
141
142
|
<span class="logs-community-title-note" id="logs-draft-title-note" aria-live="polite"></span>
|
|
142
143
|
</div>
|
|
143
|
-
<
|
|
144
|
+
<div class="logs-help-actions">
|
|
145
|
+
<button type="button" class="logs-help-action logs-help-action--ai" id="logs-ask-ai" disabled><i class="fa-solid fa-robot"></i><span>Ask AI</span></button>
|
|
146
|
+
<button type="button" class="logs-help-action logs-help-action--community" id="logs-create-draft" disabled><i class="fa-solid fa-paper-plane"></i><span>Ask Community</span></button>
|
|
147
|
+
</div>
|
|
144
148
|
</footer>
|
|
145
149
|
</section>
|
|
146
150
|
|
|
@@ -207,7 +211,7 @@
|
|
|
207
211
|
<% } %>
|
|
208
212
|
</main>
|
|
209
213
|
<script>
|
|
210
|
-
window.LOGS_PAGE_DATA = <%- JSON.stringify({ rootDisplay: logsRootDisplay || '', downloadUrl: logsDownloadUrl || '/pinokio/logs.zip', workspace: logsWorkspace || '', workspaceTitle: logsTitle || '', reportUrl: logsReportUrl || '', draftUrl: typeof logsDraftUrl !== 'undefined' ? logsDraftUrl : '', registryBase: 'https://pinokio.co', initialView: logsInitialView || 'raw', embedded: !!logsEmbedded }) %>
|
|
214
|
+
window.LOGS_PAGE_DATA = <%- JSON.stringify({ rootDisplay: logsRootDisplay || '', downloadUrl: logsDownloadUrl || '/pinokio/logs.zip', workspace: logsWorkspace || '', workspaceTitle: logsTitle || '', workspaceCwd: typeof logsWorkspaceCwd !== 'undefined' ? logsWorkspaceCwd : '', reportUrl: logsReportUrl || '', draftUrl: typeof logsDraftUrl !== 'undefined' ? logsDraftUrl : '', registryBase: 'https://pinokio.co', initialView: logsInitialView || 'raw', embedded: !!logsEmbedded }) %>
|
|
211
215
|
</script>
|
|
212
216
|
<script src="/logs.js"></script>
|
|
213
217
|
</body>
|
|
@@ -1639,6 +1639,8 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
1639
1639
|
this.currentId = baseScriptId
|
|
1640
1640
|
this.latestLogFallbackActive = false
|
|
1641
1641
|
this.pendingInput = []
|
|
1642
|
+
this.pendingTerminalWrite = ""
|
|
1643
|
+
this.pendingTerminalWriteFrame = null
|
|
1642
1644
|
this.inputBuffer = ""
|
|
1643
1645
|
this.inputTracker = window.TerminalInputTracker ? new window.TerminalInputTracker({
|
|
1644
1646
|
getFrameName: () => window.name || null,
|
|
@@ -1723,6 +1725,32 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
1723
1725
|
}
|
|
1724
1726
|
this.dirty = true
|
|
1725
1727
|
}
|
|
1728
|
+
flushPendingTerminalWrite() {
|
|
1729
|
+
if (!this.pendingTerminalWrite) {
|
|
1730
|
+
this.pendingTerminalWriteFrame = null
|
|
1731
|
+
return
|
|
1732
|
+
}
|
|
1733
|
+
const text = this.pendingTerminalWrite
|
|
1734
|
+
this.pendingTerminalWrite = ""
|
|
1735
|
+
this.pendingTerminalWriteFrame = null
|
|
1736
|
+
this.write(text)
|
|
1737
|
+
}
|
|
1738
|
+
writeBatched(text) {
|
|
1739
|
+
if (text === "\u0007" || typeof text !== "string" || text.length === 0) {
|
|
1740
|
+
return
|
|
1741
|
+
}
|
|
1742
|
+
this.pendingTerminalWrite += text
|
|
1743
|
+
this.dirty = true
|
|
1744
|
+
if (this.pendingTerminalWriteFrame !== null) {
|
|
1745
|
+
return
|
|
1746
|
+
}
|
|
1747
|
+
const flush = () => this.flushPendingTerminalWrite()
|
|
1748
|
+
if (typeof window.requestAnimationFrame === "function") {
|
|
1749
|
+
this.pendingTerminalWriteFrame = window.requestAnimationFrame(flush)
|
|
1750
|
+
} else {
|
|
1751
|
+
this.pendingTerminalWriteFrame = window.setTimeout(flush, 16)
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1726
1754
|
finished() {
|
|
1727
1755
|
/*
|
|
1728
1756
|
n.Noty({
|
|
@@ -1921,13 +1949,13 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
1921
1949
|
this.resizeSync.sendInitial()
|
|
1922
1950
|
}
|
|
1923
1951
|
if (packet.data.raw) {
|
|
1924
|
-
this.
|
|
1952
|
+
this.writeBatched(packet.data.raw)
|
|
1925
1953
|
} else if (packet.data.json) {
|
|
1926
|
-
this.
|
|
1927
|
-
this.
|
|
1954
|
+
this.writeBatched(JSON.stringify(packet.data.json).replace(/\n/g, "\r\n"))
|
|
1955
|
+
this.writeBatched("\r\n")
|
|
1928
1956
|
} else if (packet.data.json2) {
|
|
1929
|
-
this.
|
|
1930
|
-
this.
|
|
1957
|
+
this.writeBatched(JSON.stringify(packet.data.json2, null, 2).replace(/\n/g, "\r\n"))
|
|
1958
|
+
this.writeBatched("\r\n")
|
|
1931
1959
|
}
|
|
1932
1960
|
if (packet.data.type === "emit2") {
|
|
1933
1961
|
// long text => still posting to the shell => show progress
|
|
@@ -1945,6 +1973,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
1945
1973
|
refreshParent(packet)
|
|
1946
1974
|
pluginTerminalDiscoveryRefresher.clear()
|
|
1947
1975
|
reloadMemory()
|
|
1976
|
+
this.flushPendingTerminalWrite()
|
|
1948
1977
|
this.term.write("\r\nDisconnected...\r\n")
|
|
1949
1978
|
document.querySelector("#status-window").innerHTML = "<b>Ready</b>"
|
|
1950
1979
|
this.socket.close()
|