@maximoai/maximo-syntax-cli 0.1.21 → 0.1.22

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/README.md +27 -16
  2. package/dist/cli.mjs +179 -75
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -63,6 +63,21 @@ After installation, you can invoke the CLI using any of the following commands:
63
63
 
64
64
  All five commands are equivalent and natively supported.
65
65
 
66
+ ## Scrolling (app-managed by default)
67
+
68
+ Interactive sessions use **fullscreen alt-screen scroll** by default (`displayMode:
69
+ auto`), the same approach as Grok Build: an in-app ScrollBox owns the wheel and
70
+ keyboard scroll, sticky follow only while you are pinned to the bottom, and
71
+ streaming output cannot yank the viewport while you read earlier turns.
72
+
73
+ - **Wheel / trackpad** — scroll the conversation; follow pauses automatically.
74
+ - **PgUp / PgDn** — page through the transcript from the prompt.
75
+ - **End / jump-to-bottom pill** — resume follow of new output.
76
+ - **Wheel past the bottom** — also re-enables follow.
77
+
78
+ Prefer native terminal scrollback instead? Set Display mode to `inline` in
79
+ `/config`, or `export MAXIMO_SYNTAX_NO_FLICKER=0`.
80
+
66
81
  ## Prompt mouse controls
67
82
 
68
83
  The prompt supports terminal-native mouse editing in both inline and
@@ -78,11 +93,6 @@ fullscreen layouts:
78
93
  - Click a visible slash-command or file suggestion to accept that row
79
94
  immediately. Keyboard navigation remains available.
80
95
 
