@mragentix/cli 4.2.39 → 4.2.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -6
- package/defaults/agents/bee.md +22 -0
- package/defaults/agents/db-manager.md +31 -0
- package/defaults/agents/deployer.md +35 -0
- package/defaults/agents/devops.md +36 -0
- package/defaults/agents/owl.md +24 -0
- package/defaults/agents/payments.md +29 -0
- package/defaults/agents/workspace.md +37 -0
- package/defaults/skills/act.md +65 -0
- package/defaults/skills/docker.md +84 -0
- package/defaults/skills/doppler.md +89 -0
- package/defaults/skills/drizzle.md +81 -0
- package/defaults/skills/firebase.md +83 -0
- package/defaults/skills/gh.md +91 -0
- package/defaults/skills/gws.md +72 -0
- package/defaults/skills/netlify.md +69 -0
- package/defaults/skills/prisma.md +62 -0
- package/defaults/skills/railway.md +69 -0
- package/defaults/skills/stripe.md +69 -0
- package/defaults/skills/supabase.md +84 -0
- package/defaults/skills/turso.md +78 -0
- package/defaults/skills/vercel.md +72 -0
- package/defaults/skills/wrangler.md +105 -0
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -63
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +7 -7
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +9 -4
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +53 -8
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auto-update.js +1 -1
- package/dist/core/auto-update.js.map +1 -1
- package/dist/core/compaction/compactor.d.ts +1 -1
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +1 -1
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +2 -2
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/compaction/token-estimator.d.ts +1 -1
- package/dist/core/compaction/token-estimator.d.ts.map +1 -1
- package/dist/core/event-bus.d.ts +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/extensions/types.d.ts +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/mcp/client.d.ts +1 -1
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/defaults.d.ts +1 -1
- package/dist/core/mcp/defaults.d.ts.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +2 -7
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/skills.d.ts +7 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +53 -7
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -97
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/telegram.d.ts +19 -0
- package/dist/core/telegram.d.ts.map +1 -1
- package/dist/core/telegram.js +22 -0
- package/dist/core/telegram.js.map +1 -1
- package/dist/core/voice-transcriber.d.ts +33 -0
- package/dist/core/voice-transcriber.d.ts.map +1 -0
- package/dist/core/voice-transcriber.js +113 -0
- package/dist/core/voice-transcriber.js.map +1 -0
- package/dist/core/voice-transcriber.test.d.ts +2 -0
- package/dist/core/voice-transcriber.test.d.ts.map +1 -0
- package/dist/core/voice-transcriber.test.js +88 -0
- package/dist/core/voice-transcriber.test.js.map +1 -0
- package/dist/interactive.js +6 -6
- package/dist/interactive.js.map +1 -1
- package/dist/modes/json-mode.d.ts +1 -1
- package/dist/modes/json-mode.d.ts.map +1 -1
- package/dist/modes/json-mode.js +1 -1
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc-mode.d.ts +1 -1
- package/dist/modes/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc-mode.js +1 -1
- package/dist/modes/rpc-mode.js.map +1 -1
- package/dist/modes/serve-mode.d.ts +1 -1
- package/dist/modes/serve-mode.d.ts.map +1 -1
- package/dist/modes/serve-mode.js +41 -4
- package/dist/modes/serve-mode.js.map +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +1 -8
- package/dist/session.js.map +1 -1
- package/dist/system-prompt.js +2 -2
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.d.ts +1 -2
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +1 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/enter-plan.d.ts +1 -1
- package/dist/tools/enter-plan.d.ts.map +1 -1
- package/dist/tools/exit-plan.d.ts +1 -1
- package/dist/tools/exit-plan.d.ts.map +1 -1
- package/dist/tools/exit-plan.js +2 -3
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/find.d.ts +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/index.d.ts +5 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.d.ts +1 -1
- package/dist/tools/ls.d.ts.map +1 -1
- package/dist/tools/plan-mode.test.js +6 -6
- package/dist/tools/plan-mode.test.js.map +1 -1
- package/dist/tools/read.d.ts +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/skill.d.ts +1 -1
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/subagent.d.ts +1 -1
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/task-output.d.ts +1 -1
- package/dist/tools/task-output.d.ts.map +1 -1
- package/dist/tools/task-stop.d.ts +1 -1
- package/dist/tools/task-stop.d.ts.map +1 -1
- package/dist/tools/tasks.d.ts +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +1 -1
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +1 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +1 -1
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/write.d.ts +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +3 -1
- package/dist/tools/write.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/App.d.ts +9 -3
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +49 -121
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/activity-phrases.d.ts +10 -0
- package/dist/ui/activity-phrases.d.ts.map +1 -0
- package/dist/ui/activity-phrases.js +227 -0
- package/dist/ui/activity-phrases.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +1 -225
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/Banner.d.ts +1 -1
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/Banner.js +7 -4
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +453 -39
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ModelSelector.d.ts +1 -1
- package/dist/ui/components/ModelSelector.d.ts.map +1 -1
- package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
- package/dist/ui/components/PlanOverlay.js +7 -3
- package/dist/ui/components/PlanOverlay.js.map +1 -1
- package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
- package/dist/ui/components/SkillsOverlay.js +6 -2
- package/dist/ui/components/SkillsOverlay.js.map +1 -1
- package/dist/ui/components/TaskOverlay.d.ts.map +1 -1
- package/dist/ui/components/TaskOverlay.js +8 -4
- package/dist/ui/components/TaskOverlay.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -2
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +3 -2
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useSessionManager.d.ts +2 -2
- package/dist/ui/hooks/useSessionManager.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +12 -2
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +27 -6
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.d.ts +8 -1
- package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.js +20 -23
- package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
- package/dist/ui/login.d.ts +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +5 -1
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/plan-overlay.test.d.ts +2 -0
- package/dist/ui/plan-overlay.test.d.ts.map +1 -0
- package/dist/ui/plan-overlay.test.js +327 -0
- package/dist/ui/plan-overlay.test.js.map +1 -0
- package/dist/ui/render.d.ts +2 -2
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +1 -1
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/sessions.d.ts.map +1 -1
- package/dist/ui/sessions.js +5 -1
- package/dist/ui/sessions.js.map +1 -1
- package/package.json +17 -14
- package/LICENSE +0 -21
- package/dist/core/branding.d.ts +0 -11
- package/dist/core/branding.d.ts.map +0 -1
- package/dist/core/branding.js +0 -11
- package/dist/core/branding.js.map +0 -1
- package/dist/core/update.d.ts +0 -34
- package/dist/core/update.d.ts.map +0 -1
- package/dist/core/update.js +0 -231
- package/dist/core/update.js.map +0 -1
|
@@ -8,14 +8,24 @@ interface TerminalSizeValue {
|
|
|
8
8
|
* Provider that attaches a single resize listener to stdout and shares
|
|
9
9
|
* { columns, rows, resizeKey } with all descendants via context.
|
|
10
10
|
*
|
|
11
|
-
* Mount this once near the root of the component tree (e.g. in render.ts
|
|
12
|
-
* to avoid MaxListenersExceededWarning
|
|
11
|
+
* Mount this once near the root of the component tree (e.g. in render.ts
|
|
12
|
+
* or App.tsx) to avoid the MaxListenersExceededWarning that occurs when
|
|
13
|
+
* every component independently listens for resize events.
|
|
13
14
|
*/
|
|
14
15
|
export declare function TerminalSizeProvider({ children }: {
|
|
15
16
|
children: React.ReactNode;
|
|
16
17
|
}): React.FunctionComponentElement<React.ProviderProps<TerminalSizeValue | null>>;
|
|
17
18
|
/**
|
|
18
19
|
* Returns { columns, rows, resizeKey } from the nearest TerminalSizeProvider.
|
|
20
|
+
*
|
|
21
|
+
* All values (`columns`, `rows`, `resizeKey`) update together after resize
|
|
22
|
+
* events settle (300ms debounce). Updating dimensions immediately would
|
|
23
|
+
* trigger React re-renders on every resize event while Ink's internal
|
|
24
|
+
* line-tracking still assumes the old width, causing ghost/duplicate renders.
|
|
25
|
+
*
|
|
26
|
+
* `resizeKey` can be used as a React `key` to force a full remount — this
|
|
27
|
+
* is the only reliable way to make Ink re-render <Static> content that was
|
|
28
|
+
* already printed to scrollback and got corrupted by terminal text reflow.
|
|
19
29
|
*/
|
|
20
30
|
export declare function useTerminalSize(): TerminalSizeValue;
|
|
21
31
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAGnG,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAGnG,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,iFAgD/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,sBAM9B"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef, useCallback, useContext, createContext } from "react";
|
|
2
2
|
import { useStdout } from "ink";
|
|
3
|
+
// Minimum terminal dimensions — below these values layout calculations can
|
|
4
|
+
// produce zero/negative widths that cause Ink to enter infinite re-render
|
|
5
|
+
// loops with ghost/duplicate content. Every consumer of useTerminalSize()
|
|
6
|
+
// is guaranteed at least these values.
|
|
3
7
|
const MIN_COLUMNS = 40;
|
|
4
8
|
const MIN_ROWS = 10;
|
|
5
9
|
const TerminalSizeContext = createContext(null);
|
|
@@ -7,8 +11,9 @@ const TerminalSizeContext = createContext(null);
|
|
|
7
11
|
* Provider that attaches a single resize listener to stdout and shares
|
|
8
12
|
* { columns, rows, resizeKey } with all descendants via context.
|
|
9
13
|
*
|
|
10
|
-
* Mount this once near the root of the component tree (e.g. in render.ts
|
|
11
|
-
* to avoid MaxListenersExceededWarning
|
|
14
|
+
* Mount this once near the root of the component tree (e.g. in render.ts
|
|
15
|
+
* or App.tsx) to avoid the MaxListenersExceededWarning that occurs when
|
|
16
|
+
* every component independently listens for resize events.
|
|
12
17
|
*/
|
|
13
18
|
export function TerminalSizeProvider({ children }) {
|
|
14
19
|
const { stdout } = useStdout();
|
|
@@ -21,14 +26,21 @@ export function TerminalSizeProvider({ children }) {
|
|
|
21
26
|
const onResize = useCallback(() => {
|
|
22
27
|
if (!stdout)
|
|
23
28
|
return;
|
|
24
|
-
//
|
|
29
|
+
// Do NOT update dimensions immediately — doing so triggers React
|
|
30
|
+
// re-renders on every resize event (many per drag), but Ink's internal
|
|
31
|
+
// line-tracking still assumes the old width, so each re-render at the
|
|
32
|
+
// new width is positioned incorrectly, leaving ghost/duplicate copies
|
|
33
|
+
// of the input area in the terminal. Instead, debounce everything so
|
|
34
|
+
// we update once after the user finishes dragging.
|
|
25
35
|
if (debounceRef.current)
|
|
26
36
|
clearTimeout(debounceRef.current);
|
|
27
37
|
debounceRef.current = setTimeout(() => {
|
|
28
38
|
// Clear visible screen + scrollback to remove deformed ghost renders
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
// left behind by Ink re-rendering at different terminal widths during
|
|
40
|
+
// a resize drag.
|
|
41
|
+
stdout.write("\x1b[2J" + // clear visible screen
|
|
42
|
+
"\x1b[3J" + // clear scrollback buffer
|
|
43
|
+
"\x1b[H");
|
|
32
44
|
setSize({
|
|
33
45
|
columns: Math.max(MIN_COLUMNS, stdout.columns ?? 80),
|
|
34
46
|
rows: Math.max(MIN_ROWS, stdout.rows ?? 24),
|
|
@@ -51,6 +63,15 @@ export function TerminalSizeProvider({ children }) {
|
|
|
51
63
|
}
|
|
52
64
|
/**
|
|
53
65
|
* Returns { columns, rows, resizeKey } from the nearest TerminalSizeProvider.
|
|
66
|
+
*
|
|
67
|
+
* All values (`columns`, `rows`, `resizeKey`) update together after resize
|
|
68
|
+
* events settle (300ms debounce). Updating dimensions immediately would
|
|
69
|
+
* trigger React re-renders on every resize event while Ink's internal
|
|
70
|
+
* line-tracking still assumes the old width, causing ghost/duplicate renders.
|
|
71
|
+
*
|
|
72
|
+
* `resizeKey` can be used as a React `key` to force a full remount — this
|
|
73
|
+
* is the only reliable way to make Ink re-render <Static> content that was
|
|
74
|
+
* already printed to scrollback and got corrupted by terminal text reflow.
|
|
54
75
|
*/
|
|
55
76
|
export function useTerminalSize() {
|
|
56
77
|
const ctx = useContext(TerminalSizeContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAQhC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,mBAAmB,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import type { ActivityPhase } from "./useAgentLoop.js";
|
|
2
|
-
export
|
|
2
|
+
export interface TerminalTitleOptions {
|
|
3
|
+
phase: ActivityPhase;
|
|
4
|
+
isRunning: boolean;
|
|
5
|
+
userMessage?: string;
|
|
6
|
+
activeToolNames?: string[];
|
|
7
|
+
planMode?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function useTerminalTitle({ phase, isRunning, userMessage, activeToolNames, planMode, }: TerminalTitleOptions): void;
|
|
3
10
|
//# sourceMappingURL=useTerminalTitle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalTitle.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalTitle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useTerminalTitle.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalTitle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQvD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,WAAgB,EAChB,eAAoB,EACpB,QAAgB,GACjB,EAAE,oBAAoB,GAAG,IAAI,CAwC7B"}
|
|
@@ -1,40 +1,37 @@
|
|
|
1
|
-
import { useEffect } from "react";
|
|
1
|
+
import { useEffect, useMemo, useRef } from "react";
|
|
2
2
|
import { useStdout } from "ink";
|
|
3
3
|
import { SPINNER_FRAMES, SPINNER_INTERVAL } from "../spinner-frames.js";
|
|
4
4
|
import { useAnimationTick, deriveFrame } from "../components/AnimationContext.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
switch (phase) {
|
|
9
|
-
case "thinking":
|
|
10
|
-
return "Thinking...";
|
|
11
|
-
case "generating":
|
|
12
|
-
return "Generating...";
|
|
13
|
-
case "tools":
|
|
14
|
-
return "Running tools...";
|
|
15
|
-
case "waiting":
|
|
16
|
-
return "Thinking...";
|
|
17
|
-
default:
|
|
18
|
-
return "MR Agentix";
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export function useTerminalTitle(phase, isRunning) {
|
|
5
|
+
import { PLANNING_PHRASES, selectPhrases, shuffleArray } from "../activity-phrases.js";
|
|
6
|
+
const PHRASE_INTERVAL = 3000;
|
|
7
|
+
export function useTerminalTitle({ phase, isRunning, userMessage = "", activeToolNames = [], planMode = false, }) {
|
|
22
8
|
const { stdout } = useStdout();
|
|
23
9
|
// Derive spinner frame from global animation tick — no independent timer
|
|
24
10
|
const tick = useAnimationTick();
|
|
25
11
|
const spinnerFrame = isRunning ? deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length) : 0;
|
|
12
|
+
// Phrase rotation — mirrors ActivityIndicator logic
|
|
13
|
+
const toolNamesKey = activeToolNames.sort().join(",");
|
|
14
|
+
const phrases = useMemo(() => shuffleArray(planMode && phase === "waiting"
|
|
15
|
+
? PLANNING_PHRASES
|
|
16
|
+
: selectPhrases(phase, userMessage, activeToolNames)), [phase, userMessage, toolNamesKey, planMode]);
|
|
17
|
+
const phraseIndex = Math.floor(deriveFrame(tick, PHRASE_INTERVAL, phrases.length * 1000) / 1000);
|
|
18
|
+
const phrase = phrases[phraseIndex] ?? phrases[0];
|
|
19
|
+
// Track previous title to avoid redundant writes
|
|
20
|
+
const prevTitleRef = useRef("");
|
|
26
21
|
// Write terminal title
|
|
27
22
|
useEffect(() => {
|
|
28
23
|
if (!stdout)
|
|
29
24
|
return;
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
const title = isRunning ? `${SPINNER_FRAMES[spinnerFrame]} ${phrase}...` : "MR Agentix Coder";
|
|
26
|
+
if (title !== prevTitleRef.current) {
|
|
27
|
+
prevTitleRef.current = title;
|
|
28
|
+
stdout.write(`\x1b]0;${title}\x1b\\`);
|
|
29
|
+
}
|
|
30
|
+
}, [stdout, phrase, isRunning, spinnerFrame]);
|
|
34
31
|
// Reset title on unmount
|
|
35
32
|
useEffect(() => {
|
|
36
33
|
return () => {
|
|
37
|
-
stdout?.write(`\x1b]0;MR Agentix\x1b\\`);
|
|
34
|
+
stdout?.write(`\x1b]0;MR Agentix Coder\x1b\\`);
|
|
38
35
|
};
|
|
39
36
|
}, [stdout]);
|
|
40
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalTitle.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalTitle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useTerminalTitle.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalTitle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEvF,MAAM,eAAe,GAAG,IAAI,CAAC;AAU7B,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,WAAW,GAAG,EAAE,EAChB,eAAe,GAAG,EAAE,EACpB,QAAQ,GAAG,KAAK,GACK;IACrB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAE/B,yEAAyE;IACzE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,oDAAoD;IACpD,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CACH,YAAY,CACV,QAAQ,IAAI,KAAK,KAAK,SAAS;QAC7B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,CACvD,EACH,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAC7C,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAElD,iDAAiD;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEhC,uBAAuB;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAC9F,IAAI,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;YACnC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9C,yBAAyB;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC"}
|
package/dist/ui/login.d.ts
CHANGED
package/dist/ui/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAkFjD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyD9E"}
|
package/dist/ui/login.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
const LOGO_LINES = [
|
|
2
|
+
const LOGO_LINES = [
|
|
3
|
+
" \u2584\u2580\u2580\u2580 \u2584\u2580\u2580\u2580",
|
|
4
|
+
" \u2588 \u2580\u2588 \u2588 \u2580\u2588",
|
|
5
|
+
" \u2580\u2584\u2584\u2580 \u2580\u2584\u2584\u2580",
|
|
6
|
+
];
|
|
3
7
|
const GRADIENT = [
|
|
4
8
|
"#60a5fa",
|
|
5
9
|
"#6da1f9",
|
package/dist/ui/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/ui/login.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,GAAG;IACjB,oDAAoD;IACpD,0CAA0C;IAC1C,oDAAoD;CACrD,CAAC;AACF,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,MAAM,OAAO,GAAG,SAAS,CAAC;AAC1B,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,QAAQ,GAAG,SAAS,CAAC;AAE3B,IAAI,QAAQ,GAAG,EAAE,CAAC;AAElB,MAAM,SAAS,GAA8D;IAC3E,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE;IACrF,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACtF,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE;IACpE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE;CACnE,CAAC;AAEF,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/B,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,aAAqB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CACR,YAAY,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;QAC1B,GAAG;QACH,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC3C,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC1C,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,CAAC,KAAK,aAAa,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAE3E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,mEAAmE;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC;QAEF,kCAAkC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,EAAE,CAAC;QAEP,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,6BAA6B;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAE7B,4BAA4B;YAC5B,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACrC,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,iBAAiB;YACjB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,WAAW;YACX,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBAC1C,aAAa,EAAE,CAAC;gBAChB,IAAI,EAAE,CAAC;YACT,CAAC;YAED,aAAa;YACb,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,aAAa,EAAE,CAAC;gBAChB,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-overlay.test.d.ts","sourceRoot":"","sources":["../../src/ui/plan-overlay.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
async function loadPlanEntries(cwd) {
|
|
6
|
+
const plansDir = path.join(cwd, ".mragentix", "plans");
|
|
7
|
+
let files;
|
|
8
|
+
try {
|
|
9
|
+
files = await fs.readdir(plansDir);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const entries = [];
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
if (!file.endsWith(".md"))
|
|
17
|
+
continue;
|
|
18
|
+
const filePath = path.join(plansDir, file);
|
|
19
|
+
try {
|
|
20
|
+
const stat = await fs.stat(filePath);
|
|
21
|
+
entries.push({
|
|
22
|
+
name: file.replace(/\.md$/, ""),
|
|
23
|
+
path: filePath,
|
|
24
|
+
modifiedMs: stat.mtimeMs,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
entries.push({ name: file.replace(/\.md$/, ""), path: filePath, modifiedMs: 0 });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Sort newest first
|
|
32
|
+
entries.sort((a, b) => b.modifiedMs - a.modifiedMs);
|
|
33
|
+
return entries;
|
|
34
|
+
}
|
|
35
|
+
function createAppState(overrides) {
|
|
36
|
+
return {
|
|
37
|
+
overlay: null,
|
|
38
|
+
planAutoExpand: false,
|
|
39
|
+
planMode: false,
|
|
40
|
+
pending: false,
|
|
41
|
+
doneStatus: null,
|
|
42
|
+
...overrides,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function simulateOnDone(state, durationMs, toolsUsed) {
|
|
46
|
+
// Mirrors App.tsx line 1071
|
|
47
|
+
if (state.pending)
|
|
48
|
+
return;
|
|
49
|
+
state.doneStatus = { durationMs, toolsUsed, verb: "done" };
|
|
50
|
+
}
|
|
51
|
+
// ── Auto-expand helper (mirrors PlanOverlay.tsx lines 168-173) ──
|
|
52
|
+
function tryAutoExpand(autoExpandNewest, loaded, plans, alreadyExpanded) {
|
|
53
|
+
if (autoExpandNewest && loaded && plans.length > 0 && !alreadyExpanded) {
|
|
54
|
+
return { expanded: true, plan: plans[0] };
|
|
55
|
+
}
|
|
56
|
+
return { expanded: alreadyExpanded, plan: null };
|
|
57
|
+
}
|
|
58
|
+
// ── Index clamping (mirrors PlanOverlay.tsx lines 176-182) ──
|
|
59
|
+
function clampIndex(selectedIndex, plansLength) {
|
|
60
|
+
if (plansLength === 0)
|
|
61
|
+
return 0;
|
|
62
|
+
if (selectedIndex >= plansLength)
|
|
63
|
+
return plansLength - 1;
|
|
64
|
+
return selectedIndex;
|
|
65
|
+
}
|
|
66
|
+
// ── Tests ────────────────────────────────────────────────────
|
|
67
|
+
let tmpDir;
|
|
68
|
+
beforeEach(async () => {
|
|
69
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "plan-overlay-test-"));
|
|
70
|
+
});
|
|
71
|
+
afterEach(async () => {
|
|
72
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
73
|
+
});
|
|
74
|
+
// ── loadPlanEntries ──────────────────────────────────────────
|
|
75
|
+
describe("loadPlanEntries", () => {
|
|
76
|
+
it("returns empty array when .mragentix/plans/ does not exist", async () => {
|
|
77
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
78
|
+
expect(entries).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
it("returns empty array when .mragentix/plans/ exists but is empty", async () => {
|
|
81
|
+
await fs.mkdir(path.join(tmpDir, ".mragentix", "plans"), { recursive: true });
|
|
82
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
83
|
+
expect(entries).toEqual([]);
|
|
84
|
+
});
|
|
85
|
+
it("ignores non-.md files", async () => {
|
|
86
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
87
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
88
|
+
await fs.writeFile(path.join(plansDir, "notes.txt"), "not a plan");
|
|
89
|
+
await fs.writeFile(path.join(plansDir, "data.json"), "{}");
|
|
90
|
+
await fs.writeFile(path.join(plansDir, "real-plan.md"), "# Plan");
|
|
91
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
92
|
+
expect(entries).toHaveLength(1);
|
|
93
|
+
expect(entries[0].name).toBe("real-plan");
|
|
94
|
+
});
|
|
95
|
+
it("loads multiple plans and strips .md extension", async () => {
|
|
96
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
97
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
98
|
+
await fs.writeFile(path.join(plansDir, "alpha.md"), "# Alpha");
|
|
99
|
+
await fs.writeFile(path.join(plansDir, "beta.md"), "# Beta");
|
|
100
|
+
await fs.writeFile(path.join(plansDir, "gamma.md"), "# Gamma");
|
|
101
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
102
|
+
expect(entries).toHaveLength(3);
|
|
103
|
+
const names = entries.map((e) => e.name);
|
|
104
|
+
expect(names).toContain("alpha");
|
|
105
|
+
expect(names).toContain("beta");
|
|
106
|
+
expect(names).toContain("gamma");
|
|
107
|
+
});
|
|
108
|
+
it("sorts plans by modification time (newest first)", async () => {
|
|
109
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
110
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
111
|
+
const oldPath = path.join(plansDir, "old.md");
|
|
112
|
+
const newPath = path.join(plansDir, "new.md");
|
|
113
|
+
await fs.writeFile(oldPath, "# Old");
|
|
114
|
+
const pastTime = new Date(Date.now() - 60_000);
|
|
115
|
+
await fs.utimes(oldPath, pastTime, pastTime);
|
|
116
|
+
await fs.writeFile(newPath, "# New");
|
|
117
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
118
|
+
expect(entries).toHaveLength(2);
|
|
119
|
+
expect(entries[0].name).toBe("new");
|
|
120
|
+
expect(entries[1].name).toBe("old");
|
|
121
|
+
expect(entries[0].modifiedMs).toBeGreaterThan(entries[1].modifiedMs);
|
|
122
|
+
});
|
|
123
|
+
it("sets modifiedMs to 0 when stat fails (e.g., broken symlink)", async () => {
|
|
124
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
125
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
126
|
+
const brokenLink = path.join(plansDir, "broken.md");
|
|
127
|
+
await fs.symlink("/nonexistent/path/file.md", brokenLink);
|
|
128
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
129
|
+
expect(entries).toHaveLength(1);
|
|
130
|
+
expect(entries[0].name).toBe("broken");
|
|
131
|
+
expect(entries[0].modifiedMs).toBe(0);
|
|
132
|
+
});
|
|
133
|
+
it("includes correct absolute paths", async () => {
|
|
134
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
135
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
136
|
+
await fs.writeFile(path.join(plansDir, "my-plan.md"), "# Plan");
|
|
137
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
138
|
+
expect(entries[0].path).toBe(path.join(plansDir, "my-plan.md"));
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
// ── Plan overlay pending guard ──────────────────────────────
|
|
142
|
+
describe("planOverlayPending guard (onDone suppression)", () => {
|
|
143
|
+
it("returns done status when overlay is NOT pending", () => {
|
|
144
|
+
const state = createAppState({ pending: false });
|
|
145
|
+
simulateOnDone(state, 1500, ["read", "write"]);
|
|
146
|
+
expect(state.doneStatus).toEqual({
|
|
147
|
+
durationMs: 1500,
|
|
148
|
+
toolsUsed: ["read", "write"],
|
|
149
|
+
verb: "done",
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
it("returns null (suppresses done) when overlay IS pending", () => {
|
|
153
|
+
const state = createAppState({ pending: true });
|
|
154
|
+
simulateOnDone(state, 1500, ["read", "write"]);
|
|
155
|
+
expect(state.doneStatus).toBeNull();
|
|
156
|
+
});
|
|
157
|
+
it("suppresses done status even with empty tool list", () => {
|
|
158
|
+
const state = createAppState({ pending: true });
|
|
159
|
+
simulateOnDone(state, 500, []);
|
|
160
|
+
expect(state.doneStatus).toBeNull();
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
// ── Plan overlay pending race condition simulation ──────────
|
|
164
|
+
describe("planOverlayPending race condition", () => {
|
|
165
|
+
it("onDone fires BEFORE setTimeout — done status suppressed", () => {
|
|
166
|
+
// Step 1: exit_plan tool finishes → pending = true
|
|
167
|
+
const state = createAppState({ pending: true });
|
|
168
|
+
// Step 2: onDone fires immediately (agent loop finishes)
|
|
169
|
+
simulateOnDone(state, 2000, ["write"]);
|
|
170
|
+
expect(state.doneStatus).toBeNull(); // correctly suppressed
|
|
171
|
+
// Step 3: setTimeout fires (300ms later)
|
|
172
|
+
state.overlay = "plan";
|
|
173
|
+
state.pending = false;
|
|
174
|
+
expect(state.overlay).toBe("plan");
|
|
175
|
+
expect(state.pending).toBe(false);
|
|
176
|
+
});
|
|
177
|
+
it("onDone fires AFTER setTimeout — done status shows (edge case)", () => {
|
|
178
|
+
// Step 1: exit_plan → pending = true
|
|
179
|
+
const state = createAppState({ pending: true });
|
|
180
|
+
// Step 2: setTimeout fires first
|
|
181
|
+
state.overlay = "plan";
|
|
182
|
+
state.pending = false;
|
|
183
|
+
// Step 3: onDone fires after timeout — NOT suppressed
|
|
184
|
+
simulateOnDone(state, 2000, ["write"]);
|
|
185
|
+
expect(state.doneStatus).not.toBeNull();
|
|
186
|
+
// This is the race condition: done status leaks through while overlay is open
|
|
187
|
+
expect(state.overlay).toBe("plan");
|
|
188
|
+
expect(state.doneStatus).toEqual({ durationMs: 2000, toolsUsed: ["write"], verb: "done" });
|
|
189
|
+
});
|
|
190
|
+
it("multiple rapid plan mode toggles don't cause inconsistent state", () => {
|
|
191
|
+
const state = createAppState();
|
|
192
|
+
const stateLog = [];
|
|
193
|
+
for (let i = 0; i < 10; i++) {
|
|
194
|
+
state.planMode = !state.planMode;
|
|
195
|
+
stateLog.push(state.planMode);
|
|
196
|
+
}
|
|
197
|
+
// After even number of toggles, should be back to false
|
|
198
|
+
expect(state.planMode).toBe(false);
|
|
199
|
+
expect(stateLog).toHaveLength(10);
|
|
200
|
+
expect(stateLog.filter(Boolean)).toHaveLength(5);
|
|
201
|
+
expect(stateLog.filter((v) => !v)).toHaveLength(5);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
// ── Auto-expand logic ──────────────────────────────────────
|
|
205
|
+
describe("auto-expand newest plan", () => {
|
|
206
|
+
const testPlan = { name: "test", path: "/tmp/test.md", modifiedMs: Date.now() };
|
|
207
|
+
it("auto-expands when autoExpandNewest=true, loaded=true, plans exist, not yet expanded", () => {
|
|
208
|
+
const result = tryAutoExpand(true, true, [testPlan], false);
|
|
209
|
+
expect(result.expanded).toBe(true);
|
|
210
|
+
expect(result.plan).toBe(testPlan);
|
|
211
|
+
});
|
|
212
|
+
it("does NOT auto-expand when already expanded once", () => {
|
|
213
|
+
const result = tryAutoExpand(true, true, [testPlan], true);
|
|
214
|
+
expect(result.plan).toBeNull();
|
|
215
|
+
});
|
|
216
|
+
it("does NOT auto-expand when plans array is empty", () => {
|
|
217
|
+
const result = tryAutoExpand(true, true, [], false);
|
|
218
|
+
expect(result.expanded).toBe(false);
|
|
219
|
+
expect(result.plan).toBeNull();
|
|
220
|
+
});
|
|
221
|
+
it("does NOT auto-expand when autoExpandNewest is false", () => {
|
|
222
|
+
const result = tryAutoExpand(false, true, [testPlan], false);
|
|
223
|
+
expect(result.expanded).toBe(false);
|
|
224
|
+
expect(result.plan).toBeNull();
|
|
225
|
+
});
|
|
226
|
+
it("does NOT auto-expand when not yet loaded", () => {
|
|
227
|
+
const result = tryAutoExpand(true, false, [testPlan], false);
|
|
228
|
+
expect(result.expanded).toBe(false);
|
|
229
|
+
expect(result.plan).toBeNull();
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
// ── Plan file readability ──────────────────────────────────
|
|
233
|
+
describe("plan file reading edge cases", () => {
|
|
234
|
+
it("handles plan file that exists during listing but is deleted before reading", async () => {
|
|
235
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
236
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
237
|
+
const planPath = path.join(plansDir, "ephemeral.md");
|
|
238
|
+
await fs.writeFile(planPath, "# Short-lived plan");
|
|
239
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
240
|
+
expect(entries).toHaveLength(1);
|
|
241
|
+
await fs.unlink(planPath);
|
|
242
|
+
let content;
|
|
243
|
+
try {
|
|
244
|
+
content = await fs.readFile(planPath, "utf-8");
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
content = "(could not read plan)";
|
|
248
|
+
}
|
|
249
|
+
expect(content).toBe("(could not read plan)");
|
|
250
|
+
});
|
|
251
|
+
it("handles plan file with empty content", async () => {
|
|
252
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
253
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
254
|
+
await fs.writeFile(path.join(plansDir, "empty.md"), "");
|
|
255
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
256
|
+
expect(entries).toHaveLength(1);
|
|
257
|
+
const content = await fs.readFile(entries[0].path, "utf-8");
|
|
258
|
+
expect(content).toBe("");
|
|
259
|
+
});
|
|
260
|
+
it("handles plan file with very large content", async () => {
|
|
261
|
+
const plansDir = path.join(tmpDir, ".mragentix", "plans");
|
|
262
|
+
await fs.mkdir(plansDir, { recursive: true });
|
|
263
|
+
const largeContent = "# Plan\n\n" + "Step ".repeat(100_000);
|
|
264
|
+
await fs.writeFile(path.join(plansDir, "large.md"), largeContent);
|
|
265
|
+
const entries = await loadPlanEntries(tmpDir);
|
|
266
|
+
expect(entries).toHaveLength(1);
|
|
267
|
+
const content = await fs.readFile(entries[0].path, "utf-8");
|
|
268
|
+
expect(content.length).toBeGreaterThan(400_000);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
// ── Overlay state machine ──────────────────────────────────
|
|
272
|
+
describe("overlay state transitions", () => {
|
|
273
|
+
it("opening plan overlay replaces any existing overlay", () => {
|
|
274
|
+
const state = createAppState({ overlay: "tasks" });
|
|
275
|
+
state.overlay = "plan";
|
|
276
|
+
expect(state.overlay).toBe("plan");
|
|
277
|
+
});
|
|
278
|
+
it("closing plan overlay returns to null", () => {
|
|
279
|
+
const state = createAppState({ overlay: "plan" });
|
|
280
|
+
state.overlay = null;
|
|
281
|
+
expect(state.overlay).toBeNull();
|
|
282
|
+
});
|
|
283
|
+
it("approving a plan closes the overlay and resets autoExpand", () => {
|
|
284
|
+
const state = createAppState({ overlay: "plan", planAutoExpand: true });
|
|
285
|
+
// onApprove handler
|
|
286
|
+
state.planAutoExpand = false;
|
|
287
|
+
state.overlay = null;
|
|
288
|
+
expect(state.overlay).toBeNull();
|
|
289
|
+
expect(state.planAutoExpand).toBe(false);
|
|
290
|
+
});
|
|
291
|
+
it("plan overlay from exit_plan uses autoExpand", () => {
|
|
292
|
+
const state = createAppState();
|
|
293
|
+
// Simulates the setTimeout in onExitPlan
|
|
294
|
+
state.planAutoExpand = true;
|
|
295
|
+
state.overlay = "plan";
|
|
296
|
+
expect(state.overlay).toBe("plan");
|
|
297
|
+
expect(state.planAutoExpand).toBe(true);
|
|
298
|
+
});
|
|
299
|
+
it("/plans command does NOT set autoExpand", () => {
|
|
300
|
+
const state = createAppState({ planAutoExpand: true });
|
|
301
|
+
// Simulates /plans handler
|
|
302
|
+
state.planAutoExpand = false;
|
|
303
|
+
state.overlay = "plan";
|
|
304
|
+
expect(state.overlay).toBe("plan");
|
|
305
|
+
expect(state.planAutoExpand).toBe(false);
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
// ── Index clamping ──────────────────────────────────────────
|
|
309
|
+
describe("selectedIndex clamping", () => {
|
|
310
|
+
it("returns 0 when plans list is empty", () => {
|
|
311
|
+
expect(clampIndex(5, 0)).toBe(0);
|
|
312
|
+
});
|
|
313
|
+
it("returns last index when selectedIndex exceeds plans length", () => {
|
|
314
|
+
expect(clampIndex(10, 3)).toBe(2);
|
|
315
|
+
});
|
|
316
|
+
it("returns selectedIndex unchanged when within bounds", () => {
|
|
317
|
+
expect(clampIndex(1, 5)).toBe(1);
|
|
318
|
+
});
|
|
319
|
+
it("handles edge case: selectedIndex equals plans length", () => {
|
|
320
|
+
expect(clampIndex(3, 3)).toBe(2);
|
|
321
|
+
});
|
|
322
|
+
it("handles single plan", () => {
|
|
323
|
+
expect(clampIndex(0, 1)).toBe(0);
|
|
324
|
+
expect(clampIndex(5, 1)).toBe(0);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
//# sourceMappingURL=plan-overlay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-overlay.test.js","sourceRoot":"","sources":["../../src/ui/plan-overlay.test.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/render.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Message, Provider, ThinkingLevel } from "@
|
|
2
|
-
import type { AgentTool } from "@
|
|
1
|
+
import type { Message, Provider, ThinkingLevel } from "@kenkaiiii/gg-ai";
|
|
2
|
+
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
3
3
|
import type { ProcessManager } from "../core/process-manager.js";
|
|
4
4
|
import type { MCPClientManager } from "../core/mcp/index.js";
|
|
5
5
|
import type { AuthStorage } from "../core/auth-storage.js";
|