Ferrell Synthetic Intelligence commited on
Commit ·
85c6b01
1
Parent(s): 9e03908
Add reproducible offline workspace capsules
Browse files- .github/dependabot.yml +11 -0
- README.md +2 -0
- SECURITY.md +1 -0
- capsules/README.md +5 -0
- capsules/create.mjs +18 -0
- capsules/manifest.schema.json +19 -0
- capsules/test-create.mjs +14 -0
- package.json +2 -1
.github/dependabot.yml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version: 2
|
| 2 |
+
updates:
|
| 3 |
+
- package-ecosystem: npm
|
| 4 |
+
directory: "/"
|
| 5 |
+
schedule:
|
| 6 |
+
interval: weekly
|
| 7 |
+
- package-ecosystem: cargo
|
| 8 |
+
directory: "/desktop"
|
| 9 |
+
schedule:
|
| 10 |
+
interval: weekly
|
| 11 |
+
open-pull-requests-limit: 5
|
README.md
CHANGED
|
@@ -61,6 +61,8 @@ The daemon also owns an allowlisted DAP registry. Python debugging is provided t
|
|
| 61 |
|
| 62 |
The Training Room is defined in `training/manifest.json` and `training/README.md`; it is an approval-gated, resume-safe control room for data, tokenizer, training, evaluation, and release jobs. `benchmarks/` contains the first common smoke suite for all three public model packs. `desktop/tauri.conf.json` is the reproducible desktop-shell configuration; native compilation remains a platform gate until Rust/Tauri is installed.
|
| 63 |
|
|
|
|
|
|
|
| 64 |
## Status
|
| 65 |
|
| 66 |
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.
|
|
|
|
| 61 |
|
| 62 |
The Training Room is defined in `training/manifest.json` and `training/README.md`; it is an approval-gated, resume-safe control room for data, tokenizer, training, evaluation, and release jobs. `benchmarks/` contains the first common smoke suite for all three public model packs. `desktop/tauri.conf.json` is the reproducible desktop-shell configuration; native compilation remains a platform gate until Rust/Tauri is installed.
|
| 63 |
|
| 64 |
+
`capsules/` adds reproducible offline workspace capsules: portable metadata for the exact model, runtime, Git revision, evidence hashes, tools, and Veritas result without exporting private source by default.
|
| 65 |
+
|
| 66 |
## Status
|
| 67 |
|
| 68 |
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.
|
SECURITY.md
CHANGED
|
@@ -15,3 +15,4 @@ Never include access tokens, private keys, credentials, private source, unredact
|
|
| 15 |
- Keep private community data local unless the user explicitly changes its boundary.
|
| 16 |
- Treat model output, plugins, dependencies, and imported artifacts as untrusted.
|
| 17 |
- Require diff review and user approval before writes or publication.
|
|
|
|
|
|
| 15 |
- Keep private community data local unless the user explicitly changes its boundary.
|
| 16 |
- Treat model output, plugins, dependencies, and imported artifacts as untrusted.
|
| 17 |
- Require diff review and user approval before writes or publication.
|
| 18 |
+
- Treat capsules as metadata by default; source/evidence export must be explicit and encrypted.
|
capsules/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Reproducible Offline Capsules
|
| 2 |
+
|
| 3 |
+
A capsule records the exact environment needed to understand or replay a task: workspace label and Git revision, model revision and runtime, tool list, evidence hashes, and Veritas results. It does not include source or evidence bytes unless the user explicitly chooses an encrypted export.
|
| 4 |
+
|
| 5 |
+
This gives AIDE a capability cloud IDEs rarely make local and portable: a journalist or developer can share a verifiable task recipe without surrendering private documents.
|
capsules/create.mjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { promises as fs } from 'node:fs';
|
| 2 |
+
import crypto from 'node:crypto';
|
| 3 |
+
|
| 4 |
+
const output = process.argv[2] || 'aide-capsule.json';
|
| 5 |
+
const capsule = {
|
| 6 |
+
schema_version: '1.0',
|
| 7 |
+
capsule_id: `aide-${crypto.randomUUID()}`,
|
| 8 |
+
created_at: new Date().toISOString(),
|
| 9 |
+
privacy: 'metadata-only',
|
| 10 |
+
workspace: { root_label: process.env.AIDE_WORKSPACE_LABEL || 'local-workspace', git_revision: process.env.AIDE_GIT_REVISION || 'not-recorded' },
|
| 11 |
+
model: { id: process.env.AIDE_MODEL_ID || 'not-recorded', revision: process.env.AIDE_MODEL_REVISION || 'not-recorded', runtime: process.env.AIDE_MODEL_RUNTIME || 'not-recorded', quantization: process.env.AIDE_MODEL_QUANTIZATION || 'not-recorded' },
|
| 12 |
+
evidence: [],
|
| 13 |
+
verification: { checks: {}, status: 'unverified' },
|
| 14 |
+
tools: [],
|
| 15 |
+
notes: 'Metadata only. Source and evidence bytes are not included.'
|
| 16 |
+
};
|
| 17 |
+
await fs.writeFile(output, `${JSON.stringify(capsule, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
|
| 18 |
+
console.log(`created ${output}`);
|
capsules/manifest.schema.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
| 3 |
+
"title": "AIDE Reproducible Offline Capsule",
|
| 4 |
+
"type": "object",
|
| 5 |
+
"required": ["schema_version", "capsule_id", "privacy", "workspace", "model", "verification"],
|
| 6 |
+
"properties": {
|
| 7 |
+
"schema_version": {"const": "1.0"},
|
| 8 |
+
"capsule_id": {"type": "string"},
|
| 9 |
+
"created_at": {"type": "string", "format": "date-time"},
|
| 10 |
+
"privacy": {"enum": ["metadata-only", "encrypted-evidence", "explicit-source-export"]},
|
| 11 |
+
"workspace": {"type": "object", "required": ["root_label", "git_revision"], "properties": {"root_label": {"type": "string"}, "git_revision": {"type": "string"}}},
|
| 12 |
+
"model": {"type": "object", "required": ["id", "revision", "runtime"], "properties": {"id": {"type": "string"}, "revision": {"type": "string"}, "runtime": {"type": "string"}, "quantization": {"type": "string"}}},
|
| 13 |
+
"evidence": {"type": "array", "items": {"type": "object", "required": ["label", "sha256"], "properties": {"label": {"type": "string"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}}},
|
| 14 |
+
"verification": {"type": "object", "required": ["checks", "status"], "properties": {"checks": {"type": "object"}, "status": {"enum": ["verified", "blocked", "unverified"]}}},
|
| 15 |
+
"tools": {"type": "array", "items": {"type": "string"}},
|
| 16 |
+
"notes": {"type": "string"}
|
| 17 |
+
},
|
| 18 |
+
"additionalProperties": false
|
| 19 |
+
}
|
capsules/test-create.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import assert from 'node:assert/strict';
|
| 2 |
+
import { mkdtemp, readFile } from 'node:fs/promises';
|
| 3 |
+
import { tmpdir } from 'node:os';
|
| 4 |
+
import path from 'node:path';
|
| 5 |
+
import { execFile } from 'node:child_process';
|
| 6 |
+
import { promisify } from 'node:util';
|
| 7 |
+
const run = promisify(execFile);
|
| 8 |
+
const root = await mkdtemp(path.join(tmpdir(), 'aide-capsule-'));
|
| 9 |
+
const output = path.join(root, 'capsule.json');
|
| 10 |
+
await run(process.execPath, ['capsules/create.mjs', output], { cwd: process.cwd(), env: { ...process.env, AIDE_MODEL_ID: 'test-model' } });
|
| 11 |
+
const capsule = JSON.parse(await readFile(output, 'utf8'));
|
| 12 |
+
assert.equal(capsule.privacy, 'metadata-only');
|
| 13 |
+
assert.equal(capsule.model.id, 'test-model');
|
| 14 |
+
console.log('capsule test passed');
|
package.json
CHANGED
|
@@ -5,10 +5,11 @@
|
|
| 5 |
"description": "Local-first sovereign development workbench",
|
| 6 |
"type": "module",
|
| 7 |
"scripts": {
|
| 8 |
-
"test": "node tests/smoke.mjs && node harness/test-orchestrator.mjs && node daemon/test-model-manager.mjs && node daemon/test-community-store.mjs && node daemon/test-lsp-manager.mjs && node daemon/test-dap-manager.mjs && node daemon/test-workspace-manager.mjs && node benchmarks/test-run.mjs",
|
| 9 |
"check": "node --check app.js && node --check daemon/server.mjs && node --check harness/orchestrator.mjs && node --check harness/checks.mjs",
|
| 10 |
"veritas": "node harness/run-veritas.mjs",
|
| 11 |
"benchmarks": "node benchmarks/run.mjs",
|
|
|
|
| 12 |
"desktop:dev": "tauri dev --config desktop/tauri.conf.json",
|
| 13 |
"desktop:prepare": "node desktop/prepare.mjs",
|
| 14 |
"desktop:build": "npm run desktop:prepare && tauri build --config desktop/tauri.conf.json"
|
|
|
|
| 5 |
"description": "Local-first sovereign development workbench",
|
| 6 |
"type": "module",
|
| 7 |
"scripts": {
|
| 8 |
+
"test": "node tests/smoke.mjs && node harness/test-orchestrator.mjs && node daemon/test-model-manager.mjs && node daemon/test-community-store.mjs && node daemon/test-lsp-manager.mjs && node daemon/test-dap-manager.mjs && node daemon/test-workspace-manager.mjs && node benchmarks/test-run.mjs && node capsules/test-create.mjs",
|
| 9 |
"check": "node --check app.js && node --check daemon/server.mjs && node --check harness/orchestrator.mjs && node --check harness/checks.mjs",
|
| 10 |
"veritas": "node harness/run-veritas.mjs",
|
| 11 |
"benchmarks": "node benchmarks/run.mjs",
|
| 12 |
+
"capsule": "node capsules/create.mjs",
|
| 13 |
"desktop:dev": "tauri dev --config desktop/tauri.conf.json",
|
| 14 |
"desktop:prepare": "node desktop/prepare.mjs",
|
| 15 |
"desktop:build": "npm run desktop:prepare && tauri build --config desktop/tauri.conf.json"
|