nterminal 1.3.4 → 1.3.6

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 (126) hide show
  1. package/README.md +68 -37
  2. package/assets/screenshot/accounts.png +0 -0
  3. package/assets/screenshot/history.png +0 -0
  4. package/assets/screenshot/mobile-panes.png +0 -0
  5. package/assets/screenshot/mobile.png +0 -0
  6. package/assets/screenshot/scr.png +0 -0
  7. package/assets/screenshot/subagents.png +0 -0
  8. package/bin/nterminal.js +10 -3
  9. package/dist/client/assets/MarkdownPreview-B-LrTjTM.js +1 -0
  10. package/dist/client/assets/{TranscriptMarkdownBody-H8ZsISc6.js → TranscriptMarkdownBody-3aYVmqQz.js} +1 -1
  11. package/dist/client/assets/index-D3LN5iAH.js +58 -0
  12. package/dist/client/assets/{index-DxfBq-4P.js → index-Dd_o8KCL.js} +1 -1
  13. package/dist/client/assets/index-W-zGfY1a.css +1 -0
  14. package/dist/client/index.html +2 -2
  15. package/dist/scripts/hooks.js +124 -0
  16. package/dist/scripts/hooks.js.map +1 -0
  17. package/dist/server/accounts/accountService.d.ts +23 -1
  18. package/dist/server/accounts/accountService.js +235 -103
  19. package/dist/server/accounts/accountService.js.map +1 -1
  20. package/dist/server/accounts/providerRequests.d.ts +12 -0
  21. package/dist/server/accounts/providerRequests.js +159 -0
  22. package/dist/server/accounts/providerRequests.js.map +1 -0
  23. package/dist/server/agent/agentRoutes.js +11 -0
  24. package/dist/server/agent/agentRoutes.js.map +1 -1
  25. package/dist/server/hooks/codexAppServer.d.ts +30 -0
  26. package/dist/server/hooks/codexAppServer.js +170 -0
  27. package/dist/server/hooks/codexAppServer.js.map +1 -0
  28. package/dist/server/hooks/codexTrust.d.ts +72 -0
  29. package/dist/server/hooks/codexTrust.js +116 -0
  30. package/dist/server/hooks/codexTrust.js.map +1 -0
  31. package/dist/server/hooks/helperJournal.d.ts +16 -0
  32. package/dist/server/hooks/helperJournal.js +74 -0
  33. package/dist/server/hooks/helperJournal.js.map +1 -0
  34. package/dist/server/hooks/hookBinding.d.ts +39 -0
  35. package/dist/server/hooks/hookBinding.js +91 -0
  36. package/dist/server/hooks/hookBinding.js.map +1 -0
  37. package/dist/server/hooks/hookFiles.d.ts +24 -0
  38. package/dist/server/hooks/hookFiles.js +160 -0
  39. package/dist/server/hooks/hookFiles.js.map +1 -0
  40. package/dist/server/hooks/hookInstallation.d.ts +108 -0
  41. package/dist/server/hooks/hookInstallation.js +1074 -0
  42. package/dist/server/hooks/hookInstallation.js.map +1 -0
  43. package/dist/server/hooks/hookProcess.d.ts +5 -0
  44. package/dist/server/hooks/hookProcess.js +85 -0
  45. package/dist/server/hooks/hookProcess.js.map +1 -0
  46. package/dist/server/hooks/hookReceiver.d.ts +66 -0
  47. package/dist/server/hooks/hookReceiver.js +549 -0
  48. package/dist/server/hooks/hookReceiver.js.map +1 -0
  49. package/dist/server/hooks/lifecycle.d.ts +40 -0
  50. package/dist/server/hooks/lifecycle.js +200 -0
  51. package/dist/server/hooks/lifecycle.js.map +1 -0
  52. package/dist/server/hooks/publicationLock.d.ts +3 -0
  53. package/dist/server/hooks/publicationLock.js +137 -0
  54. package/dist/server/hooks/publicationLock.js.map +1 -0
  55. package/dist/server/hooks/verifiedLock.d.ts +24 -0
  56. package/dist/server/hooks/verifiedLock.js +207 -0
  57. package/dist/server/hooks/verifiedLock.js.map +1 -0
  58. package/dist/server/http.d.ts +4 -0
  59. package/dist/server/http.js +6 -0
  60. package/dist/server/http.js.map +1 -1
  61. package/dist/server/index.js +71 -2
  62. package/dist/server/index.js.map +1 -1
  63. package/dist/server/notifications/agentCompletionMonitor.d.ts +16 -1
  64. package/dist/server/notifications/agentCompletionMonitor.js +261 -47
  65. package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
  66. package/dist/server/notifications/completionNotificationRouter.d.ts +2 -0
  67. package/dist/server/notifications/completionNotificationRouter.js +9 -0
  68. package/dist/server/notifications/completionNotificationRouter.js.map +1 -1
  69. package/dist/server/routes/accountRoutes.js +11 -0
  70. package/dist/server/routes/accountRoutes.js.map +1 -1
  71. package/dist/server/routes/activityRoutes.d.ts +13 -0
  72. package/dist/server/routes/activityRoutes.js +165 -0
  73. package/dist/server/routes/activityRoutes.js.map +1 -0
  74. package/dist/server/routes/agentManagementRoutes.js +8 -1
  75. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  76. package/dist/server/routes/hookRoutes.d.ts +16 -0
  77. package/dist/server/routes/hookRoutes.js +109 -0
  78. package/dist/server/routes/hookRoutes.js.map +1 -0
  79. package/dist/server/routes/terminalRoutes.js +4 -0
  80. package/dist/server/routes/terminalRoutes.js.map +1 -1
  81. package/dist/server/routes/transcriptQuery.d.ts +2 -1
  82. package/dist/server/routes/transcriptQuery.js +3 -1
  83. package/dist/server/routes/transcriptQuery.js.map +1 -1
  84. package/dist/server/terminal/PtyAdapter.d.ts +19 -0
  85. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  86. package/dist/server/terminal/TerminalManager.d.ts +61 -0
  87. package/dist/server/terminal/TerminalManager.js +672 -12
  88. package/dist/server/terminal/TerminalManager.js.map +1 -1
  89. package/dist/server/terminal/TmuxPtyAdapter.d.ts +14 -2
  90. package/dist/server/terminal/TmuxPtyAdapter.js +101 -15
  91. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  92. package/dist/server/terminal/activityChannel.d.ts +57 -0
  93. package/dist/server/terminal/activityChannel.js +166 -0
  94. package/dist/server/terminal/activityChannel.js.map +1 -0
  95. package/dist/server/terminal/agentTranscriptStatus.d.ts +12 -0
  96. package/dist/server/terminal/agentTranscriptStatus.js +78 -7
  97. package/dist/server/terminal/agentTranscriptStatus.js.map +1 -1
  98. package/dist/server/terminal/codexTranscriptSource.d.ts +3 -0
  99. package/dist/server/terminal/codexTranscriptSource.js +99 -39
  100. package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
  101. package/dist/server/terminal/subagentSources.js +2 -1
  102. package/dist/server/terminal/subagentSources.js.map +1 -1
  103. package/dist/server/terminal/transcriptHeader.d.ts +85 -0
  104. package/dist/server/terminal/transcriptHeader.js +376 -0
  105. package/dist/server/terminal/transcriptHeader.js.map +1 -0
  106. package/dist/server/terminal/transcriptHistory.d.ts +16 -2
  107. package/dist/server/terminal/transcriptHistory.js +120 -21
  108. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  109. package/dist/server/terminal/transcriptStore.d.ts +6 -0
  110. package/dist/server/terminal/transcriptStore.js +222 -26
  111. package/dist/server/terminal/transcriptStore.js.map +1 -1
  112. package/dist/shared/activityProbe.d.ts +10 -0
  113. package/dist/shared/activityProbe.js +24 -0
  114. package/dist/shared/activityProbe.js.map +1 -0
  115. package/dist/shared/protocol.d.ts +45 -0
  116. package/dist/shared/protocol.js.map +1 -1
  117. package/dist/shared/types.d.ts +9 -1
  118. package/docs/features.md +21 -1
  119. package/docs/provider-hooks.md +340 -0
  120. package/docs/terminal-history.md +10 -0
  121. package/package.json +2 -1
  122. package/scripts/nterminal-hook.cjs +171 -0
  123. package/scripts/nterminalctl +26 -2
  124. package/dist/client/assets/MarkdownPreview-DjDO4lEl.js +0 -1
  125. package/dist/client/assets/index-CIYazAGv.css +0 -1
  126. package/dist/client/assets/index-DwvLN_WJ.js +0 -56
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  NTerminal turns your own machines into one secure browser workspace for real shells, Codex, Claude, files, and long-running terminal sessions.
6
6
 
