Initial commit: a0_software_orchestrator v1.0

- Auto-Registration-Bug behoben (register_project/get_project_id/resolve_project Trennung)
- 25 Tests gruen (Pytest)
- block_compactor-Tool refactored (Option B: Soft-Check statt Hard-Block)
- 4 Restbaustellen gefixt
- DB-Schema: plugin_settings-Tabelle hinzugefuegt
- 3 Schattenprojekte aus DB geloescht
- Plan v3 + Refactor-Plan + Worklog dokumentiert
This commit is contained in:
Software Orchestrator
2026-06-16 22:13:06 +00:00
commit 5769c1cd22
236 changed files with 17825 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
<html>
<head>
<title>A0 Software Orchestrator Settings</title>
<script type="module" src="/plugins/a0_software_orchestrator/webui/orchestrator-config-store.js"></script>
</head>
<body>
<div x-data>
<template x-if="$store.a0SoftwareOrchestratorStore">
<div x-init="$store.a0SoftwareOrchestratorStore.onOpen()" x-destroy="$store.a0SoftwareOrchestratorStore.cleanup()">
<h3>A0 Software Orchestrator</h3>
<p>Core-first software project orchestration.</p>
<!-- Model Routing -->
<fieldset>
<legend>Model Routing</legend>
<div class="form-group">
<label>Orchestrator Model:</label>
<select x-model="config.orchestrator_preset">
<option value="strong-reasoning">Strong Reasoning</option>
<option value="cheap-fast">Cheap Fast</option>
<option value="best-coding">Best Coding</option>
<option value="balanced">Balanced</option>
</select>
</div>
<div class="form-group">
<label>Implementation Engineer Model:</label>
<select x-model="config.implementation_preset">
<option value="best-coding">Best Coding</option>
<option value="balanced-coding">Balanced Coding</option>
<option value="strong-reasoning">Strong Reasoning</option>
<option value="cheap-fast">Cheap Fast</option>
</select>
</div>
</fieldset>
<!-- External Tools Health -->
<fieldset>
<legend>External Tools</legend>
<div x-text="'Status: ' + (config.tool_status || 'not checked')">
</div>
<button @click="$store.a0SoftwareOrchestratorStore.loadStatus()">
Check Tools
</button>
</fieldset>
<!-- Autonomy Level -->
<fieldset>
<legend>Autonomy</legend>
<select x-model="config.autonomy_level">
<option value="low">Low (read-only)</option>
<option value="balanced">Balanced (commit allowed)</option>
<option value="high">High (push feature branches)</option>
</select>
</fieldset>
<p class="version">Version 0.1.0</p>
</div>
</template>
</div>
</body>
</html>
+28
View File
@@ -0,0 +1,28 @@
<html>
<head>
<title>Model Routing</title>
<script type="module" src="/plugins/a0_software_orchestrator/webui/orchestrator-config-store.js"></script>
</head>
<body>
<div x-data>
<template x-if="$store.a0SoftwareOrchestratorStore">
<div>
<h2>Model Routing Configuration</h2>
<p>Assign model presets to orchestrator roles.</p>
<div id="roles">
<!-- Dynamically populated in v0.2 -->
<p>Orchestrator: strong-reasoning</p>
<p>Codebase Explorer: cheap-long-context</p>
<p>Requirements Analyst: strong-reasoning</p>
<p>Solution Architect: strong-reasoning</p>
<p>Implementation Engineer: best-coding</p>
<p>Test/Debug Engineer: balanced-coding</p>
<p>Runtime/DevOps Engineer: reasoning-devops</p>
<p>Security/Data Engineer: strong-reasoning</p>
<p>Release Auditor: cheap-fast</p>
</div>
</div>
</template>
</div>
</body>
</html>
+59
View File
@@ -0,0 +1,59 @@
import { createStore } from "/js/AlpineStore.js";
import {
toastFrontendError,
toastFrontendSuccess,
toastFrontendWarning,
toastFrontendInfo
} from "/components/notifications/notification-store.js";
export const store = createStore("a0SoftwareOrchestratorStore", {
status: "idle",
projectState: null,
modelRouting: {},
toolCapabilities: {},
auditStatus: {},
init() {
this.status = "initialized";
},
onOpen() {
this.status = "active";
this.loadStatus();
},
cleanup() {
this.status = "idle";
},
async loadStatus() {
try {
this.status = "loading";
// In v0.1, load from API endpoints
// TODO: wire to actual API calls
toastFrontendInfo("Orchestrator status loaded", "A0 Software Orchestrator");
} catch (e) {
toastFrontendError(e.message, "A0 Software Orchestrator");
} finally {
this.status = "active";
}
},
async saveModelRouting(role, preset) {
try {
const response = await fetch("/api/plugins/a0_software_orchestrator/model_routing_save", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ role, preset })
});
const data = await response.json();
if (data.ok) {
toastFrontendSuccess(`Model routing updated: ${role} -> ${preset}`, "A0 Software Orchestrator");
} else {
toastFrontendError(data.error || "Save failed", "A0 Software Orchestrator");
}
} catch (e) {
toastFrontendError(e.message, "A0 Software Orchestrator");
}
}
});
+25
View File
@@ -0,0 +1,25 @@
<html>
<head>
<title>Orchestrator Status</title>
<script type="module" src="/plugins/a0_software_orchestrator/webui/orchestrator-config-store.js"></script>
</head>
<body>
<div x-data>
<template x-if="$store.a0SoftwareOrchestratorStore">
<div>
<h2>Orchestrator Status</h2>
<div id="status-panel">
<p>Plugin: Active</p>
<p>Version: 0.1.0</p>
<p>Mode: Core</p>
<p>Advanced Packs: None active</p>
<p>Subagent Profiles: 9 (1 manager + 8 specialists)</p>
<p>Skills: 15</p>
<p>Tools: 11 core tools</p>
<p>API Handlers: 6</p>
</div>
</div>
</template>
</div>
</body>
</html>
+24
View File
@@ -0,0 +1,24 @@
<html>
<head>
<title>Tool Health</title>
<script type="module" src="/plugins/a0_software_orchestrator/webui/orchestrator-config-store.js"></script>
</head>
<body>
<div x-data>
<template x-if="$store.a0SoftwareOrchestratorStore">
<div>
<h2>Tool Health Status</h2>
<table>
<tr><th>Tool</th><th>Status</th><th>Fallback</th></tr>
<tr><td>Forgejo</td><td id="forgejo-status">Not checked</td><td>Local git</td></tr>
<tr><td>Coolify</td><td id="coolify-status">Not checked</td><td>Manual handoff</td></tr>
<tr><td>Terminal</td><td id="terminal-status">Available</td><td>-</td></tr>
<tr><td>Browser</td><td id="browser-status">Not checked</td><td>Manual QA checklist</td></tr>
<tr><td>Git</td><td id="git-status">Available</td><td>-</td></tr>
<tr><td>Docker</td><td id="docker-status">Not checked</td><td>Manual compose</td></tr>
</table>
</div>
</template>
</div>
</body>
</html>