open-research-protocol 0.4.26 → 0.4.27
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/AGENT_INTEGRATION.md +15 -5
- package/CHANGELOG.md +30 -0
- package/bin/orp.js +21 -14
- package/cli/orp.py +1257 -40
- package/docs/AGENT_LOOP.md +9 -0
- package/docs/RESEARCH_COUNCIL.md +48 -0
- package/docs/START_HERE.md +18 -9
- package/package.json +1 -1
- package/packages/orp-workspace-launcher/src/orp-command.js +54 -0
- package/packages/orp-workspace-launcher/test/orp-command.test.js +1 -0
- package/scripts/orp-mcp +52 -1
package/AGENT_INTEGRATION.md
CHANGED
|
@@ -40,20 +40,24 @@ If the agent only remembers one ORP loop, it should be this:
|
|
|
40
40
|
```bash
|
|
41
41
|
orp status --json
|
|
42
42
|
```
|
|
43
|
-
3.
|
|
43
|
+
3. classify dirty worktree state before expansion
|
|
44
|
+
```bash
|
|
45
|
+
orp hygiene --json
|
|
46
|
+
```
|
|
47
|
+
4. resolve the right secret
|
|
44
48
|
```bash
|
|
45
49
|
orp secrets ensure --alias <alias> --provider <provider> --current-project --json
|
|
46
50
|
```
|
|
47
|
-
|
|
51
|
+
5. inspect the current frontier
|
|
48
52
|
```bash
|
|
49
53
|
orp frontier state --json
|
|
50
54
|
```
|
|
51
|
-
|
|
55
|
+
6. if the work feels confusing or too large, break it down before moving
|
|
52
56
|
```bash
|
|
53
57
|
orp mode breakdown granular-breakdown --json
|
|
54
58
|
```
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
7. do the next honest move
|
|
60
|
+
8. checkpoint it honestly
|
|
57
61
|
```bash
|
|
58
62
|
orp checkpoint create -m "checkpoint note" --json
|
|
59
63
|
```
|
|
@@ -62,6 +66,7 @@ That is the ORP rhythm in one line:
|
|
|
62
66
|
|
|
63
67
|
- recover continuity
|
|
64
68
|
- inspect repo safety
|
|
69
|
+
- classify dirty state and stop if anything is unowned
|
|
65
70
|
- resolve access
|
|
66
71
|
- inspect context
|
|
67
72
|
- break down complexity when comprehension would help
|
|
@@ -98,6 +103,11 @@ artifact paths (code/data/proofs/logs/papers).
|
|
|
98
103
|
- Treat **failed paths** as assets: record dead ends as a `Failed Path Record` with the blocking reason/counterexample and a
|
|
99
104
|
next hook.
|
|
100
105
|
- Resolve disputes by **verification or downgrade**, not argument.
|
|
106
|
+
- Run `orp hygiene --json` before long delegation, after material writeback, before API/remote/paid compute, and when dirty
|
|
107
|
+
state grows unexpectedly.
|
|
108
|
+
- Stop long-running expansion while hygiene reports `dirty_unclassified`; classify, refresh generated surfaces, canonicalize
|
|
109
|
+
useful scratch, or write a blocker before continuing.
|
|
110
|
+
- Hygiene is non-destructive: never reset, checkout, or delete files merely to hide dirty state.
|
|
101
111
|
|
|
102
112
|
### How to work in an ORP repo
|
|
103
113
|
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,36 @@ There was no prior in-repo changelog file, so the first formal entry starts
|
|
|
6
6
|
with the currently shipped `v0.4.4` release and summarizes the full release
|
|
7
7
|
delta reflected in this repo.
|
|
8
8
|
|
|
9
|
+
## v0.4.27 - 2026-04-18
|
|
10
|
+
|
|
11
|
+
This release adds a staged OpenAI research profile and default-on worktree
|
|
12
|
+
hygiene for agent loops. ORP-initialized repos now teach agents when to stop,
|
|
13
|
+
classify dirty paths, refresh generated surfaces, canonicalize scratch, or
|
|
14
|
+
write a blocker instead of letting unowned worktree state become invisible.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Added the built-in `deep-think-web-think-deep` research profile: Deep
|
|
19
|
+
Research, high-reasoning think, think plus web synthesis, high-reasoning
|
|
20
|
+
think, and a final Deep Research pass.
|
|
21
|
+
- Added profile listing/show commands and MCP exposure so Codex-like clients
|
|
22
|
+
can discover staged research templates and fill project-specific fields.
|
|
23
|
+
- Added `orp hygiene --json` and the `orp workspace hygiene --json` alias for
|
|
24
|
+
non-destructive worktree classification with dirty counts, categories,
|
|
25
|
+
unclassified and scratch counts, required action, and recommended next checks.
|
|
26
|
+
- Added `orp/hygiene-policy.json` scaffolding during `orp init` so each project
|
|
27
|
+
can customize canonical surfaces, artifact roots, scratch paths, and
|
|
28
|
+
classification rules.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Updated ORP agent docs, generated handoffs, agent policy, project context,
|
|
33
|
+
home/about metadata, and workspace help to include the hygiene stop rule:
|
|
34
|
+
no long-running expansion while dirty paths are unclassified.
|
|
35
|
+
- Research runs now persist generated lane prompts and can pass prior lane
|
|
36
|
+
outputs into later staged prompts while skipping live later-stage calls when
|
|
37
|
+
prerequisites are incomplete.
|
|
38
|
+
|
|
9
39
|
## v0.4.26 - 2026-04-17
|
|
10
40
|
|
|
11
41
|
This release adds ORP-native project context and OpenAI research-loop support,
|
package/bin/orp.js
CHANGED
|
@@ -36,24 +36,14 @@ async function runWorkspace(args) {
|
|
|
36
36
|
process.exit(code == null ? 0 : code);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
if (argv[0] === "compute") {
|
|
41
|
-
await runCompute(argv.slice(1));
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (argv[0] === "workspace") {
|
|
45
|
-
await runWorkspace(argv.slice(1));
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const captureOutput = isTopLevelHelp(argv);
|
|
39
|
+
function runPythonCli(args, { captureOutput }) {
|
|
50
40
|
let lastErr = null;
|
|
51
41
|
|
|
52
42
|
for (const py of candidates) {
|
|
53
|
-
const
|
|
43
|
+
const pyArgs = py === "py" ? ["-3", cliPath, ...args] : [cliPath, ...args];
|
|
54
44
|
const result = spawnSync(
|
|
55
45
|
py,
|
|
56
|
-
|
|
46
|
+
pyArgs,
|
|
57
47
|
captureOutput
|
|
58
48
|
? { encoding: "utf8" }
|
|
59
49
|
: { stdio: "inherit" },
|
|
@@ -68,7 +58,7 @@ async function main() {
|
|
|
68
58
|
process.stderr.write(result.stderr);
|
|
69
59
|
}
|
|
70
60
|
if (result.status === 0) {
|
|
71
|
-
process.stdout.write("\nAdditional wrapper surface:\n orp compute -h\n orp workspace tabs -h\n");
|
|
61
|
+
process.stdout.write("\nAdditional wrapper surface:\n orp compute -h\n orp workspace tabs -h\n orp workspace hygiene --json\n");
|
|
72
62
|
}
|
|
73
63
|
}
|
|
74
64
|
process.exit(result.status == null ? 1 : result.status);
|
|
@@ -88,6 +78,23 @@ async function main() {
|
|
|
88
78
|
process.exit(1);
|
|
89
79
|
}
|
|
90
80
|
|
|
81
|
+
async function main() {
|
|
82
|
+
if (argv[0] === "compute") {
|
|
83
|
+
await runCompute(argv.slice(1));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (argv[0] === "workspace" && argv[1] === "hygiene") {
|
|
87
|
+
runPythonCli(["hygiene", ...argv.slice(2)], { captureOutput: false });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (argv[0] === "workspace") {
|
|
91
|
+
await runWorkspace(argv.slice(1));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
runPythonCli(argv, { captureOutput: isTopLevelHelp(argv) });
|
|
96
|
+
}
|
|
97
|
+
|
|
91
98
|
main().catch((error) => {
|
|
92
99
|
console.error(String(error && error.stack ? error.stack : error));
|
|
93
100
|
process.exit(1);
|