overlord-cli 0.2605241101.0 → 0.2605241431.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/_cli/add-cwd.mjs +4 -4
- package/bin/_cli/local-config.mjs +49 -6
- package/bin/_cli/protocol.mjs +2 -2
- package/bin/_cli/setup.mjs +3 -3
- package/package.json +1 -1
- package/plugins/antigravity/skills/overlord-ticket/SKILL.md +5 -5
- package/plugins/claude/skills/overlord-ticket/reference/cli.md +4 -4
- package/plugins/claude/skills/overlord-ticket/reference/shell-escaping.md +1 -1
- package/plugins/cursor/skills/overlord-ticket/reference/cli.md +4 -4
- package/plugins/cursor/skills/overlord-ticket/reference/shell-escaping.md +1 -1
- package/plugins/overlord/assets/icon.png +0 -0
- package/plugins/overlord/assets/logo.png +0 -0
- package/plugins/overlord/skills/overlord-ticket/reference/cli.md +4 -4
- package/plugins/overlord/skills/overlord-ticket/reference/shell-escaping.md +1 -1
package/bin/_cli/add-cwd.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// `ovld add-cwd` — interactively add the current working directory as a
|
|
4
4
|
// project resource. Lists the user's projects, prompts for a selection,
|
|
5
5
|
// registers cwd as a primary resource for this device, and writes the
|
|
6
|
-
// project entry into the directory's overlord.json file.
|
|
6
|
+
// project entry into the directory's .overlord/project.json file.
|
|
7
7
|
|
|
8
8
|
import os from 'node:os';
|
|
9
9
|
import path from 'node:path';
|
|
@@ -100,7 +100,7 @@ export async function runAddCwdCommand(args) {
|
|
|
100
100
|
|
|
101
101
|
Registers a directory (defaulting to the current working directory) as a
|
|
102
102
|
project resource for this device, and writes the project entry into the
|
|
103
|
-
directory's overlord.json file.
|
|
103
|
+
directory's .overlord/project.json file.
|
|
104
104
|
|
|
105
105
|
When --project-id is omitted, the command lists your projects and prompts
|
|
106
106
|
you to pick one.
|
|
@@ -160,7 +160,7 @@ By default the registered resource is marked primary for this device. Pass
|
|
|
160
160
|
if (!res.ok) {
|
|
161
161
|
if (res.status === 409) {
|
|
162
162
|
output.write(
|
|
163
|
-
`\nDirectory is already registered for "${project.name}" on this device. Updating overlord.json only.\n`
|
|
163
|
+
`\nDirectory is already registered for "${project.name}" on this device. Updating .overlord/project.json only.\n`
|
|
164
164
|
);
|
|
165
165
|
} else {
|
|
166
166
|
console.error(
|
|
@@ -178,7 +178,7 @@ By default the registered resource is marked primary for this device. Pass
|
|
|
178
178
|
output.write(`\nWrote ${result.filePath} (${result.action}).\n`);
|
|
179
179
|
} catch (err) {
|
|
180
180
|
output.write(
|
|
181
|
-
`\nWarning: could not update overlord.json: ${err instanceof Error ? err.message : err}\n`
|
|
181
|
+
`\nWarning: could not update .overlord/project.json: ${err instanceof Error ? err.message : err}\n`
|
|
182
182
|
);
|
|
183
183
|
}
|
|
184
184
|
|
|
@@ -1,18 +1,60 @@
|
|
|
1
|
-
// Read/merge/write logic for the per-folder
|
|
1
|
+
// Read/merge/write logic for the per-folder `.overlord/project.json` file.
|
|
2
2
|
// Mirrors lib/overlord-config/local-config.ts for CLI use.
|
|
3
3
|
|
|
4
4
|
import { promises as fs } from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
|
|
7
|
-
export const
|
|
7
|
+
export const OVERLORD_CONFIG_DIRNAME = '.overlord';
|
|
8
|
+
export const OVERLORD_CONFIG_FILENAME = 'project.json';
|
|
9
|
+
export const OVERLORD_SCRATCH_DIRNAME = 'tmp';
|
|
10
|
+
export const OVERLORD_LOG_DIRNAME = 'logs';
|
|
8
11
|
|
|
9
12
|
const FILE_COMMENT =
|
|
10
13
|
'This file lets Overlord (https://www.ovld.ai) identify which project this folder belongs to. It is created automatically when the folder is added as a project resource. DO NOT EDIT MANUALLY.';
|
|
14
|
+
const GITIGNORE_ENTRIES = ['.overlord/tmp/', '.overlord/logs/'];
|
|
11
15
|
|
|
12
16
|
function buildConfig(projects) {
|
|
13
17
|
return { _comment: FILE_COMMENT, projects };
|
|
14
18
|
}
|
|
15
19
|
|
|
20
|
+
function configDirPath(directoryPath) {
|
|
21
|
+
return path.join(directoryPath, OVERLORD_CONFIG_DIRNAME);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function configFilePath(directoryPath) {
|
|
25
|
+
return path.join(configDirPath(directoryPath), OVERLORD_CONFIG_FILENAME);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function scratchDirPath(directoryPath) {
|
|
29
|
+
return path.join(configDirPath(directoryPath), OVERLORD_SCRATCH_DIRNAME);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function ensureProjectLocalWorkspace(directoryPath) {
|
|
33
|
+
await fs.mkdir(configDirPath(directoryPath), { recursive: true });
|
|
34
|
+
await fs.mkdir(scratchDirPath(directoryPath), { recursive: true });
|
|
35
|
+
await ensureGitignoreEntries(directoryPath);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function ensureGitignoreEntries(directoryPath) {
|
|
39
|
+
const gitignorePath = path.join(directoryPath, '.gitignore');
|
|
40
|
+
let raw = '';
|
|
41
|
+
try {
|
|
42
|
+
raw = await fs.readFile(gitignorePath, 'utf8');
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (!error || error.code !== 'ENOENT') throw error;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const lines = raw.split(/\r?\n/);
|
|
48
|
+
const existing = new Set(lines.map(line => line.trim()));
|
|
49
|
+
const missing = GITIGNORE_ENTRIES.filter(entry => !existing.has(entry));
|
|
50
|
+
if (missing.length === 0) return;
|
|
51
|
+
|
|
52
|
+
const next = raw.trimEnd()
|
|
53
|
+
? `${raw.trimEnd()}\n\n# Overlord local scratch\n${missing.join('\n')}\n`
|
|
54
|
+
: `# Overlord local scratch\n${missing.join('\n')}\n`;
|
|
55
|
+
await fs.writeFile(gitignorePath, next, 'utf8');
|
|
56
|
+
}
|
|
57
|
+
|
|
16
58
|
function isProjectArray(value) {
|
|
17
59
|
return (
|
|
18
60
|
Array.isArray(value) &&
|
|
@@ -41,11 +83,12 @@ async function readExistingProjects(filePath) {
|
|
|
41
83
|
}
|
|
42
84
|
|
|
43
85
|
/**
|
|
44
|
-
* Ensures `directoryPath/
|
|
86
|
+
* Ensures `directoryPath/.overlord/project.json` lists the project. Returns
|
|
45
87
|
* `{ filePath, action: 'created' | 'added-project' | 'unchanged' }`.
|
|
46
88
|
*/
|
|
47
89
|
export async function upsertLocalOverlordConfig({ directoryPath, project }) {
|
|
48
|
-
const filePath =
|
|
90
|
+
const filePath = configFilePath(directoryPath);
|
|
91
|
+
await ensureProjectLocalWorkspace(directoryPath);
|
|
49
92
|
const existing = await readExistingProjects(filePath);
|
|
50
93
|
|
|
51
94
|
if (existing === null) {
|
|
@@ -68,12 +111,12 @@ export async function upsertLocalOverlordConfig({ directoryPath, project }) {
|
|
|
68
111
|
}
|
|
69
112
|
|
|
70
113
|
/**
|
|
71
|
-
* Removes `projectId` from `directoryPath/
|
|
114
|
+
* Removes `projectId` from `directoryPath/.overlord/project.json`. Deletes the file
|
|
72
115
|
* when the resulting projects list is empty. Returns
|
|
73
116
|
* `{ filePath, action: 'removed-project' | 'deleted-file' | 'not-found' | 'unchanged' }`.
|
|
74
117
|
*/
|
|
75
118
|
export async function removeProjectFromLocalOverlordConfig({ directoryPath, projectId }) {
|
|
76
|
-
const filePath =
|
|
119
|
+
const filePath = configFilePath(directoryPath);
|
|
77
120
|
const existing = await readExistingProjects(filePath);
|
|
78
121
|
|
|
79
122
|
if (existing === null) return { filePath, action: 'not-found' };
|
package/bin/_cli/protocol.mjs
CHANGED
|
@@ -1839,7 +1839,7 @@ async function protocolAddProjectResource(args) {
|
|
|
1839
1839
|
process.stderr.write(`OVERLORD_CONFIG=${result.filePath} (${result.action})\n`);
|
|
1840
1840
|
} catch (configError) {
|
|
1841
1841
|
process.stderr.write(
|
|
1842
|
-
`\nWarning: could not write overlord.json: ${configError instanceof Error ? configError.message : configError}\n`
|
|
1842
|
+
`\nWarning: could not write .overlord/project.json: ${configError instanceof Error ? configError.message : configError}\n`
|
|
1843
1843
|
);
|
|
1844
1844
|
}
|
|
1845
1845
|
}
|
|
@@ -3097,7 +3097,7 @@ Examples:
|
|
|
3097
3097
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --summary "Done"
|
|
3098
3098
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --summary "Done" --artifacts-file ./artifacts.json
|
|
3099
3099
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --payload-json '{"summary":"Done","artifacts":[{"type":"note","label":"Delivery","content":"..."}]}'
|
|
3100
|
-
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --payload-file
|
|
3100
|
+
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --payload-file .overlord/tmp/deliver.json
|
|
3101
3101
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --payload-file -
|
|
3102
3102
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --summary "Done" --skip-file-change-check
|
|
3103
3103
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --summary "Done" --timeout 60000
|
package/bin/_cli/setup.mjs
CHANGED
|
@@ -208,7 +208,7 @@ If you receive a prompt with a specified ticket ID, adhere to the following. If
|
|
|
208
208
|
\`\`\`bash
|
|
209
209
|
ovld protocol deliver --session-key <sessionKey> --ticket-id $TICKET_ID --payload-file -
|
|
210
210
|
\`\`\`
|
|
211
|
-
This avoids creating a scratch delivery file that needs cleanup. If your runtime cannot provide stdin directly, \`--payload-file
|
|
211
|
+
This avoids creating a scratch delivery file that needs cleanup. If your runtime cannot provide stdin directly, \`--payload-file .overlord/tmp/deliver.json\` remains supported; treat that file as ephemeral scratch data under \`.overlord/tmp\`, never commit it, and remove it after delivery.
|
|
212
212
|
|
|
213
213
|
## Change Rationales
|
|
214
214
|
|
|
@@ -295,7 +295,7 @@ If you receive a prompt with a specified ticket ID, adhere to the following. If
|
|
|
295
295
|
--artifacts-json '[{"type":"next_steps","label":"Next steps","content":"..."}]' \\\\
|
|
296
296
|
--change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
297
297
|
\`\`\`
|
|
298
|
-
For larger delivery JSON, prefer \`--payload-file -\` and stream the full payload on stdin so no scratch file needs to be created or removed. If you use \`--payload-file\`, \`--artifacts-file\`, or \`--change-rationales-file\` with a real path, treat that file as ephemeral scratch data
|
|
298
|
+
For larger delivery JSON, prefer \`--payload-file -\` and stream the full payload on stdin so no scratch file needs to be created or removed. If you use \`--payload-file\`, \`--artifacts-file\`, or \`--change-rationales-file\` with a real path, treat that file as ephemeral scratch data under \`.overlord/tmp\` and remove it after delivery. Do not leave delivery JSON checked into the worktree.
|
|
299
299
|
|
|
300
300
|
## Change Rationales
|
|
301
301
|
|
|
@@ -381,7 +381,7 @@ When done, deliver with artifacts and change rationales:
|
|
|
381
381
|
\`\`\`bash
|
|
382
382
|
ovld protocol deliver --session-key <sessionKey> --ticket-id $TICKET_ID --summary "Narrative: what you did, next steps." --artifacts-json '[{"type":"next_steps","label":"Next steps","content":"..."}]' --change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
383
383
|
\`\`\`
|
|
384
|
-
Use \`--payload-json\` for compact inline delivery objects. For larger delivery JSON, prefer \`--payload-file -\` with stdin so no scratch file needs to be created or removed. If you use a JSON file for delivery transport, keep it
|
|
384
|
+
Use \`--payload-json\` for compact inline delivery objects. For larger delivery JSON, prefer \`--payload-file -\` with stdin so no scratch file needs to be created or removed. If you use a JSON file for delivery transport, keep it under \`.overlord/tmp\` and remove it after the protocol call.
|
|
385
385
|
|
|
386
386
|
Rules:
|
|
387
387
|
- Always attach first and deliver last.
|
package/package.json
CHANGED
|
@@ -85,7 +85,7 @@ ovld protocol deliver --session-key <sessionKey> \
|
|
|
85
85
|
--change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If the summary contains special characters, use `--summary-file -` and pipe via a single-quoted heredoc (`<<'EOF'`) to prevent shell expansion. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
88
|
+
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If the summary contains special characters, use `--summary-file -` and pipe via a single-quoted heredoc (`<<'EOF'`) to prevent shell expansion. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
89
89
|
|
|
90
90
|
Revert an objective:
|
|
91
91
|
|
|
@@ -198,15 +198,15 @@ When you need a project ID for a protocol command and the ticket prompt did not
|
|
|
198
198
|
|
|
199
199
|
1. `--project-id` if explicitly provided.
|
|
200
200
|
2. Otherwise, let the CLI match the current working directory (the default behavior of `create`, `prompt`, `discover-project`).
|
|
201
|
-
3. If working-directory resolution returns nothing, read
|
|
201
|
+
3. If working-directory resolution returns nothing, read `.overlord/project.json` from the cwd (or any ancestor you have access to) and pass its project id via `--project-id`.
|
|
202
202
|
|
|
203
203
|
**Over MCP (web agents and hosted tools, where the server cannot see the agent's cwd):**
|
|
204
204
|
|
|
205
205
|
1. `projectId` (hosted MCP) or `project_id` (local shim) if explicitly provided or found in the ticket/context.
|
|
206
|
-
2. Read
|
|
206
|
+
2. Read `.overlord/project.json` from the directory the user is accessing and pass its project id as `projectId` / `project_id`.
|
|
207
207
|
3. As a last resort, try `workingDirectory` / `working_directory` resolution. If a device fingerprint is available, include `deviceFingerprint` / `device_fingerprint`.
|
|
208
208
|
|
|
209
|
-
If
|
|
209
|
+
If `.overlord/project.json` contains more than one project, show the user the project **names** from that file and ask which one to use before calling any protocol command — never silently pick one.
|
|
210
210
|
|
|
211
211
|
### Devices and checkout paths
|
|
212
212
|
|
|
@@ -276,4 +276,4 @@ This keeps the ticket feed readable while preserving the full document in versio
|
|
|
276
276
|
- Do not add or commit changes unless the user explicitly asks you to commit.
|
|
277
277
|
- Delivery is the concluding step. After delivering, stop implementation work unless the user explicitly asks for follow-up execution; once follow-up execution is complete, deliver again.
|
|
278
278
|
|
|
279
|
-
<!-- version: 0.1.
|
|
279
|
+
<!-- version: 0.1.5 -->
|
|
@@ -56,7 +56,7 @@ ovld protocol deliver --session-key <sessionKey> \
|
|
|
56
56
|
--change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
59
|
+
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
60
60
|
|
|
61
61
|
Ordinary deliver artifacts should use `next_steps`, `test_results`, `migration`, `note`, `url`, or `decision`.
|
|
62
62
|
|
|
@@ -140,13 +140,13 @@ When you need a project ID for a protocol command and the ticket prompt did not
|
|
|
140
140
|
|
|
141
141
|
1. `--project-id` if explicitly provided.
|
|
142
142
|
2. Otherwise, let the CLI match the current working directory (the default behavior of `create`, `prompt`, `discover-project`).
|
|
143
|
-
3. If working-directory resolution returns nothing, read
|
|
143
|
+
3. If working-directory resolution returns nothing, read `.overlord/project.json` from the cwd (or any ancestor you have access to) and pass its project id via `--project-id`.
|
|
144
144
|
|
|
145
145
|
**Over MCP (web agents and hosted tools, where the server cannot see the agent's cwd):**
|
|
146
146
|
|
|
147
147
|
1. `projectId` (hosted MCP) or `project_id` (local shim) if explicitly provided or found in the ticket/context.
|
|
148
|
-
2. Read
|
|
148
|
+
2. Read `.overlord/project.json` from the directory the user is accessing and pass its project id as `projectId` / `project_id`.
|
|
149
149
|
3. As a last resort, try `workingDirectory` / `working_directory` resolution. If a device fingerprint is available, include `deviceFingerprint` / `device_fingerprint`.
|
|
150
150
|
|
|
151
|
-
If
|
|
151
|
+
If `.overlord/project.json` contains more than one project, show the user the project **names** from that file and ask which one to use before calling any protocol command — never silently pick one.
|
|
152
152
|
|
|
@@ -12,5 +12,5 @@ Use `--payload-json` when the full delivery object fits comfortably inline. For
|
|
|
12
12
|
|
|
13
13
|
If the summary contains special characters, use `--summary-file -` and pipe via a single-quoted heredoc (`<<'EOF'`) to prevent shell expansion.
|
|
14
14
|
|
|
15
|
-
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
15
|
+
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
16
16
|
|
|
@@ -56,7 +56,7 @@ ovld protocol deliver --session-key <sessionKey> \
|
|
|
56
56
|
--change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
59
|
+
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
60
60
|
|
|
61
61
|
Ordinary deliver artifacts should use `next_steps`, `test_results`, `migration`, `note`, `url`, or `decision`.
|
|
62
62
|
|
|
@@ -140,13 +140,13 @@ When you need a project ID for a protocol command and the ticket prompt did not
|
|
|
140
140
|
|
|
141
141
|
1. `--project-id` if explicitly provided.
|
|
142
142
|
2. Otherwise, let the CLI match the current working directory (the default behavior of `create`, `prompt`, `discover-project`).
|
|
143
|
-
3. If working-directory resolution returns nothing, read
|
|
143
|
+
3. If working-directory resolution returns nothing, read `.overlord/project.json` from the cwd (or any ancestor you have access to) and pass its project id via `--project-id`.
|
|
144
144
|
|
|
145
145
|
**Over MCP (web agents and hosted tools, where the server cannot see the agent's cwd):**
|
|
146
146
|
|
|
147
147
|
1. `projectId` (hosted MCP) or `project_id` (local shim) if explicitly provided or found in the ticket/context.
|
|
148
|
-
2. Read
|
|
148
|
+
2. Read `.overlord/project.json` from the directory the user is accessing and pass its project id as `projectId` / `project_id`.
|
|
149
149
|
3. As a last resort, try `workingDirectory` / `working_directory` resolution. If a device fingerprint is available, include `deviceFingerprint` / `device_fingerprint`.
|
|
150
150
|
|
|
151
|
-
If
|
|
151
|
+
If `.overlord/project.json` contains more than one project, show the user the project **names** from that file and ask which one to use before calling any protocol command — never silently pick one.
|
|
152
152
|
|
|
@@ -12,5 +12,5 @@ Use `--payload-json` when the full delivery object fits comfortably inline. For
|
|
|
12
12
|
|
|
13
13
|
If the summary contains special characters, use `--summary-file -` and pipe via a single-quoted heredoc (`<<'EOF'`) to prevent shell expansion.
|
|
14
14
|
|
|
15
|
-
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
15
|
+
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
16
16
|
|
|
Binary file
|
|
Binary file
|
|
@@ -56,7 +56,7 @@ ovld protocol deliver --session-key <sessionKey> \
|
|
|
56
56
|
--change-rationales-json '[{"label":"Short reviewer title","file_path":"path/to/file.ts","summary":"What changed.","why":"Why it changed.","impact":"Behavioral impact.","hunks":[{"header":"@@ -10,6 +10,14 @@"}]}]'
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
59
|
+
Use `--payload-json` when the full delivery object fits comfortably inline. For larger delivery payloads, prefer `--payload-file -` and stream the full JSON on stdin so no scratch file needs to be created or removed. If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
60
60
|
|
|
61
61
|
Ordinary deliver artifacts should use `next_steps`, `test_results`, `migration`, `note`, `url`, or `decision`.
|
|
62
62
|
|
|
@@ -140,13 +140,13 @@ When you need a project ID for a protocol command and the ticket prompt did not
|
|
|
140
140
|
|
|
141
141
|
1. `--project-id` if explicitly provided.
|
|
142
142
|
2. Otherwise, let the CLI match the current working directory (the default behavior of `create`, `prompt`, `discover-project`).
|
|
143
|
-
3. If working-directory resolution returns nothing, read
|
|
143
|
+
3. If working-directory resolution returns nothing, read `.overlord/project.json` from the cwd (or any ancestor you have access to) and pass its project id via `--project-id`.
|
|
144
144
|
|
|
145
145
|
**Over MCP (web agents and hosted tools, where the server cannot see the agent's cwd):**
|
|
146
146
|
|
|
147
147
|
1. `projectId` (hosted MCP) or `project_id` (local shim) if explicitly provided or found in the ticket/context.
|
|
148
|
-
2. Read
|
|
148
|
+
2. Read `.overlord/project.json` from the directory the user is accessing and pass its project id as `projectId` / `project_id`.
|
|
149
149
|
3. As a last resort, try `workingDirectory` / `working_directory` resolution. If a device fingerprint is available, include `deviceFingerprint` / `device_fingerprint`.
|
|
150
150
|
|
|
151
|
-
If
|
|
151
|
+
If `.overlord/project.json` contains more than one project, show the user the project **names** from that file and ask which one to use before calling any protocol command — never silently pick one.
|
|
152
152
|
|
|
@@ -12,5 +12,5 @@ Use `--payload-json` when the full delivery object fits comfortably inline. For
|
|
|
12
12
|
|
|
13
13
|
If the summary contains special characters, use `--summary-file -` and pipe via a single-quoted heredoc (`<<'EOF'`) to prevent shell expansion.
|
|
14
14
|
|
|
15
|
-
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data
|
|
15
|
+
If you use `--payload-file`, `--artifacts-file`, or `--change-rationales-file` with a real path, treat that file as ephemeral scratch data under `.overlord/tmp` and remove it after delivery.
|
|
16
16
|
|