docs: improve docs to avoid ambiguity

This commit is contained in:
mingholy.lmh
2025-09-16 14:48:49 +08:00
parent 2c9e61af9e
commit 484f8642c4
13 changed files with 38 additions and 943 deletions

View File

@@ -330,14 +330,14 @@ describe('installExtension', () => {
);
});
it('should throw an error and cleanup if gemini-extension.json is missing', async () => {
it('should throw an error and cleanup if qwen-extension.json is missing', async () => {
const sourceExtDir = path.join(tempHomeDir, 'bad-extension');
fs.mkdirSync(sourceExtDir, { recursive: true });
await expect(
installExtension({ source: sourceExtDir, type: 'local' }),
).rejects.toThrow(
`Invalid extension at ${sourceExtDir}. Please make sure it has a valid gemini-extension.json file.`,
`Invalid extension at ${sourceExtDir}. Please make sure it has a valid qwen-extension.json file.`,
);
const targetExtDir = path.join(userExtensionsDir, 'bad-extension');
@@ -345,8 +345,8 @@ describe('installExtension', () => {
});
it('should install an extension from a git URL', async () => {
const gitUrl = 'https://github.com/google/gemini-extensions.git';
const extensionName = 'gemini-extensions';
const gitUrl = 'https://github.com/google/qwen-extensions.git';
const extensionName = 'qwen-extensions';
const targetExtDir = path.join(userExtensionsDir, extensionName);
const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
@@ -555,8 +555,8 @@ describe('updateExtension', () => {
it('should update a git-installed extension', async () => {
// 1. "Install" an extension
const gitUrl = 'https://github.com/google/gemini-extensions.git';
const extensionName = 'gemini-extensions';
const gitUrl = 'https://github.com/google/qwen-extensions.git';
const extensionName = 'qwen-extensions';
const targetExtDir = path.join(userExtensionsDir, extensionName);
const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);

View File

@@ -71,9 +71,7 @@ export class ExtensionStorage {
}
static async createTmpDir(): Promise<string> {
return await fs.promises.mkdtemp(
path.join(os.tmpdir(), 'gemini-extension'),
);
return await fs.promises.mkdtemp(path.join(os.tmpdir(), 'qwen-extension'));
}
}
@@ -355,11 +353,11 @@ export async function installExtension(
const newExtension = loadExtension(localSourcePath);
if (!newExtension) {
throw new Error(
`Invalid extension at ${installMetadata.source}. Please make sure it has a valid gemini-extension.json file.`,
`Invalid extension at ${installMetadata.source}. Please make sure it has a valid qwen-extension.json file.`,
);
}
// ~/.gemini/extensions/{ExtensionConfig.name}.
// ~/.qwen/extensions/{ExtensionConfig.name}.
newExtensionName = newExtension.config.name;
const extensionStorage = new ExtensionStorage(newExtensionName);
const destinationPath = extensionStorage.getExtensionDir();
@@ -455,7 +453,7 @@ export async function updateExtension(
}
if (!extension.installMetadata) {
throw new Error(
`Extension cannot be updated because it is missing the .gemini-extension.install.json file. To update manually, uninstall and then reinstall the updated version.`,
`Extension cannot be updated because it is missing the .qwen-extension.install.json file. To update manually, uninstall and then reinstall the updated version.`,
);
}
const originalVersion = extension.config.version;

View File

@@ -525,7 +525,7 @@ describe('FileCommandLoader', () => {
).getProjectCommandsDir();
const extensionDir = path.join(
process.cwd(),
'.gemini/extensions/test-ext',
'.qwen/extensions/test-ext',
);
mock({
@@ -536,7 +536,7 @@ describe('FileCommandLoader', () => {
'project.toml': 'prompt = "Project command"',
},
[extensionDir]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'test-ext',
version: '1.0.0',
}),
@@ -576,12 +576,12 @@ describe('FileCommandLoader', () => {
).getProjectCommandsDir();
const extensionDir = path.join(
process.cwd(),
'.gemini/extensions/test-ext',
'.qwen/extensions/test-ext',
);
mock({
[extensionDir]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'test-ext',
version: '1.0.0',
}),
@@ -670,16 +670,16 @@ describe('FileCommandLoader', () => {
it('only loads commands from active extensions', async () => {
const extensionDir1 = path.join(
process.cwd(),
'.gemini/extensions/active-ext',
'.qwen/extensions/active-ext',
);
const extensionDir2 = path.join(
process.cwd(),
'.gemini/extensions/inactive-ext',
'.qwen/extensions/inactive-ext',
);
mock({
[extensionDir1]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'active-ext',
version: '1.0.0',
}),
@@ -688,7 +688,7 @@ describe('FileCommandLoader', () => {
},
},
[extensionDir2]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'inactive-ext',
version: '1.0.0',
}),
@@ -727,12 +727,12 @@ describe('FileCommandLoader', () => {
it('handles missing extension commands directory gracefully', async () => {
const extensionDir = path.join(
process.cwd(),
'.gemini/extensions/no-commands',
'.qwen/extensions/no-commands',
);
mock({
[extensionDir]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'no-commands',
version: '1.0.0',
}),
@@ -757,11 +757,11 @@ describe('FileCommandLoader', () => {
});
it('handles nested command structure in extensions', async () => {
const extensionDir = path.join(process.cwd(), '.gemini/extensions/a');
const extensionDir = path.join(process.cwd(), '.qwen/extensions/a');
mock({
[extensionDir]: {
'gemini-extension.json': JSON.stringify({
'qwen-extension.json': JSON.stringify({
name: 'a',
version: '1.0.0',
}),