vectorforce 0.2.0 → 0.3.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,46 @@
1
+ # Changelog
2
+
3
+ All notable changes to the `vectorforce` package will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [0.2.0] - 2026-10-31
11
+
12
+ ### Added
13
+ - **Unified Remote Sync Commands (`vf remote`, `vf push`, `vf pull`)**:
14
+ - `vf remote set <URL> [--key <KEY>] [--project <ID>]`: Configure remote cloud synchronization endpoint in `.vectorforce/config.json`.
15
+ - `vf push`: Read local `.vectorforce/vectorforce.db`, wrap tasks & checkpoints in End-to-End Encrypted (E2EE) envelopes (`AES-256-GCM` + `X25519` + `Ed25519`), and push to VectorForce Cloud / Modal.com.
16
+ - `vf pull`: Pull the latest encrypted envelope from the cloud, verify the `Ed25519` digital signature, decrypt via `X25519` + `AES-256-GCM`, reconcile into local SQLite, and synthesize the **Meta Muse (`muse-spark-open`)** reasoning briefing.
17
+ - **VectorForce Cloud & Modal.com Serverless Deployment**:
18
+ - Dedicated cloud sync server supporting multi-project registries, B2B2B sub-customer tenant isolation, and developer task assignment boards.
19
+ - One-command deployment to Modal.com (`modal_app.py`) with persistent `modal.Volume` storage for encrypted SQLite WAL databases.
20
+ - **Interactive Team Handoff & Studio UI Upgrades**:
21
+ - Added direct browser download of `.vfhandoff.json` bundle files.
22
+ - Added interactive in-browser **Import & Reconcile Teammate Handoff Package** modal (`POST /api/handoff/import`) with SHA-256 manifest validation.
23
+ - Automatic resolution of active tasks and divergent checkpoint heads in Studio export endpoints.
24
+ - **Automated npm Lifecycle Hooks**:
25
+ - Added `prepublishOnly` script in `package.json` to ensure `npm --prefix studio run build` and all 75 tests run automatically before every `npm publish`.
26
+
27
+ ### Changed
28
+ - **CLI Commands Simplified**: Unified remote cloud sync under the standard `vf` command (following the `git remote`, `git push`, `git pull` mental model).
29
+ - **Workspace Agent Protocols**: Upgraded workspace-level `AGENTS.md` and role definitions for `vectorforce-architect`, `vectorforce-auditor`, and `vectorforce-samples-builder`.
30
+
31
+ ### Fixed
32
+ - Fixed `TypeError` in `TeamHandoffView.jsx` when resolving checkpoints with differing `id` vs `checkpoint_id` shapes.
33
+ - Fixed divergent leaf head resolution in `/api/handoff/export` by auto-selecting the latest timestamped checkpoint.
34
+ - Fixed ephemeral key generation in serverless environments by persisting machine identities in durable SQLite storage.
35
+
36
+ ---
37
+
38
+ ## [0.1.0] - 2026-10-27
39
+
40
+ ### Added
41
+ - Initial public release of VectorForce — "Git for AI Context".
42
+ - Zero-dependency local SQLite WAL persistence engine (`node:sqlite`).
43
+ - Model Context Protocol (MCP) server over JSON-RPC 2.0 stdio with 9 core tools (`save_checkpoint`, `get_resume_briefing`, `check_workspace_drift`, `reason_about_task`, `list_tasks`, `set_document_policy`, `export_handoff`, `import_handoff`, `get_timeline`).
44
+ - Automatic multi-harness configuration generators for Google Antigravity, Claude Code, Command Code, Meta Muse, and OpenAI Codex.
45
+ - Multi-provider AI reasoning engine supporting Meta Muse (`muse-spark-1.3`, `muse-spark-open`), Fireworks AI, OpenRouter, Local Ollama, OpenAI, Anthropic, and custom BYOK endpoints.
46
+ - Local VectorForce Studio Web UI (`vf studio`) on port 3210 with interactive SVG architecture dependency and blast-radius graph.
package/README.md CHANGED
@@ -73,7 +73,24 @@ node bin/vf.js checkpoint --task auth-module \
73
73
  --doc "AGENTS.md"
