@mindexec/cli 0.2.477 → 0.2.478

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 (145) hide show
  1. package/README.md +323 -323
  2. package/codex-model-catalog.js +202 -202
  3. package/codex-runtime.js +1608 -1608
  4. package/desktop-workspace-state.cjs +120 -120
  5. package/electron/main.cjs +517 -517
  6. package/electron/preload.cjs +17 -17
  7. package/electron/recurring-update-owner-smoke.mjs +55 -55
  8. package/electron/recurring-update-owner.cjs +97 -97
  9. package/electron/source-smoke.mjs +108 -108
  10. package/electron/update-feed-resolver.cjs +79 -79
  11. package/electron/update-feed.json +10 -10
  12. package/electron/update-manager-smoke.mjs +146 -146
  13. package/electron/update-manager.cjs +297 -297
  14. package/electron/windows-package-smoke.mjs +156 -156
  15. package/launch-bridge.cjs +236 -236
  16. package/lzo1x.js +110 -110
  17. package/mode4-atlas-worker.js +440 -440
  18. package/mode4-atlas.js +130 -130
  19. package/package.json +1 -1
  20. package/port-guard.cjs +285 -285
  21. package/remote-fast/osx-arm64/MacScreenCaptureKitH264.swift +339 -339
  22. package/remote-fast/osx-arm64/MacSystemAudioCapture.swift +214 -214
  23. package/remote-fast/osx-arm64/UnixRawCaptureHelper.mjs +80 -80
  24. package/remote-fast/osx-arm64/livedesk-raw-capture-resampler.mjs +73 -73
  25. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  26. package/remote-fast/osx-x64/MacScreenCaptureKitH264.swift +339 -339
  27. package/remote-fast/osx-x64/MacSystemAudioCapture.swift +214 -214
  28. package/remote-fast/osx-x64/UnixRawCaptureHelper.mjs +80 -80
  29. package/remote-fast/osx-x64/livedesk-raw-capture-resampler.mjs +73 -73
  30. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  31. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  32. package/remote-hub.js +3698 -3698
  33. package/scripts/auth-session-smoke.mjs +262 -262
  34. package/scripts/board-render-ownership-smoke.mjs +85 -85
  35. package/scripts/codex-model-catalog-smoke.mjs +150 -150
  36. package/scripts/codex-runtime-home-smoke.mjs +58 -58
  37. package/scripts/codex-sdk-image-live-smoke.mjs +43 -43
  38. package/scripts/codex-sdk-image-runtime-smoke.mjs +122 -122
  39. package/scripts/codex-sdk-runtime-smoke.mjs +89 -89
  40. package/scripts/desktop-update-publisher-smoke.mjs +89 -89
  41. package/scripts/desktop-update-worker-smoke.mjs +72 -72
  42. package/scripts/desktop-workspace-state-smoke.mjs +81 -81
  43. package/scripts/drive-installed-update-smoke.mjs +67 -67
  44. package/scripts/npm-fresh-install-smoke.mjs +216 -216
  45. package/scripts/publish-mindexec-desktop-updates.mjs +224 -224
  46. package/scripts/remote-agent-managed-smoke.mjs +318 -318
  47. package/scripts/remote-agent-package-smoke.mjs +64 -64
  48. package/scripts/remote-agent-ws-smoke.mjs +269 -269
  49. package/scripts/remote-fast-live-rate-smoke.mjs +343 -343
  50. package/scripts/remote-fast-mdm-browser-smoke.mjs +453 -453
  51. package/scripts/remote-fleet-render-smoke.mjs +1350 -1350
  52. package/scripts/remote-frame-ws-smoke.mjs +234 -234
  53. package/scripts/remote-http-smoke.mjs +592 -592
  54. package/scripts/remote-hub-identity-smoke.mjs +146 -146
  55. package/scripts/remote-hub-scale-smoke.mjs +124 -124
  56. package/scripts/remote-hub-smoke.mjs +699 -699
  57. package/scripts/remote-input-ws-smoke.mjs +263 -263
  58. package/scripts/remote-registry-follower-smoke.mjs +815 -815
  59. package/scripts/setup-tree-sitter-grammars.mjs +59 -59
  60. package/server.js +7690 -7690
  61. package/start-bridge.bat +32 -32
  62. package/start-bridge.sh +81 -81
  63. package/wwwroot/_content/MindExecution.Plugins.Admin/css/admin-dashboard.css +546 -546
  64. package/wwwroot/_content/MindExecution.Plugins.YouTube/css/youtube-search.css +251 -251
  65. package/wwwroot/_content/MindExecution.Shared/css/app.css +1 -1
  66. package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +3789 -3789
  67. package/wwwroot/_content/MindExecution.Shared/js/agent-visualization.js +27 -27
  68. package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +1449 -1449
  69. package/wwwroot/_content/MindExecution.Shared/js/code-master.js +8316 -8316
  70. package/wwwroot/_content/MindExecution.Shared/js/file-system-helper.js +338 -338
  71. package/wwwroot/_content/MindExecution.Shared/js/marked.min.js +69 -69
  72. package/wwwroot/_content/MindExecution.Shared/js/mind-map-animated-image-preview.js +270 -270
  73. package/wwwroot/_content/MindExecution.Shared/js/mind-map-automation-edge-motion.js +170 -170
  74. package/wwwroot/_content/MindExecution.Shared/js/mind-map-board-render-ownership.js +81 -81
  75. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +10506 -10506
  76. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-hotpath.js +902 -902
  77. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +24637 -24637
  78. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dev-guards.js +325 -325
  79. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js +1491 -1491
  80. package/wwwroot/_content/MindExecution.Shared/js/mind-map-glow-shader.js +70 -70
  81. package/wwwroot/_content/MindExecution.Shared/js/mind-map-image-policy.js +218 -218
  82. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +7065 -7065
  83. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js +160 -160
  84. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +9956 -9956
  85. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-video-placeholder.js +107 -107
  86. package/wwwroot/_content/MindExecution.Shared/js/mind-map-logic-workers.js +1004 -1004
  87. package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +1351 -1351
  88. package/wwwroot/_content/MindExecution.Shared/js/mind-map-multi-select.js +865 -865
  89. package/wwwroot/_content/MindExecution.Shared/js/mind-map-node-search-worker.js +554 -554
  90. package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +4744 -4744
  91. package/wwwroot/_content/MindExecution.Shared/js/mind-map-normal-boundary-optimizer.js +624 -624
  92. package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js +241 -241
  93. package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +2290 -2290
  94. package/wwwroot/_content/MindExecution.Shared/js/mind-map-remote-codecs.js +202 -202
  95. package/wwwroot/_content/MindExecution.Shared/js/mind-map-render-plan.js +1971 -1971
  96. package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-lod-system.js +93 -93
  97. package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +2391 -2391
  98. package/wwwroot/_content/MindExecution.Shared/js/mind-map-video-playback-controls.js +95 -95
  99. package/wwwroot/_content/MindExecution.Shared/js/mind-map-visibility-worker.js +895 -895
  100. package/wwwroot/_content/MindExecution.Shared/js/mindmap-toolbar.js +636 -636
  101. package/wwwroot/_content/MindExecution.Shared/js/native-drop-handler.js +45 -45
  102. package/wwwroot/_content/MindExecution.Shared/js/plan-master.js +117 -117
  103. package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +114 -114
  104. package/wwwroot/_content/MindExecution.Shared/js/texture-worker-manager.js +10 -10
  105. package/wwwroot/_content/MindExecution.Shared/js/three.min.js +6 -6
  106. package/wwwroot/_content/MindExecution.Shared/js/token-manager.js +7 -7
  107. package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js +6 -6
  108. package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js.map +2 -2
  109. package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/css/all.min.css +8 -8
  110. package/wwwroot/_content/MindExecution.Shared/models/vocab.txt +30522 -30522
  111. package/wwwroot/_framework/{Google.Protobuf.9h59ukbel7.dll → Google.Protobuf.33g2gb5is0.dll} +0 -0
  112. package/wwwroot/_framework/{MindExecution.Core.ty1xewqp36.dll → MindExecution.Core.z100xo4mg0.dll} +0 -0
  113. package/wwwroot/_framework/{MindExecution.Kernel.h7rqjoo69o.dll → MindExecution.Kernel.i9cldrx8yc.dll} +0 -0
  114. package/wwwroot/_framework/{MindExecution.Plugins.Admin.wrfrcvhjde.dll → MindExecution.Plugins.Admin.48lzqddb0a.dll} +0 -0
  115. package/wwwroot/_framework/{MindExecution.Plugins.Business.csbcyjurdh.dll → MindExecution.Plugins.Business.7m8u1q142p.dll} +0 -0
  116. package/wwwroot/_framework/{MindExecution.Plugins.Concept.buomiysqjn.dll → MindExecution.Plugins.Concept.cl5wmr53od.dll} +0 -0
  117. package/wwwroot/_framework/{MindExecution.Plugins.Directory.7k00i2v769.dll → MindExecution.Plugins.Directory.slipi39041.dll} +0 -0
  118. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.85i5ocraro.dll → MindExecution.Plugins.PlanMaster.qfge05l671.dll} +0 -0
  119. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.nbolrfakte.dll → MindExecution.Plugins.YouTube.tn7v29ut77.dll} +0 -0
  120. package/wwwroot/_framework/{MindExecution.Shared.nqh4porv7x.dll → MindExecution.Shared.rjqlf0umjn.dll} +0 -0
  121. package/wwwroot/_framework/{MindExecution.Web.211q3bf4mr.dll → MindExecution.Web.rwawrxxk38.dll} +0 -0
  122. package/wwwroot/_framework/blazor.boot.json +23 -23
  123. package/wwwroot/_headers +40 -40
  124. package/wwwroot/_redirects +1 -1
  125. package/wwwroot/index.html +772 -772
  126. package/wwwroot/js/marketing-tool.js +180 -180
  127. package/wwwroot/manifest.webmanifest +23 -23
  128. package/wwwroot/service-worker-assets.js +78 -106
  129. package/wwwroot/service-worker.js +33 -33
  130. package/tree-sitter-grammars/README.md +0 -18
  131. package/tree-sitter-grammars/tree-sitter-c_sharp.wasm +0 -0
  132. package/tree-sitter-grammars/tree-sitter-go.wasm +0 -0
  133. package/tree-sitter-grammars/tree-sitter-java.wasm +0 -0
  134. package/tree-sitter-grammars/tree-sitter-javascript.wasm +0 -0
  135. package/tree-sitter-grammars/tree-sitter-python.wasm +0 -0
  136. package/tree-sitter-grammars/tree-sitter-rust.wasm +0 -0
  137. package/tree-sitter-grammars/tree-sitter-tsx.wasm +0 -0
  138. package/tree-sitter-grammars/tree-sitter-typescript.wasm +0 -0
  139. package/wwwroot/_content/MindExecution.Plugins.Directory/background.png +0 -0
  140. package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Bold.ttf +0 -0
  141. package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Regular.ttf +0 -0
  142. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js.backup +0 -1059
  143. package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js.bak +0 -434
  144. package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js.backup +0 -372
  145. package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js.backup +0 -1258
