@gherk/requirements-extractor 1.0.0 → 1.0.2

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.
@@ -1,8 +1,8 @@
1
- import type { ExtractionConfig, ExtractionResult } from "./types.js";
1
+ import type { ExtractionCallbacks, ExtractionConfig, ExtractionResult } from "./types.js";
2
2
  /**
3
3
  * Main extraction pipeline.
4
4
  * Processes a PDF through 3 passes: Identify → Classify → Generate
5
5
  * Files are written incrementally in Pass 3 to survive crashes.
6
6
  */
7
- export declare function extractRequirements(config: ExtractionConfig, onProgress?: (message: string) => void): Promise<ExtractionResult>;
7
+ export declare function extractRequirements(config: ExtractionConfig, callbacks?: ExtractionCallbacks): Promise<ExtractionResult>;
8
8
  //# sourceMappingURL=extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAIR,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACvC,OAAO,CAAC,gBAAgB,CAAC,CAsN3B"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIR,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAgP3B"}
package/dist/extractor.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import { parsePdf } from "./pdf-parser.js";
2
2
  import { generate, generateJson } from "./ollama-client.js";
3
3
  import { identifySystemPrompt, identifyUserPrompt, classifySystemPrompt, classifyUserPrompt, generateSystemPrompt, generateUserPrompt, } from "./prompts.js";
4
- import { assignSequences, generateId, ensureOutputDirs, writeSingleRequirement, writeRequirements, } from "./markdown.js";
4
+ import { assignSequences, generateId, ensureOutputDirs, writeSingleRequirement, writeRequirements, toSingleJsonRequirement, } from "./markdown.js";
5
5
  /**
6
6
  * Main extraction pipeline.
7
7
  * Processes a PDF through 3 passes: Identify → Classify → Generate
8
8
  * Files are written incrementally in Pass 3 to survive crashes.
9
9
  */
10
- export async function extractRequirements(config, onProgress) {
11
- const { pdfPath, outputDir, projectPrefix = "ACS", categories, model, ollamaUrl, outputFormat = "markdown", } = config;
10
+ export async function extractRequirements(config, callbacks = {}) {
11
+ const { onProgress, onIdentified, onClassified, onRequirement } = callbacks;
12
+ const { pdfPath, outputDir, projectPrefix = "ACS", categories, model, ollamaUrl, outputFormat = "markdown", filterCategories, maxPerCategory, } = config;
12
13
  // We import DEFAULT_CATEGORIES dynamically to avoid circular dep
13
14
  const { DEFAULT_CATEGORIES } = await import("./types.js");
14
15
  const cats = categories || DEFAULT_CATEGORIES;
@@ -49,6 +50,7 @@ export async function extractRequirements(config, onProgress) {
49
50
  }
50
51
  }
51
52
  log(`✅ Pass 1 complete: ${allRaw.length} requirements identified`);
53
+ onIdentified?.(allRaw.length);
52
54
  if (allRaw.length === 0) {
53
55
  return {
54
56
  success: false,
@@ -95,11 +97,28 @@ export async function extractRequirements(config, onProgress) {
95
97
  category: classifiedMap[req.id_suggestion] || "backend",
96
98
  }));
97
99
  // Assign sequential numbers and filenames
98
- const sequenced = assignSequences(mergedForSequencing, cats, projectPrefix);
99
- // ─── Step 4: Create output directories ───────────────────────────
100
+ let sequenced = assignSequences(mergedForSequencing, cats, projectPrefix);
101
+ // ─── Step 4: Filter by category (if requested) ──────────────────
102
+ if (filterCategories && filterCategories.length > 0) {
103
+ const before = sequenced.length;
104
+ sequenced = sequenced.filter((r) => filterCategories.includes(r.category));
105
+ log(`🔎 Filter: keeping ${filterCategories.join(", ")} → ${sequenced.length}/${before} requirements`);
106
+ }
107
+ // ─── Step 4b: Limit per category (if requested) ─────────────────
108
+ if (maxPerCategory && maxPerCategory > 0) {
109
+ const before = sequenced.length;
110
+ const countByCategory = {};
111
+ sequenced = sequenced.filter((r) => {
112
+ countByCategory[r.category] = (countByCategory[r.category] || 0) + 1;
113
+ return countByCategory[r.category] <= maxPerCategory;
114
+ });
115
+ log(`✂️ Max ${maxPerCategory}/category → ${sequenced.length}/${before} requirements`);
116
+ }
117
+ // Create output directories
100
118
  ensureOutputDirs(outputDir, cats);
101
119
  // ─── Step 5: Pass 3 — Generate & Write Incrementally ─────────────
102
120
  log(`📝 Pass 3: Generating markdown for ${sequenced.length} requirements...`);
121
+ onClassified?.(sequenced.length);
103
122
  const generated = [];
104
123
  const files = [];
105
124
  const errors = [];
@@ -155,6 +174,8 @@ export async function extractRequirements(config, onProgress) {
155
174
  errors.push(`Failed to write ${fullId}`);
156
175
  }
157
176
  }
177
+ // Notify caller of new requirement (for async job system)
178
+ onRequirement?.(toSingleJsonRequirement(genReq, cats), i, sequenced.length);
158
179
  }
159
180
  log(`✅ Pass 3 complete: ${generated.length} files generated`);
