@defai.digital/ax-cli 2.8.0 → 3.0.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.
Files changed (124) hide show
  1. package/README.md +85 -9
  2. package/dist/agent/context-manager.js +9 -0
  3. package/dist/agent/context-manager.js.map +1 -1
  4. package/dist/agent/dependency-resolver.js +13 -5
  5. package/dist/agent/dependency-resolver.js.map +1 -1
  6. package/dist/agent/llm-agent.d.ts +48 -0
  7. package/dist/agent/llm-agent.js +375 -3
  8. package/dist/agent/llm-agent.js.map +1 -1
  9. package/dist/agent/subagent-orchestrator.d.ts +4 -0
  10. package/dist/agent/subagent-orchestrator.js +54 -11
  11. package/dist/agent/subagent-orchestrator.js.map +1 -1
  12. package/dist/agent/subagent.js +35 -11
  13. package/dist/agent/subagent.js.map +1 -1
  14. package/dist/commands/cache.js +5 -3
  15. package/dist/commands/cache.js.map +1 -1
  16. package/dist/commands/memory.js +21 -16
  17. package/dist/commands/memory.js.map +1 -1
  18. package/dist/commands/plan.d.ts +43 -0
  19. package/dist/commands/plan.js +385 -0
  20. package/dist/commands/plan.js.map +1 -0
  21. package/dist/constants.d.ts +28 -0
  22. package/dist/constants.js +29 -0
  23. package/dist/constants.js.map +1 -1
  24. package/dist/hooks/use-enhanced-input.d.ts +5 -1
  25. package/dist/hooks/use-enhanced-input.js +23 -10
  26. package/dist/hooks/use-enhanced-input.js.map +1 -1
  27. package/dist/hooks/use-input-handler.d.ts +11 -1
  28. package/dist/hooks/use-input-handler.js +270 -2
  29. package/dist/hooks/use-input-handler.js.map +1 -1
  30. package/dist/llm/tools.d.ts +5 -0
  31. package/dist/llm/tools.js +57 -6
  32. package/dist/llm/tools.js.map +1 -1
  33. package/dist/mcp/client.js +19 -12
  34. package/dist/mcp/client.js.map +1 -1
  35. package/dist/planner/dependency-resolver.d.ts +72 -0
  36. package/dist/planner/dependency-resolver.js +272 -0
  37. package/dist/planner/dependency-resolver.js.map +1 -0
  38. package/dist/planner/index.d.ts +12 -0
  39. package/dist/planner/index.js +26 -0
  40. package/dist/planner/index.js.map +1 -0
  41. package/dist/planner/plan-generator.d.ts +74 -0
  42. package/dist/planner/plan-generator.js +244 -0
  43. package/dist/planner/plan-generator.js.map +1 -0
  44. package/dist/planner/plan-storage.d.ts +98 -0
  45. package/dist/planner/plan-storage.js +325 -0
  46. package/dist/planner/plan-storage.js.map +1 -0
  47. package/dist/planner/prompts/planning-prompt.d.ts +41 -0
  48. package/dist/planner/prompts/planning-prompt.js +289 -0
  49. package/dist/planner/prompts/planning-prompt.js.map +1 -0
  50. package/dist/planner/task-planner.d.ts +135 -0
  51. package/dist/planner/task-planner.js +493 -0
  52. package/dist/planner/task-planner.js.map +1 -0
  53. package/dist/planner/token-estimator.d.ts +63 -0
  54. package/dist/planner/token-estimator.js +295 -0
  55. package/dist/planner/token-estimator.js.map +1 -0
  56. package/dist/planner/types.d.ts +669 -0
  57. package/dist/planner/types.js +213 -0
  58. package/dist/planner/types.js.map +1 -0
  59. package/dist/schemas/confirmation-schemas.d.ts +5 -0
  60. package/dist/schemas/confirmation-schemas.js +7 -0
  61. package/dist/schemas/confirmation-schemas.js.map +1 -1
  62. package/dist/schemas/index.d.ts +4 -4
  63. package/dist/tools/bash-output.d.ts +25 -0
  64. package/dist/tools/bash-output.js +145 -0
  65. package/dist/tools/bash-output.js.map +1 -0
  66. package/dist/tools/bash.d.ts +46 -2
  67. package/dist/tools/bash.js +241 -67
  68. package/dist/tools/bash.js.map +1 -1
  69. package/dist/tools/search.js +15 -2
  70. package/dist/tools/search.js.map +1 -1
  71. package/dist/tools/text-editor.js +4 -2
  72. package/dist/tools/text-editor.js.map +1 -1
  73. package/dist/ui/components/chat-history.d.ts +1 -0
  74. package/dist/ui/components/chat-history.js +125 -41
  75. package/dist/ui/components/chat-history.js.map +1 -1
  76. package/dist/ui/components/chat-input.js +10 -3
  77. package/dist/ui/components/chat-input.js.map +1 -1
  78. package/dist/ui/components/chat-interface.js +152 -44
  79. package/dist/ui/components/chat-interface.js.map +1 -1
  80. package/dist/ui/components/collapsible-tool-result.d.ts +26 -0
  81. package/dist/ui/components/collapsible-tool-result.js +172 -0
  82. package/dist/ui/components/collapsible-tool-result.js.map +1 -0
  83. package/dist/ui/components/command-suggestions.js +2 -1
  84. package/dist/ui/components/command-suggestions.js.map +1 -1
  85. package/dist/ui/components/confirmation-dialog.js +25 -36
  86. package/dist/ui/components/confirmation-dialog.js.map +1 -1
  87. package/dist/ui/components/index.d.ts +8 -0
  88. package/dist/ui/components/index.js +9 -0
  89. package/dist/ui/components/index.js.map +1 -1
  90. package/dist/ui/components/keyboard-hints.d.ts +35 -0
  91. package/dist/ui/components/keyboard-hints.js +134 -0
  92. package/dist/ui/components/keyboard-hints.js.map +1 -0
  93. package/dist/ui/components/loading-spinner.d.ts +2 -1
  94. package/dist/ui/components/loading-spinner.js +86 -34
  95. package/dist/ui/components/loading-spinner.js.map +1 -1
  96. package/dist/ui/components/phase-progress.d.ts +21 -0
  97. package/dist/ui/components/phase-progress.js +228 -0
  98. package/dist/ui/components/phase-progress.js.map +1 -0
  99. package/dist/ui/components/quick-actions.d.ts +12 -0
  100. package/dist/ui/components/quick-actions.js +122 -0
  101. package/dist/ui/components/quick-actions.js.map +1 -0
  102. package/dist/ui/components/reasoning-display.d.ts +0 -80
  103. package/dist/ui/components/reasoning-display.js +0 -83
  104. package/dist/ui/components/reasoning-display.js.map +1 -1
  105. package/dist/ui/components/status-bar.d.ts +25 -0
  106. package/dist/ui/components/status-bar.js +125 -0
  107. package/dist/ui/components/status-bar.js.map +1 -0
  108. package/dist/ui/components/toast-notification.d.ts +123 -0
  109. package/dist/ui/components/toast-notification.js +143 -0
  110. package/dist/ui/components/toast-notification.js.map +1 -0
  111. package/dist/ui/components/welcome-panel.d.ts +10 -0
  112. package/dist/ui/components/welcome-panel.js +107 -0
  113. package/dist/ui/components/welcome-panel.js.map +1 -0
  114. package/dist/utils/background-task-manager.d.ts +95 -0
  115. package/dist/utils/background-task-manager.js +330 -0
  116. package/dist/utils/background-task-manager.js.map +1 -0
  117. package/dist/utils/confirmation-service.js +8 -3
  118. package/dist/utils/confirmation-service.js.map +1 -1
  119. package/dist/utils/message-optimizer.d.ts +1 -0
  120. package/dist/utils/message-optimizer.js +7 -1
  121. package/dist/utils/message-optimizer.js.map +1 -1
  122. package/dist/utils/project-analyzer.js +5 -2
  123. package/dist/utils/project-analyzer.js.map +1 -1
  124. package/package.json +2 -1
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Multi-Phase Task Planning System - Type Definitions
3
+ *
4
+ * Defines the core data structures for task decomposition,
5
+ * phase execution, and plan persistence.
6
+ */
7
+ import { z } from "zod";
8
+ // ============================================================================
9
+ // Enums
10
+ // ============================================================================
11
+ /**
12
+ * Risk level for a phase - determines approval requirements
13
+ */
14
+ export var RiskLevel;
15
+ (function (RiskLevel) {
16
+ RiskLevel["LOW"] = "low";
17
+ RiskLevel["MEDIUM"] = "medium";
18
+ RiskLevel["HIGH"] = "high";
19
+ })(RiskLevel || (RiskLevel = {}));
20
+ /**
21
+ * Fallback strategy when a phase fails
22
+ */
23
+ export var FallbackStrategy;
24
+ (function (FallbackStrategy) {
25
+ FallbackStrategy["RETRY"] = "retry";
26
+ FallbackStrategy["SKIP"] = "skip";
27
+ FallbackStrategy["ABORT"] = "abort";
28
+ })(FallbackStrategy || (FallbackStrategy = {}));
29
+ /**
30
+ * Status of an individual phase
31
+ */
32
+ export var PhaseStatus;
33
+ (function (PhaseStatus) {
34
+ PhaseStatus["PENDING"] = "pending";
35
+ PhaseStatus["APPROVED"] = "approved";
36
+ PhaseStatus["QUEUED"] = "queued";
37
+ PhaseStatus["EXECUTING"] = "executing";
38
+ PhaseStatus["COMPLETED"] = "completed";
39
+ PhaseStatus["FAILED"] = "failed";
40
+ PhaseStatus["SKIPPED"] = "skipped";
41
+ PhaseStatus["CANCELLED"] = "cancelled";
42
+ })(PhaseStatus || (PhaseStatus = {}));
43
+ /**
44
+ * Status of the overall plan
45
+ */
46
+ export var PlanStatus;
47
+ (function (PlanStatus) {
48
+ PlanStatus["CREATED"] = "created";
49
+ PlanStatus["APPROVED"] = "approved";
50
+ PlanStatus["EXECUTING"] = "executing";
51
+ PlanStatus["PAUSED"] = "paused";
52
+ PlanStatus["COMPLETED"] = "completed";
53
+ PlanStatus["FAILED"] = "failed";
54
+ PlanStatus["ABANDONED"] = "abandoned";
55
+ })(PlanStatus || (PlanStatus = {}));
56
+ // ============================================================================
57
+ // Zod Schemas for Runtime Validation
58
+ // ============================================================================
59
+ export const RiskLevelSchema = z.nativeEnum(RiskLevel);
60
+ export const FallbackStrategySchema = z.nativeEnum(FallbackStrategy);
61
+ export const PhaseStatusSchema = z.nativeEnum(PhaseStatus);
62
+ export const PlanStatusSchema = z.nativeEnum(PlanStatus);
63
+ export const TaskPhaseSchema = z.object({
64
+ id: z.string(),
65
+ index: z.number(),
66
+ name: z.string(),
67
+ description: z.string(),
68
+ objectives: z.array(z.string()),
69
+ toolsRequired: z.array(z.string()),
70
+ dependencies: z.array(z.string()),
71
+ canRunInParallel: z.boolean(),
72
+ riskLevel: RiskLevelSchema,
73
+ requiresApproval: z.boolean(),
74
+ fallbackStrategy: FallbackStrategySchema,
75
+ maxRetries: z.number().default(3),
76
+ status: PhaseStatusSchema,
77
+ startedAt: z.date().optional(),
78
+ completedAt: z.date().optional(),
79
+ duration: z.number().optional(),
80
+ checkpointId: z.string().optional(),
81
+ retryCount: z.number().default(0),
82
+ output: z.string().optional(),
83
+ error: z.string().optional(),
84
+ tokensUsed: z.number().optional(),
85
+ filesModified: z.array(z.string()).optional(),
86
+ });
87
+ export const TaskPlanSchema = z.object({
88
+ id: z.string(),
89
+ version: z.number(),
90
+ originalPrompt: z.string(),
91
+ reasoning: z.string(),
92
+ complexity: z.enum(["simple", "moderate", "complex"]),
93
+ phases: z.array(TaskPhaseSchema),
94
+ currentPhaseIndex: z.number(),
95
+ status: PlanStatusSchema,
96
+ createdAt: z.date(),
97
+ updatedAt: z.date(),
98
+ estimatedTotalTokens: z.number(),
99
+ estimatedDuration: z.number(),
100
+ initialCheckpointId: z.string().optional(),
101
+ totalTokensUsed: z.number().default(0),
102
+ actualDuration: z.number().default(0),
103
+ phasesCompleted: z.number().default(0),
104
+ phasesFailed: z.number().default(0),
105
+ phasesSkipped: z.number().default(0),
106
+ });
107
+ export const PhaseResultSchema = z.object({
108
+ phaseId: z.string(),
109
+ success: z.boolean(),
110
+ output: z.string().optional(),
111
+ error: z.string().optional(),
112
+ duration: z.number(),
113
+ tokensUsed: z.number(),
114
+ filesModified: z.array(z.string()),
115
+ checkpointId: z.string().optional(),
116
+ wasRetry: z.boolean(),
117
+ retryAttempt: z.number(),
118
+ });
119
+ // ============================================================================
120
+ // LLM Response Schemas (for parsing plan generation)
121
+ // ============================================================================
122
+ /**
123
+ * Schema for LLM-generated phase (before adding execution state)
124
+ */
125
+ export const LLMPhaseResponseSchema = z.object({
126
+ name: z.string(),
127
+ description: z.string(),
128
+ objectives: z.array(z.string()),
129
+ toolsRequired: z.array(z.string()).default([]),
130
+ dependencies: z.array(z.string()).default([]),
131
+ canRunInParallel: z.boolean().default(false),
132
+ riskLevel: z.enum(["low", "medium", "high"]).default("low"),
133
+ requiresApproval: z.boolean().default(false),
134
+ });
135
+ /**
136
+ * Schema for LLM-generated plan response
137
+ */
138
+ export const LLMPlanResponseSchema = z.object({
139
+ reasoning: z.string(),
140
+ complexity: z.enum(["simple", "moderate", "complex"]),
141
+ phases: z.array(LLMPhaseResponseSchema),
142
+ });
143
+ // ============================================================================
144
+ // Factory Functions
145
+ // ============================================================================
146
+ /**
147
+ * Create a new TaskPhase with defaults
148
+ */
149
+ export function createPhase(partial) {
150
+ return {
151
+ objectives: [],
152
+ toolsRequired: [],
153
+ dependencies: [],
154
+ canRunInParallel: false,
155
+ riskLevel: RiskLevel.LOW,
156
+ requiresApproval: false,
157
+ fallbackStrategy: FallbackStrategy.ABORT,
158
+ maxRetries: 3,
159
+ status: PhaseStatus.PENDING,
160
+ retryCount: 0,
161
+ ...partial,
162
+ };
163
+ }
164
+ /**
165
+ * Create a new TaskPlan with defaults
166
+ */
167
+ export function createPlan(partial) {
168
+ const now = new Date();
169
+ return {
170
+ version: 1,
171
+ reasoning: "",
172
+ complexity: "moderate",
173
+ currentPhaseIndex: -1,
174
+ status: PlanStatus.CREATED,
175
+ createdAt: now,
176
+ updatedAt: now,
177
+ estimatedTotalTokens: 0,
178
+ estimatedDuration: 0,
179
+ totalTokensUsed: 0,
180
+ actualDuration: 0,
181
+ phasesCompleted: 0,
182
+ phasesFailed: 0,
183
+ phasesSkipped: 0,
184
+ ...partial,
185
+ };
186
+ }
187
+ /**
188
+ * Create default execution options
189
+ */
190
+ export function createDefaultExecutionOptions() {
191
+ return {
192
+ autoApprove: false,
193
+ autoApproveLowRisk: false,
194
+ createCheckpoints: true,
195
+ pruneContextBetweenPhases: true,
196
+ targetContextPercentage: 50,
197
+ maxParallelPhases: 5,
198
+ phaseTimeoutMs: 600000, // 10 minutes
199
+ };
200
+ }
201
+ /**
202
+ * Create default planner options
203
+ */
204
+ export function createDefaultPlannerOptions() {
205
+ return {
206
+ maxPhases: 10,
207
+ autoPlanThreshold: 3,
208
+ requirePlanApproval: true,
209
+ requireHighRiskApproval: true,
210
+ defaultExecutionOptions: createDefaultExecutionOptions(),
211
+ };
212
+ }
213
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/planner/types.ts"],"names":[],"mappings":"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"}
@@ -58,3 +58,8 @@ export declare function safeValidateConfirmationOptions(data: unknown): {
58
58
  error?: z.ZodError;
59
59
  };