7
- <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/scr.png?v=readme-latest" alt="NTerminal workspace with split terminal panes" width="100%">
7
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/scr.png?v=readme-latest" alt="NTerminal workspace with two servers in the sidebar, a Codex pane, and split terminal panes" width="100%">
8
8
 
9
9
  NTerminal is a single-owner web terminal for machines you control. It is not a hosted shell product, not a SaaS app, and not a multi-user IDE.
10
10
 
@@ -50,23 +50,25 @@ Run onboarding as the account that should own NTerminal. Do not use `sudo ntermi
50
50
 
51
51
  ## Major Features
52
52
 
53
- - **Multi-server workspace**: manage the main server and all secondary servers from one browser UI, with separate tabs, panes, files, and layout state per server.
54
- - **Persistent real shells**: run real host PTYs with tabs and split panes, soft-detach terminals without killing them, and keep shells alive across NTerminal restarts when `tmux` is available.
55
- - **Codex / Claude friendly history**: scroll terminal output without driving TUI prompt history, load older tmux scrollback on demand, and open supported JSONL transcript history for Codex and Claude sessions.
56
- - **Secure personal access**: password plus TOTP, trusted devices/networks, IP-aware session checks, and origin checks around terminal/file mutation routes.
57
- - **Files and uploads**: browse the selected pane's cwd, view/edit text and Markdown, preview browser-supported files, drag files or folders into the active terminal directory, or attach files directly from Compose for an agent to read.
58
- - **Guided npm deployment**: install with npm, run `nterminal onboarding`, keep runtime state under `~/.nterminal`, and update servers from the UI.
53
+ - **Multi-server workspace**: manage the main server and every secondary server from one browser UI. Each server keeps its own workspaces, tabs, split panes, files, and layout.
54
+ - **Persistent real shells**: real host PTYs with workspaces, tabs, and split panes. Closed terminals detach instead of dying, and shells survive NTerminal restarts when `tmux` is available.
55
+ - **Codex / Claude aware panes**: panes running Codex or Claude get a transcript history viewer with server-side search, a subagent viewer, working/unread activity colors, and completion notifications.
56
+ - **Provider accounts and hooks**: save several Codex or Claude logins per server, switch between them, and check weekly usage. Optional lifecycle hooks give more reliable session and activity signals.
57
+ - **Secure personal access**: password plus TOTP, trusted devices and networks, IP-aware session checks, and origin checks around terminal/file mutation routes.
58
+ - **Files, uploads, and attachments**: browse and edit files in the selected pane's folder, drop files or folders into the terminal, attach files to a Compose message for an agent to read, or open the pane in a browser VS Code (code-server add-on).
59
+ - **Works on phones and tablets**: pane switcher, terminal key bar, and installable PWA with push notifications.
60
+ - **Guided npm deployment**: install with npm, run `nterminal onboarding`, keep runtime state under `~/.nterminal`, and update every server from the UI.
59
61
 
60
62
  ## Feature Details
61
63
 
62
- ### Server Management
64
+ ### Servers And Workspaces
63
65
 
64
66
  - Sidebar server switching does not tear down inactive server workspaces.
65
- - Server cards can show CPU, memory, disk, and swap usage with percentages and absolute values.
66
- - Compact and detailed server-list modes are available.
67
- - High resource usage is highlighted directly in the server list.
68
- - Fleet updates check npm registry versions, update secondary servers first, and update the main server last.
69
- - Hourly update checks badge Settings and Updates when a newer package is available.
67
+ - Each server has named **workspaces**, each with a default folder and its own tabs and panes. Workspaces can be renamed, reordered, and deleted.
68
+ - Server cards can show CPU, memory, disk, and swap usage with percentages and absolute values, in compact or detailed mode. High usage is highlighted.
69
+ - Secondary servers connect **directly** (main reaches them over the network) or **outbound** (the secondary keeps an authenticated WSS connection to main, for NAT, mobile, or changing IPs, with no inbound port).
70
+ - The **Server information** dialog shows the server role, its external IPv4, its favorite tabs, and its processes grouped by project folder with CPU and memory totals.
71
+ - Fleet updates check the npm registry, update secondary servers first, and update the main server last. Hourly update checks badge Settings and Updates when a newer package is available.
70
72
 
71
73
  ### Terminal Workspace
72
74
 
@@ -74,38 +76,57 @@ Run onboarding as the account that should own NTerminal. Do not use `sudo ntermi
74
76
  - Closed tabs and panes become restorable detached terminals.
