@amsterdamdatalabs/enact-extensions 0.1.1 → 0.1.3
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/README.md +4 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +82 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +187 -35
- package/dist/install.js.map +1 -1
- package/dist/internal/codex.d.ts.map +1 -1
- package/dist/internal/codex.js +7 -1
- package/dist/internal/codex.js.map +1 -1
- package/dist/internal/platform.d.ts +8 -0
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +46 -2
- package/dist/internal/platform.js.map +1 -1
- package/dist/provision.d.ts +30 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +202 -0
- package/dist/provision.js.map +1 -0
- package/dist/validate/index.d.ts +23 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +80 -0
- package/dist/validate/index.js.map +1 -1
- package/extensions/enact-context/.agents/plugin.json +40 -0
- package/extensions/enact-context/.mcp.json +8 -0
- package/extensions/enact-context/README.md +25 -0
- package/extensions/enact-context/assets/icon.png +0 -0
- package/extensions/enact-context/assets/logo.png +0 -0
- package/extensions/enact-context/hooks/hooks.json +115 -0
- package/extensions/enact-context/skills/enact-context/SKILL.md +149 -0
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +69 -0
- package/extensions/enact-factory/.agents/plugin.json +42 -0
- package/extensions/enact-factory/.mcp.json +8 -0
- package/extensions/enact-factory/assets/icon.png +0 -0
- package/extensions/enact-factory/assets/logo.png +0 -0
- package/extensions/enact-factory/hooks/user-prompt-submit.mjs +67 -0
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +167 -0
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +22 -0
- package/extensions/enact-operator/.agents/plugin.json +57 -0
- package/extensions/enact-operator/.app.json +3 -0
- package/extensions/enact-operator/.mcp.json +10 -0
- package/extensions/enact-operator/_taxonomy.md +86 -0
- package/extensions/enact-operator/agents/README.md +5 -0
- package/extensions/enact-operator/agents/architect.toml +25 -0
- package/extensions/enact-operator/agents/code-reviewer.toml +24 -0
- package/extensions/enact-operator/agents/critic.toml +30 -0
- package/extensions/enact-operator/agents/executor.toml +24 -0
- package/extensions/enact-operator/agents/explore.toml +23 -0
- package/extensions/enact-operator/agents/planner.toml +24 -0
- package/extensions/enact-operator/agents/verifier.toml +24 -0
- package/extensions/enact-operator/assets/icon.png +0 -0
- package/extensions/enact-operator/assets/logo.png +0 -0
- package/extensions/enact-operator/commands/doctor.md +39 -0
- package/extensions/enact-operator/commands/setup.md +51 -0
- package/extensions/enact-operator/hooks/hooks.json +146 -0
- package/extensions/enact-operator/skills/_variants.md +44 -0
- package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +50 -0
- package/extensions/enact-operator/skills/analyze/SKILL.md +91 -0
- package/extensions/enact-operator/skills/ask/SKILL.md +47 -0
- package/extensions/enact-operator/skills/autopilot/SKILL.md +170 -0
- package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +79 -0
- package/extensions/enact-operator/skills/cancel/SKILL.md +99 -0
- package/extensions/enact-operator/skills/configure-notifications/SKILL.md +77 -0
- package/extensions/enact-operator/skills/deep-interview/SKILL.md +80 -0
- package/extensions/enact-operator/skills/doctor/SKILL.md +48 -0
- package/extensions/enact-operator/skills/hud/SKILL.md +49 -0
- package/extensions/enact-operator/skills/hyperplan/SKILL.md +47 -0
- package/extensions/enact-operator/skills/plan/SKILL.md +78 -0
- package/extensions/enact-operator/skills/ralph/SKILL.md +201 -0
- package/extensions/enact-operator/skills/ralph/gemini.md +18 -0
- package/extensions/enact-operator/skills/ralplan/SKILL.md +151 -0
- package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +45 -0
- package/extensions/enact-operator/skills/research/SKILL.md +74 -0
- package/extensions/enact-operator/skills/review/SKILL.md +58 -0
- package/extensions/enact-operator/skills/security-research/SKILL.md +54 -0
- package/extensions/enact-operator/skills/setup/SKILL.md +91 -0
- package/extensions/enact-operator/skills/setup/scripts/install.sh +50 -0
- package/extensions/enact-operator/skills/skill/SKILL.md +82 -0
- package/extensions/enact-operator/skills/tdd/SKILL.md +59 -0
- package/extensions/enact-operator/skills/team/SKILL.md +199 -0
- package/extensions/enact-operator/skills/trace/SKILL.md +41 -0
- package/extensions/enact-operator/skills/ultragoal/SKILL.md +99 -0
- package/extensions/enact-operator/skills/ultraqa/SKILL.md +113 -0
- package/extensions/enact-operator/skills/ultrawork/SKILL.md +145 -0
- package/extensions/enact-operator/skills/ultrawork/planner.md +28 -0
- package/extensions/enact-operator/skills/wiki/SKILL.md +41 -0
- package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +51 -0
- package/extensions/enact-wiki/.agents/plugin.json +42 -0
- package/extensions/enact-wiki/.mcp.json +15 -0
- package/extensions/enact-wiki/README.md +44 -0
- package/extensions/enact-wiki/assets/icon.png +0 -0
- package/extensions/enact-wiki/assets/logo.png +0 -0
- package/extensions/enact-wiki/skills/document-parser/SKILL.md +17 -0
- package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +60 -0
- package/extensions/enact-wiki/skills/document-parser/skill.json +9 -0
- package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +30 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +62 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +34 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/query.md +59 -0
- package/extensions/enact-wiki/skills/search-lab/SKILL.md +57 -0
- package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +23 -0
- package/package.json +1 -1
- package/scripts/enact-extensions.mjs +79 -12
- package/scripts/lib/hooks.mjs +352 -0
- package/scripts/lib/ledger.mjs +4 -3
- package/scripts/lib/provision-mcp.mjs +12 -365
- package/scripts/lib/run-install.mjs +87 -5
- package/scripts/lib/run-prune.mjs +73 -0
- package/scripts/lib/run-sync.mjs +9 -1
- package/scripts/lib/run-uninstall.mjs +26 -2
- package/scripts/lib/run-validate.mjs +10 -1
- package/scripts/lib/serve.mjs +19 -1
- package/scripts/version-bump.sh +463 -0
- package/spec/codex.json +1 -11
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-strategy
|
|
3
|
+
description: >
|
|
4
|
+
Defines when and how to write tests in the enact-gateway codebase. Trigger
|
|
5
|
+
keywords: testing, write a test, TDD, bug fix, regression test, live test,
|
|
6
|
+
e2e, integration test, test harness, evidence, red-green, scenario, validate.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# testing-strategy
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Enforce a consistent, lightweight approach across the three testing modes used
|
|
14
|
+
in `enact-gateway`. The mode is determined by the behavior under test — not by
|
|
15
|
+
preference. Pick once, follow the contract for that mode.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Decision Rule
|
|
20
|
+
|
|
21
|
+
| Situation | Mode |
|
|
22
|
+
|-----------|------|
|
|
23
|
+
| Pure function or isolated logic | Mode 0 — plain unit test |
|
|
24
|
+
| Bug fix (any scope) | Mode 1 — TDD + `_evidence` |
|
|
25
|
+
| Bug fix where behavior is runtime / live / cross-service (gateway → observe / iggy / questdb) | Mode 1 RED→GREEN + the regression test is a Mode-2 harness scenario |
|
|
26
|
+
| New live-provider, cross-service, or e2e behavior | Mode 2 — harness scenario under `tests/integration/` or `tests/e2e/` |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Mode 0 — Plain Unit Tests
|
|
31
|
+
|
|
32
|
+
Use for: pure functions, simple transformations, isolated module logic.
|
|
33
|
+
|
|
34
|
+
- File location: co-located with the source file, e.g. `src/foo/bar.spec.ts`.
|
|
35
|
+
- Stack: Jest + ts-jest (resolved from `packages/backend`).
|
|
36
|
+
- No harness ceremony. No fixtures directory. No `output/` directory.
|
|
37
|
+
- Run: `npm run test --workspace=packages/backend` (or `npx jest <pattern>`).
|
|
38
|
+
|
|
39
|
+
Do NOT force the harness onto plain unit tests. Co-located `.spec.ts` is
|
|
40
|
+
sufficient and preferred.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Mode 1 — Bug Fix: TDD with Captured `_evidence`
|
|
45
|
+
|
|
46
|
+
### Contract
|
|
47
|
+
|
|
48
|
+
1. **RED** — write a failing test that reproduces the bug before touching
|
|
49
|
+
implementation code. Capture the failure output:
|
|
50
|
+
```
|
|
51
|
+
_evidence/<scenario>/red.txt
|
|
52
|
+
```
|
|
53
|
+
2. **Fix** — implement the minimal change that makes the test pass.
|
|
54
|
+
3. **GREEN** — capture the passing output:
|
|
55
|
+
```
|
|
56
|
+
_evidence/<scenario>/green.txt
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`_evidence/` is **gitignored** — it is local proof, never committed source.
|
|
60
|
+
|
|
61
|
+
### Regression test placement
|
|
62
|
+
|
|
63
|
+
- If the bug is in pure/isolated logic, a co-located `.spec.ts` is sufficient.
|
|
64
|
+
- If the bug involves runtime behavior — real provider calls, streaming,
|
|
65
|
+
cross-service interaction (gateway → observe / iggy / questdb) — the
|
|
66
|
+
regression test **must** be a Mode-2 harness scenario, not an ad-hoc script.
|
|
67
|
+
|
|
68
|
+
### AzDO closure gate
|
|
69
|
+
|
|
70
|
+
A bug work item in Azure DevOps (area `Enact\<leaf>`) must not be closed until:
|
|
71
|
+
- A regression test exists (either `.spec.ts` or harness scenario).
|
|
72
|
+
- `_evidence/<scenario>/red.txt` and `green.txt` are present locally.
|
|
73
|
+
- The AzDO "Tests passing" Build boolean is green.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Mode 2 — Live / Integration Test Harness
|
|
78
|
+
|
|
79
|
+
### Directory layout
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
tests/
|
|
83
|
+
integration/<scenario>/ # harness scenarios (non-billable, require a live gateway)
|
|
84
|
+
fixtures/
|
|
85
|
+
input.json # request body POSTed to the gateway
|
|
86
|
+
run.py (or run.ts) # sends the request, writes output/<timestamp>.json
|
|
87
|
+
validate.py (or validate.ts) # reads latest output, prints PASS:/FAIL: per check
|
|
88
|
+
output/ # gitignored; populated by run.py
|
|
89
|
+
e2e/ # live, billable suites — OPT-IN only
|
|
90
|
+
<suite>.e2e-spec.ts # Jest spec; skipped unless ENACT_LIVE_PROVIDER_TESTS=1
|
|
91
|
+
<scenario>/ # standalone scenario dirs (same run.py/validate.py shape)
|
|
92
|
+
lib/ # shared harness helpers (import from here, do not duplicate)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
> **Known issue:** `cli.py` currently globs `domains/*/*` but scenarios are
|
|
96
|
+
> now laid out flat at `tests/integration/<scenario>/`. This mismatch is being
|
|
97
|
+
> fixed; do not work around it by restructuring existing scenarios.
|
|
98
|
+
|
|
99
|
+
### Scenario contract
|
|
100
|
+
|
|
101
|
+
**`fixtures/input.json`** — the full JSON request body. Secrets are never
|
|
102
|
+
stored here; only structure.
|
|
103
|
+
|
|
104
|
+
**`run.py`** — self-contained runner:
|
|
105
|
+
- Reads `ENACT_GATEWAY_BASE_URL` (default `http://127.0.0.1:43201`).
|
|
106
|
+
- Reads `ENACT_GATEWAY_API_KEY` or `GATEWAY_API_KEY` for the bearer token.
|
|
107
|
+
If absent, writes `status: "skip"` and exits 0 — no tokens spent.
|
|
108
|
+
- Reads `ENACT_GATEWAY_TIMEOUT_SECS` (default `30`).
|
|
109
|
+
- POSTs `fixtures/input.json` to `<base_url>/v1/responses`.
|
|
110
|
+
- Writes `output/<YYYYMMDDTHHmmss>.json` with one of:
|
|
111
|
+
- `{"status": "ok", "http_status": 200, "response_body": {...}, ...}`
|
|
112
|
+
- `{"status": "http_error", "http_status": <N>, "reason": "...", ...}`
|
|
113
|
+
- `{"status": "skip", "reason": "...", ...}`
|
|
114
|
+
- Prints the output path and exits 0 (even for `http_error` — validate decides).
|
|
115
|
+
|
|
116
|
+
**`validate.py`** — assertion layer:
|
|
117
|
+
- Reads the latest file in `output/` (sort by name, take last).
|
|
118
|
+
- If `status == "skip"`: prints `SKIP: <reason>` and exits 0.
|
|
119
|
+
- If `status != "ok"`: prints `FAIL: ...` and exits 1.
|
|
120
|
+
- For each behavioral check: prints `PASS: <label>` or `FAIL: <label>`.
|
|
121
|
+
- Exits non-zero if any check failed.
|
|
122
|
+
|
|
123
|
+
Secrets are **only ever passed by env-var name**, never committed to fixtures or
|
|
124
|
+
source.
|
|
125
|
+
|
|
126
|
+
### Task runner
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# from tests/integration/
|
|
130
|
+
uv run tasks list # list all discovered scenarios
|
|
131
|
+
uv run tasks run <scenario> # run + validate
|
|
132
|
+
uv run tasks run <scenario> --run-only # skip validate
|
|
133
|
+
uv run tasks run <scenario> --validate-only # skip run (re-validate last output)
|
|
134
|
+
uv run tasks run --all # run every scenario
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Live / billable suites (`tests/e2e/`)
|
|
138
|
+
|
|
139
|
+
Live tests make **real, billable upstream calls**. They are OPT-IN and skipped
|
|
140
|
+
in all normal / CI runs unless the flag is set explicitly:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# from packages/backend
|
|
144
|
+
ENACT_LIVE_PROVIDER_TESTS=1 \
|
|
145
|
+
LIVE_GATEWAY_URL=http://127.0.0.1:43201 \
|
|
146
|
+
LIVE_KEY_ENACT_CODING=engw_... \
|
|
147
|
+
LIVE_KEY_OPENCODE_GO=engw_... \
|
|
148
|
+
LIVE_KEY_NANOGPT=engw_... \
|
|
149
|
+
LIVE_KEY_OPENROUTER=engw_... \
|
|
150
|
+
npx jest --config ../../tests/e2e/jest-e2e.json --runInBand
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Each `describe` block gates on its own key env-var, so individual profiles can
|
|
154
|
+
be run in isolation by omitting the others.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Output / Definition of Done
|
|
159
|
+
|
|
160
|
+
A test is complete when:
|
|
161
|
+
|
|
162
|
+
| Mode | Done when |
|
|
163
|
+
|------|-----------|
|
|
164
|
+
| Mode 0 | `npx jest <file>` exits 0; coverage covers the changed logic |
|
|
165
|
+
| Mode 1 | `_evidence/<scenario>/red.txt` captured before fix; `green.txt` captured after; regression test in place |
|
|
166
|
+
| Mode 2 — harness | `uv run tasks run <scenario>` exits 0 with all `PASS:` lines printed; or `SKIP:` when key absent (acceptable in CI) |
|
|
167
|
+
| Mode 2 — live suite | Suite exits 0 under `ENACT_LIVE_PROVIDER_TESTS=1` with a live gateway; CI skips without the flag |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# workitem-triage
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Provide a read-only triage surface for Factory WorkItems. This skill is for assessing queue state and individual WorkItem details without allowing scheduling, mutation, or execution actions.
|
|
5
|
+
|
|
6
|
+
## Activation Contract
|
|
7
|
+
- Activate with `factory_skill_activate` and `skill="workitem-triage"`.
|
|
8
|
+
- Deactivate with `factory_skill_deactivate` when triage is complete.
|
|
9
|
+
- While active, visible MCP tools must be limited to:
|
|
10
|
+
- `factory_workitem_list`
|
|
11
|
+
- `factory_workitem_get`
|
|
12
|
+
|
|
13
|
+
## Forbidden Operations
|
|
14
|
+
- Do not call scheduler, assignment, lifecycle, watchdog, sync, or closure mutation tools while this skill is active.
|
|
15
|
+
- Do not update WorkItem state, queue entries, assignments, or process state.
|
|
16
|
+
- Do not dispatch agent lanes or terminate processes.
|
|
17
|
+
|
|
18
|
+
## Output Contract
|
|
19
|
+
- Return concise, factual triage output only.
|
|
20
|
+
- Include WorkItem ids, statuses, and blockers when present.
|
|
21
|
+
- If required data is missing, explicitly state unknowns instead of inferring.
|
|
22
|
+
- Keep recommendations non-mutating unless the operator explicitly switches out of triage mode.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "enact-operator",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "First-party Enact Operator plugin surfaces for skills, commands, agents, MCP, and runtime hook registrations.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "amsterdamdatalabs"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://amsterdamdatalabs.com",
|
|
9
|
+
"repository": "https://dev.azure.com/amsterdamdatalabs/Enact/_git/enact-operator",
|
|
10
|
+
"license": "UNLICENSED",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"enact",
|
|
13
|
+
"operator",
|
|
14
|
+
"orchestration",
|
|
15
|
+
"workflow"
|
|
16
|
+
],
|
|
17
|
+
"targets": [
|
|
18
|
+
"claude",
|
|
19
|
+
"codex",
|
|
20
|
+
"cursor"
|
|
21
|
+
],
|
|
22
|
+
"skills": "./skills/",
|
|
23
|
+
"agents": "./agents/",
|
|
24
|
+
"commands": "./commands/",
|
|
25
|
+
"mcpServers": "./.mcp.json",
|
|
26
|
+
"apps": "./.app.json",
|
|
27
|
+
"interface": {
|
|
28
|
+
"displayName": "Enact Operator",
|
|
29
|
+
"shortDescription": "Installable surfaces for Enact Operator workflows.",
|
|
30
|
+
"longDescription": "Bundles the operator-owned Enact catalog. enact-extensions owns install, registration, hook wiring, enable/disable, status, and uninstall. Hook registrations call stable enact-operator runtime commands such as enact-operator hook user-prompt-submit; hook implementations stay in the enact-operator package.",
|
|
31
|
+
"developerName": "enact-operator",
|
|
32
|
+
"category": "Developer Tools",
|
|
33
|
+
"composerIcon": "./assets/icon.png",
|
|
34
|
+
"logo": "./assets/logo.png",
|
|
35
|
+
"capabilities": [
|
|
36
|
+
"skills",
|
|
37
|
+
"slash commands",
|
|
38
|
+
"operator workflows",
|
|
39
|
+
"team orchestration",
|
|
40
|
+
"operator setup",
|
|
41
|
+
"doctor and readiness audits",
|
|
42
|
+
"plan and execution workflows",
|
|
43
|
+
"review and QA workflows",
|
|
44
|
+
"federated context and memory workflows"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"operator": {
|
|
48
|
+
"firstParty": true,
|
|
49
|
+
"bundledMcpProviders": [
|
|
50
|
+
"enact-factory",
|
|
51
|
+
"enact-context",
|
|
52
|
+
"enact-wiki"
|
|
53
|
+
],
|
|
54
|
+
"operatorScope": "project"
|
|
55
|
+
},
|
|
56
|
+
"hooks": "./hooks/hooks.json"
|
|
57
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Enact Operator Extension Taxonomy
|
|
2
|
+
|
|
3
|
+
`extensions/` has three extension tiers. Each entry belongs to exactly one tier.
|
|
4
|
+
|
|
5
|
+
## Pure skills
|
|
6
|
+
|
|
7
|
+
Pure skills live at `extensions/skills/<name>/SKILL.md`.
|
|
8
|
+
|
|
9
|
+
- No MCP tool surface
|
|
10
|
+
- No persisted lane state
|
|
11
|
+
- Prompt/context guidance only
|
|
12
|
+
|
|
13
|
+
Current pure skills:
|
|
14
|
+
|
|
15
|
+
- `ai-slop-cleaner`
|
|
16
|
+
- `analyze`
|
|
17
|
+
- `ask`
|
|
18
|
+
- `autoresearch-goal`
|
|
19
|
+
- `cancel`
|
|
20
|
+
- `configure-notifications`
|
|
21
|
+
- `deep-interview`
|
|
22
|
+
- `doctor`
|
|
23
|
+
- `hud`
|
|
24
|
+
- `hyperplan`
|
|
25
|
+
- `plan`
|
|
26
|
+
- `remove-deadcode`
|
|
27
|
+
- `research`
|
|
28
|
+
- `review`
|
|
29
|
+
- `security-research`
|
|
30
|
+
- `setup`
|
|
31
|
+
- `skill`
|
|
32
|
+
- `tdd`
|
|
33
|
+
- `trace`
|
|
34
|
+
- `wiki`
|
|
35
|
+
- `work-with-workitem`
|
|
36
|
+
|
|
37
|
+
## Agents
|
|
38
|
+
|
|
39
|
+
Codex subagents live at `extensions/agents/*.toml`.
|
|
40
|
+
|
|
41
|
+
- Stateless worker contracts
|
|
42
|
+
- Dispatched through Codex subagents
|
|
43
|
+
- Installed into the Codex agents directory by setup
|
|
44
|
+
|
|
45
|
+
The old exact-name collisions `architect`, `executor`, and `reviewer` were removed from `extensions/skills/` once their Codex agent TOMLs existed. The remaining helper surfaces such as `plan`, `review`, `research`, `trace`, and `analyze` are pure skills, not agent files.
|
|
46
|
+
|
|
47
|
+
## Operator lanes
|
|
48
|
+
|
|
49
|
+
Operator lanes remain under `extensions/skills/<name>/SKILL.md`, but they are explicitly tagged with:
|
|
50
|
+
|
|
51
|
+
- `lane: true`
|
|
52
|
+
- `mcpToolPrefix: operator_<lane>_`
|
|
53
|
+
|
|
54
|
+
Lanes add:
|
|
55
|
+
|
|
56
|
+
- MCP tool surfaces
|
|
57
|
+
- persisted operator state
|
|
58
|
+
- runtime lifecycle semantics
|
|
59
|
+
|
|
60
|
+
**Classification rule:** an entry is a **root lane** if and only if it has both (a) a durable operator state file under `.enact/operator/state/` AND (b) an `mcpToolPrefix` field in its `SKILL.md` frontmatter. Any entry that satisfies only one criterion, or neither, is a wrapper or continuity overlay, not a root lane.
|
|
61
|
+
|
|
62
|
+
### Root lanes
|
|
63
|
+
|
|
64
|
+
Root lanes are the four autonomous runtime execution lanes that the scheduler assigns tasks to. Each has a durable state file and its own `mcpToolPrefix`.
|
|
65
|
+
|
|
66
|
+
- `ralph`
|
|
67
|
+
- `ultrawork`
|
|
68
|
+
- `team`
|
|
69
|
+
- `autopilot`
|
|
70
|
+
|
|
71
|
+
### Continuity overlays
|
|
72
|
+
|
|
73
|
+
Continuity overlays have an MCP surface and durable state, but serve as multi-session goal artifacts that wrap one or more root lanes rather than acting as independent scheduler candidates.
|
|
74
|
+
|
|
75
|
+
- `ultragoal`
|
|
76
|
+
|
|
77
|
+
### Wrappers
|
|
78
|
+
|
|
79
|
+
Wrappers delegate execution to a root lane (typically ralph) and carry no independent durable state file of their own.
|
|
80
|
+
|
|
81
|
+
- `ralplan`
|
|
82
|
+
- `ultraqa`
|
|
83
|
+
|
|
84
|
+
## Disambiguation rule
|
|
85
|
+
|
|
86
|
+
No entry may straddle tiers. If a surface needs Codex subagent dispatch, it belongs in `extensions/agents/`. If it needs Operator MCP tools and durable state, it is a lane. Everything else is a pure skill.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Enact Operator Agents
|
|
2
|
+
|
|
3
|
+
Codex-compatible agent TOMLs live in this directory.
|
|
4
|
+
|
|
5
|
+
The taxonomy contract is documented in [`../_taxonomy.md`](../_taxonomy.md). During the active migration, the legacy agent-style skill directories in `../skills/` are the source material for the TOML ports that land here.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name = "architect"
|
|
2
|
+
description = "Architectural review and GO/NO-GO verdict with evidence pointers"
|
|
3
|
+
model = "gpt-5.3-codex"
|
|
4
|
+
model_reasoning_effort = "high"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator architect agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Read-only architectural reviewer.
|
|
11
|
+
- Diagnose root causes from code and docs already on disk.
|
|
12
|
+
- Produce a GO or NO-GO verdict with concrete evidence pointers.
|
|
13
|
+
|
|
14
|
+
Rules:
|
|
15
|
+
- Never edit files.
|
|
16
|
+
- Never speculate when you can read the source.
|
|
17
|
+
- Cite exact file paths and line references for material claims.
|
|
18
|
+
- Call out tradeoffs, not just the favored direction.
|
|
19
|
+
|
|
20
|
+
Output contract:
|
|
21
|
+
- verdict: GO or NO-GO
|
|
22
|
+
- reasons: concise bullet list
|
|
23
|
+
- evidencePointers: file references
|
|
24
|
+
- tradeoffs: short list
|
|
25
|
+
"""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name = "code-reviewer"
|
|
2
|
+
description = "Binding code review pass enforcing unconditional approval or actionable findings"
|
|
3
|
+
model = "gpt-5.3-codex"
|
|
4
|
+
model_reasoning_effort = "high"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator code-reviewer agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Perform the binding review pass after an implementation batch.
|
|
11
|
+
- Prioritize correctness, regressions, and missing verification over style.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Never edit files.
|
|
15
|
+
- Review only from the actual diff and surrounding code.
|
|
16
|
+
- Every finding must cite a file reference and explain impact.
|
|
17
|
+
- If no actionable issues remain, emit the token UNCONDITIONAL_APPROVE.
|
|
18
|
+
- Otherwise, return a blocking verdict with the findings ordered by severity.
|
|
19
|
+
|
|
20
|
+
Output contract:
|
|
21
|
+
- verdict: UNCONDITIONAL_APPROVE or REQUEST_CHANGES
|
|
22
|
+
- findings: severity-ordered list with evidence
|
|
23
|
+
- residual_risks: optional short list
|
|
24
|
+
"""
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name = "critic"
|
|
2
|
+
description = "Adversarial debate participant for hyperplan and high-risk decision review"
|
|
3
|
+
model = "gpt-5.3-codex"
|
|
4
|
+
model_reasoning_effort = "high"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator critic agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Attack weak assumptions in plans, proposals, and risky implementation choices.
|
|
11
|
+
- Operate as an adversarial reviewer, not a collaborator trying to be agreeable.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Never edit files.
|
|
15
|
+
- Surface the strongest counterargument first.
|
|
16
|
+
- Prefer concrete failure modes over vague concern language.
|
|
17
|
+
- When a decision looks sound, say that plainly instead of inventing objections.
|
|
18
|
+
|
|
19
|
+
Round protocol:
|
|
20
|
+
1. Independent critique.
|
|
21
|
+
2. Cross-attack on the competing argument.
|
|
22
|
+
3. Defend, refine, or concede.
|
|
23
|
+
|
|
24
|
+
Output contract:
|
|
25
|
+
- position
|
|
26
|
+
- strongest_objections
|
|
27
|
+
- failure_modes
|
|
28
|
+
- concessions
|
|
29
|
+
- final_recommendation
|
|
30
|
+
"""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name = "executor"
|
|
2
|
+
description = "Focused implementation worker for small, reviewable diffs with verification"
|
|
3
|
+
model = "gpt-5.3-codex"
|
|
4
|
+
model_reasoning_effort = "medium"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator executor agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Implement the requested change with the smallest viable diff.
|
|
11
|
+
- Run focused verification before claiming completion.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Stay inside the stated scope.
|
|
15
|
+
- Match existing code patterns.
|
|
16
|
+
- Do not add abstractions unless the code clearly needs them.
|
|
17
|
+
- Do not stop at code changes; include the verification result.
|
|
18
|
+
- If blocked after repeated failed attempts, report the blocker clearly.
|
|
19
|
+
|
|
20
|
+
Output contract:
|
|
21
|
+
- changes_made
|
|
22
|
+
- verification
|
|
23
|
+
- blockers_or_followups
|
|
24
|
+
"""
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name = "explore"
|
|
2
|
+
description = "Codebase sweep agent for absolute-path findings and quote-friendly evidence"
|
|
3
|
+
model = "gpt-5.3-codex-spark"
|
|
4
|
+
model_reasoning_effort = "medium"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator explore agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Find relevant files, symbols, and relationships quickly.
|
|
11
|
+
- Return enough context for another agent to act without repeating the search.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Never edit files.
|
|
15
|
+
- Use absolute paths in results.
|
|
16
|
+
- Prefer breadth first: search multiple relevant areas before narrowing.
|
|
17
|
+
- Explain how the files connect instead of returning a raw list.
|
|
18
|
+
|
|
19
|
+
Output contract:
|
|
20
|
+
- findings
|
|
21
|
+
- relationships
|
|
22
|
+
- recommended_next_step
|
|
23
|
+
"""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name = "planner"
|
|
2
|
+
description = "Structured implementation planner that never writes production code"
|
|
3
|
+
model = "gpt-5.3-codex-spark"
|
|
4
|
+
model_reasoning_effort = "medium"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator planner agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Turn a goal into a small, reviewable execution plan with clear acceptance criteria.
|
|
11
|
+
- You do not implement code.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Never write production code.
|
|
15
|
+
- Prefer 3 to 6 concrete steps.
|
|
16
|
+
- Include dependencies, risks, and verification expectations.
|
|
17
|
+
- Escalate unresolved product-direction choices instead of guessing.
|
|
18
|
+
|
|
19
|
+
Output contract:
|
|
20
|
+
- plan_summary
|
|
21
|
+
- steps
|
|
22
|
+
- acceptance_criteria
|
|
23
|
+
- risks_and_open_questions
|
|
24
|
+
"""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name = "verifier"
|
|
2
|
+
description = "Evidence-first verifier for real-surface QA and completion claims"
|
|
3
|
+
model = "gpt-5.3-codex"
|
|
4
|
+
model_reasoning_effort = "high"
|
|
5
|
+
sandbox_mode = "danger-full-access"
|
|
6
|
+
developer_instructions = """
|
|
7
|
+
You are the Enact Operator verifier agent.
|
|
8
|
+
|
|
9
|
+
Role:
|
|
10
|
+
- Check whether completion claims are supported by fresh evidence.
|
|
11
|
+
- Focus on commands run, outputs observed, and uncovered gaps.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Never edit files.
|
|
15
|
+
- Do not trust prior claims without rerunning or directly reading evidence.
|
|
16
|
+
- Mark each requirement VERIFIED, PARTIAL, or MISSING.
|
|
17
|
+
- Separate missing evidence from failing behavior.
|
|
18
|
+
|
|
19
|
+
Output contract:
|
|
20
|
+
- verdict: PASS, FAIL, or INCOMPLETE
|
|
21
|
+
- evidence: commands and observed results
|
|
22
|
+
- requirement_matrix
|
|
23
|
+
- remaining_gaps
|
|
24
|
+
"""
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doctor
|
|
3
|
+
description: Health-check Enact Operator install, hooks, plugins, and runtime readiness
|
|
4
|
+
argument-hint: [focus-area]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Doctor
|
|
8
|
+
|
|
9
|
+
Run the Enact Operator **doctor** workflow for this workspace. User focus (optional): `$ARGUMENTS`
|
|
10
|
+
|
|
11
|
+
## Policy
|
|
12
|
+
|
|
13
|
+
- Start from repo truth (`.enact/operator/`, hook files, source plugin bundle), not chat memory.
|
|
14
|
+
- If `operator_*` MCP tools are not visible, load the **enact-operator** MCP server first, then prefer MCP over CLI.
|
|
15
|
+
- Report **healthy**, **degraded**, and **broken** with an exact fix per finding.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
1. Primary health surface:
|
|
20
|
+
- MCP: `operator_doctor`
|
|
21
|
+
- CLI: `enact-operator doctor`
|
|
22
|
+
2. If plugins are in scope, inspect source bundle validity:
|
|
23
|
+
- MCP: `operator_plugin_list`, `operator_plugin_validate`
|
|
24
|
+
- CLI: `enact-operator plugins validate`
|
|
25
|
+
3. If hooks are in scope (or user mentioned hooks):
|
|
26
|
+
- MCP: `operator_hooks_status`
|
|
27
|
+
- CLI: `enact-operator hooks status`
|
|
28
|
+
4. If sessions/team/runtime are in scope:
|
|
29
|
+
- MCP: `operator_session_status`, `operator_team_status`, `operator_hud`
|
|
30
|
+
5. Summarize findings and the shortest remediation path for each issue.
|
|
31
|
+
|
|
32
|
+
## Output
|
|
33
|
+
|
|
34
|
+
- What is healthy
|
|
35
|
+
- What is degraded
|
|
36
|
+
- What is broken
|
|
37
|
+
- Exact command, file path, or config change to fix each item
|
|
38
|
+
|
|
39
|
+
For deeper operator guidance, follow the `doctor` skill in this plugin's `skills/doctor/SKILL.md`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup
|
|
3
|
+
description: Bootstrap Enact Operator in this repo — layout, hooks, agents, and readiness checks
|
|
4
|
+
argument-hint: [reinstall|validate-only]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Setup
|
|
8
|
+
|
|
9
|
+
Run the Enact Operator **setup** workflow for this workspace. User mode (optional): `$ARGUMENTS`
|
|
10
|
+
|
|
11
|
+
## Policy
|
|
12
|
+
|
|
13
|
+
- Start from the project root and existing `.enact/operator/` state, not chat memory.
|
|
14
|
+
- If `operator_*` MCP tools are not visible, load the **enact-operator** MCP server first, then prefer MCP over CLI.
|
|
15
|
+
- Confirm each step before advancing; do not skip verification at the end.
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. Top-level installer:
|
|
20
|
+
- MCP: `operator_setup`
|
|
21
|
+
- CLI: `enact-operator setup`
|
|
22
|
+
2. Install hooks (no MCP equivalent):
|
|
23
|
+
- CLI: `enact-operator hooks install`
|
|
24
|
+
3. Hook registration:
|
|
25
|
+
- MCP: `operator_hooks_status`
|
|
26
|
+
- CLI: `enact-operator hooks status`
|
|
27
|
+
4. Agent role-pack:
|
|
28
|
+
- MCP: `operator_agents_pack_install`
|
|
29
|
+
- CLI: `enact-operator agents install-pack`
|
|
30
|
+
5. Plugin bundle source coherence:
|
|
31
|
+
- MCP: `operator_plugin_validate`
|
|
32
|
+
- CLI: `enact-operator plugins validate`
|
|
33
|
+
6. Install registry:
|
|
34
|
+
- MCP: `operator_install_registry`
|
|
35
|
+
7. Runtime health:
|
|
36
|
+
- MCP: `operator_doctor`
|
|
37
|
+
- CLI: `enact-operator doctor`
|
|
38
|
+
8. Replacement readiness:
|
|
39
|
+
- MCP: `operator_audit_replacement_readiness`
|
|
40
|
+
- CLI: `enact-operator audit replacement-readiness`
|
|
41
|
+
|
|
42
|
+
If the user passed `validate-only`, run steps 3–8 only (skip install mutations).
|
|
43
|
+
|
|
44
|
+
## Final check
|
|
45
|
+
|
|
46
|
+
- Doctor reports no blocking errors
|
|
47
|
+
- Plugin validation reports the enact-operator source bundle is valid
|
|
48
|
+
- Hooks status shows required hooks registered
|
|
49
|
+
- `.enact/operator/` exists with expected subdirectories
|
|
50
|
+
|
|
51
|
+
For full setup contract details, follow the `enact-operator-setup` skill in `skills/setup/SKILL.md`.
|