opencode-swarm-plugin 0.43.0 → 0.44.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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +31 -0
- package/bin/cass.characterization.test.ts +422 -0
- package/bin/swarm.test.ts +68 -0
- package/bin/swarm.ts +67 -0
- package/dist/contributor-tools.d.ts +42 -0
- package/dist/contributor-tools.d.ts.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +95 -2
- package/dist/plugin.js +95 -2
- package/dist/sessions/agent-discovery.d.ts +59 -0
- package/dist/sessions/agent-discovery.d.ts.map +1 -0
- package/dist/sessions/index.d.ts +10 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/docs/planning/ADR-010-cass-inhousing.md +1215 -0
- package/evals/fixtures/cass-baseline.ts +217 -0
- package/examples/plugin-wrapper-template.ts +89 -0
- package/package.json +1 -1
- package/src/contributor-tools.test.ts +133 -0
- package/src/contributor-tools.ts +201 -0
- package/src/index.ts +8 -3
- package/src/sessions/agent-discovery.test.ts +137 -0
- package/src/sessions/agent-discovery.ts +112 -0
- package/src/sessions/index.ts +15 -0
package/dist/index.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ import type { Plugin } from "@opencode-ai/plugin";
|
|
|
35
35
|
* - skills:* - Agent skills discovery, activation, and execution
|
|
36
36
|
* - mandate:* - Agent voting system for collaborative knowledge curation
|
|
37
37
|
* - semantic-memory:* - Semantic memory with vector embeddings (Ollama + PGLite)
|
|
38
|
+
* - contributor_lookup - GitHub contributor profile lookup with changeset credit generation
|
|
38
39
|
*
|
|
39
40
|
* @param input - Plugin context from OpenCode
|
|
40
41
|
* @returns Plugin hooks including tools, events, and tool execution hooks
|
|
@@ -139,6 +140,17 @@ export { swarmTools, SwarmError, DecompositionError, formatSubtaskPrompt, format
|
|
|
139
140
|
* Note: hiveTools includes both hive_* and beads_* (legacy aliases)
|
|
140
141
|
*/
|
|
141
142
|
export declare const allTools: {
|
|
143
|
+
readonly contributor_lookup: {
|
|
144
|
+
description: string;
|
|
145
|
+
args: {
|
|
146
|
+
login: import("zod").ZodString;
|
|
147
|
+
issue: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
148
|
+
};
|
|
149
|
+
execute(args: {
|
|
150
|
+
login: string;
|
|
151
|
+
issue?: number | undefined;
|
|
152
|
+
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
153
|
+
};
|
|
142
154
|
readonly swarm_analytics: {
|
|
143
155
|
description: string;
|
|
144
156
|
args: {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAC;AA+CtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,WAAW,EAAE,MA6QlB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAe,WAAW,CAAC;AAM3B;;GAEG;AACH,cAAc,WAAW,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,cAAc,QAAQ,CAAC;AAEvB;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;GAMG;AACH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EAEjB,UAAU,EACV,cAAc,EACd,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,SAAS,CAAC;AAMjB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/dist/index.js
CHANGED
|
@@ -119504,6 +119504,97 @@ var evalTools = {
|
|
|
119504
119504
|
eval_run
|
|
119505
119505
|
};
|
|
119506
119506
|
|
|
119507
|
+
// src/contributor-tools.ts
|
|
119508
|
+
init_dist();
|
|
119509
|
+
init_zod();
|
|
119510
|
+
var GitHubUserSchema = exports_external.object({
|
|
119511
|
+
login: exports_external.string(),
|
|
119512
|
+
name: exports_external.string().nullable(),
|
|
119513
|
+
twitter_username: exports_external.string().nullable(),
|
|
119514
|
+
blog: exports_external.string().nullable(),
|
|
119515
|
+
bio: exports_external.string().nullable(),
|
|
119516
|
+
avatar_url: exports_external.string(),
|
|
119517
|
+
html_url: exports_external.string(),
|
|
119518
|
+
public_repos: exports_external.number().optional(),
|
|
119519
|
+
followers: exports_external.number().optional()
|
|
119520
|
+
});
|
|
119521
|
+
async function fetchGitHubUser(login) {
|
|
119522
|
+
const result = await Bun.$`gh api users/${login}`.json();
|
|
119523
|
+
return GitHubUserSchema.parse(result);
|
|
119524
|
+
}
|
|
119525
|
+
function formatCreditLine(user, issueNumber) {
|
|
119526
|
+
const issueText = issueNumber ? `reporting #${issueNumber}` : "the report";
|
|
119527
|
+
if (user.name && user.twitter_username) {
|
|
119528
|
+
return `Thanks to ${user.name} ([@${user.twitter_username}](https://x.com/${user.twitter_username})) for ${issueText}!`;
|
|
119529
|
+
}
|
|
119530
|
+
if (user.twitter_username) {
|
|
119531
|
+
return `Thanks to [@${user.twitter_username}](https://x.com/${user.twitter_username}) for ${issueText}!`;
|
|
119532
|
+
}
|
|
119533
|
+
if (user.name) {
|
|
119534
|
+
return `Thanks to ${user.name} (@${user.login} on GitHub) for ${issueText}!`;
|
|
119535
|
+
}
|
|
119536
|
+
return `Thanks to @${user.login} for ${issueText}!`;
|
|
119537
|
+
}
|
|
119538
|
+
async function storeContributorMemory(user, issueNumber) {
|
|
119539
|
+
try {
|
|
119540
|
+
const adapter = await getMemoryAdapter();
|
|
119541
|
+
const twitterPart = user.twitter_username ? ` (@${user.twitter_username} on Twitter)` : "";
|
|
119542
|
+
const issuePart = issueNumber ? `. Filed issue #${issueNumber}` : "";
|
|
119543
|
+
const bioPart = user.bio ? `. Bio: '${user.bio}'` : "";
|
|
119544
|
+
const tags = [
|
|
119545
|
+
"contributor",
|
|
119546
|
+
user.login,
|
|
119547
|
+
issueNumber ? `issue-${issueNumber}` : null
|
|
119548
|
+
].filter(Boolean).join(",");
|
|
119549
|
+
const information = `Contributor @${user.login}: ${user.name || user.login}${twitterPart}${issuePart}${bioPart}`;
|
|
119550
|
+
await adapter.store({
|
|
119551
|
+
information,
|
|
119552
|
+
tags
|
|
119553
|
+
});
|
|
119554
|
+
return true;
|
|
119555
|
+
} catch (error45) {
|
|
119556
|
+
console.error("Failed to store contributor memory:", error45);
|
|
119557
|
+
return false;
|
|
119558
|
+
}
|
|
119559
|
+
}
|
|
119560
|
+
var contributor_lookup = tool({
|
|
119561
|
+
description: "Fetch GitHub contributor profile and generate formatted changeset credit. Automatically stores contributor info in semantic-memory. Returns login, name, twitter, bio, and ready-to-paste credit_line.",
|
|
119562
|
+
args: {
|
|
119563
|
+
login: tool.schema.string().describe("GitHub username (required)"),
|
|
119564
|
+
issue: tool.schema.number().optional().describe("Issue number for context (optional)")
|
|
119565
|
+
},
|
|
119566
|
+
async execute(args2, _ctx) {
|
|
119567
|
+
try {
|
|
119568
|
+
const user = await fetchGitHubUser(args2.login);
|
|
119569
|
+
const creditLine = formatCreditLine(user, args2.issue);
|
|
119570
|
+
const memoryStored = await storeContributorMemory(user, args2.issue);
|
|
119571
|
+
const result = {
|
|
119572
|
+
login: user.login,
|
|
119573
|
+
name: user.name,
|
|
119574
|
+
twitter: user.twitter_username,
|
|
119575
|
+
bio: user.bio,
|
|
119576
|
+
credit_line: creditLine,
|
|
119577
|
+
memory_stored: memoryStored
|
|
119578
|
+
};
|
|
119579
|
+
return JSON.stringify(result, null, 2);
|
|
119580
|
+
} catch (error45) {
|
|
119581
|
+
if (error45 instanceof Error) {
|
|
119582
|
+
return JSON.stringify({
|
|
119583
|
+
error: error45.message,
|
|
119584
|
+
login: args2.login
|
|
119585
|
+
});
|
|
119586
|
+
}
|
|
119587
|
+
return JSON.stringify({
|
|
119588
|
+
error: "Unknown error fetching contributor",
|
|
119589
|
+
login: args2.login
|
|
119590
|
+
});
|
|
119591
|
+
}
|
|
119592
|
+
}
|
|
119593
|
+
});
|
|
119594
|
+
var contributorTools = {
|
|
119595
|
+
contributor_lookup
|
|
119596
|
+
};
|
|
119597
|
+
|
|
119507
119598
|
// src/output-guardrails.ts
|
|
119508
119599
|
var DEFAULT_GUARDRAIL_CONFIG = {
|
|
119509
119600
|
defaultMaxChars: 32000,
|
|
@@ -121343,7 +121434,8 @@ var SwarmPlugin = async (input) => {
|
|
|
121343
121434
|
...memoryTools,
|
|
121344
121435
|
...observabilityTools,
|
|
121345
121436
|
...researchTools,
|
|
121346
|
-
...evalTools
|
|
121437
|
+
...evalTools,
|
|
121438
|
+
...contributorTools
|
|
121347
121439
|
},
|
|
121348
121440
|
event: async ({ event }) => {
|
|
121349
121441
|
if (event.type === "session.idle") {
|
|
@@ -121448,7 +121540,8 @@ var allTools = {
|
|
|
121448
121540
|
...skillsTools,
|
|
121449
121541
|
...mandateTools,
|
|
121450
121542
|
...memoryTools,
|
|
121451
|
-
...observabilityTools
|
|
121543
|
+
...observabilityTools,
|
|
121544
|
+
...contributorTools
|
|
121452
121545
|
};
|
|
121453
121546
|
export {
|
|
121454
121547
|
withToolFallback,
|
package/dist/plugin.js
CHANGED
|
@@ -119053,6 +119053,97 @@ var evalTools = {
|
|
|
119053
119053
|
eval_run
|
|
119054
119054
|
};
|
|
119055
119055
|
|
|
119056
|
+
// src/contributor-tools.ts
|
|
119057
|
+
init_dist();
|
|
119058
|
+
init_zod();
|
|
119059
|
+
var GitHubUserSchema = exports_external.object({
|
|
119060
|
+
login: exports_external.string(),
|
|
119061
|
+
name: exports_external.string().nullable(),
|
|
119062
|
+
twitter_username: exports_external.string().nullable(),
|
|
119063
|
+
blog: exports_external.string().nullable(),
|
|
119064
|
+
bio: exports_external.string().nullable(),
|
|
119065
|
+
avatar_url: exports_external.string(),
|
|
119066
|
+
html_url: exports_external.string(),
|
|
119067
|
+
public_repos: exports_external.number().optional(),
|
|
119068
|
+
followers: exports_external.number().optional()
|
|
119069
|
+
});
|
|
119070
|
+
async function fetchGitHubUser(login) {
|
|
119071
|
+
const result = await Bun.$`gh api users/${login}`.json();
|
|
119072
|
+
return GitHubUserSchema.parse(result);
|
|
119073
|
+
}
|
|
119074
|
+
function formatCreditLine(user, issueNumber) {
|
|
119075
|
+
const issueText = issueNumber ? `reporting #${issueNumber}` : "the report";
|
|
119076
|
+
if (user.name && user.twitter_username) {
|
|
119077
|
+
return `Thanks to ${user.name} ([@${user.twitter_username}](https://x.com/${user.twitter_username})) for ${issueText}!`;
|
|
119078
|
+
}
|
|
119079
|
+
if (user.twitter_username) {
|
|
119080
|
+
return `Thanks to [@${user.twitter_username}](https://x.com/${user.twitter_username}) for ${issueText}!`;
|
|
119081
|
+
}
|
|
119082
|
+
if (user.name) {
|
|
119083
|
+
return `Thanks to ${user.name} (@${user.login} on GitHub) for ${issueText}!`;
|
|
119084
|
+
}
|
|
119085
|
+
return `Thanks to @${user.login} for ${issueText}!`;
|
|
119086
|
+
}
|
|
119087
|
+
async function storeContributorMemory(user, issueNumber) {
|
|
119088
|
+
try {
|
|
119089
|
+
const adapter = await getMemoryAdapter();
|
|
119090
|
+
const twitterPart = user.twitter_username ? ` (@${user.twitter_username} on Twitter)` : "";
|
|
119091
|
+
const issuePart = issueNumber ? `. Filed issue #${issueNumber}` : "";
|
|
119092
|
+
const bioPart = user.bio ? `. Bio: '${user.bio}'` : "";
|
|
119093
|
+
const tags = [
|
|
119094
|
+
"contributor",
|
|
119095
|
+
user.login,
|
|
119096
|
+
issueNumber ? `issue-${issueNumber}` : null
|
|
119097
|
+
].filter(Boolean).join(",");
|
|
119098
|
+
const information = `Contributor @${user.login}: ${user.name || user.login}${twitterPart}${issuePart}${bioPart}`;
|
|
119099
|
+
await adapter.store({
|
|
119100
|
+
information,
|
|
119101
|
+
tags
|
|
119102
|
+
});
|
|
119103
|
+
return true;
|
|
119104
|
+
} catch (error45) {
|
|
119105
|
+
console.error("Failed to store contributor memory:", error45);
|
|
119106
|
+
return false;
|
|
119107
|
+
}
|
|
119108
|
+
}
|
|
119109
|
+
var contributor_lookup = tool({
|
|
119110
|
+
description: "Fetch GitHub contributor profile and generate formatted changeset credit. Automatically stores contributor info in semantic-memory. Returns login, name, twitter, bio, and ready-to-paste credit_line.",
|
|
119111
|
+
args: {
|
|
119112
|
+
login: tool.schema.string().describe("GitHub username (required)"),
|
|
119113
|
+
issue: tool.schema.number().optional().describe("Issue number for context (optional)")
|
|
119114
|
+
},
|
|
119115
|
+
async execute(args2, _ctx) {
|
|
119116
|
+
try {
|
|
119117
|
+
const user = await fetchGitHubUser(args2.login);
|
|
119118
|
+
const creditLine = formatCreditLine(user, args2.issue);
|
|
119119
|
+
const memoryStored = await storeContributorMemory(user, args2.issue);
|
|
119120
|
+
const result = {
|
|
119121
|
+
login: user.login,
|
|
119122
|
+
name: user.name,
|
|
119123
|
+
twitter: user.twitter_username,
|
|
119124
|
+
bio: user.bio,
|
|
119125
|
+
credit_line: creditLine,
|
|
119126
|
+
memory_stored: memoryStored
|
|
119127
|
+
};
|
|
119128
|
+
return JSON.stringify(result, null, 2);
|
|
119129
|
+
} catch (error45) {
|
|
119130
|
+
if (error45 instanceof Error) {
|
|
119131
|
+
return JSON.stringify({
|
|
119132
|
+
error: error45.message,
|
|
119133
|
+
login: args2.login
|
|
119134
|
+
});
|
|
119135
|
+
}
|
|
119136
|
+
return JSON.stringify({
|
|
119137
|
+
error: "Unknown error fetching contributor",
|
|
119138
|
+
login: args2.login
|
|
119139
|
+
});
|
|
119140
|
+
}
|
|
119141
|
+
}
|
|
119142
|
+
});
|
|
119143
|
+
var contributorTools = {
|
|
119144
|
+
contributor_lookup
|
|
119145
|
+
};
|
|
119146
|
+
|
|
119056
119147
|
// src/output-guardrails.ts
|
|
119057
119148
|
var DEFAULT_GUARDRAIL_CONFIG = {
|
|
119058
119149
|
defaultMaxChars: 32000,
|
|
@@ -120539,7 +120630,8 @@ var SwarmPlugin = async (input) => {
|
|
|
120539
120630
|
...memoryTools,
|
|
120540
120631
|
...observabilityTools,
|
|
120541
120632
|
...researchTools,
|
|
120542
|
-
...evalTools
|
|
120633
|
+
...evalTools,
|
|
120634
|
+
...contributorTools
|
|
120543
120635
|
},
|
|
120544
120636
|
event: async ({ event }) => {
|
|
120545
120637
|
if (event.type === "session.idle") {
|
|
@@ -120644,7 +120736,8 @@ var allTools = {
|
|
|
120644
120736
|
...skillsTools,
|
|
120645
120737
|
...mandateTools,
|
|
120646
120738
|
...memoryTools,
|
|
120647
|
-
...observabilityTools
|
|
120739
|
+
...observabilityTools,
|
|
120740
|
+
...contributorTools
|
|
120648
120741
|
};
|
|
120649
120742
|
|
|
120650
120743
|
// src/plugin.ts
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Discovery Module
|
|
3
|
+
*
|
|
4
|
+
* Maps file paths to agent types using pattern matching.
|
|
5
|
+
* Supports cross-platform paths (Unix and Windows).
|
|
6
|
+
*
|
|
7
|
+
* @module sessions/agent-discovery
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Agent type identifier
|
|
11
|
+
*/
|
|
12
|
+
export type AgentType = "opencode-swarm" | "cursor" | "opencode" | "claude" | "aider";
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for custom agent patterns
|
|
15
|
+
*/
|
|
16
|
+
interface AgentPatternConfig {
|
|
17
|
+
/** Pattern string (will be converted to RegExp) */
|
|
18
|
+
pattern: string;
|
|
19
|
+
/** Agent type identifier */
|
|
20
|
+
agentType: AgentType;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load custom agent patterns from config
|
|
24
|
+
*
|
|
25
|
+
* @param patterns - Array of custom pattern configurations
|
|
26
|
+
* @returns Number of patterns loaded
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* loadAgentPatterns([
|
|
31
|
+
* { pattern: "\\.codex[/\\\\]", agentType: "codex" },
|
|
32
|
+
* { pattern: "\\.gemini[/\\\\]", agentType: "gemini" }
|
|
33
|
+
* ]);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadAgentPatterns(patterns: AgentPatternConfig[]): number;
|
|
37
|
+
/**
|
|
38
|
+
* Reset agent patterns to defaults
|
|
39
|
+
* Useful for testing
|
|
40
|
+
*/
|
|
41
|
+
export declare function resetAgentPatterns(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Detect agent type from file path
|
|
44
|
+
*
|
|
45
|
+
* @param filePath - Absolute or relative file path (Unix or Windows)
|
|
46
|
+
* @returns Agent type identifier, or null if unknown
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* detectAgentType("/home/user/.config/swarm-tools/sessions/ses_123.jsonl")
|
|
51
|
+
* // => "opencode-swarm"
|
|
52
|
+
*
|
|
53
|
+
* detectAgentType("/tmp/random.jsonl")
|
|
54
|
+
* // => null
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function detectAgentType(filePath: string): AgentType | null;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=agent-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-discovery.d.ts","sourceRoot":"","sources":["../../src/sessions/agent-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,CAAC;AA0BZ;;GAEG;AACH,UAAU,kBAAkB;IAC1B,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAMxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAOlE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Indexing Module
|
|
3
|
+
*
|
|
4
|
+
* Provides agent session discovery and indexing capabilities.
|
|
5
|
+
* Part of the CASS Inhousing initiative (ADR-010).
|
|
6
|
+
*
|
|
7
|
+
* @module sessions
|
|
8
|
+
*/
|
|
9
|
+
export { detectAgentType, loadAgentPatterns, resetAgentPatterns, type AgentType, } from "./agent-discovery";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC"}
|