@planu/cli 0.95.0 → 0.96.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/license-plans.json +4 -1
- package/dist/config/skill-catalog.json +94 -0
- package/dist/engine/browser-validator.d.ts +17 -0
- package/dist/engine/browser-validator.d.ts.map +1 -0
- package/dist/engine/browser-validator.js +167 -0
- package/dist/engine/browser-validator.js.map +1 -0
- package/dist/engine/diagram/excalidraw-generator.d.ts +7 -0
- package/dist/engine/diagram/excalidraw-generator.d.ts.map +1 -0
- package/dist/engine/diagram/excalidraw-generator.js +274 -0
- package/dist/engine/diagram/excalidraw-generator.js.map +1 -0
- package/dist/engine/github/quality-dimensions.d.ts +7 -0
- package/dist/engine/github/quality-dimensions.d.ts.map +1 -0
- package/dist/engine/github/quality-dimensions.js +243 -0
- package/dist/engine/github/quality-dimensions.js.map +1 -0
- package/dist/engine/github/review-analyzer.d.ts.map +1 -1
- package/dist/engine/github/review-analyzer.js +1 -0
- package/dist/engine/github/review-analyzer.js.map +1 -1
- package/dist/engine/github/review-dimensions.d.ts +2 -0
- package/dist/engine/github/review-dimensions.d.ts.map +1 -1
- package/dist/engine/github/review-dimensions.js +6 -32
- package/dist/engine/github/review-dimensions.js.map +1 -1
- package/dist/engine/github/review-helpers.d.ts +4 -0
- package/dist/engine/github/review-helpers.d.ts.map +1 -0
- package/dist/engine/github/review-helpers.js +31 -0
- package/dist/engine/github/review-helpers.js.map +1 -0
- package/dist/engine/google-workspace-exporter.d.ts +22 -0
- package/dist/engine/google-workspace-exporter.d.ts.map +1 -0
- package/dist/engine/google-workspace-exporter.js +159 -0
- package/dist/engine/google-workspace-exporter.js.map +1 -0
- package/dist/engine/skill-registry/builtin-catalog-adapter.d.ts +11 -0
- package/dist/engine/skill-registry/builtin-catalog-adapter.d.ts.map +1 -0
- package/dist/engine/skill-registry/builtin-catalog-adapter.js +95 -0
- package/dist/engine/skill-registry/builtin-catalog-adapter.js.map +1 -0
- package/dist/engine/skill-registry/index.d.ts +1 -0
- package/dist/engine/skill-registry/index.d.ts.map +1 -1
- package/dist/engine/skill-registry/index.js +1 -0
- package/dist/engine/skill-registry/index.js.map +1 -1
- package/dist/engine/skill-registry/installer.d.ts.map +1 -1
- package/dist/engine/skill-registry/installer.js +41 -0
- package/dist/engine/skill-registry/installer.js.map +1 -1
- package/dist/engine/skill-registry/unified-search.d.ts.map +1 -1
- package/dist/engine/skill-registry/unified-search.js +3 -0
- package/dist/engine/skill-registry/unified-search.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/browser-validate-handler.d.ts +8 -0
- package/dist/tools/browser-validate-handler.d.ts.map +1 -0
- package/dist/tools/browser-validate-handler.js +111 -0
- package/dist/tools/browser-validate-handler.js.map +1 -0
- package/dist/tools/diagram-handler.d.ts +4 -0
- package/dist/tools/diagram-handler.d.ts.map +1 -0
- package/dist/tools/diagram-handler.js +77 -0
- package/dist/tools/diagram-handler.js.map +1 -0
- package/dist/tools/github-review-handler.d.ts.map +1 -1
- package/dist/tools/github-review-handler.js +50 -1
- package/dist/tools/github-review-handler.js.map +1 -1
- package/dist/tools/google-workspace-handler.d.ts +10 -0
- package/dist/tools/google-workspace-handler.d.ts.map +1 -0
- package/dist/tools/google-workspace-handler.js +121 -0
- package/dist/tools/google-workspace-handler.js.map +1 -0
- package/dist/tools/list-specs.d.ts.map +1 -1
- package/dist/tools/list-specs.js +13 -11
- package/dist/tools/list-specs.js.map +1 -1
- package/dist/tools/register-browser-validate-tools.d.ts +3 -0
- package/dist/tools/register-browser-validate-tools.d.ts.map +1 -0
- package/dist/tools/register-browser-validate-tools.js +30 -0
- package/dist/tools/register-browser-validate-tools.js.map +1 -0
- package/dist/tools/register-diagram-tools.d.ts +3 -0
- package/dist/tools/register-diagram-tools.d.ts.map +1 -0
- package/dist/tools/register-diagram-tools.js +28 -0
- package/dist/tools/register-diagram-tools.js.map +1 -0
- package/dist/tools/register-github-tools.d.ts.map +1 -1
- package/dist/tools/register-github-tools.js +2 -1
- package/dist/tools/register-github-tools.js.map +1 -1
- package/dist/tools/register-google-workspace-tools.d.ts +3 -0
- package/dist/tools/register-google-workspace-tools.d.ts.map +1 -0
- package/dist/tools/register-google-workspace-tools.js +41 -0
- package/dist/tools/register-google-workspace-tools.js.map +1 -0
- package/dist/tools/schemas/github.d.ts +1 -0
- package/dist/tools/schemas/github.d.ts.map +1 -1
- package/dist/tools/schemas/github.js +3 -2
- package/dist/tools/schemas/github.js.map +1 -1
- package/dist/tools/schemas/output-schemas.d.ts +18 -18
- package/dist/tools/schemas/output-schemas.d.ts.map +1 -1
- package/dist/tools/schemas/output-schemas.js +24 -18
- package/dist/tools/schemas/output-schemas.js.map +1 -1
- package/dist/tools/skill-registry/search.d.ts.map +1 -1
- package/dist/tools/skill-registry/search.js +8 -0
- package/dist/tools/skill-registry/search.js.map +1 -1
- package/dist/types/browser-validator.d.ts +40 -0
- package/dist/types/browser-validator.d.ts.map +1 -0
- package/dist/types/browser-validator.js +3 -0
- package/dist/types/browser-validator.js.map +1 -0
- package/dist/types/common/tech-enums.d.ts +1 -1
- package/dist/types/common/tech-enums.d.ts.map +1 -1
- package/dist/types/diagram.d.ts +73 -0
- package/dist/types/diagram.d.ts.map +1 -0
- package/dist/types/diagram.js +2 -0
- package/dist/types/diagram.js.map +1 -0
- package/dist/types/github.d.ts +2 -2
- package/dist/types/github.d.ts.map +1 -1
- package/dist/types/google-workspace.d.ts +39 -0
- package/dist/types/google-workspace.d.ts.map +1 -0
- package/dist/types/google-workspace.js +3 -0
- package/dist/types/google-workspace.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/skill-registry.d.ts +22 -0
- package/dist/types/skill-registry.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/license-plans.json +4 -1
- package/src/config/skill-catalog.json +94 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// tools/github-review-handler.ts — Handler for review_pr tool.
|
|
2
2
|
import { createPlatformClient, getRemoteUrl } from '../engine/github/client.js';
|
|
3
3
|
import { analyzeDiff, parseDiffStats, generateSummaryFinding, } from '../engine/github/review-analyzer.js';
|
|
4
|
-
import { runAllDimensions } from '../engine/github/review-dimensions.js';
|
|
4
|
+
import { runAllDimensions, runQualityDimensions } from '../engine/github/review-dimensions.js';
|
|
5
5
|
import { mergeFindings } from '../engine/github/findings-merger.js';
|
|
6
6
|
import { execFile as nodeExecFile } from 'node:child_process';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
@@ -80,6 +80,52 @@ async function handleExpertReview(prNumber, diff, exec) {
|
|
|
80
80
|
},
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
+
async function handleQualityReview(prNumber, diff) {
|
|
84
|
+
const dimensionResults = await runQualityDimensions(diff);
|
|
85
|
+
const merged = mergeFindings(dimensionResults);
|
|
86
|
+
const stats = parseDiffStats(diff);
|
|
87
|
+
const sections = [];
|
|
88
|
+
sections.push(`## Quality Review of PR #${String(prNumber)}\n`);
|
|
89
|
+
sections.push(`**Files changed:** ${String(stats.filesChanged)}`);
|
|
90
|
+
sections.push(`**Lines:** +${String(stats.additions)} -${String(stats.deletions)}`);
|
|
91
|
+
sections.push(`**Dimensions:** ${merged.dimensions.join(', ')}` +
|
|
92
|
+
` | **Total findings:** ${String(merged.totalFindings)}\n`);
|
|
93
|
+
if (merged.critical.length > 0) {
|
|
94
|
+
sections.push('### Critical\n');
|
|
95
|
+
for (const f of merged.critical) {
|
|
96
|
+
sections.push(...formatFinding(f));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (merged.suggestions.length > 0) {
|
|
100
|
+
sections.push('### Suggestions\n');
|
|
101
|
+
for (const f of merged.suggestions) {
|
|
102
|
+
sections.push(...formatFinding(f));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (merged.nits.length > 0) {
|
|
106
|
+
sections.push('### Nits\n');
|
|
107
|
+
for (const f of merged.nits) {
|
|
108
|
+
sections.push(...formatFinding(f));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (merged.totalFindings === 0) {
|
|
112
|
+
sections.push('\nNo quality issues found.');
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
content: [{ type: 'text', text: sections.join('\n') }],
|
|
116
|
+
_meta: {
|
|
117
|
+
prNumber,
|
|
118
|
+
reviewType: 'quality',
|
|
119
|
+
filesChanged: stats.filesChanged,
|
|
120
|
+
additions: stats.additions,
|
|
121
|
+
deletions: stats.deletions,
|
|
122
|
+
findingsCount: merged.totalFindings,
|
|
123
|
+
critical: merged.critical.length,
|
|
124
|
+
suggestions: merged.suggestions.length,
|
|
125
|
+
nits: merged.nits.length,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
83
129
|
export async function handleReviewPR(args, exec = defaultExec) {
|
|
84
130
|
const remoteUrl = await getRemoteUrl(exec);
|
|
85
131
|
const client = createPlatformClient(remoteUrl, exec);
|
|
@@ -87,6 +133,9 @@ export async function handleReviewPR(args, exec = defaultExec) {
|
|
|
87
133
|
if (args.reviewType === 'expert') {
|
|
88
134
|
return handleExpertReview(args.prNumber, diff, exec);
|
|
89
135
|
}
|
|
136
|
+
if (args.reviewType === 'quality') {
|
|
137
|
+
return handleQualityReview(args.prNumber, diff);
|
|
138
|
+
}
|
|
90
139
|
const stats = parseDiffStats(diff);
|
|
91
140
|
const reviewType = args.reviewType;
|
|
92
141
|
const findings = analyzeDiff(diff, reviewType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-review-handler.js","sourceRoot":"","sources":["../../src/tools/github-review-handler.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAI/D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EACL,WAAW,EACX,cAAc,EACd,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"github-review-handler.js","sourceRoot":"","sources":["../../src/tools/github-review-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ToolResult } from '../types/index.js';
|
|
2
|
+
export type GoogleWorkspaceAction = 'export' | 'generate-sheet' | 'import' | 'generate-script';
|
|
3
|
+
export interface GoogleWorkspaceInput {
|
|
4
|
+
action: GoogleWorkspaceAction;
|
|
5
|
+
projectPath: string;
|
|
6
|
+
specId?: string;
|
|
7
|
+
content?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function handleGoogleWorkspace(args: GoogleWorkspaceInput): Promise<ToolResult>;
|
|
10
|
+
//# sourceMappingURL=google-workspace-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-workspace-handler.d.ts","sourceRoot":"","sources":["../../src/tools/google-workspace-handler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAE/F,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA6ID,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmC3F"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// tools/google-workspace-handler.ts — SPEC-310: Google Workspace Sync tool handler
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
import { specStore } from '../storage/index.js';
|
|
4
|
+
import { hashProjectPath } from '../storage/base-store.js';
|
|
5
|
+
import { specToGoogleDocsFormat, specsToCSV, generateAppsScript, googleDocsToSpec, } from '../engine/google-workspace-exporter.js';
|
|
6
|
+
import { formatSuccess, formatWarning, toolResult } from './response-helpers.js';
|
|
7
|
+
async function handleExport(projectPath, specId) {
|
|
8
|
+
const projectId = hashProjectPath(projectPath);
|
|
9
|
+
const spec = await specStore.getSpec(projectId, specId);
|
|
10
|
+
if (!spec) {
|
|
11
|
+
return toolResult(formatWarning('Spec not found', `Spec **${specId}** not found at ${projectPath}. Run \`list_specs\` to see available specs.`), undefined, true);
|
|
12
|
+
}
|
|
13
|
+
// Read spec markdown file for content
|
|
14
|
+
let specContent;
|
|
15
|
+
try {
|
|
16
|
+
specContent = await fs.readFile(spec.specPath, 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
specContent = `# ${spec.title}\n\nNo spec content available.`;
|
|
20
|
+
}
|
|
21
|
+
const formattedContent = specToGoogleDocsFormat(specContent, specId);
|
|
22
|
+
const appsScript = generateAppsScript(specId, formattedContent);
|
|
23
|
+
const result = { specId, formattedContent, appsScript };
|
|
24
|
+
const lines = [
|
|
25
|
+
`Spec **${specId}** exported for Google Workspace.`,
|
|
26
|
+
``,
|
|
27
|
+
`**Formatted content** (${String(formattedContent.split('\n').length)} lines):`,
|
|
28
|
+
'```markdown',
|
|
29
|
+
formattedContent.slice(0, 500) + (formattedContent.length > 500 ? '\n...' : ''),
|
|
30
|
+
'```',
|
|
31
|
+
``,
|
|
32
|
+
`**Apps Script** ready to run in https://script.google.com`,
|
|
33
|
+
];
|
|
34
|
+
return toolResult(formatSuccess('Google Docs Export Ready', lines.join('\n')), result);
|
|
35
|
+
}
|
|
36
|
+
async function handleGenerateSheet(projectPath) {
|
|
37
|
+
const projectId = hashProjectPath(projectPath);
|
|
38
|
+
const specs = await specStore.listSpecs(projectId);
|
|
39
|
+
const entries = specs.map((s) => ({
|
|
40
|
+
id: s.id,
|
|
41
|
+
title: s.title,
|
|
42
|
+
status: s.status,
|
|
43
|
+
estimate: `${String(s.estimation.devHours)}h`,
|
|
44
|
+
risk: s.risk,
|
|
45
|
+
}));
|
|
46
|
+
const csv = specsToCSV(entries);
|
|
47
|
+
const result = { csv, specCount: entries.length };
|
|
48
|
+
const lines = [
|
|
49
|
+
`Generated CSV for **${String(entries.length)}** specs.`,
|
|
50
|
+
``,
|
|
51
|
+
`**Import to Google Sheets:**`,
|
|
52
|
+
`1. Go to sheets.google.com`,
|
|
53
|
+
`2. File → Import → Upload`,
|
|
54
|
+
`3. Paste the CSV content below`,
|
|
55
|
+
``,
|
|
56
|
+
'```csv',
|
|
57
|
+
csv.slice(0, 800) + (csv.length > 800 ? '\n...' : ''),
|
|
58
|
+
'```',
|
|
59
|
+
];
|
|
60
|
+
return toolResult(formatSuccess('Google Sheets CSV Ready', lines.join('\n')), result);
|
|
61
|
+
}
|
|
62
|
+
function handleImport(content) {
|
|
63
|
+
if (!content.trim()) {
|
|
64
|
+
return toolResult(formatWarning('Empty content', 'Provide the Google Docs exported content in the `content` parameter.'), undefined, true);
|
|
65
|
+
}
|
|
66
|
+
const specContent = googleDocsToSpec(content);
|
|
67
|
+
const result = { specContent, success: true };
|
|
68
|
+
const lines = [
|
|
69
|
+
`Content imported and converted to Planu spec format.`,
|
|
70
|
+
``,
|
|
71
|
+
'```markdown',
|
|
72
|
+
specContent.slice(0, 600) + (specContent.length > 600 ? '\n...' : ''),
|
|
73
|
+
'```',
|
|
74
|
+
``,
|
|
75
|
+
`Use \`create_spec\` with this content to create a new spec.`,
|
|
76
|
+
];
|
|
77
|
+
return toolResult(formatSuccess('Google Docs Import Complete', lines.join('\n')), result);
|
|
78
|
+
}
|
|
79
|
+
function handleGenerateScript(specId) {
|
|
80
|
+
const id = specId ?? 'SPEC-XXX';
|
|
81
|
+
const script = generateAppsScript(id, '# Placeholder spec content');
|
|
82
|
+
const instructions = [
|
|
83
|
+
'1. Go to https://script.google.com',
|
|
84
|
+
'2. Create a new project',
|
|
85
|
+
'3. Paste the script below',
|
|
86
|
+
'4. Run `syncAllSpecs()` to create the Google Doc',
|
|
87
|
+
'5. Set up a time-based trigger for automatic sync',
|
|
88
|
+
].join('\n');
|
|
89
|
+
const result = { script, instructions };
|
|
90
|
+
const lines = [
|
|
91
|
+
`**Google Apps Script** for live sync setup:`,
|
|
92
|
+
``,
|
|
93
|
+
instructions,
|
|
94
|
+
``,
|
|
95
|
+
'```javascript',
|
|
96
|
+
script,
|
|
97
|
+
'```',
|
|
98
|
+
];
|
|
99
|
+
return toolResult(formatSuccess('Apps Script Generated', lines.join('\n')), result);
|
|
100
|
+
}
|
|
101
|
+
export async function handleGoogleWorkspace(args) {
|
|
102
|
+
const { action, projectPath, specId, content } = args;
|
|
103
|
+
switch (action) {
|
|
104
|
+
case 'export':
|
|
105
|
+
if (!specId) {
|
|
106
|
+
return toolResult(formatWarning('Missing specId', 'Provide `specId` for the export action.'), undefined, true);
|
|
107
|
+
}
|
|
108
|
+
return handleExport(projectPath, specId);
|
|
109
|
+
case 'generate-sheet':
|
|
110
|
+
return handleGenerateSheet(projectPath);
|
|
111
|
+
case 'import':
|
|
112
|
+
return handleImport(content ?? '');
|
|
113
|
+
case 'generate-script':
|
|
114
|
+
return handleGenerateScript(specId);
|
|
115
|
+
default: {
|
|
116
|
+
const _exhaustive = action;
|
|
117
|
+
return toolResult(formatWarning('Unknown action', `Action "${String(_exhaustive)}" is not supported. Valid values: export | generate-sheet | import | generate-script`), undefined, true);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=google-workspace-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-workspace-handler.js","sourceRoot":"","sources":["../../src/tools/google-workspace-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-specs.d.ts","sourceRoot":"","sources":["../../src/tools/list-specs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqFpF,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"list-specs.d.ts","sourceRoot":"","sources":["../../src/tools/list-specs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqFpF,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAoMjF"}
|
package/dist/tools/list-specs.js
CHANGED
|
@@ -103,13 +103,13 @@ export async function handleListSpecs(params) {
|
|
|
103
103
|
statusCounts[s.status] = (statusCounts[s.status] ?? 0) + 1;
|
|
104
104
|
typeCounts[s.type] = (typeCounts[s.type] ?? 0) + 1;
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
const totalDevHours =
|
|
108
|
-
const totalReviewHours =
|
|
109
|
-
const totalCostUsd =
|
|
106
|
+
const safeSpecs = specs;
|
|
107
|
+
const totalDevHours = safeSpecs.reduce((sum, s) => sum + (s.estimation?.devHours ?? 0), 0);
|
|
108
|
+
const totalReviewHours = safeSpecs.reduce((sum, s) => sum + (s.estimation?.reviewHours ?? 0), 0);
|
|
109
|
+
const totalCostUsd = safeSpecs.reduce((sum, s) => sum + (s.estimation?.totalCostUsd ?? 0), 0);
|
|
110
110
|
// Fetch last modified timestamps from changelogs (AC-09)
|
|
111
111
|
const lastModifiedMap = new Map();
|
|
112
|
-
await Promise.all(
|
|
112
|
+
await Promise.all(safeSpecs.map(async (s) => {
|
|
113
113
|
if (!s.specPath) {
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
@@ -143,21 +143,23 @@ export async function handleListSpecs(params) {
|
|
|
143
143
|
type: s.type,
|
|
144
144
|
tags: s.tags,
|
|
145
145
|
}))
|
|
146
|
-
:
|
|
146
|
+
: safeSpecs.map((s) => ({
|
|
147
147
|
id: s.id,
|
|
148
148
|
title: s.title,
|
|
149
149
|
type: s.type,
|
|
150
150
|
scope: s.scope,
|
|
151
151
|
status: s.status,
|
|
152
|
-
difficulty: String(s.difficulty),
|
|
152
|
+
difficulty: s.difficulty !== undefined ? String(s.difficulty) : undefined,
|
|
153
153
|
risk: s.risk,
|
|
154
154
|
target: s.target,
|
|
155
155
|
tags: s.tags,
|
|
156
156
|
gitBranch: s.gitBranch,
|
|
157
|
-
estimation:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
estimation: s.estimation
|
|
158
|
+
? {
|
|
159
|
+
devHours: s.estimation.devHours ?? 0,
|
|
160
|
+
totalCostUsd: s.estimation.totalCostUsd ?? 0,
|
|
161
|
+
}
|
|
162
|
+
: undefined,
|
|
161
163
|
createdAt: s.createdAt,
|
|
162
164
|
updatedAt: s.updatedAt,
|
|
163
165
|
lastModified: lastModifiedMap.get(s.id) ?? '\u2014',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-specs.js","sourceRoot":"","sources":["../../src/tools/list-specs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"list-specs.js","sourceRoot":"","sources":["../../src/tools/list-specs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-browser-validate-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-browser-validate-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+BpE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// tools/register-browser-validate-tools.ts — SPEC-308: Register validate_browser tool
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { safe } from './safe-handler.js';
|
|
4
|
+
import { handleValidateBrowser } from './browser-validate-handler.js';
|
|
5
|
+
export function registerBrowserValidateTools(server) {
|
|
6
|
+
server.registerTool('validate_browser', {
|
|
7
|
+
description: 'Extract UI-testable assertions from a spec and run them against a live URL using Playwright. ' +
|
|
8
|
+
'If Playwright is not installed, generates a ready-to-run test file in `tests/e2e/`. ' +
|
|
9
|
+
'Parses acceptance criteria checkboxes (- [ ]) to detect visibility, text, navigation, and form assertions. ' +
|
|
10
|
+
'Useful for validating that a deployed UI meets the spec before marking it done.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
projectPath: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.describe('Absolute path to the project root (e.g. "/home/user/my-app").'),
|
|
16
|
+
specId: z.string().min(1).describe('Spec ID to validate (e.g. "SPEC-042").'),
|
|
17
|
+
baseUrl: z
|
|
18
|
+
.string()
|
|
19
|
+
.min(1)
|
|
20
|
+
.describe('Base URL of the running application to test against (e.g. "http://localhost:3000"). ' +
|
|
21
|
+
'The application must be running before calling this tool.'),
|
|
22
|
+
},
|
|
23
|
+
annotations: {
|
|
24
|
+
title: 'Browser Validation',
|
|
25
|
+
readOnlyHint: false,
|
|
26
|
+
destructiveHint: false,
|
|
27
|
+
},
|
|
28
|
+
}, safe((args) => handleValidateBrowser(args)));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=register-browser-validate-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-browser-validate-tools.js","sourceRoot":"","sources":["../../src/tools/register-browser-validate-tools.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAGtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAA6B,MAAM,+BAA+B,CAAC;AAEjG,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,+FAA+F;YAC/F,sFAAsF;YACtF,6GAA6G;YAC7G,iFAAiF;QACnF,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,+DAA+D,CAAC;YAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAC5E,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,sFAAsF;gBACpF,2DAA2D,CAC9D;SACJ;QACD,WAAW,EAAE;YACX,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;SACvB;KACF,EACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAA4B,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-diagram-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-diagram-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+B5D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// tools/register-diagram-tools.ts — SPEC-311: Register generate_diagram tool
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { handleGenerateDiagram } from './diagram-handler.js';
|
|
4
|
+
import { safeLicensed } from './safe-handler.js';
|
|
5
|
+
export function registerDiagramTools(server) {
|
|
6
|
+
// generate_diagram — SPEC-311
|
|
7
|
+
server.registerTool('generate_diagram', {
|
|
8
|
+
description: 'Generate a visual diagram from a text description. ' +
|
|
9
|
+
'Supports Excalidraw (interactive JSON + shareable URL) and Mermaid (text-based) output formats. ' +
|
|
10
|
+
'Use for architecture, data-flow, sequence, ER, and flow diagrams.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
description: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.max(2000)
|
|
16
|
+
.describe('Text description of the diagram. Use "->" or "→" to connect nodes. Example: "User -> API -> DB"'),
|
|
17
|
+
diagramType: z
|
|
18
|
+
.enum(['architecture', 'data-flow', 'sequence', 'er', 'flow'])
|
|
19
|
+
.describe('Type of diagram. Valid values: architecture, data-flow, sequence, er, flow'),
|
|
20
|
+
format: z
|
|
21
|
+
.enum(['mermaid', 'excalidraw'])
|
|
22
|
+
.default('excalidraw')
|
|
23
|
+
.describe('Output format. Valid values: mermaid (text diagram), excalidraw (interactive JSON + URL)'),
|
|
24
|
+
},
|
|
25
|
+
annotations: { readOnlyHint: true },
|
|
26
|
+
}, safeLicensed('generate_diagram', async (args) => handleGenerateDiagram(args)));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=register-diagram-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-diagram-tools.js","sourceRoot":"","sources":["../../src/tools/register-diagram-tools.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAG7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,8BAA8B;IAC9B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,qDAAqD;YACrD,kGAAkG;YAClG,mEAAmE;QACrE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,IAAI,CAAC;iBACT,QAAQ,CACP,iGAAiG,CAClG;YACH,WAAW,EAAE,CAAC;iBACX,IAAI,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;iBAC7D,QAAQ,CAAC,4EAA4E,CAAC;YACzF,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;iBAC/B,OAAO,CAAC,YAAY,CAAC;iBACrB,QAAQ,CACP,0FAA0F,CAC3F;SACJ;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAC9E,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-github-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-github-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"register-github-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-github-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkF3D"}
|
|
@@ -23,8 +23,9 @@ export function registerGitHubTools(server) {
|
|
|
23
23
|
// review_pr — pro tier (read-only analysis)
|
|
24
24
|
server.registerTool('review_pr', {
|
|
25
25
|
description: 'Analyze a Pull Request diff for review findings. ' +
|
|
26
|
-
'Supports review types: summary | detailed | security | performance | expert. ' +
|
|
26
|
+
'Supports review types: summary | detailed | security | performance | expert | quality. ' +
|
|
27
27
|
'Use expert for multi-dimensional analysis (architecture, security, tests, conventions, spec-drift). ' +
|
|
28
|
+
'Use quality for semantic code quality analysis (duplication, complexity, dead-code). ' +
|
|
28
29
|
'Does NOT post comments — returns analysis for the user to decide.',
|
|
29
30
|
inputSchema: ReviewPRSchema.shape,
|
|
30
31
|
annotations: { title: 'Review PR', readOnlyHint: true },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-github-tools.js","sourceRoot":"","sources":["../../src/tools/register-github-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAGzF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3F,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,kFAAkF;YAClF,4FAA4F;QAC9F,WAAW,EAAE,sBAAsB,CAAC,KAAK;QACzC,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE;KACnE,EACD,YAAY,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACjD,sBAAsB,CAAC,IAA8D,CAAC,CACvF,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,4DAA4D;YAC5D,qDAAqD;YACrD,6CAA6C;QAC/C,WAAW,EAAE,cAAc,CAAC,KAAK;QACjC,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE;KACxD,EACD,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACtC,cAAc,CAAC,IAA4D,CAAC,CAC7E,CACF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,mDAAmD;YACnD
|
|
1
|
+
{"version":3,"file":"register-github-tools.js","sourceRoot":"","sources":["../../src/tools/register-github-tools.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAGzF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3F,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,kFAAkF;YAClF,4FAA4F;QAC9F,WAAW,EAAE,sBAAsB,CAAC,KAAK;QACzC,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,EAAE;KACnE,EACD,YAAY,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACjD,sBAAsB,CAAC,IAA8D,CAAC,CACvF,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,4DAA4D;YAC5D,qDAAqD;YACrD,6CAA6C;QAC/C,WAAW,EAAE,cAAc,CAAC,KAAK;QACjC,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE;KACxD,EACD,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACtC,cAAc,CAAC,IAA4D,CAAC,CAC7E,CACF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,mDAAmD;YACnD,yFAAyF;YACzF,sGAAsG;YACtG,uFAAuF;YACvF,mEAAmE;QACrE,WAAW,EAAE,cAAc,CAAC,KAAK;QACjC,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE;KACxD,EACD,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACvC,cAAc,CAAC,IAAgD,CAAC,CACjE,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,qFAAqF;YACrF,sDAAsD;QACxD,WAAW,EAAE,mBAAmB,CAAC,KAAK;QACtC,WAAW,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE;KACrF,EACD,YAAY,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC5C,mBAAmB,CACjB,IAAwF,CACzF,CACF,CACF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EACT,uEAAuE;YACvE,6EAA6E;YAC7E,oDAAoD;QACtD,WAAW,EAAE,uBAAuB,CAAC,KAAK;QAC1C,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE;KACjE,EACD,YAAY,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAChD,uBAAuB,CAAC,IAAwD,CAAC,CAClF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-google-workspace-tools.d.ts","sourceRoot":"","sources":["../../src/tools/register-google-workspace-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8CpE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// tools/register-google-workspace-tools.ts — SPEC-310: Register sync_google_workspace tool
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { safe } from './safe-handler.js';
|
|
4
|
+
import { handleGoogleWorkspace } from './google-workspace-handler.js';
|
|
5
|
+
export function registerGoogleWorkspaceTools(server) {
|
|
6
|
+
server.registerTool('sync_google_workspace', {
|
|
7
|
+
description: 'Sync Planu specs with Google Workspace (Docs and Sheets). ' +
|
|
8
|
+
'Export a spec to Google Docs-compatible markdown, generate a CSV for Google Sheets, ' +
|
|
9
|
+
'import content from Google Docs back to spec format, or generate an Apps Script for live sync. ' +
|
|
10
|
+
'No Google API credentials required — all operations produce content you paste into Google.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
action: z
|
|
13
|
+
.enum(['export', 'generate-sheet', 'import', 'generate-script'])
|
|
14
|
+
.describe('Action to perform. Valid values: ' +
|
|
15
|
+
'export (spec → Google Docs format + Apps Script) | ' +
|
|
16
|
+
'generate-sheet (all specs → CSV for Sheets) | ' +
|
|
17
|
+
'import (Google Docs content → spec format) | ' +
|
|
18
|
+
'generate-script (create Apps Script for live sync setup)'),
|
|
19
|
+
projectPath: z
|
|
20
|
+
.string()
|
|
21
|
+
.min(1)
|
|
22
|
+
.describe('Absolute path to the project root (e.g. "/home/user/my-app").'),
|
|
23
|
+
specId: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Spec ID to export or use in script generation (e.g. "SPEC-042"). Required for export action.'),
|
|
28
|
+
content: z
|
|
29
|
+
.string()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Content from Google Docs to import. Required for the import action. ' +
|
|
32
|
+
'Paste the exported markdown from Google Docs here.'),
|
|
33
|
+
},
|
|
34
|
+
annotations: {
|
|
35
|
+
title: 'Google Workspace Sync',
|
|
36
|
+
readOnlyHint: false,
|
|
37
|
+
destructiveHint: false,
|
|
38
|
+
},
|
|
39
|
+
}, safe((args) => handleGoogleWorkspace(args)));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=register-google-workspace-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-google-workspace-tools.js","sourceRoot":"","sources":["../../src/tools/register-google-workspace-tools.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAG3F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAA6B,MAAM,+BAA+B,CAAC;AAEjG,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,4DAA4D;YAC5D,sFAAsF;YACtF,iGAAiG;YACjG,4FAA4F;QAC9F,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;iBAC/D,QAAQ,CACP,mCAAmC;gBACjC,qDAAqD;gBACrD,gDAAgD;gBAChD,+CAA+C;gBAC/C,0DAA0D,CAC7D;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,+DAA+D,CAAC;YAC5E,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CACP,8FAA8F,CAC/F;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,sEAAsE;gBACpE,oDAAoD,CACvD;SACJ;QACD,WAAW,EAAE;YACX,KAAK,EAAE,uBAAuB;YAC9B,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;SACvB;KACF,EACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAA4B,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/github.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB;;;;iBAQjC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;iBAIzB,CAAC;AAEH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/github.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB;;;;iBAQjC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;iBAIzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;iBASzB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;iBAQ9B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;iBAOlC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;iBAYpC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAM7B,CAAC"}
|
|
@@ -17,9 +17,10 @@ export const PRStatusSchema = z.object({
|
|
|
17
17
|
export const ReviewPRSchema = z.object({
|
|
18
18
|
prNumber: z.number().describe('PR number to review'),
|
|
19
19
|
reviewType: z
|
|
20
|
-
.enum(['summary', 'detailed', 'security', 'performance', 'expert'])
|
|
20
|
+
.enum(['summary', 'detailed', 'security', 'performance', 'expert', 'quality'])
|
|
21
21
|
.default('summary')
|
|
22
|
-
.describe('Review type: summary | detailed | security | performance | expert'
|
|
22
|
+
.describe('Review type: summary | detailed | security | performance | expert | quality. ' +
|
|
23
|
+
'Use quality for semantic code quality analysis (duplication, complexity, dead-code).'),
|
|
23
24
|
});
|
|
24
25
|
export const CreateReleaseSchema = z.object({
|
|
25
26
|
version: z.string().max(500).describe('Semver version (e.g., 1.2.0)'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/tools/schemas/github.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,2CAA2C,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC/F,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACpD,UAAU,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/tools/schemas/github.ts"],"names":[],"mappings":"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"}
|