@@ -1402,4 +1402,87 @@ describe('FileCommandLoader', () => {
14021402 expect ( commands [ 0 ] . description ) . toBe ( 'd' . repeat ( 97 ) + '...' ) ;
14031403 } ) ;
14041404 } ) ;
1405+
1406+ describe ( 'CommandSource Assignment' , ( ) => {
1407+ it ( 'assigns CommandSource.USER to user commands' , async ( ) => {
1408+ const userCommandsDir = Storage . getUserCommandsDir ( ) ;
1409+ mock ( {
1410+ [ userCommandsDir ] : {
1411+ 'user-cmd.toml' : 'prompt = "User prompt"' ,
1412+ } ,
1413+ } ) ;
1414+
1415+ const loader = new FileCommandLoader ( null ) ;
1416+ const commands = await loader . loadCommands ( signal ) ;
1417+
1418+ expect ( commands ) . toHaveLength ( 1 ) ;
1419+ expect ( commands [ 0 ] . source ) . toBe ( 'user' ) ;
1420+ } ) ;
1421+
1422+ it ( 'assigns CommandSource.PROJECT to project commands' , async ( ) => {
1423+ const projectCommandsDir = new Storage (
1424+ process . cwd ( ) ,
1425+ ) . getProjectCommandsDir ( ) ;
1426+ mock ( {
1427+ [ projectCommandsDir ] : {
1428+ 'project-cmd.toml' : 'prompt = "Project prompt"' ,
1429+ } ,
1430+ } ) ;
1431+
1432+ const mockConfig = {
1433+ getProjectRoot : vi . fn ( ( ) => process . cwd ( ) ) ,
1434+ getExtensions : vi . fn ( ( ) => [ ] ) ,
1435+ getFolderTrust : vi . fn ( ( ) => false ) ,
1436+ isTrustedFolder : vi . fn ( ( ) => false ) ,
1437+ } as unknown as Config ;
1438+ const loader = new FileCommandLoader ( mockConfig ) ;
1439+ const commands = await loader . loadCommands ( signal ) ;
1440+
1441+ // 0 is user (empty), 1 is project
1442+ const projectCmd = commands . find ( ( c ) => c . name === 'project-cmd' ) ;
1443+ expect ( projectCmd ) . toBeDefined ( ) ;
1444+ expect ( projectCmd ?. source ) . toBe ( 'project' ) ;
1445+ } ) ;
1446+
1447+ it ( 'assigns CommandSource.EXTENSION to extension commands' , async ( ) => {
1448+ const extensionDir = path . join (
1449+ process . cwd ( ) ,
1450+ GEMINI_DIR ,
1451+ 'extensions' ,
1452+ 'test-ext' ,
1453+ ) ;
1454+
1455+ mock ( {
1456+ [ extensionDir ] : {
1457+ 'gemini-extension.json' : JSON . stringify ( {
1458+ name : 'test-ext' ,
1459+ version : '1.0.0' ,
1460+ } ) ,
1461+ commands : {
1462+ 'ext-cmd.toml' : 'prompt = "Extension prompt"' ,
1463+ } ,
1464+ } ,
1465+ } ) ;
1466+
1467+ const mockConfig = {
1468+ getProjectRoot : vi . fn ( ( ) => process . cwd ( ) ) ,
1469+ getExtensions : vi . fn ( ( ) => [
1470+ {
1471+ name : 'test-ext' ,
1472+ version : '1.0.0' ,
1473+ isActive : true ,
1474+ path : extensionDir ,
1475+ } ,
1476+ ] ) ,
1477+ getFolderTrust : vi . fn ( ( ) => false ) ,
1478+ isTrustedFolder : vi . fn ( ( ) => false ) ,
1479+ } as unknown as Config ;
1480+ const loader = new FileCommandLoader ( mockConfig ) ;
1481+ const commands = await loader . loadCommands ( signal ) ;
1482+
1483+ const extCmd = commands . find ( ( c ) => c . name === 'ext-cmd' ) ;
1484+ expect ( extCmd ) . toBeDefined ( ) ;
1485+ expect ( extCmd ?. source ) . toBe ( 'extension' ) ;
1486+ } ) ;
1487+ } ) ;
14051488} ) ;
0 commit comments