@josxa/opencode-pty
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"notification-manager.d.ts","sourceRoot":"","sources":["../../../../src/plugin/pty/notification-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AA0BtD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA8B;IAE5C,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI5B,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhF,OAAO,CAAC,qBAAqB;CA+C9B"} | ||
| {"version":3,"file":"notification-manager.d.ts","sourceRoot":"","sources":["../../../../src/plugin/pty/notification-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AA4DtD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA8B;IAE5C,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI5B,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBhF,OAAO,CAAC,qBAAqB;CAqD9B"} |
| import { NOTIFICATION_LINE_TRUNCATE, NOTIFICATION_TITLE_TRUNCATE } from "../constants.js"; | ||
| const FAST_EXIT_INTERRUPT_MS = 2_000; | ||
| // biome-ignore lint/complexity/useRegexLiterals: string form avoids control-character regex lint for ANSI sequences. | ||
@@ -21,2 +22,26 @@ const OSC_SEQUENCE_REGEX = new RegExp('\\u001b\\][^\\u0007\\u001b]*(?:\\u0007|\\u001b\\\\)', 'g'); | ||
| } | ||
| function getElapsedMs(session) { | ||
| return Math.max(0, Date.now() - session.createdAt.getTime()); | ||
| } | ||
| function isQuickInterrupt(elapsedMs) { | ||
| return elapsedMs <= FAST_EXIT_INTERRUPT_MS; | ||
| } | ||
| function formatElapsed(elapsedMs) { | ||
| if (elapsedMs < 1_000) { | ||
| return `${Math.round(elapsedMs)}ms`; | ||
| } | ||
| if (elapsedMs < 10_000) { | ||
| return `${(elapsedMs / 1_000).toFixed(3)}s`; | ||
| } | ||
| if (elapsedMs < 60_000) { | ||
| return `${(elapsedMs / 1_000).toFixed(2)}s`; | ||
| } | ||
| if (elapsedMs < 600_000) { | ||
| return `${(elapsedMs / 1_000).toFixed(1)}s`; | ||
| } | ||
| const totalSeconds = Math.round(elapsedMs / 1_000); | ||
| const minutes = Math.floor(totalSeconds / 60); | ||
| const seconds = totalSeconds % 60; | ||
| return `${minutes}m ${seconds}s`; | ||
| } | ||
| export class NotificationManager { | ||
@@ -32,3 +57,7 @@ client = null; | ||
| try { | ||
| const message = this.buildExitNotification(session, exitCode); | ||
| const elapsedMs = getElapsedMs(session); | ||
| if (isQuickInterrupt(elapsedMs)) { | ||
| await this.client.session.abort({ path: { id: session.parentSessionId } }); | ||
| } | ||
| const message = this.buildExitNotification(session, exitCode, elapsedMs); | ||
| await this.client.session.promptAsync({ | ||
@@ -46,3 +75,3 @@ path: { id: session.parentSessionId }, | ||
| } | ||
| buildExitNotification(session, exitCode) { | ||
| buildExitNotification(session, exitCode, elapsedMs) { | ||
| const lineCount = session.buffer.length; | ||
@@ -67,2 +96,3 @@ let lastLine = ''; | ||
| : displayTitle; | ||
| const quickInterrupt = isQuickInterrupt(elapsedMs); | ||
| const lines = [ | ||
@@ -72,2 +102,3 @@ '<pty_exited>', | ||
| `Description: ${truncatedTitle}`, | ||
| `Elapsed: ${formatElapsed(elapsedMs)}`, | ||
| `Exit Code: ${exitCode}`, | ||
@@ -78,4 +109,7 @@ `Output Lines: ${lineCount}`, | ||
| ]; | ||
| if (quickInterrupt) { | ||
| lines.splice(3, 0, 'Quick Interrupt: yes'); | ||
| } | ||
| if (lastLine !== '') { | ||
| lines.splice(5, 0, `Last Line: ${lastLine}`); | ||
| lines.splice(quickInterrupt ? 6 : 5, 0, `Last Line: ${lastLine}`); | ||
| } | ||
@@ -82,0 +116,0 @@ if (exitCode === 0) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"notification-manager.js","sourceRoot":"","sources":["../../../../src/plugin/pty/notification-manager.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"notification-manager.js","sourceRoot":"","sources":["../../../../src/plugin/pty/notification-manager.ts"],"names":[],"mappings":"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"} |
@@ -13,7 +13,7 @@ import { tool } from '@opencode-ai/plugin'; | ||
| .optional() | ||
| .describe('Regex pattern to match against screen text. Resolves on first match.'), | ||
| .describe('Regex tested against the full rendered screen text. Resolves on first match.'), | ||
| hashStableMs: tool.schema | ||
| .number() | ||
| .optional() | ||
| .describe('Wait until the screen content hash is unchanged for this many milliseconds (e.g., 2000 for "screen settled").'), | ||
| .describe('Resolve when the rendered screen hash is unchanged for this many ms (e.g., 2000 for "screen settled"). If combined with search, the first match wins.'), | ||
| timeout: tool.schema | ||
@@ -26,3 +26,3 @@ .number() | ||
| .optional() | ||
| .describe('Sequence number to diff against. When provided, returns only changed lines since that seq instead of full screen.'), | ||
| .describe('Sequence number used only to format the returned snapshot as a diff against that seq. Does not affect when the wait resolves.'), | ||
| }, | ||
@@ -29,0 +29,0 @@ async execute(args) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"snapshot-wait.js","sourceRoot":"","sources":["../../../../../src/plugin/pty/tools/snapshot-wait.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"snapshot-wait.js","sourceRoot":"","sources":["../../../../../src/plugin/pty/tools/snapshot-wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE;QACJ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC5E,MAAM,EAAE,IAAI,CAAC,MAAM;aAChB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8EAA8E,CAAC;QAC3F,YAAY,EAAE,IAAI,CAAC,MAAM;aACtB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uJAAuJ,CACxJ;QACH,OAAO,EAAE,IAAI,CAAC,MAAM;aACjB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,KAAK,EAAE,IAAI,CAAC,MAAM;aACf,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,+HAA+H,CAChI;KACJ;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACrF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE;YACjD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACjE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;QAElF,4CAA4C;QAC5C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC1C,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,0BAA0B,MAAM,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,aAAa,MAAM,aAAa,MAAM,CAAC,QAAQ,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,IAAI,CAAC,QAAQ,IAAI;oBACxM,YAAY;oBACZ,sBAAsB;iBACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACd,CAAC;YAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEzD,OAAO;gBACL,0BAA0B,MAAM,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,aAAa,MAAM,aAAa,MAAM,CAAC,QAAQ,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,GAAG;gBAClQ,YAAY,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;gBACzG,gBAAgB;gBAChB,GAAG,WAAW;gBACd,sBAAsB;aACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;QAED,gBAAgB;QAChB,OAAO;YACL,0BAA0B,MAAM,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,aAAa,MAAM,aAAa,MAAM,CAAC,QAAQ,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI;YAC/K,SAAS,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3D,YAAY,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YACzG,KAAK;YACL,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,mBAAmB;YACxC,sBAAsB;SACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;CACF,CAAC,CAAA"} |
@@ -1,1 +0,7 @@ | ||
| Blocks until the PTY screen matches a condition: text search (regex) or screen stability (hash unchanged for N ms). Returns the matching snapshot. Use instead of polling pty_snapshot in a loop. | ||
| Block until the PTY screen matches a condition, then return a snapshot. Use instead of polling `pty_snapshot`. | ||
| Provide at least one condition. If both are given, the first to match wins: | ||
| - `search`: regex tested against the full rendered screen text | ||
| - `hashStableMs`: rendered screen hash unchanged for N ms | ||
| Returns on match, timeout, or PTY exit. `since` only formats the returned output as a diff and does not affect the wait condition. |
| Spawns a new interactive PTY (pseudo-terminal) session that runs in the background. | ||
| Unlike the built-in bash tool which runs commands synchronously and waits for completion, PTY sessions persist and allow you to: | ||
| - Run long-running processes (dev servers, watch modes, etc.) | ||
| - Run long-running or timing-sensitive processes (dev servers, watch modes, quick timing checks, etc.) | ||
| - Send interactive input (including Ctrl+C, arrow keys, etc.) | ||
@@ -6,0 +6,0 @@ - Read output at any time |
+1
-1
@@ -6,3 +6,3 @@ { | ||
| "module": "./dist/index.js", | ||
| "version": "0.5.1", | ||
| "version": "0.6.0", | ||
| "publishConfig": { | ||
@@ -9,0 +9,0 @@ "access": "public", |
+4
-4
@@ -245,13 +245,13 @@ # opencode-pty | ||
| Instead of polling in a loop, use `pty_snapshot_wait` to block until a condition is met: | ||
| Use `pty_snapshot_wait` to block until a condition is met instead of polling: | ||
| ``` | ||
| pty_snapshot_wait: id="pty_a1b2c3d4", search="error|Error", timeout=30000 | ||
| → Blocks until "error" or "Error" appears on screen, or times out | ||
| → Resolves when the regex matches the full rendered screen text | ||
| pty_snapshot_wait: id="pty_a1b2c3d4", hashStableMs=2000, timeout=30000 | ||
| → Blocks until screen content is unchanged for 2 seconds (useful for "wait until done") | ||
| → Resolves when screen content is unchanged for 2 seconds | ||
| ``` | ||
| Both parameters can be combined with `since` to get a diff on return. | ||
| When both `search` and `hashStableMs` are given, the first to match wins. `since` only changes the response to a diff against that seq and does not affect when the wait resolves. | ||
@@ -258,0 +258,0 @@ ### Example: Debugging OpenCode itself |
748244
0.42%4787
0.72%