@oddessentials/agent-guild 0.33.2 → 0.35.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 +126 -359
- package/bin/agent-guild.mjs +29 -3
- package/package.json +1 -1
- package/src/manager/autostart.mjs +104 -20
- package/src/manager/environment-pins.mjs +289 -0
- package/src/manager/environment-probe.mjs +11 -0
- package/src/manager/environment.mjs +320 -15
- package/src/manager/github-views.mjs +34 -2
- package/src/manager/github.mjs +3 -1
- package/src/manager/launch.mjs +93 -1
- package/src/manager/main.mjs +25 -12
- package/src/manager/server.mjs +37 -6
- package/src/manager/systemd-service.mjs +312 -0
- package/web/app.js +163 -9
- package/web/environment.js +239 -34
- package/web/index.html +24 -8
- package/web/styles.css +39 -0
package/web/index.html
CHANGED
|
@@ -48,9 +48,15 @@
|
|
|
48
48
|
</fieldset>
|
|
49
49
|
<fieldset id="autostart-choice" hidden>
|
|
50
50
|
<legend>Startup</legend>
|
|
51
|
-
<label class="choice"><input id="autostart" type="checkbox" name="autostart"><span class="autostart">Launch at sign-in</span></label>
|
|
51
|
+
<label id="autostart-single" class="choice"><input id="autostart" type="checkbox" name="autostart"><span class="autostart">Launch at sign-in</span></label>
|
|
52
|
+
<div id="startup-modes" hidden>
|
|
53
|
+
<label class="choice"><input id="startup-off" type="radio" name="startup" value="off"><span class="startup-off">Only when I start it</span></label>
|
|
54
|
+
<label class="choice"><input id="startup-sign-in" type="radio" name="startup" value="sign-in"><span class="autostart">When I sign in</span></label>
|
|
55
|
+
<label class="choice"><input id="startup-boot" type="radio" name="startup" value="boot"><span class="startup-boot">When the computer starts</span></label>
|
|
56
|
+
</div>
|
|
52
57
|
<p id="autostart-note" class="voice-note"></p>
|
|
53
58
|
<p id="autostart-run" class="voice-note autostart-run" role="status" hidden></p>
|
|
59
|
+
<div id="startup-commands" class="startup-commands" hidden></div>
|
|
54
60
|
</fieldset>
|
|
55
61
|
<fieldset id="voice-choice" hidden>
|
|
56
62
|
<legend>Voice</legend>
|
|
@@ -212,7 +218,7 @@
|
|
|
212
218
|
<div id="github-views" class="github-views" role="tablist" aria-label="GitHub views" hidden>
|
|
213
219
|
<button id="github-view-repos" class="github-view" type="button" role="tab" aria-controls="github-repos" aria-selected="true" data-view="repos" aria-label="Repositories"><span class="long">Repositories</span><span class="short" aria-hidden="true">Repos</span></button>
|
|
214
220
|
<button id="github-view-issues" class="github-view" type="button" role="tab" aria-controls="github-issues" aria-selected="false" data-view="issues" tabindex="-1">Issues</button>
|
|
215
|
-
<button id="github-view-actions" class="github-view" type="button" role="tab" aria-controls="github-runs" aria-selected="false" data-view="actions" tabindex="-1" aria-label="Actions">Actions<span id="github-running" class="github-running" hidden></span></button>
|
|
221
|
+
<button id="github-view-actions" class="github-view" type="button" role="tab" aria-controls="github-runs" aria-selected="false" data-view="actions" tabindex="-1" aria-label="Actions">Actions<span id="github-outage" class="github-outage" aria-hidden="true" hidden>!</span><span id="github-running" class="github-running" hidden></span></button>
|
|
216
222
|
<button id="github-view-pulls" class="github-view" type="button" role="tab" aria-controls="github-pulls" aria-selected="false" data-view="pulls" tabindex="-1" aria-label="Pull requests"><span class="long">Pull requests</span><span class="short" aria-hidden="true">PRs</span></button>
|
|
217
223
|
<button id="github-view-branches" class="github-view" type="button" role="tab" aria-controls="github-branches" aria-selected="false" data-view="branches" tabindex="-1">Branches</button>
|
|
218
224
|
</div>
|
|
@@ -376,18 +382,28 @@
|
|
|
376
382
|
<div class="models-bar">
|
|
377
383
|
<div class="models-heading">
|
|
378
384
|
<h2 id="environment-title">Manager environment</h2>
|
|
379
|
-
<p class="sub">On the computer running Agent Guild</p>
|
|
385
|
+
<p id="environment-host" class="sub">On the computer running Agent Guild</p>
|
|
380
386
|
</div>
|
|
381
387
|
<button id="environment-close" class="btn" type="button">Close</button>
|
|
382
388
|
</div>
|
|
383
389
|
<div class="models-body">
|
|
384
|
-
<
|
|
385
|
-
|
|
390
|
+
<div id="environment-scopes" class="environment-scopes" role="group" aria-label="Environment to check">
|
|
391
|
+
<button id="environment-scope-manager" class="environment-scope" type="button" aria-pressed="true">Manager</button>
|
|
392
|
+
<button id="environment-scope-project" class="environment-scope" type="button" aria-pressed="false">This project</button>
|
|
393
|
+
<button id="environment-scope-session" class="environment-scope" type="button" aria-pressed="false">Existing session</button>
|
|
394
|
+
<button id="environment-scope-launch" class="environment-scope" type="button" aria-pressed="false">New shell</button>
|
|
395
|
+
</div>
|
|
396
|
+
<p id="environment-intro" class="environment-detail">Versions available to the manager. Shell profiles, projects and existing sessions can use different versions.</p>
|
|
397
|
+
<p id="environment-python-note" class="environment-detail">Python uses <code>python</code> when found, otherwise <code>python3</code>. A failed <code>python</code> check stays primary.</p>
|
|
398
|
+
<p id="environment-folder" class="environment-detail" hidden>Choose a working folder.</p>
|
|
399
|
+
<label id="environment-session-label" for="environment-session" hidden>Session</label>
|
|
400
|
+
<select id="environment-session" hidden></select>
|
|
386
401
|
<p id="environment-status" class="environment-detail" role="status"></p>
|
|
387
402
|
<button id="environment-refresh" class="btn" type="button">Refresh</button>
|
|
388
403
|
<div id="environment-runtimes"></div>
|
|
389
|
-
<
|
|
390
|
-
<
|
|
404
|
+
<div id="environment-pins" hidden></div>
|
|
405
|
+
<h3 id="environment-tools-heading">Detected tools</h3>
|
|
406
|
+
<p id="environment-tools-note" class="environment-detail">Presence only. Activation and the runtimes these tools manage are not checked.</p>
|
|
391
407
|
<div id="environment-tools"></div>
|
|
392
408
|
<p id="environment-tools-empty" class="environment-detail"></p>
|
|
393
409
|
<p id="environment-manager-node" class="environment-detail"></p>
|
|
@@ -513,7 +529,7 @@
|
|
|
513
529
|
|
|
514
530
|
<template id="provider-template">
|
|
515
531
|
<article class="provider" role="listitem">
|
|
516
|
-
<span class="card-art" aria-hidden="true"></span>
|
|
532
|
+
<span class="card-art" aria-hidden="true"><span class="spent-veil"></span></span>
|
|
517
533
|
<div class="provider-head">
|
|
518
534
|
<span class="provider-icon"></span>
|
|
519
535
|
<span class="provider-text">
|
package/web/styles.css
CHANGED
|
@@ -153,6 +153,16 @@ main { max-width: calc(1200px + var(--dock-space, 0px)); margin: 0 auto; padding
|
|
|
153
153
|
.account-chip.unsigned { border-style: dashed; }
|
|
154
154
|
.provider .usage { display: grid; gap: 4px; }
|
|
155
155
|
.provider .usage:empty { display: none; }
|
|
156
|
+
/* Spent portrait: the art stills and a danger wash sits inside the frame. The card stays usable. */
|
|
157
|
+
.provider .spent-veil {
|
|
158
|
+
position: absolute; inset: 0; z-index: 1; pointer-events: none; opacity: 0;
|
|
159
|
+
background:
|
|
160
|
+
radial-gradient(ellipse at 50% 42%, transparent 28%, color-mix(in srgb, var(--danger) 46%, transparent) 100%),
|
|
161
|
+
linear-gradient(to top, rgba(0, 0, 0, 0.55), transparent 52%);
|
|
162
|
+
transition: opacity 0.4s var(--ease);
|
|
163
|
+
}
|
|
164
|
+
.provider.spent .card-art::before { filter: grayscale(1) brightness(0.82); }
|
|
165
|
+
.provider.spent .spent-veil { opacity: 1; }
|
|
156
166
|
.environment-summary { min-width: 0; font-size: .78rem; }
|
|
157
167
|
.environment-open { padding: 0; border: 0; background: none; color: var(--accent); font: inherit; cursor: pointer; text-align: left; }
|
|
158
168
|
.environment-open:hover { text-decoration: underline; }
|
|
@@ -162,6 +172,23 @@ main { max-width: calc(1200px + var(--dock-space, 0px)); margin: 0 auto; padding
|
|
|
162
172
|
.environment-values dt { color: var(--muted); }
|
|
163
173
|
.environment-values dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
164
174
|
.environment-note { margin: 4px 0 0; color: var(--muted); font-size: .72rem; }
|
|
175
|
+
.environment-scopes { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0; }
|
|
176
|
+
.environment-scope {
|
|
177
|
+
font: inherit; font-size: 0.75rem; font-weight: 600; padding: 3px 11px; border-radius: 999px; cursor: pointer;
|
|
178
|
+
border: 1px solid var(--border); background: var(--surface-2); color: var(--muted);
|
|
179
|
+
}
|
|
180
|
+
.environment-scope:hover { border-color: var(--muted); }
|
|
181
|
+
.environment-scope:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }
|
|
182
|
+
.environment-scope[aria-pressed="true"] { background: var(--accent-fill); border-color: var(--accent-fill); color: var(--accent-text); }
|
|
183
|
+
.environment-dialog select {
|
|
184
|
+
width: 100%; max-width: 100%; margin: 0 0 8px; padding: 8px; box-sizing: border-box;
|
|
185
|
+
border: 1px solid var(--border); border-radius: 6px; background: var(--surface-2); color: var(--text); font: inherit;
|
|
186
|
+
}
|
|
187
|
+
.environment-dialog label { display: block; margin: 8px 0 4px; font-size: 0.8rem; color: var(--muted); }
|
|
188
|
+
@media (pointer: coarse), (max-width: 640px) {
|
|
189
|
+
.environment-scope { min-height: 36px; }
|
|
190
|
+
.environment-dialog select { min-height: 44px; }
|
|
191
|
+
}
|
|
165
192
|
.environment-detail { font-size: .85rem; line-height: 1.5; color: var(--muted); overflow-wrap: anywhere; }
|
|
166
193
|
.environment-row { padding: 12px 0; border-bottom: 1px solid var(--border); }
|
|
167
194
|
.environment-row-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 14px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
@@ -395,8 +422,15 @@ main { max-width: calc(1200px + var(--dock-space, 0px)); margin: 0 auto; padding
|
|
|
395
422
|
.settings-menu .choice > .voice-input::before { mask-image: var(--icon-mic); }
|
|
396
423
|
.settings-menu .choice > .autostart::before { mask-image: var(--icon-power); }
|
|
397
424
|
.voice-note { margin: 0 8px 6px; max-width: 26ch; color: var(--muted); font-size: 0.75rem; line-height: 1.35; }
|
|
425
|
+
.settings-menu .choice > .startup-boot::before { mask-image: var(--icon-server); }
|
|
426
|
+
.settings-menu .choice > .startup-off::before { visibility: hidden; }
|
|
398
427
|
.autostart-run { overflow-wrap: anywhere; }
|
|
399
428
|
.autostart-run[data-outcome="failed"] { color: var(--danger); }
|
|
429
|
+
.autostart-run[data-outcome="warn"] { color: var(--warn); }
|
|
430
|
+
.startup-commands { display: grid; gap: 4px; margin: 0 8px 6px; max-width: 26ch; font-size: 0.75rem; }
|
|
431
|
+
.startup-commands .command { align-items: flex-start; }
|
|
432
|
+
.startup-commands .command pre { margin: 0; padding: 4px 6px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--surface-2); white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
433
|
+
.startup-commands .btn { padding: 3px 8px; font-size: 0.75rem; }
|
|
400
434
|
.notes-open::before { mask-image: var(--icon-notes); }
|
|
401
435
|
.notes-open[aria-pressed="true"], .github-toggle[aria-pressed="true"] { border-color: var(--accent); color: var(--accent); }
|
|
402
436
|
.menu-button::after { margin-left: 0.45em; transform: rotate(90deg); transition: transform 0.15s var(--ease); }
|
|
@@ -923,6 +957,8 @@ a.news-link:visited { color: var(--muted); }
|
|
|
923
957
|
.github-branch-filter input { font-size: 16px; }
|
|
924
958
|
.github-branch > .btn, #github-branches .github-view-tools .btn, .github-branch-filter .btn { min-height: 36px; }
|
|
925
959
|
}
|
|
960
|
+
.github-outage { display: inline-grid; place-items: center; width: 14px; height: 14px; border-radius: 50%; background: var(--danger); color: #fff; font-size: 0.65rem; font-weight: 700; line-height: 1; }
|
|
961
|
+
.github-outage[hidden] { display: none; }
|
|
926
962
|
.github-running { width: 8px; height: 8px; border-radius: 50%; background: var(--warn); box-shadow: 0 0 0 3px color-mix(in srgb, var(--warn) 25%, transparent); animation: pulse 1.4s ease-in-out infinite; }
|
|
927
963
|
.github-body[hidden] { display: none; }
|
|
928
964
|
.github-view-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding-bottom: 6px; }
|
|
@@ -947,6 +983,8 @@ a.btn.github-out::after {
|
|
|
947
983
|
.github-record-title:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; border-radius: 2px; }
|
|
948
984
|
.github-record .btn { padding: 3px 10px; font-size: 0.8rem; }
|
|
949
985
|
.github-running-note { margin: 4px 0 6px; padding: 6px 10px; border-radius: var(--radius); background: var(--surface-2); font-size: 0.85rem; }
|
|
986
|
+
.github-service-note { margin: 4px 0 6px; padding: 6px 10px; border-radius: var(--radius); color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, var(--surface)); font-size: 0.85rem; }
|
|
987
|
+
.github-service-note .console-link { color: inherit; text-decoration: underline; }
|
|
950
988
|
.github-running-note.on { color: var(--warn); background: color-mix(in srgb, var(--warn) 12%, var(--surface)); }
|
|
951
989
|
.badge.run { --badge: var(--warn); }
|
|
952
990
|
.badge.ok { --badge: var(--ok); }
|
|
@@ -1026,6 +1064,7 @@ a.btn.github-out::after {
|
|
|
1026
1064
|
.btn.voice[aria-pressed="true"]::before { animation: none; }
|
|
1027
1065
|
.drag-handle, .session-grid::before, .session-grid.reordering::before,
|
|
1028
1066
|
.session-grid > .session-card.dragging, .session-grid > .session-card.settling { transition: none; }
|
|
1067
|
+
.provider .spent-veil { transition: none; }
|
|
1029
1068
|
}
|
|
1030
1069
|
|
|
1031
1070
|
@media (max-width: 640px) {
|