@copilot-swarm/core 0.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/defaults/swarm.config.yaml +62 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +124 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +22 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +32 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +36 -0
- package/dist/logger.js.map +1 -0
- package/dist/messages.d.ts +47 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +57 -0
- package/dist/messages.js.map +1 -0
- package/dist/orchestrator.d.ts +14 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +19 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/pipeline-config.d.ts +8 -0
- package/dist/pipeline-config.d.ts.map +1 -0
- package/dist/pipeline-config.js +230 -0
- package/dist/pipeline-config.js.map +1 -0
- package/dist/pipeline-config.test.d.ts +2 -0
- package/dist/pipeline-config.test.d.ts.map +1 -0
- package/dist/pipeline-config.test.js +132 -0
- package/dist/pipeline-config.test.js.map +1 -0
- package/dist/pipeline-engine.d.ts +20 -0
- package/dist/pipeline-engine.d.ts.map +1 -0
- package/dist/pipeline-engine.js +230 -0
- package/dist/pipeline-engine.js.map +1 -0
- package/dist/pipeline-types.d.ts +67 -0
- package/dist/pipeline-types.d.ts.map +1 -0
- package/dist/pipeline-types.js +7 -0
- package/dist/pipeline-types.js.map +1 -0
- package/dist/planning-engine.d.ts +15 -0
- package/dist/planning-engine.d.ts.map +1 -0
- package/dist/planning-engine.js +129 -0
- package/dist/planning-engine.js.map +1 -0
- package/dist/session.d.ts +26 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +110 -0
- package/dist/session.js.map +1 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +40 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +66 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-engine.js","sourceRoot":"","sources":["../src/pipeline-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declarative pipeline configuration types.
|
|
3
|
+
* Defines the shape of `swarm.config.yaml` — the single file that controls
|
|
4
|
+
* which agents exist, how they connect, and in what order phases execute.
|
|
5
|
+
*/
|
|
6
|
+
/** Source for agent instructions: "builtin:<name>" or a file path. */
|
|
7
|
+
export type AgentSource = string;
|
|
8
|
+
/** A single review step within a phase. */
|
|
9
|
+
export interface ReviewStepConfig {
|
|
10
|
+
readonly agent: string;
|
|
11
|
+
readonly maxIterations: number;
|
|
12
|
+
readonly approvalKeyword: string;
|
|
13
|
+
readonly clarificationKeyword?: string;
|
|
14
|
+
readonly clarificationAgent?: string;
|
|
15
|
+
}
|
|
16
|
+
/** QA step within an implement phase. */
|
|
17
|
+
export interface QaStepConfig {
|
|
18
|
+
readonly agent: string;
|
|
19
|
+
readonly maxIterations: number;
|
|
20
|
+
readonly approvalKeyword: string;
|
|
21
|
+
}
|
|
22
|
+
/** Phase: specification drafting with reviews. */
|
|
23
|
+
export interface SpecPhaseConfig {
|
|
24
|
+
readonly phase: "spec";
|
|
25
|
+
readonly agent: string;
|
|
26
|
+
readonly reviews: readonly ReviewStepConfig[];
|
|
27
|
+
}
|
|
28
|
+
/** Phase: task decomposition. */
|
|
29
|
+
export interface DecomposePhaseConfig {
|
|
30
|
+
readonly phase: "decompose";
|
|
31
|
+
readonly agent: string;
|
|
32
|
+
readonly frontendMarker: string;
|
|
33
|
+
}
|
|
34
|
+
/** Phase: design (conditional on frontend tasks). */
|
|
35
|
+
export interface DesignPhaseConfig {
|
|
36
|
+
readonly phase: "design";
|
|
37
|
+
readonly condition?: string;
|
|
38
|
+
readonly agent: string;
|
|
39
|
+
readonly clarificationAgent?: string;
|
|
40
|
+
readonly reviews: readonly ReviewStepConfig[];
|
|
41
|
+
}
|
|
42
|
+
/** Phase: implementation per task. */
|
|
43
|
+
export interface ImplementPhaseConfig {
|
|
44
|
+
readonly phase: "implement";
|
|
45
|
+
readonly parallel: boolean;
|
|
46
|
+
readonly agent: string;
|
|
47
|
+
readonly reviews: readonly ReviewStepConfig[];
|
|
48
|
+
readonly qa?: QaStepConfig;
|
|
49
|
+
}
|
|
50
|
+
/** Phase: cross-model review. */
|
|
51
|
+
export interface CrossModelReviewPhaseConfig {
|
|
52
|
+
readonly phase: "cross-model-review";
|
|
53
|
+
readonly condition?: string;
|
|
54
|
+
readonly agent: string;
|
|
55
|
+
readonly fixAgent: string;
|
|
56
|
+
readonly maxIterations: number;
|
|
57
|
+
readonly approvalKeyword: string;
|
|
58
|
+
}
|
|
59
|
+
export type PhaseConfig = SpecPhaseConfig | DecomposePhaseConfig | DesignPhaseConfig | ImplementPhaseConfig | CrossModelReviewPhaseConfig;
|
|
60
|
+
/** Root configuration loaded from `swarm.config.yaml`. */
|
|
61
|
+
export interface PipelineConfig {
|
|
62
|
+
readonly primaryModel: string;
|
|
63
|
+
readonly reviewModel: string;
|
|
64
|
+
readonly agents: Readonly<Record<string, AgentSource>>;
|
|
65
|
+
readonly pipeline: readonly PhaseConfig[];
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=pipeline-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-types.d.ts","sourceRoot":"","sources":["../src/pipeline-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,iCAAiC;AACjC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,sCAAsC;AACtC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED,iCAAiC;AACjC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,2BAA2B,CAAC;AAEhC,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-types.js","sourceRoot":"","sources":["../src/pipeline-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SwarmConfig } from "./config.js";
|
|
2
|
+
import type { Logger } from "./logger.js";
|
|
3
|
+
import type { PipelineConfig } from "./pipeline-types.js";
|
|
4
|
+
export declare class PlanningEngine {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly sessions;
|
|
8
|
+
constructor(config: SwarmConfig, pipeline: PipelineConfig, logger: Logger);
|
|
9
|
+
start(): Promise<void>;
|
|
10
|
+
stop(): Promise<void>;
|
|
11
|
+
execute(): Promise<void>;
|
|
12
|
+
private clarifyRequirements;
|
|
13
|
+
private analyzeCodebase;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=planning-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-engine.d.ts","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAuC1D,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;gBAGvB,MAAM,EAAE,WAAW,EACpC,QAAQ,EAAE,cAAc,EACP,MAAM,EAAE,MAAM;IAK3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAgChB,mBAAmB;YAiDnB,eAAe;CAkB9B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as readline from "node:readline/promises";
|
|
4
|
+
import { ResponseKeyword } from "./constants.js";
|
|
5
|
+
import { msg } from "./messages.js";
|
|
6
|
+
import { SessionManager } from "./session.js";
|
|
7
|
+
import { responseContains } from "./utils.js";
|
|
8
|
+
const MAX_CLARIFICATION_ROUNDS = 10;
|
|
9
|
+
const PLANNER_INSTRUCTIONS = `You are a Senior Product Manager conducting a requirements clarification session with a user.
|
|
10
|
+
Your goal is to fully understand the user's request before any engineering work begins.
|
|
11
|
+
|
|
12
|
+
**Rules:**
|
|
13
|
+
1. Read the user's request carefully. Use \`list_dir\` and \`read_file\` to understand the existing project structure if it helps you ask better questions.
|
|
14
|
+
2. If the request is vague or incomplete, ask targeted clarifying questions:
|
|
15
|
+
- Scope boundaries (what's included, what's not)
|
|
16
|
+
- Expected behavior, user flows, and edge cases
|
|
17
|
+
- Technical constraints or preferences
|
|
18
|
+
- Priority and phasing (if the request is large)
|
|
19
|
+
3. Ask at most 3–5 questions at a time. Number them clearly.
|
|
20
|
+
4. After the user answers, assess whether you have enough information. Ask follow-up questions only if genuinely needed.
|
|
21
|
+
5. When you have sufficient clarity to write a complete specification, respond with **REQUIREMENTS_CLEAR** on its own line, followed by a structured summary of the requirements including:
|
|
22
|
+
- Problem statement
|
|
23
|
+
- Acceptance criteria (testable)
|
|
24
|
+
- Technical requirements
|
|
25
|
+
- Edge cases
|
|
26
|
+
- Out-of-scope items`;
|
|
27
|
+
const ANALYST_INSTRUCTIONS = `You are a Senior Software Architect conducting a technical feasibility analysis.
|
|
28
|
+
Given a set of requirements, analyze the codebase and produce a structured assessment.
|
|
29
|
+
|
|
30
|
+
**Rules:**
|
|
31
|
+
1. Use \`list_dir\`, \`read_file\`, and \`run_terminal\` to explore the codebase thoroughly.
|
|
32
|
+
2. Assess and report:
|
|
33
|
+
- **Complexity:** Low / Medium / High — with justification
|
|
34
|
+
- **Affected files/modules:** List every file or module that needs changes
|
|
35
|
+
- **Approach:** Concise description of the implementation strategy
|
|
36
|
+
- **Risks & blockers:** Anything that could cause problems (breaking changes, missing dependencies, performance concerns)
|
|
37
|
+
- **Estimated scope:** Number of files to change, new files to create, tests to write
|
|
38
|
+
3. Be specific. Reference actual file paths and code structures you found in the repo.
|
|
39
|
+
4. Do not implement anything — analysis only.`;
|
|
40
|
+
export class PlanningEngine {
|
|
41
|
+
config;
|
|
42
|
+
logger;
|
|
43
|
+
sessions;
|
|
44
|
+
constructor(config, pipeline, logger) {
|
|
45
|
+
this.config = config;
|
|
46
|
+
this.logger = logger;
|
|
47
|
+
this.sessions = new SessionManager(config, pipeline, logger);
|
|
48
|
+
}
|
|
49
|
+
async start() {
|
|
50
|
+
await this.sessions.start();
|
|
51
|
+
}
|
|
52
|
+
async stop() {
|
|
53
|
+
await this.sessions.stop();
|
|
54
|
+
}
|
|
55
|
+
async execute() {
|
|
56
|
+
this.logger.info(msg.planningStart);
|
|
57
|
+
// Phase 1: PM clarifies requirements interactively
|
|
58
|
+
const spec = await this.clarifyRequirements();
|
|
59
|
+
// Phase 2: Engineering analyst assesses codebase
|
|
60
|
+
const analysis = await this.analyzeCodebase(spec);
|
|
61
|
+
// Assemble and save plan
|
|
62
|
+
const timestamp = new Date().toISOString();
|
|
63
|
+
const fileTimestamp = timestamp.replace(/[:.]/g, "-");
|
|
64
|
+
const plan = `# Plan\n\n**Timestamp:** ${timestamp}\n\n` +
|
|
65
|
+
`## Original Request\n\n${this.config.issueBody}\n\n` +
|
|
66
|
+
`## Refined Requirements\n\n${spec}\n\n` +
|
|
67
|
+
`## Technical Analysis\n\n${analysis}\n`;
|
|
68
|
+
const docPath = path.join(this.config.repoRoot, this.config.docDir);
|
|
69
|
+
await fs.mkdir(docPath, { recursive: true });
|
|
70
|
+
const timestampedPath = path.join(docPath, `plan-${fileTimestamp}.md`);
|
|
71
|
+
const latestPath = path.join(docPath, "plan-latest.md");
|
|
72
|
+
await fs.writeFile(timestampedPath, plan);
|
|
73
|
+
await fs.copyFile(timestampedPath, latestPath);
|
|
74
|
+
this.logger.info(msg.planningComplete);
|
|
75
|
+
this.logger.info(msg.planSaved(path.relative(this.config.repoRoot, timestampedPath)));
|
|
76
|
+
this.logger.info(`📌 Latest plan: ${path.relative(this.config.repoRoot, latestPath)}`);
|
|
77
|
+
this.logger.info(`\n💡 Run the pipeline with: swarm --plan ${path.relative(this.config.repoRoot, latestPath)}`);
|
|
78
|
+
}
|
|
79
|
+
async clarifyRequirements() {
|
|
80
|
+
this.logger.info(msg.planningPmPhase);
|
|
81
|
+
const session = await this.sessions.createSessionWithInstructions(PLANNER_INSTRUCTIONS);
|
|
82
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
83
|
+
try {
|
|
84
|
+
let response = await this.sessions.send(session, `Here is the user's request:\n\n${this.config.issueBody}\n\n` +
|
|
85
|
+
"Analyze this request. If it's clear enough, respond with REQUIREMENTS_CLEAR followed by the structured summary. " +
|
|
86
|
+
"If you need more information, ask your clarifying questions.");
|
|
87
|
+
for (let round = 0; round < MAX_CLARIFICATION_ROUNDS; round++) {
|
|
88
|
+
if (responseContains(response, ResponseKeyword.REQUIREMENTS_CLEAR)) {
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
// Show agent's questions
|
|
92
|
+
console.log(`\n${response}`);
|
|
93
|
+
// Read user's answer
|
|
94
|
+
const answer = await rl.question(msg.planningUserPrompt);
|
|
95
|
+
if (!answer.trim()) {
|
|
96
|
+
response = await this.sessions.send(session, "The user skipped this round. Use your best judgment for any open questions and produce the final requirements. Respond with REQUIREMENTS_CLEAR followed by the structured summary.");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
response = await this.sessions.send(session, `User's answers:\n\n${answer}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Extract everything after REQUIREMENTS_CLEAR keyword
|
|
103
|
+
const marker = "REQUIREMENTS_CLEAR";
|
|
104
|
+
const idx = response.toUpperCase().indexOf(marker);
|
|
105
|
+
const spec = idx !== -1 ? response.substring(idx + marker.length).trim() : response;
|
|
106
|
+
console.log("\n📋 Refined Requirements:\n");
|
|
107
|
+
console.log(spec);
|
|
108
|
+
return spec;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
rl.close();
|
|
112
|
+
await session.destroy();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async analyzeCodebase(spec) {
|
|
116
|
+
this.logger.info(msg.planningEngPhase);
|
|
117
|
+
const session = await this.sessions.createSessionWithInstructions(ANALYST_INSTRUCTIONS);
|
|
118
|
+
try {
|
|
119
|
+
const analysis = await this.sessions.send(session, `Analyze the codebase against these requirements and produce a technical assessment:\n\n${spec}`);
|
|
120
|
+
console.log("\n🔍 Technical Analysis:\n");
|
|
121
|
+
console.log(analysis);
|
|
122
|
+
return analysis;
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
await session.destroy();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=planning-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-engine.js","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CopilotSession } from "@github/copilot-sdk";
|
|
2
|
+
import type { SwarmConfig } from "./config.js";
|
|
3
|
+
import type { Logger } from "./logger.js";
|
|
4
|
+
import type { PipelineConfig } from "./pipeline-types.js";
|
|
5
|
+
export declare class SessionManager {
|
|
6
|
+
private readonly config;
|
|
7
|
+
private readonly pipeline;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly client;
|
|
10
|
+
private readonly instructionCache;
|
|
11
|
+
constructor(config: SwarmConfig, pipeline: PipelineConfig, logger: Logger);
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve agent instructions from the pipeline config's `agents` map.
|
|
16
|
+
* - "builtin:<name>" → load from `.github/agents/<name>.md` (repo agents dir)
|
|
17
|
+
* - File path → load from repo root-relative path
|
|
18
|
+
* - Undefined → fall back to `<agentsDir>/<agentName>.md`
|
|
19
|
+
*/
|
|
20
|
+
loadAgentInstructions(agentName: string): Promise<string>;
|
|
21
|
+
createAgentSession(agentName: string, model?: string): Promise<CopilotSession>;
|
|
22
|
+
createSessionWithInstructions(instructions: string, model?: string): Promise<CopilotSession>;
|
|
23
|
+
send(session: CopilotSession, prompt: string): Promise<string>;
|
|
24
|
+
callIsolated(agentName: string, prompt: string, model?: string): Promise<string>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;gBAG3C,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM;IAO3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK9E,6BAA6B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB5F,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBvF"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { CopilotClient } from "@github/copilot-sdk";
|
|
4
|
+
import { BUILTIN_AGENT_PREFIX, SessionEvent, SYSTEM_MESSAGE_MODE } from "./constants.js";
|
|
5
|
+
import { msg } from "./messages.js";
|
|
6
|
+
export class SessionManager {
|
|
7
|
+
config;
|
|
8
|
+
pipeline;
|
|
9
|
+
logger;
|
|
10
|
+
client;
|
|
11
|
+
instructionCache = new Map();
|
|
12
|
+
constructor(config, pipeline, logger) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.pipeline = pipeline;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.client = new CopilotClient({
|
|
17
|
+
logLevel: config.verbose ? "debug" : "warning",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async start() {
|
|
21
|
+
await this.client.start();
|
|
22
|
+
}
|
|
23
|
+
async stop() {
|
|
24
|
+
await this.client.stop();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve agent instructions from the pipeline config's `agents` map.
|
|
28
|
+
* - "builtin:<name>" → load from `.github/agents/<name>.md` (repo agents dir)
|
|
29
|
+
* - File path → load from repo root-relative path
|
|
30
|
+
* - Undefined → fall back to `<agentsDir>/<agentName>.md`
|
|
31
|
+
*/
|
|
32
|
+
async loadAgentInstructions(agentName) {
|
|
33
|
+
const cached = this.instructionCache.get(agentName);
|
|
34
|
+
if (cached !== undefined)
|
|
35
|
+
return cached;
|
|
36
|
+
const source = this.pipeline.agents[agentName];
|
|
37
|
+
let filePath;
|
|
38
|
+
if (source === undefined) {
|
|
39
|
+
// Fallback: look in the repo's agents dir
|
|
40
|
+
filePath = path.join(this.config.repoRoot, this.config.agentsDir, `${agentName}.md`);
|
|
41
|
+
}
|
|
42
|
+
else if (source.startsWith(BUILTIN_AGENT_PREFIX)) {
|
|
43
|
+
const builtinName = source.slice(BUILTIN_AGENT_PREFIX.length);
|
|
44
|
+
filePath = path.join(this.config.repoRoot, this.config.agentsDir, `${builtinName}.md`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Treat as a repo-relative file path
|
|
48
|
+
filePath = path.join(this.config.repoRoot, source);
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
52
|
+
this.instructionCache.set(agentName, content);
|
|
53
|
+
return content;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw new Error(`Failed to load agent instructions for "${agentName}" at "${filePath}": ${err instanceof Error ? err.message : String(err)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async createAgentSession(agentName, model) {
|
|
60
|
+
const instructions = await this.loadAgentInstructions(agentName);
|
|
61
|
+
return this.createSessionWithInstructions(instructions, model);
|
|
62
|
+
}
|
|
63
|
+
async createSessionWithInstructions(instructions, model) {
|
|
64
|
+
const session = await this.client.createSession({
|
|
65
|
+
model: model ?? this.pipeline.primaryModel,
|
|
66
|
+
systemMessage: { mode: SYSTEM_MESSAGE_MODE, content: instructions },
|
|
67
|
+
});
|
|
68
|
+
if (this.config.verbose) {
|
|
69
|
+
session.on(SessionEvent.MESSAGE_DELTA, (e) => {
|
|
70
|
+
this.logger.write(e.data.deltaContent);
|
|
71
|
+
});
|
|
72
|
+
session.on(SessionEvent.TOOL_EXECUTION_START, (e) => {
|
|
73
|
+
this.logger.debug(msg.toolExecution(e.data.toolName));
|
|
74
|
+
});
|
|
75
|
+
session.on(SessionEvent.INTENT, (e) => {
|
|
76
|
+
this.logger.debug(msg.intentUpdate(e.data.intent));
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return session;
|
|
80
|
+
}
|
|
81
|
+
async send(session, prompt) {
|
|
82
|
+
const response = await session.sendAndWait({ prompt }, this.config.sessionTimeoutMs);
|
|
83
|
+
this.logger.newline();
|
|
84
|
+
return response?.data.content ?? "";
|
|
85
|
+
}
|
|
86
|
+
async callIsolated(agentName, prompt, model) {
|
|
87
|
+
const maxAttempts = this.config.maxRetries;
|
|
88
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
89
|
+
const session = await this.createAgentSession(agentName, model);
|
|
90
|
+
try {
|
|
91
|
+
const content = await this.send(session, prompt);
|
|
92
|
+
if (!content && attempt < maxAttempts) {
|
|
93
|
+
this.logger.warn(msg.emptyResponse(agentName, attempt, maxAttempts));
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
return content;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
this.logger.error(msg.callError(agentName, attempt, maxAttempts), err);
|
|
100
|
+
if (attempt >= maxAttempts)
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
await session.destroy();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,MAAM,OAAO,cAAc;IAKN;IACA;IACA;IANF,MAAM,CAAgB;IACtB,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9D,YACmB,MAAmB,EACnB,QAAwB,EACxB,MAAc;QAFd,WAAM,GAAN,MAAM,CAAa;QACnB,aAAQ,GAAR,QAAQ,CAAgB;QACxB,WAAM,GAAN,MAAM,CAAQ;QAE/B,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,QAAgB,CAAC;QAErB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,0CAA0C;YAC1C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC9D,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,WAAW,KAAK,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,0CAA0C,SAAS,SAAS,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7H,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAiB,EAAE,KAAc;QACxD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,6BAA6B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,6BAA6B,CAAC,YAAoB,EAAE,KAAc;QACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC9C,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY;YAC1C,aAAa,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE;SACpE,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;gBAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB,EAAE,MAAc;QAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAc,EAAE,KAAc;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAE3C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;oBACrE,SAAS;gBACX,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;gBACvE,IAAI,OAAO,IAAI,WAAW;oBAAE,MAAM,GAAG,CAAC;YACxC,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SwarmConfig } from "./config.js";
|
|
2
|
+
/** Extract a JSON array from a response that may contain surrounding prose. */
|
|
3
|
+
export declare function parseJsonArray(raw: string): string[];
|
|
4
|
+
/** Write a timestamped role summary to the doc directory. */
|
|
5
|
+
export declare function writeRoleSummary(config: SwarmConfig, role: string, content: string): Promise<void>;
|
|
6
|
+
/** Check whether any task in the list involves frontend work. */
|
|
7
|
+
export declare function hasFrontendWork(tasks: readonly string[]): boolean;
|
|
8
|
+
/** Check whether a task is marked as frontend work. */
|
|
9
|
+
export declare function isFrontendTask(task: string): boolean;
|
|
10
|
+
/** Check whether a response contains the given keyword (case-insensitive). */
|
|
11
|
+
export declare function responseContains(response: string, keyword: string): boolean;
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWpD;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxG;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAKjE;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3E"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { FRONTEND_KEYWORDS, FRONTEND_MARKER } from "./constants.js";
|
|
4
|
+
/** Extract a JSON array from a response that may contain surrounding prose. */
|
|
5
|
+
export function parseJsonArray(raw) {
|
|
6
|
+
const start = raw.indexOf("[");
|
|
7
|
+
const end = raw.lastIndexOf("]");
|
|
8
|
+
if (start === -1 || end === -1 || end <= start) {
|
|
9
|
+
throw new Error(`Could not find JSON array in response:\n${raw.substring(0, 200)}...`);
|
|
10
|
+
}
|
|
11
|
+
const parsed = JSON.parse(raw.substring(start, end + 1));
|
|
12
|
+
if (!Array.isArray(parsed) || !parsed.every((item) => typeof item === "string")) {
|
|
13
|
+
throw new Error("Parsed JSON is not an array of strings.");
|
|
14
|
+
}
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
/** Write a timestamped role summary to the doc directory. */
|
|
18
|
+
export async function writeRoleSummary(config, role, content) {
|
|
19
|
+
const docPath = path.join(config.repoRoot, config.docDir);
|
|
20
|
+
const timestamp = new Date().toISOString();
|
|
21
|
+
const summary = `# ${role} Summary\n\n**Timestamp:** ${timestamp}\n\n${content}\n`;
|
|
22
|
+
await fs.mkdir(docPath, { recursive: true });
|
|
23
|
+
await fs.writeFile(path.join(docPath, `${role}.md`), summary);
|
|
24
|
+
}
|
|
25
|
+
/** Check whether any task in the list involves frontend work. */
|
|
26
|
+
export function hasFrontendWork(tasks) {
|
|
27
|
+
return tasks.some((task) => {
|
|
28
|
+
const lower = task.toLowerCase();
|
|
29
|
+
return FRONTEND_KEYWORDS.some((kw) => lower.includes(kw));
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** Check whether a task is marked as frontend work. */
|
|
33
|
+
export function isFrontendTask(task) {
|
|
34
|
+
return task.includes(FRONTEND_MARKER);
|
|
35
|
+
}
|
|
36
|
+
/** Check whether a response contains the given keyword (case-insensitive). */
|
|
37
|
+
export function responseContains(response, keyword) {
|
|
38
|
+
return response.toUpperCase().includes(keyword);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAmB,EAAE,IAAY,EAAE,OAAe;IACvF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,IAAI,8BAA8B,SAAS,OAAO,OAAO,IAAI,CAAC;IACnF,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IAChE,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { hasFrontendWork, isFrontendTask, parseJsonArray, responseContains } from "./utils.js";
|
|
3
|
+
describe("parseJsonArray", () => {
|
|
4
|
+
it("extracts a JSON array from clean input", () => {
|
|
5
|
+
expect(parseJsonArray('["task1", "task2"]')).toEqual(["task1", "task2"]);
|
|
6
|
+
});
|
|
7
|
+
it("extracts a JSON array surrounded by prose", () => {
|
|
8
|
+
expect(parseJsonArray('Here are the tasks:\n["task1", "task2"]\nDone.')).toEqual(["task1", "task2"]);
|
|
9
|
+
});
|
|
10
|
+
it("throws on missing brackets", () => {
|
|
11
|
+
expect(() => parseJsonArray("no array here")).toThrow("Could not find JSON array");
|
|
12
|
+
});
|
|
13
|
+
it("throws on non-string array elements", () => {
|
|
14
|
+
expect(() => parseJsonArray("[1, 2, 3]")).toThrow("not an array of strings");
|
|
15
|
+
});
|
|
16
|
+
it("throws on mixed array", () => {
|
|
17
|
+
expect(() => parseJsonArray('["ok", 42]')).toThrow("not an array of strings");
|
|
18
|
+
});
|
|
19
|
+
it("handles empty array", () => {
|
|
20
|
+
expect(parseJsonArray("[]")).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
it("handles nested brackets in strings", () => {
|
|
23
|
+
expect(parseJsonArray('["a [b]", "c"]')).toEqual(["a [b]", "c"]);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("responseContains", () => {
|
|
27
|
+
it("finds keyword case-insensitively", () => {
|
|
28
|
+
expect(responseContains("The spec is APPROVED.", "APPROVED")).toBe(true);
|
|
29
|
+
expect(responseContains("the spec is approved.", "APPROVED")).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it("returns false when keyword is absent", () => {
|
|
32
|
+
expect(responseContains("Needs revision.", "APPROVED")).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it("handles empty strings", () => {
|
|
35
|
+
expect(responseContains("", "APPROVED")).toBe(false);
|
|
36
|
+
expect(responseContains("APPROVED", "")).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("hasFrontendWork", () => {
|
|
40
|
+
it("detects frontend keywords", () => {
|
|
41
|
+
expect(hasFrontendWork(["Build a React component"])).toBe(true);
|
|
42
|
+
expect(hasFrontendWork(["Create a UI layout"])).toBe(true);
|
|
43
|
+
expect(hasFrontendWork(["Add a new page"])).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
it("returns false for backend-only tasks", () => {
|
|
46
|
+
expect(hasFrontendWork(["Add API endpoint", "Fix database query"])).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
it("handles empty array", () => {
|
|
49
|
+
expect(hasFrontendWork([])).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
it("is case-insensitive", () => {
|
|
52
|
+
expect(hasFrontendWork(["FRONTEND task"])).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("isFrontendTask", () => {
|
|
56
|
+
it("detects [FRONTEND] marker", () => {
|
|
57
|
+
expect(isFrontendTask("[FRONTEND] Build login form")).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
it("returns false without marker", () => {
|
|
60
|
+
expect(isFrontendTask("Add API endpoint")).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
it("returns false for lowercase marker", () => {
|
|
63
|
+
expect(isFrontendTask("[frontend] Build login form")).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@copilot-swarm/core",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Multi-agent orchestrator for GitHub Copilot — coordinates PM, designer, engineer, reviewer, and tester agents through a declarative pipeline",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"swarm": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"defaults"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/urbanisierung/copilot-swarm.git",
|
|
20
|
+
"directory": "apps/core"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"copilot",
|
|
24
|
+
"ai",
|
|
25
|
+
"agents",
|
|
26
|
+
"orchestrator",
|
|
27
|
+
"multi-agent",
|
|
28
|
+
"swarm"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=22"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"start": "tsx src/index.ts",
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"check": "biome check src/",
|
|
38
|
+
"test": "vitest run"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@github/copilot-sdk": "latest",
|
|
42
|
+
"yaml": "^2.8.2"
|
|
43
|
+
}
|
|
44
|
+
}
|