@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.
Files changed (55) hide show
  1. package/README.md +36 -36
  2. package/package.json +1 -1
  3. package/src/agent.js +1 -1
  4. package/src/auto-update.js +25 -13
  5. package/src/backend-executable.js +1 -1
  6. package/src/cli-contract.js +1 -1
  7. package/src/cli-observability.js +2 -2
  8. package/src/codex-plugins/simy/.codex-plugin/plugin.json +5 -5
  9. package/src/codex-plugins/simy/hooks/README.md +3 -3
  10. package/src/codex-plugins/simy/hooks/delivery-loop.mjs +242 -26
  11. package/src/codex-plugins/simy/hooks/purpose-workspace.mjs +4 -1
  12. package/src/codex-plugins/simy/hooks/registered-requirement-checker.mjs +201 -0
  13. package/src/codex-plugins/simy/hooks/requirement-acceptance.mjs +69 -0
  14. package/src/codex-plugins/simy/skills/continue/SKILL.md +4 -4
  15. package/src/codex-plugins/simy/skills/continue/agents/openai.yaml +3 -3
  16. package/src/codex-plugins/simy/skills/diagnose/SKILL.md +2 -2
  17. package/src/codex-plugins/simy/skills/sqm-loop/SKILL.md +3 -3
  18. package/src/codex-plugins/simy/skills/sqm-loop/agents/openai.yaml +2 -2
  19. package/src/console/app.js +7 -7
  20. package/src/delivery-hooks/claude-workflow.md +1 -1
  21. package/src/delivery-hooks/command.js +5 -5
  22. package/src/delivery-hooks/supervisor-watchdog.js +3 -2
  23. package/src/desktop-host.js +53 -23
  24. package/src/index.js +1 -1
  25. package/src/local-task.js +1 -1
  26. package/src/orchestrator/presentation.js +1 -1
  27. package/src/runner.js +2 -2
  28. package/src/session-supervision/acceptance-reads.js +11 -2
  29. package/src/session-supervision/analysis-manager.js +9 -2
  30. package/src/session-supervision/automatic-continuation.js +11 -11
  31. package/src/session-supervision/catalog-refresh.js +16 -0
  32. package/src/session-supervision/claude-native-agent-contract.js +62 -0
  33. package/src/session-supervision/claude-outcome-review.js +7 -6
  34. package/src/session-supervision/claude-sessions.js +137 -76
  35. package/src/session-supervision/codex-app-server.js +3 -3
  36. package/src/session-supervision/codex-children.js +2 -2
  37. package/src/session-supervision/continuation-analysis.js +1 -1
  38. package/src/session-supervision/continuation-command.js +3 -3
  39. package/src/session-supervision/continuation-readiness.js +1 -1
  40. package/src/session-supervision/conversation-context.js +58 -26
  41. package/src/session-supervision/conversation-presentation.js +3 -3
  42. package/src/session-supervision/decision-presentation.js +8 -8
  43. package/src/session-supervision/discovery-window.js +8 -2
  44. package/src/session-supervision/index.js +38 -25
  45. package/src/session-supervision/purpose-verification.js +12 -3
  46. package/src/session-supervision/remote-errors.js +2 -2
  47. package/src/session-supervision/work-state.js +3 -3
  48. package/src/sqm/advisory-guidance.js +1 -0
  49. package/src/sqm/agent-skill.js +3 -3
  50. package/src/sqm/checkers.js +35 -1
  51. package/src/sqm/claude-plugin.js +8 -2
  52. package/src/sqm/hypothesis-knowledge.js +3 -3
  53. package/src/sqm/knowledge-recall.js +34 -12
  54. package/src/sqm/reasoned-assessment.js +22 -9
  55. 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. Enabling automatic continuation can also adopt an
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 Agentic Loop runs.
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 automatic continuation are stopped. Details can still be opened;
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
- Agentic Loop preflight accepts the task's existing requirement, acceptance
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 Agentic worker's structured result is saved privately before evidence
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 Agentic work, `GET /v1/agentic-loop/:id/recovery` provides a
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
- Agentic run retains `POST /v1/agentic-loop/:id/continuation-ceilings` for an
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
- Agentic Loop checks a separate safety ceiling before each new provider call:
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 Agentic safety gate. Both routes require the original authorized
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 **Auto-continue**.
247
+ remains available; continuing the conversation still requires **Continue automatically**.
248
248
 
249
- You can enable **Auto-continue** while a conversation is running when its original
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 Auto Continue switch and background coordinator. In
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 automatic continuation.
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 enable Auto-continue.
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
- Auto-continue ON saves consent for the selected original conversation; it does not
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 auto-continue settings never
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, auto-continue and unsettled supervision records
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 Agentic Loop task is active. To run
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` Web, Crew, and Backend contract and exact per-chunk
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 Agentic Loop
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 Agentic Loop, it classifies whether the request actually
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 Agentic Loop ledger, audit session, or retry lifecycle for
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 Agentic Loop: it runs one bounded Codex
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 Agentic Loop and requires a stable
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 Agentic Loop can
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 Agentic Loop runs min-check after each code modification and the full check
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 Agentic Loop chat. It discovers 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 Quality Monitor.
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 automatic continuation
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 auto-continue switch enables read-only diagnosis for uncertain or
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 Agentic 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.
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 enables
1406
- automatic continuation. Disconnected providers are not read.
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 automatic continuation must be stopped first.
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 automatic continuation use purpose v2
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 Auto Continue evaluation inputs
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awak-app/simy-cli",
3
- "version": "0.7.36",
3
+ "version": "0.7.38",
4
4
  "description": "Local SIMY executor for non-coding Local Tasks and Agentic Loop runs.",
5
5
  "type": "module",
6
6
  "bin": {
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 an Agentic Loop run id.");
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);
@@ -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: Boolean(
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 supported = !this.#options.disabled && this.#options.daemon && this.#options.requestedPort === 0 &&
110
- (this.#options.installMode === 'global_npm' || this.#options.installMode === MACOS_INSTALLER_MODE && Boolean(this.#options.installerMarker?.teamId));
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, auto_update_busy: Boolean(this.#applying || this.#confirmedUpdate), requires_task_stop: !this.#isIdle() });
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('Backend inspection was cancelled.'), { code: 'cancelled' }); };
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;
@@ -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.36";
17
+ export const CLI_VERSION = "0.7.38";
18
18
  export const CLI_API_CONTRACT_VERSION = 10;
19
19
 
20
20
  export function narrativeImageCapabilityMetadata() {
@@ -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
- // Keep this leaf module package-safe: hooks load it before the full CLI contract.
10
- const CLI_VERSION = '0.7.36';
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 Auto Continue, quality checks and PR review through the original conversation's existing controls.",
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 Auto Continue controller, or request quality 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.",
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
- "Auto Continue",
24
+ "Delivery Loop",
25
25
  "Quality",
26
26
  "Review"
27
27
  ],
28
28
  "defaultPrompt": [
29
- "Enable SIMY Auto Continue for this conversation and show its actual progress.",
30
- "Run the SIMY SQM Loop for the current thread.",
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 automatic continuation.
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 Agentic Loop
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 Auto-continue stays available after review. An explicit resume,
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.