75
77
  - A lightweight supervisor restarts the NTerminal Node process if it exits unexpectedly.
76
78
  - Tab titles sync with tmux window names so labels survive detach/reattach cycles.
79
+ - Tabs show a green dot while working and a blue unread badge when output finished in the background; workspaces and favorites show the same state.
80
+ - **Favorite tabs**: star any tab, then open the favorites dialog (`Ctrl+Alt+F`) to jump to it on any server. A favorite whose tab was closed is recreated in its saved folder.
77
81
  - Scroll progress, jump-to-bottom, mobile drag handles, and follow-tail behavior keep large outputs usable.
82
+ - Workspace shortcuts use Control-based keys and can be rebound in Settings (see [Features](docs/features.md#keyboard-shortcuts)).
78
83
 
79
- ### Transcript History
84
+ ### Codex / Claude History And Subagents
80
85
 
81
- - Supported Codex/Claude panes can continue into JSONL transcript history from `~/.codex/sessions` or `~/.claude/projects`.
82
- - The history viewer supports full-history search, Markdown rendering, optional tool output, and scroll-to-load older transcript entries. Search scans older records progressively and can jump to results that have not been loaded in the viewer.
83
- - When live session evidence is ambiguous, choose a transcript from the available candidates instead of silently attaching the wrong conversation.
84
- - A private, bounded disk cache reuses rendered conversation records across history views and searches. New output updates the tail without rebuilding the older cached records.
85
- - Transcript history is attached only when NTerminal can identify the backing session unambiguously.
86
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/history.png?v=readme-latest" alt="Transcript history viewer with search results in a Claude pane" width="100%">
86
87
 
87
- ### Files, Uploads, And Clipboard
88
+ - Supported Codex/Claude panes open JSONL transcript history (`View history`, `Alt+H`) from `~/.codex/sessions` or `~/.claude/projects`, with Markdown rendering, optional tool output, a prompt list, and scroll-to-load older entries.
89
+ - Search runs on the server from newest to oldest, including records not yet loaded in the viewer, and selecting a result loads the history around it.
90
+ - History is attached only when NTerminal can identify the backing session unambiguously. When several sessions are plausible, choose one from the session menu; this never changes the running CLI.
91
+ - A private, bounded disk cache reuses parsed conversation records across views and searches, and the history layout adapts to narrow panes.
92
+ - The subagent viewer (`View agents`, `Alt+A`) lists the subagents a session launched, with their state, and opens each one's conversation. It covers Claude subagents, Codex child threads, and `codex exec` runs started from a Claude session; nested subagents fold under their parent.
88
93
 
89
- - File saves reject stale overwrites when the file changed after opening.
90
- - Folder drops preserve internal paths and avoid overwriting existing files.
91
- - Compose accepts files by picker, drag-and-drop, or clipboard paste. It stores them outside the project under the runtime state directory and appends their readable paths only when the message is sent.
92
- - Multiple upload batches queue safely, show progress, support cancel, and retry failed files without duplicating successful uploads.
94
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/subagents.png?v=readme-latest" alt="Subagent viewer listing nested subagents of a Claude session" width="100%">
95
+
96
+ ### Provider Accounts And Hooks
97
+
98
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/accounts.png?v=readme-latest" alt="Codex accounts dialog with two saved accounts, weekly usage, and provider hooks" width="480">
99
+
100
+ - Open a server's Codex or Claude account dialog from the provider buttons on its server card.
101
+ - Each server keeps its own encrypted credential vault. Save several accounts, switch with **Use**, add one through a login terminal, and refresh credentials. Switching is blocked while Codex/Claude processes are running.
102
+ - The dialog shows access-token expiry, weekly and session usage remaining, reset times, and the last refresh result. Usage checks are read-only.
103
+ - Optional [provider lifecycle hooks](docs/provider-hooks.md) (Linux) can be installed or removed from the same dialog or with `nterminal hooks`. For Codex, **Trust NTerminal hooks in Codex** asks Codex to trust only NTerminal's own hooks, the same as approving them in `/hooks`.
104
+
105
+ ### Files, Uploads, And Editor
106
+
107
+ - The Files sidebar browses the selected pane's folder: view/edit text and Markdown, preview browser-supported files, and create, rename, or delete entries. Saves reject stale overwrites.
108
+ - Drop files or folders onto the terminal to upload them into the active pane's folder. Folder drops preserve internal paths and never overwrite existing files. Batches queue safely, show progress, support cancel, and retry only failed files.
109
+ - **Compose attachments**: attach files to a Compose message by picker, drag-and-drop, or paste. They are stored privately under `~/.nterminal/attachments` on the pane's server, and their paths are appended when the message is sent, so Codex, Claude, or another CLI can read them.
110
+ - **Remote editor**: the pane header can open the pane's folder in code-server (browser VS Code). NTerminal downloads and verifies the code-server release on first use (Linux x64/arm64) and stops idle instances.
93
111
  - Terminal Ctrl+C copies selected text and falls through to SIGINT when nothing is selected; Ctrl+V pastes clipboard text.
94
112
 
95
113
  ### Notifications
96
114
 
97
- - In-app completion toasts appear when background commands finish.
98
- - Toasts can auto-dismiss, stay until dismissed, or use custom MP4/WebM videos.
99
- - Settings can preview built-in/uploaded videos, enable/disable them, and randomly choose from the enabled set.
100
- - Clicking a completion toast jumps back to the server and pane that finished.
101
- - Optional OS notifications are available when the page is hidden.
115
+ - In-app completion toasts appear when background commands or Codex/Claude turns finish. Clicking one jumps to the server and pane that finished.
116
+ - Toasts can auto-dismiss, stay until dismissed, or play custom MP4/WebM videos chosen at random from the enabled set.
117
+ - OS notifications are available while the page is hidden, and the installed PWA can receive push notifications (HTTPS or localhost).
102
118
 
103
119
  ### Mobile And PWA
104
120
 
105
- - iPad home-screen metadata and icons are included.
106
- - Mobile terminal key bar exposes Ctrl, Esc, Tab, and arrows when needed.
107
- - Split layouts on narrow screens can focus one pane at a time, with a bottom-sheet switcher for terminals and editors.
121
+ <p>
122
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/mobile.png?v=readme-latest" alt="NTerminal on a phone: one pane of a split tab with the terminal key bar" width="280">
123
+ <img src="https://cdn.jsdelivr.net/npm/nterminal@latest/assets/screenshot/mobile-panes.png?v=readme-latest" alt="NTerminal on a phone: the pane switcher bottom sheet listing the tab's panes" width="280">
124
+ </p>
125
+
126
+ - Split layouts on narrow screens show one pane at a time, with previous/next buttons and a switcher for terminals and editors.
127
+ - The mobile key bar exposes Ctrl, Esc, Tab, and arrows when needed.
108
128
  - Touch scrolling controls are tuned for long terminal output.
129
+ - iPad home-screen metadata and icons are included.
109
130
 
110
131
  ## Requirements
111
132
 
@@ -113,6 +134,7 @@ Run onboarding as the account that should own NTerminal. Do not use `sudo ntermi
113
134
  - Linux or macOS.
114
135
  - Native build tools required by `node-pty`.
115
136
  - Optional `tmux` for PTY persistence across Node restarts.
137
+ - Provider hooks and the code-server add-on require Linux.
116
138
 
117
139
  If PTY creation fails after a package install, rebuild the native module inside the global package:
118
140
 
@@ -125,18 +147,27 @@ npm explore -g nterminal -- npm rebuild node-pty --build-from-source
125
147
  ```bash
126
148
  nterminal onboarding
127
149
  nterminal status
128
- nterminal logs
129
- nterminal restart
150
+ nterminal start | stop | restart
151
+ nterminal logs [-f] [N]
152
+ nterminal doctor
153
+ nterminal url
154
+ nterminal version
155
+ nterminal hooks status --provider codex
156
+ nterminal hooks install --provider claude
157
+ nterminal hooks trust --provider codex
130
158
  nterminal uninstall --force
131
159
  ```
132
160
 
161
+ Run `nterminal help` for the full list. Updates run from Settings, not from a CLI command.
162
+
133
163
  ## Documentation
134
164
 
135
165
  - [Onboarding](docs/onboarding.md): main/secondary setup, nginx, TLS, firewall, and package runtime setup.
136
166
  - [Configuration](docs/configuration.md): `.env`, environment variables, and deployment examples.
137
167
  - [Operations](docs/operations.md): service control, updates, clean uninstall, verification, and troubleshooting.
138
- - [Terminal History](docs/terminal-history.md): tmux scrollback, alternate buffer behavior, Codex/Claude JSONL history, and large-output ergonomics.
139
- - [Features](docs/features.md): files, uploads, notifications, mobile controls, keyboard shortcuts, and PWA behavior.
168
+ - [Terminal History](docs/terminal-history.md): tmux scrollback, alternate buffer behavior, Codex/Claude JSONL history, search, and large-output ergonomics.
169
+ - [Provider Hooks](docs/provider-hooks.md): optional Codex/Claude lifecycle hooks, Codex trust, and the `nterminal hooks` command.
170
+ - [Features](docs/features.md): workspaces, accounts, files, uploads, attachments, notifications, mobile controls, keyboard shortcuts, and PWA behavior.
140
171
  - [Security](SECURITY.md): supported security boundary and vulnerability reporting.
141
172
 
142
173
  ## Limitations
@@ -145,7 +176,7 @@ nterminal uninstall --force
145
176
  - No container isolation for spawned shells by default.
146
177
  - No recovery of live PTYs after an OS reboot.
147
178
  - No Node-restart PTY persistence on hosts without `tmux`.
148
- - No VS Code extension host, debugger, task runner, or Git UI.
179
+ - The built-in file editor is not an IDE. Full editing needs the optional code-server add-on, which is Linux-only.
149
180
 
150
181
  ## Publication Notes
151
182
 
Binary file
Binary file
Binary file
Binary file
Binary file
package/bin/nterminal.js CHANGED
@@ -48,7 +48,7 @@ function scriptEntrypoint(name) {
48
48
  function runScript(name, runArgs) {
49
49
  const [major, minor] = process.versions.node.split('.').map(Number);
50
50
  if (major < 22 || (major === 22 && minor < 13)) {
51
- console.error('error: Node.js >=22.13.0 is required; update Node.js before running onboarding.');
51
+ console.error('error: Node.js >=22.13.0 is required; update Node.js before running this command.');
52
52
  process.exit(1);
53
53
  }
54
54
  const entrypoint = scriptEntrypoint(name);
@@ -85,6 +85,10 @@ function printHelp() {
85
85
  Commands:
86
86
  version Print the installed NTerminal version.
87
87
  onboarding Run interactive main/secondary onboarding.
88
+ hooks <action> --provider <codex|claude>
89
+ Inspect, install, or remove lifecycle hooks (status/install/remove).
90
+ hooks trust --provider codex [--yes]
91
+ Ask Codex to trust only NTerminal's installed hooks (like /hooks).
88
92
  generate-secrets Print a new NTERMINAL_SESSION_SECRET.
89
93
  status Show process status.
90
94
  start Start the built server.
@@ -93,8 +97,8 @@ Commands:
93
97
  restart-after-update Restart after replacing the npm package.
94
98
  build Verify the bundled runtime exists.
95
99
  deploy Restart the installed package.
96
- clean --force Remove local runtime state.
97
- uninstall --force Stop and remove local runtime state before npm uninstall.
100
+ clean --force Remove local runtime state and NTerminal's provider hooks.
101
+ uninstall --force Stop and remove local runtime state and provider hooks before npm uninstall.
98
102
  logs [N] Show recent logs.
99
103
  logs -f [N] Follow logs.
100
104
  doctor Check local runtime readiness.
@@ -108,6 +112,9 @@ switch (command) {
108
112
  case 'onboarding':
109
113
  runScript('onboarding', args);
110
114
  break;
115
+ case 'hooks':
116
+ runScript('hooks', args);
117
+ break;
111
118
  case 'generate-secrets':
112
119
  case 'generate:secrets':
113
120
  runScript('generate-secrets', args);
@@ -0,0 +1 @@
1
+ import{j as a}from"./index-D3LN5iAH.js";import{M as e,r as o}from"./index-Dd_o8KCL.js";function s({content:r}){return a.jsx(e,{remarkPlugins:[o],children:r})}export{s as default};
@@ -1,3 +1,3 @@
1
- import{R as a,j as t}from"./index-DwvLN_WJ.js";import{M as u,r as m}from"./index-DxfBq-4P.js";const _=a.memo(function({text:o,searchQuery:n}){const e=a.useMemo(()=>f(n),[n]),i=a.useMemo(()=>j(o),[o]);return t.jsx(u,{components:e,remarkPlugins:[m],children:i})});function f(r){return{a({node:o,children:n,...e}){return t.jsx("a",{...e,target:"_blank",rel:"noreferrer",children:d(n,r)})},blockquote({node:o,children:n,...e}){return t.jsx("blockquote",{...e,children:d(n,r)})},code({node:o,children:n,...e}){return t.jsx("code",{...e,children:d(n,r)})},em({node:o,children:n,...e}){return t.jsx("em",{...e,children:d(n,r)})},h1({node:o,children:n,...e}){return t.jsx("h1",{...e,children:d(n,r)})},h2({node:o,children:n,...e}){return t.jsx("h2",{...e,children:d(n,r)})},h3({node:o,children:n,...e}){return t.jsx("h3",{...e,children:d(n,r)})},h4({node:o,children:n,...e}){return t.jsx("h4",{...e,children:d(n,r)})},h5({node:o,children:n,...e}){return t.jsx("h5",{...e,children:d(n,r)})},h6({node:o,children:n,...e}){return t.jsx("h6",{...e,children:d(n,r)})},li({node:o,children:n,...e}){return t.jsx("li",{...e,children:d(n,r)})},p({node:o,children:n,...e}){return t.jsx("p",{...e,children:d(n,r)})},pre({node:o,children:n,...e}){return t.jsx("pre",{...e,className:"transcript-markdown-code",children:n})},strong({node:o,children:n,...e}){return t.jsx("strong",{...e,children:d(n,r)})},td({node:o,children:n,...e}){return t.jsx("td",{...e,children:d(n,r)})},th({node:o,children:n,...e}){return t.jsx("th",{...e,children:d(n,r)})}}}function d(r,o){return a.Children.map(r,n=>typeof n=="string"?p(n,o):n)}function p(r,o){const n=o.trim();if(!n)return r||" ";const e=r.toLowerCase(),i=n.toLowerCase(),c=[];let l=0,s=e.indexOf(i);for(;s!==-1;){s>l&&c.push(r.slice(l,s));const h=s+n.length;c.push(t.jsx("mark",{className:"transcript-search-hit",children:r.slice(s,h)},`${s}-${h}`)),l=h,s=e.indexOf(i,l)}return l<r.length&&c.push(r.slice(l)),c.length>0?c:r||" "}function j(r){const o=r.split(`
1
+ import{R as a,j as t}from"./index-D3LN5iAH.js";import{M as u,r as m}from"./index-Dd_o8KCL.js";const _=a.memo(function({text:o,searchQuery:n}){const e=a.useMemo(()=>f(n),[n]),i=a.useMemo(()=>j(o),[o]);return t.jsx(u,{components:e,remarkPlugins:[m],children:i})});function f(r){return{a({node:o,children:n,...e}){return t.jsx("a",{...e,target:"_blank",rel:"noreferrer",children:d(n,r)})},blockquote({node:o,children:n,...e}){return t.jsx("blockquote",{...e,children:d(n,r)})},code({node:o,children:n,...e}){return t.jsx("code",{...e,children:d(n,r)})},em({node:o,children:n,...e}){return t.jsx("em",{...e,children:d(n,r)})},h1({node:o,children:n,...e}){return t.jsx("h1",{...e,children:d(n,r)})},h2({node:o,children:n,...e}){return t.jsx("h2",{...e,children:d(n,r)})},h3({node:o,children:n,...e}){return t.jsx("h3",{...e,children:d(n,r)})},h4({node:o,children:n,...e}){return t.jsx("h4",{...e,children:d(n,r)})},h5({node:o,children:n,...e}){return t.jsx("h5",{...e,children:d(n,r)})},h6({node:o,children:n,...e}){return t.jsx("h6",{...e,children:d(n,r)})},li({node:o,children:n,...e}){return t.jsx("li",{...e,children:d(n,r)})},p({node:o,children:n,...e}){return t.jsx("p",{...e,children:d(n,r)})},pre({node:o,children:n,...e}){return t.jsx("pre",{...e,className:"transcript-markdown-code",children:n})},strong({node:o,children:n,...e}){return t.jsx("strong",{...e,children:d(n,r)})},td({node:o,children:n,...e}){return t.jsx("td",{...e,children:d(n,r)})},th({node:o,children:n,...e}){return t.jsx("th",{...e,children:d(n,r)})}}}function d(r,o){return a.Children.map(r,n=>typeof n=="string"?p(n,o):n)}function p(r,o){const n=o.trim();if(!n)return r||" ";const e=r.toLowerCase(),i=n.toLowerCase(),c=[];let l=0,s=e.indexOf(i);for(;s!==-1;){s>l&&c.push(r.slice(l,s));const h=s+n.length;c.push(t.jsx("mark",{className:"transcript-search-hit",children:r.slice(s,h)},`${s}-${h}`)),l=h,s=e.indexOf(i,l)}return l<r.length&&c.push(r.slice(l)),c.length>0?c:r||" "}function j(r){const o=r.split(`
2
2
  `);let n=!1,e=null;return o.map((i,c)=>{const l=n,s=/^ {0,3}(```+|~~~+)/.exec(i);if(s){const h=s[1]?.startsWith("`")?"`":"~";n?e===h&&(n=!1,e=null):(n=!0,e=h)}return c===o.length-1||l||s||i.trim()===""||i.endsWith(" ")?i:`${i.replace(/[ \t]+$/,"")} `}).join(`
3
3
  `)}export{_ as default};