praxis-agent 0.6.0 → 0.7.0
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/README.md +2 -1
- package/dist/cli/interactive.d.ts +3 -0
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +146 -2
- package/dist/cli/interactive.js.map +1 -1
- package/dist/cli/tui/claude-style.d.ts +10 -0
- package/dist/cli/tui/claude-style.d.ts.map +1 -1
- package/dist/cli/tui/claude-style.js +62 -0
- package/dist/cli/tui/claude-style.js.map +1 -1
- package/dist/cli/tui/hook-settings.d.ts +33 -0
- package/dist/cli/tui/hook-settings.d.ts.map +1 -0
- package/dist/cli/tui/hook-settings.js +200 -0
- package/dist/cli/tui/hook-settings.js.map +1 -0
- package/dist/cli/tui/slash-commands.d.ts.map +1 -1
- package/dist/cli/tui/slash-commands.js +5 -0
- package/dist/cli/tui/slash-commands.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +44 -5
- package/dist/cli.js.map +1 -1
- package/dist/compatibility/claude/shared-resources.d.ts +2 -0
- package/dist/compatibility/claude/shared-resources.d.ts.map +1 -1
- package/dist/compatibility/claude/shared-resources.js.map +1 -1
- package/dist/plugins/claude-plugin-runtime.d.ts +1 -0
- package/dist/plugins/claude-plugin-runtime.d.ts.map +1 -1
- package/dist/plugins/claude-plugin-runtime.js +49 -21
- package/dist/plugins/claude-plugin-runtime.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -83,7 +83,8 @@ troubleshooting. Run `praxis --help` for the authoritative command surface.
|
|
|
83
83
|
restored active-branch conversation history, streaming and expandable
|
|
84
84
|
thinking, grouped multi-file reads, globally expandable tool results,
|
|
85
85
|
command-specific `/add-dir`, `/copy`, `/branch`, `/rename`, `/export`,
|
|
86
|
-
provider-
|
|
86
|
+
provider-free read-only shared `/hooks`, provider-backed `/compact`, native
|
|
87
|
+
`/rewind`, runtime `/cd`, transcript-free
|
|
87
88
|
`/btw` side questions with background-Agent handoff, interactive
|
|
88
89
|
`/background` terminal handoff, `/config`, `/usage`, `/mcp`, `/memory` shared
|
|
89
90
|
instruction and auto-memory access, and live extension-reload controls,
|
|
@@ -8,6 +8,7 @@ import { type TuiMemoryFiles } from './tui/memory-files.js';
|
|
|
8
8
|
import { type TuiDiffSnapshot } from './tui/git-diff.js';
|
|
9
9
|
import { type TuiPermissionBehavior, type TuiPermissionRule } from './tui/permission-settings.js';
|
|
10
10
|
import type { ClaudeResourceScope } from '../compatibility/claude/shared-resources.js';
|
|
11
|
+
import type { TuiHookConfiguration } from './tui/hook-settings.js';
|
|
11
12
|
import { type TuiSlashCommand } from './tui/slash-commands.js';
|
|
12
13
|
import { type TuiAgentEntry, type TuiFileEntry } from './tui/file-picker.js';
|
|
13
14
|
import { type TuiEditorOptions, type TuiEditorResult } from './tui/external-editor.js';
|
|
@@ -35,6 +36,7 @@ interface InteractiveSessionCommands {
|
|
|
35
36
|
rename?(sessionId: string, name: string): Promise<void>;
|
|
36
37
|
sessionNameSuggestion?(sessionId: string, signal?: AbortSignal): Promise<string | null>;
|
|
37
38
|
workflows?(): readonly Record<string, unknown>[];
|
|
39
|
+
hookConfiguration?(): Promise<TuiHookConfiguration>;
|
|
38
40
|
slashCommands?(): readonly TuiSlashCommand[];
|
|
39
41
|
agentDefinitions?(): readonly TuiAgentEntry[];
|
|
40
42
|
runtimeInfo?(): CliRuntimeInfo;
|
|
@@ -50,6 +52,7 @@ export interface InteractiveServiceFactory {
|
|
|
50
52
|
createService(options: {
|
|
51
53
|
eventSink: RuntimeEventSink;
|
|
52
54
|
requireProvider: boolean;
|
|
55
|
+
hooksOnly?: boolean;
|
|
53
56
|
approveRecovery?: (call: ModelToolCall) => boolean | Promise<boolean>;
|
|
54
57
|
approveTool?: (call: ModelToolCall) => boolean | Promise<boolean>;
|
|
55
58
|
onElicitation?: (request: CliElicitationRequest) => Promise<CliElicitationResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAGb,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACf,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EACV,8BAA8B,EAI/B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAA;AAKxF,OAAO,
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EAGb,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACf,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EACV,8BAA8B,EAI/B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAA;AAKxF,OAAO,EAmBL,KAAK,cAAc,EAEnB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAA;AACtF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAA;AAShC,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,EAIL,kBAAkB,EAGlB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAA;AAQvC,UAAU,0BAA0B;IAClC,GAAG,CACD,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC3E,WAAW,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,IAAI,CACF,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,UAAU,CAAC,CAAA;IACtB,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IACrC,UAAU,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IACzD,OAAO,CAAC,CACN,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,YAAY,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACxD,SAAS,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACvE,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,kBAAkB,CAAC,CACjB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,cAAc,CAAC,EAAE,oBAAoB,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,cAAc,CAAC,CACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,cAAc,CAAC,EAAE,oBAAoB,GACpC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,qBAAqB,CAAC,CACpB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,cAAc,CAAC,EAAE,oBAAoB,GACpC,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,sBAAsB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC1E,gBAAgB,CAAC,CACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAClC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,qBAAqB,CAAC,CACpB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzB,SAAS,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChD,iBAAiB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACnD,aAAa,CAAC,IAAI,SAAS,eAAe,EAAE,CAAA;IAC5C,gBAAgB,CAAC,IAAI,SAAS,aAAa,EAAE,CAAA;IAC7C,WAAW,CAAC,IAAI,cAAc,CAAA;IAC9B,iBAAiB,CAAC,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,mBAAmB,CAAC,CAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,CAAC,OAAO,EAAE;QACrB,SAAS,EAAE,gBAAgB,CAAA;QAC3B,eAAe,EAAE,OAAO,CAAA;QACxB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACrE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACjE,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAClC,OAAO,CAAC,EAAE,8BAA8B,CAAC,SAAS,CAAC,CAAA;QACnD,WAAW,CAAC,EAAE,8BAA8B,CAAC,aAAa,CAAC,CAAA;QAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;QACpD,cAAc,CAAC,EAAE,oBAAoB,CAAA;QACrC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QACzC,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,WAAW,CAAA;KACrB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,qBAAqB,CAAA;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,yBAAyB,CAAA;IAClC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAA;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;IAC5C,YAAY,CAAC,EAAE,CACb,OAAO,EAAE,4BAA4B,KAClC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACzC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,wBAAwB,CAAA;IACjC,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IACjC,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;IAC3C,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAA;IACnD,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACrE,iBAAiB,CAAC,EAAE,OAAO,kBAAkB,CAAA;IAC7C,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,CAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,cAAc,CAAC,CAAA;IAC5B,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,KACtB,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACpD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,mBAAmB,CAAC,EAAE;QACpB,IAAI,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAA;QAC7C,GAAG,CAAC,KAAK,EAAE;YACT,QAAQ,EAAE,qBAAqB,CAAA;YAC/B,IAAI,EAAE,MAAM,CAAA;YACZ,KAAK,EAAE,mBAAmB,CAAA;SAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,CAAC,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAChD,CAAA;IACD,0BAA0B,CAAC,EAAE,OAAO,4BAA4B,CAAA;IAChE,2BAA2B,CAAC,EAAE,OAAO,6BAA6B,CAAA;CACnE;AAiWD,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAmB,EACnB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,cAAsB,EACtB,eAAsB,EACtB,MAAM,EACN,OAAgD,EAChD,aAAa,EACb,aAAoC,EACpC,MAAqB,EACrB,+BAAuC,EACvC,qBAA0B,EAC1B,UAAU,EACV,UAAU,EACV,cAA8B,EAC9B,qBAAqB,EACrB,eAA0C,EAC1C,iBAAsC,EACtC,iBAAqC,EACrC,iBACyC,EACzC,YAAgC,EAChC,kBAAwC,EACxC,cAAkC,EAClC,eAAkC,EAClC,eAAmC,EACnC,2BAAoD,EACpD,YAAsC,EACtC,mBAAmB,EACnB,0BAAyD,EACzD,2BAA2D,GAC5D,EAAE,mBAAmB,+BAguIrB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,yBAAyB,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAA;IACpD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,wBAAwB,CAAA;IACjC,YAAY,CAAC,EAAE,CACb,OAAO,EAAE,4BAA4B,KAClC,OAAO,CAAC,2BAA2B,CAAC,CAAA;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,IAAI,CAAA;CAC/D,GAAG,OAAO,CAAC,MAAM,CAAC,CAiHlB"}
|
package/dist/cli/interactive.js
CHANGED
|
@@ -5,7 +5,7 @@ import { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
5
5
|
import { Box, Text, render, useApp, useInput } from 'ink';
|
|
6
6
|
import { AgentRunCancelledError } from '../core/runtime.js';
|
|
7
7
|
import { redactSensitiveText, sensitiveEnvironmentValues, } from '../platform/sensitive-data.js';
|
|
8
|
-
import { CommandPalette, BtwPanel, Composer, DiffDashboard, DialogFrame, ExternalEditorWait, HelpMenu, ListDashboard, MemoryDashboard, MentionPicker, PermissionDashboard, SelectionMenu, SessionPicker, StatusDashboard, Transcript, WelcomePanel, useTerminalWidth, } from './tui/claude-style.js';
|
|
8
|
+
import { CommandPalette, BtwPanel, Composer, DiffDashboard, DialogFrame, ExternalEditorWait, HelpMenu, HookDashboard, ListDashboard, MemoryDashboard, MentionPicker, PermissionDashboard, SelectionMenu, SessionPicker, StatusDashboard, Transcript, WelcomePanel, useTerminalWidth, } from './tui/claude-style.js';
|
|
9
9
|
import { loadTuiMemoryFiles, openTuiMemoryFolder, } from './tui/memory-files.js';
|
|
10
10
|
import { loadGitDiff, visiblePatchLines, } from './tui/git-diff.js';
|
|
11
11
|
import { addTuiPermissionRule, loadTuiPermissionRules, removeTuiPermissionRule, } from './tui/permission-settings.js';
|
|
@@ -2846,6 +2846,101 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
2846
2846
|
}
|
|
2847
2847
|
return;
|
|
2848
2848
|
}
|
|
2849
|
+
if (activeMenu.kind === 'hooks') {
|
|
2850
|
+
const event = activeMenu.configuration.events[activeMenu.eventIndex];
|
|
2851
|
+
const matcher = event?.matchers[activeMenu.matcherIndex];
|
|
2852
|
+
const length = activeMenu.depth === 'events'
|
|
2853
|
+
? activeMenu.configuration.events.length
|
|
2854
|
+
: activeMenu.depth === 'matchers'
|
|
2855
|
+
? (event?.matchers.length ?? 0)
|
|
2856
|
+
: activeMenu.depth === 'hooks'
|
|
2857
|
+
? (matcher?.hooks.length ?? 0)
|
|
2858
|
+
: 0;
|
|
2859
|
+
if (key.escape || value === '\u001B') {
|
|
2860
|
+
updateMenu(activeMenu.depth === 'detail'
|
|
2861
|
+
? { ...activeMenu, depth: 'hooks' }
|
|
2862
|
+
: activeMenu.depth === 'hooks'
|
|
2863
|
+
? { ...activeMenu, depth: 'matchers', hookIndex: 0 }
|
|
2864
|
+
: activeMenu.depth === 'matchers'
|
|
2865
|
+
? {
|
|
2866
|
+
...activeMenu,
|
|
2867
|
+
depth: 'events',
|
|
2868
|
+
matcherIndex: 0,
|
|
2869
|
+
hookIndex: 0,
|
|
2870
|
+
}
|
|
2871
|
+
: null);
|
|
2872
|
+
return;
|
|
2873
|
+
}
|
|
2874
|
+
const numericIndex = /^[1-9]$/u.test(value) ? Number(value) - 1 : null;
|
|
2875
|
+
if (numericIndex !== null) {
|
|
2876
|
+
if (numericIndex >= length)
|
|
2877
|
+
return;
|
|
2878
|
+
if (activeMenu.depth === 'events') {
|
|
2879
|
+
updateMenu({
|
|
2880
|
+
...activeMenu,
|
|
2881
|
+
eventIndex: numericIndex,
|
|
2882
|
+
matcherIndex: 0,
|
|
2883
|
+
hookIndex: 0,
|
|
2884
|
+
});
|
|
2885
|
+
}
|
|
2886
|
+
else if (activeMenu.depth === 'matchers') {
|
|
2887
|
+
updateMenu({
|
|
2888
|
+
...activeMenu,
|
|
2889
|
+
matcherIndex: numericIndex,
|
|
2890
|
+
hookIndex: 0,
|
|
2891
|
+
});
|
|
2892
|
+
}
|
|
2893
|
+
else if (activeMenu.depth === 'hooks') {
|
|
2894
|
+
updateMenu({ ...activeMenu, hookIndex: numericIndex });
|
|
2895
|
+
}
|
|
2896
|
+
return;
|
|
2897
|
+
}
|
|
2898
|
+
if (key.upArrow || key.downArrow) {
|
|
2899
|
+
if (length === 0)
|
|
2900
|
+
return;
|
|
2901
|
+
const delta = key.upArrow ? -1 : 1;
|
|
2902
|
+
if (activeMenu.depth === 'events') {
|
|
2903
|
+
updateMenu({
|
|
2904
|
+
...activeMenu,
|
|
2905
|
+
eventIndex: Math.max(0, Math.min(length - 1, activeMenu.eventIndex + delta)),
|
|
2906
|
+
matcherIndex: 0,
|
|
2907
|
+
hookIndex: 0,
|
|
2908
|
+
});
|
|
2909
|
+
}
|
|
2910
|
+
else if (activeMenu.depth === 'matchers') {
|
|
2911
|
+
updateMenu({
|
|
2912
|
+
...activeMenu,
|
|
2913
|
+
matcherIndex: Math.max(0, Math.min(length - 1, activeMenu.matcherIndex + delta)),
|
|
2914
|
+
hookIndex: 0,
|
|
2915
|
+
});
|
|
2916
|
+
}
|
|
2917
|
+
else if (activeMenu.depth === 'hooks') {
|
|
2918
|
+
updateMenu({
|
|
2919
|
+
...activeMenu,
|
|
2920
|
+
hookIndex: Math.max(0, Math.min(length - 1, activeMenu.hookIndex + delta)),
|
|
2921
|
+
});
|
|
2922
|
+
}
|
|
2923
|
+
return;
|
|
2924
|
+
}
|
|
2925
|
+
if (key.return) {
|
|
2926
|
+
if (activeMenu.depth === 'events') {
|
|
2927
|
+
updateMenu({
|
|
2928
|
+
...activeMenu,
|
|
2929
|
+
depth: 'matchers',
|
|
2930
|
+
matcherIndex: 0,
|
|
2931
|
+
hookIndex: 0,
|
|
2932
|
+
});
|
|
2933
|
+
}
|
|
2934
|
+
else if (activeMenu.depth === 'matchers' && matcher) {
|
|
2935
|
+
updateMenu({ ...activeMenu, depth: 'hooks', hookIndex: 0 });
|
|
2936
|
+
}
|
|
2937
|
+
else if (activeMenu.depth === 'hooks' &&
|
|
2938
|
+
matcher?.hooks[activeMenu.hookIndex]) {
|
|
2939
|
+
updateMenu({ ...activeMenu, depth: 'detail' });
|
|
2940
|
+
}
|
|
2941
|
+
}
|
|
2942
|
+
return;
|
|
2943
|
+
}
|
|
2849
2944
|
if (activeMenu.kind === 'list') {
|
|
2850
2945
|
if (key.escape || value === '\u001B') {
|
|
2851
2946
|
updateMenu(null);
|
|
@@ -3305,6 +3400,55 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
3305
3400
|
onTurnChange?.(loading);
|
|
3306
3401
|
void loading.finally(() => onTurnChange?.(null));
|
|
3307
3402
|
}
|
|
3403
|
+
else if (prompt === '/hooks') {
|
|
3404
|
+
const loading = (async () => {
|
|
3405
|
+
setBusy(true);
|
|
3406
|
+
setStatus('loading hooks');
|
|
3407
|
+
let localService;
|
|
3408
|
+
try {
|
|
3409
|
+
const preferences = runtimePreferencesRef.current;
|
|
3410
|
+
localService = await factory.createService({
|
|
3411
|
+
eventSink: handleEvent,
|
|
3412
|
+
requireProvider: false,
|
|
3413
|
+
hooksOnly: true,
|
|
3414
|
+
...(preferences.model === undefined
|
|
3415
|
+
? {}
|
|
3416
|
+
: { model: preferences.model }),
|
|
3417
|
+
effort: preferences.effort,
|
|
3418
|
+
permissionMode: preferences.permissionMode,
|
|
3419
|
+
additionalDirectories: preferences.additionalDirectories,
|
|
3420
|
+
cwd: runtimeCwdRef.current,
|
|
3421
|
+
...(signal ? { signal } : {}),
|
|
3422
|
+
});
|
|
3423
|
+
if (!localService.hookConfiguration)
|
|
3424
|
+
throw new Error('Hook configuration is unavailable.');
|
|
3425
|
+
const configuration = await localService.hookConfiguration();
|
|
3426
|
+
updateMenu({
|
|
3427
|
+
kind: 'hooks',
|
|
3428
|
+
configuration,
|
|
3429
|
+
depth: 'events',
|
|
3430
|
+
eventIndex: 0,
|
|
3431
|
+
matcherIndex: 0,
|
|
3432
|
+
hookIndex: 0,
|
|
3433
|
+
});
|
|
3434
|
+
}
|
|
3435
|
+
catch (error) {
|
|
3436
|
+
warn(error);
|
|
3437
|
+
}
|
|
3438
|
+
finally {
|
|
3439
|
+
try {
|
|
3440
|
+
await localService?.close?.();
|
|
3441
|
+
}
|
|
3442
|
+
catch (error) {
|
|
3443
|
+
warn(error);
|
|
3444
|
+
}
|
|
3445
|
+
setBusy(false);
|
|
3446
|
+
setStatus('ready');
|
|
3447
|
+
}
|
|
3448
|
+
})();
|
|
3449
|
+
onTurnChange?.(loading);
|
|
3450
|
+
void loading.finally(() => onTurnChange?.(null));
|
|
3451
|
+
}
|
|
3308
3452
|
else if (prompt === '/resume' || prompt === '/sessions') {
|
|
3309
3453
|
pickerIncludesNewSessionRef.current = false;
|
|
3310
3454
|
setPickerIncludesNewSession(false);
|
|
@@ -3483,7 +3627,7 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
3483
3627
|
label: 'User settings',
|
|
3484
3628
|
description: 'Saved in at ~/.claude/settings.json',
|
|
3485
3629
|
},
|
|
3486
|
-
], selectedIndex: menu.selectedIndex, footer: "Enter to confirm \u00B7 Esc to cancel", width: width, screenReader: axScreenReader })) : menu.kind === 'status' ? (_jsx(StatusDashboard, { tabIndex: menu.tabIndex, version: runtimeDisplay.version, sessionId: sessionId, display: runtimeDisplay, ...(usage === undefined ? {} : { usage }), ...(costUsd === undefined ? {} : { costUsd }), turnCount: turnNumberRef.current, toolCount: history.filter((item) => item.kind === 'tool').length, commandCount: allSlashCommands.length, detailedTranscript: thinkingExpanded, width: width, screenReader: axScreenReader })) : menu.kind === 'memory' ? (_jsx(MemoryDashboard, { autoMemoryEnabled: menu.autoMemoryEnabled, entries: menu.entries, selectedIndex: menu.selectedIndex, openedIndex: menu.openedIndex, loading: menu.loading, width: width, screenReader: axScreenReader })) : menu.kind === 'list' ? (_jsx(ListDashboard, { title: menu.title, rows: menu.rows, emptyText: menu.emptyText, selectedIndex: menu.selectedIndex, width: width, screenReader: axScreenReader })) : menu.kind === 'model' ? (_jsx(SelectionMenu, { title: "Select model", description: `Effort: ${runtimePreferences.effort}`, options: modelOptions, selectedIndex: menu.selectedIndex, footer: "\u2191/\u2193 select \u00B7 \u2190/\u2192 effort \u00B7 Enter applies to this session \u00B7 Esc cancels", width: width, screenReader: axScreenReader })) : menu.kind === 'effort' ? (_jsx(SelectionMenu, { title: "Select effort", description: "Controls how much reasoning effort the provider should use.", options: EFFORT_OPTIONS.map((option) => ({
|
|
3630
|
+
], selectedIndex: menu.selectedIndex, footer: "Enter to confirm \u00B7 Esc to cancel", width: width, screenReader: axScreenReader })) : menu.kind === 'status' ? (_jsx(StatusDashboard, { tabIndex: menu.tabIndex, version: runtimeDisplay.version, sessionId: sessionId, display: runtimeDisplay, ...(usage === undefined ? {} : { usage }), ...(costUsd === undefined ? {} : { costUsd }), turnCount: turnNumberRef.current, toolCount: history.filter((item) => item.kind === 'tool').length, commandCount: allSlashCommands.length, detailedTranscript: thinkingExpanded, width: width, screenReader: axScreenReader })) : menu.kind === 'memory' ? (_jsx(MemoryDashboard, { autoMemoryEnabled: menu.autoMemoryEnabled, entries: menu.entries, selectedIndex: menu.selectedIndex, openedIndex: menu.openedIndex, loading: menu.loading, width: width, screenReader: axScreenReader })) : menu.kind === 'hooks' ? (_jsx(HookDashboard, { configuration: menu.configuration, depth: menu.depth, eventIndex: menu.eventIndex, matcherIndex: menu.matcherIndex, hookIndex: menu.hookIndex, width: width, screenReader: axScreenReader })) : menu.kind === 'list' ? (_jsx(ListDashboard, { title: menu.title, rows: menu.rows, emptyText: menu.emptyText, selectedIndex: menu.selectedIndex, width: width, screenReader: axScreenReader })) : menu.kind === 'model' ? (_jsx(SelectionMenu, { title: "Select model", description: `Effort: ${runtimePreferences.effort}`, options: modelOptions, selectedIndex: menu.selectedIndex, footer: "\u2191/\u2193 select \u00B7 \u2190/\u2192 effort \u00B7 Enter applies to this session \u00B7 Esc cancels", width: width, screenReader: axScreenReader })) : menu.kind === 'effort' ? (_jsx(SelectionMenu, { title: "Select effort", description: "Controls how much reasoning effort the provider should use.", options: EFFORT_OPTIONS.map((option) => ({
|
|
3487
3631
|
label: option,
|
|
3488
3632
|
description: option === 'low'
|
|
3489
3633
|
? 'Fastest and least deliberative.'
|