package/README.md CHANGED
@@ -1,232 +1,232 @@
1
- # MindExec Local Bridge Server
2
-
3
- ??Blazor ?깆뿉??濡쒖뺄 ?뚯씪 ?쒖뒪?쒖뿉 ?묎렐?섍린 ?꾪븳 Node.js 釉뚮━吏€ ?쒕쾭?낅땲??
4
-
5
- ## npm quick start
6
-
7
- ```bash
8
- npx -y mindexec@latest
9
- ```
10
-
11
- `mindexec` is the short official launcher alias. Existing
12
- `npx -y @mindexec/cli@latest` commands remain compatible.
13
-
14
- The npm CLI now starts both pieces of the local product:
15
-
16
- - MindCanvas app: `http://localhost:5147/mindcanvas`
17
- - LocalBridge API: `http://127.0.0.1:5147/api/status`
18
- - Workspace assets: `http://127.0.0.1:5147/assets/...`
19
-
20
- By default the CLI opens the MindCanvas app in your default browser after the
21
- bridge is ready. Use `mindexec --no-open` or `MINDEXEC_NO_OPEN=1` when you only
22
- want to start the listener.
23
-
24
- For npx and global installs, the default workspace is the directory where you
25
- run the command. Run it from the folder that contains your `.mindexec` data, or
26
- pass the workspace explicitly:
27
-
28
- ```bash
29
- npx -y mindexec@latest --workspace /path/to/workspace
30
- ```
31
-
32
- For local frontend development, keep LocalBridge running and refresh the
33
- packaged app bundle after code changes:
34
-
35
- ```powershell
36
- .\scripts\publish-mindexec-cli.ps1 -AppOnly
37
- ```
38
-
39
- Then hard-refresh `http://localhost:5147/mindcanvas` in the browser.
40
-
41
- The app and bridge are packaged together. Run `scripts/publish-mindexec-cli.ps1`
42
- from the repository root before publishing so the latest
43
- `MindExecution.Web` WASM `wwwroot` is copied into `LocalBridge/wwwroot`.
44
- The packaged app is configured with `Bridge:Url=app-origin`, so custom
45
- `BRIDGE_PORT` values keep the WASM app and LocalBridge API on the same origin.
46
- The publish helper trims hosted/demo-only gallery images and unused
47
- precompressed static files from the npm bundle by default. Use
48
- `-KeepPackagedGalleryImages` or `-KeepPackagedPrecompressedAssets` only when
49
- testing a full untrimmed local package.
50
-
51
- ## Standalone Electron desktop app
52
-
53
- The Electron build contains both the published MindCanvas frontend and
54
- LocalBridge runtime. It does not discover, replace, or reuse a separately
55
- running `npx` Bridge. Each desktop launch allocates dedicated available
56
- LocalBridge and RemoteHub ports, starts its bundled runtime, and releases those
57
- ports when the app exits.
58
-
59
- Build Windows installer and portable artifacts:
60
-
61
- ```powershell
62
- cd LocalBridge
63
- npm run desktop:build:win
64
- npm run test:desktop:win
65
- ```
66
-
67
- Release artifacts are written to `artifacts/electron`:
68
-
69
- - `MindExec-Setup-<version>-x64.exe`
70
- - `MindExec-Portable-<version>-x64.exe`
71
- - `win-unpacked/MindExec.exe`
72
-
73
- The default desktop workspace is `Documents/MindExecution`. Set
74
- `MINDEXEC_DESKTOP_WORKSPACE` to use an explicit workspace. Store signing,
75
- Partner Center identity, Apple provisioning, and sandbox entitlements are
76
- release-channel credentials and are intentionally not embedded in source.
77
-
78
- ## Remote Direct quick start
79
-
80
- LocalBridge also starts a separate RemoteHub listener for direct remote-agent
81
- experiments. By default it binds to loopback only:
82
-
83
- ```bash
84
- npx -y mindexec@latest
85
- npx @mindexec/remote connect --manager 127.0.0.1:5198 --pair <pair-token>
86
- ```
87
-
88
- Read the pair token from the protected local endpoint:
89
-
90
- ```bash
91
- curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/status
92
- ```
93
-
94
- LAN/direct mode must be enabled explicitly by changing the RemoteHub bind host:
95
-
96
- ```powershell
97
- $env:REMOTE_HUB_HOST="0.0.0.0"
98
- $env:REMOTE_HUB_PORT="5198"
99
- $env:REMOTE_HUB_PAIR_TOKEN="<strong-token>"
100
- npx -y mindexec@latest
101
- ```
102
-
103
- Device inventory is intentionally not paginated:
104
-
105
- ```bash
106
- curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices
107
- ```
108
-
109
- Request and read the latest view-only thumbnail for a connected device:
110
-
111
- ```bash
112
- curl -X POST -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/thumbnail/request
113
- curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/thumbnail
114
- ```
115
-
116
- Start, read, and stop the focused view-only RemoteFast live stream:
117
-
118
- ```bash
119
- curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
120
- -d "{\"fps\":12,\"maxWidth\":960,\"maxHeight\":540,\"quality\":60}" \
121
- http://127.0.0.1:5147/api/remote/devices/<device-id>/live/start
122
-
123
- curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/live/frame
124
-
125
- curl -X POST -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/live/stop
126
- ```
127
-
128
- Queue a safe task-only instruction for one device or all connected devices:
129
-
130
- ```bash
131
- curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
132
- -d "{\"instruction\":\"Check the desktop and report status.\"}" \
133
- http://127.0.0.1:5147/api/remote/devices/<device-id>/tasks
134
-
135
- curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
136
- -d "{\"instruction\":\"Prepare a short status report.\",\"allConnected\":true}" \
137
- http://127.0.0.1:5147/api/remote/tasks
138
- ```
139
-
140
- Queue an opt-in text-only AI assist task for agents started with `--ai`:
141
-
142
- ```bash
143
- curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
144
- -d "{\"instruction\":\"Summarize what this computer should do next.\",\"allConnected\":true,\"approvalLevel\":\"ai-assist\"}" \
145
- http://127.0.0.1:5147/api/remote/tasks
146
- ```
147
-
148
- ?먮뒗 ?꾩뿭 ?ㅼ튂 ???ㅽ뻾?⑸땲??
149
-
150
- ```bash
151
- npm install -g @mindexec/cli
152
- mindexec
153
- ```
154
-
155
- 湲곕낯 ?ㅽ뻾 二쇱냼??`http://127.0.0.1:5147`?낅땲?? `WORKSPACE_PATH`媛€ 鍮꾩뼱 ?덉쑝硫??ㅼ튂???⑦궎吏€??遺€紐??대뜑瑜?湲곕낯 ?묒뾽 怨듦컙?쇰줈 ?ъ슜?⑸땲??
156
-
157
- ```bash
158
- mindexec --workspace /custom/path
159
- BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path mindexec
160
- ```
161
-
162
- ?꾩?留먭낵 踰꾩쟾 ?뺤씤:
163
-
164
- ```bash
165
- mindexec --help
166
- mindexec --version
167
- ```
168
-
169
- ## ?ㅼ튂
1
+ # MindExec Local Bridge Server
2
+
3
+ ??Blazor ?깆뿉??濡쒖뺄 ?뚯씪 ?쒖뒪?쒖뿉 ?묎렐?섍린 ?꾪븳 Node.js 釉뚮━吏€ ?쒕쾭?낅땲??
4
+
5
+ ## npm quick start
6
+
7
+ ```bash
8
+ npx -y mindexec@latest
9
+ ```
10
+
11
+ `mindexec` is the short official launcher alias. Existing
12
+ `npx -y @mindexec/cli@latest` commands remain compatible.
13
+
14
+ The npm CLI now starts both pieces of the local product:
15
+
16
+ - MindCanvas app: `http://localhost:5147/mindcanvas`
17
+ - LocalBridge API: `http://127.0.0.1:5147/api/status`
18
+ - Workspace assets: `http://127.0.0.1:5147/assets/...`
19
+
20
+ By default the CLI opens the MindCanvas app in your default browser after the
21
+ bridge is ready. Use `mindexec --no-open` or `MINDEXEC_NO_OPEN=1` when you only
22
+ want to start the listener.
23
+
24
+ For npx and global installs, the default workspace is the directory where you
25
+ run the command. Run it from the folder that contains your `.mindexec` data, or
26
+ pass the workspace explicitly:
27
+
28
+ ```bash
29
+ npx -y mindexec@latest --workspace /path/to/workspace
30
+ ```
31
+
32
+ For local frontend development, keep LocalBridge running and refresh the
33
+ packaged app bundle after code changes:
34
+
35
+ ```powershell
36
+ .\scripts\publish-mindexec-cli.ps1 -AppOnly
37
+ ```
38
+
39
+ Then hard-refresh `http://localhost:5147/mindcanvas` in the browser.
40
+
41
+ The app and bridge are packaged together. Run `scripts/publish-mindexec-cli.ps1`
42
+ from the repository root before publishing so the latest
43
+ `MindExecution.Web` WASM `wwwroot` is copied into `LocalBridge/wwwroot`.
44
+ The packaged app is configured with `Bridge:Url=app-origin`, so custom
45
+ `BRIDGE_PORT` values keep the WASM app and LocalBridge API on the same origin.
46
+ The publish helper trims hosted/demo-only gallery images and unused
47
+ precompressed static files from the npm bundle by default. Use
48
+ `-KeepPackagedGalleryImages` or `-KeepPackagedPrecompressedAssets` only when
49
+ testing a full untrimmed local package.
50
+
51
+ ## Standalone Electron desktop app
52
+
53
+ The Electron build contains both the published MindCanvas frontend and
54
+ LocalBridge runtime. It does not discover, replace, or reuse a separately
55
+ running `npx` Bridge. Each desktop launch allocates dedicated available
56
+ LocalBridge and RemoteHub ports, starts its bundled runtime, and releases those
57
+ ports when the app exits.
58
+
59
+ Build Windows installer and portable artifacts:
60
+
61
+ ```powershell
62
+ cd LocalBridge
63
+ npm run desktop:build:win
64
+ npm run test:desktop:win
65
+ ```
66
+
67
+ Release artifacts are written to `artifacts/electron`:
68
+
69
+ - `MindExec-Setup-<version>-x64.exe`
70
+ - `MindExec-Portable-<version>-x64.exe`
71
+ - `win-unpacked/MindExec.exe`
72
+
73
+ The default desktop workspace is `Documents/MindExecution`. Set
74
+ `MINDEXEC_DESKTOP_WORKSPACE` to use an explicit workspace. Store signing,
75
+ Partner Center identity, Apple provisioning, and sandbox entitlements are
76
+ release-channel credentials and are intentionally not embedded in source.
77
+
78
+ ## Remote Direct quick start
79
+
80
+ LocalBridge also starts a separate RemoteHub listener for direct remote-agent
81
+ experiments. By default it binds to loopback only:
82
+
83
+ ```bash
84
+ npx -y mindexec@latest
85
+ npx @mindexec/remote connect --manager 127.0.0.1:5198 --pair <pair-token>
86
+ ```
87
+
88
+ Read the pair token from the protected local endpoint:
89
+
90
+ ```bash
91
+ curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/status
92
+ ```
93
+
94
+ LAN/direct mode must be enabled explicitly by changing the RemoteHub bind host:
95
+
96
+ ```powershell
97
+ $env:REMOTE_HUB_HOST="0.0.0.0"
98
+ $env:REMOTE_HUB_PORT="5198"
99
+ $env:REMOTE_HUB_PAIR_TOKEN="<strong-token>"
100
+ npx -y mindexec@latest
101
+ ```
102
+
103
+ Device inventory is intentionally not paginated:
104
+
105
+ ```bash
106
+ curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices
107
+ ```
108
+
109
+ Request and read the latest view-only thumbnail for a connected device:
110
+
111
+ ```bash
112
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/thumbnail/request
113
+ curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/thumbnail
114
+ ```
115
+
116
+ Start, read, and stop the focused view-only RemoteFast live stream:
117
+
118
+ ```bash
119
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
120
+ -d "{\"fps\":12,\"maxWidth\":960,\"maxHeight\":540,\"quality\":60}" \
121
+ http://127.0.0.1:5147/api/remote/devices/<device-id>/live/start
122
+
123
+ curl -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/live/frame
124
+
125
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" http://127.0.0.1:5147/api/remote/devices/<device-id>/live/stop
126
+ ```
127
+
128
+ Queue a safe task-only instruction for one device or all connected devices:
129
+
130
+ ```bash
131
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
132
+ -d "{\"instruction\":\"Check the desktop and report status.\"}" \
133
+ http://127.0.0.1:5147/api/remote/devices/<device-id>/tasks
134
+
135
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
136
+ -d "{\"instruction\":\"Prepare a short status report.\",\"allConnected\":true}" \
137
+ http://127.0.0.1:5147/api/remote/tasks
138
+ ```
139
+
140
+ Queue an opt-in text-only AI assist task for agents started with `--ai`:
141
+
142
+ ```bash
143
+ curl -X POST -H "X-Bridge-Token: <bridge-token>" -H "Content-Type: application/json" \
144
+ -d "{\"instruction\":\"Summarize what this computer should do next.\",\"allConnected\":true,\"approvalLevel\":\"ai-assist\"}" \
145
+ http://127.0.0.1:5147/api/remote/tasks
146
+ ```
147
+
148
+ ?먮뒗 ?꾩뿭 ?ㅼ튂 ???ㅽ뻾?⑸땲??
149
+
150
+ ```bash
151
+ npm install -g @mindexec/cli
152
+ mindexec
153
+ ```
154
+
155
+ 湲곕낯 ?ㅽ뻾 二쇱냼??`http://127.0.0.1:5147`?낅땲?? `WORKSPACE_PATH`媛€ 鍮꾩뼱 ?덉쑝硫??ㅼ튂???⑦궎吏€??遺€紐??대뜑瑜?湲곕낯 ?묒뾽 怨듦컙?쇰줈 ?ъ슜?⑸땲??
156
+
157
+ ```bash
158
+ mindexec --workspace /custom/path
159
+ BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path mindexec
160
+ ```
161
+
162
+ ?꾩?留먭낵 踰꾩쟾 ?뺤씤:
163
+
164
+ ```bash
165
+ mindexec --help
166
+ mindexec --version
167
+ ```
168
+
169
+ ## ?ㅼ튂
170
170
 
