sortie-dogs 0.14.6 → 0.14.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -6
- package/dist/asset-version.d.ts +1 -1
- package/dist/asset-version.js +1 -1
- package/dist/plugin/index.js +5 -1
- package/dist/plugin/profiled.js +11 -5
- package/dist/runtime-mission-assets.js +15 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,8 +19,8 @@ evidence-backed result, not more agents for their own sake.
|
|
|
19
19
|
[](https://www.npmjs.com/package/sortie-dogs)
|
|
20
20
|
[](LICENSE)
|
|
21
21
|
|
|
22
|
-
**Current release: [v0.14.
|
|
23
|
-
· [Release notes](docs/release-v0.14.
|
|
22
|
+
**Current release: [v0.14.7](https://github.com/zufall-upon/Sortie-dogs/releases/tag/v0.14.7)**
|
|
23
|
+
· [Release notes](docs/release-v0.14.7.md) · [Execution vision](docs/v0.14.0-execution-vision.md)
|
|
24
24
|
|
|
25
25
|
[Quick start](#quick-start) · [Workflow](#mission-workflow) · [Models](#default-models) ·
|
|
26
26
|
[Measured results](#measured-results) · [Configuration](#configuration) · [Documentation](#documentation)
|
|
@@ -57,7 +57,7 @@ Use an existing Codex CLI signed in with **ChatGPT**. On Windows, PowerShell **7
|
|
|
57
57
|
available; POSIX uses bash. Sortie does not install Codex, start login or use a metered API fallback.
|
|
58
58
|
|
|
59
59
|
```sh
|
|
60
|
-
npm install --save-dev sortie-dogs@0.14.
|
|
60
|
+
npm install --save-dev sortie-dogs@0.14.7
|
|
61
61
|
npx --no-install sortie-dogs codex init .
|
|
62
62
|
```
|
|
63
63
|
|
|
@@ -86,7 +86,7 @@ bridge. [Codex guide: SDK, permissions, progress, resume and manifest route](doc
|
|
|
86
86
|
Use **OpenCode V2**. In the target project:
|
|
87
87
|
|
|
88
88
|
```sh
|
|
89
|
-
npm install --save-dev sortie-dogs@0.14.
|
|
89
|
+
npm install --save-dev sortie-dogs@0.14.7
|
|
90
90
|
npx --no-install sortie-dogs init .
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -245,7 +245,7 @@ Install the desired package version and rerun **your host's** initializer:
|
|
|
245
245
|
|
|
246
246
|
An OpenCode config-local bridge may resolve a separate package; npm-global update alone does not
|
|
247
247
|
update it. [Global/update instructions](docs/configuration.md#global-availability).
|
|
248
|
-
The current Mission asset marker is `0.14.
|
|
248
|
+
The current Mission asset marker is `0.14.7-visible-recovery-v1`; the Codex skill marker is
|
|
249
249
|
`0.14.6-codex-skill-v1`. Installed markers alone do not prove a running host reloaded the new version.
|
|
250
250
|
|
|
251
251
|
There is no supported uninstall command. Remove the dependency and only known Sortie-owned paths;
|
|
@@ -261,9 +261,14 @@ follow the [manual removal guide](docs/uninstall.md), never delete the entire `.
|
|
|
261
261
|
[SWE-bench history](docs/benchmarks/swebench-lite-history.md) · [Historical local case study](docs/benchmark-reference.md).
|
|
262
262
|
- **Development:** [Testing](docs/testing.md) · [CLI testing](docs/cli-testing.md) ·
|
|
263
263
|
[Windows tests](docs/windows-tests.md) · [Release routine](docs/release-batch.md).
|
|
264
|
-
- **Releases:** [v0.14.6](docs/release-v0.14.6.md) · [v0.14.5](docs/release-v0.14.5.md) · [v0.14.4](docs/release-v0.14.4.md) · [v0.14.3](docs/release-v0.14.3.md) · [v0.14.2](docs/release-v0.14.2.md) · [v0.14.1](docs/release-v0.14.1.md) · [v0.14.0](docs/release-v0.14.0.md) · [v0.13.22](docs/release-v0.13.22.md) · [v0.13.21](docs/release-v0.13.21.md) · [v0.13.20](docs/release-v0.13.20.md) · [v0.13.19](docs/release-v0.13.19.md) · [v0.13.18](docs/release-v0.13.18.md) · [v0.13.17](docs/release-v0.13.17.md) · [v0.13.16](docs/release-v0.13.16.md) · [v0.13.15](docs/release-v0.13.15.md) · [v0.13.14](docs/release-v0.13.14.md) · [v0.13.13](docs/release-v0.13.13.md) · [v0.13.12](docs/release-v0.13.12.md) · [v0.13.11](docs/release-v0.13.11.md) · [v0.13.10](docs/release-v0.13.10.md) ·
|
|
264
|
+
- **Releases:** [v0.14.7](docs/release-v0.14.7.md) · [v0.14.6](docs/release-v0.14.6.md) · [v0.14.5](docs/release-v0.14.5.md) · [v0.14.4](docs/release-v0.14.4.md) · [v0.14.3](docs/release-v0.14.3.md) · [v0.14.2](docs/release-v0.14.2.md) · [v0.14.1](docs/release-v0.14.1.md) · [v0.14.0](docs/release-v0.14.0.md) · [v0.13.22](docs/release-v0.13.22.md) · [v0.13.21](docs/release-v0.13.21.md) · [v0.13.20](docs/release-v0.13.20.md) · [v0.13.19](docs/release-v0.13.19.md) · [v0.13.18](docs/release-v0.13.18.md) · [v0.13.17](docs/release-v0.13.17.md) · [v0.13.16](docs/release-v0.13.16.md) · [v0.13.15](docs/release-v0.13.15.md) · [v0.13.14](docs/release-v0.13.14.md) · [v0.13.13](docs/release-v0.13.13.md) · [v0.13.12](docs/release-v0.13.12.md) · [v0.13.11](docs/release-v0.13.11.md) · [v0.13.10](docs/release-v0.13.10.md) ·
|
|
265
265
|
[v0.13.9](docs/release-v0.13.9.md) · [All GitHub releases](https://github.com/zufall-upon/Sortie-dogs/releases).
|
|
266
266
|
|
|
267
|
+
## Support
|
|
268
|
+
|
|
269
|
+
[GitHub Sponsors](https://github.com/sponsors/zufall-upon) — sponsorships become available
|
|
270
|
+
once the maintainer's Sponsors profile is approved and published.
|
|
271
|
+
|
|
267
272
|
## Community
|
|
268
273
|
|
|
269
274
|
[Contributing](CONTRIBUTING.md) · [Code of conduct](CODE_OF_CONDUCT.md) ·
|
package/dist/asset-version.d.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* installed project marker without importing every asset body.
|
|
4
4
|
*/
|
|
5
5
|
export declare const RUNTIME_ASSET_VERSION = "0.3.89-completion-proof-v1";
|
|
6
|
-
export declare const V010_RUNTIME_ASSET_VERSION = "0.14.
|
|
6
|
+
export declare const V010_RUNTIME_ASSET_VERSION = "0.14.7-visible-recovery-v1";
|
|
7
7
|
export declare const CODEX_SKILL_ASSET_VERSION = "0.14.6-codex-skill-v1";
|
|
8
8
|
export type RuntimeAssetVersion = typeof RUNTIME_ASSET_VERSION | typeof V010_RUNTIME_ASSET_VERSION | typeof CODEX_SKILL_ASSET_VERSION;
|
package/dist/asset-version.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* installed project marker without importing every asset body.
|
|
4
4
|
*/
|
|
5
5
|
export const RUNTIME_ASSET_VERSION = "0.3.89-completion-proof-v1";
|
|
6
|
-
export const V010_RUNTIME_ASSET_VERSION = "0.14.
|
|
6
|
+
export const V010_RUNTIME_ASSET_VERSION = "0.14.7-visible-recovery-v1";
|
|
7
7
|
export const CODEX_SKILL_ASSET_VERSION = "0.14.6-codex-skill-v1";
|
package/dist/plugin/index.js
CHANGED
|
@@ -8488,12 +8488,16 @@ export const SortieDogsPlugin = async (input, options) => {
|
|
|
8488
8488
|
return settled;
|
|
8489
8489
|
},
|
|
8490
8490
|
releaseDirectUnit: async (actor) => {
|
|
8491
|
-
await releaseWriteGate(actor);
|
|
8491
|
+
const released = JSON.parse(await releaseWriteGate(actor));
|
|
8492
|
+
if (released.status === "denied")
|
|
8493
|
+
throw new Error(`mission-direct-release:${released.reason}`);
|
|
8492
8494
|
releaseSessionEnforcement(actor);
|
|
8493
8495
|
},
|
|
8494
8496
|
assertDirectUnitQuiescent: async (actor) => {
|
|
8495
8497
|
if (activeSessions.get(actor)?.inFlightCalls.size)
|
|
8496
8498
|
throw new Error("mission-direct-tools-running");
|
|
8499
|
+
if (bindingOperations.has(actor))
|
|
8500
|
+
throw new Error("mission-direct-binding-in-flight");
|
|
8497
8501
|
},
|
|
8498
8502
|
failDirectUnit: async (root, actor) => {
|
|
8499
8503
|
const direct = await input.runtimeBridge?.directMissionExecution?.(actor);
|
package/dist/plugin/profiled.js
CHANGED
|
@@ -1493,8 +1493,8 @@ export function createProfiledPlugin(profile, assetVersion) {
|
|
|
1493
1493
|
}
|
|
1494
1494
|
async function stop(root, reason, retireRoot = true) {
|
|
1495
1495
|
const directActor = (await operators.read(root))?.units.find(unit => unit.status === "running" && unit.directExecution)?.directExecution?.actor;
|
|
1496
|
-
|
|
1497
|
-
|
|
1496
|
+
// Stopping owned execution does not write its artifacts. Its existing reservation
|
|
1497
|
+
// is reconciled by cancelChildren, even when activation never acquired a writer.
|
|
1498
1498
|
if (retireRoot)
|
|
1499
1499
|
retired.add(root);
|
|
1500
1500
|
if (retireRoot)
|
|
@@ -2290,7 +2290,9 @@ export function createProfiledPlugin(profile, assetVersion) {
|
|
|
2290
2290
|
record(part.state.metadata) && ["running", "pending", "unknown"].includes(String(part.state.metadata.status)))) {
|
|
2291
2291
|
return JSON.stringify({ status: "direct-handoff-awaits-tools", next_action: "Finish the existing native command before handing off this unit; retain its result and continue here or delegate afterwards." });
|
|
2292
2292
|
}
|
|
2293
|
-
|
|
2293
|
+
// Yielding execution is management, not an artifact write. In particular, a
|
|
2294
|
+
// direct admission can exist even when its writer could not bind because another
|
|
2295
|
+
// live owner overlaps. Do not require that contested binding to hand it off.
|
|
2294
2296
|
const mission = await missions.retainContext(root, actor, history, notes);
|
|
2295
2297
|
await operators.handoffDirect(root, actor, await missions.handoffContext(mission));
|
|
2296
2298
|
}
|
|
@@ -3600,7 +3602,7 @@ export function createProfiledPlugin(profile, assetVersion) {
|
|
|
3600
3602
|
else if (args.status === "blocked" || args.status === "needs-decision") {
|
|
3601
3603
|
// This owner is stopping its direct work, not validating it. Keep the
|
|
3602
3604
|
// failed checks/candidate and settle its existing reservation once.
|
|
3603
|
-
const direct = await
|
|
3605
|
+
const direct = await directExecution(context.sessionID);
|
|
3604
3606
|
if (direct)
|
|
3605
3607
|
await control.failDirectUnit(root, context.sessionID);
|
|
3606
3608
|
}
|
|
@@ -4015,7 +4017,11 @@ export function createProfiledPlugin(profile, assetVersion) {
|
|
|
4015
4017
|
throw new Error(RUNTIME_PROFILE_SESSION_INACTIVE);
|
|
4016
4018
|
if (request.tool.startsWith("sortie_") && !request.tool.startsWith(profile.toolPrefix))
|
|
4017
4019
|
throw new Error("runtime-profile-tool-mismatch");
|
|
4018
|
-
|
|
4020
|
+
// Management can reconcile, yield, stop or report the owner's admission.
|
|
4021
|
+
// They must remain reachable when its artifact binding is the thing in conflict.
|
|
4022
|
+
// Ordinary tools and the parts of planning that actually write still activate it.
|
|
4023
|
+
const direct = request.tool === status || request.tool === planUnits || request.tool === cancel || request.tool === submitMission
|
|
4024
|
+
? await directExecution(request.sessionID) : await activateDirect(request.sessionID);
|
|
4019
4025
|
const writer = who.role === "dog-worker" || !!direct || !!await reviewerCorrection(request.sessionID);
|
|
4020
4026
|
if (who.role === "dog-reviewer" && writer) {
|
|
4021
4027
|
const correction = (await reviewerCorrection(request.sessionID));
|
|
@@ -155,6 +155,17 @@ ${MISSION_DEPENDENCY_WORKFLOW}
|
|
|
155
155
|
SAME mission before any Worker starts, retains its Coordinator and cumulative spend, and checks
|
|
156
156
|
old children before preparing a Worker. This is not permission to discard unchanged acceptance:
|
|
157
157
|
if the scope is uncertain, ask the user which requirements remain instead of inferring a replacement.
|
|
158
|
+
When execution management is inconsistent or manifest-overlap blocks the owning direct writer,
|
|
159
|
+
explain the observed stop, what can be reconciled, and that the existing requirements, results,
|
|
160
|
+
checks and cumulative spend remain. Offer to recover and continue in ordinary conversation;
|
|
161
|
+
an ordinary affirmative reply or a request to self-recover is enough. No hidden command or ID is
|
|
162
|
+
needed from the user, and ordinary autonomous recovery does not require a new approval.
|
|
163
|
+
Inspect operator_status to reconcile only native-proven ended work. If this session owns a quiescent
|
|
164
|
+
direct admission that cannot bind, plan_units with executor: "worker" and no units yields that same
|
|
165
|
+
unit and reservation without acquiring the contested writer. Explain the result and continue the
|
|
166
|
+
returned Task when its write scope is available. A genuinely live or unproven other owner is not
|
|
167
|
+
released: wait or separate work, and do not dispatch repeated conflicting attempts. Do not invent
|
|
168
|
+
terminal state, validation success, a fresh Mission, or a budget reset.
|
|
158
169
|
If a Coordinator reports mission-replan-worker-still-active after an interrupted native Task,
|
|
159
170
|
it cannot call cancel_operator (root-only). Inspect operator_status and the native Task outcome.
|
|
160
171
|
If the Worker is still active, wait, not duplicate. If the user chose to stop/replan, root calls
|
|
@@ -494,6 +505,10 @@ in this SAME session when your existing context makes that efficient. You are no
|
|
|
494
505
|
Use the Operator's preferred_executor as a starting recommendation. Start useful work with available context;
|
|
495
506
|
do not investigate merely to confirm the recommendation. Adapt through actual work, honoring explicit user choices.
|
|
496
507
|
Use plan_units with executor: "self" for direct work, or start_direct_unit for an already prepared unit.
|
|
508
|
+
If a direct admission cannot bind because of manifest-overlap, operator_status and plan_units with
|
|
509
|
+
executor: "worker" and no units remain management operations: yield only this quiescent owner, retain
|
|
510
|
+
its checks and reservation, and wait for a real conflicting writer rather than evicting it. Continue
|
|
511
|
+
the same Mission and actual remaining work; do not create another Mission to clear the conflict.
|
|
497
512
|
The host binds your native check results to the candidate; finish_direct_unit closes that work without
|
|
498
513
|
a Worker handoff. Independent Review and Operator final acceptance still follow. This is not limited to
|
|
499
514
|
micro-edits. Delegate to the configured Worker when that reduces work/cost or provides useful separation.
|