diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-06-03 23:01:39 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-06-03 23:01:39 +0000 |
| commit | 68cf1e24dd2ca2612b72babc4b35280cd3512f92 (patch) | |
| tree | 14b73f21570a2f42ae729ca7e9676de6628d6819 /web/index.html | |
| parent | b28cfc6ff288d083f6c8e9c055b69bfcadbceccc (diff) | |
| parent | 7388337d3be5cc7f65ef547e30b2e39884dd165b (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.html | 78 |
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 & 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">✕</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 & 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">✕</button> - </div> - <div id="story-detail-body" class="story-detail-body meta-grid"></div> - </dialog> - <script type="module" src="app.js"></script> </body> </html> |
