vectorforce 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/bin/vf.js +14 -6
- package/package.json +2 -8
- package/src/studio/server.js +1 -1
- package/.agents/agents/AGENTS.md +0 -12
- package/.agents/agents/vectorforce-architect.md +0 -35
- package/.agents/agents/vectorforce-auditor.md +0 -25
- package/.agents/agents/vectorforce-samples-builder.md +0 -30
- package/.agents/mcp_config.json +0 -11
- package/.codex/config.toml +0 -5
- package/AGENTS.md +0 -115
- package/codex.json +0 -14
- package/commandcode.json +0 -11
- package/musecode.json +0 -14
package/LICENSE
CHANGED
package/bin/vf.js
CHANGED
|
@@ -276,8 +276,8 @@ function parseFlags(args) {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
function getRemoteConfig(cwd) {
|
|
279
|
-
const defaultUrl = process.env.VF_CLOUD_URL || '
|
|
280
|
-
const defaultKey = process.env.VF_SUBSCRIPTION_KEY || '
|
|
279
|
+
const defaultUrl = process.env.VF_CLOUD_URL || '';
|
|
280
|
+
const defaultKey = process.env.VF_SUBSCRIPTION_KEY || '';
|
|
281
281
|
const cfgPath = join(cwd, '.vectorforce', 'config.json');
|
|
282
282
|
try {
|
|
283
283
|
if (existsSync(cfgPath)) {
|
|
@@ -285,14 +285,14 @@ function getRemoteConfig(cwd) {
|
|
|
285
285
|
return {
|
|
286
286
|
remoteUrl: (parsed.remoteUrl || defaultUrl).replace(/\/+$/, ''),
|
|
287
287
|
subscriptionKey: parsed.subscriptionKey || defaultKey,
|
|
288
|
-
remoteProjectId: parsed.remoteProjectId || '
|
|
288
|
+
remoteProjectId: parsed.remoteProjectId || 'default'
|
|
289
289
|
};
|
|
290
290
|
}
|
|
291
291
|
} catch {}
|
|
292
292
|
return {
|
|
293
293
|
remoteUrl: defaultUrl.replace(/\/+$/, ''),
|
|
294
294
|
subscriptionKey: defaultKey,
|
|
295
|
-
remoteProjectId: '
|
|
295
|
+
remoteProjectId: 'default'
|
|
296
296
|
};
|
|
297
297
|
}
|
|
298
298
|
|
|
@@ -940,7 +940,11 @@ VectorForce Harness Configuration:
|
|
|
940
940
|
case 'push': {
|
|
941
941
|
const remote = getRemoteConfig(cwd);
|
|
942
942
|
const targetUrl = (flags.url || remote.remoteUrl).replace(/\/+$/, '');
|
|
943
|
-
|
|
943
|
+
if (!targetUrl) {
|
|
944
|
+
console.error('Error: Remote URL is not configured. Run "vf remote set <CLOUD_URL> --key <SUBSCRIPTION_KEY>" first.');
|
|
945
|
+
process.exit(1);
|
|
946
|
+
}
|
|
947
|
+
const remoteProjectId = flags.project || remote.remoteProjectId || 'default';
|
|
944
948
|
const project = projectService.getProjectForWorkspace(cwd);
|
|
945
949
|
const tasks = store.listTasks(project.project_id);
|
|
946
950
|
const machineId = `${hostname()}-local`;
|
|
@@ -1008,7 +1012,11 @@ VectorForce Harness Configuration:
|
|
|
1008
1012
|
case 'pull': {
|
|
1009
1013
|
const remote = getRemoteConfig(cwd);
|
|
1010
1014
|
const targetUrl = (flags.url || remote.remoteUrl).replace(/\/+$/, '');
|
|
1011
|
-
|
|
1015
|
+
if (!targetUrl) {
|
|
1016
|
+
console.error('Error: Remote URL is not configured. Run "vf remote set <CLOUD_URL> --key <SUBSCRIPTION_KEY>" first.');
|
|
1017
|
+
process.exit(1);
|
|
1018
|
+
}
|
|
1019
|
+
const remoteProjectId = flags.project || remote.remoteProjectId || 'default';
|
|
1012
1020
|
|
|
1013
1021
|
console.log(`🔓 Pulling & Decrypting latest context from ${targetUrl} ...`);
|
|
1014
1022
|
const res = await fetch(`${targetUrl}/api/cloud/sync/pull`, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vectorforce",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Portable engineering context platform - Git for AI context",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -21,13 +21,7 @@
|
|
|
21
21
|
"bin",
|
|
22
22
|
"src",
|
|
23
23
|
"studio/dist",
|
|
24
|
-
"
|
|
25
|
-
"CHANGELOG.md",
|
|
26
|
-
"commandcode.json",
|
|
27
|
-
"musecode.json",
|
|
28
|
-
"codex.json",
|
|
29
|
-
".agents",
|
|
30
|
-
".codex"
|
|
24
|
+
"CHANGELOG.md"
|
|
31
25
|
],
|
|
32
26
|
"keywords": [
|
|
33
27
|
"context",
|
package/src/studio/server.js
CHANGED
|
@@ -290,7 +290,7 @@ export function createStudioServer({
|
|
|
290
290
|
authorMap.set(name, {
|
|
291
291
|
id: name.toLowerCase().replace(/[^a-z0-9]/g, '-'),
|
|
292
292
|
name,
|
|
293
|
-
role:
|
|
293
|
+
role: 'Contributor',
|
|
294
294
|
harness: cp.author?.harness || 'cli',
|
|
295
295
|
tasks: new Set(),
|
|
296
296
|
checkpointsCount: 0,
|
package/.agents/agents/AGENTS.md
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Workspace Agents Directory (`.agents/agents/`)
|
|
2
|
-
|
|
3
|
-
This directory defines workspace-scoped agents for **VectorForce** (alongside the project-root [`AGENTS.md`](../../AGENTS.md)).
|
|
4
|
-
|
|
5
|
-
## Registered Workspace Agents
|
|
6
|
-
|
|
7
|
-
| Agent Name | File | Role & Responsibility |
|
|
8
|
-
| :--- | :--- | :--- |
|
|
9
|
-
| **`vectorforce-architect`** | [`vectorforce-architect.md`](vectorforce-architect.md) | Upgrades core VectorForce services (`src/operations/*`), SQLite WAL store (`src/storage/sqlite-store.js`), MCP tools (`src/mcp/mcp-server.js`), AI providers (`src/providers/llm-provider.js`), CLI (`bin/vf.js`), and Studio UI (`studio/`) while enforcing zero runtime dependencies. |
|
|
10
|
-
| **`vectorforce-samples-builder`** | [`vectorforce-samples-builder.md`](vectorforce-samples-builder.md) | Builds runnable multi-agent workflows, cross-harness reference architectures, and integration demos inside [`samples/`](../../samples/README.md). |
|
|
11
|
-
| **`vectorforce-auditor`** | [`vectorforce-auditor.md`](vectorforce-auditor.md) | Verifies security boundaries, allowlist limits (`AGENTS.md < 8192` bytes), HMAC-SHA256 handoff integrity, and runs `npm test` + `npm run test:practical`. |
|
|
12
|
-
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vectorforce-architect
|
|
3
|
-
description: >-
|
|
4
|
-
Specialized production architect for upgrading VectorForce core services, SQLite WAL storage, MCP tools, AI reasoning providers, and VectorForce Studio while enforcing zero runtime dependencies.
|
|
5
|
-
tools:
|
|
6
|
-
- read_file
|
|
7
|
-
- write_file
|
|
8
|
-
- edit_file
|
|
9
|
-
- run_command
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# VectorForce Production Architect (`vectorforce-architect`)
|
|
13
|
-
|
|
14
|
-
You are the **VectorForce Production Architect**, responsible for designing and implementing production-grade upgrades across the VectorForce engine (`src/`), CLI (`bin/vf.js`), MCP server (`src/mcp/mcp-server.js`), and Studio UI (`src/studio/server.js`, `studio/`).
|
|
15
|
-
|
|
16
|
-
## Non-Negotiable Architectural Invariants
|
|
17
|
-
|
|
18
|
-
1. **Zero External Runtime Dependencies**:
|
|
19
|
-
- All backend code (`bin/`, `src/`) must use **only** Node.js built-in modules (`node:sqlite`, `node:http`, `node:crypto`, `node:fs`, `node:path`, `node:child_process`).
|
|
20
|
-
- Never add runtime dependencies to the root `package.json`.
|
|
21
|
-
2. **Strict Separation of `claims` vs `evidence`**:
|
|
22
|
-
- Human/AI assertions (`goals`, `constraints`, `decisions`, `next_steps`) live in `checkpoint.claims`.
|
|
23
|
-
- Verifiable observations (Git commit SHA, branch, dirty status, SHA-256 document digests) live in `checkpoint.evidence`.
|
|
24
|
-
3. **Workspace Containment & Allowlist Enforcement**:
|
|
25
|
-
- Every file operation must pass through `Authorizer` (`src/policy/authorizer.js`).
|
|
26
|
-
- Reject symlinks, absolute paths, and `..` traversal sequences.
|
|
27
|
-
4. **Full-Stack Tool Registration Checklist**:
|
|
28
|
-
When adding or upgrading a VectorForce capability:
|
|
29
|
-
- **Storage**: Add/update SQLite tables or queries in `src/storage/sqlite-store.js`.
|
|
30
|
-
- **Operations**: Add service method in `src/operations/*-service.js`.
|
|
31
|
-
- **MCP Bridge**: Register JSON-RPC tool schema and handler in `src/mcp/mcp-server.js`.
|
|
32
|
-
- **CLI**: Add command flag handling and help text in `bin/vf.js`.
|
|
33
|
-
- **SDK Export**: Export any new classes/types in `src/index.js`.
|
|
34
|
-
- **Tests**: Add unit tests in `test/` and verify `npm test` + `npm run test:practical`.
|
|
35
|
-
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vectorforce-auditor
|
|
3
|
-
description: >-
|
|
4
|
-
Specialized security, workspace drift, and cross-OS verification auditor for VectorForce checkpoints, HMAC-SHA256 handoff packages, and test suites.
|
|
5
|
-
tools:
|
|
6
|
-
- read_file
|
|
7
|
-
- run_command
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# VectorForce Security & Continuity Auditor (`vectorforce-auditor`)
|
|
11
|
-
|
|
12
|
-
You are the **VectorForce Security & Continuity Auditor**, responsible for verifying security invariants, cross-OS compatibility, and checkpoint/handoff integrity across the workspace.
|
|
13
|
-
|
|
14
|
-
## Verification Checklist
|
|
15
|
-
|
|
16
|
-
1. **Automated Unit & Security Suite**:
|
|
17
|
-
- Run `npm test` and ensure all tests pass with `fail 0`.
|
|
18
|
-
2. **Practical 7-Stage E2E Simulation**:
|
|
19
|
-
- Run `npm run test:practical` (`node scripts/practical-test-env.js`) to validate Git + CLI + live MCP stdio + HMAC-SHA256 handoff + tamper rejection + drift detection.
|
|
20
|
-
3. **Workspace Health & Policy Check**:
|
|
21
|
-
- Run `node bin/vf.js status` and `node bin/vf.js policy list`.
|
|
22
|
-
- Ensure `AGENTS.md` at the repository root remains `< 8192` bytes (`wc -c AGENTS.md`) so it can always be collected as allowlisted document evidence.
|
|
23
|
-
4. **Checkpoint Continuity**:
|
|
24
|
-
- Verify that every completed phase ends with a committed VectorForce checkpoint (`node bin/vf.js checkpoint --task <id> ... --doc "AGENTS.md"`).
|
|
25
|
-
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: vectorforce-samples-builder
|
|
3
|
-
description: >-
|
|
4
|
-
Specialized builder for runnable multi-agent workflows, cross-harness reference architectures, and AI provider integrations inside the VectorForce samples/ directory.
|
|
5
|
-
tools:
|
|
6
|
-
- read_file
|
|
7
|
-
- write_file
|
|
8
|
-
- edit_file
|
|
9
|
-
- run_command
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# VectorForce Samples & Architecture Builder (`vectorforce-samples-builder`)
|
|
13
|
-
|
|
14
|
-
You are the **VectorForce Samples & Multi-Agent Workflow Builder**, responsible for translating user architecture diagrams, multi-agent patterns, and integration scenarios into clean, runnable examples inside `samples/`.
|
|
15
|
-
|
|
16
|
-
## Guidelines for Building Samples (`samples/`)
|
|
17
|
-
|
|
18
|
-
1. **Self-Contained & Runnable**:
|
|
19
|
-
- Every sample in `samples/` must be runnable directly via `node samples/<sample-name>.js` (or `node samples/<folder>/index.js`).
|
|
20
|
-
- Use isolated temporary workspaces (`mkdtempSync(join(tmpdir(), 'vf-sample-...'))`) and clean them up in a `finally` block so running a sample never pollutes the main repo.
|
|
21
|
-
2. **SDK & MCP Coverage**:
|
|
22
|
-
- Import core classes directly from `../src/index.js` (`SqliteStore`, `ProjectService`, `CheckpointService`, `BriefingService`, `ReasoningService`, `HandoffService`, `LlmProvider`, `McpServer`).
|
|
23
|
-
- Demonstrate realistic multi-harness transitions across:
|
|
24
|
-
- **Google Antigravity** (`antigravity`)
|
|
25
|
-
- **Meta Muse / Fireworks AI (`Muse Spark Open`)** (`muse-code`)
|
|
26
|
-
- **Claude Code / Command Code** (`command-code`)
|
|
27
|
-
- **OpenAI Codex CLI** (`codex`)
|
|
28
|
-
3. **Update Index**:
|
|
29
|
-
- Whenever you create a new sample, add it to the table in `samples/README.md` with its run command and architectural summary.
|
|
30
|
-
|
package/.agents/mcp_config.json
DELETED
package/.codex/config.toml
DELETED
package/AGENTS.md
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# VectorForce Workspace Architecture & Agent Continuity Guide (`AGENTS.md`)
|
|
2
|
-
|
|
3
|
-
This repository is the core workspace for **VectorForce** — a local-first, zero-dependency, privacy-preserving engineering context platform ("Git for AI Context") across **Google Antigravity**, **Meta Muse**, **Claude Code**, **Command Code**, and **OpenAI Codex**.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. Context Protocol Workflow (Mandatory for All AI Agents)
|
|
8
|
-
|
|
9
|
-
### At the Start of a Task / Resuming Work:
|
|
10
|
-
1. **Discover active tasks:**
|
|
11
|
-
- MCP: `list_tasks({ status: "active" })` | CLI: `node bin/vf.js tasks active`
|
|
12
|
-
2. **Check for workspace or document drift:**
|
|
13
|
-
- MCP: `check_workspace_drift({ task_id: "<task_id>" })` | CLI: `node bin/vf.js drift --task <task_id>`
|
|
14
|
-
3. **Retrieve the authorized briefing:**
|
|
15
|
-
- MCP: `get_resume_briefing({ task_id: "<task_id>", destination_harness: "antigravity" })` (`"antigravity" | "muse-code" | "command-code" | "codex"`)
|
|
16
|
-
- CLI: `node bin/vf.js resume --task <task_id> --dest antigravity`
|
|
17
|
-
4. **Reason over the context (AI memory):**
|
|
18
|
-
- MCP: `reason_about_task({ task_id: "<task_id>" })` | CLI: `node bin/vf.js reason --task <task_id>`
|
|
19
|
-
5. **Adhere to Invariant Constraints:** Respect all rules under `# Invariant Constraints` in the briefing.
|
|
20
|
-
|
|
21
|
-
### At the End of a Task Phase / Before Switching Harnesses:
|
|
22
|
-
1. **Capture an immutable checkpoint:**
|
|
23
|
-
- MCP: `save_checkpoint({ task_id, summary, goals, constraints, decisions, next_steps, requested_documents })`
|
|
24
|
-
- CLI:
|
|
25
|
-
```bash
|
|
26
|
-
node bin/vf.js checkpoint --task <id> --summary "<summary>" \
|
|
27
|
-
--goal "<goal>" --constraint "<constraint>" \
|
|
28
|
-
--decision "<ID>:<Title>:<Rationale>" \
|
|
29
|
-
--next "<next_step>" --doc "AGENTS.md"
|
|
30
|
-
```
|
|
31
|
-
2. **Verify Receipt:** Ensure the operation receipt returns `status: "committed"`.
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 2. Security & Policy Invariants
|
|
36
|
-
|
|
37
|
-
- **Zero External Runtime Dependencies:** Core CLI, MCP server, and Studio backend use **only** Node.js built-ins (`node:sqlite`, `node:http`, `node:crypto`, `node:fs`, `node:child_process`).
|
|
38
|
-
- **Claims vs Evidence Distinction:** Human/model inputs (`goals`, `constraints`, `decisions`, `next_steps`) are stored as unverifiable **`claims`**. Git commit SHAs, dirty states, and SHA-256 document digests are recorded as verifiable **`evidence`**.
|
|
39
|
-
- **Strict Document Allowlist & Size Cap:** Only `.md`/`.txt` files in `node bin/vf.js policy list` (max `8 KiB` per file, `64 KiB` total) may be collected. `AGENTS.md` must stay `< 8192` bytes. Symlinks and path traversal (`..`) are strictly rejected.
|
|
40
|
-
- **Safe Receipts:** Receipts and audit logs never contain raw document bodies or API credentials.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## 3. Workspace Directory & Module Map
|
|
45
|
-
|
|
46
|
-
```text
|
|
47
|
-
VectorForce/
|
|
48
|
-
├── AGENTS.md # Workspace guide & agent protocol (< 8 KiB)
|
|
49
|
-
├── README.md # Public documentation & quickstart
|
|
50
|
-
├── package.json # Zero-dependency ESM package (Node >= 22.5.0)
|
|
51
|
-
├── bin/vf.js # Unified CLI (init, status, checkpoint, resume, reason, studio, mcp, handoff, config)
|
|
52
|
-
├── src/
|
|
53
|
-
│ ├── index.js # Public programmatic SDK exports
|
|
54
|
-
│ ├── core/ # errors.js, hash.js (SHA-256 / HMAC), types.js (schema validators)
|
|
55
|
-
│ ├── policy/authorizer.js # Workspace containment, symlink rejection, allowlist & harness auth
|
|
56
|
-
│ ├── storage/sqlite-store.js # Local SQLite WAL engine (.vectorforce/vectorforce.db)
|
|
57
|
-
│ ├── providers/
|
|
58
|
-
│ │ ├── code-index-provider.js # Zero-dep AST/symbol & dependency graph indexer
|
|
59
|
-
│ │ ├── document-provider.js # Policy-enforced doc reader & SHA-256 evidence collector
|
|
60
|
-
│ │ ├── git-provider.js # Git branch, HEAD SHA, dirty status, and file diff observer
|
|
61
|
-
│ │ └── llm-provider.js # AI adapter (Fireworks, Muse, OpenRouter, Ollama, OpenAI, Anthropic, BYOK)
|
|
62
|
-
│ ├── operations/
|
|
63
|
-
│ │ ├── project-service.js # Project & task lifecycle + allowlist management
|
|
64
|
-
│ │ ├── checkpoint-service.js # Immutable checkpoint creation + evidence collection
|
|
65
|
-
│ │ ├── briefing-service.js # Cross-harness resume briefing + live Git/doc drift reconciliation
|
|
66
|
-
│ │ ├── reasoning-service.js # AI reasoning synthesis over checkpoints + code index + drift
|
|
67
|
-
│ │ └── handoff-service.js # HMAC-SHA256 signed handoff export/import + lineage verification
|
|
68
|
-
│ ├── mcp/
|
|
69
|
-
│ │ ├── mcp-server.js # JSON-RPC 2.0 stdio MCP server exposing 9 tools + 3 resources
|
|
70
|
-
│ │ └── harness-config.js # Auto-generator for Antigravity, Claude, Command Code, Muse, Codex configs
|
|
71
|
-
│ └── studio/server.js # Local HTTP server (127.0.0.1:3210) + REST API for VectorForce Studio
|
|
72
|
-
├── studio/ # React + Vite + Tailwind + XYFlow frontend for VectorForce Studio
|
|
73
|
-
├── samples/ # Runnable sample architectures, multi-agent workflows & integrations
|
|
74
|
-
├── scripts/practical-test-env.js # 7-stage cross-OS practical E2E simulation (Git + CLI + MCP + Handoff)
|
|
75
|
-
├── test/ # 75 automated unit, security, MCP, and cross-harness tests
|
|
76
|
-
└── wiki/ # Local-only ADRs (001-014) and phase planning (gitignored)
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Generated Harness Configs in Workspace Root (`vf init`):
|
|
80
|
-
- `.mcp.json`, `.commandcode/mcp.json`, `commandcode.json` — Claude Code & Command Code
|
|
81
|
-
- `.agents/mcp_config.json`, `~/.gemini/antigravity/mcp_config.json` — Google Antigravity
|
|
82
|
-
- `.muse/mcp_config.json`, `musecode.json` — Meta Muse
|
|
83
|
-
- `.codex/config.toml`, `codex.json` — OpenAI Codex CLI
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 4. MCP Tools & AI Provider Reference
|
|
88
|
-
|
|
89
|
-
| MCP Tool (`src/mcp/mcp-server.js`) | Service Method | Purpose |
|
|
90
|
-
| :--- | :--- | :--- |
|
|
91
|
-
| `list_tasks` | `ProjectService.listTasks` | Discover active/completed tasks |
|
|
92
|
-
| `save_checkpoint` | `CheckpointService.saveCheckpoint` | Commit claims + Git/doc evidence to SQLite |
|
|
93
|
-
| `get_resume_briefing` | `BriefingService.generateBriefing` | Deterministic cross-harness briefing |
|
|
94
|
-
| `check_workspace_drift` | `BriefingService.checkWorkspaceDrift` | Compare live Git & doc hashes vs checkpoint |
|
|
95
|
-
| `reason_about_task` | `ReasoningService.reasonAboutTask` | AI architectural briefing + risk analysis |
|
|
96
|
-
| `set_document_policy` | `ProjectService.setDocumentPolicy` | Update workspace document allowlist |
|
|
97
|
-
| `export_handoff` | `HandoffService.exportHandoff` | Export HMAC-SHA256 signed `.vfhandoff.json` |
|
|
98
|
-
| `import_handoff` | `HandoffService.importHandoff` | Verify signature/hashes & import handoff |
|
|
99
|
-
| `get_timeline` | `SqliteStore.getAuditEvents` | Inspect chronological audit trail |
|
|
100
|
-
|
|
101
|
-
### Supported AI Reasoning Providers (`src/providers/llm-provider.js`):
|
|
102
|
-
1. **Fireworks AI (`Muse Spark Open`)**: `vf config fireworks <KEY>` (`accounts/fireworks/models/muse-spark-open`)
|
|
103
|
-
2. **Meta Muse Direct**: `vf config muse <KEY>` (`muse-spark-1.3`)
|
|
104
|
-
3. **OpenRouter (`Muse Spark Open`)**: `vf config openrouter <KEY> --model meta/muse-spark-open`
|
|
105
|
-
4. **Local Ollama**: `vf config ollama --model llama3.3` (`http://127.0.0.1:11434`)
|
|
106
|
-
5. **OpenAI / Anthropic / BYOK**: `vf config openai <KEY>` | `vf config anthropic <KEY>` | `vf config byok <URL> <KEY> --model <ID>`
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## 5. Extension Playbook (Samples & Production Upgrades)
|
|
111
|
-
|
|
112
|
-
1. **Adding Samples (`samples/`)**: Place runnable workflows, reference architectures, and multi-agent demos inside `samples/` using `src/index.js` or CLI/MCP bridges.
|
|
113
|
-
2. **Adding/Upgrading MCP Tools**: Add business logic in `src/operations/*`, persistence in `src/storage/sqlite-store.js`, MCP registration in `src/mcp/mcp-server.js`, SDK export in `src/index.js`, and CLI command in `bin/vf.js`.
|
|
114
|
-
3. **Upgrading Studio UI**: Add REST routes in `src/studio/server.js` and React views in `studio/src/components/`, then build via `npm --prefix studio run build`.
|
|
115
|
-
4. **Verification Gate**: Always run `npm test` (75 unit/security tests) and `npm run test:practical` (7-stage E2E test) before committing.
|
package/codex.json
DELETED
package/commandcode.json
DELETED