pinokiod 3.9.0 → 3.9.2

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 (118) hide show
  1. package/kernel/api/filepicker/index.js +59 -0
  2. package/kernel/api/fs/index.js +6 -4
  3. package/kernel/api/index.js +123 -37
  4. package/kernel/api/input/index.js +2 -0
  5. package/kernel/api/web/index.js +6 -0
  6. package/kernel/bin/caddy.js +127 -0
  7. package/kernel/bin/cloudflared.js +1 -0
  8. package/kernel/bin/conda.js +10 -2
  9. package/kernel/bin/cuda.js +0 -16
  10. package/kernel/bin/ffmpeg.js +4 -6
  11. package/kernel/bin/git.js +55 -29
  12. package/kernel/bin/gxx.js +8 -6
  13. package/kernel/bin/huggingface.js +4 -5
  14. package/kernel/bin/index.js +347 -88
  15. package/kernel/bin/node.js +13 -6
  16. package/kernel/bin/py.js +1 -1
  17. package/kernel/bin/setup.js +146 -0
  18. package/kernel/bin/uv.js +4 -5
  19. package/kernel/bin/zip.js +7 -8
  20. package/kernel/connect/index.js +25 -0
  21. package/kernel/connect/providers/github/README.md +11 -0
  22. package/kernel/connect/providers/x/README.md +96 -0
  23. package/kernel/connect/providers/x/index.js +152 -0
  24. package/kernel/environment.js +50 -1
  25. package/kernel/index.js +152 -32
  26. package/kernel/info.js +4 -2
  27. package/kernel/kv.js +38 -0
  28. package/kernel/loader.js +13 -3
  29. package/kernel/peer.js +161 -0
  30. package/kernel/procs.js +116 -0
  31. package/kernel/prototype.js +62 -0
  32. package/kernel/router/common.js +42 -0
  33. package/kernel/router/connector.js +81 -0
  34. package/kernel/router/index.js +235 -0
  35. package/kernel/router/localhost_home_router.js +84 -0
  36. package/kernel/router/localhost_port_router.js +15 -0
  37. package/kernel/router/localhost_variable_router.js +37 -0
  38. package/kernel/router/peer_home_router.js +15 -0
  39. package/kernel/router/peer_peer_router.js +26 -0
  40. package/kernel/router/peer_port_router.js +45 -0
  41. package/kernel/router/peer_variable_router.js +46 -0
  42. package/kernel/router/processor.js +31 -0
  43. package/kernel/shell.js +141 -60
  44. package/kernel/shells.js +32 -17
  45. package/kernel/store.js +58 -0
  46. package/kernel/sysinfo.js +0 -1
  47. package/kernel/util.js +143 -36
  48. package/package.json +4 -1
  49. package/pipe/index.js +0 -2
  50. package/script/index.js +12 -0
  51. package/server/index.js +1473 -553
  52. package/server/public/Socket.js +5 -1
  53. package/server/public/SourceCodePro-Regular.ttf +0 -0
  54. package/server/public/SpaceMono-Bold.ttf +0 -0
  55. package/server/public/SpaceMono-BoldItalic.ttf +0 -0
  56. package/server/public/SpaceMono-Italic.ttf +0 -0
  57. package/server/public/SpaceMono-Regular.ttf +0 -0
  58. package/server/public/commander.js +40 -0
  59. package/server/public/common.js +60 -0
  60. package/server/public/dropzone-min.js +2 -0
  61. package/server/public/dropzone.css +1 -0
  62. package/server/public/filepond-plugin-file-validate-type.min.js +9 -0
  63. package/server/public/filepond-plugin-image-crop.min.js +9 -0
  64. package/server/public/filepond-plugin-image-edit.min.css +8 -0
  65. package/server/public/filepond-plugin-image-edit.min.js +9 -0
  66. package/server/public/filepond-plugin-image-exif-orientation.min.js +9 -0
  67. package/server/public/filepond-plugin-image-preview.min.css +8 -0
  68. package/server/public/filepond-plugin-image-preview.min.js +9 -0
  69. package/server/public/filepond-plugin-image-resize.min.js +9 -0
  70. package/server/public/filepond-plugin-image-transform.min.js +9 -0
  71. package/server/public/filepond.min.css +8 -0
  72. package/server/public/filepond.min.js +9 -0
  73. package/server/public/fscreator.js +174 -0
  74. package/server/public/fseditor.js +212 -0
  75. package/server/public/github.png +0 -0
  76. package/server/public/highlight-js.js +81 -0
  77. package/server/public/highlight.css +9 -0
  78. package/server/public/highlight.js +1244 -0
  79. package/server/public/install.js +17 -20
  80. package/server/public/modalinput.js +105 -9
  81. package/server/public/opener.js +3 -1
  82. package/server/public/pinokio-black.png +0 -0
  83. package/server/public/pinokio-black2.png +0 -0
  84. package/server/public/redoc.standalone.js +1832 -0
  85. package/server/public/style.css +211 -17
  86. package/server/public/swagger-ui-bundle.js +2 -0
  87. package/server/public/swagger-ui.css +3 -0
  88. package/server/public/x.js +63 -0
  89. package/server/socket.js +136 -39
  90. package/server/views/404.ejs +0 -1
  91. package/server/views/app.ejs +356 -90
  92. package/server/views/bootstrap.ejs +22 -19
  93. package/server/views/connect/x.ejs +324 -0
  94. package/server/views/connect.ejs +197 -0
  95. package/server/views/download.ejs +7 -1
  96. package/server/views/editor.ejs +68 -9
  97. package/server/views/explore.ejs +13 -10
  98. package/server/views/file_explorer.ejs +10 -37
  99. package/server/views/github.ejs +218 -0
  100. package/server/views/help.ejs +4 -3
  101. package/server/views/index.ejs +268 -118
  102. package/server/views/install.ejs +56 -29
  103. package/server/views/keys.ejs +276 -0
  104. package/server/views/network.ejs +889 -0
  105. package/server/views/partials/dynamic.ejs +9 -0
  106. package/server/views/partials/menu.ejs +7 -1
  107. package/server/views/prototype/index.ejs +311 -0
  108. package/server/views/prototype/show.ejs +383 -0
  109. package/server/views/redoc.ejs +18 -0
  110. package/server/views/required_env_editor.ejs +11 -2
  111. package/server/views/settings.ejs +38 -10
  112. package/server/views/setup.ejs +254 -0
  113. package/server/views/setup_home.ejs +192 -0
  114. package/server/views/shell.ejs +781 -0
  115. package/server/views/swaggerui.ejs +19 -0
  116. package/server/views/terminal.ejs +174 -42
  117. package/LICENSE +0 -7
  118. package/server/views/proxy.ejs +0 -405