74
74
  ```
75
75
 
76
- ### 5. Reason Over Context (AI Engineering Memory)
76
+ ### 5. Multi-Machine & Team Cloud Sync (`vf remote`, `vf push`, `vf pull`)
77
+
78
+ VectorForce follows the Git mental model for sharing context between two computers or across a team using Zero-Knowledge End-to-End Encryption (`X25519` + `AES-256-GCM` + `Ed25519`):
79
+
80
+ ```bash
81
+ # 1. Connect local workspace to your Cloud Remote once:
82
+ node bin/vf.js remote set https://omprakash-pce2011--vectorforce-cloud-vectorforce-cloud-web.modal.run \
83
+ --key vf_live_sub_98a7bc65f012e4d9 \
84
+ --project proj-bistro-pos
85
+
86
+ # 2. Push local checkpoints & tasks to Cloud (E2EE):
87
+ node bin/vf.js push
88
+
89
+ # 3. Pull & reconcile context on Computer 2 (reconciles into SQLite & runs Meta Muse reasoning):
90
+ node bin/vf.js pull
91
+ ```
92
+
93
+ ### 6. Reason Over Context (AI Engineering Memory)
77
94
 
78
95
  VectorForce prioritizes **Meta Muse (`muse-spark-1.3`)** and the open-weights **Meta Muse Spark Open (`muse-spark-open` • 1M token context window)** as its **#1 reasoning models**, while also supporting **Fireworks AI**, **OpenRouter**, **Local Ollama**, **OpenAI / Codex**, **Anthropic Claude**, and any **Custom BYOK** OpenAI-compatible endpoint:
79
96
 
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 || 'https://omprakash-pce2011--vectorforce-cloud-vectorforce-cloud-web.modal.run';
280
- const defaultKey = process.env.VF_SUBSCRIPTION_KEY || 'vf_live_sub_98a7bc65f012e4d9';
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 || 'proj-bistro-pos'
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: 'proj-bistro-pos'
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
- const remoteProjectId = flags.project || remote.remoteProjectId || 'proj-bistro-pos';
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
- const remoteProjectId = flags.project || remote.remoteProjectId || 'proj-bistro-pos';
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.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Portable engineering context platform - Git for AI context",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -9,6 +9,8 @@
9
9
  "vectorforce": "bin/vf.js"
10
10
  },
11
11
  "scripts": {
12
+ "build": "npm --prefix studio run build",
13
+ "prepublishOnly": "npm --prefix studio run build && npm test",
12
14
  "test": "node --test \"test/**/*.test.js\"",
13
15
  "test:practical": "node scripts/practical-test-env.js"
14
16
  },
@@ -20,11 +22,7 @@
20
22
  "src",
21
23
  "studio/dist",
22
24
  "AGENTS.md",
23
- "commandcode.json",
24
- "musecode.json",
25
- "codex.json",
26
- ".agents",
27
- ".codex"
25
+ "CHANGELOG.md"
28
26
  ],
29
27
  "keywords": [
30
28
  "context",
@@ -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: name === 'omprakashprajapat' ? 'Lead Architect / Owner' : 'Collaborator',
293
+ role: 'Contributor',
294
294
  harness: cp.author?.harness || 'cli',
295
295
  tasks: new Set(),
296
296
  checkpointsCount: 0,
@@ -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
-
@@ -1,11 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "vectorforce": {
4
- "command": "node",
5
- "args": [
6
- "/Users/omprakashprajapat/AgentAI/VectorForce/bin/vf.js",
7
- "mcp"
8
- ]
9
- }
10
- }
11
- }
@@ -1,5 +0,0 @@
1
- [mcp_servers.vectorforce]
2
- command = "node"
3
- args = ["/Users/omprakashprajapat/AgentAI/VectorForce/bin/vf.js", "mcp"]
4
- [mcp_servers.vectorforce.env]
5
- VF_HARNESS = "codex"
package/codex.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "vectorforce": {
4
- "command": "node",
5
- "args": [
6
- "/Users/omprakashprajapat/AgentAI/VectorForce/bin/vf.js",
7
- "mcp"
8
- ],
9
- "env": {
10
- "VF_HARNESS": "codex"
11
- }
12
- }
13
- }
14
- }
package/commandcode.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "vectorforce": {
4
- "command": "node",
5
- "args": [
6
- "/Users/omprakashprajapat/AgentAI/VectorForce/bin/vf.js",
7
- "mcp"
8
- ]
9
- }
10
- }
11
- }
package/musecode.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "vectorforce": {
4
- "command": "node",
5
- "args": [
6
- "/Users/omprakashprajapat/AgentAI/VectorForce/bin/vf.js",
7
- "mcp"
8
- ],
9
- "env": {
10
- "VF_HARNESS": "muse-code"
11
- }
12
- }
13
- }
14
- }