171
171
  ```bash
172
172
  cd LocalBridge
173
173
  npm install
174
174
  ```
175
175
 
176
- ## ?ㅽ뻾
177
-
178
- ### ?쇰컲 ?ㅽ뻾
179
- ```bash
180
- cd LocalBridge
181
- npm start
182
- ```
183
-
184
- `npm start`??`WORKSPACE_PATH`媛€ 鍮꾩뼱 ?덉쑝硫?`LocalBridge`??遺€紐??대뜑(蹂댄넻 ?€?μ냼 猷⑦듃)瑜?湲곕낯 ?묒뾽 怨듦컙?쇰줈 ?ъ슜?⑸땲??
185
-
186
- ### macOS / Linux?먯꽌 ?명븯寃??ㅽ뻾
187
- ```bash
188
- cd LocalBridge
189
- chmod +x start-bridge.sh
190
- ./start-bridge.sh
191
- ```
192
-
193
- `start-bridge.sh`???ㅼ쓬???먮룞?쇰줈 泥섎━?⑸땲??
194
- - `WORKSPACE_PATH`媛€ ?놁쑝硫??€?μ냼 猷⑦듃瑜??묒뾽 怨듦컙?쇰줈 ?ъ슜
195
- - `BRIDGE_PORT`媛€ ?놁쑝硫?`5147` ?ъ슜
196
- - 媛숈? ?ы듃???대? 釉뚮━吏€媛€ ???덉쑝硫?以묐났 ?ㅽ뻾 諛⑹?
197
- - ?ㅻⅨ OS?먯꽌 蹂듭궗????`node_modules`媛€ 媛먯??섎㈃ ?꾩옱 ?뚮옯?쇱슜?쇰줈 ?ㅼ떆 `npm install`
198
-
199
- ### 媛쒕컻 紐⑤뱶 (?먮룞 ?ъ떆??
200
- ```bash
201
- npm run dev
202
- ```
203
-
204
- ### ?섍꼍 蹂€??
205
-
206
- | 蹂€??| ?ㅻ챸 | 湲곕낯媛?|
207
- |------|------|--------|
208
- | `BRIDGE_PORT` | ?쒕쾭 ?ы듃 | 5147 |
209
- | `WORKSPACE_PATH` | ?묒뾽 怨듦컙 寃쎈줈 | `LocalBridge` ?먮뒗 ?ㅼ튂 ?⑦궎吏€??遺€紐??대뜑 (?놁쑝硫?`~/Documents/MindExecution`) |
210
- | `BRIDGE_TOKEN` | ?꾪뿕 REST API???ъ슜??怨좎젙 ?좏겙. 鍮꾩슦硫??ㅽ뻾 ???쒕뜡 ?앹꽦 | ?쒕뜡 |
211
- | `BRIDGE_REQUIRE_TOKEN` | `false`/`0`/`off`濡??ㅼ젙?섎㈃ REST ?좏겙 寃€??鍮꾪솢?깊솕 | true |
212
- | `COMPANY_CORE_URL` | CompanyCore 濡쒖뺄 API 二쇱냼. `/api/company-core/*` ?꾨줉???€??| http://127.0.0.1:5077 |
213
- | `BRIDGE_SKIP_PORT_REAP` | ?쒖옉 ???숈씪 ?ы듃??湲곗〈 MindExec bridge ?뺣━瑜?嫄대꼫?? | false |
214
- | `BRIDGE_FORCE_KILL_PORT_OWNER` | `BRIDGE_PORT`瑜??≪쓣 ?꾩쓽 ?꾨줈?몄뒪瑜??뺣━ | false |
215
-
216
- ?덉떆:
217
- ```bash
218
- BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path npm start
219
- ```
220
-
221
- macOS / Linux?먯꽌 ?ㅽ겕由쏀듃?€ ?④퍡 ?ㅽ뻾???뚮룄 ?숈씪?⑸땲??
222
- ```bash
223
- BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path ./start-bridge.sh
224
- ```
225
-
226
- ## API ?붾뱶?ъ씤??
227
-
228
- ### ?곹깭 ?뺤씤
229
- - `GET /api/status` - ?쒕쾭 ?곹깭 ?뺤씤, `/events`??`wsToken`怨??꾪뿕 REST API??`bridgeToken` 諛섑솚
176
+ ## ?ㅽ뻾
177
+
178
+ ### ?쇰컲 ?ㅽ뻾
179
+ ```bash
180
+ cd LocalBridge
181
+ npm start
182
+ ```
183
+
184
+ `npm start`??`WORKSPACE_PATH`媛€ 鍮꾩뼱 ?덉쑝硫?`LocalBridge`??遺€紐??대뜑(蹂댄넻 ?€?μ냼 猷⑦듃)瑜?湲곕낯 ?묒뾽 怨듦컙?쇰줈 ?ъ슜?⑸땲??
185
+
186
+ ### macOS / Linux?먯꽌 ?명븯寃??ㅽ뻾
187
+ ```bash
188
+ cd LocalBridge
189
+ chmod +x start-bridge.sh
190
+ ./start-bridge.sh
191
+ ```
192
+
193
+ `start-bridge.sh`???ㅼ쓬???먮룞?쇰줈 泥섎━?⑸땲??
194
+ - `WORKSPACE_PATH`媛€ ?놁쑝硫??€?μ냼 猷⑦듃瑜??묒뾽 怨듦컙?쇰줈 ?ъ슜
195
+ - `BRIDGE_PORT`媛€ ?놁쑝硫?`5147` ?ъ슜
196
+ - 媛숈? ?ы듃???대? 釉뚮━吏€媛€ ???덉쑝硫?以묐났 ?ㅽ뻾 諛⑹?
197
+ - ?ㅻⅨ OS?먯꽌 蹂듭궗????`node_modules`媛€ 媛먯??섎㈃ ?꾩옱 ?뚮옯?쇱슜?쇰줈 ?ㅼ떆 `npm install`
198
+
199
+ ### 媛쒕컻 紐⑤뱶 (?먮룞 ?ъ떆??
200
+ ```bash
201
+ npm run dev
202
+ ```
203
+
204
+ ### ?섍꼍 蹂€??
205
+
206
+ | 蹂€??| ?ㅻ챸 | 湲곕낯媛?|
207
+ |------|------|--------|
208
+ | `BRIDGE_PORT` | ?쒕쾭 ?ы듃 | 5147 |
209
+ | `WORKSPACE_PATH` | ?묒뾽 怨듦컙 寃쎈줈 | `LocalBridge` ?먮뒗 ?ㅼ튂 ?⑦궎吏€??遺€紐??대뜑 (?놁쑝硫?`~/Documents/MindExecution`) |
210
+ | `BRIDGE_TOKEN` | ?꾪뿕 REST API???ъ슜??怨좎젙 ?좏겙. 鍮꾩슦硫??ㅽ뻾 ???쒕뜡 ?앹꽦 | ?쒕뜡 |
211
+ | `BRIDGE_REQUIRE_TOKEN` | `false`/`0`/`off`濡??ㅼ젙?섎㈃ REST ?좏겙 寃€??鍮꾪솢?깊솕 | true |
212
+ | `COMPANY_CORE_URL` | CompanyCore 濡쒖뺄 API 二쇱냼. `/api/company-core/*` ?꾨줉???€??| http://127.0.0.1:5077 |
213
+ | `BRIDGE_SKIP_PORT_REAP` | ?쒖옉 ???숈씪 ?ы듃??湲곗〈 MindExec bridge ?뺣━瑜?嫄대꼫?? | false |
214
+ | `BRIDGE_FORCE_KILL_PORT_OWNER` | `BRIDGE_PORT`瑜??≪쓣 ?꾩쓽 ?꾨줈?몄뒪瑜??뺣━ | false |
215
+
216
+ ?덉떆:
217
+ ```bash
218
+ BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path npm start
219
+ ```
220
+
221
+ macOS / Linux?먯꽌 ?ㅽ겕由쏀듃?€ ?④퍡 ?ㅽ뻾???뚮룄 ?숈씪?⑸땲??
222
+ ```bash
223
+ BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path ./start-bridge.sh
224
+ ```
225
+
226
+ ## API ?붾뱶?ъ씤??
227
+
228
+ ### ?곹깭 ?뺤씤
229
+ - `GET /api/status` - ?쒕쾭 ?곹깭 ?뺤씤, `/events`??`wsToken`怨??꾪뿕 REST API??`bridgeToken` 諛섑솚
230
230
 
