@bradygaster/squad-sdk 0.6.2 → 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 -39
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Tier Selection (M3-4, Issue #143)
|
|
3
|
+
*
|
|
4
|
+
* Not all tasks need the same level of agent involvement. This module
|
|
5
|
+
* selects one of four response tiers based on message complexity,
|
|
6
|
+
* keyword patterns, config overrides, and history hints.
|
|
7
|
+
*
|
|
8
|
+
* Tiers:
|
|
9
|
+
* Direct — Answer inline, no agent spawn
|
|
10
|
+
* Lightweight — Single fast-model agent
|
|
11
|
+
* Standard — Single standard-model agent
|
|
12
|
+
* Full — Multi-agent fan-out (premium models)
|
|
13
|
+
*/
|
|
14
|
+
import type { SquadConfig } from '../config/schema.js';
|
|
15
|
+
export type TierName = 'direct' | 'lightweight' | 'standard' | 'full';
|
|
16
|
+
export type ModelTierSuggestion = 'none' | 'fast' | 'standard' | 'premium';
|
|
17
|
+
export interface ResponseTier {
|
|
18
|
+
/** Tier identifier */
|
|
19
|
+
tier: TierName;
|
|
20
|
+
/** Suggested model tier */
|
|
21
|
+
modelTier: ModelTierSuggestion;
|
|
22
|
+
/** Maximum agents to spawn */
|
|
23
|
+
maxAgents: number;
|
|
24
|
+
/** Per-agent timeout in seconds */
|
|
25
|
+
timeout: number;
|
|
26
|
+
}
|
|
27
|
+
export interface TierContext {
|
|
28
|
+
/** Recent conversation history (summaries) */
|
|
29
|
+
recentHistory?: string[];
|
|
30
|
+
/** Names of currently available agents */
|
|
31
|
+
agentAvailability?: string[];
|
|
32
|
+
/** Number of currently active sessions */
|
|
33
|
+
currentLoad?: number;
|
|
34
|
+
}
|
|
35
|
+
/** Get a tier definition by name. */
|
|
36
|
+
export declare function getTier(name: TierName): ResponseTier;
|
|
37
|
+
/**
|
|
38
|
+
* Select the appropriate response tier for an incoming message.
|
|
39
|
+
*
|
|
40
|
+
* Priority order:
|
|
41
|
+
* 1. Config routing-rule tier overrides
|
|
42
|
+
* 2. Full-tier keyword patterns
|
|
43
|
+
* 3. Direct-tier keyword patterns (short / simple)
|
|
44
|
+
* 4. Lightweight keyword patterns
|
|
45
|
+
* 5. Context-based adjustments (load, history)
|
|
46
|
+
* 6. Default → standard
|
|
47
|
+
*/
|
|
48
|
+
export declare function selectResponseTier(message: string, config: SquadConfig, context?: TierContext): ResponseTier;
|
|
49
|
+
//# sourceMappingURL=response-tiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-tiers.d.ts","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuCD,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,CAEpD;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,WAAgB,GACxB,YAAY,CAoCd"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Tier Selection (M3-4, Issue #143)
|
|
3
|
+
*
|
|
4
|
+
* Not all tasks need the same level of agent involvement. This module
|
|
5
|
+
* selects one of four response tiers based on message complexity,
|
|
6
|
+
* keyword patterns, config overrides, and history hints.
|
|
7
|
+
*
|
|
8
|
+
* Tiers:
|
|
9
|
+
* Direct — Answer inline, no agent spawn
|
|
10
|
+
* Lightweight — Single fast-model agent
|
|
11
|
+
* Standard — Single standard-model agent
|
|
12
|
+
* Full — Multi-agent fan-out (premium models)
|
|
13
|
+
*/
|
|
14
|
+
// --- Tier Definitions ---
|
|
15
|
+
const TIER_DIRECT = {
|
|
16
|
+
tier: 'direct',
|
|
17
|
+
modelTier: 'none',
|
|
18
|
+
maxAgents: 0,
|
|
19
|
+
timeout: 0,
|
|
20
|
+
};
|
|
21
|
+
const TIER_LIGHTWEIGHT = {
|
|
22
|
+
tier: 'lightweight',
|
|
23
|
+
modelTier: 'fast',
|
|
24
|
+
maxAgents: 1,
|
|
25
|
+
timeout: 30,
|
|
26
|
+
};
|
|
27
|
+
const TIER_STANDARD = {
|
|
28
|
+
tier: 'standard',
|
|
29
|
+
modelTier: 'standard',
|
|
30
|
+
maxAgents: 1,
|
|
31
|
+
timeout: 120,
|
|
32
|
+
};
|
|
33
|
+
const TIER_FULL = {
|
|
34
|
+
tier: 'full',
|
|
35
|
+
modelTier: 'premium',
|
|
36
|
+
maxAgents: 5,
|
|
37
|
+
timeout: 300,
|
|
38
|
+
};
|
|
39
|
+
const TIERS = {
|
|
40
|
+
direct: TIER_DIRECT,
|
|
41
|
+
lightweight: TIER_LIGHTWEIGHT,
|
|
42
|
+
standard: TIER_STANDARD,
|
|
43
|
+
full: TIER_FULL,
|
|
44
|
+
};
|
|
45
|
+
/** Get a tier definition by name. */
|
|
46
|
+
export function getTier(name) {
|
|
47
|
+
return { ...TIERS[name] };
|
|
48
|
+
}
|
|
49
|
+
// --- Keyword Patterns ---
|
|
50
|
+
/** Patterns that suggest a direct (no-spawn) response. */
|
|
51
|
+
const DIRECT_PATTERNS = [
|
|
52
|
+
/^(hi|hello|hey|thanks|thank you|ok|okay)\b/i,
|
|
53
|
+
/^what('s| is) (your|the) (name|version|status)\b/i,
|
|
54
|
+
/^(help|usage|how do I use)\b/i,
|
|
55
|
+
/\?$/,
|
|
56
|
+
];
|
|
57
|
+
/** Patterns that suggest lightweight (quick lookup / simple task). */
|
|
58
|
+
const LIGHTWEIGHT_PATTERNS = [
|
|
59
|
+
/\b(list|show|display|get|find|search|where is)\b/i,
|
|
60
|
+
/\b(status|info|check)\b/i,
|
|
61
|
+
/\b(rename|move|delete|remove)\s+\w+/i,
|
|
62
|
+
];
|
|
63
|
+
/** Patterns that suggest full multi-agent fan-out. */
|
|
64
|
+
const FULL_PATTERNS = [
|
|
65
|
+
/\b(refactor|redesign|migrate|rewrite)\b.*\b(entire|all|whole|system|codebase)\b/i,
|
|
66
|
+
/\b(implement|build|create)\b.*\b(feature|module|system|service)\b/i,
|
|
67
|
+
/\bmulti[- ]?(agent|step|file)\b/i,
|
|
68
|
+
/\b(security audit|pen\s?test|vulnerability scan)\b/i,
|
|
69
|
+
/\bfull\s+(review|analysis|sweep)\b/i,
|
|
70
|
+
];
|
|
71
|
+
// --- Selection Logic ---
|
|
72
|
+
/**
|
|
73
|
+
* Select the appropriate response tier for an incoming message.
|
|
74
|
+
*
|
|
75
|
+
* Priority order:
|
|
76
|
+
* 1. Config routing-rule tier overrides
|
|
77
|
+
* 2. Full-tier keyword patterns
|
|
78
|
+
* 3. Direct-tier keyword patterns (short / simple)
|
|
79
|
+
* 4. Lightweight keyword patterns
|
|
80
|
+
* 5. Context-based adjustments (load, history)
|
|
81
|
+
* 6. Default → standard
|
|
82
|
+
*/
|
|
83
|
+
export function selectResponseTier(message, config, context = {}) {
|
|
84
|
+
const trimmed = message.trim();
|
|
85
|
+
// 1. Config override: check routing rules for explicit tier
|
|
86
|
+
const configTier = matchConfigTier(trimmed, config);
|
|
87
|
+
if (configTier)
|
|
88
|
+
return getTier(configTier);
|
|
89
|
+
// 2. Full patterns (checked first — they are most impactful)
|
|
90
|
+
if (FULL_PATTERNS.some((p) => p.test(trimmed))) {
|
|
91
|
+
return applyLoadAdjustment(getTier('full'), context);
|
|
92
|
+
}
|
|
93
|
+
// 3. Very short messages are usually direct
|
|
94
|
+
if (trimmed.length < 20 && !trimmed.includes('\n')) {
|
|
95
|
+
if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
|
|
96
|
+
return getTier('direct');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// 4. Direct patterns (greetings, simple questions)
|
|
100
|
+
if (DIRECT_PATTERNS.some((p) => p.test(trimmed))) {
|
|
101
|
+
return getTier('direct');
|
|
102
|
+
}
|
|
103
|
+
// 5. Lightweight patterns
|
|
104
|
+
if (LIGHTWEIGHT_PATTERNS.some((p) => p.test(trimmed))) {
|
|
105
|
+
return applyLoadAdjustment(getTier('lightweight'), context);
|
|
106
|
+
}
|
|
107
|
+
// 6. History hint: if recent history contains multi-file changes → standard+
|
|
108
|
+
if (context.recentHistory && context.recentHistory.length > 3) {
|
|
109
|
+
return applyLoadAdjustment(getTier('standard'), context);
|
|
110
|
+
}
|
|
111
|
+
// Default: standard
|
|
112
|
+
return applyLoadAdjustment(getTier('standard'), context);
|
|
113
|
+
}
|
|
114
|
+
// --- Helpers ---
|
|
115
|
+
function matchConfigTier(message, config) {
|
|
116
|
+
if (!config.routing?.rules)
|
|
117
|
+
return undefined;
|
|
118
|
+
const lower = message.toLowerCase();
|
|
119
|
+
for (const rule of config.routing.rules) {
|
|
120
|
+
if (!rule.tier)
|
|
121
|
+
continue;
|
|
122
|
+
// Simple pattern match against the rule pattern
|
|
123
|
+
const words = rule.pattern
|
|
124
|
+
.toLowerCase()
|
|
125
|
+
.split(/[-_\s]+/)
|
|
126
|
+
.filter((w) => w.length > 2);
|
|
127
|
+
if (words.length > 0 && words.every((w) => lower.includes(w))) {
|
|
128
|
+
return rule.tier;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Downgrade tier when load is high to conserve resources.
|
|
135
|
+
*/
|
|
136
|
+
function applyLoadAdjustment(tier, context) {
|
|
137
|
+
if (context.currentLoad === undefined)
|
|
138
|
+
return tier;
|
|
139
|
+
// If load is ≥ 4 active sessions, cap at standard
|
|
140
|
+
if (context.currentLoad >= 4 && tier.tier === 'full') {
|
|
141
|
+
return getTier('standard');
|
|
142
|
+
}
|
|
143
|
+
// If load is ≥ 6, cap at lightweight
|
|
144
|
+
if (context.currentLoad >= 6 && tier.tier === 'standard') {
|
|
145
|
+
return getTier('lightweight');
|
|
146
|
+
}
|
|
147
|
+
return tier;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=response-tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-tiers.js","sourceRoot":"","sources":["../../src/coordinator/response-tiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
|
|
3
|
+
*
|
|
4
|
+
* Programmatic enforcement of governance policies via SDK hooks.
|
|
5
|
+
* Replaces prompt-level rules with deterministic, testable handlers.
|
|
6
|
+
*
|
|
7
|
+
* Hook types:
|
|
8
|
+
* - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
|
|
9
|
+
* - onPostToolUse: Inspect tool results after execution (scrub PII, log)
|
|
10
|
+
* - onSessionStart: Inject context at session creation
|
|
11
|
+
* - onSessionEnd: Cleanup at session teardown
|
|
12
|
+
* - onErrorOccurred: Handle errors from SDK or tools
|
|
13
|
+
*/
|
|
14
|
+
export type HookAction = 'allow' | 'block' | 'modify';
|
|
15
|
+
export interface PreToolUseContext {
|
|
16
|
+
/** Name of the tool being called */
|
|
17
|
+
toolName: string;
|
|
18
|
+
/** Arguments passed to the tool */
|
|
19
|
+
arguments: Record<string, unknown>;
|
|
20
|
+
/** Agent name that invoked the tool */
|
|
21
|
+
agentName: string;
|
|
22
|
+
/** Session ID */
|
|
23
|
+
sessionId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PreToolUseResult {
|
|
26
|
+
action: HookAction;
|
|
27
|
+
/** Modified arguments (only if action === 'modify') */
|
|
28
|
+
modifiedArguments?: Record<string, unknown>;
|
|
29
|
+
/** Reason for blocking (only if action === 'block') */
|
|
30
|
+
reason?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface PostToolUseContext {
|
|
33
|
+
toolName: string;
|
|
34
|
+
arguments: Record<string, unknown>;
|
|
35
|
+
result: unknown;
|
|
36
|
+
agentName: string;
|
|
37
|
+
sessionId: string;
|
|
38
|
+
}
|
|
39
|
+
export interface PostToolUseResult {
|
|
40
|
+
/** Scrubbed or modified result */
|
|
41
|
+
result: unknown;
|
|
42
|
+
}
|
|
43
|
+
export type PreToolUseHook = (ctx: PreToolUseContext) => PreToolUseResult | Promise<PreToolUseResult>;
|
|
44
|
+
export type PostToolUseHook = (ctx: PostToolUseContext) => PostToolUseResult | Promise<PostToolUseResult>;
|
|
45
|
+
export interface PolicyConfig {
|
|
46
|
+
/** File paths agents are allowed to write to (glob patterns) */
|
|
47
|
+
allowedWritePaths?: string[];
|
|
48
|
+
/** Shell commands that are always blocked */
|
|
49
|
+
blockedCommands?: string[];
|
|
50
|
+
/** Maximum ask_user calls per session */
|
|
51
|
+
maxAskUserPerSession?: number;
|
|
52
|
+
/** Enable PII scrubbing on tool outputs */
|
|
53
|
+
scrubPii?: boolean;
|
|
54
|
+
/** Enable reviewer lockout protocol */
|
|
55
|
+
reviewerLockout?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare const DEFAULT_BLOCKED_COMMANDS: string[];
|
|
58
|
+
export declare class HookPipeline {
|
|
59
|
+
private preToolHooks;
|
|
60
|
+
private postToolHooks;
|
|
61
|
+
private config;
|
|
62
|
+
private askUserCallCount;
|
|
63
|
+
private reviewerLockout;
|
|
64
|
+
constructor(config?: PolicyConfig);
|
|
65
|
+
/** Register a pre-tool-use hook */
|
|
66
|
+
addPreToolHook(hook: PreToolUseHook): void;
|
|
67
|
+
/** Register a post-tool-use hook */
|
|
68
|
+
addPostToolHook(hook: PostToolUseHook): void;
|
|
69
|
+
/** Run all pre-tool hooks in order. First 'block' wins. */
|
|
70
|
+
runPreToolHooks(ctx: PreToolUseContext): Promise<PreToolUseResult>;
|
|
71
|
+
/** Run all post-tool hooks in order */
|
|
72
|
+
runPostToolHooks(ctx: PostToolUseContext): Promise<PostToolUseResult>;
|
|
73
|
+
/** Create file-write guard hook */
|
|
74
|
+
private createFileWriteGuard;
|
|
75
|
+
/** Create shell command restriction hook */
|
|
76
|
+
private createShellCommandRestriction;
|
|
77
|
+
/** Create ask_user rate limiter hook */
|
|
78
|
+
private createAskUserRateLimiter;
|
|
79
|
+
/** Create PII scrubbing hook */
|
|
80
|
+
private createPiiScrubber;
|
|
81
|
+
/** Recursively scrub PII from object */
|
|
82
|
+
private scrubObjectRecursive;
|
|
83
|
+
/** Simple glob matcher (supports * and **) */
|
|
84
|
+
private matchGlob;
|
|
85
|
+
/** Get the reviewer lockout hook instance */
|
|
86
|
+
getReviewerLockout(): ReviewerLockoutHook;
|
|
87
|
+
}
|
|
88
|
+
export declare class ReviewerLockoutHook {
|
|
89
|
+
private lockoutRegistry;
|
|
90
|
+
/** Lock out an agent from an artifact */
|
|
91
|
+
lockout(artifactId: string, agentName: string): void;
|
|
92
|
+
/** Check if an agent is locked out of an artifact */
|
|
93
|
+
isLockedOut(artifactId: string, agentName: string): boolean;
|
|
94
|
+
/** Clear lockout for an artifact */
|
|
95
|
+
clearLockout(artifactId: string): void;
|
|
96
|
+
/** Get all lockouts for an artifact */
|
|
97
|
+
getLockedAgents(artifactId: string): string[];
|
|
98
|
+
/** Clear all lockouts */
|
|
99
|
+
clearAll(): void;
|
|
100
|
+
/** Create pre-tool-use hook for reviewer lockout */
|
|
101
|
+
createHook(): PreToolUseHook;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
|
|
3
|
+
*
|
|
4
|
+
* Programmatic enforcement of governance policies via SDK hooks.
|
|
5
|
+
* Replaces prompt-level rules with deterministic, testable handlers.
|
|
6
|
+
*
|
|
7
|
+
* Hook types:
|
|
8
|
+
* - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
|
|
9
|
+
* - onPostToolUse: Inspect tool results after execution (scrub PII, log)
|
|
10
|
+
* - onSessionStart: Inject context at session creation
|
|
11
|
+
* - onSessionEnd: Cleanup at session teardown
|
|
12
|
+
* - onErrorOccurred: Handle errors from SDK or tools
|
|
13
|
+
*/
|
|
14
|
+
export const DEFAULT_BLOCKED_COMMANDS = [
|
|
15
|
+
'rm -rf',
|
|
16
|
+
'git push --force',
|
|
17
|
+
'git rebase',
|
|
18
|
+
'git reset --hard',
|
|
19
|
+
];
|
|
20
|
+
// --- Hook Pipeline ---
|
|
21
|
+
export class HookPipeline {
|
|
22
|
+
preToolHooks = [];
|
|
23
|
+
postToolHooks = [];
|
|
24
|
+
config;
|
|
25
|
+
askUserCallCount = new Map();
|
|
26
|
+
reviewerLockout;
|
|
27
|
+
constructor(config = {}) {
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.reviewerLockout = new ReviewerLockoutHook();
|
|
30
|
+
// Register file-write guard hook
|
|
31
|
+
if (config.allowedWritePaths && config.allowedWritePaths.length > 0) {
|
|
32
|
+
this.addPreToolHook(this.createFileWriteGuard(config.allowedWritePaths));
|
|
33
|
+
}
|
|
34
|
+
// Register shell command restriction hook
|
|
35
|
+
const blockedCommands = config.blockedCommands || DEFAULT_BLOCKED_COMMANDS;
|
|
36
|
+
if (blockedCommands.length > 0) {
|
|
37
|
+
this.addPreToolHook(this.createShellCommandRestriction(blockedCommands));
|
|
38
|
+
}
|
|
39
|
+
// Register ask_user rate limiter
|
|
40
|
+
if (config.maxAskUserPerSession !== undefined && config.maxAskUserPerSession > 0) {
|
|
41
|
+
this.addPreToolHook(this.createAskUserRateLimiter(config.maxAskUserPerSession));
|
|
42
|
+
}
|
|
43
|
+
// Register reviewer lockout hook
|
|
44
|
+
if (config.reviewerLockout) {
|
|
45
|
+
this.addPreToolHook(this.reviewerLockout.createHook());
|
|
46
|
+
}
|
|
47
|
+
// Register PII scrubbing hook
|
|
48
|
+
if (config.scrubPii) {
|
|
49
|
+
this.addPostToolHook(this.createPiiScrubber());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Register a pre-tool-use hook */
|
|
53
|
+
addPreToolHook(hook) {
|
|
54
|
+
this.preToolHooks.push(hook);
|
|
55
|
+
}
|
|
56
|
+
/** Register a post-tool-use hook */
|
|
57
|
+
addPostToolHook(hook) {
|
|
58
|
+
this.postToolHooks.push(hook);
|
|
59
|
+
}
|
|
60
|
+
/** Run all pre-tool hooks in order. First 'block' wins. */
|
|
61
|
+
async runPreToolHooks(ctx) {
|
|
62
|
+
for (const hook of this.preToolHooks) {
|
|
63
|
+
const result = await hook(ctx);
|
|
64
|
+
if (result.action === 'block')
|
|
65
|
+
return result;
|
|
66
|
+
if (result.action === 'modify' && result.modifiedArguments) {
|
|
67
|
+
ctx = { ...ctx, arguments: result.modifiedArguments };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { action: 'allow' };
|
|
71
|
+
}
|
|
72
|
+
/** Run all post-tool hooks in order */
|
|
73
|
+
async runPostToolHooks(ctx) {
|
|
74
|
+
let result = ctx.result;
|
|
75
|
+
for (const hook of this.postToolHooks) {
|
|
76
|
+
const hookResult = await hook({ ...ctx, result });
|
|
77
|
+
result = hookResult.result;
|
|
78
|
+
}
|
|
79
|
+
return { result };
|
|
80
|
+
}
|
|
81
|
+
/** Create file-write guard hook */
|
|
82
|
+
createFileWriteGuard(allowedPaths) {
|
|
83
|
+
return (ctx) => {
|
|
84
|
+
const writeTools = ['edit', 'create', 'write_file', 'create_file'];
|
|
85
|
+
if (!writeTools.includes(ctx.toolName)) {
|
|
86
|
+
return { action: 'allow' };
|
|
87
|
+
}
|
|
88
|
+
const filePath = ctx.arguments.path || ctx.arguments.file_path;
|
|
89
|
+
if (!filePath || typeof filePath !== 'string') {
|
|
90
|
+
return { action: 'allow' };
|
|
91
|
+
}
|
|
92
|
+
const isAllowed = allowedPaths.some(pattern => this.matchGlob(filePath, pattern));
|
|
93
|
+
if (!isAllowed) {
|
|
94
|
+
console.warn('[HookPipeline] File write blocked', {
|
|
95
|
+
agent: ctx.agentName,
|
|
96
|
+
tool: ctx.toolName,
|
|
97
|
+
path: filePath,
|
|
98
|
+
allowedPaths,
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
action: 'block',
|
|
102
|
+
reason: `File write blocked: "${filePath}" does not match allowed paths. Allowed patterns: ${allowedPaths.join(', ')}`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return { action: 'allow' };
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Create shell command restriction hook */
|
|
109
|
+
createShellCommandRestriction(blockedCommands) {
|
|
110
|
+
return (ctx) => {
|
|
111
|
+
const shellTools = ['powershell', 'bash', 'shell', 'exec'];
|
|
112
|
+
if (!shellTools.includes(ctx.toolName)) {
|
|
113
|
+
return { action: 'allow' };
|
|
114
|
+
}
|
|
115
|
+
const command = ctx.arguments.command || ctx.arguments.cmd;
|
|
116
|
+
if (!command || typeof command !== 'string') {
|
|
117
|
+
return { action: 'allow' };
|
|
118
|
+
}
|
|
119
|
+
for (const blocked of blockedCommands) {
|
|
120
|
+
if (command.includes(blocked)) {
|
|
121
|
+
console.warn('[HookPipeline] Shell command blocked', {
|
|
122
|
+
agent: ctx.agentName,
|
|
123
|
+
tool: ctx.toolName,
|
|
124
|
+
command,
|
|
125
|
+
blockedPattern: blocked,
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
action: 'block',
|
|
129
|
+
reason: `Shell command blocked: Command contains prohibited pattern "${blocked}". Blocked commands: ${blockedCommands.join(', ')}`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { action: 'allow' };
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** Create ask_user rate limiter hook */
|
|
137
|
+
createAskUserRateLimiter(maxCalls) {
|
|
138
|
+
return (ctx) => {
|
|
139
|
+
if (ctx.toolName !== 'ask_user') {
|
|
140
|
+
return { action: 'allow' };
|
|
141
|
+
}
|
|
142
|
+
const currentCount = this.askUserCallCount.get(ctx.sessionId) || 0;
|
|
143
|
+
if (currentCount >= maxCalls) {
|
|
144
|
+
console.warn('[HookPipeline] ask_user rate limit exceeded', {
|
|
145
|
+
agent: ctx.agentName,
|
|
146
|
+
sessionId: ctx.sessionId,
|
|
147
|
+
currentCount,
|
|
148
|
+
maxCalls,
|
|
149
|
+
});
|
|
150
|
+
return {
|
|
151
|
+
action: 'block',
|
|
152
|
+
reason: `ask_user rate limit exceeded: ${currentCount}/${maxCalls} calls used for this session. The agent should proceed without user input.`,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
this.askUserCallCount.set(ctx.sessionId, currentCount + 1);
|
|
156
|
+
return { action: 'allow' };
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/** Create PII scrubbing hook */
|
|
160
|
+
createPiiScrubber() {
|
|
161
|
+
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
|
|
162
|
+
return (ctx) => {
|
|
163
|
+
let result = ctx.result;
|
|
164
|
+
if (typeof result === 'string') {
|
|
165
|
+
const scrubbed = result.replace(emailRegex, '[EMAIL_REDACTED]');
|
|
166
|
+
if (scrubbed !== result) {
|
|
167
|
+
console.warn('[HookPipeline] PII scrubbed from tool output', {
|
|
168
|
+
tool: ctx.toolName,
|
|
169
|
+
agent: ctx.agentName,
|
|
170
|
+
sessionId: ctx.sessionId,
|
|
171
|
+
});
|
|
172
|
+
result = scrubbed;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (result && typeof result === 'object') {
|
|
176
|
+
result = this.scrubObjectRecursive(result, emailRegex);
|
|
177
|
+
}
|
|
178
|
+
return { result };
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/** Recursively scrub PII from object */
|
|
182
|
+
scrubObjectRecursive(obj, regex) {
|
|
183
|
+
if (typeof obj === 'string') {
|
|
184
|
+
return obj.replace(regex, '[EMAIL_REDACTED]');
|
|
185
|
+
}
|
|
186
|
+
if (Array.isArray(obj)) {
|
|
187
|
+
return obj.map(item => this.scrubObjectRecursive(item, regex));
|
|
188
|
+
}
|
|
189
|
+
if (obj && typeof obj === 'object') {
|
|
190
|
+
const scrubbed = {};
|
|
191
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
192
|
+
scrubbed[key] = this.scrubObjectRecursive(value, regex);
|
|
193
|
+
}
|
|
194
|
+
return scrubbed;
|
|
195
|
+
}
|
|
196
|
+
return obj;
|
|
197
|
+
}
|
|
198
|
+
/** Simple glob matcher (supports * and **) */
|
|
199
|
+
matchGlob(path, pattern) {
|
|
200
|
+
// Normalize path separators
|
|
201
|
+
const normalizedPath = path.replace(/\\/g, '/');
|
|
202
|
+
const normalizedPattern = pattern.replace(/\\/g, '/');
|
|
203
|
+
// Convert glob pattern to regex (escape . first, then handle wildcards)
|
|
204
|
+
let regexPattern = normalizedPattern
|
|
205
|
+
.replace(/\./g, '\\.') // Escape literal dots first
|
|
206
|
+
.replace(/\*\*/g, '___DOUBLESTAR___') // Placeholder for **
|
|
207
|
+
.replace(/\*/g, '[^/]*') // Single * matches within path segment
|
|
208
|
+
.replace(/___DOUBLESTAR___/g, '.*') // ** matches across segments
|
|
209
|
+
.replace(/\?/g, '.'); // ? matches single char
|
|
210
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
211
|
+
return regex.test(normalizedPath);
|
|
212
|
+
}
|
|
213
|
+
/** Get the reviewer lockout hook instance */
|
|
214
|
+
getReviewerLockout() {
|
|
215
|
+
return this.reviewerLockout;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// --- Reviewer Lockout Hook ---
|
|
219
|
+
export class ReviewerLockoutHook {
|
|
220
|
+
lockoutRegistry = new Map();
|
|
221
|
+
/** Lock out an agent from an artifact */
|
|
222
|
+
lockout(artifactId, agentName) {
|
|
223
|
+
if (!this.lockoutRegistry.has(artifactId)) {
|
|
224
|
+
this.lockoutRegistry.set(artifactId, new Set());
|
|
225
|
+
}
|
|
226
|
+
this.lockoutRegistry.get(artifactId).add(agentName);
|
|
227
|
+
}
|
|
228
|
+
/** Check if an agent is locked out of an artifact */
|
|
229
|
+
isLockedOut(artifactId, agentName) {
|
|
230
|
+
const lockedAgents = this.lockoutRegistry.get(artifactId);
|
|
231
|
+
return lockedAgents ? lockedAgents.has(agentName) : false;
|
|
232
|
+
}
|
|
233
|
+
/** Clear lockout for an artifact */
|
|
234
|
+
clearLockout(artifactId) {
|
|
235
|
+
this.lockoutRegistry.delete(artifactId);
|
|
236
|
+
}
|
|
237
|
+
/** Get all lockouts for an artifact */
|
|
238
|
+
getLockedAgents(artifactId) {
|
|
239
|
+
const lockedAgents = this.lockoutRegistry.get(artifactId);
|
|
240
|
+
return lockedAgents ? Array.from(lockedAgents) : [];
|
|
241
|
+
}
|
|
242
|
+
/** Clear all lockouts */
|
|
243
|
+
clearAll() {
|
|
244
|
+
this.lockoutRegistry.clear();
|
|
245
|
+
}
|
|
246
|
+
/** Create pre-tool-use hook for reviewer lockout */
|
|
247
|
+
createHook() {
|
|
248
|
+
return (ctx) => {
|
|
249
|
+
const writeTools = ['edit', 'create', 'write_file', 'create_file'];
|
|
250
|
+
if (!writeTools.includes(ctx.toolName)) {
|
|
251
|
+
return { action: 'allow' };
|
|
252
|
+
}
|
|
253
|
+
const filePath = ctx.arguments.path || ctx.arguments.file_path;
|
|
254
|
+
if (!filePath || typeof filePath !== 'string') {
|
|
255
|
+
return { action: 'allow' };
|
|
256
|
+
}
|
|
257
|
+
// Check all artifacts to see if this agent is locked out
|
|
258
|
+
for (const [artifactId, lockedAgents] of this.lockoutRegistry.entries()) {
|
|
259
|
+
if (lockedAgents.has(ctx.agentName)) {
|
|
260
|
+
// Agent is locked out of this artifact — check if file belongs to it
|
|
261
|
+
// Simple heuristic: artifact ID is typically a file path or pattern
|
|
262
|
+
if (filePath.includes(artifactId) || artifactId.includes(filePath)) {
|
|
263
|
+
console.warn('[HookPipeline] Reviewer lockout triggered', {
|
|
264
|
+
agent: ctx.agentName,
|
|
265
|
+
artifactId,
|
|
266
|
+
filePath,
|
|
267
|
+
});
|
|
268
|
+
return {
|
|
269
|
+
action: 'block',
|
|
270
|
+
reason: `Reviewer lockout: Agent "${ctx.agentName}" is locked out of artifact "${artifactId}". Another reviewer must handle this artifact.`,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return { action: 'allow' };
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Squad SDK — Public API barrel export.
|
|
3
|
+
* This module has ZERO side effects. Safe to import as a library.
|
|
4
|
+
* CLI entry point lives in src/cli-entry.ts.
|
|
5
|
+
*/
|
|
6
|
+
export declare const VERSION = "0.8.0";
|
|
7
|
+
export { resolveSquad, resolveGlobalSquadPath, ensureSquadPath } from './resolution.js';
|
|
8
|
+
export * from './config/index.js';
|
|
9
|
+
export * from './agents/onboarding.js';
|
|
10
|
+
export * from './casting/index.js';
|
|
11
|
+
export * from './skills/index.js';
|
|
12
|
+
export { selectResponseTier, getTier } from './coordinator/response-tiers.js';
|
|
13
|
+
export type { ResponseTier, TierName, TierContext, ModelTierSuggestion } from './coordinator/response-tiers.js';
|
|
14
|
+
export { loadConfig, loadConfigSync } from './runtime/config.js';
|
|
15
|
+
export type { ConfigLoadResult, ConfigValidationError } from './runtime/config.js';
|
|
16
|
+
export * from './runtime/streaming.js';
|
|
17
|
+
export * from './runtime/cost-tracker.js';
|
|
18
|
+
export * from './runtime/telemetry.js';
|
|
19
|
+
export * from './runtime/offline.js';
|
|
20
|
+
export * from './runtime/i18n.js';
|
|
21
|
+
export * from './runtime/benchmarks.js';
|
|
22
|
+
export * from './marketplace/index.js';
|
|
23
|
+
export * from './build/index.js';
|
|
24
|
+
export * from './sharing/index.js';
|
|
2
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC9E,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAExC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
|