@prductr/carlos 1.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/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +157 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +43 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/market-fit/index.d.ts +13 -0
- package/dist/market-fit/index.d.ts.map +1 -0
- package/dist/market-fit/index.js +325 -0
- package/dist/market-fit/index.js.map +1 -0
- package/dist/product/index.d.ts +28 -0
- package/dist/product/index.d.ts.map +1 -0
- package/dist/product/index.js +258 -0
- package/dist/product/index.js.map +1 -0
- package/dist/roadmap/index.d.ts +13 -0
- package/dist/roadmap/index.d.ts.map +1 -0
- package/dist/roadmap/index.js +368 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/technical/index.d.ts +13 -0
- package/dist/technical/index.d.ts.map +1 -0
- package/dist/technical/index.js +417 -0
- package/dist/technical/index.js.map +1 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +169 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 prductr
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# @prductr/carlos
|
|
2
|
+
|
|
3
|
+
AI-powered product roadmap generation and market fit assessment.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Carlos analyzes your project's docs and codebase to generate actionable scopecraft documentation: phased roadmaps, PMF assessments, prioritized backlogs, and technical debt reports.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @prductr/carlos # global CLI
|
|
13
|
+
npm install @prductr/carlos # programmatic API
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## CLI
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
carlos roadmap # Generate phased product roadmap
|
|
20
|
+
carlos market-fit # Assess product-market fit (0–100 score)
|
|
21
|
+
carlos backlog # Prioritize features from docs/FEATURES.md
|
|
22
|
+
carlos audit # Technical debt audit
|
|
23
|
+
carlos full # Run all four analyses concurrently
|
|
24
|
+
carlos feedback # How to report issues or request features
|
|
25
|
+
carlos --version # Print version
|
|
26
|
+
carlos help # Show all commands and flags
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Flags
|
|
30
|
+
|
|
31
|
+
| Flag | Description |
|
|
32
|
+
|------|-------------|
|
|
33
|
+
| `--json` | Output result as JSON (all commands) |
|
|
34
|
+
| `--features <json>` | Feature list for `backlog` (JSON array, overrides FEATURES.md) |
|
|
35
|
+
| `--version`, `-v` | Print version and exit |
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# JSON output for scripting
|
|
39
|
+
carlos market-fit --json | jq '.productMarketFitScore'
|
|
40
|
+
|
|
41
|
+
# Inline feature list
|
|
42
|
+
carlos backlog --features '["Auth", "Dashboard", "Export"]'
|
|
43
|
+
|
|
44
|
+
# Analyze a specific directory
|
|
45
|
+
carlos roadmap ./path/to/project
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Feature file
|
|
49
|
+
|
|
50
|
+
Carlos reads `docs/FEATURES.md` (or `FEATURES.md` at root) for the `backlog` command:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
# Features
|
|
54
|
+
|
|
55
|
+
- User authentication
|
|
56
|
+
- Dashboard with real-time metrics
|
|
57
|
+
- Export to CSV
|
|
58
|
+
- Dark mode support
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Config file
|
|
62
|
+
|
|
63
|
+
Create `carlos.config.json` in your project root to override defaults:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"outputDir": "scopecraft",
|
|
68
|
+
"docsDir": "docs",
|
|
69
|
+
"includeMarketFit": true,
|
|
70
|
+
"includeTechnicalAudit": true
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Output
|
|
75
|
+
|
|
76
|
+
Carlos writes Markdown reports to `scopecraft/` (configurable via `outputDir`):
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
scopecraft/
|
|
80
|
+
├── ROADMAP.md # Phased roadmap with epics and milestones
|
|
81
|
+
├── METRICS_AND_PMF.md # PMF score, differentiators, recommendations
|
|
82
|
+
├── PRODUCT_BACKLOG.md # Now / Next / Later prioritized backlog
|
|
83
|
+
└── TECHNICAL_AUDIT.md # Debt items by category with severity
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## PMF scoring
|
|
87
|
+
|
|
88
|
+
A project scores higher when its PRD or README includes:
|
|
89
|
+
|
|
90
|
+
| Section | Points |
|
|
91
|
+
|---------|--------|
|
|
92
|
+
| `## Target Audience` | 20 |
|
|
93
|
+
| `## Problem Statement` | 20 |
|
|
94
|
+
| `## Solution` | 20 |
|
|
95
|
+
| `## Value Proposition` | 20 |
|
|
96
|
+
| Differentiators present | 15 |
|
|
97
|
+
| Low / no competition | up to 5 |
|
|
98
|
+
|
|
99
|
+
A blank project scores ≤ 20. A well-documented one scores ≥ 75.
|
|
100
|
+
|
|
101
|
+
## Programmatic API
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import {
|
|
105
|
+
generateRoadmap,
|
|
106
|
+
assessMarketFit,
|
|
107
|
+
prioritizeFeatures,
|
|
108
|
+
auditTechnical,
|
|
109
|
+
readFeatures,
|
|
110
|
+
loadConfig,
|
|
111
|
+
} from '@prductr/carlos';
|
|
112
|
+
|
|
113
|
+
// Load config from carlos.config.json (falls back to defaults)
|
|
114
|
+
const config = loadConfig('/path/to/project');
|
|
115
|
+
|
|
116
|
+
const roadmap = await generateRoadmap(config);
|
|
117
|
+
const assessment = await assessMarketFit(config);
|
|
118
|
+
const features = await readFeatures(config); // reads FEATURES.md
|
|
119
|
+
const backlog = await prioritizeFeatures(config, features);
|
|
120
|
+
const audit = await auditTechnical(config);
|
|
121
|
+
|
|
122
|
+
// Or run all concurrently
|
|
123
|
+
const [roadmap, assessment, audit] = await Promise.all([
|
|
124
|
+
generateRoadmap(config),
|
|
125
|
+
assessMarketFit(config),
|
|
126
|
+
auditTechnical(config),
|
|
127
|
+
]);
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Exported utilities
|
|
131
|
+
|
|
132
|
+
| Export | Description |
|
|
133
|
+
|--------|-------------|
|
|
134
|
+
| `generateRoadmap(config)` | Generate phased roadmap |
|
|
135
|
+
| `assessMarketFit(config)` | PMF assessment |
|
|
136
|
+
| `prioritizeFeatures(config, features)` | RICE-scored backlog |
|
|
137
|
+
| `auditTechnical(config)` | Technical debt audit |
|
|
138
|
+
| `readFeatures(config)` | Read features from FEATURES.md |
|
|
139
|
+
| `parseFeaturesFlag(args)` | Parse `--features` JSON from argv |
|
|
140
|
+
| `loadConfig(projectRoot)` | Load + merge carlos.config.json |
|
|
141
|
+
| `getVersion()` | Package version string |
|
|
142
|
+
| `hasJsonFlag(args)` | Detect `--json` in argv |
|
|
143
|
+
|
|
144
|
+
## Product stages
|
|
145
|
+
|
|
146
|
+
Carlos infers the current stage from `package.json` version:
|
|
147
|
+
|
|
148
|
+
| Version | Stage |
|
|
149
|
+
|---------|-------|
|
|
150
|
+
| `0.0.x` | prototype |
|
|
151
|
+
| `0.x.x` | mvp |
|
|
152
|
+
| `1.0.x` | beta |
|
|
153
|
+
| `2.x.x`+ | growth |
|
|
154
|
+
| No package.json + README | mvp |
|
|
155
|
+
| No package.json, no README | idea |
|
|
156
|
+
|
|
157
|
+
## Troubleshooting
|
|
158
|
+
|
|
159
|
+
See [docs/RUNBOOK.md](docs/RUNBOOK.md) for common issues and fixes.
|
|
160
|
+
|
|
161
|
+
To report a bug or request a feature: `carlos feedback`
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Carlos CLI - Command-line interface for product roadmap generation
|
|
4
|
+
*/
|
|
5
|
+
import { resolve } from "path";
|
|
6
|
+
import { generateRoadmap } from "./roadmap/index.js";
|
|
7
|
+
import { assessMarketFit } from "./market-fit/index.js";
|
|
8
|
+
import { prioritizeFeatures, readFeatures, parseFeaturesFlag } from "./product/index.js";
|
|
9
|
+
import { auditTechnical } from "./technical/index.js";
|
|
10
|
+
import { loadConfig, getVersion, hasJsonFlag } from "./config.js";
|
|
11
|
+
const commands = {
|
|
12
|
+
roadmap: "Generate comprehensive product roadmap",
|
|
13
|
+
"market-fit": "Assess product-market fit",
|
|
14
|
+
backlog: "Prioritize product backlog (reads docs/FEATURES.md)",
|
|
15
|
+
audit: "Perform technical debt audit",
|
|
16
|
+
full: "Run complete analysis (roadmap + market-fit + audit)",
|
|
17
|
+
feedback: "Show how to provide feedback or report issues",
|
|
18
|
+
help: "Show this help message",
|
|
19
|
+
};
|
|
20
|
+
async function main() {
|
|
21
|
+
const args = process.argv.slice(2);
|
|
22
|
+
// Version flag: carlos --version or carlos -v
|
|
23
|
+
if (args[0] === "--version" || args[0] === "-v") {
|
|
24
|
+
console.log(getVersion());
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const command = args[0] || "help";
|
|
28
|
+
// Project root is the second positional arg (not starting with "-")
|
|
29
|
+
const positional = args.slice(1).find((a) => !a.startsWith("-"));
|
|
30
|
+
const projectRoot = positional || process.cwd();
|
|
31
|
+
const config = loadConfig(resolve(projectRoot));
|
|
32
|
+
const jsonMode = hasJsonFlag(args);
|
|
33
|
+
if (!jsonMode)
|
|
34
|
+
console.log("📊 Carlos - Product Roadmap Agent\n");
|
|
35
|
+
try {
|
|
36
|
+
switch (command) {
|
|
37
|
+
case "roadmap": {
|
|
38
|
+
const roadmap = await generateRoadmap(config);
|
|
39
|
+
if (jsonMode) {
|
|
40
|
+
process.stdout.write(JSON.stringify(roadmap, null, 2) + "\n");
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log("\n✅ Roadmap generated successfully");
|
|
44
|
+
console.log(` Phases: ${roadmap.phases.length}`);
|
|
45
|
+
console.log(` Epics: ${roadmap.epics.length}`);
|
|
46
|
+
console.log(` Timeline: ${roadmap.timeline}`);
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case "market-fit": {
|
|
51
|
+
const assessment = await assessMarketFit(config);
|
|
52
|
+
if (jsonMode) {
|
|
53
|
+
process.stdout.write(JSON.stringify(assessment, null, 2) + "\n");
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log("\n✅ Market fit assessment complete");
|
|
57
|
+
console.log(` PMF Score: ${assessment.productMarketFitScore}/100`);
|
|
58
|
+
console.log(` Competition: ${assessment.competition.length} competitors`);
|
|
59
|
+
console.log(` Recommendations: ${assessment.recommendations.length}`);
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case "backlog": {
|
|
64
|
+
const features = parseFeaturesFlag(args) ?? await readFeatures(config);
|
|
65
|
+
const backlog = await prioritizeFeatures(config, features);
|
|
66
|
+
if (jsonMode) {
|
|
67
|
+
process.stdout.write(JSON.stringify(backlog, null, 2) + "\n");
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log("\n✅ Product backlog prioritized");
|
|
71
|
+
console.log(` Now: ${backlog.nowItems.length} items`);
|
|
72
|
+
console.log(` Next: ${backlog.nextItems.length} items`);
|
|
73
|
+
console.log(` Later: ${backlog.laterItems.length} items`);
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "audit": {
|
|
78
|
+
const audit = await auditTechnical(config);
|
|
79
|
+
if (jsonMode) {
|
|
80
|
+
process.stdout.write(JSON.stringify(audit, null, 2) + "\n");
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log("\n✅ Technical audit complete");
|
|
84
|
+
console.log(` Overall Health: ${audit.overallHealth}/100`);
|
|
85
|
+
console.log(` Debt Items: ${audit.debtItems.length}`);
|
|
86
|
+
console.log(` Critical Items: ${audit.debtItems.filter((d) => d.severity === "critical").length}`);
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case "full": {
|
|
91
|
+
if (!jsonMode)
|
|
92
|
+
console.log("Running complete analysis...\n");
|
|
93
|
+
const [roadmap, assessment, audit] = await Promise.all([
|
|
94
|
+
generateRoadmap(config),
|
|
95
|
+
assessMarketFit(config),
|
|
96
|
+
auditTechnical(config),
|
|
97
|
+
]);
|
|
98
|
+
if (jsonMode) {
|
|
99
|
+
process.stdout.write(JSON.stringify({ roadmap, assessment, audit }, null, 2) + "\n");
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(`✅ Roadmap: ${roadmap.phases.length} phases`);
|
|
103
|
+
console.log(`✅ Market Fit: ${assessment.productMarketFitScore}/100`);
|
|
104
|
+
console.log(`✅ Technical Health: ${audit.overallHealth}/100`);
|
|
105
|
+
console.log(`\n📁 All reports written to ${config.outputDir}/`);
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case "feedback": {
|
|
110
|
+
console.log("📬 How to provide feedback:\n");
|
|
111
|
+
console.log(" GitHub Issues: https://github.com/prductr-com/carlos/issues");
|
|
112
|
+
console.log(" Feature requests, bug reports, and general feedback welcome.\n");
|
|
113
|
+
console.log(" When reporting bugs, please include:");
|
|
114
|
+
console.log(" - carlos version: carlos --version");
|
|
115
|
+
console.log(" - Node.js version: node --version");
|
|
116
|
+
console.log(" - Command that failed and error message");
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case "help":
|
|
120
|
+
default:
|
|
121
|
+
showHelp();
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error("\n❌ Error:", error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function showHelp() {
|
|
131
|
+
console.log(`Carlos v${getVersion()} — AI-powered product roadmap agent\n`);
|
|
132
|
+
console.log("Usage: carlos <command> [project-path] [flags]\n");
|
|
133
|
+
console.log("Commands:\n");
|
|
134
|
+
Object.entries(commands).forEach(([cmd, desc]) => {
|
|
135
|
+
console.log(` ${cmd.padEnd(12)} ${desc}`);
|
|
136
|
+
});
|
|
137
|
+
console.log("\nFlags:");
|
|
138
|
+
console.log(" --version, -v Print version and exit");
|
|
139
|
+
console.log(" --features <json> Feature list for backlog command (JSON array)");
|
|
140
|
+
console.log(" --json Output result as JSON (machine-readable)");
|
|
141
|
+
console.log("\nExamples:");
|
|
142
|
+
console.log(" carlos roadmap # Generate roadmap for current directory");
|
|
143
|
+
console.log(" carlos market-fit # Assess product-market fit");
|
|
144
|
+
console.log(" carlos audit # Run technical debt audit");
|
|
145
|
+
console.log(" carlos full # Complete analysis (runs concurrently)");
|
|
146
|
+
console.log(" carlos roadmap ./my-product # Analyze specific project");
|
|
147
|
+
console.log(' carlos backlog --features \'["Auth","Dashboard"]\' # Prioritize feature list');
|
|
148
|
+
console.log("\nConfig (carlos.config.json):");
|
|
149
|
+
console.log(' { "outputDir": "scopecraft", "docsDir": "docs",');
|
|
150
|
+
console.log(' "includeMarketFit": true, "includeTechnicalAudit": true }');
|
|
151
|
+
console.log("\nFeature file (docs/FEATURES.md or FEATURES.md):");
|
|
152
|
+
console.log(" # Features");
|
|
153
|
+
console.log(" - User authentication");
|
|
154
|
+
console.log(" - Dashboard with metrics");
|
|
155
|
+
}
|
|
156
|
+
main();
|
|
157
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config loader - reads carlos.config.json from projectRoot
|
|
3
|
+
*/
|
|
4
|
+
import { CarlosConfig } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Return the package version from package.json.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getVersion(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Return true when --json flag is present in args.
|
|
11
|
+
*/
|
|
12
|
+
export declare function hasJsonFlag(args: string[]): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Load Carlos config by merging carlos.config.json with defaults.
|
|
15
|
+
* Falls back to defaults silently if the file contains malformed JSON.
|
|
16
|
+
*
|
|
17
|
+
* @param projectRoot - Directory to look for carlos.config.json
|
|
18
|
+
* @returns Fully resolved CarlosConfig
|
|
19
|
+
*/
|
|
20
|
+
export declare function loadConfig(projectRoot: string): CarlosConfig;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAa5D"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config loader - reads carlos.config.json from projectRoot
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from "fs";
|
|
5
|
+
import { join, dirname } from "path";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import { CarlosConfig } from "./types.js";
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
/**
|
|
10
|
+
* Return the package version from package.json.
|
|
11
|
+
*/
|
|
12
|
+
export function getVersion() {
|
|
13
|
+
const pkgPath = join(__dirname, "..", "package.json");
|
|
14
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
15
|
+
return pkg.version;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Return true when --json flag is present in args.
|
|
19
|
+
*/
|
|
20
|
+
export function hasJsonFlag(args) {
|
|
21
|
+
return args.includes("--json");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load Carlos config by merging carlos.config.json with defaults.
|
|
25
|
+
* Falls back to defaults silently if the file contains malformed JSON.
|
|
26
|
+
*
|
|
27
|
+
* @param projectRoot - Directory to look for carlos.config.json
|
|
28
|
+
* @returns Fully resolved CarlosConfig
|
|
29
|
+
*/
|
|
30
|
+
export function loadConfig(projectRoot) {
|
|
31
|
+
const configPath = join(projectRoot, "carlos.config.json");
|
|
32
|
+
let fileData = {};
|
|
33
|
+
if (existsSync(configPath)) {
|
|
34
|
+
try {
|
|
35
|
+
fileData = JSON.parse(readFileSync(configPath, "utf8"));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
console.warn("⚠️ carlos.config.json contains invalid JSON — using defaults");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return CarlosConfig.parse({ projectRoot, ...fileData });
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAwB,CAAC;IAC7E,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAE3C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAA4B,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carlos - Product roadmap and market fit assessment agent
|
|
3
|
+
*
|
|
4
|
+
* A tool for generating comprehensive product roadmaps, assessing market fit,
|
|
5
|
+
* and auditing technical debt.
|
|
6
|
+
*/
|
|
7
|
+
export { generateRoadmap } from "./roadmap/index.js";
|
|
8
|
+
export { assessMarketFit } from "./market-fit/index.js";
|
|
9
|
+
export { prioritizeFeatures, readFeatures, parseFeaturesFlag } from "./product/index.js";
|
|
10
|
+
export { auditTechnical } from "./technical/index.js";
|
|
11
|
+
export { loadConfig, getVersion, hasJsonFlag } from "./config.js";
|
|
12
|
+
export type { CarlosConfig, ProductStage, Roadmap, Phase, Epic, UserStory, MarketFitAssessment, TechnicalAudit, TechnicalDebtItem, ProductBacklog, FeaturePriority, Risk, } from "./types.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,IAAI,GACL,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Carlos - Product roadmap and market fit assessment agent
|
|
3
|
+
*
|
|
4
|
+
* A tool for generating comprehensive product roadmaps, assessing market fit,
|
|
5
|
+
* and auditing technical debt.
|
|
6
|
+
*/
|
|
7
|
+
export { generateRoadmap } from "./roadmap/index.js";
|
|
8
|
+
export { assessMarketFit } from "./market-fit/index.js";
|
|
9
|
+
export { prioritizeFeatures, readFeatures, parseFeaturesFlag } from "./product/index.js";
|
|
10
|
+
export { auditTechnical } from "./technical/index.js";
|
|
11
|
+
export { loadConfig, getVersion, hasJsonFlag } from "./config.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market Fit - Assess product-market fit and competitive position
|
|
3
|
+
* Analyzes target audience, competition, and market opportunity
|
|
4
|
+
*/
|
|
5
|
+
import type { CarlosConfig, MarketFitAssessment } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Assess product-market fit
|
|
8
|
+
*
|
|
9
|
+
* @param config - Carlos configuration
|
|
10
|
+
* @returns Market fit assessment with score and recommendations
|
|
11
|
+
*/
|
|
12
|
+
export declare function assessMarketFit(config: CarlosConfig): Promise<MarketFitAssessment>;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/market-fit/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAErE;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAqD9B"}
|