mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-14 08:18:04 +00:00
feat(profiles): expose codex runtime across surfaces
- update CLI, API, route, and dashboard surfaces to recognize the Codex runtime target - normalize persisted codex targets back to claude so runtime-only behavior stays truthful - add regression coverage for help text, route parsing, and profile storage normalization Refs #773
This commit is contained in:
1 parent
8f60820f33
commit
f9c1238483
19 files changed
+332
-26
No files matched your search
@@ -8,6 +8,7 @@ import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import type { Config, Settings } from '../../types';
|
||||
import type { TargetType } from '../../targets/target-adapter';
|
||||
import { getPersistedTargetChoices, isPersistedTargetType } from '../../targets/target-metadata';
|
||||
import { getCcsDir, getConfigPath, loadConfigSafe } from '../../utils/config-manager';
|
||||
import { ensureProfileHooksOrThrow } from '../../utils/websearch/profile-hook-injector';
|
||||
import { isSensitiveKey } from '../../utils/sensitive-keys';
|
||||
@@ -29,7 +30,7 @@ const SETTINGS_FILE_SUFFIX = '.settings.json';
|
||||
const REDACTED_TOKEN_SENTINEL = '__CCS_REDACTED__';
|
||||
|
||||
function parseTargetValue(value: unknown): TargetType | null {
|
||||
if (value === 'claude' || value === 'droid') {
|
||||
if (isPersistedTargetType(value)) {
|
||||
return value;
|
||||
}
|
||||
return null;
|
||||
@@ -359,7 +360,7 @@ export function importApiProfileBundle(
|
||||
if (input.profile.target !== undefined && bundleTarget === null) {
|
||||
return {
|
||||
success: false,
|
||||
error: 'Invalid bundle profile target. Expected: claude or droid.',
|
||||
error: `Invalid bundle profile target. Expected: ${getPersistedTargetChoices()}.`,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -10,14 +10,13 @@ import { loadConfigSafe } from '../../utils/config-manager';
|
||||
import { loadOrCreateUnifiedConfig, isUnifiedMode } from '../../config/unified-config-loader';
|
||||
import { expandPath } from '../../utils/helpers';
|
||||
import type { TargetType } from '../../targets/target-adapter';
|
||||
import { isPersistedTargetType } from '../../targets/target-metadata';
|
||||
import type { Settings } from '../../types/config';
|
||||
import type { ApiProfileInfo, CliproxyVariantInfo, ApiListResult } from './profile-types';
|
||||
import { resolveCliproxyBridgeMetadata } from './cliproxy-profile-bridge';
|
||||
|
||||
const VALID_TARGETS: ReadonlySet<TargetType> = new Set<TargetType>(['claude', 'droid']);
|
||||
|
||||
function sanitizeTarget(target: unknown): TargetType {
|
||||
if (typeof target === 'string' && VALID_TARGETS.has(target as TargetType)) {
|
||||
if (isPersistedTargetType(target)) {
|
||||
return target as TargetType;
|
||||
}
|
||||
return 'claude';
|
||||
|
||||
Reference in new issue
Block a user