orcastrator 0.2.23 → 0.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +153 -335
- package/dist/agents/codex/session.d.ts +6 -0
- package/dist/agents/codex/session.d.ts.map +1 -1
- package/dist/agents/codex/session.js +93 -58
- package/dist/cli/commands/help.js +1 -1
- package/dist/cli/commands/resume.js +1 -1
- package/dist/cli/commands/run.js +2 -2
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/config-loader.js +29 -2
- package/dist/core/planner.d.ts +8 -3
- package/dist/core/planner.d.ts.map +1 -1
- package/dist/core/planner.js +46 -5
- package/dist/types/effort.d.ts +3 -2
- package/dist/types/effort.d.ts.map +1 -1
- package/dist/types/effort.js +3 -2
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +5 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bradley Inniss
|
|
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/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# Orca
|
|
8
8
|
|
|
9
|
-
Coordinated agent run harness. Breaks
|
|
9
|
+
Coordinated agent run harness. Breaks a task into a graph, then executes it end-to-end via a persistent [Codex](https://github.com/ratley/codex-client) session.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
@@ -14,449 +14,267 @@ Coordinated agent run harness. Breaks down a task into a task graph, then execut
|
|
|
14
14
|
npm install -g orcastrator
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
Start with a plain-language task:
|
|
17
|
+
## Quick Start
|
|
20
18
|
|
|
21
19
|
```bash
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
# 1. Go into a git repo
|
|
21
|
+
cd /path/to/repo
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
# 2. Run a task
|
|
24
|
+
orca "add input validation to the signup form in src/auth/signup.ts"
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
# 3. Check status
|
|
27
|
+
orca status --last
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- add/remove task
|
|
33
|
-
- add/remove dependency
|
|
29
|
+
# 4. Once done, open a PR
|
|
30
|
+
orca pr create --last
|
|
31
|
+
```
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
**Write specific goals.** Orca passes your task to a planner — vague input produces vague plans.
|
|
36
34
|
|
|
37
|
-
|
|
35
|
+
- Bad: `"fix the bug"`
|
|
36
|
+
- Good: `"Fix the TypeError thrown on logout with an expired token in src/auth/session.ts. Ensure existing tests pass and add a regression test."`
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
---
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
- `review.execution.maxCycles` (default `2`)
|
|
43
|
-
- `review.execution.onFindings`:
|
|
44
|
-
- `auto_fix` (default): apply fixes and continue until clean or max cycles
|
|
45
|
-
- `report_only`: report findings and stop
|
|
46
|
-
- `fail`: mark run failed when findings exist
|
|
47
|
-
- `review.execution.validator.auto` (default `true`): auto-detect validator commands from `package.json`
|
|
48
|
-
- Caveat: `ORCA_SKIP_VALIDATORS=1` forces this to `false` at runtime
|
|
49
|
-
- `review.execution.validator.commands` (optional explicit command list)
|
|
50
|
-
- `review.execution.prompt` (optional custom reviewer instruction)
|
|
40
|
+
## Common Workflows
|
|
51
41
|
|
|
52
|
-
|
|
42
|
+
### Status & monitoring
|
|
53
43
|
|
|
54
|
-
|
|
44
|
+
```bash
|
|
45
|
+
orca status # list all runs
|
|
46
|
+
orca status --last # most recent run
|
|
47
|
+
orca status --run <run-id> # specific run
|
|
48
|
+
orca list # alias for status
|
|
49
|
+
```
|
|
55
50
|
|
|
56
|
-
|
|
51
|
+
Run states: `planning` → `running` → `completed` | `failed` | `cancelled` | `waiting_for_answer`
|
|
57
52
|
|
|
58
|
-
|
|
53
|
+
### Answering questions
|
|
59
54
|
|
|
60
|
-
|
|
55
|
+
If a run hits `waiting_for_answer`, it's blocked until you respond:
|
|
61
56
|
|
|
62
57
|
```bash
|
|
63
|
-
orca --
|
|
64
|
-
orca
|
|
58
|
+
orca status --last # read the question
|
|
59
|
+
orca answer <run-id> "yes, use migration A" # unblock it
|
|
65
60
|
```
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
### Spec / plan files
|
|
63
|
+
|
|
64
|
+
Use a markdown spec instead of an inline task:
|
|
68
65
|
|
|
69
66
|
```bash
|
|
70
|
-
orca
|
|
67
|
+
orca --spec ./specs/feature.md # plan + execute
|
|
68
|
+
orca plan --spec ./specs/feature.md # plan only, no execution
|
|
71
69
|
```
|
|
72
70
|
|
|
73
|
-
|
|
71
|
+
### Failure & recovery
|
|
74
72
|
|
|
75
73
|
```bash
|
|
76
|
-
orca
|
|
77
|
-
orca
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
orca list
|
|
74
|
+
orca resume --last # retry from last checkpoint
|
|
75
|
+
orca cancel --last # abort
|
|
76
|
+
```
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
Common failures:
|
|
79
|
+
- `auth error` → re-auth Codex (`codex auth`) or set `OPENAI_API_KEY` / `ORCA_OPENAI_API_KEY`
|
|
80
|
+
- `no git repo` → `cd` into a git repo
|
|
81
|
+
- `plan invalid` → goal too vague; cancel and restate
|
|
82
|
+
- Session logs: `./session-logs/` (or `sessionLogs` config path)
|
|
84
83
|
|
|
85
|
-
|
|
86
|
-
orca cancel --run <run-id>
|
|
84
|
+
### PR workflow
|
|
87
85
|
|
|
88
|
-
|
|
86
|
+
```bash
|
|
87
|
+
orca pr draft --last # open a draft PR (won't trigger CI)
|
|
88
|
+
orca pr publish --last # un-draft it
|
|
89
|
+
orca pr create --last # draft + publish in one step
|
|
90
|
+
orca pr status --last # check PR and CI status
|
|
89
91
|
```
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
Orca always works on a branch — never pushes directly to main/master.
|
|
92
94
|
|
|
93
|
-
|
|
94
|
-
orca pr
|
|
95
|
-
orca pr draft --run <run-id>
|
|
96
|
-
orca pr create --run <run-id>
|
|
97
|
-
orca pr publish --run <run-id>
|
|
98
|
-
orca pr status --run <run-id>
|
|
99
|
-
|
|
100
|
-
orca pr publish --last
|
|
101
|
-
orca pr publish --config ./orca.config.js # accepted, currently unused by PR command resolution
|
|
102
|
-
|
|
103
|
-
# Non-TTY requires explicit run selection
|
|
104
|
-
orca pr publish --run <run-id>
|
|
105
|
-
orca pr publish --last
|
|
106
|
-
```
|
|
95
|
+
---
|
|
107
96
|
|
|
108
97
|
## Config
|
|
109
98
|
|
|
110
|
-
Orca
|
|
99
|
+
Orca loads config in this order (later overrides earlier):
|
|
111
100
|
|
|
112
|
-
1.
|
|
113
|
-
2.
|
|
114
|
-
3. `--config <path>` (
|
|
101
|
+
1. `~/.orca/config.ts` or `~/.orca/config.js` (global)
|
|
102
|
+
2. `./orca.config.ts` or `./orca.config.js` (project)
|
|
103
|
+
3. `--config <path>` (explicit)
|
|
115
104
|
|
|
116
|
-
|
|
105
|
+
`.ts` is preferred over `.js` when both exist.
|
|
117
106
|
|
|
118
107
|
```ts
|
|
119
108
|
// orca.config.ts
|
|
120
109
|
import { defineOrcaConfig } from "orcastrator";
|
|
121
110
|
|
|
122
111
|
export default defineOrcaConfig({
|
|
123
|
-
executor: "codex",
|
|
124
|
-
runsDir: "./.orca/runs",
|
|
112
|
+
executor: "codex", // only supported value
|
|
113
|
+
runsDir: "./.orca/runs", // default: ~/.orca/runs
|
|
125
114
|
sessionLogs: "./session-logs",
|
|
126
115
|
skills: ["./.orca/skills"],
|
|
127
116
|
maxRetries: 1,
|
|
128
117
|
|
|
129
118
|
codex: {
|
|
130
|
-
enabled: true,
|
|
131
119
|
model: "gpt-5.3-codex",
|
|
132
|
-
effort: "medium",
|
|
133
|
-
command: "codex",
|
|
120
|
+
effort: "medium", // "low" | "medium" | "high" — applies to all Codex turns
|
|
134
121
|
timeoutMs: 300000,
|
|
135
|
-
multiAgent: false,
|
|
122
|
+
multiAgent: false, // see Multi-agent section
|
|
136
123
|
perCwdExtraUserRoots: [
|
|
137
124
|
{ cwd: process.cwd(), extraUserRoots: ["/tmp/shared-skills"] }
|
|
138
|
-
]
|
|
139
|
-
},
|
|
140
|
-
hooks: {
|
|
141
|
-
onTaskComplete: async (event, context) => {
|
|
142
|
-
console.log(`task done: ${event.taskId} (${event.taskName}) from pid ${context.pid}`);
|
|
143
|
-
},
|
|
144
|
-
onError: async (event) => {
|
|
145
|
-
console.error(event.error);
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
hookCommands: {
|
|
149
|
-
onTaskComplete: "node ./scripts/on-task-complete.mjs",
|
|
150
|
-
onComplete: "echo run complete",
|
|
151
|
-
onError: "echo run failed"
|
|
152
|
-
},
|
|
153
|
-
pr: {
|
|
154
|
-
enabled: true,
|
|
155
|
-
requireConfirmation: true
|
|
125
|
+
],
|
|
156
126
|
},
|
|
127
|
+
|
|
157
128
|
review: {
|
|
158
|
-
// Deprecated compatibility aliases (prefer review.plan.*):
|
|
159
|
-
// enabled: true,
|
|
160
|
-
// onInvalid: "fail",
|
|
161
129
|
plan: {
|
|
162
130
|
enabled: true,
|
|
163
|
-
onInvalid: "fail"
|
|
131
|
+
onInvalid: "fail", // "fail" | "warn_skip"
|
|
164
132
|
},
|
|
165
133
|
execution: {
|
|
166
134
|
enabled: true,
|
|
167
135
|
maxCycles: 2,
|
|
168
|
-
onFindings: "auto_fix",
|
|
136
|
+
onFindings: "auto_fix", // "auto_fix" | "report_only" | "fail"
|
|
169
137
|
validator: {
|
|
170
|
-
auto: true,
|
|
171
|
-
// commands: ["npm run validate"]
|
|
138
|
+
auto: true, // auto-detect validators from package.json
|
|
139
|
+
// commands: ["npm run validate"] // explicit override
|
|
172
140
|
},
|
|
173
141
|
// prompt: "Prefer minimal safe fixes"
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Config field reference (OrcaConfig)
|
|
180
|
-
|
|
181
|
-
Top-level: `executor`, `openaiApiKey`, `runsDir`, `sessionLogs`, `skills`, `maxRetries`, `hooks`, `hookCommands`, `pr`, `review`, `codex`.
|
|
182
|
-
|
|
183
|
-
- `pr.enabled`, `pr.requireConfirmation`
|
|
184
|
-
- `maxRetries` is part of `OrcaConfig`; current planner-generated task retries remain fixed in task graph contracts
|
|
185
|
-
- `codex.enabled`, `codex.model`, `codex.effort`, `codex.command`, `codex.timeoutMs`, `codex.multiAgent`, `codex.perCwdExtraUserRoots`
|
|
186
|
-
- `review.plan.enabled`, `review.plan.onInvalid`
|
|
187
|
-
- `review.execution.enabled`, `review.execution.maxCycles`, `review.execution.onFindings`, `review.execution.validator.auto`, `review.execution.validator.commands`, `review.execution.prompt`
|
|
188
|
-
- Deprecated compatibility aliases: `review.enabled`, `review.onInvalid` (still accepted; prefer `review.plan.*`)
|
|
189
|
-
|
|
190
|
-
### Multi-agent mode
|
|
142
|
+
},
|
|
143
|
+
},
|
|
191
144
|
|
|
192
|
-
|
|
145
|
+
pr: {
|
|
146
|
+
enabled: true,
|
|
147
|
+
requireConfirmation: true,
|
|
148
|
+
},
|
|
193
149
|
|
|
194
|
-
|
|
150
|
+
hooks: {
|
|
151
|
+
onTaskComplete: async (event, context) => {
|
|
152
|
+
console.log(`task done: ${event.taskId} from pid ${context.pid}`);
|
|
153
|
+
},
|
|
154
|
+
onError: async (event) => { console.error(event.error); },
|
|
155
|
+
},
|
|
195
156
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
157
|
+
hookCommands: {
|
|
158
|
+
onComplete: "echo run complete",
|
|
159
|
+
onError: "echo run failed",
|
|
160
|
+
onTaskComplete: "node ./scripts/on-task-complete.mjs",
|
|
161
|
+
},
|
|
162
|
+
});
|
|
200
163
|
```
|
|
201
164
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
> **Note:** Multi-agent is off by default because enabling it modifies your global Codex configuration. It is currently an experimental Codex feature.
|
|
205
|
-
|
|
206
|
-
## Reference
|
|
207
|
-
|
|
208
|
-
### Flags
|
|
209
|
-
|
|
210
|
-
Global:
|
|
211
|
-
|
|
212
|
-
- `-h, --help`
|
|
213
|
-
- `-V, --version`
|
|
214
|
-
|
|
215
|
-
`orca` / `orca run`:
|
|
216
|
-
|
|
217
|
-
- positional: `[task]`
|
|
218
|
-
- also works: `--task <text>`, `-p, --prompt <text>`
|
|
219
|
-
- `--spec <path>`
|
|
220
|
-
- `--plan <path>`
|
|
221
|
-
- `--config <path>`
|
|
222
|
-
- `--codex-only` (force Codex executor for this run)
|
|
223
|
-
- `--codex-effort <low|medium|high>`
|
|
224
|
-
- `--on-milestone <cmd>`
|
|
225
|
-
- `--on-task-complete <cmd>`
|
|
226
|
-
- `--on-task-fail <cmd>`
|
|
227
|
-
- `--on-invalid-plan <cmd>`
|
|
228
|
-
- `--on-findings <cmd>`
|
|
229
|
-
- `--on-complete <cmd>`
|
|
230
|
-
- `--on-error <cmd>`
|
|
231
|
-
|
|
232
|
-
`orca plan`:
|
|
165
|
+
### Review cycle
|
|
233
166
|
|
|
234
|
-
-
|
|
235
|
-
- `--config <path>`
|
|
236
|
-
- `--on-milestone <cmd>`
|
|
237
|
-
- `--on-error <cmd>`
|
|
167
|
+
After planning, Orca runs a pre-execution review that can edit the task graph (add/remove tasks, update fields, adjust dependencies) before execution starts.
|
|
238
168
|
|
|
239
|
-
`
|
|
169
|
+
After execution, Orca runs validation commands and asks Codex to review findings. With `onFindings: "auto_fix"`, it applies fixes and retries up to `maxCycles` times, then reports. Set `ORCA_SKIP_VALIDATORS=1` to skip validator auto-detection at runtime.
|
|
240
170
|
|
|
241
|
-
-
|
|
242
|
-
- `--last`
|
|
243
|
-
- `--config <path>`
|
|
244
|
-
|
|
245
|
-
`orca resume`:
|
|
246
|
-
|
|
247
|
-
- `--run <run-id>`
|
|
248
|
-
- `--last`
|
|
249
|
-
- `--config <path>`
|
|
250
|
-
- `--codex-only`
|
|
251
|
-
- `--codex-effort <low|medium|high>`
|
|
252
|
-
|
|
253
|
-
`orca cancel`:
|
|
254
|
-
|
|
255
|
-
- `--run <run-id>`
|
|
256
|
-
- `--last`
|
|
257
|
-
- `--config <path>`
|
|
171
|
+
### Multi-agent mode
|
|
258
172
|
|
|
259
|
-
`
|
|
173
|
+
Set `codex.multiAgent: true` to spawn parallel Codex agents per task. Faster for large refactors with independent subtasks; higher token cost. **Note:** this writes `multi_agent = true` to your global `~/.codex/config.toml`.
|
|
260
174
|
|
|
261
|
-
|
|
262
|
-
- `--run <id>`
|
|
175
|
+
### Skills
|
|
263
176
|
|
|
264
|
-
|
|
177
|
+
Orca auto-loads skills in this precedence order (first name wins):
|
|
265
178
|
|
|
266
|
-
|
|
179
|
+
1. `config.skills[]`
|
|
180
|
+
2. `./.orca/skills/` (project-local)
|
|
181
|
+
3. `~/.orca/skills/` (global)
|
|
182
|
+
4. Bundled defaults (includes `code-simplifier`)
|
|
267
183
|
|
|
268
|
-
|
|
184
|
+
Inject additional app-server-visible skills via `codex.perCwdExtraUserRoots`.
|
|
269
185
|
|
|
270
|
-
|
|
271
|
-
- `--last`
|
|
272
|
-
- `--config <path>` (accepted for compatibility; currently unused by PR command run resolution)
|
|
186
|
+
---
|
|
273
187
|
|
|
274
|
-
|
|
188
|
+
## CLI Reference
|
|
275
189
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
190
|
+
```
|
|
191
|
+
orca <task> Start a run
|
|
192
|
+
orca --spec <path> Run from a spec file
|
|
193
|
+
orca plan --spec <path> Plan only, no execution
|
|
194
|
+
|
|
195
|
+
orca status [--last | --run <id>] Run status
|
|
196
|
+
orca list List all runs
|
|
197
|
+
orca resume [--last | --run <id>] Retry from checkpoint
|
|
198
|
+
orca cancel [--last | --run <id>] Abort a run
|
|
199
|
+
orca answer <run-id> "<text>" Answer a waiting question
|
|
200
|
+
|
|
201
|
+
orca pr draft [--last | --run <id>] Open draft PR
|
|
202
|
+
orca pr create [--last | --run <id>] Create and publish PR
|
|
203
|
+
orca pr publish [--last | --run <id>] Un-draft an existing PR
|
|
204
|
+
orca pr status [--last | --run <id>] PR and CI status
|
|
205
|
+
(non-TTY: --run or --last required)
|
|
206
|
+
|
|
207
|
+
orca skills List loaded skills
|
|
208
|
+
orca setup Interactive setup wizard
|
|
209
|
+
```
|
|
280
210
|
|
|
281
|
-
`orca
|
|
211
|
+
**Key flags for `orca` (run):**
|
|
282
212
|
|
|
283
|
-
- `--
|
|
213
|
+
- `--codex-only` — force Codex executor
|
|
214
|
+
- `--codex-effort <low|medium|high>` — override effort for this run
|
|
215
|
+
- `--config <path>` — explicit config file
|
|
216
|
+
- `--on-complete <cmd>`, `--on-error <cmd>`, `--on-task-complete <cmd>`, `--on-findings <cmd>`, etc.
|
|
284
217
|
|
|
285
|
-
`orca
|
|
218
|
+
**Key flags for `orca resume`:**
|
|
286
219
|
|
|
287
|
-
-
|
|
288
|
-
- `--openai-key <key>` — override OpenAI API key (written to config)
|
|
289
|
-
- `--executor <codex>` — explicitly set executor in written config
|
|
290
|
-
- `--ts` — write TS config output (`~/.orca/config.ts` / `./orca.config.ts`)
|
|
291
|
-
- `--global` — save to global config (`~/.orca/config.js` by default, or `.ts` with `--ts`)
|
|
292
|
-
- `--project` — save to project config (`./orca.config.js` by default, or `.ts` with `--ts`)
|
|
293
|
-
- `--project-config-template` / `--skip-project-config` removed
|
|
220
|
+
- `--codex-only`, `--codex-effort <low|medium|high>`, `--config <path>`, `--run <id>`, `--last`
|
|
294
221
|
|
|
295
|
-
|
|
222
|
+
**`orca setup` flags:**
|
|
296
223
|
|
|
297
|
-
-
|
|
298
|
-
-
|
|
224
|
+
- `--openai-key <key>` — write key to config
|
|
225
|
+
- `--executor <codex>` — set executor
|
|
226
|
+
- `--ts` — write TypeScript config
|
|
227
|
+
- `--global` — write to `~/.orca/config.js`
|
|
228
|
+
- `--project` — write to `./orca.config.js`
|
|
299
229
|
|
|
300
230
|
### Hooks
|
|
301
231
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
- `onMilestone`
|
|
305
|
-
- `onTaskComplete`
|
|
306
|
-
- `onTaskFail`
|
|
307
|
-
- `onInvalidPlan`
|
|
308
|
-
- `onFindings`
|
|
309
|
-
- `onComplete`
|
|
310
|
-
- `onError` (fires on run failures and hook-dispatch failures)
|
|
311
|
-
|
|
312
|
-
Run hooks from CLI with `--on-...` flags or from config via `hooks` / `hookCommands`.
|
|
313
|
-
Unknown hook keys in config are rejected at load time with an explicit allowed-hook list.
|
|
314
|
-
|
|
315
|
-
Hook contract:
|
|
316
|
-
- Function hooks (`config.hooks`) are the primary path and are strongly typed per hook event.
|
|
317
|
-
- Every function hook receives `(event, context)` where `context` is deterministic: `{ cwd, pid, invokedAt }`.
|
|
318
|
-
- Command hooks (`--on-...` and `config.hookCommands`) receive the full event payload as JSON over stdin.
|
|
319
|
-
- Orca no longer injects hook payload via `ORCA_*` env vars.
|
|
320
|
-
|
|
321
|
-
Smoke-test the hook contract (function + command + concurrency): `npm run smoke:hooks`.
|
|
322
|
-
|
|
323
|
-
### Run ID Format
|
|
324
|
-
|
|
325
|
-
Run IDs are generated as:
|
|
326
|
-
|
|
327
|
-
- `<slug>-<unix-ms>-<hex4>`
|
|
328
|
-
- Example: `feature-auth-1766228123456-1a2b`
|
|
329
|
-
|
|
330
|
-
### Config File Locations
|
|
331
|
-
|
|
332
|
-
- Global: `~/.orca/config.ts` (preferred when both exist) or `~/.orca/config.js`
|
|
333
|
-
- Project: `./orca.config.ts` (preferred when both exist) or `./orca.config.js`
|
|
334
|
-
- Explicit: `--config <path>`
|
|
335
|
-
|
|
336
|
-
### Project Instruction Files
|
|
337
|
-
|
|
338
|
-
During planning, Orca automatically injects project instruction files when present:
|
|
339
|
-
|
|
340
|
-
1. `AGENTS.md`
|
|
341
|
-
|
|
342
|
-
Files are discovered from the project root (nearest `.git` from the spec/task context) and injected when present.
|
|
343
|
-
|
|
344
|
-
### Project Skills
|
|
345
|
-
|
|
346
|
-
Orca auto-loads skills in this precedence order (first matching skill name wins):
|
|
347
|
-
|
|
348
|
-
1. `config.skills[]`
|
|
349
|
-
2. `./.orca/skills/` (project-local, from current working directory)
|
|
350
|
-
3. `~/.orca/skills/` (global)
|
|
351
|
-
4. Bundled defaults from the Orca package: `<orca package root>/.orca/skills/`
|
|
232
|
+
Available hook names: `onMilestone`, `onTaskComplete`, `onTaskFail`, `onInvalidPlan`, `onFindings`, `onComplete`, `onError`.
|
|
352
233
|
|
|
353
|
-
|
|
234
|
+
- Function hooks (`config.hooks`): receive `(event, context)` where `context = { cwd, pid, invokedAt }`
|
|
235
|
+
- Command hooks (`config.hookCommands` / `--on-*` flags): receive full event JSON over stdin
|
|
236
|
+
- Unknown hook keys in config are rejected at load time
|
|
354
237
|
|
|
355
|
-
|
|
356
|
-
- a text input item (`{ type: "text", text: ... }`), and
|
|
357
|
-
- explicit skill input items (`{ type: "skill", name, path }`) for every loaded skill in the same precedence order above.
|
|
238
|
+
### Run ID format
|
|
358
239
|
|
|
359
|
-
|
|
240
|
+
`<slug>-<unix-ms>-<hex4>` — e.g. `feature-auth-1766228123456-1a2b`
|
|
360
241
|
|
|
361
|
-
|
|
242
|
+
### Run state locations
|
|
362
243
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
- Run status: `<runsDir>/<run-id>/status.json`
|
|
244
|
+
- Status: `<runsDir>/<run-id>/status.json`
|
|
366
245
|
- Answer payloads: `<runsDir>/<run-id>/answer.txt`
|
|
367
|
-
- `runsDir` defaults to `~/.orca/runs`
|
|
246
|
+
- `runsDir` defaults to `~/.orca/runs` (override with `ORCA_RUNS_DIR`)
|
|
368
247
|
|
|
369
|
-
|
|
248
|
+
### Project instruction files
|
|
370
249
|
|
|
371
|
-
|
|
250
|
+
Orca injects `AGENTS.md` into planning context when found at the project root.
|
|
372
251
|
|
|
373
|
-
|
|
374
|
-
npm install
|
|
375
|
-
```
|
|
252
|
+
---
|
|
376
253
|
|
|
377
|
-
|
|
254
|
+
## Development
|
|
378
255
|
|
|
379
256
|
```bash
|
|
380
|
-
|
|
257
|
+
npm install # canonical install (use npm for deps)
|
|
258
|
+
bun run src/cli/index.ts "task" # local dev
|
|
381
259
|
bun test src
|
|
382
260
|
npm run test:postexec-json
|
|
383
261
|
```
|
|
384
262
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
Use the full validation gate before opening/publishing changes:
|
|
263
|
+
Full validation gate (runs lint → type-check → tests → build):
|
|
388
264
|
|
|
389
265
|
```bash
|
|
390
266
|
npm run validate
|
|
391
267
|
```
|
|
392
268
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
1. `npm run lint` (Oxlint syntax/style/static rules)
|
|
396
|
-
2. `npm run lint:type-aware` (Oxlint + tsgolint alpha type-aware + type-check diagnostics)
|
|
397
|
-
3. `npm run typecheck` (TypeScript Native Preview via `tsgo --noEmit`, with environment fallback to `tsc --noEmit`)
|
|
398
|
-
4. `npm run test`
|
|
399
|
-
5. `npm run build`
|
|
400
|
-
|
|
401
|
-
`npm run build` remains `tsc` because the native preview compiler is used here as a fast typecheck gate; production JS emission stays on stable `typescript` for predictable package output.
|
|
402
|
-
|
|
403
|
-
## GitHub release tracking (tags only)
|
|
404
|
-
|
|
405
|
-
Orca includes a lightweight GitHub Actions workflow at `.github/workflows/release.yml`:
|
|
406
|
-
|
|
407
|
-
- Trigger: push a tag matching `v*` (workflow only releases SemVer tags like `v0.4.0` or `v0.4.0-rc.1`)
|
|
408
|
-
- Behavior: create or update the matching GitHub Release
|
|
409
|
-
- Notes: auto-generated by GitHub (`generate_release_notes: true`)
|
|
410
|
-
|
|
411
|
-
This workflow is for release tracking/changelogs only. It does not publish to npm.
|
|
412
|
-
|
|
413
|
-
## npm publish automation (GitHub Actions)
|
|
269
|
+
### Package manager policy
|
|
414
270
|
|
|
415
|
-
|
|
271
|
+
- **npm** — canonical for deps, CI, and publish (`package-lock.json`)
|
|
272
|
+
- **Bun** — used as runtime/test runner locally (`bun.lock`)
|
|
416
273
|
|
|
417
|
-
|
|
418
|
-
- Optional fallback: manual `workflow_dispatch`
|
|
419
|
-
- Required secret: `NPM_TOKEN`
|
|
420
|
-
- Behavior: checkout → Node setup (npm registry auth) → safety checks → `npm ci` → `npm run validate` → publish if version is not already on npm
|
|
274
|
+
Commit both lockfiles. When changing deps: `npm install && bun install`.
|
|
421
275
|
|
|
422
|
-
|
|
276
|
+
---
|
|
423
277
|
|
|
424
|
-
|
|
425
|
-
2. Release commit must be reachable from the repository default branch
|
|
426
|
-
3. `package.json` version must match the tag version (without the leading `v`)
|
|
427
|
-
4. If the version already exists on npm, publish is skipped as a safe no-op
|
|
428
|
-
|
|
429
|
-
### Safe setup
|
|
430
|
-
|
|
431
|
-
1. In GitHub, open **Settings → Secrets and variables → Actions** for this repository.
|
|
432
|
-
2. Add a repository secret named `NPM_TOKEN`.
|
|
433
|
-
- Create this token in npm as a granular automation/publish token scoped only to `orcastrator`.
|
|
434
|
-
3. Use least privilege, avoid reusing broad account tokens, and rotate the token periodically.
|
|
435
|
-
|
|
436
|
-
### Safe run flow
|
|
437
|
-
|
|
438
|
-
1. Bump `package.json` to the intended release version.
|
|
439
|
-
2. Create and push a matching tag, for example: `git tag v1.2.3 && git push origin v1.2.3`.
|
|
440
|
-
3. Verify the package on npm after the workflow completes.
|
|
441
|
-
4. If needed, run the same workflow manually from **Actions → npm Publish → Run workflow** as a fallback (use an existing tag so the workflow publishes that exact tagged commit).
|
|
442
|
-
|
|
443
|
-
## Package manager + lockfile policy
|
|
444
|
-
|
|
445
|
-
Orca uses a mixed runtime/tooling model on purpose:
|
|
446
|
-
|
|
447
|
-
- **npm is canonical for dependency resolution, release builds, and deterministic installs**.
|
|
448
|
-
- **Bun is used as a runtime/test runner in local workflows** (`dev`, `start`, `test`).
|
|
449
|
-
|
|
450
|
-
Commit both lockfiles:
|
|
451
|
-
|
|
452
|
-
- `package-lock.json` — canonical dependency graph for npm/CI/publish
|
|
453
|
-
- `bun.lock` — Bun runtime resolution parity for local Bun commands
|
|
454
|
-
|
|
455
|
-
When dependencies change, update both lockfiles in the same PR:
|
|
456
|
-
|
|
457
|
-
```bash
|
|
458
|
-
npm install
|
|
459
|
-
bun install
|
|
460
|
-
```
|
|
278
|
+
## License
|
|
461
279
|
|
|
462
|
-
|
|
280
|
+
MIT — see [LICENSE](./LICENSE).
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { OrcaConfig, PlanResult, Task, TaskExecutionResult, TaskGraphReviewResult } from "../../types/index.js";
|
|
2
2
|
export type { PlanResult, TaskExecutionResult };
|
|
3
|
+
export interface PlanNeedDecision {
|
|
4
|
+
needsPlan: boolean;
|
|
5
|
+
reason: string;
|
|
6
|
+
}
|
|
3
7
|
/**
|
|
4
8
|
* Create a persistent Codex session. The thread persists across calls —
|
|
5
9
|
* planSpec and executeTask share context within the same session.
|
|
@@ -9,6 +13,7 @@ export interface ConsultationResult {
|
|
|
9
13
|
ok: boolean;
|
|
10
14
|
}
|
|
11
15
|
export declare function createCodexSession(cwd: string, config?: OrcaConfig): Promise<{
|
|
16
|
+
decidePlanningNeed: (spec: string, systemContext: string) => Promise<PlanNeedDecision>;
|
|
12
17
|
planSpec: (spec: string, systemContext: string) => Promise<PlanResult>;
|
|
13
18
|
reviewTaskGraph: (tasks: Task[], systemContext: string) => Promise<TaskGraphReviewResult>;
|
|
14
19
|
executeTask: (task: Task, runId: string, systemContext?: string) => Promise<TaskExecutionResult>;
|
|
@@ -23,6 +28,7 @@ export declare function createCodexSession(cwd: string, config?: OrcaConfig): Pr
|
|
|
23
28
|
* Each call creates a new client + thread (no persistence).
|
|
24
29
|
* Use createCodexSession() for persistent threads.
|
|
25
30
|
*/
|
|
31
|
+
export declare function decidePlanningNeed(spec: string, systemContext: string, config?: OrcaConfig): Promise<PlanNeedDecision>;
|
|
26
32
|
export declare function planSpec(spec: string, systemContext: string, config?: OrcaConfig): Promise<PlanResult>;
|
|
27
33
|
export declare function reviewTaskGraph(tasks: Task[], systemContext: string, config?: OrcaConfig): Promise<TaskGraphReviewResult>;
|
|
28
34
|
export declare function executeTask(task: Task, runId: string, config?: OrcaConfig, systemContext?: string): Promise<TaskExecutionResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agents/codex/session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,IAAI,EACJ,mBAAmB,EAEnB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAK9B,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agents/codex/session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,IAAI,EACJ,mBAAmB,EAEnB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAK9B,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AA8JhD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AA2RD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC;IACT,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvF,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACvE,eAAe,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1F,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjG,gBAAgB,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjE,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAiKD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAQhC;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,UAAU,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAQ9B"}
|
|
@@ -6,6 +6,9 @@ function getCodeSimplifierGuidance() {
|
|
|
6
6
|
return [
|
|
7
7
|
"For every code-writing step, explicitly apply code-simplifier guidance (use the bundled code-simplifier skill when available).",
|
|
8
8
|
"For every code-review step, explicitly apply code-simplifier guidance (use the bundled code-simplifier skill when available).",
|
|
9
|
+
"Bias toward the simplest implementation that satisfies the task.",
|
|
10
|
+
"Do not add compatibility fallbacks, legacy branches, or dead code unless explicitly required by the task.",
|
|
11
|
+
"Before finalizing, run a simplification pass: remove unnecessary complexity while preserving required behavior.",
|
|
9
12
|
"Keep changes behavior-preserving unless the task explicitly requires behavior changes.",
|
|
10
13
|
];
|
|
11
14
|
}
|
|
@@ -13,6 +16,8 @@ function buildPlanningPrompt(spec, systemContext) {
|
|
|
13
16
|
return [
|
|
14
17
|
systemContext,
|
|
15
18
|
"You are decomposing a spec into an ordered task graph.",
|
|
19
|
+
"Prefer task decomposition that maximizes safe parallelism for independent workstreams.",
|
|
20
|
+
"Isolate task ownership (files/subsystems) to avoid cross-task collisions.",
|
|
16
21
|
...getCodeSimplifierGuidance(),
|
|
17
22
|
"Return a JSON array of tasks.",
|
|
18
23
|
"Each task must include fields: id, name, description, dependencies, acceptance_criteria, status, retries, maxRetries.",
|
|
@@ -45,6 +50,18 @@ function buildTaskExecutionPrompt(task, runId, cwd, systemContext) {
|
|
|
45
50
|
"Do not wrap it in markdown fences. Do not add any text after the JSON line. The JSON line is required.",
|
|
46
51
|
].join("\n\n");
|
|
47
52
|
}
|
|
53
|
+
function buildPlanDecisionPrompt(spec, systemContext) {
|
|
54
|
+
return [
|
|
55
|
+
systemContext,
|
|
56
|
+
"You are Orca's planning gate.",
|
|
57
|
+
"Decide whether this spec needs multi-step planning or can run as one direct execution task.",
|
|
58
|
+
"Set needsPlan=true when coordination/dependencies/research/design across multiple steps are required.",
|
|
59
|
+
"Set needsPlan=false when a single focused execution task is sufficient.",
|
|
60
|
+
"Return JSON only with shape: {\"needsPlan\":boolean,\"reason\":string}",
|
|
61
|
+
"Spec:",
|
|
62
|
+
spec,
|
|
63
|
+
].join("\n\n");
|
|
64
|
+
}
|
|
48
65
|
function buildTaskGraphReviewPrompt(tasks, systemContext) {
|
|
49
66
|
return [
|
|
50
67
|
systemContext,
|
|
@@ -120,6 +137,24 @@ function parseTaskArray(raw) {
|
|
|
120
137
|
}
|
|
121
138
|
return parsed;
|
|
122
139
|
}
|
|
140
|
+
function parsePlanDecision(raw) {
|
|
141
|
+
const json = extractJson(raw);
|
|
142
|
+
const parsed = JSON.parse(json);
|
|
143
|
+
if (!parsed || typeof parsed !== "object") {
|
|
144
|
+
throw new Error("Codex plan decision response was not a JSON object");
|
|
145
|
+
}
|
|
146
|
+
const candidate = parsed;
|
|
147
|
+
if (typeof candidate.needsPlan !== "boolean") {
|
|
148
|
+
throw new Error("Codex plan decision response missing boolean needsPlan");
|
|
149
|
+
}
|
|
150
|
+
if (typeof candidate.reason !== "string" || candidate.reason.trim().length === 0) {
|
|
151
|
+
throw new Error("Codex plan decision response missing non-empty reason");
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
needsPlan: candidate.needsPlan,
|
|
155
|
+
reason: candidate.reason,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
123
158
|
const POSITIVE_COMPLETION_PATTERNS = [
|
|
124
159
|
/\bdone\b/i,
|
|
125
160
|
/\bcomplet/i,
|
|
@@ -201,8 +236,20 @@ function getCodexPath() {
|
|
|
201
236
|
return (process.env.ORCA_CODEX_PATH ??
|
|
202
237
|
`${process.env.HOME}/.nvm/versions/node/v22.22.0/bin/codex`);
|
|
203
238
|
}
|
|
204
|
-
|
|
205
|
-
|
|
239
|
+
const DEFAULT_THINKING_BY_STEP = {
|
|
240
|
+
decision: "low",
|
|
241
|
+
planning: "high",
|
|
242
|
+
execution: "medium",
|
|
243
|
+
};
|
|
244
|
+
function getEffort(config, step) {
|
|
245
|
+
const explicitThinkingLevel = config?.codex?.thinkingLevel?.[step];
|
|
246
|
+
if (explicitThinkingLevel !== undefined) {
|
|
247
|
+
return explicitThinkingLevel;
|
|
248
|
+
}
|
|
249
|
+
if (config?.codex?.effort !== undefined) {
|
|
250
|
+
return config.codex.effort;
|
|
251
|
+
}
|
|
252
|
+
return DEFAULT_THINKING_BY_STEP[step];
|
|
206
253
|
}
|
|
207
254
|
function buildTurnInput(text, skills) {
|
|
208
255
|
return [
|
|
@@ -247,7 +294,7 @@ async function loadCodexListedSkills(client, cwd, config) {
|
|
|
247
294
|
let response;
|
|
248
295
|
try {
|
|
249
296
|
response = await request.call(client, "skills/list", {
|
|
250
|
-
cwd,
|
|
297
|
+
cwds: [cwd],
|
|
251
298
|
forceReload: true,
|
|
252
299
|
...(perCwdExtraUserRoots.length > 0 ? { perCwdExtraUserRoots } : {}),
|
|
253
300
|
});
|
|
@@ -336,18 +383,21 @@ export async function createCodexSession(cwd, config) {
|
|
|
336
383
|
}
|
|
337
384
|
return {
|
|
338
385
|
threadId,
|
|
386
|
+
async decidePlanningNeed(spec, systemContext) {
|
|
387
|
+
const result = await client.runTurn({
|
|
388
|
+
threadId,
|
|
389
|
+
effort: getEffort(config, "decision"),
|
|
390
|
+
input: buildTurnInput(buildPlanDecisionPrompt(spec, systemContext), skills),
|
|
391
|
+
});
|
|
392
|
+
const rawResponse = extractAgentText(result);
|
|
393
|
+
return parsePlanDecision(rawResponse);
|
|
394
|
+
},
|
|
339
395
|
async planSpec(spec, systemContext) {
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
input: buildTurnInput(buildPlanningPrompt(spec, systemContext), skills),
|
|
346
|
-
})
|
|
347
|
-
: await client.runTurn({
|
|
348
|
-
threadId,
|
|
349
|
-
input: buildTurnInput(buildPlanningPrompt(spec, systemContext), skills),
|
|
350
|
-
});
|
|
396
|
+
const result = await client.runTurn({
|
|
397
|
+
threadId,
|
|
398
|
+
effort: getEffort(config, "planning"),
|
|
399
|
+
input: buildTurnInput(buildPlanningPrompt(spec, systemContext), skills),
|
|
400
|
+
});
|
|
351
401
|
const rawResponse = extractAgentText(result);
|
|
352
402
|
return {
|
|
353
403
|
tasks: parseTaskArray(rawResponse),
|
|
@@ -355,32 +405,20 @@ export async function createCodexSession(cwd, config) {
|
|
|
355
405
|
};
|
|
356
406
|
},
|
|
357
407
|
async reviewTaskGraph(tasks, systemContext) {
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
input: buildTurnInput(buildTaskGraphReviewPrompt(tasks, systemContext), skills),
|
|
364
|
-
})
|
|
365
|
-
: await client.runTurn({
|
|
366
|
-
threadId,
|
|
367
|
-
input: buildTurnInput(buildTaskGraphReviewPrompt(tasks, systemContext), skills),
|
|
368
|
-
});
|
|
408
|
+
const result = await client.runTurn({
|
|
409
|
+
threadId,
|
|
410
|
+
effort: getEffort(config, "planning"),
|
|
411
|
+
input: buildTurnInput(buildTaskGraphReviewPrompt(tasks, systemContext), skills),
|
|
412
|
+
});
|
|
369
413
|
const rawResponse = extractAgentText(result);
|
|
370
414
|
return parseTaskGraphReview(rawResponse);
|
|
371
415
|
},
|
|
372
416
|
async executeTask(task, runId, systemContext) {
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
input: buildTurnInput(buildTaskExecutionPrompt(task, runId, cwd, systemContext), skills),
|
|
379
|
-
})
|
|
380
|
-
: await client.runTurn({
|
|
381
|
-
threadId,
|
|
382
|
-
input: buildTurnInput(buildTaskExecutionPrompt(task, runId, cwd, systemContext), skills),
|
|
383
|
-
});
|
|
417
|
+
const result = await client.runTurn({
|
|
418
|
+
threadId,
|
|
419
|
+
effort: getEffort(config, "execution"),
|
|
420
|
+
input: buildTurnInput(buildTaskExecutionPrompt(task, runId, cwd, systemContext), skills),
|
|
421
|
+
});
|
|
384
422
|
const rawResponse = extractAgentText(result);
|
|
385
423
|
// Primary signal: use the SDK's structured turn status.
|
|
386
424
|
const status = result.turn.status;
|
|
@@ -415,17 +453,11 @@ export async function createCodexSession(cwd, config) {
|
|
|
415
453
|
"Task graph:",
|
|
416
454
|
taskGraphJson,
|
|
417
455
|
].join("\n");
|
|
418
|
-
const
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
input: buildTurnInput(prompt, skills),
|
|
424
|
-
})
|
|
425
|
-
: await client.runTurn({
|
|
426
|
-
threadId,
|
|
427
|
-
input: buildTurnInput(prompt, skills),
|
|
428
|
-
});
|
|
456
|
+
const result = await client.runTurn({
|
|
457
|
+
threadId,
|
|
458
|
+
effort: getEffort(config, "decision"),
|
|
459
|
+
input: buildTurnInput(prompt, skills),
|
|
460
|
+
});
|
|
429
461
|
const rawResponse = extractAgentText(result);
|
|
430
462
|
const json = extractJson(rawResponse);
|
|
431
463
|
const parsed = JSON.parse(json);
|
|
@@ -448,17 +480,11 @@ export async function createCodexSession(cwd, config) {
|
|
|
448
480
|
return result.reviewText;
|
|
449
481
|
},
|
|
450
482
|
async runPrompt(prompt) {
|
|
451
|
-
const
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
input: buildTurnInput(prompt, skills),
|
|
457
|
-
})
|
|
458
|
-
: await client.runTurn({
|
|
459
|
-
threadId,
|
|
460
|
-
input: buildTurnInput(prompt, skills),
|
|
461
|
-
});
|
|
483
|
+
const result = await client.runTurn({
|
|
484
|
+
threadId,
|
|
485
|
+
effort: getEffort(config, "execution"),
|
|
486
|
+
input: buildTurnInput(prompt, skills),
|
|
487
|
+
});
|
|
462
488
|
return extractAgentText(result);
|
|
463
489
|
},
|
|
464
490
|
async disconnect() {
|
|
@@ -471,6 +497,15 @@ export async function createCodexSession(cwd, config) {
|
|
|
471
497
|
* Each call creates a new client + thread (no persistence).
|
|
472
498
|
* Use createCodexSession() for persistent threads.
|
|
473
499
|
*/
|
|
500
|
+
export async function decidePlanningNeed(spec, systemContext, config) {
|
|
501
|
+
const session = await createCodexSession(process.cwd(), config);
|
|
502
|
+
try {
|
|
503
|
+
return await session.decidePlanningNeed(spec, systemContext);
|
|
504
|
+
}
|
|
505
|
+
finally {
|
|
506
|
+
await session.disconnect();
|
|
507
|
+
}
|
|
508
|
+
}
|
|
474
509
|
export async function planSpec(spec, systemContext, config) {
|
|
475
510
|
const session = await createCodexSession(process.cwd(), config);
|
|
476
511
|
try {
|
|
@@ -41,7 +41,7 @@ function printStyledHelpPage() {
|
|
|
41
41
|
{ command: "--last", description: "use the most recent run" },
|
|
42
42
|
{ command: "--config <path>", description: "explicit config file (auto-discovered by default)" },
|
|
43
43
|
{ command: "--codex-only", description: "override executor to Codex for the current run" },
|
|
44
|
-
{ command: "--codex-effort <value>", description: "override Codex
|
|
44
|
+
{ command: "--codex-effort <value>", description: "override Codex thinking level for the current run" },
|
|
45
45
|
{ command: "--full-auto", description: "skip all questions, proceed autonomously" },
|
|
46
46
|
{ command: "--on-complete <cmd>", description: "shell hook on run complete" },
|
|
47
47
|
{ command: "--on-error <cmd>", description: "shell hook on run error" },
|
|
@@ -102,7 +102,7 @@ export function registerResumeCommand(program) {
|
|
|
102
102
|
.option("--last", "Use the most recent run")
|
|
103
103
|
.option("--config <path>", "Path to orca config file")
|
|
104
104
|
.option("--codex-only", "Force Codex executor for this resumed run (overrides config)")
|
|
105
|
-
.option("--codex-effort <value>", "Codex
|
|
105
|
+
.option("--codex-effort <value>", "Codex thinking level override for this resumed run", parseCodexEffortOption)
|
|
106
106
|
.action(async (options) => {
|
|
107
107
|
try {
|
|
108
108
|
await resumeCommandHandler(options);
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -327,7 +327,7 @@ export async function runCommandHandler(options) {
|
|
|
327
327
|
await dispatcher.dispatch(event);
|
|
328
328
|
};
|
|
329
329
|
try {
|
|
330
|
-
await runPlanner(specPath, store, runId, effectiveConfig);
|
|
330
|
+
await runPlanner(specPath, store, runId, effectiveConfig, { allowPlanSkip: true });
|
|
331
331
|
}
|
|
332
332
|
catch (error) {
|
|
333
333
|
if (error instanceof InvalidPlanError) {
|
|
@@ -475,7 +475,7 @@ export function registerRunCommand(program) {
|
|
|
475
475
|
.option("-p, --prompt <text>", "Inline task text (alias for --task)")
|
|
476
476
|
.option("--config <path>", "Path to orca config file")
|
|
477
477
|
.option("--codex-only", "Force Codex executor for this run (overrides config)")
|
|
478
|
-
.option("--codex-effort <value>", "Codex
|
|
478
|
+
.option("--codex-effort <value>", "Codex thinking level override for this run", parseCodexEffortOption)
|
|
479
479
|
.option("--on-milestone <cmd>", "Shell hook command for onMilestone")
|
|
480
480
|
.option("--on-task-complete <cmd>", "Shell hook command for onTaskComplete")
|
|
481
481
|
.option("--on-task-fail <cmd>", "Shell hook command for onTaskFail")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkR9D,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAarF;AAOD,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,CAmE9F;AAiBD,wBAAsB,sBAAsB,CAC1C,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAMjC;AAED,wBAAsB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA2B3F"}
|
|
@@ -82,7 +82,24 @@ function coerceConfig(candidate) {
|
|
|
82
82
|
if (typeof candidate.codex.effort !== "string") {
|
|
83
83
|
throw new Error(`Config.codex.effort must be a string, got ${describeType(candidate.codex.effort)}`);
|
|
84
84
|
}
|
|
85
|
-
parseCodexEffort(candidate.codex.effort);
|
|
85
|
+
candidate.codex.effort = parseCodexEffort(candidate.codex.effort);
|
|
86
|
+
}
|
|
87
|
+
if ("thinkingLevel" in candidate.codex && candidate.codex.thinkingLevel !== undefined) {
|
|
88
|
+
if (!isObject(candidate.codex.thinkingLevel)) {
|
|
89
|
+
throw new Error(`Config.codex.thinkingLevel must be an object, got ${describeType(candidate.codex.thinkingLevel)}`);
|
|
90
|
+
}
|
|
91
|
+
for (const key of ["decision", "planning", "execution"]) {
|
|
92
|
+
const value = candidate.codex.thinkingLevel[key];
|
|
93
|
+
if (value !== undefined) {
|
|
94
|
+
if (typeof value !== "string") {
|
|
95
|
+
throw new Error(`Config.codex.thinkingLevel.${key} must be a string, got ${describeType(value)}`);
|
|
96
|
+
}
|
|
97
|
+
candidate.codex.thinkingLevel[key] = parseCodexEffort(value);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if ("thinking" in candidate.codex && candidate.codex.thinking !== undefined) {
|
|
102
|
+
throw new Error("Config.codex.thinking is no longer supported. Use Config.codex.thinkingLevel instead.");
|
|
86
103
|
}
|
|
87
104
|
if ("perCwdExtraUserRoots" in candidate.codex && candidate.codex.perCwdExtraUserRoots !== undefined) {
|
|
88
105
|
if (!Array.isArray(candidate.codex.perCwdExtraUserRoots)) {
|
|
@@ -211,7 +228,17 @@ export function mergeConfigs(...configs) {
|
|
|
211
228
|
}
|
|
212
229
|
}
|
|
213
230
|
if (merged.codex !== undefined || config.codex !== undefined) {
|
|
214
|
-
|
|
231
|
+
const mergedThinkingLevel = (merged.codex?.thinkingLevel !== undefined || config.codex?.thinkingLevel !== undefined)
|
|
232
|
+
? {
|
|
233
|
+
...merged.codex?.thinkingLevel,
|
|
234
|
+
...config.codex?.thinkingLevel
|
|
235
|
+
}
|
|
236
|
+
: undefined;
|
|
237
|
+
merged.codex = {
|
|
238
|
+
...merged.codex,
|
|
239
|
+
...config.codex,
|
|
240
|
+
...(mergedThinkingLevel !== undefined ? { thinkingLevel: mergedThinkingLevel } : {})
|
|
241
|
+
};
|
|
215
242
|
}
|
|
216
243
|
if (merged.pr !== undefined || config.pr !== undefined) {
|
|
217
244
|
merged.pr = { ...merged.pr, ...config.pr };
|
package/dist/core/planner.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { planSpec as planSpecWithCodex, reviewTaskGraph as reviewTaskGraphWithCodex } from "../agents/codex/session.js";
|
|
1
|
+
import { decidePlanningNeed as decidePlanningNeedWithCodex, planSpec as planSpecWithCodex, reviewTaskGraph as reviewTaskGraphWithCodex } from "../agents/codex/session.js";
|
|
2
2
|
import type { OrcaConfig } from "../types/index.js";
|
|
3
3
|
import { RunStore } from "../state/store.js";
|
|
4
4
|
type PlanSpecFn = typeof planSpecWithCodex;
|
|
5
|
+
type DecidePlanningNeedFn = typeof decidePlanningNeedWithCodex;
|
|
5
6
|
type ReviewTaskGraphFn = typeof reviewTaskGraphWithCodex;
|
|
6
7
|
export declare class InvalidPlanError extends Error {
|
|
7
8
|
readonly stage: "planner" | "review";
|
|
8
9
|
constructor(stage: "planner" | "review", message: string);
|
|
9
10
|
}
|
|
10
11
|
export declare function setPlanSpecForTests(fn: PlanSpecFn | null): void;
|
|
12
|
+
export declare function setDecidePlanningNeedForTests(fn: DecidePlanningNeedFn | null): void;
|
|
11
13
|
export declare function setReviewTaskGraphForTests(fn: ReviewTaskGraphFn | null): void;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
type PlannerOptions = {
|
|
15
|
+
allowPlanSkip?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare function runPlanner(specPath: string, store: RunStore, runId: string, config?: OrcaConfig, options?: PlannerOptions): Promise<void>;
|
|
18
|
+
export type { PlanSpecFn, DecidePlanningNeedFn, ReviewTaskGraphFn };
|
|
14
19
|
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/core/planner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,eAAe,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/core/planner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,QAAQ,IAAI,iBAAiB,EAAE,eAAe,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3K,OAAO,KAAK,EAAE,UAAU,EAA+B,MAAM,mBAAmB,CAAC;AAGjF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ7C,KAAK,UAAU,GAAG,OAAO,iBAAiB,CAAC;AAC3C,KAAK,oBAAoB,GAAG,OAAO,2BAA2B,CAAC;AAC/D,KAAK,iBAAiB,GAAG,OAAO,wBAAwB,CAAC;AAEzD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;gBAEzB,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM;CAKzD;AAaD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE/D;AAED,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAEnF;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAE7E;AAwKD,KAAK,cAAc,GAAG;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AA+CF,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/core/planner.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { planSpec as planSpecWithCodex, reviewTaskGraph as reviewTaskGraphWithCodex } from "../agents/codex/session.js";
|
|
3
|
+
import { decidePlanningNeed as decidePlanningNeedWithCodex, planSpec as planSpecWithCodex, reviewTaskGraph as reviewTaskGraphWithCodex } from "../agents/codex/session.js";
|
|
4
4
|
import { logger } from "../utils/logger.js";
|
|
5
5
|
import { loadSkills } from "../utils/skill-loader.js";
|
|
6
6
|
import { validateDAG } from "./dependency-graph.js";
|
|
@@ -17,16 +17,23 @@ export class InvalidPlanError extends Error {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
let testPlanSpecOverride = null;
|
|
20
|
+
let testDecidePlanningNeedOverride = null;
|
|
20
21
|
let testReviewTaskGraphOverride = null;
|
|
21
22
|
export function setPlanSpecForTests(fn) {
|
|
22
23
|
testPlanSpecOverride = fn;
|
|
23
24
|
}
|
|
25
|
+
export function setDecidePlanningNeedForTests(fn) {
|
|
26
|
+
testDecidePlanningNeedOverride = fn;
|
|
27
|
+
}
|
|
24
28
|
export function setReviewTaskGraphForTests(fn) {
|
|
25
29
|
testReviewTaskGraphOverride = fn;
|
|
26
30
|
}
|
|
27
31
|
function resolvePlanSpecImpl(_config) {
|
|
28
32
|
return testPlanSpecOverride ?? planSpecWithCodex;
|
|
29
33
|
}
|
|
34
|
+
function resolveDecidePlanningNeedImpl(_config) {
|
|
35
|
+
return testDecidePlanningNeedOverride ?? decidePlanningNeedWithCodex;
|
|
36
|
+
}
|
|
30
37
|
function resolveReviewTaskGraphImpl(_config) {
|
|
31
38
|
return testReviewTaskGraphOverride ?? reviewTaskGraphWithCodex;
|
|
32
39
|
}
|
|
@@ -153,10 +160,22 @@ async function runTaskGraphReview(tasks, systemContext, config) {
|
|
|
153
160
|
logger.success(`Review made ${review.changes.length} changes: ${summary}`);
|
|
154
161
|
return { finalTasks: updated, review };
|
|
155
162
|
}
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
function buildSingleExecutionTask(spec) {
|
|
164
|
+
const trimmed = spec.trim();
|
|
165
|
+
return [
|
|
166
|
+
{
|
|
167
|
+
id: "task-1",
|
|
168
|
+
name: "Execute requested work",
|
|
169
|
+
description: trimmed.length > 0 ? trimmed : "Execute the provided spec.",
|
|
170
|
+
dependencies: [],
|
|
171
|
+
acceptance_criteria: ["Requested work is completed and verified."],
|
|
172
|
+
status: "pending",
|
|
173
|
+
retries: 0,
|
|
174
|
+
maxRetries: 3,
|
|
175
|
+
},
|
|
176
|
+
];
|
|
177
|
+
}
|
|
178
|
+
async function runFullPlanning(spec, systemContext, config) {
|
|
160
179
|
const planSpecImpl = resolvePlanSpecImpl(config);
|
|
161
180
|
const result = await planSpecImpl(spec, systemContext, config);
|
|
162
181
|
try {
|
|
@@ -183,6 +202,28 @@ export async function runPlanner(specPath, store, runId, config) {
|
|
|
183
202
|
throw new InvalidPlanError("review", `Review stage failed. ${error instanceof Error ? error.message : String(error)}`);
|
|
184
203
|
}
|
|
185
204
|
}
|
|
205
|
+
return finalTasks;
|
|
206
|
+
}
|
|
207
|
+
export async function runPlanner(specPath, store, runId, config, options) {
|
|
208
|
+
const spec = await fs.readFile(specPath, "utf8");
|
|
209
|
+
const [skills, instructions] = await Promise.all([loadSkills(config), loadProjectInstructions(specPath)]);
|
|
210
|
+
const systemContext = buildSystemContext(skills, instructions);
|
|
211
|
+
let finalTasks;
|
|
212
|
+
if (options?.allowPlanSkip === true) {
|
|
213
|
+
const decidePlanningNeed = resolveDecidePlanningNeedImpl(config);
|
|
214
|
+
const decision = await decidePlanningNeed(spec, systemContext, config);
|
|
215
|
+
if (!decision.needsPlan) {
|
|
216
|
+
logger.info(`Planning skipped: ${decision.reason}`);
|
|
217
|
+
finalTasks = buildSingleExecutionTask(spec);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
logger.info(`Planning required: ${decision.reason}`);
|
|
221
|
+
finalTasks = await runFullPlanning(spec, systemContext, config);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
finalTasks = await runFullPlanning(spec, systemContext, config);
|
|
226
|
+
}
|
|
186
227
|
await store.writeTasks(runId, finalTasks);
|
|
187
228
|
await store.updateRun(runId, {
|
|
188
229
|
overallStatus: "planning",
|
package/dist/types/effort.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export
|
|
1
|
+
export declare const CODEX_THINKING_LEVEL_VALUES: readonly ["low", "medium", "high", "xhigh"];
|
|
2
|
+
export declare const CODEX_EFFORT_VALUES: readonly ["low", "medium", "high", "xhigh"];
|
|
3
|
+
export type CodexEffort = (typeof CODEX_THINKING_LEVEL_VALUES)[number];
|
|
3
4
|
export declare function parseCodexEffort(raw: string): CodexEffort;
|
|
4
5
|
//# sourceMappingURL=effort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effort.d.ts","sourceRoot":"","sources":["../../src/types/effort.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"effort.d.ts","sourceRoot":"","sources":["../../src/types/effort.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,6CAA8C,CAAC;AACvF,eAAO,MAAM,mBAAmB,6CAA8B,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAkBvE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAEzD"}
|
package/dist/types/effort.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const CODEX_THINKING_LEVEL_VALUES = ["low", "medium", "high", "xhigh"];
|
|
2
|
+
export const CODEX_EFFORT_VALUES = CODEX_THINKING_LEVEL_VALUES;
|
|
2
3
|
function formatAllowed(values) {
|
|
3
4
|
return values.map((value) => `'${value}'`).join(", ");
|
|
4
5
|
}
|
|
@@ -9,5 +10,5 @@ function parseEffort(raw, allowed, label) {
|
|
|
9
10
|
throw new Error(`${label} must be one of ${formatAllowed(allowed)}, got '${raw}'`);
|
|
10
11
|
}
|
|
11
12
|
export function parseCodexEffort(raw) {
|
|
12
|
-
return parseEffort(raw, CODEX_EFFORT_VALUES, "Codex
|
|
13
|
+
return parseEffort(raw, CODEX_EFFORT_VALUES, "Codex thinking level");
|
|
13
14
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -138,6 +138,11 @@ export interface OrcaConfig {
|
|
|
138
138
|
enabled?: boolean;
|
|
139
139
|
model?: string;
|
|
140
140
|
effort?: CodexEffort;
|
|
141
|
+
thinkingLevel?: {
|
|
142
|
+
decision?: CodexEffort;
|
|
143
|
+
planning?: CodexEffort;
|
|
144
|
+
execution?: CodexEffort;
|
|
145
|
+
};
|
|
141
146
|
command?: string;
|
|
142
147
|
timeoutMs?: number;
|
|
143
148
|
multiAgent?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEpD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,aAAa,GACb,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACT,UAAU,GACV,SAAS,GACT,oBAAoB,GACpB,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,EAAE,CAAC,EAAE;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,aAAa,CAAA;KAAE,CAAC;IACrD,cAAc,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,UAAU,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,aAAa,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,UAAU,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IACnD,UAAU,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IACnD,OAAO,EAAE,aAAa,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI,CACvD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAG1B,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,wBAAwB,GAChC;IACA,EAAE,EAAE,aAAa,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;KAChC,CAAC;CACH,GACC;IACA,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ,GACC;IACA,EAAE,EAAE,aAAa,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,GACC;IACA,EAAE,EAAE,gBAAgB,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GACC;IACA,EAAE,EAAE,mBAAmB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEJ,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;WAGG;QACH,oBAAoB,CAAC,EAAE,KAAK,CAAC;YAC3B,GAAG,EAAE,MAAM,CAAC;YACZ,cAAc,EAAE,MAAM,EAAE,CAAC;SAC1B,CAAC,CAAC;KACJ,CAAC;IACF,KAAK,CAAC,EAAE;SAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;KAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,EAAE,CAAC,EAAE;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,MAAM,CAAC,EAAE;QACP,0CAA0C;QAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,4CAA4C;QAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;QACjC,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;SAClC,CAAC;QACF,SAAS,CAAC,EAAE;YACV,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;YACjD,SAAS,CAAC,EAAE;gBACV,IAAI,CAAC,EAAE,OAAO,CAAC;gBACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;aACrB,CAAC;YACF,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE/D"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orcastrator",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.24",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -40,21 +40,21 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@inquirer/prompts": "^8.2.1",
|
|
43
|
-
"@ratley/codex-client": "^0.1.
|
|
43
|
+
"@ratley/codex-client": "^0.1.4",
|
|
44
44
|
"chalk": "^5.3.0",
|
|
45
45
|
"commander": "^13.1.0",
|
|
46
46
|
"zod": "^4.3.6"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
+
"@arethetypeswrong/cli": "^0.17.4",
|
|
49
50
|
"@types/bun": "^1.2.21",
|
|
51
|
+
"@typescript/native-preview": "^7.0.0-dev.20260219.1",
|
|
50
52
|
"husky": "^9.1.7",
|
|
51
53
|
"lint-staged": "^16.2.0",
|
|
52
54
|
"oxlint": "^1.49.0",
|
|
53
|
-
"typescript": "^5.8.2",
|
|
54
|
-
"@typescript/native-preview": "^7.0.0-dev.20260219.1",
|
|
55
55
|
"oxlint-tsgolint": "^0.14.1",
|
|
56
56
|
"publint": "^0.3.15",
|
|
57
|
-
"
|
|
57
|
+
"typescript": "^5.8.2"
|
|
58
58
|
},
|
|
59
59
|
"lint-staged": {
|
|
60
60
|
"*.ts": [
|