@awak-app/simy-cli 0.7.36 → 0.7.38
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 +36 -36
- package/package.json +1 -1
- package/src/agent.js +1 -1
- package/src/auto-update.js +25 -13
- package/src/backend-executable.js +1 -1
- package/src/cli-contract.js +1 -1
- package/src/cli-observability.js +2 -2
- package/src/codex-plugins/simy/.codex-plugin/plugin.json +5 -5
- package/src/codex-plugins/simy/hooks/README.md +3 -3
- package/src/codex-plugins/simy/hooks/delivery-loop.mjs +242 -26
- package/src/codex-plugins/simy/hooks/purpose-workspace.mjs +4 -1
- package/src/codex-plugins/simy/hooks/registered-requirement-checker.mjs +201 -0
- package/src/codex-plugins/simy/hooks/requirement-acceptance.mjs +69 -0
- package/src/codex-plugins/simy/skills/continue/SKILL.md +4 -4
- package/src/codex-plugins/simy/skills/continue/agents/openai.yaml +3 -3
- package/src/codex-plugins/simy/skills/diagnose/SKILL.md +2 -2
- package/src/codex-plugins/simy/skills/sqm-loop/SKILL.md +3 -3
- package/src/codex-plugins/simy/skills/sqm-loop/agents/openai.yaml +2 -2
- package/src/console/app.js +7 -7
- package/src/delivery-hooks/claude-workflow.md +1 -1
- package/src/delivery-hooks/command.js +5 -5
- package/src/delivery-hooks/supervisor-watchdog.js +3 -2
- package/src/desktop-host.js +53 -23
- package/src/index.js +1 -1
- package/src/local-task.js +1 -1
- package/src/orchestrator/presentation.js +1 -1
- package/src/runner.js +2 -2
- package/src/session-supervision/acceptance-reads.js +11 -2
- package/src/session-supervision/analysis-manager.js +9 -2
- package/src/session-supervision/automatic-continuation.js +11 -11
- package/src/session-supervision/catalog-refresh.js +16 -0
- package/src/session-supervision/claude-native-agent-contract.js +62 -0
- package/src/session-supervision/claude-outcome-review.js +7 -6
- package/src/session-supervision/claude-sessions.js +137 -76
- package/src/session-supervision/codex-app-server.js +3 -3
- package/src/session-supervision/codex-children.js +2 -2
- package/src/session-supervision/continuation-analysis.js +1 -1
- package/src/session-supervision/continuation-command.js +3 -3
- package/src/session-supervision/continuation-readiness.js +1 -1
- package/src/session-supervision/conversation-context.js +58 -26
- package/src/session-supervision/conversation-presentation.js +3 -3
- package/src/session-supervision/decision-presentation.js +8 -8
- package/src/session-supervision/discovery-window.js +8 -2
- package/src/session-supervision/index.js +38 -25
- package/src/session-supervision/purpose-verification.js +12 -3
- package/src/session-supervision/remote-errors.js +2 -2
- package/src/session-supervision/work-state.js +3 -3
- package/src/sqm/advisory-guidance.js +1 -0
- package/src/sqm/agent-skill.js +3 -3
- package/src/sqm/checkers.js +35 -1
- package/src/sqm/claude-plugin.js +8 -2
- package/src/sqm/hypothesis-knowledge.js +3 -3
- package/src/sqm/knowledge-recall.js +34 -12
- package/src/sqm/reasoned-assessment.js +22 -9
- package/src/update-detachment/runtime.js +2 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This signs the desktop into SIMY; browser automation uses its own provider conne
|
|
|
8
8
|
|
|
9
9
|
Technical coding failures retain their task and retry after a persisted 5–30 minute
|
|
10
10
|
cooldown. Automatic recovery preserves the original goal, usage limits, provider
|
|
11
|
-
connection and explicit stops.
|
|
11
|
+
connection and explicit stops. Turning on Delivery Loop can also adopt an
|
|
12
12
|
ordinary loop waiting for an external dependency, starting with read-only inspection.
|
|
13
13
|
A damaged provider-link file can be repaired by **Connect SIMY** for that provider;
|
|
14
14
|
the original file is retained and the other provider stays disconnected.
|
|
@@ -36,7 +36,7 @@ for configuration, tests and remaining host integration requirements.
|
|
|
36
36
|
|
|
37
37
|
ローカルDelivery Loopの0.6.24候補を版固定で実行するには、[ローカル候補版のインストール・実行](docs/local-delivery-runtime.md)を参照してください。
|
|
38
38
|
|
|
39
|
-
Local execution agent for SIMY Local Tasks and
|
|
39
|
+
Local execution agent for SIMY Local Tasks and Delivery Loop runs.
|
|
40
40
|
|
|
41
41
|
To supervise an explicitly requested current goal after a finished Codex run, use
|
|
42
42
|
`simy delivery followup --provider codex --session SESSION_ID --previous-run-id RUN_ID --objective "Current goal and expected result"`.
|
|
@@ -75,7 +75,7 @@ segments, and keep lifetime failure counts after event rotation.
|
|
|
75
75
|
|
|
76
76
|
Each AI app card separates **SIMY connection: on / stopped** from CLI, sign-in
|
|
77
77
|
and plugin health. Disconnecting collapses those details and explains that SIMY
|
|
78
|
-
monitoring and
|
|
78
|
+
monitoring and Delivery Loop are stopped. Details can still be opened;
|
|
79
79
|
reconnecting restores the item statuses. Plugin inspection failure never changes
|
|
80
80
|
the connection setting or hides its disconnect action.
|
|
81
81
|
|
|
@@ -116,7 +116,7 @@ The server's durable recovery migration requeues the same failed job and retains
|
|
|
116
116
|
its input, history and attempt count; it is required to recover jobs previously
|
|
117
117
|
held by the server's lifetime retry cap.
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Delivery Loop preflight accepts the task's existing requirement, acceptance
|
|
120
120
|
criteria, required checks and charter context alongside the repository/provider.
|
|
121
121
|
Its `startup` summary lists all blockers, unverified conditions and recovery
|
|
122
122
|
actions together. Environment-only calls remain supported. Task checks reuse the
|
|
@@ -135,7 +135,7 @@ remain available for history and usage warnings. The Web controller supports
|
|
|
135
135
|
connected local Codex/Claude engines; unsupported cloud execution is refused
|
|
136
136
|
before dispatch.
|
|
137
137
|
|
|
138
|
-
A completed
|
|
138
|
+
A completed Delivery Loop worker's structured result is saved privately before evidence
|
|
139
139
|
collection and the final observation flush. If the controller restarts after that save,
|
|
140
140
|
the authorized daemon recovers the same attempt and collects fresh evidence
|
|
141
141
|
without dispatching the completed worker again. Collector read failures retry up
|
|
@@ -157,14 +157,14 @@ repeated on every monitor tick; explicitly continue the same run to recover.
|
|
|
157
157
|
Older reviews without a saved CI basis can refresh only when their prior evidence
|
|
158
158
|
still establishes the complete reviewed identity; otherwise explicitly continue.
|
|
159
159
|
|
|
160
|
-
For interrupted
|
|
160
|
+
For interrupted Delivery Loop work, `GET /v1/agentic-loop/:id/recovery` provides a
|
|
161
161
|
read-only objective and checkout fingerprint. Reconcile an uncertain side effect
|
|
162
162
|
with `POST` to that endpoint (`action: reconcile`, authoritative
|
|
163
163
|
`operation_status`, `observation`, `evidence_refs`) before resuming. A paused
|
|
164
|
-
|
|
164
|
+
Delivery Loop run retains `POST /v1/agentic-loop/:id/continuation-ceilings` for an
|
|
165
165
|
explicit safety-ceiling extension under the progress policy. Token and retry
|
|
166
166
|
budgets are notification thresholds: they do not interrupt or stop useful work.
|
|
167
|
-
|
|
167
|
+
Delivery Loop checks a separate safety ceiling before each new provider call:
|
|
168
168
|
15,000,000 weighted Provider tokens and 50 executor attempts by default, using
|
|
169
169
|
existing `provider_token_ceiling` and `attempt_ceiling` settings when present.
|
|
170
170
|
The final attempt may still be reviewed if token allowance remains. Active
|
|
@@ -175,7 +175,7 @@ remaining work, explicitly extend the relevant ceiling within the existing
|
|
|
175
175
|
run. A notification-threshold increase alone cannot clear a safety stop; at the
|
|
176
176
|
maximum ceiling, further automatic calls remain blocked. Extension itself never
|
|
177
177
|
resets usage or resumes work. Local Task and managed Delivery behavior is not
|
|
178
|
-
changed by this
|
|
178
|
+
changed by this Delivery Loop safety gate. Both routes require the original authorized
|
|
179
179
|
account, organization and device throughout the request.
|
|
180
180
|
|
|
181
181
|
## Provider reconnection and saved consent
|
|
@@ -244,9 +244,9 @@ after reconnecting permits another probe, with bounded automatic cooldowns.
|
|
|
244
244
|
Conversation checks blocked by **Sign-in required** automatically recheck after
|
|
245
245
|
a fresh Codex or Claude login probe succeeds, including after an app restart.
|
|
246
246
|
An unchanged ready status cannot repeatedly re-run a failed check. Manual retry
|
|
247
|
-
remains available; continuing the conversation still requires **
|
|
247
|
+
remains available; continuing the conversation still requires **Continue automatically**.
|
|
248
248
|
|
|
249
|
-
You can
|
|
249
|
+
You can turn on **Continue automatically** while a conversation is running when its original
|
|
250
250
|
provider configuration is verified. SIMY saves the preference and waits for the
|
|
251
251
|
current turn to finish before checking remaining work. Configuration and runtime
|
|
252
252
|
blockers appear in the conversation view with recovery guidance; turning the
|
|
@@ -316,7 +316,7 @@ missing sources. Provider plugin enablement and hook trust remain provider-owned
|
|
|
316
316
|
|
|
317
317
|
For conversation continuation, select SIMY in the Codex app with `@` and ask
|
|
318
318
|
`continue this task` (Japanese: `この作業を続けて`). The `continue` skill uses the
|
|
319
|
-
running app's existing
|
|
319
|
+
running app's existing Delivery Loop switch (**Continue automatically**) and background coordinator. In
|
|
320
320
|
Codex CLI, use its native `$simy:continue` skill selector; in Claude Code use the
|
|
321
321
|
native `/simy:continue` command. Claude Code does not define `@simy` as a plugin
|
|
322
322
|
command: use the slash command for an explicit invocation. Merely mentioning
|
|
@@ -349,7 +349,7 @@ SIMY**, reopen it, and reconnect; closing the window alone does not restart the
|
|
|
349
349
|
background host. Refresh connections and confirm the conversation list returns.
|
|
350
350
|
Diagnostic `provider connection failed` entries distinguish `reason=update`,
|
|
351
351
|
`organization_change`, and `shutdown` without including credentials or transcripts.
|
|
352
|
-
Reconnection does not sign in to Codex CLI or restore revoked
|
|
352
|
+
Reconnection does not sign in to Codex CLI or restore a revoked Delivery Loop.
|
|
353
353
|
|
|
354
354
|
The plugin also includes a non-blocking connection reminder. At task startup,
|
|
355
355
|
resume, and prompt submission it reads the origin-scoped local discovery record
|
|
@@ -370,7 +370,7 @@ from the same maintained source as Codex; only provider terminology and hook/man
|
|
|
370
370
|
format differ. Installing source files does not imply that either provider has enabled
|
|
371
371
|
the plugin. Existing Claude settings, unrelated marketplaces, and plugins are preserved.
|
|
372
372
|
|
|
373
|
-
State-only feature-improvement collection ships with the generated Claude plugin, but uploads require the paired desktop CLI runtime to refresh device consent and drain its local outbox. Without that paired authenticated runtime, the plugin remains default-off and does not
|
|
373
|
+
State-only feature-improvement collection ships with the generated Claude plugin, but uploads require the paired desktop CLI runtime to refresh device consent and drain its local outbox. Without that paired authenticated runtime, the plugin remains default-off and does not turn on Delivery Loop.
|
|
374
374
|
|
|
375
375
|
After that first installation, the daemon checks installed workflows at startup
|
|
376
376
|
and every hour, including after a CLI automatic upgrade. It updates only existing
|
|
@@ -381,7 +381,7 @@ marketplace still points to SIMY’s generated local source. Plugin versions inc
|
|
|
381
381
|
receive a fresh cache. Use a new Codex task to pick up updated skills; running
|
|
382
382
|
tasks are not restarted. Missing or disabled plugins are not enabled automatically.
|
|
383
383
|
Failed refreshes retry on the next check without blocking daemon startup.
|
|
384
|
-
|
|
384
|
+
**Continue automatically** ON saves consent for the selected original conversation; it does not
|
|
385
385
|
immediately launch a second turn. A verified desktop discovery admission or an
|
|
386
386
|
existing exact admission saves this preference without another provider RPC.
|
|
387
387
|
After the current turn settles, continuation separately rechecks context, the
|
|
@@ -401,7 +401,7 @@ probes remain limited to recent conversations and explicitly retained work;
|
|
|
401
401
|
older rows remain visible with unverified execution state. The macOS work list then prioritizes verified running
|
|
402
402
|
conversations, including families with running children, followed by work needing
|
|
403
403
|
a human response and recent activity. Its All, Running, Needs attention, Completed
|
|
404
|
-
and Archived views combine with search. Tracking and
|
|
404
|
+
and Archived views combine with search. Tracking and Delivery Loop settings never
|
|
405
405
|
prove that an AI is running; observations older than 45 seconds or a failed
|
|
406
406
|
provider refresh display an unknown execution state.
|
|
407
407
|
|
|
@@ -417,7 +417,7 @@ unfinished children or open PRs keep a completed task out of the Completed view.
|
|
|
417
417
|
Codex candidates come from CLI, VS Code and app-server
|
|
418
418
|
conversation sources; non-interactive exec, unknown sources and delegated agents
|
|
419
419
|
are excluded. A hook observation alone cannot restore a filtered conversation.
|
|
420
|
-
Explicitly tracked, monitored,
|
|
420
|
+
Explicitly tracked, monitored, Delivery Loop and unsettled supervision records
|
|
421
421
|
remain visible even during a provider discovery failure. When a retained Codex conversation is
|
|
422
422
|
omitted from the recent provider page, SIMY reads its exact metadata without
|
|
423
423
|
loading turns or taking writer ownership. The same interactive source filter and
|
|
@@ -477,7 +477,7 @@ settings can differ, and project-scoped installations are labeled explicitly.
|
|
|
477
477
|
missing sources; existing sources still receive updates.
|
|
478
478
|
|
|
479
479
|
This is the recommended installation because the CLI can safely install patch
|
|
480
|
-
and minor releases, and the daemon restarts only when no
|
|
480
|
+
and minor releases, and the daemon restarts only when no Delivery Loop task is active. To run
|
|
481
481
|
the interactive chat after installation, use `simy`.
|
|
482
482
|
|
|
483
483
|
For a one-time evaluation or source development, these modes remain supported:
|
|
@@ -503,7 +503,7 @@ injected runtime context. Dated messages outside the configured lookback are
|
|
|
503
503
|
excluded even when their conversation continues today. Legacy transcripts with
|
|
504
504
|
no message timestamps use the file timestamp as a fallback. The local cursor stores only opaque hashes and
|
|
505
505
|
timestamps scoped to the connection, account, and device. Uploads require the
|
|
506
|
-
`user_conversation.v2`
|
|
506
|
+
SIMY service `user_conversation.v2` contract and exact per-chunk
|
|
507
507
|
receipts before the cursor advances. Deploy those companion changes before
|
|
508
508
|
enabling this CLI version; earlier receivers cannot acknowledge v2 history.
|
|
509
509
|
|
|
@@ -530,18 +530,18 @@ cursor is written under `$SIMY_HOME/work-pattern-history-sync/`.
|
|
|
530
530
|
|
|
531
531
|
The CLI starts a loopback HTTP agent on a random available port, keeps a
|
|
532
532
|
48-hour, origin-scoped local session, and opens a native coding chat. The first
|
|
533
|
-
chat message creates the remote audit ledger and starts the local
|
|
533
|
+
chat message creates the remote audit ledger and starts the local Delivery Loop
|
|
534
534
|
state machine; SIMY Web mirrors the lifecycle but is not required as the task
|
|
535
535
|
entry point. The CLI also accepts backend-issued launch challenges for Web-led
|
|
536
536
|
runs. It builds the requirement charter, runs Codex or Claude Code, audits
|
|
537
537
|
structured completion evidence, and re-instructs the executor while verification shows useful progress.
|
|
538
538
|
|
|
539
|
-
Before Web creates an
|
|
539
|
+
Before Web creates an Delivery Loop, it classifies whether the request actually
|
|
540
540
|
needs a managed PR, verification, evidence, and merge lifecycle. A bounded
|
|
541
541
|
ordinary task is sent to CLI 0.2.2 or newer through the one-time direct executor
|
|
542
542
|
instead. CLI independently recomputes the guardrail, restricts read-only work at
|
|
543
543
|
the Provider command boundary, and permits exactly one Provider invocation. It
|
|
544
|
-
does not create an
|
|
544
|
+
does not create an Delivery Loop ledger, audit session, or retry lifecycle for
|
|
545
545
|
that task.
|
|
546
546
|
|
|
547
547
|
## Local Tasks
|
|
@@ -570,13 +570,13 @@ process running as the same OS user.
|
|
|
570
570
|
|
|
571
571
|
|
|
572
572
|
CLI API contract v9 promotes non-coding work to a first-class **Local Task**
|
|
573
|
-
runtime. A Local Task is separate from
|
|
573
|
+
runtime. A Local Task is separate from Delivery Loop: it runs one bounded Codex
|
|
574
574
|
or Claude Code session without Git branches, pull requests, audits, or automatic
|
|
575
575
|
Provider retries. Knowledge-work deliverables use an isolated task sandbox by
|
|
576
576
|
default, so they do not require a repository.
|
|
577
577
|
|
|
578
578
|
`POST /v1/local-tasks/start` accepts JSON or the same verified multipart
|
|
579
|
-
attachment envelope used by
|
|
579
|
+
attachment envelope used by Delivery Loop and requires a stable
|
|
580
580
|
`Idempotency-Key`. Repeating the same request returns the original task; using
|
|
581
581
|
the same key for different content returns
|
|
582
582
|
`LOCAL_TASK_IDEMPOTENCY_CONFLICT`. `GET /v1/local-tasks/reconcile` with the same
|
|
@@ -728,7 +728,7 @@ Auto-update E2E screenshots are generated locally under
|
|
|
728
728
|
|
|
729
729
|
## Executor compatibility
|
|
730
730
|
|
|
731
|
-
SIMY checks the selected executor with `--version` before an
|
|
731
|
+
SIMY checks the selected executor with `--version` before an Delivery Loop can
|
|
732
732
|
start. The currently validated compatibility floors are Codex `0.144.0` and
|
|
733
733
|
Claude Code `2.1.200`. A missing, older, or unversioned executable fails the
|
|
734
734
|
preflight and returns the installed version, required version, and a recovery
|
|
@@ -850,7 +850,7 @@ permissions still require validation in the corresponding environment.
|
|
|
850
850
|
|
|
851
851
|
Normal runs do not require a separate sync command: the CLI
|
|
852
852
|
uses a verified local cache and revalidates it with TTL and ETag semantics.
|
|
853
|
-
The
|
|
853
|
+
The Delivery Loop runs min-check after each code modification and the full check
|
|
854
854
|
before PR readiness. Findings and the redacted signed-proof summary are recorded
|
|
855
855
|
in its audit; source text is never uploaded.
|
|
856
856
|
|
|
@@ -892,7 +892,7 @@ list.
|
|
|
892
892
|
|
|
893
893
|
## Interactive console
|
|
894
894
|
|
|
895
|
-
Running `simy` in a terminal opens the
|
|
895
|
+
Running `simy` in a terminal opens the Delivery Loop chat. It discovers the
|
|
896
896
|
current GitHub repository and branch, selects an available executor, and keeps
|
|
897
897
|
the composer active so a natural-language request can start immediately. Each
|
|
898
898
|
run appears in a selectable list with its lifecycle state, process ID, and a
|
|
@@ -992,7 +992,7 @@ Publishing is handled by GitHub Actions in `.github/workflows/publish.yml`.
|
|
|
992
992
|
|
|
993
993
|
### Repository system scopes
|
|
994
994
|
|
|
995
|
-
Version 0.5.7 supports signed `system_scope` snapshots from
|
|
995
|
+
Version 0.5.7 supports signed `system_scope` snapshots from SQM.
|
|
996
996
|
Each check pins the repository's connected component and graph revision. A new
|
|
997
997
|
check revalidates scoped bundles online; a stale or unavailable scope cannot fall
|
|
998
998
|
back to an older cached component. Minimum and full check proofs retain the
|
|
@@ -1039,13 +1039,13 @@ No twelve-view specification, reconstruction review, traceability matrix or new
|
|
|
1039
1039
|
review package is required. Check actual ease, clarity and accuracy using the
|
|
1040
1040
|
[UX guidance](src/orchestrator/delivery/references/ux-specification.md).
|
|
1041
1041
|
|
|
1042
|
-
## Purpose-driven
|
|
1042
|
+
## Purpose-driven Delivery Loop
|
|
1043
1043
|
|
|
1044
1044
|
The desktop **Continue automatically / 自動で続ける** switch enables purpose-driven
|
|
1045
1045
|
search: research, experiments, minimal implementation and direct outcome checks.
|
|
1046
1046
|
A separate review is used for semantic inspection or when explicitly requested. Failed methods trigger replanning; review findings return to repair.
|
|
1047
1047
|
Independent authorized work can continue while a controller-tracked operation waits.
|
|
1048
|
-
The existing Codex
|
|
1048
|
+
The existing Codex **Continue automatically** switch enables read-only diagnosis for uncertain or
|
|
1049
1049
|
information-waiting conversations, then assessed work. No default time/turn cap is
|
|
1050
1050
|
added; explicitly enrolled purpose budgets and user stops are preserved. Native
|
|
1051
1051
|
provider approval waits still require the original provider boundary to settle.
|
|
@@ -1086,7 +1086,7 @@ model responses or credentials. Historical summaries are not a replacement for
|
|
|
1086
1086
|
signed proof files or delivery acceptance. Records from versions that kept
|
|
1087
1087
|
analysis only in memory cannot be recovered after that process exits.
|
|
1088
1088
|
|
|
1089
|
-
The CLI
|
|
1089
|
+
The CLI Delivery Loop uses [proportionate retry and review decisions](docs/stop-prevention/proportionate-continuation.md): reasoning notes are advisory, and an independent reviewer may explicitly defer or dismiss minor/warning/info findings with a nonempty explanation while retaining them in the receipt. Required acceptance evidence and major safety findings remain protected.
|
|
1090
1090
|
|
|
1091
1091
|
### Local coding attempt result collection
|
|
1092
1092
|
|
|
@@ -1402,8 +1402,8 @@ Search covers the full available catalog, including older conversations. Use
|
|
|
1402
1402
|
Each row identifies its provider; identical IDs in Codex and Claude remain
|
|
1403
1403
|
separate rows. A provider failure preserves the other provider's results with
|
|
1404
1404
|
an explicit incomplete warning (`complete: false` and `warnings` in JSON).
|
|
1405
|
-
This view respects both saved provider connection settings and never
|
|
1406
|
-
|
|
1405
|
+
This view respects both saved provider connection settings and never turns on
|
|
1406
|
+
Delivery Loop. Disconnected providers are not read.
|
|
1407
1407
|
|
|
1408
1408
|
The terminal command reads this host and hosts explicitly registered in
|
|
1409
1409
|
`~/.simy/remote-hosts.json`. Use `--local-only` to skip SSH, and
|
|
@@ -1465,7 +1465,7 @@ unsupported-platform error for Claude native control.
|
|
|
1465
1465
|
|
|
1466
1466
|
Keep Claude available in an unlocked desktop while the operation runs. SIMY
|
|
1467
1467
|
opens the exact Code-tab conversation and uses Claude's own archive/restore
|
|
1468
|
-
control. Running conversations and
|
|
1468
|
+
control. Running conversations and Delivery Loop must be stopped first.
|
|
1469
1469
|
Before opening that conversation, SIMY checks Claude's visible windows for
|
|
1470
1470
|
unsent input, generating responses and dialogs. It leaves the current conversation
|
|
1471
1471
|
in place if any are present or the window/input state cannot be inspected. The
|
|
@@ -1487,7 +1487,7 @@ with `--provider codex`.
|
|
|
1487
1487
|
### Delivery entry routes
|
|
1488
1488
|
|
|
1489
1489
|
Crew owns `sessionLoopOptions` in the distributed loop kernel. Codex enrollment,
|
|
1490
|
-
Continue, follow-up, desktop controls and
|
|
1490
|
+
Continue, follow-up, desktop controls and Delivery Loop use purpose v2
|
|
1491
1491
|
by default; old false/v1 enrollment flags cannot select the retired mode.
|
|
1492
1492
|
Explicit strict/balanced policies and human acceptance criteria remain binding.
|
|
1493
1493
|
Compatible saved tasks migrate without replacing identity, history or budget.
|
|
@@ -1534,7 +1534,7 @@ occupancy without accepting the task. Long-running tasks transmit current
|
|
|
1534
1534
|
recovery context and recent work; the full history remains in durable state
|
|
1535
1535
|
and can be inspected through `delivery status`.
|
|
1536
1536
|
|
|
1537
|
-
### Reusable
|
|
1537
|
+
### Reusable Delivery Loop evaluation inputs
|
|
1538
1538
|
|
|
1539
1539
|
For the 20 versioned conversation regression cases, immutable stopping-protocol
|
|
1540
1540
|
plans, and pinned SWE-bench Pro public-task preparation, see
|
package/package.json
CHANGED
package/src/agent.js
CHANGED
|
@@ -3126,7 +3126,7 @@ export async function startAgent({
|
|
|
3126
3126
|
request,
|
|
3127
3127
|
});
|
|
3128
3128
|
const runId = String(remoteRun?.id || "");
|
|
3129
|
-
if (!runId) throw new Error("SIMY Web did not return
|
|
3129
|
+
if (!runId) throw new Error("SIMY Web did not return a Delivery Loop run id.");
|
|
3130
3130
|
const run = createRun({ runId, request, session, apiOrigin, localStateRoot: codingRunStateRoot, sqmHistoryRoot: sessionRoot });
|
|
3131
3131
|
await saveCodingRunSnapshot(codingRunStateRoot, run.snapshot);
|
|
3132
3132
|
registry.create(run);
|
package/src/auto-update.js
CHANGED
|
@@ -88,14 +88,7 @@ export class CliAutoUpdater extends EventEmitter {
|
|
|
88
88
|
current_version: options.currentVersion,
|
|
89
89
|
target_version: null,
|
|
90
90
|
install_mode: options.installMode,
|
|
91
|
-
automatic:
|
|
92
|
-
!options.disabled &&
|
|
93
|
-
options.autoUpdatesEnabled !== false &&
|
|
94
|
-
options.daemon &&
|
|
95
|
-
(options.installMode === "global_npm" ||
|
|
96
|
-
(options.installMode === MACOS_INSTALLER_MODE && options.installerMarker?.teamId)) &&
|
|
97
|
-
options.requestedPort === 0
|
|
98
|
-
),
|
|
91
|
+
automatic: options.autoUpdatesEnabled !== false && this.#automaticUpdateUnavailableReason() === null,
|
|
99
92
|
checked_at: null,
|
|
100
93
|
message: options.disabled
|
|
101
94
|
? "Automatic update checks are disabled."
|
|
@@ -105,11 +98,25 @@ export class CliAutoUpdater extends EventEmitter {
|
|
|
105
98
|
};
|
|
106
99
|
}
|
|
107
100
|
|
|
101
|
+
#automaticUpdateUnavailableReason() {
|
|
102
|
+
if (this.#options.disabled) return 'disabled_by_environment';
|
|
103
|
+
if (!this.#options.daemon) return 'foreground_session';
|
|
104
|
+
if (this.#options.requestedPort !== 0) return 'fixed_port';
|
|
105
|
+
if (this.#options.installMode === MACOS_INSTALLER_MODE) return this.#options.installerMarker?.teamId ? null : 'unsigned_installation';
|
|
106
|
+
return this.#options.installMode === 'global_npm' ? null : 'unsupported_installation';
|
|
107
|
+
}
|
|
108
|
+
|
|
108
109
|
snapshot() {
|
|
109
|
-
const
|
|
110
|
-
|
|
110
|
+
const unavailable = this.#automaticUpdateUnavailableReason();
|
|
111
|
+
const supported = unavailable === null;
|
|
111
112
|
return structuredClone({ ...this.#snapshot, auto_update_supported: Boolean(supported),
|
|
112
|
-
auto_update_enabled: this.#snapshot.automatic,
|
|
113
|
+
auto_update_enabled: this.#snapshot.automatic,
|
|
114
|
+
auto_update_unavailable_reason: unavailable,
|
|
115
|
+
// Explicit installation is independent of the saved background preference.
|
|
116
|
+
can_install_update: Boolean(supported && this.#options.installMode === MACOS_INSTALLER_MODE &&
|
|
117
|
+
this.#options.lastRelease?.artifact?.updater && this.#snapshot.target_version &&
|
|
118
|
+
classifyVersionChange(this.#options.currentVersion, this.#snapshot.target_version) !== 'major'),
|
|
119
|
+
auto_update_busy: Boolean(this.#applying || this.#confirmedUpdate), requires_task_stop: !this.#isIdle() });
|
|
113
120
|
}
|
|
114
121
|
|
|
115
122
|
setAutomaticUpdates(enabled) {
|
|
@@ -137,7 +144,7 @@ export class CliAutoUpdater extends EventEmitter {
|
|
|
137
144
|
await this.#checking;
|
|
138
145
|
if (!this.#snapshot.target_version) throw new Error('The update is no longer available.');
|
|
139
146
|
if (!this.#isIdle()) throw new Error('Task shutdown did not finish. Restart SIMY and retry the update.');
|
|
140
|
-
if (!this.#snapshot.automatic || classifyVersionChange(this.#options.currentVersion, this.#snapshot.target_version) === 'major') {
|
|
147
|
+
if ((!this.#snapshot.automatic && !this.snapshot().can_install_update) || classifyVersionChange(this.#options.currentVersion, this.#snapshot.target_version) === 'major') {
|
|
141
148
|
this.#setState('update_available', { message: 'Tasks stopped. Opening the update installer…' });
|
|
142
149
|
await this.performAction();
|
|
143
150
|
return this.snapshot();
|
|
@@ -155,6 +162,8 @@ export class CliAutoUpdater extends EventEmitter {
|
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
async performAction() {
|
|
165
|
+
const snapshot = this.snapshot();
|
|
166
|
+
if (snapshot.can_install_update && ['update_available', 'waiting_for_idle'].includes(snapshot.state)) return this.maybeApply({ manual: true });
|
|
158
167
|
const action = this.#snapshot.action;
|
|
159
168
|
if (action?.id === "download_macos_installer" && action.url) {
|
|
160
169
|
const result = await this.#options.openUrl(action.url);
|
|
@@ -309,7 +318,10 @@ export class CliAutoUpdater extends EventEmitter {
|
|
|
309
318
|
}
|
|
310
319
|
}
|
|
311
320
|
|
|
312
|
-
async maybeApply({ detach = false } = {}) {
|
|
321
|
+
async maybeApply({ detach = false, manual = false } = {}) {
|
|
322
|
+
if (manual && !this.#stopped && this.#snapshot.state === 'update_available' && this.snapshot().can_install_update) {
|
|
323
|
+
this.#setState('waiting_for_idle', { message: 'Preparing the requested update…', error: null });
|
|
324
|
+
}
|
|
313
325
|
if (this.#confirmedUpdate && !this.#confirmedReady) return this.snapshot();
|
|
314
326
|
if (this.#stopped || this.#snapshot.state !== "waiting_for_idle") {
|
|
315
327
|
return this.snapshot();
|
|
@@ -28,7 +28,7 @@ export async function inspectBackendExecutable(
|
|
|
28
28
|
backend,
|
|
29
29
|
{ spawnImpl = spawn, candidates, timeoutMs = 5_000, signal, discoveryOptions = {}, minimumVersion, executionEnvironment } = {},
|
|
30
30
|
) {
|
|
31
|
-
const assertActive = () => { if (signal?.aborted) throw Object.assign(new Error('
|
|
31
|
+
const assertActive = () => { if (signal?.aborted) throw Object.assign(new Error('AI provider inspection was cancelled.'), { code: 'cancelled' }); };
|
|
32
32
|
assertActive();
|
|
33
33
|
const policy = versionPolicy(backend);
|
|
34
34
|
const requiredVersion = minimumVersion || policy.minimumVersion;
|
package/src/cli-contract.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./durable-local-task-steps-contract.js";
|
|
15
15
|
import { buildExecutionCapabilityContract } from "./execution-capability-contract.js";
|
|
16
16
|
|
|
17
|
-
export const CLI_VERSION = "0.7.
|
|
17
|
+
export const CLI_VERSION = "0.7.38";
|
|
18
18
|
export const CLI_API_CONTRACT_VERSION = 10;
|
|
19
19
|
|
|
20
20
|
export function narrativeImageCapabilityMetadata() {
|
package/src/cli-observability.js
CHANGED
|
@@ -6,8 +6,8 @@ import { dirname, join } from 'node:path';
|
|
|
6
6
|
import { execFile } from 'node:child_process';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
8
8
|
import { webApiHeaders, webApiUrl } from './web-api.js';
|
|
9
|
-
//
|
|
10
|
-
|
|
9
|
+
// The standalone Claude plugin generator freezes this import to the same version.
|
|
10
|
+
import { CLI_VERSION } from './cli-contract.js';
|
|
11
11
|
|
|
12
12
|
const STORE = 'cli-observability-state.json';
|
|
13
13
|
const LEGACY_CONFIG = 'cli-observability.json';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "simy",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "SIMY
|
|
4
|
+
"description": "SIMY Delivery Loop, SQM checks and PR review through the original conversation's existing controls.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Specialist Doctors Inc.",
|
|
7
7
|
"url": "https://github.com/SpecialistDoctors-Inc"
|
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
"interface": {
|
|
18
18
|
"displayName": "SIMY",
|
|
19
19
|
"shortDescription": "Continue, check and review.",
|
|
20
|
-
"longDescription": "Ask SIMY to continue unfinished work in the original conversation through the running CLI app's existing
|
|
20
|
+
"longDescription": "Ask SIMY to continue unfinished work in the original conversation through the running CLI app's existing Delivery Loop controller (Continue automatically), or request SQM checks and PR reviews. Read the same real work state and next action as the app. Saved delegation is not execution proof. Stops, permission waits and opt-outs are preserved. Retired local delivery agents stay retired.",
|
|
21
21
|
"developerName": "Specialist Doctors Inc.",
|
|
22
22
|
"category": "Developer Tools",
|
|
23
23
|
"capabilities": [
|
|
24
|
-
"
|
|
24
|
+
"Delivery Loop",
|
|
25
25
|
"Quality",
|
|
26
26
|
"Review"
|
|
27
27
|
],
|
|
28
28
|
"defaultPrompt": [
|
|
29
|
-
"
|
|
30
|
-
"Run
|
|
29
|
+
"Continue this conversation automatically with SIMY and show its actual progress.",
|
|
30
|
+
"Run a SIMY SQM check for the current thread.",
|
|
31
31
|
"Review the current pull request with SIMY."
|
|
32
32
|
],
|
|
33
33
|
"composerIcon": "./assets/logo.png",
|
|
@@ -27,7 +27,7 @@ including when SessionStart was missed. No per-project enable command is needed.
|
|
|
27
27
|
preserve it. Existing loops, explicit stops, session opt-outs and revoked provider
|
|
28
28
|
consent remain authoritative. No hook grants provider trust. Stop checks that
|
|
29
29
|
session's checkpoint and returns bounded next-step instructions. Approval/input
|
|
30
|
-
blocks, interruption, completion, failures and missing progress stop
|
|
30
|
+
blocks, interruption, completion, failures and missing progress stop Delivery Loop.
|
|
31
31
|
Provider errors/exits are surfaced to SIMY's desktop; a dead provider is not
|
|
32
32
|
silently restarted. No hook writes trust, permission settings, or SQM evidence.
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ Private state is under `SIMY_HOME/delivery-hooks` (default `~/.simy/delivery-hoo
|
|
|
35
35
|
keyed by provider and session ID and bound to the canonical working directory.
|
|
36
36
|
Historical hook observations do not prove hooks are still enabled. See the
|
|
37
37
|
CLI delivery command documentation for checkpoint commands and explicit recovery.
|
|
38
|
-
The local Codex delivery-loop skill is retired; request the CLI
|
|
38
|
+
The local Codex delivery-loop skill is retired; request the CLI Delivery Loop
|
|
39
39
|
explicitly for new delivery work. Existing lifecycle hooks do not start it.
|
|
40
40
|
|
|
41
41
|
SIMY does not limit a task's elapsed time, number of turns or provider tokens.
|
|
@@ -47,7 +47,7 @@ criteria cannot manufacture progress, and activity alone does not prove it.
|
|
|
47
47
|
Required approvals, manual stops and unreconciled effects still block dispatch.
|
|
48
48
|
|
|
49
49
|
Context-first tasks without host-checkable acceptance pause rather than fail at
|
|
50
|
-
that limit, so
|
|
50
|
+
that limit, so Delivery Loop stays available after review. An explicit resume,
|
|
51
51
|
answer or approval resets both no-progress attempt counters and the progress clock,
|
|
52
52
|
even before a threshold was reached. Failure counts and verified criterion history
|
|
53
53
|
remain; reusing old evidence cannot count as fresh progress.
|