ralph-starter 0.0.1 → 0.1.1-beta.1
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 +707 -17
- package/dist/auth/browser.d.ts +10 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +56 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +20 -0
- package/dist/auth/oauth-server.d.ts.map +1 -0
- package/dist/auth/oauth-server.js +168 -0
- package/dist/auth/oauth-server.js.map +1 -0
- package/dist/auth/pkce.d.ts +46 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +57 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/base.d.ts +52 -0
- package/dist/auth/providers/base.d.ts.map +1 -0
- package/dist/auth/providers/base.js +70 -0
- package/dist/auth/providers/base.js.map +1 -0
- package/dist/auth/providers/index.d.ts +23 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +39 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/linear.d.ts +37 -0
- package/dist/auth/providers/linear.d.ts.map +1 -0
- package/dist/auth/providers/linear.js +46 -0
- package/dist/auth/providers/linear.js.map +1 -0
- package/dist/auth/providers/notion.d.ts +36 -0
- package/dist/auth/providers/notion.d.ts.map +1 -0
- package/dist/auth/providers/notion.js +75 -0
- package/dist/auth/providers/notion.js.map +1 -0
- package/dist/auth/providers/todoist.d.ts +29 -0
- package/dist/auth/providers/todoist.d.ts.map +1 -0
- package/dist/auth/providers/todoist.js +40 -0
- package/dist/auth/providers/todoist.js.map +1 -0
- package/dist/automation/git.d.ts +15 -0
- package/dist/automation/git.d.ts.map +1 -0
- package/dist/automation/git.js +73 -0
- package/dist/automation/git.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +192 -19
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +14 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +243 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +12 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +124 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +13 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +374 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +31 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +353 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integrations.d.ts +17 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +193 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/plan.d.ts +5 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +80 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/run.d.ts +26 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +351 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/scaffold.d.ts +9 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +128 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/commands/setup.d.ts +12 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +27 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +6 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +151 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/source.d.ts +17 -0
- package/dist/commands/source.d.ts.map +1 -0
- package/dist/commands/source.js +173 -0
- package/dist/commands/source.js.map +1 -0
- package/dist/config/manager.d.ts +70 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +227 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -0
- package/dist/integrations/_template/auth.d.ts +29 -0
- package/dist/integrations/_template/auth.d.ts.map +1 -0
- package/dist/integrations/_template/auth.js +42 -0
- package/dist/integrations/_template/auth.js.map +1 -0
- package/dist/integrations/_template/index.d.ts +8 -0
- package/dist/integrations/_template/index.d.ts.map +1 -0
- package/dist/integrations/_template/index.js +8 -0
- package/dist/integrations/_template/index.js.map +1 -0
- package/dist/integrations/_template/source.d.ts +34 -0
- package/dist/integrations/_template/source.d.ts.map +1 -0
- package/dist/integrations/_template/source.js +124 -0
- package/dist/integrations/_template/source.js.map +1 -0
- package/dist/integrations/base.d.ts +158 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +109 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/github/index.d.ts +8 -0
- package/dist/integrations/github/index.d.ts.map +1 -0
- package/dist/integrations/github/index.js +8 -0
- package/dist/integrations/github/index.js.map +1 -0
- package/dist/integrations/github/source.d.ts +26 -0
- package/dist/integrations/github/source.d.ts.map +1 -0
- package/dist/integrations/github/source.js +190 -0
- package/dist/integrations/github/source.js.map +1 -0
- package/dist/integrations/index.d.ts +37 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +71 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/linear/auth.d.ts +37 -0
- package/dist/integrations/linear/auth.d.ts.map +1 -0
- package/dist/integrations/linear/auth.js +45 -0
- package/dist/integrations/linear/auth.js.map +1 -0
- package/dist/integrations/linear/index.d.ts +9 -0
- package/dist/integrations/linear/index.d.ts.map +1 -0
- package/dist/integrations/linear/index.js +9 -0
- package/dist/integrations/linear/index.js.map +1 -0
- package/dist/integrations/linear/source.d.ts +26 -0
- package/dist/integrations/linear/source.d.ts.map +1 -0
- package/dist/integrations/linear/source.js +248 -0
- package/dist/integrations/linear/source.js.map +1 -0
- package/dist/integrations/notion/index.d.ts +8 -0
- package/dist/integrations/notion/index.d.ts.map +1 -0
- package/dist/integrations/notion/index.js +8 -0
- package/dist/integrations/notion/index.js.map +1 -0
- package/dist/integrations/notion/source.d.ts +53 -0
- package/dist/integrations/notion/source.d.ts.map +1 -0
- package/dist/integrations/notion/source.js +463 -0
- package/dist/integrations/notion/source.js.map +1 -0
- package/dist/llm/api.d.ts +29 -0
- package/dist/llm/api.d.ts.map +1 -0
- package/dist/llm/api.js +152 -0
- package/dist/llm/api.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/providers.d.ts +24 -0
- package/dist/llm/providers.d.ts.map +1 -0
- package/dist/llm/providers.js +51 -0
- package/dist/llm/providers.js.map +1 -0
- package/dist/loop/__tests__/agents.test.d.ts +2 -0
- package/dist/loop/__tests__/agents.test.d.ts.map +1 -0
- package/dist/loop/__tests__/agents.test.js +183 -0
- package/dist/loop/__tests__/agents.test.js.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts +2 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.js +161 -0
- package/dist/loop/__tests__/circuit-breaker.test.js.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts +2 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.js +200 -0
- package/dist/loop/__tests__/cost-tracker.test.js.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts +2 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.js +198 -0
- package/dist/loop/__tests__/rate-limiter.test.js.map +1 -0
- package/dist/loop/__tests__/validation.test.d.ts +2 -0
- package/dist/loop/__tests__/validation.test.d.ts.map +1 -0
- package/dist/loop/__tests__/validation.test.js +234 -0
- package/dist/loop/__tests__/validation.test.js.map +1 -0
- package/dist/loop/agents.d.ts +26 -0
- package/dist/loop/agents.d.ts.map +1 -0
- package/dist/loop/agents.js +188 -0
- package/dist/loop/agents.js.map +1 -0
- package/dist/loop/circuit-breaker.d.ts +61 -0
- package/dist/loop/circuit-breaker.d.ts.map +1 -0
- package/dist/loop/circuit-breaker.js +143 -0
- package/dist/loop/circuit-breaker.js.map +1 -0
- package/dist/loop/cost-tracker.d.ts +90 -0
- package/dist/loop/cost-tracker.d.ts.map +1 -0
- package/dist/loop/cost-tracker.js +229 -0
- package/dist/loop/cost-tracker.js.map +1 -0
- package/dist/loop/estimator.d.ts +20 -0
- package/dist/loop/estimator.d.ts.map +1 -0
- package/dist/loop/estimator.js +123 -0
- package/dist/loop/estimator.js.map +1 -0
- package/dist/loop/executor.d.ts +44 -0
- package/dist/loop/executor.d.ts.map +1 -0
- package/dist/loop/executor.js +646 -0
- package/dist/loop/executor.js.map +1 -0
- package/dist/loop/progress.d.ts +34 -0
- package/dist/loop/progress.d.ts.map +1 -0
- package/dist/loop/progress.js +186 -0
- package/dist/loop/progress.js.map +1 -0
- package/dist/loop/rate-limiter.d.ts +71 -0
- package/dist/loop/rate-limiter.d.ts.map +1 -0
- package/dist/loop/rate-limiter.js +151 -0
- package/dist/loop/rate-limiter.js.map +1 -0
- package/dist/loop/semantic-analyzer.d.ts +33 -0
- package/dist/loop/semantic-analyzer.d.ts.map +1 -0
- package/dist/loop/semantic-analyzer.js +153 -0
- package/dist/loop/semantic-analyzer.js.map +1 -0
- package/dist/loop/skills.d.ts +29 -0
- package/dist/loop/skills.d.ts.map +1 -0
- package/dist/loop/skills.js +174 -0
- package/dist/loop/skills.js.map +1 -0
- package/dist/loop/step-detector.d.ts +17 -0
- package/dist/loop/step-detector.d.ts.map +1 -0
- package/dist/loop/step-detector.js +280 -0
- package/dist/loop/step-detector.js.map +1 -0
- package/dist/loop/task-counter.d.ts +41 -0
- package/dist/loop/task-counter.d.ts.map +1 -0
- package/dist/loop/task-counter.js +99 -0
- package/dist/loop/task-counter.js.map +1 -0
- package/dist/loop/validation.d.ts +28 -0
- package/dist/loop/validation.d.ts.map +1 -0
- package/dist/loop/validation.js +138 -0
- package/dist/loop/validation.js.map +1 -0
- package/dist/mcp/core/init.d.ts +15 -0
- package/dist/mcp/core/init.d.ts.map +1 -0
- package/dist/mcp/core/init.js +272 -0
- package/dist/mcp/core/init.js.map +1 -0
- package/dist/mcp/core/plan.d.ts +15 -0
- package/dist/mcp/core/plan.d.ts.map +1 -0
- package/dist/mcp/core/plan.js +90 -0
- package/dist/mcp/core/plan.js.map +1 -0
- package/dist/mcp/core/run.d.ts +26 -0
- package/dist/mcp/core/run.d.ts.map +1 -0
- package/dist/mcp/core/run.js +114 -0
- package/dist/mcp/core/run.js.map +1 -0
- package/dist/mcp/prompts.d.ts +10 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +163 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +16 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +114 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +73 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +316 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/presets/index.d.ts +36 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +236 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/setup/agent-detector.d.ts +57 -0
- package/dist/setup/agent-detector.d.ts.map +1 -0
- package/dist/setup/agent-detector.js +170 -0
- package/dist/setup/agent-detector.js.map +1 -0
- package/dist/setup/index.d.ts +7 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +7 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/llm-tester.d.ts +33 -0
- package/dist/setup/llm-tester.d.ts.map +1 -0
- package/dist/setup/llm-tester.js +105 -0
- package/dist/setup/llm-tester.js.map +1 -0
- package/dist/setup/wizard.d.ts +19 -0
- package/dist/setup/wizard.d.ts.map +1 -0
- package/dist/setup/wizard.js +313 -0
- package/dist/setup/wizard.js.map +1 -0
- package/dist/sources/__tests__/file.test.d.ts +2 -0
- package/dist/sources/__tests__/file.test.d.ts.map +1 -0
- package/dist/sources/__tests__/file.test.js +126 -0
- package/dist/sources/__tests__/file.test.js.map +1 -0
- package/dist/sources/__tests__/github.test.d.ts +2 -0
- package/dist/sources/__tests__/github.test.d.ts.map +1 -0
- package/dist/sources/__tests__/github.test.js +157 -0
- package/dist/sources/__tests__/github.test.js.map +1 -0
- package/dist/sources/base.d.ts +72 -0
- package/dist/sources/base.d.ts.map +1 -0
- package/dist/sources/base.js +127 -0
- package/dist/sources/base.js.map +1 -0
- package/dist/sources/builtin/file.d.ts +21 -0
- package/dist/sources/builtin/file.d.ts.map +1 -0
- package/dist/sources/builtin/file.js +129 -0
- package/dist/sources/builtin/file.js.map +1 -0
- package/dist/sources/builtin/github-scraper.d.ts +65 -0
- package/dist/sources/builtin/github-scraper.d.ts.map +1 -0
- package/dist/sources/builtin/github-scraper.js +324 -0
- package/dist/sources/builtin/github-scraper.js.map +1 -0
- package/dist/sources/builtin/pdf.d.ts +24 -0
- package/dist/sources/builtin/pdf.d.ts.map +1 -0
- package/dist/sources/builtin/pdf.js +174 -0
- package/dist/sources/builtin/pdf.js.map +1 -0
- package/dist/sources/builtin/url.d.ts +47 -0
- package/dist/sources/builtin/url.d.ts.map +1 -0
- package/dist/sources/builtin/url.js +429 -0
- package/dist/sources/builtin/url.js.map +1 -0
- package/dist/sources/config.d.ts +72 -0
- package/dist/sources/config.d.ts.map +1 -0
- package/dist/sources/config.js +215 -0
- package/dist/sources/config.js.map +1 -0
- package/dist/sources/index.d.ts +47 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +210 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/integrations/github.d.ts +24 -0
- package/dist/sources/integrations/github.d.ts.map +1 -0
- package/dist/sources/integrations/github.js +193 -0
- package/dist/sources/integrations/github.js.map +1 -0
- package/dist/sources/integrations/linear.d.ts +18 -0
- package/dist/sources/integrations/linear.d.ts.map +1 -0
- package/dist/sources/integrations/linear.js +197 -0
- package/dist/sources/integrations/linear.js.map +1 -0
- package/dist/sources/integrations/notion.d.ts +39 -0
- package/dist/sources/integrations/notion.d.ts.map +1 -0
- package/dist/sources/integrations/notion.js +343 -0
- package/dist/sources/integrations/notion.js.map +1 -0
- package/dist/sources/integrations/todoist.d.ts +18 -0
- package/dist/sources/integrations/todoist.d.ts.map +1 -0
- package/dist/sources/integrations/todoist.js +154 -0
- package/dist/sources/integrations/todoist.js.map +1 -0
- package/dist/sources/types.d.ts +106 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +9 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress-renderer.d.ts +54 -0
- package/dist/ui/progress-renderer.d.ts.map +1 -0
- package/dist/ui/progress-renderer.js +118 -0
- package/dist/ui/progress-renderer.js.map +1 -0
- package/dist/ui/shimmer.d.ts +16 -0
- package/dist/ui/shimmer.d.ts.map +1 -0
- package/dist/ui/shimmer.js +31 -0
- package/dist/ui/shimmer.js.map +1 -0
- package/dist/wizard/ascii-art.d.ts +93 -0
- package/dist/wizard/ascii-art.d.ts.map +1 -0
- package/dist/wizard/ascii-art.js +378 -0
- package/dist/wizard/ascii-art.js.map +1 -0
- package/dist/wizard/idea-prompts.d.ts +18 -0
- package/dist/wizard/idea-prompts.d.ts.map +1 -0
- package/dist/wizard/idea-prompts.js +154 -0
- package/dist/wizard/idea-prompts.js.map +1 -0
- package/dist/wizard/idea-ui.d.ts +34 -0
- package/dist/wizard/idea-ui.d.ts.map +1 -0
- package/dist/wizard/idea-ui.js +225 -0
- package/dist/wizard/idea-ui.js.map +1 -0
- package/dist/wizard/ideas.d.ts +27 -0
- package/dist/wizard/ideas.d.ts.map +1 -0
- package/dist/wizard/ideas.js +511 -0
- package/dist/wizard/ideas.js.map +1 -0
- package/dist/wizard/index.d.ts +11 -0
- package/dist/wizard/index.d.ts.map +1 -0
- package/dist/wizard/index.js +472 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/llm.d.ts +14 -0
- package/dist/wizard/llm.d.ts.map +1 -0
- package/dist/wizard/llm.js +420 -0
- package/dist/wizard/llm.js.map +1 -0
- package/dist/wizard/prompts.d.ts +75 -0
- package/dist/wizard/prompts.d.ts.map +1 -0
- package/dist/wizard/prompts.js +455 -0
- package/dist/wizard/prompts.js.map +1 -0
- package/dist/wizard/spec-generator.d.ts +14 -0
- package/dist/wizard/spec-generator.d.ts.map +1 -0
- package/dist/wizard/spec-generator.js +200 -0
- package/dist/wizard/spec-generator.js.map +1 -0
- package/dist/wizard/types.d.ts +53 -0
- package/dist/wizard/types.d.ts.map +1 -0
- package/dist/wizard/types.js +10 -0
- package/dist/wizard/types.js.map +1 -0
- package/dist/wizard/ui.d.ts +57 -0
- package/dist/wizard/ui.d.ts.map +1 -0
- package/dist/wizard/ui.js +211 -0
- package/dist/wizard/ui.js.map +1 -0
- package/package.json +67 -8
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Integration Interface
|
|
3
|
+
*
|
|
4
|
+
* Each integration lives in a single folder with:
|
|
5
|
+
* - index.ts - Main export
|
|
6
|
+
* - source.ts - Data fetching logic
|
|
7
|
+
* - auth.ts - Authentication (optional, if needed)
|
|
8
|
+
* - README.md - Documentation
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Result from fetching integration data
|
|
12
|
+
*/
|
|
13
|
+
export interface IntegrationResult {
|
|
14
|
+
/** The content in markdown format */
|
|
15
|
+
content: string;
|
|
16
|
+
/** Original source identifier */
|
|
17
|
+
source: string;
|
|
18
|
+
/** Optional title extracted from source */
|
|
19
|
+
title?: string;
|
|
20
|
+
/** Metadata about the fetch */
|
|
21
|
+
metadata?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Options passed to integration fetch
|
|
25
|
+
*/
|
|
26
|
+
export interface IntegrationOptions {
|
|
27
|
+
/** Project name/ID for filtering */
|
|
28
|
+
project?: string;
|
|
29
|
+
/** Label/tag filter */
|
|
30
|
+
label?: string;
|
|
31
|
+
/** Status filter (e.g., 'open', 'in_progress') */
|
|
32
|
+
status?: string;
|
|
33
|
+
/** Maximum items to fetch */
|
|
34
|
+
limit?: number;
|
|
35
|
+
/** Custom headers for HTTP requests */
|
|
36
|
+
headers?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Authentication methods supported by integrations
|
|
40
|
+
*/
|
|
41
|
+
export type AuthMethod = 'cli' | 'api-key' | 'oauth' | 'none';
|
|
42
|
+
/**
|
|
43
|
+
* Integration info for registry
|
|
44
|
+
*/
|
|
45
|
+
export interface IntegrationInfo {
|
|
46
|
+
/** Unique identifier */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Human-readable display name */
|
|
49
|
+
displayName: string;
|
|
50
|
+
/** Short description */
|
|
51
|
+
description: string;
|
|
52
|
+
/** Authentication methods supported */
|
|
53
|
+
authMethods: AuthMethod[];
|
|
54
|
+
/** Whether integration is available (auth configured) */
|
|
55
|
+
available: boolean;
|
|
56
|
+
/** Website URL for the service */
|
|
57
|
+
website: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Unified Integration Interface
|
|
61
|
+
* All integrations (github, linear, notion, etc.) implement this
|
|
62
|
+
*/
|
|
63
|
+
export interface Integration {
|
|
64
|
+
/** Unique identifier (e.g., 'github', 'linear') */
|
|
65
|
+
name: string;
|
|
66
|
+
/** Human-readable display name */
|
|
67
|
+
displayName: string;
|
|
68
|
+
/** Short description */
|
|
69
|
+
description: string;
|
|
70
|
+
/** Website URL */
|
|
71
|
+
website: string;
|
|
72
|
+
/** Supported authentication methods */
|
|
73
|
+
authMethods: AuthMethod[];
|
|
74
|
+
/**
|
|
75
|
+
* Check if this integration is available
|
|
76
|
+
* Returns true if at least one auth method works
|
|
77
|
+
*/
|
|
78
|
+
isAvailable(): Promise<boolean>;
|
|
79
|
+
/**
|
|
80
|
+
* Check which auth method is currently configured
|
|
81
|
+
* Returns null if none are configured
|
|
82
|
+
*/
|
|
83
|
+
getConfiguredAuthMethod(): Promise<AuthMethod | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Fetch data from this integration
|
|
86
|
+
* @param identifier - Integration-specific identifier (repo, project, URL, etc.)
|
|
87
|
+
* @param options - Additional options for the fetch
|
|
88
|
+
*/
|
|
89
|
+
fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Get help text for using this integration
|
|
92
|
+
*/
|
|
93
|
+
getHelp(): string;
|
|
94
|
+
/**
|
|
95
|
+
* Get info for registry display
|
|
96
|
+
*/
|
|
97
|
+
getInfo(): Promise<IntegrationInfo>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Base class for integrations
|
|
101
|
+
* Provides common functionality
|
|
102
|
+
*/
|
|
103
|
+
export declare abstract class BaseIntegration implements Integration {
|
|
104
|
+
abstract name: string;
|
|
105
|
+
abstract displayName: string;
|
|
106
|
+
abstract description: string;
|
|
107
|
+
abstract website: string;
|
|
108
|
+
abstract authMethods: AuthMethod[];
|
|
109
|
+
/**
|
|
110
|
+
* Check if integration is available
|
|
111
|
+
* Override for custom availability checks
|
|
112
|
+
*/
|
|
113
|
+
isAvailable(): Promise<boolean>;
|
|
114
|
+
/**
|
|
115
|
+
* Get which auth method is configured
|
|
116
|
+
* Override in subclasses for custom logic
|
|
117
|
+
*/
|
|
118
|
+
getConfiguredAuthMethod(): Promise<AuthMethod | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Fetch data - must be implemented by subclass
|
|
121
|
+
*/
|
|
122
|
+
abstract fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
123
|
+
/**
|
|
124
|
+
* Get help text
|
|
125
|
+
*/
|
|
126
|
+
abstract getHelp(): string;
|
|
127
|
+
/**
|
|
128
|
+
* Get info for registry
|
|
129
|
+
*/
|
|
130
|
+
getInfo(): Promise<IntegrationInfo>;
|
|
131
|
+
/**
|
|
132
|
+
* Check if CLI tool is available
|
|
133
|
+
* Override in subclasses that support CLI auth
|
|
134
|
+
*/
|
|
135
|
+
protected isCliAvailable(): Promise<boolean>;
|
|
136
|
+
/**
|
|
137
|
+
* Check if API key is configured
|
|
138
|
+
*/
|
|
139
|
+
protected hasApiKey(): Promise<boolean>;
|
|
140
|
+
/**
|
|
141
|
+
* Check if OAuth token is stored
|
|
142
|
+
*/
|
|
143
|
+
protected hasOAuthToken(): Promise<boolean>;
|
|
144
|
+
/**
|
|
145
|
+
* Get credentials from config
|
|
146
|
+
*/
|
|
147
|
+
protected getCredentials(): Promise<Record<string, string | undefined> | null>;
|
|
148
|
+
/**
|
|
149
|
+
* Get API key from credentials
|
|
150
|
+
* @param key - The credential key to get (default: 'apiKey')
|
|
151
|
+
*/
|
|
152
|
+
protected getApiKey(key?: string): Promise<string>;
|
|
153
|
+
/**
|
|
154
|
+
* Create a standardized error message
|
|
155
|
+
*/
|
|
156
|
+
protected error(message: string): never;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/integrations/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Integration Interface
|
|
3
|
+
*
|
|
4
|
+
* Each integration lives in a single folder with:
|
|
5
|
+
* - index.ts - Main export
|
|
6
|
+
* - source.ts - Data fetching logic
|
|
7
|
+
* - auth.ts - Authentication (optional, if needed)
|
|
8
|
+
* - README.md - Documentation
|
|
9
|
+
*/
|
|
10
|
+
import { getSourceCredentials } from '../sources/config.js';
|
|
11
|
+
/**
|
|
12
|
+
* Base class for integrations
|
|
13
|
+
* Provides common functionality
|
|
14
|
+
*/
|
|
15
|
+
export class BaseIntegration {
|
|
16
|
+
/**
|
|
17
|
+
* Check if integration is available
|
|
18
|
+
* Override for custom availability checks
|
|
19
|
+
*/
|
|
20
|
+
async isAvailable() {
|
|
21
|
+
const method = await this.getConfiguredAuthMethod();
|
|
22
|
+
return method !== null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get which auth method is configured
|
|
26
|
+
* Override in subclasses for custom logic
|
|
27
|
+
*/
|
|
28
|
+
async getConfiguredAuthMethod() {
|
|
29
|
+
// Check CLI first if supported
|
|
30
|
+
if (this.authMethods.includes('cli') && (await this.isCliAvailable())) {
|
|
31
|
+
return 'cli';
|
|
32
|
+
}
|
|
33
|
+
// Check API key
|
|
34
|
+
if (this.authMethods.includes('api-key') && (await this.hasApiKey())) {
|
|
35
|
+
return 'api-key';
|
|
36
|
+
}
|
|
37
|
+
// Check OAuth token
|
|
38
|
+
if (this.authMethods.includes('oauth') && (await this.hasOAuthToken())) {
|
|
39
|
+
return 'oauth';
|
|
40
|
+
}
|
|
41
|
+
// No auth needed
|
|
42
|
+
if (this.authMethods.includes('none')) {
|
|
43
|
+
return 'none';
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get info for registry
|
|
49
|
+
*/
|
|
50
|
+
async getInfo() {
|
|
51
|
+
return {
|
|
52
|
+
name: this.name,
|
|
53
|
+
displayName: this.displayName,
|
|
54
|
+
description: this.description,
|
|
55
|
+
authMethods: this.authMethods,
|
|
56
|
+
available: await this.isAvailable(),
|
|
57
|
+
website: this.website,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ============================================
|
|
61
|
+
// Protected helpers for subclasses
|
|
62
|
+
// ============================================
|
|
63
|
+
/**
|
|
64
|
+
* Check if CLI tool is available
|
|
65
|
+
* Override in subclasses that support CLI auth
|
|
66
|
+
*/
|
|
67
|
+
async isCliAvailable() {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if API key is configured
|
|
72
|
+
*/
|
|
73
|
+
async hasApiKey() {
|
|
74
|
+
const creds = await this.getCredentials();
|
|
75
|
+
return !!(creds?.apiKey || creds?.token);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if OAuth token is stored
|
|
79
|
+
*/
|
|
80
|
+
async hasOAuthToken() {
|
|
81
|
+
const creds = await this.getCredentials();
|
|
82
|
+
return !!creds?.accessToken;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get credentials from config
|
|
86
|
+
*/
|
|
87
|
+
async getCredentials() {
|
|
88
|
+
return getSourceCredentials(this.name);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get API key from credentials
|
|
92
|
+
* @param key - The credential key to get (default: 'apiKey')
|
|
93
|
+
*/
|
|
94
|
+
async getApiKey(key = 'apiKey') {
|
|
95
|
+
const creds = await this.getCredentials();
|
|
96
|
+
const value = creds?.[key] || creds?.token || creds?.apiKey;
|
|
97
|
+
if (!value) {
|
|
98
|
+
throw new Error(`[${this.name}] No ${key} configured. Run: ralph-starter config set ${this.name}.${key} <value>`);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a standardized error message
|
|
104
|
+
*/
|
|
105
|
+
error(message) {
|
|
106
|
+
throw new Error(`[${this.name}] ${message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/integrations/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Integration Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from GitHub repositories.
|
|
5
|
+
* Uses the `gh` CLI for authentication (if available) or falls back to API token.
|
|
6
|
+
*/
|
|
7
|
+
import { type AuthMethod, BaseIntegration, type IntegrationOptions, type IntegrationResult } from '../base.js';
|
|
8
|
+
export declare class GitHubIntegration extends BaseIntegration {
|
|
9
|
+
name: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
description: string;
|
|
12
|
+
website: string;
|
|
13
|
+
authMethods: AuthMethod[];
|
|
14
|
+
private ghCliAvailable;
|
|
15
|
+
/**
|
|
16
|
+
* Check if gh CLI is available and authenticated
|
|
17
|
+
*/
|
|
18
|
+
protected isCliAvailable(): Promise<boolean>;
|
|
19
|
+
fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
20
|
+
private parseRepoIdentifier;
|
|
21
|
+
private fetchViaCli;
|
|
22
|
+
private fetchViaApi;
|
|
23
|
+
private formatIssues;
|
|
24
|
+
getHelp(): string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/integrations/github/source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAUpB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,WAAW,SAA2C;IACtD,OAAO,SAAwB;IAG/B,WAAW,EAAE,UAAU,EAAE,CAAsB;IAE/C,OAAO,CAAC,cAAc,CAAwB;IAE9C;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB5C,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWzF,OAAO,CAAC,mBAAmB;YAkBb,WAAW;YAuCX,WAAW;IA0CzB,OAAO,CAAC,YAAY;IAgDpB,OAAO,IAAI,MAAM;CAgClB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Integration Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from GitHub repositories.
|
|
5
|
+
* Uses the `gh` CLI for authentication (if available) or falls back to API token.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseIntegration, } from '../base.js';
|
|
8
|
+
export class GitHubIntegration extends BaseIntegration {
|
|
9
|
+
name = 'github';
|
|
10
|
+
displayName = 'GitHub';
|
|
11
|
+
description = 'Fetch issues from GitHub repositories';
|
|
12
|
+
website = 'https://github.com';
|
|
13
|
+
// CLI is preferred, API token is fallback
|
|
14
|
+
authMethods = ['cli', 'api-key'];
|
|
15
|
+
ghCliAvailable = null;
|
|
16
|
+
/**
|
|
17
|
+
* Check if gh CLI is available and authenticated
|
|
18
|
+
*/
|
|
19
|
+
async isCliAvailable() {
|
|
20
|
+
if (this.ghCliAvailable !== null) {
|
|
21
|
+
return this.ghCliAvailable;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const { execa } = await import('execa');
|
|
25
|
+
await execa('gh', ['auth', 'status']);
|
|
26
|
+
this.ghCliAvailable = true;
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
this.ghCliAvailable = false;
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async fetch(identifier, options) {
|
|
35
|
+
const { owner, repo } = this.parseRepoIdentifier(identifier);
|
|
36
|
+
// Prefer CLI if available
|
|
37
|
+
if (await this.isCliAvailable()) {
|
|
38
|
+
return this.fetchViaCli(owner, repo, options);
|
|
39
|
+
}
|
|
40
|
+
return this.fetchViaApi(owner, repo, options);
|
|
41
|
+
}
|
|
42
|
+
parseRepoIdentifier(identifier) {
|
|
43
|
+
// Handle full GitHub URLs
|
|
44
|
+
if (identifier.includes('github.com')) {
|
|
45
|
+
const match = identifier.match(/github\.com\/([^/]+)\/([^/]+)/);
|
|
46
|
+
if (match) {
|
|
47
|
+
return { owner: match[1], repo: match[2].replace(/\.git$/, '') };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Handle owner/repo format
|
|
51
|
+
if (identifier.includes('/')) {
|
|
52
|
+
const [owner, repo] = identifier.split('/');
|
|
53
|
+
return { owner, repo };
|
|
54
|
+
}
|
|
55
|
+
this.error(`Invalid repository format: ${identifier}. Use owner/repo or GitHub URL.`);
|
|
56
|
+
}
|
|
57
|
+
async fetchViaCli(owner, repo, options) {
|
|
58
|
+
const { execa } = await import('execa');
|
|
59
|
+
const args = [
|
|
60
|
+
'issue',
|
|
61
|
+
'list',
|
|
62
|
+
'-R',
|
|
63
|
+
`${owner}/${repo}`,
|
|
64
|
+
'--json',
|
|
65
|
+
'number,title,body,labels,state',
|
|
66
|
+
];
|
|
67
|
+
// Add filters
|
|
68
|
+
if (options?.label) {
|
|
69
|
+
args.push('--label', options.label);
|
|
70
|
+
}
|
|
71
|
+
if (options?.status) {
|
|
72
|
+
args.push('--state', options.status);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
args.push('--state', 'open');
|
|
76
|
+
}
|
|
77
|
+
if (options?.limit) {
|
|
78
|
+
args.push('--limit', String(options.limit));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
args.push('--limit', '20');
|
|
82
|
+
}
|
|
83
|
+
const result = await execa('gh', args);
|
|
84
|
+
const issues = JSON.parse(result.stdout);
|
|
85
|
+
return this.formatIssues(issues, owner, repo);
|
|
86
|
+
}
|
|
87
|
+
async fetchViaApi(owner, repo, options) {
|
|
88
|
+
const token = await this.getApiKey('token');
|
|
89
|
+
let url = `https://api.github.com/repos/${owner}/${repo}/issues?`;
|
|
90
|
+
const params = new URLSearchParams();
|
|
91
|
+
params.set('state', options?.status || 'open');
|
|
92
|
+
params.set('per_page', String(options?.limit || 20));
|
|
93
|
+
if (options?.label) {
|
|
94
|
+
params.set('labels', options.label);
|
|
95
|
+
}
|
|
96
|
+
url += params.toString();
|
|
97
|
+
const response = await fetch(url, {
|
|
98
|
+
headers: {
|
|
99
|
+
Authorization: `Bearer ${token}`,
|
|
100
|
+
Accept: 'application/vnd.github+json',
|
|
101
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
102
|
+
'User-Agent': 'ralph-starter/0.1.0',
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
if (response.status === 401) {
|
|
107
|
+
this.error('Invalid GitHub token. Run: ralph-starter config set github.token <value>');
|
|
108
|
+
}
|
|
109
|
+
if (response.status === 404) {
|
|
110
|
+
this.error(`Repository not found: ${owner}/${repo}`);
|
|
111
|
+
}
|
|
112
|
+
this.error(`GitHub API error: ${response.status} ${response.statusText}`);
|
|
113
|
+
}
|
|
114
|
+
const issues = (await response.json());
|
|
115
|
+
return this.formatIssues(issues, owner, repo);
|
|
116
|
+
}
|
|
117
|
+
formatIssues(issues, owner, repo) {
|
|
118
|
+
if (issues.length === 0) {
|
|
119
|
+
return {
|
|
120
|
+
content: `# ${owner}/${repo}\n\nNo issues found matching the criteria.`,
|
|
121
|
+
source: `github:${owner}/${repo}`,
|
|
122
|
+
title: `${owner}/${repo} Issues`,
|
|
123
|
+
metadata: { type: 'github', issues: 0 },
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const sections = [`# ${owner}/${repo} Issues\n`];
|
|
127
|
+
for (const issue of issues) {
|
|
128
|
+
const labels = issue.labels
|
|
129
|
+
?.map((l) => (typeof l === 'string' ? l : l.name))
|
|
130
|
+
.filter(Boolean)
|
|
131
|
+
.join(', ');
|
|
132
|
+
sections.push(`## #${issue.number}: ${issue.title}`);
|
|
133
|
+
if (labels) {
|
|
134
|
+
sections.push(`*Labels: ${labels}*`);
|
|
135
|
+
}
|
|
136
|
+
sections.push('');
|
|
137
|
+
if (issue.body) {
|
|
138
|
+
sections.push(issue.body);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
sections.push('*No description provided*');
|
|
142
|
+
}
|
|
143
|
+
sections.push('\n---\n');
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
content: sections.join('\n'),
|
|
147
|
+
source: `github:${owner}/${repo}`,
|
|
148
|
+
title: `${owner}/${repo} Issues`,
|
|
149
|
+
metadata: {
|
|
150
|
+
type: 'github',
|
|
151
|
+
owner,
|
|
152
|
+
repo,
|
|
153
|
+
issues: issues.length,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
getHelp() {
|
|
158
|
+
return `
|
|
159
|
+
github: Fetch issues from GitHub repositories
|
|
160
|
+
|
|
161
|
+
Usage:
|
|
162
|
+
ralph-starter run --from github --project owner/repo
|
|
163
|
+
ralph-starter run --from github --project owner/repo --label bug
|
|
164
|
+
ralph-starter run --from github --project https://github.com/owner/repo
|
|
165
|
+
|
|
166
|
+
Options:
|
|
167
|
+
--project Repository in owner/repo format or GitHub URL
|
|
168
|
+
--label Filter by label name
|
|
169
|
+
--status Issue state: open, closed, all (default: open)
|
|
170
|
+
--limit Maximum issues to fetch (default: 20)
|
|
171
|
+
|
|
172
|
+
Authentication:
|
|
173
|
+
Uses 'gh' CLI if available and authenticated (recommended)
|
|
174
|
+
Otherwise requires: ralph-starter config set github.token <token>
|
|
175
|
+
|
|
176
|
+
Setup with gh CLI (recommended):
|
|
177
|
+
1. Install: https://cli.github.com/
|
|
178
|
+
2. Run: gh auth login
|
|
179
|
+
|
|
180
|
+
Setup with token:
|
|
181
|
+
1. Create token at: https://github.com/settings/tokens
|
|
182
|
+
2. Run: ralph-starter config set github.token <token>
|
|
183
|
+
|
|
184
|
+
Examples:
|
|
185
|
+
ralph-starter run --from github --project facebook/react --label "good first issue"
|
|
186
|
+
ralph-starter run --from github --project my-org/my-repo --status all
|
|
187
|
+
`.trim();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/integrations/github/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrations Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all available integrations.
|
|
5
|
+
* Add new integrations here after creating them.
|
|
6
|
+
*/
|
|
7
|
+
import type { Integration, IntegrationInfo } from './base.js';
|
|
8
|
+
export type { AuthMethod, Integration, IntegrationInfo, IntegrationOptions, IntegrationResult, } from './base.js';
|
|
9
|
+
export { BaseIntegration } from './base.js';
|
|
10
|
+
/**
|
|
11
|
+
* Get all registered integrations
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAllIntegrations(): Integration[];
|
|
14
|
+
/**
|
|
15
|
+
* Get an integration by name
|
|
16
|
+
*/
|
|
17
|
+
export declare function getIntegration(name: string): Integration | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Get info for all integrations
|
|
20
|
+
*/
|
|
21
|
+
export declare function getIntegrationsInfo(): Promise<IntegrationInfo[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Get available integrations (those with auth configured)
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAvailableIntegrations(): Promise<Integration[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if an integration is available
|
|
28
|
+
*/
|
|
29
|
+
export declare function isIntegrationAvailable(name: string): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Fetch from an integration by name
|
|
32
|
+
*/
|
|
33
|
+
export declare function fetchFromIntegration(name: string, identifier: string, options?: Record<string, unknown>): Promise<ReturnType<Integration['fetch']>>;
|
|
34
|
+
export { GitHubIntegration } from './github/index.js';
|
|
35
|
+
export { LinearIntegration } from './linear/index.js';
|
|
36
|
+
export { NotionIntegration } from './notion/index.js';
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQ9D,YAAY,EACV,UAAU,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAW5C;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CASvE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI3E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAO3C;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrations Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all available integrations.
|
|
5
|
+
* Add new integrations here after creating them.
|
|
6
|
+
*/
|
|
7
|
+
// Import all integrations
|
|
8
|
+
import { GitHubIntegration } from './github/index.js';
|
|
9
|
+
import { LinearIntegration } from './linear/index.js';
|
|
10
|
+
import { NotionIntegration } from './notion/index.js';
|
|
11
|
+
export { BaseIntegration } from './base.js';
|
|
12
|
+
/**
|
|
13
|
+
* All registered integrations
|
|
14
|
+
*/
|
|
15
|
+
const integrations = [
|
|
16
|
+
new GitHubIntegration(),
|
|
17
|
+
new LinearIntegration(),
|
|
18
|
+
new NotionIntegration(),
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Get all registered integrations
|
|
22
|
+
*/
|
|
23
|
+
export function getAllIntegrations() {
|
|
24
|
+
return integrations;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get an integration by name
|
|
28
|
+
*/
|
|
29
|
+
export function getIntegration(name) {
|
|
30
|
+
return integrations.find((i) => i.name === name);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get info for all integrations
|
|
34
|
+
*/
|
|
35
|
+
export async function getIntegrationsInfo() {
|
|
36
|
+
return Promise.all(integrations.map((i) => i.getInfo()));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get available integrations (those with auth configured)
|
|
40
|
+
*/
|
|
41
|
+
export async function getAvailableIntegrations() {
|
|
42
|
+
const results = await Promise.all(integrations.map(async (i) => ({
|
|
43
|
+
integration: i,
|
|
44
|
+
available: await i.isAvailable(),
|
|
45
|
+
})));
|
|
46
|
+
return results.filter((r) => r.available).map((r) => r.integration);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if an integration is available
|
|
50
|
+
*/
|
|
51
|
+
export async function isIntegrationAvailable(name) {
|
|
52
|
+
const integration = getIntegration(name);
|
|
53
|
+
if (!integration)
|
|
54
|
+
return false;
|
|
55
|
+
return integration.isAvailable();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Fetch from an integration by name
|
|
59
|
+
*/
|
|
60
|
+
export async function fetchFromIntegration(name, identifier, options) {
|
|
61
|
+
const integration = getIntegration(name);
|
|
62
|
+
if (!integration) {
|
|
63
|
+
throw new Error(`Unknown integration: ${name}`);
|
|
64
|
+
}
|
|
65
|
+
return integration.fetch(identifier, options);
|
|
66
|
+
}
|
|
67
|
+
// Individual exports for direct imports
|
|
68
|
+
export { GitHubIntegration } from './github/index.js';
|
|
69
|
+
export { LinearIntegration } from './linear/index.js';
|
|
70
|
+
export { NotionIntegration } from './notion/index.js';
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,0BAA0B;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,MAAM,YAAY,GAAkB;IAClC,IAAI,iBAAiB,EAAE;IACvB,IAAI,iBAAiB,EAAE;IACvB,IAAI,iBAAiB,EAAE;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE;KACjC,CAAC,CAAC,CACJ,CAAC;IAEF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAY;IACvD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,UAAkB,EAClB,OAAiC;IAEjC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,wCAAwC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|