mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-01 20:23:36 +00:00
Merge branch 'v0.9.0rc' into feat/subagents-skills
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
import { create } from 'zustand';
|
||||
import { persist } from 'zustand/middleware';
|
||||
// Note: persist middleware removed - settings now sync via API (use-settings-sync.ts)
|
||||
|
||||
// CLI Installation Status
|
||||
export interface CliStatus {
|
||||
@@ -34,6 +34,37 @@ export interface CursorCliStatus {
|
||||
error?: string;
|
||||
}
|
||||
|
||||
// Codex CLI Status
|
||||
export interface CodexCliStatus {
|
||||
installed: boolean;
|
||||
version?: string | null;
|
||||
path?: string | null;
|
||||
auth?: {
|
||||
authenticated: boolean;
|
||||
method: string;
|
||||
};
|
||||
installCommand?: string;
|
||||
loginCommand?: string;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
// Codex Auth Method
|
||||
export type CodexAuthMethod =
|
||||
| 'api_key_env' // OPENAI_API_KEY environment variable
|
||||
| 'api_key' // Manually stored API key
|
||||
| 'cli_authenticated' // Codex CLI is installed and authenticated
|
||||
| 'none';
|
||||
|
||||
// Codex Auth Status
|
||||
export interface CodexAuthStatus {
|
||||
authenticated: boolean;
|
||||
method: CodexAuthMethod;
|
||||
hasAuthFile?: boolean;
|
||||
hasApiKey?: boolean;
|
||||
hasEnvApiKey?: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
// Claude Auth Method - all possible authentication sources
|
||||
export type ClaudeAuthMethod =
|
||||
| 'oauth_token_env'
|
||||
@@ -71,6 +102,7 @@ export type SetupStep =
|
||||
| 'claude_detect'
|
||||
| 'claude_auth'
|
||||
| 'cursor'
|
||||
| 'codex'
|
||||
| 'github'
|
||||
| 'complete';
|
||||
|
||||
@@ -91,6 +123,11 @@ export interface SetupState {
|
||||
// Cursor CLI state
|
||||
cursorCliStatus: CursorCliStatus | null;
|
||||
|
||||
// Codex CLI state
|
||||
codexCliStatus: CliStatus | null;
|
||||
codexAuthStatus: CodexAuthStatus | null;
|
||||
codexInstallProgress: InstallProgress;
|
||||
|
||||
// Setup preferences
|
||||
skipClaudeSetup: boolean;
|
||||
}
|
||||
@@ -115,6 +152,12 @@ export interface SetupActions {
|
||||
// Cursor CLI
|
||||
setCursorCliStatus: (status: CursorCliStatus | null) => void;
|
||||
|
||||
// Codex CLI
|
||||
setCodexCliStatus: (status: CliStatus | null) => void;
|
||||
setCodexAuthStatus: (status: CodexAuthStatus | null) => void;
|
||||
setCodexInstallProgress: (progress: Partial<InstallProgress>) => void;
|
||||
resetCodexInstallProgress: () => void;
|
||||
|
||||
// Preferences
|
||||
setSkipClaudeSetup: (skip: boolean) => void;
|
||||
}
|
||||
@@ -141,69 +184,77 @@ const initialState: SetupState = {
|
||||
ghCliStatus: null,
|
||||
cursorCliStatus: null,
|
||||
|
||||
codexCliStatus: null,
|
||||
codexAuthStatus: null,
|
||||
codexInstallProgress: { ...initialInstallProgress },
|
||||
|
||||
skipClaudeSetup: shouldSkipSetup,
|
||||
};
|
||||
|
||||
export const useSetupStore = create<SetupState & SetupActions>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
...initialState,
|
||||
export const useSetupStore = create<SetupState & SetupActions>()((set, get) => ({
|
||||
...initialState,
|
||||
|
||||
// Setup flow
|
||||
setCurrentStep: (step) => set({ currentStep: step }),
|
||||
// Setup flow
|
||||
setCurrentStep: (step) => set({ currentStep: step }),
|
||||
|
||||
setSetupComplete: (complete) =>
|
||||
set({
|
||||
setupComplete: complete,
|
||||
currentStep: complete ? 'complete' : 'welcome',
|
||||
}),
|
||||
|
||||
completeSetup: () => set({ setupComplete: true, currentStep: 'complete' }),
|
||||
|
||||
resetSetup: () =>
|
||||
set({
|
||||
...initialState,
|
||||
isFirstRun: false, // Don't reset first run flag
|
||||
}),
|
||||
|
||||
setIsFirstRun: (isFirstRun) => set({ isFirstRun }),
|
||||
|
||||
// Claude CLI
|
||||
setClaudeCliStatus: (status) => set({ claudeCliStatus: status }),
|
||||
|
||||
setClaudeAuthStatus: (status) => set({ claudeAuthStatus: status }),
|
||||
|
||||
setClaudeInstallProgress: (progress) =>
|
||||
set({
|
||||
claudeInstallProgress: {
|
||||
...get().claudeInstallProgress,
|
||||
...progress,
|
||||
},
|
||||
}),
|
||||
|
||||
resetClaudeInstallProgress: () =>
|
||||
set({
|
||||
claudeInstallProgress: { ...initialInstallProgress },
|
||||
}),
|
||||
|
||||
// GitHub CLI
|
||||
setGhCliStatus: (status) => set({ ghCliStatus: status }),
|
||||
|
||||
// Cursor CLI
|
||||
setCursorCliStatus: (status) => set({ cursorCliStatus: status }),
|
||||
|
||||
// Preferences
|
||||
setSkipClaudeSetup: (skip) => set({ skipClaudeSetup: skip }),
|
||||
setSetupComplete: (complete) =>
|
||||
set({
|
||||
setupComplete: complete,
|
||||
currentStep: complete ? 'complete' : 'welcome',
|
||||
}),
|
||||
{
|
||||
name: 'automaker-setup',
|
||||
version: 1, // Add version field for proper hydration (matches app-store pattern)
|
||||
partialize: (state) => ({
|
||||
isFirstRun: state.isFirstRun,
|
||||
setupComplete: state.setupComplete,
|
||||
skipClaudeSetup: state.skipClaudeSetup,
|
||||
claudeAuthStatus: state.claudeAuthStatus,
|
||||
}),
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
completeSetup: () => set({ setupComplete: true, currentStep: 'complete' }),
|
||||
|
||||
resetSetup: () =>
|
||||
set({
|
||||
...initialState,
|
||||
isFirstRun: false, // Don't reset first run flag
|
||||
}),
|
||||
|
||||
setIsFirstRun: (isFirstRun) => set({ isFirstRun }),
|
||||
|
||||
// Claude CLI
|
||||
setClaudeCliStatus: (status) => set({ claudeCliStatus: status }),
|
||||
|
||||
setClaudeAuthStatus: (status) => set({ claudeAuthStatus: status }),
|
||||
|
||||
setClaudeInstallProgress: (progress) =>
|
||||
set({
|
||||
claudeInstallProgress: {
|
||||
...get().claudeInstallProgress,
|
||||
...progress,
|
||||
},
|
||||
}),
|
||||
|
||||
resetClaudeInstallProgress: () =>
|
||||
set({
|
||||
claudeInstallProgress: { ...initialInstallProgress },
|
||||
}),
|
||||
|
||||
// GitHub CLI
|
||||
setGhCliStatus: (status) => set({ ghCliStatus: status }),
|
||||
|
||||
// Cursor CLI
|
||||
setCursorCliStatus: (status) => set({ cursorCliStatus: status }),
|
||||
|
||||
// Codex CLI
|
||||
setCodexCliStatus: (status) => set({ codexCliStatus: status }),
|
||||
|
||||
setCodexAuthStatus: (status) => set({ codexAuthStatus: status }),
|
||||
|
||||
setCodexInstallProgress: (progress) =>
|
||||
set({
|
||||
codexInstallProgress: {
|
||||
...get().codexInstallProgress,
|
||||
...progress,
|
||||
},
|
||||
}),
|
||||
|
||||
resetCodexInstallProgress: () =>
|
||||
set({
|
||||
codexInstallProgress: { ...initialInstallProgress },
|
||||
}),
|
||||
|
||||
// Preferences
|
||||
setSkipClaudeSetup: (skip) => set({ skipClaudeSetup: skip }),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user