@super-one/cli 0.74.0-alpha → 0.74.0-alpha.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.
Files changed (3) hide show
  1. package/MANIFEST.json +2 -2
  2. package/lib/cli.mjs +100 -66
  3. package/package.json +10 -10
package/MANIFEST.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@super-one/cli",
3
- "version": "0.74.0-alpha",
3
+ "version": "0.74.0-alpha.2",
4
4
  "kind": "npm",
5
5
  "minNodeMajor": 20,
6
- "builtAt": "2026-10-15T10:52:00.448Z"
6
+ "builtAt": "2026-10-15T15:51:42.978Z"
7
7
  }
package/lib/cli.mjs CHANGED
@@ -137,8 +137,8 @@ import { fileURLToPath } from "node:url";
137
137
  function resolveCliReleaseVersion() {
138
138
  const fromEnv = process.env.SUPERONE_CLI_VERSION?.trim();
139
139
  if (fromEnv) return fromEnv;
140
- if ("0.74.0-alpha".trim()) {
141
- return "0.74.0-alpha".trim();
140
+ if ("0.74.0-alpha.2".trim()) {
141
+ return "0.74.0-alpha.2".trim();
142
142
  }
143
143
  const fromDist = readDistManifestVersion();
144
144
  if (fromDist) return fromDist;
@@ -409,7 +409,7 @@ var init_interaction_memory = __esm({
409
409
  });
410
410
 
411
411
  // ../../packages/shared/src/superone-tool-descriptions.ts
412
- var MANUAL_READ_DESCRIPTION, SETUP_MINI_APP_DEV_DESCRIPTION, REGISTER_DEV_MINIAPP_DESCRIPTION, PACK_MINI_APP_DESCRIPTION, UPDATE_SUPERONE_TYPES_DESCRIPTION, MINIAPP_DEV_PREVIEW_DESCRIPTION, MINIAPP_DEV_RELOAD_DESCRIPTION, MINIAPP_DEV_PREVIEW_INPUT_SCHEMA, MINIAPP_DEV_RELOAD_INPUT_SCHEMA, RENAME_SESSION_DESCRIPTION, SESSION_TAG_DESCRIPTION, SESSION_TAG_LIST_DESCRIPTION, PROJECT_LIST_DESCRIPTION, SESSION_LIST_DESCRIPTION, SESSION_SEARCH_DESCRIPTION, SESSION_READ_DESCRIPTION, SESSION_READ_MESSAGE_ID_DESCRIPTION, SESSION_READ_AROUND_DESCRIPTION, SESSION_READ_CURSOR_DESCRIPTION, SESSION_READ_LIMIT_DESCRIPTION, SESSION_READ_THINKING_DESCRIPTION, SESSION_TAGS_FILTER_DESCRIPTION, SESSION_TAG_MATCH_DESCRIPTION, SESSION_CLEANUP_DESCRIPTION, CONFIG_READ_DESCRIPTION, CONFIG_APPLY_DESCRIPTION, LIST_MEDIA_PROVIDERS_DESCRIPTION, GENERATE_IMAGE_DESCRIPTION, GENERATE_VIDEO_DESCRIPTION, VIDEO_STATUS_DESCRIPTION, SESSION_LIST_AGENTS_DESCRIPTION, SESSION_REQUEST_AGENTS_DESCRIPTION, LAUNCH_SUMMARY_DESCRIPTION, START_LAUNCH_ID_DESCRIPTION, LAUNCH_TASK_DESCRIPTION, LAUNCH_MODE_DESCRIPTION, LAUNCH_SESSION_ID_DESCRIPTION, LAUNCH_PERMISSION_MODE_DESCRIPTION, LAUNCH_ENVIRONMENT_DESCRIPTION, LAUNCH_CWD_DESCRIPTION, LAUNCH_WORKTREE_DESCRIPTION, LAUNCH_BRANCH_NAME_DESCRIPTION, SESSION_START_DESCRIPTION, SESSION_SEND_DESCRIPTION, SESSION_SEND_TO_DESCRIPTION, SESSION_SEND_CONTENT_DESCRIPTION, SESSION_RETRIEVE_DESCRIPTION, SESSION_RETRIEVE_FROM_DESCRIPTION, SESSION_SUGGEST_TASK_DESCRIPTION, SUGGEST_TASK_TITLE_DESCRIPTION, SUGGEST_TASK_TLDR_DESCRIPTION, SUGGEST_TASK_PROMPT_DESCRIPTION, SUGGEST_TASK_CWD_DESCRIPTION, AUTOMATION_LIST_DESCRIPTION, AUTOMATION_APPLY_DESCRIPTION, AUTOMATION_DELETE_DESCRIPTION, AGENT_PROFILE_LIST_DESCRIPTION, AGENT_PROFILE_APPLY_DESCRIPTION, AGENT_PROFILE_DELETE_DESCRIPTION, TERMINAL_TABS_DESCRIPTION, TERMINAL_SNAPSHOT_DESCRIPTION, TERMINAL_ACT_DESCRIPTION, TERMINAL_WAIT_FOR_DESCRIPTION, ENVIRONMENT_GET_INFO_DESCRIPTION, ENVIRONMENT_GET_INFO_IDS_DESCRIPTION, ENVIRONMENT_GET_INFO_INCLUDE_DESCRIPTION, ARCHIVE_ENVIRONMENT_DESCRIPTION, LAYOUT_SNAPSHOT_DESCRIPTION, LAYOUT_ACT_DESCRIPTION, LAYOUT_ACT_PATH_DESCRIPTION, LAYOUT_ACT_LINE_DESCRIPTION, LAYOUT_ACT_TAB_DESCRIPTION, LAYOUT_ACT_DIRECTION_DESCRIPTION, LAYOUT_ACT_SESSION_DESCRIPTION;
412
+ var MANUAL_READ_DESCRIPTION, SETUP_MINI_APP_DEV_DESCRIPTION, REGISTER_DEV_MINIAPP_DESCRIPTION, PACK_MINI_APP_DESCRIPTION, UPDATE_SUPERONE_TYPES_DESCRIPTION, MINIAPP_LIST_DESCRIPTION, MINIAPP_LIST_APP_ID_DESCRIPTION, MINIAPP_LIST_INCLUDE_SCHEMA_DESCRIPTION, MINIAPP_CALL_DESCRIPTION, MINIAPP_CALL_APP_ID_DESCRIPTION, MINIAPP_CALL_TOOL_DESCRIPTION, MINIAPP_CALL_INPUT_DESCRIPTION, MINIAPP_OPEN_DESCRIPTION, MINIAPP_OPEN_APP_ID_DESCRIPTION, MINIAPP_DEV_PREVIEW_DESCRIPTION, MINIAPP_DEV_RELOAD_DESCRIPTION, MINIAPP_DEV_PREVIEW_INPUT_SCHEMA, MINIAPP_DEV_RELOAD_INPUT_SCHEMA, RENAME_SESSION_DESCRIPTION, SESSION_TAG_DESCRIPTION, SESSION_TAG_LIST_DESCRIPTION, PROJECT_LIST_DESCRIPTION, SESSION_LIST_DESCRIPTION, SESSION_SEARCH_DESCRIPTION, SESSION_READ_DESCRIPTION, SESSION_READ_MESSAGE_ID_DESCRIPTION, SESSION_READ_AROUND_DESCRIPTION, SESSION_READ_CURSOR_DESCRIPTION, SESSION_READ_LIMIT_DESCRIPTION, SESSION_READ_THINKING_DESCRIPTION, SESSION_TAGS_FILTER_DESCRIPTION, SESSION_TAG_MATCH_DESCRIPTION, SESSION_CLEANUP_DESCRIPTION, CONFIG_READ_DESCRIPTION, CONFIG_APPLY_DESCRIPTION, LIST_MEDIA_PROVIDERS_DESCRIPTION, GENERATE_IMAGE_DESCRIPTION, GENERATE_VIDEO_DESCRIPTION, VIDEO_STATUS_DESCRIPTION, SESSION_LIST_AGENTS_DESCRIPTION, SESSION_REQUEST_AGENTS_DESCRIPTION, LAUNCH_SUMMARY_DESCRIPTION, START_LAUNCH_ID_DESCRIPTION, LAUNCH_TASK_DESCRIPTION, LAUNCH_MODE_DESCRIPTION, LAUNCH_SESSION_ID_DESCRIPTION, LAUNCH_PERMISSION_MODE_DESCRIPTION, LAUNCH_ENVIRONMENT_DESCRIPTION, LAUNCH_CWD_DESCRIPTION, LAUNCH_WORKTREE_DESCRIPTION, LAUNCH_BRANCH_NAME_DESCRIPTION, SESSION_START_DESCRIPTION, SESSION_SEND_DESCRIPTION, SESSION_SEND_TO_DESCRIPTION, SESSION_SEND_CONTENT_DESCRIPTION, SESSION_RETRIEVE_DESCRIPTION, SESSION_RETRIEVE_FROM_DESCRIPTION, SESSION_SUGGEST_TASK_DESCRIPTION, SUGGEST_TASK_TITLE_DESCRIPTION, SUGGEST_TASK_TLDR_DESCRIPTION, SUGGEST_TASK_PROMPT_DESCRIPTION, SUGGEST_TASK_CWD_DESCRIPTION, AUTOMATION_LIST_DESCRIPTION, AUTOMATION_APPLY_DESCRIPTION, AUTOMATION_DELETE_DESCRIPTION, AGENT_PROFILE_LIST_DESCRIPTION, AGENT_PROFILE_APPLY_DESCRIPTION, AGENT_PROFILE_DELETE_DESCRIPTION, TERMINAL_TABS_DESCRIPTION, TERMINAL_SNAPSHOT_DESCRIPTION, TERMINAL_ACT_DESCRIPTION, TERMINAL_WAIT_FOR_DESCRIPTION, ENVIRONMENT_GET_INFO_DESCRIPTION, ENVIRONMENT_GET_INFO_IDS_DESCRIPTION, ENVIRONMENT_GET_INFO_INCLUDE_DESCRIPTION, ARCHIVE_ENVIRONMENT_DESCRIPTION, LAYOUT_SNAPSHOT_DESCRIPTION, LAYOUT_ACT_DESCRIPTION, LAYOUT_ACT_PATH_DESCRIPTION, LAYOUT_ACT_LINE_DESCRIPTION, LAYOUT_ACT_TAB_DESCRIPTION, LAYOUT_ACT_GROUP_DESCRIPTION, LAYOUT_ACT_DIRECTION_DESCRIPTION, LAYOUT_ACT_INDEX_DESCRIPTION, LAYOUT_ACT_WIDTH_DESCRIPTION, LAYOUT_ACT_HEIGHT_DESCRIPTION, LAYOUT_ACT_MODE_DESCRIPTION, LAYOUT_ACT_POSITION_DESCRIPTION, LAYOUT_ACT_SESSION_DESCRIPTION;
413
413
  var init_superone_tool_descriptions = __esm({
414
414
  "../../packages/shared/src/superone-tool-descriptions.ts"() {
415
415
  "use strict";
@@ -418,6 +418,15 @@ var init_superone_tool_descriptions = __esm({
418
418
  REGISTER_DEV_MINIAPP_DESCRIPTION = "Register an existing mini-app directory without modifying its source files. Reads manifest.json from the directory or dist, updates dev-registry.json in the variant-specific personal data root, and optionally writes a project- or user-scoped .s1-dev.json pointer.";
419
419
  PACK_MINI_APP_DESCRIPTION = "Package a mini-app directory into a .s1app file for distribution. The app directory must contain a valid manifest.json with a version field. Generates integrity checksums and creates a compressed archive.";
420
420
  UPDATE_SUPERONE_TYPES_DESCRIPTION = "Update the superone.d.ts type definitions in an existing mini-app project to the latest version. Use this when the mini-app needs access to newly added SuperOne APIs.";
421
+ MINIAPP_LIST_DESCRIPTION = "List the mini-apps installed for this session's project and their tools. Omit appId for a compact catalog (tool names + one-line descriptions). Pass appId to inspect one app; includeSchema defaults true for that app's full tool definitions including inputSchema. Call this before miniapp_call when you do not know the tool names or parameters.";
422
+ MINIAPP_LIST_APP_ID_DESCRIPTION = "Optional mini-app id. When set, returns that app's tools only.";
423
+ MINIAPP_LIST_INCLUDE_SCHEMA_DESCRIPTION = "When appId is set, include full tool definitions with inputSchema (default true). Ignored when listing all apps.";
424
+ MINIAPP_CALL_DESCRIPTION = "Execute a tool of an installed mini-app. Pass appId + tool name from miniapp_list, and tool arguments as input. Tools run in the app's host without its UI; show the UI with miniapp_open. Do not invent tools \u2014 call miniapp_list first when unsure.";
425
+ MINIAPP_CALL_APP_ID_DESCRIPTION = "Mini-app id from miniapp_list.";
426
+ MINIAPP_CALL_TOOL_DESCRIPTION = "Tool name declared by that app's manifest.";
427
+ MINIAPP_CALL_INPUT_DESCRIPTION = "Arguments for the app tool. Validated against the tool's inputSchema at dispatch time.";
428
+ MINIAPP_OPEN_DESCRIPTION = "Open an installed mini-app's UI as a tab in your activity panel, in the background: the result says whether the user sees it and how to bring it forward. Use when the user wants to see or use the app itself; its tools run without the UI through miniapp_call.";
429
+ MINIAPP_OPEN_APP_ID_DESCRIPTION = "Mini-app id from miniapp_list.";
421
430
  MINIAPP_DEV_PREVIEW_DESCRIPTION = "Render a development mini-app tool's chat UI (intercept, result, or standalone template) from fixture input/result without running the tool. Returns a view id to pass as tab to browser_* tools for snapshots, clicks, screenshots, and console. Intercept submit/cancel and result close are logged as info console entries instead of executing. A new call replaces the app's previous preview. Workflow: read_manual miniapp/debugging.";
422
431
  MINIAPP_DEV_RELOAD_DESCRIPTION = "Reload a development mini-app after editing it (build first if it has a build step): restarts its MiniApp Host so changed main code loads, refreshes manifest tools and templates, and reloads its open WebViews. Then inspect them with browser_* tools via miniapp: view ids.";
423
432
  MINIAPP_DEV_PREVIEW_INPUT_SCHEMA = {
@@ -500,12 +509,18 @@ var init_superone_tool_descriptions = __esm({
500
509
  ENVIRONMENT_GET_INFO_IDS_DESCRIPTION = "Environments to read; omit for all.";
501
510
  ENVIRONMENT_GET_INFO_INCLUDE_DESCRIPTION = 'Detail groups to add. Default ["hardware"]; [] returns IDs, labels and state only.';
502
511
  ARCHIVE_ENVIRONMENT_DESCRIPTION = "Target environment ID from environment_get_info. Omit or use localhost for the calling session host.";
503
- LAYOUT_SNAPSHOT_DESCRIPTION = "Read the SuperOne desktop layout around your session: whether the user can see your chat, the sidebar, your activity panel (open, side, maximized) and its tabs (id, kind, title, active, openedBy), your bottom terminal, and the split view. Call it for tab ids before layout_act focus/close/split, or to check what the user is looking at.";
504
- LAYOUT_ACT_DESCRIPTION = "Arrange the SuperOne desktop for the user: open a file (path, line) as a tab; focus, split or close tabs by id; show, hide, maximize or move your activity panel; show or hide your bottom terminal; collapse the sidebar; put a session you launched beside yours (split_session / close_split). Open browser and terminal tabs with browser_tabs / terminal_tabs. You can close only tabs and panes you opened. It never moves the user: in the background your own layout changes wait for them (status queued) and window-wide ones are skipped. `visible` says whether the user sees the result now.";
512
+ LAYOUT_SNAPSHOT_DESCRIPTION = "Read the SuperOne desktop layout around your session: whether the user can see your chat, the sidebar, your activity panel (open, side, maximized), its tab groups (index and px box, so you can tell top/bottom from side by side) and tabs (id, kind, title, active, group, openedBy), your bottom terminal, the split view, chatMode and chatPosition, and sizes: px widths of the window, sidebar, panel and chat, with the min/max each column can take. Call it for tab and group ids before layout_act, for sizes before a resize, or to check what the user is looking at.";
513
+ LAYOUT_ACT_DESCRIPTION = "Arrange the SuperOne desktop for the user: open a file as a tab; focus or close tabs, move one beside or into a group or reorder it (move_tab), resize a group; show, hide, maximize, move or resize your activity panel; show or hide your terminal; show, hide or resize the sidebar (widen a column to narrow the chat); dock, float or iconify the chat; put a session you launched beside yours. Open browser and terminal tabs with browser_tabs / terminal_tabs. You can close only tabs and panes you opened. It never moves the user: in the background your own layout changes wait for them (status queued) and window-wide ones are skipped. `visible` says whether the user sees the result now.";
505
514
  LAYOUT_ACT_PATH_DESCRIPTION = "open_file: the file, absolute or relative to your working folder.";
506
515
  LAYOUT_ACT_LINE_DESCRIPTION = "open_file: 1-based line to reveal.";
507
- LAYOUT_ACT_TAB_DESCRIPTION = "Tab id from layout_snapshot (browser_tabs / terminal_tabs ids work too). focus_tab, close_tab, split_tab; maximize_panel defaults to the active tab.";
508
- LAYOUT_ACT_DIRECTION_DESCRIPTION = "split_tab / split_session. Default right.";
516
+ LAYOUT_ACT_TAB_DESCRIPTION = "Tab id from layout_snapshot (browser_tabs / terminal_tabs ids work too). focus_tab, close_tab, move_tab; maximize_panel defaults to the active tab.";
517
+ LAYOUT_ACT_GROUP_DESCRIPTION = "Group index from layout_snapshot groups. resize_group; move_tab target, default the tab's own group (a tab alone there goes beside the group before it).";
518
+ LAYOUT_ACT_DIRECTION_DESCRIPTION = "move_tab: right / down / left / up of the group as a new group, or into it. split_session: any side. Default right.";
519
+ LAYOUT_ACT_INDEX_DESCRIPTION = "move_tab: 0-based position among the destination group's tabs; with into and your own group it reorders.";
520
+ LAYOUT_ACT_WIDTH_DESCRIPTION = "resize_sidebar / resize_panel / resize_group: target width in px. Sidebar and panel clamp to layout_snapshot sizes; the result has the applied size.";
521
+ LAYOUT_ACT_HEIGHT_DESCRIPTION = "resize_group: target height in px.";
522
+ LAYOUT_ACT_MODE_DESCRIPTION = "chat_mode: docked (a column beside the panel), floating (a movable window over the panel, which then fills the window) or icon (that window collapsed).";
523
+ LAYOUT_ACT_POSITION_DESCRIPTION = "chat_mode: where the floating chat or its icon snaps. Alone it moves the chat without changing mode; while docked it is kept for the next float.";
509
524
  LAYOUT_ACT_SESSION_DESCRIPTION = "split_session / close_split: a session you launched with session_collab_*.";
510
525
  }
511
526
  });
@@ -2682,50 +2697,44 @@ var HOST_ACTION_MINIAPP_DESCRIPTORS;
2682
2697
  var init_host_action_miniapp_descriptors = __esm({
2683
2698
  "../../packages/shared/src/environment/host-action-miniapp-descriptors.ts"() {
2684
2699
  "use strict";
2700
+ init_superone_tool_descriptions();
2685
2701
  HOST_ACTION_MINIAPP_DESCRIPTORS = [
2686
2702
  {
2687
- "name": "miniapp_list",
2688
- "description": "List mini-apps authorized for this session and their tools. Omit appId for a compact catalog (tool names + one-line descriptions). Pass appId to inspect one app; includeSchema defaults true for that app's full tool definitions including inputSchema. Call this before miniapp_call when you do not know the tool names or parameters.",
2689
- "inputSchema": {
2690
- "type": "object",
2691
- "properties": {
2692
- "appId": {
2693
- "type": "string",
2694
- "description": "Optional mini-app id. When set, returns that app's tools only."
2695
- },
2696
- "includeSchema": {
2697
- "type": "boolean",
2698
- "description": "When appId is set, include full tool definitions with inputSchema (default true). Ignored when listing all apps."
2699
- }
2703
+ name: "miniapp_list",
2704
+ description: MINIAPP_LIST_DESCRIPTION,
2705
+ inputSchema: {
2706
+ type: "object",
2707
+ properties: {
2708
+ appId: { type: "string", description: MINIAPP_LIST_APP_ID_DESCRIPTION },
2709
+ includeSchema: { type: "boolean", description: MINIAPP_LIST_INCLUDE_SCHEMA_DESCRIPTION }
2700
2710
  },
2701
- "additionalProperties": false
2711
+ additionalProperties: false
2702
2712
  }
2703
2713
  },
2704
2714
  {
2705
- "name": "miniapp_call",
2706
- "description": "Execute a tool on a session-authorized mini-app. Pass appId + tool name from miniapp_list, and tool arguments as input. Panel open/close is implicit: non-standalone tools lazy-open the panel; standalone tools run without a panel. Do not invent tools \u2014 call miniapp_list first when unsure.",
2707
- "inputSchema": {
2708
- "type": "object",
2709
- "properties": {
2710
- "appId": {
2711
- "type": "string",
2712
- "description": "Mini-app id (from miniapp_list or user @-mention)."
2713
- },
2714
- "tool": {
2715
- "type": "string",
2716
- "description": "Tool name declared by that app's manifest."
2717
- },
2718
- "input": {
2719
- "type": "object",
2720
- "additionalProperties": true,
2721
- "description": "Arguments for the app tool. Validated against the tool's inputSchema at dispatch time."
2722
- }
2715
+ name: "miniapp_call",
2716
+ description: MINIAPP_CALL_DESCRIPTION,
2717
+ inputSchema: {
2718
+ type: "object",
2719
+ properties: {
2720
+ appId: { type: "string", description: MINIAPP_CALL_APP_ID_DESCRIPTION },
2721
+ tool: { type: "string", description: MINIAPP_CALL_TOOL_DESCRIPTION },
2722
+ input: { type: "object", additionalProperties: true, description: MINIAPP_CALL_INPUT_DESCRIPTION }
2723
2723
  },
2724
- "required": [
2725
- "appId",
2726
- "tool"
2727
- ],
2728
- "additionalProperties": false
2724
+ required: ["appId", "tool"],
2725
+ additionalProperties: false
2726
+ }
2727
+ },
2728
+ {
2729
+ name: "miniapp_open",
2730
+ description: MINIAPP_OPEN_DESCRIPTION,
2731
+ inputSchema: {
2732
+ type: "object",
2733
+ properties: {
2734
+ appId: { type: "string", description: MINIAPP_OPEN_APP_ID_DESCRIPTION }
2735
+ },
2736
+ required: ["appId"],
2737
+ additionalProperties: false
2729
2738
  }
2730
2739
  }
2731
2740
  ];
@@ -4562,7 +4571,7 @@ var init_host_action_terminal_descriptors = __esm({
4562
4571
  });
4563
4572
 
4564
4573
  // ../../packages/shared/src/layout-control.ts
4565
- var LAYOUT_ACT_ACTIONS;
4574
+ var LAYOUT_ACT_ACTIONS, LAYOUT_DIRECTIONS, LAYOUT_CHAT_MODES, LAYOUT_CHAT_POSITIONS;
4566
4575
  var init_layout_control = __esm({
4567
4576
  "../../packages/shared/src/layout-control.ts"() {
4568
4577
  "use strict";
@@ -4570,7 +4579,8 @@ var init_layout_control = __esm({
4570
4579
  "open_file",
4571
4580
  "focus_tab",
4572
4581
  "close_tab",
4573
- "split_tab",
4582
+ "move_tab",
4583
+ "resize_group",
4574
4584
  "show_panel",
4575
4585
  "hide_panel",
4576
4586
  "maximize_panel",
@@ -4578,11 +4588,17 @@ var init_layout_control = __esm({
4578
4588
  "panel_side",
4579
4589
  "show_sidebar",
4580
4590
  "hide_sidebar",
4591
+ "resize_sidebar",
4592
+ "resize_panel",
4593
+ "chat_mode",
4581
4594
  "show_terminal",
4582
4595
  "hide_terminal",
4583
4596
  "split_session",
4584
4597
  "close_split"
4585
4598
  ];
4599
+ LAYOUT_DIRECTIONS = ["right", "down", "left", "up", "into"];
4600
+ LAYOUT_CHAT_MODES = ["docked", "floating", "icon"];
4601
+ LAYOUT_CHAT_POSITIONS = ["top-left", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left"];
4586
4602
  }
4587
4603
  });
4588
4604
 
@@ -4609,9 +4625,15 @@ var init_host_action_layout_descriptors = __esm({
4609
4625
  path: { type: "string", description: LAYOUT_ACT_PATH_DESCRIPTION },
4610
4626
  line: { type: "integer", minimum: 1, description: LAYOUT_ACT_LINE_DESCRIPTION },
4611
4627
  tab: { type: "string", description: LAYOUT_ACT_TAB_DESCRIPTION },
4612
- direction: { type: "string", enum: ["right", "down"], description: LAYOUT_ACT_DIRECTION_DESCRIPTION },
4628
+ group: { type: "integer", minimum: 0, description: LAYOUT_ACT_GROUP_DESCRIPTION },
4629
+ direction: { type: "string", enum: [...LAYOUT_DIRECTIONS], description: LAYOUT_ACT_DIRECTION_DESCRIPTION },
4630
+ index: { type: "integer", minimum: 0, description: LAYOUT_ACT_INDEX_DESCRIPTION },
4613
4631
  side: { type: "string", enum: ["left", "right"], description: "panel_side." },
4614
- sessionId: { type: "string", description: LAYOUT_ACT_SESSION_DESCRIPTION }
4632
+ sessionId: { type: "string", description: LAYOUT_ACT_SESSION_DESCRIPTION },
4633
+ width: { type: "integer", minimum: 1, description: LAYOUT_ACT_WIDTH_DESCRIPTION },
4634
+ height: { type: "integer", minimum: 1, description: LAYOUT_ACT_HEIGHT_DESCRIPTION },
4635
+ mode: { type: "string", enum: [...LAYOUT_CHAT_MODES], description: LAYOUT_ACT_MODE_DESCRIPTION },
4636
+ position: { type: "string", enum: [...LAYOUT_CHAT_POSITIONS], description: LAYOUT_ACT_POSITION_DESCRIPTION }
4615
4637
  },
4616
4638
  required: ["action"],
4617
4639
  additionalProperties: false
@@ -10118,6 +10140,9 @@ var init_tool_ui = __esm({
10118
10140
  HIDDEN_SUPERONE_MCP_TOOLS = /* @__PURE__ */ new Set([
10119
10141
  "session_rename",
10120
10142
  "session_tag_list",
10143
+ // Layout changes show on screen; a row for them reads as plumbing.
10144
+ "layout_snapshot",
10145
+ "layout_act",
10121
10146
  "session_collab_list_agents",
10122
10147
  "session_list_agents",
10123
10148
  "miniapp_list"
@@ -33859,9 +33884,9 @@ var init_server_request = __esm({
33859
33884
  });
33860
33885
 
33861
33886
  // ../../packages/codex/src/sandbox-policy.ts
33862
- import { isAbsolute as isAbsolute5, resolve as resolve13 } from "node:path";
33887
+ import { isAbsolute as isAbsolute6, resolve as resolve13 } from "node:path";
33863
33888
  function resolveCodexWritableRoots(cwd, additionalDirectories = []) {
33864
- const roots = [cwd, ...additionalDirectories].filter((dir) => dir.trim().length > 0).map((dir) => isAbsolute5(dir) ? resolve13(dir) : resolve13(cwd, dir));
33889
+ const roots = [cwd, ...additionalDirectories].filter((dir) => dir.trim().length > 0).map((dir) => isAbsolute6(dir) ? resolve13(dir) : resolve13(cwd, dir));
33865
33890
  return Array.from(new Set(roots));
33866
33891
  }
33867
33892
  function buildCodexWorkspaceWriteSandboxPolicy(cwd, additionalDirectories = [], options = {}) {
@@ -45512,7 +45537,7 @@ var init_managed_official = __esm({
45512
45537
  "../../packages/runtime/src/harness/managed-official.ts"() {
45513
45538
  "use strict";
45514
45539
  init_managed_layout();
45515
- OFFICIAL_CLAUDE_SDK_VERSION = "0.3.296";
45540
+ OFFICIAL_CLAUDE_SDK_VERSION = "0.3.300";
45516
45541
  OFFICIAL_CODEX_NPM_VERSION = "0.162.1";
45517
45542
  OFFICIAL_CODEX_PACKAGE = "@openai/codex";
45518
45543
  }
@@ -49441,7 +49466,7 @@ var init_runtime_ready = __esm({
49441
49466
 
49442
49467
  // ../../packages/runtime/src/harness/enable.ts
49443
49468
  import { accessSync as accessSync3, constants as constants3, existsSync as existsSync40, realpathSync as realpathSync10, statSync as statSync15 } from "node:fs";
49444
- import { isAbsolute as isAbsolute6, resolve as resolve16 } from "node:path";
49469
+ import { isAbsolute as isAbsolute7, resolve as resolve16 } from "node:path";
49445
49470
  async function enableHarness(manager, input, deps) {
49446
49471
  const id = input.harnessId;
49447
49472
  if (!isNodeHarnessId(id)) throw new Error(`unknown harnessId: ${id}`);
@@ -49656,7 +49681,7 @@ function enableAcpGrok(manager, opts) {
49656
49681
  });
49657
49682
  }
49658
49683
  function requireRegularReadableFile(path) {
49659
- if (!isAbsolute6(path)) {
49684
+ if (!isAbsolute7(path)) {
49660
49685
  throw new Error(`path must be absolute: ${path}`);
49661
49686
  }
49662
49687
  const abs = resolve16(path);
@@ -49668,7 +49693,7 @@ function requireRegularReadableFile(path) {
49668
49693
  }
49669
49694
  function resolveExternalCommand(explicit, searchNames, options = {}) {
49670
49695
  if (explicit) {
49671
- const abs = isAbsolute6(explicit) ? explicit : resolve16(explicit);
49696
+ const abs = isAbsolute7(explicit) ? explicit : resolve16(explicit);
49672
49697
  if (!existsSync40(abs)) return null;
49673
49698
  try {
49674
49699
  if (!statSync15(abs).isFile()) return null;
@@ -83245,7 +83270,7 @@ var init_sqlite_backup = __esm({
83245
83270
  import { createHash as createHash16, randomUUID as randomUUID14 } from "node:crypto";
83246
83271
  import { existsSync as existsSync45, mkdirSync as mkdirSync22, readdirSync as readdirSync15, renameSync as renameSync8, rmSync as rmSync10, chmodSync as chmodSync2 } from "node:fs";
83247
83272
  import { homedir as homedir15 } from "node:os";
83248
- import { isAbsolute as isAbsolute7, join as join41 } from "node:path";
83273
+ import { isAbsolute as isAbsolute8, join as join41 } from "node:path";
83249
83274
  import Database3 from "better-sqlite3";
83250
83275
  function nativeDatabasePath(home, sessionId) {
83251
83276
  return join41(home, "databases", `${createHash16("sha256").update(sessionId).digest("hex")}.db`);
@@ -83293,7 +83318,7 @@ function prepareNativeDatabase(home, sessionId, env, nativeId) {
83293
83318
  }
83294
83319
  const data = join41(env.XDG_DATA_HOME ?? process.env.XDG_DATA_HOME ?? join41(homedir15(), ".local", "share"), "opencode");
83295
83320
  const configured = env.OPENCODE_DB ?? process.env.OPENCODE_DB;
83296
- const originals = configured && configured !== ":memory:" ? [isAbsolute7(configured) ? configured : join41(data, configured)] : existsSync45(data) ? readdirSync15(data).filter((name) => /^opencode(?:-[\w.-]+)?\.db$/.test(name)).map((name) => join41(data, name)) : [];
83321
+ const originals = configured && configured !== ":memory:" ? [isAbsolute8(configured) ? configured : join41(data, configured)] : existsSync45(data) ? readdirSync15(data).filter((name) => /^opencode(?:-[\w.-]+)?\.db$/.test(name)).map((name) => join41(data, name)) : [];
83297
83322
  const caches = readdirSync15(directory).filter((name) => name.endsWith(".db")).map((name) => join41(directory, name));
83298
83323
  const sources = [...originals, ...caches].filter((path) => path !== target && existsSync45(path));
83299
83324
  const source = nativeId ? sources.find((path) => containsSession(path, nativeId)) : originals.find((path) => existsSync45(path));
@@ -98607,12 +98632,13 @@ var SUPERONE_TOOL_SUMMARY_FIELDS = {
98607
98632
  // The card, never the brief: the phone cannot launch it.
98608
98633
  session_suggest_task: ["title", "tldr"],
98609
98634
  // The layout row's verb and subject; the row reads file names out of `tab`.
98610
- layout_act: ["action", "path", "line", "side", "tab"],
98635
+ layout_act: ["action", "path", "line", "side", "tab", "width", "height", "mode", "position"],
98611
98636
  miniapp_dev_register: ["name", "directory", "appDir"],
98612
98637
  miniapp_dev_update_types: ["appDir"],
98613
98638
  miniapp_dev_setup: ["name", "directory", "description"],
98614
98639
  miniapp_dev_preview: ["tool", "phase"],
98615
- miniapp_dev_reload: ["appId"]
98640
+ miniapp_dev_reload: ["appId"],
98641
+ miniapp_open: ["appId"]
98616
98642
  };
98617
98643
  function sanitizeSessionTagInput(source) {
98618
98644
  const safe = {};
@@ -101713,7 +101739,7 @@ var SESSION_OPERATION_HANDLERS = Object.fromEntries([
101713
101739
  ]);
101714
101740
 
101715
101741
  // ../../packages/runtime/src/server/rpc-dispatch.ts
101716
- import { dirname as configDirname, join as pathJoin, resolve as pathResolve2, sep as sep5 } from "node:path";
101742
+ import { dirname as configDirname, isAbsolute as isAbsolute5, join as pathJoin, resolve as pathResolve2, sep as sep5 } from "node:path";
101717
101743
 
101718
101744
  // ../../packages/runtime/src/server/rpc-session-create.ts
101719
101745
  init_environment();
@@ -108316,7 +108342,15 @@ function handleSessionSetUiFlags(payload, ctx) {
108316
108342
  return mapThrown(err);
108317
108343
  }
108318
108344
  }
108319
- function attachmentOriginal(zone, sessionId, path) {
108345
+ function attachmentOriginal(ctx, sessionId, path) {
108346
+ if (ctx.sameHost) {
108347
+ try {
108348
+ return typeof path === "string" && isAbsolute5(path) && statSync9(path).isFile() ? path : null;
108349
+ } catch {
108350
+ return null;
108351
+ }
108352
+ }
108353
+ const zone = ctx.artifacts;
108320
108354
  if (!zone) return null;
108321
108355
  const prefix = pathJoin(zone.syncRoot, sessionId) + sep5;
108322
108356
  if (typeof path !== "string" || !path.startsWith(prefix)) return null;
@@ -108364,7 +108398,7 @@ async function handleSessionSend(payload, ctx) {
108364
108398
  }).filter((x2) => x2 != null).slice(0, 8);
108365
108399
  for (const image of images) {
108366
108400
  if (image.originalPath === void 0) continue;
108367
- const original = attachmentOriginal(ctx.artifacts, String(p3.sessionId ?? ""), image.originalPath);
108401
+ const original = attachmentOriginal(ctx, String(p3.sessionId ?? ""), image.originalPath);
108368
108402
  if (!original) return { error: { code: "invalid_argument", message: "attachment original must be a file in this session's sync zone" } };
108369
108403
  image.originalPath = original;
108370
108404
  }
@@ -128486,7 +128520,7 @@ init_environment();
128486
128520
  init_config();
128487
128521
  init_harness();
128488
128522
  import { accessSync as accessSync4, constants as constants6, existsSync as existsSync55, realpathSync as realpathSync13, statSync as statSync19 } from "node:fs";
128489
- import { isAbsolute as isAbsolute8, resolve as resolve19 } from "node:path";
128523
+ import { isAbsolute as isAbsolute9, resolve as resolve19 } from "node:path";
128490
128524
  import { homedir as homedir18 } from "node:os";
128491
128525
 
128492
128526
  // src/session/managed-harness-release.ts
@@ -128984,7 +129018,7 @@ function buildPublicConfigSummary(id, configJson, status2) {
128984
129018
  }
128985
129019
  const out = {};
128986
129020
  if (id === "claude" || id === "codex") {
128987
- if (typeof parsed.artifactPath === "string" && isAbsolute8(parsed.artifactPath)) {
129021
+ if (typeof parsed.artifactPath === "string" && isAbsolute9(parsed.artifactPath)) {
128988
129022
  out.artifactPath = parsed.artifactPath;
128989
129023
  }
128990
129024
  if (parsed.source === "offline-artifact") out.source = "offline-artifact";
@@ -128994,14 +129028,14 @@ function buildPublicConfigSummary(id, configJson, status2) {
128994
129028
  out.digestSha256 = parsed.digestSha256;
128995
129029
  }
128996
129030
  } else if (id === "opencode") {
128997
- if (typeof parsed.command === "string" && isAbsolute8(parsed.command)) {
129031
+ if (typeof parsed.command === "string" && isAbsolute9(parsed.command)) {
128998
129032
  out.command = parsed.command;
128999
129033
  }
129000
129034
  if (typeof parsed.serverUrl === "string") {
129001
129035
  out.serverUrl = redactServerUrlForDisplay(parsed.serverUrl);
129002
129036
  }
129003
129037
  } else if (id === "acp-grok") {
129004
- if (typeof parsed.command === "string" && isAbsolute8(parsed.command)) {
129038
+ if (typeof parsed.command === "string" && isAbsolute9(parsed.command)) {
129005
129039
  out.command = parsed.command;
129006
129040
  }
129007
129041
  if (Array.isArray(parsed.args)) {
@@ -129015,7 +129049,7 @@ function buildPublicConfigSummary(id, configJson, status2) {
129015
129049
  }
129016
129050
  function resolveExternalCommand2(explicit, pathCandidates) {
129017
129051
  if (explicit) {
129018
- if (!isAbsolute8(explicit)) {
129052
+ if (!isAbsolute9(explicit)) {
129019
129053
  return null;
129020
129054
  }
129021
129055
  return isUsableExecutable(explicit);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-one/cli",
3
- "version": "0.74.0-alpha",
3
+ "version": "0.74.0-alpha.2",
4
4
  "description": "SuperOne headless node CLI — remote execution environment (RPC, workspaces, sessions).",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -25,20 +25,20 @@
25
25
  "directory": "apps/cli"
26
26
  },
27
27
  "dependencies": {
28
- "@anthropic-ai/claude-agent-sdk": "0.3.296",
28
+ "@anthropic-ai/claude-agent-sdk": "0.3.300",
29
29
  "@cursor/sdk": "1.0.30",
30
30
  "better-sqlite3": "^13.0.1",
31
31
  "node-pty": "^1.0.0"
32
32
  },
33
33
  "optionalDependencies": {
34
- "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.296",
35
- "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.296",
36
- "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.296",
37
- "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.296",
38
- "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.296",
39
- "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.296",
40
- "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.296",
41
- "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.296",
34
+ "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.300",
35
+ "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.300",
36
+ "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.300",
37
+ "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.300",
38
+ "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.300",
39
+ "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.300",
40
+ "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.300",
41
+ "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.300",
42
42
  "@cursor/sdk-darwin-arm64": "1.0.30",
43
43
  "@cursor/sdk-darwin-x64": "1.0.30",
44
44
  "@cursor/sdk-linux-arm64": "1.0.30",