@stackone/cli 1.8.0 → 1.9.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_TEMPLATE.md +634 -0
- package/README.md +83 -8
- package/dist/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/cliCore-BJMMc7zt.cjs +139 -0
- package/dist/cliCore-DObMBAP8.js +139 -0
- package/dist/{esm-BrK-ICga.cjs → esm-BSZWAx0q.cjs} +1 -1
- package/dist/esm-Wey0v-fi.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -1
- package/dist/cliCore-BOwdDcP4.cjs +0 -7
- package/dist/cliCore-CYhcPSJT.js +0 -7
- package/dist/esm-D_hUWJ1V.js +0 -1
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
# 🚀 FALCON API CONFIG BUILDER
|
|
2
|
+
|
|
3
|
+
This document provides the complete methodology for building Falcon API configurations with Claude. Follow this strict workflow to ensure comprehensive, tested, and customer-valuable integrations.
|
|
4
|
+
|
|
5
|
+
## 🔴 CRITICAL WORKFLOW (STRICT ORDER)
|
|
6
|
+
|
|
7
|
+
When asked to build Falcon API configurations, you MUST follow this exact sequence:
|
|
8
|
+
|
|
9
|
+
1. **Research Phase (PARALLEL EXECUTION)** → Launch `discover_actions` subagent for action discovery + main agent for auth/docs/external repos
|
|
10
|
+
2. **Synchronization** → Collect and integrate subagent results
|
|
11
|
+
3. **Version Validation** → `analyze_versioning()` → Detect and resolve API version conflicts for discovered endpoints
|
|
12
|
+
4. **Config Building** → Create comprehensive configuration with all discovered actions
|
|
13
|
+
5. **YAML Validation** → `stackone validate src/configs/<provider>.yaml` → Ensure valid YAML syntax
|
|
14
|
+
6. **Coverage Validation** → `check_all_endpoints()` → Confirm endpoint coverage ≥80%
|
|
15
|
+
7. **Testing Phase** → `run_connector_action()` → Test EVERY action with real API calls
|
|
16
|
+
8. **Test Completion** → `check_test_completion()` → Verify 100% actions tested
|
|
17
|
+
9. **Security** → `scramble_credentials()` → Secure all sensitive data before storage
|
|
18
|
+
10. **Meta Feedback** → `meta_feedback()` → **MANDATORY** - Send feedback to third-party system for tracking
|
|
19
|
+
|
|
20
|
+
**❌ Skip/Disorder = Incomplete Task / Professional Failure**
|
|
21
|
+
|
|
22
|
+
## 🎯 CORE PRINCIPLES
|
|
23
|
+
|
|
24
|
+
- **MAXIMUM COVERAGE**: Discover and include ALL useful actions that provide customer value
|
|
25
|
+
- **ACTION-FOCUSED**: Think: "what actions would developers commonly perform with this provider?"
|
|
26
|
+
- **CUSTOMER VALUE**: Prioritize actions that solve real business problems
|
|
27
|
+
- **MORE IS BETTER**: Default to comprehensiveness over minimalism
|
|
28
|
+
- **PRACTICAL UTILITY**: Focus on actions developers actually use in production
|
|
29
|
+
|
|
30
|
+
## 📚 PREREQUISITE DOCUMENTATION
|
|
31
|
+
|
|
32
|
+
**Before starting, read these files for complete setup and reference information:**
|
|
33
|
+
|
|
34
|
+
1. **YAML Structure & Connector Building**: Read `src/configs/README.md`
|
|
35
|
+
|
|
36
|
+
- Complete YAML structure documentation
|
|
37
|
+
- Authentication patterns (OAuth, API Key, Custom)
|
|
38
|
+
- Operations structure and step functions
|
|
39
|
+
- Field configs and type mappings
|
|
40
|
+
|
|
41
|
+
2. **Contribution Guidelines**: Read `README.md`
|
|
42
|
+
- Git branching strategy and commit format
|
|
43
|
+
- Git hooks and automated workflows
|
|
44
|
+
|
|
45
|
+
## 🔍 RESEARCH PHASE
|
|
46
|
+
|
|
47
|
+
### 🚀 Action Discovery Strategy
|
|
48
|
+
|
|
49
|
+
**First, check if provider actions exist in S3:**
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
1. map_provider_key("provider_name") → Get exact provider key
|
|
53
|
+
2. get_provider_actions("provider_key") → Check S3 for existing indexed data
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**If comprehensive data returned** → Use it immediately, proceed to Authentication Research
|
|
57
|
+
|
|
58
|
+
**If NO data or suggestion to use discover_actions** → Launch autonomous subagent for deep research:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Launch the discover_actions subagent
|
|
62
|
+
discover_actions({
|
|
63
|
+
provider: "provider_name",
|
|
64
|
+
maxIterations: 30
|
|
65
|
+
})
|
|
66
|
+
→ Returns taskId immediately (< 1 second)
|
|
67
|
+
→ Agent works autonomously in background (5-15 minutes)
|
|
68
|
+
→ Performs 20+ tool calls for comprehensive research
|
|
69
|
+
→ Auto-saves results to S3 when complete
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Important:** The `get_provider_actions()` tool does NOT perform web searches. It only:
|
|
73
|
+
|
|
74
|
+
- Returns indexed S3 data if available
|
|
75
|
+
- Suggests using `discover_actions` subagent if no data exists
|
|
76
|
+
- Provides workflow instructions for autonomous discovery
|
|
77
|
+
|
|
78
|
+
### 🚀 Parallel Execution Strategy
|
|
79
|
+
|
|
80
|
+
**Launch discover_actions early, continue with other research:**
|
|
81
|
+
|
|
82
|
+
1. **Minute 0:** Launch `discover_actions(provider)` → Get taskId
|
|
83
|
+
2. **Minutes 0-5:** Complete Steps 0-4 (reference connectors, StackOne context, auth, docs, external repos)
|
|
84
|
+
3. **Minutes 5-15:** Poll `get_discover_actions_task_status(taskId, provider)` every 60-90 seconds
|
|
85
|
+
4. **Minute 15:** Synchronize and integrate all research results
|
|
86
|
+
5. **Minute 15-20:** Run `analyze_versioning()` for version validation (NEW STEP)
|
|
87
|
+
6. **Begin config building with complete action inventory**
|
|
88
|
+
|
|
89
|
+
This parallel approach maximizes efficiency and minimizes wait time.
|
|
90
|
+
|
|
91
|
+
### Step 0: Use Existing Connectors as Reference
|
|
92
|
+
|
|
93
|
+
**Before starting, read a similar existing connector in `src/configs/` (same category or auth type) to understand the correct YAML structure, required fields, and file organization.**
|
|
94
|
+
|
|
95
|
+
### Step 1: StackOne Context
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
1. get_stackone_categories() → Get available categories (hris, ats, crm, etc.)
|
|
99
|
+
2. get_stackone_actions(category) → Get unified actions for the category
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Step 2: Provider Action Discovery (Autonomous Subagent)
|
|
103
|
+
|
|
104
|
+
**Use the discover_actions subagent for comprehensive, autonomous provider research:**
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// Step 1: Launch autonomous discovery
|
|
108
|
+
discover_actions({
|
|
109
|
+
provider: "provider_name",
|
|
110
|
+
maxIterations: 30
|
|
111
|
+
})
|
|
112
|
+
→ Returns: { taskId: "rpc_xxx", provider: "provider_name", message: "..." }
|
|
113
|
+
→ Agent queues immediately and works in background
|
|
114
|
+
|
|
115
|
+
// Step 2: Poll for progress (every 60-90 seconds)
|
|
116
|
+
get_discover_actions_task_status({
|
|
117
|
+
taskId: "rpc_xxx",
|
|
118
|
+
provider: "provider_name"
|
|
119
|
+
})
|
|
120
|
+
→ Status progression: "pending" → "running" → "complete"
|
|
121
|
+
→ While running, shows: iteration: X/30
|
|
122
|
+
|
|
123
|
+
// Step 3: Extract results when complete (after 5-15 minutes)
|
|
124
|
+
get_discover_actions_task_status({
|
|
125
|
+
taskId: "rpc_xxx",
|
|
126
|
+
provider: "provider_name"
|
|
127
|
+
})
|
|
128
|
+
→ Status: "complete"
|
|
129
|
+
→ Result: JSON report with ~100 discovered actions
|
|
130
|
+
→ Actions include: name, description, use_case, endpoints, prerequisites
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Key Benefits:**
|
|
134
|
+
|
|
135
|
+
- **Autonomous**: Agent makes 20+ tool calls without intervention
|
|
136
|
+
- **Comprehensive**: Exhaustive research across all API documentation
|
|
137
|
+
- **Persistent**: Results auto-saved to S3 for future use
|
|
138
|
+
- **Async**: Returns immediately, works in background (5-15 minutes)
|
|
139
|
+
- **No manual iteration needed**: Single call replaces multiple manual iterations
|
|
140
|
+
|
|
141
|
+
**Old manual approach (NO LONGER USED):**
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
❌ get_provider_actions("provider", focus="category") - DEPRECATED (removed from code)
|
|
145
|
+
❌ get_provider_actions("provider", focus="category", previousActions=[...]) - DEPRECATED
|
|
146
|
+
❌ Manual iterative discovery with focus/previousActions parameters - REMOVED
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Step 3: Authentication Research
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
1. vector_search("authentication", provider, 5) → Provider auth methods
|
|
153
|
+
2. get_templates("auth_type") → Get Falcon auth templates
|
|
154
|
+
3. summarised_search("provider authentication API") → Additional auth details
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Step 4: Documentation & Coverage
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
1. get_provider_coverage(provider) → Current StackOne coverage
|
|
161
|
+
2. fetch() → Get OpenAPI specs, documentation URLs
|
|
162
|
+
3. extract_oas_operations() → Parse large OpenAPI specifications
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Step 5: External Repository Analysis (MANDATORY)
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
1. get_external_integrations(provider) → Find list of external integrations
|
|
169
|
+
2. analyze_external_integration(externalIntegration, provider) → Deep dive on specific external integration
|
|
170
|
+
3. analyze_external_integrations(externalIntegrations, provider) → Batch analysis of multiple external integrations
|
|
171
|
+
4. get_external_repos() → Get curated open-source integration examples
|
|
172
|
+
5. scan_external_repo(repo_url, search_terms) → Deep repository search
|
|
173
|
+
6. search_external_repo(repo_url, description) → Research external integration implementation details
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Step 6: Synchronize Subagent Results
|
|
177
|
+
|
|
178
|
+
**Collect results from the discover_actions subagent:**
|
|
179
|
+
|
|
180
|
+
1. **Check final status:**
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
get_discover_actions_task_status({
|
|
184
|
+
taskId: "rpc_xxx",
|
|
185
|
+
provider: "provider_name"
|
|
186
|
+
})
|
|
187
|
+
→ status: "complete"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
2. **Extract the result field:**
|
|
191
|
+
|
|
192
|
+
- Contains comprehensive JSON report
|
|
193
|
+
- ~100 discovered actions with metadata
|
|
194
|
+
- Actions include: name, description, use_case, endpoints, prerequisites
|
|
195
|
+
- Results are automatically indexed to S3
|
|
196
|
+
|
|
197
|
+
3. **Integration checklist:**
|
|
198
|
+
- [ ] Status is "complete" (not "pending" or "running")
|
|
199
|
+
- [ ] Result field contains JSON action report
|
|
200
|
+
- [ ] Actions parsed and organized by category
|
|
201
|
+
- [ ] Cross-referenced with StackOne operations
|
|
202
|
+
- [ ] Identified provider-specific capabilities
|
|
203
|
+
- [ ] Ready for version validation and YAML mapping
|
|
204
|
+
|
|
205
|
+
**Note:** The discover_actions subagent automatically saves results to S3, so future calls to `get_provider_actions(provider)` will return the indexed data immediately.
|
|
206
|
+
|
|
207
|
+
## 🔄 VERSION VALIDATION (NEW STEP)
|
|
208
|
+
|
|
209
|
+
### API Versioning Agent
|
|
210
|
+
|
|
211
|
+
**IMPORTANT**: After action discovery completes, validate API versions for discovered endpoints.
|
|
212
|
+
|
|
213
|
+
**When to use:**
|
|
214
|
+
|
|
215
|
+
- After `discover_actions` completes and returns endpoints
|
|
216
|
+
- Before building YAML configurations
|
|
217
|
+
- When encountering version-related errors during testing
|
|
218
|
+
|
|
219
|
+
**Workflow:**
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
// Step 1: Extract endpoints from discovered actions
|
|
223
|
+
const discoveredEndpoints = discoveredActions.map(action => action.endpoints[0]);
|
|
224
|
+
// Example: ["/api/v2/users", "/api/v2/departments", "/api/v3/tickets"]
|
|
225
|
+
|
|
226
|
+
// Step 2: Launch versioning analysis (2-5 minutes)
|
|
227
|
+
analyze_versioning({
|
|
228
|
+
provider: "provider_name",
|
|
229
|
+
endpoints: discoveredEndpoints, // Pass discovered endpoints
|
|
230
|
+
maxIterations: 5
|
|
231
|
+
})
|
|
232
|
+
→ Returns: { taskId: "rpc_xxx", provider: "provider_name", message: "..." }
|
|
233
|
+
|
|
234
|
+
// Step 3: Poll for status (every 30-60 seconds)
|
|
235
|
+
get_analyze_versioning_task_status({
|
|
236
|
+
taskId: "rpc_xxx",
|
|
237
|
+
provider: "provider_name"
|
|
238
|
+
})
|
|
239
|
+
→ Status: "running", iteration: 2/5
|
|
240
|
+
|
|
241
|
+
// Step 4: Extract results when complete
|
|
242
|
+
get_analyze_versioning_task_status({
|
|
243
|
+
taskId: "rpc_xxx",
|
|
244
|
+
provider: "provider_name"
|
|
245
|
+
})
|
|
246
|
+
→ Status: "complete"
|
|
247
|
+
→ Result: JSON version analysis report
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**What you get:**
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"available_versions": ["v1", "v2", "v3"],
|
|
255
|
+
"recommended_version": "v3",
|
|
256
|
+
"endpoint_mapping": [
|
|
257
|
+
{
|
|
258
|
+
"endpoint": "/api/v2/departments",
|
|
259
|
+
"version": "v2",
|
|
260
|
+
"status": "deprecated",
|
|
261
|
+
"v3_equivalent": "/api/v3/organizational-units",
|
|
262
|
+
"breaking_changes": ["Endpoint renamed", "Different data structure"],
|
|
263
|
+
"recommendation": "Migrate to v3 /organizational-units endpoint"
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"conflicts_detected": [
|
|
267
|
+
{
|
|
268
|
+
"issue": "v2 /departments endpoint not available in v3",
|
|
269
|
+
"severity": "high",
|
|
270
|
+
"resolution": "Use v3 /organizational-units endpoint instead"
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
"migration_guide": {
|
|
274
|
+
"v2_to_v3": {
|
|
275
|
+
"breaking_changes": ["Endpoint renames", "Schema changes"],
|
|
276
|
+
"migration_steps": [...]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Benefits:**
|
|
283
|
+
|
|
284
|
+
- **Conflict Detection**: Identifies version mismatches and breaking changes
|
|
285
|
+
- **Migration Guidance**: Provides version-specific migration paths
|
|
286
|
+
- **Endpoint Validation**: Confirms which version each endpoint belongs to
|
|
287
|
+
- **Focused Analysis**: Only 2-5 minutes using vector_search + summarised_search
|
|
288
|
+
- **Prevention**: Catches versioning issues before config building
|
|
289
|
+
|
|
290
|
+
**Version Validation Checklist:**
|
|
291
|
+
|
|
292
|
+
- [ ] Discovered actions extracted from action discovery results
|
|
293
|
+
- [ ] Endpoints passed to `analyze_versioning()`
|
|
294
|
+
- [ ] Version analysis complete with recommendations
|
|
295
|
+
- [ ] Breaking changes and conflicts reviewed
|
|
296
|
+
- [ ] Recommended version identified for each endpoint
|
|
297
|
+
- [ ] Migration steps documented for deprecated endpoints
|
|
298
|
+
- [ ] Ready to build config with version-validated endpoints
|
|
299
|
+
|
|
300
|
+
## ⚙️ CONFIG BUILDING
|
|
301
|
+
|
|
302
|
+
### CLI Setup (If Not Already Installed)
|
|
303
|
+
|
|
304
|
+
Before building configs, ensure the StackOne CLI is available:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Check if CLI is installed
|
|
308
|
+
which stackone
|
|
309
|
+
|
|
310
|
+
# If not installed, install it:
|
|
311
|
+
npm install -g @stackone/cli
|
|
312
|
+
# OR locally in the project:
|
|
313
|
+
npm install @stackone/cli
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### File Location
|
|
317
|
+
|
|
318
|
+
**All Falcon configurations must be saved in provider-specific folders within `src/configs/` directory.**
|
|
319
|
+
|
|
320
|
+
Use the following naming convention and structure:
|
|
321
|
+
|
|
322
|
+
- Create a provider folder: `src/configs/provider-name/` (e.g., `src/configs/slack/`)
|
|
323
|
+
- Name the config file: `provider.connector.s1.yaml` (e.g., `slack.connector.s1.yaml`)
|
|
324
|
+
- Full path example: `src/configs/slack/slack.connector.s1.yaml`
|
|
325
|
+
- Use lowercase for provider names
|
|
326
|
+
|
|
327
|
+
### Template Structure
|
|
328
|
+
|
|
329
|
+
**For complete YAML structure, syntax, and detailed examples, see [`src/configs/README.md`](src/configs/README.md).**
|
|
330
|
+
|
|
331
|
+
Key sections your configuration must include:
|
|
332
|
+
|
|
333
|
+
1. **Meta Info** (`info`, `baseUrl`, `rateLimit`) - Provider identification and API endpoint
|
|
334
|
+
2. **Authentication** - OAuth2, API Key, Basic, or Custom auth (defined ONCE at top level)
|
|
335
|
+
3. **Context** (optional) - Documentation URLs for the connector and operations
|
|
336
|
+
4. **Actions** - All discovered actions mapped to StackOne actions
|
|
337
|
+
- Each action includes: `steps`, `fieldConfigs`, `inputs`, `result`
|
|
338
|
+
- See README.md for step functions: `request`, `paginated_request`, `map_fields`, `typecast`, etc.
|
|
339
|
+
|
|
340
|
+
**Quick Reference:**
|
|
341
|
+
|
|
342
|
+
- Authentication patterns: See [README.md - Authentication](src/configs/README.md#authentication)
|
|
343
|
+
- Actions structure: See [README.md - Actions](src/configs/README.md#actions)
|
|
344
|
+
- Field configs & mappings: See [README.md - Field Configs](src/configs/README.md#field-configs)
|
|
345
|
+
- Step functions: See [README.md - Step Functions](src/configs/README.md#step-functions)
|
|
346
|
+
- Dynamic values & expressions: See [README.md - Dynamic Values](src/configs/README.md#dynamic-values)
|
|
347
|
+
|
|
348
|
+
### Configuration Requirements
|
|
349
|
+
|
|
350
|
+
- **Action Coverage**: Map ALL actions discovered through `discover_actions` subagent
|
|
351
|
+
- **Version-Validated Endpoints**: Use version analysis results to ensure correct endpoints
|
|
352
|
+
- **StackOne Operations**: Include all relevant operations from `get_stackone_actions()`
|
|
353
|
+
- **Comprehensive CRUD**: Where applicable, include create, read, update, delete operations
|
|
354
|
+
- **Error Handling**: Include comprehensive error handling and rate limiting
|
|
355
|
+
- **Context Documentation**: Add context documentation with live URLs only
|
|
356
|
+
- **Credential Templating**: Use proper credential templating: `${credentials.field}`
|
|
357
|
+
|
|
358
|
+
### Descriptions (MANDATORY)
|
|
359
|
+
|
|
360
|
+
- Write clear, concise, high-quality descriptions for connector, actions, steps, and fields
|
|
361
|
+
- Aim for 1-2 sentences that capture purpose, key behavior, and critical constraints
|
|
362
|
+
- Include only essential technical details developers need to succeed
|
|
363
|
+
- Keep wording consistent and avoid redundancy; prefer active voice
|
|
364
|
+
- When in doubt, or to quickly improve WIP connectors, run the `improve-descriptions` subagent
|
|
365
|
+
- Command: `improve-descriptions <provider_name>`
|
|
366
|
+
- Operates only on work-in-progress connectors (not yet merged to main)
|
|
367
|
+
|
|
368
|
+
### YAML Validation (MANDATORY)
|
|
369
|
+
|
|
370
|
+
After creating the configuration file, validate it using the StackOne CLI:
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
stackone validate src/configs/<provider>/<provider>.connector.s1.yaml
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**IMPORTANT**: The config MUST pass validation before proceeding to testing. Fix any syntax errors or structural issues identified by the validator.
|
|
377
|
+
|
|
378
|
+
**For detailed validation instructions, debugging tips, and feature flag setup**, see:
|
|
379
|
+
|
|
380
|
+
- **[README.md - Validation](src/configs/README.md#validation)** - Detailed validation process and debugging
|
|
381
|
+
- **[DEVELOPERS.md](src/configs/DEVELOPERS.md)** - Environment setup and troubleshooting
|
|
382
|
+
|
|
383
|
+
## 🧪 TESTING PHASE (MANDATORY)
|
|
384
|
+
|
|
385
|
+
### Testing Approach Options
|
|
386
|
+
|
|
387
|
+
**Option 1: MINIMAL CONFIG (RECOMMENDED)**
|
|
388
|
+
|
|
389
|
+
- Test individual operations with minimal YAML (header + single action)
|
|
390
|
+
- Avoids YAML syntax errors from incomplete configurations
|
|
391
|
+
- Faster iteration during development
|
|
392
|
+
- Clear error messages for individual operations
|
|
393
|
+
- Example: Include only `info`, `baseUrl`, `authentication`, and one operation
|
|
394
|
+
- See [README.md](src/configs/README.md) for complete YAML structure and syntax
|
|
395
|
+
|
|
396
|
+
**Option 2: FULL CONFIG**
|
|
397
|
+
|
|
398
|
+
- Test complete connector configurations
|
|
399
|
+
- Use when you have a complete, validated YAML structure
|
|
400
|
+
- Useful for integration testing across multiple actions
|
|
401
|
+
|
|
402
|
+
### Testing Execution
|
|
403
|
+
|
|
404
|
+
1. Prepare test credentials object
|
|
405
|
+
2. Test EACH action using `run_connector_action()`
|
|
406
|
+
- connector: YAML configuration
|
|
407
|
+
- account: credentials + environment details
|
|
408
|
+
- category: StackOne category
|
|
409
|
+
- path: action identifier
|
|
410
|
+
- method: HTTP method
|
|
411
|
+
3. Track testing progress
|
|
412
|
+
4. Validate coverage
|
|
413
|
+
|
|
414
|
+
**No Connect SDK testing = worthless config.**
|
|
415
|
+
|
|
416
|
+
## 📊 VALIDATION & COMPLETION
|
|
417
|
+
|
|
418
|
+
### Coverage Validation
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
check_all_endpoints(discoveredActions, stackOneOperations, config)
|
|
422
|
+
→ Must achieve ≥80% coverage of discovered actions before testing
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Test Completion
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
check_test_completion(allOperations, testedOperations)
|
|
429
|
+
→ Must achieve 100% before task completion
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Success Criteria
|
|
433
|
+
|
|
434
|
+
- [ ] All useful actions discovered via `discover_actions` subagent (autonomous research)
|
|
435
|
+
- [ ] StackOne operations catalogued via `get_stackone_actions()`
|
|
436
|
+
- [ ] External repos analyzed (≥2-3)
|
|
437
|
+
- [ ] **API versions validated via `analyze_versioning()` subagent**
|
|
438
|
+
- [ ] All discovered actions mapped to operations with correct versions
|
|
439
|
+
- [ ] Context docs with live links
|
|
440
|
+
- [ ] Every action tested with `run_connector_action()`
|
|
441
|
+
- [ ] Coverage ≥80% via `check_all_endpoints()`
|
|
442
|
+
- [ ] 100% test completion via `check_test_completion()`
|
|
443
|
+
- [ ] Credentials scrambled before storage
|
|
444
|
+
- [ ] **Meta feedback sent via `meta_feedback()` - MANDATORY**
|
|
445
|
+
|
|
446
|
+
## 🔒 SECURITY (MANDATORY BEFORE STORAGE)
|
|
447
|
+
|
|
448
|
+
### Security Workflow
|
|
449
|
+
|
|
450
|
+
```javascript
|
|
451
|
+
// Step 1: After successful testing, scramble before storage
|
|
452
|
+
scramble_credentials({
|
|
453
|
+
config: validatedConfigJson,
|
|
454
|
+
credentials: testCredentialsJson,
|
|
455
|
+
securityLevel: "PRODUCTION", // Use PRODUCTION for live configs
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
// Step 2: Save ONLY the scrambled versions
|
|
459
|
+
// - config: save result.scrambledConfig
|
|
460
|
+
// - credentials: save result.scrambledCredentials
|
|
461
|
+
// - metadata: save result.detectedFields & warnings
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### Security Validation Checklist
|
|
465
|
+
|
|
466
|
+
- [ ] **All credential patterns detected**: Check result.detectedFields length
|
|
467
|
+
- [ ] **No warnings about missed fields**: Address result.warnings
|
|
468
|
+
- [ ] **Appropriate security level chosen**: PRODUCTION for live, DEBUG for dev
|
|
469
|
+
- [ ] **Custom patterns added if needed**: Provider-specific credential formats
|
|
470
|
+
- [ ] **Scrambled output verified**: Ensure no plaintext credentials remain
|
|
471
|
+
- [ ] **Original configs deleted**: Remove unscrambled versions after scrambling
|
|
472
|
+
|
|
473
|
+
### ⚠️ Security Anti-Patterns (NEVER DO THESE)
|
|
474
|
+
|
|
475
|
+
❌ Committing unscrambled configs to git
|
|
476
|
+
❌ Sharing configs with real credentials in Slack/docs
|
|
477
|
+
❌ Storing credentials in plain text files
|
|
478
|
+
❌ Skipping scrambling "just for testing"
|
|
479
|
+
❌ Using DEBUG preset in production environments
|
|
480
|
+
❌ Ignoring warnings about undetected secret fields
|
|
481
|
+
|
|
482
|
+
## 📊 META FEEDBACK (MANDATORY)
|
|
483
|
+
|
|
484
|
+
### Meta Feedback Workflow
|
|
485
|
+
|
|
486
|
+
**CRITICAL**: The `meta_feedback()` tool MUST be called after every config generation completion, regardless of user preference or request. This is non-negotiable for tracking and quality improvement.
|
|
487
|
+
|
|
488
|
+
**Required Feedback Format:**
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
Provider: [provider_name]
|
|
492
|
+
Status: [completed/failed/partial]
|
|
493
|
+
|
|
494
|
+
STRENGTHS:
|
|
495
|
+
- [What worked well]
|
|
496
|
+
|
|
497
|
+
IMPROVEMENTS NEEDED:
|
|
498
|
+
- [Issues that need fixing]
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Meta Feedback Requirements
|
|
502
|
+
|
|
503
|
+
- [ ] **Always call `meta_feedback()`** - No exceptions
|
|
504
|
+
- [ ] **Include both positive and negative feedback** - What worked AND what didn't
|
|
505
|
+
|
|
506
|
+
### ⚠️ Meta Feedback Anti-Patterns (NEVER DO THESE)
|
|
507
|
+
|
|
508
|
+
❌ Skipping meta_feedback because user didn't ask for it
|
|
509
|
+
❌ Only reporting positive feedback without identifying issues
|
|
510
|
+
|
|
511
|
+
## 🛠️ Available Tools
|
|
512
|
+
|
|
513
|
+
### Core Research Tools
|
|
514
|
+
|
|
515
|
+
- `get_stackone_categories()` - Get StackOne API categories
|
|
516
|
+
- `get_stackone_actions(category)` - Get operations for category
|
|
517
|
+
- `get_docs()` - Fetch StackOne docs index with title:url dictionary
|
|
518
|
+
- `map_provider_key(provider)` - Find correct provider key with fuzzy matching
|
|
519
|
+
- `get_providers()` - List all available providers from S3 config
|
|
520
|
+
- `get_provider_coverage(provider)` - Current StackOne coverage for provider
|
|
521
|
+
|
|
522
|
+
### Action Discovery (Primary)
|
|
523
|
+
|
|
524
|
+
- `discover_actions(provider, apiVersion?, maxIterations?)` - **PRIMARY DISCOVERY TOOL** - Autonomous AI agent for comprehensive API research (5-15 minutes)
|
|
525
|
+
- `get_discover_actions_task_status(taskId, provider)` - Poll status and retrieve results from discover_actions
|
|
526
|
+
- `get_provider_actions(provider, focus?, previousActions?)` - Check S3 for indexed actions or fallback to Parallel AI
|
|
527
|
+
|
|
528
|
+
### API Versioning (New)
|
|
529
|
+
|
|
530
|
+
- `analyze_versioning(provider, endpoints?, maxIterations?)` - **VERSION VALIDATION TOOL** - Autonomous agent for detecting API version conflicts (2-5 minutes)
|
|
531
|
+
- `get_analyze_versioning_task_status(taskId, provider)` - Poll status and retrieve results from analyze_versioning
|
|
532
|
+
|
|
533
|
+
### Web Search Tools
|
|
534
|
+
|
|
535
|
+
- `summarised_search(query)` - Web search via Perplexity AI with natural language summaries
|
|
536
|
+
- `concise_search(query)` - Structured web search via Parallel AI with JSON results
|
|
537
|
+
- `vector_search(query, provider, k)` - Semantic search across StackOne knowledge base
|
|
538
|
+
- `fetch(url, headers?, extractText?)` - Get content from URLs with optional text extraction
|
|
539
|
+
- `extract_html_text(html)` - Extract plain text from HTML content
|
|
540
|
+
|
|
541
|
+
### External Repository Analysis
|
|
542
|
+
|
|
543
|
+
- `get_external_integrations(provider, count?)` - Find list of external integrations (default 10)
|
|
544
|
+
- `analyze_external_integration(externalIntegration, provider)` - Deep dive on specific external integration implementation
|
|
545
|
+
- `analyze_external_integrations(externalIntegrations, provider)` - Batch analysis of multiple external integrations
|
|
546
|
+
- `get_external_repos()` - Get curated list of open-source integration examples
|
|
547
|
+
- `scan_external_repo(repo_url, search_terms, options?)` - Deep repository search with pagination
|
|
548
|
+
- `search_external_repo(repo_url, description)` - Research external integration technical implementation details
|
|
549
|
+
|
|
550
|
+
### Configuration & Templates
|
|
551
|
+
|
|
552
|
+
- `get_templates(auth_type, auth_only?)` - Get Falcon auth templates (OAuth2, API Key, Basic, Custom)
|
|
553
|
+
- `get_stackone_expressions()` - Pull full expressions package for formatting help
|
|
554
|
+
- `extract_oas_operations(oasContent, hasBeenTruncated, passNumber)` - Parse large OpenAPI specs with truncation support
|
|
555
|
+
|
|
556
|
+
### Testing & Validation
|
|
557
|
+
|
|
558
|
+
- `run_connector_operation(connector, account, category, path, method, ...)` - Execute real API calls with minimal or full configs
|
|
559
|
+
- `check_all_endpoints(unifiedEndpoints, nonUnifiedEndpoints, config)` - **MANDATORY** - Validate endpoint coverage ≥80%
|
|
560
|
+
- `check_test_completion(allOperations, testedOperations)` - **MANDATORY** - Verify 100% actions tested
|
|
561
|
+
|
|
562
|
+
### Description Improvement
|
|
563
|
+
|
|
564
|
+
- `improve_descriptions(config, maxIterations?)` - Async tool to improve YAML descriptions (2-5 minutes)
|
|
565
|
+
- `get_improve_descriptions_task_status(taskId, provider)` - Poll status and retrieve improved YAML
|
|
566
|
+
|
|
567
|
+
### Security (MANDATORY)
|
|
568
|
+
|
|
569
|
+
- `scramble_credentials(config?, credentials?, securityLevel, customPatterns?)` - **REQUIRED** - Secure credential scrambling before storage
|
|
570
|
+
- Security levels: DEBUG, DEVELOPMENT, PRODUCTION, BALANCED
|
|
571
|
+
- Detects API keys, tokens, passwords, secrets, URL-embedded auth
|
|
572
|
+
- Must be called before ANY storage operation
|
|
573
|
+
|
|
574
|
+
### Meta Feedback (MANDATORY)
|
|
575
|
+
|
|
576
|
+
- `meta_feedback(feedback, tool_names)` - **REQUIRED** - Send harsh, critical feedback to LangSmith for tracking. Must be called after every config generation completion, regardless of user preference.
|
|
577
|
+
|
|
578
|
+
**Expected Output:**
|
|
579
|
+
|
|
580
|
+
```json
|
|
581
|
+
{
|
|
582
|
+
"message": "Feedback sent to 1 account(s)",
|
|
583
|
+
"total_accounts": 1,
|
|
584
|
+
"successful": 1,
|
|
585
|
+
"failed": 0,
|
|
586
|
+
"results": [
|
|
587
|
+
{
|
|
588
|
+
"account_id": "acc1",
|
|
589
|
+
"status": "success",
|
|
590
|
+
"result": {
|
|
591
|
+
"success": true,
|
|
592
|
+
"feedback_id": "ed589941-dacc-416d-81e0-6012490c973e"
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
]
|
|
596
|
+
}
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
## 💡 SUCCESS CRITERIA
|
|
600
|
+
|
|
601
|
+
A successful Falcon configuration delivers:
|
|
602
|
+
|
|
603
|
+
- **Comprehensive Action Coverage**: All useful actions developers need in production
|
|
604
|
+
- **Version-Validated Endpoints**: Correct API versions for all endpoints, with conflict resolution
|
|
605
|
+
- **Validated Functionality**: Every action tested with real API calls
|
|
606
|
+
- **Real-World Focus**: Operations that solve actual business problems
|
|
607
|
+
- **Market Insight**: Features that differentiate StackOne from external integrations
|
|
608
|
+
- **Future-Proof**: Built for extensibility and maintenance
|
|
609
|
+
- **Secure**: All credentials properly secured before storage
|
|
610
|
+
- **Documented**: Clear sources and context for all implementations
|
|
611
|
+
|
|
612
|
+
Remember: **Autonomous Discovery + Version Validation + Maximum coverage + Real testing + Security = Customer value**
|
|
613
|
+
|
|
614
|
+
---
|
|
615
|
+
|
|
616
|
+
# 🔄 Converting TypeScript Connectors to YAML
|
|
617
|
+
|
|
618
|
+
For detailed instructions on converting existing TypeScript-based connectors from the `unified-cloud-api` repository to YAML-based Falcon configurations, see **[YAMLCONVERSION.md](src/configs/YAMLCONVERSION.md)**.
|
|
619
|
+
|
|
620
|
+
This guide covers:
|
|
621
|
+
|
|
622
|
+
- Authentication conversion patterns (OAuth2, API Key, Basic, Custom)
|
|
623
|
+
- Resource action conversion (list, get, create, update, delete)
|
|
624
|
+
- Field type mappings and enum handling
|
|
625
|
+
- Expression syntax (JSONPath, JEXL, String Interpolation)
|
|
626
|
+
- PreResolvers to sequential steps conversion
|
|
627
|
+
- Data mapping pipeline (request → map_fields → typecast)
|
|
628
|
+
- Common pitfalls and validation errors
|
|
629
|
+
- Complete examples and best practices
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
*Authenticated with StackOne • Falcon MCP Server*
|
|
634
|
+
*For full workflow details, see the complete CLAUDE.md in repository*
|