231
231
  ### ?묒뾽 怨듦컙
232
232
  - `GET /api/workspace` - ?꾩옱 ?묒뾽 怨듦컙 ?뺣낫
@@ -238,7 +238,7 @@ BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path ./start-bridge.sh
238
238
  - `POST /api/file/delete` - ?뚯씪 ??젣
239
239
  - `POST /api/file/exists` - ?뚯씪 議댁옱 ?뺤씤
240
240
  - `POST /api/file/copy` - ?뚯씪 蹂듭궗
241
- - `POST /api/file/move` - ?뚯씪 ?대룞/?대쫫 蹂€寃?
241
+ - `POST /api/file/move` - ?뚯씪 ?대룞/?대쫫 蹂€寃?
242
242
  - `POST /api/file/info` - ?뚯씪 ?뺣낫
243
243
 
244
244
  ### ?붾젆?좊━ ?묒뾽
@@ -246,54 +246,54 @@ BRIDGE_PORT=8080 WORKSPACE_PATH=/custom/path ./start-bridge.sh
246
246
  - `POST /api/dir/list` - ?붾젆?좊━ 紐⑸줉
247
247
  - `POST /api/dir/delete` - ?붾젆?좊━ ??젣
248
248
 
249
- ### ???ㅽ뻾
250
- - `POST /api/shell/execute` - ??紐낅졊 ?ㅽ뻾. 湲곗〈 ?명솚?⑹씠硫??대??곸쑝濡?job ?대깽?몃? `/events`濡??꾩넚
251
- - `POST /api/shell/jobs` - ??紐낅졊??諛깃렇?쇱슫??job?쇰줈 ?쒖옉?섍퀬 `jobId` 諛섑솚
252
- - `GET /api/shell/jobs/:jobId` - job ?곹깭/異쒕젰 議고쉶
253
- - `POST /api/shell/jobs/:jobId/cancel` - ?ㅽ뻾 以묒씤 job 痍⑥냼
254
-
255
- ### ?대깽???ㅽ듃由?- `WebSocket /events?token=<wsToken>` - ?꾨줈?앺듃 蹂€寃쎄낵 shell/Codex job ?대깽?몃? push
256
-
257
- Shell/Codex job ?대깽??
258
- - `ShellQueued`
259
- - `ShellStarted`
260
- - `ShellStdout`
261
- - `ShellStderr`
262
- - `ShellCompleted`
263
- - `ShellFailed`
264
- - `ShellCancelRequested`
265
-
266
- ### OpenAI Codex runtime
267
- - `GET /api/codex/capabilities` - TypeScript SDK / App Server scaffold / Legacy Exec provider availability
268
- - `POST /api/codex/thread/start` - start a local Codex thread
269
- - `POST /api/codex/thread/run` - run a Codex turn. Uses `@openai/codex-sdk` first and falls back to legacy `codex exec`
270
- - `POST /api/codex/image/run` - generate or edit one image through `@openai/codex-sdk`; invalid login opens the bundled browser sign-in flow and retries once
271
- - `POST /api/codex/thread/resume` - resume a stored SDK thread by id
272
- - `POST /api/codex/thread/cancel` - cancel an active turn
273
- - `GET /api/codex/thread/:threadId/status` - inspect local thread status and compact run metadata
274
-
275
- The TypeScript SDK runs only inside LocalBridge. Browser/WASM clients should call these bridge endpoints and must not import or execute Codex SDK packages directly.
276
-
277
- By default, LocalBridge reuses the active `CODEX_HOME` (or the standard `~/.codex` home) so SDK calls share the existing Codex login. Set `MINDEXEC_CODEX_HOME` only when a deliberately separate MindExec login is required.
278
-
279
- ### Port ownership
280
-
281
- On startup, LocalBridge checks `BRIDGE_PORT` and stops an existing MindExec/LocalBridge listener on that same port before binding. If the port is owned by an unrelated process, startup fails with a clear message instead of silently killing it. Set `BRIDGE_FORCE_KILL_PORT_OWNER=1` only when the launcher owns that port policy and should terminate any listener.
282
-
283
- The `start-bridge.bat` and `start-bridge.sh` wrappers always delegate startup to `launch-bridge.cjs`, so port cleanup is handled by the same guard path on every launch.
284
- ### CompanyCore ?꾨줉??- `GET /api/company-core/health` -> `CompanyCore /health`
285
- - `GET /api/company-core/companies` -> `CompanyCore /api/companies`
286
- - `POST /api/company-core/companies/create-and-run` -> `CompanyCore /api/companies/create-and-run`
287
-
288
- MindExec Web?€ CompanyCore ?ы듃瑜?吏곸젒 ???꾩슂 ?놁씠 LocalBridge `5147`留??몄텧?섎㈃ ?⑸땲?? ???꾨줉?쒕룄 Bridge Token 蹂댄샇瑜?諛쏆뒿?덈떎.
249
+ ### ???ㅽ뻾
250
+ - `POST /api/shell/execute` - ??紐낅졊 ?ㅽ뻾. 湲곗〈 ?명솚?⑹씠硫??대??곸쑝濡?job ?대깽?몃? `/events`濡??꾩넚
251
+ - `POST /api/shell/jobs` - ??紐낅졊??諛깃렇?쇱슫??job?쇰줈 ?쒖옉?섍퀬 `jobId` 諛섑솚
252
+ - `GET /api/shell/jobs/:jobId` - job ?곹깭/異쒕젰 議고쉶
253
+ - `POST /api/shell/jobs/:jobId/cancel` - ?ㅽ뻾 以묒씤 job 痍⑥냼
254
+
255
+ ### ?대깽???ㅽ듃由?- `WebSocket /events?token=<wsToken>` - ?꾨줈?앺듃 蹂€寃쎄낵 shell/Codex job ?대깽?몃? push
256
+
257
+ Shell/Codex job ?대깽??
258
+ - `ShellQueued`
259
+ - `ShellStarted`
260
+ - `ShellStdout`
261
+ - `ShellStderr`
262
+ - `ShellCompleted`
263
+ - `ShellFailed`
264
+ - `ShellCancelRequested`
265
+
266
+ ### OpenAI Codex runtime
267
+ - `GET /api/codex/capabilities` - TypeScript SDK / App Server scaffold / Legacy Exec provider availability
268
+ - `POST /api/codex/thread/start` - start a local Codex thread
269
+ - `POST /api/codex/thread/run` - run a Codex turn. Uses `@openai/codex-sdk` first and falls back to legacy `codex exec`
270
+ - `POST /api/codex/image/run` - generate or edit one image through `@openai/codex-sdk`; invalid login opens the bundled browser sign-in flow and retries once
271
+ - `POST /api/codex/thread/resume` - resume a stored SDK thread by id
272
+ - `POST /api/codex/thread/cancel` - cancel an active turn
273
+ - `GET /api/codex/thread/:threadId/status` - inspect local thread status and compact run metadata
274
+
275
+ The TypeScript SDK runs only inside LocalBridge. Browser/WASM clients should call these bridge endpoints and must not import or execute Codex SDK packages directly.
276
+
277
+ By default, LocalBridge reuses the active `CODEX_HOME` (or the standard `~/.codex` home) so SDK calls share the existing Codex login. Set `MINDEXEC_CODEX_HOME` only when a deliberately separate MindExec login is required.
278
+
279
+ ### Port ownership
280
+
281
+ On startup, LocalBridge checks `BRIDGE_PORT` and stops an existing MindExec/LocalBridge listener on that same port before binding. If the port is owned by an unrelated process, startup fails with a clear message instead of silently killing it. Set `BRIDGE_FORCE_KILL_PORT_OWNER=1` only when the launcher owns that port policy and should terminate any listener.
282
+
283
+ The `start-bridge.bat` and `start-bridge.sh` wrappers always delegate startup to `launch-bridge.cjs`, so port cleanup is handled by the same guard path on every launch.
284
+ ### CompanyCore ?꾨줉??- `GET /api/company-core/health` -> `CompanyCore /health`
285
+ - `GET /api/company-core/companies` -> `CompanyCore /api/companies`
286
+ - `POST /api/company-core/companies/create-and-run` -> `CompanyCore /api/companies/create-and-run`
287
+
288
+ MindExec Web?€ CompanyCore ?ы듃瑜?吏곸젒 ???꾩슂 ?놁씠 LocalBridge `5147`留??몄텧?섎㈃ ?⑸땲?? ???꾨줉?쒕룄 Bridge Token 蹂댄샇瑜?諛쏆뒿?덈떎.
289
289
 
