@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.
Files changed (3) hide show
  1. package/README.md +19 -9
  2. package/dist/forloop +14 -6
  3. 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.1
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
- # Output shows: Basic Task, Basic Note, Schedule Meeting, New Folder
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
- # Output: User: TOSHI WORKSHOP JP, Email: ..., Tier: free
272
+ forloop user profile --output json
265
273
 
266
274
  # Check your quota limits and current usage
267
275
  forloop user quotas
268
- # Output: Stories used: 23/100, Storage used: 17KB/3GB, etc.
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(_config, flags) {
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
- console.log(`Doc folder: #${existing.id} "${existing.title}" (Sprint #${resolution.sprintId})`);
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
- console.log(`Doc folder not found. Run: forloop sync aivy-folder --sprint ${resolution.sprintId}`);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forloop-cc/forloop-cli",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "Command-line interface for the ForLoop AI development platform",
5
5
  "type": "module",
6
6
  "license": "MIT",