81
- Application-level dispatch is limited to the prompt and suggestion boxes. The
82
- terminal’s mouse-reporting mode is global while it is enabled, so users who
83
- need native terminal scrollback selection should use this switch before
84
- starting Maximo Syntax:
85
-
86
96
  ```bash
87
97
  # Keep the prompt from enabling mouse reporting.
88
98
  export MAXIMO_SYNTAX_DISABLE_MOUSE=1
@@ -122,20 +132,21 @@ then `Q` in VS Code). The pane supports:
122
132
  - `Ctrl+Up` / `Ctrl+Down` to reorder it.
123
133
  - Typing to filter the queue.
124
134
 
125
- Open the detailed transcript with `Ctrl+O`. Fullscreen scrollback supports
126
- mouse-wheel and keyboard scrolling, `/` incremental search, `N`/`Shift+N`
127
- match navigation, text selection and copy, and automatic follow while pinned
128
- to the bottom. Manual scrolling pauses follow; returning to the bottom resumes
129
- it. Press `Shift+Up` or click a message to focus it, then use Up/Down or `J`/`K`
130
- to move between turns, Enter to fold or expand supported rows, `C` to copy,
131
- `R` for raw view, and Escape to return. Press `[` to dump the complete expanded
135
+ Open the detailed transcript with `Ctrl+O`. Scrollback supports mouse-wheel
136
+ and keyboard scrolling, `/` incremental search, `N`/`Shift+N` match navigation,
137
+ text selection and copy, and automatic follow while pinned to the bottom.
138
+ Manual scrolling pauses follow; returning to the bottom resumes it. Press
139
+ `Shift+Up` or click a message to focus it, then use Up/Down or `J`/`K` to move
140
+ between turns, Enter to fold or expand supported rows, `C` to copy, `R` for
141
+ raw view, and Escape to return. Press `[` to dump the complete expanded
132
142
  transcript into native terminal scrollback, or `V` to open it in `$VISUAL` or
133
143
  `$EDITOR`.
134
144
 
135
- `/config` also exposes display mode (auto, fullscreen, inline, compact), UI
136
- density, prompt border style, reduced motion, contextual shortcut hints, and
137
- response-completion notifications. Notifications can be limited to times when
138
- the terminal is unfocused.
145
+ `/config` also exposes display mode (`auto` = fullscreen scroll by default;
146
+ `inline` = native terminal scrollback; `fullscreen` / `compact` force the
147
+ alt-screen layout), UI density, prompt border style, reduced motion, contextual
148
+ shortcut hints, and response-completion notifications. Notifications can be
149
+ limited to times when the terminal is unfocused.
139
150
 
140
151
  ## Skills and cross-CLI compatibility
141
152
 
package/dist/cli.mjs CHANGED
@@ -123670,7 +123670,7 @@ var init_metadata = __esm(() => {
123670
123670
  isMaximoAiAuth: isMaximoAISubscriber(),
123671
123671
  version: "99.0.0",
123672
123672
  versionBase: getVersionBase(),
123673
- buildTime: "2026-08-03T01:01:49.719Z",
123673
+ buildTime: "2026-08-03T11:50:31.866Z",
123674
123674
  deploymentEnvironment: env3.detectDeploymentEnvironment(),
123675
123675
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
123676
123676
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -130044,13 +130044,13 @@ function isFullscreenEnvEnabled() {
130044
130044
  if (isTmuxControlMode()) {
130045
130045
  if (!loggedTmuxCcDisable) {
130046
130046
  loggedTmuxCcDisable = true;
130047
- logForDebugging2("fullscreen disabled: tmux -CC (iTerm2 integration mode) detected · set MAXIMO_SYNTAX_NO_FLICKER=1 to override");
130047
+ logForDebugging2("fullscreen disabled: tmux -CC (iTerm2 integration mode) detected · set displayMode=fullscreen or MAXIMO_SYNTAX_NO_FLICKER=1 to override");
130048
130048
  }
130049
130049
  return false;
130050
130050
  }
130051
130051
  if (displayMode === "fullscreen" || displayMode === "compact")
130052
130052
  return true;
130053
- return process.env.USER_TYPE === "ant";
130053
+ return true;
130054
130054
  }
130055
130055
  function isMouseTrackingEnabled() {
130056
130056
  return !isEnvTruthy(process.env.MAXIMO_SYNTAX_DISABLE_MOUSE);
@@ -131101,6 +131101,16 @@ var init_terminal_focus_event = __esm(() => {
131101
131101
  };
131102
131102
  });
131103
131103
 
131104
+ // src/ink/prompt-mouse.ts
131105
+ function toPromptFrameRow(terminalRow, mainScreenRowOffset, altScreen) {
131106
+ return terminalRow - 1 - (altScreen ? 0 : mainScreenRowOffset ?? 0);
131107
+ }
131108
+ function shouldSuspendPromptMouseForNativeScroll(keyName2, altScreenActive) {
131109
+ if (altScreenActive)
131110
+ return false;
131111
+ return keyName2 === "wheelup" || keyName2 === "wheeldown";
131112
+ }
131113
+
131104
131114
  // node_modules/scheduler/cjs/scheduler.production.js
131105
131115
  var exports_scheduler_production = {};
131106
131116
  __export(exports_scheduler_production, {
@@ -144888,6 +144898,9 @@ function processKeysInBatch(app, items, _unused1, _unused2) {
144888
144898
  handleMouseEvent(app, item);
144889
144899
  continue;
144890
144900
  }
144901
+ if (app.props.isAltScreenActive && shouldSuspendPromptMouseForNativeScroll(item.name, app.props.isAltScreenActive())) {
144902
+ app.props.onSuspendPromptMouseForScroll?.();
144903
+ }
144891
144904
  const sequence = item.sequence;
144892
144905
  if (sequence === FOCUS_IN) {
144893
144906
  app.handleTerminalFocus(true);
@@ -147718,8 +147731,6 @@ function renderNodeToOutput(node, output, {
147718
147731
  const content = node.childNodes.find((c5) => isElementNode(c5) && c5.yogaNode !== undefined);
147719
147732
  const contentYoga = content?.yogaNode;
147720
147733
  const scrollHeight = contentYoga?.getComputedHeight() ?? 0;
147721
- const prevScrollHeight = node.scrollHeight ?? scrollHeight;
147722
- const prevInnerHeight = node.scrollViewportHeight ?? innerHeight;
147723
147734
  node.scrollHeight = scrollHeight;
147724
147735
  node.scrollViewportHeight = innerHeight;
147725
147736
  node.scrollViewportTop = (y1 ?? y2) + padTop;
@@ -147734,15 +147745,9 @@ function renderNodeToOutput(node, output, {
147734
147745
  }
147735
147746
  const scrollTopBeforeFollow = node.scrollTop ?? 0;
147736
147747
  const sticky = node.stickyScroll ?? Boolean(node.attributes["stickyScroll"]);
147737
- const prevMaxScroll = Math.max(0, prevScrollHeight - prevInnerHeight);
147738
- const grew = scrollHeight >= prevScrollHeight;
147739
- const atBottom = sticky || grew && scrollTopBeforeFollow >= prevMaxScroll;
147740
- if (atBottom && (node.pendingScrollDelta ?? 0) >= 0) {
147748
+ if (sticky && (node.pendingScrollDelta ?? 0) >= 0) {
147741
147749
  node.scrollTop = maxScroll;
147742
147750
  node.pendingScrollDelta = undefined;
147743
- if (node.stickyScroll === false && scrollTopBeforeFollow >= prevMaxScroll) {
147744
- node.stickyScroll = true;
147745
- }
147746
147751
  }
147747
147752
  const followDelta = (node.scrollTop ?? 0) - scrollTopBeforeFollow;
147748
147753
  if (followDelta > 0) {
@@ -148356,11 +148361,6 @@ var init_useTerminalNotification = __esm(() => {
148356
148361
  TerminalWriteProvider = TerminalWriteContext.Provider;
148357
148362
  });
148358
148363
 
148359
- // src/ink/prompt-mouse.ts
148360
- function toPromptFrameRow(terminalRow, mainScreenRowOffset, altScreen) {
148361
- return terminalRow - 1 - (altScreen ? 0 : mainScreenRowOffset ?? 0);
148362
- }
148363
-
148364
148364
  // src/ink/ink.tsx
148365
148365
  import { closeSync as closeSync3, constants as fsConstants, openSync as openSync3, readSync as readSync2, writeSync } from "fs";
148366
148366
  import { format as format3 } from "util";
@@ -148414,6 +148414,9 @@ class Ink {
148414
148414
  promptMouseTargets = new Map;
148415
148415
  promptMouseTarget = null;
148416
148416
  promptMouseTracking = false;
148417
+ promptMouseTrackingSuspendedForScroll = false;
148418
+ promptMouseScrollResumeTimer = null;
148419
+ static PROMPT_MOUSE_SCROLL_RESUME_MS = 1500;
148417
148420
  prevFrameContaminated = false;
148418
148421
  needsEraseBeforePaint = false;
148419
148422
  cursorDeclaration = null;
@@ -148527,7 +148530,7 @@ class Ink {
148527
148530
  this.log.reset();
148528
148531
  this.displayCursor = null;
148529
148532
  this.invalidatePromptMouseCalibration();
148530
- if (this.promptMouseTracking) {
148533
+ if (this.promptMouseTracking && !this.promptMouseTrackingSuspendedForScroll) {
148531
148534
  this.options.stdout.write(ENABLE_MOUSE_PROMPT_TRACKING);
148532
148535
  }
148533
148536
  };
@@ -148547,7 +148550,7 @@ class Ink {
148547
148550
  this.resetFramesForAltScreen();
148548
148551
  this.needsEraseBeforePaint = true;
148549
148552
  }
148550
- if (!this.altScreenActive && !this.isPaused && this.options.stdout.isTTY && this.promptMouseTracking) {
148553
+ if (!this.altScreenActive && !this.isPaused && this.options.stdout.isTTY && this.promptMouseTracking && !this.promptMouseTrackingSuspendedForScroll) {
148551
148554
  this.options.stdout.write(ENABLE_MOUSE_PROMPT_TRACKING);
148552
148555
  }
148553
148556
  if (this.currentNode !== null) {
@@ -148687,7 +148690,8 @@ class Ink {
148687
148690
  }
148688
148691
  optimized.push(this.altScreenParkPatch);
148689
148692
  }
148690
- const decl = this.cursorDeclaration;
148693
+ const suppressMainScreenCursorPark = !this.altScreenActive && this.promptMouseTrackingSuspendedForScroll;
148694
+ const decl = suppressMainScreenCursorPark ? null : this.cursorDeclaration;
148691
148695
  const rect = decl !== null ? nodeCache.get(decl.node) : undefined;
148692
148696
  const target = decl !== null && rect !== undefined ? {
148693
148697
  x: rect.x + decl.relativeX,
@@ -148760,10 +148764,10 @@ class Ink {
148760
148764
  }
148761
148765
  const tWrite = performance.now();
148762
148766
  writeDiffToTerminal(this.terminal, optimized, this.altScreenActive && !SYNC_OUTPUT_SUPPORTED);
148763
- if (this.promptMouseTracking && !this.altScreenActive && !this.isPaused && this.options.stdout.isTTY) {
148767
+ if (this.promptMouseTracking && !this.promptMouseTrackingSuspendedForScroll && !this.altScreenActive && !this.isPaused && this.options.stdout.isTTY) {
148764
148768
  this.options.stdout.write(ENABLE_MOUSE_PROMPT_TRACKING);
148765
148769
  }
148766
- if (target !== null && this.promptMouseTracking && !this.altScreenActive && !this.isPaused && this.options.stdout.isTTY && this.pendingCursorCalibrationY === null && (this.promptMouseRowOffset === null || this.lastCalibratedCursorY !== target.y || this.lastCalibratedFrameCursorY !== frame.cursor.y)) {
148770
+ if (target !== null && this.promptMouseTracking && !this.promptMouseTrackingSuspendedForScroll && !this.altScreenActive && !this.isPaused && this.options.stdout.isTTY && this.pendingCursorCalibrationY === null && (this.promptMouseRowOffset === null || this.lastCalibratedCursorY !== target.y || this.lastCalibratedFrameCursorY !== frame.cursor.y)) {
148767
148771
  this.pendingCursorCalibrationY = target.y;
148768
148772
  this.pendingCalibrationFrameCursorY = frame.cursor.y;
148769
148773
  this.options.stdout.write(REQUEST_CURSOR_POSITION);
@@ -148839,6 +148843,11 @@ class Ink {
148839
148843
  this.altScreenActive = active;
148840
148844
  this.altScreenMouseTracking = active && mouseTracking;
148841
148845
  if (active) {
148846
+ if (this.promptMouseScrollResumeTimer) {
148847
+ clearTimeout(this.promptMouseScrollResumeTimer);
148848
+ this.promptMouseScrollResumeTimer = null;
148849
+ }
148850
+ this.promptMouseTrackingSuspendedForScroll = false;
148842
148851
  this.resetFramesForAltScreen();
148843
148852
  } else {
148844
148853
  this.repaint();
@@ -148856,7 +148865,7 @@ class Ink {
148856
148865
  this.options.stdout.write(DISABLE_KITTY_KEYBOARD + ENABLE_KITTY_KEYBOARD + ENABLE_MODIFY_OTHER_KEYS);
148857
148866
  }
148858
148867
  if (!this.altScreenActive) {
148859
- if (this.promptMouseTracking) {
148868
+ if (this.promptMouseTracking && !this.promptMouseTrackingSuspendedForScroll) {
148860
148869
  this.options.stdout.write(ENABLE_MOUSE_PROMPT_TRACKING);
148861
148870
  }
148862
148871
  return;
@@ -148908,11 +148917,38 @@ class Ink {
148908
148917
  if (!this.options.stdout.isTTY || this.isPaused || this.altScreenActive) {
148909
148918
  return;
148910
148919
  }
148920
+ if (enabled && this.promptMouseTrackingSuspendedForScroll) {
148921
+ return;
148922
+ }
148911
148923
  this.options.stdout.write(enabled ? ENABLE_MOUSE_PROMPT_TRACKING : DISABLE_MOUSE_PROMPT_TRACKING);
148912
148924
  }
148925
+ suspendPromptMouseForNativeScroll = () => {
148926
+ if (this.altScreenActive)
148927
+ return;
148928
+ this.promptMouseTrackingSuspendedForScroll = true;
148929
+ if (this.promptMouseScrollResumeTimer) {
148930
+ clearTimeout(this.promptMouseScrollResumeTimer);
148931
+ }
148932
+ this.promptMouseScrollResumeTimer = setTimeout(() => {
148933
+ this.promptMouseScrollResumeTimer = null;
148934
+ this.resumePromptMouseAfterScroll();
148935
+ }, Ink.PROMPT_MOUSE_SCROLL_RESUME_MS);
148936
+ if (this.promptMouseTracking && this.options.stdout.isTTY && !this.isPaused) {
148937
+ this.options.stdout.write(DISABLE_MOUSE_PROMPT_TRACKING);
148938
+ }
148939
+ };
148940
+ resumePromptMouseAfterScroll() {
148941
+ if (!this.promptMouseTrackingSuspendedForScroll)
148942
+ return;
148943
+ this.promptMouseTrackingSuspendedForScroll = false;
148944
+ if (this.promptMouseTracking && this.options.stdout.isTTY && !this.isPaused && !this.altScreenActive) {
148945
+ this.options.stdout.write(ENABLE_MOUSE_PROMPT_TRACKING);
148946
+ }
148947
+ }
148913
148948
  dispatchPromptMouse(m) {
148914
- if (!this.promptMouseTracking || isMouseClicksDisabled())
148949
+ if (!this.promptMouseTracking || this.promptMouseTrackingSuspendedForScroll || isMouseClicksDisabled()) {
148915
148950
  return false;
148951
+ }
148916
148952
  const col = m.col - 1;
148917
148953
  const row = toPromptFrameRow(m.row, this.promptMouseRowOffset, this.altScreenActive);
148918
148954
  const baseButton = m.button & 3;
@@ -149298,6 +149334,7 @@ class Ink {
149298
149334
  onStdinResume: this.reassertTerminalModes,
149299
149335
  onPromptMouse: this.dispatchPromptMouse,
149300
149336
  isAltScreenActive: () => this.altScreenActive,
149337
+ onSuspendPromptMouseForScroll: this.suspendPromptMouseForNativeScroll,
149301
149338
  onCursorDeclaration: this.setCursorDeclaration,
149302
149339
  onCursorPosition: this.handleCursorPosition,
149303
149340
  dispatchKeyboardEvent: this.dispatchKeyboardEvent,
@@ -149343,6 +149380,10 @@ class Ink {
149343
149380
  clearTimeout(this.drainTimer);
149344
149381
  this.drainTimer = null;
149345
149382
  }
149383
+ if (this.promptMouseScrollResumeTimer !== null) {
149384
+ clearTimeout(this.promptMouseScrollResumeTimer);
149385
+ this.promptMouseScrollResumeTimer = null;
149386
+ }
149346
149387
  reconciler_default.updateContainerSync(null, this.container, null, noop_default);
149347
149388
  reconciler_default.flushSyncWork();
149348
149389
  instances_default.delete(this.options.stdout);
@@ -276381,7 +276422,7 @@ import { access as access3, writeFile as writeFile13 } from "fs/promises";
276381
276422
  import { homedir as homedir22 } from "os";
276382
276423
  import { join as join65 } from "path";
276383
276424
  function getCurrentRealVersion() {
276384
- return "0.1.21";
276425
+ return "0.1.22";
276385
276426
  }
276386
276427
  async function getRolloutConfig() {
276387
276428
  try {
@@ -280832,7 +280873,7 @@ var init_detection = __esm(() => {
280832
280873
  });
280833
280874
 
280834
280875
  // src/entrypoints/sdk/coreSchemas.ts
280835
- var ModelUsageSchema, OutputFormatTypeSchema, BaseOutputFormatSchema, JsonSchemaOutputFormatSchema, OutputFormatSchema, ApiKeySourceSchema, ConfigScopeSchema2, SdkBetaSchema, ThinkingAdaptiveSchema, ThinkingEnabledSchema, ThinkingDisabledSchema, ThinkingConfigSchema, McpStdioServerConfigSchema2, McpSSEServerConfigSchema2, McpHttpServerConfigSchema, McpSdkServerConfigSchema2, McpServerConfigForProcessTransportSchema, McpMaximoAIProxyServerConfigSchema2, McpServerStatusConfigSchema, McpServerStatusSchema, McpSetServersResultSchema, PermissionUpdateDestinationSchema, PermissionBehaviorSchema, PermissionRuleValueSchema, PermissionUpdateSchema, PermissionDecisionClassificationSchema, PermissionResultSchema, PermissionModeSchema, HOOK_EVENTS2, HookEventSchema, BaseHookInputSchema, PreToolUseHookInputSchema, PermissionRequestHookInputSchema, PostToolUseHookInputSchema, PostToolUseFailureHookInputSchema, PermissionDeniedHookInputSchema, NotificationHookInputSchema, UserPromptSubmitHookInputSchema, SessionStartHookInputSchema, SetupHookInputSchema, StopHookInputSchema, StopFailureHookInputSchema, SubagentStartHookInputSchema, SubagentStopHookInputSchema, PreCompactHookInputSchema, PostCompactHookInputSchema, TeammateIdleHookInputSchema, TaskCreatedHookInputSchema, TaskCompletedHookInputSchema, ElicitationHookInputSchema, ElicitationResultHookInputSchema, CONFIG_CHANGE_SOURCES, ConfigChangeHookInputSchema, INSTRUCTIONS_LOAD_REASONS, INSTRUCTIONS_MEMORY_TYPES, InstructionsLoadedHookInputSchema, WorktreeCreateHookInputSchema, WorktreeRemoveHookInputSchema, CwdChangedHookInputSchema, FileChangedHookInputSchema, EXIT_REASONS, ExitReasonSchema, SessionEndHookInputSchema, HookInputSchema, AsyncHookJSONOutputSchema, PreToolUseHookSpecificOutputSchema, UserPromptSubmitHookSpecificOutputSchema, SessionStartHookSpecificOutputSchema, SetupHookSpecificOutputSchema, SubagentStartHookSpecificOutputSchema, PostToolUseHookSpecificOutputSchema, PostToolUseFailureHookSpecificOutputSchema, PermissionDeniedHookSpecificOutputSchema, NotificationHookSpecificOutputSchema, PermissionRequestHookSpecificOutputSchema, CwdChangedHookSpecificOutputSchema, FileChangedHookSpecificOutputSchema, SyncHookJSONOutputSchema, ElicitationHookSpecificOutputSchema, ElicitationResultHookSpecificOutputSchema, WorktreeCreateHookSpecificOutputSchema, HookJSONOutputSchema, PromptRequestOptionSchema, PromptRequestSchema, PromptResponseSchema, SlashCommandSchema, AgentInfoSchema, ModelInfoSchema, AccountInfoSchema, AgentMcpServerSpecSchema2, AgentDefinitionSchema, SettingSourceSchema, SdkPluginConfigSchema, RewindFilesResultSchema, APIUserMessagePlaceholder, APIAssistantMessagePlaceholder, RawMessageStreamEventPlaceholder, UUIDPlaceholder, NonNullableUsagePlaceholder, SDKAssistantMessageErrorSchema, SDKStatusSchema, SDKUserMessageContentSchema, SDKUserMessageSchema, SDKUserMessageReplaySchema, SDKRateLimitInfoSchema, SDKAssistantMessageSchema, SDKRateLimitEventSchema, SDKStreamlinedTextMessageSchema, SDKStreamlinedToolUseSummaryMessageSchema, SDKPermissionDenialSchema, SDKResultSuccessSchema, SDKResultErrorSchema, SDKResultMessageSchema, SDKSystemMessageSchema, SDKPartialAssistantMessageSchema, SDKCompactBoundaryMessageSchema, SDKStatusMessageSchema, SDKPostTurnSummaryMessageSchema, SDKAPIRetryMessageSchema, SDKLocalCommandOutputMessageSchema, SDKHookStartedMessageSchema, SDKHookProgressMessageSchema, SDKHookResponseMessageSchema, SDKToolProgressMessageSchema, SDKAuthStatusMessageSchema, SDKFilesPersistedEventSchema, SDKTaskNotificationMessageSchema, SDKTaskStartedMessageSchema, SDKSessionStateChangedMessageSchema, SDKTaskProgressMessageSchema, SDKToolUseSummaryMessageSchema, SDKElicitationCompleteMessageSchema, SDKPromptSuggestionMessageSchema, SDKSessionInfoSchema, SDKMessageSchema, FastModeStateSchema;
280876
+ var ModelUsageSchema, OutputFormatTypeSchema, BaseOutputFormatSchema, JsonSchemaOutputFormatSchema, OutputFormatSchema, ApiKeySourceSchema, ConfigScopeSchema2, SdkBetaSchema, ThinkingAdaptiveSchema, ThinkingEnabledSchema, ThinkingDisabledSchema, ThinkingConfigSchema, McpStdioServerConfigSchema2, McpSSEServerConfigSchema2, McpHttpServerConfigSchema, McpSdkServerConfigSchema2, McpServerConfigForProcessTransportSchema, McpMaximoAIProxyServerConfigSchema2, McpServerStatusConfigSchema, McpServerStatusSchema, McpSetServersResultSchema, PermissionUpdateDestinationSchema, PermissionBehaviorSchema, PermissionRuleValueSchema, PermissionUpdateSchema, PermissionDecisionClassificationSchema, PermissionResultSchema, PermissionModeSchema, HOOK_EVENTS2, HookEventSchema, BaseHookInputSchema, PreToolUseHookInputSchema, PermissionRequestHookInputSchema, PostToolUseHookInputSchema, PostToolUseFailureHookInputSchema, PermissionDeniedHookInputSchema, NotificationHookInputSchema, UserPromptSubmitHookInputSchema, SessionStartHookInputSchema, SetupHookInputSchema, StopHookInputSchema, StopFailureHookInputSchema, SubagentStartHookInputSchema, SubagentStopHookInputSchema, PreCompactHookInputSchema, PostCompactHookInputSchema, TeammateIdleHookInputSchema, TaskCreatedHookInputSchema, TaskCompletedHookInputSchema, ElicitationHookInputSchema, ElicitationResultHookInputSchema, CONFIG_CHANGE_SOURCES, ConfigChangeHookInputSchema, INSTRUCTIONS_LOAD_REASONS, INSTRUCTIONS_MEMORY_TYPES, InstructionsLoadedHookInputSchema, WorktreeCreateHookInputSchema, WorktreeRemoveHookInputSchema, CwdChangedHookInputSchema, FileChangedHookInputSchema, EXIT_REASONS, ExitReasonSchema, SessionEndHookInputSchema, HookInputSchema, AsyncHookJSONOutputSchema, PreToolUseHookSpecificOutputSchema, UserPromptSubmitHookSpecificOutputSchema, SessionStartHookSpecificOutputSchema, SetupHookSpecificOutputSchema, SubagentStartHookSpecificOutputSchema, PostToolUseHookSpecificOutputSchema, PostToolUseFailureHookSpecificOutputSchema, PermissionDeniedHookSpecificOutputSchema, NotificationHookSpecificOutputSchema, PermissionRequestHookSpecificOutputSchema, CwdChangedHookSpecificOutputSchema, FileChangedHookSpecificOutputSchema, SyncHookJSONOutputSchema, ElicitationHookSpecificOutputSchema, ElicitationResultHookSpecificOutputSchema, WorktreeCreateHookSpecificOutputSchema, HookJSONOutputSchema, PromptRequestOptionSchema, PromptRequestSchema, PromptResponseSchema, SlashCommandSchema, AgentInfoSchema, ModelInfoSchema, AccountInfoSchema, AgentMcpServerSpecSchema2, AgentDefinitionSchema, SettingSourceSchema, SdkPluginConfigSchema, RewindFilesResultSchema, APIUserMessagePlaceholder, APIAssistantMessagePlaceholder, RawMessageStreamEventPlaceholder, UUIDPlaceholder, NonNullableUsagePlaceholder, SDKAssistantMessageErrorSchema, SDKStatusSchema, SDKUserMessageContentSchema, SDKUserMessageSchema, SDKUserMessageReplaySchema, SDKRateLimitInfoSchema, SDKAssistantMessageSchema, SDKRateLimitEventSchema, SDKStreamlinedTextMessageSchema, SDKStreamlinedToolUseSummaryMessageSchema, SDKPermissionDenialSchema, SDKResultSuccessSchema, SDKResultErrorSchema, SDKResultMessageSchema, SDKSystemMessageSchema, SDKPartialAssistantMessageSchema, SDKCompactBoundaryMessageSchema, SDKStatusMessageSchema, SDKPostTurnSummaryMessageSchema, SDKAPIRetryMessageSchema, SDKLocalCommandOutputMessageSchema, SDKClassifierDecisionMessageSchema, SDKHookStartedMessageSchema, SDKHookProgressMessageSchema, SDKHookResponseMessageSchema, SDKToolProgressMessageSchema, SDKAuthStatusMessageSchema, SDKFilesPersistedEventSchema, SDKTaskNotificationMessageSchema, SDKTaskStartedMessageSchema, SDKSessionStateChangedMessageSchema, SDKTaskProgressMessageSchema, SDKToolUseSummaryMessageSchema, SDKElicitationCompleteMessageSchema, SDKPromptSuggestionMessageSchema, SDKSessionInfoSchema, SDKMessageSchema, FastModeStateSchema;
280836
280877
  var init_coreSchemas = __esm(() => {
280837
280878
  init_v4();
280838
280879
  ModelUsageSchema = lazySchema(() => exports_external.object({
@@ -281692,6 +281733,17 @@ var init_coreSchemas = __esm(() => {
281692
281733
  uuid: UUIDPlaceholder(),
281693
281734
  session_id: exports_external.string()
281694
281735
  }).describe("Output from a local slash command (e.g. /voice, /cost). Displayed as assistant-style text in the transcript."));
281736
+ SDKClassifierDecisionMessageSchema = lazySchema(() => exports_external.object({
281737
+ type: exports_external.literal("system"),
281738
+ subtype: exports_external.literal("classifier_decision"),
281739
+ tool_use_id: exports_external.string(),
281740
+ tool_name: exports_external.string(),
281741
+ decision: exports_external.enum(["allowed", "denied"]),
281742
+ classifier: exports_external.string().describe('Classifier id, e.g. "auto-mode" or "bash".'),
281743
+ reason: exports_external.string().optional().describe("Human-readable reason from the classifier, when available."),
281744
+ uuid: UUIDPlaceholder(),
281745
+ session_id: exports_external.string()
281746
+ }).describe("Emitted when auto-mode or bash classifier allows or denies a tool use. Hosts should show this next to the matching tool activity."));
281695
281747
  SDKHookStartedMessageSchema = lazySchema(() => exports_external.object({
281696
281748
  type: exports_external.literal("system"),
281697
281749
  subtype: exports_external.literal("hook_started"),
@@ -281855,6 +281907,7 @@ var init_coreSchemas = __esm(() => {
281855
281907
  SDKStatusMessageSchema(),
281856
281908
  SDKAPIRetryMessageSchema(),
281857
281909
  SDKLocalCommandOutputMessageSchema(),
281910
+ SDKClassifierDecisionMessageSchema(),
281858
281911
  SDKHookStartedMessageSchema(),
281859
281912
  SDKHookProgressMessageSchema(),
281860
281913
  SDKHookResponseMessageSchema(),
@@ -359896,6 +359949,31 @@ var init_bashPermissions = __esm(() => {
359896
359949
  speculativeChecks = new Map;
359897
359950
  });
359898
359951
 
359952
+ // src/utils/classifierDecisionEvents.ts
359953
+ function registerClassifierDecisionHandler(next) {
359954
+ handler7 = next;
359955
+ if (handler7 && pending.length > 0) {
359956
+ for (const event of pending.splice(0)) {
359957
+ handler7(event);
359958
+ }
359959
+ }
359960
+ }
359961
+ function emitClassifierDecision(event) {
359962
+ if (!event.toolUseId || !event.toolName)
359963
+ return;
359964
+ if (handler7) {
359965
+ handler7(event);
359966
+ return;
359967
+ }
359968
+ pending.push(event);
359969
+ if (pending.length > MAX_PENDING)
359970
+ pending.shift();
359971
+ }
359972
+ var MAX_PENDING = 50, pending, handler7 = null;
359973
+ var init_classifierDecisionEvents = __esm(() => {
359974
+ pending = [];
359975
+ });
359976
+
359899
359977
  // src/utils/sessionActivity.ts
359900
359978
  function startHeartbeatTimer() {
359901
359979
  clearIdleTimer();
@@ -360986,6 +361064,15 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
360986
361064
  if (permissionDurationMs >= SLOW_PHASE_LOG_THRESHOLD_MS && permissionMode === "auto") {
360987
361065
  logForDebugging2(`Slow permission decision: ${permissionDurationMs}ms for ${tool.name} ` + `(mode=${permissionMode}, behavior=${permissionDecision.behavior})`, { level: "info" });
360988
361066
  }
361067
+ if (permissionDecision.decisionReason?.type === "classifier" && (permissionDecision.behavior === "allow" || permissionDecision.behavior === "deny")) {
361068
+ emitClassifierDecision({
361069
+ toolUseId: toolUseID,
361070
+ toolName: tool.name,
361071
+ decision: permissionDecision.behavior === "allow" ? "allowed" : "denied",
361072
+ classifier: permissionDecision.decisionReason.classifier,
361073
+ reason: permissionDecision.decisionReason.reason
361074
+ });
361075
+ }
360989
361076
  if (permissionDecision.behavior !== "ask" && !toolUseContext.toolDecisions?.has(toolUseID)) {
360990
361077
  const decision = permissionDecision.behavior === "allow" ? "accept" : "reject";
360991
361078
  const source = decisionReasonToOTelSource(permissionDecision.decisionReason, permissionDecision.behavior);
@@ -361472,6 +361559,7 @@ var init_toolExecution = __esm(() => {
361472
361559
  init_permissionLogging();
361473
361560
  init_Tool();
361474
361561
  init_bashPermissions();
361562
+ init_classifierDecisionEvents();
361475
361563
  init_prompt2();
361476
361564
  init_prompt3();
361477
361565
  init_gitOperationTracking();
@@ -363801,7 +363889,7 @@ function getAnthropicEnvMetadata() {
363801
363889
  function getBuildAgeMinutes() {
363802
363890
  if (false)
363803
363891
  ;
363804
- const buildTime = new Date("2026-08-03T01:01:49.719Z").getTime();
363892
+ const buildTime = new Date("2026-08-03T11:50:31.866Z").getTime();
363805
363893
  if (isNaN(buildTime))
363806
363894
  return;
363807
363895
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -369383,11 +369471,11 @@ For example, to get tab context:
369383
369471
  2. Then: Call mcp__claude-in-chrome__tabs_context_mcp`, CLAUDE_IN_CHROME_SKILL_HINT = `**Browser Automation**: Chrome browser tools are available via the "claude-in-chrome" skill. CRITICAL: Before using any mcp__claude-in-chrome__* tools, invoke the skill by calling the Skill tool with skill: "claude-in-chrome". The skill provides browser automation instructions and enables the tools.`;
369384
369472
 
369385
369473
  // src/utils/hooks/hookEvents.ts
369386
- function registerHookEventHandler(handler7) {
369387
- eventHandler = handler7;
369388
- if (handler7 && pendingEvents.length > 0) {
369474
+ function registerHookEventHandler(handler8) {
369475
+ eventHandler = handler8;
369476
+ if (handler8 && pendingEvents.length > 0) {
369389
369477
  for (const event of pendingEvents.splice(0)) {
369390
- handler7(event);
369478
+ handler8(event);
369391
369479
  }
369392
369480
  }
369393
369481
  }
@@ -371329,8 +371417,8 @@ async function getVerifyPlanReminderAttachment(messages, toolUseContext) {
371329
371417
  return [];
371330
371418
  }
371331
371419
  const appState = toolUseContext.getAppState();
371332
- const pending = appState.pendingPlanVerification;
371333
- if (!pending || pending.verificationStarted || pending.verificationCompleted) {
371420
+ const pending2 = appState.pendingPlanVerification;
371421
+ if (!pending2 || pending2.verificationStarted || pending2.verificationCompleted) {
371334
371422
  return [];
371335
371423
  }
371336
371424
  if (messages && messages.length > 0) {
@@ -386696,9 +386784,9 @@ var init_directoryCompletion = __esm(() => {
386696
386784
  });
386697
386785
 
386698
386786
  // src/ink/hooks/use-prompt-mouse-target.ts
386699
- function usePromptMouseTarget(handler7, enabled = true) {
386700
- const handlerRef = import_react94.useRef(handler7);
386701
- handlerRef.current = handler7;
386787
+ function usePromptMouseTarget(handler8, enabled = true) {
386788
+ const handlerRef = import_react94.useRef(handler8);
386789
+ handlerRef.current = handler8;
386702
386790
  const nodeRef = import_react94.useRef(null);
386703
386791
  const registeredNodeRef = import_react94.useRef(null);
386704
386792
  const unregisterRef = import_react94.useRef(null);
@@ -420267,9 +420355,9 @@ function ManagePlugins({
420267
420355
  handleSingleOperationRef.current = handleSingleOperation;
420268
420356
  import_react143.useEffect(() => {
420269
420357
  if (viewState === "plugin-details" && selectedPlugin && pendingAutoActionRef.current) {
420270
- const pending = pendingAutoActionRef.current;
420358
+ const pending2 = pendingAutoActionRef.current;
420271
420359
  pendingAutoActionRef.current = undefined;
420272
- handleSingleOperationRef.current(pending);
420360
+ handleSingleOperationRef.current(pending2);
420273
420361
  }
420274
420362
  }, [viewState, selectedPlugin]);
420275
420363
  const handleToggle = React79.useCallback(() => {
@@ -429868,7 +429956,7 @@ function getRecentActivitySync() {
429868
429956
  return cachedActivity;
429869
429957
  }
429870
429958
  function getLogoDisplayData() {
429871
- const version2 = process.env.DEMO_VERSION ?? "0.1.21" ?? "99.0.0";
429959
+ const version2 = process.env.DEMO_VERSION ?? "0.1.22" ?? "99.0.0";
429872
429960
  const serverUrl = getDirectConnectServerUrl();
429873
429961
  const displayPath = process.env.DEMO_VERSION ? "/code/maximo" : getDisplayPath(getCwd());
429874
429962
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -434094,10 +434182,10 @@ function VirtualMessageList({
434094
434182
  searchState.current.screenOrd = ord;
434095
434183
  startPtrRef.current = -1;
434096
434184
  highlightRef.current(ord);
434097
- const pending = pendingStepRef.current;
434098
- if (pending) {
434185
+ const pending2 = pendingStepRef.current;
434186
+ if (pending2) {
434099
434187
  pendingStepRef.current = 0;
434100
- stepRef.current(pending);
434188
+ stepRef.current(pending2);
434101
434189
  }
434102
434190
  }, [seekGen]);
434103
434191
  function jump(i3, wantLast) {
@@ -434383,14 +434471,14 @@ function StickyTracker({
434383
434471
  }
434384
434472
  const baseOffset = firstVisibleTop >= 0 ? firstVisibleTop - offsets[firstVisible] : 0;
434385
434473
  const estimate = idx >= 0 ? Math.max(0, baseOffset + offsets[idx]) : -1;
434386
- const pending = import_react159.useRef({
434474
+ const pending2 = import_react159.useRef({
434387
434475
  idx: -1,
434388
434476
  tries: 0
434389
434477
  });
434390
434478
  const suppress = import_react159.useRef("none");
434391
434479
  const lastIdx = import_react159.useRef(-1);
434392
434480
  import_react159.useEffect(() => {
434393
- if (pending.current.idx >= 0)
434481
+ if (pending2.current.idx >= 0)
434394
434482
  return;
434395
434483
  if (suppress.current === "armed") {
434396
434484
  suppress.current = "force";
@@ -434424,7 +434512,7 @@ function StickyTracker({
434424
434512
  scrollRef.current?.scrollToElement(el, 1);
434425
434513
  } else {
434426
434514
  scrollRef.current?.scrollTo(capturedEstimate);
434427
- pending.current = {
434515
+ pending2.current = {
434428
434516
  idx: capturedIdx,
434429
434517
  tries: 0
434430
434518
  };
@@ -434433,17 +434521,17 @@ function StickyTracker({
434433
434521
  });
434434
434522
  });
434435
434523
  import_react159.useEffect(() => {
434436
- if (pending.current.idx < 0)
434524
+ if (pending2.current.idx < 0)
434437
434525
  return;
434438
- const el = getItemElement(pending.current.idx);
434526
+ const el = getItemElement(pending2.current.idx);
434439
434527
  if (el) {
434440
434528
  scrollRef.current?.scrollToElement(el, 1);
434441
- pending.current = {
434529
+ pending2.current = {
434442
434530
  idx: -1,
434443
434531
  tries: 0
434444
434532
  };
434445
- } else if (++pending.current.tries > 5) {
434446
- pending.current = {
434533
+ } else if (++pending2.current.tries > 5) {
434534
+ pending2.current = {
434447
434535
  idx: -1,
434448
434536
  tries: 0
434449
434537
  };
@@ -459311,7 +459399,7 @@ var init_bridge_kick = __esm(() => {
459311
459399
  var call57 = async () => {
459312
459400
  return {
459313
459401
  type: "text",
459314
- value: `${"99.0.0"} (built ${"2026-08-03T01:01:49.719Z"})`
459402
+ value: `${"99.0.0"} (built ${"2026-08-03T11:50:31.866Z"})`
459315
459403
  };
459316
459404
  }, version2, version_default;
459317
459405
  var init_version = __esm(() => {
@@ -464153,14 +464241,14 @@ var init_effort3 = __esm(() => {
464153
464241
  });
464154
464242
 
464155
464243
  // native-stub:asciichart
464156
- var noop16 = () => null, handler7, stub8, SandboxManager8, plot6;
464244
+ var noop16 = () => null, handler8, stub8, SandboxManager8, plot6;
464157
464245
  var init_asciichart = __esm(() => {
464158
- handler7 = {
464246
+ handler8 = {
464159
464247
  get(_, prop) {
464160
464248
  if (prop === "__esModule")
464161
464249
  return true;
464162
464250
  if (prop === "default")
464163
- return new Proxy({}, handler7);
464251
+ return new Proxy({}, handler8);
464164
464252
  if (prop === "ExportResultCode")
464165
464253
  return { SUCCESS: 0, FAILED: 1 };
464166
464254
  if (prop === "resourceFromAttributes")
@@ -464170,7 +464258,7 @@ var init_asciichart = __esm(() => {
464170
464258
  return noop16;
464171
464259
  }
464172
464260
  };
464173
- stub8 = new Proxy(noop16, handler7);
464261
+ stub8 = new Proxy(noop16, handler8);
464174
464262
  SandboxManager8 = new Proxy({}, { get: () => noop16 });
464175
464263
  plot6 = noop16;
464176
464264
  });
@@ -492959,8 +493047,8 @@ function useFilePermissionDialog({
492959
493047
  toolUseConfirm.onAllow = (_input, permissionUpdates, feedback3) => {
492960
493048
  originalOnAllow(input, permissionUpdates, feedback3);
492961
493049
  };
492962
- const handler8 = PERMISSION_HANDLERS[option.type];
492963
- handler8(params, {
493050
+ const handler9 = PERMISSION_HANDLERS[option.type];
493051
+ handler9(params, {
492964
493052
  feedback: feedback2,
492965
493053
  hasFeedback: !!feedback2,
492966
493054
  enteredFeedbackMode: option.type === "accept-once" ? yesFeedbackModeEntered : noFeedbackModeEntered,
@@ -516615,14 +516703,14 @@ __export(exports_cacache, {
516615
516703
  ATTR_SERVICE_NAME: () => ATTR_SERVICE_NAME8
516616
516704
  });
516617
516705
  var noop17 = () => null, noopClass6 = class {
516618
- }, handler8, stub9, cacache_default, __stub6 = true, SandboxViolationStore7 = null, SandboxManager9, SandboxRuntimeConfigSchema7, BROWSER_TOOLS6, getMcpConfigForManifest6, ColorDiff7 = null, ColorFile7 = null, getSyntaxTheme8, plot7, createMaximoForChromeMcpServer6, ExportResultCode8, resourceFromAttributes8, Resource6, SimpleSpanProcessor6, BatchSpanProcessor7, NodeTracerProvider6, BasicTracerProvider7, OTLPTraceExporter6, OTLPLogExporter6, OTLPMetricExporter6, PrometheusExporter6, LoggerProvider8, SimpleLogRecordProcessor6, BatchLogRecordProcessor8, MeterProvider7, PeriodicExportingMetricReader7, trace8, context7, SpanStatusCode6, ATTR_SERVICE_NAME8 = "service.name", ATTR_SERVICE_VERSION8 = "service.version", SEMRESATTRS_SERVICE_NAME6 = "service.name", SEMRESATTRS_SERVICE_VERSION6 = "service.version", AggregationTemporality7, DataPointType6, InstrumentType6, PushMetricExporter6, SeverityNumber6;
516706
+ }, handler9, stub9, cacache_default, __stub6 = true, SandboxViolationStore7 = null, SandboxManager9, SandboxRuntimeConfigSchema7, BROWSER_TOOLS6, getMcpConfigForManifest6, ColorDiff7 = null, ColorFile7 = null, getSyntaxTheme8, plot7, createMaximoForChromeMcpServer6, ExportResultCode8, resourceFromAttributes8, Resource6, SimpleSpanProcessor6, BatchSpanProcessor7, NodeTracerProvider6, BasicTracerProvider7, OTLPTraceExporter6, OTLPLogExporter6, OTLPMetricExporter6, PrometheusExporter6, LoggerProvider8, SimpleLogRecordProcessor6, BatchLogRecordProcessor8, MeterProvider7, PeriodicExportingMetricReader7, trace8, context7, SpanStatusCode6, ATTR_SERVICE_NAME8 = "service.name", ATTR_SERVICE_VERSION8 = "service.version", SEMRESATTRS_SERVICE_NAME6 = "service.name", SEMRESATTRS_SERVICE_VERSION6 = "service.version", AggregationTemporality7, DataPointType6, InstrumentType6, PushMetricExporter6, SeverityNumber6;
516619
516707
  var init_cacache = __esm(() => {
516620
- handler8 = {
516708
+ handler9 = {
516621
516709
  get(_, prop) {
516622
516710
  if (prop === "__esModule")
516623
516711
  return true;
516624
516712
  if (prop === "default")
516625
- return new Proxy({}, handler8);
516713
+ return new Proxy({}, handler9);
516626
516714
  if (prop === "ExportResultCode")
516627
516715
  return { SUCCESS: 0, FAILED: 1 };
516628
516716
  if (prop === "resourceFromAttributes")
@@ -516632,7 +516720,7 @@ var init_cacache = __esm(() => {
516632
516720
  return noop17;
516633
516721
  }
516634
516722
  };
516635
- stub9 = new Proxy(noop17, handler8);
516723
+ stub9 = new Proxy(noop17, handler9);
516636
516724
  cacache_default = stub9;
516637
516725
  SandboxManager9 = new Proxy({}, { get: () => noop17 });
516638
516726
  SandboxRuntimeConfigSchema7 = { parse: () => ({}) };
@@ -530631,8 +530719,8 @@ Error: sandbox required but unavailable: ${reason}
530631
530719
  ]);
530632
530720
  const initialMessageRef = import_react327.useRef(false);
530633
530721
  import_react327.useEffect(() => {
530634
- const pending = initialMessage;
530635
- if (!pending || isLoading || initialMessageRef.current)
530722
+ const pending2 = initialMessage;
530723
+ if (!pending2 || isLoading || initialMessageRef.current)
530636
530724
  return;
530637
530725
  initialMessageRef.current = true;
530638
530726
  async function processInitialMessage(initialMsg) {
@@ -530704,7 +530792,7 @@ Error: sandbox required but unavailable: ${reason}
530704
530792
  ref.current = false;
530705
530793
  }, 100, initialMessageRef);
530706
530794
  }
530707
- processInitialMessage(pending);
530795
+ processInitialMessage(pending2);
530708
530796
  }, [
530709
530797
  initialMessage,
530710
530798
  isLoading,
@@ -532053,16 +532141,16 @@ Note: ctrl + z now suspends Maximo Syntax, ctrl + _ undoes input.
532053
532141
  idleMinutes: idleReturnPending.idleMinutes,
532054
532142
  totalInputTokens: getTotalInputTokens(),
532055
532143
  onDone: async (action2) => {
532056
- const pending = idleReturnPending;
532144
+ const pending2 = idleReturnPending;
532057
532145
  setIdleReturnPending(null);
532058
532146
  logEvent("tengu_idle_return_action", {
532059
532147
  action: action2,
532060
- idleMinutes: Math.round(pending.idleMinutes),
532148
+ idleMinutes: Math.round(pending2.idleMinutes),
532061
532149
  messageCount: messagesRef.current.length,
532062
532150
  totalInputTokens: getTotalInputTokens()
532063
532151
  });
532064
532152
  if (action2 === "dismiss") {
532065
- setInputValue(pending.input);
532153
+ setInputValue(pending2.input);
532066
532154
  return;
532067
532155
  }
532068
532156
  if (action2 === "never") {
@@ -532092,7 +532180,7 @@ Note: ctrl + z now suspends Maximo Syntax, ctrl + _ undoes input.
532092
532180
  bashToolsProcessedIdx.current = 0;
532093
532181
  }
532094
532182
  skipIdleCheckRef.current = true;
532095
- onSubmitRef.current(pending.input, {
532183
+ onSubmitRef.current(pending2.input, {
532096
532184
  setCursorOffset: () => {},
532097
532185
  clearBuffer: () => {},
532098
532186
  resetHistory: () => {}
@@ -533663,7 +533751,7 @@ function SetupRow({ children }) {
533663
533751
  }
533664
533752
  function WelcomeV2() {
533665
533753
  const { columns } = useTerminalSize();
533666
- const version3 = "0.1.21";
533754
+ const version3 = "0.1.22";
533667
533755
  const width = Math.max(48, Math.min(columns || 92, 92));
533668
533756
  const stacked = width < OCTOPUS_COMPACT_WIDTH + 42;
533669
533757
  return /* @__PURE__ */ jsx_runtime479.jsx(ThemedBox_default, {
@@ -545909,6 +545997,21 @@ Error: sandbox required but unavailable: ${sandboxUnavailableReason}
545909
545997
  structuredIO.write(message);
545910
545998
  });
545911
545999
  }
546000
+ if (options2.outputFormat === "stream-json") {
546001
+ registerClassifierDecisionHandler((event) => {
546002
+ structuredIO.write({
546003
+ type: "system",
546004
+ subtype: "classifier_decision",
546005
+ tool_use_id: event.toolUseId,
546006
+ tool_name: event.toolName,
546007
+ decision: event.decision,
546008
+ classifier: event.classifier,
546009
+ reason: event.reason,
546010
+ uuid: randomUUID53(),
546011
+ session_id: getSessionId()
546012
+ });
546013
+ });
546014
+ }
545912
546015
  if (options2.setupTrigger) {
545913
546016
  await processSetupHooks(options2.setupTrigger);
545914
546017
  }
@@ -548604,6 +548707,7 @@ var init_print = __esm(() => {
548604
548707
  init_path2();
548605
548708
  init_queryHelpers();
548606
548709
  init_hookEvents();
548710
+ init_classifierDecisionEvents();
548607
548711
  init_filePersistence();
548608
548712
  init_AsyncHookRegistry();
548609
548713
  init_gracefulShutdown();
@@ -549258,7 +549362,7 @@ var init_server3 = __esm(() => {
549258
549362
  }
549259
549363
  this._capabilities = mergeCapabilities(this._capabilities, capabilities);
549260
549364
  }
549261
- setRequestHandler(requestSchema, handler9) {
549365
+ setRequestHandler(requestSchema, handler10) {
549262
549366
  const shape = getObjectShape(requestSchema);
549263
549367
  const methodSchema = shape?.method;
549264
549368
  if (!methodSchema) {
@@ -549286,7 +549390,7 @@ var init_server3 = __esm(() => {
549286
549390
  throw new McpError(ErrorCode.InvalidParams, `Invalid tools/call request: ${errorMessage4}`);
549287
549391
  }
549288
549392
  const { params } = validatedRequest.data;
549289
- const result = await Promise.resolve(handler9(request, extra));
549393
+ const result = await Promise.resolve(handler10(request, extra));
549290
549394
  if (params.task) {
549291
549395
  const taskValidationResult = safeParse3(CreateTaskResultSchema, result);
549292
549396
  if (!taskValidationResult.success) {
@@ -549304,7 +549408,7 @@ var init_server3 = __esm(() => {
549304
549408
  };
549305
549409
  return super.setRequestHandler(requestSchema, wrappedHandler);
549306
549410
  }
549307
- return super.setRequestHandler(requestSchema, handler9);
549411
+ return super.setRequestHandler(requestSchema, handler10);
549308
549412
  }
549309
549413
  assertCapabilityForMethod(method) {
549310
549414
  switch (method) {
@@ -553574,7 +553678,7 @@ Usage: maximo --remote "your task description"`, () => gracefulShutdown(1));
553574
553678
  pendingHookMessages
553575
553679
  }, renderAndRun);
553576
553680
  }
553577
- }).version("0.1.21 (Maximo Syntax)", "-v, --version", "Output the version number");
553681
+ }).version("0.1.22 (Maximo Syntax)", "-v, --version", "Output the version number");
553578
553682
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
553579
553683
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
553580
553684
  if (canUserConfigureAdvisor()) {
@@ -554105,7 +554209,7 @@ function validateProviderEnvOrExit() {
554105
554209
  async function main2() {
554106
554210
  const args = process.argv.slice(2);
554107
554211
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
554108
- console.log(`${"0.1.21"} (Maximo Syntax)`);
554212
+ console.log(`${"0.1.22"} (Maximo Syntax)`);
554109
554213
  return;
554110
554214
  }
554111
554215
  validateProviderEnvOrExit();
@@ -554182,4 +554286,4 @@ async function main2() {
554182
554286
  }
554183
554287
  main2();
554184
554288
 
554185
- //# debugId=33E2F13A070537E464756E2164756E21
554289
+ //# debugId=13CAD1936B51588C64756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maximoai/maximo-syntax-cli",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "Maximo Syntax CLI - A powerful AI-powered command-line interface for code development with any LLM",
5
5
  "type": "module",
6
6
  "bin": {