@awak-app/simy-cli 0.7.29 → 0.7.31

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 (66) hide show
  1. package/README.md +88 -3
  2. package/package.json +2 -2
  3. package/src/agent.js +1 -0
  4. package/src/cli-contract.js +1 -1
  5. package/src/cli-observability.js +1 -1
  6. package/src/codex-plugins/simy/.codex-plugin/plugin.json +5 -3
  7. package/src/codex-plugins/simy/hooks/acceptance-policy.mjs +7 -0
  8. package/src/codex-plugins/simy/hooks/delivery-loop.mjs +389 -51
  9. package/src/codex-plugins/simy/hooks/purpose-evidence.mjs +6 -3
  10. package/src/codex-plugins/simy/hooks/update-dispatch-gate.mjs +126 -4
  11. package/src/codex-plugins/simy/skills/continue/SKILL.md +69 -0
  12. package/src/codex-plugins/simy/skills/continue/agents/openai.yaml +6 -0
  13. package/src/delivery-hooks/claude-workflow.md +3 -3
  14. package/src/delivery-hooks/command.js +8 -0
  15. package/src/delivery-hooks/desktop.js +31 -9
  16. package/src/delivery-hooks/supervisor.js +3 -2
  17. package/src/desktop-access.js +4 -1
  18. package/src/desktop-host.js +494 -72
  19. package/src/native-development-report-completion.js +26 -0
  20. package/src/native-development-reports.js +15 -5
  21. package/src/orchestrator/completion-contract.js +8 -2
  22. package/src/orchestrator/contract.js +3 -1
  23. package/src/orchestrator/instruction.js +1 -1
  24. package/src/runner.js +2 -1
  25. package/src/session-supervision/action-deadline.js +18 -1
  26. package/src/session-supervision/autonomous-upgrade.js +4 -2
  27. package/src/session-supervision/claude-desktop-archive.js +57 -0
  28. package/src/session-supervision/claude-desktop-native.js +50 -0
  29. package/src/session-supervision/claude-desktop-native.jxa.js +195 -0
  30. package/src/session-supervision/claude-desktop-target.js +87 -0
  31. package/src/session-supervision/claude-owner-renewal.js +197 -0
  32. package/src/session-supervision/claude-sessions.js +143 -34
  33. package/src/session-supervision/codex-app-server.js +20 -2
  34. package/src/session-supervision/continuation-analysis.js +7 -7
  35. package/src/session-supervision/continuation-command.js +45 -0
  36. package/src/session-supervision/controller-store.js +48 -0
  37. package/src/session-supervision/conversation-presentation.js +241 -0
  38. package/src/session-supervision/decision-presentation.js +96 -35
  39. package/src/session-supervision/execution-context.js +39 -0
  40. package/src/session-supervision/index.js +36 -7
  41. package/src/session-supervision/manual-acceptance-command.js +30 -0
  42. package/src/session-supervision/notification-authority.js +9 -0
  43. package/src/session-supervision/notification-journal.js +40 -0
  44. package/src/session-supervision/operation-journal.js +42 -0
  45. package/src/session-supervision/owner-transport.js +146 -0
  46. package/src/session-supervision/purpose-recovery.js +10 -2
  47. package/src/session-supervision/remote-control.js +1 -1
  48. package/src/session-supervision/remote-entry.js +2 -0
  49. package/src/session-supervision/remote-errors.js +15 -0
  50. package/src/session-supervision/remote-hosts.js +344 -36
  51. package/src/session-supervision/remote-metadata.js +103 -0
  52. package/src/session-supervision/remote-session-list.js +2 -4
  53. package/src/session-supervision/session-archive-command.js +45 -0
  54. package/src/session-supervision/session-list.js +40 -4
  55. package/src/session-supervision/sqm-presentation.js +46 -3
  56. package/src/session-supervision/stop-notifications.js +42 -11
  57. package/src/session-supervision/work-state.js +106 -6
  58. package/src/sqm/agent-skill.js +3 -3
  59. package/src/sqm/claude-plugin.js +5 -2
  60. package/src/sqm/history-store.js +6 -0
  61. package/src/team-threads.js +1 -1
  62. package/src/update-detachment/coordinator.js +7 -1
  63. package/src/update-detachment/history-recovery.js +18 -0
  64. package/src/update-detachment/ledger-adapter.js +1 -0
  65. package/src/update-detachment/retained-paused.js +290 -0
  66. package/src/update-detachment/runtime.js +78 -15
