speexor 0.1.0 → 0.2.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/API-REFERENCE.md +96 -1
- package/ARCHITECTURE.md +84 -33
- package/BENCHMARKS.md +52 -0
- package/CHANGELOG.md +35 -4
- package/CODE-OF-CONDUCT.md +83 -83
- package/CONTRIBUTING.md +98 -98
- package/FAQ.md +105 -105
- package/GLOSSARY.md +33 -0
- package/LICENSE.md +21 -21
- package/PUBLISH.md +77 -77
- package/README.md +222 -8
- package/REFACTOR-LOG.md +40 -40
- package/ROADMAP.md +37 -15
- package/SECURITY-DEFAULTS.md +118 -0
- package/SECURITY.md +79 -79
- package/SUMMARY.md +31 -8
- package/TESTING.md +140 -140
- package/dist/{agent-5D3BVWNK.js → agent-D4BRWEOZ.js} +4 -4
- package/dist/agent-D4BRWEOZ.js.map +1 -0
- package/dist/{chunk-2F66BZYJ.js → chunk-2DX54KIM.js} +2 -2
- package/dist/chunk-2DX54KIM.js.map +1 -0
- package/dist/{chunk-B7WLHC4W.js → chunk-7VZHDGRQ.js} +2 -2
- package/dist/chunk-7VZHDGRQ.js.map +1 -0
- package/dist/{chunk-SXALZEOJ.js → chunk-AOFWQZWY.js} +2 -2
- package/dist/chunk-AOFWQZWY.js.map +1 -0
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.js +1 -1
- package/docs/SETUP.md +94 -94
- package/docs/TROUBLESHOOTING.md +113 -113
- package/docs/adr/0001-record-architecture-decisions.md +44 -0
- package/docs/adr/0002-plugin-architecture.md +53 -0
- package/docs/adr/0003-recursive-task-decomposition.md +57 -0
- package/docs/adr/0004-local-first-security.md +58 -0
- package/docs/adr/0005-data-directory-layout.md +69 -0
- package/examples/basic.yaml +61 -61
- package/package.json +103 -102
- package/schema/config.schema.json +119 -119
- package/speexor.config.yaml.example +30 -30
- package/dist/agent-5D3BVWNK.js.map +0 -1
- package/dist/chunk-2F66BZYJ.js.map +0 -1
- package/dist/chunk-B7WLHC4W.js.map +0 -1
- package/dist/chunk-SXALZEOJ.js.map +0 -1
package/CONTRIBUTING.md
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
# Contributing to Speexor
|
|
2
|
-
|
|
3
|
-
Thank you for considering contributing to Speexor! This document outlines our development workflow, standards, and expectations.
|
|
4
|
-
|
|
5
|
-
## Code of Conduct
|
|
6
|
-
|
|
7
|
-
All contributors must adhere to our [Code of Conduct](./CODE-OF-CONDUCT.md).
|
|
8
|
-
|
|
9
|
-
## Getting Started
|
|
10
|
-
|
|
11
|
-
### Prerequisites
|
|
12
|
-
- Node.js >= 18.0.0
|
|
13
|
-
- pnpm (recommended) or npm
|
|
14
|
-
- TypeScript basic knowledge
|
|
15
|
-
|
|
16
|
-
### Setup
|
|
17
|
-
```bash
|
|
18
|
-
# Clone the monorepo
|
|
19
|
-
git clone https://github.com/superdevids/speexjs.git
|
|
20
|
-
cd speexjs
|
|
21
|
-
|
|
22
|
-
# Install dependencies
|
|
23
|
-
pnpm install
|
|
24
|
-
|
|
25
|
-
# Navigate to speexor
|
|
26
|
-
cd packages/speexor
|
|
27
|
-
|
|
28
|
-
# Build the package
|
|
29
|
-
pnpm build
|
|
30
|
-
|
|
31
|
-
# Run tests
|
|
32
|
-
pnpm test
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Development Workflow
|
|
36
|
-
|
|
37
|
-
### Branch Naming
|
|
38
|
-
- `feat/<description>` — New features
|
|
39
|
-
- `fix/<description>` — Bug fixes
|
|
40
|
-
- `docs/<description>` — Documentation changes
|
|
41
|
-
- `refactor/<description>` — Code refactoring
|
|
42
|
-
- `chore/<description>` — Maintenance tasks
|
|
43
|
-
|
|
44
|
-
### Commit Messages
|
|
45
|
-
We follow conventional commits:
|
|
46
|
-
- `feat:` — New feature
|
|
47
|
-
- `fix:` — Bug fix
|
|
48
|
-
- `docs:` — Documentation
|
|
49
|
-
- `refactor:` — Code refactoring
|
|
50
|
-
- `test:` — Test changes
|
|
51
|
-
- `chore:` — Maintenance
|
|
52
|
-
|
|
53
|
-
### Before Submitting
|
|
54
|
-
1. Run `pnpm lint` — Biome will check code quality
|
|
55
|
-
2. Run `pnpm typecheck` — TypeScript will verify types
|
|
56
|
-
3. Run `pnpm test` — Vitest will run tests
|
|
57
|
-
4. Run `pnpm build` — tsup will build the package
|
|
58
|
-
|
|
59
|
-
## Code Standards
|
|
60
|
-
|
|
61
|
-
### TypeScript
|
|
62
|
-
- Strict mode enabled
|
|
63
|
-
- ESM only (`import`/`export`)
|
|
64
|
-
- No `any` types (strict mode)
|
|
65
|
-
- Use interfaces over type aliases for object types
|
|
66
|
-
- All public APIs must have JSDoc comments
|
|
67
|
-
|
|
68
|
-
### Plugin Architecture
|
|
69
|
-
When adding a new plugin:
|
|
70
|
-
1. Define interface in `src/core/types.ts` (if new slot) or implement existing interface
|
|
71
|
-
2. Create implementation in `src/plugins/<slot>/`
|
|
72
|
-
3. Add to `src/plugins/index.ts` `loadAllPlugins()` function
|
|
73
|
-
4. Write unit tests for the plugin contract
|
|
74
|
-
|
|
75
|
-
### Testing
|
|
76
|
-
- Unit tests with Vitest
|
|
77
|
-
- Integration tests for plugin contracts
|
|
78
|
-
- Aim for >80% coverage
|
|
79
|
-
- Tests go in `tests/` directory
|
|
80
|
-
|
|
81
|
-
### Documentation
|
|
82
|
-
- Keep README.md and docs up to date
|
|
83
|
-
- Document new features in the appropriate docs file
|
|
84
|
-
- Add JSDoc comments to public APIs
|
|
85
|
-
|
|
86
|
-
## Pull Request Process
|
|
87
|
-
1. Create a feature branch from `dev`
|
|
88
|
-
2. Implement your changes
|
|
89
|
-
3. Run the full CI suite locally
|
|
90
|
-
4. Push and create a PR against `dev`
|
|
91
|
-
5. Ensure CI passes on GitHub
|
|
92
|
-
6. Request review from maintainers
|
|
93
|
-
|
|
94
|
-
## Plugin Development Guide
|
|
95
|
-
...
|
|
96
|
-
|
|
97
|
-
## Questions?
|
|
98
|
-
Open an issue at https://github.com/superdevids/speexjs/issues
|
|
1
|
+
# Contributing to Speexor
|
|
2
|
+
|
|
3
|
+
Thank you for considering contributing to Speexor! This document outlines our development workflow, standards, and expectations.
|
|
4
|
+
|
|
5
|
+
## Code of Conduct
|
|
6
|
+
|
|
7
|
+
All contributors must adhere to our [Code of Conduct](./CODE-OF-CONDUCT.md).
|
|
8
|
+
|
|
9
|
+
## Getting Started
|
|
10
|
+
|
|
11
|
+
### Prerequisites
|
|
12
|
+
- Node.js >= 18.0.0
|
|
13
|
+
- pnpm (recommended) or npm
|
|
14
|
+
- TypeScript basic knowledge
|
|
15
|
+
|
|
16
|
+
### Setup
|
|
17
|
+
```bash
|
|
18
|
+
# Clone the monorepo
|
|
19
|
+
git clone https://github.com/superdevids/speexjs.git
|
|
20
|
+
cd speexjs
|
|
21
|
+
|
|
22
|
+
# Install dependencies
|
|
23
|
+
pnpm install
|
|
24
|
+
|
|
25
|
+
# Navigate to speexor
|
|
26
|
+
cd packages/speexor
|
|
27
|
+
|
|
28
|
+
# Build the package
|
|
29
|
+
pnpm build
|
|
30
|
+
|
|
31
|
+
# Run tests
|
|
32
|
+
pnpm test
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Development Workflow
|
|
36
|
+
|
|
37
|
+
### Branch Naming
|
|
38
|
+
- `feat/<description>` — New features
|
|
39
|
+
- `fix/<description>` — Bug fixes
|
|
40
|
+
- `docs/<description>` — Documentation changes
|
|
41
|
+
- `refactor/<description>` — Code refactoring
|
|
42
|
+
- `chore/<description>` — Maintenance tasks
|
|
43
|
+
|
|
44
|
+
### Commit Messages
|
|
45
|
+
We follow conventional commits:
|
|
46
|
+
- `feat:` — New feature
|
|
47
|
+
- `fix:` — Bug fix
|
|
48
|
+
- `docs:` — Documentation
|
|
49
|
+
- `refactor:` — Code refactoring
|
|
50
|
+
- `test:` — Test changes
|
|
51
|
+
- `chore:` — Maintenance
|
|
52
|
+
|
|
53
|
+
### Before Submitting
|
|
54
|
+
1. Run `pnpm lint` — Biome will check code quality
|
|
55
|
+
2. Run `pnpm typecheck` — TypeScript will verify types
|
|
56
|
+
3. Run `pnpm test` — Vitest will run tests
|
|
57
|
+
4. Run `pnpm build` — tsup will build the package
|
|
58
|
+
|
|
59
|
+
## Code Standards
|
|
60
|
+
|
|
61
|
+
### TypeScript
|
|
62
|
+
- Strict mode enabled
|
|
63
|
+
- ESM only (`import`/`export`)
|
|
64
|
+
- No `any` types (strict mode)
|
|
65
|
+
- Use interfaces over type aliases for object types
|
|
66
|
+
- All public APIs must have JSDoc comments
|
|
67
|
+
|
|
68
|
+
### Plugin Architecture
|
|
69
|
+
When adding a new plugin:
|
|
70
|
+
1. Define interface in `src/core/types.ts` (if new slot) or implement existing interface
|
|
71
|
+
2. Create implementation in `src/plugins/<slot>/`
|
|
72
|
+
3. Add to `src/plugins/index.ts` `loadAllPlugins()` function
|
|
73
|
+
4. Write unit tests for the plugin contract
|
|
74
|
+
|
|
75
|
+
### Testing
|
|
76
|
+
- Unit tests with Vitest
|
|
77
|
+
- Integration tests for plugin contracts
|
|
78
|
+
- Aim for >80% coverage
|
|
79
|
+
- Tests go in `tests/` directory
|
|
80
|
+
|
|
81
|
+
### Documentation
|
|
82
|
+
- Keep README.md and docs up to date
|
|
83
|
+
- Document new features in the appropriate docs file
|
|
84
|
+
- Add JSDoc comments to public APIs
|
|
85
|
+
|
|
86
|
+
## Pull Request Process
|
|
87
|
+
1. Create a feature branch from `dev`
|
|
88
|
+
2. Implement your changes
|
|
89
|
+
3. Run the full CI suite locally
|
|
90
|
+
4. Push and create a PR against `dev`
|
|
91
|
+
5. Ensure CI passes on GitHub
|
|
92
|
+
6. Request review from maintainers
|
|
93
|
+
|
|
94
|
+
## Plugin Development Guide
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
## Questions?
|
|
98
|
+
Open an issue at https://github.com/superdevids/speexjs/issues
|
package/FAQ.md
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
# Frequently Asked Questions
|
|
2
|
-
|
|
3
|
-
## General
|
|
4
|
-
|
|
5
|
-
### What is Speexor?
|
|
6
|
-
Speexor is an Agent Orchestrator that spawns and manages multiple AI coding agents in parallel across one or more git repositories. Each agent runs in an isolated git worktree, handles one task autonomously, and can automatically respond to CI failures and PR comments.
|
|
7
|
-
|
|
8
|
-
### Why not just use AgentWrapper (AO)?
|
|
9
|
-
Speexor was inspired by AO but rebuilt to be:
|
|
10
|
-
- **Agent-agnostic** — not tied to Claude Code; supports OpenCode, Aider, Codex equally
|
|
11
|
-
- **Multi-provider** — route tasks to different AI providers per project
|
|
12
|
-
- **Native OpenCode support** — first-class integration with your vibe coding workflow
|
|
13
|
-
- **Built for solo devs** — dashboard, auto-reactions, cost tracking out of the box
|
|
14
|
-
|
|
15
|
-
### Is Speexor production-ready?
|
|
16
|
-
Version 0.1.0 is a foundation release. The core architecture is solid, but we recommend:
|
|
17
|
-
- Testing with non-critical repositories first
|
|
18
|
-
- Keeping auto-merge disabled (`approved-and-green.auto: false`)
|
|
19
|
-
- Reviewing agent output before merging PRs
|
|
20
|
-
|
|
21
|
-
## Installation & Setup
|
|
22
|
-
|
|
23
|
-
### What are the prerequisites?
|
|
24
|
-
- Node.js >= 18.0.0
|
|
25
|
-
- Git >= 2.30 (for worktree support)
|
|
26
|
-
- GitHub CLI (`gh`) — for GitHub integration
|
|
27
|
-
- tmux >= 3.0 — for tmux runtime (Unix only)
|
|
28
|
-
- At least one AI coding agent CLI (OpenCode, Claude Code, Aider, or Codex)
|
|
29
|
-
|
|
30
|
-
### How do I install Speexor?
|
|
31
|
-
```bash
|
|
32
|
-
npm install -g
|
|
33
|
-
# or
|
|
34
|
-
pnpm add -g
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### Can I use Speexor on Windows?
|
|
38
|
-
Yes! On Windows, the Process runtime is used automatically (tmux is not available). All features work except live terminal streaming in the dashboard.
|
|
39
|
-
|
|
40
|
-
## Configuration
|
|
41
|
-
|
|
42
|
-
### Where is the config file?
|
|
43
|
-
Speexor looks for `speexor.config.yaml` in the current directory. Run `speexor start <repo-url>` to generate one automatically.
|
|
44
|
-
|
|
45
|
-
### Can I manage multiple projects?
|
|
46
|
-
Yes. The config supports multiple projects under the `projects` array. Each project can have its own provider routing and reaction rules.
|
|
47
|
-
|
|
48
|
-
### What happens if CI fails?
|
|
49
|
-
By default, Speexor automatically spawns a fix agent when CI fails (up to 3 retries). If it still fails after 3 retries, it escalates for human attention.
|
|
50
|
-
|
|
51
|
-
## Usage
|
|
52
|
-
|
|
53
|
-
### How do I spawn an agent?
|
|
54
|
-
```bash
|
|
55
|
-
speexor agent spawn --task 42 --agent opencode
|
|
56
|
-
```
|
|
57
|
-
This creates a worktree, starts a runtime session, and launches the agent.
|
|
58
|
-
|
|
59
|
-
### How do I check agent status?
|
|
60
|
-
```bash
|
|
61
|
-
speexor list
|
|
62
|
-
# Or open the dashboard at http://localhost:3000
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Can I run multiple agents in parallel?
|
|
66
|
-
Yes. Each agent gets its own git worktree and runtime session. Configure `concurrentLimit` in the project config to limit parallel agents.
|
|
67
|
-
|
|
68
|
-
### How do I stop an agent?
|
|
69
|
-
```bash
|
|
70
|
-
speexor stop <session-id>
|
|
71
|
-
```
|
|
72
|
-
This kills the agent process, cleans up the worktree, and removes the session.
|
|
73
|
-
|
|
74
|
-
## Troubleshooting
|
|
75
|
-
|
|
76
|
-
### "speexor.config.yaml not found"
|
|
77
|
-
Run `speexor start <repo-url>` first to initialize the project, or manually create the config file.
|
|
78
|
-
|
|
79
|
-
### "tmux not available"
|
|
80
|
-
Install tmux (`brew install tmux` on macOS, `sudo apt install tmux` on Linux). On Windows, Speexor uses Process runtime automatically.
|
|
81
|
-
|
|
82
|
-
### "GitHub CLI (gh) not found"
|
|
83
|
-
Install from https://cli.github.com/ and authenticate with `gh auth login`.
|
|
84
|
-
|
|
85
|
-
### Dashboard not loading?
|
|
86
|
-
Check if port 3000 is available. Use `speexor start --port 4000` to use a different port.
|
|
87
|
-
|
|
88
|
-
## Development
|
|
89
|
-
|
|
90
|
-
### How do I add a new agent adapter?
|
|
91
|
-
1. Create a file in `src/plugins/agent/`
|
|
92
|
-
2. Implement the `AgentPlugin` interface
|
|
93
|
-
3. Add it to `src/plugins/index.ts` `loadAllPlugins()`
|
|
94
|
-
|
|
95
|
-
### How do I create a new plugin?
|
|
96
|
-
1. Define the interface in `src/core/types.ts` (if new slot)
|
|
97
|
-
2. Create the implementation in `src/plugins/<slot>/`
|
|
98
|
-
3. Add to plugin loader
|
|
99
|
-
|
|
100
|
-
### How do I run tests?
|
|
101
|
-
```bash
|
|
102
|
-
pnpm test # Run all tests
|
|
103
|
-
pnpm test:watch # Watch mode
|
|
104
|
-
pnpm test:coverage # With coverage
|
|
105
|
-
```
|
|
1
|
+
# Frequently Asked Questions
|
|
2
|
+
|
|
3
|
+
## General
|
|
4
|
+
|
|
5
|
+
### What is Speexor?
|
|
6
|
+
Speexor is an Agent Orchestrator that spawns and manages multiple AI coding agents in parallel across one or more git repositories. Each agent runs in an isolated git worktree, handles one task autonomously, and can automatically respond to CI failures and PR comments.
|
|
7
|
+
|
|
8
|
+
### Why not just use AgentWrapper (AO)?
|
|
9
|
+
Speexor was inspired by AO but rebuilt to be:
|
|
10
|
+
- **Agent-agnostic** — not tied to Claude Code; supports OpenCode, Aider, Codex equally
|
|
11
|
+
- **Multi-provider** — route tasks to different AI providers per project
|
|
12
|
+
- **Native OpenCode support** — first-class integration with your vibe coding workflow
|
|
13
|
+
- **Built for solo devs** — dashboard, auto-reactions, cost tracking out of the box
|
|
14
|
+
|
|
15
|
+
### Is Speexor production-ready?
|
|
16
|
+
Version 0.1.0 is a foundation release. The core architecture is solid, but we recommend:
|
|
17
|
+
- Testing with non-critical repositories first
|
|
18
|
+
- Keeping auto-merge disabled (`approved-and-green.auto: false`)
|
|
19
|
+
- Reviewing agent output before merging PRs
|
|
20
|
+
|
|
21
|
+
## Installation & Setup
|
|
22
|
+
|
|
23
|
+
### What are the prerequisites?
|
|
24
|
+
- Node.js >= 18.0.0
|
|
25
|
+
- Git >= 2.30 (for worktree support)
|
|
26
|
+
- GitHub CLI (`gh`) — for GitHub integration
|
|
27
|
+
- tmux >= 3.0 — for tmux runtime (Unix only)
|
|
28
|
+
- At least one AI coding agent CLI (OpenCode, Claude Code, Aider, or Codex)
|
|
29
|
+
|
|
30
|
+
### How do I install Speexor?
|
|
31
|
+
```bash
|
|
32
|
+
npm install -g speexor
|
|
33
|
+
# or
|
|
34
|
+
pnpm add -g speexor
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Can I use Speexor on Windows?
|
|
38
|
+
Yes! On Windows, the Process runtime is used automatically (tmux is not available). All features work except live terminal streaming in the dashboard.
|
|
39
|
+
|
|
40
|
+
## Configuration
|
|
41
|
+
|
|
42
|
+
### Where is the config file?
|
|
43
|
+
Speexor looks for `speexor.config.yaml` in the current directory. Run `speexor start <repo-url>` to generate one automatically.
|
|
44
|
+
|
|
45
|
+
### Can I manage multiple projects?
|
|
46
|
+
Yes. The config supports multiple projects under the `projects` array. Each project can have its own provider routing and reaction rules.
|
|
47
|
+
|
|
48
|
+
### What happens if CI fails?
|
|
49
|
+
By default, Speexor automatically spawns a fix agent when CI fails (up to 3 retries). If it still fails after 3 retries, it escalates for human attention.
|
|
50
|
+
|
|
51
|
+
## Usage
|
|
52
|
+
|
|
53
|
+
### How do I spawn an agent?
|
|
54
|
+
```bash
|
|
55
|
+
speexor agent spawn --task 42 --agent opencode
|
|
56
|
+
```
|
|
57
|
+
This creates a worktree, starts a runtime session, and launches the agent.
|
|
58
|
+
|
|
59
|
+
### How do I check agent status?
|
|
60
|
+
```bash
|
|
61
|
+
speexor list
|
|
62
|
+
# Or open the dashboard at http://localhost:3000
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Can I run multiple agents in parallel?
|
|
66
|
+
Yes. Each agent gets its own git worktree and runtime session. Configure `concurrentLimit` in the project config to limit parallel agents.
|
|
67
|
+
|
|
68
|
+
### How do I stop an agent?
|
|
69
|
+
```bash
|
|
70
|
+
speexor stop <session-id>
|
|
71
|
+
```
|
|
72
|
+
This kills the agent process, cleans up the worktree, and removes the session.
|
|
73
|
+
|
|
74
|
+
## Troubleshooting
|
|
75
|
+
|
|
76
|
+
### "speexor.config.yaml not found"
|
|
77
|
+
Run `speexor start <repo-url>` first to initialize the project, or manually create the config file.
|
|
78
|
+
|
|
79
|
+
### "tmux not available"
|
|
80
|
+
Install tmux (`brew install tmux` on macOS, `sudo apt install tmux` on Linux). On Windows, Speexor uses Process runtime automatically.
|
|
81
|
+
|
|
82
|
+
### "GitHub CLI (gh) not found"
|
|
83
|
+
Install from https://cli.github.com/ and authenticate with `gh auth login`.
|
|
84
|
+
|
|
85
|
+
### Dashboard not loading?
|
|
86
|
+
Check if port 3000 is available. Use `speexor start --port 4000` to use a different port.
|
|
87
|
+
|
|
88
|
+
## Development
|
|
89
|
+
|
|
90
|
+
### How do I add a new agent adapter?
|
|
91
|
+
1. Create a file in `src/plugins/agent/`
|
|
92
|
+
2. Implement the `AgentPlugin` interface
|
|
93
|
+
3. Add it to `src/plugins/index.ts` `loadAllPlugins()`
|
|
94
|
+
|
|
95
|
+
### How do I create a new plugin?
|
|
96
|
+
1. Define the interface in `src/core/types.ts` (if new slot)
|
|
97
|
+
2. Create the implementation in `src/plugins/<slot>/`
|
|
98
|
+
3. Add to plugin loader
|
|
99
|
+
|
|
100
|
+
### How do I run tests?
|
|
101
|
+
```bash
|
|
102
|
+
pnpm test # Run all tests
|
|
103
|
+
pnpm test:watch # Watch mode
|
|
104
|
+
pnpm test:coverage # With coverage
|
|
105
|
+
```
|
package/GLOSSARY.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Glossary
|
|
2
|
+
|
|
3
|
+
> Canonical term definitions for Speexor. All terms from v4 §4 and v5 §6.
|
|
4
|
+
|
|
5
|
+
| Term | Definition | Not to be confused with |
|
|
6
|
+
|------|-----------|------------------------|
|
|
7
|
+
| **Agent** | A single AI coding agent instance (OpenCode, Claude Code, Aider, Codex) spawned by the orchestrator to execute a task. | **Subagent** (child of an Agent), **Agent Backend** (the CLI/provider binary) |
|
|
8
|
+
| **Agent Backend** | The underlying CLI binary or API that an Agent adapter wraps — e.g., `opencode`, `claude-code`, `aider`, `codex`. | **Agent** (the managed instance), **Provider** (the LLM model behind the CLI) |
|
|
9
|
+
| **Approvals** | The single unified dashboard panel covering both Task Origin Gate (proposed tasks) and Action Risk Gate (high-stakes actions), per FR-87. Each item is tagged with its gate type, countdown timer, and default action. | **Decision Log** (read-only history), **Review Queue** (deprecated name) |
|
|
10
|
+
| **Atomic Unit of Work** | The smallest in-progress chunk of an agent's current action (e.g., finishing one function edit, one file write, one commit) that must complete before a Graceful Handoff (pause/redirect/interrupt) takes effect. | **Task Node** (a full unit of decomposition), **Checkpoint** (saved state boundary) |
|
|
11
|
+
| **Decision Log** | The read-only, searchable history of all autonomous decisions — both auto-executed and approved/rejected ones — including confidence scores and reasoning. Previously called "Decision Journal" / "Review Queue." | **Approvals** (actionable items), **Session Log** (raw agent I/O) |
|
|
12
|
+
| **EventBus** | An EventEmitter3 wrapper through which all inter-module communication flows. Plugins and dashboard components subscribe to events without importing each other. | **Direct method call** (the alternative pattern we avoid for loose coupling) |
|
|
13
|
+
| **Extension** | A third-party add-on installed via the Marketplace, declared by a `speexor.extension.json` manifest. Extensions can be skills (prompt/logic bundles), plugins (runtime adapters), or UI panels. | **Plugin** (built-in first-party adapter), **Skill** (a type of extension, not the container) |
|
|
14
|
+
| **Graceful Handoff** | The protocol whereby an in-progress agent completes its current Atomic Unit of Work before pausing, redirecting, or being interrupted — ensuring no half-finished file edits. | **Hard kill** (immediate termination, used only for unresponsive agents) |
|
|
15
|
+
| **MCP Server** | A Model Context Protocol server that provides tools, resources, and prompts to AI agents. Speexor extensions can expose MCP servers that agents discover and invoke at runtime. | **Plugin** (internal to Speexor), **Agent Backend** (the CLI being orchestrated) |
|
|
16
|
+
| **Notifier Plugin** | One of the 7 plugin slots. Sends desktop notifications (macOS, Windows, Linux) for events like `approved-and-green` or stuck agents. | **Tracker Plugin** (fetches issues), **SCM Plugin** (git/PR operations) |
|
|
17
|
+
| **Orchestrator** | The central Speexor lifecycle that manages plugin registration, session state, agent spawning, and the EventBus. The orchestrator does not execute code — it coordinates. | **Agent** (executes code), **Scheduler** (decides which agent runs when) |
|
|
18
|
+
| **Plugin** | A built-in first-party adapter implementing one of the 7 plugin slot interfaces (agent, runtime, workspace, tracker, scm, notifier, terminal). | **Extension** (third-party, Marketplace-installed), **MCP Server** (external protocol) |
|
|
19
|
+
| **Plugin Slot** | One of 7 typed interfaces (`AgentPlugin`, `RuntimePlugin`, `WorkspacePlugin`, `TrackerPlugin`, `SCMPlugin`, `NotifierPlugin`, `TerminalPlugin`) that plugins implement. | **Plugin** (the instance), **Extension** (third-party add-on) |
|
|
20
|
+
| **Reaction Engine** | Subsystem that listens to Tracker/SCM events (ci-failed, changes-requested, approved-and-green) and executes configurable automated responses (fix, notify, escalate, skip) with retry tracking. | **EventBus** (transport layer), **Governance Engine** (approval gating) |
|
|
21
|
+
| **Runtime Plugin** | One of the 7 plugin slots. Creates/destroys terminal sessions for agent execution. Implementations: tmux (Unix) and Process (Windows). | **Agent Plugin** (spawns the AI), **Workspace Plugin** (manages worktrees) |
|
|
22
|
+
| **SCM Plugin** | One of the 7 plugin slots. Handles git operations: branch creation, commit/push, PR creation, CI status checks. | **Tracker Plugin** (issue management), **Workspace Plugin** (worktree management) |
|
|
23
|
+
| **Session** | A running instance of an agent, bound to a specific worktree and runtime session. Created by `spawnAgent()`, tracked in the in-memory session map and persisted in `state.json`. | **Agent** (the CLI binary), **Task** (what the agent is working on) |
|
|
24
|
+
| **Skill** | An extension type (`type: "skill"` in `speexor.extension.json`) that bundles prompt templates and logic for a specific capability (e.g., code review, test writing). | **Plugin** (runtime adapter), **Extension** (the container format) |
|
|
25
|
+
| **Subagent** | An agent spawned by another agent during recursive task decomposition. Operates in its own worktree forked from the parent agent's branch at a pinned commit hash (per Worktree Hierarchy Protocol). | **Agent** (top-level), **Worker Agent** (generic term) |
|
|
26
|
+
| **Task Graph** | A directed acyclic graph (DAG) representing decomposed work items. Each Task Node has dependencies (edges), and nodes with no inter-dependency execute in parallel. | **Task List** (flat, no dependency ordering) |
|
|
27
|
+
| **Task Node** | A single unit of decomposed work within the Task Graph. Has a description, depth, status, assigned agent, and optional parent task ID. | **Atomic Unit of Work** (runtime granularity), **Issue** (from tracker, mapped to a root task) |
|
|
28
|
+
| **Task Origin Gate** | Axis 1 of the unified Approval Model (FR-86). Applies once when a task is first proposed by an agent (not the user). Governed by `governance.autoApproveProposedTasks`. | **Action Risk Gate** (Axis 2 — runtime action gating) |
|
|
29
|
+
| **Action Risk Gate** | Axis 2 of the unified Approval Model (FR-86). Applies every time any task executes a high-stakes action. Governed by `riskPolicy`. | **Task Origin Gate** (Axis 1 — task proposal gating) |
|
|
30
|
+
| **Terminal Plugin** | One of the 7 plugin slots. Provides interactive terminal attach/detach for live session viewing in the dashboard. | **Runtime Plugin** (creates the session), **Dashboard** (renders the terminal) |
|
|
31
|
+
| **Tracker Plugin** | One of the 7 plugin slots. Fetches issues and subscribes to tracker events (issue-opened, issue-closed, CI events). | **SCM Plugin** (PR/CI operations), **Notifier Plugin** (desktop alerts) |
|
|
32
|
+
| **Worktree Hierarchy Protocol** | The formal protocol (FR-88) for subagent branch management: subagent worktrees are pinned to the parent's spawn-time commit hash, merges are serialized (never concurrent), and merge conflicts escalate to Axis-2 approval. | **Git worktree** (the underlying git primitive), **Workspace Plugin** (manages worktrees) |
|
|
33
|
+
| **Workspace Plugin** | One of the 7 plugin slots. Creates and removes isolated git worktrees for each agent task. | **Runtime Plugin** (terminal session), **SCM Plugin** (branch/PR operations) |
|
package/LICENSE.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Aditya (@superdevids)
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Aditya (@superdevids)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/PUBLISH.md
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
# Publishing Speexor
|
|
2
|
-
|
|
3
|
-
This document describes the process for publishing
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
- npm account with access to `@speexjs` organization
|
|
7
|
-
- GitHub repository write access
|
|
8
|
-
- Clean working tree (no uncommitted changes)
|
|
9
|
-
|
|
10
|
-
## Version Bumping
|
|
11
|
-
|
|
12
|
-
We follow [Semantic Versioning](https://semver.org/):
|
|
13
|
-
- **Patch** (`0.1.0` → `0.1.1`): Bug fixes, minor changes
|
|
14
|
-
- **Minor** (`0.1.0` → `0.2.0`): New features, backwards compatible
|
|
15
|
-
- **Major** (`0.1.0` → `1.0.0`): Breaking changes
|
|
16
|
-
|
|
17
|
-
## Pre-Publish Checklist
|
|
18
|
-
|
|
19
|
-
- [ ] All tests pass: `pnpm test`
|
|
20
|
-
- [ ] TypeScript compiles: `pnpm typecheck`
|
|
21
|
-
- [ ] Linter passes: `pnpm lint`
|
|
22
|
-
- [ ] Build succeeds: `pnpm build`
|
|
23
|
-
- [ ] CHANGELOG.md updated
|
|
24
|
-
- [ ] Version bumped in package.json
|
|
25
|
-
- [ ] Git tag created
|
|
26
|
-
- [ ] Docs updated (README, architecture, etc.)
|
|
27
|
-
|
|
28
|
-
## Publishing Steps
|
|
29
|
-
|
|
30
|
-
### 1. Update Version
|
|
31
|
-
```bash
|
|
32
|
-
# From the speexor package directory
|
|
33
|
-
pnpm version patch # or minor, or major
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 2. Update Changelog
|
|
37
|
-
Update `CHANGELOG.md` with the new version, date, and changes.
|
|
38
|
-
|
|
39
|
-
### 3. Build
|
|
40
|
-
```bash
|
|
41
|
-
pnpm build
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 4. Publish to npm
|
|
45
|
-
```bash
|
|
46
|
-
pnpm publish --access public
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### 5. Tag and Push
|
|
50
|
-
```bash
|
|
51
|
-
git tag speexor-v0.1.0
|
|
52
|
-
git push --tags
|
|
53
|
-
git push origin main
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 6. Create GitHub Release
|
|
57
|
-
- Go to https://github.com/superdevids/speexjs/releases
|
|
58
|
-
- Draft a new release
|
|
59
|
-
- Use the git tag as version
|
|
60
|
-
- Copy changelog entry as release notes
|
|
61
|
-
- Attach any relevant binaries
|
|
62
|
-
|
|
63
|
-
## npm Package Contents
|
|
64
|
-
|
|
65
|
-
The published package includes:
|
|
66
|
-
- `dist/` — Compiled ESM + type declarations
|
|
67
|
-
- `schema/` — JSON Schema for config
|
|
68
|
-
- `examples/` — Example configurations
|
|
69
|
-
- `speexor.config.yaml.example` — Config template
|
|
70
|
-
- `*.md` — Documentation files
|
|
71
|
-
|
|
72
|
-
## CI/CD
|
|
73
|
-
|
|
74
|
-
Publishing can also be automated via GitHub Actions:
|
|
75
|
-
- Trigger: pushing a tag matching `speexor-v*`
|
|
76
|
-
- Steps: install → build → test → publish
|
|
77
|
-
- Secrets: `NPM_TOKEN` must be configured in GitHub repository secrets
|
|
1
|
+
# Publishing Speexor
|
|
2
|
+
|
|
3
|
+
This document describes the process for publishing `speexor` to npm.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
- npm account with access to `@speexjs` organization
|
|
7
|
+
- GitHub repository write access
|
|
8
|
+
- Clean working tree (no uncommitted changes)
|
|
9
|
+
|
|
10
|
+
## Version Bumping
|
|
11
|
+
|
|
12
|
+
We follow [Semantic Versioning](https://semver.org/):
|
|
13
|
+
- **Patch** (`0.1.0` → `0.1.1`): Bug fixes, minor changes
|
|
14
|
+
- **Minor** (`0.1.0` → `0.2.0`): New features, backwards compatible
|
|
15
|
+
- **Major** (`0.1.0` → `1.0.0`): Breaking changes
|
|
16
|
+
|
|
17
|
+
## Pre-Publish Checklist
|
|
18
|
+
|
|
19
|
+
- [ ] All tests pass: `pnpm test`
|
|
20
|
+
- [ ] TypeScript compiles: `pnpm typecheck`
|
|
21
|
+
- [ ] Linter passes: `pnpm lint`
|
|
22
|
+
- [ ] Build succeeds: `pnpm build`
|
|
23
|
+
- [ ] CHANGELOG.md updated
|
|
24
|
+
- [ ] Version bumped in package.json
|
|
25
|
+
- [ ] Git tag created
|
|
26
|
+
- [ ] Docs updated (README, architecture, etc.)
|
|
27
|
+
|
|
28
|
+
## Publishing Steps
|
|
29
|
+
|
|
30
|
+
### 1. Update Version
|
|
31
|
+
```bash
|
|
32
|
+
# From the speexor package directory
|
|
33
|
+
pnpm version patch # or minor, or major
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. Update Changelog
|
|
37
|
+
Update `CHANGELOG.md` with the new version, date, and changes.
|
|
38
|
+
|
|
39
|
+
### 3. Build
|
|
40
|
+
```bash
|
|
41
|
+
pnpm build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 4. Publish to npm
|
|
45
|
+
```bash
|
|
46
|
+
pnpm publish --access public
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 5. Tag and Push
|
|
50
|
+
```bash
|
|
51
|
+
git tag speexor-v0.1.0
|
|
52
|
+
git push --tags
|
|
53
|
+
git push origin main
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 6. Create GitHub Release
|
|
57
|
+
- Go to https://github.com/superdevids/speexjs/releases
|
|
58
|
+
- Draft a new release
|
|
59
|
+
- Use the git tag as version
|
|
60
|
+
- Copy changelog entry as release notes
|
|
61
|
+
- Attach any relevant binaries
|
|
62
|
+
|
|
63
|
+
## npm Package Contents
|
|
64
|
+
|
|
65
|
+
The published package includes:
|
|
66
|
+
- `dist/` — Compiled ESM + type declarations
|
|
67
|
+
- `schema/` — JSON Schema for config
|
|
68
|
+
- `examples/` — Example configurations
|
|
69
|
+
- `speexor.config.yaml.example` — Config template
|
|
70
|
+
- `*.md` — Documentation files
|
|
71
|
+
|
|
72
|
+
## CI/CD
|
|
73
|
+
|
|
74
|
+
Publishing can also be automated via GitHub Actions:
|
|
75
|
+
- Trigger: pushing a tag matching `speexor-v*`
|
|
76
|
+
- Steps: install → build → test → publish
|
|
77
|
+
- Secrets: `NPM_TOKEN` must be configured in GitHub repository secrets
|