octo-vec 1.0.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 +646 -0
- package/core/prompts/architect.md +124 -0
- package/core/prompts/ba.md +117 -0
- package/core/prompts/backend.md +154 -0
- package/core/prompts/compliance.md +127 -0
- package/core/prompts/dataanalyst.md +126 -0
- package/core/prompts/dataengineer.md +155 -0
- package/core/prompts/dba.md +155 -0
- package/core/prompts/designer.md +145 -0
- package/core/prompts/dev.md +148 -0
- package/core/prompts/devops.md +127 -0
- package/core/prompts/frontend.md +151 -0
- package/core/prompts/mlengineer.md +156 -0
- package/core/prompts/mobile.md +155 -0
- package/core/prompts/pm.md +182 -0
- package/core/prompts/productowner.md +122 -0
- package/core/prompts/qa.md +135 -0
- package/core/prompts/releasemanager.md +138 -0
- package/core/prompts/researcher.md +122 -0
- package/core/prompts/scrummaster.md +125 -0
- package/core/prompts/security.md +127 -0
- package/core/prompts/sre.md +141 -0
- package/core/prompts/support.md +138 -0
- package/core/prompts/techwriter.md +123 -0
- package/core/roster.json +1161 -0
- package/dashboard/dist/assets/index--L-aFRgh.css +1 -0
- package/dashboard/dist/assets/index-BoOVmAFf.js +523 -0
- package/dashboard/dist/icons/integrations/gitleaks.svg +6 -0
- package/dashboard/dist/icons/integrations/searxng.svg +5 -0
- package/dashboard/dist/icons/integrations/semgrep.svg +4 -0
- package/dashboard/dist/icons/integrations/slack.svg +6 -0
- package/dashboard/dist/icons/integrations/sonarqube.svg +5 -0
- package/dashboard/dist/icons/integrations/telegram.svg +4 -0
- package/dashboard/dist/icons/integrations/trivy.svg +5 -0
- package/dashboard/dist/icons/providers/anthropic.svg +1 -0
- package/dashboard/dist/icons/providers/antigravity.svg +1 -0
- package/dashboard/dist/icons/providers/azure.svg +1 -0
- package/dashboard/dist/icons/providers/bedrock.svg +1 -0
- package/dashboard/dist/icons/providers/cerebras.svg +1 -0
- package/dashboard/dist/icons/providers/chatglm.svg +1 -0
- package/dashboard/dist/icons/providers/codex.svg +1 -0
- package/dashboard/dist/icons/providers/gemini.svg +1 -0
- package/dashboard/dist/icons/providers/githubcopilot.svg +1 -0
- package/dashboard/dist/icons/providers/googlecloud.svg +1 -0
- package/dashboard/dist/icons/providers/groq.svg +1 -0
- package/dashboard/dist/icons/providers/huggingface.svg +1 -0
- package/dashboard/dist/icons/providers/kimi.svg +1 -0
- package/dashboard/dist/icons/providers/minimax.svg +1 -0
- package/dashboard/dist/icons/providers/mistral.svg +1 -0
- package/dashboard/dist/icons/providers/openai.svg +1 -0
- package/dashboard/dist/icons/providers/openrouter.svg +1 -0
- package/dashboard/dist/icons/providers/vercel.svg +1 -0
- package/dashboard/dist/icons/providers/xai.svg +1 -0
- package/dashboard/dist/index.html +17 -0
- package/dist/agents/pmAgent.d.ts +40 -0
- package/dist/agents/pmAgent.d.ts.map +1 -0
- package/dist/agents/pmAgent.js +181 -0
- package/dist/agents/pmAgent.js.map +1 -0
- package/dist/ar/baseSpecialist.d.ts +36 -0
- package/dist/ar/baseSpecialist.d.ts.map +1 -0
- package/dist/ar/baseSpecialist.js +292 -0
- package/dist/ar/baseSpecialist.js.map +1 -0
- package/dist/ar/promptLoader.d.ts +10 -0
- package/dist/ar/promptLoader.d.ts.map +1 -0
- package/dist/ar/promptLoader.js +22 -0
- package/dist/ar/promptLoader.js.map +1 -0
- package/dist/ar/registry.d.ts +12 -0
- package/dist/ar/registry.d.ts.map +1 -0
- package/dist/ar/registry.js +22 -0
- package/dist/ar/registry.js.map +1 -0
- package/dist/ar/roster.d.ts +104 -0
- package/dist/ar/roster.d.ts.map +1 -0
- package/dist/ar/roster.js +245 -0
- package/dist/ar/roster.js.map +1 -0
- package/dist/ar/toolProfiles.d.ts +18 -0
- package/dist/ar/toolProfiles.d.ts.map +1 -0
- package/dist/ar/toolProfiles.js +89 -0
- package/dist/ar/toolProfiles.js.map +1 -0
- package/dist/atp/agentGroups.d.ts +39 -0
- package/dist/atp/agentGroups.d.ts.map +1 -0
- package/dist/atp/agentGroups.js +109 -0
- package/dist/atp/agentGroups.js.map +1 -0
- package/dist/atp/agentInterrupt.d.ts +31 -0
- package/dist/atp/agentInterrupt.d.ts.map +1 -0
- package/dist/atp/agentInterrupt.js +51 -0
- package/dist/atp/agentInterrupt.js.map +1 -0
- package/dist/atp/agentMessageQueue.d.ts +74 -0
- package/dist/atp/agentMessageQueue.d.ts.map +1 -0
- package/dist/atp/agentMessageQueue.js +218 -0
- package/dist/atp/agentMessageQueue.js.map +1 -0
- package/dist/atp/agentRuntime.d.ts +67 -0
- package/dist/atp/agentRuntime.d.ts.map +1 -0
- package/dist/atp/agentRuntime.js +279 -0
- package/dist/atp/agentRuntime.js.map +1 -0
- package/dist/atp/agentStreamBus.d.ts +35 -0
- package/dist/atp/agentStreamBus.d.ts.map +1 -0
- package/dist/atp/agentStreamBus.js +159 -0
- package/dist/atp/agentStreamBus.js.map +1 -0
- package/dist/atp/agentToolConfig.d.ts +38 -0
- package/dist/atp/agentToolConfig.d.ts.map +1 -0
- package/dist/atp/agentToolConfig.js +225 -0
- package/dist/atp/agentToolConfig.js.map +1 -0
- package/dist/atp/chatLog.d.ts +34 -0
- package/dist/atp/chatLog.d.ts.map +1 -0
- package/dist/atp/chatLog.js +59 -0
- package/dist/atp/chatLog.js.map +1 -0
- package/dist/atp/codexAuth.d.ts +6 -0
- package/dist/atp/codexAuth.d.ts.map +1 -0
- package/dist/atp/codexAuth.js +44 -0
- package/dist/atp/codexAuth.js.map +1 -0
- package/dist/atp/database.d.ts +54 -0
- package/dist/atp/database.d.ts.map +1 -0
- package/dist/atp/database.js +323 -0
- package/dist/atp/database.js.map +1 -0
- package/dist/atp/eventLog.d.ts +12 -0
- package/dist/atp/eventLog.d.ts.map +1 -0
- package/dist/atp/eventLog.js +60 -0
- package/dist/atp/eventLog.js.map +1 -0
- package/dist/atp/inboxLoop.d.ts +72 -0
- package/dist/atp/inboxLoop.d.ts.map +1 -0
- package/dist/atp/inboxLoop.js +482 -0
- package/dist/atp/inboxLoop.js.map +1 -0
- package/dist/atp/llmDebug.d.ts +18 -0
- package/dist/atp/llmDebug.d.ts.map +1 -0
- package/dist/atp/llmDebug.js +97 -0
- package/dist/atp/llmDebug.js.map +1 -0
- package/dist/atp/messageDebouncer.d.ts +34 -0
- package/dist/atp/messageDebouncer.d.ts.map +1 -0
- package/dist/atp/messageDebouncer.js +60 -0
- package/dist/atp/messageDebouncer.js.map +1 -0
- package/dist/atp/messageQueue.d.ts +17 -0
- package/dist/atp/messageQueue.d.ts.map +1 -0
- package/dist/atp/messageQueue.js +69 -0
- package/dist/atp/messageQueue.js.map +1 -0
- package/dist/atp/modelConfig.d.ts +46 -0
- package/dist/atp/modelConfig.d.ts.map +1 -0
- package/dist/atp/modelConfig.js +232 -0
- package/dist/atp/modelConfig.js.map +1 -0
- package/dist/atp/models.d.ts +87 -0
- package/dist/atp/models.d.ts.map +1 -0
- package/dist/atp/models.js +45 -0
- package/dist/atp/models.js.map +1 -0
- package/dist/atp/postTaskHooks.d.ts +21 -0
- package/dist/atp/postTaskHooks.d.ts.map +1 -0
- package/dist/atp/postTaskHooks.js +89 -0
- package/dist/atp/postTaskHooks.js.map +1 -0
- package/dist/atp/tokenTracker.d.ts +46 -0
- package/dist/atp/tokenTracker.d.ts.map +1 -0
- package/dist/atp/tokenTracker.js +120 -0
- package/dist/atp/tokenTracker.js.map +1 -0
- package/dist/channels/activeChannel.d.ts +14 -0
- package/dist/channels/activeChannel.d.ts.map +1 -0
- package/dist/channels/activeChannel.js +18 -0
- package/dist/channels/activeChannel.js.map +1 -0
- package/dist/channels/channelConfig.d.ts +61 -0
- package/dist/channels/channelConfig.d.ts.map +1 -0
- package/dist/channels/channelConfig.js +130 -0
- package/dist/channels/channelConfig.js.map +1 -0
- package/dist/channels/channelManager.d.ts +22 -0
- package/dist/channels/channelManager.d.ts.map +1 -0
- package/dist/channels/channelManager.js +77 -0
- package/dist/channels/channelManager.js.map +1 -0
- package/dist/channels/discord.d.ts +24 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +276 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/slack.d.ts +25 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +313 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/telegram.d.ts +20 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +273 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/types.d.ts +12 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +5 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/config.d.ts +82 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +144 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/security.d.ts +68 -0
- package/dist/dashboard/security.d.ts.map +1 -0
- package/dist/dashboard/security.js +178 -0
- package/dist/dashboard/security.js.map +1 -0
- package/dist/dashboard/securityHelpers.d.ts +10 -0
- package/dist/dashboard/securityHelpers.d.ts.map +1 -0
- package/dist/dashboard/securityHelpers.js +22 -0
- package/dist/dashboard/securityHelpers.js.map +1 -0
- package/dist/dashboard/server.d.ts +18 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +3207 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/flows/codeScanFlow.d.ts +14 -0
- package/dist/flows/codeScanFlow.d.ts.map +1 -0
- package/dist/flows/codeScanFlow.js +204 -0
- package/dist/flows/codeScanFlow.js.map +1 -0
- package/dist/flows/gitleaksScanFlow.d.ts +12 -0
- package/dist/flows/gitleaksScanFlow.d.ts.map +1 -0
- package/dist/flows/gitleaksScanFlow.js +205 -0
- package/dist/flows/gitleaksScanFlow.js.map +1 -0
- package/dist/flows/index.d.ts +30 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +43 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/semgrepScanFlow.d.ts +13 -0
- package/dist/flows/semgrepScanFlow.d.ts.map +1 -0
- package/dist/flows/semgrepScanFlow.js +211 -0
- package/dist/flows/semgrepScanFlow.js.map +1 -0
- package/dist/flows/trivyScanFlow.d.ts +13 -0
- package/dist/flows/trivyScanFlow.d.ts.map +1 -0
- package/dist/flows/trivyScanFlow.js +198 -0
- package/dist/flows/trivyScanFlow.js.map +1 -0
- package/dist/identity.d.ts +22 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +34 -0
- package/dist/identity.js.map +1 -0
- package/dist/init.d.ts +8 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +27 -0
- package/dist/init.js.map +1 -0
- package/dist/integrations/integrationConfig.d.ts +80 -0
- package/dist/integrations/integrationConfig.d.ts.map +1 -0
- package/dist/integrations/integrationConfig.js +146 -0
- package/dist/integrations/integrationConfig.js.map +1 -0
- package/dist/mcp/mcpBridge.d.ts +36 -0
- package/dist/mcp/mcpBridge.d.ts.map +1 -0
- package/dist/mcp/mcpBridge.js +157 -0
- package/dist/mcp/mcpBridge.js.map +1 -0
- package/dist/memory/agentMemory.d.ts +32 -0
- package/dist/memory/agentMemory.d.ts.map +1 -0
- package/dist/memory/agentMemory.js +116 -0
- package/dist/memory/agentMemory.js.map +1 -0
- package/dist/memory/autoCompaction.d.ts +46 -0
- package/dist/memory/autoCompaction.d.ts.map +1 -0
- package/dist/memory/autoCompaction.js +220 -0
- package/dist/memory/autoCompaction.js.map +1 -0
- package/dist/memory/compaction.d.ts +17 -0
- package/dist/memory/compaction.d.ts.map +1 -0
- package/dist/memory/compaction.js +27 -0
- package/dist/memory/compaction.js.map +1 -0
- package/dist/memory/messageHistory.d.ts +28 -0
- package/dist/memory/messageHistory.d.ts.map +1 -0
- package/dist/memory/messageHistory.js +60 -0
- package/dist/memory/messageHistory.js.map +1 -0
- package/dist/memory/sessionLifecycle.d.ts +30 -0
- package/dist/memory/sessionLifecycle.d.ts.map +1 -0
- package/dist/memory/sessionLifecycle.js +63 -0
- package/dist/memory/sessionLifecycle.js.map +1 -0
- package/dist/migrate.d.ts +8 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +83 -0
- package/dist/migrate.js.map +1 -0
- package/dist/onboarding.d.ts +8 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +188 -0
- package/dist/onboarding.js.map +1 -0
- package/dist/tools/domain/baFileTools.d.ts +7 -0
- package/dist/tools/domain/baFileTools.d.ts.map +1 -0
- package/dist/tools/domain/baFileTools.js +46 -0
- package/dist/tools/domain/baFileTools.js.map +1 -0
- package/dist/tools/domain/baTools.d.ts +6 -0
- package/dist/tools/domain/baTools.d.ts.map +1 -0
- package/dist/tools/domain/baTools.js +160 -0
- package/dist/tools/domain/baTools.js.map +1 -0
- package/dist/tools/domain/baseSpecialistTools.d.ts +22 -0
- package/dist/tools/domain/baseSpecialistTools.d.ts.map +1 -0
- package/dist/tools/domain/baseSpecialistTools.js +183 -0
- package/dist/tools/domain/baseSpecialistTools.js.map +1 -0
- package/dist/tools/domain/devTools.d.ts +6 -0
- package/dist/tools/domain/devTools.d.ts.map +1 -0
- package/dist/tools/domain/devTools.js +191 -0
- package/dist/tools/domain/devTools.js.map +1 -0
- package/dist/tools/domain/gitTools.d.ts +36 -0
- package/dist/tools/domain/gitTools.d.ts.map +1 -0
- package/dist/tools/domain/gitTools.js +279 -0
- package/dist/tools/domain/gitTools.js.map +1 -0
- package/dist/tools/domain/qaTools.d.ts +6 -0
- package/dist/tools/domain/qaTools.d.ts.map +1 -0
- package/dist/tools/domain/qaTools.js +275 -0
- package/dist/tools/domain/qaTools.js.map +1 -0
- package/dist/tools/domain/securityFlowTools.d.ts +6 -0
- package/dist/tools/domain/securityFlowTools.d.ts.map +1 -0
- package/dist/tools/domain/securityFlowTools.js +156 -0
- package/dist/tools/domain/securityFlowTools.js.map +1 -0
- package/dist/tools/pm/employeeTools.d.ts +15 -0
- package/dist/tools/pm/employeeTools.d.ts.map +1 -0
- package/dist/tools/pm/employeeTools.js +117 -0
- package/dist/tools/pm/employeeTools.js.map +1 -0
- package/dist/tools/pm/taskTools.d.ts +31 -0
- package/dist/tools/pm/taskTools.d.ts.map +1 -0
- package/dist/tools/pm/taskTools.js +534 -0
- package/dist/tools/pm/taskTools.js.map +1 -0
- package/dist/tools/shared/dateTools.d.ts +7 -0
- package/dist/tools/shared/dateTools.d.ts.map +1 -0
- package/dist/tools/shared/dateTools.js +35 -0
- package/dist/tools/shared/dateTools.js.map +1 -0
- package/dist/tools/shared/fileTools.d.ts +33 -0
- package/dist/tools/shared/fileTools.d.ts.map +1 -0
- package/dist/tools/shared/fileTools.js +312 -0
- package/dist/tools/shared/fileTools.js.map +1 -0
- package/dist/tools/shared/memoryTools.d.ts +18 -0
- package/dist/tools/shared/memoryTools.d.ts.map +1 -0
- package/dist/tools/shared/memoryTools.js +275 -0
- package/dist/tools/shared/memoryTools.js.map +1 -0
- package/dist/tools/shared/messagingTools.d.ts +14 -0
- package/dist/tools/shared/messagingTools.d.ts.map +1 -0
- package/dist/tools/shared/messagingTools.js +95 -0
- package/dist/tools/shared/messagingTools.js.map +1 -0
- package/dist/tools/shared/webTools.d.ts +12 -0
- package/dist/tools/shared/webTools.d.ts.map +1 -0
- package/dist/tools/shared/webTools.js +140 -0
- package/dist/tools/shared/webTools.js.map +1 -0
- package/dist/tower.d.ts +8 -0
- package/dist/tower.d.ts.map +1 -0
- package/dist/tower.js +774 -0
- package/dist/tower.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageDebouncer — per-key batching debouncer for inbound user messages.
|
|
3
|
+
*
|
|
4
|
+
* Rapid messages within the debounce window collapse into a single flush.
|
|
5
|
+
* The inbox (peek-based) already accumulates all messages during the window,
|
|
6
|
+
* so the single flush processes the full batch naturally.
|
|
7
|
+
*
|
|
8
|
+
* Priority messages and control commands pass `bypass=true` to flush immediately.
|
|
9
|
+
*/
|
|
10
|
+
export interface DebounceConfig {
|
|
11
|
+
/** Default debounce window in ms. Set to 0 to disable debouncing. Default: 1500. */
|
|
12
|
+
defaultMs: number;
|
|
13
|
+
/** Per-agent overrides, e.g. { pm: 2000, ba: 1000 } */
|
|
14
|
+
byAgent?: Record<string, number>;
|
|
15
|
+
}
|
|
16
|
+
export declare class MessageDebouncer {
|
|
17
|
+
private pending;
|
|
18
|
+
private cfg;
|
|
19
|
+
constructor(cfg: DebounceConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Schedule a debounced flush for `key`.
|
|
22
|
+
* - Resets the timer if one is already pending.
|
|
23
|
+
* - If `bypass=true` (priority / control command), flushes immediately.
|
|
24
|
+
* - If debounce is disabled (ms=0), flushes immediately.
|
|
25
|
+
*/
|
|
26
|
+
schedule(key: string, onFlush: () => void, bypass?: boolean): void;
|
|
27
|
+
/** Immediately flush a pending debounce for `key` (e.g. explicit send button). */
|
|
28
|
+
flush(key: string): void;
|
|
29
|
+
/** Cancel a pending debounce without flushing. */
|
|
30
|
+
cancel(key: string): void;
|
|
31
|
+
/** True if a debounce is currently pending for `key`. */
|
|
32
|
+
hasPending(key: string): boolean;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=messageDebouncer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageDebouncer.d.ts","sourceRoot":"","sources":["../../src/atp/messageDebouncer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAmE;IAClF,OAAO,CAAC,GAAG,CAAiB;gBAEhB,GAAG,EAAE,cAAc;IAI/B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,UAAQ,GAAG,IAAI;IAoBhE,kFAAkF;IAClF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQxB,kDAAkD;IAClD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOzB,yDAAyD;IACzD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGjC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageDebouncer — per-key batching debouncer for inbound user messages.
|
|
3
|
+
*
|
|
4
|
+
* Rapid messages within the debounce window collapse into a single flush.
|
|
5
|
+
* The inbox (peek-based) already accumulates all messages during the window,
|
|
6
|
+
* so the single flush processes the full batch naturally.
|
|
7
|
+
*
|
|
8
|
+
* Priority messages and control commands pass `bypass=true` to flush immediately.
|
|
9
|
+
*/
|
|
10
|
+
export class MessageDebouncer {
|
|
11
|
+
pending = new Map();
|
|
12
|
+
cfg;
|
|
13
|
+
constructor(cfg) {
|
|
14
|
+
this.cfg = cfg;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Schedule a debounced flush for `key`.
|
|
18
|
+
* - Resets the timer if one is already pending.
|
|
19
|
+
* - If `bypass=true` (priority / control command), flushes immediately.
|
|
20
|
+
* - If debounce is disabled (ms=0), flushes immediately.
|
|
21
|
+
*/
|
|
22
|
+
schedule(key, onFlush, bypass = false) {
|
|
23
|
+
const ms = this.cfg.byAgent?.[key] ?? this.cfg.defaultMs;
|
|
24
|
+
if (bypass || ms === 0) {
|
|
25
|
+
this.cancel(key); // clear any pending timer for this key
|
|
26
|
+
onFlush();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const existing = this.pending.get(key);
|
|
30
|
+
if (existing)
|
|
31
|
+
clearTimeout(existing.timer);
|
|
32
|
+
const timer = setTimeout(() => {
|
|
33
|
+
this.pending.delete(key);
|
|
34
|
+
onFlush();
|
|
35
|
+
}, ms);
|
|
36
|
+
this.pending.set(key, { timer, flush: onFlush });
|
|
37
|
+
}
|
|
38
|
+
/** Immediately flush a pending debounce for `key` (e.g. explicit send button). */
|
|
39
|
+
flush(key) {
|
|
40
|
+
const entry = this.pending.get(key);
|
|
41
|
+
if (!entry)
|
|
42
|
+
return;
|
|
43
|
+
clearTimeout(entry.timer);
|
|
44
|
+
this.pending.delete(key);
|
|
45
|
+
entry.flush();
|
|
46
|
+
}
|
|
47
|
+
/** Cancel a pending debounce without flushing. */
|
|
48
|
+
cancel(key) {
|
|
49
|
+
const entry = this.pending.get(key);
|
|
50
|
+
if (!entry)
|
|
51
|
+
return;
|
|
52
|
+
clearTimeout(entry.timer);
|
|
53
|
+
this.pending.delete(key);
|
|
54
|
+
}
|
|
55
|
+
/** True if a debounce is currently pending for `key`. */
|
|
56
|
+
hasPending(key) {
|
|
57
|
+
return this.pending.has(key);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=messageDebouncer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageDebouncer.js","sourceRoot":"","sources":["../../src/atp/messageDebouncer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAAG,IAAI,GAAG,EAAwD,CAAC;IAC1E,GAAG,CAAiB;IAE5B,YAAY,GAAmB;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAW,EAAE,OAAmB,EAAE,MAAM,GAAG,KAAK;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAEzD,IAAI,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,uCAAuC;YACzD,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,GAAW;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAED,kDAAkD;IAClD,MAAM,CAAC,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,yDAAyD;IACzD,UAAU,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON file-backed FIFO message queue for the PM Agent.
|
|
3
|
+
* Agents push messages here; PM reads and pops them when free.
|
|
4
|
+
*/
|
|
5
|
+
import type { Message } from "./models.js";
|
|
6
|
+
export declare const MessageQueue: {
|
|
7
|
+
push(msg: Message): void;
|
|
8
|
+
pushSimple(from_agent: string, task_id: string, message: string, msg_type?: string): void;
|
|
9
|
+
peek(): Message[];
|
|
10
|
+
pop(count?: number): Message[];
|
|
11
|
+
popAll(): Message[];
|
|
12
|
+
isEmpty(): boolean;
|
|
13
|
+
count(): number;
|
|
14
|
+
clear(): void;
|
|
15
|
+
};
|
|
16
|
+
export type MessageQueueType = typeof MessageQueue;
|
|
17
|
+
//# sourceMappingURL=messageQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageQueue.d.ts","sourceRoot":"","sources":["../../src/atp/messageQueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAwB3C,eAAO,MAAM,YAAY;cACb,OAAO,GAAG,IAAI;2BAOV,MAAM,WACT,MAAM,WACN,MAAM,aACL,MAAM,GACf,IAAI;YAUC,OAAO,EAAE;yBAID,OAAO,EAAE;cAQf,OAAO,EAAE;eAOR,OAAO;aAIT,MAAM;aAIN,IAAI;CAGd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,YAAY,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON file-backed FIFO message queue for the PM Agent.
|
|
3
|
+
* Agents push messages here; PM reads and pops them when free.
|
|
4
|
+
*/
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { config } from "../config.js";
|
|
8
|
+
const QUEUE_PATH = path.join(config.dataDir, "pm_queue.json");
|
|
9
|
+
function ensureFile() {
|
|
10
|
+
if (!fs.existsSync(QUEUE_PATH)) {
|
|
11
|
+
fs.mkdirSync(path.dirname(QUEUE_PATH), { recursive: true });
|
|
12
|
+
fs.writeFileSync(QUEUE_PATH, "[]", "utf-8");
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function read() {
|
|
16
|
+
ensureFile();
|
|
17
|
+
const text = fs.readFileSync(QUEUE_PATH, "utf-8").trim();
|
|
18
|
+
if (!text)
|
|
19
|
+
return [];
|
|
20
|
+
return JSON.parse(text);
|
|
21
|
+
}
|
|
22
|
+
function write(data) {
|
|
23
|
+
ensureFile();
|
|
24
|
+
fs.writeFileSync(QUEUE_PATH, JSON.stringify(data, null, 2), "utf-8");
|
|
25
|
+
}
|
|
26
|
+
export const MessageQueue = {
|
|
27
|
+
push(msg) {
|
|
28
|
+
const data = read();
|
|
29
|
+
data.push(msg);
|
|
30
|
+
write(data);
|
|
31
|
+
},
|
|
32
|
+
pushSimple(from_agent, task_id, message, msg_type = "status_update") {
|
|
33
|
+
this.push({
|
|
34
|
+
from_agent,
|
|
35
|
+
task_id,
|
|
36
|
+
type: msg_type,
|
|
37
|
+
message,
|
|
38
|
+
timestamp: new Date().toISOString(),
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
peek() {
|
|
42
|
+
return read();
|
|
43
|
+
},
|
|
44
|
+
pop(count = 1) {
|
|
45
|
+
const data = read();
|
|
46
|
+
if (!data.length)
|
|
47
|
+
return [];
|
|
48
|
+
const popped = data.splice(0, count);
|
|
49
|
+
write(data);
|
|
50
|
+
return popped;
|
|
51
|
+
},
|
|
52
|
+
popAll() {
|
|
53
|
+
const data = read();
|
|
54
|
+
if (!data.length)
|
|
55
|
+
return [];
|
|
56
|
+
write([]);
|
|
57
|
+
return data;
|
|
58
|
+
},
|
|
59
|
+
isEmpty() {
|
|
60
|
+
return read().length === 0;
|
|
61
|
+
},
|
|
62
|
+
count() {
|
|
63
|
+
return read().length;
|
|
64
|
+
},
|
|
65
|
+
clear() {
|
|
66
|
+
write([]);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=messageQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageQueue.js","sourceRoot":"","sources":["../../src/atp/messageQueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAE9D,SAAS,UAAU;IACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,UAAU,EAAE,CAAC;IACb,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;AACvC,CAAC;AAED,SAAS,KAAK,CAAC,IAAe;IAC5B,UAAU,EAAE,CAAC;IACb,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,CAAC,GAAY;QACf,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,UAAU,CACR,UAAkB,EAClB,OAAe,EACf,OAAe,EACf,WAAmB,eAAe;QAElC,IAAI,CAAC,IAAI,CAAC;YACR,UAAU;YACV,OAAO;YACP,IAAI,EAAE,QAAuB;YAC7B,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAK,GAAG,CAAC;QACX,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,KAAK;QACH,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModelConfig — per-agent model overrides and provider priority management.
|
|
3
|
+
*
|
|
4
|
+
* Reads ALL providers and models from @mariozechner/pi-ai's generated registry.
|
|
5
|
+
* Persists to data/model-config.json. Agents without overrides use the
|
|
6
|
+
* primary model (from config/env). Supports primary/secondary/fallback tiers.
|
|
7
|
+
*/
|
|
8
|
+
export interface ProviderInfo {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
configured: boolean;
|
|
12
|
+
envKey: string;
|
|
13
|
+
models: string[];
|
|
14
|
+
iconUrl: string;
|
|
15
|
+
}
|
|
16
|
+
/** Build the full provider list dynamically from pi-ai's model registry. */
|
|
17
|
+
export declare function getProviders(): ProviderInfo[];
|
|
18
|
+
export interface ModelSlot {
|
|
19
|
+
provider: string;
|
|
20
|
+
model: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ModelConfigStore {
|
|
23
|
+
primary: ModelSlot;
|
|
24
|
+
secondary: ModelSlot | null;
|
|
25
|
+
fallback: ModelSlot | null;
|
|
26
|
+
agentModels: Record<string, ModelSlot>;
|
|
27
|
+
}
|
|
28
|
+
export declare function getModelConfig(): ModelConfigStore;
|
|
29
|
+
export declare function setModelConfig(cfg: Partial<ModelConfigStore>): void;
|
|
30
|
+
export declare function setAgentModel(agentId: string, slot: ModelSlot | null): void;
|
|
31
|
+
/** Get the effective model for an agent (override or primary). */
|
|
32
|
+
export declare function getEffectiveModel(agentId: string): ModelSlot;
|
|
33
|
+
export declare function resetModelConfig(): void;
|
|
34
|
+
/** Inject stored API keys into process.env so getEnvApiKey() picks them up. */
|
|
35
|
+
export declare function injectStoredApiKeys(): void;
|
|
36
|
+
/** Set (or clear) a provider API key — persists to disk and injects into env. */
|
|
37
|
+
export declare function setProviderApiKey(providerId: string, apiKey: string): void;
|
|
38
|
+
/** Return a masked version of a stored key (for UI display), or null if none. */
|
|
39
|
+
export declare function getProviderKeyMask(providerId: string): string | null;
|
|
40
|
+
/** Look up per-model cost rates (USD per 1M tokens) from the pi-ai registry. */
|
|
41
|
+
export declare function getModelCostRates(provider: string, modelId: string): {
|
|
42
|
+
inputPerM: number;
|
|
43
|
+
outputPerM: number;
|
|
44
|
+
cacheReadPerM: number;
|
|
45
|
+
} | null;
|
|
46
|
+
//# sourceMappingURL=modelConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelConfig.d.ts","sourceRoot":"","sources":["../../src/atp/modelConfig.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8FH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAgB7C;AAID,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACxC;AAuCD,wBAAgB,cAAc,IAAI,gBAAgB,CAEjD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAMnE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAO3E;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE5D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAaD,+EAA+E;AAC/E,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAe1E;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IACpE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;CAC9D,GAAG,IAAI,CAIP"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModelConfig — per-agent model overrides and provider priority management.
|
|
3
|
+
*
|
|
4
|
+
* Reads ALL providers and models from @mariozechner/pi-ai's generated registry.
|
|
5
|
+
* Persists to data/model-config.json. Agents without overrides use the
|
|
6
|
+
* primary model (from config/env). Supports primary/secondary/fallback tiers.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { config } from "../config.js";
|
|
11
|
+
// pi-ai's generated model registry — the single source of truth
|
|
12
|
+
import { MODELS } from "@mariozechner/pi-ai/dist/models.generated.js";
|
|
13
|
+
import { getEnvApiKey } from "@mariozechner/pi-ai/dist/env-api-keys.js";
|
|
14
|
+
const CONFIG_PATH = join(config.dataDir, "model-config.json");
|
|
15
|
+
const KEYS_PATH = join(config.dataDir, "api-keys.json");
|
|
16
|
+
// ── Provider display names ──────────────────────────────────────────────────
|
|
17
|
+
const PROVIDER_LABELS = {
|
|
18
|
+
"amazon-bedrock": "Amazon Bedrock",
|
|
19
|
+
anthropic: "Anthropic",
|
|
20
|
+
"azure-openai-responses": "Azure OpenAI",
|
|
21
|
+
cerebras: "Cerebras",
|
|
22
|
+
"github-copilot": "GitHub Copilot",
|
|
23
|
+
google: "Google Gemini",
|
|
24
|
+
"google-antigravity": "Google Antigravity",
|
|
25
|
+
"google-gemini-cli": "Gemini CLI",
|
|
26
|
+
"google-vertex": "Google Vertex AI",
|
|
27
|
+
groq: "Groq",
|
|
28
|
+
huggingface: "Hugging Face",
|
|
29
|
+
"kimi-coding": "Kimi Coding",
|
|
30
|
+
minimax: "MiniMax",
|
|
31
|
+
"minimax-cn": "MiniMax CN",
|
|
32
|
+
mistral: "Mistral",
|
|
33
|
+
openai: "OpenAI",
|
|
34
|
+
"openai-codex": "OpenAI Codex",
|
|
35
|
+
opencode: "OpenCode",
|
|
36
|
+
openrouter: "OpenRouter",
|
|
37
|
+
"vercel-ai-gateway": "Vercel AI Gateway",
|
|
38
|
+
xai: "xAI (Grok)",
|
|
39
|
+
zai: "ZhipuAI (GLM)",
|
|
40
|
+
};
|
|
41
|
+
// Env var hints for display in the UI (matches pi-ai's getEnvApiKey)
|
|
42
|
+
const ENV_KEY_HINTS = {
|
|
43
|
+
"amazon-bedrock": "AWS_ACCESS_KEY_ID",
|
|
44
|
+
anthropic: "ANTHROPIC_API_KEY",
|
|
45
|
+
"azure-openai-responses": "AZURE_OPENAI_API_KEY",
|
|
46
|
+
cerebras: "CEREBRAS_API_KEY",
|
|
47
|
+
"github-copilot": "GITHUB_TOKEN",
|
|
48
|
+
google: "GEMINI_API_KEY",
|
|
49
|
+
"google-antigravity": "GEMINI_API_KEY",
|
|
50
|
+
"google-gemini-cli": "GEMINI_API_KEY",
|
|
51
|
+
"google-vertex": "GOOGLE_APPLICATION_CREDENTIALS",
|
|
52
|
+
groq: "GROQ_API_KEY",
|
|
53
|
+
huggingface: "HF_TOKEN",
|
|
54
|
+
"kimi-coding": "KIMI_API_KEY",
|
|
55
|
+
minimax: "MINIMAX_API_KEY",
|
|
56
|
+
"minimax-cn": "MINIMAX_CN_API_KEY",
|
|
57
|
+
mistral: "MISTRAL_API_KEY",
|
|
58
|
+
openai: "OPENAI_API_KEY",
|
|
59
|
+
"openai-codex": "OPENAI_API_KEY",
|
|
60
|
+
opencode: "OPENCODE_API_KEY",
|
|
61
|
+
openrouter: "OPENROUTER_API_KEY",
|
|
62
|
+
"vercel-ai-gateway": "AI_GATEWAY_API_KEY",
|
|
63
|
+
xai: "XAI_API_KEY",
|
|
64
|
+
zai: "ZAI_API_KEY",
|
|
65
|
+
};
|
|
66
|
+
// ── Provider icons (local assets from lobe-icons) ───────────────────────────
|
|
67
|
+
const PROVIDER_ICONS = {
|
|
68
|
+
"amazon-bedrock": "bedrock",
|
|
69
|
+
anthropic: "anthropic",
|
|
70
|
+
"azure-openai-responses": "azure",
|
|
71
|
+
cerebras: "cerebras",
|
|
72
|
+
"github-copilot": "githubcopilot",
|
|
73
|
+
google: "gemini",
|
|
74
|
+
"google-antigravity": "antigravity",
|
|
75
|
+
"google-gemini-cli": "gemini",
|
|
76
|
+
"google-vertex": "googlecloud",
|
|
77
|
+
groq: "groq",
|
|
78
|
+
huggingface: "huggingface",
|
|
79
|
+
"kimi-coding": "kimi",
|
|
80
|
+
minimax: "minimax",
|
|
81
|
+
"minimax-cn": "minimax",
|
|
82
|
+
mistral: "mistral",
|
|
83
|
+
openai: "openai",
|
|
84
|
+
"openai-codex": "codex",
|
|
85
|
+
opencode: "openai",
|
|
86
|
+
openrouter: "openrouter",
|
|
87
|
+
"vercel-ai-gateway": "vercel",
|
|
88
|
+
xai: "xai",
|
|
89
|
+
zai: "chatglm",
|
|
90
|
+
};
|
|
91
|
+
/** Build the full provider list dynamically from pi-ai's model registry. */
|
|
92
|
+
export function getProviders() {
|
|
93
|
+
const providerIds = Object.keys(MODELS);
|
|
94
|
+
return providerIds.map((id) => {
|
|
95
|
+
const modelsMap = MODELS[id] ?? {};
|
|
96
|
+
const modelIds = Object.keys(modelsMap);
|
|
97
|
+
const configured = !!getEnvApiKey(id);
|
|
98
|
+
const slug = PROVIDER_ICONS[id] ?? id;
|
|
99
|
+
return {
|
|
100
|
+
id,
|
|
101
|
+
name: PROVIDER_LABELS[id] ?? id,
|
|
102
|
+
configured,
|
|
103
|
+
envKey: ENV_KEY_HINTS[id] ?? "",
|
|
104
|
+
models: modelIds,
|
|
105
|
+
iconUrl: `/icons/providers/${slug}.svg`,
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// ── Load / Save ──────────────────────────────────────────────────────────────
|
|
110
|
+
function defaultConfig() {
|
|
111
|
+
return {
|
|
112
|
+
primary: { provider: config.modelProvider, model: config.model },
|
|
113
|
+
secondary: null,
|
|
114
|
+
fallback: null,
|
|
115
|
+
agentModels: {},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
let store = loadConfig();
|
|
119
|
+
function loadConfig() {
|
|
120
|
+
try {
|
|
121
|
+
if (existsSync(CONFIG_PATH)) {
|
|
122
|
+
const raw = JSON.parse(readFileSync(CONFIG_PATH, "utf-8"));
|
|
123
|
+
return {
|
|
124
|
+
primary: raw.primary ?? { provider: config.modelProvider, model: config.model },
|
|
125
|
+
secondary: raw.secondary ?? null,
|
|
126
|
+
fallback: raw.fallback ?? null,
|
|
127
|
+
agentModels: raw.agentModels ?? {},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch { /* ignore */ }
|
|
132
|
+
return defaultConfig();
|
|
133
|
+
}
|
|
134
|
+
function saveConfig() {
|
|
135
|
+
try {
|
|
136
|
+
mkdirSync(config.dataDir, { recursive: true });
|
|
137
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(store, null, 2));
|
|
138
|
+
}
|
|
139
|
+
catch { /* best-effort */ }
|
|
140
|
+
}
|
|
141
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
142
|
+
export function getModelConfig() {
|
|
143
|
+
return store;
|
|
144
|
+
}
|
|
145
|
+
export function setModelConfig(cfg) {
|
|
146
|
+
if (cfg.primary)
|
|
147
|
+
store.primary = cfg.primary;
|
|
148
|
+
if (cfg.secondary !== undefined)
|
|
149
|
+
store.secondary = cfg.secondary;
|
|
150
|
+
if (cfg.fallback !== undefined)
|
|
151
|
+
store.fallback = cfg.fallback;
|
|
152
|
+
if (cfg.agentModels !== undefined)
|
|
153
|
+
store.agentModels = cfg.agentModels;
|
|
154
|
+
saveConfig();
|
|
155
|
+
}
|
|
156
|
+
export function setAgentModel(agentId, slot) {
|
|
157
|
+
if (slot) {
|
|
158
|
+
store.agentModels[agentId] = slot;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
delete store.agentModels[agentId];
|
|
162
|
+
}
|
|
163
|
+
saveConfig();
|
|
164
|
+
}
|
|
165
|
+
/** Get the effective model for an agent (override or primary). */
|
|
166
|
+
export function getEffectiveModel(agentId) {
|
|
167
|
+
return store.agentModels[agentId] ?? store.primary;
|
|
168
|
+
}
|
|
169
|
+
export function resetModelConfig() {
|
|
170
|
+
store = defaultConfig();
|
|
171
|
+
saveConfig();
|
|
172
|
+
}
|
|
173
|
+
// ── API Key store ─────────────────────────────────────────────────────────────
|
|
174
|
+
function loadApiKeys() {
|
|
175
|
+
try {
|
|
176
|
+
if (existsSync(KEYS_PATH)) {
|
|
177
|
+
return JSON.parse(readFileSync(KEYS_PATH, "utf-8"));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch { /* ignore */ }
|
|
181
|
+
return {};
|
|
182
|
+
}
|
|
183
|
+
/** Inject stored API keys into process.env so getEnvApiKey() picks them up. */
|
|
184
|
+
export function injectStoredApiKeys() {
|
|
185
|
+
const keys = loadApiKeys();
|
|
186
|
+
for (const [provider, key] of Object.entries(keys)) {
|
|
187
|
+
const envVar = ENV_KEY_HINTS[provider];
|
|
188
|
+
if (envVar && key) {
|
|
189
|
+
process.env[envVar] = key;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Set (or clear) a provider API key — persists to disk and injects into env. */
|
|
194
|
+
export function setProviderApiKey(providerId, apiKey) {
|
|
195
|
+
const keys = loadApiKeys();
|
|
196
|
+
const envVar = ENV_KEY_HINTS[providerId];
|
|
197
|
+
if (!envVar)
|
|
198
|
+
return;
|
|
199
|
+
if (apiKey) {
|
|
200
|
+
keys[providerId] = apiKey;
|
|
201
|
+
process.env[envVar] = apiKey;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
delete keys[providerId];
|
|
205
|
+
delete process.env[envVar];
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
mkdirSync(config.dataDir, { recursive: true });
|
|
209
|
+
writeFileSync(KEYS_PATH, JSON.stringify(keys, null, 2));
|
|
210
|
+
}
|
|
211
|
+
catch { /* best-effort */ }
|
|
212
|
+
}
|
|
213
|
+
/** Return a masked version of a stored key (for UI display), or null if none. */
|
|
214
|
+
export function getProviderKeyMask(providerId) {
|
|
215
|
+
const keys = loadApiKeys();
|
|
216
|
+
const key = keys[providerId];
|
|
217
|
+
if (!key)
|
|
218
|
+
return null;
|
|
219
|
+
if (key.length <= 8)
|
|
220
|
+
return "****";
|
|
221
|
+
return key.slice(0, 4) + "..." + key.slice(-4);
|
|
222
|
+
}
|
|
223
|
+
/** Look up per-model cost rates (USD per 1M tokens) from the pi-ai registry. */
|
|
224
|
+
export function getModelCostRates(provider, modelId) {
|
|
225
|
+
const m = MODELS[provider]?.[modelId];
|
|
226
|
+
if (!m?.cost)
|
|
227
|
+
return null;
|
|
228
|
+
return { inputPerM: m.cost.input, outputPerM: m.cost.output, cacheReadPerM: m.cost.cacheRead ?? 0 };
|
|
229
|
+
}
|
|
230
|
+
// Inject stored keys on module load (before config is used)
|
|
231
|
+
injectStoredApiKeys();
|
|
232
|
+
//# sourceMappingURL=modelConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelConfig.js","sourceRoot":"","sources":["../../src/atp/modelConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core data models for the Agent Task Portal (ATP).
|
|
3
|
+
*/
|
|
4
|
+
export declare enum TaskStatus {
|
|
5
|
+
PENDING = "pending",
|
|
6
|
+
IN_PROGRESS = "in_progress",
|
|
7
|
+
COMPLETED = "completed",
|
|
8
|
+
FAILED = "failed",
|
|
9
|
+
CANCELLED = "cancelled"
|
|
10
|
+
}
|
|
11
|
+
export declare enum Priority {
|
|
12
|
+
HIGH = "high",
|
|
13
|
+
MEDIUM = "medium",
|
|
14
|
+
LOW = "low"
|
|
15
|
+
}
|
|
16
|
+
export declare enum MessageType {
|
|
17
|
+
STATUS_UPDATE = "status_update",
|
|
18
|
+
ERROR = "error",
|
|
19
|
+
INFO = "info"
|
|
20
|
+
}
|
|
21
|
+
export declare enum EmployeeStatus {
|
|
22
|
+
AVAILABLE = "available",
|
|
23
|
+
BUSY = "busy",
|
|
24
|
+
OFFLINE = "offline"
|
|
25
|
+
}
|
|
26
|
+
export interface Task {
|
|
27
|
+
task_id: string;
|
|
28
|
+
description: string;
|
|
29
|
+
agent_id: string;
|
|
30
|
+
priority: Priority;
|
|
31
|
+
status: TaskStatus;
|
|
32
|
+
folder_access: string;
|
|
33
|
+
scheduled_date: string;
|
|
34
|
+
created_at: string;
|
|
35
|
+
updated_at: string;
|
|
36
|
+
result: string;
|
|
37
|
+
}
|
|
38
|
+
export interface Message {
|
|
39
|
+
from_agent: string;
|
|
40
|
+
task_id: string;
|
|
41
|
+
type: MessageType;
|
|
42
|
+
message: string;
|
|
43
|
+
timestamp: string;
|
|
44
|
+
}
|
|
45
|
+
export interface Employee {
|
|
46
|
+
employee_id: string;
|
|
47
|
+
agent_id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
designation: string;
|
|
50
|
+
department: string;
|
|
51
|
+
hierarchy_level: number;
|
|
52
|
+
reports_to: string;
|
|
53
|
+
status: EmployeeStatus;
|
|
54
|
+
skills: string;
|
|
55
|
+
joined_at: string;
|
|
56
|
+
}
|
|
57
|
+
export interface AgentMessage {
|
|
58
|
+
from_agent: string;
|
|
59
|
+
to_agent: string;
|
|
60
|
+
task_id: string;
|
|
61
|
+
priority: "normal" | "priority";
|
|
62
|
+
message: string;
|
|
63
|
+
timestamp: string;
|
|
64
|
+
}
|
|
65
|
+
export declare enum EventType {
|
|
66
|
+
TASK_CREATED = "task_created",
|
|
67
|
+
TASK_STARTED = "task_started",
|
|
68
|
+
TASK_IN_PROGRESS = "task_in_progress",
|
|
69
|
+
TASK_COMPLETED = "task_completed",
|
|
70
|
+
TASK_FAILED = "task_failed",
|
|
71
|
+
AGENT_THINKING = "agent_thinking",
|
|
72
|
+
AGENT_TOOL_CALL = "agent_tool_call",
|
|
73
|
+
PM_READING_QUEUE = "pm_reading_queue",
|
|
74
|
+
PM_DELEGATING = "pm_delegating",
|
|
75
|
+
MESSAGE_SENT = "message_sent",
|
|
76
|
+
USER_INPUT = "user_input",
|
|
77
|
+
SCAN_COMPLETED = "scan_completed"
|
|
78
|
+
}
|
|
79
|
+
export interface Event {
|
|
80
|
+
timestamp: string;
|
|
81
|
+
event_type: EventType;
|
|
82
|
+
agent_id: string;
|
|
83
|
+
task_id: string;
|
|
84
|
+
message: string;
|
|
85
|
+
details: string;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/atp/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,aAAa,kBAAkB;IAC/B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oBAAY,SAAS;IACnB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,cAAc,mBAAmB;CAClC;AAED,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core data models for the Agent Task Portal (ATP).
|
|
3
|
+
*/
|
|
4
|
+
export var TaskStatus;
|
|
5
|
+
(function (TaskStatus) {
|
|
6
|
+
TaskStatus["PENDING"] = "pending";
|
|
7
|
+
TaskStatus["IN_PROGRESS"] = "in_progress";
|
|
8
|
+
TaskStatus["COMPLETED"] = "completed";
|
|
9
|
+
TaskStatus["FAILED"] = "failed";
|
|
10
|
+
TaskStatus["CANCELLED"] = "cancelled";
|
|
11
|
+
})(TaskStatus || (TaskStatus = {}));
|
|
12
|
+
export var Priority;
|
|
13
|
+
(function (Priority) {
|
|
14
|
+
Priority["HIGH"] = "high";
|
|
15
|
+
Priority["MEDIUM"] = "medium";
|
|
16
|
+
Priority["LOW"] = "low";
|
|
17
|
+
})(Priority || (Priority = {}));
|
|
18
|
+
export var MessageType;
|
|
19
|
+
(function (MessageType) {
|
|
20
|
+
MessageType["STATUS_UPDATE"] = "status_update";
|
|
21
|
+
MessageType["ERROR"] = "error";
|
|
22
|
+
MessageType["INFO"] = "info";
|
|
23
|
+
})(MessageType || (MessageType = {}));
|
|
24
|
+
export var EmployeeStatus;
|
|
25
|
+
(function (EmployeeStatus) {
|
|
26
|
+
EmployeeStatus["AVAILABLE"] = "available";
|
|
27
|
+
EmployeeStatus["BUSY"] = "busy";
|
|
28
|
+
EmployeeStatus["OFFLINE"] = "offline";
|
|
29
|
+
})(EmployeeStatus || (EmployeeStatus = {}));
|
|
30
|
+
export var EventType;
|
|
31
|
+
(function (EventType) {
|
|
32
|
+
EventType["TASK_CREATED"] = "task_created";
|
|
33
|
+
EventType["TASK_STARTED"] = "task_started";
|
|
34
|
+
EventType["TASK_IN_PROGRESS"] = "task_in_progress";
|
|
35
|
+
EventType["TASK_COMPLETED"] = "task_completed";
|
|
36
|
+
EventType["TASK_FAILED"] = "task_failed";
|
|
37
|
+
EventType["AGENT_THINKING"] = "agent_thinking";
|
|
38
|
+
EventType["AGENT_TOOL_CALL"] = "agent_tool_call";
|
|
39
|
+
EventType["PM_READING_QUEUE"] = "pm_reading_queue";
|
|
40
|
+
EventType["PM_DELEGATING"] = "pm_delegating";
|
|
41
|
+
EventType["MESSAGE_SENT"] = "message_sent";
|
|
42
|
+
EventType["USER_INPUT"] = "user_input";
|
|
43
|
+
EventType["SCAN_COMPLETED"] = "scan_completed";
|
|
44
|
+
})(EventType || (EventType = {}));
|
|
45
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/atp/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,yCAA2B,CAAA;IAC3B,qCAAuB,CAAA;IACvB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;AACzB,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB;AAED,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,6BAAiB,CAAA;IACjB,uBAAW,CAAA;AACb,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8CAA+B,CAAA;IAC/B,8BAAe,CAAA;IACf,4BAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AA6CD,MAAM,CAAN,IAAY,SAaX;AAbD,WAAY,SAAS;IACnB,0CAA6B,CAAA;IAC7B,0CAA6B,CAAA;IAC7B,kDAAqC,CAAA;IACrC,8CAAiC,CAAA;IACjC,wCAA2B,CAAA;IAC3B,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,4CAA+B,CAAA;IAC/B,0CAA6B,CAAA;IAC7B,sCAAyB,CAAA;IACzB,8CAAiC,CAAA;AACnC,CAAC,EAbW,SAAS,KAAT,SAAS,QAapB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-task hooks — automated security scans that run after coding tasks complete.
|
|
3
|
+
*
|
|
4
|
+
* When a coding agent finishes a task and auto-commits, these hooks fire:
|
|
5
|
+
* 1. secret-scan (Gitleaks) — detect leaked credentials
|
|
6
|
+
* 2. sast-scan (Semgrep) — static application security testing
|
|
7
|
+
* 3. sca-scan (Trivy) — dependency vulnerability scanning
|
|
8
|
+
* 4. code-scan (SonarQube) — only if SONAR_TOKEN is configured
|
|
9
|
+
*
|
|
10
|
+
* Results are sent to the QA agent's inbox as a structured report.
|
|
11
|
+
* Scans run sequentially to avoid Docker resource contention.
|
|
12
|
+
* Failures are logged but never crash the agent runtime.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Run all configured post-task security scans against a project directory.
|
|
16
|
+
* Sends a summary report to the QA agent's inbox.
|
|
17
|
+
*
|
|
18
|
+
* This function is fire-and-forget — callers should `.catch()` the promise.
|
|
19
|
+
*/
|
|
20
|
+
export declare function runPostTaskScans(taskId: string, agentId: string, projectDir: string): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=postTaskHooks.d.ts.map
|