@oddessentials/agent-guild 0.6.0 → 0.7.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.
- package/README.md +182 -135
- package/package.json +1 -1
- package/src/manager/config.mjs +1 -0
- package/src/manager/github.mjs +842 -0
- package/src/manager/main.mjs +7 -3
- package/src/manager/server.mjs +43 -0
- package/src/manager/session-manager.mjs +32 -3
- package/src/manager/session.mjs +4 -1
- package/web/app.js +652 -3
- package/web/art/art.css +2 -0
- package/web/index.html +66 -4
- package/web/styles.css +72 -0
package/web/art/art.css
CHANGED
|
@@ -191,6 +191,7 @@ body:has(#app[hidden]):has(#auth[hidden]):has(#stopped[hidden])::after {
|
|
|
191
191
|
.models-source { padding: 10px 36px 30px; }
|
|
192
192
|
.history-tools { padding: 10px 36px 0; }
|
|
193
193
|
.history-form { padding: 10px 36px 30px; }
|
|
194
|
+
.github-accounts { padding: 10px 36px; }
|
|
194
195
|
.model-group h4, .news-day, .changelog-type { font-family: var(--font-display); letter-spacing: 0.08em; color: var(--gold-ink); }
|
|
195
196
|
.news-bar { padding: 16px 18px 12px; }
|
|
196
197
|
.news-filters, .news-status { padding-left: 18px; padding-right: 18px; }
|
|
@@ -444,6 +445,7 @@ body:has(#app[hidden]):has(#auth[hidden]):has(#stopped[hidden])::after {
|
|
|
444
445
|
.models-source { padding: 10px 26px 24px; }
|
|
445
446
|
.history-tools { padding: 10px 26px 0; }
|
|
446
447
|
.history-form { padding: 10px 26px 24px; }
|
|
448
|
+
.github-accounts { padding: 10px 26px; }
|
|
447
449
|
.auth { padding: 32px 30px; }
|
|
448
450
|
}
|
|
449
451
|
|
package/web/index.html
CHANGED
|
@@ -34,10 +34,13 @@
|
|
|
34
34
|
<section class="launcher" aria-labelledby="launch-heading">
|
|
35
35
|
<div class="section-head">
|
|
36
36
|
<h2 id="launch-heading">Start a session</h2>
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
<div class="launch-tools">
|
|
38
|
+
<label class="cwd">
|
|
39
|
+
<span>Working folder</span>
|
|
40
|
+
<input id="cwd" type="text" spellcheck="false" autocomplete="off" placeholder="Home folder">
|
|
41
|
+
</label>
|
|
42
|
+
<button id="github-open" class="btn github-open" type="button" aria-haspopup="dialog">Clone from GitHub…</button>
|
|
43
|
+
</div>
|
|
41
44
|
</div>
|
|
42
45
|
<div id="providers" class="providers" role="list"></div>
|
|
43
46
|
</section>
|
|
@@ -182,6 +185,54 @@
|
|
|
182
185
|
</form>
|
|
183
186
|
</dialog>
|
|
184
187
|
|
|
188
|
+
<dialog id="github" class="models history github" aria-labelledby="github-title">
|
|
189
|
+
<div class="models-bar">
|
|
190
|
+
<span class="github-mark" aria-hidden="true"></span>
|
|
191
|
+
<div class="models-heading">
|
|
192
|
+
<h2 id="github-title">GitHub</h2>
|
|
193
|
+
<p id="github-sub" class="sub"></p>
|
|
194
|
+
</div>
|
|
195
|
+
<button id="github-close" class="btn" type="button">Close</button>
|
|
196
|
+
</div>
|
|
197
|
+
<div id="github-accounts" class="github-accounts" hidden>
|
|
198
|
+
<div id="github-chips" class="github-chips" role="tablist" aria-label="GitHub accounts"></div>
|
|
199
|
+
<button id="github-add" class="btn github-add" type="button">Add account</button>
|
|
200
|
+
</div>
|
|
201
|
+
<div class="models-body">
|
|
202
|
+
<section id="github-card" class="github-card" aria-live="polite" hidden></section>
|
|
203
|
+
<div id="github-status" class="github-status" hidden></div>
|
|
204
|
+
<div id="github-tools" class="history-tools github-tools" hidden>
|
|
205
|
+
<input id="github-filter" type="search" placeholder="Filter repositories" aria-label="Filter repositories" spellcheck="false" autocomplete="off">
|
|
206
|
+
<button id="github-refresh" class="btn" type="button">Refresh</button>
|
|
207
|
+
<button id="github-new" class="btn" type="button" aria-expanded="false" aria-controls="github-create">New repository</button>
|
|
208
|
+
</div>
|
|
209
|
+
<form id="github-create" class="github-card github-create" hidden>
|
|
210
|
+
<h3>New repository</h3>
|
|
211
|
+
<div class="github-fields">
|
|
212
|
+
<label><span>Owner</span><select id="github-create-owner"></select></label>
|
|
213
|
+
<label><span>Name</span><input id="github-create-name" type="text" required maxlength="100" pattern="[A-Za-z0-9._\-]+" spellcheck="false" autocomplete="off" placeholder="my-project"></label>
|
|
214
|
+
<label class="wide"><span>Description</span><input id="github-create-description" type="text" maxlength="350" autocomplete="off" placeholder="Optional"></label>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="github-options">
|
|
217
|
+
<label><input id="github-create-private" type="checkbox" checked> Private</label>
|
|
218
|
+
<label><input id="github-create-readme" type="checkbox" checked> Start with a README</label>
|
|
219
|
+
<label><input id="github-create-clone" type="checkbox" checked> <span id="github-create-clone-label">Clone it</span></label>
|
|
220
|
+
</div>
|
|
221
|
+
<p id="github-create-error" class="github-error" role="alert" hidden></p>
|
|
222
|
+
<div class="github-actions">
|
|
223
|
+
<button id="github-create-submit" class="btn primary" type="submit">Create repository</button>
|
|
224
|
+
<button id="github-create-cancel" class="btn" type="button">Cancel</button>
|
|
225
|
+
</div>
|
|
226
|
+
</form>
|
|
227
|
+
<div id="github-list" class="history-list" role="list"></div>
|
|
228
|
+
<p id="github-note" class="models-note" hidden></p>
|
|
229
|
+
</div>
|
|
230
|
+
<div class="history-form github-form">
|
|
231
|
+
<label for="github-parent">Clone into</label>
|
|
232
|
+
<input id="github-parent" type="text" placeholder="Folder that holds your clones" spellcheck="false" autocomplete="off">
|
|
233
|
+
</div>
|
|
234
|
+
</dialog>
|
|
235
|
+
|
|
185
236
|
<div id="tip" class="tip" aria-hidden="true" hidden><strong id="tip-title"></strong><span id="tip-source"></span><p id="tip-text"></p></div>
|
|
186
237
|
|
|
187
238
|
<div id="toast" class="toast" role="alert" hidden></div>
|
|
@@ -259,6 +310,16 @@
|
|
|
259
310
|
</article>
|
|
260
311
|
</template>
|
|
261
312
|
|
|
313
|
+
<template id="github-repo-template">
|
|
314
|
+
<article class="history-row github-repo" role="listitem">
|
|
315
|
+
<div class="history-main">
|
|
316
|
+
<div class="history-title"><span class="repo-name"></span></div>
|
|
317
|
+
<div class="history-meta"></div>
|
|
318
|
+
</div>
|
|
319
|
+
<button class="btn github-action" type="button"></button>
|
|
320
|
+
</article>
|
|
321
|
+
</template>
|
|
322
|
+
|
|
262
323
|
<template id="session-template">
|
|
263
324
|
<article class="session-card" role="listitem" tabindex="0">
|
|
264
325
|
<span class="card-art" aria-hidden="true"></span>
|
|
@@ -281,6 +342,7 @@
|
|
|
281
342
|
<div class="card-actions">
|
|
282
343
|
<button class="btn primary open" type="button">Open</button>
|
|
283
344
|
<button class="btn resume" type="button" hidden>Resume</button>
|
|
345
|
+
<button class="btn primary use-folder" type="button" hidden>Use folder</button>
|
|
284
346
|
<button class="btn rename" type="button">Rename</button>
|
|
285
347
|
<button class="btn danger stop" type="button">Stop</button>
|
|
286
348
|
<button class="btn remove" type="button">Remove</button>
|
package/web/styles.css
CHANGED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
--icon-moon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M19.5 14.6A8 8 0 0 1 9.4 4.5a8 8 0 1 0 10.1 10.1z'/%3E%3C/svg%3E");
|
|
41
41
|
--icon-external: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17L17 7M9 7h8v8'/%3E%3C/svg%3E");
|
|
42
42
|
--icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 5.5l6.5 6.5L9 18.5'/%3E%3C/svg%3E");
|
|
43
|
+
--icon-github: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z'/%3E%3C/svg%3E");
|
|
43
44
|
--icon-info: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 10.8v6.2' stroke-width='2.4'/%3E%3Ccircle cx='12' cy='7.3' r='1.2' fill='black' stroke='none'/%3E%3C/svg%3E");
|
|
44
45
|
font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
45
46
|
font-size: 15px;
|
|
@@ -519,6 +520,73 @@ a.news-link:visited { color: var(--muted); }
|
|
|
519
520
|
background: var(--surface); color: var(--text); font: inherit; font-size: 0.85rem;
|
|
520
521
|
}
|
|
521
522
|
|
|
523
|
+
.launch-tools { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex: 1 1 360px; flex-wrap: wrap; max-width: 680px; }
|
|
524
|
+
.launch-tools .cwd { max-width: none; }
|
|
525
|
+
.github-open { white-space: nowrap; }
|
|
526
|
+
.github-open::before, .github-mark {
|
|
527
|
+
content: ""; display: inline-block; flex: none; background-color: currentColor; mask: var(--icon-github) center / contain no-repeat;
|
|
528
|
+
}
|
|
529
|
+
.github-open::before { width: 1em; height: 1em; margin: 0 0.45em 0 0; vertical-align: -0.15em; }
|
|
530
|
+
.github-mark { width: 26px; height: 26px; color: var(--heading); }
|
|
531
|
+
.github-accounts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 14px; border-bottom: 1px solid var(--border); }
|
|
532
|
+
.github-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
533
|
+
.github-chip { display: inline-flex; align-items: center; gap: 6px; padding: 2px 10px 2px 3px; font-size: 0.8rem; }
|
|
534
|
+
.github-avatar {
|
|
535
|
+
display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; flex: none; object-fit: cover;
|
|
536
|
+
background: var(--c, var(--muted)); color: #fff; font-size: 0.68rem; font-weight: 700;
|
|
537
|
+
}
|
|
538
|
+
.github-add { padding: 3px 10px; font-size: 0.8rem; }
|
|
539
|
+
.github .models-body { padding-top: 10px; }
|
|
540
|
+
.github-card {
|
|
541
|
+
display: grid; gap: 10px; padding: 14px 16px; margin-bottom: 10px; border: 1px solid var(--border); border-radius: var(--radius);
|
|
542
|
+
background: var(--surface-2); font-size: 0.9rem; line-height: 1.45;
|
|
543
|
+
}
|
|
544
|
+
.github-card h3 { margin: 0; font-size: 1rem; }
|
|
545
|
+
.github-card p { margin: 0; }
|
|
546
|
+
.github-small { color: var(--muted); font-size: 0.8rem; }
|
|
547
|
+
.github-error { color: var(--danger); }
|
|
548
|
+
.github-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
549
|
+
.github-actions a.btn { text-decoration: none; }
|
|
550
|
+
.github-scopes { margin: 0; padding-left: 1.2em; display: grid; gap: 4px; font-size: 0.85rem; }
|
|
551
|
+
.github-scopes code, .github-card code { font-size: 0.8rem; padding: 0 4px; border-radius: 4px; background: var(--surface); }
|
|
552
|
+
.github-steps { margin: 0; padding-left: 1.4em; display: grid; gap: 4px; }
|
|
553
|
+
.github-steps li.done { color: var(--ok); }
|
|
554
|
+
.github-steps li.done::after { content: " ✓"; }
|
|
555
|
+
.github-code { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
|
|
556
|
+
.github-code-text {
|
|
557
|
+
font-family: var(--font-mono); font-size: 1.7rem; font-weight: 700; letter-spacing: 0.12em; padding: 6px 14px;
|
|
558
|
+
border-radius: var(--radius); border: 1px dashed var(--muted); background: var(--surface); color: var(--heading); user-select: all;
|
|
559
|
+
}
|
|
560
|
+
.github-waiting::before {
|
|
561
|
+
content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 8px; border-radius: 50%; background: var(--warn);
|
|
562
|
+
animation: pulse 1.4s ease-in-out infinite;
|
|
563
|
+
}
|
|
564
|
+
.github-status { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; padding: 2px 0 8px; font-size: 0.85rem; }
|
|
565
|
+
.github-ready { color: var(--ok); font-weight: 600; }
|
|
566
|
+
.github-ready::before { content: "✓ "; }
|
|
567
|
+
.github-status-actions { display: flex; gap: 8px; }
|
|
568
|
+
.history-tools.github-tools { padding: 0 0 4px; }
|
|
569
|
+
.github-repo { grid-template-columns: minmax(0, 1fr) auto; }
|
|
570
|
+
.github-repo .history-title { display: flex; align-items: center; gap: 6px; min-width: 0; }
|
|
571
|
+
.github-repo .repo-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
572
|
+
.github-repo .repo-owner { color: var(--muted); font-weight: 500; }
|
|
573
|
+
.github-repo .badge { flex: none; }
|
|
574
|
+
.github-repo.conflict .history-meta { color: var(--warn); }
|
|
575
|
+
.github-create { margin-top: 10px; }
|
|
576
|
+
.github-fields { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 10px; }
|
|
577
|
+
.github-fields label { display: grid; gap: 4px; font-size: 0.8rem; color: var(--muted); }
|
|
578
|
+
.github-fields label.wide { grid-column: 1 / -1; }
|
|
579
|
+
.github-fields input, .github-fields select {
|
|
580
|
+
min-width: 0; padding: 6px 10px; border-radius: var(--radius); border: 1px solid var(--border);
|
|
581
|
+
background: var(--surface); color: var(--text); font: inherit; font-size: 0.9rem;
|
|
582
|
+
}
|
|
583
|
+
.github-fields input:focus-visible, .github-fields select:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }
|
|
584
|
+
.github-options { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 0.85rem; }
|
|
585
|
+
.github-options label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
|
|
586
|
+
.github-options label:has(input:disabled) { opacity: 0.6; cursor: default; }
|
|
587
|
+
.github .models-note { display: grid; gap: 4px; font-size: 0.85rem; }
|
|
588
|
+
.toast .toast-action { margin-left: 12px; padding: 2px 10px; background: transparent; box-shadow: none; color: inherit; border-color: currentColor; }
|
|
589
|
+
|
|
522
590
|
.toast {
|
|
523
591
|
position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); z-index: 20;
|
|
524
592
|
max-width: min(640px, calc(100vw - 32px)); padding: 10px 14px; border-radius: var(--radius);
|
|
@@ -544,6 +612,7 @@ a.news-link:visited { color: var(--muted); }
|
|
|
544
612
|
@media (prefers-reduced-motion: reduce) {
|
|
545
613
|
.status-pill.active::before, .agent.working::after, .model-detail .stat-fill, .toast:not([hidden]), .tip:not([hidden]) { animation: none; }
|
|
546
614
|
.model-name::before, .provider .copies summary::before, .btn, .models, .news-panel, .models::backdrop, .news-panel::backdrop { transition: none; }
|
|
615
|
+
.github-waiting::before { animation: none; }
|
|
547
616
|
.btn:active:not(:disabled) { transform: none; }
|
|
548
617
|
}
|
|
549
618
|
|
|
@@ -554,6 +623,9 @@ a.news-link:visited { color: var(--muted); }
|
|
|
554
623
|
.terminal-panel { inset: var(--topbar-h, 56px) 0 0; border-radius: 0; }
|
|
555
624
|
.session-grid { grid-template-columns: 1fr; }
|
|
556
625
|
.cwd { flex-basis: 100%; }
|
|
626
|
+
.launch-tools { flex-basis: 100%; justify-content: stretch; }
|
|
627
|
+
.launch-tools .github-open { flex: 1 1 auto; }
|
|
628
|
+
.github-fields { grid-template-columns: minmax(0, 1fr); }
|
|
557
629
|
.models { width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; margin: 0; border-radius: 0; }
|
|
558
630
|
.model-columns, .model-toggle { grid-template-columns: minmax(0, 1fr) repeat(3, 4.6rem); }
|
|
559
631
|
.model-columns span:last-child, .model-context { display: none; }
|