@smartsoft001-mobilems/claude-plugins 2.67.0 → 2.69.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/.claude-plugin/marketplace.json +4 -0
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow-legacy/.claude-plugin/README.md +143 -0
- package/plugins/flow-legacy/.claude-plugin/merge-permissions.js +80 -0
- package/plugins/flow-legacy/.claude-plugin/plugin.json +5 -0
- package/plugins/flow-legacy/.claude-plugin/settings.template.json +75 -0
- package/plugins/flow-legacy/agents/angular-component-scaffolder.md +323 -0
- package/plugins/flow-legacy/agents/angular-directive-builder.md +258 -0
- package/plugins/flow-legacy/agents/angular-guard-builder.md +322 -0
- package/plugins/flow-legacy/agents/angular-pipe-builder.md +227 -0
- package/plugins/flow-legacy/agents/angular-resolver-builder.md +332 -0
- package/plugins/flow-legacy/agents/angular-service-builder.md +271 -0
- package/plugins/flow-legacy/agents/angular-state-builder.md +473 -0
- package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +161 -0
- package/plugins/flow-legacy/agents/shared-impl-reporter.md +204 -0
- package/plugins/flow-legacy/agents/shared-linear-subtask-iterator.md +187 -0
- package/plugins/flow-legacy/agents/shared-tdd-developer.md +304 -0
- package/plugins/flow-legacy/agents/shared-test-runner.md +131 -0
- package/plugins/flow-legacy/agents/shared-ui-classifier.md +137 -0
- package/plugins/flow-legacy/commands/commit.md +162 -0
- package/plugins/flow-legacy/commands/impl.md +495 -0
- package/plugins/flow-legacy/commands/plan.md +488 -0
- package/plugins/flow-legacy/commands/push.md +470 -0
- package/plugins/flow-legacy/skills/a11y-audit/SKILL.md +214 -0
- package/plugins/flow-legacy/skills/angular-patterns/SKILL.md +361 -0
- package/plugins/flow-legacy/skills/browser-capture/SKILL.md +238 -0
- package/plugins/flow-legacy/skills/debug-helper/SKILL.md +387 -0
- package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +132 -0
- package/plugins/flow-legacy/skills/maia-files-delete/SKILL.md +59 -0
- package/plugins/flow-legacy/skills/maia-files-upload/SKILL.md +57 -0
- package/plugins/flow-legacy/skills/nx-conventions/SKILL.md +371 -0
- package/plugins/flow-legacy/skills/test-unit/SKILL.md +494 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debug-helper
|
|
3
|
+
description: Cross-stack debugging workflows for Angular 14, NestJS, and MongoDB applications
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debug Helper (Angular 14 Legacy)
|
|
7
|
+
|
|
8
|
+
This skill provides debugging workflows and techniques for Angular 14 legacy projects.
|
|
9
|
+
|
|
10
|
+
## 1. Angular 14 Debugging
|
|
11
|
+
|
|
12
|
+
### Component Not Rendering
|
|
13
|
+
|
|
14
|
+
1. **Check selector usage**
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// Verify selector matches
|
|
18
|
+
@Component({ selector: 'app-my-component' })
|
|
19
|
+
// Template: <app-my-component></app-my-component>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. **Check module declarations**
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
@NgModule({
|
|
26
|
+
declarations: [MyComponent], // Is it declared?
|
|
27
|
+
exports: [MyComponent], // Is it exported (if used outside)?
|
|
28
|
+
})
|
|
29
|
+
export class FeatureModule {}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. **Check module imports**
|
|
33
|
+
```typescript
|
|
34
|
+
@NgModule({
|
|
35
|
+
imports: [FeatureModule], // Is feature module imported?
|
|
36
|
+
})
|
|
37
|
+
export class AppModule {}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### BehaviorSubject/Observable Issues
|
|
41
|
+
|
|
42
|
+
1. **BehaviorSubject not updating view**
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Wrong: mutating array directly
|
|
46
|
+
const items = this._items.getValue();
|
|
47
|
+
items.push(newItem); // Won't trigger update
|
|
48
|
+
this._items.next(items);
|
|
49
|
+
|
|
50
|
+
// Correct: create new reference
|
|
51
|
+
const items = this._items.getValue();
|
|
52
|
+
this._items.next([...items, newItem]);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. **Subscription not receiving values**
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// Ensure subscription is active
|
|
59
|
+
ngOnInit(): void {
|
|
60
|
+
this.items$ = this.stateService.items$;
|
|
61
|
+
|
|
62
|
+
// Debug: log values
|
|
63
|
+
this.items$.pipe(
|
|
64
|
+
tap(items => console.log('Items received:', items)),
|
|
65
|
+
takeUntil(this.destroy$)
|
|
66
|
+
).subscribe();
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
3. **Memory leak from subscriptions**
|
|
71
|
+
```typescript
|
|
72
|
+
// Always unsubscribe with takeUntil pattern
|
|
73
|
+
private readonly destroy$ = new Subject<void>();
|
|
74
|
+
|
|
75
|
+
ngOnInit(): void {
|
|
76
|
+
this.service.data$
|
|
77
|
+
.pipe(takeUntil(this.destroy$))
|
|
78
|
+
.subscribe(data => this.data = data);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
ngOnDestroy(): void {
|
|
82
|
+
this.destroy$.next();
|
|
83
|
+
this.destroy$.complete();
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Change Detection Issues
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// Force change detection (use sparingly)
|
|
91
|
+
constructor(private cdr: ChangeDetectorRef) {}
|
|
92
|
+
|
|
93
|
+
// After async operation
|
|
94
|
+
this.cdr.detectChanges();
|
|
95
|
+
|
|
96
|
+
// Or mark for check (OnPush)
|
|
97
|
+
this.cdr.markForCheck();
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### HTTP Debugging (Angular 14)
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// HTTP interceptor for logging
|
|
104
|
+
@Injectable()
|
|
105
|
+
export class LoggingInterceptor implements HttpInterceptor {
|
|
106
|
+
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
|
|
107
|
+
console.log('Request:', req.method, req.url);
|
|
108
|
+
|
|
109
|
+
return next.handle(req).pipe(
|
|
110
|
+
tap({
|
|
111
|
+
next: (event) => {
|
|
112
|
+
if (event instanceof HttpResponse) {
|
|
113
|
+
console.log('Response:', event.status, event.body);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
error: (error) => console.error('HTTP Error:', error),
|
|
117
|
+
})
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Register in module
|
|
123
|
+
@NgModule({
|
|
124
|
+
providers: [
|
|
125
|
+
{ provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true },
|
|
126
|
+
],
|
|
127
|
+
})
|
|
128
|
+
export class AppModule {}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Template Debugging
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<!-- Debug in template with json pipe -->
|
|
135
|
+
<pre>{{ data | json }}</pre>
|
|
136
|
+
|
|
137
|
+
<!-- Debug *ngIf condition -->
|
|
138
|
+
<p>isLoading: {{ isLoading }}</p>
|
|
139
|
+
<p>items.length: {{ items?.length }}</p>
|
|
140
|
+
|
|
141
|
+
<!-- Debug *ngFor -->
|
|
142
|
+
<div *ngFor="let item of items; let i = index">
|
|
143
|
+
{{ i }}: {{ item | json }}
|
|
144
|
+
</div>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Browser DevTools
|
|
148
|
+
|
|
149
|
+
1. **Angular DevTools** - Install Chrome extension (works with Angular 14)
|
|
150
|
+
2. **Component inspector** - Click "Components" tab
|
|
151
|
+
3. **Profiler** - Record change detection cycles
|
|
152
|
+
4. **Network tab** - Check API calls
|
|
153
|
+
|
|
154
|
+
## 2. NestJS Debugging
|
|
155
|
+
|
|
156
|
+
### Request Not Reaching Controller
|
|
157
|
+
|
|
158
|
+
1. **Check route path**
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
@Controller('features') // /features
|
|
162
|
+
@Get(':id') // /features/:id
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
2. **Check module imports**
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
@Module({
|
|
169
|
+
imports: [FeatureModule], // Is module imported?
|
|
170
|
+
})
|
|
171
|
+
export class AppModule {}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
3. **Check guards/interceptors**
|
|
175
|
+
```typescript
|
|
176
|
+
@UseGuards(AuthGuard) // Is guard blocking?
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Dependency Injection Errors
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Error: Nest can't resolve dependencies of FeatureService
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Solutions:**
|
|
186
|
+
|
|
187
|
+
1. Check provider is in module
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
@Module({
|
|
191
|
+
providers: [FeatureService, FeatureRepository],
|
|
192
|
+
})
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
2. Check circular dependencies
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Use forwardRef
|
|
199
|
+
@Inject(forwardRef(() => OtherService))
|
|
200
|
+
private readonly other: OtherService,
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
3. Check module exports
|
|
204
|
+
```typescript
|
|
205
|
+
@Module({
|
|
206
|
+
providers: [SharedService],
|
|
207
|
+
exports: [SharedService], // Must export if used elsewhere
|
|
208
|
+
})
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Logging
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
import { Logger } from '@nestjs/common';
|
|
215
|
+
|
|
216
|
+
@Injectable()
|
|
217
|
+
export class FeatureService {
|
|
218
|
+
private readonly logger = new Logger(FeatureService.name);
|
|
219
|
+
|
|
220
|
+
async findAll() {
|
|
221
|
+
this.logger.log('Finding all features');
|
|
222
|
+
this.logger.debug('Debug info');
|
|
223
|
+
this.logger.warn('Warning');
|
|
224
|
+
this.logger.error('Error occurred', error.stack);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## 3. MongoDB/Mongoose Debugging
|
|
230
|
+
|
|
231
|
+
### Connection Issues
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
// Log connection events
|
|
235
|
+
mongoose.connection.on('connected', () => console.log('MongoDB connected'));
|
|
236
|
+
mongoose.connection.on('error', (err) => console.error('MongoDB error:', err));
|
|
237
|
+
mongoose.connection.on('disconnected', () => console.log('MongoDB disconnected'));
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Query Debugging
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
// Enable Mongoose debug mode
|
|
244
|
+
mongoose.set('debug', true);
|
|
245
|
+
|
|
246
|
+
// Or for specific query
|
|
247
|
+
const result = await this.model.find({ status: 'active' });
|
|
248
|
+
console.log('Query:', this.model.find({ status: 'active' }).getQuery());
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 4. Common Debugging Patterns
|
|
252
|
+
|
|
253
|
+
### Console Debugging
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// Temporary debug logs (remove before commit)
|
|
257
|
+
console.log('DEBUG:', variable);
|
|
258
|
+
console.table(arrayOfObjects);
|
|
259
|
+
console.group('Group');
|
|
260
|
+
console.log('Item 1');
|
|
261
|
+
console.log('Item 2');
|
|
262
|
+
console.groupEnd();
|
|
263
|
+
console.time('Operation');
|
|
264
|
+
// ... operation
|
|
265
|
+
console.timeEnd('Operation');
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Breakpoint Debugging
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
// Add debugger statement
|
|
272
|
+
function processData(data: Data) {
|
|
273
|
+
debugger; // Execution pauses here in DevTools
|
|
274
|
+
return transform(data);
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### VS Code Launch Configuration (Angular 14 / Nx 14)
|
|
279
|
+
|
|
280
|
+
```json
|
|
281
|
+
// .vscode/launch.json
|
|
282
|
+
{
|
|
283
|
+
"version": "0.2.0",
|
|
284
|
+
"configurations": [
|
|
285
|
+
{
|
|
286
|
+
"type": "node",
|
|
287
|
+
"request": "launch",
|
|
288
|
+
"name": "Debug NestJS",
|
|
289
|
+
"runtimeArgs": ["-r", "ts-node/register"],
|
|
290
|
+
"args": ["${workspaceFolder}/apps/api/src/main.ts"],
|
|
291
|
+
"cwd": "${workspaceFolder}"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"type": "chrome",
|
|
295
|
+
"request": "launch",
|
|
296
|
+
"name": "Debug Angular",
|
|
297
|
+
"url": "http://localhost:4200",
|
|
298
|
+
"webRoot": "${workspaceFolder}/apps/web/src"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## 5. Error Investigation Workflow
|
|
305
|
+
|
|
306
|
+
### Step 1: Reproduce
|
|
307
|
+
|
|
308
|
+
- Get exact steps to reproduce
|
|
309
|
+
- Note environment (browser, Node version - should be Node 18)
|
|
310
|
+
|
|
311
|
+
### Step 2: Isolate
|
|
312
|
+
|
|
313
|
+
- Identify component/service causing issue
|
|
314
|
+
- Check if issue is frontend, backend, or database
|
|
315
|
+
|
|
316
|
+
### Step 3: Trace
|
|
317
|
+
|
|
318
|
+
- Add logging at key points
|
|
319
|
+
- Use debugger to step through code
|
|
320
|
+
- Check network requests/responses
|
|
321
|
+
|
|
322
|
+
### Step 4: Root Cause
|
|
323
|
+
|
|
324
|
+
- Identify the actual cause (not symptoms)
|
|
325
|
+
- Document findings
|
|
326
|
+
|
|
327
|
+
### Step 5: Fix & Verify
|
|
328
|
+
|
|
329
|
+
- Apply fix
|
|
330
|
+
- Write test that catches the bug
|
|
331
|
+
- Verify fix doesn't introduce regressions
|
|
332
|
+
|
|
333
|
+
## 6. Quick Fixes (Angular 14)
|
|
334
|
+
|
|
335
|
+
### "Cannot read property of undefined"
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
// Use optional chaining
|
|
339
|
+
const name = user?.profile?.name;
|
|
340
|
+
|
|
341
|
+
// With nullish coalescing
|
|
342
|
+
const name = user?.profile?.name ?? 'Unknown';
|
|
343
|
+
|
|
344
|
+
// In templates (Angular 14)
|
|
345
|
+
{{ user?.profile?.name }}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### "Expression has changed after it was checked"
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
// Option 1: setTimeout
|
|
352
|
+
ngAfterViewInit(): void {
|
|
353
|
+
setTimeout(() => this.value = newValue);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Option 2: ChangeDetectorRef
|
|
357
|
+
ngAfterViewInit(): void {
|
|
358
|
+
this.value = newValue;
|
|
359
|
+
this.cdr.detectChanges();
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### "Circular dependency detected"
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
// Use forwardRef
|
|
367
|
+
@Inject(forwardRef(() => ServiceB))
|
|
368
|
+
private serviceB: ServiceB
|
|
369
|
+
|
|
370
|
+
// Or refactor to remove circular dependency
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### "NullInjectorError: No provider for X"
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
// Check module providers
|
|
377
|
+
@NgModule({
|
|
378
|
+
providers: [MyService], // Add missing provider
|
|
379
|
+
})
|
|
380
|
+
export class AppModule {}
|
|
381
|
+
|
|
382
|
+
// Or check providedIn
|
|
383
|
+
@Injectable({
|
|
384
|
+
providedIn: 'root', // Or specific module
|
|
385
|
+
})
|
|
386
|
+
export class MyService {}
|
|
387
|
+
```
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear-suggestion
|
|
3
|
+
description: Create a Linear issue in the "MobileMS Framework" project with a suggestion for agent, command, or skill improvements.
|
|
4
|
+
allowed-tools: mcp__linear-server__create_issue
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Linear Suggestion
|
|
8
|
+
|
|
9
|
+
Create a Linear issue in the **MobileMS Framework** project containing a suggestion for improving agent definitions, commands, or skills. Used by automated analysis agents to propose changes without blocking the workflow.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- When an automated agent (e.g., `shared-parallelization-analyzer`) identifies a recurring pattern that could improve an agent, command, or skill
|
|
14
|
+
- When proposing orchestrator rule changes based on parallelization analysis
|
|
15
|
+
- When any non-interactive process needs to suggest framework improvements
|
|
16
|
+
|
|
17
|
+
## Input Parameters
|
|
18
|
+
|
|
19
|
+
The invoking agent must provide:
|
|
20
|
+
|
|
21
|
+
| Parameter | Required | Description |
|
|
22
|
+
| ------------- | -------- | --------------------------------------------------------------- |
|
|
23
|
+
| `title` | YES | Short summary of the suggestion (max 100 chars) |
|
|
24
|
+
| `description` | YES | Full markdown description with rationale and proposed changes |
|
|
25
|
+
| `source` | YES | Agent that generated the suggestion (e.g., `shared-parallelization-analyzer`) |
|
|
26
|
+
| `targetFile` | NO | Path to the file to be modified (e.g., `agents/shared-impl-orchestrator.md`) |
|
|
27
|
+
| `category` | NO | One of: `OPTIMIZATION`, `NEW_RULE`, `PATTERN_UPDATE`, `BUG_FIX` |
|
|
28
|
+
|
|
29
|
+
## Issue Format
|
|
30
|
+
|
|
31
|
+
### Title
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
[Agent Suggestion] {title}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Description
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## Agent Improvement Suggestion
|
|
41
|
+
|
|
42
|
+
**Source agent**: `{source}`
|
|
43
|
+
**Category**: {category}
|
|
44
|
+
**Target file**: `{targetFile}`
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
{description}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
_This issue was automatically created by `{source}` via the `linear-suggestion` skill._
|
|
53
|
+
_Review and apply manually if the suggestion is valid._
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Process
|
|
57
|
+
|
|
58
|
+
1. **Format the issue title** with `[Agent Suggestion]` prefix
|
|
59
|
+
2. **Build the description** using the template above, inserting all provided parameters
|
|
60
|
+
3. **Create the issue** using MCP Linear server:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Create issue in project "MobileMS Framework":
|
|
64
|
+
- Title: [Agent Suggestion] {title}
|
|
65
|
+
- Description: {formatted description}
|
|
66
|
+
- Label: agent-evolution
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
4. **Return the issue ID and URL** to the invoking agent
|
|
70
|
+
|
|
71
|
+
## Output Format
|
|
72
|
+
|
|
73
|
+
After successful creation, return:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Linear issue created:
|
|
77
|
+
- ID: {issueId}
|
|
78
|
+
- Title: [Agent Suggestion] {title}
|
|
79
|
+
- URL: {issueUrl}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Error Handling
|
|
83
|
+
|
|
84
|
+
If issue creation fails (e.g., MCP Linear server unavailable):
|
|
85
|
+
|
|
86
|
+
- Log the error silently
|
|
87
|
+
- Do NOT block the parent workflow
|
|
88
|
+
- Return a failure notice without throwing
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Linear suggestion skipped: {error reason}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Example
|
|
95
|
+
|
|
96
|
+
**Input from `shared-parallelization-analyzer`:**
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
title: Add parallel scaffolding rule to orchestrator
|
|
100
|
+
description: |
|
|
101
|
+
### Observation
|
|
102
|
+
|
|
103
|
+
In 3 out of 5 recent tasks, scaffolding agents for independent files
|
|
104
|
+
(e.g., `angular-component-scaffolder` + `angular-service-builder`) were
|
|
105
|
+
marked as SEQ despite having no shared output files.
|
|
106
|
+
|
|
107
|
+
### Proposed Change
|
|
108
|
+
|
|
109
|
+
Add to `shared-impl-orchestrator.md` -> Execution Patterns -> Parallel vs Sequential:
|
|
110
|
+
|
|
111
|
+
| Scenario | Pattern | Reason |
|
|
112
|
+
| --------------------------------------- | -------- | ------------------------------- |
|
|
113
|
+
| Multiple scaffolding for independent files | PARALLEL | No shared output files between scaffolders |
|
|
114
|
+
|
|
115
|
+
### Evidence
|
|
116
|
+
|
|
117
|
+
- MOB-700: scaffold-component + scaffold-service (independent)
|
|
118
|
+
- MOB-705: scaffold-directive + scaffold-service (independent)
|
|
119
|
+
- MOB-710: scaffold-component + scaffold-pipe (independent)
|
|
120
|
+
source: shared-parallelization-analyzer
|
|
121
|
+
targetFile: packages/shared/claude-plugins/src/plugins/flow-legacy/agents/shared-impl-orchestrator.md
|
|
122
|
+
category: OPTIMIZATION
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Created issue:**
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
Linear issue created:
|
|
129
|
+
- ID: MOB-815
|
|
130
|
+
- Title: [Agent Suggestion] Add parallel scaffolding rule to orchestrator
|
|
131
|
+
- URL: https://linear.app/mobilems/issue/MOB-815
|
|
132
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maia-files-delete
|
|
3
|
+
description: Delete a file from Maia API temporary storage.
|
|
4
|
+
allowed-tools: Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Maia Files Delete
|
|
8
|
+
|
|
9
|
+
Delete a file from Maia AI API temporary storage to free up space.
|
|
10
|
+
|
|
11
|
+
## API Endpoint
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
DELETE https://maia-ai-api.smartsoft.biz.pl/files/{id}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
When given a file ID or URL, delete it:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -s -X DELETE https://maia-ai-api.smartsoft.biz.pl/files/{id}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Process
|
|
26
|
+
|
|
27
|
+
1. Extract ID from input (can be full URL or just ID)
|
|
28
|
+
2. Send DELETE request
|
|
29
|
+
3. Confirm deletion
|
|
30
|
+
|
|
31
|
+
## Input Formats
|
|
32
|
+
|
|
33
|
+
Accept either:
|
|
34
|
+
|
|
35
|
+
- Full URL: `https://maia-ai-api.smartsoft.biz.pl/files/abc123`
|
|
36
|
+
- Just ID: `abc123`
|
|
37
|
+
|
|
38
|
+
## Output Format
|
|
39
|
+
|
|
40
|
+
After successful deletion:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Deleted: {id}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Batch Deletion
|
|
47
|
+
|
|
48
|
+
When given multiple IDs, delete them all:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
for id in id1 id2 id3; do
|
|
52
|
+
curl -s -X DELETE "https://maia-ai-api.smartsoft.biz.pl/files/$id"
|
|
53
|
+
echo "Deleted: $id"
|
|
54
|
+
done
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Error Handling
|
|
58
|
+
|
|
59
|
+
If deletion fails, report the error but continue with remaining files.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maia-files-upload
|
|
3
|
+
description: Upload a file to Maia API temporary storage.
|
|
4
|
+
allowed-tools: Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Maia Files Upload
|
|
8
|
+
|
|
9
|
+
Upload a file to the Maia AI API temporary storage and get a URL for use in Linear comments or markdown.
|
|
10
|
+
|
|
11
|
+
## API Endpoint
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
POST https://maia-ai-api.smartsoft.biz.pl/files
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
When given a file path, upload it:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -s -X POST https://maia-ai-api.smartsoft.biz.pl/files \
|
|
23
|
+
-F "file=@/path/to/file.png"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Response
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{ "id": "abc123def456" }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Result URL
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
https://maia-ai-api.smartsoft.biz.pl/files/{id}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Process
|
|
39
|
+
|
|
40
|
+
1. Validate file exists: `test -f "/path/to/file" && echo "OK"`
|
|
41
|
+
2. Upload file using curl
|
|
42
|
+
3. Extract ID from JSON response
|
|
43
|
+
4. Return ID and full URL
|
|
44
|
+
|
|
45
|
+
## Output Format
|
|
46
|
+
|
|
47
|
+
After successful upload, return:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Uploaded: {filename}
|
|
51
|
+
ID: {id}
|
|
52
|
+
URL: https://maia-ai-api.smartsoft.biz.pl/files/{id}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Error Handling
|
|
56
|
+
|
|
57
|
+
If file doesn't exist or upload fails, report the error clearly.
|