feat(cursor): multitask slash, autoReview mode, native worktree/add-dir (#1014)

* feat(cursor): multitask slash, autoReview mode, native worktree/add-dir

Close the highest-value Cursor Agent gaps for remote HAPI: expand ACP-safe
slash pass-through (/multitask, worktree, add-dir, …), add autoReview
permission mode (--auto-review spawn + mid-session slash), and route Cursor
New Session worktrees through agent --worktree instead of HAPI sibling trees.

Fixes #1013

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(cli): accept --mode autoReview for hapi cursor

Align --mode parsing with CURSOR_PERMISSION_MODES so documented
`hapi cursor --mode autoReview` enables Smart Auto instead of silently
falling back to default.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
SSU-WEI HUANG
2026-07-12 18:41:52 +08:00
committed by GitHub
co-authored by Cursor
parent b104c38f3a
commit 73584e925a
24 changed files with 630 additions and 143 deletions
+8
View File
@@ -65,6 +65,14 @@ describe('isPermissionModeAllowedForFlavor', () => {
expect(isPermissionModeAllowedForFlavor('safe-yolo', 'pi')).toBe(false)
expect(isPermissionModeAllowedForFlavor('ask', 'pi')).toBe(false)
})
test("cursor includes autoReview", () => {
expect(getPermissionModesForFlavor('cursor')).toContain('autoReview')
expect(getPermissionModeLabel('autoReview')).toBe('Auto-review')
expect(getPermissionModeTone('autoReview')).toBe('warning')
expect(isPermissionModeAllowedForFlavor('autoReview', 'cursor')).toBe(true)
expect(isPermissionModeAllowedForFlavor('autoReview', 'claude')).toBe(false)
})
})
describe('getPermissionModeLabel', () => {
+4 -1
View File
@@ -37,7 +37,7 @@ export type KimiPermissionMode = typeof KIMI_PERMISSION_MODES[number]
export const OPENCODE_PERMISSION_MODES = ['default', 'plan', 'yolo'] as const
export type OpencodePermissionMode = typeof OPENCODE_PERMISSION_MODES[number]
export const CURSOR_PERMISSION_MODES = ['default', 'plan', 'ask', 'debug', 'yolo'] as const
export const CURSOR_PERMISSION_MODES = ['default', 'plan', 'ask', 'debug', 'autoReview', 'yolo'] as const
export type CursorPermissionMode = typeof CURSOR_PERMISSION_MODES[number]
export const PERMISSION_MODES = [
@@ -48,6 +48,7 @@ export const PERMISSION_MODES = [
'plan',
'ask',
'debug',
'autoReview',
'read-only',
'safe-yolo',
'yolo'
@@ -62,6 +63,7 @@ export const PERMISSION_MODE_LABELS: Record<PermissionMode, string> = {
plan: 'Plan Mode',
ask: 'Ask Mode',
debug: 'Debug Mode',
autoReview: 'Auto-review',
bypassPermissions: 'Yolo',
'read-only': 'Read Only',
'safe-yolo': 'Safe Yolo',
@@ -77,6 +79,7 @@ export const PERMISSION_MODE_TONES: Record<PermissionMode, PermissionModeTone> =
plan: 'info',
ask: 'info',
debug: 'info',
autoReview: 'warning',
bypassPermissions: 'danger',
'read-only': 'warning',
'safe-yolo': 'warning',