@forloop-cc/forloop-opencode-plugin-planner 2.2.13 → 2.2.14
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/CHANGELOG.md +5 -5
- package/CONTRIBUTING.md +1 -1
- package/docs/CONFIGURATION.md +1 -1
- package/docs/DEVELOPER-VS-USER.md +3 -3
- package/docs/PLANNER-AGENT-IMPROVEMENTS.md +1 -1
- package/docs/PLUGIN-ARCHITECTURE.md +1 -1
- package/docs/QUICKSTART-NON-DEV.md +3 -3
- package/docs/USER-INTERACTION-MODEL.md +5 -5
- package/docs/superpowers/plans/2026-05-03-sprint-isolated-directory-structure.md +2 -2
- package/docs/superpowers/plans/2026-05-29-install-system.md +1 -1
- package/docs/superpowers/specs/2026-06-08-plugin-test-docker-design.md +1 -1
- package/package.json +1 -1
- package/plugins/forloop-plugin.ts +6 -6
- package/plugins/tools/ai-trigger-tools.ts +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -10,13 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
10
10
|
### Added - Sprint & Story API Enhancements
|
|
11
11
|
|
|
12
12
|
#### New Sprint Tools
|
|
13
|
-
- **
|
|
13
|
+
- **forloopSpaceSprintCreate** - Create new sprint with dates and settings
|
|
14
14
|
- Arguments: title, description, startDate, endDate, isPrivate, organizationId
|
|
15
15
|
- Confirmation messages with sprint details
|
|
16
|
-
- **
|
|
16
|
+
- **forloopSpaceSprintUpdate** - Update sprint details
|
|
17
17
|
- Arguments: sprintId, title, description, startDate, endDate, isPrivate
|
|
18
18
|
- Partial updates supported
|
|
19
|
-
- **
|
|
19
|
+
- **forloopSpaceSprintDelete** - Delete sprint (with confirmation)
|
|
20
20
|
- Arguments: sprintId, confirm (required for safety)
|
|
21
21
|
- Warning message before deletion
|
|
22
22
|
|
|
@@ -155,8 +155,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
155
155
|
#### Core Features
|
|
156
156
|
- `forloopTokenSet` - Set/update ForLoop API token
|
|
157
157
|
- `forloopTokenGet` - Check if API token is configured
|
|
158
|
-
- `
|
|
159
|
-
- `
|
|
158
|
+
- `forloopSpaceSprintGet` - Get sprint details with stories and files
|
|
159
|
+
- `forloopSpaceSprintList` - List all accessible sprints
|
|
160
160
|
- `forloopStoryCreate` - Create new stories
|
|
161
161
|
- `forloopStoryUpdate` - Update existing stories
|
|
162
162
|
- `forloopStoryDelete` - Delete stories
|
package/CONTRIBUTING.md
CHANGED
|
@@ -137,7 +137,7 @@ Before submitting your PR, ensure:
|
|
|
137
137
|
|
|
138
138
|
Example:
|
|
139
139
|
```typescript
|
|
140
|
-
describe('
|
|
140
|
+
describe('forloopSpaceSprintList', () => {
|
|
141
141
|
it('should list sprints successfully', async () => {
|
|
142
142
|
// Arrange
|
|
143
143
|
mockClient.listSprints.mockResolvedValue([...])
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -110,7 +110,7 @@ opencode
|
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
112
|
# Quick test without permanent config
|
|
113
|
-
FORLOOP_API_URL=https://api.dev.forloop.cc opencode run "
|
|
113
|
+
FORLOOP_API_URL=https://api.dev.forloop.cc opencode run "forloopSpaceSprintList"
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
### Production Deployment
|
|
@@ -37,7 +37,7 @@ This document clarifies the difference between **developing** the plugin and **u
|
|
|
37
37
|
│ $ opencode │
|
|
38
38
|
│ ───────────────────────────────────────────────────────── │
|
|
39
39
|
│ │
|
|
40
|
-
│ You:
|
|
40
|
+
│ You: forloopSpaceSprintList │
|
|
41
41
|
│ └─ Lists all sprints │
|
|
42
42
|
│ │
|
|
43
43
|
│ You: forloopStoryCreate │
|
|
@@ -83,7 +83,7 @@ npm run install:local
|
|
|
83
83
|
|
|
84
84
|
# Test in opencode
|
|
85
85
|
opencode
|
|
86
|
-
>
|
|
86
|
+
> forloopSpaceSprintList
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
### Users (Simple Setup)
|
|
@@ -96,7 +96,7 @@ npm install @forloop/opencode-plugin
|
|
|
96
96
|
|
|
97
97
|
# Then just use in opencode
|
|
98
98
|
opencode
|
|
99
|
-
>
|
|
99
|
+
> forloopSpaceSprintList
|
|
100
100
|
```
|
|
101
101
|
|
|
102
102
|
## When Do You Need TypeScript Knowledge?
|
|
@@ -51,7 +51,7 @@ name: ForLoop Planner ← THIS should be passed
|
|
|
51
51
|
```typescript
|
|
52
52
|
1. Check if .forloop/manifest.json exists
|
|
53
53
|
2. If NOT exists or empty:
|
|
54
|
-
- Call
|
|
54
|
+
- Call forloopSpaceSprintList to get sprints
|
|
55
55
|
- Call forloopSyncS3ToLocal to sync latest context
|
|
56
56
|
3. Load context files
|
|
57
57
|
```
|
|
@@ -249,7 +249,7 @@ npm update @forloop/opencode-plugin
|
|
|
249
249
|
|
|
250
250
|
**Stored in:** `~/.cache/opencode/node_modules/@forloop/opencode-plugin/`
|
|
251
251
|
|
|
252
|
-
**Visible to user:** Only the tools (`
|
|
252
|
+
**Visible to user:** Only the tools (`forloopSpaceSprintList`, etc.)
|
|
253
253
|
|
|
254
254
|
### What You See as a User
|
|
255
255
|
|
|
@@ -44,7 +44,7 @@ Just use commands in opencode chat:
|
|
|
44
44
|
|
|
45
45
|
### List Sprints
|
|
46
46
|
```
|
|
47
|
-
|
|
47
|
+
forloopSpaceSprintList
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### Create a Story
|
|
@@ -61,8 +61,8 @@ forloopAgentBreakdown --storyId 78
|
|
|
61
61
|
|
|
62
62
|
| What You Want to Do | Command |
|
|
63
63
|
|---------------------|---------|
|
|
64
|
-
| See all sprints | `
|
|
65
|
-
| See sprint details | `
|
|
64
|
+
| See all sprints | `forloopSpaceSprintList` |
|
|
65
|
+
| See sprint details | `forloopSpaceSprintGet --sprintId 14` |
|
|
66
66
|
| Create story | `forloopStoryCreate --title "..." --sprintId 14` |
|
|
67
67
|
| Update story | `forloopStoryUpdate --storyId 78 --status done` |
|
|
68
68
|
| Get AI breakdown | `forloopAgentBreakdown --storyId 78` |
|
|
@@ -9,7 +9,7 @@ The ForLoop Plugin is **NOT a CLI tool** that you run directly. It's an **openco
|
|
|
9
9
|
```bash
|
|
10
10
|
# These DON'T work:
|
|
11
11
|
node plugins/tools/sprint-tools.ts ✗
|
|
12
|
-
npm run
|
|
12
|
+
npm run forloopSpaceSprintList ✗
|
|
13
13
|
./plugins/forloop-plugin.ts ✗
|
|
14
14
|
```
|
|
15
15
|
|
|
@@ -22,7 +22,7 @@ Users interact through **opencode chat** using tool commands:
|
|
|
22
22
|
opencode
|
|
23
23
|
|
|
24
24
|
# 2. In the chat, use tool commands:
|
|
25
|
-
|
|
25
|
+
forloopSpaceSprintList
|
|
26
26
|
forloopStoryCreate --title "As a user, I want to login" --sprintId 14
|
|
27
27
|
forloopAgentBreakdown --storyId 78
|
|
28
28
|
```
|
|
@@ -56,7 +56,7 @@ forloopAgentBreakdown --storyId 78
|
|
|
56
56
|
|
|
57
57
|
| TypeScript Function | User Command |
|
|
58
58
|
|---------------------|--------------|
|
|
59
|
-
| `createSprintListTool()` | `
|
|
59
|
+
| `createSprintListTool()` | `forloopSpaceSprintList` |
|
|
60
60
|
| `createStoryCreateTool()` | `forloopStoryCreate --title "..."` |
|
|
61
61
|
| `createAgentBreakdownTool()` | `forloopAgentBreakdown --storyId 78` |
|
|
62
62
|
|
|
@@ -76,7 +76,7 @@ npm run install:local
|
|
|
76
76
|
|
|
77
77
|
# 4. Test in opencode
|
|
78
78
|
opencode
|
|
79
|
-
>
|
|
79
|
+
> forloopSpaceSprintList
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
If you're **using** the plugin:
|
|
@@ -84,7 +84,7 @@ If you're **using** the plugin:
|
|
|
84
84
|
```bash
|
|
85
85
|
# Just use opencode chat
|
|
86
86
|
opencode
|
|
87
|
-
>
|
|
87
|
+
> forloopSpaceSprintList
|
|
88
88
|
|
|
89
89
|
# That's it! No TypeScript knowledge needed.
|
|
90
90
|
```
|
|
@@ -444,7 +444,7 @@ Replace lines 106-117:
|
|
|
444
444
|
- Confirm active sprint
|
|
445
445
|
3. **IF manifest missing or empty:**
|
|
446
446
|
- ⚠️ **STOP searching immediately**
|
|
447
|
-
- ✅ **Call `
|
|
447
|
+
- ✅ **Call `forloopSpaceSprintList` to get sprints from API**
|
|
448
448
|
- ✅ **Call `forloopUserProfile` to get user info from API**
|
|
449
449
|
- Ask user to select/confirm sprint
|
|
450
450
|
- Create `$HOME/.forloop/manifest.json` after selection
|
|
@@ -459,7 +459,7 @@ With:
|
|
|
459
459
|
- Confirm active sprint
|
|
460
460
|
3. **IF manifest missing or empty:**
|
|
461
461
|
- ⚠️ **STOP searching immediately**
|
|
462
|
-
- ✅ **Call `
|
|
462
|
+
- ✅ **Call `forloopSpaceSprintList` to get sprints from API**
|
|
463
463
|
- ✅ **Call `forloopUserProfile` to get user info from API**
|
|
464
464
|
- Ask user to select/confirm sprint
|
|
465
465
|
- Create `$HOME/.forloop/manifest.json` after selection
|
|
@@ -371,7 +371,7 @@ show_summary() {
|
|
|
371
371
|
echo ""
|
|
372
372
|
echo " Next steps:"
|
|
373
373
|
echo " 1. Start opencode: opencode"
|
|
374
|
-
echo " 2. List sprints:
|
|
374
|
+
echo " 2. List sprints: forloopSpaceSprintList"
|
|
375
375
|
echo " 3. Create a story: forloopStoryCreate --title 'My feature'"
|
|
376
376
|
echo ""
|
|
377
377
|
echo " Docs: https://github.com/forloop-cc/forloop-opencode-plugin-planner"
|
|
@@ -70,7 +70,7 @@ The Docker container installs in this order:
|
|
|
70
70
|
|
|
71
71
|
### Stage E: Tool Discovery
|
|
72
72
|
**Assert:** `opencode run --agent forLoopPlanner "what tools and skills do you have"` produces output that:
|
|
73
|
-
- Lists or references ForLoop plugin tools (
|
|
73
|
+
- Lists or references ForLoop plugin tools (forloopSpaceSprintList, forloopStoryCreate, forloopAgentQuery, etc.)
|
|
74
74
|
- References skills loaded from the plugin (sprint-planning, task-tracking, file-management, forloop-skill)
|
|
75
75
|
|
|
76
76
|
## No Token Behavior
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@forloop-cc/forloop-opencode-plugin-planner",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.14",
|
|
5
5
|
"description": "ForLoop integration plugin for opencode — Sprint, story, and agent tools for the ForLoop platform",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
@@ -100,11 +100,11 @@ export default async (ctx: any) => {
|
|
|
100
100
|
'forloopTokenGet': createTokenGetTool(),
|
|
101
101
|
|
|
102
102
|
// Sprint Operations
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
'
|
|
103
|
+
'forloopSpaceSprintList': createSprintListTool(client),
|
|
104
|
+
'forloopSpaceSprintGet': createSprintGetTool(client),
|
|
105
|
+
'forloopSpaceSprintCreate': createSprintCreateTool(client),
|
|
106
|
+
'forloopSpaceSprintUpdate': createSprintUpdateTool(client),
|
|
107
|
+
'forloopSpaceSprintDelete': createSprintDeleteTool(client),
|
|
108
108
|
|
|
109
109
|
// Sub-Sprint (Iteration) Operations
|
|
110
110
|
'forloopSubSprintList' : createSubSprintListTool(client),
|
|
@@ -162,7 +162,7 @@ export default async (ctx: any) => {
|
|
|
162
162
|
'forloopAgentHistory': createConversationHistoryTool(client),
|
|
163
163
|
'forloopAgentClear': createClearHistoryTool(client),
|
|
164
164
|
'forloopAiAgentList': createAgentListTool(client),
|
|
165
|
-
'
|
|
165
|
+
'forloopSpaceSprintAiAgentsUpdate': createSprintAiAgentsUpdateTool(client),
|
|
166
166
|
|
|
167
167
|
// AI Execution Tools
|
|
168
168
|
...aiTriggerTools,
|
|
@@ -8,13 +8,13 @@ import { validateToken } from '../capabilities/auth';
|
|
|
8
8
|
export function createAITriggerTools(client: ForLoopAPIClient) {
|
|
9
9
|
const tools: Record<string, ReturnType<typeof tool>> = {};
|
|
10
10
|
|
|
11
|
-
tools['
|
|
11
|
+
tools['forloopAiDeveloperSpaceSprint'] = createDeveloperSprintTool(client);
|
|
12
12
|
|
|
13
13
|
return tools;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* forloopAiDeveloperSpaceSprint - Trigger developer agent for sprint work
|
|
18
18
|
* Triggers the forLoopTaskSupervisor agent via EventBridge → Step Functions → ECS
|
|
19
19
|
*/
|
|
20
20
|
function createDeveloperSprintTool(client: ForLoopAPIClient) {
|
|
@@ -35,7 +35,7 @@ function createDeveloperSprintTool(client: ForLoopAPIClient) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
try {
|
|
38
|
-
console.log('[
|
|
38
|
+
console.log('[forloopAiDeveloperSpaceSprint] Triggering developer agent', {
|
|
39
39
|
sprintId: args.sprintId,
|
|
40
40
|
});
|
|
41
41
|
|
|
@@ -71,7 +71,7 @@ function createDeveloperSprintTool(client: ForLoopAPIClient) {
|
|
|
71
71
|
- Check the ForLoop dashboard for story status updates
|
|
72
72
|
- Wait for email notification upon completion`
|
|
73
73
|
} catch (error: any) {
|
|
74
|
-
console.error('[
|
|
74
|
+
console.error('[forloopAiDeveloperSpaceSprint] Failed to trigger developer', error)
|
|
75
75
|
return `❌ Failed to trigger forLoopTaskSupervisor: ${error.message}`
|
|
76
76
|
}
|
|
77
77
|
},
|