init project
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
import { z } from 'zod';
|
||||
import { config } from '../../config.js';
|
||||
import { detectProject } from '../../lib/frameworks/detect.js';
|
||||
import { readComposerJson } from '../../lib/frameworks/composer.js';
|
||||
import { errorResult, jsonResult, toErrorMessage } from '../shared.js';
|
||||
function extractMajorMinor(versionConstraint) {
|
||||
if (!versionConstraint)
|
||||
return '4';
|
||||
const match = versionConstraint.match(/(\d+)\.(\d+)/);
|
||||
if (!match)
|
||||
return '4';
|
||||
const [, major] = match;
|
||||
return `${major}`;
|
||||
}
|
||||
export function registerSearchCodeIgniterDocsTool(server) {
|
||||
server.registerTool('search_codeigniter_docs', {
|
||||
title: 'Search CodeIgniter Docs',
|
||||
description: 'Return a deep link to the CodeIgniter 4 user guide for a topic, version-matched to the codeigniter4/framework constraint in composer.json.',
|
||||
inputSchema: {
|
||||
topic: z.string().min(1).describe('Documentation topic, e.g. "models" or "database".'),
|
||||
version: z.string().optional().describe('Override the major version, e.g. "4". Auto-detected by default.'),
|
||||
},
|
||||
}, async ({ topic, version }) => {
|
||||
try {
|
||||
const detected = detectProject(config.workspaceRoot);
|
||||
const ciRoot = detected.backend?.kind === 'codeigniter' ? detected.backend.root : config.workspaceRoot;
|
||||
const composerJson = readComposerJson(ciRoot);
|
||||
const constraint = composerJson?.require?.['codeigniter4/framework'];
|
||||
const docsVersion = version ?? extractMajorMinor(constraint);
|
||||
const slug = topic.toLowerCase().replace(/\s+/g, '_');
|
||||
const url = `https://codeigniter4.github.io/userguide/${docsVersion}/${slug}.html`;
|
||||
return jsonResult({
|
||||
topic,
|
||||
version: docsVersion,
|
||||
composerConstraint: constraint ?? null,
|
||||
url,
|
||||
note: 'This is a best-effort documentation link. If the topic page does not exist, the user guide index may help.',
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
return errorResult(toErrorMessage(error));
|
||||
}
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=searchCodeIgniterDocs.js.map
|
||||
Reference in New Issue
Block a user