60
60
  export declare function validateConfirmationResult(data: unknown): ConfirmationResult;
61
+ export declare function safeValidateConfirmationResult(data: unknown): {
62
+ success: boolean;
63
+ data?: ConfirmationResult;
64
+ error?: z.ZodError;
65
+ };
@@ -38,4 +38,11 @@ export function safeValidateConfirmationOptions(data) {
38
38
  export function validateConfirmationResult(data) {
39
39
  return ConfirmationResultSchema.parse(data);
40
40
  }
41
+ export function safeValidateConfirmationResult(data) {
42
+ const result = ConfirmationResultSchema.safeParse(data);
43
+ if (result.success) {
44
+ return { success: true, data: result.data };
45
+ }
46
+ return { success: false, error: result.error };
47
+ }
41
48
  //# sourceMappingURL=confirmation-schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation-schemas.js","sourceRoot":"","sources":["../../src/schemas/confirmation-schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAIH,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE;IACzB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;CAC3B,CAAC,CAAC;AAIH;;GAEG;AAEH,MAAM,UAAU,2BAA2B,CACzC,IAAa;IAEb,OAAO,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAa;IAK3D,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,OAAO,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"confirmation-schemas.js","sourceRoot":"","sources":["../../src/schemas/confirmation-schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8BAA8B;AAC9B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAIH,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE;IACzB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;CAC3B,CAAC,CAAC;AAIH;;GAEG;AAEH,MAAM,UAAU,2BAA2B,CACzC,IAAa;IAEb,OAAO,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAa;IAK3D,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,OAAO,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAa;IAK1D,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC"}
@@ -94,16 +94,16 @@ export declare const ProjectTemplateSchema: z.ZodObject<{
94
94
  description: string;
95
95
  id: string;
96
96
  version: string;
97
+ createdAt: string;
98
+ projectType: string;
97
99
  metadata: {
98
100
  scripts?: Record<string, string> | undefined;
99
101
  directories?: Record<string, string> | undefined;
100
102
  conventions?: Record<string, string> | undefined;
101
103
  keyFiles?: string[] | undefined;
102
104
  };
103
- projectType: string;
104
105
  tags: string[];
105
106
  instructions: string;
106
- createdAt: string;
107
107
  isBuiltIn: boolean;
108
108
  author?: string | undefined;
109
109
  }, {
@@ -111,16 +111,16 @@ export declare const ProjectTemplateSchema: z.ZodObject<{
111
111
  description: string;
112
112
  id: string;
113
113
  version: string;
114
+ createdAt: string;
115
+ projectType: string;
114
116
  metadata: {
115
117
  scripts?: Record<string, string> | undefined;
116
118
  directories?: Record<string, string> | undefined;
117
119
  conventions?: Record<string, string> | undefined;
118
120
  keyFiles?: string[] | undefined;
119
121
  };
120
- projectType: string;
121
122
  tags: string[];
122
123
  instructions: string;
123
- createdAt: string;
124
124
  isBuiltIn: boolean;
125
125
  author?: string | undefined;
126
126
  }>;
@@ -0,0 +1,25 @@
1
+ import { ToolResult } from '../types/index.js';
2
+ /**
3
+ * BashOutputTool - Retrieve output from background tasks
4
+ *
5
+ * This tool allows the AI agent to check on and retrieve output
6
+ * from commands that were run in the background.
7
+ */
8
+ export declare class BashOutputTool {
9
+ private backgroundTaskManager;
10
+ /**
11
+ * Get output from a background task
12
+ * @param taskId The background task ID
13
+ * @param wait Whether to wait for the task to complete (default: false)
14
+ * @param timeoutMs Maximum time to wait in milliseconds (default: 30000)
15
+ */
16
+ execute(taskId: string, wait?: boolean, timeoutMs?: number): Promise<ToolResult>;
17
+ /**
18
+ * List all background tasks
19
+ */
20
+ listTasks(): ToolResult;
21
+ /**
22
+ * Kill a background task
23
+ */
24
+ killTask(taskId: string): ToolResult;
25
+ }
@@ -0,0 +1,145 @@
1
+ import { getBackgroundTaskManager } from '../utils/background-task-manager.js';
2
+ /**
3
+ * BashOutputTool - Retrieve output from background tasks
4
+ *
5
+ * This tool allows the AI agent to check on and retrieve output
6
+ * from commands that were run in the background.
7
+ */
8
+ export class BashOutputTool {
9
+ backgroundTaskManager = getBackgroundTaskManager();
10
+ /**
11
+ * Get output from a background task
12
+ * @param taskId The background task ID
13
+ * @param wait Whether to wait for the task to complete (default: false)
14
+ * @param timeoutMs Maximum time to wait in milliseconds (default: 30000)
15
+ */
16
+ async execute(taskId, wait = false, timeoutMs = 30000) {
17
+ if (!taskId) {
18
+ return {
19
+ success: false,
20
+ error: 'Task ID is required'
21
+ };
22
+ }
23
+ try {
24
+ let output;
25
+ if (wait) {
26
+ // Wait for task to complete
27
+ output = await this.backgroundTaskManager.waitForTask(taskId, timeoutMs);
28
+ }
29
+ else {
30
+ output = this.backgroundTaskManager.getOutput(taskId);
31
+ }
32
+ if (!output) {
33
+ return {
34
+ success: false,
35
+ error: `Task not found: ${taskId}`
36
+ };
37
+ }
38
+ // Format output
39
+ const statusEmoji = {
40
+ 'running': '🔄',
41
+ 'completed': '✅',
42
+ 'failed': '❌',
43
+ 'killed': '🛑'
44
+ }[output.status] || '❓';
45
+ let result = `${statusEmoji} Task ${taskId}\n`;
46
+ result += `Status: ${output.status}`;
47
+ if (output.exitCode !== undefined && output.exitCode !== null) {
48
+ result += ` (exit code: ${output.exitCode})`;
49
+ }
50
+ result += '\n';
51
+ if (output.startTime) {
52
+ const elapsed = output.endTime
53
+ ? Math.round((output.endTime.getTime() - output.startTime.getTime()) / 1000)
54
+ : Math.round((Date.now() - output.startTime.getTime()) / 1000);
55
+ result += `Duration: ${elapsed}s\n`;
56
+ }
57
+ result += '\n';
58
+ if (output.stdout) {
59
+ result += '--- STDOUT ---\n';
60
+ result += output.stdout;
61
+ result += '\n';
62
+ }
63
+ if (output.stderr) {
64
+ result += '--- STDERR ---\n';
65
+ result += output.stderr;
66
+ result += '\n';
67
+ }
68
+ if (!output.stdout && !output.stderr) {
69
+ result += '(No output yet)\n';
70
+ }
71
+ return {
72
+ success: true,
73
+ output: result.trim()
74
+ };
75
+ }
76
+ catch (error) {
77
+ return {
78
+ success: false,
79
+ error: `Failed to get task output: ${error.message}`
80
+ };
81
+ }
82
+ }
83
+ /**
84
+ * List all background tasks
85
+ */
86
+ listTasks() {
87
+ const tasks = this.backgroundTaskManager.listTasks();
88
+ if (tasks.length === 0) {
89
+ return {
90
+ success: true,
91
+ output: 'No background tasks'
92
+ };
93
+ }
94
+ let result = `📋 Background Tasks (${tasks.length})\n\n`;
95
+ const statusEmoji = {
96
+ 'running': '🔄',
97
+ 'completed': '✅',
98
+ 'failed': '❌',
99
+ 'killed': '🛑'
100
+ };
101
+ for (const task of tasks) {
102
+ const emoji = statusEmoji[task.status] || '❓';
103
+ const elapsed = task.endTime
104
+ ? Math.round((task.endTime.getTime() - task.startTime.getTime()) / 1000)
105
+ : Math.round((Date.now() - task.startTime.getTime()) / 1000);
106
+ result += `${emoji} ${task.id}\n`;
107
+ result += ` Command: ${task.command.length > 50 ? task.command.slice(0, 50) + '...' : task.command}\n`;
108
+ result += ` Status: ${task.status}`;
109
+ if (task.exitCode !== undefined && task.exitCode !== null) {
110
+ result += ` (exit: ${task.exitCode})`;
111
+ }
112
+ result += ` | Duration: ${elapsed}s\n`;
113
+ result += '\n';
114
+ }
115
+ return {
116
+ success: true,
117
+ output: result.trim()
118
+ };
119
+ }
120
+ /**
121
+ * Kill a background task
122
+ */
123
+ killTask(taskId) {
124
+ if (!taskId) {
125
+ return {
126
+ success: false,
127
+ error: 'Task ID is required'
128
+ };
129
+ }
130
+ const killed = this.backgroundTaskManager.kill(taskId);
131
+ if (killed) {
132
+ return {
133
+ success: true,
134
+ output: `🛑 Task ${taskId} has been killed`
135
+ };
136
+ }
137
+ else {
138
+ return {
139
+ success: false,
140
+ error: `Could not kill task ${taskId}. It may not exist or is not running.`
141
+ };
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=bash-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash-output.js","sourceRoot":"","sources":["../../src/tools/bash-output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACjB,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;IAE3D;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAgB,KAAK,EAAE,YAAoB,KAAK;QAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qBAAqB;aAC7B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,MAAM,CAAC;YAEX,IAAI,IAAI,EAAE,CAAC;gBACT,4BAA4B;gBAC5B,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mBAAmB,MAAM,EAAE;iBACnC,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YAExB,IAAI,MAAM,GAAG,GAAG,WAAW,SAAS,MAAM,IAAI,CAAC;YAC/C,MAAM,IAAI,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC;YAErC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC9D,MAAM,IAAI,gBAAgB,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC/C,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;YAEf,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;oBAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;oBAC5E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACjE,MAAM,IAAI,aAAa,OAAO,KAAK,CAAC;YACtC,CAAC;YAED,MAAM,IAAI,IAAI,CAAC;YAEf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,kBAAkB,CAAC;gBAC7B,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;gBACxB,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,kBAAkB,CAAC;gBAC7B,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;gBACxB,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,IAAI,mBAAmB,CAAC;YAChC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,8BAA8B,KAAK,CAAC,OAAO,EAAE;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;QAErD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,qBAAqB;aAC9B,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,GAAG,wBAAwB,KAAK,CAAC,MAAM,OAAO,CAAC;QAEzD,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;gBAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;gBACxE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAE/D,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;YAClC,MAAM,IAAI,eAAe,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC;YACzG,MAAM,IAAI,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC1D,MAAM,IAAI,WAAW,IAAI,CAAC,QAAQ,GAAG,CAAC;YACxC,CAAC;YACD,MAAM,IAAI,gBAAgB,OAAO,KAAK,CAAC;YACvC,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qBAAqB;aAC7B,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,WAAW,MAAM,kBAAkB;aAC5C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uBAAuB,MAAM,uCAAuC;aAC5E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -1,10 +1,54 @@
1
1
  import { ToolResult } from '../types/index.js';
2
- export declare class BashTool {
2
+ import { EventEmitter } from 'events';
3
+ export interface BashExecuteOptions {
4
+ timeout?: number;
5
+ background?: boolean;
6
+ /** Abort signal to cancel execution or move to background */
7
+ signal?: AbortSignal;
8
+ }
9
+ /**
10
+ * Result when command is moved to background
11
+ */
12
+ export interface BackgroundTransferResult {
13
+ movedToBackground: true;
14
+ taskId: string;
15
+ partialOutput: string;
16
+ }
17
+ export declare class BashTool extends EventEmitter {
3
18
  private static readonly MAX_BUFFER_SIZE;
4
19
  private static readonly DEFAULT_TIMEOUT;
5
20
  private currentDirectory;
6
21
  private confirmationService;
7
- execute(command: string, timeout?: number): Promise<ToolResult>;
22
+ private backgroundTaskManager;
23
+ /** Currently running process (for Ctrl+B transfer) */
24
+ private currentProcess;
25
+ private currentCommand;
26
+ private currentOutput;
27
+ constructor();
28
+ /**
29
+ * Check if a command is currently executing
30
+ */
31
+ isExecuting(): boolean;
32
+ /**
33
+ * Move the currently running command to background
34
+ * Returns task ID if successful, null if no command is running
35
+ */
36
+ moveToBackground(): string | null;
37
+ /**
38
+ * Execute a bash command
39
+ * @param command The command to execute
40
+ * @param options Execution options (timeout, background, signal)
41
+ */
42
+ execute(command: string, options?: BashExecuteOptions | number): Promise<ToolResult>;
43
+ /**
44
+ * Handle cd command separately (no spawn needed)
45
+ */
46
+ private handleCdCommand;
47
+ /**
48
+ * Execute command using spawn (interruptible)
49
+ * Returns ToolResult normally, or BackgroundTransferResult if moved to background
50
+ */
51
+ private executeWithSpawn;
8
52
  getCurrentDirectory(): string;
9
53
  listFiles(directory?: string): Promise<ToolResult>;
10
54
  findFiles(pattern: string, directory?: string): Promise<ToolResult>;