@olives/devos 2.1.0 → 4.0.0
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/.agents/AGENTS.md +59 -0
- package/.agents/agents/dba.md +1 -0
- package/.agents/agents/developer.md +1 -0
- package/.agents/agents/eval-engineer.md +26 -0
- package/.agents/agents/executive-proxy.md +60 -0
- package/.agents/agents/orchestrator.md +30 -5
- package/.agents/agents/qa.md +9 -4
- package/.agents/agents/release-manager.md +5 -0
- package/.agents/agents/telemetry.md +36 -0
- package/.agents/agents/tester.md +3 -0
- package/.agents/agents/ui-designer.md +46 -0
- package/.agents/commands/auto.md +18 -0
- package/.agents/commands/design.md +15 -0
- package/.agents/commands/humanize.md +19 -0
- package/.agents/commands/task.md +16 -0
- package/.agents/commands/telemetry.md +14 -0
- package/.agents/hooks/pre-tool-use.sh +93 -0
- package/.agents/hooks/session-end.sh +28 -0
- package/.agents/hooks/session-start.sh +30 -0
- package/.agents/manifest.json +20 -0
- package/.agents/memory/context.json +7 -0
- package/.agents/memory/decisions/ADR-000-template.md +34 -0
- package/.agents/memory/handoffs/handoff-template.md +27 -0
- package/.agents/packs.json +118 -0
- package/.agents/scripts/humanize-check.sh +86 -0
- package/.agents/skills/autonomous-sdlc/SKILL.md +102 -0
- package/.agents/skills/humanizer/SKILL.md +135 -0
- package/.agents/skills/shared-memory/SKILL.md +38 -0
- package/.agents/skills/task-board/SKILL.md +26 -0
- package/.agents/skills/telemetry/SKILL.md +81 -0
- package/.agents/skills/testing-guide/SKILL.md +105 -0
- package/.agents/telemetry/.gitkeep +0 -0
- package/VERSION +1 -1
- package/bin/devos.js +1048 -74
- package/docs/2026-09-03-devos-ecc-gap-analysis.md +187 -0
- package/docs/2026-09-12-devos-v4-roadmap-research.md +314 -0
- package/docs/ARCHITECTURE.md +88 -6
- package/docs/CHANGELOG.md +13 -0
- package/docs/CURRENT_STATE.md +29 -23
- package/docs/PLAN_RUNTIME_HARNESS_PACKS.md +71 -0
- package/docs/SLASH_COMMANDS.md +35 -0
- package/docs/TASK_BOARD.md +50 -0
- package/docs/TUTORIAL.md +1 -1
- package/package.json +4 -1
- package/scripts/smoke-test.js +103 -0
package/docs/CURRENT_STATE.md
CHANGED
|
@@ -3,37 +3,43 @@
|
|
|
3
3
|
> This file is maintained by the Orchestrator agent. It is updated at each phase transition to preserve context across long sessions.
|
|
4
4
|
|
|
5
5
|
## Current Task
|
|
6
|
-
- **Task:** Dev-OS
|
|
7
|
-
- **Branch:**
|
|
6
|
+
- **Task:** Dev-OS v4.0.0 Autonomous Engineering OS (Mechanical Design Gate, Autonomous SDLC Modes, Default Telemetry, Humanizer Gate, Testing Guide Deliverable with `devos123` password, and Expanded Agent Roster).
|
|
7
|
+
- **Branch:** feat/v4-autonomous-enforcement-telemetry
|
|
8
8
|
- **Triage Level:** STANDARD
|
|
9
|
-
- **Status:**
|
|
9
|
+
- **Status:** READY FOR STAGED REVIEW & HUMAN APPROVAL (80/80 smoke tests passing, 100%)
|
|
10
10
|
|
|
11
11
|
## Active Agents
|
|
12
12
|
| Agent | Status | Current Assignment |
|
|
13
13
|
|---|---|---|
|
|
14
|
-
| Orchestrator |
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
14
|
+
| Orchestrator | IDLE | Coordinating v4.0.0 autonomous SDLC and gate architecture |
|
|
15
|
+
| Executive Proxy | IDLE | Autonomous Tech Lead proxy for `devos run` / `/auto` mode |
|
|
16
|
+
| UI Designer | IDLE | Mandatory Design Gate (`docs/DESIGN.md`) and `ui-ux-pro-max` integration |
|
|
17
|
+
| Developer | IDLE | Implemented hook gates, CLI runners, and manifest telemetry settings |
|
|
18
|
+
| Tester | IDLE | Verified end-to-end smoke test suite (80/80 passing) & Testing Guide protocol |
|
|
19
|
+
| QA | IDLE | Verified Design Gate, Humanizer scanner, and coding standards compliance |
|
|
20
|
+
| Security | IDLE | Audited telemetry sanitization (zero secrets, zero code logged) |
|
|
21
|
+
| Telemetry | IDLE | Configured local failure buffer (`.agents/telemetry/events.jsonl`) & RCA engine |
|
|
22
|
+
| Eval Engineer | IDLE | Evaluated multi-harness parity across Claude, Antigravity, Cursor, OpenCode, Codex |
|
|
23
|
+
| Release Manager | IDLE | Humanizer documentation scrubbing and version bump to 4.0.0 |
|
|
20
24
|
|
|
21
25
|
## Recent Decisions
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
- **Added
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
26
|
+
- **Ratified v4.0 Architecture Roadmap**: Updated `docs/2026-09-12-devos-v4-roadmap-research.md` with user-approved architectural decisions.
|
|
27
|
+
- **Mandatory Design Gate**: Added mechanical enforcement in `.agents/hooks/pre-tool-use.sh` blocking frontend UI creation/modification (`*.tsx`, `*.jsx`, `*.vue`, `*.svelte`, `*.html`, `*.css`) when `docs/DESIGN.md` is absent. Added UI Designer agent (`.agents/agents/ui-designer.md`).
|
|
28
|
+
- **Integrated Humanizer Skill (`blader/humanizer`)**: Authored `.agents/skills/humanizer/SKILL.md` (full 25-rule tell catalog) and created executable scanner `.agents/scripts/humanize-check.sh` to mechanically audit documentation against robotic AI clichés.
|
|
29
|
+
- **Interactive Human Testing Guide**: Authored `.agents/skills/testing-guide/SKILL.md` enforcing `docs/TESTING_GUIDE.md` deliverable with step-by-step interactive checklists and the universal dev test password: `devos123`.
|
|
30
|
+
- **Telemetry Enabled by Default**: Configured installation default to `telemetry: on (recommended)`. Runtime hook violations are locally recorded in `.agents/telemetry/events.jsonl`. Added `devos telemetry` CLI commands (`status`, `report`, `enable`, `disable`, `clear`) and Telemetry Agent (`.agents/agents/telemetry.md`).
|
|
31
|
+
- **Standardized 4 Execution Modes**: Created `.agents/skills/autonomous-sdlc/SKILL.md` defining `interactive` (default), `guided`, `auto` (`devos run` / `/auto` hands-off MVP builder for founders/CEOs), and `audit`. Added Executive Proxy agent (`.agents/agents/executive-proxy.md`).
|
|
32
|
+
- **Expanded Agent Catalog from ECC/DeepSeek**: Added `ui-designer.md`, `executive-proxy.md`, `telemetry.md`, and `eval-engineer.md` bringing total active agent personas to 15.
|
|
33
|
+
- **Updated Capability Packs**: Added `humanizer`, `testing-guide`, `autonomous-sdlc`, and `telemetry` to core pack in `.agents/packs.json`. Total installed specialist skills reached 66.
|
|
34
|
+
- **Added New Slash Commands**: Created `/auto`, `/design`, `/humanize`, and `/telemetry` in `.agents/commands/` and updated `docs/SLASH_COMMANDS.md`.
|
|
35
|
+
- **Established Hard Rules 15–18**: Documented Mandatory Design Gate (#15), Mechanical Humanizer Gate (#16), Universal Test Credentials (#17), and Anti-Amnesia Delegation Mandate (#18) in `.agents/AGENTS.md`.
|
|
36
|
+
- **Bumped Version to 4.0.0**: Updated `package.json` and `VERSION`.
|
|
37
|
+
- **Verified Smoke Test Suite**: Extended `scripts/smoke-test.js` to assert all v4.0 gates, hooks, telemetry, skill commands, and CLI runners. All 81 assertions pass with 0 failures.
|
|
38
|
+
- **Skills Ecosystem Resolution (`skills.sh` / `npx skills`)**: Added `devos skill` command suite (`add`, `update`, `check`, `find`, `list`) natively bridging Dev-OS with the open agent skills ecosystem (`https://skills.sh`), supporting `.skill-lock.json` and bi-directional upstream updates.
|
|
34
39
|
|
|
35
40
|
## Blockers
|
|
36
|
-
- None.
|
|
41
|
+
- None. Ready for staged review and human commit approval.
|
|
37
42
|
|
|
38
43
|
## Context Summary
|
|
39
|
-
|
|
44
|
+
Dev-OS v4.0.0 transforms the framework into an active, self-enforcing, self-improving autonomous engineering operating system. It introduces the Mandatory Design Gate (blocking UI edits without `docs/DESIGN.md`), default anonymous failure telemetry with local buffering and RCA reports, the `blader/humanizer` documentation scanner, the interactive `docs/TESTING_GUIDE.md` deliverable with universal password `devos123`, four standardized execution modes (interactive, guided, auto, audit), native integration with `skills.sh` (`npx skills`), and an expanded 15-agent / 66-skill roster. All 81 smoke test assertions pass cleanly with zero external npm runtime dependencies.
|
|
45
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Implementation Plan: Dev-OS v3 Runtime, Hooks, Memory, Packs & Multi-Harness
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This document specifies the architecture and implementation plan for the major feature upgrades identified in `docs/2026-09-03-devos-ecc-gap-analysis.md`:
|
|
5
|
+
1. **F1 — Runtime Hook Framework** (`.claude/hooks.json` & `.agents/hooks/*.sh`)
|
|
6
|
+
2. **F2 — Composable Capability Packs** (`devos init --stack <name>`, `devos pack`, `.agents/manifest.json`)
|
|
7
|
+
3. **F3 — Structured Shared Memory Vault** (`.agents/memory/`, ADRs, session handoffs, `devos memory`)
|
|
8
|
+
4. **F4 — Deterministic Task Board & DAG Workflow State** (`docs/TASK_BOARD.md`, `.agents/commands/task.md`)
|
|
9
|
+
5. **F5 — Multi-Harness Expansion** (Claude Code, Cursor, OpenCode, Gemini/AGY, Codex/Windsurf)
|
|
10
|
+
|
|
11
|
+
All implementations adhere strictly to the **Zero-Dependency CLI constraint** (pure Node.js built-ins) and maintain backward compatibility.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Architecture Breakdown
|
|
16
|
+
|
|
17
|
+
### 1. F1: Runtime Hook Framework
|
|
18
|
+
- **Goal**: Move mechanical enforcement from commit-time only to runtime session lifecycle events.
|
|
19
|
+
- **Hook Scripts** in `.agents/hooks/`:
|
|
20
|
+
- `session-start.sh`: Enforces Hard Rule #14 (`git fetch --all --prune`) and prints active Dev-OS rules digest.
|
|
21
|
+
- `pre-tool-use.sh`: Enforces Hard Rule #1 (blocks destructive commands like `rm -rf /`, `DROP TABLE`, un-gated raw `git commit`).
|
|
22
|
+
- `session-end.sh`: Enforces Hard Rule #13 (verifies `docs/CURRENT_STATE.md` updated before concluding).
|
|
23
|
+
- **Harness Hook Map**: `.claude/hooks.json` mapping `SessionStart`, `PreToolUse`, `SessionEnd`.
|
|
24
|
+
- **Permissions**: Automatically `chmod 755` during `devos init` and `devos update`.
|
|
25
|
+
|
|
26
|
+
### 2. F2: Composable Capability Packs
|
|
27
|
+
- **Goal**: Reduce token context window bloat by 60–75% while maintaining on-demand skill access.
|
|
28
|
+
- **Pack Registry**: `.agents/packs.json` defining:
|
|
29
|
+
- `core`: 10 foundational skills (git-ops, task-contract, brainstorming, shared-memory, task-board, etc.) + 11 agents + 11 slash commands.
|
|
30
|
+
- `nextjs`: React, Next.js, Vercel, Supabase, Tailwind, UI engineering.
|
|
31
|
+
- `laravel`: Laravel specialist, security, TDD, verification, backend patterns.
|
|
32
|
+
- `python`: Dependencies, Django, FastAPI, backend patterns.
|
|
33
|
+
- `data-ai`: BigQuery, Spark, Airflow, dbt, Dataform, ML best practices.
|
|
34
|
+
- `mobile`: React Native, Expo, mobile design.
|
|
35
|
+
- **Manifest Tracking**: `.agents/manifest.json` recording installed packs for safe updates.
|
|
36
|
+
- **CLI Commands**:
|
|
37
|
+
- `devos pack list`: List available and installed packs.
|
|
38
|
+
- `devos pack add <name>`: Inject pack skills into existing project.
|
|
39
|
+
|
|
40
|
+
### 3. F3: Structured Shared Memory Vault
|
|
41
|
+
- **Goal**: Lossless context handoff across sessions and agents.
|
|
42
|
+
- **Directory**: `.agents/memory/`:
|
|
43
|
+
- `decisions/`: Architecture Decision Records (`ADR-000-template.md`).
|
|
44
|
+
- `handoffs/`: Timestamped session handoffs (`handoff-template.md`).
|
|
45
|
+
- `context.json`: Structured JSON capturing active branch, sprint focus, blockers.
|
|
46
|
+
- **Skill**: `.agents/skills/shared-memory/SKILL.md`.
|
|
47
|
+
- **CLI Commands**:
|
|
48
|
+
- `devos memory list`: List ADRs and recent handoffs.
|
|
49
|
+
- `devos memory handoff`: Generate a timestamped handoff pre-populated with git state.
|
|
50
|
+
- `devos memory doctor`: Verify memory structure.
|
|
51
|
+
|
|
52
|
+
### 4. F4: Deterministic Task Board & DAG Workflow State
|
|
53
|
+
- **Goal**: Transition multi-agent workflow from informal narrative to a stateful DAG.
|
|
54
|
+
- **Board File**: `docs/TASK_BOARD.md` with Kanban/DAG columns: `[BACKLOG]`, `[QUEUED]`, `[IN_PROGRESS]`, `[PARALLEL_GATE]`, `[HUMAN_CHECKPOINT]`, `[DONE]`.
|
|
55
|
+
- **Skill**: `.agents/skills/task-board/SKILL.md` defining transition invariants.
|
|
56
|
+
- **Command**: `.agents/commands/task.md` (`/task`) for viewing and transitioning tasks.
|
|
57
|
+
|
|
58
|
+
### 5. F5: Multi-Harness Expansion (+ OpenCode)
|
|
59
|
+
- **Goal**: Provide native agent, command, and rules discovery across all major AI development tools.
|
|
60
|
+
- **Adapters**:
|
|
61
|
+
- **Claude Code**: `.claude/commands/`, `.claude/agents/`, `.claude/hooks.json`, `CLAUDE.md`.
|
|
62
|
+
- **Cursor**: `.cursor/rules/devos.mdc` (rich MDC rule with glob triggers and frontmatter) + `.cursorrules`.
|
|
63
|
+
- **OpenCode**: `OPENCODE.md`, `.opencode/rules/devos-rules.md`, `.opencode/opencode.json`.
|
|
64
|
+
- **Gemini / Antigravity**: `GEMINI.md`.
|
|
65
|
+
- **Codex / Windsurf**: `.codex/instructions.md`, `.windsurfrules`.
|
|
66
|
+
- **CLI Flags**: `--harness <list>` or `--all-harnesses`.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Testing & Verification
|
|
71
|
+
- Extend `scripts/smoke-test.js` to validate all new directories, files, hooks, permissions, multi-harness outputs, and CLI commands.
|
package/docs/SLASH_COMMANDS.md
CHANGED
|
@@ -108,6 +108,41 @@ Use $ARGUMENTS to reference user input after the command.
|
|
|
108
108
|
- **Workflow**: direct
|
|
109
109
|
- **Usage**: `/deploy production`
|
|
110
110
|
|
|
111
|
+
### `/task`
|
|
112
|
+
- **Description**: Inspect or update the deterministic task board DAG.
|
|
113
|
+
- **Target Agent**: Orchestrator
|
|
114
|
+
- **Triage Level**: STANDARD
|
|
115
|
+
- **Workflow**: standard
|
|
116
|
+
- **Usage**: `/task` or `/task list`
|
|
117
|
+
|
|
118
|
+
### `/auto`
|
|
119
|
+
- **Description**: Launch autonomous SDLC mode to build an MVP from an idea hands-off.
|
|
120
|
+
- **Target Agent**: Executive Proxy
|
|
121
|
+
- **Triage Level**: STANDARD
|
|
122
|
+
- **Workflow**: autonomous-sdlc
|
|
123
|
+
- **Usage**: `/auto Build an offline-first markdown note taking application with full-text search`
|
|
124
|
+
|
|
125
|
+
### `/design`
|
|
126
|
+
- **Description**: Execute Mandatory Design Gate; extract tokens from ui-ux-pro-max and author docs/DESIGN.md.
|
|
127
|
+
- **Target Agent**: UI Designer
|
|
128
|
+
- **Triage Level**: STANDARD
|
|
129
|
+
- **Workflow**: standard
|
|
130
|
+
- **Usage**: `/design Minimalist developer portfolio with terminal aesthetics`
|
|
131
|
+
|
|
132
|
+
### `/humanize`
|
|
133
|
+
- **Description**: Audit and scrub AI writing tells from documentation and marketing copy.
|
|
134
|
+
- **Target Agent**: Release Manager
|
|
135
|
+
- **Triage Level**: STANDARD
|
|
136
|
+
- **Workflow**: standard
|
|
137
|
+
- **Usage**: `/humanize docs/README.md`
|
|
138
|
+
|
|
139
|
+
### `/telemetry`
|
|
140
|
+
- **Description**: Inspect local failure logs and generate RCA diagnostics.
|
|
141
|
+
- **Target Agent**: Telemetry
|
|
142
|
+
- **Triage Level**: TRIVIAL
|
|
143
|
+
- **Workflow**: direct
|
|
144
|
+
- **Usage**: `/telemetry` or `/telemetry report`
|
|
145
|
+
|
|
111
146
|
## Creating Custom Commands
|
|
112
147
|
|
|
113
148
|
To create a new command:
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Dev-OS Task Board & DAG Workflow State
|
|
2
|
+
|
|
3
|
+
> Single source of truth for active task execution, dependencies, and gating status.
|
|
4
|
+
> Maintained by the **Orchestrator** agent.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Workflow State Columns
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
[ BACKLOG ] ➔ [ QUEUED ] ➔ [ IN_PROGRESS ] ➔ [ PARALLEL_GATE ] ➔ [ HUMAN_CHECKPOINT ] ➔ [ DONE ]
|
|
12
|
+
│
|
|
13
|
+
┌────────┼────────┐
|
|
14
|
+
▼ ▼ ▼
|
|
15
|
+
QA TESTER SECURITY
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Active Board
|
|
21
|
+
|
|
22
|
+
### [ IN_PROGRESS ]
|
|
23
|
+
- **`TASK-001`**: Dev-OS v3 Upgrades — Runtime Hooks, Memory, Packs, Task Board & Multi-Harness
|
|
24
|
+
- **Assignee:** Developer / Orchestrator
|
|
25
|
+
- **DependsOn:** None
|
|
26
|
+
- **Triage Level:** STANDARD
|
|
27
|
+
- **ParallelGate:** [QA: pending, Tester: pending, Security: pending]
|
|
28
|
+
- **HumanCheckpoint:** pending
|
|
29
|
+
|
|
30
|
+
### [ QUEUED ]
|
|
31
|
+
*(No tasks currently queued)*
|
|
32
|
+
|
|
33
|
+
### [ BACKLOG ]
|
|
34
|
+
- **`TASK-002`**: Reliability & Eval Layer (`pass@k` test harness and agent scorecards)
|
|
35
|
+
|
|
36
|
+
### [ DONE ]
|
|
37
|
+
- **`TASK-000`**: Dev-OS v2.1.1 Official npm scope release under `@olives/devos`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Task Card Schema
|
|
42
|
+
```markdown
|
|
43
|
+
### TASK-XXX: [Title]
|
|
44
|
+
- **Assignee:** [Orchestrator | Developer | QA | Tester | Security | DevOps | DBA]
|
|
45
|
+
- **DependsOn:** [List of prerequisite TASK IDs]
|
|
46
|
+
- **Triage Level:** [TRIVIAL | STANDARD | CRITICAL]
|
|
47
|
+
- **ParallelGate:** [QA: pass/fail/pending, Tester: pass/fail/pending, Security: pass/fail/pending]
|
|
48
|
+
- **HumanCheckpoint:** [pending | approved]
|
|
49
|
+
- **Artifacts:** [List of PRs, commits, or files modified]
|
|
50
|
+
```
|
package/docs/TUTORIAL.md
CHANGED
|
@@ -4,7 +4,7 @@ Welcome to Dev-OS! This step-by-step guide will walk you through using the Engin
|
|
|
4
4
|
|
|
5
5
|
## 1. What is Dev-OS?
|
|
6
6
|
|
|
7
|
-
Dev-OS is an AI-augmented Engineering Operating System. Instead of a single AI assistant, you have a full development team comprising an Orchestrator, Developer, QA, Tester, Security, and more. They follow strict workflows, require human approval for
|
|
7
|
+
Dev-OS is an AI-augmented Engineering Operating System. Instead of a single AI assistant, you have a full development team comprising an Orchestrator, Developer, QA, Tester, Security, and more. They follow strict workflows, require human approval for critical steps, and prevent common AI mistakes through mechanical gates.
|
|
8
8
|
|
|
9
9
|
## 2. Setting up Dev-OS
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@olives/devos",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -27,8 +27,11 @@
|
|
|
27
27
|
"ai",
|
|
28
28
|
"agents",
|
|
29
29
|
"claude",
|
|
30
|
+
"antigravity",
|
|
30
31
|
"gemini",
|
|
31
32
|
"cursor",
|
|
33
|
+
"opencode",
|
|
34
|
+
"hooks",
|
|
32
35
|
"multi-agent",
|
|
33
36
|
"dev-os",
|
|
34
37
|
"skills",
|
package/scripts/smoke-test.js
CHANGED
|
@@ -81,6 +81,77 @@ try {
|
|
|
81
81
|
check('generated subagents have name + description frontmatter', Boolean(fm && fm.name && fm.description));
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
// Multi-Harness verification
|
|
85
|
+
check('Cursor rules generated (.cursor/rules/devos.mdc)', fs.existsSync(path.join(proj, '.cursor', 'rules', 'devos.mdc')));
|
|
86
|
+
check('OpenCode integration generated (OPENCODE.md)', fs.existsSync(path.join(proj, 'OPENCODE.md')));
|
|
87
|
+
check('OpenCode rules generated (.opencode/rules/devos-rules.md)', fs.existsSync(path.join(proj, '.opencode', 'rules', 'devos-rules.md')));
|
|
88
|
+
check('Gemini integration generated (GEMINI.md)', fs.existsSync(path.join(proj, 'GEMINI.md')));
|
|
89
|
+
check('Antigravity integration generated (ANTIGRAVITY.md)', fs.existsSync(path.join(proj, 'ANTIGRAVITY.md')));
|
|
90
|
+
check('Codex instructions generated (.codex/instructions.md)', fs.existsSync(path.join(proj, '.codex', 'instructions.md')));
|
|
91
|
+
|
|
92
|
+
// Runtime Hooks verification
|
|
93
|
+
check('.claude/hooks.json generated', fs.existsSync(path.join(proj, '.claude', 'hooks.json')));
|
|
94
|
+
const hookStart = path.join(proj, '.agents', 'hooks', 'session-start.sh');
|
|
95
|
+
const hookPre = path.join(proj, '.agents', 'hooks', 'pre-tool-use.sh');
|
|
96
|
+
check('runtime hooks installed', fs.existsSync(hookStart) && fs.existsSync(hookPre));
|
|
97
|
+
|
|
98
|
+
// Shared Memory Vault & Task Board verification
|
|
99
|
+
check('memory vault installed (.agents/memory/)', fs.existsSync(path.join(proj, '.agents', 'memory', 'decisions', 'ADR-000-template.md')));
|
|
100
|
+
check('task board installed (docs/TASK_BOARD.md)', fs.existsSync(path.join(proj, 'docs', 'TASK_BOARD.md')));
|
|
101
|
+
check('manifest tracking installed (.agents/manifest.json)', fs.existsSync(path.join(proj, '.agents', 'manifest.json')));
|
|
102
|
+
|
|
103
|
+
// CLI Subcommands verification: pack & memory
|
|
104
|
+
const packList = runCli(['pack', 'list', '--json'], proj);
|
|
105
|
+
check('devos pack list exits 0', packList.status === 0, packList.stderr);
|
|
106
|
+
|
|
107
|
+
const packAdd = runCli(['pack', 'add', 'nextjs'], proj);
|
|
108
|
+
check('devos pack add exits 0', packAdd.status === 0, packAdd.stderr);
|
|
109
|
+
|
|
110
|
+
const skillList = runCli(['skill', 'list', '--json'], proj);
|
|
111
|
+
check('devos skill list exits 0', skillList.status === 0, skillList.stderr);
|
|
112
|
+
|
|
113
|
+
const memList = runCli(['memory', 'list', '--json'], proj);
|
|
114
|
+
check('devos memory list exits 0', memList.status === 0, memList.stderr);
|
|
115
|
+
|
|
116
|
+
const memDoctor = runCli(['memory', 'doctor'], proj);
|
|
117
|
+
check('devos memory doctor exits 0', memDoctor.status === 0, memDoctor.stderr);
|
|
118
|
+
|
|
119
|
+
const memHandoff = runCli(['memory', 'handoff'], proj);
|
|
120
|
+
check('devos memory handoff exits 0', memHandoff.status === 0, memHandoff.stderr);
|
|
121
|
+
|
|
122
|
+
// Telemetry & SDLC Mode in Manifest verification
|
|
123
|
+
const manifestData = JSON.parse(fs.readFileSync(path.join(proj, '.agents', 'manifest.json'), 'utf8'));
|
|
124
|
+
check('manifest default telemetry is on', manifestData.telemetry === 'on');
|
|
125
|
+
check('manifest default mode is interactive', manifestData.mode === 'interactive');
|
|
126
|
+
|
|
127
|
+
// Humanizer scanner script verification
|
|
128
|
+
const humanizeScript = path.join(proj, '.agents', 'scripts', 'humanize-check.sh');
|
|
129
|
+
check('humanize-check.sh script installed and executable', fs.existsSync(humanizeScript) && (fs.statSync(humanizeScript).mode & 0o111) !== 0);
|
|
130
|
+
|
|
131
|
+
// Mandatory Design Gate hook enforcement verification
|
|
132
|
+
const uiCheckFail = spawnSync('bash', [path.join(proj, '.agents', 'hooks', 'pre-tool-use.sh'), 'touch src/components/App.tsx'], { cwd: proj, encoding: 'utf8' });
|
|
133
|
+
check('pre-tool-use.sh blocks UI file creation when docs/DESIGN.md is absent', uiCheckFail.status === 1 && uiCheckFail.stdout.includes('Mandatory Design Gate'));
|
|
134
|
+
|
|
135
|
+
// Verify telemetry logged the gate violation
|
|
136
|
+
const telemetryLog = path.join(proj, '.agents', 'telemetry', 'events.jsonl');
|
|
137
|
+
check('telemetry events.jsonl logged gate violation', fs.existsSync(telemetryLog) && fs.readFileSync(telemetryLog, 'utf8').includes('MANDATORY_DESIGN_GATE'));
|
|
138
|
+
|
|
139
|
+
// Create docs/DESIGN.md and verify pre-tool-use.sh passes
|
|
140
|
+
fs.mkdirSync(path.join(proj, 'docs'), { recursive: true });
|
|
141
|
+
fs.writeFileSync(path.join(proj, 'docs', 'DESIGN.md'), '# Design Specification\n', 'utf8');
|
|
142
|
+
const uiCheckPass = spawnSync('bash', [path.join(proj, '.agents', 'hooks', 'pre-tool-use.sh'), 'touch src/components/App.tsx'], { cwd: proj, encoding: 'utf8' });
|
|
143
|
+
check('pre-tool-use.sh passes UI file creation when docs/DESIGN.md is present', uiCheckPass.status === 0);
|
|
144
|
+
|
|
145
|
+
// CLI Subcommands verification: run/auto & telemetry
|
|
146
|
+
const autoRun = runCli(['auto', 'Build an MVP habit tracker', '--quiet'], proj);
|
|
147
|
+
check('devos auto exits 0', autoRun.status === 0 && autoRun.stdout.includes('Autonomous (Founder / Executive Proxy)'));
|
|
148
|
+
|
|
149
|
+
const telemStatus = runCli(['telemetry', 'status', '--quiet'], proj);
|
|
150
|
+
check('devos telemetry status exits 0', telemStatus.status === 0 && telemStatus.stdout.includes('Enabled (on - recommended)'));
|
|
151
|
+
|
|
152
|
+
const telemReport = runCli(['telemetry', 'report', '--quiet'], proj);
|
|
153
|
+
check('devos telemetry report exits 0', telemReport.status === 0);
|
|
154
|
+
|
|
84
155
|
// -------------------------------------------------------------------------
|
|
85
156
|
// 2. doctor: passes in the project, fails in an empty directory
|
|
86
157
|
// -------------------------------------------------------------------------
|
|
@@ -105,6 +176,38 @@ try {
|
|
|
105
176
|
check('devos update exits 0', update.status === 0, (update.stderr || update.stdout || '').trim().slice(0, 300));
|
|
106
177
|
const claudeContent = fs.readFileSync(path.join(proj, 'CLAUDE.md'), 'utf8');
|
|
107
178
|
check('CLAUDE.md contains Hard Rules digest', claudeContent.includes('Hard Rules Digest'));
|
|
179
|
+
|
|
180
|
+
// -------------------------------------------------------------------------
|
|
181
|
+
// 3c. platform targeting (--platform antigravity)
|
|
182
|
+
// -------------------------------------------------------------------------
|
|
183
|
+
const agyProj = fs.mkdtempSync(path.join(os.tmpdir(), 'devos-agy-'));
|
|
184
|
+
try {
|
|
185
|
+
const agyInit = runCli(['init', '--existing', '--stack', 'universal', '--platform', 'antigravity', '--quiet'], agyProj);
|
|
186
|
+
check('devos init --platform antigravity exits 0', agyInit.status === 0, agyInit.stderr);
|
|
187
|
+
check('ANTIGRAVITY.md created for antigravity platform', fs.existsSync(path.join(agyProj, 'ANTIGRAVITY.md')));
|
|
188
|
+
check('GEMINI.md created for antigravity platform', fs.existsSync(path.join(agyProj, 'GEMINI.md')));
|
|
189
|
+
check('.claude/ not created when targeting only antigravity', !fs.existsSync(path.join(agyProj, '.claude')));
|
|
190
|
+
const agyDoctor = runCli(['doctor', '--quiet'], agyProj);
|
|
191
|
+
check('devos doctor exits 0 in antigravity-targeted project', agyDoctor.status === 0);
|
|
192
|
+
} finally {
|
|
193
|
+
fs.rmSync(agyProj, { recursive: true, force: true });
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// -------------------------------------------------------------------------
|
|
197
|
+
// 3d. platform targeting (--platform opencode)
|
|
198
|
+
// -------------------------------------------------------------------------
|
|
199
|
+
const ocProj = fs.mkdtempSync(path.join(os.tmpdir(), 'devos-oc-'));
|
|
200
|
+
try {
|
|
201
|
+
const ocInit = runCli(['init', '--existing', '--stack', 'universal', '--platform', 'opencode', '--quiet'], ocProj);
|
|
202
|
+
check('devos init --platform opencode exits 0', ocInit.status === 0, ocInit.stderr);
|
|
203
|
+
check('OPENCODE.md created for opencode platform', fs.existsSync(path.join(ocProj, 'OPENCODE.md')));
|
|
204
|
+
check('.opencode/ rules created for opencode platform', fs.existsSync(path.join(ocProj, '.opencode', 'rules', 'devos-rules.md')));
|
|
205
|
+
check('.claude/ not created when targeting only opencode', !fs.existsSync(path.join(ocProj, '.claude')));
|
|
206
|
+
const ocDoctor = runCli(['doctor', '--quiet'], ocProj);
|
|
207
|
+
check('devos doctor exits 0 in opencode-targeted project', ocDoctor.status === 0);
|
|
208
|
+
} finally {
|
|
209
|
+
fs.rmSync(ocProj, { recursive: true, force: true });
|
|
210
|
+
}
|
|
108
211
|
} finally {
|
|
109
212
|
fs.rmSync(proj, { recursive: true, force: true });
|
|
110
213
|
fs.rmSync(empty, { recursive: true, force: true });
|