praxis-agent 0.1.2 → 0.3.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.
Files changed (110) hide show
  1. package/README.md +19 -3
  2. package/dist/application/session-service.d.ts +34 -0
  3. package/dist/application/session-service.d.ts.map +1 -1
  4. package/dist/application/session-service.js +646 -38
  5. package/dist/application/session-service.js.map +1 -1
  6. package/dist/cli/interactive.d.ts +71 -7
  7. package/dist/cli/interactive.d.ts.map +1 -1
  8. package/dist/cli/interactive.js +2688 -130
  9. package/dist/cli/interactive.js.map +1 -1
  10. package/dist/cli/protocol.d.ts +1 -0
  11. package/dist/cli/protocol.d.ts.map +1 -1
  12. package/dist/cli/protocol.js.map +1 -1
  13. package/dist/cli/tui/claude-style.d.ts +202 -0
  14. package/dist/cli/tui/claude-style.d.ts.map +1 -0
  15. package/dist/cli/tui/claude-style.js +509 -0
  16. package/dist/cli/tui/claude-style.js.map +1 -0
  17. package/dist/cli/tui/clipboard.d.ts +24 -0
  18. package/dist/cli/tui/clipboard.d.ts.map +1 -0
  19. package/dist/cli/tui/clipboard.js +153 -0
  20. package/dist/cli/tui/clipboard.js.map +1 -0
  21. package/dist/cli/tui/composer-editor.d.ts +19 -0
  22. package/dist/cli/tui/composer-editor.d.ts.map +1 -0
  23. package/dist/cli/tui/composer-editor.js +99 -0
  24. package/dist/cli/tui/composer-editor.js.map +1 -0
  25. package/dist/cli/tui/composer-images.d.ts +7 -0
  26. package/dist/cli/tui/composer-images.d.ts.map +1 -0
  27. package/dist/cli/tui/composer-images.js +48 -0
  28. package/dist/cli/tui/composer-images.js.map +1 -0
  29. package/dist/cli/tui/conversation-export.d.ts +6 -0
  30. package/dist/cli/tui/conversation-export.d.ts.map +1 -0
  31. package/dist/cli/tui/conversation-export.js +76 -0
  32. package/dist/cli/tui/conversation-export.js.map +1 -0
  33. package/dist/cli/tui/external-editor.d.ts +21 -0
  34. package/dist/cli/tui/external-editor.d.ts.map +1 -0
  35. package/dist/cli/tui/external-editor.js +144 -0
  36. package/dist/cli/tui/external-editor.js.map +1 -0
  37. package/dist/cli/tui/file-picker.d.ts +33 -0
  38. package/dist/cli/tui/file-picker.d.ts.map +1 -0
  39. package/dist/cli/tui/file-picker.js +117 -0
  40. package/dist/cli/tui/file-picker.js.map +1 -0
  41. package/dist/cli/tui/git-diff.d.ts +14 -0
  42. package/dist/cli/tui/git-diff.d.ts.map +1 -0
  43. package/dist/cli/tui/git-diff.js +55 -0
  44. package/dist/cli/tui/git-diff.js.map +1 -0
  45. package/dist/cli/tui/keybindings.d.ts +14 -0
  46. package/dist/cli/tui/keybindings.d.ts.map +1 -0
  47. package/dist/cli/tui/keybindings.js +430 -0
  48. package/dist/cli/tui/keybindings.js.map +1 -0
  49. package/dist/cli/tui/permission-settings.d.ts +18 -0
  50. package/dist/cli/tui/permission-settings.d.ts.map +1 -0
  51. package/dist/cli/tui/permission-settings.js +109 -0
  52. package/dist/cli/tui/permission-settings.js.map +1 -0
  53. package/dist/cli/tui/slash-commands.d.ts +11 -0
  54. package/dist/cli/tui/slash-commands.d.ts.map +1 -0
  55. package/dist/cli/tui/slash-commands.js +183 -0
  56. package/dist/cli/tui/slash-commands.js.map +1 -0
  57. package/dist/cli/tui/terminal-suspend.d.ts +5 -0
  58. package/dist/cli/tui/terminal-suspend.d.ts.map +1 -0
  59. package/dist/cli/tui/terminal-suspend.js +9 -0
  60. package/dist/cli/tui/terminal-suspend.js.map +1 -0
  61. package/dist/cli/tui/workspace-directories.d.ts +3 -0
  62. package/dist/cli/tui/workspace-directories.d.ts.map +1 -0
  63. package/dist/cli/tui/workspace-directories.js +55 -0
  64. package/dist/cli/tui/workspace-directories.js.map +1 -0
  65. package/dist/cli.d.ts +24 -3
  66. package/dist/cli.d.ts.map +1 -1
  67. package/dist/cli.js +96 -39
  68. package/dist/cli.js.map +1 -1
  69. package/dist/compatibility/claude/compaction.d.ts +8 -0
  70. package/dist/compatibility/claude/compaction.d.ts.map +1 -1
  71. package/dist/compatibility/claude/compaction.js +45 -8
  72. package/dist/compatibility/claude/compaction.js.map +1 -1
  73. package/dist/compatibility/claude/fork.d.ts.map +1 -1
  74. package/dist/compatibility/claude/fork.js +24 -6
  75. package/dist/compatibility/claude/fork.js.map +1 -1
  76. package/dist/compatibility/claude/history.d.ts.map +1 -1
  77. package/dist/compatibility/claude/history.js +41 -1
  78. package/dist/compatibility/claude/history.js.map +1 -1
  79. package/dist/compatibility/claude/projection.d.ts +29 -1
  80. package/dist/compatibility/claude/projection.d.ts.map +1 -1
  81. package/dist/compatibility/claude/projection.js +132 -2
  82. package/dist/compatibility/claude/projection.js.map +1 -1
  83. package/dist/compatibility/claude/schema.d.ts.map +1 -1
  84. package/dist/compatibility/claude/schema.js +34 -7
  85. package/dist/compatibility/claude/schema.js.map +1 -1
  86. package/dist/compatibility/claude/translation.d.ts +7 -0
  87. package/dist/compatibility/claude/translation.d.ts.map +1 -1
  88. package/dist/compatibility/claude/translation.js +20 -0
  89. package/dist/compatibility/claude/translation.js.map +1 -1
  90. package/dist/core/runtime.d.ts +19 -0
  91. package/dist/core/runtime.d.ts.map +1 -1
  92. package/dist/core/runtime.js +30 -11
  93. package/dist/core/runtime.js.map +1 -1
  94. package/dist/extensions/claude-extensions.d.ts +12 -0
  95. package/dist/extensions/claude-extensions.d.ts.map +1 -1
  96. package/dist/extensions/claude-extensions.js +49 -0
  97. package/dist/extensions/claude-extensions.js.map +1 -1
  98. package/dist/hooks/claude-hook-tools.js +2 -2
  99. package/dist/hooks/claude-hook-tools.js.map +1 -1
  100. package/dist/persistence/claude-transcript-store.d.ts.map +1 -1
  101. package/dist/persistence/claude-transcript-store.js +4 -3
  102. package/dist/persistence/claude-transcript-store.js.map +1 -1
  103. package/dist/tools/claude-interactive-tools.d.ts +1 -0
  104. package/dist/tools/claude-interactive-tools.d.ts.map +1 -1
  105. package/dist/tools/claude-interactive-tools.js +12 -0
  106. package/dist/tools/claude-interactive-tools.js.map +1 -1
  107. package/dist/tools/local-tools.d.ts.map +1 -1
  108. package/dist/tools/local-tools.js +11 -0
  109. package/dist/tools/local-tools.js.map +1 -1
  110. package/package.json +3 -2