@@ -0,0 +1,254 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="UTF-8">
4
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
5
+ <link href="/xterm.min.css" rel="stylesheet" />
6
+ <link href="/css/fontawesome.min.css" rel="stylesheet">
7
+ <link href="/css/solid.min.css" rel="stylesheet">
8
+ <link href="/css/regular.min.css" rel="stylesheet">
9
+ <link href="/css/brands.min.css" rel="stylesheet">
10
+ <link href="/markdown.css" rel="stylesheet"/>
11
+ <link href="/noty.css" rel="stylesheet"/>
12
+ <link href="/style.css" rel="stylesheet"/>
13
+ <% if (agent === "electron") { %>
14
+ <link href="/electron.css" rel="stylesheet"/>
15
+ <% } %>
16
+ <style>
17
+ html {
18
+ scroll-behavior: smooth;
19
+ height: 100%;
20
+ overflow: hidden;
21
+ }
22
+ body.frozen {
23
+ overflow: auto !important;
24
+ }
25
+ #del-bin {
26
+ color: royalblue;
27
+ cursor: pointer;
28
+ }
29
+ body {
30
+ height: 100%;
31
+ overflow: auto;
32
+ /*
33
+ background: rgb(44, 29, 22);
34
+ */
35
+ display: flex;
36
+ flex-direction: column;
37
+ }
38
+ body {
39
+ /*
40
+ background: white;
41
+ background: rgb(44, 29, 22);
42
+ background: var(--dark-bg);
43
+ */
44
+ }
45
+ .line2 {
46
+ display: flex;
47
+ align-items: center;
48
+ cursor: pointer;
49
+ background: rgba(0,0,100,0.04);
50
+ }
51
+ .line2 a {
52
+ text-decoration: none;
53
+ color: black;
54
+ }
55
+ .status {
56
+ padding: 10px;
57
+ margin: 10px;
58
+ border-radius: 10px;
59
+ }
60
+ .status.offline {
61
+ background: silver;
62
+ }
63
+ .status.online {
64
+ background: yellowgreen;
65
+ }
66
+ .switch {
67
+ padding: 10px;
68
+ margin: 10px 0;
69
+ }
70
+ .switch[data-online=true] {
71
+ color: yellowgreen;
72
+ }
73
+ .button {
74
+ padding: 10px;
75
+ }
76
+ .on, .off {
77
+ display: flex;
78
+ align-items: center;
79
+ }
80
+ .btn {
81
+ font-weight: normal;
82
+ display: block;
83
+ }
84
+ .item {
85
+ display: flex;
86
+ align-items: flex-start;
87
+ margin: 10px;
88
+ background: rgba(0,0,0,0.04);
89
+ }
90
+ .item img {
91
+ width: 100px;
92
+ }
93
+ .item .title {
94
+ text-decoration: none;
95
+ color: royalblue;
96
+ }
97
+ .item .col {
98
+ padding: 10px;
99
+ }
100
+ .item .col > * {
101
+ margin: 5px 0;
102
+ }
103
+ .item .stat {
104
+ color: rgba(0,0,0,0.8);
105
+ display: flex;
106
+ }
107
+ .item .stat > * {
108
+ margin-right: 15px;
109
+ }
110
+ .timestamp {
111
+ color: rgba(0,0,0,0.5);
112
+ }
113
+ </style>
114
+ <script src="/hotkeys.min.js"></script>
115
+ <script src="/sweetalert2.js"></script>
116
+ <script src="/noty.js"></script>
117
+ <script src="/notyq.js"></script>
118
+ <script src="/xterm.js"></script>
119
+ <script src="/xterm-addon-fit.js"></script>
120
+ <script src="/xterm-addon-web-links.js"></script>
121
+ <script src="/xterm-theme.js"></script>
122
+ <script src="/sweetalert2.js"></script>
123
+ <script src="/Socket.js"></script>
124
+ <script src="/install.js"></script>
125
+ <script src="/timeago.min.js"></script>
126
+ <script src="/common.js"></script>
127
+ <script src="/report.js"></script>
128
+ </head>
129
+ <body class='<%=theme%>'>
130
+ <header class='grabbable'>
131
+ <h1>
132
+ <a class='path' href="/"><%-logo%></a>
133
+ <div class='flexible'></div>
134
+ <div class='nav-btns'>
135
+ <button class='btn2' id='report'><div><i class="fa-solid fa-bug"></i></div><div>Report Bug</div></button>
136
+ <a class='btn2' href='https://discord.gg/TQdNwadtE4' target="_blank"><div><i class="fa-brands fa-discord"></i></div><div>Discord</div></a>
137
+ <a class='btn2' href='https://twitter.com/cocktailpeanut' target="_blank"><div><i class="fa-brands fa-twitter"></i></div><div>Twitter</div></a>
138
+ <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
139
+ <button id='new-window' title='open a new window' class='btn2'><i class="fa-solid fa-plus"></i></button>
140
+ </div>
141
+ </h1>
142
+ </h1>
143
+ </header>
144
+ <% if (requirements_pending) { %>
145
+ <div class='requirements'>
146
+ <div class='content'>
147
+ <div class='loading'>
148
+ <i class="fa-solid fa-circle-notch fa-spin"></i>
149
+ </div>
150
+ </div>
151
+ </div>
152
+ <% } else { %>
153
+ <% if (true || install_required) { %>
154
+ <div class='requirements'>
155
+ <div class='content'>
156
+ <% if (install_required) { %>
157
+ <div class='title'><i class="fa-solid fa-circle-exclamation"></i> Installation required</div>
158
+ <% } else { %>
159
+ <div class='title'><i class="fa-solid fa-circle-exclamation"></i> Installation complete</div>
160
+ <% } %>
161
+ <div class='btn-group'>
162
+ <% requirements.map((r) => { %>
163
+ <div class='requirement-item'>
164
+ <% if (r.installed) { %>
165
+ <div class='name'><%=r.name%></div>
166
+ <div class='flexible'></div>
167
+ <div class='label'>Installed</div>
168
+ <% } else { %>
169
+ <div class='name highlighted'><%=r.name%></div>
170
+ <div class='flexible'></div>
171
+ <div class='label highlighted'>Not Installed</div>
172
+ <% } %>
173
+ </div>
174
+ <% }) %>
175
+ </div>
176
+ <% if (!install_required) { %>
177
+ <a class='btn' href="/">Return home</a>
178
+ <% } %>
179
+ <form class="<%= install_required ? '' : 'hidden'%>" id='install-form' method="post" action="/pinokio/install">
180
+ <input type='hidden' name="requirements" value="<%=JSON.stringify(requirements)%>">
181
+ <input type='hidden' name='callback' value="<%=current%>">
182
+ <button class='btn'>Install</button>
183
+ </form>
184
+ <div class='item'>
185
+ <div class='d'>Not working? <a id='del-bin'>Try a fresh install</a></div>
186
+ <div class='reset-bin-loading hidden'>
187
+ <i class="fa-solid fa-circle-notch fa-spin"></i> Stand by. Do not close this window..
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+ <% } else { %>
193
+ <main>
194
+ <div id='terminal'>all installed</div>
195
+ <a href="/" class='btn'>Home</a>
196
+ </main>
197
+ <% } %>
198
+ <% } %>
199
+ <script>
200
+ document.addEventListener("DOMContentLoaded", async () => {
201
+ Reporter()
202
+ <% if (error) { %>
203
+ document.querySelector(".requirements .content").innerHTML = '<div class="loading"><i class="fa-solid fa-circle-exclamation"></i> <%=error%></div>'
204
+ <% } %>
205
+ <% if (requirements_pending) { %>
206
+ await new Promise((resolve, reject) => {
207
+ let interval = setInterval(() => {
208
+ fetch("/pinokio/requirements_ready").then((res) => {
209
+ return res.json()
210
+ }).then((res) => {
211
+ console.log(res)
212
+ if (res.error) {
213
+ alert(res.error)
214
+ clearInterval(interval)
215
+ } else if (!res.requirements_pending) {
216
+ clearInterval(interval)
217
+ resolve()
218
+ }
219
+ })
220
+ }, 500)
221
+ })
222
+ location.href = location.href
223
+ <% } %>
224
+ if (document.querySelector("#del-bin")) {
225
+ document.querySelector("#del-bin").addEventListener("click", async (e) => {
226
+ console.log("del-bin")
227
+ let proceed = confirm("Are you sure you wish to delete the bin folder?")
228
+ if (proceed) {
229
+ document.querySelector(".reset-bin-loading").classList.remove("hidden")
230
+ document.querySelector("#del-bin").classList.add("hidden")
231
+ let res = await fetch("/pinokio/delete", {
232
+ method: "post",
233
+ headers: {
234
+ "Content-Type": "application/json"
235
+ },
236
+ body: JSON.stringify({ type: "bin" })
237
+ }).then((res) => {
238
+ return res.json()
239
+ })
240
+ console.log(res)
241
+ document.querySelector(".reset-bin-loading").classList.add("hidden")
242
+ if (res.error) {
243
+ alert(res.error)
244
+ } else {
245
+ //location.href = location.href
246
+ document.querySelector("#install-form").submit()
247
+ }
248
+ }
249
+ })
250
+ }
251
+ })
252
+ </script>
253
+ </body>
254
+ </html>
@@ -0,0 +1,192 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="UTF-8">
4
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
5
+ <link href="/xterm.min.css" rel="stylesheet" />
6
+ <link href="/css/fontawesome.min.css" rel="stylesheet">
7
+ <link href="/css/solid.min.css" rel="stylesheet">
8
+ <link href="/css/regular.min.css" rel="stylesheet">
9
+ <link href="/css/brands.min.css" rel="stylesheet">
10
+ <link href="/markdown.css" rel="stylesheet"/>
11
+ <link href="/noty.css" rel="stylesheet"/>
12
+ <link href="/style.css" rel="stylesheet"/>
13
+ <% if (agent === "electron") { %>
14
+ <link href="/electron.css" rel="stylesheet"/>
15
+ <% } %>
16
+ <style>
17
+ html {
18
+ scroll-behavior: smooth;
19
+ height: 100%;
20
+ overflow: hidden;
21
+ }
22
+ body {
23
+ height: 100%;
24
+ overflow: auto;
25
+ display: flex;
26
+ flex-direction: column;
27
+ }
28
+ .line2 {
29
+ display: flex;
30
+ align-items: center;
31
+ cursor: pointer;
32
+ background: rgba(0,0,100,0.04);
33
+ }
34
+ .line2 a {
35
+ text-decoration: none;
36
+ color: black;
37
+ }
38
+ .status {
39
+ padding: 10px;
40
+ margin: 10px;
41
+ border-radius: 10px;
42
+ }
43
+ .status.offline {
44
+ background: silver;
45
+ }
46
+ .status.online {
47
+ background: yellowgreen;
48
+ }
49
+ .switch {
50
+ padding: 10px;
51
+ margin: 10px 0;
52
+ }
53
+ .switch[data-online=true] {
54
+ color: yellowgreen;
55
+ }
56
+ .button {
57
+ padding: 10px;
58
+ }
59
+ .on, .off {
60
+ display: flex;
61
+ align-items: center;
62
+ }
63
+ .btn {
64
+ margin: 5px;
65
+ width: 100px;
66
+ text-align: center;
67
+ padding: 10px;
68
+ background: black;
69
+ color: white;
70
+ text-decoration: none;
71
+ font-weight: normal;
72
+ }
73
+ .item {
74
+ display: flex;
75
+ align-items: flex-start;
76
+ margin: 10px;
77
+ background: rgba(0,0,0,0.04);
78
+ }
79
+ .item img {
80
+ width: 100px;
81
+ }
82
+ .item .title {
83
+ text-decoration: none;
84
+ color: royalblue;
85
+ }
86
+ .item .col {
87
+ padding: 10px;
88
+ }
89
+ .item .col > * {
90
+ margin: 5px 0;
91
+ }
92
+ .item .stat {
93
+ color: rgba(0,0,0,0.8);
94
+ display: flex;
95
+ }
96
+ .item .stat > * {
97
+ margin-right: 15px;
98
+ }
99
+ .timestamp {
100
+ color: rgba(0,0,0,0.5);
101
+ }
102
+ main {
103
+ flex-grow: 1;
104
+ display: flex;
105
+ flex-direction: column;
106
+ }
107
+ .setup-items {
108
+ display: flex;
109
+ justify-content: center;
110
+ }
111
+ .head {
112
+ padding: 80px;
113
+ text-align: center;
114
+ }
115
+ .head .desc {
116
+ opacity: 0.7;
117
+ padding: 10px;
118
+ }
119
+ .head h3 {
120
+ font-size: 50px;
121
+ margin: 0;
122
+ }
123
+ body.dark .card {
124
+ color: white;
125
+ }
126
+ .card {
127
+ text-decoration: none;
128
+ width: 200px;
129
+ color: rgba(0,0,0,0.9);
130
+ text-align: center;
131
+ height: 400px;
132
+ margin: 20px;
133
+ }
134
+ .card:hover {
135
+ color: royalblue !important;
136
+ }
137
+ .card .desc {
138
+ text-align: left;
139
+ opacity: 0.7;
140
+ }
141
+ .card h3 {
142
+ font-size: 30px;
143
+ letter-spacing: -1px;
144
+ }
145
+ .card i {
146
+ font-size: 50px;
147
+ }
148
+ </style>
149
+ <script src="/common.js"></script>
150
+ </head>
151
+ <body class='<%=theme%>'>
152
+ <header class='grabbable'>
153
+ <h1>
154
+ <a class='path' href="/"><%-logo%></a>
155
+ <div class='flexible'></div>
156
+ <div class='nav-btns'>
157
+ <a href="/network" class='btn2'><div><i class="fa-solid fa-wifi"></i></div><div>Network</div></a>
158
+ <a class='btn2' href="<%=portal%>" target="_blank"><div><i class="fa-solid fa-question"></i></div><div>Help</div></a>
159
+ <% if (agent === "electron") { %>
160
+ <a class='btn2' data-filepath="<%=filepath%>"><div><i class="fa-regular fa-folder-open"></i></div><div>Files</div></a>
161
+ <% } %>
162
+ <button class='btn2' id='genlog'><div><i class="fa-solid fa-laptop-code"></i></div><div>Logs</div></button>
163
+ <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><div><i class="fa-solid fa-download"></i></div><div>Download logs</div></a>
164
+ <a class='btn2' href="/?mode=settings"><div><i class="fa-solid fa-gear"></i></div><div>Settings</div></a>
165
+ <% if (agent === "electron") { %>
166
+ <a href="/" target="_blank" class='btn2' features="browser"><div><i class="fa-solid fa-square-up-right"></i></div><div>Open</div></a>
167
+ <% } else { %>
168
+ <a href="/" target="_blank" class='btn2'><div><i class="fa-solid fa-square-up-right"></i></div><div>Open</div></a>
169
+ <% } %>
170
+ <button id='new-window' title='open a new window' class='btn2'><i class="fa-solid fa-plus"></i></button>
171
+
172
+ </div>
173
+ </h1>
174
+ </h1>
175
+ </header>
176
+ <main>
177
+ <div class='head'>
178
+ <h3>Setup</h3>
179
+ <div class='desc'>Select a setup option (You can set up multiple options).</div>
180
+ </div>
181
+ <div class='setup-items'>
182
+ <% items.forEach((item) => { %>
183
+ <a class='card' href="/setup/<%=item.id%>">
184
+ <i class="<%=item.icon%>"></i>
185
+ <h3><%=item.title%></h3>
186
+ <div class='desc'><%=item.description%></div>
187
+ </a>
188
+ <% }) %>
189
+ </div>
190
+ </main>
191
+ </body>
192
+ </html>