@forloop-cc/forloop-cli 0.2.4 → 0.2.6
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 +19 -9
- package/dist/forloop +14 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @forloop-cc/forloop-cli
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [中文](README_zh.md) · [日本語](README_ja.md)
|
|
4
|
+
|
|
3
5
|
Command-line interface for the [ForLoop](https://forloop.cc) AI development platform. Manage sprints, stories, files, AI agents, and organizations without leaving your terminal.
|
|
4
6
|
|
|
5
7
|
## Table of Contents
|
|
@@ -8,7 +10,6 @@ Command-line interface for the [ForLoop](https://forloop.cc) AI development plat
|
|
|
8
10
|
- [Installation](#installation)
|
|
9
11
|
- [Quick Start](#quick-start)
|
|
10
12
|
- [Authentication](#authentication)
|
|
11
|
-
- [Environments](#environments)
|
|
12
13
|
- [Commands](#commands)
|
|
13
14
|
- [Sprint Operations](#sprint-operations)
|
|
14
15
|
- [Story Operations](#story-operations)
|
|
@@ -63,7 +64,7 @@ npm install -g @forloop-cc/forloop-cli
|
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
66
|
forloop --version
|
|
66
|
-
# Output: forloop 0.2.
|
|
67
|
+
# Output: forloop 0.2.4
|
|
67
68
|
```
|
|
68
69
|
|
|
69
70
|
---
|
|
@@ -129,10 +130,6 @@ forloop auth logout # Remove saved token
|
|
|
129
130
|
|
|
130
131
|
---
|
|
131
132
|
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Commands
|
|
135
|
-
|
|
136
133
|
### Sprint Operations
|
|
137
134
|
|
|
138
135
|
Work with sprints — the containers that hold your stories and track development cycles.
|
|
@@ -141,11 +138,14 @@ Work with sprints — the containers that hold your stories and track developmen
|
|
|
141
138
|
# List all sprints you have access to
|
|
142
139
|
forloop sprint list
|
|
143
140
|
forloop sprint list --org-id 1
|
|
141
|
+
forloop sprint list --include-system-org # Include system organization sprints
|
|
142
|
+
forloop sprint list --output json # Structured JSON output
|
|
144
143
|
|
|
145
144
|
# Get sprint details, including all stories
|
|
146
145
|
forloop sprint get --id 66
|
|
147
146
|
forloop sprint get --id 66 --no-stories # Exclude stories
|
|
148
147
|
forloop sprint get --id 66 --no-files # Exclude files
|
|
148
|
+
forloop sprint get --id 66 --output json # Structured JSON output
|
|
149
149
|
|
|
150
150
|
# Create a new sprint
|
|
151
151
|
forloop sprint create \
|
|
@@ -193,6 +193,7 @@ forloop story create \
|
|
|
193
193
|
# Read story details, including developer comments
|
|
194
194
|
forloop story get --id 229
|
|
195
195
|
forloop story get --id 229 --no-comments
|
|
196
|
+
forloop story get --id 229 --output json # Structured JSON output
|
|
196
197
|
|
|
197
198
|
# Update a story
|
|
198
199
|
forloop story update --id 229 --status in_progress
|
|
@@ -210,7 +211,11 @@ Templates define the structure of your stories. List available templates to see
|
|
|
210
211
|
|
|
211
212
|
```bash
|
|
212
213
|
forloop template list
|
|
213
|
-
#
|
|
214
|
+
# Built-in templates: Basic Task (basic-task), Basic Note (basic-note)
|
|
215
|
+
# Server templates: Schedule Meeting (schedule-meeting), New Folder (doc-folder)
|
|
216
|
+
|
|
217
|
+
# JSON output:
|
|
218
|
+
forloop template list --output json
|
|
214
219
|
```
|
|
215
220
|
|
|
216
221
|
### Agent Operations
|
|
@@ -220,6 +225,7 @@ Interact with ForLoop's AI agents — check their progress, trigger new work, an
|
|
|
220
225
|
```bash
|
|
221
226
|
# See what AI agents have discussed in the past
|
|
222
227
|
forloop agent history --sprint 66 --limit 20
|
|
228
|
+
forloop agent history --sprint 66 --output json
|
|
223
229
|
|
|
224
230
|
# Check if a developer task is running, completed, or failed
|
|
225
231
|
forloop agent developer-status --sprint 66
|
|
@@ -241,9 +247,11 @@ Organizations group sprints and control access for teams.
|
|
|
241
247
|
# List organizations you belong to
|
|
242
248
|
forloop org list
|
|
243
249
|
forloop org list --owned-only # Only orgs you own
|
|
250
|
+
forloop org list --output json # Structured JSON output
|
|
244
251
|
|
|
245
252
|
# View organization details
|
|
246
253
|
forloop org get --id 1
|
|
254
|
+
forloop org get --id 1 --output json
|
|
247
255
|
|
|
248
256
|
# Create an organization (requires Team or Enterprise tier)
|
|
249
257
|
forloop org create \
|
|
@@ -261,14 +269,15 @@ Check your profile, limits, and usage.
|
|
|
261
269
|
```bash
|
|
262
270
|
# View your profile
|
|
263
271
|
forloop user profile
|
|
264
|
-
|
|
272
|
+
forloop user profile --output json
|
|
265
273
|
|
|
266
274
|
# Check your quota limits and current usage
|
|
267
275
|
forloop user quotas
|
|
268
|
-
|
|
276
|
+
forloop user quotas --output json
|
|
269
277
|
|
|
270
278
|
# Check quota usage for a specific organization
|
|
271
279
|
forloop org quotas --org-id 1
|
|
280
|
+
forloop org quotas --org-id 1 --output json
|
|
272
281
|
```
|
|
273
282
|
|
|
274
283
|
### File Operations
|
|
@@ -282,6 +291,7 @@ forloop file upload --path ./mockup.png --sprint 66 --folder designs
|
|
|
282
291
|
|
|
283
292
|
# List all files in a sprint
|
|
284
293
|
forloop file list --sprint 66
|
|
294
|
+
forloop file list --sprint 66 --output json
|
|
285
295
|
|
|
286
296
|
# Generate a download link
|
|
287
297
|
forloop file download --id 84
|
package/dist/forloop
CHANGED
|
@@ -1688,7 +1688,8 @@ function createFileUploadCommand() {
|
|
|
1688
1688
|
{ flag: "--path <path>", description: "Local file path", required: true },
|
|
1689
1689
|
{ flag: "--sprint <id>", description: "Target sprint ID", required: true, type: "number" },
|
|
1690
1690
|
{ flag: "--description <text>", description: "File description" },
|
|
1691
|
-
{ flag: "--folder <text>", description: "S3 folder within sprint" }
|
|
1691
|
+
{ flag: "--folder <text>", description: "S3 folder within sprint" },
|
|
1692
|
+
{ flag: "--story-id <id>", description: "Link file to a story (e.g., doc_folder story)", type: "number" }
|
|
1692
1693
|
],
|
|
1693
1694
|
examples: ["forloop file upload --path ./report.pdf --sprint 1 --folder docs"],
|
|
1694
1695
|
async run(config, flags) {
|
|
@@ -1725,7 +1726,10 @@ function createFileUploadCommand() {
|
|
|
1725
1726
|
originalName: fileName,
|
|
1726
1727
|
fileType: contentType,
|
|
1727
1728
|
size: fileContent.length,
|
|
1728
|
-
folder: flags.folder
|
|
1729
|
+
folder: flags.folder,
|
|
1730
|
+
x: 0,
|
|
1731
|
+
y: 0,
|
|
1732
|
+
storyId: flags.storyId
|
|
1729
1733
|
});
|
|
1730
1734
|
print(config, { fileName, size: fileContent.length, url: complete.url, fileId: complete.id }, `File uploaded: ${fileName} (${formatSize(fileContent.length)})`);
|
|
1731
1735
|
}
|
|
@@ -1898,7 +1902,7 @@ function createAivyDocGetCommand() {
|
|
|
1898
1902
|
{ flag: "--title <text>", description: 'Doc folder title (default: "forloop Aivy doc")' }
|
|
1899
1903
|
],
|
|
1900
1904
|
examples: ["forloop sync aivy-doc-get --sprint 1"],
|
|
1901
|
-
async run(
|
|
1905
|
+
async run(config, flags) {
|
|
1902
1906
|
const resolved = await getClient7();
|
|
1903
1907
|
if (!resolved) return;
|
|
1904
1908
|
const { client } = resolved;
|
|
@@ -1912,9 +1916,9 @@ function createAivyDocGetCommand() {
|
|
|
1912
1916
|
const stories = Array.isArray(sprint?.stories) ? sprint.stories : [];
|
|
1913
1917
|
const existing = stories.find((s) => s.type === "doc_folder" && s.title?.toLowerCase() === title.toLowerCase());
|
|
1914
1918
|
if (existing?.id) {
|
|
1915
|
-
|
|
1919
|
+
print(config, { docFolderId: existing.id, exists: true, title: existing.title, sprintId: resolution.sprintId }, `Doc folder: #${existing.id} "${existing.title}" (Sprint #${resolution.sprintId})`);
|
|
1916
1920
|
} else {
|
|
1917
|
-
|
|
1921
|
+
print(config, { exists: false, sprintId: resolution.sprintId }, `Doc folder not found. Run: forloop sync aivy-folder --sprint ${resolution.sprintId}`);
|
|
1918
1922
|
}
|
|
1919
1923
|
}
|
|
1920
1924
|
});
|
|
@@ -1977,6 +1981,7 @@ function createLocalToS3Command() {
|
|
|
1977
1981
|
{ flag: "--path <path>", description: "Local file path", required: true },
|
|
1978
1982
|
{ flag: "--sprint <id>", description: "Target sprint ID", type: "number" },
|
|
1979
1983
|
{ flag: "--folder <text>", description: "Remote folder (e.g., project/plans)" },
|
|
1984
|
+
{ flag: "--story-id <id>", description: "Link file to a story (e.g., doc_folder story)", type: "number" },
|
|
1980
1985
|
{ flag: "--delete", description: "Delete remote file instead of uploading" }
|
|
1981
1986
|
],
|
|
1982
1987
|
examples: ["forloop sync local-to-s3 --path ~/.forloop/sprint-1/plan/plan.md --sprint 1"],
|
|
@@ -2015,7 +2020,10 @@ function createLocalToS3Command() {
|
|
|
2015
2020
|
originalName: fileName,
|
|
2016
2021
|
fileType: contentType,
|
|
2017
2022
|
size: fileBuf.length,
|
|
2018
|
-
folder
|
|
2023
|
+
folder,
|
|
2024
|
+
x: 0,
|
|
2025
|
+
y: 0,
|
|
2026
|
+
storyId: flags.storyId
|
|
2019
2027
|
});
|
|
2020
2028
|
console.log(`Synced: ${fileName} -> Sprint #${resolution.sprintId}`);
|
|
2021
2029
|
}
|