OXYGENHUB

A tidier button for asking an agent: its mark, then Ask or Draft with its name 3ea0b8af2d46

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-04 18:08 UTC
Signature
✔ signed by Andy McCall
Hash
3ea0b8af2d46f938f1820637074bc691f9fb8cc7321191bda9fd192fe806162b
Depends on
206c1fc1b06a 7d2eb590051f 8e96499f2705 991b55638aaf d23464c0ac60 de505df5cf8d
Depended on by
119fd17d213f ffb67a81188c 155cab142b63 e1dc108bd814
In bookmarks
api-unknown-fields cancel-landed-runs clear-waiting close-proposal-140 diffusion-pin-bookmark draft-ready image-check job-waits main oh-comment-body-file proposal-list-fast run-one-job wiki-says-so
In tags
v0.4.1 v0.4.2 v0.5.0 v0.5.1 v0.5.2 v0.6.0 v0.6.1 v0.7.0 v0.8.0 v0.9.0 v0.9.1 v0.9.11 v0.9.15 v0.9.16 v0.9.19 v0.9.2 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24 v0.9.3 v0.9.4 v0.9.5 v0.9.6 v0.9.7 v0.9.8 v0.9.9
Edits
6 atoms, 0 tree operations, 3 files

Browse the tree at this change

modified templates/proposal.html +2 −2
…
92 unchanged lines
93 93
        <div class="edit-row"><label for="etarget">Into bookmark</label><input type="text" id="etarget" name="target" value="{{ p.target }}"></div>
94 94
        <textarea id="ebody" name="body" class="md" rows="10" aria-label="Description (Markdown)">{% if let Some(d) = draft %}{{ d }}{% else %}{{ p.body }}{% endif %}</textarea>
95 95
        {% if draft.is_some() %}<p class="small mute">Drafted by an assistant; nothing is saved until you update the proposal.</p>{% endif %}
96 -
        <div class="tl-actions"><a class="go" href="#description">Cancel</a> {% for a in assistants %}<button type="submit" class="small" formaction="{{ repo.url }}/proposal/{{ p.number }}/draft" formnovalidate name="assistant" value="{{ a }}" title="{{ a }}, an AI assistant, drafts the description from the changes; you edit it before saving"><span class="tag">agent</span> draft with {{ a }}</button> {% endfor %}<button type="submit" class="primary-btn">Update proposal</button></div>
96 +
        <div class="tl-actions"><a class="go" href="#description">Cancel</a> {% for a in assistants %}<button type="submit" class="agent-btn" formaction="{{ repo.url }}/proposal/{{ p.number }}/draft" formnovalidate name="assistant" value="{{ a }}" title="{{ a }}, an AI assistant, drafts the description from the changes; you edit it before saving"><img src="/avatar/agent/{{ a }}" alt="" width="16" height="16"> Draft with {{ a }}</button> {% endfor %}<button type="submit" class="primary-btn">Update proposal</button></div>
97 97
      </form>
98 98
      {% endif %}
99 99
    </div>
…
104 unchanged lines
204 204
        <div class="menu-foot"><button type="submit" class="small primary-btn">Apply</button></div>
205 205
      </form></details>{% endif %}</div>
206 206
    {% if requested.is_empty() %}<p class="side-empty">No reviews requested</p>{% else %}<ul class="side-people">{% for r in requested %}<li><a href="/{{ r }}"><img class="avatar xs" src="/avatar/{{ r }}" alt="" loading="lazy"> {{ r }}</a> <span class="side-note-inline">awaiting review</span></li>{% endfor %}</ul>{% endif %}
207 -
    {% if !assistants.is_empty() %}<div class="side-assist">{% for a in assistants %}<form class="tiny inline" method="post" action="{{ repo.url }}/proposal/{{ p.number }}/assistant"><input type="hidden" name="_csrf" value="{{ shell.csrf }}"><input type="hidden" name="assistant" value="{{ a }}"><button type="submit" title="Ask {{ a }}, an AI assistant, to review; its answer is recorded as your review via {{ a }}"><img class="avatar xs" src="/avatar/agent/{{ a }}" alt="" width="14" height="14"> ask {{ a }}</button></form>{% endfor %}</div>{% endif %}
207 +
    {% if !assistants.is_empty() %}<div class="side-assist">{% for a in assistants %}<form class="tiny inline" method="post" action="{{ repo.url }}/proposal/{{ p.number }}/assistant"><input type="hidden" name="_csrf" value="{{ shell.csrf }}"><input type="hidden" name="assistant" value="{{ a }}"><button type="submit" class="agent-btn" title="Ask {{ a }}, an AI assistant, to review; its answer is recorded as your review via {{ a }}"><img src="/avatar/agent/{{ a }}" alt="" width="16" height="16"> Ask {{ a }}</button></form>{% endfor %}</div>{% endif %}
208 208
  </section>
209 209
  <section class="side-sec">
210 210
    <div class="side-head"><h3>Labels</h3>
…
40 unchanged lines
modified templates/proposal_new.html +1 −1
…
24 unchanged lines
25 25
  <input type="hidden" name="target" value="{{ target }}">
26 26
  <label for="title">Title</label><input type="text" id="title" name="title" required value="{% if !title.is_empty() %}{{ title }}{% else if preview.len() == 1 %}{{ preview[0].title }}{% endif %}">
27 27
  <label for="body">Description (Markdown)</label><textarea id="body" name="body" class="md" rows="8">{{ body }}</textarea>
28 -
  {% if !assistants.is_empty() %}<div class="side-assist">{% for a in assistants %}<button type="submit" class="small" formaction="{{ repo.url }}/proposals/new/draft" formnovalidate name="assistant" value="{{ a }}" title="{{ a }}, an AI assistant, drafts the description from the changes; you edit it before opening"><span class="tag">agent</span> draft with {{ a }}</button>{% endfor %}</div>{% endif %}
28 +
  {% if !assistants.is_empty() %}<div class="side-assist">{% for a in assistants %}<button type="submit" class="agent-btn" formaction="{{ repo.url }}/proposals/new/draft" formnovalidate name="assistant" value="{{ a }}" title="{{ a }}, an AI assistant, drafts the description from the changes; you edit it before opening"><img src="/avatar/agent/{{ a }}" alt="" width="16" height="16"> Draft with {{ a }}</button>{% endfor %}</div>{% endif %}
29 29
  <div class="choice"><label><input type="checkbox" name="draft" value="1"> draft: not ready for review</label></div>
30 30
  <button type="submit">OPEN PROPOSAL</button>
31 31
</form>
…
4 unchanged lines
modified templates/style.css +4 −0
…
729 unchanged lines
730 730
.side-list form.inline { margin-left: 6px; }
731 731
.side-assist { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
732 732
.side-assist form.inline { display: inline; margin: 0; }
733 +
/* A button that asks an AI agent: its mark, then the verb and its name. */
734 +
button.agent-btn { display: inline-flex; align-items: center; gap: 7px; padding: 4px 10px 4px 6px; font-size: 11px; line-height: 16px; }
735 +
button.agent-btn img { width: 16px; height: 16px; border-radius: 50%; flex: 0 0 16px; }
736 +
button.agent-btn:hover img { filter: brightness(1.1); }
733 737
/* Forms inside a settings panel fill it, and a form that follows a table
734 738
   (Add a runner) stands off it (oxygenhub#99). */
735 739
.panel form.card { max-width: none; }
…
66 unchanged lines