overlord-cli 0.2610281354.0 → 0.2610301407.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.
@@ -1 +1 @@
1
- 0.3.58
1
+ 0.3.59
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: antigravity
4
4
  label: "Antigravity Connector"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.58",
4
+ "version": "0.3.59",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.58",
3
+ "version": "0.3.59",
4
4
  "description": "Overlord mission protocol workflow for Claude Code — attach/update/ask/deliver, slash commands, and hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: claude
4
4
  label: "Claude Code Connector"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.58",
3
+ "version": "0.3.59",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: codex
4
4
  label: "Codex Connector"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.58",
3
+ "version": "0.3.59",
4
4
  "description": "Overlord mission protocol workflow for Cursor — attach/update/ask/deliver, slash commands, MCP bridge, and follow-up capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: cursor
4
4
  label: "Cursor Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: opencode
4
4
  label: "OpenCode Connector"
@@ -1,4 +1,4 @@
1
- contractVersion: "167"
1
+ contractVersion: "168"
2
2
  componentType: connector
3
3
  componentKey: pi
4
4
  label: "PI Connector"
@@ -186,6 +186,16 @@ with a JSON string array when a path contains a comma or the list is long. They
186
186
  Declared, never as native capture. Never use it to enumerate every changed or opened file, and
187
187
  never make a separate call just to declare paths.
188
188
 
189
+ If attach warns that its local binding or ledger is unavailable, keep the explicit
190
+ `--session-key` and `--objective-id` on `update` / `deliver` and include the known missed
191
+ paths normally. The CLI still submits them through the authenticated session as Declared;
192
+ do not omit paths or replace the file evidence with a list in the summary. Check stderr for
193
+ acceptance/sync warnings. If fallback synchronization fails, repeat those declarations on a
194
+ later update/deliver because no local retry copy exists. Re-run attach in the intended checkout
195
+ with the same `OVLD_HOME` to restore native capture. `changes` reports the local coverage gap
196
+ in `capture.healthCodes`; `objective-changes` reads synchronized evidence, including fallback
197
+ declarations, from the server.
198
+
189
199
  Artifacts and a delivery report remain optional annotations when they add review value. There
190
200
  is no per-file explanation input. Use `--payload-json` when the full delivery object fits comfortably inline
191
201
  (roughly under 8 KB). Larger inline `--*-json` values are rejected; stream them through the
