@rlarua/agentteams-cli 0.0.9 → 0.0.11
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/API-CLI-WORKFLOW.md +418 -0
- package/LICENSE +201 -0
- package/README.md +220 -128
- package/dist/api/comment.d.ts +11 -0
- package/dist/api/comment.d.ts.map +1 -0
- package/dist/api/comment.js +33 -0
- package/dist/api/comment.js.map +1 -0
- package/dist/api/plan.d.ts +13 -0
- package/dist/api/plan.d.ts.map +1 -0
- package/dist/api/plan.js +43 -0
- package/dist/api/plan.js.map +1 -0
- package/dist/api/postmortem.d.ts +6 -0
- package/dist/api/postmortem.d.ts.map +1 -0
- package/dist/api/postmortem.js +33 -0
- package/dist/api/postmortem.js.map +1 -0
- package/dist/api/report.d.ts +6 -0
- package/dist/api/report.d.ts.map +1 -0
- package/dist/api/report.js +33 -0
- package/dist/api/report.js.map +1 -0
- package/dist/api/status.d.ts +12 -0
- package/dist/api/status.d.ts.map +1 -0
- package/dist/api/status.js +33 -0
- package/dist/api/status.js.map +1 -0
- package/dist/commands/agentConfig.d.ts.map +1 -1
- package/dist/commands/agentConfig.js +10 -3
- package/dist/commands/agentConfig.js.map +1 -1
- package/dist/commands/agentConfigCommand.d.ts +2 -0
- package/dist/commands/agentConfigCommand.d.ts.map +1 -0
- package/dist/commands/agentConfigCommand.js +20 -0
- package/dist/commands/agentConfigCommand.js.map +1 -0
- package/dist/commands/comment.d.ts +2 -0
- package/dist/commands/comment.d.ts.map +1 -0
- package/dist/commands/comment.js +55 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +30 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/convention.d.ts +25 -0
- package/dist/commands/convention.d.ts.map +1 -1
- package/dist/commands/convention.js +492 -43
- package/dist/commands/convention.js.map +1 -1
- package/dist/commands/conventionRouter.d.ts +3 -0
- package/dist/commands/conventionRouter.d.ts.map +1 -0
- package/dist/commands/conventionRouter.js +46 -0
- package/dist/commands/conventionRouter.js.map +1 -0
- package/dist/commands/dependency.d.ts.map +1 -1
- package/dist/commands/dependency.js +2 -1
- package/dist/commands/dependency.js.map +1 -1
- package/dist/commands/dependencyCommand.d.ts +2 -0
- package/dist/commands/dependencyCommand.d.ts.map +1 -0
- package/dist/commands/dependencyCommand.js +27 -0
- package/dist/commands/dependencyCommand.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +13 -485
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.d.ts +11 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +370 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/postmortem.d.ts +2 -0
- package/dist/commands/postmortem.d.ts.map +1 -0
- package/dist/commands/postmortem.js +114 -0
- package/dist/commands/postmortem.js.map +1 -0
- package/dist/commands/report.d.ts +2 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +221 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +60 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.js +214 -34
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +11 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +60 -6
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/formatter.js +11 -1
- package/dist/utils/formatter.js.map +1 -1
- package/dist/utils/git.d.ts +19 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +41 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/httpHeaders.d.ts +3 -0
- package/dist/utils/httpHeaders.d.ts.map +1 -0
- package/dist/utils/httpHeaders.js +11 -0
- package/dist/utils/httpHeaders.js.map +1 -0
- package/dist/utils/initOutput.d.ts +3 -0
- package/dist/utils/initOutput.d.ts.map +1 -0
- package/dist/utils/initOutput.js +34 -0
- package/dist/utils/initOutput.js.map +1 -0
- package/dist/utils/legacyCompat.d.ts +3 -0
- package/dist/utils/legacyCompat.d.ts.map +1 -0
- package/dist/utils/legacyCompat.js +20 -0
- package/dist/utils/legacyCompat.js.map +1 -0
- package/dist/utils/outputPolicy.d.ts +12 -0
- package/dist/utils/outputPolicy.d.ts.map +1 -0
- package/dist/utils/outputPolicy.js +132 -0
- package/dist/utils/outputPolicy.js.map +1 -0
- package/dist/utils/parsers.d.ts +7 -0
- package/dist/utils/parsers.d.ts.map +1 -0
- package/dist/utils/parsers.js +52 -0
- package/dist/utils/parsers.js.map +1 -0
- package/dist/utils/planFormat.d.ts +17 -0
- package/dist/utils/planFormat.d.ts.map +1 -0
- package/dist/utils/planFormat.js +80 -0
- package/dist/utils/planFormat.js.map +1 -0
- package/dist/utils/spinner.d.ts +6 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +34 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +8 -3
- package/DEVELOPMENT.md +0 -234
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export function normalizeDependencies(raw) {
|
|
2
|
+
if (!raw || typeof raw !== 'object') {
|
|
3
|
+
return { blocking: [], dependents: [] };
|
|
4
|
+
}
|
|
5
|
+
const root = raw;
|
|
6
|
+
const data = (root.data && typeof root.data === 'object' && !Array.isArray(root.data))
|
|
7
|
+
? root.data
|
|
8
|
+
: root;
|
|
9
|
+
const blocking = Array.isArray(data.blocking) ? data.blocking : [];
|
|
10
|
+
const dependents = Array.isArray(data.dependents) ? data.dependents : [];
|
|
11
|
+
return { blocking, dependents };
|
|
12
|
+
}
|
|
13
|
+
export function mergePlanWithDependencies(rawPlanResponse, dependencies) {
|
|
14
|
+
const fallback = {
|
|
15
|
+
dependencies,
|
|
16
|
+
};
|
|
17
|
+
if (!rawPlanResponse || typeof rawPlanResponse !== 'object') {
|
|
18
|
+
return { data: fallback };
|
|
19
|
+
}
|
|
20
|
+
const root = rawPlanResponse;
|
|
21
|
+
const rawData = root.data;
|
|
22
|
+
const planData = rawData && typeof rawData === 'object' && !Array.isArray(rawData)
|
|
23
|
+
? { ...rawData }
|
|
24
|
+
: {};
|
|
25
|
+
planData.dependencies = dependencies;
|
|
26
|
+
return {
|
|
27
|
+
...root,
|
|
28
|
+
data: planData,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function formatPlanWithDependenciesText(planData, dependencies) {
|
|
32
|
+
const lines = [];
|
|
33
|
+
appendLineIfExists(lines, 'id', planData.id);
|
|
34
|
+
appendLineIfExists(lines, 'title', planData.title);
|
|
35
|
+
appendLineIfExists(lines, 'status', planData.status);
|
|
36
|
+
appendLineIfExists(lines, 'priority', planData.priority);
|
|
37
|
+
appendLineIfExists(lines, 'updatedAt', planData.updatedAt);
|
|
38
|
+
appendLineIfExists(lines, 'createdAt', planData.createdAt);
|
|
39
|
+
const ignoredKeys = new Set(['id', 'title', 'status', 'priority', 'updatedAt', 'createdAt', 'dependencies']);
|
|
40
|
+
for (const [key, value] of Object.entries(planData)) {
|
|
41
|
+
if (ignoredKeys.has(key) || value === null || value === undefined) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
lines.push(`${key}: ${String(value)}`);
|
|
45
|
+
}
|
|
46
|
+
lines.push('---');
|
|
47
|
+
lines.push('## Dependencies');
|
|
48
|
+
const rendered = [
|
|
49
|
+
...dependencies.blocking.map((plan) => renderDependencyLine('BLOCKING', plan)),
|
|
50
|
+
...dependencies.dependents.map((plan) => renderDependencyLine('DEPENDENT', plan)),
|
|
51
|
+
];
|
|
52
|
+
if (rendered.length === 0) {
|
|
53
|
+
lines.push('No dependencies.');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
lines.push(...rendered);
|
|
57
|
+
}
|
|
58
|
+
return lines.join('\n');
|
|
59
|
+
}
|
|
60
|
+
export function appendLineIfExists(lines, key, value) {
|
|
61
|
+
if (value === null || value === undefined) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const normalized = String(value).trim();
|
|
65
|
+
if (normalized.length === 0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
lines.push(`${key}: ${normalized}`);
|
|
69
|
+
}
|
|
70
|
+
export function renderDependencyLine(label, plan) {
|
|
71
|
+
if (!plan || typeof plan !== 'object') {
|
|
72
|
+
return `- [${label}] unknown`;
|
|
73
|
+
}
|
|
74
|
+
const target = plan;
|
|
75
|
+
const id = typeof target.id === 'string' && target.id.length > 0 ? target.id : 'unknown-id';
|
|
76
|
+
const title = typeof target.title === 'string' && target.title.length > 0 ? target.title : '(no title)';
|
|
77
|
+
const status = typeof target.status === 'string' && target.status.length > 0 ? target.status : 'UNKNOWN';
|
|
78
|
+
return `- [${label}] ${id}: ${title} (${status})`;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=planFormat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planFormat.js","sourceRoot":"","sources":["../../src/utils/planFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Ora } from 'ora';
|
|
2
|
+
export declare function withSpinner<T>(text: string, fn: () => Promise<T>, successText?: string): Promise<T>;
|
|
3
|
+
export declare function createSpinner(text: string): Ora | null;
|
|
4
|
+
export declare function formatFileInfo(filePath: string, content: string): string;
|
|
5
|
+
export declare function printFileInfo(filePath: string, content: string): void;
|
|
6
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAKpC,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAGtD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGrE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
const isInteractive = process.stderr.isTTY === true;
|
|
4
|
+
export async function withSpinner(text, fn, successText) {
|
|
5
|
+
if (!isInteractive)
|
|
6
|
+
return fn();
|
|
7
|
+
const spinner = ora({ text, stream: process.stderr }).start();
|
|
8
|
+
try {
|
|
9
|
+
const result = await fn();
|
|
10
|
+
spinner.succeed(successText);
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
spinner.fail();
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function createSpinner(text) {
|
|
19
|
+
if (!isInteractive)
|
|
20
|
+
return null;
|
|
21
|
+
return ora({ text, stream: process.stderr }).start();
|
|
22
|
+
}
|
|
23
|
+
export function formatFileInfo(filePath, content) {
|
|
24
|
+
const bytes = Buffer.byteLength(content, 'utf-8');
|
|
25
|
+
const lines = content.split('\n').length;
|
|
26
|
+
const size = bytes < 1024 ? `${bytes} B` : `${(bytes / 1024).toFixed(1)} KB`;
|
|
27
|
+
return `${chalk.cyan(filePath)} ${chalk.dim(`(${size}, ${lines} lines)`)}`;
|
|
28
|
+
}
|
|
29
|
+
export function printFileInfo(filePath, content) {
|
|
30
|
+
if (!isInteractive)
|
|
31
|
+
return;
|
|
32
|
+
process.stderr.write(` ${formatFileInfo(filePath, content)}\n`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,EAAoB,EACpB,WAAoB;IAEpB,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAe;IAC7D,IAAI,CAAC,aAAa;QAAE,OAAO;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rlarua/agentteams-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"description": "CLI tool for AgentTeams API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,11 +22,16 @@
|
|
|
22
22
|
"api"
|
|
23
23
|
],
|
|
24
24
|
"author": "",
|
|
25
|
-
"license": "
|
|
25
|
+
"license": "Apache-2.0",
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"@agentteams/markdown-tiptap": "file:../packages/markdown-tiptap",
|
|
27
28
|
"axios": "^1.7.9",
|
|
29
|
+
"chalk": "^5.6.2",
|
|
28
30
|
"commander": "^12.1.0",
|
|
29
|
-
"
|
|
31
|
+
"diff": "^8.0.2",
|
|
32
|
+
"gray-matter": "^4.0.3",
|
|
33
|
+
"open": "^10.1.0",
|
|
34
|
+
"ora": "^9.3.0"
|
|
30
35
|
},
|
|
31
36
|
"devDependencies": {
|
|
32
37
|
"@types/jest": "^29.5.14",
|
package/DEVELOPMENT.md
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
# AgentTeams CLI - Development Guide
|
|
2
|
-
|
|
3
|
-
This guide is for contributors and developers who want to work on the CLI itself.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- Node.js 24+
|
|
8
|
-
- npm 10+
|
|
9
|
-
- Local API server running (see [../api/README.md](../api/README.md))
|
|
10
|
-
|
|
11
|
-
## Local Setup
|
|
12
|
-
|
|
13
|
-
### 1. Start Local API Server
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# From project root
|
|
17
|
-
cd api
|
|
18
|
-
docker-compose up
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
API will be available at `http://localhost:3001`
|
|
22
|
-
|
|
23
|
-
### 2. Install CLI Dependencies
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
cd cli
|
|
27
|
-
npm install
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### 3. Set Local Environment
|
|
31
|
-
|
|
32
|
-
Create a `.env` file or export environment variables:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
export AGENTTEAMS_API_URL="http://localhost:3001"
|
|
36
|
-
export AGENTTEAMS_WEB_URL="http://localhost:3000" # For OAuth init flow
|
|
37
|
-
export AGENTTEAMS_API_KEY="dev-test-key" # Optional for testing
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Or create `cli/.env`:
|
|
41
|
-
```env
|
|
42
|
-
AGENTTEAMS_API_URL=http://localhost:3001
|
|
43
|
-
AGENTTEAMS_WEB_URL=http://localhost:3000
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### 4. Build and Run
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
# Build TypeScript
|
|
50
|
-
npm run build
|
|
51
|
-
|
|
52
|
-
# Run locally
|
|
53
|
-
node dist/index.js --help
|
|
54
|
-
|
|
55
|
-
# Or link for global testing
|
|
56
|
-
npm link
|
|
57
|
-
agentteams --help
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Development Workflow
|
|
61
|
-
|
|
62
|
-
### Running Tests
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
npm test
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Type Checking
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
npm run build # TypeScript will check types during build
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Testing Commands
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
# Test init command
|
|
78
|
-
node dist/index.js init
|
|
79
|
-
|
|
80
|
-
# Test with local config
|
|
81
|
-
node dist/index.js status list --format text
|
|
82
|
-
|
|
83
|
-
# Test with environment variable override
|
|
84
|
-
AGENTTEAMS_API_URL=http://localhost:3001 node dist/index.js config whoami
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Configuration Priority (Development)
|
|
88
|
-
|
|
89
|
-
When developing, you can override config with environment variables:
|
|
90
|
-
|
|
91
|
-
1. **CLI options** (command-line arguments)
|
|
92
|
-
2. **Environment variables** (`AGENTTEAMS_*`) ← Use this for local testing
|
|
93
|
-
3. **Project config** (`.agentteams/config.json`)
|
|
94
|
-
4. **Global config** (`~/.agentteams/config.json`)
|
|
95
|
-
|
|
96
|
-
### Example: Testing with Different API URLs
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
# Test against local server
|
|
100
|
-
AGENTTEAMS_API_URL=http://localhost:3001 \
|
|
101
|
-
AGENTTEAMS_WEB_URL=http://localhost:3000 \
|
|
102
|
-
node dist/index.js status list
|
|
103
|
-
|
|
104
|
-
# Test init with local web
|
|
105
|
-
AGENTTEAMS_WEB_URL=http://localhost:3000 node dist/index.js init
|
|
106
|
-
|
|
107
|
-
# Test against production
|
|
108
|
-
AGENTTEAMS_API_URL=https://agent-api.justin-mk.me \
|
|
109
|
-
AGENTTEAMS_WEB_URL=https://agent-web.justin-mk.me \
|
|
110
|
-
node dist/index.js status list
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Project Structure
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
cli/
|
|
117
|
-
├── src/
|
|
118
|
-
│ ├── commands/ # Command implementations
|
|
119
|
-
│ │ ├── init.ts
|
|
120
|
-
│ │ ├── convention.ts
|
|
121
|
-
│ │ ├── agentConfig.ts
|
|
122
|
-
│ │ └── index.ts # Command router
|
|
123
|
-
│ ├── types/ # TypeScript type definitions
|
|
124
|
-
│ ├── utils/ # Utilities
|
|
125
|
-
│ │ ├── config.ts # Config loading/merging
|
|
126
|
-
│ │ ├── authServer.ts # OAuth local server
|
|
127
|
-
│ │ └── errors.ts # Error handling
|
|
128
|
-
│ └── index.ts # CLI entry point
|
|
129
|
-
├── test/ # Integration tests
|
|
130
|
-
├── dist/ # Compiled JavaScript (gitignored)
|
|
131
|
-
├── package.json
|
|
132
|
-
├── tsconfig.json
|
|
133
|
-
├── README.md # User-facing documentation (for npm)
|
|
134
|
-
└── DEVELOPMENT.md # This file (for contributors)
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Common Development Tasks
|
|
138
|
-
|
|
139
|
-
### Adding a New Command
|
|
140
|
-
|
|
141
|
-
1. Create command file in `src/commands/`:
|
|
142
|
-
```typescript
|
|
143
|
-
// src/commands/myCommand.ts
|
|
144
|
-
export async function myCommand(config: Config) {
|
|
145
|
-
// Implementation
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
2. Add route in `src/commands/index.ts`
|
|
150
|
-
3. Register in `src/index.ts`:
|
|
151
|
-
```typescript
|
|
152
|
-
program
|
|
153
|
-
.command('my-command')
|
|
154
|
-
.description('...')
|
|
155
|
-
.action(async () => {
|
|
156
|
-
// ...
|
|
157
|
-
});
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Debugging API Calls
|
|
161
|
-
|
|
162
|
-
Enable verbose logging:
|
|
163
|
-
```bash
|
|
164
|
-
# Add console.log in src/commands/index.ts or use a debugger
|
|
165
|
-
node --inspect dist/index.js status list
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Testing OAuth Flow
|
|
169
|
-
|
|
170
|
-
OAuth `init` command requires:
|
|
171
|
-
- Local API server running at `http://localhost:3001`
|
|
172
|
-
- Available port for OAuth callback (default: 7777)
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
node dist/index.js init
|
|
176
|
-
# Browser will open for authentication
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
## Publishing (Maintainers Only)
|
|
180
|
-
|
|
181
|
-
See [Publishing Guide](../README.md#publishing) in the main README.
|
|
182
|
-
|
|
183
|
-
For development testing, use `npm link` instead of publishing:
|
|
184
|
-
|
|
185
|
-
```bash
|
|
186
|
-
npm link
|
|
187
|
-
agentteams --version # Should show current version from package.json
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## Troubleshooting
|
|
191
|
-
|
|
192
|
-
### "Cannot connect to server"
|
|
193
|
-
|
|
194
|
-
Check if local API is running:
|
|
195
|
-
```bash
|
|
196
|
-
curl http://localhost:3001/api/health
|
|
197
|
-
# Expected: {"status":"ok"}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### "Config not found"
|
|
201
|
-
|
|
202
|
-
The CLI looks for config in this order:
|
|
203
|
-
1. `.agentteams/config.json` (current dir or parent dirs)
|
|
204
|
-
2. `~/.agentteams/config.json` (global)
|
|
205
|
-
3. Environment variables
|
|
206
|
-
|
|
207
|
-
For development, use environment variables:
|
|
208
|
-
```bash
|
|
209
|
-
export AGENTTEAMS_API_URL=http://localhost:3001
|
|
210
|
-
export AGENTTEAMS_API_KEY=test-key
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### TypeScript errors after changes
|
|
214
|
-
|
|
215
|
-
Rebuild:
|
|
216
|
-
```bash
|
|
217
|
-
npm run build
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## Contributing
|
|
221
|
-
|
|
222
|
-
1. Create a feature branch
|
|
223
|
-
2. Make changes
|
|
224
|
-
3. Run tests: `npm test`
|
|
225
|
-
4. Build: `npm run build`
|
|
226
|
-
5. Test manually with `node dist/index.js`
|
|
227
|
-
6. Commit with conventional commit messages
|
|
228
|
-
7. Open a pull request
|
|
229
|
-
|
|
230
|
-
## Questions?
|
|
231
|
-
|
|
232
|
-
- Check [../README.md](../README.md) for overall project documentation
|
|
233
|
-
- Check [../api/README.md](../api/README.md) for API server setup
|
|
234
|
-
- Open an issue on GitHub
|