160
181
  // ─── Step 6: Write README + JSON (final summary) ─────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,95 +7,91 @@ import path from "node:path";
7
7
  import { extractRequirements } from "./extractor.js";
8
8
  import { checkOllama } from "./ollama-client.js";
9
9
  import { DEFAULT_CATEGORIES } from "./types.js";
10
+ import { jobManager } from "./job-manager.js";
10
11
  // ─── MCP Server ─────────────────────────────────────────────────────
11
12
  const server = new McpServer({
12
13
  name: "mcp-requirements-extractor",
13
14
  version: "1.0.0",
14
15
  });
16
+ const VALID_CATEGORIES = ["backend", "frontend", "mobile", "infra", "devops", "non-functional"];
15
17
  // ─── Tool: extract_requirements ─────────────────────────────────────
16
- server.tool("extract_requirements", `Extracts requirements from a PDF document, classifies them by layer (backend, frontend, mobile, backoffice, non-functional), and generates structured markdown files.
18
+ server.tool("extract_requirements", `Extracts requirements from a PDF document and generates structured documentation.
19
+ Runs asynchronously — returns a jobId immediately. Use get_extraction_progress to poll for results.
17
20
 
18
- Uses Ollama with a local LLM to analyze the PDF content through a 3-pass pipeline:
19
- 1. Identify individual requirements from the text
20
- 2. Classify each requirement into its correct layer
21
- 3. Generate detailed markdown documentation for each one
22
-
23
- The output follows a standardized template with metadata, objectives, technical descriptions (with Mermaid diagrams), considerations, and acceptance criteria.`, {
21
+ Pipeline: 1. Identify requirements 2. Classify by layer 3. Generate markdown/JSON
22
+ Categories: backend, frontend, mobile, infra, devops, non-functional`, {
24
23
  pdfPath: z.string().describe("Absolute path to the PDF file to analyze"),
25
- outputDir: z.string().describe("Absolute path to the output directory where requirement files will be written"),
26
- projectPrefix: z.string().optional().default("ACS").describe("Project prefix for requirement IDs (e.g., 'ACS' generates ACS_BE_01, ACS_DP_02, etc.)"),
27
- outputFormat: z.enum(["markdown", "json", "both"]).optional().default("markdown").describe("Output format: 'markdown' for .md files, 'json' for requirements.json, 'both' for both"),
24
+ outputDir: z.string().describe("Absolute path to the output directory"),
25
+ projectPrefix: z.string().optional().default("ACS").describe("Project prefix for requirement IDs (e.g., 'ACS' ACS_BE_01)"),
26
+ outputFormat: z.enum(["markdown", "json", "both"]).optional().default("markdown").describe("Output format: markdown files, json, or both"),
27
+ filterCategories: z.array(z.enum(VALID_CATEGORIES)).optional().describe("Only generate for these categories. Omit for all."),
28
28
  model: z.string().optional().default("qwen3:8b").describe("Ollama model to use"),
29
29
  ollamaUrl: z.string().optional().default("http://localhost:11434").describe("Ollama API base URL"),
30
- }, async ({ pdfPath, outputDir, projectPrefix, outputFormat, model, ollamaUrl }) => {
30
+ }, async ({ pdfPath, outputDir, projectPrefix, outputFormat, filterCategories, model, ollamaUrl }) => {
31
31
  // Validate PDF exists
32
32
  if (!fs.existsSync(pdfPath)) {
33
33
  return {
34
- content: [
35
- {
36
- type: "text",
37
- text: `❌ Error: PDF file not found: ${pdfPath}`,
38
- },
39
- ],
34
+ content: [{ type: "text", text: `❌ PDF not found: ${pdfPath}` }],
40
35
  };
41
36
  }
42
37
  // Check Ollama is running
43
38
  const ollamaCheck = await checkOllama({ model, baseUrl: ollamaUrl });
44
39
  if (!ollamaCheck.available) {
45
40
  return {
46
- content: [
47
- {
48
- type: "text",
49
- text: `❌ Error: Ollama not available. ${ollamaCheck.error}`,
50
- },
51
- ],
52
- };
53
- }
54
- // Run extraction
55
- const progressMessages = [];
56
- try {
57
- const result = await extractRequirements({
58
- pdfPath,
59
- outputDir,
60
- projectPrefix,
61
- outputFormat,
62
- model,
63
- ollamaUrl,
64
- }, (msg) => progressMessages.push(msg));
65
- const categoryReport = Object.entries(result.byCategory)
66
- .map(([cat, count]) => {
67
- const catInfo = DEFAULT_CATEGORIES.find((c) => c.id === cat);
68
- return ` - ${catInfo?.label || cat}: ${count} requisitos`;
69
- })
70
- .join("\n");
71
- const summary = `✅ Extraction complete!
72
-
73
- 📊 Results:
74
- - Total requirements: ${result.totalRequirements}
75
- - Output directory: ${result.outputDir}
76
-
77
- 📂 By category:
78
- ${categoryReport}
79
-
80
- 📄 Files generated: ${result.files.length}
81
- ${result.errors.length > 0 ? `\n⚠️ Errors:\n${result.errors.join("\n")}` : ""}
82
-
83
- 📋 Progress log:
84
- ${progressMessages.join("\n")}`;
85
- return {
86
- content: [{ type: "text", text: summary }],
41
+ content: [{ type: "text", text: `❌ Ollama not available. ${ollamaCheck.error}` }],
87
42
  };
88
43
  }
89
- catch (e) {
44
+ // Create job and start extraction in background
45
+ const job = jobManager.createJob(outputDir);
46
+ // Fire and forget — extraction runs in background
47
+ extractRequirements({ pdfPath, outputDir, projectPrefix, outputFormat, filterCategories, model, ollamaUrl }, {
48
+ onProgress: (msg) => jobManager.updatePhase(job.id, msg),
49
+ onIdentified: (count) => jobManager.setIdentifiedCount(job.id, count),
50
+ onClassified: (count) => jobManager.setToGenerateCount(job.id, count),
51
+ onRequirement: (req) => jobManager.pushRequirement(job.id, req),
52
+ })
53
+ .then(() => jobManager.completeJob(job.id))
54
+ .catch((e) => jobManager.failJob(job.id, String(e)));
55
+ return {
56
+ content: [{
57
+ type: "text",
58
+ text: JSON.stringify({
59
+ jobId: job.id,
60
+ status: "running",
61
+ message: "Extraction started. Use get_extraction_progress to poll for results.",
62
+ }),
63
+ }],
64
+ };
65
+ });
66
+ // ─── Tool: get_extraction_progress ──────────────────────────────────
67
+ server.tool("get_extraction_progress", `Poll the progress of a running extraction job.
68
+ Returns new requirements since the 'since' index, allowing incremental consumption.
69
+ Call repeatedly to get results as they are generated, one by one.`, {
70
+ jobId: z.string().describe("Job ID returned by extract_requirements"),
71
+ since: z.number().optional().default(0).describe("Return requirements generated AFTER this index (0-based). Track this to avoid re-fetching."),
72
+ }, async ({ jobId, since }) => {
73
+ const progress = jobManager.getProgress(jobId, since);
74
+ if (!progress) {
90
75
  return {
91
- content: [
92
- {
93
- type: "text",
94
- text: `❌ Extraction failed: ${e}\n\nProgress:\n${progressMessages.join("\n")}`,
95
- },
96
- ],
76
+ content: [{ type: "text", text: `❌ Job not found: ${jobId}` }],
97
77
  };
98
78
  }
79
+ return {
80
+ content: [{
81
+ type: "text",
82
+ text: JSON.stringify(progress),
83
+ }],
84
+ };
85
+ });
86
+ // ─── Tool: list_jobs ────────────────────────────────────────────────
87
+ server.tool("list_jobs", "Lists all extraction jobs (running and completed).", {}, async () => {
88
+ const jobs = jobManager.listJobs();
89
+ return {
90
+ content: [{
91
+ type: "text",
92
+ text: JSON.stringify(jobs),
93
+ }],
94
+ };
99
95
  });
100
96
  // ─── Tool: list_requirements ────────────────────────────────────────
101
97
  server.tool("list_requirements", "Lists all requirement files in a directory, organized by category.", {
@@ -103,12 +99,7 @@ server.tool("list_requirements", "Lists all requirement files in a directory, or
103
99
  }, async ({ requirementsDir }) => {
104
100
  if (!fs.existsSync(requirementsDir)) {
105
101
  return {
106
- content: [
107
- {
108
- type: "text",
109
- text: `❌ Directory not found: ${requirementsDir}`,
110
- },
111
- ],
102
+ content: [{ type: "text", text: `❌ Directory not found: ${requirementsDir}` }],
112
103
  };
113
104
  }
114
105
  let output = `📋 Requirements in ${requirementsDir}\n\n`;
@@ -149,12 +140,7 @@ server.tool("get_requirement", "Returns the full content of a specific requireme
149
140
  }, async ({ requirementsDir, requirementId }) => {
150
141
  if (!fs.existsSync(requirementsDir)) {
151
142
  return {
152
- content: [
153
- {
154
- type: "text",
155
- text: `❌ Directory not found: ${requirementsDir}`,
156
- },
157
- ],
143
+ content: [{ type: "text", text: `❌ Directory not found: ${requirementsDir}` }],
158
144
  };
159
145
  }
160
146
  // Search for the file
@@ -170,23 +156,13 @@ server.tool("get_requirement", "Returns the full content of a specific requireme
170
156
  file.toLowerCase() === searchId) {
171
157
  const content = fs.readFileSync(path.join(catDir, file), "utf-8");
172
158
  return {
173
- content: [
174
- {
175
- type: "text",
176
- text: `📄 **${entry.name}/${file}**\n\n${content}`,
177
- },
178
- ],
159
+ content: [{ type: "text", text: `📄 **${entry.name}/${file}**\n\n${content}` }],
179
160
  };
180
161
  }
181
162
  }
182
163
  }
183
164
  return {
184
- content: [
185
- {
186
- type: "text",
187
- text: `❌ Requirement "${requirementId}" not found in ${requirementsDir}`,
188
- },
189
- ],
165
+ content: [{ type: "text", text: `❌ Requirement "${requirementId}" not found in ${requirementsDir}` }],
190
166
  };
191
167
  });
192
168
  // ─── Start Server ───────────────────────────────────────────────────
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { JsonRequirement } from "./types.js";
2
+ export type JobStatus = "running" | "completed" | "failed";
3
+ export interface ExtractionJob {
4
+ id: string;
5
+ status: JobStatus;
6
+ startedAt: Date;
7
+ finishedAt?: Date;
8
+ /** Total requirements identified (set after Pass 1) */
9
+ totalIdentified: number;
10
+ /** Total requirements to generate (after filtering, set after Pass 2) */
11
+ totalToGenerate: number;
12
+ /** Requirements generated so far */
13
+ generated: JsonRequirement[];
14
+ /** Current phase description */
15
+ phase: string;
16
+ /** Error message if failed */
17
+ error?: string;
18
+ /** Output directory */
19
+ outputDir: string;
20
+ }
21
+ export interface ProgressResponse {
22
+ jobId: string;
23
+ status: JobStatus;
24
+ phase: string;
25
+ totalIdentified: number;
26
+ totalToGenerate: number;
27
+ done: number;
28
+ finished: boolean;
29
+ /** New requirements since `since` index */
30
+ new: JsonRequirement[];
31
+ error?: string;
32
+ }
33
+ declare class JobManager {
34
+ private jobs;
35
+ createJob(outputDir: string): ExtractionJob;
36
+ getJob(id: string): ExtractionJob | undefined;
37
+ updatePhase(id: string, phase: string): void;
38
+ setIdentifiedCount(id: string, count: number): void;
39
+ setToGenerateCount(id: string, count: number): void;
40
+ pushRequirement(id: string, req: JsonRequirement): void;
41
+ completeJob(id: string): void;
42
+ failJob(id: string, error: string): void;
43
+ getProgress(id: string, since?: number): ProgressResponse | null;
44
+ listJobs(): Array<{
45
+ id: string;
46
+ status: JobStatus;
47
+ phase: string;
48
+ done: number;
49
+ total: number;
50
+ }>;
51
+ }
52
+ export declare const jobManager: JobManager;
53
+ export {};
54
+ //# sourceMappingURL=job-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-manager.d.ts","sourceRoot":"","sources":["../src/job-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,eAAe,EAAE,MAAM,YAAY,CAAC;AAKxE,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,GAAG,EAAE,eAAe,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,cAAM,UAAU;IACZ,OAAO,CAAC,IAAI,CAAyC;IAErD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAgB3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5C,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnD,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnD,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI;IAKvD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS7B,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAUxC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,gBAAgB,GAAG,IAAI;IAiBnE,QAAQ,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CASnG;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import crypto from "node:crypto";
2
+ // ─── Job Manager (singleton) ─────────────────────────────────────────
3
+ class JobManager {
4
+ jobs = new Map();
5
+ createJob(outputDir) {
6
+ const id = crypto.randomUUID().slice(0, 8);
7
+ const job = {
8
+ id,
9
+ status: "running",
10
+ startedAt: new Date(),
11
+ totalIdentified: 0,
12
+ totalToGenerate: 0,
13
+ generated: [],
14
+ phase: "Starting...",
15
+ outputDir,
16
+ };
17
+ this.jobs.set(id, job);
18
+ return job;
19
+ }
20
+ getJob(id) {
21
+ return this.jobs.get(id);
22
+ }
23
+ updatePhase(id, phase) {
24
+ const job = this.jobs.get(id);
25
+ if (job)
26
+ job.phase = phase;
27
+ }
28
+ setIdentifiedCount(id, count) {
29
+ const job = this.jobs.get(id);
30
+ if (job)
31
+ job.totalIdentified = count;
32
+ }
33
+ setToGenerateCount(id, count) {
34
+ const job = this.jobs.get(id);
35
+ if (job)
36
+ job.totalToGenerate = count;
37
+ }
38
+ pushRequirement(id, req) {
39
+ const job = this.jobs.get(id);
40
+ if (job)
41
+ job.generated.push(req);
42
+ }
43
+ completeJob(id) {
44
+ const job = this.jobs.get(id);
45
+ if (job) {
46
+ job.status = "completed";
47
+ job.finishedAt = new Date();
48
+ job.phase = "Done";
49
+ }
50
+ }
51
+ failJob(id, error) {
52
+ const job = this.jobs.get(id);
53
+ if (job) {
54
+ job.status = "failed";
55
+ job.finishedAt = new Date();
56
+ job.error = error;
57
+ job.phase = "Failed";
58
+ }
59
+ }
60
+ getProgress(id, since = 0) {
61
+ const job = this.jobs.get(id);
62
+ if (!job)
63
+ return null;
64
+ return {
65
+ jobId: job.id,
66
+ status: job.status,
67
+ phase: job.phase,
68
+ totalIdentified: job.totalIdentified,
69
+ totalToGenerate: job.totalToGenerate,
70
+ done: job.generated.length,
71
+ finished: job.status !== "running",
72
+ new: job.generated.slice(since),
73
+ error: job.error,
74
+ };
75
+ }
76
+ listJobs() {
77
+ return Array.from(this.jobs.values()).map((j) => ({
78
+ id: j.id,
79
+ status: j.status,
80
+ phase: j.phase,
81
+ done: j.generated.length,
82
+ total: j.totalToGenerate,
83
+ }));
84
+ }
85
+ }
86
+ // Singleton
87
+ export const jobManager = new JobManager();
88
+ //# sourceMappingURL=job-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-manager.js","sourceRoot":"","sources":["../src/job-manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Category, ClassifiedRequirement, ExtractionResult, GeneratedRequirement, OutputFormat } from "./types.js";
1
+ import type { Category, ClassifiedRequirement, ExtractionResult, GeneratedRequirement, JsonRequirement, OutputFormat } from "./types.js";
2
2
  /**
3
3
  * Generate the filename for a requirement.
4
4
  */
@@ -20,6 +20,14 @@ export declare function writeSingleRequirement(req: GeneratedRequirement, output
20
20
  * Write all generated requirements to disk.
21
21
  */
22
22
  export declare function writeRequirements(requirements: GeneratedRequirement[], outputDir: string, categories: Category[], outputFormat?: OutputFormat): ExtractionResult;
23
+ /**
24
+ * Convert generated requirements to a structured JSON array.
25
+ */
26
+ export declare function toJsonRequirements(requirements: GeneratedRequirement[], categories: Category[]): JsonRequirement[];
27
+ /**
28
+ * Convert a single generated requirement to JSON format.
29
+ */
30
+ export declare function toSingleJsonRequirement(req: GeneratedRequirement, categories: Category[]): JsonRequirement;
23
31
  /**
24
32
  * Assign sequential numbers per category and generate filenames.
25
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EAEpB,YAAY,EACf,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACZ,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,GACvB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,oBAAoB,EAAE,EACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,EACtB,YAAY,GAAE,YAAyB,GACxC,gBAAgB,CA2DlB;AA4ED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,EACtB,aAAa,EAAE,MAAM,GACtB,qBAAqB,EAAE,CAoBzB"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACf,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACd,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACZ,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,GACvB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAYf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,YAAY,EAAE,oBAAoB,EAAE,EACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,QAAQ,EAAE,EACtB,YAAY,GAAE,YAAyB,GACxC,gBAAgB,CA2DlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,oBAAoB,EAAE,EACpC,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,EAAE,CAEnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,oBAAoB,EACzB,UAAU,EAAE,QAAQ,EAAE,GACvB,eAAe,CAoBjB;AA8CD;;GAEG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,EACtB,aAAa,EAAE,MAAM,GACtB,qBAAqB,EAAE,CAoBzB"}
package/dist/markdown.js CHANGED
@@ -117,24 +117,28 @@ export function writeRequirements(requirements, outputDir, categories, outputFor
117
117
  /**
118
118
  * Convert generated requirements to a structured JSON array.
119
119
  */
120
- function toJsonRequirements(requirements, categories) {
121
- return requirements.map((req) => {
122
- const cat = categories.find((c) => c.id === req.category);
123
- const fullId = `${req.prefix}_${String(req.seq).padStart(2, "0")}`;
124
- // Extract acceptance criteria from markdown (lines starting with - [ ])
125
- const criteriaMatches = req.markdown.match(/^- \[ \] .+$/gm) || [];
126
- const acceptance_criteria = criteriaMatches.map((line) => line.replace(/^- \[ \] /, "").trim());
127
- return {
128
- id: fullId,
129
- title: req.title,
130
- category: req.category,
131
- category_label: cat?.label || req.category,
132
- type: req.category === "non-functional" ? "No Funcional" : "Funcional",
133
- page_range: req.page_range,
134
- description: req.markdown,
135
- acceptance_criteria,
136
- };
137
- });
120
+ export function toJsonRequirements(requirements, categories) {
121
+ return requirements.map((req) => toSingleJsonRequirement(req, categories));
122
+ }
123
+ /**
124
+ * Convert a single generated requirement to JSON format.
125
+ */
126
+ export function toSingleJsonRequirement(req, categories) {
127
+ const cat = categories.find((c) => c.id === req.category);
128
+ const fullId = `${req.prefix}_${String(req.seq).padStart(2, "0")}`;
129
+ // Extract acceptance criteria from markdown (lines starting with - [ ])
130
+ const criteriaMatches = req.markdown.match(/^- \[ \] .+$/gm) || [];
131
+ const acceptance_criteria = criteriaMatches.map((line) => line.replace(/^- \[ \] /, "").trim());
132
+ return {
133
+ id: fullId,
134
+ title: req.title,
135
+ category: req.category,
136
+ category_label: cat?.label || req.category,
137
+ type: req.category === "non-functional" ? "No Funcional" : "Funcional",
138
+ page_range: req.page_range,
139
+ description: req.markdown,
140
+ acceptance_criteria,
141
+ };
138
142
  }
139
143
  /**
140
144
  * Generate a README.md index for the output directory.
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
package/dist/prompts.d.ts CHANGED
@@ -6,6 +6,7 @@ export declare function classifyUserPrompt(requirements: Array<{
6
6
  id_suggestion: string;
7
7
  title: string;
8
8
  summary: string;
9
+ raw_text: string;
9
10
  }>, categories: Category[]): string;
10
11
  export declare function generateSystemPrompt(): string;
11
12
  export declare function generateUserPrompt(req: {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBhG;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAoBnE;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,KAAK,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9E,UAAU,EAAE,QAAQ,EAAE,GACvB,MAAM,CAiBR;AAID,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,GACF,MAAM,CA4DR"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBhG;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,CAiCnE;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,KAAK,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAChG,UAAU,EAAE,QAAQ,EAAE,GACvB,MAAM,CAwBR;AAID,wBAAgB,oBAAoB,IAAI,MAAM,CAY7C;AAED,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,GACF,MAAM,CA4DR"}
package/dist/prompts.js CHANGED
@@ -35,37 +35,57 @@ export function classifySystemPrompt(categories) {
35
35
  const catDescriptions = categories
36
36
  .map((c) => `- "${c.id}": ${c.label} — ${c.description}`)
37
37
  .join("\n");
38
- return `Eres un arquitecto de software. Tu tarea es clasificar requisitos en la capa correcta del sistema.
38
+ return `Eres un arquitecto de software clasificando requisitos de un proyecto en capas técnicas.
39
39
 
40
- CATEGORÍAS DISPONIBLES:
40
+ CATEGORÍAS:
41
41
  ${catDescriptions}
42
42
 
43
- REGLAS:
44
- - Cada requisito debe ir a UNA SOLA categoría
45
- - Si un requisito tiene componentes en varias capas (ej: "CRUD de vehículos" tiene backend + backoffice), clasifícalo en la capa PRINCIPAL
46
- - Los requisitos de API, base de datos y lógica de negocio van a "backend"
47
- - Las pantallas de administración van a "bo" (back office)
48
- - Las pantallas del usuario final en web van a "frontend"
49
- - Las pantallas en app móvil van a "mobile"
50
- - Infraestructura, entornos, seguridad global y rendimiento van a "non-functional"
43
+ REGLAS DE CLASIFICACIÓN (aplicar en ESTE ORDEN de prioridad):
44
+
45
+ 1. **"mobile"** → Si el requisito es específico de apps móviles: iOS, Android, Bluetooth, GPS del dispositivo, notificaciones push, cámara, escáner QR, app nativa
46
+ - Ejemplos: "App nativa del usuario", "Notificaciones push", "Escaneo de QR desde el móvil"
47
+
48
+ 2. **"frontend"** Si el requisito involucra CUALQUIER interfaz web o pantalla visual: dashboards, CRUDs, portales, formularios, menús, configuración visual, subida de documentos, templates, gestión desde interfaz, reportes visuales, paneles de administración
49
+ - Ejemplos: "Dashboard operativo", "CRUD de entidades", "Subida de documentos", "Panel de gestión", "Menú de configuración"
50
+
51
+ 3. **"infra"** → Si el requisito trata sobre: base de datos, esquemas de datos, migraciones, modelos de datos, conexiones a BD, almacenamiento de ficheros, colas de mensajes, caché, estructura de datos persistente
52
+ - Ejemplos: "Esquema de base de datos", "Modelo de datos", "Configuración de Redis", "Migración de tablas"
53
+
54
+ 4. **"devops"** → Si el requisito trata sobre: CI/CD, entornos (UAT/PRD/staging), despliegue, Docker, Kubernetes, monitorización de sistemas, pipelines, servidores, hosting, DNS
55
+ - Ejemplos: "Entorno UAT", "Pipeline de despliegue", "Docker", "Monitorización del sistema"
56
+
57
+ 5. **"non-functional"** → Si el requisito trata sobre: seguridad, cifrado, rendimiento, escalabilidad, calidad de código, SLAs, auditoría, privacidad GDPR, accesibilidad, testing, confidencialidad, acuerdos legales
58
+ - Ejemplos: "Cifrado de datos", "GDPR compliance", "SLA de disponibilidad", "Acuerdo de confidencialidad"
59
+
60
+ 6. **"backend"** → SOLO si NO encaja en ninguna categoría anterior. Exclusivamente para: API REST puras sin pantalla, lógica de negocio interna, algoritmos, integraciones con sistemas externos, sincronización entre sistemas, webhooks, reglas de negocio automáticas
61
+ - Ejemplos: "API de autenticación", "Sincronización con sistema externo", "Motor de asignación", "Integración con pasarela de pago"
62
+
63
+ ⚠️ REGLA DE ORO: Si el título o resumen contiene "Management", "Configuration", "Menu", "Dashboard", "Upload", "Template", "Settings", "CRUD", "Monitor", "List", "Rules", "Access", "Profile", "gestión" → es "frontend", NO "backend". Las pantallas y gestión son FRONTEND.
51
64
 
52
65
  Responde ÚNICAMENTE con un JSON array.`;
53
66
  }
54
67
  export function classifyUserPrompt(requirements, categories) {
55
68
  const reqList = requirements
56
- .map((r, i) => `${i + 1}. [${r.id_suggestion}] ${r.title}: ${r.summary}`)
69
+ .map((r, i) => `${i + 1}. [${r.id_suggestion}] "${r.title}": ${r.summary}${r.raw_text ? `\n Contexto: ${r.raw_text.substring(0, 200)}` : ""}`)
57
70
  .join("\n");
58
71
  const catIds = categories.map((c) => `"${c.id}"`).join(", ");
59
- return `Clasifica cada uno de estos requisitos en una de las categorías: ${catIds}
72
+ return `Clasifica cada requisito en UNA categoría: ${catIds}
60
73
 
61
74
  REQUISITOS:
62
75
  ${reqList}
63
76
 
64
- Responde SOLO con un JSON array donde cada objeto tiene:
65
- - "id_suggestion": el mismo id del requisito
66
- - "category": la categoría asignada (uno de: ${catIds})
67
-
68
- Ejemplo: [{"id_suggestion": "auth", "category": "backend"}, {"id_suggestion": "dashboard", "category": "bo"}]`;
77
+ Responde SOLO con un JSON array. Ejemplo:
78
+ [
79
+ {"id_suggestion": "auth_api", "category": "backend"},
80
+ {"id_suggestion": "admin_dashboard", "category": "frontend"},
81
+ {"id_suggestion": "entity_crud", "category": "frontend"},
82
+ {"id_suggestion": "user_management", "category": "frontend"},
83
+ {"id_suggestion": "push_notifications", "category": "mobile"},
84
+ {"id_suggestion": "db_schema", "category": "infra"},
85
+ {"id_suggestion": "uat_environment", "category": "devops"},
86
+ {"id_suggestion": "gdpr_compliance", "category": "non-functional"},
87
+ {"id_suggestion": "external_sync", "category": "backend"}
88
+ ]`;
69
89
  }
70
90
  // ─── Pass 3: Generate Markdown ──────────────────────────────────────
71
91
  export function generateSystemPrompt() {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB;IAChC,OAAO;;;;;;;;;;wFAU6E,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe;IACpF,OAAO,2CAA2C,SAAS,IAAI,OAAO;;;;;;;;;;;EAWxE,SAAS;;;;0HAI+G,SAAS,IAAI,OAAO,gDAAgD,CAAC;AAC/L,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB,CAAC,UAAsB;IACvD,MAAM,eAAe,GAAG,UAAU;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO;;;EAGT,eAAe;;;;;;;;;;;uCAWsB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,YAA8E,EAC9E,UAAsB;IAEtB,MAAM,OAAO,GAAG,YAAY;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACxE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,oEAAoE,MAAM;;;EAGnF,OAAO;;;;+CAIsC,MAAM;;8GAEyD,CAAC;AAC/G,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB;IAChC,OAAO;;;;;;;;;;kEAUuD,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,GAQC;IAED,OAAO;;;QAGH,GAAG,CAAC,EAAE;YACF,GAAG,CAAC,KAAK;aACR,GAAG,CAAC,OAAO;aACX,GAAG,CAAC,aAAa;UACpB,GAAG,CAAC,IAAI;uBACK,GAAG,CAAC,UAAU;oBACjB,GAAG,CAAC,QAAQ;;;;IAI5B,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;;;;wBAIf,GAAG,CAAC,EAAE;iBACb,GAAG,CAAC,KAAK;eACX,GAAG,CAAC,IAAI;kBACL,GAAG,CAAC,aAAa;iBAClB,GAAG,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4KAqC6I,CAAC;AAC7K,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB;IAChC,OAAO;;;;;;;;;;wFAU6E,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe;IACpF,OAAO,2CAA2C,SAAS,IAAI,OAAO;;;;;;;;;;;EAWxE,SAAS;;;;0HAI+G,SAAS,IAAI,OAAO,gDAAgD,CAAC;AAC/L,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB,CAAC,UAAsB;IACvD,MAAM,eAAe,GAAG,UAAU;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;SACxD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO;;;EAGT,eAAe;;;;;;;;;;;;;;;;;;;;;;;;uCAwBsB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,YAAgG,EAChG,UAAsB;IAEtB,MAAM,OAAO,GAAG,YAAY;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SAC/I,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO,8CAA8C,MAAM;;;EAG7D,OAAO;;;;;;;;;;;;;EAaP,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB;IAChC,OAAO;;;;;;;;;;kEAUuD,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,GAQC;IAED,OAAO;;;QAGH,GAAG,CAAC,EAAE;YACF,GAAG,CAAC,KAAK;aACR,GAAG,CAAC,OAAO;aACX,GAAG,CAAC,aAAa;UACpB,GAAG,CAAC,IAAI;uBACK,GAAG,CAAC,UAAU;oBACjB,GAAG,CAAC,QAAQ;;;;IAI5B,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;;;;wBAIf,GAAG,CAAC,EAAE;iBACb,GAAG,CAAC,KAAK;eACX,GAAG,CAAC,IAAI;kBACL,GAAG,CAAC,aAAa;iBAClB,GAAG,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4KAqC6I,CAAC;AAC7K,CAAC"}
package/dist/test-e2e.js CHANGED
@@ -1,4 +1,4 @@
1
- // End-to-end test: Run the full extraction pipeline on the Arval PDF
1
+ // End-to-end test: Run the full extraction pipeline
2
2
  import { extractRequirements } from "./extractor.js";
3
3
  import { checkOllama } from "./ollama-client.js";
4
4
  async function e2e() {
@@ -19,7 +19,14 @@ async function e2e() {
19
19
  outputDir,
20
20
  projectPrefix: "ACS",
21
21
  outputFormat: "both",
22
- }, (msg) => console.log(msg));
22
+ }, {
23
+ onProgress: (msg) => console.log(msg),
24
+ onIdentified: (count) => console.log(`\n📊 Identified ${count} requirements\n`),
25
+ onClassified: (count) => console.log(`\n📊 Will generate ${count} requirements\n`),
26
+ onRequirement: (req, idx, total) => {
27
+ console.log(` 📦 [${idx + 1}/${total}] ${req.id} → ${req.category} — ${req.title}`);
28
+ },
29
+ });
23
30
  console.log("\n=== RESULT ===");
24
31
  console.log(JSON.stringify(result, null, 2));
25
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-e2e.js","sourceRoot":"","sources":["../src/test-e2e.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,KAAK,UAAU,GAAG;IACd,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,eAAe;IACf,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,8BAA8B,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACpC;QACI,OAAO;QACP,SAAS;QACT,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,MAAM;KACvB,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAC5B,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACd,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"test-e2e.js","sourceRoot":"","sources":["../src/test-e2e.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,KAAK,UAAU,GAAG;IACd,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,eAAe;IACf,MAAM,KAAK,GAAG,MAAM,WAAW,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,8BAA8B,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACpC;QACI,OAAO;QACP,SAAS;QACT,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,MAAM;KACvB,EACD;QACI,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACrC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,iBAAiB,CAAC;QAC/E,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,iBAAiB,CAAC;QAClF,aAAa,EAAE,CAAC,GAAoB,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;YAChE,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;KACJ,CACJ,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACd,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -30,6 +30,10 @@ export interface ExtractionConfig {
30
30
  model?: string;
31
31
  ollamaUrl?: string;
32
32
  outputFormat?: OutputFormat;
33
+ /** If set, only generate requirements for these category IDs (e.g. ["frontend", "mobile"]) */
34
+ filterCategories?: string[];
35
+ /** If set, limit to this many requirements per category (useful for testing) */
36
+ maxPerCategory?: number;
33
37
  }
34
38
  export interface JsonRequirement {
35
39
  id: string;
@@ -49,6 +53,12 @@ export interface ExtractionResult {
49
53
  files: string[];
50
54
  errors: string[];
51
55
  }
56
+ export interface ExtractionCallbacks {
57
+ onProgress?: (message: string) => void;
58
+ onIdentified?: (totalRaw: number) => void;
59
+ onClassified?: (totalToGenerate: number) => void;
60
+ onRequirement?: (req: JsonRequirement, index: number, total: number) => void;
61
+ }
52
62
  export interface PdfChunk {
53
63
  text: string;
54
64
  startPage: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EA+BxC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAqCxC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB"}
package/dist/types.js CHANGED
@@ -4,31 +4,37 @@ export const DEFAULT_CATEGORIES = [
4
4
  id: "backend",
5
5
  label: "Backend",
6
6
  prefix: "BE",
7
- description: "APIs REST, servicios, lógica de negocio server-side, base de datos, integraciones externas",
7
+ description: "APIs REST, servicios, lógica de negocio server-side, integraciones con terceros, webhooks",
8
8
  },
9
9
  {
10
10
  id: "frontend",
11
- label: "Frontend (Driver Portal Web)",
12
- prefix: "DP",
13
- description: "Portal web para conductores: UI, formularios, vistas, navegación web",
11
+ label: "Frontend",
12
+ prefix: "FE",
13
+ description: "Interfaces web: pantallas, dashboards, CRUDs, formularios, vistas, portales, paneles de administración, navegación",
14
14
  },
15
15
  {
16
- id: "bo",
17
- label: "Frontend (Back Office Web)",
18
- prefix: "BO",
19
- description: "Panel de administración web: CRUDs, dashboards, gestión, configuración",
16
+ id: "mobile",
17
+ label: "Mobile",
18
+ prefix: "MB",
19
+ description: "Aplicaciones móviles iOS y Android: pantallas, Bluetooth, GPS, notificaciones push, cámara",
20
20
  },
21
21
  {
22
- id: "mobile",
23
- label: "Mobile (iOS & Android)",
24
- prefix: "AP",
25
- description: "Aplicaciones móviles nativas: pantallas, Bluetooth, GPS, notificaciones push",
22
+ id: "infra",
23
+ label: "Infraestructura",
24
+ prefix: "IF",
25
+ description: "Base de datos, esquemas, migraciones, conexiones, almacenamiento, colas de mensajes, caché",
26
+ },
27
+ {
28
+ id: "devops",
29
+ label: "DevOps",
30
+ prefix: "DO",
31
+ description: "CI/CD, entornos (UAT/PRD/staging), despliegue, contenedores, monitorización de sistemas",
26
32
  },
27
33
  {
28
34
  id: "non-functional",
29
35
  label: "No Funcionales",
30
- prefix: "ENV",
31
- description: "Infraestructura, entornos, seguridad, rendimiento, despliegue, calidad",
36
+ prefix: "NF",
37
+ description: "Seguridad, rendimiento, escalabilidad, calidad, SLAs, auditoría, privacidad GDPR, accesibilidad",
32
38
  },
33
39
  ];
34
40
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AASxE,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC1C;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,8BAA8B;QACrC,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,sEAAsE;KACtF;IACD;QACI,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,4BAA4B;QACnC,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,wEAAwE;KACxF;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,8EAA8E;KAC9F;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,wEAAwE;KACxF;CACJ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AASxE,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC1C;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2FAA2F;KAC3G;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,oHAAoH;KACpI;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,yFAAyF;KACzG;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,iGAAiG;KACjH;CACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gherk/requirements-extractor",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server that extracts, classifies and generates structured requirements from PDF documents using Ollama LLM",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",