@@ -233,12 +243,12 @@ human implementation follow-up such as deploy, secrets, or migrations (those bel
233
243
 
234
244
  #### Writing a deferred-work item
235
245
 
236
- | Field | Limit | What to write |
237
- | ---------- | --------- | ------------------------------------------------------------------- |
238
- | `title` | 80 chars | The work, as an imperative phrase. Shown as the row title. |
239
- | `change` | 400 chars | The specific change that is needed, in one or two sentences. |
240
- | `location` | 200 chars | Where to find it: the file, function, component, or command. |
241
- | `doneWhen` | 200 chars | The observable result, in one sentence. |
246
+ | Field | Limit | What to write |
247
+ | ---------- | --------- | ------------------------------------------------------------ |
248
+ | `title` | 80 chars | The work, as an imperative phrase. Shown as the row title. |
249
+ | `change` | 400 chars | The specific change that is needed, in one or two sentences. |
250
+ | `location` | 200 chars | Where to find it: the file, function, component, or command. |
251
+ | `doneWhen` | 200 chars | The observable result, in one sentence. |
242
252
 
243
253
  All four fields are required. A plain string item is rejected with `invalid_input`.
244
254
 
@@ -361,6 +371,9 @@ ovld protocol deliver --session-key <sessionKey> --objective-id $OBJECTIVE_ID \
361
371
  EOF
362
372
  ```
363
373
 
374
+ For spaces, quote the whole inline value, for example
375
+ `--paths "planning/demo environment.md,src/generated.ts"`, or use the JSON array form.
376
+
364
377
  Paths are normalized against the checkout. Traversal, symlinks that leave the checkout, ignored
365
378
  paths, and Overlord-managed paths are rejected with a reason on stderr and never fail the call.
366
379
 
@@ -143,6 +143,15 @@ paths, and Overlord-managed paths are rejected with a reason on stderr and never
143
143
  Absent targets (deleted or renamed-away files) are valid. Never enumerate every changed or
144
144
  opened file, and when unsure, describe the coverage gap in the summary instead of guessing.
145
145
 
146
+ Quote an inline value containing spaces: `--paths "planning/demo environment.md,src/generated.ts"`.
147
+ If the local binding or ledger is unavailable, pass `--session-key` and `--objective-id`
148
+ explicitly and keep the path flags. The CLI warns and submits normalized paths through the
149
+ authenticated session as Declared; do not drop the paths from delivery. Fallback sync failures
150
+ warn and need the declarations repeated on a later update/deliver (no local retry copy).
151
+ Use `objective-changes` to read synchronized fallback evidence. Local `changes` instead reports
152
+ the missing/invalid binding in `capture.healthCodes` and stderr. Restore native capture by
153
+ re-running attach in the intended checkout with the same `OVLD_HOME` and writable storage.
154
+
146
155
  ### Shared worktree safety (critical)
147
156
 
148
157
  The working tree may contain file changes from **other agents, missions, or objectives** running concurrently in the same checkout or worktree. Those changes are **not yours to undo**.
@@ -1837,7 +1837,7 @@ process.stdin.on('data', async chunk => {
1837
1837
  result: {
1838
1838
  protocolVersion: PROTOCOL_VERSION,
1839
1839
  capabilities: { tools: { listChanged: false } },
1840
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.58' }
1840
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.59' }
1841
1841
  }
1842
1842
  });
1843
1843
  continue;
@@ -41,6 +41,7 @@ Required content:
41
41
  - Deliver last with a summary written by behavior or component, plus artifacts when they add review value.
42
42
  - Never revert, restore, or delete concurrent work from other agents or missions to deliver; ask instead.
43
43
  - Declare only known shell/script/generator outputs, deletes, and rename endpoints that capture missed (`--paths` / `--paths-file`); there is no per-file explanation input.
44
+ - Quote inline path lists containing spaces; use a JSON string array with `--paths-file <path|->` for commas or long lists. If local binding/storage is unavailable, retain the explicit session key, objective id, and path flags: the CLI warns and submits Declared evidence through the authenticated session. Read it with `objective-changes`; local `changes` explains the coverage gap. Failed fallback sync requires repeating the declarations because it has no local retry copy.
44
45
  - Use stdin/file flags for shell-special content.
45
46
  - Use stdin/file flags for oversized JSON payloads (`--*-json` values above ~8 KB are rejected; use `--*-file -`).
46
47
  - Do not continue implementation after delivery unless follow-up execution is explicitly requested.
package/dist/index.js CHANGED
@@ -6028,6 +6028,9 @@ function writeManifest(workingDirectory, entries) {
6028
6028
  }
6029
6029
  writeOwnerOnlyFileAtomically(manifestPath2(workingDirectory), contents);
6030
6030
  }
6031
+ function manifestFits(workingDirectory, entries) {
6032
+ return Buffer.byteLength(JSON.stringify({ ...emptyManifest(workingDirectory), entries })) <= MAX_ACTIVE_SESSION_MANIFEST_BYTES;
6033
+ }
6031
6034
  function resolveEntry(entries, requestedObjectiveId) {
6032
6035
  const matching = entries.filter(
6033
6036
  (entry2) => !entry2.deliveryPendingSync && entryMatchesObjective(entry2, requestedObjectiveId)
@@ -6066,7 +6069,7 @@ function writeActiveSession({
6066
6069
  const prior = current.find(
6067
6070
  (entry) => entry.objectiveId === trimmedObjective && !entry.deliveryPendingSync
6068
6071
  );
6069
- const entries = current.filter(
6072
+ let entries = current.filter(
6070
6073
  (entry) => entry.objectiveId !== trimmedObjective || entry.deliveryPendingSync
6071
6074
  );
6072
6075
  if (prior && prior.sessionKey !== trimmedKey) {
@@ -6077,10 +6080,6 @@ function writeActiveSession({
6077
6080
  });
6078
6081
  if (!removed) entries.push({ ...prior, deliveryPendingSync: true });
6079
6082
  }
6080
- if (entries.filter((entry) => entry.objectiveId === trimmedObjective).length >= MAX_ACTIVE_OBJECTIVE_SESSION_BINDINGS) {
6081
- if (prior && prior.sessionKey !== trimmedKey) writeManifest(workingDirectory, entries);
6082
- return false;
6083
- }
6084
6083
  const next = {
6085
6084
  missionId: trimmedMission,
6086
6085
  objectiveId: trimmedObjective,
@@ -6089,6 +6088,24 @@ function writeActiveSession({
6089
6088
  attachedAt: (/* @__PURE__ */ new Date()).toISOString(),
6090
6089
  deliveryPendingSync: false
6091
6090
  };
6091
+ const hasCapacity = () => entries.filter((entry) => entry.objectiveId === trimmedObjective).length < MAX_ACTIVE_OBJECTIVE_SESSION_BINDINGS && manifestFits(workingDirectory, [...entries, next]);
6092
+ if (!hasCapacity()) {
6093
+ const retries = entries.filter((entry) => entry.deliveryPendingSync).sort((left, right) => Date.parse(left.attachedAt) - Date.parse(right.attachedAt));
6094
+ for (const entry of retries) {
6095
+ if (hasCapacity()) break;
6096
+ if (removeChangeLedger({
6097
+ workingDirectory,
6098
+ objectiveId: entry.objectiveId,
6099
+ sessionKey: entry.sessionKey
6100
+ })) {
6101
+ entries = entries.filter((candidate) => candidate !== entry);
6102
+ }
6103
+ }
6104
+ }
6105
+ if (!hasCapacity()) {
6106
+ if (prior && prior.sessionKey !== trimmedKey) writeManifest(workingDirectory, entries);
6107
+ return false;
6108
+ }
6092
6109
  if (prior?.sessionKey !== trimmedKey) {
6093
6110
  resetChangeLedger({
6094
6111
  workingDirectory,
@@ -45048,6 +45065,8 @@ attach:
45048
45065
  The CLI records the session's capture binding: bound when OVERLORD_OBJECTIVE_ID
45049
45066
  names the attached objective, unbound otherwise. Bound is configuration evidence
45050
45067
  only; it never claims the capture hook is installed or has run.
45068
+ Attach warns on stderr if its local binding cannot be saved. Check OVLD_HOME
45069
+ permissions and re-run attach in this checkout to restore native capture.
45051
45070
  Returns:
45052
45071
  Full JSON including session.sessionKey, mission, history, artifacts, sharedState,
45053
45072
  and agentInstructions with required workflow instructions and structured-field pointers.
@@ -45591,6 +45610,13 @@ deliver:
45591
45610
  out-of-checkout symlinks, ignored and Overlord-managed paths are rejected with a
45592
45611
  reason on stderr), and absent targets are valid. Never enumerate opened files or a
45593
45612
  shared-worktree diff; when unsure, describe the coverage limitation instead.
45613
+ Quote the whole --paths value when a path contains spaces. Use --paths-file -
45614
+ with a JSON string array on stdin for paths containing commas or a long list.
45615
+ If the local binding or ledger is missing, keep --session-key and --objective-id:
45616
+ declarations still synchronize through the authenticated session as Declared.
45617
+ A warning explains the local capture gap. Failed fallback sync has no local retry
45618
+ copy: repeat those declarations on update/deliver. objective-changes reads the
45619
+ synchronized server evidence; changes reads only this checkout's ledgers.
45594
45620
  Inline --*-json values larger than ~8 KB are rejected; use --payload-file - and
45595
45621
  stream JSON on stdin. Keep --summary inline.
45596
45622
 
@@ -45628,6 +45654,8 @@ changes:
45628
45654
  syncState synced | pending } sorted by path and capped at 200; total counts distinct
45629
45655
  local paths. coverage "unavailable" means no local session matched, not "no files
45630
45656
  changed". This is not complete cross-device history: use objective-changes.
45657
+ capture.healthCodes and stderr explain missing bindings or unreadable local storage.
45658
+ Re-run attach in the intended checkout with the same OVLD_HOME to restore capture.
45631
45659
 
45632
45660
  sync-changes:
45633
45661
  Purpose: