@slope-dev/slope 1.5.1
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/LICENSE +21 -0
- package/README.md +243 -0
- package/dist/cli/commands/auto-card.d.ts +2 -0
- package/dist/cli/commands/auto-card.d.ts.map +1 -0
- package/dist/cli/commands/auto-card.js +267 -0
- package/dist/cli/commands/auto-card.js.map +1 -0
- package/dist/cli/commands/briefing.d.ts +2 -0
- package/dist/cli/commands/briefing.d.ts.map +1 -0
- package/dist/cli/commands/briefing.js +133 -0
- package/dist/cli/commands/briefing.js.map +1 -0
- package/dist/cli/commands/card.d.ts +2 -0
- package/dist/cli/commands/card.d.ts.map +1 -0
- package/dist/cli/commands/card.js +144 -0
- package/dist/cli/commands/card.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +2 -0
- package/dist/cli/commands/claim.d.ts.map +1 -0
- package/dist/cli/commands/claim.js +99 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/classify.d.ts +2 -0
- package/dist/cli/commands/classify.d.ts.map +1 -0
- package/dist/cli/commands/classify.js +70 -0
- package/dist/cli/commands/classify.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +4 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +156 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/distill.d.ts +2 -0
- package/dist/cli/commands/distill.d.ts.map +1 -0
- package/dist/cli/commands/distill.js +91 -0
- package/dist/cli/commands/distill.js.map +1 -0
- package/dist/cli/commands/escalate.d.ts +2 -0
- package/dist/cli/commands/escalate.d.ts.map +1 -0
- package/dist/cli/commands/escalate.js +136 -0
- package/dist/cli/commands/escalate.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +2 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +147 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/flows.d.ts +2 -0
- package/dist/cli/commands/flows.d.ts.map +1 -0
- package/dist/cli/commands/flows.js +156 -0
- package/dist/cli/commands/flows.js.map +1 -0
- package/dist/cli/commands/guard.d.ts +15 -0
- package/dist/cli/commands/guard.d.ts.map +1 -0
- package/dist/cli/commands/guard.js +207 -0
- package/dist/cli/commands/guard.js.map +1 -0
- package/dist/cli/commands/hook.d.ts +2 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +299 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +421 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/map.d.ts +10 -0
- package/dist/cli/commands/map.d.ts.map +1 -0
- package/dist/cli/commands/map.js +591 -0
- package/dist/cli/commands/map.js.map +1 -0
- package/dist/cli/commands/next.d.ts +2 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +28 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +54 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +2 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +118 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/release.d.ts +2 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +64 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/commands/report.d.ts +2 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +68 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/review-state.d.ts +11 -0
- package/dist/cli/commands/review-state.d.ts.map +1 -0
- package/dist/cli/commands/review-state.js +193 -0
- package/dist/cli/commands/review-state.js.map +1 -0
- package/dist/cli/commands/review.d.ts +2 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +53 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/roadmap.d.ts +2 -0
- package/dist/cli/commands/roadmap.d.ts.map +1 -0
- package/dist/cli/commands/roadmap.js +283 -0
- package/dist/cli/commands/roadmap.js.map +1 -0
- package/dist/cli/commands/session.d.ts +2 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +232 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/standup.d.ts +2 -0
- package/dist/cli/commands/standup.d.ts.map +1 -0
- package/dist/cli/commands/standup.js +117 -0
- package/dist/cli/commands/standup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +148 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/tournament.d.ts +2 -0
- package/dist/cli/commands/tournament.d.ts.map +1 -0
- package/dist/cli/commands/tournament.js +60 -0
- package/dist/cli/commands/tournament.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +2 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +74 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/guards/commit-nudge.d.ts +7 -0
- package/dist/cli/guards/commit-nudge.d.ts.map +1 -0
- package/dist/cli/guards/commit-nudge.js +50 -0
- package/dist/cli/guards/commit-nudge.js.map +1 -0
- package/dist/cli/guards/compaction.d.ts +8 -0
- package/dist/cli/guards/compaction.d.ts.map +1 -0
- package/dist/cli/guards/compaction.js +79 -0
- package/dist/cli/guards/compaction.js.map +1 -0
- package/dist/cli/guards/explore.d.ts +8 -0
- package/dist/cli/guards/explore.d.ts.map +1 -0
- package/dist/cli/guards/explore.js +78 -0
- package/dist/cli/guards/explore.js.map +1 -0
- package/dist/cli/guards/hazard.d.ts +7 -0
- package/dist/cli/guards/hazard.d.ts.map +1 -0
- package/dist/cli/guards/hazard.js +43 -0
- package/dist/cli/guards/hazard.js.map +1 -0
- package/dist/cli/guards/next-action.d.ts +28 -0
- package/dist/cli/guards/next-action.d.ts.map +1 -0
- package/dist/cli/guards/next-action.js +196 -0
- package/dist/cli/guards/next-action.js.map +1 -0
- package/dist/cli/guards/push-nudge.d.ts +7 -0
- package/dist/cli/guards/push-nudge.d.ts.map +1 -0
- package/dist/cli/guards/push-nudge.js +53 -0
- package/dist/cli/guards/push-nudge.js.map +1 -0
- package/dist/cli/guards/review-tier.d.ts +7 -0
- package/dist/cli/guards/review-tier.d.ts.map +1 -0
- package/dist/cli/guards/review-tier.js +108 -0
- package/dist/cli/guards/review-tier.js.map +1 -0
- package/dist/cli/guards/scope-drift.d.ts +7 -0
- package/dist/cli/guards/scope-drift.d.ts.map +1 -0
- package/dist/cli/guards/scope-drift.js +47 -0
- package/dist/cli/guards/scope-drift.js.map +1 -0
- package/dist/cli/guards/stop-check.d.ts +7 -0
- package/dist/cli/guards/stop-check.d.ts.map +1 -0
- package/dist/cli/guards/stop-check.js +34 -0
- package/dist/cli/guards/stop-check.js.map +1 -0
- package/dist/cli/guards/subagent-gate.d.ts +7 -0
- package/dist/cli/guards/subagent-gate.d.ts.map +1 -0
- package/dist/cli/guards/subagent-gate.js +39 -0
- package/dist/cli/guards/subagent-gate.js.map +1 -0
- package/dist/cli/guards/version-check.d.ts +8 -0
- package/dist/cli/guards/version-check.d.ts.map +1 -0
- package/dist/cli/guards/version-check.js +49 -0
- package/dist/cli/guards/version-check.js.map +1 -0
- package/dist/cli/guards/workflow-gate.d.ts +7 -0
- package/dist/cli/guards/workflow-gate.d.ts.map +1 -0
- package/dist/cli/guards/workflow-gate.js +31 -0
- package/dist/cli/guards/workflow-gate.js.map +1 -0
- package/dist/cli/hooks-config.d.ts +9 -0
- package/dist/cli/hooks-config.d.ts.map +1 -0
- package/dist/cli/hooks-config.js +21 -0
- package/dist/cli/hooks-config.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +282 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/loader.d.ts +2 -0
- package/dist/cli/loader.d.ts.map +1 -0
- package/dist/cli/loader.js +2 -0
- package/dist/cli/loader.js.map +1 -0
- package/dist/cli/metaphor.d.ts +6 -0
- package/dist/cli/metaphor.d.ts.map +1 -0
- package/dist/cli/metaphor.js +26 -0
- package/dist/cli/metaphor.js.map +1 -0
- package/dist/cli/registries/api-registry.d.ts +11 -0
- package/dist/cli/registries/api-registry.d.ts.map +1 -0
- package/dist/cli/registries/api-registry.js +42 -0
- package/dist/cli/registries/api-registry.js.map +1 -0
- package/dist/cli/registries/file-registry.d.ts +13 -0
- package/dist/cli/registries/file-registry.d.ts.map +1 -0
- package/dist/cli/registries/file-registry.js +55 -0
- package/dist/cli/registries/file-registry.js.map +1 -0
- package/dist/cli/registries/index.d.ts +7 -0
- package/dist/cli/registries/index.d.ts.map +1 -0
- package/dist/cli/registries/index.js +20 -0
- package/dist/cli/registries/index.js.map +1 -0
- package/dist/cli/store.d.ts +3 -0
- package/dist/cli/store.d.ts.map +1 -0
- package/dist/cli/store.js +13 -0
- package/dist/cli/store.js.map +1 -0
- package/dist/cli/template-generator.d.ts +15 -0
- package/dist/cli/template-generator.d.ts.map +1 -0
- package/dist/cli/template-generator.js +562 -0
- package/dist/cli/template-generator.js.map +1 -0
- package/dist/core/advisor.d.ts +63 -0
- package/dist/core/advisor.d.ts.map +1 -0
- package/dist/core/advisor.js +395 -0
- package/dist/core/advisor.js.map +1 -0
- package/dist/core/briefing.d.ts +103 -0
- package/dist/core/briefing.d.ts.map +1 -0
- package/dist/core/briefing.js +380 -0
- package/dist/core/briefing.js.map +1 -0
- package/dist/core/builder.d.ts +70 -0
- package/dist/core/builder.d.ts.map +1 -0
- package/dist/core/builder.js +175 -0
- package/dist/core/builder.js.map +1 -0
- package/dist/core/ci-signals.d.ts +10 -0
- package/dist/core/ci-signals.d.ts.map +1 -0
- package/dist/core/ci-signals.js +145 -0
- package/dist/core/ci-signals.js.map +1 -0
- package/dist/core/config.d.ts +48 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +14 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +44 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/dashboard.d.ts +40 -0
- package/dist/core/dashboard.d.ts.map +1 -0
- package/dist/core/dashboard.js +413 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/dispersion.d.ts +12 -0
- package/dist/core/dispersion.d.ts.map +1 -0
- package/dist/core/dispersion.js +164 -0
- package/dist/core/dispersion.js.map +1 -0
- package/dist/core/escalation.d.ts +52 -0
- package/dist/core/escalation.d.ts.map +1 -0
- package/dist/core/escalation.js +105 -0
- package/dist/core/escalation.js.map +1 -0
- package/dist/core/flows.d.ts +44 -0
- package/dist/core/flows.d.ts.map +1 -0
- package/dist/core/flows.js +123 -0
- package/dist/core/flows.js.map +1 -0
- package/dist/core/formatter.d.ts +23 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +301 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/guard.d.ts +124 -0
- package/dist/core/guard.d.ts.map +1 -0
- package/dist/core/guard.js +185 -0
- package/dist/core/guard.js.map +1 -0
- package/dist/core/handicap.d.ts +22 -0
- package/dist/core/handicap.d.ts.map +1 -0
- package/dist/core/handicap.js +111 -0
- package/dist/core/handicap.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +62 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/leaderboard.d.ts +32 -0
- package/dist/core/leaderboard.d.ts.map +1 -0
- package/dist/core/leaderboard.js +98 -0
- package/dist/core/leaderboard.js.map +1 -0
- package/dist/core/loader.d.ts +17 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +68 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/metaphor.d.ts +73 -0
- package/dist/core/metaphor.d.ts.map +1 -0
- package/dist/core/metaphor.js +73 -0
- package/dist/core/metaphor.js.map +1 -0
- package/dist/core/metaphors/baseball.d.ts +3 -0
- package/dist/core/metaphors/baseball.d.ts.map +1 -0
- package/dist/core/metaphors/baseball.js +89 -0
- package/dist/core/metaphors/baseball.js.map +1 -0
- package/dist/core/metaphors/dnd.d.ts +3 -0
- package/dist/core/metaphors/dnd.d.ts.map +1 -0
- package/dist/core/metaphors/dnd.js +89 -0
- package/dist/core/metaphors/dnd.js.map +1 -0
- package/dist/core/metaphors/gaming.d.ts +3 -0
- package/dist/core/metaphors/gaming.d.ts.map +1 -0
- package/dist/core/metaphors/gaming.js +89 -0
- package/dist/core/metaphors/gaming.js.map +1 -0
- package/dist/core/metaphors/golf.d.ts +3 -0
- package/dist/core/metaphors/golf.d.ts.map +1 -0
- package/dist/core/metaphors/golf.js +89 -0
- package/dist/core/metaphors/golf.js.map +1 -0
- package/dist/core/metaphors/index.d.ts +8 -0
- package/dist/core/metaphors/index.d.ts.map +1 -0
- package/dist/core/metaphors/index.js +17 -0
- package/dist/core/metaphors/index.js.map +1 -0
- package/dist/core/metaphors/matrix.d.ts +3 -0
- package/dist/core/metaphors/matrix.d.ts.map +1 -0
- package/dist/core/metaphors/matrix.js +89 -0
- package/dist/core/metaphors/matrix.js.map +1 -0
- package/dist/core/metaphors/tennis.d.ts +3 -0
- package/dist/core/metaphors/tennis.d.ts.map +1 -0
- package/dist/core/metaphors/tennis.js +89 -0
- package/dist/core/metaphors/tennis.js.map +1 -0
- package/dist/core/pipeline.d.ts +39 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +158 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/player.d.ts +51 -0
- package/dist/core/player.d.ts.map +1 -0
- package/dist/core/player.js +101 -0
- package/dist/core/player.js.map +1 -0
- package/dist/core/plugins.d.ts +33 -0
- package/dist/core/plugins.d.ts.map +1 -0
- package/dist/core/plugins.js +176 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/pr-signals.d.ts +23 -0
- package/dist/core/pr-signals.d.ts.map +1 -0
- package/dist/core/pr-signals.js +178 -0
- package/dist/core/pr-signals.js.map +1 -0
- package/dist/core/registry.d.ts +20 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +62 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/report.d.ts +50 -0
- package/dist/core/report.d.ts.map +1 -0
- package/dist/core/report.js +392 -0
- package/dist/core/report.js.map +1 -0
- package/dist/core/roadmap.d.ts +74 -0
- package/dist/core/roadmap.d.ts.map +1 -0
- package/dist/core/roadmap.js +389 -0
- package/dist/core/roadmap.js.map +1 -0
- package/dist/core/roles.d.ts +23 -0
- package/dist/core/roles.d.ts.map +1 -0
- package/dist/core/roles.js +107 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/standup.d.ts +44 -0
- package/dist/core/standup.d.ts.map +1 -0
- package/dist/core/standup.js +164 -0
- package/dist/core/standup.js.map +1 -0
- package/dist/core/store.d.ts +43 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +11 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/team-handicap.d.ts +59 -0
- package/dist/core/team-handicap.d.ts.map +1 -0
- package/dist/core/team-handicap.js +227 -0
- package/dist/core/team-handicap.js.map +1 -0
- package/dist/core/tournament.d.ts +12 -0
- package/dist/core/tournament.d.ts.map +1 -0
- package/dist/core/tournament.js +249 -0
- package/dist/core/tournament.js.map +1 -0
- package/dist/core/types.d.ts +339 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validation.d.ts +23 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +140 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +17 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +363 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/index.test.d.ts +2 -0
- package/dist/mcp/index.test.d.ts.map +1 -0
- package/dist/mcp/index.test.js +497 -0
- package/dist/mcp/index.test.js.map +1 -0
- package/dist/mcp/registry.d.ts +17 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +708 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/sandbox.d.ts +15 -0
- package/dist/mcp/sandbox.d.ts.map +1 -0
- package/dist/mcp/sandbox.js +153 -0
- package/dist/mcp/sandbox.js.map +1 -0
- package/dist/store/index.d.ts +40 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +324 -0
- package/dist/store/index.js.map +1 -0
- package/dist/tokens/colors.d.ts +47 -0
- package/dist/tokens/colors.d.ts.map +1 -0
- package/dist/tokens/colors.js +56 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/css.d.ts +3 -0
- package/dist/tokens/css.d.ts.map +1 -0
- package/dist/tokens/css.js +58 -0
- package/dist/tokens/css.js.map +1 -0
- package/dist/tokens/index.d.ts +5 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +6 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/spacing.d.ts +23 -0
- package/dist/tokens/spacing.d.ts.map +1 -0
- package/dist/tokens/spacing.js +28 -0
- package/dist/tokens/spacing.js.map +1 -0
- package/dist/tokens/typography.d.ts +28 -0
- package/dist/tokens/typography.d.ts.map +1 -0
- package/dist/tokens/typography.js +34 -0
- package/dist/tokens/typography.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { createSlopeToolsServer, SLOPE_MCP_TOOL_NAMES, detectSetupHints, buildSetupHint } from './index.js';
|
|
3
|
+
import { SLOPE_REGISTRY, SLOPE_TYPES } from './registry.js';
|
|
4
|
+
import { runInSandbox } from './sandbox.js';
|
|
5
|
+
import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
/** In-memory mock store for testing */
|
|
9
|
+
function createMockStore() {
|
|
10
|
+
const sessions = [];
|
|
11
|
+
const claims = [];
|
|
12
|
+
return {
|
|
13
|
+
sessions,
|
|
14
|
+
claims,
|
|
15
|
+
async registerSession(s) {
|
|
16
|
+
const session = { ...s, started_at: new Date().toISOString(), last_heartbeat_at: new Date().toISOString() };
|
|
17
|
+
sessions.push(session);
|
|
18
|
+
return session;
|
|
19
|
+
},
|
|
20
|
+
async removeSession(id) {
|
|
21
|
+
const idx = sessions.findIndex(s => s.session_id === id);
|
|
22
|
+
if (idx === -1)
|
|
23
|
+
return false;
|
|
24
|
+
sessions.splice(idx, 1);
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
async getActiveSessions() { return [...sessions]; },
|
|
28
|
+
async getSessionsBySwarm(swarmId) { return sessions.filter(s => s.swarm_id === swarmId); },
|
|
29
|
+
async updateHeartbeat() { },
|
|
30
|
+
async cleanStaleSessions() { return 0; },
|
|
31
|
+
async claim(input) {
|
|
32
|
+
const claim = { ...input, id: `claim-${Date.now()}`, claimed_at: new Date().toISOString() };
|
|
33
|
+
claims.push(claim);
|
|
34
|
+
return claim;
|
|
35
|
+
},
|
|
36
|
+
async release(id) {
|
|
37
|
+
const idx = claims.findIndex(c => c.id === id);
|
|
38
|
+
if (idx === -1)
|
|
39
|
+
return false;
|
|
40
|
+
claims.splice(idx, 1);
|
|
41
|
+
return true;
|
|
42
|
+
},
|
|
43
|
+
async list(n) { return claims.filter(c => c.sprint_number === n); },
|
|
44
|
+
async get(id) { return claims.find(c => c.id === id); },
|
|
45
|
+
async getActiveClaims(n) { return n !== undefined ? claims.filter(c => c.sprint_number === n) : [...claims]; },
|
|
46
|
+
async saveScorecard() { },
|
|
47
|
+
async listScorecards() { return []; },
|
|
48
|
+
async loadCommonIssues() { return { recurring_patterns: [] }; },
|
|
49
|
+
async saveCommonIssues() { },
|
|
50
|
+
async insertEvent(e) { return { ...e, id: `evt-${Date.now()}`, timestamp: new Date().toISOString() }; },
|
|
51
|
+
async getEventsBySession() { return []; },
|
|
52
|
+
async getEventsBySprint() { return []; },
|
|
53
|
+
async getEventsByTicket() { return []; },
|
|
54
|
+
close() { },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
describe('createSlopeToolsServer', () => {
|
|
58
|
+
it('returns an MCP server instance without store', () => {
|
|
59
|
+
const server = createSlopeToolsServer();
|
|
60
|
+
expect(server).toBeDefined();
|
|
61
|
+
expect(typeof server).toBe('object');
|
|
62
|
+
});
|
|
63
|
+
it('returns an MCP server instance with store', () => {
|
|
64
|
+
const server = createSlopeToolsServer(createMockStore());
|
|
65
|
+
expect(server).toBeDefined();
|
|
66
|
+
});
|
|
67
|
+
it('exposes exactly 5 tool names', () => {
|
|
68
|
+
expect(SLOPE_MCP_TOOL_NAMES).toHaveLength(5);
|
|
69
|
+
expect(SLOPE_MCP_TOOL_NAMES).toContain('search');
|
|
70
|
+
expect(SLOPE_MCP_TOOL_NAMES).toContain('execute');
|
|
71
|
+
expect(SLOPE_MCP_TOOL_NAMES).toContain('session_status');
|
|
72
|
+
expect(SLOPE_MCP_TOOL_NAMES).toContain('acquire_claim');
|
|
73
|
+
expect(SLOPE_MCP_TOOL_NAMES).toContain('check_conflicts');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('registry', () => {
|
|
77
|
+
it('search with no args returns full registry', () => {
|
|
78
|
+
expect(SLOPE_REGISTRY.length).toBeGreaterThan(30);
|
|
79
|
+
expect(SLOPE_REGISTRY.every((e) => e.name && e.module && e.description)).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it('search with query filters correctly', () => {
|
|
82
|
+
const q = 'handicap';
|
|
83
|
+
const results = SLOPE_REGISTRY.filter((e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q));
|
|
84
|
+
expect(results.length).toBeGreaterThan(0);
|
|
85
|
+
expect(results.every((e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q))).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it('search with module filter returns only that module', () => {
|
|
88
|
+
const fsEntries = SLOPE_REGISTRY.filter((e) => e.module === 'fs');
|
|
89
|
+
expect(fsEntries.length).toBeGreaterThan(0);
|
|
90
|
+
expect(fsEntries.every((e) => e.module === 'fs')).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
it('store module entries exist', () => {
|
|
93
|
+
const storeEntries = SLOPE_REGISTRY.filter((e) => e.module === 'store');
|
|
94
|
+
expect(storeEntries).toHaveLength(3);
|
|
95
|
+
expect(storeEntries.map(e => e.name)).toEqual(['session_status', 'acquire_claim', 'check_conflicts']);
|
|
96
|
+
});
|
|
97
|
+
it('SLOPE_TYPES contains key type definitions', () => {
|
|
98
|
+
expect(SLOPE_TYPES).toContain('GolfScorecard');
|
|
99
|
+
expect(SLOPE_TYPES).toContain('HandicapCard');
|
|
100
|
+
expect(SLOPE_TYPES).toContain('SlopeConfig');
|
|
101
|
+
expect(SLOPE_TYPES).toContain('ScorecardInput');
|
|
102
|
+
expect(SLOPE_TYPES).toContain('SlopeSession');
|
|
103
|
+
});
|
|
104
|
+
it('registry includes roadmap functions', () => {
|
|
105
|
+
const roadmapNames = [
|
|
106
|
+
'validateRoadmap', 'computeCriticalPath', 'findParallelOpportunities',
|
|
107
|
+
'parseRoadmap', 'formatRoadmapSummary', 'formatStrategicContext',
|
|
108
|
+
];
|
|
109
|
+
for (const name of roadmapNames) {
|
|
110
|
+
expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
it('registry includes loadRoadmap fs helper', () => {
|
|
114
|
+
const entry = SLOPE_REGISTRY.find(e => e.name === 'loadRoadmap');
|
|
115
|
+
expect(entry).toBeDefined();
|
|
116
|
+
expect(entry.module).toBe('fs');
|
|
117
|
+
});
|
|
118
|
+
it('SLOPE_TYPES contains roadmap type definitions', () => {
|
|
119
|
+
expect(SLOPE_TYPES).toContain('RoadmapDefinition');
|
|
120
|
+
expect(SLOPE_TYPES).toContain('RoadmapSprint');
|
|
121
|
+
expect(SLOPE_TYPES).toContain('RoadmapTicket');
|
|
122
|
+
expect(SLOPE_TYPES).toContain('CriticalPathResult');
|
|
123
|
+
expect(SLOPE_TYPES).toContain('ParallelGroup');
|
|
124
|
+
});
|
|
125
|
+
// S15 orchestration registry entries
|
|
126
|
+
it('registry includes standup functions', () => {
|
|
127
|
+
const names = ['generateStandup', 'formatStandup', 'parseStandup', 'extractRelevantHandoffs'];
|
|
128
|
+
for (const name of names) {
|
|
129
|
+
expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
it('registry includes escalation functions', () => {
|
|
133
|
+
const names = ['detectEscalation', 'buildEscalationEvent', 'resolveEscalationConfig'];
|
|
134
|
+
for (const name of names) {
|
|
135
|
+
expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
it('registry includes team handicap functions', () => {
|
|
139
|
+
const names = ['computeTeamHandicap', 'computeRoleHandicap', 'computeSwarmEfficiency', 'analyzeRoleCombinations'];
|
|
140
|
+
for (const name of names) {
|
|
141
|
+
expect(SLOPE_REGISTRY.find(e => e.name === name)).toBeDefined();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
it('registry includes agent breakdown functions', () => {
|
|
145
|
+
const entry = SLOPE_REGISTRY.find(e => e.name === 'buildAgentBreakdowns');
|
|
146
|
+
expect(entry).toBeDefined();
|
|
147
|
+
expect(entry.module).toBe('core');
|
|
148
|
+
});
|
|
149
|
+
it('SLOPE_TYPES contains orchestration type definitions', () => {
|
|
150
|
+
expect(SLOPE_TYPES).toContain('StandupReport');
|
|
151
|
+
expect(SLOPE_TYPES).toContain('HandoffEntry');
|
|
152
|
+
expect(SLOPE_TYPES).toContain('EscalationConfig');
|
|
153
|
+
expect(SLOPE_TYPES).toContain('EscalationResult');
|
|
154
|
+
expect(SLOPE_TYPES).toContain('AgentBreakdown');
|
|
155
|
+
expect(SLOPE_TYPES).toContain('TeamHandicapCard');
|
|
156
|
+
expect(SLOPE_TYPES).toContain('SwarmEfficiency');
|
|
157
|
+
expect(SLOPE_TYPES).toContain('RoleHandicap');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('sandbox', () => {
|
|
161
|
+
it('executes simple expression and returns result', async () => {
|
|
162
|
+
const { result } = await runInSandbox('return 1 + 2;', process.cwd());
|
|
163
|
+
expect(result).toBe(3);
|
|
164
|
+
});
|
|
165
|
+
it('executes core function: computePar(3)', async () => {
|
|
166
|
+
const { result } = await runInSandbox('return computePar(3);', process.cwd());
|
|
167
|
+
expect(result).toBe(4);
|
|
168
|
+
});
|
|
169
|
+
it('executes computeHandicapCard with empty array', async () => {
|
|
170
|
+
const { result } = await runInSandbox('return computeHandicapCard([]);', process.cwd());
|
|
171
|
+
expect(result).toBeDefined();
|
|
172
|
+
expect(result.all_time).toBeDefined();
|
|
173
|
+
});
|
|
174
|
+
it('captures console.log output', async () => {
|
|
175
|
+
const { result, logs } = await runInSandbox('console.log("hello"); return 42;', process.cwd());
|
|
176
|
+
expect(result).toBe(42);
|
|
177
|
+
expect(logs).toContain('hello');
|
|
178
|
+
});
|
|
179
|
+
it('returns constants', async () => {
|
|
180
|
+
const { result } = await runInSandbox('return SLOPE_FACTORS;', process.cwd());
|
|
181
|
+
expect(Array.isArray(result)).toBe(true);
|
|
182
|
+
expect(result).toContain('cross_package');
|
|
183
|
+
});
|
|
184
|
+
it('rejects path escape', async () => {
|
|
185
|
+
await expect(runInSandbox('return readFile("../../etc/passwd");', process.cwd())).rejects.toThrow(/[Pp]ath escape/);
|
|
186
|
+
});
|
|
187
|
+
it('times out on infinite loop', async () => {
|
|
188
|
+
await expect(runInSandbox('while(true){}', process.cwd())).rejects.toThrow();
|
|
189
|
+
}, 35_000);
|
|
190
|
+
it('errors on require', async () => {
|
|
191
|
+
await expect(runInSandbox('return require("fs");', process.cwd())).rejects.toThrow();
|
|
192
|
+
});
|
|
193
|
+
it('errors on process access', async () => {
|
|
194
|
+
await expect(runInSandbox('return process.env;', process.cwd())).rejects.toThrow();
|
|
195
|
+
});
|
|
196
|
+
it('executes roadmap functions in sandbox', async () => {
|
|
197
|
+
const code = `
|
|
198
|
+
const roadmap = {
|
|
199
|
+
name: 'Test',
|
|
200
|
+
phases: [{ name: 'P1', sprints: [1, 2] }],
|
|
201
|
+
sprints: [
|
|
202
|
+
{ id: 1, theme: 'A', par: 4, slope: 2, type: 'feature', tickets: [
|
|
203
|
+
{ key: 'S1-1', title: 'T1', club: 'short_iron', complexity: 'standard' },
|
|
204
|
+
{ key: 'S1-2', title: 'T2', club: 'wedge', complexity: 'small' },
|
|
205
|
+
{ key: 'S1-3', title: 'T3', club: 'short_iron', complexity: 'standard' },
|
|
206
|
+
]},
|
|
207
|
+
{ id: 2, theme: 'B', par: 4, slope: 2, type: 'feature', depends_on: [1], tickets: [
|
|
208
|
+
{ key: 'S2-1', title: 'T1', club: 'short_iron', complexity: 'standard' },
|
|
209
|
+
{ key: 'S2-2', title: 'T2', club: 'short_iron', complexity: 'standard' },
|
|
210
|
+
{ key: 'S2-3', title: 'T3', club: 'wedge', complexity: 'small' },
|
|
211
|
+
]},
|
|
212
|
+
],
|
|
213
|
+
};
|
|
214
|
+
const v = validateRoadmap(roadmap);
|
|
215
|
+
const cp = computeCriticalPath(roadmap);
|
|
216
|
+
return { valid: v.valid, criticalPath: cp.path, length: cp.length };
|
|
217
|
+
`;
|
|
218
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
219
|
+
const r = result;
|
|
220
|
+
expect(r.valid).toBe(true);
|
|
221
|
+
expect(r.criticalPath).toEqual([1, 2]);
|
|
222
|
+
expect(r.length).toBe(2);
|
|
223
|
+
});
|
|
224
|
+
it('loadRoadmap returns null when no roadmap file', async () => {
|
|
225
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-roadmap-'));
|
|
226
|
+
const slopeDir = join(tmp, '.slope');
|
|
227
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
228
|
+
writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
|
|
229
|
+
scorecardDir: 'docs/retros',
|
|
230
|
+
scorecardPattern: 'sprint-*.json',
|
|
231
|
+
minSprint: 1,
|
|
232
|
+
}));
|
|
233
|
+
const { result } = await runInSandbox('return loadRoadmap();', tmp);
|
|
234
|
+
expect(result).toBeNull();
|
|
235
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
236
|
+
});
|
|
237
|
+
it('loadRoadmap loads and parses roadmap from file', async () => {
|
|
238
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-roadmap-'));
|
|
239
|
+
const slopeDir = join(tmp, '.slope');
|
|
240
|
+
const backlogDir = join(tmp, 'docs', 'backlog');
|
|
241
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
242
|
+
mkdirSync(backlogDir, { recursive: true });
|
|
243
|
+
writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
|
|
244
|
+
scorecardDir: 'docs/retros',
|
|
245
|
+
scorecardPattern: 'sprint-*.json',
|
|
246
|
+
minSprint: 1,
|
|
247
|
+
}));
|
|
248
|
+
writeFileSync(join(backlogDir, 'roadmap.json'), JSON.stringify({
|
|
249
|
+
name: 'Test Roadmap',
|
|
250
|
+
phases: [{ name: 'P1', sprints: [1] }],
|
|
251
|
+
sprints: [{
|
|
252
|
+
id: 1, theme: 'Intro', par: 3, slope: 1, type: 'feature',
|
|
253
|
+
tickets: [
|
|
254
|
+
{ key: 'S1-1', title: 'T1', club: 'wedge', complexity: 'small' },
|
|
255
|
+
{ key: 'S1-2', title: 'T2', club: 'wedge', complexity: 'small' },
|
|
256
|
+
{ key: 'S1-3', title: 'T3', club: 'wedge', complexity: 'small' },
|
|
257
|
+
],
|
|
258
|
+
}],
|
|
259
|
+
}));
|
|
260
|
+
const { result } = await runInSandbox('const r = loadRoadmap(); return r ? r.name : null;', tmp);
|
|
261
|
+
expect(result).toBe('Test Roadmap');
|
|
262
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
263
|
+
});
|
|
264
|
+
// S15 orchestration sandbox tests
|
|
265
|
+
it('executes generateStandup in sandbox', async () => {
|
|
266
|
+
const code = `
|
|
267
|
+
const report = generateStandup({
|
|
268
|
+
sessionId: 'test-sess',
|
|
269
|
+
agent_role: 'backend',
|
|
270
|
+
events: [],
|
|
271
|
+
claims: [],
|
|
272
|
+
});
|
|
273
|
+
return report.sessionId;
|
|
274
|
+
`;
|
|
275
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
276
|
+
expect(result).toBe('test-sess');
|
|
277
|
+
});
|
|
278
|
+
it('executes detectEscalation in sandbox', async () => {
|
|
279
|
+
const code = `
|
|
280
|
+
const results = detectEscalation({
|
|
281
|
+
standups: [],
|
|
282
|
+
conflicts: [],
|
|
283
|
+
events: [],
|
|
284
|
+
});
|
|
285
|
+
return results.length;
|
|
286
|
+
`;
|
|
287
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
288
|
+
expect(result).toBe(0);
|
|
289
|
+
});
|
|
290
|
+
it('executes buildAgentBreakdowns in sandbox', async () => {
|
|
291
|
+
const code = `
|
|
292
|
+
const agents = buildAgentBreakdowns([{
|
|
293
|
+
session_id: 's1',
|
|
294
|
+
agent_role: 'backend',
|
|
295
|
+
shots: [{ ticket_key: 'T-1', title: 'Test', club: 'short_iron', result: 'green', hazards: [] }],
|
|
296
|
+
}]);
|
|
297
|
+
return agents[0].score;
|
|
298
|
+
`;
|
|
299
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
300
|
+
expect(result).toBe(1);
|
|
301
|
+
});
|
|
302
|
+
it('executes computeTeamHandicap in sandbox', async () => {
|
|
303
|
+
const code = `
|
|
304
|
+
const card = computeTeamHandicap([]);
|
|
305
|
+
return card.swarm_efficiency.total_sprints;
|
|
306
|
+
`;
|
|
307
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
308
|
+
expect(result).toBe(0);
|
|
309
|
+
});
|
|
310
|
+
it('executes resolveEscalationConfig in sandbox', async () => {
|
|
311
|
+
const code = `
|
|
312
|
+
const config = resolveEscalationConfig({ blocker_timeout: 30 });
|
|
313
|
+
return config.blocker_timeout;
|
|
314
|
+
`;
|
|
315
|
+
const { result } = await runInSandbox(code, process.cwd());
|
|
316
|
+
expect(result).toBe(30);
|
|
317
|
+
});
|
|
318
|
+
it('loads scorecards from a test project', async () => {
|
|
319
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-sandbox-'));
|
|
320
|
+
const retrosDir = join(tmp, 'docs', 'retros');
|
|
321
|
+
const slopeDir = join(tmp, '.slope');
|
|
322
|
+
mkdirSync(retrosDir, { recursive: true });
|
|
323
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
324
|
+
writeFileSync(join(slopeDir, 'config.json'), JSON.stringify({
|
|
325
|
+
scorecardDir: 'docs/retros',
|
|
326
|
+
scorecardPattern: 'sprint-*.json',
|
|
327
|
+
minSprint: 1,
|
|
328
|
+
}));
|
|
329
|
+
writeFileSync(join(retrosDir, 'sprint-1.json'), JSON.stringify({
|
|
330
|
+
sprint_number: 1, theme: 'Test', par: 3, slope: 0, score: 3,
|
|
331
|
+
score_label: 'par', date: '2026-01-01',
|
|
332
|
+
shots: [], conditions: [], special_plays: [], stats: {
|
|
333
|
+
fairways_hit: 0, fairways_total: 0, greens_in_regulation: 0,
|
|
334
|
+
greens_total: 0, putts: 0, penalties: 0, hazards_hit: 0, hazard_penalties: 0,
|
|
335
|
+
miss_directions: { long: 0, short: 0, left: 0, right: 0 },
|
|
336
|
+
},
|
|
337
|
+
yardage_book_updates: [], bunker_locations: [], course_management_notes: [],
|
|
338
|
+
}));
|
|
339
|
+
const { result } = await runInSandbox('const cards = loadScorecards(); return cards.length;', tmp);
|
|
340
|
+
expect(result).toBe(1);
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
describe('mock store tools', () => {
|
|
344
|
+
it('session_status returns sessions and claims from mock', async () => {
|
|
345
|
+
const store = createMockStore();
|
|
346
|
+
await store.registerSession({ session_id: 's1', role: 'primary', ide: 'claude-code' });
|
|
347
|
+
await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket', session_id: 's1' });
|
|
348
|
+
const sessions = await store.getActiveSessions();
|
|
349
|
+
const claims = await store.getActiveClaims();
|
|
350
|
+
expect(sessions).toHaveLength(1);
|
|
351
|
+
expect(claims).toHaveLength(1);
|
|
352
|
+
});
|
|
353
|
+
it('acquire_claim creates claim in mock', async () => {
|
|
354
|
+
const store = createMockStore();
|
|
355
|
+
const claim = await store.claim({ sprint_number: 1, player: 'bob', target: 'T-2', scope: 'ticket' });
|
|
356
|
+
expect(claim.id).toMatch(/^claim-/);
|
|
357
|
+
expect(claim.target).toBe('T-2');
|
|
358
|
+
});
|
|
359
|
+
it('check_conflicts detects overlaps', async () => {
|
|
360
|
+
const { checkConflicts } = await import('../core/index.js');
|
|
361
|
+
const store = createMockStore();
|
|
362
|
+
await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket' });
|
|
363
|
+
await store.claim({ sprint_number: 1, player: 'bob', target: 'T-1', scope: 'ticket' });
|
|
364
|
+
const claims = await store.getActiveClaims(1);
|
|
365
|
+
const conflicts = checkConflicts(claims);
|
|
366
|
+
expect(conflicts).toHaveLength(1);
|
|
367
|
+
expect(conflicts[0].severity).toBe('overlap');
|
|
368
|
+
});
|
|
369
|
+
it('check_conflicts filters by sprint', async () => {
|
|
370
|
+
const { checkConflicts } = await import('../core/index.js');
|
|
371
|
+
const store = createMockStore();
|
|
372
|
+
await store.claim({ sprint_number: 1, player: 'alice', target: 'T-1', scope: 'ticket' });
|
|
373
|
+
await store.claim({ sprint_number: 2, player: 'bob', target: 'T-1', scope: 'ticket' });
|
|
374
|
+
const claimsSprint1 = await store.getActiveClaims(1);
|
|
375
|
+
const conflicts = checkConflicts(claimsSprint1);
|
|
376
|
+
expect(conflicts).toHaveLength(0); // Different sprints, only sprint 1 claims returned
|
|
377
|
+
});
|
|
378
|
+
it('server without store creates successfully with only 2 base tools', () => {
|
|
379
|
+
const server = createSlopeToolsServer();
|
|
380
|
+
expect(server).toBeDefined();
|
|
381
|
+
});
|
|
382
|
+
it('server with store creates successfully', () => {
|
|
383
|
+
const server = createSlopeToolsServer(createMockStore());
|
|
384
|
+
expect(server).toBeDefined();
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
describe('detectSetupHints', () => {
|
|
388
|
+
it('returns all false when no hooks.json or settings.json exist', () => {
|
|
389
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
390
|
+
const hints = detectSetupHints(tmp);
|
|
391
|
+
expect(hints.guardsInstalled).toBe(false);
|
|
392
|
+
expect(hints.lifecycleHooksInstalled).toBe(false);
|
|
393
|
+
expect(hints.settingsConfigured).toBe(false);
|
|
394
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
395
|
+
});
|
|
396
|
+
it('detects guard hooks in hooks.json', () => {
|
|
397
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
398
|
+
const slopeDir = join(tmp, '.slope');
|
|
399
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
400
|
+
writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
|
|
401
|
+
installed: {
|
|
402
|
+
'guard-explore': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
|
|
403
|
+
'guard-hazard': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
|
|
404
|
+
},
|
|
405
|
+
}));
|
|
406
|
+
const hints = detectSetupHints(tmp);
|
|
407
|
+
expect(hints.guardsInstalled).toBe(true);
|
|
408
|
+
expect(hints.lifecycleHooksInstalled).toBe(false);
|
|
409
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
410
|
+
});
|
|
411
|
+
it('detects lifecycle hooks in hooks.json', () => {
|
|
412
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
413
|
+
const slopeDir = join(tmp, '.slope');
|
|
414
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
415
|
+
writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
|
|
416
|
+
installed: {
|
|
417
|
+
'session-start': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
|
|
418
|
+
'session-end': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
|
|
419
|
+
},
|
|
420
|
+
}));
|
|
421
|
+
const hints = detectSetupHints(tmp);
|
|
422
|
+
expect(hints.guardsInstalled).toBe(false);
|
|
423
|
+
expect(hints.lifecycleHooksInstalled).toBe(true);
|
|
424
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
425
|
+
});
|
|
426
|
+
it('requires both session-start and session-end for lifecycle', () => {
|
|
427
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
428
|
+
const slopeDir = join(tmp, '.slope');
|
|
429
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
430
|
+
writeFileSync(join(slopeDir, 'hooks.json'), JSON.stringify({
|
|
431
|
+
installed: {
|
|
432
|
+
'session-start': { provider: 'claude-code', installed_at: '2026-01-01T00:00:00Z' },
|
|
433
|
+
},
|
|
434
|
+
}));
|
|
435
|
+
const hints = detectSetupHints(tmp);
|
|
436
|
+
expect(hints.lifecycleHooksInstalled).toBe(false);
|
|
437
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
438
|
+
});
|
|
439
|
+
it('detects slope-guard.sh in settings.json', () => {
|
|
440
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
441
|
+
const claudeDir = join(tmp, '.claude');
|
|
442
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
443
|
+
writeFileSync(join(claudeDir, 'settings.json'), JSON.stringify({
|
|
444
|
+
hooks: {
|
|
445
|
+
PreToolUse: [{ hooks: [{ command: '$CLAUDE_PROJECT_DIR/.claude/hooks/slope-guard.sh explore' }] }],
|
|
446
|
+
},
|
|
447
|
+
}));
|
|
448
|
+
const hints = detectSetupHints(tmp);
|
|
449
|
+
expect(hints.settingsConfigured).toBe(true);
|
|
450
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
451
|
+
});
|
|
452
|
+
it('handles malformed hooks.json gracefully', () => {
|
|
453
|
+
const tmp = mkdtempSync(join(tmpdir(), 'slope-hints-'));
|
|
454
|
+
const slopeDir = join(tmp, '.slope');
|
|
455
|
+
mkdirSync(slopeDir, { recursive: true });
|
|
456
|
+
writeFileSync(join(slopeDir, 'hooks.json'), 'not valid json{{{');
|
|
457
|
+
const hints = detectSetupHints(tmp);
|
|
458
|
+
expect(hints.guardsInstalled).toBe(false);
|
|
459
|
+
expect(hints.lifecycleHooksInstalled).toBe(false);
|
|
460
|
+
rmSync(tmp, { recursive: true, force: true });
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
describe('buildSetupHint', () => {
|
|
464
|
+
it('returns null when everything is set up', () => {
|
|
465
|
+
const hints = { guardsInstalled: true, lifecycleHooksInstalled: true, settingsConfigured: true };
|
|
466
|
+
expect(buildSetupHint(hints)).toBeNull();
|
|
467
|
+
});
|
|
468
|
+
it('includes guard hint when guards not installed', () => {
|
|
469
|
+
const hints = { guardsInstalled: false, lifecycleHooksInstalled: true, settingsConfigured: true };
|
|
470
|
+
const result = buildSetupHint(hints);
|
|
471
|
+
expect(result).toContain('Guard hooks');
|
|
472
|
+
expect(result).toContain('slope hook add --level=full');
|
|
473
|
+
expect(result).not.toContain('Lifecycle hooks');
|
|
474
|
+
});
|
|
475
|
+
it('includes lifecycle hint when lifecycle hooks not installed', () => {
|
|
476
|
+
const hints = { guardsInstalled: true, lifecycleHooksInstalled: false, settingsConfigured: true };
|
|
477
|
+
const result = buildSetupHint(hints);
|
|
478
|
+
expect(result).toContain('Lifecycle hooks');
|
|
479
|
+
expect(result).toContain('slope hook add session-start');
|
|
480
|
+
expect(result).not.toContain('Guard hooks');
|
|
481
|
+
});
|
|
482
|
+
it('includes both hints when nothing is installed', () => {
|
|
483
|
+
const hints = { guardsInstalled: false, lifecycleHooksInstalled: false, settingsConfigured: false };
|
|
484
|
+
const result = buildSetupHint(hints);
|
|
485
|
+
expect(result).toContain('Guard hooks');
|
|
486
|
+
expect(result).toContain('Lifecycle hooks');
|
|
487
|
+
expect(result).toContain('SLOPE Setup Hint');
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
describe('search with setup hints', () => {
|
|
491
|
+
it('server accepts setupHints parameter', () => {
|
|
492
|
+
const hints = { guardsInstalled: false, lifecycleHooksInstalled: false, settingsConfigured: false };
|
|
493
|
+
const server = createSlopeToolsServer(undefined, hints);
|
|
494
|
+
expect(server).toBeDefined();
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/mcp/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLOPE function registry — discoverable API surface for the search() tool.
|
|
3
|
+
*/
|
|
4
|
+
export interface FunctionRegistryEntry {
|
|
5
|
+
name: string;
|
|
6
|
+
module: 'core' | 'fs' | 'constants' | 'store' | 'flows';
|
|
7
|
+
description: string;
|
|
8
|
+
signature: string;
|
|
9
|
+
example: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const SLOPE_REGISTRY: FunctionRegistryEntry[];
|
|
12
|
+
/**
|
|
13
|
+
* Key TypeScript type definitions for agent reference.
|
|
14
|
+
* Agents call search({ module: 'types' }) to retrieve this.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SLOPE_TYPES = "// \u2500\u2500\u2500 Core Scoring Enums \u2500\u2500\u2500\ntype ClubSelection = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';\ntype ShotResult = 'fairway' | 'green' | 'in_the_hole' | 'missed_long' | 'missed_short' | 'missed_left' | 'missed_right';\ntype HazardType = 'bunker' | 'water' | 'ob' | 'rough' | 'trees';\ntype ConditionType = 'wind' | 'rain' | 'frost_delay' | 'altitude' | 'pin_position';\ntype SpecialPlay = 'gimme' | 'mulligan' | 'provisional' | 'lay_up' | 'scramble';\ntype MissDirection = 'long' | 'short' | 'left' | 'right';\ntype ScoreLabel = 'eagle' | 'birdie' | 'par' | 'bogey' | 'double_bogey' | 'triple_plus';\ntype SprintType = 'feature' | 'feedback' | 'infra' | 'bugfix' | 'research' | 'flow' | 'test-coverage';\n\n// \u2500\u2500\u2500 Record Types \u2500\u2500\u2500\ninterface HazardHit { type: HazardType; description: string; gotcha_id?: string; }\ninterface ShotRecord { ticket_key: string; title: string; club: ClubSelection; result: ShotResult; hazards: HazardHit[]; provisional_declared?: boolean; notes?: string; }\ninterface ConditionRecord { type: ConditionType; description: string; impact: 'none' | 'minor' | 'major'; }\n\n// \u2500\u2500\u2500 Scoring Types \u2500\u2500\u2500\ninterface HoleStats { fairways_hit: number; fairways_total: number; greens_in_regulation: number; greens_total: number; putts: number; penalties: number; hazards_hit: number; hazard_penalties: number; miss_directions: Record<MissDirection, number>; }\ninterface HoleScore { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; score: number; score_label: ScoreLabel; shots: ShotRecord[]; conditions: ConditionRecord[]; special_plays: SpecialPlay[]; stats: HoleStats; }\n\n// \u2500\u2500\u2500 Full Scorecard \u2500\u2500\u2500\ninterface GolfScorecard extends HoleScore { type?: SprintType; player?: string; date: string; training?: TrainingSession[]; nutrition?: NutritionEntry[]; yardage_book_updates: string[]; bunker_locations: string[]; course_management_notes: string[]; nineteenth_hole?: NineteenthHole; }\n\n// \u2500\u2500\u2500 Handicap \u2500\u2500\u2500\ninterface RollingStats { handicap: number; fairway_pct: number; gir_pct: number; avg_putts: number; penalties_per_round: number; miss_pattern: Record<MissDirection, number>; mulligans: number; gimmes: number; }\ninterface HandicapCard { last_5: RollingStats; last_10: RollingStats; all_time: RollingStats; }\n\n// \u2500\u2500\u2500 Dispersion \u2500\u2500\u2500\ninterface DispersionReport { total_shots: number; total_misses: number; miss_rate_pct: number; by_direction: Record<MissDirection, { count: number; pct: number; interpretation: string }>; dominant_miss: MissDirection | null; systemic_issues: string[]; }\ninterface AreaReport { by_sprint_type: Record<string, { count: number; avg_score_vs_par: number; fairway_pct: number; gir_pct: number }>; by_club: Record<string, { count: number; in_the_hole_rate: number; miss_rate: number }>; par_performance: Record<number, { count: number; avg_score_vs_par: number; over_par_rate: number }>; }\n\n// \u2500\u2500\u2500 Config & Loader \u2500\u2500\u2500\ninterface SlopeConfig { scorecardDir: string; scorecardPattern: string; minSprint: number; commonIssuesPath: string; sessionsPath: string; registry: 'file' | 'api'; claimsPath: string; registryApiUrl?: string; currentSprint?: number; store?: string; store_path?: string; }\n\n// \u2500\u2500\u2500 Store \u2500\u2500\u2500\ninterface SlopeSession { session_id: string; role: 'primary' | 'secondary' | 'observer'; ide: string; worktree_path?: string; branch?: string; started_at: string; last_heartbeat_at: string; metadata?: Record<string, unknown>; agent_role?: string; swarm_id?: string; }\ninterface SprintClaim { id: string; sprint_number: number; player: string; target: string; scope: ClaimScope; claimed_at: string; notes?: string; session_id?: string; expires_at?: string; metadata?: Record<string, unknown>; }\n\n// \u2500\u2500\u2500 Standup \u2500\u2500\u2500\ninterface StandupReport { sessionId: string; agent_role?: string; ticketKey?: string; status: 'working' | 'blocked' | 'complete'; progress: string; blockers: string[]; decisions: string[]; handoffs: HandoffEntry[]; timestamp: string; }\ninterface HandoffEntry { target: string; description: string; for_role?: string; }\n\n// \u2500\u2500\u2500 Roles \u2500\u2500\u2500\ninterface RoleDefinition { id: string; name: string; description: string; focusAreas: string[]; clubPreferences: Partial<Record<string, ClubSelection>>; briefingFilter: { emphasize: string[]; deemphasize: string[] }; }\n\n// \u2500\u2500\u2500 Builder Input \u2500\u2500\u2500\ninterface AgentBreakdown { session_id: string; agent_role: string; shots: ShotRecord[]; score: number; stats: HoleStats; }\ninterface AgentShotInput { session_id: string; agent_role: string; shots: ShotRecord[]; }\ninterface ScorecardInput { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; date: string; shots: ShotRecord[]; putts?: number; penalties?: number; type?: SprintType; conditions?: ConditionRecord[]; special_plays?: SpecialPlay[]; training?: TrainingSession[]; nutrition?: NutritionEntry[]; nineteenth_hole?: NineteenthHole; bunker_locations?: string[]; yardage_book_updates?: string[]; course_management_notes?: string[]; agents?: AgentBreakdown[]; }\n\n// \u2500\u2500\u2500 Escalation \u2500\u2500\u2500\ntype EscalationTrigger = 'blocker_timeout' | 'claim_conflict' | 'test_failure_cascade' | 'manual';\ntype EscalationSeverity = 'warning' | 'critical';\ntype EscalationAction = 'log_event' | 'mark_blocked' | 'notify_standup';\ninterface EscalationConfig { blocker_timeout?: number; claim_conflict?: boolean; test_failure_cascade?: number; actions?: EscalationAction[]; }\ninterface EscalationResult { trigger: EscalationTrigger; severity: EscalationSeverity; description: string; session_id?: string; agent_role?: string; actions: EscalationAction[]; }\n\n// \u2500\u2500\u2500 Team Handicap \u2500\u2500\u2500\ninterface RoleHandicap { role: string; sprints_participated: number; total_shots: number; stats: RollingStats; }\ninterface SwarmEfficiency { total_sprints: number; total_agents: number; avg_agents_per_sprint: number; total_shots: number; total_score: number; avg_score_vs_par: number; coordination_events: number; efficiency_ratio: number; }\ninterface RoleCombinationStats { roles: string[]; sprint_count: number; avg_score_vs_par: number; total_hazards: number; }\ninterface TeamHandicapCard { overall: RollingStats; by_role: RoleHandicap[]; swarm_efficiency: SwarmEfficiency; role_combinations: RoleCombinationStats[]; }\n\n// \u2500\u2500\u2500 PR Signals \u2500\u2500\u2500\ntype PRPlatform = 'github' | 'gitlab' | 'bitbucket' | 'unknown';\ntype PRReviewDecision = 'APPROVED' | 'CHANGES_REQUESTED' | 'REVIEW_REQUIRED' | 'COMMENTED' | 'NONE';\ninterface PRSignal { platform: PRPlatform; pr_number: number; review_cycles: number; change_request_count: number; time_to_merge_minutes: number | null; ci_checks_passed: number; ci_checks_failed: number; file_count: number; additions: number; deletions: number; comment_count: number; review_decision: PRReviewDecision; }\n\n// \u2500\u2500\u2500 Advisor \u2500\u2500\u2500\ninterface ExecutionTrace { planned_scope_paths: string[]; modified_files: string[]; test_results: { suite: string; passed: boolean; first_run: boolean }[]; reverts: number; elapsed_minutes: number; hazards_encountered: HazardHit[]; }\ninterface ShotClassification { result: ShotResult; miss_direction: MissDirection | null; confidence: number; reasoning: string; }\ninterface CombinedSignals { trace: ExecutionTrace; ci?: CISignal; pr?: PRSignal; events?: SlopeEvent[]; }\ninterface ClubRecommendation { club: ClubSelection; confidence: number; reasoning: string; provisional_suggestion?: string; }\ninterface TrainingRecommendation { area: string; type: TrainingType; description: string; priority: 'high' | 'medium' | 'low'; instruction_adjustment?: string; }\ninterface RecommendClubInput { ticketComplexity: 'trivial' | 'small' | 'medium' | 'large'; scorecards: GolfScorecard[]; slopeFactors?: string[]; }\ninterface TrainingPlanInput { handicap: HandicapCard; dispersion: DispersionReport; recentScorecards: GolfScorecard[]; }\n\n// \u2500\u2500\u2500 Roadmap \u2500\u2500\u2500\ntype RoadmapClub = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';\ninterface RoadmapTicket { key: string; title: string; club: RoadmapClub; complexity: 'trivial' | 'small' | 'standard' | 'moderate'; depends_on?: string[]; }\ninterface RoadmapSprint { id: number; theme: string; par: 3 | 4 | 5; slope: number; type: string; tickets: RoadmapTicket[]; depends_on?: number[]; }\ninterface RoadmapPhase { name: string; sprints: number[]; }\ninterface RoadmapDefinition { name: string; description?: string; phases: RoadmapPhase[]; sprints: RoadmapSprint[]; }\ninterface RoadmapValidationResult { valid: boolean; errors: RoadmapValidationError[]; warnings: RoadmapValidationWarning[]; }\ninterface RoadmapValidationError { type: 'error'; sprint?: number; ticket?: string; message: string; }\ninterface RoadmapValidationWarning { type: 'warning'; sprint?: number; ticket?: string; message: string; }\ninterface CriticalPathResult { path: number[]; length: number; totalPar: number; }\ninterface ParallelGroup { sprints: number[]; reason: string; }\n\n// \u2500\u2500\u2500 Player (Multi-Developer) \u2500\u2500\u2500\ninterface PlayerHandicap { player: string; scorecardCount: number; handicapCard: HandicapCard; }\ninterface LeaderboardEntry { rank: number; player: string; handicap: number; scorecardCount: number; improvementTrend: number; fairwayPct: number; girPct: number; }\ninterface Leaderboard { entries: LeaderboardEntry[]; generatedAt: string; }\n\n// \u2500\u2500\u2500 Flows \u2500\u2500\u2500\ninterface FlowStep { name: string; description: string; file_paths: string[]; notes?: string; }\ninterface FlowDefinition { id: string; title: string; description: string; entry_point: string; steps: FlowStep[]; files: string[]; tags: string[]; last_verified_sha: string; last_verified_at: string; }\ninterface FlowsFile { version: '1'; last_generated: string; flows: FlowDefinition[]; }\n\n// \u2500\u2500\u2500 Briefing \u2500\u2500\u2500\ninterface RecurringPattern { id: number; title: string; category: string; sprints_hit: number[]; gotcha_refs: string[]; description: string; prevention: string; reported_by?: string[]; }\ninterface CommonIssuesFile { recurring_patterns: RecurringPattern[]; }\ninterface SessionEntry { id: number; date: string; sprint: string; summary: string; where_left_off: string; }\ninterface BriefingFilter { categories?: string[]; keywords?: string[]; }\n\n// \u2500\u2500\u2500 Tournament \u2500\u2500\u2500\ninterface TournamentReview { id: string; name: string; dateRange: { start: string; end: string }; sprints: TournamentSprintEntry[]; scoring: TournamentScoring; stats: TournamentStats; hazardIndex: TournamentHazard[]; clubPerformance: Record<string, { attempts: number; inTheHole: number; avgScore: number }>; takeaways: string[]; improvements: string[]; reflection?: string; }\ninterface TournamentSprintEntry { sprintNumber: number; theme: string; par: number; slope: number; score: number; scoreLabel: ScoreLabel; ticketCount: number; ticketsLanded: number; }\ninterface TournamentScoring { totalPar: number; totalScore: number; differential: number; avgScoreLabel: string; bestSprint: { sprintNumber: number; label: ScoreLabel }; worstSprint: { sprintNumber: number; label: ScoreLabel }; sprintCount: number; ticketCount: number; ticketsLanded: number; landingRate: number; }\n";
|
|
17
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,qBAAqB,EAimBjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,i4WA6GvB,CAAC"}
|