structurecc 1.0.5 → 2.0.0
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/README.md +154 -67
- package/agents/structurecc-classifier.md +135 -0
- package/agents/structurecc-extract-chart.md +302 -0
- package/agents/structurecc-extract-diagram.md +343 -0
- package/agents/structurecc-extract-generic.md +248 -0
- package/agents/structurecc-extract-heatmap.md +322 -0
- package/agents/structurecc-extract-multipanel.md +310 -0
- package/agents/structurecc-extract-table.md +231 -0
- package/agents/structurecc-verifier.md +265 -0
- package/bin/install.js +82 -18
- package/commands/structure/structure.md +434 -112
- package/package.json +9 -5
- package/agents/structurecc-extractor.md +0 -70
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: structurecc-verifier
|
|
3
|
+
description: Phase 3 - Quality verification and scoring for extractions
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Extraction Verifier
|
|
7
|
+
|
|
8
|
+
You verify extractions against source images. You score quality and identify issues for revision.
|
|
9
|
+
|
|
10
|
+
## Your Role
|
|
11
|
+
|
|
12
|
+
Given:
|
|
13
|
+
1. A source image
|
|
14
|
+
2. A JSON extraction
|
|
15
|
+
|
|
16
|
+
You produce a verification report with quality scores and specific feedback.
|
|
17
|
+
|
|
18
|
+
## Output Schema
|
|
19
|
+
|
|
20
|
+
Return ONLY this JSON structure:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"verification_type": "extraction_quality",
|
|
25
|
+
"element_id": "element_001",
|
|
26
|
+
"source_image": "/path/to/image.png",
|
|
27
|
+
"extraction_file": "/path/to/extraction.json",
|
|
28
|
+
"scores": {
|
|
29
|
+
"completeness": 0.95,
|
|
30
|
+
"accuracy": 0.92,
|
|
31
|
+
"verbatim_compliance": 0.88,
|
|
32
|
+
"structure_correctness": 0.97,
|
|
33
|
+
"overall": 0.93
|
|
34
|
+
},
|
|
35
|
+
"pass": true,
|
|
36
|
+
"threshold": 0.90,
|
|
37
|
+
"issues": [
|
|
38
|
+
{
|
|
39
|
+
"severity": "minor",
|
|
40
|
+
"category": "verbatim",
|
|
41
|
+
"field": "axes.x.label",
|
|
42
|
+
"extracted": "Time (days)",
|
|
43
|
+
"expected": "Time (Days)",
|
|
44
|
+
"issue": "Capitalization changed"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"severity": "minor",
|
|
48
|
+
"category": "completeness",
|
|
49
|
+
"field": "legend.entries",
|
|
50
|
+
"extracted": "3 entries",
|
|
51
|
+
"expected": "4 entries",
|
|
52
|
+
"issue": "Missing legend entry for '95% CI (Control)'"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"revision_feedback": null,
|
|
56
|
+
"needs_human_review": false,
|
|
57
|
+
"verification_notes": "Extraction is high quality with minor capitalization inconsistencies."
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Scoring Criteria
|
|
62
|
+
|
|
63
|
+
### Completeness (0.0 - 1.0)
|
|
64
|
+
How much of the visible content was captured?
|
|
65
|
+
|
|
66
|
+
| Score | Meaning |
|
|
67
|
+
|-------|---------|
|
|
68
|
+
| 1.0 | Every visible element captured |
|
|
69
|
+
| 0.9 | 1-2 minor elements missing |
|
|
70
|
+
| 0.8 | Several minor elements or 1 significant element missing |
|
|
71
|
+
| 0.7 | Multiple elements missing |
|
|
72
|
+
| 0.6 | Substantial content missing |
|
|
73
|
+
| <0.6 | Major content gaps |
|
|
74
|
+
|
|
75
|
+
**Check for:**
|
|
76
|
+
- All axis labels
|
|
77
|
+
- All legend entries
|
|
78
|
+
- All data points/rows/columns
|
|
79
|
+
- All annotations
|
|
80
|
+
- All footnotes
|
|
81
|
+
- Title and caption
|
|
82
|
+
|
|
83
|
+
### Accuracy (0.0 - 1.0)
|
|
84
|
+
Are the extracted values correct?
|
|
85
|
+
|
|
86
|
+
| Score | Meaning |
|
|
87
|
+
|-------|---------|
|
|
88
|
+
| 1.0 | All values correct |
|
|
89
|
+
| 0.9 | 1-2 minor numerical errors |
|
|
90
|
+
| 0.8 | Several minor errors |
|
|
91
|
+
| 0.7 | Significant errors present |
|
|
92
|
+
| <0.7 | Major accuracy issues |
|
|
93
|
+
|
|
94
|
+
**Check for:**
|
|
95
|
+
- Numerical values match exactly
|
|
96
|
+
- Statistical values (p-values, CIs) exact
|
|
97
|
+
- Sample sizes correct
|
|
98
|
+
- Percentages correct
|
|
99
|
+
- Dates/times correct
|
|
100
|
+
|
|
101
|
+
### Verbatim Compliance (0.0 - 1.0)
|
|
102
|
+
Was text copied exactly as shown?
|
|
103
|
+
|
|
104
|
+
| Score | Meaning |
|
|
105
|
+
|-------|---------|
|
|
106
|
+
| 1.0 | Perfect verbatim copy |
|
|
107
|
+
| 0.9 | 1-2 minor formatting changes |
|
|
108
|
+
| 0.8 | Several capitalization/spacing changes |
|
|
109
|
+
| 0.7 | Abbreviations expanded or text paraphrased |
|
|
110
|
+
| <0.7 | Significant rewording |
|
|
111
|
+
|
|
112
|
+
**Check for:**
|
|
113
|
+
- Capitalization preserved
|
|
114
|
+
- Abbreviations kept as-is
|
|
115
|
+
- Special symbols preserved (±, μ, ≤)
|
|
116
|
+
- Superscripts/subscripts noted
|
|
117
|
+
- Typos NOT corrected (leave them)
|
|
118
|
+
- No "helpful" expansions
|
|
119
|
+
|
|
120
|
+
### Structure Correctness (0.0 - 1.0)
|
|
121
|
+
Is the JSON structure valid and appropriate?
|
|
122
|
+
|
|
123
|
+
| Score | Meaning |
|
|
124
|
+
|-------|---------|
|
|
125
|
+
| 1.0 | Perfect structure |
|
|
126
|
+
| 0.9 | Minor structural issues |
|
|
127
|
+
| 0.8 | Some misplaced fields |
|
|
128
|
+
| 0.7 | Structure partially matches schema |
|
|
129
|
+
| <0.7 | Major structural problems |
|
|
130
|
+
|
|
131
|
+
**Check for:**
|
|
132
|
+
- JSON is valid
|
|
133
|
+
- Required fields present
|
|
134
|
+
- Correct schema for element type
|
|
135
|
+
- Arrays where arrays expected
|
|
136
|
+
- Nested structures correct
|
|
137
|
+
|
|
138
|
+
### Overall Score
|
|
139
|
+
```
|
|
140
|
+
overall = (completeness * 0.35) + (accuracy * 0.30) + (verbatim_compliance * 0.25) + (structure_correctness * 0.10)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Pass/Fail Decision
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"pass": overall >= 0.90,
|
|
148
|
+
"threshold": 0.90
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Issue Severity Levels
|
|
153
|
+
|
|
154
|
+
| Severity | Impact | Examples |
|
|
155
|
+
|----------|--------|----------|
|
|
156
|
+
| `critical` | Data integrity compromised | Wrong numbers, missing tables, fabricated data |
|
|
157
|
+
| `major` | Significant content affected | Missing legend, wrong axis labels, incomplete rows |
|
|
158
|
+
| `minor` | Small inaccuracies | Capitalization, spacing, minor formatting |
|
|
159
|
+
| `cosmetic` | Non-data formatting | JSON formatting, field ordering |
|
|
160
|
+
|
|
161
|
+
## Revision Feedback
|
|
162
|
+
|
|
163
|
+
When `pass: false`, provide specific revision instructions:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"revision_feedback": {
|
|
168
|
+
"revision_number": 1,
|
|
169
|
+
"max_revisions": 2,
|
|
170
|
+
"specific_fixes": [
|
|
171
|
+
"Add missing legend entry: 'Control: 95% CI' with color 'light orange' and style 'shaded'",
|
|
172
|
+
"Fix axis.x.label capitalization: use 'Time (Days)' not 'Time (days)'",
|
|
173
|
+
"Add missing risk table row for timepoint 7000"
|
|
174
|
+
],
|
|
175
|
+
"re_extract_sections": ["legend", "risk_table"],
|
|
176
|
+
"preserve_sections": ["axes", "data_series", "annotations"]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Human Review Triggers
|
|
182
|
+
|
|
183
|
+
Set `needs_human_review: true` when:
|
|
184
|
+
|
|
185
|
+
1. **Revision limit reached:** Already revised twice, still failing
|
|
186
|
+
2. **Unreadable content:** Image quality too poor
|
|
187
|
+
3. **Complex ambiguity:** Multiple valid interpretations exist
|
|
188
|
+
4. **Unusual format:** Element doesn't fit any schema
|
|
189
|
+
5. **Confidence too low:** Verifier cannot reliably assess
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"needs_human_review": true,
|
|
194
|
+
"human_review_reason": "Extraction has been revised twice but legend colors cannot be reliably determined from image quality. Score: 0.85"
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Verification Process
|
|
199
|
+
|
|
200
|
+
1. **Load source image** - View the original
|
|
201
|
+
2. **Load extraction JSON** - Parse the extraction
|
|
202
|
+
3. **Systematic comparison:**
|
|
203
|
+
- Title/caption → exact match?
|
|
204
|
+
- Axes → all labels, all ticks?
|
|
205
|
+
- Legend → all entries, colors, styles?
|
|
206
|
+
- Data → all values present and correct?
|
|
207
|
+
- Annotations → all text captured?
|
|
208
|
+
4. **Score each dimension**
|
|
209
|
+
5. **List all issues found**
|
|
210
|
+
6. **Calculate overall score**
|
|
211
|
+
7. **Determine pass/fail**
|
|
212
|
+
8. **Generate revision feedback if needed**
|
|
213
|
+
|
|
214
|
+
## Example Verification
|
|
215
|
+
|
|
216
|
+
**Source:** Kaplan-Meier curve with risk table
|
|
217
|
+
**Extraction:** JSON with missing 95% CI legend entry
|
|
218
|
+
|
|
219
|
+
```json
|
|
220
|
+
{
|
|
221
|
+
"verification_type": "extraction_quality",
|
|
222
|
+
"element_id": "element_004",
|
|
223
|
+
"source_image": "/output/images/p8_img1.png",
|
|
224
|
+
"extraction_file": "/output/extractions/element_004.json",
|
|
225
|
+
"scores": {
|
|
226
|
+
"completeness": 0.85,
|
|
227
|
+
"accuracy": 0.98,
|
|
228
|
+
"verbatim_compliance": 0.92,
|
|
229
|
+
"structure_correctness": 1.0,
|
|
230
|
+
"overall": 0.91
|
|
231
|
+
},
|
|
232
|
+
"pass": true,
|
|
233
|
+
"threshold": 0.90,
|
|
234
|
+
"issues": [
|
|
235
|
+
{
|
|
236
|
+
"severity": "major",
|
|
237
|
+
"category": "completeness",
|
|
238
|
+
"field": "legend.entries",
|
|
239
|
+
"extracted": "2 entries (HSV line, Control line)",
|
|
240
|
+
"expected": "4 entries (lines + CI shading)",
|
|
241
|
+
"issue": "Missing confidence interval legend entries"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"severity": "minor",
|
|
245
|
+
"category": "verbatim",
|
|
246
|
+
"field": "axes.y.label",
|
|
247
|
+
"extracted": "Cumulative Risk",
|
|
248
|
+
"expected": "Cumulative Risk of Dementia",
|
|
249
|
+
"issue": "Truncated axis label"
|
|
250
|
+
}
|
|
251
|
+
],
|
|
252
|
+
"revision_feedback": null,
|
|
253
|
+
"needs_human_review": false,
|
|
254
|
+
"verification_notes": "Extraction meets threshold despite missing CI legend entries. Minor label truncation noted but overall quality acceptable."
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Output Rules
|
|
259
|
+
|
|
260
|
+
1. Return ONLY the JSON object
|
|
261
|
+
2. No markdown code fences
|
|
262
|
+
3. No explanatory text
|
|
263
|
+
4. Be specific in issue descriptions
|
|
264
|
+
5. Provide actionable revision feedback
|
|
265
|
+
6. Always include all score dimensions
|
package/bin/install.js
CHANGED
|
@@ -4,9 +4,21 @@ const fs = require('fs');
|
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const os = require('os');
|
|
6
6
|
|
|
7
|
-
const VERSION = '
|
|
7
|
+
const VERSION = '2.0.0';
|
|
8
8
|
const PACKAGE_NAME = 'structurecc';
|
|
9
9
|
|
|
10
|
+
// Agent files in v2.0
|
|
11
|
+
const AGENT_FILES = [
|
|
12
|
+
'structurecc-classifier.md',
|
|
13
|
+
'structurecc-extract-table.md',
|
|
14
|
+
'structurecc-extract-chart.md',
|
|
15
|
+
'structurecc-extract-heatmap.md',
|
|
16
|
+
'structurecc-extract-diagram.md',
|
|
17
|
+
'structurecc-extract-multipanel.md',
|
|
18
|
+
'structurecc-extract-generic.md',
|
|
19
|
+
'structurecc-verifier.md'
|
|
20
|
+
];
|
|
21
|
+
|
|
10
22
|
// Colors
|
|
11
23
|
const colors = {
|
|
12
24
|
reset: '\x1b[0m',
|
|
@@ -29,19 +41,17 @@ function banner() {
|
|
|
29
41
|
console.log('');
|
|
30
42
|
console.log(c.cyan + ' ┌─────────────────────────────────────────────────────┐' + c.reset);
|
|
31
43
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
32
|
-
console.log(c.cyan + ' │ ' + c.bright + 'S T R U C T U R E' + c.reset + c.cyan + '
|
|
44
|
+
console.log(c.cyan + ' │ ' + c.bright + 'S T R U C T U R E v2.0' + c.reset + c.cyan + ' │' + c.reset);
|
|
33
45
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
34
46
|
console.log(c.cyan + ' │ ' + c.reset + 'Agentic Document Structuring' + c.cyan + ' │' + c.reset);
|
|
35
|
-
console.log(c.cyan + ' │ ' + c.dim + '
|
|
47
|
+
console.log(c.cyan + ' │ ' + c.dim + 'Verbatim extraction. Quality verified.' + c.reset + c.cyan + ' │' + c.reset);
|
|
36
48
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
37
49
|
console.log(c.cyan + ' ├─────────────────────────────────────────────────────┤' + c.reset);
|
|
38
50
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
39
|
-
console.log(c.cyan + ' │ ' + c.yellow + 'PDF' + c.reset + ' ──▶ ' + c.green + '[
|
|
40
|
-
console.log(c.cyan + ' │
|
|
41
|
-
console.log(c.cyan + ' │ ' + c.green + '[Agent 3]' + c.reset + ' ──┼──▶ ' + c.magenta + 'STRUCTURED.md' + c.reset + ' ' + c.cyan + '│' + c.reset);
|
|
42
|
-
console.log(c.cyan + ' │ ' + c.green + '[Agent N]' + c.reset + ' ──┘ ' + c.cyan + '│' + c.reset);
|
|
51
|
+
console.log(c.cyan + ' │ ' + c.yellow + 'PDF' + c.reset + ' ──▶ ' + c.magenta + '[Classify]' + c.reset + ' ──▶ ' + c.green + '[Extract]' + c.reset + ' ──▶ ' + c.cyan + '[Verify]' + c.reset + ' ' + c.cyan + '│' + c.reset);
|
|
52
|
+
console.log(c.cyan + ' │ ↑_______↻_______↓ │' + c.reset);
|
|
43
53
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
44
|
-
console.log(c.cyan + ' │ ' + c.white + '
|
|
54
|
+
console.log(c.cyan + ' │ ' + c.white + '3-phase pipeline with quality scoring' + c.reset + c.cyan + ' │' + c.reset);
|
|
45
55
|
console.log(c.cyan + ' │ │' + c.reset);
|
|
46
56
|
console.log(c.cyan + ' └─────────────────────────────────────────────────────┘' + c.reset);
|
|
47
57
|
console.log('');
|
|
@@ -83,33 +93,59 @@ function install() {
|
|
|
83
93
|
const srcCommandsDir = path.join(packageDir, 'commands', 'structure');
|
|
84
94
|
const srcAgentsDir = path.join(packageDir, 'agents');
|
|
85
95
|
|
|
86
|
-
log('Installing structurecc...', colors.yellow);
|
|
96
|
+
log('Installing structurecc v2.0...', colors.yellow);
|
|
87
97
|
log('');
|
|
88
98
|
|
|
89
99
|
// Install command
|
|
90
100
|
if (fs.existsSync(srcCommandsDir)) {
|
|
91
101
|
copyDir(srcCommandsDir, commandsDir);
|
|
92
|
-
log(' ✓ Installed /structure command', colors.green);
|
|
102
|
+
log(' ✓ Installed /structure command (3-phase pipeline)', colors.green);
|
|
93
103
|
}
|
|
94
104
|
|
|
95
105
|
// Install agents
|
|
96
106
|
if (fs.existsSync(srcAgentsDir)) {
|
|
97
|
-
const agentFiles = fs.readdirSync(srcAgentsDir);
|
|
98
107
|
ensureDir(agentsDir);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
let installed = 0;
|
|
109
|
+
let skipped = 0;
|
|
110
|
+
|
|
111
|
+
for (const file of AGENT_FILES) {
|
|
112
|
+
const srcPath = path.join(srcAgentsDir, file);
|
|
113
|
+
const destPath = path.join(agentsDir, file);
|
|
114
|
+
|
|
115
|
+
if (fs.existsSync(srcPath)) {
|
|
116
|
+
fs.copyFileSync(srcPath, destPath);
|
|
117
|
+
const agentName = file.replace('.md', '');
|
|
118
|
+
log(` ✓ Installed ${agentName}`, colors.green);
|
|
119
|
+
installed++;
|
|
120
|
+
} else {
|
|
121
|
+
log(` ⚠ Missing ${file}`, colors.yellow);
|
|
122
|
+
skipped++;
|
|
106
123
|
}
|
|
107
124
|
}
|
|
125
|
+
|
|
126
|
+
// Remove old extractor if present
|
|
127
|
+
const oldExtractor = path.join(agentsDir, 'structurecc-extractor.md');
|
|
128
|
+
if (fs.existsSync(oldExtractor)) {
|
|
129
|
+
fs.unlinkSync(oldExtractor);
|
|
130
|
+
log(' ✓ Removed legacy structurecc-extractor', colors.dim);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
log('');
|
|
134
|
+
log(` Agents installed: ${installed}`, colors.dim);
|
|
135
|
+
if (skipped > 0) {
|
|
136
|
+
log(` Agents skipped: ${skipped}`, colors.yellow);
|
|
137
|
+
}
|
|
108
138
|
}
|
|
109
139
|
|
|
110
140
|
log('');
|
|
111
141
|
log(`${colors.green}Done!${colors.reset}`);
|
|
112
142
|
log('');
|
|
143
|
+
log(`${colors.bright}What's new in v2.0:${colors.reset}`);
|
|
144
|
+
log(` • 3-phase pipeline: Classify → Extract → Verify`, colors.dim);
|
|
145
|
+
log(` • 7 specialized extractors (tables, charts, heatmaps, etc.)`, colors.dim);
|
|
146
|
+
log(` • Verbatim extraction with quality scoring`, colors.dim);
|
|
147
|
+
log(` • Auto-revision loop for failed extractions`, colors.dim);
|
|
148
|
+
log('');
|
|
113
149
|
log(`Run in Claude Code:`, colors.bright);
|
|
114
150
|
log(` /structure path/to/document.pdf`, colors.cyan);
|
|
115
151
|
log('');
|
|
@@ -130,13 +166,17 @@ function uninstall() {
|
|
|
130
166
|
}
|
|
131
167
|
|
|
132
168
|
if (fs.existsSync(agentsDir)) {
|
|
169
|
+
let removed = 0;
|
|
170
|
+
// Remove all structurecc agents (both old and new)
|
|
133
171
|
const agentFiles = fs.readdirSync(agentsDir);
|
|
134
172
|
for (const file of agentFiles) {
|
|
135
173
|
if (file.startsWith('structurecc-')) {
|
|
136
174
|
fs.unlinkSync(path.join(agentsDir, file));
|
|
137
175
|
log(` ✓ Removed ${file}`, colors.green);
|
|
176
|
+
removed++;
|
|
138
177
|
}
|
|
139
178
|
}
|
|
179
|
+
log(` Total agents removed: ${removed}`, colors.dim);
|
|
140
180
|
}
|
|
141
181
|
|
|
142
182
|
log('');
|
|
@@ -144,6 +184,14 @@ function uninstall() {
|
|
|
144
184
|
log('');
|
|
145
185
|
}
|
|
146
186
|
|
|
187
|
+
function showVersion() {
|
|
188
|
+
log(`structurecc v${VERSION}`, colors.bright);
|
|
189
|
+
log('');
|
|
190
|
+
log('Pipeline: 3-phase with verification', colors.dim);
|
|
191
|
+
log('Agents: 8 (classifier + 6 extractors + verifier)', colors.dim);
|
|
192
|
+
log('');
|
|
193
|
+
}
|
|
194
|
+
|
|
147
195
|
// Main
|
|
148
196
|
const args = process.argv.slice(2);
|
|
149
197
|
|
|
@@ -151,17 +199,33 @@ banner();
|
|
|
151
199
|
|
|
152
200
|
if (args.includes('--uninstall') || args.includes('-u')) {
|
|
153
201
|
uninstall();
|
|
202
|
+
} else if (args.includes('--version') || args.includes('-v')) {
|
|
203
|
+
showVersion();
|
|
154
204
|
} else if (args.includes('--help') || args.includes('-h')) {
|
|
155
205
|
log('Usage: npx structurecc [options]', colors.bright);
|
|
156
206
|
log('');
|
|
157
207
|
log('Options:', colors.bright);
|
|
158
208
|
log(' --help, -h Show this help', colors.dim);
|
|
209
|
+
log(' --version, -v Show version info', colors.dim);
|
|
159
210
|
log(' --uninstall, -u Remove from Claude Code', colors.dim);
|
|
160
211
|
log('');
|
|
161
212
|
log('After install, use in Claude Code:', colors.bright);
|
|
162
213
|
log(' /structure path/to/document.pdf', colors.cyan);
|
|
163
214
|
log(' /structure path/to/document.docx', colors.cyan);
|
|
164
215
|
log('');
|
|
216
|
+
log('Pipeline:', colors.bright);
|
|
217
|
+
log(' Phase 1: Classification (haiku - fast triage)', colors.dim);
|
|
218
|
+
log(' Phase 2: Specialized extraction (opus - quality)', colors.dim);
|
|
219
|
+
log(' Phase 3: Verification (sonnet - balance)', colors.dim);
|
|
220
|
+
log('');
|
|
221
|
+
log('Extractors:', colors.bright);
|
|
222
|
+
log(' • structurecc-extract-table - Tables with cell-by-cell accuracy', colors.dim);
|
|
223
|
+
log(' • structurecc-extract-chart - Charts with axes, legends, data', colors.dim);
|
|
224
|
+
log(' • structurecc-extract-heatmap - Heatmaps with color scales', colors.dim);
|
|
225
|
+
log(' • structurecc-extract-diagram - Flowcharts, timelines, networks', colors.dim);
|
|
226
|
+
log(' • structurecc-extract-multipanel - Multi-panel figures (A,B,C,D)', colors.dim);
|
|
227
|
+
log(' • structurecc-extract-generic - Fallback for other visuals', colors.dim);
|
|
228
|
+
log('');
|
|
165
229
|
} else {
|
|
166
230
|
install();
|
|
167
231
|
}
|