summaryrefslogtreecommitdiff
path: root/web/index.html
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-06-03 23:01:39 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-06-03 23:01:39 +0000
commit68cf1e24dd2ca2612b72babc4b35280cd3512f92 (patch)
tree14b73f21570a2f42ae729ca7e9676de6628d6819 /web/index.html
parentb28cfc6ff288d083f6c8e9c055b69bfcadbceccc (diff)
parent7388337d3be5cc7f65ef547e30b2e39884dd165b (diff)
merge: integrate oss branch — budget gating, MCP back-channel, events, loopback-only bind
Key features from OSS branch: - Budget gating: rolling per-provider spend caps with BUDGET_EXCEEDED task state - Agent MCP back-channel: runners mint tokens; /mcp endpoint resolves them - Chatbot MCP server at /chatbot/mcp (requires api_token in config) - Event timeline: unified event stream replacing ad-hoc question/summary flows - Loopback-only default bind (127.0.0.1:8484); external_bind_allowed=true to expose - repository_url required on task creation (enforces traceability) - Auto-checker: spawns verification task after each execution Conflict resolutions: - serve.go: keep cfg.Runners.XEnabled() conditional registration from main + agentRegistry from oss - config.go: keep RunnersConfig from main + BudgetConfig/ExternalBindAllowed from oss - server.go: handleStaticFiles (base-path rewrite) kept; deduplicated duplicate from both sides - executor/claude.go: accepted oss deletion (ClaudeRunner replaced by ContainerRunner) - container_test.go: added noopChannel + AgentChannel parameter to Run call Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'web/index.html')
-rw-r--r--web/index.html78
1 files changed, 1 insertions, 77 deletions
diff --git a/web/index.html b/web/index.html
index 0632cd7..5aa7b44 100644
--- a/web/index.html
+++ b/web/index.html
@@ -36,11 +36,10 @@
</select>
<button id="btn-notifications" class="btn-secondary" title="Enable push notifications">🔔</button>
<button id="btn-start-next" class="btn-secondary">Start Next</button>
- <button id="btn-new-task" class="btn-primary">New Task</button>
</div>
+ <div id="budget-bar" class="budget-bar"></div>
</header>
<nav class="tab-bar">
- <button class="tab" data-tab="stories" title="Stories">📖</button>
<button class="tab active" data-tab="queue" title="Queue">⏳</button>
<button class="tab" data-tab="interrupted" title="Interrupted">⚠️<span class="tab-count-badge" hidden></span></button>
<button class="tab" data-tab="ready" title="Ready">✅<span class="tab-count-badge" hidden></span></button>
@@ -69,57 +68,12 @@
<div data-panel="drops" hidden>
<div class="drops-panel"></div>
</div>
- <div data-panel="stories" hidden></div>
<div data-panel="stats" hidden></div>
<div data-panel="settings" hidden>
<p class="task-meta" style="padding:1rem">Settings coming soon.</p>
</div>
</main>
- <dialog id="task-modal">
- <form id="task-form" method="dialog">
- <h2>New Task</h2>
- <div class="elaborate-section">
- <label>Describe what you want the agent to do
- <textarea id="elaborate-prompt" rows="3"
- placeholder="e.g. run tests with race detector and check coverage"></textarea>
- </label>
- <button type="button" id="btn-elaborate" class="btn-secondary">
- Draft with AI ✦
- </button>
- <p class="elaborate-hint">AI will fill in the form fields below. You can edit before submitting.</p>
- </div>
- <hr class="form-divider">
- <label>Repository URL
- <input name="repository_url" id="repository-url" placeholder="https://github.com/user/repo.git" required>
- </label>
- <label>Container Image
- <input name="container_image" id="container-image" placeholder="claudomator-agent:latest" value="claudomator-agent:latest">
- </label>
- <label>Name <input name="name" required></label>
- <label>Instructions <textarea name="instructions" rows="6" required></textarea></label>
- <div class="validate-section">
- <button type="button" id="btn-validate" class="btn-secondary">
- Validate Instructions
- </button>
- <div id="validate-result" hidden></div>
- </div>
- <label>Max Budget (USD) <input name="max_budget_usd" type="number" step="0.01" value="1.00"></label>
- <label>Timeout <input name="timeout" value="15m"></label>
- <label>Priority
- <select name="priority">
- <option value="normal" selected>Normal</option>
- <option value="high">High</option>
- <option value="low">Low</option>
- </select>
- </label>
- <div class="form-actions">
- <button type="button" id="btn-cancel-task">Cancel</button>
- <button type="submit" class="btn-primary">Create &amp; Queue</button>
- </div>
- </form>
- </dialog>
-
<!-- Side panel backdrop -->
<div id="task-panel-backdrop" class="panel-backdrop" hidden></div>
@@ -142,36 +96,6 @@
</div>
</dialog>
- <!-- New Story modal -->
- <dialog id="story-modal">
- <div class="story-modal-header">
- <h2>New Story</h2>
- <button id="btn-close-story-modal" class="btn-close-panel" aria-label="Close">&#x2715;</button>
- </div>
- <div class="story-modal-body">
- <label>Project
- <select id="story-project"></select>
- </label>
- <label>Goal
- <textarea id="story-goal" rows="4" placeholder="Describe the feature or change you want to build…"></textarea>
- </label>
- <button type="button" id="btn-story-elaborate" class="btn-secondary">Elaborate with AI ✦</button>
- <div id="story-plan-area" hidden></div>
- <div class="form-actions">
- <button type="button" id="btn-story-approve" class="btn-primary" hidden>Approve &amp; Queue</button>
- </div>
- </div>
- </dialog>
-
- <!-- Story detail modal -->
- <dialog id="story-detail-modal">
- <div class="story-modal-header">
- <h2 id="story-detail-name">Story</h2>
- <button id="btn-close-story-detail" class="btn-close-panel" aria-label="Close">&#x2715;</button>
- </div>
- <div id="story-detail-body" class="story-detail-body meta-grid"></div>
- </dialog>
-
<script type="module" src="app.js"></script>
</body>
</html>