Ferrell Synthetic Intelligence commited on
Commit
6f0baaa
·
1 Parent(s): 1aa2505

Initial AIDE sovereign workbench release

Browse files
README.md ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ tags:
4
+ - offline
5
+ - ide
6
+ - local-ai
7
+ - coding
8
+ - llama.cpp
9
+ - software-engineering
10
+ pipeline_tag: text-generation
11
+ ---
12
+
13
+ # AIDE Sovereign Workbench
14
+
15
+ AIDE is a local-first development workbench with a Parrot-inspired security layout and Matrix neon accents. It combines an editor, terminal, Git-oriented workflows, model adapters, and bounded multi-model collaboration while keeping model execution on the user's device.
16
+
17
+ ## Current Model Strategy
18
+
19
+ - **Builder:** Qwen2.5-Coder 1.5B Instruct Q4_K_M from the official [Qwen repository](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF). The official model is Apache-2.0 and is intentionally not duplicated here.
20
+ - **Reasoner/verifier:** Liquid AI LFM2.5 Thinking, pending confirmation of the local checkpoint, runtime, and redistribution license.
21
+ - **Coordinator:** AIDE routes research, build, and verification sequentially. It shows a diff and requires approval before applying changes.
22
+
23
+ ## Offline Use
24
+
25
+ 1. Serve this repository locally with `python -m http.server 4173 --bind 127.0.0.1`.
26
+ 2. Start a local OpenAI-compatible runtime for the selected model on loopback.
27
+ 3. Open `http://127.0.0.1:4173/`.
28
+ 4. Use **TEST LOCAL RUNTIME** and then **START BOUNDED REVIEW**.
29
+
30
+ See `runtime/README.md` and `models/manifest.json` for the adapter contract and model configuration. AIDE does not apply model-generated patches automatically.
31
+
32
+ ## Status
33
+
34
+ This is a pre-production engineering release. The Liquid checkpoint is not included until its exact artifact, license, checksum, and evaluation are confirmed. The Qwen weight is downloaded separately from its official repository and should be verified before offline use.
35
+
36
+ ## License
37
+
38
+ The AIDE source and documentation are Apache-2.0 unless a file or dependency states otherwise. Third-party models retain their original licenses and attribution.
app.js ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const state = { manifest: null, selected: null, files: {
2
+ 'agent.ts': `import { ChatMessage, ModelAdapter } from './types';
3
+ import { LocalModelRouter } from './router';
4
+
5
+ export class AgentRuntime {
6
+ constructor(private readonly router: LocalModelRouter) {}
7
+
8
+ async review(task: string) {
9
+ const lanes = this.router.plan(task);
10
+ return this.router.runBounded(lanes);
11
+ }
12
+ }`,
13
+ 'router.ts': `export class LocalModelRouter {
14
+ constructor(private readonly registry: ModelRegistry) {}
15
+
16
+ plan(task: string) {
17
+ return ['research', 'build', 'verify'].map(role => ({ role, task }));
18
+ }
19
+
20
+ async runBounded(lanes: Lane[]) {
21
+ // Each lane receives only the context it needs and returns a reviewable artifact.
22
+ return this.registry.executeSequentially(lanes, { maxTurns: 4, approval: true });
23
+ }
24
+ }`,
25
+ 'models.ts': `export type ModelRole = 'research' | 'build' | 'verify';
26
+
27
+ export interface ModelManifest {
28
+ id: string;
29
+ status: 'experimental' | 'ready' | 'pending';
30
+ roles: ModelRole[];
31
+ runtime: 'llama.cpp' | 'ollama' | 'openai-compatible';
32
+ endpoint: string;
33
+ }`,
34
+ 'types.ts': `export interface Lane {
35
+ role: 'research' | 'build' | 'verify';
36
+ task: string;
37
+ claims?: string[];
38
+ patch?: string;
39
+ confidence?: number;
40
+ }`,
41
+ 'README.md': '# AIDE\n\nLocal-first development with explicit model lanes and reviewable patches.'
42
+ }};
43
+
44
+ const $ = selector => document.querySelector(selector);
45
+ const esc = value => String(value).replace(/[&<>"']/g, char => ({ '&':'&amp;', '<':'&lt;', '>':'&gt;', '"':'&quot;', "'":'&#39;' }[char]));
46
+
47
+ function openFile(name) {
48
+ const text = state.files[name] || state.files['agent.ts'];
49
+ $('#code').textContent = text;
50
+ $('#line-numbers').textContent = text.split('\n').map((_, index) => index + 1).join('\n');
51
+ document.querySelectorAll('[data-file]').forEach(button => button.classList.toggle('active', button.dataset.file === name));
52
+ }
53
+
54
+ function renderModels() {
55
+ const list = $('#model-list');
56
+ const lanes = $('#lane-grid');
57
+ list.innerHTML = '';
58
+ lanes.innerHTML = '';
59
+ state.manifest.models.forEach(model => {
60
+ const roles = model.roles.join(' / ');
61
+ const item = document.createElement('button');
62
+ item.className = 'model-item';
63
+ item.innerHTML = `<span class="status ${model.status}"></span><span>${esc(model.name)}</span><small>${esc(model.format)} | ${esc(model.status)}</small>`;
64
+ item.onclick = () => selectModel(model);
65
+ list.appendChild(item);
66
+ const lane = document.createElement('button');
67
+ lane.className = `lane ${model.status}`;
68
+ lane.innerHTML = `<b>${esc(model.lane.toUpperCase())}</b><span>${esc(model.name)}</span><small>${esc(roles)}</small>`;
69
+ lane.onclick = () => selectModel(model);
70
+ lanes.appendChild(lane);
71
+ });
72
+ }
73
+
74
+ function selectModel(model) {
75
+ state.selected = model;
76
+ $('#selected-model').textContent = model.name;
77
+ $('#selected-detail').textContent = `${model.format} | ${model.status} | ${model.description}`;
78
+ $('#runtime-name').textContent = model.runtime;
79
+ }
80
+
81
+ function appendLog(role, text, type = '') {
82
+ const log = $('#collab-log');
83
+ if (log.querySelector('.empty-state')) log.innerHTML = '';
84
+ const entry = document.createElement('div');
85
+ entry.className = `log-entry ${type}`;
86
+ entry.innerHTML = `<b>${esc(role)}</b><p>${esc(text)}</p>`;
87
+ log.appendChild(entry);
88
+ log.scrollTop = log.scrollHeight;
89
+ }
90
+
91
+ async function requestLocal(model, messages) {
92
+ const response = await fetch(`${model.endpoint}/chat/completions`, {
93
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
94
+ body: JSON.stringify({ model: model.model, messages, temperature: model.temperature, max_tokens: model.max_tokens })
95
+ });
96
+ if (!response.ok) throw new Error(`runtime returned HTTP ${response.status}`);
97
+ const data = await response.json();
98
+ return data.choices?.[0]?.message?.content || 'Runtime returned no content.';
99
+ }
100
+
101
+ async function runReview() {
102
+ const task = $('#input').value.trim() || 'Review the local provider router for safer fallback behavior.';
103
+ const research = state.manifest.models.find(model => model.lane === 'research');
104
+ const builder = state.manifest.models.find(model => model.lane === 'build');
105
+ const verifier = state.manifest.models.find(model => model.lane === 'verify');
106
+ $('#review-button').disabled = true;
107
+ $('#review-button').textContent = 'RUNNING...';
108
+ $('#collab-log').innerHTML = '';
109
+ appendLog('COORDINATOR', `Task accepted with a four-turn maximum: ${task}`);
110
+ try {
111
+ if (research.status === 'pending') throw new Error('Research lane is not configured. Add a local endpoint or checkpoint first.');
112
+ const findings = await requestLocal(research, [{ role: 'system', content: research.system_prompt }, { role: 'user', content: task }]);
113
+ appendLog('RESEARCH', findings);
114
+ if (builder.status === 'pending') throw new Error('Coding lane is not configured. Install a coding checkpoint before applying patches.');
115
+ const patch = await requestLocal(builder, [{ role: 'system', content: builder.system_prompt }, { role: 'user', content: `Task: ${task}\nResearch findings:\n${findings}\nReturn a unified diff only.` }]);
116
+ appendLog('BUILD', patch, 'patch');
117
+ if (verifier.status === 'pending') throw new Error('Verifier lane is not configured.');
118
+ const verdict = await requestLocal(verifier, [{ role: 'system', content: verifier.system_prompt }, { role: 'user', content: `Task: ${task}\nProposed patch:\n${patch}\nReturn APPROVE, REJECT, or NEEDS-EVIDENCE with reasons.` }]);
119
+ appendLog('VERIFY', verdict, verdict.includes('APPROVE') ? 'approved' : 'warning');
120
+ appendLog('COORDINATOR', 'No files were changed. Review and approve the patch before applying it.');
121
+ } catch (error) {
122
+ appendLog('STOPPED', error.message, 'warning');
123
+ } finally {
124
+ $('#review-button').disabled = false;
125
+ $('#review-button').textContent = 'START BOUNDED REVIEW';
126
+ }
127
+ }
128
+
129
+ async function testRuntime() {
130
+ const model = state.selected || state.manifest.models.find(item => item.status !== 'pending');
131
+ if (!model) return appendLog('RUNTIME', 'No configured local model endpoint.', 'warning');
132
+ appendLog('RUNTIME', `Testing ${model.name} at ${model.endpoint}...`);
133
+ try {
134
+ const response = await fetch(`${model.endpoint}/models`);
135
+ appendLog('RUNTIME', response.ok ? 'Local runtime reachable. Model remains subject to capability checks.' : `Runtime returned HTTP ${response.status}.`, response.ok ? 'approved' : 'warning');
136
+ } catch (error) {
137
+ appendLog('RUNTIME', 'Offline shell is healthy, but no local HTTP runtime is reachable. This is expected until the adapter is started.', 'warning');
138
+ }
139
+ }
140
+
141
+ function sendChat() {
142
+ const input = $('#input');
143
+ const value = input.value.trim();
144
+ if (!value) return;
145
+ $('#chat').insertAdjacentHTML('beforeend', `<p><b>YOU</b><br>${esc(value)}</p><p class="assistant"><b>AIDE</b><br>Use START BOUNDED REVIEW to send this task through the research, build, and verify lanes. No files will change automatically.</p>`);
146
+ input.value = '';
147
+ }
148
+
149
+ async function boot() {
150
+ try {
151
+ const response = await fetch('models/manifest.json', { cache: 'no-store' });
152
+ state.manifest = await response.json();
153
+ } catch (error) {
154
+ state.manifest = { models: [] };
155
+ appendLog('BOOT', 'Could not load models/manifest.json.', 'warning');
156
+ }
157
+ renderModels();
158
+ const firstReady = state.manifest.models.find(model => model.status !== 'pending');
159
+ if (firstReady) selectModel(firstReady);
160
+ openFile('agent.ts');
161
+ document.querySelectorAll('[data-file]').forEach(button => button.onclick = () => openFile(button.dataset.file));
162
+ $('#review-button').onclick = runReview;
163
+ $('#connection-button').onclick = testRuntime;
164
+ $('#send-button').onclick = sendChat;
165
+ $('#input').onkeydown = event => { if (event.key === 'Enter') sendChat(); };
166
+ }
167
+
168
+ boot();
index.html ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="theme-color" content="#071018">
7
+ <title>AIDE | Sovereign Workbench</title>
8
+ <link rel="stylesheet" href="styles.css">
9
+ </head>
10
+ <body>
11
+ <header class="topbar">
12
+ <div class="brand">AIDE <span>SOVEREIGN WORKBENCH</span></div>
13
+ <div class="workspace"><b>LOCAL</b> / agent-kit / main</div>
14
+ <div class="network"><i></i> AIR-GAPPED</div>
15
+ <button class="icon-button" id="command-button" title="Command palette">CMD K</button>
16
+ </header>
17
+
18
+ <main class="shell">
19
+ <nav class="activity" aria-label="Activity">
20
+ <button class="activity-button active" title="Explorer">EXP</button>
21
+ <button class="activity-button" title="Search">SRCH</button>
22
+ <button class="activity-button" title="Source control">GIT</button>
23
+ <button class="activity-button" title="Run and debug">RUN</button>
24
+ <button class="activity-button" title="Model lanes">AI</button>
25
+ <span></span>
26
+ <button class="activity-button" title="Settings">CFG</button>
27
+ </nav>
28
+
29
+ <aside class="sidebar explorer">
30
+ <div class="section-heading">EXPLORER <button class="quiet-button">+</button></div>
31
+ <div class="tree-title">AGENT-KIT <span>main*</span></div>
32
+ <div class="tree">
33
+ <button data-file="agent.ts">TS <span>agent.ts</span><b>*</b></button>
34
+ <button data-file="router.ts">TS <span>router.ts</span></button>
35
+ <button data-file="models.ts">TS <span>models.ts</span></button>
36
+ <button data-file="types.ts">TS <span>types.ts</span></button>
37
+ <button data-file="README.md">MD <span>README.md</span></button>
38
+ </div>
39
+ <div class="section-heading divider">MODEL LANES <button class="quiet-button">+</button></div>
40
+ <div id="model-list" class="model-list"></div>
41
+ <div class="section-heading divider">PRIVACY</div>
42
+ <ul class="privacy-list">
43
+ <li>Network calls disabled</li>
44
+ <li>Prompts stay on device</li>
45
+ <li>Writes require approval</li>
46
+ <li>Model output is untrusted</li>
47
+ </ul>
48
+ </aside>
49
+
50
+ <section class="editor-column">
51
+ <div class="tabs"><button class="tab active">agent.ts <span>*</span></button><button class="tab">router.ts</button><button class="tab-add">+</button></div>
52
+ <div class="breadcrumbs">src <b>/</b> agent.ts <b>/</b> AgentRuntime</div>
53
+ <div class="editor" role="textbox" aria-label="Code editor">
54
+ <div id="line-numbers" class="line-numbers"></div>
55
+ <pre id="code" contenteditable="true" spellcheck="false"></pre>
56
+ </div>
57
+ <div class="bottom-panel">
58
+ <div class="panel-tabs"><b>TERMINAL</b><span>PROBLEMS <em>0</em></span><span>OUTPUT</span><span>COLLABORATION</span></div>
59
+ <div id="terminal" class="terminal"><p><b>~/agent-kit $</b> aide runtime status</p><p class="muted">network: disabled | writes: approval required | coordinator: bounded</p><p class="ok">ready: model registry loaded; coding lane awaiting local checkpoint</p><p><b>~/agent-kit $</b> <span class="cursor"></span></p></div>
60
+ </div>
61
+ <footer class="statusbar"><span>LOCAL ONLY</span><span>GIT main*</span><span>UTF-8</span><span>TypeScript</span><b>READY</b></footer>
62
+ </section>
63
+
64
+ <aside class="sidebar agent-panel">
65
+ <div class="eyebrow">MODEL ORCHESTRATOR</div>
66
+ <h1>Build privately.</h1>
67
+ <p class="subtle">Research, build, verify. Every lane is visible and bounded.</p>
68
+ <div class="runtime-card"><span id="selected-model">Select a lane</span><small id="selected-detail">No model request has been made.</small></div>
69
+ <div class="lane-grid" id="lane-grid"></div>
70
+ <div class="runtime-row"><span class="dot green"></span><span>Local adapter</span><b id="runtime-name">OpenAI-compatible HTTP</b></div>
71
+ <div id="collab-log" class="collab-log"><div class="empty-state">Cross-chat is idle.<br>Start a bounded review to create a research, build, and verify run.</div></div>
72
+ <div class="agent-actions"><button id="review-button" class="primary">START BOUNDED REVIEW</button><button id="connection-button" class="secondary">TEST LOCAL RUNTIME</button></div>
73
+ <div class="chat-row"><input id="input" placeholder="Ask the local lanes..." aria-label="Ask the local lanes"><button id="send-button">SEND</button></div>
74
+ <div id="chat" class="chat" aria-live="polite"></div>
75
+ </aside>
76
+ </main>
77
+ <script src="app.js"></script>
78
+ </body>
79
+ </html>
models/manifest.json ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": "1.0",
3
+ "project": "aide-sovereign-workbench",
4
+ "offline_default": true,
5
+ "models": [
6
+ {
7
+ "id": "lfm25-thinking-local",
8
+ "name": "Liquid AI LFM2.5 Thinking (local checkpoint)",
9
+ "lane": "research",
10
+ "status": "pending",
11
+ "roles": ["research", "verify"],
12
+ "format": "GGUF / safetensors",
13
+ "runtime": "OpenAI-compatible HTTP",
14
+ "endpoint": "http://127.0.0.1:8080/v1",
15
+ "model": "tinyliquid-research-v8",
16
+ "artifact_uri": "local://lfm25-thinking-checkpoint",
17
+ "source_revision": "not-confirmed-in-workspace",
18
+ "parameters": null,
19
+ "context_tokens": null,
20
+ "metrics": null,
21
+ "description": "Reasoning lane for architecture, requirements, tests, and verification. Import the local checkpoint before use.",
22
+ "system_prompt": "You are the research and evidence lane. Analyze the task, identify constraints and risks, cite only supplied workspace evidence, and return concise structured findings. Do not edit files."
23
+ },
24
+ {
25
+ "id": "coding-model-pending",
26
+ "name": "Qwen2.5-Coder 1.5B Instruct Q4_K_M",
27
+ "lane": "build",
28
+ "status": "pending",
29
+ "roles": ["build"],
30
+ "format": "GGUF / safetensors",
31
+ "runtime": "OpenAI-compatible HTTP",
32
+ "endpoint": "http://127.0.0.1:8081/v1",
33
+ "model": "coding-model-pending",
34
+ "artifact_uri": "hf://Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF@main/qwen2.5-coder-1.5b-instruct-q4_k_m.gguf",
35
+ "source_revision": "Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF",
36
+ "parameters": null,
37
+ "context_tokens": null,
38
+ "metrics": null,
39
+ "description": "Recommended small coding model. License: Apache-2.0; verify the downloaded revision and checksum.",
40
+ "system_prompt": "You are the build lane. Produce a minimal unified diff only. Never invent files or claim tests passed."
41
+ },
42
+ {
43
+ "id": "verifier-pending",
44
+ "name": "Liquid Thinking Verifier (checkpoint pending)",
45
+ "lane": "verify",
46
+ "status": "pending",
47
+ "roles": ["verify"],
48
+ "format": "role-routed",
49
+ "runtime": "OpenAI-compatible HTTP",
50
+ "endpoint": "http://127.0.0.1:8080/v1",
51
+ "model": "lfm25-thinking-local",
52
+ "artifact_uri": "local://lfm25-thinking-checkpoint",
53
+ "source_revision": "not-confirmed-in-workspace",
54
+ "parameters": null,
55
+ "context_tokens": null,
56
+ "metrics": null,
57
+ "description": "Use the Liquid thinking model for verification after its local path and runtime are confirmed.",
58
+ "system_prompt": "You are the verification lane. Inspect the proposed patch and return APPROVE, REJECT, or NEEDS-EVIDENCE with concrete reasons. Do not edit files."
59
+ }
60
+ ]
61
+ }
release/PACKAGING_PROFILES.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AIDE Packaging Recommendation
2
+
3
+ ## Core
4
+
5
+ Ship the IDE without model weights. Include the editor, project explorer, terminal, Git surfaces, task runner, diagnostics, patch review, model registry, offline controls, and adapter interfaces. This is the smallest download and avoids upstream model-license and hardware problems.
6
+
7
+ ## Liquid Thinking Pack
8
+
9
+ Do not ship the unfinished TinyLiquid training artifact. When the user's Liquid AI LFM2.5 Thinking checkpoint is confirmed and licensed for redistribution, offer it as a separate research/verifier pack. Use it for reasoning, requirements, architecture, test planning, and verification, not coding patch generation. Include a **Training Lab** panel that shows:
10
+
11
+ - training stages and dates
12
+ - parameter count and architecture
13
+ - device and runtime
14
+ - dataset categories, not private raw data
15
+ - evaluation probes and exact scores
16
+ - generation-speed measurements
17
+ - known failures and limitations
18
+ - what is experimental versus release-ready
19
+
20
+ This turns the project into an honest demonstration of how the owner's models are trained, evaluated, and integrated without presenting an unfinished checkpoint as a public demo.
21
+
22
+ ## Coding Local
23
+
24
+ Do not bundle a third-party coding model into the main installer. Offer an import/download card for a small model, with license, file size, quantization, context, memory estimate, and measured coding-probe results shown before installation.
25
+
26
+ Recommended starting order:
27
+
28
+ 1. Qwen2.5-Coder 1.5B Instruct Q4_K_M for the smallest useful coding pack.
29
+ 2. DeepSeek-Coder 1.3B Instruct as a benchmarked alternative.
30
+ 3. Qwen2.5-Coder 3B Instruct as an optional higher-quality pack.
31
+
32
+ The IDE should download or import only the user-selected pack, record its exact revision and SHA-256, and keep it replaceable. Never claim a model is "ready" because it loads; require patch, compile, test, and destructive-command refusal probes.
33
+
34
+ ## Research Lab
35
+
36
+ Use this profile to demonstrate the full project lifecycle: import a checkpoint, inspect its manifest, run local probes, compare quantizations, observe training history, route it through research/build/verify lanes, review a patch, and generate a release bundle. The lab should expose real metrics and failures instead of a simulated progress animation.
37
+
38
+ ## Why This Split
39
+
40
+ Users can install and use AIDE without downloading large weights. The TinyLiquid demo remains small and distinctive. Coding users can choose a model appropriate for their hardware. Future trained models become new model packs, not breaking application updates.
release/RELEASE_CHECKLIST.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AIDE Release Preflight
2
+
3
+ - [ ] Build and smoke-test the offline UI.
4
+ - [ ] Confirm `models/manifest.json` loads without network access.
5
+ - [ ] Confirm TinyLiquid artifact exists and matches its recorded SHA-256.
6
+ - [ ] Load TinyLiquid through the declared local adapter and record the response.
7
+ - [ ] Install a coding-tuned checkpoint and replace the pending builder manifest entry.
8
+ - [ ] Run coding probes and record real results in the coding model card.
9
+ - [ ] Verify patch preview, approval, undo, cancellation, and test gates.
10
+ - [ ] Verify no credentials, prompts, logs, or private source files are in the release folder.
11
+ - [ ] Confirm every model license and attribution.
12
+ - [ ] Generate a signed `package-manifest.json` release artifact.
13
+ - [ ] Publish only after owner approval.
release/model-card-coding-template.md ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - en
4
+ license: CONFIRM_UPSTREAM_LICENSE
5
+ pipeline_tag: text-generation
6
+ library_name: custom
7
+ tags:
8
+ - code
9
+ - software-engineering
10
+ - on-device
11
+ - gguf
12
+ ---
13
+
14
+ # AIDE Coding Model
15
+
16
+ This card is intentionally incomplete until the coding-tuned checkpoint is installed and evaluated. Do not publish it with placeholder claims.
17
+
18
+ ## Required Release Evidence
19
+
20
+ - Exact model ID, revision, tokenizer, chat template, quantization, and runtime
21
+ - Parameter count, context length, memory footprint, and measured generation speed
22
+ - Coding probes for patch correctness, compile/test success, instruction following, tool-call reliability, and refusal of destructive actions
23
+ - Comparison between native weights and quantized runtime output
24
+ - Upstream license and all required attribution
25
+ - Known limitations and supported languages
26
+
27
+ ## AIDE Role
28
+
29
+ The coding model is the builder lane. It may propose a unified diff, but AIDE applies no model output without path validation, diff preview, user approval, and test execution.
release/model-card-liquid-thinking-template.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - en
4
+ license: CONFIRM_UPSTREAM_LICENSE
5
+ pipeline_tag: text-generation
6
+ library_name: custom
7
+ tags:
8
+ - liquid
9
+ - reasoning
10
+ - on-device
11
+ - research
12
+ ---
13
+
14
+ # Liquid AI LFM2.5 Thinking Integration
15
+
16
+ This card is a release template. Complete it only after the owner's local LFM2.5 Thinking checkpoint has been identified, loaded, benchmarked, and checked for redistribution rights.
17
+
18
+ ## AIDE Role
19
+
20
+ The Liquid model is the research, planning, architecture, and verification lane. It supplies structured findings to the coding model. It does not directly write files or apply patches.
21
+
22
+ ## Required Before Publication
23
+
24
+ - Exact upstream model ID or local checkpoint revision
25
+ - License and redistribution permission
26
+ - Runtime and quantization
27
+ - Tokenizer and prompt template
28
+ - Parameter count, context, memory, and speed
29
+ - Reasoning, planning, verification, and refusal probe results
30
+ - SHA-256 checksum
31
+ - Known limitations and attribution
release/package-manifest.json ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": "1.0",
3
+ "product": "AIDE Sovereign Workbench",
4
+ "release_channel": "local-development",
5
+ "version": "0.1.0-preflight",
6
+ "offline_default": true,
7
+ "distribution_profiles": [
8
+ {
9
+ "id": "core",
10
+ "description": "IDE only: editor, Git, terminal, tasks, reviewable patches, and adapter settings. No model weights included.",
11
+ "recommended_for": "every user"
12
+ },
13
+ {
14
+ "id": "coding-local",
15
+ "description": "Core plus Qwen2.5-Coder 1.5B Instruct Q4_K_M, downloaded or imported after license and hardware checks.",
16
+ "recommended_for": "daily local software development"
17
+ },
18
+ {
19
+ "id": "research-lab",
20
+ "description": "Core plus model registry, cross-model coordinator, benchmark runner, training timeline, eval cards, and release tools.",
21
+ "recommended_for": "showing how the owner's models are trained, evaluated, and promoted"
22
+ }
23
+ ],
24
+ "recommended_coding_models": [
25
+ {
26
+ "name": "Qwen2.5-Coder 1.5B Instruct",
27
+ "reason": "Best first small coding pack for constrained hardware; use a compatible quantized format and verify its upstream license before redistribution.",
28
+ "packaging": "download-on-first-use"
29
+ },
30
+ {
31
+ "name": "DeepSeek-Coder 1.3B Instruct",
32
+ "reason": "Small alternative for code completion and simple patch generation; benchmark against Qwen rather than assuming it is stronger.",
33
+ "packaging": "download-on-first-use"
34
+ },
35
+ {
36
+ "name": "Qwen2.5-Coder 3B Instruct",
37
+ "reason": "Higher-quality optional pack when the device has enough memory; keep it out of the default download.",
38
+ "packaging": "optional-large-pack"
39
+ }
40
+ ],
41
+ "artifacts": [
42
+ {
43
+ "id": "qwen2.5-coder-1.5b-instruct-q4_k_m",
44
+ "kind": "model-slot",
45
+ "status": "pending",
46
+ "manifest": "../models/manifest.json",
47
+ "model_card": "model-card-coding-template.md",
48
+ "license": "Apache-2.0",
49
+ "sha256": null
50
+ },
51
+ {
52
+ "id": "lfm25-thinking",
53
+ "kind": "model-slot",
54
+ "status": "pending",
55
+ "manifest": "../models/manifest.json",
56
+ "model_card": "model-card-liquid-thinking-template.md",
57
+ "license": "CONFIRM_UPSTREAM_LICENSE_BEFORE_RELEASE",
58
+ "sha256": null
59
+ }
60
+ ],
61
+ "release_gates": [
62
+ "run the local UI smoke test",
63
+ "verify each model artifact loads in its declared runtime",
64
+ "record model revision, tokenizer, prompt template, quantization, and metrics",
65
+ "review model card and license for every artifact",
66
+ "generate checksums and sign the release manifest",
67
+ "publish only after explicit owner approval"
68
+ ]
69
+ }
runtime/README.md ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AIDE Local Runtime
2
+
3
+ AIDE uses local OpenAI-compatible adapters so model runtimes can be replaced without changing the IDE.
4
+
5
+ ## Recommended Pair
6
+
7
+ - **Qwen2.5-Coder 1.5B Instruct Q4_K_M:** builder lane for code completion and reviewable unified diffs.
8
+ - **Liquid AI LFM2.5 Thinking:** research, planning, architecture, test design, and verification lane.
9
+
10
+ Run both sequentially on constrained hardware. Do not load two large copies unless memory measurements prove it is safe.
11
+
12
+ ## Qwen Coding Runtime
13
+
14
+ The official Qwen GGUF repository is Apache-2.0 and provides a Q4_K_M file of approximately 1.12 GB. Use a local llama.cpp-compatible server and bind it to loopback:
15
+
16
+ ```bash
17
+ llama-server -hf Qwen/Qwen2.5-Coder-1.5B-Instruct-GGUF:Q4_K_M \
18
+ --host 127.0.0.1 --port 8081 --ctx-size 32768
19
+ ```
20
+
21
+ For a fully offline run, download the exact GGUF first, verify its SHA-256, then replace `-hf ...` with the local file path.
22
+
23
+ ## Liquid Thinking Runtime
24
+
25
+ The workspace does not currently contain an identifiable `LFM2.5` artifact, so the Liquid entry in `models/manifest.json` is pending. Once its local file or endpoint is located, expose it at `127.0.0.1:8080/v1` and record the exact revision, tokenizer, prompt template, runtime, quantization, license, and checksum.
26
+
27
+ Do not substitute the unfinished TinyLiquid training artifact for LFM2.5. It is not part of the production package.
28
+
29
+ ## AIDE UI
30
+
31
+ Serve the AIDE root over a local static server so browser `fetch()` can load the manifest:
32
+
33
+ ```bash
34
+ python -m http.server 4173 --bind 127.0.0.1 --directory /root
35
+ ```
36
+
37
+ Open `http://127.0.0.1:4173/`. **TEST LOCAL RUNTIME** checks the selected adapter. **START BOUNDED REVIEW** runs Liquid research, Qwen build, and Liquid verification sequentially. It never applies a patch automatically.
styles.css ADDED
@@ -0,0 +1 @@
 
 
1
+ :root{--bg:#071018;--panel:#0c1720;--panel2:#101d29;--line:#203342;--text:#e4f2ef;--muted:#718994;--green:#72ff9e;--pink:#ff5fcf;--purple:#b277ff;--blue:#58c7ff;--amber:#ffc76b;--danger:#ff6d82;--mono:ui-monospace,SFMono-Regular,Consolas,monospace;--sans:Inter,ui-sans-serif,system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 76% -10%,#241542 0,#071018 43%);color:var(--text);font:12px var(--sans);overflow:hidden}.topbar{height:54px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:18px;padding:0 18px}.brand{color:var(--green);font:bold 15px var(--mono);letter-spacing:.16em;text-shadow:0 0 13px #42ff9866}.brand span{color:var(--muted);font-size:9px;letter-spacing:.12em;margin-left:12px}.workspace{flex:1;color:#b8c9cf;font:11px var(--mono)}.workspace b{color:var(--green);font-weight:400}.network{border:1px solid #286141;border-radius:4px;color:var(--green);padding:6px 8px;font:9px var(--mono);letter-spacing:.1em}.network i,.dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 9px var(--green);margin-right:5px}.icon-button,.quiet-button,.activity-button,.tab,.tab-add,.tree button,.model-item,.lane{border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.icon-button{color:var(--muted);font:10px var(--mono);letter-spacing:.1em}.shell{height:calc(100vh - 54px);display:grid;grid-template-columns:54px 245px minmax(480px,1fr) 360px}.activity{border-right:1px solid var(--line);display:flex;align-items:center;flex-direction:column;gap:12px;padding-top:14px}.activity span{flex:1}.activity-button{width:38px;padding:8px 0;color:#5e7480;font:9px var(--mono);letter-spacing:.06em}.activity-button.active,.activity-button:hover{color:var(--green);text-shadow:0 0 10px #72ff9e88}.sidebar{background:#0b151e;overflow:auto;padding:17px 15px}.explorer{border-right:1px solid var(--line)}.agent-panel{border-left:1px solid var(--line)}.section-heading,.eyebrow{color:var(--muted);font:10px var(--mono);letter-spacing:.12em}.quiet-button{float:right;color:var(--blue);font-size:16px;line-height:8px}.tree-title{margin:18px 0 7px;color:#d0dde0;font:11px var(--mono)}.tree-title span{float:right;color:var(--pink);font-size:9px}.tree button{width:100%;display:grid;grid-template-columns:27px 1fr 15px;text-align:left;padding:7px 6px;color:var(--muted);font:11px var(--mono)}.tree button span{color:#c5d1d5}.tree button b{color:var(--pink)}.tree button:hover,.tree button.active{background:#162532;color:var(--blue);border-left:2px solid var(--pink)}.divider{border-top:1px solid var(--line);margin:21px -15px 12px;padding:15px 15px 0}.model-list{display:grid;gap:5px}.model-item{display:grid;grid-template-columns:12px 1fr;text-align:left;gap:3px 5px;padding:8px 5px;color:#c3d4d5}.model-item:hover{background:#162532}.model-item small{grid-column:2;color:var(--muted);font:9px var(--mono)}.status{width:7px;height:7px;border-radius:50%;margin-top:4px;background:var(--amber)}.status.ready{background:var(--green);box-shadow:0 0 8px var(--green)}.status.pending{background:var(--muted)}.privacy-list{list-style:none;margin:0;padding:0;color:#8ec7a8;font:10px/2 var(--mono)}.privacy-list li:before{content:'+';color:var(--green);margin-right:7px}.editor-column{display:flex;flex-direction:column;min-width:0}.tabs{height:42px;background:#0e1a24;border-bottom:1px solid var(--line);display:flex;align-items:center}.tab{height:42px;padding:0 18px;color:var(--muted);border-right:1px solid var(--line);font:11px var(--mono)}.tab.active{color:#effffc;border-top:2px solid var(--pink);background:#12222e}.tab span{color:var(--pink)}.tab-add{color:var(--blue);font-size:18px;padding:0 13px}.breadcrumbs{height:34px;border-bottom:1px solid var(--line);padding:10px 18px;color:var(--muted);font:10px var(--mono)}.breadcrumbs b{color:var(--purple);margin:0 7px}.editor{display:grid;grid-template-columns:48px 1fr;flex:1;min-height:180px;overflow:auto;background:#08131b;padding-top:17px}.line-numbers{color:#405864;text-align:right;white-space:pre;font:12px/1.8 var(--mono);padding-right:13px;user-select:none}.editor pre{margin:0;outline:0;white-space:pre-wrap;tab-size:2;color:#c7e3dc;font:12px/1.8 var(--mono);padding:0 20px}.editor pre:focus{box-shadow:inset 0 0 0 1px #58c7ff33}.bottom-panel{height:178px;border-top:1px solid var(--line);background:#0a151e}.panel-tabs{height:35px;display:flex;gap:22px;align-items:center;padding:0 17px;border-bottom:1px solid var(--line);color:var(--muted);font:10px var(--mono)}.panel-tabs b{color:var(--pink)}.panel-tabs em{font-style:normal;background:#273746;color:var(--green);padding:2px 5px;border-radius:3px}.terminal{padding:11px 18px;color:#a7c5c1;font:11px/1.5 var(--mono)}.terminal p{margin:4px 0}.terminal b{color:var(--blue)}.muted{color:var(--muted)}.ok{color:var(--green)}.cursor{display:inline-block;width:7px;height:13px;background:var(--green);vertical-align:-2px;animation:blink 1s steps(2) infinite}@keyframes blink{50%{opacity:0}}.statusbar{height:27px;background:#10232d;border-top:1px solid var(--line);display:flex;gap:20px;align-items:center;padding:0 16px;color:#94b0b4;font:9px var(--mono)}.statusbar b{margin-left:auto;color:var(--green)}.eyebrow{color:var(--pink)}.agent-panel h1{font:25px var(--sans);font-weight:500;margin:14px 0 3px}.subtle{color:var(--muted);line-height:1.5;margin:0 0 15px}.runtime-card{border:1px solid #2b4554;background:#101f2b;padding:11px 12px;margin-bottom:12px}.runtime-card span{display:block;color:var(--green);font:11px var(--mono)}.runtime-card small{display:block;color:var(--muted);font:9px/1.5 var(--mono);margin-top:5px}.lane-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px}.lane{min-width:0;text-align:left;border:1px solid var(--line);padding:8px 6px;background:#0d1a24}.lane:hover{border-color:var(--blue)}.lane b,.lane span,.lane small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lane b{color:var(--purple);font:9px var(--mono)}.lane span{color:#d1e0df;margin-top:5px;font-size:10px}.lane small{color:var(--muted);font:8px var(--mono);margin-top:4px}.lane.experimental{border-color:#60417e}.lane.pending{opacity:.6}.runtime-row{display:flex;align-items:center;color:var(--muted);font:10px var(--mono);padding:14px 0 9px}.runtime-row b{margin-left:auto;color:var(--blue);font-weight:400;font-size:9px}.collab-log{height:235px;overflow:auto;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 0}.empty-state{color:#718994;text-align:center;font:10px/1.7 var(--mono);padding:50px 15px}.log-entry{border-left:2px solid var(--blue);padding:5px 8px;margin:0 0 8px;background:#0d1b25}.log-entry b{color:var(--blue);font:9px var(--mono)}.log-entry p{color:#b9cfcd;font:10px/1.5 var(--mono);white-space:pre-wrap;word-break:break-word;margin:5px 0 0}.log-entry.patch{border-left-color:var(--purple)}.log-entry.approved{border-left-color:var(--green)}.log-entry.warning{border-left-color:var(--amber)}.agent-actions{display:flex;gap:7px;margin-top:12px}.agent-actions button{flex:1;padding:9px 5px;border-radius:3px;font:9px var(--mono);letter-spacing:.04em;cursor:pointer}.primary{border:1px solid var(--green);background:#153a2c;color:var(--green)}.secondary{border:1px solid var(--line);background:#10202a;color:var(--blue)}button:disabled{opacity:.5;cursor:wait}.chat-row{display:flex;gap:5px;margin-top:10px}.chat-row input{min-width:0;flex:1;background:#09151d;border:1px solid var(--line);color:var(--text);padding:8px;font:10px var(--mono);outline:0}.chat-row input:focus{border-color:var(--blue)}.chat-row button{border:1px solid var(--pink);background:#351b39;color:#ffb3e7;padding:0 9px;font:9px var(--mono)}.chat{color:#b7cbc9;font:10px/1.5 var(--mono);max-height:100px;overflow:auto}.chat p{border-bottom:1px solid #1b2d38;padding-bottom:7px}.chat b{color:var(--pink)}@media(max-width:1000px){.shell{grid-template-columns:48px 205px minmax(360px,1fr)}.agent-panel{position:fixed;right:0;top:54px;bottom:0;width:330px;transform:translateX(100%);transition:transform .2s;border-left:1px solid var(--line)}body:has(.agent-panel:hover) .agent-panel{transform:translateX(0)}}@media(max-width:700px){.topbar{gap:8px;padding:0 10px}.brand span,.workspace{display:none}.shell{grid-template-columns:42px 1fr}.explorer{display:none}.editor{grid-template-columns:37px 1fr}.bottom-panel{height:145px}.agent-panel{width:min(330px,100vw)}.statusbar{gap:8px}.statusbar span:nth-child(3),.statusbar span:nth-child(4){display:none}}