@awak-app/simy-cli 0.5.65 → 0.5.66

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awak-app/simy-cli",
3
- "version": "0.5.65",
3
+ "version": "0.5.66",
4
4
  "description": "Local SIMY executor for non-coding Local Tasks and Agentic Loop runs.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,7 +13,7 @@ import {
13
13
  } from "./durable-local-task-steps-contract.js";
14
14
  import { buildExecutionCapabilityContract } from "./execution-capability-contract.js";
15
15
 
16
- export const CLI_VERSION = "0.5.65";
16
+ export const CLI_VERSION = "0.5.66";
17
17
  export const CLI_API_CONTRACT_VERSION = 10;
18
18
 
19
19
  export function withCliContract(
@@ -1,4 +1,5 @@
1
1
  {
2
+ "description": "SIMY connection reminders, opt-in Delivery Loop lifecycle tracking, and development progress reporting. Trusting hooks does not enable automatic continuation for a task.",
2
3
  "hooks": {
3
4
  "SessionStart": [
4
5
  {
@@ -7,7 +8,8 @@
7
8
  {
8
9
  "type": "command",
9
10
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'connection-reminder.mjs')).href); await hook.main();\"",
10
- "timeout": 3
11
+ "timeout": 3,
12
+ "statusMessage": "SIMY connection check at session start"
11
13
  }
12
14
  ]
13
15
  },
@@ -16,7 +18,8 @@
16
18
  {
17
19
  "type": "command",
18
20
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
19
- "timeout": 3
21
+ "timeout": 3,
22
+ "statusMessage": "SIMY Delivery Loop session tracking"
20
23
  }
21
24
  ]
22
25
  }
@@ -27,7 +30,8 @@
27
30
  {
28
31
  "type": "command",
29
32
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'connection-reminder.mjs')).href); await hook.main();\"",
30
- "timeout": 3
33
+ "timeout": 3,
34
+ "statusMessage": "SIMY connection check before a prompt"
31
35
  }
32
36
  ]
33
37
  },
@@ -36,7 +40,8 @@
36
40
  {
37
41
  "type": "command",
38
42
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
39
- "timeout": 3
43
+ "timeout": 3,
44
+ "statusMessage": "SIMY Delivery Loop prompt tracking"
40
45
  }
41
46
  ]
42
47
  }
@@ -47,7 +52,8 @@
47
52
  {
48
53
  "type": "command",
49
54
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
50
- "timeout": 3
55
+ "timeout": 3,
56
+ "statusMessage": "SIMY Delivery Loop remaining-work check"
51
57
  }
52
58
  ]
53
59
  },
@@ -56,7 +62,8 @@
56
62
  {
57
63
  "type": "command",
58
64
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'dev-work.mjs')).href); await hook.main('codex');\"",
59
- "timeout": 10
65
+ "timeout": 10,
66
+ "statusMessage": "SIMY development progress reporting"
60
67
  }
61
68
  ]
62
69
  }
@@ -67,7 +74,8 @@
67
74
  {
68
75
  "type": "command",
69
76
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
70
- "timeout": 3
77
+ "timeout": 3,
78
+ "statusMessage": "SIMY Delivery Loop session-exit tracking"
71
79
  }
72
80
  ]
73
81
  }
@@ -78,7 +86,8 @@
78
86
  {
79
87
  "type": "command",
80
88
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
81
- "timeout": 3
89
+ "timeout": 3,
90
+ "statusMessage": "SIMY Delivery Loop user-stop tracking"
82
91
  }
83
92
  ]
84
93
  }
@@ -89,7 +98,8 @@
89
98
  {
90
99
  "type": "command",
91
100
  "command": "node --input-type=module -e \"import { pathToFileURL } from 'node:url'; import { join } from 'node:path'; const hook = await import(pathToFileURL(join(process.env.PLUGIN_ROOT, 'hooks', 'delivery-loop.mjs')).href); await hook.main('codex');\"",
92
- "timeout": 3
101
+ "timeout": 3,
102
+ "statusMessage": "SIMY Delivery Loop permission-wait tracking"
93
103
  }
94
104
  ]
95
105
  }
@@ -29,9 +29,18 @@ export async function claudePluginFiles() {
29
29
  delete hooks.hooks.Interrupt; // Codex-only event; Claude interruptions cannot be vetoed.
30
30
  hooks.hooks.StopFailure = structuredClone(hooks.hooks.Stop);
31
31
  hooks.hooks.Notification = structuredClone(hooks.hooks.PermissionRequest);
32
- for (const groups of Object.values(hooks.hooks)) {
32
+ for (const [event, groups] of Object.entries(hooks.hooks)) {
33
33
  for (const group of groups) {
34
34
  for (const hook of group.hooks) {
35
+ // These Claude events reuse handlers, but their review labels must describe
36
+ // the actual trigger rather than the Codex event they were copied from.
37
+ if (event === "StopFailure") {
38
+ hook.statusMessage = hook.command.includes("dev-work.mjs")
39
+ ? "SIMY development progress reporting after an error"
40
+ : "SIMY Delivery Loop error-recovery tracking";
41
+ } else if (event === "Notification") {
42
+ hook.statusMessage = "SIMY Delivery Loop permission-notification tracking";
43
+ }
35
44
  hook.command = hook.command.replace(/^node /, `${quoteRuntime(process.execPath)} `)
36
45
  .replaceAll("process.env.PLUGIN_ROOT", "process.env.CLAUDE_PLUGIN_ROOT")
37
46
  .replaceAll("hook.main('codex')", "hook.main('claude')");