@engineereddev/fractal-planner 0.1.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.
Files changed (46) hide show
  1. package/.claude-plugin/marketplace.json +22 -0
  2. package/.claude-plugin/plugin.json +19 -0
  3. package/LICENSE +21 -0
  4. package/README.md +257 -0
  5. package/agents/fp-analyst.md +96 -0
  6. package/agents/fp-context-builder.md +87 -0
  7. package/agents/fp-critic.md +140 -0
  8. package/agents/fp-decomposer.md +261 -0
  9. package/agents/fp-interviewer.md +263 -0
  10. package/agents/fp-linear-sync.md +128 -0
  11. package/agents/fp-researcher.md +82 -0
  12. package/agents/fp-task-tracker.md +134 -0
  13. package/dist/cli/classify-intent.js +118 -0
  14. package/dist/cli/compute-signals.js +495 -0
  15. package/dist/cli/generate-plan.js +14209 -0
  16. package/dist/cli/load-config.js +13661 -0
  17. package/dist/cli/validate-tasks.js +467 -0
  18. package/dist/index.js +24598 -0
  19. package/dist/src/cli/classify-intent.d.ts +3 -0
  20. package/dist/src/cli/compute-signals.d.ts +14 -0
  21. package/dist/src/cli/generate-plan.d.ts +3 -0
  22. package/dist/src/cli/load-config.d.ts +3 -0
  23. package/dist/src/cli/validate-tasks.d.ts +3 -0
  24. package/dist/src/config.d.ts +182 -0
  25. package/dist/src/index.d.ts +12 -0
  26. package/dist/src/phases/clearance.d.ts +12 -0
  27. package/dist/src/phases/decomposition.d.ts +41 -0
  28. package/dist/src/phases/interview.d.ts +17 -0
  29. package/dist/src/phases/planning.d.ts +21 -0
  30. package/dist/src/phases/research.d.ts +9 -0
  31. package/dist/src/types/index.d.ts +116 -0
  32. package/dist/src/utils/draft.d.ts +21 -0
  33. package/dist/src/utils/question-strategies.d.ts +24 -0
  34. package/dist/src/utils/task-parser.d.ts +3 -0
  35. package/hooks/hooks.json +27 -0
  36. package/hooks/nudge-teammate.sh +216 -0
  37. package/hooks/run-comment-checker.sh +91 -0
  38. package/package.json +65 -0
  39. package/skills/commit/SKILL.md +157 -0
  40. package/skills/fp/SKILL.md +857 -0
  41. package/skills/fp/scripts/resolve-env.sh +66 -0
  42. package/skills/handoff/SKILL.md +195 -0
  43. package/skills/implement/SKILL.md +783 -0
  44. package/skills/implement/reference.md +935 -0
  45. package/skills/retry/SKILL.md +333 -0
  46. package/skills/status/SKILL.md +182 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=classify-intent.d.ts.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bun
2
+ export interface TaskSignals {
3
+ fileScope: number;
4
+ coupling: number;
5
+ gitRisk: number;
6
+ testCoverage: number;
7
+ composite: number;
8
+ }
9
+ export declare function computeFileScope(files: string[]): number;
10
+ export declare function computeCoupling(files: string[]): number;
11
+ export declare function computeGitRisk(files: string[]): number;
12
+ export declare function computeTestCoverage(files: string[], testsRequired: boolean): number;
13
+ export declare function computeComposite(signals: Omit<TaskSignals, 'composite'>): number;
14
+ //# sourceMappingURL=compute-signals.d.ts.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=generate-plan.d.ts.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=load-config.d.ts.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=validate-tasks.d.ts.map
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Configuration Module
3
+ *
4
+ * Layered JSON config system with user-level and project-level files,
5
+ * merged with sensible defaults.
6
+ *
7
+ * Priority (highest wins): runtime overrides > project config > user config > defaults
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const LinearConfigSchema: z.ZodObject<{
11
+ enabled: z.ZodDefault<z.ZodBoolean>;
12
+ teamId: z.ZodOptional<z.ZodString>;
13
+ projectId: z.ZodOptional<z.ZodString>;
14
+ userId: z.ZodOptional<z.ZodString>;
15
+ statusMap: z.ZodOptional<z.ZodObject<{
16
+ pending: z.ZodOptional<z.ZodString>;
17
+ 'in-progress': z.ZodOptional<z.ZodString>;
18
+ completed: z.ZodOptional<z.ZodString>;
19
+ failed: z.ZodOptional<z.ZodString>;
20
+ review: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strip>>;
22
+ }, z.core.$strip>;
23
+ export declare const CommentCheckerConfigSchema: z.ZodObject<{
24
+ enabled: z.ZodDefault<z.ZodBoolean>;
25
+ binaryPath: z.ZodOptional<z.ZodString>;
26
+ customPrompt: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>;
28
+ export declare const NudgeConfigSchema: z.ZodObject<{
29
+ enabled: z.ZodDefault<z.ZodBoolean>;
30
+ maxRetries: z.ZodDefault<z.ZodNumber>;
31
+ }, z.core.$strip>;
32
+ export declare const IterationScalingConfigSchema: z.ZodObject<{
33
+ enabled: z.ZodDefault<z.ZodBoolean>;
34
+ base: z.ZodDefault<z.ZodNumber>;
35
+ factor: z.ZodDefault<z.ZodNumber>;
36
+ }, z.core.$strip>;
37
+ declare const FractalPlannerConfigBaseSchema: z.ZodObject<{
38
+ maxComplexity: z.ZodDefault<z.ZodNumber>;
39
+ maxIterations: z.ZodDefault<z.ZodNumber>;
40
+ maxParallelTasks: z.ZodDefault<z.ZodNumber>;
41
+ researchOnly: z.ZodDefault<z.ZodBoolean>;
42
+ planOnly: z.ZodDefault<z.ZodBoolean>;
43
+ skipPlanReview: z.ZodDefault<z.ZodBoolean>;
44
+ skipApproachReview: z.ZodDefault<z.ZodBoolean>;
45
+ preAnalysis: z.ZodDefault<z.ZodBoolean>;
46
+ enableAgentTeams: z.ZodDefault<z.ZodBoolean>;
47
+ noCommit: z.ZodDefault<z.ZodBoolean>;
48
+ plansDir: z.ZodDefault<z.ZodString>;
49
+ permissionMode: z.ZodDefault<z.ZodEnum<{
50
+ default: "default";
51
+ acceptEdits: "acceptEdits";
52
+ bypassPermissions: "bypassPermissions";
53
+ plan: "plan";
54
+ delegate: "delegate";
55
+ dontAsk: "dontAsk";
56
+ }>>;
57
+ linear: z.ZodDefault<z.ZodObject<{
58
+ enabled: z.ZodDefault<z.ZodBoolean>;
59
+ teamId: z.ZodOptional<z.ZodString>;
60
+ projectId: z.ZodOptional<z.ZodString>;
61
+ userId: z.ZodOptional<z.ZodString>;
62
+ statusMap: z.ZodOptional<z.ZodObject<{
63
+ pending: z.ZodOptional<z.ZodString>;
64
+ 'in-progress': z.ZodOptional<z.ZodString>;
65
+ completed: z.ZodOptional<z.ZodString>;
66
+ failed: z.ZodOptional<z.ZodString>;
67
+ review: z.ZodOptional<z.ZodString>;
68
+ }, z.core.$strip>>;
69
+ }, z.core.$strip>>;
70
+ commentChecker: z.ZodDefault<z.ZodObject<{
71
+ enabled: z.ZodDefault<z.ZodBoolean>;
72
+ binaryPath: z.ZodOptional<z.ZodString>;
73
+ customPrompt: z.ZodOptional<z.ZodString>;
74
+ }, z.core.$strip>>;
75
+ nudge: z.ZodDefault<z.ZodObject<{
76
+ enabled: z.ZodDefault<z.ZodBoolean>;
77
+ maxRetries: z.ZodDefault<z.ZodNumber>;
78
+ }, z.core.$strip>>;
79
+ cliRunner: z.ZodDefault<z.ZodEnum<{
80
+ bun: "bun";
81
+ node: "node";
82
+ auto: "auto";
83
+ }>>;
84
+ iterationScaling: z.ZodDefault<z.ZodObject<{
85
+ enabled: z.ZodDefault<z.ZodBoolean>;
86
+ base: z.ZodDefault<z.ZodNumber>;
87
+ factor: z.ZodDefault<z.ZodNumber>;
88
+ }, z.core.$strip>>;
89
+ executionOrder: z.ZodDefault<z.ZodEnum<{
90
+ "risk-first": "risk-first";
91
+ "easy-first": "easy-first";
92
+ "document-order": "document-order";
93
+ }>>;
94
+ }, z.core.$strip>;
95
+ export declare const FractalPlannerConfigSchema: z.ZodObject<{
96
+ maxComplexity: z.ZodDefault<z.ZodNumber>;
97
+ maxIterations: z.ZodDefault<z.ZodNumber>;
98
+ maxParallelTasks: z.ZodDefault<z.ZodNumber>;
99
+ researchOnly: z.ZodDefault<z.ZodBoolean>;
100
+ planOnly: z.ZodDefault<z.ZodBoolean>;
101
+ skipPlanReview: z.ZodDefault<z.ZodBoolean>;
102
+ skipApproachReview: z.ZodDefault<z.ZodBoolean>;
103
+ preAnalysis: z.ZodDefault<z.ZodBoolean>;
104
+ enableAgentTeams: z.ZodDefault<z.ZodBoolean>;
105
+ noCommit: z.ZodDefault<z.ZodBoolean>;
106
+ plansDir: z.ZodDefault<z.ZodString>;
107
+ permissionMode: z.ZodDefault<z.ZodEnum<{
108
+ default: "default";
109
+ acceptEdits: "acceptEdits";
110
+ bypassPermissions: "bypassPermissions";
111
+ plan: "plan";
112
+ delegate: "delegate";
113
+ dontAsk: "dontAsk";
114
+ }>>;
115
+ linear: z.ZodDefault<z.ZodObject<{
116
+ enabled: z.ZodDefault<z.ZodBoolean>;
117
+ teamId: z.ZodOptional<z.ZodString>;
118
+ projectId: z.ZodOptional<z.ZodString>;
119
+ userId: z.ZodOptional<z.ZodString>;
120
+ statusMap: z.ZodOptional<z.ZodObject<{
121
+ pending: z.ZodOptional<z.ZodString>;
122
+ 'in-progress': z.ZodOptional<z.ZodString>;
123
+ completed: z.ZodOptional<z.ZodString>;
124
+ failed: z.ZodOptional<z.ZodString>;
125
+ review: z.ZodOptional<z.ZodString>;
126
+ }, z.core.$strip>>;
127
+ }, z.core.$strip>>;
128
+ commentChecker: z.ZodDefault<z.ZodObject<{
129
+ enabled: z.ZodDefault<z.ZodBoolean>;
130
+ binaryPath: z.ZodOptional<z.ZodString>;
131
+ customPrompt: z.ZodOptional<z.ZodString>;
132
+ }, z.core.$strip>>;
133
+ nudge: z.ZodDefault<z.ZodObject<{
134
+ enabled: z.ZodDefault<z.ZodBoolean>;
135
+ maxRetries: z.ZodDefault<z.ZodNumber>;
136
+ }, z.core.$strip>>;
137
+ cliRunner: z.ZodDefault<z.ZodEnum<{
138
+ bun: "bun";
139
+ node: "node";
140
+ auto: "auto";
141
+ }>>;
142
+ iterationScaling: z.ZodDefault<z.ZodObject<{
143
+ enabled: z.ZodDefault<z.ZodBoolean>;
144
+ base: z.ZodDefault<z.ZodNumber>;
145
+ factor: z.ZodDefault<z.ZodNumber>;
146
+ }, z.core.$strip>>;
147
+ executionOrder: z.ZodDefault<z.ZodEnum<{
148
+ "risk-first": "risk-first";
149
+ "easy-first": "easy-first";
150
+ "document-order": "document-order";
151
+ }>>;
152
+ }, z.core.$strip>;
153
+ export type FractalPlannerConfig = z.infer<typeof FractalPlannerConfigSchema>;
154
+ export type FractalPlannerConfigFile = z.input<typeof FractalPlannerConfigBaseSchema>;
155
+ export declare const DEFAULT_CONFIG: FractalPlannerConfig;
156
+ /**
157
+ * Resolve the user-level config path.
158
+ * Respects $XDG_CONFIG_HOME, falls back to ~/.config.
159
+ */
160
+ export declare function getUserConfigPath(): string;
161
+ /**
162
+ * Resolve the project-level config path (relative to cwd).
163
+ */
164
+ export declare function getProjectConfigPath(): string;
165
+ /**
166
+ * Load config from user + project files, merge with defaults, and cache.
167
+ * Optionally accepts runtime overrides (highest priority).
168
+ *
169
+ * Throws if any config file contains invalid JSON or values.
170
+ */
171
+ export declare function loadConfig(overrides?: FractalPlannerConfigFile): Promise<FractalPlannerConfig>;
172
+ /**
173
+ * Sync getter for cached config.
174
+ * Throws if loadConfig() has not been called.
175
+ */
176
+ export declare function getConfig(): FractalPlannerConfig;
177
+ /**
178
+ * Clear the cached config (for testing or reloading).
179
+ */
180
+ export declare function resetConfig(): void;
181
+ export {};
182
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Fractal Planner
3
+ *
4
+ * Main exports for the framework
5
+ */
6
+ export * from './types/index.js';
7
+ export * from './config.js';
8
+ export * from './phases/interview.js';
9
+ export * from './phases/research.js';
10
+ export * from './phases/decomposition.js';
11
+ export * from './phases/planning.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Clearance Check Module
3
+ *
4
+ * Evaluates if interview has gathered enough context to proceed.
5
+ * Adapted from oh-my-opencode clearance checklist.
6
+ */
7
+ import type { ClearanceCheck, InterviewDraft } from '../types/index.js';
8
+ /**
9
+ * Evaluate if interview has gathered enough context to proceed
10
+ */
11
+ export declare function evaluateClearance(draft: InterviewDraft): Promise<ClearanceCheck>;
12
+ //# sourceMappingURL=clearance.d.ts.map
@@ -0,0 +1,41 @@
1
+ import type { Task } from '../types/index.js';
2
+ export type ViolationType = 'over-complexity' | 'missing-acceptance' | 'missing-files' | 'missing-tests-required' | 'missing-hints' | 'missing-guardrails' | 'subtask-count' | 'scattered-files';
3
+ export interface TaskViolation {
4
+ type: ViolationType;
5
+ id: string;
6
+ description: string;
7
+ parentId: string | null;
8
+ depth: number;
9
+ detail: string;
10
+ }
11
+ export interface ValidationResult {
12
+ valid: boolean;
13
+ maxComplexity: number;
14
+ totalLeafTasks: number;
15
+ violations: TaskViolation[];
16
+ warnings: TaskViolation[];
17
+ stats: {
18
+ maxDepth: number;
19
+ leafComplexityDistribution: Record<number, number>;
20
+ dimensionAverages?: Record<string, number>;
21
+ };
22
+ }
23
+ /**
24
+ * Validate that the task tree conforms to all decomposer rules:
25
+ * - Leaf complexity <= maxComplexity
26
+ * - Leaves have acceptance criteria
27
+ * - Leaves have filesToModify metadata
28
+ * - Leaves have testsRequired metadata
29
+ * - Leaves have guardrails metadata
30
+ * - Non-leaf, non-root nodes have 2-5 subtasks
31
+ */
32
+ export declare function validateTaskTree(root: Task, maxComplexity: number): ValidationResult;
33
+ /**
34
+ * Calculate total number of leaf tasks in the tree
35
+ */
36
+ export declare function countLeafTasks(task: Task): number;
37
+ /**
38
+ * Calculate maximum depth of the task tree
39
+ */
40
+ export declare function calculateMaxDepth(task: Task, currentDepth?: number): number;
41
+ //# sourceMappingURL=decomposition.d.ts.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Interview Phase - Iterative clarification loop
3
+ *
4
+ * Uses Claude Agent SDK to spawn an agent with access to AskUserQuestion tool.
5
+ * Adapted from oh-my-opencode Prometheus agent.
6
+ */
7
+ import type { InterviewFindings, FractalPlannerConfig } from '../types/index.js';
8
+ /**
9
+ * Interview Phase - Iterative clarification loop
10
+ * Runs until clearance check passes
11
+ */
12
+ export declare function runInterviewPhase(userGoal: string, planId?: string, config?: Partial<FractalPlannerConfig>): Promise<{
13
+ findings: InterviewFindings;
14
+ draftPath: string;
15
+ planId: string;
16
+ }>;
17
+ //# sourceMappingURL=interview.d.ts.map
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Planning Phase
3
+ *
4
+ * Creates a detailed implementation plan with strict acceptance criteria
5
+ * and execution ordering based on dependencies.
6
+ */
7
+ import type { Task, PlanningResult } from '../types/index.js';
8
+ /**
9
+ * Generate a comprehensive implementation plan
10
+ */
11
+ export declare function createImplementationPlan(rootTask: Task): Promise<PlanningResult>;
12
+ /**
13
+ * Get execution order respecting dependencies
14
+ * Returns tasks in topological order with optional tiebreak strategy
15
+ */
16
+ export declare function getExecutionOrder(rootTask: Task, tiebreak?: 'risk-first' | 'easy-first' | 'document-order'): Task[];
17
+ /**
18
+ * Print a visual tree representation of the plan
19
+ */
20
+ export declare function printPlanTree(task: Task, prefix?: string, isLast?: boolean): void;
21
+ //# sourceMappingURL=planning.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Research Phase
3
+ *
4
+ * Conducts iterative research to understand the codebase,
5
+ * identify gaps, and gather requirements.
6
+ */
7
+ import type { ResearchFindings, InterviewFindings, FractalPlannerConfig } from '../types/index.js';
8
+ export declare function runResearchPhase(userGoal: string, interviewFindings?: InterviewFindings, config?: Partial<FractalPlannerConfig>): Promise<ResearchFindings>;
9
+ //# sourceMappingURL=research.d.ts.map
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Core types for Fractal Planner
3
+ */
4
+ export interface Task {
5
+ id: string;
6
+ description: string;
7
+ acceptanceCriteria: string[];
8
+ estimatedComplexity: number;
9
+ dependencies: string[];
10
+ subtasks?: Task[];
11
+ status?: TaskStatus;
12
+ complexityDimensions?: {
13
+ scope: number;
14
+ risk: number;
15
+ novelty: number;
16
+ integration: number;
17
+ testing: number;
18
+ };
19
+ metadata?: {
20
+ filesToModify?: string[];
21
+ testsRequired?: boolean;
22
+ hints?: string[];
23
+ references?: string[];
24
+ guardrails?: string[];
25
+ testCommands?: string[];
26
+ complexitySignals?: {
27
+ fileScope: number;
28
+ coupling: number;
29
+ gitRisk: number;
30
+ testCoverage: number;
31
+ composite: number;
32
+ };
33
+ };
34
+ }
35
+ export type TaskStatus = 'pending' | 'in-progress' | 'completed' | 'failed';
36
+ export interface ResearchFindings {
37
+ codebasePatterns: string[];
38
+ existingImplementations: string[];
39
+ potentialChallenges: string[];
40
+ openQuestions: string[];
41
+ assumptions: string[];
42
+ }
43
+ export interface PlanningResult {
44
+ rootTask: Task;
45
+ totalTasks: number;
46
+ maxDepth: number;
47
+ estimatedDuration?: string;
48
+ }
49
+ export interface ExecutionResult {
50
+ taskId: string;
51
+ success: boolean;
52
+ iterations: number;
53
+ verificationReport: VerificationReport;
54
+ }
55
+ export interface VerificationReport {
56
+ verified: boolean;
57
+ passedCriteria: number[];
58
+ failedCriteria: number[];
59
+ feedback: string;
60
+ suggestions?: string[];
61
+ }
62
+ export type { FractalPlannerConfig, FractalPlannerConfigFile } from '../config.js';
63
+ export interface AgentMessage {
64
+ role: 'builder' | 'verifier' | 'orchestrator';
65
+ content: string;
66
+ timestamp: number;
67
+ }
68
+ export type IntentType = 'trivial' | 'refactoring' | 'build-from-scratch' | 'mid-sized' | 'architecture';
69
+ export interface QuestionStrategy {
70
+ researchFirst: boolean;
71
+ focusAreas: string[];
72
+ initialQuestions: string[];
73
+ researchPrompts: string[];
74
+ }
75
+ export interface ClearanceCheck {
76
+ passed: boolean;
77
+ checklist: {
78
+ coreObjectiveDefined: boolean;
79
+ scopeBoundariesEstablished: boolean;
80
+ noAmbiguities: boolean;
81
+ technicalApproachDecided: boolean;
82
+ noBlockingQuestions: boolean;
83
+ testStrategyIdentified: boolean;
84
+ };
85
+ gaps: ClearanceGap[];
86
+ }
87
+ export interface ClearanceGap {
88
+ type: 'critical' | 'minor' | 'ambiguous';
89
+ item: keyof ClearanceCheck['checklist'];
90
+ description: string;
91
+ suggestedQuestion?: string;
92
+ }
93
+ export interface InterviewFindings {
94
+ intent: IntentType;
95
+ userGoal: string;
96
+ confirmedRequirements: string[];
97
+ scopeInclusions: string[];
98
+ scopeExclusions: string[];
99
+ technicalDecisions: Record<string, string>;
100
+ constraints: string[];
101
+ assumptions: string[];
102
+ openQuestions: string[];
103
+ codebaseContext?: {
104
+ relevantFiles: string[];
105
+ existingPatterns: string[];
106
+ testStrategy?: string;
107
+ };
108
+ }
109
+ export interface InterviewDraft {
110
+ name: string;
111
+ planId?: string;
112
+ created: string;
113
+ lastUpdated: string;
114
+ findings: InterviewFindings;
115
+ }
116
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Draft Management Utility
3
+ *
4
+ * Manages persistent interview state across turns.
5
+ * The draft file serves as working memory during the interview loop.
6
+ */
7
+ import type { InterviewDraft, InterviewFindings, IntentType } from '../types/index.js';
8
+ export declare function generateSlugPlanId(description: string): string;
9
+ export declare function createDraft(name: string, userGoal: string, intent: IntentType, planId?: string, plansDir?: string): Promise<{
10
+ draftPath: string;
11
+ planId: string;
12
+ }>;
13
+ /**
14
+ * Update draft with new findings
15
+ */
16
+ export declare function updateDraft(draftPath: string, updates: Partial<InterviewFindings>): Promise<void>;
17
+ /**
18
+ * Read draft file
19
+ */
20
+ export declare function readDraft(draftPath: string): Promise<InterviewDraft>;
21
+ //# sourceMappingURL=draft.d.ts.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Intent-Specific Question Strategies
3
+ *
4
+ * Adapted from oh-my-opencode interview-mode.ts
5
+ */
6
+ import type { IntentType } from '../types/index.js';
7
+ /**
8
+ * Question strategy for interview phase
9
+ */
10
+ export interface QuestionStrategy {
11
+ researchFirst: boolean;
12
+ focusAreas: string[];
13
+ initialQuestions: string[];
14
+ researchPrompts: string[];
15
+ }
16
+ /**
17
+ * Intent-specific interview strategies
18
+ */
19
+ export declare function getQuestionStrategy(intent: IntentType): QuestionStrategy;
20
+ /**
21
+ * Classify user intent based on goal description
22
+ */
23
+ export declare function classifyIntent(userGoal: string): IntentType;
24
+ //# sourceMappingURL=question-strategies.d.ts.map
@@ -0,0 +1,3 @@
1
+ import type { Task } from '../types/index.js';
2
+ export declare function parseTasksMarkdown(markdown: string): Task;
3
+ //# sourceMappingURL=task-parser.d.ts.map
@@ -0,0 +1,27 @@
1
+ {
2
+ "hooks": {
3
+ "PostToolUse": [
4
+ {
5
+ "matcher": "Write|Edit|MultiEdit|apply_patch",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/run-comment-checker.sh",
10
+ "timeout": 30
11
+ }
12
+ ]
13
+ }
14
+ ],
15
+ "TeammateIdle": [
16
+ {
17
+ "hooks": [
18
+ {
19
+ "type": "command",
20
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/nudge-teammate.sh",
21
+ "timeout": 15
22
+ }
23
+ ]
24
+ }
25
+ ]
26
+ }
27
+ }