290
290
  ## 蹂댁븞 二쇱쓽?ы빆
291
291
 
292
- - ???쒕쾭??**濡쒖뺄?몄뒪??127.0.0.1)?먯꽌留?* ?묎렐 媛€?ν빀?덈떎.
293
- - ?묒뾽 怨듦컙 ?몃????뚯씪?먮뒗 ?묎렐?????놁뒿?덈떎.
294
- - ?꾪뿕????紐낅졊(rm -rf, format ???€ 李⑤떒?⑸땲??
295
- - ?뚯씪 ?곌린/??젣, ?붾젆?좊━ ?앹꽦/??젣, asset ?낅줈?? shell, project open/close 媛숈? ?꾪뿕 REST API??湲곕낯?곸쑝濡?`X-Bridge-Token` ?먮뒗 `Authorization: Bearer <token>`???꾩슂?⑸땲??
296
- - ?좏겙?€ `GET /api/status`??`bridgeToken`?쇰줈 ?뺤씤?⑸땲?? 怨좎젙 ?좏겙???꾩슂?섎㈃ `BRIDGE_TOKEN` ?섍꼍 蹂€?섎? ?ъ슜?섏꽭??
292
+ - ???쒕쾭??**濡쒖뺄?몄뒪??127.0.0.1)?먯꽌留?* ?묎렐 媛€?ν빀?덈떎.
293
+ - ?묒뾽 怨듦컙 ?몃????뚯씪?먮뒗 ?묎렐?????놁뒿?덈떎.
294
+ - ?꾪뿕????紐낅졊(rm -rf, format ???€ 李⑤떒?⑸땲??
295
+ - ?뚯씪 ?곌린/??젣, ?붾젆?좊━ ?앹꽦/??젣, asset ?낅줈?? shell, project open/close 媛숈? ?꾪뿕 REST API??湲곕낯?곸쑝濡?`X-Bridge-Token` ?먮뒗 `Authorization: Bearer <token>`???꾩슂?⑸땲??
296
+ - ?좏겙?€ `GET /api/status`??`bridgeToken`?쇰줈 ?뺤씤?⑸땲?? 怨좎젙 ?좏겙???꾩슂?섎㈃ `BRIDGE_TOKEN` ?섍꼍 蹂€?섎? ?ъ슜?섏꽭??
297
297
 
298
298
  ## ?ъ슜 ?덉떆
299
299
 
@@ -308,65 +308,65 @@ const data = await response.json();
308
308
  console.log(data.content);
309
309
  ```
310
310
 
311
- ### ?뚯씪 ?곌린
312
- ```javascript
313
- const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
314
-
315
- await fetch('http://127.0.0.1:5147/api/file/write', {
316
- method: 'POST',
317
- headers: {
318
- 'Content-Type': 'application/json',
319
- [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
320
- },
321
- body: JSON.stringify({
322
- path: 'test.txt',
323
- content: 'Hello, World!'
311
+ ### ?뚯씪 ?곌린
312
+ ```javascript
313
+ const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
314
+
315
+ await fetch('http://127.0.0.1:5147/api/file/write', {
316
+ method: 'POST',
317
+ headers: {
318
+ 'Content-Type': 'application/json',
319
+ [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
320
+ },
321
+ body: JSON.stringify({
322
+ path: 'test.txt',
323
+ content: 'Hello, World!'
324
324
  })
325
325
  });
326
326
  ```
327
327
 
328
- ### ??紐낅졊 ?ㅽ뻾
329
- ```javascript
330
- const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
331
-
332
- const response = await fetch('http://127.0.0.1:5147/api/shell/execute', {
333
- method: 'POST',
334
- headers: {
335
- 'Content-Type': 'application/json',
336
- [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
337
- },
338
- body: JSON.stringify({
339
- command: 'dir',
340
- timeout: 30000
328
+ ### ??紐낅졊 ?ㅽ뻾
329
+ ```javascript
330
+ const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
331
+
332
+ const response = await fetch('http://127.0.0.1:5147/api/shell/execute', {
333
+ method: 'POST',
334
+ headers: {
335
+ 'Content-Type': 'application/json',
336
+ [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
337
+ },
338
+ body: JSON.stringify({
339
+ command: 'dir',
340
+ timeout: 30000
341
341
  })
342
342
  });
343
- const result = await response.json();
344
- console.log(result.stdout);
345
- ```
346
-
347
- ### ??job ?ㅽ듃由щ컢
348
- ```javascript
349
- const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
350
- const ws = new WebSocket(`ws://127.0.0.1:5147/events?token=${encodeURIComponent(status.wsToken)}`);
351
-
352
- ws.onmessage = (message) => {
353
- const event = JSON.parse(message.data);
354
- if (event.type === 'ShellStdout') console.log(event.payload.chunk);
355
- if (event.type === 'ShellCompleted') console.log('done', event.payload.jobId);
356
- };
357
-
358
- await fetch('http://127.0.0.1:5147/api/shell/jobs', {
359
- method: 'POST',
360
- headers: {
361
- 'Content-Type': 'application/json',
362
- [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
363
- },
364
- body: JSON.stringify({
365
- command: 'codex exec \"Summarize this repository\"',
366
- timeout: 300000
367
- })
368
- });
369
- ```
343
+ const result = await response.json();
344
+ console.log(result.stdout);
345
+ ```
346
+
347
+ ### ??job ?ㅽ듃由щ컢
348
+ ```javascript
349
+ const status = await fetch('http://127.0.0.1:5147/api/status').then(r => r.json());
350
+ const ws = new WebSocket(`ws://127.0.0.1:5147/events?token=${encodeURIComponent(status.wsToken)}`);
351
+
352
+ ws.onmessage = (message) => {
353
+ const event = JSON.parse(message.data);
354
+ if (event.type === 'ShellStdout') console.log(event.payload.chunk);
355
+ if (event.type === 'ShellCompleted') console.log('done', event.payload.jobId);
356
+ };
357
+
358
+ await fetch('http://127.0.0.1:5147/api/shell/jobs', {
359
+ method: 'POST',
360
+ headers: {
361
+ 'Content-Type': 'application/json',
362
+ [status.bridgeTokenHeader || 'X-Bridge-Token']: status.bridgeToken
363
+ },
364
+ body: JSON.stringify({
365
+ command: 'codex exec \"Summarize this repository\"',
366
+ timeout: 300000
367
+ })
368
+ });
369
+ ```
370
370
 
371
371
  ## CORS
372
372
 
@@ -382,6 +382,6 @@ await fetch('http://127.0.0.1:5147/api/shell/jobs', {
382
382
  ## Web怨?MAUI ?숈떆 ?ъ슜
383
383
 
384
384
  1. 釉뚮━吏€ ?쒕쾭瑜??ㅽ뻾?⑸땲??(`npm start`)
385
- 2. Web Blazor ?깆쓣 ?ㅽ뻾?⑸땲??
385
+ 2. Web Blazor ?깆쓣 ?ㅽ뻾?⑸땲??
386
386
  3. MAUI ?깆? 釉뚮━吏€ ?쒕쾭 ?놁씠???묐룞?⑸땲??(吏곸젒 ?뚯씪 ?쒖뒪???묎렐)
387
387