@f5-sales-demo/xcsh 20.1.1 → 20.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -28
- package/package.json +8 -8
- package/src/browser/capabilities.generated.ts +5 -72
- package/src/browser/capabilities.json +3 -51
- package/src/browser/chat-conformance.json +120 -229
- package/src/browser/chat-handler.ts +20 -18
- package/src/browser/chat-protocol.ts +23 -19
- package/src/browser/extension-bridge-tools.ts +0 -1
- package/src/browser/extension-bridge.ts +6 -9
- package/src/browser/extension-identity.ts +2 -0
- package/src/browser/extension-provider.ts +11 -54
- package/src/browser/host-profiles.ts +1 -1
- package/src/cli/chrome-cli.ts +3 -2
- package/src/cli/root-command-routing.ts +72 -0
- package/src/cli/sandbox-check.ts +93 -33
- package/src/cli.ts +39 -1
- package/src/commands/manager.ts +8 -8
- package/src/commands/sandbox.ts +1 -1
- package/src/internal-urls/build-info.generated.ts +8 -8
- package/src/internal-urls/console-catalog.generated.ts +2 -4
- package/src/main.ts +6 -8
- package/src/sandbox/session-fence.ts +1 -0
- package/src/tools/bash.ts +95 -45
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [20.2.1] - 2026-08-01
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Made root launch flags reject ambiguous subcommand placement without entering agent startup, kept subcommand help correctly routed, and added installed conformance coverage that explicit grants restore parent enumeration ([#2817](https://github.com/f5-sales-demo/xcsh/issues/2817))
|
|
10
|
+
|
|
11
|
+
## [20.2.0] - 2026-08-01
|
|
12
|
+
|
|
13
|
+
### Breaking Changes
|
|
14
|
+
|
|
15
|
+
- Adopted browser bridge contract 2.0: Chrome chat requests now require explicit tab and session routing, terminal chat errors expose only a closed reason code, and Chrome clients can no longer configure provider credentials or send console login credentials through the bridge ([#2802](https://github.com/f5-sales-demo/xcsh/issues/2802))
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Made root launch flags reject ambiguous subcommand placement without entering agent startup, kept subcommand help correctly routed, and added installed conformance coverage that explicit grants restore parent enumeration ([#2817](https://github.com/f5-sales-demo/xcsh/issues/2817))
|
|
20
|
+
|
|
21
|
+
## [20.1.2] - 2026-08-01
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Made `xcsh sandbox check` work for sessions rooted directly under the operator home, distinguish harness errors from sandbox failures, and verify this topology against installed release artifacts ([#2807](https://github.com/f5-sales-demo/xcsh/issues/2807))
|
|
26
|
+
|
|
5
27
|
## [20.1.1] - 2026-08-01
|
|
6
28
|
|
|
7
29
|
### Fixed
|
|
@@ -30,7 +52,7 @@
|
|
|
30
52
|
|
|
31
53
|
- Made operator-owned home files, CLI configuration, shell profiles, SSH state, plugins, skills, and settings consistently writable while preserving cross-session and data-root isolation ([#2720](https://github.com/f5-sales-demo/xcsh/issues/2720))
|
|
32
54
|
- Prevented sandbox sessions from enumerating the session root's parent while preserving named operator access and explicit read-grant overrides ([#2725](https://github.com/f5-sales-demo/xcsh/issues/2725))
|
|
33
|
-
- Included the generated API-spec
|
|
55
|
+
- Included the generated API-spec indices in npm artifacts and exercised them in tarball install smoke tests ([#2760](https://github.com/f5-sales-demo/xcsh/issues/2760))
|
|
34
56
|
|
|
35
57
|
## [20.0.0] - 2026-08-01
|
|
36
58
|
|
|
@@ -219,7 +241,7 @@
|
|
|
219
241
|
- Fixed relationship column pollution in `flattenRecord` where null relationships (e.g., `Account: null`) created a bare `Account` column alongside `Account.Name` from non-null records
|
|
220
242
|
- Fixed aggregate SOQL columns rendering as `expr0`/`expr1` by adding aliases (`TotalDeals`, `TotalAmount`) to template queries in sf-query prompt
|
|
221
243
|
- Fixed duplicate org entries in welcome-screen Salesforce status check (`welcome-checks.ts`)
|
|
222
|
-
- Fixed pre-existing biome
|
|
244
|
+
- Fixed pre-existing biome linting warning in `glab/formatters.ts` (string concatenation -> template literal)
|
|
223
245
|
- Fixed pre-existing test timeouts in `model-registry-runtime-provider.test.ts` and `interactive-mode-lsp-startup.test.ts` by increasing timeout for integration-level tests that shell out to CLIs
|
|
224
246
|
- Fixed profile caching test contaminating real `~/.sf/config.json` with mock data by adding HOME isolation
|
|
225
247
|
|
|
@@ -471,7 +493,7 @@ Refs: #173.
|
|
|
471
493
|
- Deferred diagnostics support in LSP writethrough: `onDeferredDiagnostics` callback and `deferredSignal` in `WritethroughOptions` allow callers to receive diagnostics that arrive after the main 5-second timeout
|
|
472
494
|
- Language detection for `.pm` (Perl modules), `.astro` (Astro framework), and special filenames `containerfile` and `justfile`
|
|
473
495
|
- Workspace-scoped diagnostics and reload actions via `*` file parameter; `diagnostics` action now supports `*` for workspace-wide diagnostics across all configured servers
|
|
474
|
-
- Socket-mode DAP adapter support for debuggers like dlv that communicate via network sockets instead of stdio; Linux uses
|
|
496
|
+
- Socket-mode DAP adapter support for debuggers like dlv that communicate via network sockets instead of stdio; Linux uses Unix domain sockets, macOS/other platforms use TCP with client-addr dialing
|
|
475
497
|
- Improved extensionless binary debugging: native debuggers (gdb, lldb-dap) and adapters with root markers are now preferred over unrelated adapters like debugpy
|
|
476
498
|
- Debug tool with DAP (Debug Adapter Protocol) support for launching and attaching debuggers, setting breakpoints, stepping through execution, inspecting threads/stack/variables, and evaluating expressions
|
|
477
499
|
- Debug adapter configuration for gdb, lldb-dap, debugpy, and dlv with language/file-type matching and root marker detection
|
|
@@ -582,7 +604,7 @@ Refs: #173.
|
|
|
582
604
|
- Removed unused `_createErrorToolResult` helper function from RPC host-tools module
|
|
583
605
|
- Fixed Go receiver method indentation in append operations to preserve relative indentation from the anchor chunk
|
|
584
606
|
- Fixed Go type chunk line counts to report only the type body lines instead of including grouped receiver methods
|
|
585
|
-
- Fixed enum variant insertion to avoid adding extra
|
|
607
|
+
- Fixed enum variant insertion to avoid adding extra empty lines between variants
|
|
586
608
|
- Chunk read output now correctly preserves embedded CRC in selectors (e.g., `class_Foo.fn_bar#ZZPM`) instead of stripping them during path parsing
|
|
587
609
|
- Chunk edit error messages now consistently report checksum mismatches with format `Checksum mismatch` instead of variable phrasing
|
|
588
610
|
- Chunk-mode read output now correctly displays scoped response trees showing only touched chunks and adjacent siblings, preventing unrelated distant chunks from appearing in responses
|
|
@@ -657,7 +679,7 @@ Refs: #173.
|
|
|
657
679
|
|
|
658
680
|
### Added
|
|
659
681
|
|
|
660
|
-
- Added URL reading capability to `read` tool with support for web pages, GitHub issues, Stack Overflow, Wikipedia, Reddit,
|
|
682
|
+
- Added URL reading capability to `read` tool with support for web pages, GitHub issues, Stack Overflow, Wikipedia, Reddit, npm, arXiv, technical blogs, RSS/Atom feeds, and JSON endpoints
|
|
661
683
|
- Added `offset` and `limit` parameter support for paginating cached URL fetch results
|
|
662
684
|
- Added URL caching mechanism to avoid redundant network requests when reading the same URL multiple times
|
|
663
685
|
|
|
@@ -1382,7 +1404,7 @@ Refs: #173.
|
|
|
1382
1404
|
- Added `refreshProvider()` method to refresh models for a specific provider on demand
|
|
1383
1405
|
- Added `getDiscoverableProviders()` method to list all configured discoverable providers
|
|
1384
1406
|
- Added `getProviderDiscoveryState()` method to inspect provider discovery status, cache age, and errors
|
|
1385
|
-
- Added provider discovery state tracking with status indicators (idle,
|
|
1407
|
+
- Added provider discovery state tracking with status indicators (idle, OK, cached, unavailable, unauthenticated)
|
|
1386
1408
|
- Added model caching with 24-hour TTL to preserve discovered models across sessions
|
|
1387
1409
|
- Added provider-specific empty state messages in model selector showing cache age and discovery status
|
|
1388
1410
|
- Added live provider refresh when switching provider tabs in model selector
|
|
@@ -1651,7 +1673,7 @@ Refs: #173.
|
|
|
1651
1673
|
|
|
1652
1674
|
- Updated hashline prompt documentation with clearer operation syntax and improved examples showing full edit structure with path and edits array
|
|
1653
1675
|
- Refactored `href` Handlebars helper to return JSON-quoted strings for safer embedding in JSON blocks within prompts
|
|
1654
|
-
- Improved `hashlineParseText` to correctly preserve
|
|
1676
|
+
- Improved `hashlineParseText` to correctly preserve empty lines and trailing empty strings in array input while stripping trailing newlines from string input
|
|
1655
1677
|
- Optimized duplicate line detection in range replacements to use trimmed comparison, reducing false positives from whitespace differences
|
|
1656
1678
|
- Refactored Kagi search provider to use shared Kagi API utilities from `web/kagi` module
|
|
1657
1679
|
- Changed HTML-to-text rendering priority order to try Kagi first, then Jina, Trafilatura, and Lynx
|
|
@@ -3250,7 +3272,7 @@ Refs: #173.
|
|
|
3250
3272
|
- Changed screenshot format to always use PNG instead of supporting JPEG with quality parameter
|
|
3251
3273
|
- Changed default extract_readable format from text to markdown
|
|
3252
3274
|
- Changed screenshot storage to use temporary directory with Snowflake IDs instead of artifacts directory
|
|
3253
|
-
- Changed ResizedImage interface to return buffer as Uint8Array with lazy
|
|
3275
|
+
- Changed ResizedImage interface to return buffer as Uint8Array with lazy loaded base64 data getter for improved memory efficiency
|
|
3254
3276
|
|
|
3255
3277
|
### Removed
|
|
3256
3278
|
|
|
@@ -3849,7 +3871,7 @@ Refs: #173.
|
|
|
3849
3871
|
- Added detailed phased execution pattern with four phases (Foundation, Parallel Implementation, Integration, Dependent Layer) and WASM-to-N-API migration example
|
|
3850
3872
|
- Added table of dependency patterns that must be sequential (API creation before bindings, interface definition before implementation, etc.)
|
|
3851
3873
|
- Added phased execution guidance for migrations and refactors to prevent parallel work on dependent layers
|
|
3852
|
-
- Added example demonstrating phased execution pattern for porting
|
|
3874
|
+
- Added example demonstrating phased execution pattern for porting Wasm to N-API with sequential foundation, parallel implementation, integration, and dependent layer phases
|
|
3853
3875
|
|
|
3854
3876
|
### Changed
|
|
3855
3877
|
|
|
@@ -3859,7 +3881,7 @@ Refs: #173.
|
|
|
3859
3881
|
- Updated binary build process to exclude worker files from compilation, reducing binary size
|
|
3860
3882
|
- Modified update mechanism to download and install native addon alongside CLI binary for platform-specific functionality
|
|
3861
3883
|
- Updated find tool to emit streaming match updates via callback, allowing real-time progress feedback during file searches
|
|
3862
|
-
- Modified find tool to use native match metadata (mtime, fileType) from
|
|
3884
|
+
- Modified find tool to use native match metadata (mtime, fileType) from Wasm layer instead of redundant filesystem stats, improving performance
|
|
3863
3885
|
- Restructured Task tool documentation to emphasize context quality and explicit API contracts for subagent success
|
|
3864
3886
|
- Updated task execution guidance to require structured context with Goal, Constraints, Existing Code, and API Contract sections
|
|
3865
3887
|
- Reorganized parallelization rules with explicit dependency patterns and phased execution guidance for migrations
|
|
@@ -3946,7 +3968,7 @@ Refs: #173.
|
|
|
3946
3968
|
- Git branch detection in status line now works synchronously without race conditions
|
|
3947
3969
|
- Shell session initialization properly restores trap handlers and shell functions after command execution
|
|
3948
3970
|
- Sanitized `BASH_ENV`/`ENV` during persistent shell startup and snapshot creation to prevent basic shells from exiting immediately.
|
|
3949
|
-
- Cached shell snapshots per shell binary to avoid sourcing
|
|
3971
|
+
- Cached shell snapshots per shell binary to avoid sourcing Zsh snapshots in bash sessions.
|
|
3950
3972
|
- Filtered unsafe bash options (onecmd/monitor/restricted) out of shell snapshots to prevent session exits.
|
|
3951
3973
|
|
|
3952
3974
|
## [9.2.2] - 2026-01-31
|
|
@@ -4129,7 +4151,7 @@ Refs: #173.
|
|
|
4129
4151
|
### Fixed
|
|
4130
4152
|
|
|
4131
4153
|
- Fixed plan reference injection and workflow prompt parameters for plan mode
|
|
4132
|
-
- Fixed tool downloads hanging on slow/blocked GitHub by adding timeouts and
|
|
4154
|
+
- Fixed tool downloads hanging on slow/blocked GitHub by adding timeouts and ZIP extraction fallback
|
|
4133
4155
|
- Fixed missing UI notification when tools are downloaded or installed on demand
|
|
4134
4156
|
|
|
4135
4157
|
## [8.4.0] - 2026-01-25
|
|
@@ -4222,7 +4244,7 @@ Refs: #173.
|
|
|
4222
4244
|
- Added Python kernel session pooling with MAX_KERNEL_SESSIONS limit and automatic eviction of oldest sessions
|
|
4223
4245
|
- Added automatic idle kernel session cleanup timer (5-minute timeout, 30-second interval)
|
|
4224
4246
|
- Added types/assets/index.d.ts for global TypeScript module declarations supporting `.md`, `.py`, and `.wasm?raw` imports
|
|
4225
|
-
- Added bunfig.toml loader configuration for importing markdown, Python, and
|
|
4247
|
+
- Added bunfig.toml loader configuration for importing markdown, Python, and Wasm files as text modules
|
|
4226
4248
|
- Added color manipulation utilities (hexToHsv, hsvToHex, shiftHue) to pi-utils for accessible theme adjustments
|
|
4227
4249
|
- Added color-blind mode setting for improved accessibility
|
|
4228
4250
|
- Added filesystem error type guards (isEnoent, isEacces, isPerm, isEnotempty, isFsError, hasFsCode) to pi-utils for safe error handling
|
|
@@ -4282,7 +4304,7 @@ Refs: #173.
|
|
|
4282
4304
|
- Changed Python kernel resource management with gateway shutdown on session disposal
|
|
4283
4305
|
- Updated TypeScript configuration for better publish-time configuration handling with tsconfig.publish.json
|
|
4284
4306
|
- Updated TypeScript and Bun configuration for monorepo-wide build consistency and reduced boilerplate
|
|
4285
|
-
- Removed
|
|
4307
|
+
- Removed Wasm base64 encoding build script; imports now use Bun loader with `wasm?raw` query parameter
|
|
4286
4308
|
- Unified TypeScript checking pipeline with tsgo-based configuration instead of per-package tsconfig.publish.json boilerplate
|
|
4287
4309
|
- Refactored scanDirectoryForSkills to use async/await with concurrent directory scanning via Promise.all
|
|
4288
4310
|
- Improved error logging in settings manager for config file access failures
|
|
@@ -4700,18 +4722,18 @@ Refs: #173.
|
|
|
4700
4722
|
|
|
4701
4723
|
### Changed
|
|
4702
4724
|
|
|
4703
|
-
- Updated
|
|
4725
|
+
- Updated Wasm loading to use streaming for development environments with base64 fallback
|
|
4704
4726
|
- Added scripts directory to published package files
|
|
4705
4727
|
|
|
4706
4728
|
## [5.7.68] - 2026-01-18
|
|
4707
4729
|
|
|
4708
4730
|
### Changed
|
|
4709
4731
|
|
|
4710
|
-
- Updated
|
|
4732
|
+
- Updated Wasm loading to use base64-encoded Wasm for better compatibility with compiled binaries
|
|
4711
4733
|
|
|
4712
4734
|
### Fixed
|
|
4713
4735
|
|
|
4714
|
-
- Fixed
|
|
4736
|
+
- Fixed Wasm loading issues in compiled binary builds
|
|
4715
4737
|
|
|
4716
4738
|
## [5.7.67] - 2026-01-18
|
|
4717
4739
|
|
|
@@ -4894,10 +4916,10 @@ Refs: #173.
|
|
|
4894
4916
|
|
|
4895
4917
|
### Changed
|
|
4896
4918
|
|
|
4897
|
-
- Replaced wasm-vips with Photon for more stable
|
|
4919
|
+
- Replaced wasm-vips with Photon for more stable Wasm image processing
|
|
4898
4920
|
- Added graceful fallback to original images when image resizing fails
|
|
4899
4921
|
- Added error handling for image conversion failures in interactive mode to prevent crashes
|
|
4900
|
-
- Replace wasm-vips with Photon for more stable
|
|
4922
|
+
- Replace wasm-vips with Photon for more stable Wasm image processing (fixes worker thread crashes)
|
|
4901
4923
|
|
|
4902
4924
|
## [5.0.0] - 2026-01-12
|
|
4903
4925
|
|
|
@@ -5107,7 +5129,7 @@ Refs: #173.
|
|
|
5107
5129
|
- Separated `/export` and `/dump` commands—`/export` now only exports to HTML file, while `/dump` copies session transcript to clipboard
|
|
5108
5130
|
- Updated `/export` command to no longer accept `--copy` flag (use `/dump` instead)
|
|
5109
5131
|
- Changed prompt template rendering to use Handlebars instead of simple string replacement
|
|
5110
|
-
- Updated prompt layout optimization to normalize indentation and collapse excessive
|
|
5132
|
+
- Updated prompt layout optimization to normalize indentation and collapse excessive empty lines
|
|
5111
5133
|
- Changed auth migration to merge credentials per-provider instead of skipping when any credentials exist in database
|
|
5112
5134
|
- Migrated settings and auth credential storage from JSON files to SQLite database (agent.db)
|
|
5113
5135
|
- Updated credential migration message to reference agent.db instead of auth.json
|
|
@@ -5199,7 +5221,7 @@ Refs: #173.
|
|
|
5199
5221
|
- `pi.sendUserMessage()` for sending user messages from extensions
|
|
5200
5222
|
- Extension UI dialogs (`select`, `confirm`, `input`) support `timeout` option with live countdown display
|
|
5201
5223
|
- Extension UI dialogs accept optional `AbortSignal` to programmatically dismiss dialogs
|
|
5202
|
-
- Async extension factories for dynamic imports and lazy
|
|
5224
|
+
- Async extension factories for dynamic imports and lazy loaded dependencies
|
|
5203
5225
|
- `user_bash` event for intercepting user `!`/`!!` commands
|
|
5204
5226
|
- Built-in renderers used automatically for tool overrides without custom `renderCall`/`renderResult`
|
|
5205
5227
|
- `InteractiveMode`, `runPrintMode()`, `runRpcMode()` exported for building custom run modes
|
|
@@ -5401,7 +5423,7 @@ Refs: #173.
|
|
|
5401
5423
|
- Changed YouTube scraper to use async command execution with proper stream handling
|
|
5402
5424
|
- Improved rust-analyzer diagnostic polling to use version-based stability detection instead of time-based delays
|
|
5403
5425
|
- Changed theme icons for extension types to use Unicode symbols (✧, ⚒) instead of text abbreviations (SK, TL, MCP)
|
|
5404
|
-
- Changed task tool to use short
|
|
5426
|
+
- Changed task tool to use short camelCase task IDs instead of agent-based naming (e.g., 'SessionStore' instead of 'explore_0')
|
|
5405
5427
|
- Changed task tool to accept single `agent` parameter at top level instead of per-task agent specification
|
|
5406
5428
|
- Changed reviewer agent to use `complete` tool instead of `submit_review` for finishing reviews
|
|
5407
5429
|
- Changed theme icons for extensions to use Unicode symbols instead of text abbreviations
|
|
@@ -5526,7 +5548,7 @@ Refs: #173.
|
|
|
5526
5548
|
|
|
5527
5549
|
### Changed
|
|
5528
5550
|
|
|
5529
|
-
- Refactored tool renderers to be
|
|
5551
|
+
- Refactored tool renderers to be colocated with their respective tool implementations for improved code organization
|
|
5530
5552
|
- Changed web search to try all configured providers in sequence with fallback before reporting errors
|
|
5531
5553
|
- Changed default Anthropic web search model from `claude-sonnet-4-5-20250514` to `claude-haiku-4-5`
|
|
5532
5554
|
- Changed read tool to show first 50KB of oversized lines instead of directing users to bash sed
|
|
@@ -5855,11 +5877,11 @@ Refs: #173.
|
|
|
5855
5877
|
|
|
5856
5878
|
- Added shell environment snapshot to preserve user aliases, functions, and shell options when executing bash commands
|
|
5857
5879
|
- Added support for `OMP_BASH_NO_CI`, `OMP_BASH_NO_LOGIN`, and `OMP_SHELL_PREFIX` environment variables for shell customization
|
|
5858
|
-
- Added
|
|
5880
|
+
- Added Zsh support alongside bash for shell detection and configuration
|
|
5859
5881
|
|
|
5860
5882
|
### Changed
|
|
5861
5883
|
|
|
5862
|
-
- Changed shell detection to prefer user's `$SHELL` when it's bash or
|
|
5884
|
+
- Changed shell detection to prefer user's `$SHELL` when it's bash or Zsh, with improved fallback path resolution
|
|
5863
5885
|
- Changed Edit tool to reject `.ipynb` files with guidance to use NotebookEdit tool instead
|
|
5864
5886
|
|
|
5865
5887
|
## [1.500.0] - 2026-01-03
|
|
@@ -5949,7 +5971,7 @@ Refs: #173.
|
|
|
5949
5971
|
- LSP server warmup at startup: LSP servers are now started at launch to avoid cold-start delays when first writing files.
|
|
5950
5972
|
- LSP server status in welcome banner: Shows which language servers are active and ready.
|
|
5951
5973
|
- Edit fuzzy match setting: Added `edit.fuzzyMatch` setting (enabled by default) to control whether the edit tool accepts high-confidence fuzzy matches for whitespace/indentation differences. Toggle via `/settings`.
|
|
5952
|
-
- Multi-server LSP diagnostics: Diagnostics now query all applicable language servers for a file type. For TypeScript/JavaScript projects with Biome, this means both type errors (from tsserver) and
|
|
5974
|
+
- Multi-server LSP diagnostics: Diagnostics now query all applicable language servers for a file type. For TypeScript/JavaScript projects with Biome, this means both type errors (from tsserver) and linting errors (from Biome) are reported together.
|
|
5953
5975
|
- Comprehensive LSP server configurations for 40+ languages including Rust, Go, Python, Java, Kotlin, Scala, Haskell, OCaml, Elixir, Ruby, PHP, C#, Lua, Nix, and many more. Each server includes sensible defaults for args, settings, and init options.
|
|
5954
5976
|
- Extended LSP config file search paths: Now searches for `lsp.json`, `.lsp.json` in project root and `.omp/` subdirectory, plus user-level configs in `~/.omp/` and home directory.
|
|
5955
5977
|
|
|
@@ -6788,7 +6810,7 @@ _Dedicated to Peter's shoulder ([@steipete](https://twitter.com/steipete))_
|
|
|
6788
6810
|
|
|
6789
6811
|
- Fixed read tool failing on macOS screenshot filenames due to Unicode Narrow No-Break Space (U+202F) in timestamp. Added fallback to try macOS variant paths and consolidated duplicate expandPath functions into shared path-utils.ts. ([#181](https://github.com/badlogic/pi-mono/pull/181) by [@nicobailon](https://github.com/nicobailon))
|
|
6790
6812
|
|
|
6791
|
-
- Fixed double
|
|
6813
|
+
- Fixed double empty lines rendering after markdown code blocks ([#173](https://github.com/badlogic/pi-mono/pull/173) by [@markusylisiurunen](https://github.com/markusylisiurunen))
|
|
6792
6814
|
|
|
6793
6815
|
## [0.20.1] - 2025-12-13
|
|
6794
6816
|
|
|
@@ -7229,7 +7251,7 @@ _Dedicated to Peter's shoulder ([@steipete](https://twitter.com/steipete))_
|
|
|
7229
7251
|
|
|
7230
7252
|
### Fixed
|
|
7231
7253
|
|
|
7232
|
-
- `@`-references now handle special characters in
|
|
7254
|
+
- `@`-references now handle special characters in filenames (spaces, quotes, unicode)
|
|
7233
7255
|
- Fixed cursor positioning issues with multi-byte unicode characters in editor
|
|
7234
7256
|
|
|
7235
7257
|
## [0.10.4] - 2025-11-28
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@f5-sales-demo/xcsh",
|
|
4
|
-
"version": "20.
|
|
4
|
+
"version": "20.2.2",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/f5-sales-demo/xcsh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
59
59
|
"@mozilla/readability": "^0.6",
|
|
60
|
-
"@f5-sales-demo/xcsh-stats": "20.
|
|
61
|
-
"@f5-sales-demo/pi-agent-core": "20.
|
|
62
|
-
"@f5-sales-demo/pi-ai": "20.
|
|
63
|
-
"@f5-sales-demo/pi-natives": "20.
|
|
64
|
-
"@f5-sales-demo/pi-resource-management": "20.
|
|
65
|
-
"@f5-sales-demo/pi-tui": "20.
|
|
66
|
-
"@f5-sales-demo/pi-utils": "20.
|
|
60
|
+
"@f5-sales-demo/xcsh-stats": "20.2.2",
|
|
61
|
+
"@f5-sales-demo/pi-agent-core": "20.2.2",
|
|
62
|
+
"@f5-sales-demo/pi-ai": "20.2.2",
|
|
63
|
+
"@f5-sales-demo/pi-natives": "20.2.2",
|
|
64
|
+
"@f5-sales-demo/pi-resource-management": "20.2.2",
|
|
65
|
+
"@f5-sales-demo/pi-tui": "20.2.2",
|
|
66
|
+
"@f5-sales-demo/pi-utils": "20.2.2",
|
|
67
67
|
"@sinclair/typebox": "^0.34",
|
|
68
68
|
"@xterm/headless": "^6.0",
|
|
69
69
|
"ajv": "^8.20",
|
|
@@ -26,7 +26,7 @@ export interface ExtensionCapabilities {
|
|
|
26
26
|
|
|
27
27
|
export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
28
28
|
"version": "0.1.0",
|
|
29
|
-
"contractVersion": "
|
|
29
|
+
"contractVersion": "2.0.0",
|
|
30
30
|
"multiPortDiscovery": true,
|
|
31
31
|
"protocol": "tool_request/result",
|
|
32
32
|
"tools": [
|
|
@@ -128,33 +128,6 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
128
128
|
"mutates": true
|
|
129
129
|
}
|
|
130
130
|
},
|
|
131
|
-
{
|
|
132
|
-
"name": "login",
|
|
133
|
-
"summary": "Drive the F5 XC OIDC/Keycloak login end-to-end (production + staging consoles).",
|
|
134
|
-
"category": "navigation",
|
|
135
|
-
"params": {
|
|
136
|
-
"type": "object",
|
|
137
|
-
"required": [
|
|
138
|
-
"email",
|
|
139
|
-
"password",
|
|
140
|
-
"consoleUrl"
|
|
141
|
-
],
|
|
142
|
-
"properties": {
|
|
143
|
-
"email": {
|
|
144
|
-
"type": "string"
|
|
145
|
-
},
|
|
146
|
-
"password": {
|
|
147
|
-
"type": "string"
|
|
148
|
-
},
|
|
149
|
-
"consoleUrl": {
|
|
150
|
-
"type": "string"
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
"flags": {
|
|
155
|
-
"mutates": true
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
131
|
{
|
|
159
132
|
"name": "scroll_to",
|
|
160
133
|
"summary": "Scroll an AX-ref element into view.",
|
|
@@ -617,7 +590,7 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
617
590
|
},
|
|
618
591
|
{
|
|
619
592
|
"name": "diag_bridges",
|
|
620
|
-
"summary": "List discovered xcsh
|
|
593
|
+
"summary": "List discovered xcsh bridge health without tenant, environment, or session identifiers.",
|
|
621
594
|
"category": "read",
|
|
622
595
|
"params": {
|
|
623
596
|
"type": "object",
|
|
@@ -645,16 +618,6 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
645
618
|
},
|
|
646
619
|
"flags": {}
|
|
647
620
|
},
|
|
648
|
-
{
|
|
649
|
-
"name": "capture_login_flow",
|
|
650
|
-
"summary": "Diagnostic: captured login redirect chain annotated with tenant/env (Phase 0b).",
|
|
651
|
-
"category": "read",
|
|
652
|
-
"params": {
|
|
653
|
-
"type": "object",
|
|
654
|
-
"properties": {}
|
|
655
|
-
},
|
|
656
|
-
"flags": {}
|
|
657
|
-
},
|
|
658
621
|
{
|
|
659
622
|
"name": "wait_for_api_response",
|
|
660
623
|
"summary": "Wait for a network response whose URL matches a pattern.",
|
|
@@ -786,29 +749,6 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
786
749
|
}
|
|
787
750
|
],
|
|
788
751
|
"features": {
|
|
789
|
-
"handshake": {
|
|
790
|
-
"serveKind": [
|
|
791
|
-
"office",
|
|
792
|
-
"browser"
|
|
793
|
-
],
|
|
794
|
-
"officePortRange": [
|
|
795
|
-
19242,
|
|
796
|
-
19261
|
|
797
|
-
],
|
|
798
|
-
"officeWssPortRange": [
|
|
799
|
-
19342,
|
|
800
|
-
19361
|
|
801
|
-
],
|
|
802
|
-
"browserPortRange": [
|
|
803
|
-
19222,
|
|
804
|
-
19241
|
|
805
|
-
],
|
|
806
|
-
"browserWssPortRange": [
|
|
807
|
-
19322,
|
|
808
|
-
19341
|
|
809
|
-
],
|
|
810
|
-
"description": "hello_ack advertises serveKind — how the bridge was STARTED (office-serve vs Chrome worker), distinct from the client's announced host. `xcsh office serve` binds the dedicated office port range and advertises serveKind:\"office\"; the Chrome worker binds the browser range and advertises \"browser\". The Office pane scans only the office wss range AND filters on serveKind:\"office\", so it can never adopt a Chrome worker (a serveKind absent/null is treated as ineligible)."
|
|
811
|
-
},
|
|
812
752
|
"explainMode": {
|
|
813
753
|
"tool": "set_explain_mode",
|
|
814
754
|
"default": false,
|
|
@@ -855,14 +795,7 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
855
795
|
"host_tool_call",
|
|
856
796
|
"host_tool_update",
|
|
857
797
|
"host_tool_result",
|
|
858
|
-
"host_tool_cancel"
|
|
859
|
-
"configure",
|
|
860
|
-
"configure_ack",
|
|
861
|
-
"configure_error",
|
|
862
|
-
"list_skills",
|
|
863
|
-
"skills",
|
|
864
|
-
"list_commands",
|
|
865
|
-
"commands"
|
|
798
|
+
"host_tool_cancel"
|
|
866
799
|
],
|
|
867
800
|
"description": "User ↔ xcsh chat over the bridge. The extension side panel sends chat_request (with mode and page-context snapshot); xcsh streams chat_delta tokens then a terminal chat_done (with reference links) or chat_error. Chat ids are prefixed \"c-\". Tool calls during a turn use the normal tool_request flow. chat_stop halts a streaming response. chat_tool_notice is emitted by the EXTENSION (the service worker) to the panel as a best-effort UI signal when a tool runs during a turn — it is NOT sent by xcsh; xcsh must not produce it to avoid double-rendering in the panel.",
|
|
868
801
|
"promptHints": {
|
|
@@ -882,6 +815,6 @@ export const EXTENSION_CAPABILITIES: ExtensionCapabilities = {
|
|
|
882
815
|
}
|
|
883
816
|
};
|
|
884
817
|
|
|
885
|
-
export const EXTENSION_CONTRACT_VERSION = "
|
|
818
|
+
export const EXTENSION_CONTRACT_VERSION = "2.0.0";
|
|
886
819
|
|
|
887
|
-
export const EXTENSION_TOOL_NAMES: readonly string[] = ["ping","capabilities","reload","debug_exec","detach","set_bridge_port","navigate","
|
|
820
|
+
export const EXTENSION_TOOL_NAMES: readonly string[] = ["ping","capabilities","reload","debug_exec","detach","set_bridge_port","navigate","scroll_to","resize_window","tabs_list","tabs_create","tabs_close","click","click_element","click_xy","type_text","form_input","key_press","select_option","label_select","file_upload","read_ax","get_page_text","query_dom","find","wait_for","assert_text","screenshot","read_console","read_network","diag_suspension","diag_bridges","diag_activation","diag_ttft","wait_for_api_response","get_page_context","javascript_tool","browser_batch","set_explain_mode","annotate"];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "0.1.0",
|
|
3
|
-
"contractVersion": "
|
|
3
|
+
"contractVersion": "2.0.0",
|
|
4
4
|
"multiPortDiscovery": true,
|
|
5
5
|
"protocol": "tool_request/result",
|
|
6
6
|
"tools": [
|
|
@@ -98,29 +98,6 @@
|
|
|
98
98
|
"mutates": true
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
|
-
{
|
|
102
|
-
"name": "login",
|
|
103
|
-
"summary": "Drive the F5 XC OIDC/Keycloak login end-to-end (production + staging consoles).",
|
|
104
|
-
"category": "navigation",
|
|
105
|
-
"params": {
|
|
106
|
-
"type": "object",
|
|
107
|
-
"required": ["email", "password", "consoleUrl"],
|
|
108
|
-
"properties": {
|
|
109
|
-
"email": {
|
|
110
|
-
"type": "string"
|
|
111
|
-
},
|
|
112
|
-
"password": {
|
|
113
|
-
"type": "string"
|
|
114
|
-
},
|
|
115
|
-
"consoleUrl": {
|
|
116
|
-
"type": "string"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
"flags": {
|
|
121
|
-
"mutates": true
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
101
|
{
|
|
125
102
|
"name": "scroll_to",
|
|
126
103
|
"summary": "Scroll an AX-ref element into view.",
|
|
@@ -542,7 +519,7 @@
|
|
|
542
519
|
},
|
|
543
520
|
{
|
|
544
521
|
"name": "diag_bridges",
|
|
545
|
-
"summary": "List discovered xcsh
|
|
522
|
+
"summary": "List discovered xcsh bridge health without tenant, environment, or session identifiers.",
|
|
546
523
|
"category": "read",
|
|
547
524
|
"params": {
|
|
548
525
|
"type": "object",
|
|
@@ -570,16 +547,6 @@
|
|
|
570
547
|
},
|
|
571
548
|
"flags": {}
|
|
572
549
|
},
|
|
573
|
-
{
|
|
574
|
-
"name": "capture_login_flow",
|
|
575
|
-
"summary": "Diagnostic: captured login redirect chain annotated with tenant/env (Phase 0b).",
|
|
576
|
-
"category": "read",
|
|
577
|
-
"params": {
|
|
578
|
-
"type": "object",
|
|
579
|
-
"properties": {}
|
|
580
|
-
},
|
|
581
|
-
"flags": {}
|
|
582
|
-
},
|
|
583
550
|
{
|
|
584
551
|
"name": "wait_for_api_response",
|
|
585
552
|
"summary": "Wait for a network response whose URL matches a pattern.",
|
|
@@ -703,14 +670,6 @@
|
|
|
703
670
|
}
|
|
704
671
|
],
|
|
705
672
|
"features": {
|
|
706
|
-
"handshake": {
|
|
707
|
-
"serveKind": ["office", "browser"],
|
|
708
|
-
"officePortRange": [19242, 19261],
|
|
709
|
-
"officeWssPortRange": [19342, 19361],
|
|
710
|
-
"browserPortRange": [19222, 19241],
|
|
711
|
-
"browserWssPortRange": [19322, 19341],
|
|
712
|
-
"description": "hello_ack advertises serveKind — how the bridge was STARTED (office-serve vs Chrome worker), distinct from the client's announced host. `xcsh office serve` binds the dedicated office port range and advertises serveKind:\"office\"; the Chrome worker binds the browser range and advertises \"browser\". The Office pane scans only the office wss range AND filters on serveKind:\"office\", so it can never adopt a Chrome worker (a serveKind absent/null is treated as ineligible)."
|
|
713
|
-
},
|
|
714
673
|
"explainMode": {
|
|
715
674
|
"tool": "set_explain_mode",
|
|
716
675
|
"default": false,
|
|
@@ -748,14 +707,7 @@
|
|
|
748
707
|
"host_tool_call",
|
|
749
708
|
"host_tool_update",
|
|
750
709
|
"host_tool_result",
|
|
751
|
-
"host_tool_cancel"
|
|
752
|
-
"configure",
|
|
753
|
-
"configure_ack",
|
|
754
|
-
"configure_error",
|
|
755
|
-
"list_skills",
|
|
756
|
-
"skills",
|
|
757
|
-
"list_commands",
|
|
758
|
-
"commands"
|
|
710
|
+
"host_tool_cancel"
|
|
759
711
|
],
|
|
760
712
|
"description": "User ↔ xcsh chat over the bridge. The extension side panel sends chat_request (with mode and page-context snapshot); xcsh streams chat_delta tokens then a terminal chat_done (with reference links) or chat_error. Chat ids are prefixed \"c-\". Tool calls during a turn use the normal tool_request flow. chat_stop halts a streaming response. chat_tool_notice is emitted by the EXTENSION (the service worker) to the panel as a best-effort UI signal when a tool runs during a turn — it is NOT sent by xcsh; xcsh must not produce it to avoid double-rendering in the panel.",
|
|
761
713
|
"promptHints": {
|