@@ -0,0 +1,183 @@
1
+ export const BUILTIN_TUI_SLASH_COMMANDS = [
2
+ {
3
+ name: 'add-dir',
4
+ description: 'Add a new working directory',
5
+ source: 'builtin',
6
+ },
7
+ {
8
+ name: 'branch',
9
+ description: 'Create a branch of the current conversation at this point',
10
+ source: 'builtin',
11
+ },
12
+ {
13
+ name: 'cd',
14
+ description: 'Change the current working directory',
15
+ source: 'builtin',
16
+ },
17
+ {
18
+ name: 'help',
19
+ description: 'Show help and available commands',
20
+ source: 'builtin',
21
+ },
22
+ {
23
+ name: 'clear',
24
+ description: 'Start a new session with empty context; previous session stays on disk (resumable with /resume)',
25
+ source: 'builtin',
26
+ },
27
+ {
28
+ name: 'compact',
29
+ description: 'Clear conversation history but keep a summary in context',
30
+ source: 'builtin',
31
+ },
32
+ {
33
+ name: 'model',
34
+ description: 'Set the AI model for this session',
35
+ source: 'builtin',
36
+ },
37
+ {
38
+ name: 'effort',
39
+ description: 'Set effort level for model usage',
40
+ source: 'builtin',
41
+ },
42
+ {
43
+ name: 'export',
44
+ description: 'Export the current conversation',
45
+ source: 'builtin',
46
+ },
47
+ {
48
+ name: 'keybindings',
49
+ description: 'Open your keyboard shortcuts file',
50
+ source: 'builtin',
51
+ },
52
+ {
53
+ name: 'permissions',
54
+ description: 'Manage allow and deny tool permission rules',
55
+ source: 'builtin',
56
+ },
57
+ {
58
+ name: 'resume',
59
+ description: 'Resume a previous conversation',
60
+ source: 'builtin',
61
+ },
62
+ {
63
+ name: 'diff',
64
+ description: 'View uncommitted changes and per-turn diffs',
65
+ source: 'builtin',
66
+ },
67
+ {
68
+ name: 'context',
69
+ description: 'Visualize current context usage as a colored grid',
70
+ source: 'builtin',
71
+ },
72
+ {
73
+ name: 'config',
74
+ description: 'Open settings',
75
+ source: 'builtin',
76
+ },
77
+ {
78
+ name: 'copy',
79
+ description: "Copy Praxis's last response to clipboard (or /copy N for the Nth-latest)",
80
+ source: 'builtin',
81
+ },
82
+ {
83
+ name: 'status',
84
+ description: 'Show runtime status, configuration, usage, and statistics',
85
+ source: 'builtin',
86
+ },
87
+ {
88
+ name: 'skills',
89
+ description: 'List available skills',
90
+ source: 'builtin',
91
+ },
92
+ {
93
+ name: 'skill',
94
+ description: 'List available skills',
95
+ source: 'builtin',
96
+ },
97
+ {
98
+ name: 'mcp',
99
+ description: 'Manage MCP servers',
100
+ source: 'builtin',
101
+ },
102
+ {
103
+ name: 'reload-plugins',
104
+ description: 'Activate pending plugin changes in the current session',
105
+ source: 'builtin',
106
+ },
107
+ {
108
+ name: 'reload-skills',
109
+ description: 'Pick up skills added or changed on disk during this session',
110
+ source: 'builtin',
111
+ },
112
+ {
113
+ name: 'rename',
114
+ description: 'Rename the current conversation',
115
+ source: 'builtin',
116
+ },
117
+ {
118
+ name: 'rewind',
119
+ description: 'Restore the code and/or conversation to an earlier point',
120
+ source: 'builtin',
121
+ },
122
+ {
123
+ name: 'usage',
124
+ description: 'Show session cost, model usage, and activity stats',
125
+ source: 'builtin',
126
+ },
127
+ {
128
+ name: 'tasks',
129
+ description: 'View background work',
130
+ source: 'builtin',
131
+ },
132
+ {
133
+ name: 'plan',
134
+ description: 'Enable plan mode for this session',
135
+ source: 'builtin',
136
+ },
137
+ {
138
+ name: 'workflows',
139
+ description: 'Browse running and completed workflows',
140
+ source: 'builtin',
141
+ },
142
+ {
143
+ name: 'exit',
144
+ description: 'Exit the CLI',
145
+ source: 'builtin',
146
+ },
147
+ ];
148
+ function normalizedName(name) {
149
+ return name.replace(/^\/+/, '').trim();
150
+ }
151
+ export function mergeTuiSlashCommands(commands) {
152
+ const merged = new Map();
153
+ for (const command of [...BUILTIN_TUI_SLASH_COMMANDS, ...commands]) {
154
+ const name = normalizedName(command.name);
155
+ if (!name)
156
+ continue;
157
+ const key = name.toLowerCase();
158
+ if (merged.has(key))
159
+ continue;
160
+ merged.set(key, { ...command, name });
161
+ }
162
+ return [...merged.values()];
163
+ }
164
+ export function slashCommandQuery(input) {
165
+ if (!input.startsWith('/'))
166
+ return null;
167
+ const query = input.slice(1);
168
+ return /\s/u.test(query) ? null : query.toLowerCase();
169
+ }
170
+ export function filterTuiSlashCommands(commands, query) {
171
+ return [...commands]
172
+ .filter((command) => !query ||
173
+ command.name.toLowerCase().includes(query) ||
174
+ command.description.toLowerCase().includes(query))
175
+ .sort((left, right) => {
176
+ const leftPrefix = left.name.toLowerCase().startsWith(query);
177
+ const rightPrefix = right.name.toLowerCase().startsWith(query);
178
+ if (leftPrefix !== rightPrefix)
179
+ return leftPrefix ? -1 : 1;
180
+ return left.name.localeCompare(right.name);
181
+ });
182
+ }
183
+ //# sourceMappingURL=slash-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/cli/tui/slash-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function suspendTuiProcess(options?: {
2
+ write?(message: string): unknown;
3
+ stop?(): unknown;
4
+ }): void;
5
+ //# sourceMappingURL=terminal-suspend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-suspend.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/terminal-suspend.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE;IACP,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC,IAAI,CAAC,IAAI,OAAO,CAAA;CACZ,GACL,IAAI,CAKN"}
@@ -0,0 +1,9 @@
1
+ const SUSPEND_NOTICE = 'Praxis Code has been suspended. Run `fg` to bring Praxis Code back.\n' +
2
+ 'Note: ctrl + z now suspends Praxis Code, ctrl + _ undoes input.\n\n';
3
+ export function suspendTuiProcess(options = {}) {
4
+ const write = options.write ?? ((message) => process.stdout.write(message));
5
+ const stop = options.stop ?? (() => process.kill(process.pid, 'SIGTSTP'));
6
+ write(SUSPEND_NOTICE);
7
+ stop();
8
+ }
9
+ //# sourceMappingURL=terminal-suspend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-suspend.js","sourceRoot":"","sources":["../../../src/cli/tui/terminal-suspend.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAClB,uEAAuE;IACvE,qEAAqE,CAAA;AAEvE,MAAM,UAAU,iBAAiB,CAC/B,UAGI,EAAE;IAEN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;IACzE,KAAK,CAAC,cAAc,CAAC,CAAA;IACrB,IAAI,EAAE,CAAA;AACR,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function resolveTuiWorkspaceDirectory(input: string, cwd: string): Promise<string>;
2
+ export declare function completeTuiWorkspaceDirectory(input: string, cwd: string): Promise<string>;
3
+ //# sourceMappingURL=workspace-directories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-directories.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/workspace-directories.ts"],"names":[],"mappings":"AAUA,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAOjB;AAWD,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
@@ -0,0 +1,55 @@
1
+ import { readdir, realpath, stat } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve, sep } from 'node:path';
4
+ function expandHome(path) {
5
+ if (path === '~')
6
+ return homedir();
7
+ if (path.startsWith(`~${sep}`))
8
+ return join(homedir(), path.slice(2));
9
+ return path;
10
+ }
11
+ export async function resolveTuiWorkspaceDirectory(input, cwd) {
12
+ const value = input.trim();
13
+ if (!value)
14
+ throw new Error('Enter a directory path or press Esc.');
15
+ const path = await realpath(resolve(cwd, expandHome(value)));
16
+ if (!(await stat(path)).isDirectory())
17
+ throw new Error(`Not a directory: ${path}`);
18
+ return path;
19
+ }
20
+ function commonPrefix(values) {
21
+ if (values.length === 0)
22
+ return '';
23
+ let prefix = values[0] ?? '';
24
+ for (const value of values.slice(1)) {
25
+ while (!value.startsWith(prefix))
26
+ prefix = prefix.slice(0, -1);
27
+ }
28
+ return prefix;
29
+ }
30
+ export async function completeTuiWorkspaceDirectory(input, cwd) {
31
+ const expanded = expandHome(input);
32
+ const slash = Math.max(expanded.lastIndexOf('/'), expanded.lastIndexOf(sep));
33
+ const typedParent = slash === -1 ? '' : expanded.slice(0, slash + 1);
34
+ const typedName = slash === -1 ? expanded : expanded.slice(slash + 1);
35
+ const parent = resolve(cwd, typedParent || '.');
36
+ let entries;
37
+ try {
38
+ entries = (await readdir(parent, { withFileTypes: true }))
39
+ .filter((entry) => entry.isDirectory() && entry.name.startsWith(typedName))
40
+ .map((entry) => entry.name)
41
+ .sort();
42
+ }
43
+ catch {
44
+ return input;
45
+ }
46
+ const prefix = commonPrefix(entries);
47
+ if (!prefix || (prefix === typedName && entries.length !== 1))
48
+ return input;
49
+ const completed = `${typedParent}${prefix}${entries.length === 1 ? sep : ''}`;
50
+ if (input.startsWith('~') && completed.startsWith(homedir())) {
51
+ return `~${completed.slice(homedir().length)}`;
52
+ }
53
+ return completed;
54
+ }
55
+ //# sourceMappingURL=workspace-directories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-directories.js","sourceRoot":"","sources":["../../../src/cli/tui/workspace-directories.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { type ForkResult, type SessionInspection, type SessionRunResult, type SessionSummary } from './application/session-service.js';
2
+ import { type ForkResult, type ManualCompactResult, type ManualCompactSelection, type RewindPoint, type SessionInspection, type SessionRunResult, type SessionSummary } from './application/session-service.js';
3
+ import type { ClaudeDisplayTranscriptItem } from './compatibility/claude/projection.js';
3
4
  import { type ModelDocument, type ModelImage, type ModelProvider, type ModelToolCall, type PermissionApproval, type ToolRegistry, type RuntimeEventSink } from './core/runtime.js';
