@intrect/openswarm 0.4.4 → 0.8.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/README.md +46 -26
- package/config.example.yaml +22 -10
- package/dist/adapters/agenticLoop.d.ts +45 -2
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +209 -61
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/chatStream.d.ts +55 -0
- package/dist/adapters/chatStream.d.ts.map +1 -0
- package/dist/adapters/chatStream.js +116 -0
- package/dist/adapters/chatStream.js.map +1 -0
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +67 -6
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/codexModels.d.ts +20 -0
- package/dist/adapters/codexModels.d.ts.map +1 -0
- package/dist/adapters/codexModels.js +195 -0
- package/dist/adapters/codexModels.js.map +1 -0
- package/dist/adapters/codexResponses.d.ts +97 -0
- package/dist/adapters/codexResponses.d.ts.map +1 -0
- package/dist/adapters/codexResponses.js +302 -0
- package/dist/adapters/codexResponses.js.map +1 -0
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +20 -120
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/index.d.ts +10 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +19 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/lmstudio.d.ts +8 -0
- package/dist/adapters/lmstudio.d.ts.map +1 -0
- package/dist/adapters/lmstudio.js +41 -0
- package/dist/adapters/lmstudio.js.map +1 -0
- package/dist/adapters/local.d.ts +16 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +51 -127
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts +37 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +193 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/resultParsing.d.ts +6 -0
- package/dist/adapters/resultParsing.d.ts.map +1 -0
- package/dist/adapters/resultParsing.js +139 -0
- package/dist/adapters/resultParsing.js.map +1 -0
- package/dist/adapters/tools.d.ts +21 -2
- package/dist/adapters/tools.d.ts.map +1 -1
- package/dist/adapters/tools.js +153 -12
- package/dist/adapters/tools.js.map +1 -1
- package/dist/adapters/types.d.ts +40 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/webTools.d.ts +9 -0
- package/dist/adapters/webTools.d.ts.map +1 -0
- package/dist/adapters/webTools.js +195 -0
- package/dist/adapters/webTools.js.map +1 -0
- package/dist/agents/draftAnalyzer.d.ts +1 -1
- package/dist/agents/draftAnalyzer.d.ts.map +1 -1
- package/dist/agents/draftAnalyzer.js +3 -3
- package/dist/agents/draftAnalyzer.js.map +1 -1
- package/dist/agents/pairPipeline.d.ts +26 -1
- package/dist/agents/pairPipeline.d.ts.map +1 -1
- package/dist/agents/pairPipeline.js +184 -17
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/reflection.d.ts +56 -0
- package/dist/agents/reflection.d.ts.map +1 -0
- package/dist/agents/reflection.js +120 -0
- package/dist/agents/reflection.js.map +1 -0
- package/dist/agents/worker.d.ts +8 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +23 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/linearPkce.d.ts +22 -0
- package/dist/auth/linearPkce.d.ts.map +1 -0
- package/dist/auth/linearPkce.js +208 -0
- package/dist/auth/linearPkce.js.map +1 -0
- package/dist/auth/oauthPkce.d.ts +4 -3
- package/dist/auth/oauthPkce.d.ts.map +1 -1
- package/dist/auth/oauthPkce.js +39 -12
- package/dist/auth/oauthPkce.js.map +1 -1
- package/dist/auth/oauthStore.d.ts +11 -1
- package/dist/auth/oauthStore.d.ts.map +1 -1
- package/dist/auth/oauthStore.js +14 -2
- package/dist/auth/oauthStore.js.map +1 -1
- package/dist/auth/openrouterPkce.d.ts +29 -0
- package/dist/auth/openrouterPkce.d.ts.map +1 -0
- package/dist/auth/openrouterPkce.js +222 -0
- package/dist/auth/openrouterPkce.js.map +1 -0
- package/dist/automation/autonomousRunner.d.ts +17 -7
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +69 -70
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/backlogGrooming.d.ts +21 -0
- package/dist/automation/backlogGrooming.d.ts.map +1 -0
- package/dist/automation/backlogGrooming.js +80 -0
- package/dist/automation/backlogGrooming.js.map +1 -0
- package/dist/automation/localCI.d.ts +24 -0
- package/dist/automation/localCI.d.ts.map +1 -0
- package/dist/automation/localCI.js +84 -0
- package/dist/automation/localCI.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +33 -7
- package/dist/automation/runnerExecution.d.ts.map +1 -1
- package/dist/automation/runnerExecution.js +202 -154
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +5 -1
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/automation/taskSource.d.ts +101 -0
- package/dist/automation/taskSource.d.ts.map +1 -0
- package/dist/automation/taskSource.js +136 -0
- package/dist/automation/taskSource.js.map +1 -0
- package/dist/automation/workerAuditLog.d.ts +29 -0
- package/dist/automation/workerAuditLog.d.ts.map +1 -0
- package/dist/automation/workerAuditLog.js +82 -0
- package/dist/automation/workerAuditLog.js.map +1 -0
- package/dist/cli/authHandler.d.ts +14 -5
- package/dist/cli/authHandler.d.ts.map +1 -1
- package/dist/cli/authHandler.js +131 -36
- package/dist/cli/authHandler.js.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +13 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/doctorHandler.d.ts +2 -0
- package/dist/cli/doctorHandler.d.ts.map +1 -0
- package/dist/cli/doctorHandler.js +114 -0
- package/dist/cli/doctorHandler.js.map +1 -0
- package/dist/cli/initWizard.d.ts +13 -0
- package/dist/cli/initWizard.d.ts.map +1 -0
- package/dist/cli/initWizard.js +314 -0
- package/dist/cli/initWizard.js.map +1 -0
- package/dist/cli.js +112 -38
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +89 -15
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +100 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/envFile.d.ts +6 -0
- package/dist/core/envFile.d.ts.map +1 -1
- package/dist/core/envFile.js +39 -1
- package/dist/core/envFile.js.map +1 -1
- package/dist/core/eventHub.d.ts +22 -0
- package/dist/core/eventHub.d.ts.map +1 -1
- package/dist/core/eventHub.js.map +1 -1
- package/dist/core/providerOverride.d.ts +6 -0
- package/dist/core/providerOverride.d.ts.map +1 -0
- package/dist/core/providerOverride.js +37 -0
- package/dist/core/providerOverride.js.map +1 -0
- package/dist/core/service.d.ts.map +1 -1
- package/dist/core/service.js +43 -20
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +16 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discord/discordCore.d.ts.map +1 -1
- package/dist/discord/discordCore.js +16 -103
- package/dist/discord/discordCore.js.map +1 -1
- package/dist/discord/discordHandlers.d.ts.map +1 -1
- package/dist/discord/discordHandlers.js +15 -12
- package/dist/discord/discordHandlers.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/issues/sqliteStore.d.ts.map +1 -1
- package/dist/issues/sqliteStore.js +7 -2
- package/dist/issues/sqliteStore.js.map +1 -1
- package/dist/knowledge/scanner.d.ts.map +1 -1
- package/dist/knowledge/scanner.js +5 -0
- package/dist/knowledge/scanner.js.map +1 -1
- package/dist/linear/linear.d.ts +45 -2
- package/dist/linear/linear.d.ts.map +1 -1
- package/dist/linear/linear.js +154 -3
- package/dist/linear/linear.js.map +1 -1
- package/dist/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +40 -20
- package/dist/locale/prompts/en.js.map +1 -1
- package/dist/locale/prompts/ko.d.ts.map +1 -1
- package/dist/locale/prompts/ko.js +39 -20
- package/dist/locale/prompts/ko.js.map +1 -1
- package/dist/locale/types.d.ts +6 -0
- package/dist/locale/types.d.ts.map +1 -1
- package/dist/mcp/mcpClient.d.ts +27 -0
- package/dist/mcp/mcpClient.d.ts.map +1 -0
- package/dist/mcp/mcpClient.js +145 -0
- package/dist/mcp/mcpClient.js.map +1 -0
- package/dist/memory/memoryCore.d.ts.map +1 -1
- package/dist/memory/memoryCore.js +8 -2
- package/dist/memory/memoryCore.js.map +1 -1
- package/dist/memory/repoKnowledge.d.ts +33 -0
- package/dist/memory/repoKnowledge.d.ts.map +1 -0
- package/dist/memory/repoKnowledge.js +97 -0
- package/dist/memory/repoKnowledge.js.map +1 -0
- package/dist/notify/notifier.d.ts +26 -0
- package/dist/notify/notifier.d.ts.map +1 -0
- package/dist/notify/notifier.js +131 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/orchestration/conflictDetector.d.ts +5 -2
- package/dist/orchestration/conflictDetector.d.ts.map +1 -1
- package/dist/orchestration/conflictDetector.js +35 -6
- package/dist/orchestration/conflictDetector.js.map +1 -1
- package/dist/orchestration/decisionEngine.d.ts +20 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -1
- package/dist/orchestration/decisionEngine.js +45 -0
- package/dist/orchestration/decisionEngine.js.map +1 -1
- package/dist/support/banner.d.ts +7 -0
- package/dist/support/banner.d.ts.map +1 -0
- package/dist/support/banner.js +32 -0
- package/dist/support/banner.js.map +1 -0
- package/dist/support/chat.js +36 -27
- package/dist/support/chat.js.map +1 -1
- package/dist/support/chatBackend.d.ts +6 -0
- package/dist/support/chatBackend.d.ts.map +1 -1
- package/dist/support/chatBackend.js +105 -83
- package/dist/support/chatBackend.js.map +1 -1
- package/dist/support/chatTui.d.ts.map +1 -1
- package/dist/support/chatTui.js +217 -27
- package/dist/support/chatTui.js.map +1 -1
- package/dist/support/colors.d.ts +15 -0
- package/dist/support/colors.d.ts.map +1 -0
- package/dist/support/colors.js +23 -0
- package/dist/support/colors.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +1 -1
- package/dist/support/dashboardHtml.d.ts.map +1 -1
- package/dist/support/dashboardHtml.js +318 -65
- package/dist/support/dashboardHtml.js.map +1 -1
- package/dist/support/planCommand.d.ts +17 -0
- package/dist/support/planCommand.d.ts.map +1 -0
- package/dist/support/planCommand.js +114 -0
- package/dist/support/planCommand.js.map +1 -0
- package/dist/support/planner.d.ts +9 -2
- package/dist/support/planner.d.ts.map +1 -1
- package/dist/support/planner.js +43 -111
- package/dist/support/planner.js.map +1 -1
- package/dist/support/projectMapper.d.ts.map +1 -1
- package/dist/support/projectMapper.js +29 -1
- package/dist/support/projectMapper.js.map +1 -1
- package/dist/support/promptHelper.d.ts +24 -0
- package/dist/support/promptHelper.d.ts.map +1 -0
- package/dist/support/promptHelper.js +94 -0
- package/dist/support/promptHelper.js.map +1 -0
- package/dist/support/rateLimiter.d.ts.map +1 -1
- package/dist/support/rateLimiter.js +6 -0
- package/dist/support/rateLimiter.js.map +1 -1
- package/dist/support/repoMetadata.d.ts +51 -0
- package/dist/support/repoMetadata.d.ts.map +1 -0
- package/dist/support/repoMetadata.js +91 -0
- package/dist/support/repoMetadata.js.map +1 -0
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +196 -71
- package/dist/support/web.js.map +1 -1
- package/dist/support/worktreeManager.d.ts +6 -1
- package/dist/support/worktreeManager.d.ts.map +1 -1
- package/dist/support/worktreeManager.js +23 -1
- package/dist/support/worktreeManager.js.map +1 -1
- package/dist/taskState/store.d.ts +1 -0
- package/dist/taskState/store.d.ts.map +1 -1
- package/dist/taskState/store.js +22 -1
- package/dist/taskState/store.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthPkce.js","sourceRoot":"","sources":["../../src/auth/oauthPkce.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,kCAAkC;AAClC,mCAAmC;AACnC,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,iBAAiB,CAAC;AAErE,YAAY;AAEZ,MAAM,oBAAoB,GAAG,yCAAyC,CAAC;AACvE,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AACpE,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"oauthPkce.js","sourceRoot":"","sources":["../../src/auth/oauthPkce.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
export interface AuthProfile {
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* oauth: short-lived access_token + refresh_token (e.g. ChatGPT Codex)
|
|
4
|
+
* apiKey: long-lived bearer token, no refresh flow (e.g. OpenRouter sk-or-*)
|
|
5
|
+
*/
|
|
6
|
+
type: 'oauth' | 'apiKey';
|
|
3
7
|
provider: string;
|
|
4
8
|
access: string;
|
|
9
|
+
/** Empty string when `type === 'apiKey'` (no refresh available). */
|
|
5
10
|
refresh: string;
|
|
11
|
+
/**
|
|
12
|
+
* ms timestamp at which `access` expires.
|
|
13
|
+
* For `type === 'apiKey'` this is set to Number.MAX_SAFE_INTEGER (never expires).
|
|
14
|
+
*/
|
|
6
15
|
expires: number;
|
|
16
|
+
/** OAuth client_id for the issuer. Empty string for plain API keys. */
|
|
7
17
|
clientId: string;
|
|
8
18
|
accountId?: string;
|
|
9
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthStore.d.ts","sourceRoot":"","sources":["../../src/auth/oauthStore.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"oauthStore.d.ts","sourceRoot":"","sources":["../../src/auth/oauthStore.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAkB;;IAM9B,OAAO,CAAC,IAAI;IAYZ,IAAI,IAAI,IAAI;IASZ,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAI3C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAKnD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOnC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;CAG5C;AAID;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDnG"}
|
package/dist/auth/oauthStore.js
CHANGED
|
@@ -10,6 +10,12 @@ const STORE_DIR = join(homedir(), '.openswarm');
|
|
|
10
10
|
const STORE_PATH = join(STORE_DIR, 'auth-profiles.json');
|
|
11
11
|
const REFRESH_BUFFER_MS = 5 * 60 * 1000; // 5분 전에 갱신
|
|
12
12
|
const OPENAI_TOKEN_ENDPOINT = 'https://auth.openai.com/oauth/token';
|
|
13
|
+
const LINEAR_TOKEN_ENDPOINT = 'https://api.linear.app/oauth/token';
|
|
14
|
+
/** OAuth refresh token endpoints by provider. */
|
|
15
|
+
const TOKEN_ENDPOINTS = {
|
|
16
|
+
'openai-gpt': OPENAI_TOKEN_ENDPOINT,
|
|
17
|
+
linear: LINEAR_TOKEN_ENDPOINT,
|
|
18
|
+
};
|
|
13
19
|
// AuthProfileStore
|
|
14
20
|
export class AuthProfileStore {
|
|
15
21
|
data;
|
|
@@ -63,6 +69,10 @@ export async function ensureValidToken(store, profileKey) {
|
|
|
63
69
|
if (!profile) {
|
|
64
70
|
throw new Error(`Auth profile "${profileKey}" not found. Run: openswarm auth login --provider gpt`);
|
|
65
71
|
}
|
|
72
|
+
// API keys never expire and have no refresh flow.
|
|
73
|
+
if (profile.type === 'apiKey') {
|
|
74
|
+
return profile.access;
|
|
75
|
+
}
|
|
66
76
|
const now = Date.now();
|
|
67
77
|
if (now < profile.expires - REFRESH_BUFFER_MS) {
|
|
68
78
|
return profile.access;
|
|
@@ -74,14 +84,16 @@ export async function ensureValidToken(store, profileKey) {
|
|
|
74
84
|
refresh_token: profile.refresh,
|
|
75
85
|
client_id: profile.clientId,
|
|
76
86
|
});
|
|
77
|
-
const
|
|
87
|
+
const endpoint = TOKEN_ENDPOINTS[profile.provider] ?? OPENAI_TOKEN_ENDPOINT;
|
|
88
|
+
const res = await fetch(endpoint, {
|
|
78
89
|
method: 'POST',
|
|
79
90
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
80
91
|
body: body.toString(),
|
|
81
92
|
});
|
|
82
93
|
if (!res.ok) {
|
|
83
94
|
const errText = await res.text().catch(() => '');
|
|
84
|
-
|
|
95
|
+
const reauth = profile.provider === 'linear' ? 'linear' : 'gpt';
|
|
96
|
+
throw new Error(`Token refresh failed (${res.status}): ${errText.slice(0, 200)}. Run: openswarm auth login --provider ${reauth}`);
|
|
85
97
|
}
|
|
86
98
|
const tokens = (await res.json());
|
|
87
99
|
profile.access = tokens.access_token;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauthStore.js","sourceRoot":"","sources":["../../src/auth/oauthStore.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,gCAAgC;AAChC,qDAAqD;AACrD,+CAA+C;AAE/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"oauthStore.js","sourceRoot":"","sources":["../../src/auth/oauthStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const PROFILE_KEY = "openrouter:default";
|
|
2
|
+
export interface OpenRouterFlowResult {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface OpenRouterFlowOptions {
|
|
7
|
+
port?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* OpenRouter PKCE 흐름 실행.
|
|
11
|
+
*
|
|
12
|
+
* 1. PKCE verifier/challenge 생성
|
|
13
|
+
* 2. https://openrouter.ai/auth?callback_url=...&code_challenge=...&code_challenge_method=S256 로 브라우저 오픈
|
|
14
|
+
* 3. 로컬 콜백 서버에서 ?code=... 수신
|
|
15
|
+
* 4. POST /api/v1/auth/keys 로 교환 → 영구 sk-or-* API key
|
|
16
|
+
*
|
|
17
|
+
* OpenAI 흐름과 달리 refresh token 개념이 없다 — 받은 키를 그대로 저장한다.
|
|
18
|
+
*/
|
|
19
|
+
export declare function runOpenRouterPkceFlow(options?: OpenRouterFlowOptions): Promise<OpenRouterFlowResult>;
|
|
20
|
+
/**
|
|
21
|
+
* OpenRouter API key를 직접 받아 저장 (PKCE fallback).
|
|
22
|
+
* `sk-or-` 접두사만 가볍게 검증한다.
|
|
23
|
+
*/
|
|
24
|
+
export declare function saveOpenRouterApiKey(apiKey: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* 전체 PKCE 흐름 + 저장
|
|
27
|
+
*/
|
|
28
|
+
export declare function loginAndSaveOpenRouterProfile(port?: number): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=openrouterPkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouterPkce.d.ts","sourceRoot":"","sources":["../../src/auth/openrouterPkce.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,WAAW,uBAAyB,CAAC;AAmClD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAiI/B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAsBzD;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhF"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - OpenRouter PKCE Flow
|
|
3
|
+
// Browser-based login that exchanges an authorization code
|
|
4
|
+
// for a user-controlled `sk-or-*` API key.
|
|
5
|
+
// ============================================
|
|
6
|
+
import { createServer } from 'node:http';
|
|
7
|
+
import { randomBytes, createHash } from 'node:crypto';
|
|
8
|
+
import { exec } from 'node:child_process';
|
|
9
|
+
import { AuthProfileStore } from './oauthStore.js';
|
|
10
|
+
// ----- Constants -----
|
|
11
|
+
const OPENROUTER_AUTH_ENDPOINT = 'https://openrouter.ai/auth';
|
|
12
|
+
const OPENROUTER_KEYS_ENDPOINT = 'https://openrouter.ai/api/v1/auth/keys';
|
|
13
|
+
const DEFAULT_CALLBACK_PORT = 1456; // distinct from the OpenAI flow (1455)
|
|
14
|
+
const LOGIN_TIMEOUT_MS = 120_000;
|
|
15
|
+
const OPENROUTER_PROFILE_KEY = 'openrouter:default';
|
|
16
|
+
export const PROFILE_KEY = OPENROUTER_PROFILE_KEY;
|
|
17
|
+
// ----- PKCE helpers (same shape as oauthPkce.ts) -----
|
|
18
|
+
function generateCodeVerifier() {
|
|
19
|
+
return randomBytes(96).toString('base64url');
|
|
20
|
+
}
|
|
21
|
+
function generateCodeChallenge(verifier) {
|
|
22
|
+
return createHash('sha256').update(verifier).digest('base64url');
|
|
23
|
+
}
|
|
24
|
+
function generateState() {
|
|
25
|
+
return randomBytes(32).toString('hex');
|
|
26
|
+
}
|
|
27
|
+
// ----- Browser open (cross-platform) -----
|
|
28
|
+
function openBrowser(url) {
|
|
29
|
+
const platform = process.platform;
|
|
30
|
+
const cmd = platform === 'darwin' ? 'open' :
|
|
31
|
+
platform === 'win32' ? 'start' :
|
|
32
|
+
'xdg-open';
|
|
33
|
+
exec(`${cmd} "${url}"`, (err) => {
|
|
34
|
+
if (err) {
|
|
35
|
+
console.error(`[Auth] 브라우저를 자동으로 열 수 없습니다. 직접 열어주세요:`);
|
|
36
|
+
console.error(url);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* OpenRouter PKCE 흐름 실행.
|
|
42
|
+
*
|
|
43
|
+
* 1. PKCE verifier/challenge 생성
|
|
44
|
+
* 2. https://openrouter.ai/auth?callback_url=...&code_challenge=...&code_challenge_method=S256 로 브라우저 오픈
|
|
45
|
+
* 3. 로컬 콜백 서버에서 ?code=... 수신
|
|
46
|
+
* 4. POST /api/v1/auth/keys 로 교환 → 영구 sk-or-* API key
|
|
47
|
+
*
|
|
48
|
+
* OpenAI 흐름과 달리 refresh token 개념이 없다 — 받은 키를 그대로 저장한다.
|
|
49
|
+
*/
|
|
50
|
+
export async function runOpenRouterPkceFlow(options = {}) {
|
|
51
|
+
const { port = DEFAULT_CALLBACK_PORT } = options;
|
|
52
|
+
const callbackUrl = `http://127.0.0.1:${port}/auth/callback`;
|
|
53
|
+
const codeVerifier = generateCodeVerifier();
|
|
54
|
+
const codeChallenge = generateCodeChallenge(codeVerifier);
|
|
55
|
+
// OpenRouter does not echo back `state`, but we still keep it locally
|
|
56
|
+
// so we can detect tampered callbacks (the URL pattern requires us to send it).
|
|
57
|
+
const state = generateState();
|
|
58
|
+
const authParams = new URLSearchParams({
|
|
59
|
+
callback_url: callbackUrl,
|
|
60
|
+
code_challenge: codeChallenge,
|
|
61
|
+
code_challenge_method: 'S256',
|
|
62
|
+
state,
|
|
63
|
+
});
|
|
64
|
+
const authUrl = `${OPENROUTER_AUTH_ENDPOINT}?${authParams.toString()}`;
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
let settled = false;
|
|
67
|
+
const timeout = setTimeout(() => {
|
|
68
|
+
if (!settled) {
|
|
69
|
+
settled = true;
|
|
70
|
+
server.close();
|
|
71
|
+
reject(new Error('OpenRouter login timed out (120s). 다시 시도하세요.'));
|
|
72
|
+
}
|
|
73
|
+
}, LOGIN_TIMEOUT_MS);
|
|
74
|
+
const server = createServer(async (req, res) => {
|
|
75
|
+
if (settled) {
|
|
76
|
+
res.writeHead(400);
|
|
77
|
+
res.end();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const url = new URL(req.url ?? '/', `http://127.0.0.1:${port}`);
|
|
81
|
+
if (url.pathname !== '/auth/callback') {
|
|
82
|
+
res.writeHead(404);
|
|
83
|
+
res.end('Not found');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const code = url.searchParams.get('code');
|
|
87
|
+
const error = url.searchParams.get('error');
|
|
88
|
+
if (error) {
|
|
89
|
+
settled = true;
|
|
90
|
+
clearTimeout(timeout);
|
|
91
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
92
|
+
res.end(errorHtml(error));
|
|
93
|
+
server.close();
|
|
94
|
+
reject(new Error(`OpenRouter OAuth error: ${error}`));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!code) {
|
|
98
|
+
settled = true;
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
101
|
+
res.end(errorHtml('Missing authorization code'));
|
|
102
|
+
server.close();
|
|
103
|
+
reject(new Error('Invalid OpenRouter callback: missing code'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const exchangeRes = await fetch(OPENROUTER_KEYS_ENDPOINT, {
|
|
108
|
+
method: 'POST',
|
|
109
|
+
headers: { 'Content-Type': 'application/json' },
|
|
110
|
+
body: JSON.stringify({
|
|
111
|
+
code,
|
|
112
|
+
code_verifier: codeVerifier,
|
|
113
|
+
code_challenge_method: 'S256',
|
|
114
|
+
}),
|
|
115
|
+
});
|
|
116
|
+
if (!exchangeRes.ok) {
|
|
117
|
+
const errText = await exchangeRes.text().catch(() => '');
|
|
118
|
+
throw new Error(`Key exchange failed (${exchangeRes.status}): ${errText.slice(0, 300)}`);
|
|
119
|
+
}
|
|
120
|
+
const payload = (await exchangeRes.json());
|
|
121
|
+
if (!payload.key) {
|
|
122
|
+
throw new Error('OpenRouter key exchange response missing "key" field');
|
|
123
|
+
}
|
|
124
|
+
const result = {
|
|
125
|
+
apiKey: payload.key,
|
|
126
|
+
userId: payload.user_id ?? undefined,
|
|
127
|
+
};
|
|
128
|
+
settled = true;
|
|
129
|
+
clearTimeout(timeout);
|
|
130
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
131
|
+
res.end(successHtml());
|
|
132
|
+
server.close();
|
|
133
|
+
resolve(result);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
settled = true;
|
|
137
|
+
clearTimeout(timeout);
|
|
138
|
+
res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
139
|
+
res.end(errorHtml(String(err)));
|
|
140
|
+
server.close();
|
|
141
|
+
reject(err);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
server.listen(port, '127.0.0.1', () => {
|
|
145
|
+
console.log(`[Auth] Callback server listening on http://127.0.0.1:${port}`);
|
|
146
|
+
console.log(`[Auth] 브라우저에서 OpenRouter 로그인 페이지를 엽니다...`);
|
|
147
|
+
openBrowser(authUrl);
|
|
148
|
+
});
|
|
149
|
+
server.on('error', (err) => {
|
|
150
|
+
if (!settled) {
|
|
151
|
+
settled = true;
|
|
152
|
+
clearTimeout(timeout);
|
|
153
|
+
reject(new Error(`Callback server error: ${err.message}`));
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* OpenRouter API key를 직접 받아 저장 (PKCE fallback).
|
|
160
|
+
* `sk-or-` 접두사만 가볍게 검증한다.
|
|
161
|
+
*/
|
|
162
|
+
export function saveOpenRouterApiKey(apiKey) {
|
|
163
|
+
const trimmed = apiKey.trim();
|
|
164
|
+
if (!trimmed) {
|
|
165
|
+
throw new Error('Empty API key');
|
|
166
|
+
}
|
|
167
|
+
if (!trimmed.startsWith('sk-or-')) {
|
|
168
|
+
throw new Error('OpenRouter API keys start with "sk-or-". Get one from https://openrouter.ai/keys');
|
|
169
|
+
}
|
|
170
|
+
const profile = {
|
|
171
|
+
type: 'apiKey',
|
|
172
|
+
provider: 'openrouter',
|
|
173
|
+
access: trimmed,
|
|
174
|
+
refresh: '',
|
|
175
|
+
expires: Number.MAX_SAFE_INTEGER,
|
|
176
|
+
clientId: '',
|
|
177
|
+
};
|
|
178
|
+
const store = new AuthProfileStore();
|
|
179
|
+
store.setProfile(OPENROUTER_PROFILE_KEY, profile);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 전체 PKCE 흐름 + 저장
|
|
183
|
+
*/
|
|
184
|
+
export async function loginAndSaveOpenRouterProfile(port) {
|
|
185
|
+
const result = await runOpenRouterPkceFlow({ port });
|
|
186
|
+
const profile = {
|
|
187
|
+
type: 'apiKey',
|
|
188
|
+
provider: 'openrouter',
|
|
189
|
+
access: result.apiKey,
|
|
190
|
+
refresh: '',
|
|
191
|
+
expires: Number.MAX_SAFE_INTEGER,
|
|
192
|
+
clientId: '',
|
|
193
|
+
accountId: result.userId,
|
|
194
|
+
};
|
|
195
|
+
const store = new AuthProfileStore();
|
|
196
|
+
store.setProfile(OPENROUTER_PROFILE_KEY, profile);
|
|
197
|
+
console.log(`[Auth] OpenRouter 인증 완료. 프로필 저장됨: ${OPENROUTER_PROFILE_KEY}`);
|
|
198
|
+
if (result.userId) {
|
|
199
|
+
console.log(`[Auth] User ID: ${result.userId}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ----- HTML templates -----
|
|
203
|
+
function successHtml() {
|
|
204
|
+
return `<!DOCTYPE html>
|
|
205
|
+
<html><head><meta charset="utf-8"><title>OpenSwarm Auth</title>
|
|
206
|
+
<style>body{font-family:system-ui;display:flex;justify-content:center;align-items:center;height:100vh;margin:0;background:#f0fdf4}
|
|
207
|
+
.card{text-align:center;padding:2rem;border-radius:12px;background:white;box-shadow:0 2px 8px rgba(0,0,0,0.1)}
|
|
208
|
+
h1{color:#16a34a;margin-bottom:0.5rem}p{color:#666}</style></head>
|
|
209
|
+
<body><div class="card"><h1>✓ 인증 완료</h1><p>OpenSwarm에 OpenRouter 인증이 완료되었습니다.<br>이 창을 닫아도 됩니다.</p></div></body></html>`;
|
|
210
|
+
}
|
|
211
|
+
function errorHtml(error) {
|
|
212
|
+
return `<!DOCTYPE html>
|
|
213
|
+
<html><head><meta charset="utf-8"><title>OpenSwarm Auth Error</title>
|
|
214
|
+
<style>body{font-family:system-ui;display:flex;justify-content:center;align-items:center;height:100vh;margin:0;background:#fef2f2}
|
|
215
|
+
.card{text-align:center;padding:2rem;border-radius:12px;background:white;box-shadow:0 2px 8px rgba(0,0,0,0.1)}
|
|
216
|
+
h1{color:#dc2626;margin-bottom:0.5rem}p{color:#666}code{background:#f3f4f6;padding:0.2rem 0.5rem;border-radius:4px;font-size:0.9rem}</style></head>
|
|
217
|
+
<body><div class="card"><h1>✗ 인증 실패</h1><p>${escapeHtml(error)}</p><p>터미널에서 다시 시도하세요.</p></div></body></html>`;
|
|
218
|
+
}
|
|
219
|
+
function escapeHtml(s) {
|
|
220
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=openrouterPkce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouterPkce.js","sourceRoot":"","sources":["../../src/auth/openrouterPkce.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ProjectInfo } from './runnerState.js';
|
|
2
2
|
import type { AutonomousConfig, RunnerState } from './runnerTypes.js';
|
|
3
3
|
import type { AdapterName } from '../adapters/types.js';
|
|
4
|
-
export {
|
|
4
|
+
export { setNotifier, setTaskSource } from './runnerExecution.js';
|
|
5
5
|
export type { AutonomousConfig, RunnerState } from './runnerTypes.js';
|
|
6
6
|
export type { ProjectInfo } from './runnerState.js';
|
|
7
7
|
export declare class AutonomousRunner {
|
|
@@ -39,7 +39,17 @@ export declare class AutonomousRunner {
|
|
|
39
39
|
constructor(config: AutonomousConfig);
|
|
40
40
|
private setupSchedulerEvents;
|
|
41
41
|
private filterAlreadyProcessed;
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Trigger the next heartbeat as soon as possible.
|
|
44
|
+
*
|
|
45
|
+
* Historically this used a "pace-aware cooldown" that grew quadratically
|
|
46
|
+
* with daily completion count (ratio² × 3 multiplier) on top of a 30-minute
|
|
47
|
+
* baseline — the swarm would slow itself down dramatically after a few
|
|
48
|
+
* tasks. That was removed by user request: the cron schedule
|
|
49
|
+
* (`config.heartbeatSchedule`) is now the only knob, and between cron
|
|
50
|
+
* ticks we re-fire immediately when a task wraps up so the next backlog
|
|
51
|
+
* item starts without artificial dead time.
|
|
52
|
+
*/
|
|
43
53
|
private _nextHeartbeatTimer;
|
|
44
54
|
private scheduleNextHeartbeat;
|
|
45
55
|
private runAvailableTasks;
|
|
@@ -83,24 +93,24 @@ export declare class AutonomousRunner {
|
|
|
83
93
|
getTurboMode(): boolean;
|
|
84
94
|
setTurboMode(enabled: boolean): void;
|
|
85
95
|
getAdapterSummary(): {
|
|
86
|
-
defaultAdapter: "local" | "
|
|
96
|
+
defaultAdapter: "local" | "codex" | "codex-responses" | "gpt" | "lmstudio" | "openrouter";
|
|
87
97
|
worker: {
|
|
88
|
-
adapter: "local" | "
|
|
98
|
+
adapter: "local" | "codex" | "codex-responses" | "gpt" | "lmstudio" | "openrouter";
|
|
89
99
|
model: string;
|
|
90
100
|
enabled: boolean;
|
|
91
101
|
};
|
|
92
102
|
reviewer: {
|
|
93
|
-
adapter: "local" | "
|
|
103
|
+
adapter: "local" | "codex" | "codex-responses" | "gpt" | "lmstudio" | "openrouter";
|
|
94
104
|
model: string;
|
|
95
105
|
enabled: boolean;
|
|
96
106
|
};
|
|
97
107
|
tester: {
|
|
98
|
-
adapter: "local" | "
|
|
108
|
+
adapter: "local" | "codex" | "codex-responses" | "gpt" | "lmstudio" | "openrouter";
|
|
99
109
|
model: string;
|
|
100
110
|
enabled: boolean;
|
|
101
111
|
} | undefined;
|
|
102
112
|
documenter: {
|
|
103
|
-
adapter: "local" | "
|
|
113
|
+
adapter: "local" | "codex" | "codex-responses" | "gpt" | "lmstudio" | "openrouter";
|
|
104
114
|
model: string;
|
|
105
115
|
enabled: boolean;
|
|
106
116
|
} | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autonomousRunner.d.ts","sourceRoot":"","sources":["../../src/automation/autonomousRunner.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"autonomousRunner.d.ts","sourceRoot":"","sources":["../../src/automation/autonomousRunner.ts"],"names":[],"mappings":"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"}
|