@ckanner/flywheel 0.31.0 → 0.32.0

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 (153) hide show
  1. package/CHANGELOG.md +122 -5
  2. package/CONTRIBUTING.md +19 -0
  3. package/LICENSE +21 -0
  4. package/README.en.md +4 -171
  5. package/README.md +152 -269
  6. package/README.zh-CN.md +116 -0
  7. package/bin/flywheel-claude-code-pro-worker.js +1 -1
  8. package/bin/flywheel-codex-pro-worker.js +1 -1
  9. package/bin/flywheel-dsh-worker.js +1 -1
  10. package/bin/flywheel.js +1 -1
  11. package/bin/runtime.js +1 -1
  12. package/docs/README.md +86 -0
  13. package/docs/README.zh-CN.md +64 -0
  14. package/docs/archive/README.md +13 -0
  15. package/docs/archive/codex-pro-adapter-handoff.md +197 -0
  16. package/docs/archive/design-v0.24.md +540 -0
  17. package/docs/design.md +812 -0
  18. package/docs/en/claude-code-pro.md +25 -16
  19. package/docs/en/configuration.md +405 -145
  20. package/docs/en/contributing.md +303 -0
  21. package/docs/en/flow-console.md +142 -24
  22. package/docs/en/getting-started.md +232 -126
  23. package/docs/en/investigation.md +263 -0
  24. package/docs/en/jev-shadow.md +5 -0
  25. package/docs/en/jev.md +240 -0
  26. package/docs/en/model-policy.md +154 -62
  27. package/docs/en/releasing.md +207 -0
  28. package/docs/en/session-evaluation.md +4 -2
  29. package/docs/en/session-recovery.md +88 -6
  30. package/docs/en/workflow.md +241 -114
  31. package/docs/evaluation/README.md +12 -0
  32. package/docs/evaluation/jev-historical-provisional.json +138 -0
  33. package/docs/evaluation/jev-historical-result-2026-11-10.json +174 -0
  34. package/docs/plans/2026-11-01-dsh-integration.md +67 -0
  35. package/docs/plans/2026-11-01-model-profiles-preflight.md +29 -0
  36. package/docs/plans/2026-11-01-npm-installation.md +19 -0
  37. package/docs/plans/2026-11-03-codex-pro-default.md +28 -0
  38. package/docs/plans/2026-11-06-adaptive-workflow.md +365 -0
  39. package/docs/plans/2026-11-07-session-lifecycle.en.md +424 -0
  40. package/docs/plans/2026-11-07-session-lifecycle.md +337 -0
  41. package/docs/plans/2026-11-08-flow-console.md +271 -0
  42. package/docs/plans/2026-11-10-jev-shadow.md +32 -0
  43. package/docs/plans/2026-11-10-task-discovery.md +17 -0
  44. package/docs/plans/2026-11-10-workbench-redesign.md +19 -0
  45. package/docs/plans/2026-11-12-feedback-driven-workflows.md +739 -0
  46. package/docs/plans/2026-11-12-unified-jev-decisions.md +89 -0
  47. package/docs/plans/2026-11-13-jev-execution-decisions.md +110 -0
  48. package/docs/plans/2026-11-13-p5-ready-queue-prewarm.md +178 -0
  49. package/docs/plans/README.md +25 -0
  50. package/docs/reviews/2026-08-24-v0.18-review-fixplan.md +265 -0
  51. package/docs/reviews/2026-09-12-pr4-pr5-review.md +70 -0
  52. package/docs/reviews/README.md +12 -0
  53. package/docs/validation/2026-11-01-npm-installation.md +105 -0
  54. package/docs/validation/2026-11-01-profiles-preflight.md +67 -0
  55. package/docs/validation/2026-11-01-results.md +114 -0
  56. package/docs/validation/2026-11-03-codex-pro-default.md +90 -0
  57. package/docs/validation/2026-11-04-dsh-native-view.md +85 -0
  58. package/docs/validation/2026-11-04-release-0.28.1.md +33 -0
  59. package/docs/validation/2026-11-04-release-0.28.2.md +35 -0
  60. package/docs/validation/2026-11-05-dsh-0.2.2-compatibility.md +26 -0
  61. package/docs/validation/2026-11-05-registry-smoke-recovery.md +26 -0
  62. package/docs/validation/2026-11-05-release-0.28.3.md +32 -0
  63. package/docs/validation/2026-11-05-subscription-model-access.md +60 -0
  64. package/docs/validation/2026-11-05-view-order.md +14 -0
  65. package/docs/validation/2026-11-07-adaptive-workflow.md +79 -0
  66. package/docs/validation/2026-11-07-claude-code-pro.md +144 -0
  67. package/docs/validation/2026-11-07-session-lifecycle.md +136 -0
  68. package/docs/validation/2026-11-08-session-p3-p4.md +99 -0
  69. package/docs/validation/2026-11-09-flow-console.md +81 -0
  70. package/docs/validation/2026-11-10-jev-shadow.md +50 -0
  71. package/docs/validation/2026-11-10-task-discovery.md +45 -0
  72. package/docs/validation/2026-11-10-workbench-redesign.md +54 -0
  73. package/docs/validation/2026-11-11-release-0.30.2.md +65 -0
  74. package/docs/validation/2026-11-11-release-0.31.0.md +46 -0
  75. package/docs/validation/2026-11-12-dsh-0.2.2-rc.2.md +58 -0
  76. package/docs/validation/2026-11-12-feedback-driven-workflows.md +187 -0
  77. package/docs/validation/2026-11-12-release-0.31.1.md +58 -0
  78. package/docs/validation/2026-11-12-session-console-ux.md +46 -0
  79. package/docs/validation/2026-11-12-unified-jev-decisions.md +93 -0
  80. package/docs/validation/2026-11-13-dsh-settings-controls.md +104 -0
  81. package/docs/validation/2026-11-13-jev-execution-decisions.md +140 -0
  82. package/docs/validation/2026-11-13-p5-ready-queue-prewarm.md +138 -0
  83. package/docs/validation/2026-11-13-p5-review-closure.md +114 -0
  84. package/docs/validation/2026-11-13-p5-tracked-runtime-fixes.md +108 -0
  85. package/docs/validation/2026-11-13-prewarm-receipts-and-expiry-tests.md +92 -0
  86. package/docs/validation/2026-11-13-workspace-redesign.md +66 -0
  87. package/docs/validation/README.md +51 -0
  88. package/docs/validation/evidence/2026-11-08-session-p3-p4.json +5430 -0
  89. package/docs/validation/evidence/2026-11-13-p5-npm-candidate.json +54 -0
  90. package/docs/validation/evidence/claude-node-bridges.txt +118 -0
  91. package/docs/validation/evidence/claude-npm-build.txt +15 -0
  92. package/docs/validation/evidence/claude-npm-candidate.json +54 -0
  93. package/docs/validation/evidence/claude-npm-install.txt +21 -0
  94. package/docs/validation/evidence/claude-npm-tests.txt +145 -0
  95. package/docs/validation/evidence/claude-plugin-tests.txt +205 -0
  96. package/docs/validation/evidence/claude-quality-gate.txt +29 -0
  97. package/docs/validation/evidence/claude-race.txt +7 -0
  98. package/docs/validation/evidence/codex-pro-070-probes.txt +4 -0
  99. package/docs/validation/evidence/dsh-bridge.txt +4 -0
  100. package/docs/validation/evidence/dsh-native-view-bridge-tests.txt +1 -0
  101. package/docs/validation/evidence/dsh-native-view-build.txt +15 -0
  102. package/docs/validation/evidence/dsh-native-view-candidate.json +54 -0
  103. package/docs/validation/evidence/dsh-native-view-inspect.txt +27 -0
  104. package/docs/validation/evidence/dsh-native-view-install-tests.txt +19 -0
  105. package/docs/validation/evidence/dsh-native-view-npm-tests.txt +143 -0
  106. package/docs/validation/evidence/dsh-native-view-plugin-tests.txt +99 -0
  107. package/docs/validation/evidence/dsh-native-view-quality-gate.txt +29 -0
  108. package/docs/validation/evidence/dsh-plugin-tests.txt +48 -0
  109. package/docs/validation/evidence/function-coverage.txt +378 -0
  110. package/docs/validation/evidence/npm-build.txt +13 -0
  111. package/docs/validation/evidence/npm-contract-tests.txt +65 -0
  112. package/docs/validation/evidence/npm-dsh-bridge.txt +18 -0
  113. package/docs/validation/evidence/npm-dsh-plugin-tests.txt +62 -0
  114. package/docs/validation/evidence/npm-function-coverage.txt +420 -0
  115. package/docs/validation/evidence/npm-install-tests.txt +20 -0
  116. package/docs/validation/evidence/npm-quality-gate.txt +29 -0
  117. package/docs/validation/evidence/npm-race.txt +7 -0
  118. package/docs/validation/evidence/pr-dsh-bridge.txt +4 -0
  119. package/docs/validation/evidence/pr-dsh-plugin-tests.txt +48 -0
  120. package/docs/validation/evidence/pr-function-coverage.txt +379 -0
  121. package/docs/validation/evidence/pr-quality-gate.txt +28 -0
  122. package/docs/validation/evidence/pr-race.txt +6 -0
  123. package/docs/validation/evidence/profiles-control-smoke.json +1 -0
  124. package/docs/validation/evidence/profiles-dsh-bridge.txt +18 -0
  125. package/docs/validation/evidence/profiles-dsh-plugin-tests.txt +59 -0
  126. package/docs/validation/evidence/profiles-function-coverage.txt +411 -0
  127. package/docs/validation/evidence/profiles-quality-gate.txt +29 -0
  128. package/docs/validation/evidence/profiles-race.txt +7 -0
  129. package/docs/validation/evidence/quality-gate.txt +28 -0
  130. package/docs/validation/evidence/race.txt +6 -0
  131. package/docs/validation/evidence/watchdog-startup-after.txt +2 -0
  132. package/docs/validation/evidence/watchdog-startup-before.txt +6 -0
  133. package/docs/validation/evidence/watchdog-startup-quality-gate.txt +29 -0
  134. package/docs/validation/evidence/watchdog-startup-race.txt +7 -0
  135. package/docs/{claude-code-pro.md → zh-CN/claude-code-pro.md} +23 -17
  136. package/docs/{configuration.md → zh-CN/configuration.md} +397 -142
  137. package/docs/zh-CN/contributing.md +240 -0
  138. package/docs/zh-CN/flow-console.md +216 -0
  139. package/docs/zh-CN/getting-started.md +352 -0
  140. package/docs/zh-CN/investigation.md +213 -0
  141. package/docs/zh-CN/jev-shadow.md +5 -0
  142. package/docs/zh-CN/jev.md +192 -0
  143. package/docs/zh-CN/model-policy.md +128 -0
  144. package/docs/zh-CN/releasing.md +120 -0
  145. package/docs/{session-evaluation.md → zh-CN/session-evaluation.md} +4 -2
  146. package/docs/{session-recovery.md → zh-CN/session-recovery.md} +75 -12
  147. package/docs/zh-CN/workflow.md +284 -0
  148. package/npm/install.js +1 -1
  149. package/package.json +12 -25
  150. package/docs/flow-console.md +0 -122
  151. package/docs/getting-started.md +0 -418
  152. package/docs/model-policy.md +0 -65
  153. package/docs/workflow.md +0 -314