4
- import { type InteractiveResumeOptions, type InteractiveServiceFactory } from './cli/interactive.js';
5
+ import type { InteractiveResumeOptions, InteractiveServiceFactory } from './cli/interactive.js';
6
+ import type { TuiSlashCommand } from './cli/tui/slash-commands.js';
7
+ import { type ClaudePermissionMode } from './permissions/claude-permission-resolver.js';
5
8
  import { authenticateMcpServer } from './mcp/claude-mcp-oauth.js';
6
9
  import { servePraxisMcpStdio } from './mcp/praxis-mcp-server.js';
7
10
  import { parseContextEnvironment, parseProviderEnvironment } from './providers/environment.js';
@@ -22,8 +25,14 @@ interface SessionCommands {
22
25
  toolRegistry?: ToolRegistry;
23
26
  run(prompt: string, signal?: AbortSignal, sessionId?: string, name?: string, images?: readonly ModelImage[], documents?: readonly ModelDocument[]): Promise<SessionRunResult>;
24
27
  resume(sessionId: string, prompt: string, signal?: AbortSignal, name?: string, images?: readonly ModelImage[], documents?: readonly ModelDocument[]): Promise<SessionRunResult>;
25
- fork(sessionId: string, targetSessionId?: string): Promise<ForkResult>;
28
+ runShell?(command: string, signal?: AbortSignal, sessionId?: string, name?: string): Promise<SessionRunResult>;
29
+ resumeShell?(sessionId: string, command: string, signal?: AbortSignal, name?: string): Promise<SessionRunResult>;
30
+ fork(sessionId: string, targetSessionId?: string, resumeSessionAt?: string): Promise<ForkResult>;
31
+ setPermissionMode?(sessionId: string, mode: ClaudePermissionMode): Promise<void>;
26
32
  rewindFiles?(sessionId: string, userMessageId: string): Promise<void>;
33
+ rewindPoints?(sessionId: string): Promise<RewindPoint[]>;
34
+ changeCwd?(sessionId: string | undefined, cwd: string): Promise<string>;
35
+ recordCdUsage?(sessionId: string): Promise<void>;
27
36
  lifecycle?(trigger: 'init' | 'maintenance', options?: {
28
37
  sessionStart?: boolean;
29
38
  sessionId?: string;
@@ -31,12 +40,21 @@ interface SessionCommands {
31
40
  sessions(): Promise<SessionSummary[]>;
32
41
  inspect(sessionId: string): Promise<SessionInspection>;
33
42
  export(sessionId: string): Promise<Buffer>;
43
+ transcript?(sessionId: string): Promise<ClaudeDisplayTranscriptItem[]>;
44
+ compact?(sessionId: string, signal?: AbortSignal, selection?: ManualCompactSelection): Promise<ManualCompactResult>;
45
+ rename?(sessionId: string, name: string): Promise<void>;
46
+ sessionNameSuggestion?(sessionId: string, signal?: AbortSignal): Promise<string | null>;
34
47
  nextScheduledPrompt?(signal?: AbortSignal): Promise<{
35
48
  id: string;
36
49
  prompt: string;
37
50
  } | null>;
51
+ slashCommands?(): readonly TuiSlashCommand[];
38
52
  close?(): Promise<void>;
39
53
  runtimeInfo?(): CliRuntimeInfo;
54
+ agentDefinitions?(): readonly {
55
+ name: string;
56
+ description: string;
57
+ }[];
40
58
  promptSuggestion?(sessionId: string, signal?: AbortSignal): Promise<string | null>;
41
59
  }
42
60
  interface TopLevelAgentCommands {
@@ -64,6 +82,9 @@ export interface CliDependencies extends InteractiveServiceFactory {
64
82
  approveRecovery?: (call: ModelToolCall) => boolean | Promise<boolean>;
65
83
  approveTool?: (call: ModelToolCall, originalCall?: ModelToolCall) => PermissionApproval | Promise<PermissionApproval>;
66
84
  agent?: string;
85
+ model?: string;
86
+ effort?: CliControls['effort'];
87
+ permissionMode?: ClaudePermissionMode;
67
88
  controls?: CliControls;
68
89
  interactive?: boolean;
69
90
  sessionKind?: 'bg';
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAUA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAA;AACzC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAA;AAoBvF,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAGlE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,6CAA6C,CAAA;AAkBpD,OAAO,EACL,qBAAqB,EAItB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAShE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,4BAA4B,CAAA;AAInC,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,qCAAqC,CAAA;AAE5C,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,0CAA0C,CAAA;AAIjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAOL,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAI1B,MAAM,mBAAmB,CAAA;AA6B1B,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAA;AAUxC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAA;AA2rBrC,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,CAAA;AAE5D,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;IAC1C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;CAC1D;AAED,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,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,EAC9B,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,GACnC,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,EAC9B,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,QAAQ,CAAC,CACP,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,WAAW,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,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,iBAAiB,CAAC,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,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,SAAS,CAAC,CACR,OAAO,EAAE,MAAM,GAAG,aAAa,EAC/B,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IACrC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACtD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,UAAU,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAA;IACtE,OAAO,CAAC,CACN,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/B,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,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,aAAa,CAAC,IAAI,SAAS,eAAe,EAAE,CAAA;IAC5C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,WAAW,CAAC,IAAI,cAAc,CAAA;IAC9B,gBAAgB,CAAC,IAAI,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACrE,gBAAgB,CAAC,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC1B;AAED,UAAU,qBAAqB;IAC7B,MAAM,CAAC,OAAO,EAAE;QACd,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;IAC9E,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,EACzC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,yBAAyB;IAChE,aAAa,CAAC,OAAO,EAAE;QACrB,SAAS,EAAE,gBAAgB,CAAA;QAC3B,eAAe,EAAE,OAAO,CAAA;QACxB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACrE,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,aAAa,EACnB,YAAY,CAAC,EAAE,aAAa,KACzB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;QACrD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;QAC9B,cAAc,CAAC,EAAE,oBAAoB,CAAA;QACrC,QAAQ,CAAC,EAAE,WAAW,CAAA;QACtB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,WAAW,CAAC,EAAE,IAAI,CAAA;QAClB,MAAM,CAAC,EAAE,WAAW,CAAA;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;QAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAA;QAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9C,mBAAmB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;QACvC,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;KAC5D,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5B,oBAAoB,CAAC,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC1E,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,cAAc,CAAC,CAAC,OAAO,EAAE;QACvB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,WAAW,CAAA;QACtB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,MAAM,CAAC,EAAE,wBAAwB,GAAG;YAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;QAC9D,MAAM,CAAC,EAAE,WAAW,CAAA;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnB,kBAAkB,CAAC,CAAC,OAAO,EAAE;QAC3B,OAAO,EAAE,qBAAqB,CAAA;QAC9B,QAAQ,EAAE;YAAE,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QACnD,MAAM,CAAC,EAAE,WAAW,CAAA;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnB,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAA;IACtC,eAAe,CAAC,EAAE,OAAO,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,EAAE,OAAO,mBAAmB,CAAA;IACrC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;QACrB,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAA;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAChC;AAq+BD,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,EAC5B,aAAa,GAAE,eAAe,CAAC,eAAe,CAAwB,GACrE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAYhE;AAi1FD,wBAAsB,GAAG,CACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAAiB,EACrB,YAAY,GAAE,eAAqC,EACnD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
package/dist/cli.js CHANGED
@@ -13,8 +13,6 @@ import { createClaudePrSessionFilter, filterClaudePrLinkedSessions, } from './co
13
13
  import { isClaudeSessionId, resolveClaudePaths, } from './compatibility/claude/paths.js';
14
14
  import { loadClaudeContextResources, loadClaudeSettings, loadClaudeSharedResources, resolveClaudeProjectMemoryDirectory, } from './compatibility/claude/shared-resources.js';
15
15
  import { AgentRunCancelledError, } from './core/runtime.js';
16
- import { runInteractive as renderInteractive, } from './cli/interactive.js';
17
- import { runAgentsDashboard as renderAgentsDashboard } from './cli/agents-dashboard.js';
18
16
  import { DEFAULT_CLI_CONTROLS, resolveCliControls } from './cli/controls.js';
19
17
  import { createCliDebugSink } from './cli/debug.js';
20
18
  import { ClaudePermissionResolver, } from './permissions/claude-permission-resolver.js';
@@ -687,7 +685,7 @@ const consoleIO = {
687
685
  isTTY: Boolean(process.stdin.isTTY && process.stdout.isTTY),
688
686
  readStdinLines: () => process.stdin,
689
687
  };
690
- const createDefaultService = async ({ eventSink, requireProvider, approveRecovery, approveTool, agent, controls = DEFAULT_CLI_CONTROLS, interactive = false, sessionKind, signal, exposeToolRegistry = false, onElicitation, askUser, approvePlan, emitToolUseSummaries = false, cwd: requestedCwd, configRoot: requestedConfigRoot, environment, providerEnvironment: requestedProviderEnvironment, }) => {
688
+ const createDefaultService = async ({ eventSink, requireProvider, approveRecovery, approveTool, agent, model: interactiveModel, effort: interactiveEffort, permissionMode: interactivePermissionMode, controls = DEFAULT_CLI_CONTROLS, interactive = false, sessionKind, signal, exposeToolRegistry = false, onElicitation, askUser, approvePlan, emitToolUseSummaries = false, cwd: requestedCwd, configRoot: requestedConfigRoot, environment, providerEnvironment: requestedProviderEnvironment, }) => {
691
689
  const runtimeEnvironment = requestedProviderEnvironment ?? process.env;
692
690
  const claudeVersion = await detectInstalledClaudeVersion();
693
691
  const cwd = requestedCwd ?? process.cwd();
@@ -697,7 +695,14 @@ const createDefaultService = async ({ eventSink, requireProvider, approveRecover
697
695
  const claudeStatePath = requestedConfigRoot || configuredRoot
698
696
  ? join(configRoot, '.claude.json')
699
697
  : resolve(homedir(), '.claude.json');
700
- const cli = await resolveCliControls(controls, cwd);
698
+ const cli = await resolveCliControls({
699
+ ...controls,
700
+ ...(interactiveModel === undefined ? {} : { model: interactiveModel }),
701
+ ...(interactiveEffort === undefined ? {} : { effort: interactiveEffort }),
702
+ ...(interactivePermissionMode === undefined
703
+ ? {}
704
+ : { permissionMode: interactivePermissionMode }),
705
+ }, cwd);
701
706
  const debug = cli.debug !== undefined || cli.debugFile !== undefined
702
707
  ? createCliDebugSink(eventSink, {
703
708
  cwd,
@@ -1121,6 +1126,9 @@ const createDefaultService = async ({ eventSink, requireProvider, approveRecover
1121
1126
  const runtimeInfo = {
1122
1127
  cwd: workspace.cwd(),
1123
1128
  model: provider?.model ?? runtimeEnvironment.PRAXIS_MODEL ?? 'unknown',
1129
+ ...(provider?.capabilities.contextWindowTokens === undefined
1130
+ ? {}
1131
+ : { contextWindowTokens: provider.capabilities.contextWindowTokens }),
1124
1132
  tools: toolNames,
1125
1133
  mcpServers: mcpTools.serverStatuses(),
1126
1134
  permissionMode: cli.dangerouslySkipPermissions
@@ -1151,12 +1159,22 @@ const createDefaultService = async ({ eventSink, requireProvider, approveRecover
1151
1159
  pendingResumeSessionAt = undefined;
1152
1160
  return service.resume(sessionId, prompt, signal, name ?? cli.name, images, documents, resumeSessionAt);
1153
1161
  },
1154
- fork: (sessionId, targetSessionId) => {
1162
+ runShell: (command, signal, sessionId, name) => service.runShell(command, signal, sessionId, name ?? cli.name),
1163
+ resumeShell: (sessionId, command, signal, name) => {
1155
1164
  const resumeSessionAt = pendingResumeSessionAt;
1156
1165
  pendingResumeSessionAt = undefined;
1166
+ return service.resumeShell(sessionId, command, signal, name ?? cli.name, resumeSessionAt);
1167
+ },
1168
+ fork: (sessionId, targetSessionId, requestedResumeSessionAt) => {
1169
+ const resumeSessionAt = requestedResumeSessionAt ?? pendingResumeSessionAt;
1170
+ pendingResumeSessionAt = undefined;
1157
1171
  return service.fork(sessionId, targetSessionId, resumeSessionAt);
1158
1172
  },
1173
+ setPermissionMode: (sessionId, permissionMode) => service.setPermissionMode(sessionId, permissionMode),
1159
1174
  rewindFiles: (sessionId, userMessageId) => service.rewindFiles(sessionId, userMessageId),
1175
+ rewindPoints: (sessionId) => service.rewindPoints(sessionId),
1176
+ changeCwd: (sessionId, cwd) => service.changeCwd(sessionId, cwd),
1177
+ recordCdUsage: (sessionId) => service.recordCdUsage(sessionId),
1160
1178
  lifecycle: async (trigger, lifecycleOptions = {}) => {
1161
1179
  if (!hooks)
1162
1180
  return;
@@ -1190,8 +1208,18 @@ const createDefaultService = async ({ eventSink, requireProvider, approveRecover
1190
1208
  }
1191
1209
  },
1192
1210
  sessions: () => service.sessions(),
1211
+ slashCommands: () => extensions.slashCommandDefinitions().map((definition) => ({
1212
+ name: definition.name,
1213
+ description: definition.description,
1214
+ source: definition.kind,
1215
+ })),
1216
+ agentDefinitions: () => extensions.agentDefinitions(),
1193
1217
  inspect: (sessionId) => service.inspect(sessionId),
1194
1218
  export: (sessionId) => service.export(sessionId),
1219
+ transcript: (sessionId) => service.transcript(sessionId, pendingResumeSessionAt),
1220
+ compact: (sessionId, signal, selection) => service.compact(sessionId, signal, selection),
1221
+ rename: (sessionId, name) => service.rename(sessionId, name),
1222
+ sessionNameSuggestion: (sessionId, signal) => service.sessionNameSuggestion(sessionId, signal),
1195
1223
  nextScheduledPrompt: (signal) => service.nextScheduledPrompt(signal),
1196
1224
  close: async () => {
1197
1225
  let failure;
@@ -1398,41 +1426,70 @@ const defaultDependencies = {
1398
1426
  runtimeFactory: defaultPluginEvalRuntimeFactory,
1399
1427
  judge: defaultPluginEvalJudge,
1400
1428
  },
1401
- runInteractive: ({ agent, controls, initialPrompt, resume, signal }) => renderInteractive({
1402
- factory: {
1403
- createService: (options) => createDefaultService({
1404
- ...options,
1405
- ...(agent === undefined ? {} : { agent }),
1406
- ...(controls === undefined ? {} : { controls }),
1407
- interactive: true,
1408
- }),
1409
- scheduledPrompts: true,
1410
- },
1411
- ...(signal ? { signal } : {}),
1412
- ...(initialPrompt === undefined ? {} : { initialPrompt }),
1413
- ...(controls?.axScreenReader ? { axScreenReader: true } : {}),
1414
- ...(resume === undefined ? {} : { resume }),
1415
- ...(resume?.fromPr !== undefined
1416
- ? {
1417
- sessionFilter: createClaudePrSessionFilter(resume.fromPr),
1418
- requireSession: true,
1419
- }
1420
- : resume?.sessionSelector === undefined
1421
- ? {}
1422
- : {
1423
- sessionFilter: createResumeSessionFilter(resume.sessionSelector),
1424
- requireSession: true,
1425
- missingSessionMessage: isClaudeSessionId(resume.sessionSelector)
1426
- ? `No conversation found with session ID: ${resume.sessionSelector}`
1427
- : `No conversation found matching: ${resume.sessionSelector}`,
1429
+ runInteractive: async ({ agent, controls, initialPrompt, resume, signal, }) => {
1430
+ const { runInteractive } = await import('./cli/interactive.js');
1431
+ const interactiveControls = controls ?? DEFAULT_CLI_CONTROLS;
1432
+ const initialAdditionalDirectories = interactiveControls.addDirectories.map((directory) => realpathSync(resolve(process.cwd(), directory)));
1433
+ return runInteractive({
1434
+ factory: {
1435
+ createService: ({ additionalDirectories, cwd, ...options }) => createDefaultService({
1436
+ ...options,
1437
+ ...(cwd === undefined ? {} : { cwd }),
1438
+ ...(agent === undefined ? {} : { agent }),
1439
+ controls: {
1440
+ ...interactiveControls,
1441
+ addDirectories: additionalDirectories ?? interactiveControls.addDirectories,
1442
+ },
1443
+ interactive: true,
1428
1444
  }),
1429
- ...(resume?.requireSession ? { requireSession: true } : {}),
1430
- }),
1431
- runAgentsDashboard: ({ manager, defaults, signal }) => renderAgentsDashboard({
1432
- manager,
1433
- defaults,
1434
- ...(signal ? { signal } : {}),
1435
- }),
1445
+ scheduledPrompts: true,
1446
+ },
1447
+ ...(signal ? { signal } : {}),
1448
+ ...(initialPrompt === undefined ? {} : { initialPrompt }),
1449
+ ...(controls?.axScreenReader ? { axScreenReader: true } : {}),
1450
+ ...(controls?.allowDangerouslySkipPermissions
1451
+ ? { allowDangerouslySkipPermissions: true }
1452
+ : {}),
1453
+ additionalDirectories: initialAdditionalDirectories,
1454
+ display: {
1455
+ version: VERSION,
1456
+ cwd: process.cwd(),
1457
+ ...(controls?.model
1458
+ ? { model: controls.model }
1459
+ : process.env.PRAXIS_MODEL
1460
+ ? { model: process.env.PRAXIS_MODEL }
1461
+ : {}),
1462
+ effort: controls?.effort ?? 'high',
1463
+ permissionMode: controls?.dangerouslySkipPermissions
1464
+ ? 'bypassPermissions'
1465
+ : (controls?.permissionMode ?? 'default'),
1466
+ },
1467
+ ...(resume === undefined ? {} : { resume }),
1468
+ ...(resume?.fromPr !== undefined
1469
+ ? {
1470
+ sessionFilter: createClaudePrSessionFilter(resume.fromPr),
1471
+ requireSession: true,
1472
+ }
1473
+ : resume?.sessionSelector === undefined
1474
+ ? {}
1475
+ : {
1476
+ sessionFilter: createResumeSessionFilter(resume.sessionSelector),
1477
+ requireSession: true,
1478
+ missingSessionMessage: isClaudeSessionId(resume.sessionSelector)
1479
+ ? `No conversation found with session ID: ${resume.sessionSelector}`
1480
+ : `No conversation found matching: ${resume.sessionSelector}`,
1481
+ }),
1482
+ ...(resume?.requireSession ? { requireSession: true } : {}),
1483
+ });
1484
+ },
1485
+ runAgentsDashboard: async ({ manager, defaults, signal }) => {
1486
+ const { runAgentsDashboard } = await import('./cli/agents-dashboard.js');
1487
+ return runAgentsDashboard({
1488
+ manager,
1489
+ defaults,
1490
+ ...(signal ? { signal } : {}),
1491
+ });
1492
+ },
1436
1493
  topLevelAgents: new TopLevelAgentManager({
1437
1494
  configRoot: resolve(process.env.CLAUDE_CONFIG_DIR ?? resolve(homedir(), '.claude')),
1438
1495
  cwd: process.cwd(),