package/README.md CHANGED
@@ -312,7 +312,30 @@ existing enabled plugins. Unrelated plugins and hooks are preserved.
312
312
  `--no-workflow-prompt` skips initial preparation and background installation of
313
313
  missing sources. Provider plugin enablement and hook trust remain provider-owned.
314
314
 
315
- SQM checks apply when you explicitly select `@simy`, invoke the SQM skill, or ask to use SQM for the current task. Ordinary PR creation and `git push` do not opt in. Upgrading and restarting the daemon migrates the legacy global PR gate and shipped personal skills; unrelated hooks are preserved. Start a new coding session to reload skill instructions.
315
+ For conversation continuation, select SIMY in the Codex app with `@` and ask
316
+ `continue this task` (Japanese: `この作業を続けて`). The `continue` skill uses the
317
+ running app's existing Auto Continue switch and background coordinator. In
318
+ Codex CLI, use its native `$simy:continue` skill selector; in Claude Code use the
319
+ native `/simy:continue` command. Claude Code does not define `@simy` as a plugin
320
+ command: use the slash command for an explicit invocation. Merely mentioning
321
+ SIMY or seeing it in a menu does not start work.
322
+
323
+ The current plugin and CLI must both be installed, the SIMY app must be running
324
+ and signed in, and the original provider must be connected with its required
325
+ hooks enabled and trusted. A running original turn finishes before SIMY sends
326
+ another one. The chat command uses the exact original conversation; it never
327
+ starts a second Claude process or replaces a task to bypass a stop. Existing
328
+ stops, approval waits, goals, corrections and history retain their meaning.
329
+
330
+ The entry reports the same real work state, reason and next action shown by the
331
+ app. ON or `accepted: true` means delegation was saved; it does not prove a
332
+ provider turn executed. Inspect an exact target again with
333
+ `simy delivery auto-continue status --provider codex|claude --session UUID`.
334
+ `on` and `off` use the same target syntax. After a lost response, read status
335
+ before retrying. An old CLI that lacks this command needs its normal update;
336
+ the retired local delivery agents remain retired.
337
+
338
+ SQM checks apply when you explicitly request a quality check with `@simy`, invoke the SQM skill, or ask to use SQM for the current task. A continuation request selects `continue` instead. Ordinary PR creation and `git push` do not opt in. Upgrading and restarting the daemon migrates the legacy global PR gate and shipped personal skills; unrelated hooks are preserved. Start a new coding session to reload skill instructions.
316
339
 
317
340
  After installation, restart Codex and find and install **SIMY** in **Plugins**
318
341
  before using `@simy` in a new task.
@@ -382,8 +405,8 @@ provider refresh display an unknown execution state.
382
405
 
383
406
  List-only hiding supports multiple selection and restoration without changing
384
407
  provider archive state or execution consent. Codex archive/restore is a separate
385
- explicit operation; Claude archive/restore must be performed in Claude, and SIMY
386
- reads its Desktop archive metadata on refresh. Related GitHub PR summaries are
408
+ explicit operation. Claude Desktop Code-tab archive/restore is available through
409
+ the terminal commands below on macOS, with native provider state readback. Related GitHub PR summaries are
387
410
  read from structured provider metadata and refreshed through an installed,
388
411
  authenticated `gh` CLI, with bounded reads, a one-minute cache, timestamps and
389
412
  failure indicators. A merge alone never completes a conversation, and known
@@ -1338,6 +1361,12 @@ Connect an existing NVIDIA/SSH machine from **Remote connections…** in the
1338
1361
  conversation sidebar. SIMY merges its conversations and sends operations to the
1339
1362
  original machine. See [setup, access requirements and recovery](docs/remote-codex-sessions.md).
1340
1363
 
