@bradygaster/squad-sdk 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +296 -296
- package/dist/adapter/client.d.ts +225 -0
- package/dist/adapter/client.d.ts.map +1 -0
- package/dist/adapter/client.js +397 -0
- package/dist/adapter/client.js.map +1 -0
- package/dist/adapter/errors.d.ts +260 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +362 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/types.d.ts +779 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +11 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/agents/charter-compiler.d.ts +102 -0
- package/dist/agents/charter-compiler.d.ts.map +1 -0
- package/dist/agents/charter-compiler.js +157 -0
- package/dist/agents/charter-compiler.js.map +1 -0
- package/dist/agents/history-shadow.d.ts +80 -0
- package/dist/agents/history-shadow.d.ts.map +1 -0
- package/dist/agents/history-shadow.js +239 -0
- package/dist/agents/history-shadow.js.map +1 -0
- package/dist/agents/index.d.ts +68 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +74 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/lifecycle.d.ts +138 -0
- package/dist/agents/lifecycle.d.ts.map +1 -0
- package/dist/agents/lifecycle.js +258 -0
- package/dist/agents/lifecycle.js.map +1 -0
- package/dist/agents/model-selector.d.ts +80 -0
- package/dist/agents/model-selector.d.ts.map +1 -0
- package/dist/agents/model-selector.js +198 -0
- package/dist/agents/model-selector.js.map +1 -0
- package/dist/agents/onboarding.d.ts +65 -0
- package/dist/agents/onboarding.d.ts.map +1 -0
- package/dist/agents/onboarding.js +373 -0
- package/dist/agents/onboarding.js.map +1 -0
- package/dist/build/bundle.d.ts +32 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +97 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/ci-pipeline.d.ts +51 -0
- package/dist/build/ci-pipeline.d.ts.map +1 -0
- package/dist/build/ci-pipeline.js +180 -0
- package/dist/build/ci-pipeline.js.map +1 -0
- package/dist/build/github-dist.d.ts +37 -0
- package/dist/build/github-dist.d.ts.map +1 -0
- package/dist/build/github-dist.js +117 -0
- package/dist/build/github-dist.js.map +1 -0
- package/dist/build/index.d.ts +11 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +11 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/install-migration.d.ts +28 -0
- package/dist/build/install-migration.d.ts.map +1 -0
- package/dist/build/install-migration.js +103 -0
- package/dist/build/install-migration.js.map +1 -0
- package/dist/build/npm-package.d.ts +54 -0
- package/dist/build/npm-package.d.ts.map +1 -0
- package/dist/build/npm-package.js +128 -0
- package/dist/build/npm-package.js.map +1 -0
- package/dist/build/release.d.ts +108 -0
- package/dist/build/release.d.ts.map +1 -0
- package/dist/build/release.js +295 -0
- package/dist/build/release.js.map +1 -0
- package/dist/build/versioning.d.ts +38 -0
- package/dist/build/versioning.d.ts.map +1 -0
- package/dist/build/versioning.js +113 -0
- package/dist/build/versioning.js.map +1 -0
- package/dist/casting/casting-engine.d.ts +60 -0
- package/dist/casting/casting-engine.d.ts.map +1 -0
- package/dist/casting/casting-engine.js +223 -0
- package/dist/casting/casting-engine.js.map +1 -0
- package/dist/casting/casting-history.d.ts +54 -0
- package/dist/casting/casting-history.d.ts.map +1 -0
- package/dist/casting/casting-history.js +63 -0
- package/dist/casting/casting-history.js.map +1 -0
- package/dist/casting/index.d.ts +46 -0
- package/dist/casting/index.d.ts.map +1 -0
- package/dist/casting/index.js +37 -0
- package/dist/casting/index.js.map +1 -0
- package/dist/client/event-bus.d.ts +29 -0
- package/dist/client/event-bus.d.ts.map +1 -0
- package/dist/client/event-bus.js +53 -0
- package/dist/client/event-bus.js.map +1 -0
- package/dist/client/index.d.ts +100 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +170 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/session-pool.d.ts +66 -0
- package/dist/client/session-pool.d.ts.map +1 -0
- package/dist/client/session-pool.js +145 -0
- package/dist/client/session-pool.js.map +1 -0
- package/dist/config/agent-doc.d.ts +43 -0
- package/dist/config/agent-doc.d.ts.map +1 -0
- package/dist/config/agent-doc.js +158 -0
- package/dist/config/agent-doc.js.map +1 -0
- package/dist/config/agent-source.d.ts +95 -0
- package/dist/config/agent-source.d.ts.map +1 -0
- package/dist/config/agent-source.js +274 -0
- package/dist/config/agent-source.js.map +1 -0
- package/dist/config/doc-sync.d.ts +66 -0
- package/dist/config/doc-sync.d.ts.map +1 -0
- package/dist/config/doc-sync.js +270 -0
- package/dist/config/doc-sync.js.map +1 -0
- package/dist/config/feature-audit.d.ts +49 -0
- package/dist/config/feature-audit.d.ts.map +1 -0
- package/dist/config/feature-audit.js +148 -0
- package/dist/config/feature-audit.js.map +1 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +15 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/init.d.ts +61 -0
- package/dist/config/init.d.ts.map +1 -0
- package/dist/config/init.js +369 -0
- package/dist/config/init.js.map +1 -0
- package/dist/config/legacy-fallback.d.ts +83 -0
- package/dist/config/legacy-fallback.d.ts.map +1 -0
- package/dist/config/legacy-fallback.js +212 -0
- package/dist/config/legacy-fallback.js.map +1 -0
- package/dist/config/markdown-migration.d.ts +157 -0
- package/dist/config/markdown-migration.d.ts.map +1 -0
- package/dist/config/markdown-migration.js +434 -0
- package/dist/config/markdown-migration.js.map +1 -0
- package/dist/config/migration.d.ts +123 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +273 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/migrations/index.d.ts +36 -0
- package/dist/config/migrations/index.d.ts.map +1 -0
- package/dist/config/migrations/index.js +216 -0
- package/dist/config/migrations/index.js.map +1 -0
- package/dist/config/models.d.ts +134 -0
- package/dist/config/models.d.ts.map +1 -0
- package/dist/config/models.js +354 -0
- package/dist/config/models.js.map +1 -0
- package/dist/config/routing.d.ts +118 -0
- package/dist/config/routing.d.ts.map +1 -0
- package/dist/config/routing.js +247 -0
- package/dist/config/routing.js.map +1 -0
- package/dist/config/schema.d.ts +72 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/coordinator/coordinator.d.ts +82 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +174 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/direct-response.d.ts +83 -0
- package/dist/coordinator/direct-response.d.ts.map +1 -0
- package/dist/coordinator/direct-response.js +187 -0
- package/dist/coordinator/direct-response.js.map +1 -0
- package/dist/coordinator/fan-out.d.ts +83 -0
- package/dist/coordinator/fan-out.d.ts.map +1 -0
- package/dist/coordinator/fan-out.js +161 -0
- package/dist/coordinator/fan-out.js.map +1 -0
- package/dist/coordinator/index.d.ts +47 -0
- package/dist/coordinator/index.d.ts.map +1 -0
- package/dist/coordinator/index.js +54 -0
- package/dist/coordinator/index.js.map +1 -0
- package/dist/coordinator/response-tiers.d.ts +49 -0
- package/dist/coordinator/response-tiers.d.ts.map +1 -0
- package/dist/coordinator/response-tiers.js +149 -0
- package/dist/coordinator/response-tiers.js.map +1 -0
- package/dist/hooks/index.d.ts +103 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +279 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -3
- package/dist/index.js.map +1 -1
- package/dist/marketplace/backend.d.ts +35 -0
- package/dist/marketplace/backend.d.ts.map +1 -0
- package/dist/marketplace/backend.js +99 -0
- package/dist/marketplace/backend.js.map +1 -0
- package/dist/marketplace/browser.d.ts +33 -0
- package/dist/marketplace/browser.d.ts.map +1 -0
- package/dist/marketplace/browser.js +97 -0
- package/dist/marketplace/browser.js.map +1 -0
- package/dist/marketplace/extension-adapter.d.ts +51 -0
- package/dist/marketplace/extension-adapter.d.ts.map +1 -0
- package/dist/marketplace/extension-adapter.js +81 -0
- package/dist/marketplace/extension-adapter.js.map +1 -0
- package/dist/marketplace/index.d.ts +51 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +108 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/packaging.d.ts +25 -0
- package/dist/marketplace/packaging.d.ts.map +1 -0
- package/dist/marketplace/packaging.js +117 -0
- package/dist/marketplace/packaging.js.map +1 -0
- package/dist/marketplace/schema.d.ts +50 -0
- package/dist/marketplace/schema.d.ts.map +1 -0
- package/dist/marketplace/schema.js +120 -0
- package/dist/marketplace/schema.js.map +1 -0
- package/dist/marketplace/security.d.ts +26 -0
- package/dist/marketplace/security.d.ts.map +1 -0
- package/dist/marketplace/security.js +199 -0
- package/dist/marketplace/security.js.map +1 -0
- package/dist/parsers.d.ts +15 -0
- package/dist/parsers.d.ts.map +1 -0
- package/dist/parsers.js +15 -0
- package/dist/parsers.js.map +1 -0
- package/dist/ralph/index.d.ts +56 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +61 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/resolution.d.ts +47 -0
- package/dist/resolution.d.ts.map +1 -0
- package/dist/resolution.js +106 -0
- package/dist/resolution.js.map +1 -0
- package/dist/runtime/benchmarks.d.ts +121 -0
- package/dist/runtime/benchmarks.d.ts.map +1 -0
- package/dist/runtime/benchmarks.js +251 -0
- package/dist/runtime/benchmarks.js.map +1 -0
- package/dist/runtime/config.d.ts +313 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +466 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/cost-tracker.d.ts +73 -0
- package/dist/runtime/cost-tracker.d.ts.map +1 -0
- package/dist/runtime/cost-tracker.js +157 -0
- package/dist/runtime/cost-tracker.js.map +1 -0
- package/dist/runtime/event-bus.d.ts +190 -0
- package/dist/runtime/event-bus.d.ts.map +1 -0
- package/dist/runtime/event-bus.js +218 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/health.d.ts +66 -0
- package/dist/runtime/health.d.ts.map +1 -0
- package/dist/runtime/health.js +111 -0
- package/dist/runtime/health.js.map +1 -0
- package/dist/runtime/i18n.d.ts +54 -0
- package/dist/runtime/i18n.d.ts.map +1 -0
- package/dist/runtime/i18n.js +126 -0
- package/dist/runtime/i18n.js.map +1 -0
- package/dist/runtime/offline.d.ts +64 -0
- package/dist/runtime/offline.d.ts.map +1 -0
- package/dist/runtime/offline.js +108 -0
- package/dist/runtime/offline.js.map +1 -0
- package/dist/runtime/streaming.d.ts +97 -0
- package/dist/runtime/streaming.d.ts.map +1 -0
- package/dist/runtime/streaming.js +156 -0
- package/dist/runtime/streaming.js.map +1 -0
- package/dist/runtime/telemetry.d.ts +82 -0
- package/dist/runtime/telemetry.d.ts.map +1 -0
- package/dist/runtime/telemetry.js +120 -0
- package/dist/runtime/telemetry.js.map +1 -0
- package/dist/sharing/agent-repo.d.ts +33 -0
- package/dist/sharing/agent-repo.d.ts.map +1 -0
- package/dist/sharing/agent-repo.js +79 -0
- package/dist/sharing/agent-repo.js.map +1 -0
- package/dist/sharing/cache.d.ts +36 -0
- package/dist/sharing/cache.d.ts.map +1 -0
- package/dist/sharing/cache.js +85 -0
- package/dist/sharing/cache.js.map +1 -0
- package/dist/sharing/conflicts.d.ts +32 -0
- package/dist/sharing/conflicts.d.ts.map +1 -0
- package/dist/sharing/conflicts.js +121 -0
- package/dist/sharing/conflicts.js.map +1 -0
- package/dist/sharing/export.d.ts +50 -0
- package/dist/sharing/export.d.ts.map +1 -0
- package/dist/sharing/export.js +156 -0
- package/dist/sharing/export.js.map +1 -0
- package/dist/sharing/history-split.d.ts +34 -0
- package/dist/sharing/history-split.d.ts.map +1 -0
- package/dist/sharing/history-split.js +101 -0
- package/dist/sharing/history-split.js.map +1 -0
- package/dist/sharing/import.d.ts +37 -0
- package/dist/sharing/import.d.ts.map +1 -0
- package/dist/sharing/import.js +138 -0
- package/dist/sharing/import.js.map +1 -0
- package/dist/sharing/index.d.ts +11 -0
- package/dist/sharing/index.d.ts.map +1 -0
- package/dist/sharing/index.js +11 -0
- package/dist/sharing/index.js.map +1 -0
- package/dist/sharing/versioning.d.ts +32 -0
- package/dist/sharing/versioning.d.ts.map +1 -0
- package/dist/sharing/versioning.js +64 -0
- package/dist/sharing/versioning.js.map +1 -0
- package/dist/skills/index.d.ts +49 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +85 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +56 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +106 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-source.d.ts +63 -0
- package/dist/skills/skill-source.d.ts.map +1 -0
- package/dist/skills/skill-source.js +199 -0
- package/dist/skills/skill-source.js.map +1 -0
- package/dist/tools/index.d.ts +87 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +419 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/normalize-eol.d.ts +6 -0
- package/dist/utils/normalize-eol.d.ts.map +1 -0
- package/dist/utils/normalize-eol.js +8 -0
- package/dist/utils/normalize-eol.js.map +1 -0
- package/package.json +115 -63
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Session Lifecycle (PRD 4)
|
|
3
|
+
*
|
|
4
|
+
* Manages the full agent lifecycle: spawn → active → idle → cleanup.
|
|
5
|
+
* Compiles charter.md files into SDK CustomAgentConfig objects.
|
|
6
|
+
* Injects dynamic context via session hooks instead of string templates.
|
|
7
|
+
*/
|
|
8
|
+
export { compileCharter, compileCharterFull, parseCharterMarkdown, type CharterCompileOptions, type CharterConfigOverrides, type ParsedCharter, type CompiledCharter, } from './charter-compiler.js';
|
|
9
|
+
export { resolveModel, inferTierFromModel, isTierFallbackAllowed, ModelFallbackExecutor, type ModelResolutionOptions, type ResolvedModel, type TaskType, type ModelTier, type ModelResolutionSource, type FallbackExecutorConfig, type FallbackAttempt, type FallbackResult, } from './model-selector.js';
|
|
10
|
+
export { AgentLifecycleManager, type AgentHandle, type AgentStatus, type SpawnAgentOptions, type LifecycleManagerConfig, } from './lifecycle.js';
|
|
11
|
+
export { createHistoryShadow, appendToHistory, readHistory, shadowExists, deleteHistoryShadow, type HistorySection, type ParsedHistory, } from './history-shadow.js';
|
|
12
|
+
export interface AgentCharter {
|
|
13
|
+
/** Agent name (e.g., 'fenster', 'verbal') */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Display name (e.g., 'Fenster — Core Dev') */
|
|
16
|
+
displayName: string;
|
|
17
|
+
/** Role description */
|
|
18
|
+
role: string;
|
|
19
|
+
/** Expertise areas */
|
|
20
|
+
expertise: string[];
|
|
21
|
+
/** Working style */
|
|
22
|
+
style: string;
|
|
23
|
+
/** Full charter prompt content */
|
|
24
|
+
prompt: string;
|
|
25
|
+
/** Allowed tools for this agent */
|
|
26
|
+
allowedTools?: string[];
|
|
27
|
+
/** Excluded tools for this agent */
|
|
28
|
+
excludedTools?: string[];
|
|
29
|
+
/** Model preference from charter */
|
|
30
|
+
modelPreference?: string;
|
|
31
|
+
}
|
|
32
|
+
export type AgentLifecycleState = 'pending' | 'spawning' | 'active' | 'idle' | 'error' | 'destroyed';
|
|
33
|
+
export interface AgentSessionInfo {
|
|
34
|
+
charter: AgentCharter;
|
|
35
|
+
sessionId: string | null;
|
|
36
|
+
state: AgentLifecycleState;
|
|
37
|
+
createdAt: Date | null;
|
|
38
|
+
lastActiveAt: Date | null;
|
|
39
|
+
/** Response mode: lightweight (no history), standard, full */
|
|
40
|
+
responseMode: 'lightweight' | 'standard' | 'full';
|
|
41
|
+
}
|
|
42
|
+
export declare class CharterCompiler {
|
|
43
|
+
/**
|
|
44
|
+
* Load and compile a charter.md file into an AgentCharter.
|
|
45
|
+
* Parses frontmatter and prompt content from markdown.
|
|
46
|
+
*/
|
|
47
|
+
compile(charterPath: string): Promise<AgentCharter>;
|
|
48
|
+
/**
|
|
49
|
+
* Load all charters from the team directory.
|
|
50
|
+
* Scans .squad/agents/{name}/charter.md
|
|
51
|
+
*/
|
|
52
|
+
compileAll(teamRoot: string): Promise<AgentCharter[]>;
|
|
53
|
+
}
|
|
54
|
+
export declare class AgentSessionManager {
|
|
55
|
+
private agents;
|
|
56
|
+
constructor();
|
|
57
|
+
/** Spawn a new agent session from a charter */
|
|
58
|
+
spawn(charter: AgentCharter, mode?: 'lightweight' | 'standard' | 'full'): Promise<AgentSessionInfo>;
|
|
59
|
+
/** Resume an existing agent session */
|
|
60
|
+
resume(agentName: string): Promise<AgentSessionInfo>;
|
|
61
|
+
/** Get info about a specific agent */
|
|
62
|
+
getAgent(name: string): AgentSessionInfo | undefined;
|
|
63
|
+
/** Get all agent session info */
|
|
64
|
+
getAllAgents(): AgentSessionInfo[];
|
|
65
|
+
/** Destroy an agent session */
|
|
66
|
+
destroy(agentName: string): Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IAEb,sBAAsB;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,YAAY,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;CACnD;AAID,qBAAa,eAAe;IAC1B;;;OAGG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQzD;;;OAGG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAK5D;AAID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA4C;;IAM1D,+CAA+C;IACzC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,GAAE,aAAa,GAAG,UAAU,GAAG,MAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQrH,uCAAuC;IACjC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM1D,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD,iCAAiC;IACjC,YAAY,IAAI,gBAAgB,EAAE;IAIlC,+BAA+B;IACzB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKhD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Session Lifecycle (PRD 4)
|
|
3
|
+
*
|
|
4
|
+
* Manages the full agent lifecycle: spawn → active → idle → cleanup.
|
|
5
|
+
* Compiles charter.md files into SDK CustomAgentConfig objects.
|
|
6
|
+
* Injects dynamic context via session hooks instead of string templates.
|
|
7
|
+
*/
|
|
8
|
+
// --- M1-8 Charter Compilation + M2-9 Config-driven ---
|
|
9
|
+
export { compileCharter, compileCharterFull, parseCharterMarkdown, } from './charter-compiler.js';
|
|
10
|
+
// --- M1-9 Model Selection + M3-5 Model Fallback ---
|
|
11
|
+
export { resolveModel, inferTierFromModel, isTierFallbackAllowed, ModelFallbackExecutor, } from './model-selector.js';
|
|
12
|
+
// --- M1-7 Agent Lifecycle ---
|
|
13
|
+
export { AgentLifecycleManager, } from './lifecycle.js';
|
|
14
|
+
// --- M1-11 History Shadows ---
|
|
15
|
+
export { createHistoryShadow, appendToHistory, readHistory, shadowExists, deleteHistoryShadow, } from './history-shadow.js';
|
|
16
|
+
// --- Charter Compiler ---
|
|
17
|
+
export class CharterCompiler {
|
|
18
|
+
/**
|
|
19
|
+
* Load and compile a charter.md file into an AgentCharter.
|
|
20
|
+
* Parses frontmatter and prompt content from markdown.
|
|
21
|
+
*/
|
|
22
|
+
async compile(charterPath) {
|
|
23
|
+
// TODO: PRD 4 — Read charter.md from filesystem
|
|
24
|
+
// TODO: PRD 4 — Parse YAML frontmatter (name, role, expertise, style)
|
|
25
|
+
// TODO: PRD 4 — Extract prompt body
|
|
26
|
+
// TODO: PRD 4 — Map to CustomAgentConfig for SDK registration
|
|
27
|
+
throw new Error('Not implemented');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load all charters from the team directory.
|
|
31
|
+
* Scans .squad/agents/{name}/charter.md
|
|
32
|
+
*/
|
|
33
|
+
async compileAll(teamRoot) {
|
|
34
|
+
// TODO: PRD 4 — Glob for charter.md files
|
|
35
|
+
// TODO: PRD 4 — Compile each charter
|
|
36
|
+
throw new Error('Not implemented');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// --- Agent Session Manager ---
|
|
40
|
+
export class AgentSessionManager {
|
|
41
|
+
agents = new Map();
|
|
42
|
+
constructor() {
|
|
43
|
+
// TODO: PRD 4 — Accept SquadClient and SessionPool references
|
|
44
|
+
}
|
|
45
|
+
/** Spawn a new agent session from a charter */
|
|
46
|
+
async spawn(charter, mode = 'standard') {
|
|
47
|
+
// TODO: PRD 4 — Create SDK session with compiled charter config
|
|
48
|
+
// TODO: PRD 4 — Inject history.md and decisions.md via onSessionStart
|
|
49
|
+
// TODO: PRD 4 — Register in session pool
|
|
50
|
+
// TODO: PRD 4 — Emit lifecycle events
|
|
51
|
+
throw new Error('Not implemented');
|
|
52
|
+
}
|
|
53
|
+
/** Resume an existing agent session */
|
|
54
|
+
async resume(agentName) {
|
|
55
|
+
// TODO: PRD 4 — Call SquadClient.resumeSession()
|
|
56
|
+
// TODO: PRD 4 — Restore context and state
|
|
57
|
+
throw new Error('Not implemented');
|
|
58
|
+
}
|
|
59
|
+
/** Get info about a specific agent */
|
|
60
|
+
getAgent(name) {
|
|
61
|
+
return this.agents.get(name);
|
|
62
|
+
}
|
|
63
|
+
/** Get all agent session info */
|
|
64
|
+
getAllAgents() {
|
|
65
|
+
return Array.from(this.agents.values());
|
|
66
|
+
}
|
|
67
|
+
/** Destroy an agent session */
|
|
68
|
+
async destroy(agentName) {
|
|
69
|
+
// TODO: PRD 4 — Graceful shutdown with onSessionEnd hook
|
|
70
|
+
// TODO: PRD 4 — Persist final state to history.md
|
|
71
|
+
this.agents.delete(agentName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wDAAwD;AACxD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GAKrB,MAAM,uBAAuB,CAAC;AAE/B,qDAAqD;AACrD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GAStB,MAAM,qBAAqB,CAAC;AAE7B,+BAA+B;AAC/B,OAAO,EACL,qBAAqB,GAKtB,MAAM,gBAAgB,CAAC;AAExB,gCAAgC;AAChC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AA6C7B,2BAA2B;AAE3B,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB;QAC/B,gDAAgD;QAChD,sEAAsE;QACtE,oCAAoC;QACpC,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,0CAA0C;QAC1C,qCAAqC;QACrC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF;AAED,gCAAgC;AAEhC,MAAM,OAAO,mBAAmB;IACtB,MAAM,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE1D;QACE,8DAA8D;IAChE,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,KAAK,CAAC,OAAqB,EAAE,OAA4C,UAAU;QACvF,gEAAgE;QAChE,sEAAsE;QACtE,yCAAyC;QACzC,sCAAsC;QACtC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,iDAAiD;QACjD,0CAA0C;QAC1C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,sCAAsC;IACtC,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,iCAAiC;IACjC,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,yDAAyD;QACzD,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Session Lifecycle (M1-7)
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the complete lifecycle of agent sessions:
|
|
5
|
+
* - Spawning: charter compilation, model selection, session creation
|
|
6
|
+
* - Management: status tracking, message handling
|
|
7
|
+
* - Destruction: graceful shutdown and history saving
|
|
8
|
+
*/
|
|
9
|
+
import { SquadClientWithPool } from '../client/index.js';
|
|
10
|
+
import { type TaskType } from './model-selector.js';
|
|
11
|
+
/**
|
|
12
|
+
* Agent handle status.
|
|
13
|
+
*/
|
|
14
|
+
export type AgentStatus = 'spawning' | 'active' | 'idle' | 'error' | 'destroyed';
|
|
15
|
+
/**
|
|
16
|
+
* Handle to a spawned agent session.
|
|
17
|
+
* Provides control and communication interface to the agent.
|
|
18
|
+
*/
|
|
19
|
+
export interface AgentHandle {
|
|
20
|
+
/** Agent name (e.g., 'verbal', 'fenster') */
|
|
21
|
+
agentName: string;
|
|
22
|
+
/** Underlying session ID from Squad Client */
|
|
23
|
+
sessionId: string;
|
|
24
|
+
/** Model being used for this agent */
|
|
25
|
+
model: string;
|
|
26
|
+
/** Current agent status */
|
|
27
|
+
status: AgentStatus;
|
|
28
|
+
/** Timestamp when agent was spawned */
|
|
29
|
+
createdAt: Date;
|
|
30
|
+
/** Last activity timestamp (for idle timeout) */
|
|
31
|
+
lastActivityAt: Date;
|
|
32
|
+
/**
|
|
33
|
+
* Send a message to the agent.
|
|
34
|
+
* @param prompt - User message or task prompt
|
|
35
|
+
*/
|
|
36
|
+
sendMessage(prompt: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Destroy the agent session gracefully.
|
|
39
|
+
* Saves history and cleans up resources.
|
|
40
|
+
*/
|
|
41
|
+
destroy(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for spawning an agent.
|
|
45
|
+
*/
|
|
46
|
+
export interface SpawnAgentOptions {
|
|
47
|
+
/** Agent name (e.g., 'verbal', 'fenster') */
|
|
48
|
+
agentName: string;
|
|
49
|
+
/** Task prompt to send to the agent */
|
|
50
|
+
task: string;
|
|
51
|
+
/** Task type for model selection */
|
|
52
|
+
taskType?: TaskType;
|
|
53
|
+
/** User-specified model override */
|
|
54
|
+
modelOverride?: string;
|
|
55
|
+
/** Team context content (team.md) */
|
|
56
|
+
teamContext?: string;
|
|
57
|
+
/** Routing rules content */
|
|
58
|
+
routingRules?: string;
|
|
59
|
+
/** Relevant decision records */
|
|
60
|
+
decisions?: string;
|
|
61
|
+
/** Idle timeout in milliseconds (default: 5 minutes) */
|
|
62
|
+
idleTimeout?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Configuration for the lifecycle manager.
|
|
66
|
+
*/
|
|
67
|
+
export interface LifecycleManagerConfig {
|
|
68
|
+
/** Squad client instance */
|
|
69
|
+
client: SquadClientWithPool;
|
|
70
|
+
/** Path to team root directory */
|
|
71
|
+
teamRoot: string;
|
|
72
|
+
/** Default idle timeout (default: 5 minutes) */
|
|
73
|
+
defaultIdleTimeout?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Manages the full lifecycle of agent sessions.
|
|
77
|
+
*
|
|
78
|
+
* Coordinates charter compilation, model selection, session creation,
|
|
79
|
+
* and graceful shutdown with history persistence.
|
|
80
|
+
*/
|
|
81
|
+
export declare class AgentLifecycleManager {
|
|
82
|
+
private client;
|
|
83
|
+
private teamRoot;
|
|
84
|
+
private defaultIdleTimeout;
|
|
85
|
+
private agents;
|
|
86
|
+
private idleCheckTimer;
|
|
87
|
+
constructor(config: LifecycleManagerConfig);
|
|
88
|
+
/**
|
|
89
|
+
* Spawn a new agent with full lifecycle setup.
|
|
90
|
+
*
|
|
91
|
+
* Pipeline:
|
|
92
|
+
* 1. Read charter.md from team root
|
|
93
|
+
* 2. Compile charter with team context
|
|
94
|
+
* 3. Resolve model using 4-layer priority
|
|
95
|
+
* 4. Create session via Squad Client
|
|
96
|
+
* 5. Set up event handlers
|
|
97
|
+
* 6. Return AgentHandle
|
|
98
|
+
*
|
|
99
|
+
* @param options - Spawn options
|
|
100
|
+
* @returns Agent handle for control and communication
|
|
101
|
+
*/
|
|
102
|
+
spawnAgent(options: SpawnAgentOptions): Promise<AgentHandle>;
|
|
103
|
+
/**
|
|
104
|
+
* Destroy an agent gracefully.
|
|
105
|
+
* Saves history and cleans up session.
|
|
106
|
+
*
|
|
107
|
+
* @param handle - Agent handle to destroy
|
|
108
|
+
*/
|
|
109
|
+
destroyAgent(handle: AgentHandle): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* List all active agent sessions.
|
|
112
|
+
*
|
|
113
|
+
* @returns Array of active agent handles
|
|
114
|
+
*/
|
|
115
|
+
listActive(): AgentHandle[];
|
|
116
|
+
/**
|
|
117
|
+
* Get agent handle by session ID.
|
|
118
|
+
*
|
|
119
|
+
* @param sessionId - Session ID to look up
|
|
120
|
+
* @returns Agent handle or undefined
|
|
121
|
+
*/
|
|
122
|
+
getAgent(sessionId: string): AgentHandle | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Shutdown all agents gracefully.
|
|
125
|
+
*/
|
|
126
|
+
shutdown(): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Start periodic idle timeout checker.
|
|
129
|
+
* @private
|
|
130
|
+
*/
|
|
131
|
+
private startIdleChecker;
|
|
132
|
+
/**
|
|
133
|
+
* Extract model preference from charter content.
|
|
134
|
+
* @private
|
|
135
|
+
*/
|
|
136
|
+
private extractModelPreference;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/agents/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAK/F;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,uCAAuC;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,iDAAiD;IACjD,cAAc,EAAE,IAAI,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAE5B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,sBAAsB;IAS1C;;;;;;;;;;;;;OAaG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAgGlE;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;;;OAIG;IACH,UAAU,IAAI,WAAW,EAAE;IAM3B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIpD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAI/B"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Session Lifecycle (M1-7)
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the complete lifecycle of agent sessions:
|
|
5
|
+
* - Spawning: charter compilation, model selection, session creation
|
|
6
|
+
* - Management: status tracking, message handling
|
|
7
|
+
* - Destruction: graceful shutdown and history saving
|
|
8
|
+
*/
|
|
9
|
+
import { compileCharter } from './charter-compiler.js';
|
|
10
|
+
import { resolveModel } from './model-selector.js';
|
|
11
|
+
import { ConfigurationError, SessionLifecycleError } from '../adapter/errors.js';
|
|
12
|
+
import * as fs from 'fs/promises';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
/**
|
|
15
|
+
* Manages the full lifecycle of agent sessions.
|
|
16
|
+
*
|
|
17
|
+
* Coordinates charter compilation, model selection, session creation,
|
|
18
|
+
* and graceful shutdown with history persistence.
|
|
19
|
+
*/
|
|
20
|
+
export class AgentLifecycleManager {
|
|
21
|
+
client;
|
|
22
|
+
teamRoot;
|
|
23
|
+
defaultIdleTimeout;
|
|
24
|
+
agents = new Map();
|
|
25
|
+
idleCheckTimer = null;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.client = config.client;
|
|
28
|
+
this.teamRoot = config.teamRoot;
|
|
29
|
+
this.defaultIdleTimeout = config.defaultIdleTimeout ?? 300_000; // 5 minutes
|
|
30
|
+
// Start idle timeout checker
|
|
31
|
+
this.startIdleChecker();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Spawn a new agent with full lifecycle setup.
|
|
35
|
+
*
|
|
36
|
+
* Pipeline:
|
|
37
|
+
* 1. Read charter.md from team root
|
|
38
|
+
* 2. Compile charter with team context
|
|
39
|
+
* 3. Resolve model using 4-layer priority
|
|
40
|
+
* 4. Create session via Squad Client
|
|
41
|
+
* 5. Set up event handlers
|
|
42
|
+
* 6. Return AgentHandle
|
|
43
|
+
*
|
|
44
|
+
* @param options - Spawn options
|
|
45
|
+
* @returns Agent handle for control and communication
|
|
46
|
+
*/
|
|
47
|
+
async spawnAgent(options) {
|
|
48
|
+
const { agentName, task, taskType = 'code', modelOverride, teamContext, routingRules, decisions, idleTimeout = this.defaultIdleTimeout, } = options;
|
|
49
|
+
try {
|
|
50
|
+
// Step 1: Read charter.md
|
|
51
|
+
const charterPath = path.join(this.teamRoot, '.ai-team', 'agents', agentName, 'charter.md');
|
|
52
|
+
let charterContent;
|
|
53
|
+
try {
|
|
54
|
+
charterContent = await fs.readFile(charterPath, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw new ConfigurationError(`Charter not found for agent '${agentName}' at ${charterPath}`, {
|
|
58
|
+
agentName,
|
|
59
|
+
operation: 'spawnAgent',
|
|
60
|
+
timestamp: new Date(),
|
|
61
|
+
metadata: { charterPath },
|
|
62
|
+
}, error instanceof Error ? error : undefined);
|
|
63
|
+
}
|
|
64
|
+
// Step 2: Compile charter
|
|
65
|
+
const compileOptions = {
|
|
66
|
+
agentName,
|
|
67
|
+
charterPath,
|
|
68
|
+
teamContext,
|
|
69
|
+
routingRules,
|
|
70
|
+
decisions,
|
|
71
|
+
};
|
|
72
|
+
const agentConfig = compileCharter(compileOptions);
|
|
73
|
+
// Step 3: Resolve model
|
|
74
|
+
const modelOptions = {
|
|
75
|
+
userOverride: modelOverride,
|
|
76
|
+
charterPreference: agentConfig.prompt.includes('## Model')
|
|
77
|
+
? this.extractModelPreference(charterContent)
|
|
78
|
+
: undefined,
|
|
79
|
+
taskType,
|
|
80
|
+
agentRole: agentName,
|
|
81
|
+
};
|
|
82
|
+
const resolvedModel = resolveModel(modelOptions);
|
|
83
|
+
// Step 4: Create session
|
|
84
|
+
const sessionConfig = {
|
|
85
|
+
model: resolvedModel.model,
|
|
86
|
+
systemMessage: {
|
|
87
|
+
content: agentConfig.prompt,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
const session = await this.client.createSession(sessionConfig);
|
|
91
|
+
// Step 5: Create handle with event handlers
|
|
92
|
+
const handle = new AgentHandleImpl({
|
|
93
|
+
agentName,
|
|
94
|
+
sessionId: session.sessionId,
|
|
95
|
+
model: resolvedModel.model,
|
|
96
|
+
session,
|
|
97
|
+
idleTimeout,
|
|
98
|
+
onDestroy: () => this.agents.delete(session.sessionId),
|
|
99
|
+
});
|
|
100
|
+
this.agents.set(session.sessionId, handle);
|
|
101
|
+
// Step 6: Send initial task
|
|
102
|
+
await handle.sendMessage(task);
|
|
103
|
+
return handle;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw new SessionLifecycleError(`Failed to spawn agent '${agentName}': ${error instanceof Error ? error.message : String(error)}`, {
|
|
107
|
+
agentName,
|
|
108
|
+
operation: 'spawnAgent',
|
|
109
|
+
timestamp: new Date(),
|
|
110
|
+
}, false, error instanceof Error ? error : undefined);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Destroy an agent gracefully.
|
|
115
|
+
* Saves history and cleans up session.
|
|
116
|
+
*
|
|
117
|
+
* @param handle - Agent handle to destroy
|
|
118
|
+
*/
|
|
119
|
+
async destroyAgent(handle) {
|
|
120
|
+
await handle.destroy();
|
|
121
|
+
this.agents.delete(handle.sessionId);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* List all active agent sessions.
|
|
125
|
+
*
|
|
126
|
+
* @returns Array of active agent handles
|
|
127
|
+
*/
|
|
128
|
+
listActive() {
|
|
129
|
+
return Array.from(this.agents.values()).filter(agent => agent.status !== 'destroyed');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get agent handle by session ID.
|
|
133
|
+
*
|
|
134
|
+
* @param sessionId - Session ID to look up
|
|
135
|
+
* @returns Agent handle or undefined
|
|
136
|
+
*/
|
|
137
|
+
getAgent(sessionId) {
|
|
138
|
+
return this.agents.get(sessionId);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Shutdown all agents gracefully.
|
|
142
|
+
*/
|
|
143
|
+
async shutdown() {
|
|
144
|
+
if (this.idleCheckTimer) {
|
|
145
|
+
clearInterval(this.idleCheckTimer);
|
|
146
|
+
this.idleCheckTimer = null;
|
|
147
|
+
}
|
|
148
|
+
const destroyPromises = Array.from(this.agents.values()).map(agent => agent.destroy().catch(err => {
|
|
149
|
+
console.error(`Failed to destroy agent ${agent.agentName}:`, err);
|
|
150
|
+
}));
|
|
151
|
+
await Promise.all(destroyPromises);
|
|
152
|
+
this.agents.clear();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Start periodic idle timeout checker.
|
|
156
|
+
* @private
|
|
157
|
+
*/
|
|
158
|
+
startIdleChecker() {
|
|
159
|
+
this.idleCheckTimer = setInterval(() => {
|
|
160
|
+
const now = Date.now();
|
|
161
|
+
for (const agent of this.agents.values()) {
|
|
162
|
+
const idleTimeMs = now - agent.lastActivityAt.getTime();
|
|
163
|
+
if (idleTimeMs > this.defaultIdleTimeout && agent.status === 'active') {
|
|
164
|
+
agent.markIdle();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}, 30_000); // Check every 30 seconds
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Extract model preference from charter content.
|
|
171
|
+
* @private
|
|
172
|
+
*/
|
|
173
|
+
extractModelPreference(charterContent) {
|
|
174
|
+
const modelMatch = charterContent.match(/##\s+Model\s*\n[\s\S]*?\*\*Preferred:\*\*\s*(.+)/i);
|
|
175
|
+
return modelMatch ? modelMatch[1].trim() : undefined;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Internal implementation of AgentHandle.
|
|
180
|
+
* @private
|
|
181
|
+
*/
|
|
182
|
+
class AgentHandleImpl {
|
|
183
|
+
agentName;
|
|
184
|
+
sessionId;
|
|
185
|
+
model;
|
|
186
|
+
status;
|
|
187
|
+
createdAt;
|
|
188
|
+
lastActivityAt;
|
|
189
|
+
session;
|
|
190
|
+
idleTimeout;
|
|
191
|
+
onDestroy;
|
|
192
|
+
constructor(config) {
|
|
193
|
+
this.agentName = config.agentName;
|
|
194
|
+
this.sessionId = config.sessionId;
|
|
195
|
+
this.model = config.model;
|
|
196
|
+
this.session = config.session;
|
|
197
|
+
this.idleTimeout = config.idleTimeout;
|
|
198
|
+
this.onDestroy = config.onDestroy;
|
|
199
|
+
this.status = 'active';
|
|
200
|
+
this.createdAt = new Date();
|
|
201
|
+
this.lastActivityAt = new Date();
|
|
202
|
+
}
|
|
203
|
+
async sendMessage(prompt) {
|
|
204
|
+
if (this.status === 'destroyed') {
|
|
205
|
+
throw new SessionLifecycleError('Cannot send message to destroyed agent', {
|
|
206
|
+
agentName: this.agentName,
|
|
207
|
+
sessionId: this.sessionId,
|
|
208
|
+
operation: 'sendMessage',
|
|
209
|
+
timestamp: new Date(),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
this.status = 'active';
|
|
214
|
+
this.lastActivityAt = new Date();
|
|
215
|
+
// Send message via session
|
|
216
|
+
await this.session.sendMessage({ prompt });
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
this.status = 'error';
|
|
220
|
+
throw new SessionLifecycleError(`Failed to send message to agent '${this.agentName}': ${error instanceof Error ? error.message : String(error)}`, {
|
|
221
|
+
agentName: this.agentName,
|
|
222
|
+
sessionId: this.sessionId,
|
|
223
|
+
operation: 'sendMessage',
|
|
224
|
+
timestamp: new Date(),
|
|
225
|
+
}, false, error instanceof Error ? error : undefined);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async destroy() {
|
|
229
|
+
if (this.status === 'destroyed') {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
this.status = 'destroyed';
|
|
234
|
+
// Clean up session
|
|
235
|
+
await this.session.close();
|
|
236
|
+
// Notify lifecycle manager
|
|
237
|
+
this.onDestroy();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
throw new SessionLifecycleError(`Failed to destroy agent '${this.agentName}': ${error instanceof Error ? error.message : String(error)}`, {
|
|
241
|
+
agentName: this.agentName,
|
|
242
|
+
sessionId: this.sessionId,
|
|
243
|
+
operation: 'destroy',
|
|
244
|
+
timestamp: new Date(),
|
|
245
|
+
}, false, error instanceof Error ? error : undefined);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Mark agent as idle (called by lifecycle manager).
|
|
250
|
+
* @internal
|
|
251
|
+
*/
|
|
252
|
+
markIdle() {
|
|
253
|
+
if (this.status === 'active') {
|
|
254
|
+
this.status = 'idle';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/agents/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-Agent Model Selection (M1-9) + Model Fallback (M3-5, Issue #145)
|
|
3
|
+
*/
|
|
4
|
+
import type { EventBus } from '../runtime/event-bus.js';
|
|
5
|
+
/**
|
|
6
|
+
* Task types that influence model selection.
|
|
7
|
+
*/
|
|
8
|
+
export type TaskType = 'code' | 'prompt' | 'docs' | 'visual' | 'planning' | 'mechanical';
|
|
9
|
+
/**
|
|
10
|
+
* Model tier classification.
|
|
11
|
+
*/
|
|
12
|
+
export type ModelTier = 'premium' | 'standard' | 'fast';
|
|
13
|
+
/**
|
|
14
|
+
* Source of the model resolution.
|
|
15
|
+
*/
|
|
16
|
+
export type ModelResolutionSource = 'user-override' | 'charter' | 'task-auto' | 'default';
|
|
17
|
+
/**
|
|
18
|
+
* Options for model resolution.
|
|
19
|
+
*/
|
|
20
|
+
export interface ModelResolutionOptions {
|
|
21
|
+
/** User-specified model override */
|
|
22
|
+
userOverride?: string;
|
|
23
|
+
/** Model preference from agent's charter (## Model section) */
|
|
24
|
+
charterPreference?: string;
|
|
25
|
+
/** Type of task being performed */
|
|
26
|
+
taskType: TaskType;
|
|
27
|
+
/** Agent role (for context) */
|
|
28
|
+
agentRole?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Result of model resolution.
|
|
32
|
+
*/
|
|
33
|
+
export interface ResolvedModel {
|
|
34
|
+
/** Selected model identifier */
|
|
35
|
+
model: string;
|
|
36
|
+
/** Model tier classification */
|
|
37
|
+
tier: ModelTier;
|
|
38
|
+
/** Source that determined the model */
|
|
39
|
+
source: ModelResolutionSource;
|
|
40
|
+
/** Fallback chain for this tier */
|
|
41
|
+
fallbackChain: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the appropriate model using the 4-layer priority system.
|
|
45
|
+
*
|
|
46
|
+
* @param options - Model resolution options
|
|
47
|
+
* @returns Resolved model with tier and fallback chain
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveModel(options: ModelResolutionOptions): ResolvedModel;
|
|
50
|
+
export declare function inferTierFromModel(model: string): ModelTier;
|
|
51
|
+
export declare function isTierFallbackAllowed(fromTier: ModelTier, toTier: ModelTier, allowCrossTier: boolean): boolean;
|
|
52
|
+
export interface FallbackAttempt {
|
|
53
|
+
model: string;
|
|
54
|
+
tier: ModelTier;
|
|
55
|
+
error: string;
|
|
56
|
+
timestamp: Date;
|
|
57
|
+
}
|
|
58
|
+
export interface FallbackResult<T> {
|
|
59
|
+
value: T;
|
|
60
|
+
model: string;
|
|
61
|
+
tier: ModelTier;
|
|
62
|
+
attempts: FallbackAttempt[];
|
|
63
|
+
didFallback: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface FallbackExecutorConfig {
|
|
66
|
+
allowCrossTier?: boolean;
|
|
67
|
+
eventBus?: EventBus;
|
|
68
|
+
}
|
|
69
|
+
export declare class ModelFallbackExecutor {
|
|
70
|
+
private allowCrossTier;
|
|
71
|
+
private eventBus?;
|
|
72
|
+
private history;
|
|
73
|
+
constructor(config?: FallbackExecutorConfig);
|
|
74
|
+
execute<T>(resolved: ResolvedModel, agentName: string, fn: (model: string) => Promise<T>): Promise<FallbackResult<T>>;
|
|
75
|
+
getHistory(agentName: string): FallbackAttempt[];
|
|
76
|
+
clearHistory(): void;
|
|
77
|
+
private buildCandidateList;
|
|
78
|
+
private emitEvent;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=model-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../src/agents/model-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAEzF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,uCAAuC;IACvC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,mCAAmC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAgCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAsC3E;AAiDD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAa3D;AAQD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,OAAO,GACtB,OAAO,CAIT;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAA6C;gBAEhD,MAAM,GAAE,sBAA2B;IAKzC,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA6B7B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE;IAIhD,YAAY,IAAI,IAAI;IAIpB,OAAO,CAAC,kBAAkB;YASZ,SAAS;CAIxB"}
|