@@ -0,0 +1,29 @@
1
+ go vet ./...
2
+ test -z "$(gofmt -l . | grep -v '^$')" || (echo "gofmt needed:"; gofmt -l .; exit 1)
3
+ go test github.com/ckanner/flywheel/internal/build github.com/ckanner/flywheel/internal/childenv github.com/ckanner/flywheel/internal/circuitbreaker github.com/ckanner/flywheel/internal/cli github.com/ckanner/flywheel/internal/config github.com/ckanner/flywheel/internal/contract github.com/ckanner/flywheel/internal/defectinjection github.com/ckanner/flywheel/internal/diagnostic github.com/ckanner/flywheel/internal/donereport github.com/ckanner/flywheel/internal/drivers github.com/ckanner/flywheel/internal/errs github.com/ckanner/flywheel/internal/exitcontract github.com/ckanner/flywheel/internal/fallback github.com/ckanner/flywheel/internal/ledger github.com/ckanner/flywheel/internal/machine github.com/ckanner/flywheel/internal/metrics github.com/ckanner/flywheel/internal/modules github.com/ckanner/flywheel/internal/prompts github.com/ckanner/flywheel/internal/skillsembed github.com/ckanner/flywheel/internal/state github.com/ckanner/flywheel/internal/verify github.com/ckanner/flywheel/internal/watchdog github.com/ckanner/flywheel/skills github.com/ckanner/flywheel/templates -count=1 -coverprofile=cover.out
4
+ ? github.com/ckanner/flywheel/internal/build [no test files]
5
+ ok github.com/ckanner/flywheel/internal/childenv 0.005s coverage: 100.0% of statements
6
+ ok github.com/ckanner/flywheel/internal/circuitbreaker 0.026s coverage: 100.0% of statements
7
+ ok github.com/ckanner/flywheel/internal/cli 6.225s coverage: 100.0% of statements
8
+ ok github.com/ckanner/flywheel/internal/config 0.267s coverage: 100.0% of statements
9
+ ok github.com/ckanner/flywheel/internal/contract 0.200s coverage: 100.0% of statements
10
+ ok github.com/ckanner/flywheel/internal/defectinjection 1.041s coverage: 100.0% of statements
11
+ ok github.com/ckanner/flywheel/internal/diagnostic 0.227s coverage: 100.0% of statements
12
+ ok github.com/ckanner/flywheel/internal/donereport 0.016s coverage: 100.0% of statements
13
+ ok github.com/ckanner/flywheel/internal/drivers 15.010s coverage: 100.0% of statements
14
+ ok github.com/ckanner/flywheel/internal/errs 0.009s coverage: 100.0% of statements
15
+ ok github.com/ckanner/flywheel/internal/exitcontract 0.007s coverage: 100.0% of statements
16
+ ok github.com/ckanner/flywheel/internal/fallback 0.018s coverage: 100.0% of statements
17
+ ok github.com/ckanner/flywheel/internal/ledger 0.011s coverage: 100.0% of statements
18
+ ok github.com/ckanner/flywheel/internal/machine 54.069s coverage: 100.0% of statements
19
+ ok github.com/ckanner/flywheel/internal/metrics 0.014s coverage: 100.0% of statements
20
+ ok github.com/ckanner/flywheel/internal/modules 24.884s coverage: 100.0% of statements
21
+ ok github.com/ckanner/flywheel/internal/prompts 0.013s coverage: 100.0% of statements
22
+ ok github.com/ckanner/flywheel/internal/skillsembed 0.009s coverage: 100.0% of statements
23
+ ok github.com/ckanner/flywheel/internal/state 0.270s coverage: 100.0% of statements
24
+ ok github.com/ckanner/flywheel/internal/verify 2.709s coverage: 100.0% of statements
25
+ ok github.com/ckanner/flywheel/internal/watchdog 5.013s coverage: 100.0% of statements
26
+ ? github.com/ckanner/flywheel/skills [no test files]
27
+ ? github.com/ckanner/flywheel/templates [no test files]
28
+ total: (statements) 100.0%
29
+ OK: coverage 100% (every function)
@@ -0,0 +1,7 @@
1
+ ok github.com/ckanner/flywheel/internal/machine 80.902s
2
+ ok github.com/ckanner/flywheel/internal/verify 4.159s
3
+ ok github.com/ckanner/flywheel/internal/watchdog 6.056s
4
+ ok github.com/ckanner/flywheel/internal/drivers 78.530s
5
+ ok github.com/ckanner/flywheel/internal/cli 17.256s
6
+ ok github.com/ckanner/flywheel/internal/modules 26.256s
7
+ ok github.com/ckanner/flywheel/internal/diagnostic 1.350s
@@ -0,0 +1,4 @@
1
+ {"probe":"missing-effective-configuration","accepted":true,"configuration":{"requested":{"cwd":"/tmp","model":"audit-model","approvalPolicy":"never","sandbox":"read-only"},"effective":{},"matched":false}}
2
+ {"probe":"malformed-usage-after-valid-snapshot","report":{"status":"complete","run":{"totalTokens":100,"inputTokens":90,"cachedInputTokens":0,"cacheWriteInputTokens":0,"outputTokens":10,"reasoningOutputTokens":0},"threadTotal":{"totalTokens":100,"inputTokens":90,"cachedInputTokens":0,"cacheWriteInputTokens":0,"outputTokens":10,"reasoningOutputTokens":0},"observations":1,"replayedBaseline":false,"reason":"Codex reported a malformed token-usage notification"}}
3
+ {"probe":"public-default-permission","permissionMode":"dangerously-bypass-approvals-and-sandbox"}
4
+ {"probe":"public-run-export","code":"ERR_PACKAGE_PATH_NOT_EXPORTED"}
@@ -0,0 +1,4 @@
1
+ === RUN TestDSHNodeWorkerOfflineBridge
2
+ --- PASS: TestDSHNodeWorkerOfflineBridge (0.10s)
3
+ PASS
4
+ ok github.com/ckanner/flywheel/internal/drivers 0.105s
@@ -0,0 +1 @@
1
+ ok github.com/ckanner/flywheel/internal/drivers 15.960s
@@ -0,0 +1,15 @@
1
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
2
+ npm notice run @ckanner/flywheel@0.28.0 build:npm
3
+ npm notice run bash scripts/build-npm.sh 0.28.0 dist-npm
4
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
5
+ npm warn deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation
6
+
7
+ added 53 packages in 1s
8
+ Built host plugin, native Conversation View, DSH SDK and Codex Pro workers.
9
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
10
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
11
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
12
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
13
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
14
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
15
+ Built 6 verified npm packages for 0.28.0 at /workspace/scratch/e50f7e980589/flywheel/dist-npm (development source; not publishable)
@@ -0,0 +1,54 @@
1
+ {
2
+ "format_version": 1,
3
+ "version": "0.28.0",
4
+ "source": {
5
+ "commit": "3cb79b9b7cffaacb799ecd804a0d7cdd885635e1",
6
+ "tree": "61650a7d6aac1be933183c2e7c87519fc181c82b",
7
+ "dirty": true,
8
+ "snapshot_sha256": "68b339ff7b5f8c7eb748de339432891cda57983b291c29cbb3eba9704a60f75b"
9
+ },
10
+ "packages": [
11
+ {
12
+ "name": "@ckanner/flywheel-darwin-arm64",
13
+ "version": "0.28.0",
14
+ "filename": "ckanner-flywheel-darwin-arm64-0.28.0.tgz",
15
+ "bytes": 2413825,
16
+ "integrity": "sha512-62sbFkb98zWoc+464NArI5Ac/ko778mMUSY5StBC+6hdc18H2AKFRXIBo3BzW/yVUQu2JAASzauS7UUjIg1cmA=="
17
+ },
18
+ {
19
+ "name": "@ckanner/flywheel-darwin-amd64",
20
+ "version": "0.28.0",
21
+ "filename": "ckanner-flywheel-darwin-amd64-0.28.0.tgz",
22
+ "bytes": 2614162,
23
+ "integrity": "sha512-CPZ4flHfwaTzRdFq61kFPYnrkDpKE4TV68TjnayIlwP/dgY2tczZzyOLJ1Fj8KFtPlNFTGUAvI9D9PWCVYgqbw=="
24
+ },
25
+ {
26
+ "name": "@ckanner/flywheel-linux-arm64",
27
+ "version": "0.28.0",
28
+ "filename": "ckanner-flywheel-linux-arm64-0.28.0.tgz",
29
+ "bytes": 2344452,
30
+ "integrity": "sha512-J8JHmJNGzFJUT+q1OVg0zMQAAaQ8//RBvyOrFwxpgZG7l3uvJX42k07Jm1dIbSV9q/ZNraLipKafWG7O/RedVA=="
31
+ },
32
+ {
33
+ "name": "@ckanner/flywheel-linux-amd64",
34
+ "version": "0.28.0",
35
+ "filename": "ckanner-flywheel-linux-amd64-0.28.0.tgz",
36
+ "bytes": 2592907,
37
+ "integrity": "sha512-InvTdKCHRALn2ZNvJ1QTXqrJk0Ngp1HvL9KeXiGCM9IRSM9GDK2wOZxDPvz7qWPu+8uNyIITCmRrOECMzWzV7g=="
38
+ },
39
+ {
40
+ "name": "@ckanner/dsh-plugin-flywheel",
41
+ "version": "0.28.0",
42
+ "filename": "ckanner-dsh-plugin-flywheel-0.28.0.tgz",
43
+ "bytes": 60385,
44
+ "integrity": "sha512-EOTFMw8KyYX/jbm7ECNCHDwAiif7TW1Rs94PHL5C1F3ux/G+Ixlml1qlIrjiAYaI3Go/lyOZjwo7/zTnni8t4Q=="
45
+ },
46
+ {
47
+ "name": "@ckanner/flywheel",
48
+ "version": "0.28.0",
49
+ "filename": "ckanner-flywheel-0.28.0.tgz",
50
+ "bytes": 72015,
51
+ "integrity": "sha512-/YaXDZB0q/2zGicl6/nfftXipO5hF7AjvnNfvbya7wvwWQAq3gk1kTJJW3C0paQmGhWVv/YmyyqnhkjRBaInWA=="
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "providers": [
3
+ {
4
+ "id": "Service",
5
+ "platform": "host"
6
+ },
7
+ {
8
+ "id": "Event",
9
+ "platform": "host"
10
+ },
11
+ {
12
+ "id": "Config",
13
+ "platform": "host"
14
+ },
15
+ {
16
+ "id": "Tool",
17
+ "platform": "host"
18
+ }
19
+ ],
20
+ "services": 98,
21
+ "events": 76,
22
+ "queriedServices": [
23
+ "commands",
24
+ "tools"
25
+ ],
26
+ "client": "no connected target desktop"
27
+ }
@@ -0,0 +1,19 @@
1
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
2
+ npm notice run @ckanner/flywheel@0.28.0 test:install
3
+ npm notice run node --test npm/test/install.integration.js
4
+ ▶ the six packaged npm candidates install and run from a clean agent environment
5
+ ✔ installed worker imports the real pinned plugin and executes an offline app-server (523.463367ms)
6
+ ✔ same-version setup is repeatable and preserves configuration (867.266162ms)
7
+ ✔ installed npm shim forwards cancellation through the real Go watchdog (93.285936ms)
8
+ ✔ DSH registration failure is reported and a retry repairs that step (1341.81595ms)
9
+ ✔ explicit CLI-only installation keeps DSH skipped (557.532221ms)
10
+ ✔ user-edited skill content is preserved and prevents false installation success (335.572761ms)
11
+ ✔ the six packaged npm candidates install and run from a clean agent environment (16022.828449ms)
12
+ ℹ tests 7
13
+ ℹ suites 0
14
+ ℹ pass 7
15
+ ℹ fail 0
16
+ ℹ cancelled 0
17
+ ℹ skipped 0
18
+ ℹ todo 0
19
+ ℹ duration_ms 16130.339375
@@ -0,0 +1,143 @@
1
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
2
+ npm notice run @ckanner/flywheel@0.28.0 test
3
+ npm notice run node --test npm/test/*.test.js
4
+ ✔ invalid installer arguments return one JSON error without creating installation state (447.52722ms)
5
+ ✔ unsupported Node reports the required floor before changing installation state (113.066804ms)
6
+ ✔ installer executes special paths literally and repeat setup keeps a stable desktop launcher (2424.498024ms)
7
+ ✔ explicit no-dsh is reported as skipped while missing CLI prerequisites remain recoverable (1734.885231ms)
8
+ ✔ human setup output retains diagnostic remedies and does not announce an uninstalled DSH plugin (874.607689ms)
9
+ ✔ missing DSH reports partial installation and recovers on a later explicit command (1551.521772ms)
10
+ ✔ DSH reporting a different installed version cannot complete setup (812.719225ms)
11
+ ✔ setup rejects an adapter whose installed public API reports another version (174.948939ms)
12
+ ✔ a skills conflict remains visible and prevents later desktop changes (505.031882ms)
13
+ ✔ setup cancellation waits for a trapping CLI and cannot publish success (729.261769ms)
14
+ ✔ step timeout rejects a CLI that traps termination as exit zero (1692.732541ms)
15
+ ✔ cancellation during final unlock cannot return a successful report or hide cleanup errors (1615.982152ms)
16
+ ✔ managed launcher updates preserve user edits and invalid installation records (9.942796ms)
17
+ ✔ setup preserves a modified launcher and exposes the failed step in its JSON result (1278.204428ms)
18
+ ✔ capture cancels a whole installation process group after its leader exits (209.368213ms)
19
+ ✔ normal exit zero cannot hide a surviving installation subprocess (1255.117863ms)
20
+ ✔ inherited output handles outside the owned group produce a bounded failure (770.361836ms)
21
+ ✔ concurrent setup preserves the active install lock and can retry after its owner exits (1671.485064ms)
22
+ ✔ an installer never removes a lock whose ownership changed (2.725389ms)
23
+ ✔ local release CLI resolves a selected source and defaults to that source's candidate directory (2.381236ms)
24
+ ▶ clean lightweight and annotated source tags complete installation, candidate publication, registry smoke and promotion in order
25
+ ✔ lightweight (1281.91286ms)
26
+ ✔ annotated (1470.247201ms)
27
+ ✔ clean lightweight and annotated source tags complete installation, candidate publication, registry smoke and promotion in order (2754.058294ms)
28
+ ✔ the CLI can release an explicitly saved candidate outside the source checkout (1226.715875ms)
29
+ ▶ dirty source and mismatched HEAD, tree or physical snapshot cannot reach publication
30
+ ✔ tracked edit (147.051449ms)
31
+ ✔ untracked file (165.58548ms)
32
+ ✔ staged edit (153.415426ms)
33
+ ✔ new clean HEAD (151.217072ms)
34
+ ✔ different tree (133.950832ms)
35
+ ✔ different snapshot (145.594654ms)
36
+ ✔ dirty build receipt (109.266985ms)
37
+ ✔ working bytes hidden from Git status (173.926605ms)
38
+ ✔ dirty source and mismatched HEAD, tree or physical snapshot cannot reach publication (1183.255213ms)
39
+ ▶ the exact remote release tag must exist and identify the candidate source
40
+ ✔ missing (168.111545ms)
41
+ ✔ different target (178.539981ms)
42
+ ✔ the exact remote release tag must exist and identify the candidate source (347.457098ms)
43
+ ✔ remote tag parsing rejects ambiguous, unexpected and abnormal responses (0.81188ms)
44
+ ✔ remote tag reads are captured, bounded and noninteractive even in a TTY release (0.254671ms)
45
+ ✔ failed or cancelled local installation never uploads a package (334.549946ms)
46
+ ✔ a failed registry installation leaves latest unchanged, and a retry reuses all six uploaded candidates (1287.247242ms)
47
+ ✔ a partial publication retries only missing immutable versions using the same saved candidate (1430.767059ms)
48
+ ▶ source, candidate and remote tag changes during installation block the first upload
49
+ ✔ source (226.807094ms)
50
+ ✔ valid replacement candidate (176.325456ms)
51
+ ✔ remote deletion (207.14679ms)
52
+ ✔ remote target (220.53694ms)
53
+ ✔ same commit, new annotation (285.341088ms)
54
+ ✔ source, candidate and remote tag changes during installation block the first upload (1117.061733ms)
55
+ ▶ mutating source, candidate or tag after an upload blocks the next write
56
+ ✔ source (314.628091ms)
57
+ ✔ candidate (338.912324ms)
58
+ ✔ tag target (342.789322ms)
59
+ ✔ tag annotation (381.84599ms)
60
+ ✔ mutating source, candidate or tag after an upload blocks the next write (1379.165645ms)
61
+ ▶ source, candidate and tag changes during registry smoke block promotion
62
+ ✔ source (709.282131ms)
63
+ ✔ candidate (603.586134ms)
64
+ ✔ tag (652.496149ms)
65
+ ✔ source, candidate and tag changes during registry smoke block promotion (1966.055902ms)
66
+ ✔ a source change during partial latest promotion stops remaining tags (777.090073ms)
67
+ ▶ scope registry and tarball publishConfig cannot redirect uploads to another registry
68
+ ✔ registry (118.477066ms)
69
+ ✔ @ckanner:registry (125.602177ms)
70
+ ✔ scope registry and tarball publishConfig cannot redirect uploads to another registry (399.142033ms)
71
+ ✔ a scope registry change after the first upload cannot redirect the next package (359.910917ms)
72
+ ✔ only npm writes inherit the terminal; reads preserve captured output and deadline options (0.394711ms)
73
+ ✔ npm release reads and writes override an unrelated default scope without discarding authentication (0.348292ms)
74
+ ✔ a failed pre-write checkpoint prevents invoking npm even with a real terminal (0.174056ms)
75
+ ✔ non-TTY local publication stops before installation or any npm request (78.954885ms)
76
+ ✔ the public command reports non-TTY failure without invoking real npm (155.452154ms)
77
+ ✔ all six package versions, exact dependencies and platform selectors must agree (3.672981ms)
78
+ ✔ preflight accepts only the exact clean HEAD tag, not an ancestor tag (108.804866ms)
79
+ ✔ source snapshots preserve modes and symlinks without copying ignored files or editing source (16.274338ms)
80
+ ✔ npm pack accepts the npm 11 array and npm 12 name-keyed single-package protocols (1.259669ms)
81
+ ✔ npm pack rejects malformed output, ambiguous package sets and wrong map keys (0.612554ms)
82
+ ✔ npm pack requires the exact name, version and basename in either protocol (0.389679ms)
83
+ ✔ real offline npm pack output identifies the artifact whose bytes are verified (415.798987ms)
84
+ ✔ candidate verifies actual tar manifests, exact source and clean source policy (100.431279ms)
85
+ ✔ changed tar bytes and symlink substitution cannot pass candidate verification (37.552861ms)
86
+ ✔ rehashed tarball with a wrong embedded package version is still rejected (79.975626ms)
87
+ ✔ public candidate verification CLI returns failure for a mismatched source (263.399409ms)
88
+ ✔ npm absence is only structured E404; authentication, network and cancellation fail closed (1.396518ms)
89
+ ✔ npm view accepts legacy scalars and npm 12 single-scalar arrays (0.281221ms)
90
+ ✔ npm view rejects ambiguous arrays, nesting and non-scalar fields (0.456085ms)
91
+ ✔ npm view missing values are allowed only for explicitly optional fields (0.323683ms)
92
+ ✔ a successful empty integrity response never permits publication, while a missing latest tag is allowed (38.814878ms)
93
+ ✔ real npm view preserves scalar, missing-field and registry-error semantics (1926.518955ms)
94
+ ✔ publishing uses exact dependencies first and never advances latest; retries verify existing bytes (37.585166ms)
95
+ ✔ npm 12 scalar arrays preserve exact-version verification and latest promotion (41.531674ms)
96
+ ✔ a conflicting existing version or newer latest blocks every publish before mutation (42.83659ms)
97
+ ✔ private repository publication disables automatic provenance without changing candidate bytes or latest (198.917295ms)
98
+ ✔ unknown repository visibility fails before any registry request (33.638753ms)
99
+ ✔ an uncertain publish response succeeds only when registry bytes match (36.253707ms)
100
+ ✔ failed publish with no registry version stops before later packages (37.788866ms)
101
+ ✔ publication cancellation is a failure even if registry accepted the bytes (33.071075ms)
102
+ ✔ registry visibility accepts a matching package that appears after the former ten-second window (31.703568ms)
103
+ ✔ registry visibility has one deadline including query time and never starts an unbounded query (32.602068ms)
104
+ ✔ registry visibility cannot succeed or start another query after the deadline (35.153519ms)
105
+ ✔ registry visibility retries only structured E404 and stops immediately on other errors (38.3498ms)
106
+ ✔ registry query timeout terminates the real npm process even when it ignores SIGTERM (1082.883001ms)
107
+ ✔ a visibility timeout keeps the same candidate reusable without republishing accepted bytes (41.523469ms)
108
+ ✔ a local candidate changed after registry preflight is not published (39.699928ms)
109
+ ✔ latest promotion requires all six versions and promotes the entry package last (38.900905ms)
110
+ ✔ promotion waits for old latest responses to converge without repeating dist-tag mutations (38.637547ms)
111
+ ✔ latest verification tolerates a missing tag or temporarily absent target metadata (42.610289ms)
112
+ ✔ latest verification immediately rejects a newer tag even while target metadata is missing (37.66116ms)
113
+ ✔ latest verification never retries invalid tags, integrity conflicts or query failures (33.179235ms)
114
+ ✔ latest and integrity queries share one deadline and stop before starting a query past it (42.074469ms)
115
+ ✔ a latest visibility timeout resumes the same candidate without repeating completed mutations (38.874764ms)
116
+ ✔ the verify-latest CLI awaits asynchronous verification before reporting success (256.234753ms)
117
+ ✔ a concurrent newer entry tag cannot be rolled back during promotion (43.193894ms)
118
+ ✔ latest verification checks all versions and rejects unknown version ordering (43.446298ms)
119
+ ✔ release commands reject incomplete or unsafe options (0.909825ms)
120
+ ✔ npm CLI preserves literal argv, stdin, cwd, environment, stderr and native exit status (203.224789ms)
121
+ ✔ an explicit worker override is preserved, even when the bundled worker is unavailable (410.150601ms)
122
+ ✔ missing platform or worker packages fail visibly instead of selecting another installation (273.732558ms)
123
+ ✔ a non-executable native binary reports a launch failure (124.805125ms)
124
+ ✔ resolved native and worker versions must match the meta package's exact pins (327.852027ms)
125
+ ✔ a stale parent dependency is rejected while a correctly hoisted package is accepted (464.103813ms)
126
+ ✔ install and setup dispatch to the bundled installer with untouched arguments (316.982182ms)
127
+ ✔ flywheel-dsh-worker.js uses its current Node executable and the package's public worker export (188.912268ms)
128
+ ✔ flywheel-codex-pro-worker.js uses its current Node executable and the package's public worker export (172.133809ms)
129
+ ✔ the runtime enforces the adapter minimum of Node 22.18.0 (2.199368ms)
130
+ ✔ SIGTERM reaches the native owner and npm waits for its worker and delayed cleanup (531.606091ms)
131
+ ✔ SIGINT reaches the native owner and npm waits for its worker and delayed cleanup (533.039219ms)
132
+ ✔ SIGHUP reaches the native owner and npm waits for its worker and delayed cleanup (488.925538ms)
133
+ ✔ native signal death maps to its conventional exit code (174.635648ms)
134
+ ✔ cancellation preserves a native diagnostic failure after cleanup (549.327913ms)
135
+ ✔ worker shim also waits for cancellation cleanup and rejects a late exit zero (278.625762ms)
136
+ ℹ tests 125
137
+ ℹ suites 0
138
+ ℹ pass 125
139
+ ℹ fail 0
140
+ ℹ cancelled 0
141
+ ℹ skipped 0
142
+ ℹ todo 0
143
+ ℹ duration_ms 18976.574566
@@ -0,0 +1,99 @@
1
+ npm warn Unknown env config "http-proxy". This will error in a future major version of npm. See `npm help npmrc` for supported config options.
2
+ npm notice run @ckanner/dsh-plugin-flywheel@0.28.0 check
3
+ npm notice run npm test
4
+ npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
5
+ npm warn Unknown env config "global-ignore-file". This will stop working in the next major version of npm.
6
+
7
+ > @ckanner/dsh-plugin-flywheel@0.28.0 test
8
+ > npm run build && node --test test/*.test.js
9
+
10
+ npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
11
+ npm warn Unknown env config "global-ignore-file". This will stop working in the next major version of npm.
12
+
13
+ > @ckanner/dsh-plugin-flywheel@0.28.0 build
14
+ > node scripts/build.mjs
15
+
16
+ Built host plugin, native Conversation View, DSH SDK and Codex Pro workers.
17
+ ✔ the published rc.5 renderer owns the external plugin lifecycle without Harness Client module imports (244.983029ms)
18
+ ✔ native Flywheel view is additive, idle on opening, and ships its scoped stylesheet (102.367725ms)
19
+ ✔ effective models can be inspected without a task and every binding remains readable (72.39449ms)
20
+ ✔ task lifecycle labels distinguish pending, completed, stopped and unconfirmed engine state (95.435766ms)
21
+ ✔ all packets and attention records remain accessible, text is escaped, and unknown cost stays unknown (40.341641ms)
22
+ ✔ local and SDK checks retain structured failures, remedies and the inference boundary (26.292289ms)
23
+ ✔ editing a read target invalidates its late result without permitting overlapping operations (22.826559ms)
24
+ ✔ late query failures are ignored after editing, and active protocol or transport errors can recover (59.985855ms)
25
+ ✔ failed status refresh retains the previous data with a visible unconfirmed marker (24.49956ms)
26
+ ✔ start is single-flight with a frozen target, including hide and reopen before confirmation (25.270418ms)
27
+ ✔ an unknown mutation stays blocked across path changes until the same task is successfully reconciled (56.054738ms)
28
+ ✔ proven host preflight rejections can be corrected without an impossible status reconciliation (613.041842ms)
29
+ ✔ post-dispatch failures and forged engine messages remain uncertain until the original task is observed (1779.486392ms)
30
+ ✔ a browser deadline reports unknown outcome and a late original success cannot silently clear it (11.777799ms)
31
+ ✔ session drafts and results stay separate, and a replacement binding cannot adopt an old reply (47.224003ms)
32
+ ✔ plugin disposal stops local publication without sending a task cancellation (13.252227ms)
33
+ ✔ malformed protocol results are visible and never become successful task observations (53.098576ms)
34
+ ✔ malformed configuration and diagnostic reports stay recoverable instead of breaking rendering (32.391258ms)
35
+ ✔ the UI accepts realpath identities already validated by the host for every control action (530.205111ms)
36
+ ✔ labelled fields validate paths without a request, retain focus, and follow the host locale (25.230711ms)
37
+ ✔ public installed machine API carries exact settings and a complete unchanged receipt (428.597379ms)
38
+ ✔ doctor imports the exact dependency without starting any Codex process (155.600959ms)
39
+ ✔ wrong-model retains startup evidence and prevents the model turn (380.703227ms)
40
+ ✔ wrong-cwd retains startup evidence and prevents the model turn (380.35398ms)
41
+ ✔ wrong-approval retains startup evidence and prevents the model turn (432.346207ms)
42
+ ✔ wrong-sandbox retains startup evidence and prevents the model turn (529.562338ms)
43
+ ✔ unknown-usage stays unknown or partial in the raw successful receipt (368.720104ms)
44
+ ✔ partial-usage stays unknown or partial in the raw successful receipt (281.569393ms)
45
+ ✔ full policy is preserved, without claiming a pre-turn consumer policy guard (282.358073ms)
46
+ ✔ SIGTERM awaits adapter cleanup and returns its actual cancellation receipt (319.44673ms)
47
+ ✔ SIGINT awaits adapter cleanup and returns its actual cancellation receipt (380.990145ms)
48
+ ✔ stdin EOF after admission cancels the owned run and preserves its cleanup receipt (315.815861ms)
49
+ ✔ a stubborn app-server is killed within the adapter cleanup budget (3314.019183ms)
50
+ ✔ a broken stdout waits for the app-server and guardian to disappear (436.021205ms)
51
+ ✔ progress budget failure preserves the raw cancellation receipt instead of dropping frames silently (456.892882ms)
52
+ ✔ worker SIGKILL makes the installed guardian clean ordinary descendants without a forged receipt (3410.109444ms)
53
+ ✔ an additional request cancels instead of silently starting or ignoring another task (446.103064ms)
54
+ ✔ startup timeout includes initialize and cannot submit a late prompt (293.093792ms)
55
+ ✔ output truncation is a failed attempt with a complete cleanup receipt (1392.921449ms)
56
+ ✔ invalid requests and arguments fail before launching any app-server (1001.267677ms)
57
+ ✔ parent disconnection before input does not wait for the admission timeout (80.20769ms)
58
+ ✔ public request validation always fixes fresh sessions and bounded output (10.130004ms)
59
+ ✔ missing and mismatched installed dependencies fail locally without fallback (353.05207ms)
60
+ ✔ control invokes only the Go JSON CLI using literal argv, including paths with shell syntax (121.622879ms)
61
+ ✔ configuration and doctor need no task directory, and probe is an explicit doctor-only boolean (327.803784ms)
62
+ ✔ doctor returns a valid failed report but rejects process, protocol, and identity failures (1593.304648ms)
63
+ ✔ hung controls are bounded and cancellation is never a diagnostic success (216.106167ms)
64
+ ✔ diagnostic cancellation and timeout keep the Go owner alive until delayed group cleanup finishes (14125.537492ms)
65
+ ✔ an unresponsive diagnostic owner is eventually force-stopped after its cleanup window (21012.603737ms)
66
+ ✔ slash command and model tool use the same validated engine control boundary (269.598382ms)
67
+ ✔ policy uses the shipped shell probe and pins effective session facts, rejecting partial enforcement (1.402048ms)
68
+ ✔ the native rc.5 view reaches the registered slash command through the session-scoped Remote (147.351241ms)
69
+ ✔ desktop resolves a verified npm launcher without a shell PATH (4.617531ms)
70
+ ✔ invalid or stale records do not silently select another executable (6.333246ms)
71
+ ✔ receipt and launcher links or non-executable files are rejected (2.143567ms)
72
+ ✔ start normalizes cwd and rejects resume, extra write roots, implicit permission, and empty route (11.412148ms)
73
+ ✔ only unique committed model calls count; cache is included in aggregate input, reasoning is a subset (1.642546ms)
74
+ ✔ missing or malformed usage remains unknown, not free or partial cost (0.46012ms)
75
+ ✔ an idle or max-token interval is not successful completion (0.901612ms)
76
+ ✔ permission acknowledgement must match actual cwd, policy, approval and full confinement (0.445548ms)
77
+ ✔ full worker handshake, durable result, usage and SDK shutdown agree with the Go contract (84.055279ms)
78
+ ✔ wrong-policy: fail before submitting a paid prompt (82.84379ms)
79
+ ✔ wrong-cwd: fail before submitting a paid prompt (70.212891ms)
80
+ ✔ missing-policy: fail before submitting a paid prompt (68.865147ms)
81
+ ✔ malformed: fail before submitting a paid prompt (84.287453ms)
82
+ ✔ empty: session/wait alone never establishes success (70.740186ms)
83
+ ✔ missing-terminal: session/wait alone never establishes success (57.715552ms)
84
+ ✔ max-tokens: session/wait alone never establishes success (80.253463ms)
85
+ ✔ corrupt-tail: session/wait alone never establishes success (73.493232ms)
86
+ ✔ unknown provider usage survives a successful call as null (59.662332ms)
87
+ ✔ full lifecycle deadline includes a stalled initialize; no model prompt is sent (164.927026ms)
88
+ ✔ external cancellation settles a stalled turn through SDK shutdown (142.501039ms)
89
+ ✔ forced SDK shutdown cannot claim successful settlement of native managed ranges (723.969245ms)
90
+ ✔ doctor exercises runtime and permission handshake but never prompts a model (64.198778ms)
91
+ ✔ overlay pins real native confinement and disables model-owned delegation and auxiliary model calls (0.519808ms)
92
+ ℹ tests 75
93
+ ℹ suites 0
94
+ ℹ pass 75
95
+ ℹ fail 0
96
+ ℹ cancelled 0
97
+ ℹ skipped 0
98
+ ℹ todo 0
99
+ ℹ duration_ms 38464.598741
@@ -0,0 +1,29 @@
1
+ go vet ./...
2
+ test -z "$(gofmt -l . | grep -v '^$')" || (echo "gofmt needed:"; gofmt -l .; exit 1)
3
+ go test github.com/ckanner/flywheel/internal/build github.com/ckanner/flywheel/internal/childenv github.com/ckanner/flywheel/internal/circuitbreaker github.com/ckanner/flywheel/internal/cli github.com/ckanner/flywheel/internal/config github.com/ckanner/flywheel/internal/contract github.com/ckanner/flywheel/internal/defectinjection github.com/ckanner/flywheel/internal/diagnostic github.com/ckanner/flywheel/internal/donereport github.com/ckanner/flywheel/internal/drivers github.com/ckanner/flywheel/internal/errs github.com/ckanner/flywheel/internal/exitcontract github.com/ckanner/flywheel/internal/fallback github.com/ckanner/flywheel/internal/ledger github.com/ckanner/flywheel/internal/machine github.com/ckanner/flywheel/internal/metrics github.com/ckanner/flywheel/internal/modules github.com/ckanner/flywheel/internal/prompts github.com/ckanner/flywheel/internal/skillsembed github.com/ckanner/flywheel/internal/state github.com/ckanner/flywheel/internal/verify github.com/ckanner/flywheel/internal/watchdog github.com/ckanner/flywheel/skills github.com/ckanner/flywheel/templates -count=1 -coverprofile=cover.out
4
+ ? github.com/ckanner/flywheel/internal/build [no test files]
5
+ ok github.com/ckanner/flywheel/internal/childenv 0.011s coverage: 100.0% of statements
6
+ ok github.com/ckanner/flywheel/internal/circuitbreaker 0.025s coverage: 100.0% of statements
7
+ ok github.com/ckanner/flywheel/internal/cli 6.134s coverage: 100.0% of statements
8
+ ok github.com/ckanner/flywheel/internal/config 0.033s coverage: 100.0% of statements
9
+ ok github.com/ckanner/flywheel/internal/contract 0.123s coverage: 100.0% of statements
10
+ ok github.com/ckanner/flywheel/internal/defectinjection 1.162s coverage: 100.0% of statements
11
+ ok github.com/ckanner/flywheel/internal/diagnostic 0.213s coverage: 100.0% of statements
12
+ ok github.com/ckanner/flywheel/internal/donereport 0.020s coverage: 100.0% of statements
13
+ ok github.com/ckanner/flywheel/internal/drivers 11.509s coverage: 100.0% of statements
14
+ ok github.com/ckanner/flywheel/internal/errs 0.013s coverage: 100.0% of statements
15
+ ok github.com/ckanner/flywheel/internal/exitcontract 0.013s coverage: 100.0% of statements
16
+ ok github.com/ckanner/flywheel/internal/fallback 0.012s coverage: 100.0% of statements
17
+ ok github.com/ckanner/flywheel/internal/ledger 0.007s coverage: 100.0% of statements
18
+ ok github.com/ckanner/flywheel/internal/machine 48.145s coverage: 100.0% of statements
19
+ ok github.com/ckanner/flywheel/internal/metrics 0.007s coverage: 100.0% of statements
20
+ ok github.com/ckanner/flywheel/internal/modules 25.811s coverage: 100.0% of statements
21
+ ok github.com/ckanner/flywheel/internal/prompts 0.013s coverage: 100.0% of statements
22
+ ok github.com/ckanner/flywheel/internal/skillsembed 0.011s coverage: 100.0% of statements
23
+ ok github.com/ckanner/flywheel/internal/state 0.031s coverage: 100.0% of statements
24
+ ok github.com/ckanner/flywheel/internal/verify 3.114s coverage: 100.0% of statements
25
+ ok github.com/ckanner/flywheel/internal/watchdog 5.029s coverage: 100.0% of statements
26
+ ? github.com/ckanner/flywheel/skills [no test files]
27
+ ? github.com/ckanner/flywheel/templates [no test files]
28
+ total: (statements) 100.0%
29
+ OK: coverage 100% (every function)
@@ -0,0 +1,48 @@
1
+ npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
2
+
3
+ > @ckanner/dsh-plugin-flywheel@0.1.0 check
4
+ > npm run build && npm test
5
+
6
+ npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
7
+
8
+ > @ckanner/dsh-plugin-flywheel@0.1.0 build
9
+ > node scripts/build.mjs
10
+
11
+ Built host plugin, rc.5 client module, and native SDK worker.
12
+ npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
13
+
14
+ > @ckanner/dsh-plugin-flywheel@0.1.0 test
15
+ > node --test test/*.test.js
16
+
17
+ ✔ control invokes only the Go JSON CLI using literal argv, including paths with shell syntax (53.115591ms)
18
+ ✔ slash command and model tool use the same validated engine control boundary (85.482693ms)
19
+ ✔ policy uses the shipped shell probe and pins effective session facts, rejecting partial enforcement (0.901779ms)
20
+ ✔ browser module registers the actual rc.5 dock and calls existing command Remote (4.950943ms)
21
+ ✔ start normalizes cwd and rejects resume, extra write roots, implicit permission, and empty route (8.953366ms)
22
+ ✔ only unique committed model calls count; cache is included in aggregate input, reasoning is a subset (1.407612ms)
23
+ ✔ missing or malformed usage remains unknown, not free or partial cost (0.461726ms)
24
+ ✔ an idle or max-token interval is not successful completion (0.495798ms)
25
+ ✔ permission acknowledgement must match actual cwd, policy, approval and full confinement (0.356237ms)
26
+ ✔ full worker handshake, durable result, usage and SDK shutdown agree with the Go contract (55.823834ms)
27
+ ✔ wrong-policy: fail before submitting a paid prompt (41.123688ms)
28
+ ✔ wrong-cwd: fail before submitting a paid prompt (46.321688ms)
29
+ ✔ missing-policy: fail before submitting a paid prompt (41.295762ms)
30
+ ✔ malformed: fail before submitting a paid prompt (55.28304ms)
31
+ ✔ empty: session/wait alone never establishes success (47.693ms)
32
+ ✔ missing-terminal: session/wait alone never establishes success (41.935681ms)
33
+ ✔ max-tokens: session/wait alone never establishes success (41.575588ms)
34
+ ✔ corrupt-tail: session/wait alone never establishes success (43.948591ms)
35
+ ✔ unknown provider usage survives a successful call as null (38.125098ms)
36
+ ✔ full lifecycle deadline includes a stalled initialize; no model prompt is sent (160.168029ms)
37
+ ✔ external cancellation settles a stalled turn through SDK shutdown (119.736113ms)
38
+ ✔ forced SDK shutdown cannot claim successful settlement of native managed ranges (696.032955ms)
39
+ ✔ doctor exercises runtime and permission handshake but never prompts a model (36.570725ms)
40
+ ✔ overlay pins real native confinement and disables model-owned delegation and auxiliary model calls (0.264138ms)
41
+ ℹ tests 24
42
+ ℹ suites 0
43
+ ℹ pass 24
44
+ ℹ fail 0
45
+ ℹ cancelled 0
46
+ ℹ skipped 0
47
+ ℹ todo 0
48
+ ℹ duration_ms 1563.380974