praxis-agent 0.12.0 → 0.14.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 +13 -4
- package/dist/application/subagent-service.d.ts +1 -1
- package/dist/application/subagent-service.js +33 -2
- package/dist/cli/interactive.d.ts +4 -1
- package/dist/cli/interactive.js +69 -5
- package/dist/cli/tui/claude-command-inventory.d.ts +35 -19
- package/dist/cli/tui/claude-command-inventory.js +98 -18
- package/dist/cli/tui/release-notes.d.ts +10 -0
- package/dist/cli/tui/release-notes.js +60 -0
- package/dist/cli/tui/slash-commands.d.ts +1 -0
- package/dist/cli/tui/slash-commands.js +5 -0
- package/dist/cli/tui/status-line.d.ts +88 -0
- package/dist/cli/tui/status-line.js +234 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +50 -1
- package/dist/extensions/claude-extensions.d.ts +5 -0
- package/dist/extensions/claude-extensions.js +78 -3
- package/dist/extensions/claude-init-command.d.ts +4 -0
- package/dist/extensions/claude-init-command.js +72 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,11 @@ Anthropic/OpenAI-compatible model access. Praxis deliberately excludes
|
|
|
15
15
|
accounts, organizations, billing, managed enterprise policy, remote control,
|
|
16
16
|
IDE surfaces, and telemetry control planes.
|
|
17
17
|
|
|
18
|
+
Claude Code 2.1.208 is the compatibility, architecture, and design baseline.
|
|
19
|
+
Every single-user CLI capability remains required unless it falls inside an
|
|
20
|
+
explicit exclusion above. A similar Praxis surface is not a substitute for the
|
|
21
|
+
corresponding Claude command or runtime contract.
|
|
22
|
+
|
|
18
23
|
## Requirements
|
|
19
24
|
|
|
20
25
|
- macOS or Linux
|
|
@@ -87,8 +92,11 @@ troubleshooting. Run `praxis --help` for the authoritative command surface.
|
|
|
87
92
|
`/rewind`, runtime `/cd`, transcript-free
|
|
88
93
|
`/btw` side questions with background-Agent handoff, interactive
|
|
89
94
|
`/background` terminal handoff, unified `/status`/`/config`/`/usage` settings
|
|
90
|
-
tabs, `/sandbox` mode/dependency/override/config controls,
|
|
91
|
-
|
|
95
|
+
tabs, `/sandbox` mode/dependency/override/config controls, local cached
|
|
96
|
+
`/release-notes`, Claude-compatible `/statusline` command execution and setup
|
|
97
|
+
agent, source-aligned `/init` project-instruction onboarding with its enhanced
|
|
98
|
+
skills/hooks flow, `/mcp`, `/memory` shared instruction and auto-memory
|
|
99
|
+
access, and live extension-reload controls,
|
|
92
100
|
cursor/history composer, per-session model/effort/permission controls,
|
|
93
101
|
context/status/skill/task dashboards, prompt stash and continuation shortcuts,
|
|
94
102
|
filterable `@` file and agent references, composer undo, `Ctrl+G` external
|
|
@@ -177,8 +185,9 @@ for exact shared data, version boundaries, exclusions, and verification gates.
|
|
|
177
185
|
|
|
178
186
|
Praxis targets one local OS user working across multiple repositories and
|
|
179
187
|
sessions. It is CLI-only and provider-capability-aware. Organization, tenant,
|
|
180
|
-
RBAC, billing, enterprise gateway,
|
|
181
|
-
|
|
188
|
+
RBAC, subscription authentication and billing, enterprise gateway,
|
|
189
|
+
IDE/Desktop/mobile clients, Remote Control, Claude Desktop import, and hosted
|
|
190
|
+
review-product surfaces are permanent non-goals.
|
|
182
191
|
|
|
183
192
|
## Security and support
|
|
184
193
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ClaudeSidechainPermissionMode } from '../compatibility/claude/sidechain.js';
|
|
2
2
|
import { type ContextAssembler } from '../core/context.js';
|
|
3
3
|
import { type ModelProvider, type ModelToolCall, type ModelToolDefinition, type ModelUsage, type PermissionResolver, type PermissionApproval, type PermissionDecision, type PermissionUpdate, type RuntimeEventSink, type ToolExecutionContext, type ToolExecutionResult, type ToolRegistry } from '../core/runtime.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type ClaudeExtensionCatalog } from '../extensions/claude-extensions.js';
|
|
5
5
|
import type { ClaudeHookRunner } from '../hooks/claude-hooks.js';
|
|
6
6
|
import { type BackgroundAgentSnapshot } from './background-agent-manager.js';
|
|
7
7
|
export interface WorkflowAgentRunOptions {
|
|
@@ -11,6 +11,7 @@ import { createClaudeHookAttachmentEntries, translateProviderEvents, } from '../
|
|
|
11
11
|
import { injectFirstUserMessageContext, } from '../core/context.js';
|
|
12
12
|
import { ContextBudget } from '../core/context-budget.js';
|
|
13
13
|
import { AgentRuntime, } from '../core/runtime.js';
|
|
14
|
+
import { BUILTIN_STATUSLINE_AGENT_PATH, } from '../extensions/claude-extensions.js';
|
|
14
15
|
import { ClaudeHookToolCoordinator } from '../hooks/claude-hook-tools.js';
|
|
15
16
|
import { ClaudeSidechainStore } from '../persistence/claude-sidechain-store.js';
|
|
16
17
|
import { InMemorySidechainStore } from '../persistence/in-memory-sidechain-store.js';
|
|
@@ -79,6 +80,29 @@ export class StructuredOutputRegistry {
|
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
class RestrictedToolRegistry {
|
|
84
|
+
base;
|
|
85
|
+
allowed;
|
|
86
|
+
constructor(base, names) {
|
|
87
|
+
this.base = base;
|
|
88
|
+
this.allowed = new Set(names);
|
|
89
|
+
}
|
|
90
|
+
definitions() {
|
|
91
|
+
return this.base
|
|
92
|
+
.definitions()
|
|
93
|
+
.filter((definition) => this.allowed.has(definition.name));
|
|
94
|
+
}
|
|
95
|
+
prepare(call, context) {
|
|
96
|
+
if (!this.allowed.has(call.name))
|
|
97
|
+
throw new Error(`Tool ${call.name} is unavailable to this agent`);
|
|
98
|
+
return this.base.prepare(call, context);
|
|
99
|
+
}
|
|
100
|
+
execute(call, context) {
|
|
101
|
+
if (!this.allowed.has(call.name))
|
|
102
|
+
throw new Error(`Tool ${call.name} is unavailable to this agent`);
|
|
103
|
+
return this.base.execute(call, context);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
82
106
|
function parseAgentInput(call) {
|
|
83
107
|
const allowed = new Set([
|
|
84
108
|
'description',
|
|
@@ -942,9 +966,16 @@ export class ClaudeSubagentExecutor {
|
|
|
942
966
|
permission_mode: options.input.permissionMode ?? 'default',
|
|
943
967
|
};
|
|
944
968
|
const nestedTools = this.registry(String(options.root.sessionId), options.spawnDepth, () => options.promptId);
|
|
945
|
-
const
|
|
946
|
-
|
|
969
|
+
const builtInStatusLineAgent = this.options.extensions?.agent(options.input.subagentType)?.path ===
|
|
970
|
+
BUILTIN_STATUSLINE_AGENT_PATH;
|
|
971
|
+
const scopedTools = builtInStatusLineAgent
|
|
972
|
+
? new RestrictedToolRegistry(nestedTools, ['Read', 'Edit'])
|
|
947
973
|
: nestedTools;
|
|
974
|
+
const agentTools = options.outputSchema
|
|
975
|
+
? new StructuredOutputRegistry(builtInStatusLineAgent
|
|
976
|
+
? new RestrictedToolRegistry(structuredOnlyTools, ['Read', 'Edit'])
|
|
977
|
+
: structuredOnlyTools, options.outputSchema, options.structuredOutput)
|
|
978
|
+
: scopedTools;
|
|
948
979
|
const runtimeTools = this.options.hooks
|
|
949
980
|
? new ClaudeHookToolCoordinator({
|
|
950
981
|
tools: agentTools,
|
|
@@ -175,8 +175,10 @@ interface InteractiveAppProps {
|
|
|
175
175
|
runtimeSettingsTarget?: ConfigSettingsTarget;
|
|
176
176
|
notificationWriter?: TuiNotificationWriter;
|
|
177
177
|
elicitationUrlOpener?: (url: string) => void | Promise<void>;
|
|
178
|
+
releaseNotesLoader?: (configRoot: string) => Promise<string>;
|
|
179
|
+
settingSources?: readonly ClaudeResourceScope[];
|
|
178
180
|
}
|
|
179
|
-
export declare function InteractiveApp({ factory, initialSessions, initialPrompt, initialHistory, signal, onCancel, onTurnChange, onCleanup, onRendererChange, onBackground, axScreenReader, allowNewSession, resume, display, terminalWidth, slashCommands, agents, allowDangerouslySkipPermissions, additionalDirectories, diffLoader, fileLoader, externalEditor, keybindingsConfigRoot, keybindingsFile, keybindingsLoader, keybindingsEditor, memoryFilesLoader, memoryEditor, memoryFolderOpener, suspendProcess, clipboardReader, clipboardWriter, sideQuestionClipboardWriter, exportWriter, permissionRuleStore, sandboxStore: suppliedSandboxStore, recentlyDeniedStore: suppliedRecentlyDeniedStore, terminalSetup: terminalSetupOverride, themeStore, initialThemeSettings, initialThemeLoadError, workspaceDirectoryResolver, workspaceDirectoryCompleter, runtimeSettings: suppliedRuntimeSettings, runtimeSettingsTarget, notificationWriter, elicitationUrlOpener, }: InteractiveAppProps): import("react").JSX.Element;
|
|
181
|
+
export declare function InteractiveApp({ factory, initialSessions, initialPrompt, initialHistory, signal, onCancel, onTurnChange, onCleanup, onRendererChange, onBackground, axScreenReader, allowNewSession, resume, display, terminalWidth, slashCommands, agents, allowDangerouslySkipPermissions, additionalDirectories, diffLoader, fileLoader, externalEditor, keybindingsConfigRoot, keybindingsFile, keybindingsLoader, keybindingsEditor, memoryFilesLoader, memoryEditor, memoryFolderOpener, suspendProcess, clipboardReader, clipboardWriter, sideQuestionClipboardWriter, exportWriter, permissionRuleStore, sandboxStore: suppliedSandboxStore, recentlyDeniedStore: suppliedRecentlyDeniedStore, terminalSetup: terminalSetupOverride, themeStore, initialThemeSettings, initialThemeLoadError, workspaceDirectoryResolver, workspaceDirectoryCompleter, runtimeSettings: suppliedRuntimeSettings, runtimeSettingsTarget, notificationWriter, elicitationUrlOpener, releaseNotesLoader, settingSources, }: InteractiveAppProps): import("react").JSX.Element;
|
|
180
182
|
export declare function runInteractive(options: {
|
|
181
183
|
factory: InteractiveServiceFactory;
|
|
182
184
|
initialPrompt?: string;
|
|
@@ -192,6 +194,7 @@ export declare function runInteractive(options: {
|
|
|
192
194
|
onBackground?: (request: InteractiveBackgroundRequest) => Promise<InteractiveBackgroundResult>;
|
|
193
195
|
onBackgrounded?: (result: InteractiveBackgroundResult) => void;
|
|
194
196
|
runtimeSettings?: PraxisRuntimeSettings;
|
|
197
|
+
settingSources?: readonly ClaudeResourceScope[];
|
|
195
198
|
}): Promise<number>;
|
|
196
199
|
export {};
|
|
197
200
|
//# sourceMappingURL=interactive.d.ts.map
|
package/dist/cli/interactive.js
CHANGED
|
@@ -12,6 +12,8 @@ import { claudePermissionActionKey, claudePermissionRuleMatches, } from '../perm
|
|
|
12
12
|
import { redactSensitiveText, sensitiveEnvironmentValues, } from '../platform/sensitive-data.js';
|
|
13
13
|
import { CommandPalette, BtwPanel, Composer, DiffDashboard, DialogFrame, ExternalEditorWait, HelpMenu, HookDashboard, ListDashboard, MemoryDashboard, MentionPicker, ModelMenu, PermissionDashboard, SelectionMenu, SessionPicker, ThemePicker, CustomThemeEditor, Transcript, WelcomePanel, useTerminalWidth, } from './tui/claude-style.js';
|
|
14
14
|
import { loadTuiMemoryFiles, openTuiMemoryFolder, } from './tui/memory-files.js';
|
|
15
|
+
import { loadClaudeReleaseNotes } from './tui/release-notes.js';
|
|
16
|
+
import { createClaudeStatusLineInput, StatusLine } from './tui/status-line.js';
|
|
15
17
|
import { loadGitDiff, visiblePatchLines, } from './tui/git-diff.js';
|
|
16
18
|
import { addTuiPermissionRule, loadTuiPermissionRules, removeTuiPermissionRule, } from './tui/permission-settings.js';
|
|
17
19
|
import { createRecentlyDeniedStore, } from './tui/recently-denied.js';
|
|
@@ -245,7 +247,7 @@ const HIDDEN_TUI_SLASH_COMMANDS = new Set([
|
|
|
245
247
|
'update',
|
|
246
248
|
'usage',
|
|
247
249
|
]);
|
|
248
|
-
export function InteractiveApp({ factory, initialSessions, initialPrompt, initialHistory = [], signal, onCancel, onTurnChange, onCleanup, onRendererChange, onBackground, axScreenReader = false, allowNewSession = true, resume, display = { version: 'dev', cwd: process.cwd() }, terminalWidth, slashCommands = EMPTY_SLASH_COMMANDS, agents = EMPTY_AGENTS, allowDangerouslySkipPermissions = false, additionalDirectories = [], diffLoader, fileLoader, externalEditor = editTuiPrompt, keybindingsConfigRoot, keybindingsFile = ensureTuiKeybindingsFile, keybindingsLoader = loadTuiKeybindings, keybindingsEditor = openTuiEditorFile, memoryFilesLoader = (configRoot, cwd) => loadTuiMemoryFiles({ configRoot, cwd }), memoryEditor = openTuiEditorFile, memoryFolderOpener = openTuiMemoryFolder, suspendProcess = suspendTuiProcess, clipboardReader = readTuiClipboard, clipboardWriter = writeTuiClipboard, sideQuestionClipboardWriter = writeTuiOsc52Clipboard, exportWriter = writeConversationExport, permissionRuleStore, sandboxStore: suppliedSandboxStore, recentlyDeniedStore: suppliedRecentlyDeniedStore, terminalSetup: terminalSetupOverride, themeStore, initialThemeSettings, initialThemeLoadError, workspaceDirectoryResolver = resolveTuiWorkspaceDirectory, workspaceDirectoryCompleter = completeTuiWorkspaceDirectory, runtimeSettings: suppliedRuntimeSettings, runtimeSettingsTarget, notificationWriter, elicitationUrlOpener = openTuiUrl, }) {
|
|
250
|
+
export function InteractiveApp({ factory, initialSessions, initialPrompt, initialHistory = [], signal, onCancel, onTurnChange, onCleanup, onRendererChange, onBackground, axScreenReader = false, allowNewSession = true, resume, display = { version: 'dev', cwd: process.cwd() }, terminalWidth, slashCommands = EMPTY_SLASH_COMMANDS, agents = EMPTY_AGENTS, allowDangerouslySkipPermissions = false, additionalDirectories = [], diffLoader, fileLoader, externalEditor = editTuiPrompt, keybindingsConfigRoot, keybindingsFile = ensureTuiKeybindingsFile, keybindingsLoader = loadTuiKeybindings, keybindingsEditor = openTuiEditorFile, memoryFilesLoader = (configRoot, cwd) => loadTuiMemoryFiles({ configRoot, cwd }), memoryEditor = openTuiEditorFile, memoryFolderOpener = openTuiMemoryFolder, suspendProcess = suspendTuiProcess, clipboardReader = readTuiClipboard, clipboardWriter = writeTuiClipboard, sideQuestionClipboardWriter = writeTuiOsc52Clipboard, exportWriter = writeConversationExport, permissionRuleStore, sandboxStore: suppliedSandboxStore, recentlyDeniedStore: suppliedRecentlyDeniedStore, terminalSetup: terminalSetupOverride, themeStore, initialThemeSettings, initialThemeLoadError, workspaceDirectoryResolver = resolveTuiWorkspaceDirectory, workspaceDirectoryCompleter = completeTuiWorkspaceDirectory, runtimeSettings: suppliedRuntimeSettings, runtimeSettingsTarget, notificationWriter, elicitationUrlOpener = openTuiUrl, releaseNotesLoader = (configRoot) => loadClaudeReleaseNotes({ configRoot }), settingSources, }) {
|
|
249
251
|
const { exit, suspendTerminal, waitUntilRenderFlush } = useApp();
|
|
250
252
|
const width = useTerminalWidth(terminalWidth);
|
|
251
253
|
const keybindingsRoot = useMemo(() => resolve(keybindingsConfigRoot ??
|
|
@@ -299,6 +301,7 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
299
301
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
300
302
|
const selectedIndexRef = useRef(0);
|
|
301
303
|
const [sessionId, setSessionId] = useState(resume?.sessionId ?? null);
|
|
304
|
+
const statusLineSessionId = useRef(resume?.sessionId ?? randomUUID());
|
|
302
305
|
const sessionIdRef = useRef(resume?.sessionId ?? null);
|
|
303
306
|
sessionIdRef.current = sessionId;
|
|
304
307
|
const [sessionName, setSessionName] = useState(null);
|
|
@@ -2265,10 +2268,14 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
2265
2268
|
setBusy(true);
|
|
2266
2269
|
setTurnDuration(undefined);
|
|
2267
2270
|
setCommandPaletteOpen(false);
|
|
2268
|
-
|
|
2271
|
+
const submittedCommandName = /^\/([^\s]+)/u.exec(prompt)?.[1]?.toLowerCase();
|
|
2272
|
+
const commandProgressMessage = submittedCommandName
|
|
2273
|
+
? allSlashCommands.find((command) => command.name.toLowerCase() === submittedCommandName)?.progressMessage
|
|
2274
|
+
: undefined;
|
|
2275
|
+
setStatus(commandProgressMessage ?? 'assembling-context');
|
|
2269
2276
|
setActiveText('');
|
|
2270
2277
|
setActiveThinking('');
|
|
2271
|
-
if (runtimeSettingsRef.current.tips) {
|
|
2278
|
+
if (runtimeSettingsRef.current.tips && !commandProgressMessage) {
|
|
2272
2279
|
setStatus(spinnerTip(runtimeSettingsRef.current) ?? 'assembling-context');
|
|
2273
2280
|
}
|
|
2274
2281
|
if (shellCommand === undefined)
|
|
@@ -4799,11 +4806,13 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
4799
4806
|
updateMenu({ kind: 'help', tabIndex: 0, selectedIndex: 0 });
|
|
4800
4807
|
}
|
|
4801
4808
|
else if (prompt === '/new') {
|
|
4809
|
+
statusLineSessionId.current = randomUUID();
|
|
4802
4810
|
setSessionId(null);
|
|
4803
4811
|
setPendingFork(false);
|
|
4804
4812
|
append({ kind: 'notice', text: 'Started a new session.' });
|
|
4805
4813
|
}
|
|
4806
4814
|
else if (prompt === '/clear') {
|
|
4815
|
+
statusLineSessionId.current = randomUUID();
|
|
4807
4816
|
setSessionId(null);
|
|
4808
4817
|
setPendingFork(false);
|
|
4809
4818
|
setHistory([]);
|
|
@@ -5176,6 +5185,27 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
5176
5185
|
else if (prompt === '/status') {
|
|
5177
5186
|
openSettings('status');
|
|
5178
5187
|
}
|
|
5188
|
+
else if (prompt === '/release-notes') {
|
|
5189
|
+
const loading = (async () => {
|
|
5190
|
+
setBusy(true);
|
|
5191
|
+
setStatus('loading release notes');
|
|
5192
|
+
try {
|
|
5193
|
+
append({
|
|
5194
|
+
kind: 'local-result',
|
|
5195
|
+
text: await releaseNotesLoader(keybindingsRoot),
|
|
5196
|
+
});
|
|
5197
|
+
}
|
|
5198
|
+
catch (error) {
|
|
5199
|
+
warn(error);
|
|
5200
|
+
}
|
|
5201
|
+
finally {
|
|
5202
|
+
setBusy(false);
|
|
5203
|
+
setStatus('ready');
|
|
5204
|
+
}
|
|
5205
|
+
})();
|
|
5206
|
+
onTurnChange?.(loading);
|
|
5207
|
+
void loading.finally(() => onTurnChange?.(null));
|
|
5208
|
+
}
|
|
5179
5209
|
else if (prompt === '/config') {
|
|
5180
5210
|
openSettings('config');
|
|
5181
5211
|
}
|
|
@@ -5395,7 +5425,39 @@ export function InteractiveApp({ factory, initialSessions, initialPrompt, initia
|
|
|
5395
5425
|
? { prStatus: `PR #${activeSessionSummary.prNumber}` }
|
|
5396
5426
|
: {}), shortcutsVisible: shortcutsVisible, ...(editorFooterMessage === undefined
|
|
5397
5427
|
? {}
|
|
5398
|
-
: { footerMessage: editorFooterMessage }) })
|
|
5428
|
+
: { footerMessage: editorFooterMessage }) }), _jsx(StatusLine, { configRoot: keybindingsRoot, cwd: runtimeCwd, input: createClaudeStatusLineInput({
|
|
5429
|
+
configRoot: keybindingsRoot,
|
|
5430
|
+
cwd: runtimeCwd,
|
|
5431
|
+
projectDir: display.cwd,
|
|
5432
|
+
sessionId: sessionId ?? statusLineSessionId.current,
|
|
5433
|
+
sessionName,
|
|
5434
|
+
...(runtimeDisplay.model === undefined
|
|
5435
|
+
? {}
|
|
5436
|
+
: { model: runtimeDisplay.model }),
|
|
5437
|
+
version: runtimeDisplay.version,
|
|
5438
|
+
outputStyle: runtimeSettings.outputStyle,
|
|
5439
|
+
permissionMode: runtimePreferences.permissionMode,
|
|
5440
|
+
additionalDirectories: runtimePreferences.additionalDirectories,
|
|
5441
|
+
...(usage === undefined ? {} : { usage }),
|
|
5442
|
+
...(costUsd === undefined ? {} : { costUsd }),
|
|
5443
|
+
...(runtimeDisplay.contextWindowTokens === undefined
|
|
5444
|
+
? {}
|
|
5445
|
+
: {
|
|
5446
|
+
contextWindowTokens: runtimeDisplay.contextWindowTokens,
|
|
5447
|
+
}),
|
|
5448
|
+
...(runtimeSettings.editor === 'vim'
|
|
5449
|
+
? { vimMode: vimInsertMode ? 'INSERT' : 'NORMAL' }
|
|
5450
|
+
: {}),
|
|
5451
|
+
}), refreshKey: [
|
|
5452
|
+
history.length,
|
|
5453
|
+
runtimePreferences.permissionMode,
|
|
5454
|
+
runtimeDisplay.model,
|
|
5455
|
+
runtimeSettings.outputStyle,
|
|
5456
|
+
vimInsertMode,
|
|
5457
|
+
sessionName,
|
|
5458
|
+
usage?.inputTokens,
|
|
5459
|
+
usage?.outputTokens,
|
|
5460
|
+
].join(':'), ...(settingSources === undefined ? {} : { settingSources }) })] }))] })) }) }));
|
|
5399
5461
|
}
|
|
5400
5462
|
export async function runInteractive(options) {
|
|
5401
5463
|
const controller = new AbortController();
|
|
@@ -5484,7 +5546,9 @@ export async function runInteractive(options) {
|
|
|
5484
5546
|
let cleanup = null;
|
|
5485
5547
|
let backgrounded;
|
|
5486
5548
|
rendererChange = null;
|
|
5487
|
-
const instance = render(_jsx(InteractiveApp, { factory: options.factory, initialSessions: initialSessions, slashCommands: initialSlashCommands, agents: initialAgents, initialHistory: history, runtimeSettings: currentRuntimeSettings,
|
|
5549
|
+
const instance = render(_jsx(InteractiveApp, { factory: options.factory, initialSessions: initialSessions, slashCommands: initialSlashCommands, agents: initialAgents, initialHistory: history, runtimeSettings: currentRuntimeSettings, ...(options.settingSources === undefined
|
|
5550
|
+
? {}
|
|
5551
|
+
: { settingSources: options.settingSources }), initialThemeSettings: initialThemeSettings, ...(initialThemeLoadError === undefined
|
|
5488
5552
|
? {}
|
|
5489
5553
|
: { initialThemeLoadError }), ...(currentInitialPrompt === undefined
|
|
5490
5554
|
? {}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ClaudeCommandDisposition = 'included' | 'excluded';
|
|
1
|
+
export type ClaudeCommandDisposition = 'included' | 'deferred' | 'excluded';
|
|
2
2
|
export type ClaudeCommandVisibility = 'visible' | 'hidden' | 'conditional';
|
|
3
3
|
export interface ClaudeCommandInventoryEntry {
|
|
4
4
|
name: string;
|
|
@@ -12,8 +12,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
12
12
|
readonly visibility: "visible";
|
|
13
13
|
}, {
|
|
14
14
|
readonly name: "advisor";
|
|
15
|
-
readonly disposition: "
|
|
15
|
+
readonly disposition: "deferred";
|
|
16
16
|
readonly visibility: "conditional";
|
|
17
|
+
readonly reason: "Conditional advice mode is required parity work and is not implemented yet.";
|
|
17
18
|
}, {
|
|
18
19
|
readonly name: "agents";
|
|
19
20
|
readonly disposition: "included";
|
|
@@ -28,17 +29,18 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
28
29
|
readonly visibility: "visible";
|
|
29
30
|
}, {
|
|
30
31
|
readonly name: "chrome";
|
|
31
|
-
readonly disposition: "
|
|
32
|
+
readonly disposition: "deferred";
|
|
32
33
|
readonly visibility: "conditional";
|
|
33
|
-
readonly reason: "Chrome integration is
|
|
34
|
+
readonly reason: "The CLI-driven Chrome integration is required parity work and is not implemented yet.";
|
|
34
35
|
}, {
|
|
35
36
|
readonly name: "clear";
|
|
36
37
|
readonly disposition: "included";
|
|
37
38
|
readonly visibility: "visible";
|
|
38
39
|
}, {
|
|
39
40
|
readonly name: "color";
|
|
40
|
-
readonly disposition: "
|
|
41
|
+
readonly disposition: "deferred";
|
|
41
42
|
readonly visibility: "visible";
|
|
43
|
+
readonly reason: "The dedicated /color contract is required; /theme is not a substitute.";
|
|
42
44
|
}, {
|
|
43
45
|
readonly name: "compact";
|
|
44
46
|
readonly disposition: "included";
|
|
@@ -62,16 +64,18 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
62
64
|
readonly visibility: "conditional";
|
|
63
65
|
}, {
|
|
64
66
|
readonly name: "cost";
|
|
65
|
-
readonly disposition: "
|
|
67
|
+
readonly disposition: "deferred";
|
|
66
68
|
readonly visibility: "conditional";
|
|
69
|
+
readonly reason: "The dedicated /cost contract is required; /status is not a substitute.";
|
|
67
70
|
}, {
|
|
68
71
|
readonly name: "diff";
|
|
69
72
|
readonly disposition: "included";
|
|
70
73
|
readonly visibility: "visible";
|
|
71
74
|
}, {
|
|
72
75
|
readonly name: "doctor";
|
|
73
|
-
readonly disposition: "
|
|
76
|
+
readonly disposition: "deferred";
|
|
74
77
|
readonly visibility: "conditional";
|
|
78
|
+
readonly reason: "Interactive /doctor is required; the top-level command is not a substitute.";
|
|
75
79
|
}, {
|
|
76
80
|
readonly name: "effort";
|
|
77
81
|
readonly disposition: "included";
|
|
@@ -82,8 +86,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
82
86
|
readonly visibility: "visible";
|
|
83
87
|
}, {
|
|
84
88
|
readonly name: "fast";
|
|
85
|
-
readonly disposition: "
|
|
89
|
+
readonly disposition: "deferred";
|
|
86
90
|
readonly visibility: "conditional";
|
|
91
|
+
readonly reason: "The /fast state flow is required; model and effort controls are not a substitute.";
|
|
87
92
|
}, {
|
|
88
93
|
readonly name: "files";
|
|
89
94
|
readonly disposition: "excluded";
|
|
@@ -91,8 +96,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
91
96
|
readonly reason: "The source command is restricted to the internal Ant user type.";
|
|
92
97
|
}, {
|
|
93
98
|
readonly name: "heapdump";
|
|
94
|
-
readonly disposition: "
|
|
99
|
+
readonly disposition: "deferred";
|
|
95
100
|
readonly visibility: "hidden";
|
|
101
|
+
readonly reason: "The hidden heap-diagnostic contract is required parity work and is not implemented yet.";
|
|
96
102
|
}, {
|
|
97
103
|
readonly name: "help";
|
|
98
104
|
readonly disposition: "included";
|
|
@@ -181,8 +187,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
181
187
|
readonly visibility: "visible";
|
|
182
188
|
}, {
|
|
183
189
|
readonly name: "stats";
|
|
184
|
-
readonly disposition: "
|
|
190
|
+
readonly disposition: "deferred";
|
|
185
191
|
readonly visibility: "visible";
|
|
192
|
+
readonly reason: "Historical usage statistics are required parity work and are not implemented yet.";
|
|
186
193
|
}, {
|
|
187
194
|
readonly name: "status";
|
|
188
195
|
readonly disposition: "included";
|
|
@@ -253,8 +260,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
253
260
|
readonly reason: "The source command is the Claude subscription plan-usage panel.";
|
|
254
261
|
}, {
|
|
255
262
|
readonly name: "insights";
|
|
256
|
-
readonly disposition: "
|
|
263
|
+
readonly disposition: "deferred";
|
|
257
264
|
readonly visibility: "visible";
|
|
265
|
+
readonly reason: "Retrospective insights are required parity work and are not implemented yet.";
|
|
258
266
|
}, {
|
|
259
267
|
readonly name: "vim";
|
|
260
268
|
readonly disposition: "included";
|
|
@@ -270,20 +278,24 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
270
278
|
readonly visibility: "conditional";
|
|
271
279
|
}, {
|
|
272
280
|
readonly name: "buddy";
|
|
273
|
-
readonly disposition: "
|
|
281
|
+
readonly disposition: "deferred";
|
|
274
282
|
readonly visibility: "conditional";
|
|
283
|
+
readonly reason: "This conditional source mode is required parity work and is not implemented yet.";
|
|
275
284
|
}, {
|
|
276
285
|
readonly name: "proactive";
|
|
277
|
-
readonly disposition: "
|
|
286
|
+
readonly disposition: "deferred";
|
|
278
287
|
readonly visibility: "conditional";
|
|
288
|
+
readonly reason: "This conditional source mode is required parity work and is not implemented yet.";
|
|
279
289
|
}, {
|
|
280
290
|
readonly name: "brief";
|
|
281
|
-
readonly disposition: "
|
|
291
|
+
readonly disposition: "deferred";
|
|
282
292
|
readonly visibility: "conditional";
|
|
293
|
+
readonly reason: "This conditional source mode is required parity work and is not implemented yet.";
|
|
283
294
|
}, {
|
|
284
295
|
readonly name: "assistant";
|
|
285
|
-
readonly disposition: "
|
|
296
|
+
readonly disposition: "deferred";
|
|
286
297
|
readonly visibility: "conditional";
|
|
298
|
+
readonly reason: "This conditional source mode is required parity work and is not implemented yet.";
|
|
287
299
|
}, {
|
|
288
300
|
readonly name: "remote-control";
|
|
289
301
|
readonly disposition: "excluded";
|
|
@@ -296,16 +308,19 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
296
308
|
readonly reason: "Remote Control is outside the local-only boundary.";
|
|
297
309
|
}, {
|
|
298
310
|
readonly name: "voice";
|
|
299
|
-
readonly disposition: "
|
|
311
|
+
readonly disposition: "deferred";
|
|
300
312
|
readonly visibility: "conditional";
|
|
313
|
+
readonly reason: "Conditional voice input is required parity work and is not implemented yet.";
|
|
301
314
|
}, {
|
|
302
315
|
readonly name: "think-back";
|
|
303
|
-
readonly disposition: "
|
|
316
|
+
readonly disposition: "deferred";
|
|
304
317
|
readonly visibility: "conditional";
|
|
318
|
+
readonly reason: "The conditional retrospective flow is required parity work and is not implemented yet.";
|
|
305
319
|
}, {
|
|
306
320
|
readonly name: "thinkback-play";
|
|
307
|
-
readonly disposition: "
|
|
321
|
+
readonly disposition: "deferred";
|
|
308
322
|
readonly visibility: "hidden";
|
|
323
|
+
readonly reason: "The hidden retrospective playback flow is required parity work and is not implemented yet.";
|
|
309
324
|
}, {
|
|
310
325
|
readonly name: "permissions";
|
|
311
326
|
readonly disposition: "included";
|
|
@@ -361,8 +376,9 @@ export declare const CLAUDE_2_1_208_COMMAND_INVENTORY: readonly [{
|
|
|
361
376
|
readonly visibility: "conditional";
|
|
362
377
|
}, {
|
|
363
378
|
readonly name: "torch";
|
|
364
|
-
readonly disposition: "
|
|
379
|
+
readonly disposition: "deferred";
|
|
365
380
|
readonly visibility: "conditional";
|
|
381
|
+
readonly reason: "This source-gated behavior is required conditional parity work and is not implemented yet.";
|
|
366
382
|
}];
|
|
367
383
|
export declare const CLAUDE_2_1_208_COMMAND_BY_NAME: ReadonlyMap<string, ClaudeCommandInventoryEntry>;
|
|
368
384
|
//# sourceMappingURL=claude-command-inventory.d.ts.map
|
|
@@ -4,18 +4,28 @@
|
|
|
4
4
|
// disappearing from the parity inventory.
|
|
5
5
|
export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
6
6
|
{ name: 'add-dir', disposition: 'included', visibility: 'visible' },
|
|
7
|
-
{
|
|
7
|
+
{
|
|
8
|
+
name: 'advisor',
|
|
9
|
+
disposition: 'deferred',
|
|
10
|
+
visibility: 'conditional',
|
|
11
|
+
reason: 'Conditional advice mode is required parity work and is not implemented yet.',
|
|
12
|
+
},
|
|
8
13
|
{ name: 'agents', disposition: 'included', visibility: 'visible' },
|
|
9
14
|
{ name: 'branch', disposition: 'included', visibility: 'visible' },
|
|
10
15
|
{ name: 'btw', disposition: 'included', visibility: 'visible' },
|
|
11
16
|
{
|
|
12
17
|
name: 'chrome',
|
|
13
|
-
disposition: '
|
|
18
|
+
disposition: 'deferred',
|
|
14
19
|
visibility: 'conditional',
|
|
15
|
-
reason: 'Chrome integration is
|
|
20
|
+
reason: 'The CLI-driven Chrome integration is required parity work and is not implemented yet.',
|
|
16
21
|
},
|
|
17
22
|
{ name: 'clear', disposition: 'included', visibility: 'visible' },
|
|
18
|
-
{
|
|
23
|
+
{
|
|
24
|
+
name: 'color',
|
|
25
|
+
disposition: 'deferred',
|
|
26
|
+
visibility: 'visible',
|
|
27
|
+
reason: 'The dedicated /color contract is required; /theme is not a substitute.',
|
|
28
|
+
},
|
|
19
29
|
{ name: 'compact', disposition: 'included', visibility: 'visible' },
|
|
20
30
|
{ name: 'config', disposition: 'included', visibility: 'visible' },
|
|
21
31
|
{ name: 'copy', disposition: 'included', visibility: 'visible' },
|
|
@@ -26,19 +36,39 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
26
36
|
reason: 'Desktop handoff/import is outside the CLI-only product boundary.',
|
|
27
37
|
},
|
|
28
38
|
{ name: 'context', disposition: 'included', visibility: 'conditional' },
|
|
29
|
-
{
|
|
39
|
+
{
|
|
40
|
+
name: 'cost',
|
|
41
|
+
disposition: 'deferred',
|
|
42
|
+
visibility: 'conditional',
|
|
43
|
+
reason: 'The dedicated /cost contract is required; /status is not a substitute.',
|
|
44
|
+
},
|
|
30
45
|
{ name: 'diff', disposition: 'included', visibility: 'visible' },
|
|
31
|
-
{
|
|
46
|
+
{
|
|
47
|
+
name: 'doctor',
|
|
48
|
+
disposition: 'deferred',
|
|
49
|
+
visibility: 'conditional',
|
|
50
|
+
reason: 'Interactive /doctor is required; the top-level command is not a substitute.',
|
|
51
|
+
},
|
|
32
52
|
{ name: 'effort', disposition: 'included', visibility: 'visible' },
|
|
33
53
|
{ name: 'exit', disposition: 'included', visibility: 'visible' },
|
|
34
|
-
{
|
|
54
|
+
{
|
|
55
|
+
name: 'fast',
|
|
56
|
+
disposition: 'deferred',
|
|
57
|
+
visibility: 'conditional',
|
|
58
|
+
reason: 'The /fast state flow is required; model and effort controls are not a substitute.',
|
|
59
|
+
},
|
|
35
60
|
{
|
|
36
61
|
name: 'files',
|
|
37
62
|
disposition: 'excluded',
|
|
38
63
|
visibility: 'conditional',
|
|
39
64
|
reason: 'The source command is restricted to the internal Ant user type.',
|
|
40
65
|
},
|
|
41
|
-
{
|
|
66
|
+
{
|
|
67
|
+
name: 'heapdump',
|
|
68
|
+
disposition: 'deferred',
|
|
69
|
+
visibility: 'hidden',
|
|
70
|
+
reason: 'The hidden heap-diagnostic contract is required parity work and is not implemented yet.',
|
|
71
|
+
},
|
|
42
72
|
{ name: 'help', disposition: 'included', visibility: 'visible' },
|
|
43
73
|
{
|
|
44
74
|
name: 'ide',
|
|
@@ -89,7 +119,12 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
89
119
|
reason: 'Remote-session URLs and QR codes are outside the local-only boundary.',
|
|
90
120
|
},
|
|
91
121
|
{ name: 'skills', disposition: 'included', visibility: 'visible' },
|
|
92
|
-
{
|
|
122
|
+
{
|
|
123
|
+
name: 'stats',
|
|
124
|
+
disposition: 'deferred',
|
|
125
|
+
visibility: 'visible',
|
|
126
|
+
reason: 'Historical usage statistics are required parity work and are not implemented yet.',
|
|
127
|
+
},
|
|
93
128
|
{ name: 'status', disposition: 'included', visibility: 'visible' },
|
|
94
129
|
{ name: 'statusline', disposition: 'included', visibility: 'visible' },
|
|
95
130
|
{
|
|
@@ -149,7 +184,12 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
149
184
|
visibility: 'conditional',
|
|
150
185
|
reason: 'The source command is the Claude subscription plan-usage panel.',
|
|
151
186
|
},
|
|
152
|
-
{
|
|
187
|
+
{
|
|
188
|
+
name: 'insights',
|
|
189
|
+
disposition: 'deferred',
|
|
190
|
+
visibility: 'visible',
|
|
191
|
+
reason: 'Retrospective insights are required parity work and are not implemented yet.',
|
|
192
|
+
},
|
|
153
193
|
{ name: 'vim', disposition: 'included', visibility: 'visible' },
|
|
154
194
|
{
|
|
155
195
|
name: 'web-setup',
|
|
@@ -158,10 +198,30 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
158
198
|
reason: 'Remote setup is outside the local-only boundary.',
|
|
159
199
|
},
|
|
160
200
|
{ name: 'fork', disposition: 'included', visibility: 'conditional' },
|
|
161
|
-
{
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
201
|
+
{
|
|
202
|
+
name: 'buddy',
|
|
203
|
+
disposition: 'deferred',
|
|
204
|
+
visibility: 'conditional',
|
|
205
|
+
reason: 'This conditional source mode is required parity work and is not implemented yet.',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'proactive',
|
|
209
|
+
disposition: 'deferred',
|
|
210
|
+
visibility: 'conditional',
|
|
211
|
+
reason: 'This conditional source mode is required parity work and is not implemented yet.',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'brief',
|
|
215
|
+
disposition: 'deferred',
|
|
216
|
+
visibility: 'conditional',
|
|
217
|
+
reason: 'This conditional source mode is required parity work and is not implemented yet.',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: 'assistant',
|
|
221
|
+
disposition: 'deferred',
|
|
222
|
+
visibility: 'conditional',
|
|
223
|
+
reason: 'This conditional source mode is required parity work and is not implemented yet.',
|
|
224
|
+
},
|
|
165
225
|
{
|
|
166
226
|
name: 'remote-control',
|
|
167
227
|
disposition: 'excluded',
|
|
@@ -174,9 +234,24 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
174
234
|
visibility: 'conditional',
|
|
175
235
|
reason: 'Remote Control is outside the local-only boundary.',
|
|
176
236
|
},
|
|
177
|
-
{
|
|
178
|
-
|
|
179
|
-
|
|
237
|
+
{
|
|
238
|
+
name: 'voice',
|
|
239
|
+
disposition: 'deferred',
|
|
240
|
+
visibility: 'conditional',
|
|
241
|
+
reason: 'Conditional voice input is required parity work and is not implemented yet.',
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
name: 'think-back',
|
|
245
|
+
disposition: 'deferred',
|
|
246
|
+
visibility: 'conditional',
|
|
247
|
+
reason: 'The conditional retrospective flow is required parity work and is not implemented yet.',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: 'thinkback-play',
|
|
251
|
+
disposition: 'deferred',
|
|
252
|
+
visibility: 'hidden',
|
|
253
|
+
reason: 'The hidden retrospective playback flow is required parity work and is not implemented yet.',
|
|
254
|
+
},
|
|
180
255
|
{ name: 'permissions', disposition: 'included', visibility: 'visible' },
|
|
181
256
|
{ name: 'plan', disposition: 'included', visibility: 'visible' },
|
|
182
257
|
{
|
|
@@ -214,7 +289,12 @@ export const CLAUDE_2_1_208_COMMAND_INVENTORY = [
|
|
|
214
289
|
},
|
|
215
290
|
{ name: 'tasks', disposition: 'included', visibility: 'visible' },
|
|
216
291
|
{ name: 'workflows', disposition: 'included', visibility: 'conditional' },
|
|
217
|
-
{
|
|
292
|
+
{
|
|
293
|
+
name: 'torch',
|
|
294
|
+
disposition: 'deferred',
|
|
295
|
+
visibility: 'conditional',
|
|
296
|
+
reason: 'This source-gated behavior is required conditional parity work and is not implemented yet.',
|
|
297
|
+
},
|
|
218
298
|
];
|
|
219
299
|
export const CLAUDE_2_1_208_COMMAND_BY_NAME = new Map(CLAUDE_2_1_208_COMMAND_INVENTORY.map((entry) => [entry.name, entry]));
|
|
220
300
|
//# sourceMappingURL=claude-command-inventory.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const CLAUDE_CHANGELOG_URL = "https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md";
|
|
2
|
+
export interface ReleaseNotesOptions {
|
|
3
|
+
configRoot: string;
|
|
4
|
+
fetcher?: typeof fetch;
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseClaudeChangelog(content: string): readonly [version: string, notes: readonly string[]][];
|
|
8
|
+
export declare function formatClaudeReleaseNotes(content: string): string | null;
|
|
9
|
+
export declare function loadClaudeReleaseNotes({ configRoot, fetcher, timeoutMs, }: ReleaseNotesOptions): Promise<string>;
|
|
10
|
+
//# sourceMappingURL=release-notes.d.ts.map
|