1364
+ When moving between LAN, Wi-Fi and mobile tethering, keep that same SSH alias
1365
+ and use a reachable VPN address or DNS name for its `HostName`. SIMY creates a
1366
+ fresh SSH connection after disconnection while retaining host and operation
1367
+ identity. A LAN-only address cannot provide access from another network; see
1368
+ [network switching setup](docs/remote-codex-sessions.md#switching-between-lan-wi-fi-and-a-phone-hotspot).
1369
+
1341
1370
  ### Local conversation list on NVIDIA / Linux
1342
1371
 
1343
1372
  Run `simy sessions` to list local and explicitly registered SSH hosts. It reads
@@ -1384,6 +1413,62 @@ existing native protocol header. Web/gateway should preserve this marker and
1384
1413
  Backend should require it at claim/invocation when a destination/Photos profile
1385
1414
  is requested, so an old worker cannot silently ignore those required outputs.
1386
1415
 
1416
+ ### Original conversation archive and restore
1417
+
1418
+ Update and start SIMY on the controller and conversation host, and connect Claude
1419
+ in SIMY using the existing provider settings. For Claude, the conversation host
1420
+ must be macOS with Claude Desktop signed in to its Code tab. The graphical SIMY
1421
+ interface is unchanged; these explicit terminal commands operate the original
1422
+ provider conversation, separately from hiding it in SIMY.
1423
+
1424
+ ```sh
1425
+ simy sessions --provider claude --include-archived --json
1426
+ simy sessions provider-status --provider claude
1427
+ simy sessions provider-setup --provider claude
1428
+ simy sessions archive --provider claude --session UUID
1429
+ simy sessions restore --provider claude --session UUID
1430
+ ```
1431
+
1432
+ Replace `UUID` with the exact session ID from the list. Setup opens macOS
1433
+ Accessibility settings on the conversation host. Enable access for the application
1434
+ running SIMY (SIMY for the installed app, or the terminal application for terminal
1435
+ launches), then run `provider-status` again. On newer macOS versions this pane
1436
+ may be named “Device Control and Data Access” (デバイスの制御とデータへのアクセス).
1437
+ If macOS displays its access-request dialog, choose Open System Settings. If the
1438
+ app is not listed, use the pane's Add (+) button and select the app running SIMY.
1439
+ Complete any Touch ID/password authentication directly on the Mac; never send
1440
+ that password to SIMY or a chat. `available: true` means the installed
1441
+ Claude application and accessibility permission are present; it does not establish
1442
+ that a particular conversation is idle or its window is available. No development
1443
+ SSH key, fixed hostname, compiler, debug port, or transcript edits are required.
1444
+
1445
+ For an already registered SSH host, add `--host SSH_ALIAS --session UUID` to setup
1446
+ and status commands, and `--host SSH_ALIAS` to archive/restore. Settings open on
1447
+ that remote Mac. Normal SSH, SIMY account/provider authorization and macOS
1448
+ permissions still apply. Linux and Windows conversation hosts report an explicit
1449
+ unsupported-platform error for Claude native control.
1450
+
1451
+ Keep Claude available in an unlocked desktop while the operation runs. SIMY
1452
+ opens the exact Code-tab conversation and uses Claude's own archive/restore
1453
+ control. Running conversations and automatic continuation must be stopped first.
1454
+ Before opening that conversation, SIMY checks Claude's visible windows for
1455
+ unsent input, generating responses and dialogs. It leaves the current conversation
1456
+ in place if any are present or the window/input state cannot be inspected. The
1457
+ same work-state checks run again before the native archive/restore action.
1458
+ If a window closes, another dialog covers the action, or the selected identity
1459
+ changes, the command fails instead of selecting another conversation. Claude UI
1460
+ changes or unsupported languages can also make native controls unavailable;
1461
+ Japanese controls were tested on Claude Desktop 3.1623.0.
1462
+
1463
+ The result is JSON. `ok: true` with `data.state: "verified"` means Claude's archive
1464
+ state was read back; `data.archived` is the resulting value. `changed: false`
1465
+ means the conversation already had that state. Setup/status exit with code 2
1466
+ when permission is not ready; failures exit with code 1. After a disconnect or
1467
+ unknown result, refresh the list before retrying. The optional `--request-id ID`
1468
+ correlates remote operations. Commands attach to the existing SIMY owner and do
1469
+ not start a second supervisor. Codex supports the same archive/restore commands
1470
+ with `--provider codex`.
1471
+
1387
1472
  ### Delivery entry routes
1388
1473
 
1389
1474
  Crew owns `sessionLoopOptions` in the distributed loop kernel. Codex enrollment,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awak-app/simy-cli",
3
- "version": "0.7.29",
3
+ "version": "0.7.31",
4
4
  "description": "Local SIMY executor for non-coding Local Tasks and Agentic Loop runs.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "scripts": {
14
14
  "start": "node ./src/index.js",
15
- "test": "node --import ./test/isolate-simy-home.mjs --test --test-concurrency=2",
15
+ "test": "node --import ./test/isolate-simy-home.mjs --test --test-concurrency=1",
16
16
  "test:e2e:console": "node ./scripts/console-e2e.js",
17
17
  "test:e2e:work-activity": "node ./scripts/work-activity-e2e.js",
18
18
  "test:e2e:sqm-complete-loop": "node ./scripts/sqm-complete-loop-e2e.js",
package/src/agent.js CHANGED
@@ -3107,6 +3107,7 @@ export async function startAgent({
3107
3107
  expected_evidence: [],
3108
3108
  required_checks: [],
3109
3109
  require_human_approval: input.require_human_approval === true,
3110
+ independent_review_required: input.independent_review_required === true,
3110
3111
  must_not: [],
3111
3112
  attachments: await referenceLocalAttachmentPaths(input.attachmentPaths || []),
3112
3113
  };
@@ -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.29";
17
+ export const CLI_VERSION = "0.7.31";
18
18
  export const CLI_API_CONTRACT_VERSION = 10;
19
19
 
20
20
  export function narrativeImageCapabilityMetadata() {
@@ -7,7 +7,7 @@ import { execFile } from 'node:child_process';
7
7
  import { promisify } from 'node:util';
8
8
  import { webApiHeaders, webApiUrl } from './web-api.js';
9
9
  // Keep this leaf module package-safe: hooks load it before the full CLI contract.
10
- const CLI_VERSION = '0.7.29';
10
+ const CLI_VERSION = '0.7.31';
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 quality and PR review, with automatic checkpoint tracking through enabled provider hooks.",
4
+ "description": "SIMY Auto Continue, quality 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"
@@ -16,15 +16,17 @@
16
16
  "skills": "./skills/",
17
17
  "interface": {
18
18
  "displayName": "SIMY",
19
- "shortDescription": "Quality and PR review.",
20
- "longDescription": "Run explicitly requested quality checks and PR reviews. Enabled hooks automatically track eligible conversations from user prompts through checkpoints. Stops, permission waits and opt-outs are preserved. The local Delivery skill remains retired; independently managed work uses the CLI Agentic Loop.",
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.",
21
21
  "developerName": "Specialist Doctors Inc.",
22
22
  "category": "Developer Tools",
23
23
  "capabilities": [
24
+ "Auto Continue",
24
25
  "Quality",
25
26
  "Review"
26
27
  ],
27
28
  "defaultPrompt": [
29
+ "Enable SIMY Auto Continue for this conversation and show its actual progress.",
28
30
  "Run the SIMY SQM Loop for the current thread.",
29
31
  "Review the current pull request with SIMY."
30
32
  ],
@@ -20,3 +20,10 @@ export function effectiveAcceptanceCriteria(managed) {
20
20
  return eligible ? { ...criterion, check: { type: 'semantic' }, originalCheck: criterion.check } : criterion;
21
21
  });
22
22
  }
23
+
24
+ export function onlyManualAcceptancePending(managed) {
25
+ const verified = managed?.verified || {};
26
+ const pending = effectiveAcceptanceCriteria(managed).filter(criterion => criterion.check?.type === 'manual'
27
+ ? verified[criterion.id]?.source !== 'user' : !Object.hasOwn(verified, criterion.id));
28
+ return pending.length > 0 && pending.every(criterion => criterion.check?.type === 'manual');
29
+ }