@pentoshi/clai 3.6.0 → 3.7.2
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/dist/agent/compaction-summary.d.ts +17 -0
- package/dist/agent/compaction-summary.js +64 -0
- package/dist/agent/compaction-summary.js.map +1 -0
- package/dist/agent/confirm-port.d.ts +3 -1
- package/dist/agent/confirm-port.js +5 -1
- package/dist/agent/confirm-port.js.map +1 -1
- package/dist/agent/context-manager.js +45 -22
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/events.d.ts +6 -0
- package/dist/agent/evidence-governor.d.ts +37 -0
- package/dist/agent/evidence-governor.js +70 -0
- package/dist/agent/evidence-governor.js.map +1 -0
- package/dist/agent/loop-guard.d.ts +29 -11
- package/dist/agent/loop-guard.js +93 -39
- package/dist/agent/loop-guard.js.map +1 -1
- package/dist/agent/must-continue.d.ts +56 -0
- package/dist/agent/must-continue.js +240 -0
- package/dist/agent/must-continue.js.map +1 -0
- package/dist/agent/outcomes.d.ts +101 -0
- package/dist/agent/outcomes.js +359 -0
- package/dist/agent/outcomes.js.map +1 -0
- package/dist/agent/plan-decision.d.ts +33 -0
- package/dist/agent/plan-decision.js +104 -0
- package/dist/agent/plan-decision.js.map +1 -0
- package/dist/agent/plan-tool.d.ts +12 -0
- package/dist/agent/plan-tool.js +309 -104
- package/dist/agent/plan-tool.js.map +1 -1
- package/dist/agent/project-root.js +3 -0
- package/dist/agent/project-root.js.map +1 -1
- package/dist/agent/prompt-composer.d.ts +21 -0
- package/dist/agent/prompt-composer.js +46 -0
- package/dist/agent/prompt-composer.js.map +1 -0
- package/dist/agent/runner.d.ts +11 -1
- package/dist/agent/runner.js +1115 -965
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/scope-context.d.ts +3 -0
- package/dist/agent/scope-context.js +24 -0
- package/dist/agent/scope-context.js.map +1 -0
- package/dist/agent/scratch-write.d.ts +4 -0
- package/dist/agent/scratch-write.js +54 -0
- package/dist/agent/scratch-write.js.map +1 -0
- package/dist/agent/session-policy.d.ts +7 -0
- package/dist/agent/session-policy.js +61 -0
- package/dist/agent/session-policy.js.map +1 -1
- package/dist/agent/session-state.d.ts +41 -0
- package/dist/agent/session-state.js +107 -0
- package/dist/agent/session-state.js.map +1 -0
- package/dist/agent/step-budget.d.ts +14 -0
- package/dist/agent/step-budget.js +26 -0
- package/dist/agent/step-budget.js.map +1 -0
- package/dist/agent/task-analyzer.d.ts +12 -3
- package/dist/agent/task-analyzer.js +263 -23
- package/dist/agent/task-analyzer.js.map +1 -1
- package/dist/agent/task-evidence.d.ts +99 -29
- package/dist/agent/task-evidence.js +480 -91
- package/dist/agent/task-evidence.js.map +1 -1
- package/dist/agent/task-plan.d.ts +57 -0
- package/dist/agent/task-plan.js +147 -1
- package/dist/agent/task-plan.js.map +1 -1
- package/dist/agent/tool-call-parser.d.ts +4 -12
- package/dist/agent/tool-call-parser.js +34 -67
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/tool-history.d.ts +7 -0
- package/dist/agent/tool-history.js +50 -0
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/tool-output-formatting.d.ts +13 -1
- package/dist/agent/tool-output-formatting.js +75 -22
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/agent/turn-outcome.d.ts +11 -0
- package/dist/agent/turn-outcome.js +17 -0
- package/dist/agent/turn-outcome.js.map +1 -0
- package/dist/agent/turn-state.d.ts +11 -0
- package/dist/agent/turn-state.js +28 -0
- package/dist/agent/turn-state.js.map +1 -0
- package/dist/agent/workspace-orient.d.ts +11 -0
- package/dist/agent/workspace-orient.js +103 -12
- package/dist/agent/workspace-orient.js.map +1 -1
- package/dist/app/adapters/agent-event-adapter.d.ts +2 -13
- package/dist/app/adapters/agent-event-adapter.js +63 -25
- package/dist/app/adapters/agent-event-adapter.js.map +1 -1
- package/dist/app/adapters/current-agent-adapter.d.ts +0 -5
- package/dist/app/adapters/current-agent-adapter.js +4 -7
- package/dist/app/adapters/current-agent-adapter.js.map +1 -1
- package/dist/app/adapters/current-jobs-adapter.js +1 -0
- package/dist/app/adapters/current-jobs-adapter.js.map +1 -1
- package/dist/app/adapters/current-terminal-adapter.d.ts +0 -7
- package/dist/app/adapters/current-terminal-adapter.js +0 -7
- package/dist/app/adapters/current-terminal-adapter.js.map +1 -1
- package/dist/app/adapters/current-updates-adapter.d.ts +0 -5
- package/dist/app/adapters/current-updates-adapter.js +0 -5
- package/dist/app/adapters/current-updates-adapter.js.map +1 -1
- package/dist/app/adapters/in-memory-clipboard-adapter.d.ts +0 -5
- package/dist/app/adapters/in-memory-clipboard-adapter.js +0 -5
- package/dist/app/adapters/in-memory-clipboard-adapter.js.map +1 -1
- package/dist/app/commands/command.d.ts +0 -5
- package/dist/app/commands/command.js.map +1 -1
- package/dist/app/commands/registry.d.ts +0 -14
- package/dist/app/commands/registry.js +0 -20
- package/dist/app/commands/registry.js.map +1 -1
- package/dist/app/controllers/disposable.d.ts +0 -5
- package/dist/app/controllers/disposable.js +0 -5
- package/dist/app/controllers/disposable.js.map +1 -1
- package/dist/app/controllers/job-controller.d.ts +1 -5
- package/dist/app/controllers/job-controller.js +0 -4
- package/dist/app/controllers/job-controller.js.map +1 -1
- package/dist/app/controllers/plan-controller.d.ts +5 -8
- package/dist/app/controllers/plan-controller.js +30 -12
- package/dist/app/controllers/plan-controller.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +17 -32
- package/dist/app/controllers/session-controller.js +56 -35
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/turn-controller.d.ts +2 -6
- package/dist/app/controllers/turn-controller.js +8 -8
- package/dist/app/controllers/turn-controller.js.map +1 -1
- package/dist/app/events/app-event.d.ts +4 -7
- package/dist/app/events/app-event.js +0 -6
- package/dist/app/events/app-event.js.map +1 -1
- package/dist/app/events/event-buffer.d.ts +6 -17
- package/dist/app/events/event-buffer.js +27 -24
- package/dist/app/events/event-buffer.js.map +1 -1
- package/dist/app/events/sequencer.d.ts +0 -9
- package/dist/app/events/sequencer.js +0 -4
- package/dist/app/events/sequencer.js.map +1 -1
- package/dist/app/ports/agent-port.d.ts +13 -3
- package/dist/app/ports/clipboard-port.d.ts +0 -5
- package/dist/app/ports/confirm-port.d.ts +0 -7
- package/dist/app/ports/jobs-port.d.ts +2 -5
- package/dist/app/ports/persistence-port.d.ts +0 -4
- package/dist/app/ports/secret-port.d.ts +0 -5
- package/dist/app/ports/terminal-port.d.ts +0 -6
- package/dist/app/ports/updates-port.d.ts +0 -4
- package/dist/attachments/service.d.ts +29 -0
- package/dist/attachments/service.js +47 -0
- package/dist/attachments/service.js.map +1 -0
- package/dist/commands/providers.js +0 -3
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/search-providers.d.ts +0 -33
- package/dist/commands/search-providers.js +0 -33
- package/dist/commands/search-providers.js.map +1 -1
- package/dist/commands/update.js +1 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +22 -42
- package/dist/index.js.map +1 -1
- package/dist/llm/adapters/ollama-tools.d.ts +0 -4
- package/dist/llm/adapters/ollama-tools.js +0 -4
- package/dist/llm/adapters/ollama-tools.js.map +1 -1
- package/dist/llm/capabilities.d.ts +10 -10
- package/dist/llm/capabilities.js +43 -17
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/groq.js +0 -6
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/http.d.ts +0 -17
- package/dist/llm/http.js +0 -45
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/router.d.ts +0 -6
- package/dist/llm/router.js +0 -15
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/tool-protocol.d.ts +0 -6
- package/dist/llm/tool-protocol.js +3 -7
- package/dist/llm/tool-protocol.js.map +1 -1
- package/dist/modes/agent.d.ts +2 -1
- package/dist/modes/agent.js +4 -2
- package/dist/modes/agent.js.map +1 -1
- package/dist/modes/ask.d.ts +0 -18
- package/dist/modes/ask.js +0 -49
- package/dist/modes/ask.js.map +1 -1
- package/dist/os/cwd.d.ts +0 -21
- package/dist/os/cwd.js +0 -24
- package/dist/os/cwd.js.map +1 -1
- package/dist/os/pkgmgr.js +0 -6
- package/dist/os/pkgmgr.js.map +1 -1
- package/dist/prompts/index.d.ts +6 -18
- package/dist/prompts/index.js +67 -293
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +242 -0
- package/dist/prompts/system.ask.md +56 -0
- package/dist/repl/prompt-line.js +0 -36
- package/dist/repl/prompt-line.js.map +1 -1
- package/dist/repl/slash-commands.d.ts +0 -9
- package/dist/repl/slash-commands.js +2 -23
- package/dist/repl/slash-commands.js.map +1 -1
- package/dist/repl.d.ts +5 -0
- package/dist/repl.js +169 -55
- package/dist/repl.js.map +1 -1
- package/dist/safety/classifier.js +17 -9
- package/dist/safety/classifier.js.map +1 -1
- package/dist/safety/engagement-policy.d.ts +46 -0
- package/dist/safety/engagement-policy.js +198 -0
- package/dist/safety/engagement-policy.js.map +1 -0
- package/dist/store/engagement.d.ts +115 -0
- package/dist/store/engagement.js +278 -0
- package/dist/store/engagement.js.map +1 -0
- package/dist/store/logs.d.ts +5 -0
- package/dist/store/logs.js +52 -2
- package/dist/store/logs.js.map +1 -1
- package/dist/store/plan.d.ts +57 -5
- package/dist/store/plan.js +182 -8
- package/dist/store/plan.js.map +1 -1
- package/dist/store/scope.d.ts +4 -1
- package/dist/store/scope.js +2 -2
- package/dist/store/scope.js.map +1 -1
- package/dist/tools/definitions.js +70 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/elevated-shell.d.ts +60 -0
- package/dist/tools/elevated-shell.js +233 -0
- package/dist/tools/elevated-shell.js.map +1 -0
- package/dist/tools/file-diff.d.ts +125 -0
- package/dist/tools/file-diff.js +495 -0
- package/dist/tools/file-diff.js.map +1 -0
- package/dist/tools/fs.d.ts +11 -13
- package/dist/tools/fs.js +269 -78
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/http.d.ts +15 -0
- package/dist/tools/http.js +202 -61
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/jobs.d.ts +71 -10
- package/dist/tools/jobs.js +403 -124
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/nmap-runner.d.ts +11 -0
- package/dist/tools/nmap-runner.js +115 -74
- package/dist/tools/nmap-runner.js.map +1 -1
- package/dist/tools/pentest-workflows.d.ts +8 -0
- package/dist/tools/pentest-workflows.js +71 -0
- package/dist/tools/pentest-workflows.js.map +1 -0
- package/dist/tools/registry.d.ts +9 -0
- package/dist/tools/registry.js +227 -56
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +3 -0
- package/dist/tools/shell.js +35 -13
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/tool-types.d.ts +11 -0
- package/dist/tui-v2/app/App.js +25 -39
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/command-handlers.js +20 -1
- package/dist/tui-v2/app/command-handlers.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +3 -0
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/session-commands.js +5 -0
- package/dist/tui-v2/app/commands/session-commands.js.map +1 -1
- package/dist/tui-v2/app/plan-lifecycle.d.ts +25 -3
- package/dist/tui-v2/app/plan-lifecycle.js +87 -24
- package/dist/tui-v2/app/plan-lifecycle.js.map +1 -1
- package/dist/tui-v2/bootstrap/patch-opentui-text.d.ts +6 -0
- package/dist/tui-v2/bootstrap/patch-opentui-text.js +53 -0
- package/dist/tui-v2/bootstrap/patch-opentui-text.js.map +1 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js +7 -0
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.js +23 -14
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/modal/confirm-modal.d.ts +1 -1
- package/dist/tui-v2/components/modal/confirm-modal.js +18 -7
- package/dist/tui-v2/components/modal/confirm-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.d.ts +6 -0
- package/dist/tui-v2/components/pager/pager.js +313 -67
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/status/status-line.d.ts +9 -0
- package/dist/tui-v2/components/status/status-line.js +17 -3
- package/dist/tui-v2/components/status/status-line.js.map +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.js +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.d.ts +9 -1
- package/dist/tui-v2/components/transcript/tool-card.js +114 -9
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-row.js +2 -2
- package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
- package/dist/tui-v2/composer/composer-editor.js +16 -0
- package/dist/tui-v2/composer/composer-editor.js.map +1 -1
- package/dist/tui-v2/controllers/overlay-controller.d.ts +16 -2
- package/dist/tui-v2/controllers/overlay-controller.js +92 -12
- package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
- package/dist/tui-v2/rendering/artifact-pager-source.d.ts +19 -0
- package/dist/tui-v2/rendering/artifact-pager-source.js +103 -0
- package/dist/tui-v2/rendering/artifact-pager-source.js.map +1 -0
- package/dist/tui-v2/rendering/file-diff-view.d.ts +63 -0
- package/dist/tui-v2/rendering/file-diff-view.js +263 -0
- package/dist/tui-v2/rendering/file-diff-view.js.map +1 -0
- package/dist/tui-v2/rendering/open-tool-output.d.ts +9 -1
- package/dist/tui-v2/rendering/open-tool-output.js +65 -12
- package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
- package/dist/tui-v2/rendering/pager-chrome.d.ts +12 -0
- package/dist/tui-v2/rendering/pager-chrome.js +56 -0
- package/dist/tui-v2/rendering/pager-chrome.js.map +1 -0
- package/dist/tui-v2/rendering/plan-view.js +1 -1
- package/dist/tui-v2/rendering/plan-view.js.map +1 -1
- package/dist/tui-v2/rendering/syntax-highlight.d.ts +37 -0
- package/dist/tui-v2/rendering/syntax-highlight.js +1303 -0
- package/dist/tui-v2/rendering/syntax-highlight.js.map +1 -0
- package/dist/tui-v2/rendering/theme.d.ts +28 -0
- package/dist/tui-v2/rendering/theme.js +28 -0
- package/dist/tui-v2/rendering/theme.js.map +1 -1
- package/dist/tui-v2/rendering/tool-presenter.d.ts +5 -0
- package/dist/tui-v2/rendering/tool-presenter.js +35 -3
- package/dist/tui-v2/rendering/tool-presenter.js.map +1 -1
- package/dist/tui-v2/state/transcript-hydrate.js +5 -0
- package/dist/tui-v2/state/transcript-hydrate.js.map +1 -1
- package/dist/tui-v2/state/transcript-reducer.js +12 -2
- package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
- package/dist/tui-v2/state/transcript-store.d.ts +7 -0
- package/dist/tui-v2/state/transcript-store.js +46 -0
- package/dist/tui-v2/state/transcript-store.js.map +1 -1
- package/dist/tui-v2/state/transcript-types.d.ts +12 -0
- package/dist/tui-v2/state/transcript-types.js +9 -0
- package/dist/tui-v2/state/transcript-types.js.map +1 -1
- package/dist/types.d.ts +17 -1
- package/dist/ui/mentions.d.ts +6 -0
- package/dist/ui/mentions.js +50 -12
- package/dist/ui/mentions.js.map +1 -1
- package/dist/ui/plan-pane.js +1 -1
- package/dist/ui/plan-pane.js.map +1 -1
- package/package.json +16 -11
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plan approval/implement/discard orchestration (PLAN-004, F-021/023, V2-070/073).
|
|
2
|
+
* Plan approval/implement/discard/suggest orchestration (PLAN-004, F-021/023, V2-070/073).
|
|
3
3
|
*
|
|
4
4
|
* Mirrors the classic TUI's `/implement` path: approve the persisted plan, flip
|
|
5
|
-
* the session policy flag the agent gate reads,
|
|
6
|
-
* Kept out of `PlanController` (persistence only) and out
|
|
5
|
+
* the session policy flag the agent gate reads, switch to agent mode, then run
|
|
6
|
+
* the implement prompt. Kept out of `PlanController` (persistence only) and out
|
|
7
|
+
* of components.
|
|
7
8
|
*/
|
|
8
9
|
import type { SessionPlan } from "../../store/plan.js";
|
|
9
10
|
import type { AppServices } from "../bootstrap/composition-root.js";
|
|
@@ -13,10 +14,31 @@ export declare const IMPLEMENT_PROMPT_CODING: string;
|
|
|
13
14
|
export declare const IMPLEMENT_PROMPT_PENTEST: string;
|
|
14
15
|
export declare const IMPLEMENT_PROMPT: string;
|
|
15
16
|
export declare function buildImplementPrompt(plan: SessionPlan): string;
|
|
17
|
+
/** True when plan-ready UI asked the user to type revision feedback next. */
|
|
18
|
+
export declare function isAwaitingPlanSuggestion(): boolean;
|
|
19
|
+
export declare function clearAwaitingPlanSuggestion(): void;
|
|
20
|
+
export interface PlanSuggestionSubmit {
|
|
21
|
+
/** Full model-facing revision directive (backend only). */
|
|
22
|
+
readonly modelPrompt: string;
|
|
23
|
+
/** Short YOU bubble — the user's raw feedback only. */
|
|
24
|
+
readonly displayPrompt: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* If the user was prompted to suggest changes, wrap their free-text as a
|
|
28
|
+
* plan-revision request and keep plan mode. Returns submit payloads, or
|
|
29
|
+
* undefined if this was not a suggestion capture.
|
|
30
|
+
*/
|
|
31
|
+
export declare function consumePlanSuggestionInput(services: AppServices, text: string): PlanSuggestionSubmit | undefined;
|
|
16
32
|
export declare function implementPlan(services: AppServices): Promise<void>;
|
|
17
33
|
export declare function discardPlan(services: AppServices): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Enter suggestion capture: next composer submit revises the draft plan.
|
|
36
|
+
* Mode stays plan; plan-ready reappears after the revision turn if still draft.
|
|
37
|
+
*/
|
|
38
|
+
export declare function beginPlanSuggestion(services: AppServices): void;
|
|
18
39
|
/**
|
|
19
40
|
* After a turn ends, if a draft plan is waiting, open the plan-ready confirm.
|
|
20
41
|
* "P" views full plan detail via the suspended-over-confirm pager path.
|
|
42
|
+
* "S" suggests changes via free-text in the composer.
|
|
21
43
|
*/
|
|
22
44
|
export declare function promptPlanApprovalIfNeeded(services: AppServices): Promise<void>;
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plan approval/implement/discard orchestration (PLAN-004, F-021/023, V2-070/073).
|
|
2
|
+
* Plan approval/implement/discard/suggest orchestration (PLAN-004, F-021/023, V2-070/073).
|
|
3
3
|
*
|
|
4
4
|
* Mirrors the classic TUI's `/implement` path: approve the persisted plan, flip
|
|
5
|
-
* the session policy flag the agent gate reads,
|
|
6
|
-
* Kept out of `PlanController` (persistence only) and out
|
|
5
|
+
* the session policy flag the agent gate reads, switch to agent mode, then run
|
|
6
|
+
* the implement prompt. Kept out of `PlanController` (persistence only) and out
|
|
7
|
+
* of components.
|
|
7
8
|
*/
|
|
9
|
+
import { setDefaultMode } from "../../store/config.js";
|
|
10
|
+
import { buildPlanRevisionPrompt } from "../../agent/plan-decision.js";
|
|
8
11
|
/** Coding / build plans — scaffold + verify. */
|
|
9
|
-
export const IMPLEMENT_PROMPT_CODING = "
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"Do NOT skip ahead to later tasks while earlier ones are still pending. " +
|
|
15
|
-
"Build for real with fs.write / fs.writeMany when the plan requires files. " +
|
|
16
|
-
"Run real commands when needed — do not claim anything ran without a successful tool call.";
|
|
12
|
+
export const IMPLEMENT_PROMPT_CODING = "Plan approved. Execute it. " +
|
|
13
|
+
"Work through pending tasks in dependency order. For each: mark in_progress → do real work → verify → mark done (or failed and recover). " +
|
|
14
|
+
"Skip tasks already done. Adapt if reality differs from the plan. " +
|
|
15
|
+
"Do not claim done without tool evidence. Build for real with fs.write / fs.writeMany when needed. " +
|
|
16
|
+
"For local apps: shell.start, leave the server running, report URL + port + job id.";
|
|
17
17
|
/** Pentest / security plans — no local dev-server assumption. */
|
|
18
|
-
export const IMPLEMENT_PROMPT_PENTEST = "
|
|
19
|
-
"
|
|
20
|
-
"For each task: task.update in_progress → do the recon/testing work with tools → task.update done (or failed with a note). " +
|
|
18
|
+
export const IMPLEMENT_PROMPT_PENTEST = "Plan approved. Execute the engagement tasks. " +
|
|
19
|
+
"Work through pending tasks: in_progress → recon/testing with tools → done (or failed with a note). " +
|
|
21
20
|
"Prefer tool.batch / dns / http.fetch / net.scan for recon; continue when one lookup fails. " +
|
|
22
21
|
"Do NOT start a local dev server, npm run dev, bun run, vite, next, or shell.start. " +
|
|
23
22
|
"Do NOT list or read the clai workspace/package.json as a follow-up. Stay on the remote engagement target/scope. " +
|
|
@@ -28,10 +27,12 @@ export const IMPLEMENT_PROMPT = IMPLEMENT_PROMPT_CODING;
|
|
|
28
27
|
* confirm must not also run implement/discard (double-queue / double-discard).
|
|
29
28
|
*/
|
|
30
29
|
let planDecisionHandled = false;
|
|
31
|
-
|
|
30
|
+
/** After user presses `s`, the next free-text submit is a plan revision (not implement). */
|
|
31
|
+
let awaitingPlanSuggestion = false;
|
|
32
|
+
function dismissPlanConfirmIfOpen(services, result) {
|
|
32
33
|
const state = services.overlay.getState();
|
|
33
34
|
if (state.kind === "confirm" && state.request.kind === "plan") {
|
|
34
|
-
services.overlay.
|
|
35
|
+
services.overlay.answerPlanConfirm(result);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
export function buildImplementPrompt(plan) {
|
|
@@ -39,6 +40,41 @@ export function buildImplementPrompt(plan) {
|
|
|
39
40
|
return IMPLEMENT_PROMPT_PENTEST;
|
|
40
41
|
return IMPLEMENT_PROMPT_CODING;
|
|
41
42
|
}
|
|
43
|
+
/** True when plan-ready UI asked the user to type revision feedback next. */
|
|
44
|
+
export function isAwaitingPlanSuggestion() {
|
|
45
|
+
return awaitingPlanSuggestion;
|
|
46
|
+
}
|
|
47
|
+
export function clearAwaitingPlanSuggestion() {
|
|
48
|
+
awaitingPlanSuggestion = false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* If the user was prompted to suggest changes, wrap their free-text as a
|
|
52
|
+
* plan-revision request and keep plan mode. Returns submit payloads, or
|
|
53
|
+
* undefined if this was not a suggestion capture.
|
|
54
|
+
*/
|
|
55
|
+
export function consumePlanSuggestionInput(services, text) {
|
|
56
|
+
if (!awaitingPlanSuggestion)
|
|
57
|
+
return undefined;
|
|
58
|
+
awaitingPlanSuggestion = false;
|
|
59
|
+
const feedback = text.trim();
|
|
60
|
+
if (!feedback) {
|
|
61
|
+
services.session.notice("info", "no plan changes entered — draft unchanged");
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const plan = services.plan.current();
|
|
65
|
+
services.session.notice("info", "revising plan from your feedback…");
|
|
66
|
+
// Stay in plan mode for revision
|
|
67
|
+
if (services.session.getState().mode !== "plan") {
|
|
68
|
+
services.session.setMode("plan");
|
|
69
|
+
setDefaultMode("plan");
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
modelPrompt: buildPlanRevisionPrompt(feedback, {
|
|
73
|
+
planVersion: plan?.version,
|
|
74
|
+
}),
|
|
75
|
+
displayPrompt: feedback,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
42
78
|
export async function implementPlan(services) {
|
|
43
79
|
const plan = services.plan.current();
|
|
44
80
|
if (!plan)
|
|
@@ -47,39 +83,63 @@ export async function implementPlan(services) {
|
|
|
47
83
|
return;
|
|
48
84
|
// Pane click wins: mark handled, close chat confirm so Y/N can't re-queue.
|
|
49
85
|
planDecisionHandled = true;
|
|
50
|
-
|
|
86
|
+
awaitingPlanSuggestion = false;
|
|
87
|
+
dismissPlanConfirmIfOpen(services, "implement");
|
|
88
|
+
// Critical: leave gather-only plan mode so shell/fs mutates are allowed.
|
|
89
|
+
services.session.setMode("agent");
|
|
90
|
+
setDefaultMode("agent");
|
|
51
91
|
await services.plan.approve();
|
|
52
92
|
services.session.setPlanApproved(true);
|
|
93
|
+
services.session.notice("info", "plan accepted — switching to agent mode to execute");
|
|
53
94
|
const prompt = buildImplementPrompt(plan);
|
|
95
|
+
// Model gets full implement directive; chat must NOT show it as a YOU bubble.
|
|
54
96
|
if (services.session.getState().running) {
|
|
55
|
-
services.session.enqueue(prompt);
|
|
97
|
+
services.session.enqueue(prompt, { displayPrompt: null });
|
|
56
98
|
}
|
|
57
99
|
else {
|
|
58
|
-
await services.session.submit(prompt);
|
|
100
|
+
await services.session.submit(prompt, { displayPrompt: null });
|
|
59
101
|
}
|
|
60
102
|
}
|
|
61
103
|
export async function discardPlan(services) {
|
|
62
104
|
planDecisionHandled = true;
|
|
63
|
-
|
|
105
|
+
awaitingPlanSuggestion = false;
|
|
106
|
+
dismissPlanConfirmIfOpen(services, "discard");
|
|
64
107
|
await services.plan.discard();
|
|
65
108
|
services.session.setPlanApproved(false);
|
|
66
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Enter suggestion capture: next composer submit revises the draft plan.
|
|
112
|
+
* Mode stays plan; plan-ready reappears after the revision turn if still draft.
|
|
113
|
+
*/
|
|
114
|
+
export function beginPlanSuggestion(services) {
|
|
115
|
+
planDecisionHandled = true;
|
|
116
|
+
awaitingPlanSuggestion = true;
|
|
117
|
+
dismissPlanConfirmIfOpen(services, "suggest");
|
|
118
|
+
if (services.session.getState().mode !== "plan") {
|
|
119
|
+
services.session.setMode("plan");
|
|
120
|
+
setDefaultMode("plan");
|
|
121
|
+
}
|
|
122
|
+
services.session.notice("info", "type plan changes in the input and press enter — agent will revise the draft (or ask if unclear)");
|
|
123
|
+
}
|
|
67
124
|
/**
|
|
68
125
|
* After a turn ends, if a draft plan is waiting, open the plan-ready confirm.
|
|
69
126
|
* "P" views full plan detail via the suspended-over-confirm pager path.
|
|
127
|
+
* "S" suggests changes via free-text in the composer.
|
|
70
128
|
*/
|
|
71
129
|
export async function promptPlanApprovalIfNeeded(services) {
|
|
72
130
|
if (services.session.isPlanApproved())
|
|
73
131
|
return;
|
|
74
132
|
if (services.overlay.isOpen())
|
|
75
133
|
return;
|
|
134
|
+
if (awaitingPlanSuggestion)
|
|
135
|
+
return;
|
|
76
136
|
const plan = services.plan.current();
|
|
77
137
|
if (!plan || plan.status !== "draft" || plan.tasks.length === 0)
|
|
78
138
|
return;
|
|
79
139
|
planDecisionHandled = false;
|
|
80
|
-
const
|
|
140
|
+
const decision = await services.overlay.openPlanConfirm({
|
|
81
141
|
kind: "plan",
|
|
82
|
-
prompt: `Implement this plan now? "${plan.goal}" — ${plan.tasks.length} task(s). (Y
|
|
142
|
+
prompt: `Implement this plan now? "${plan.goal}" — ${plan.tasks.length} task(s). (Y implement · S suggest · P view · N discard · Esc dismiss)`,
|
|
83
143
|
}, async () => {
|
|
84
144
|
const { formatPlanPagerDocument } = await import("../rendering/plan-view.js");
|
|
85
145
|
services.overlay.openPager(`Plan · ${plan.goal}`, formatPlanPagerDocument(plan));
|
|
@@ -87,9 +147,12 @@ export async function promptPlanApprovalIfNeeded(services) {
|
|
|
87
147
|
// Plan pane already implemented/discarded while this confirm was open.
|
|
88
148
|
if (planDecisionHandled)
|
|
89
149
|
return;
|
|
90
|
-
if (
|
|
150
|
+
if (decision === "implement")
|
|
91
151
|
await implementPlan(services);
|
|
92
|
-
else
|
|
152
|
+
else if (decision === "discard")
|
|
93
153
|
await discardPlan(services);
|
|
154
|
+
else if (decision === "suggest")
|
|
155
|
+
beginPlanSuggestion(services);
|
|
156
|
+
// dismiss: leave draft pending; user can /implement, type feedback, or reopen
|
|
94
157
|
}
|
|
95
158
|
//# sourceMappingURL=plan-lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-lifecycle.js","sourceRoot":"","sources":["../../../src/tui-v2/app/plan-lifecycle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan-lifecycle.js","sourceRoot":"","sources":["../../../src/tui-v2/app/plan-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTUI crashes when React sets <text content={null|undefined}>:
|
|
3
|
+
* setStyledText(null) → text.chunks throws. Coerce nullish / invalid values
|
|
4
|
+
* to a single space so transient unmount/update races never take down the TUI.
|
|
5
|
+
*/
|
|
6
|
+
export declare function patchOpenTuiTextContent(): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTUI crashes when React sets <text content={null|undefined}>:
|
|
3
|
+
* setStyledText(null) → text.chunks throws. Coerce nullish / invalid values
|
|
4
|
+
* to a single space so transient unmount/update races never take down the TUI.
|
|
5
|
+
*/
|
|
6
|
+
import { TextRenderable, stringToStyledText, StyledText } from "@opentui/core";
|
|
7
|
+
let patched = false;
|
|
8
|
+
function isStyledText(value) {
|
|
9
|
+
return (value instanceof StyledText ||
|
|
10
|
+
(typeof value === "object" &&
|
|
11
|
+
value !== null &&
|
|
12
|
+
Array.isArray(value.chunks)));
|
|
13
|
+
}
|
|
14
|
+
export function patchOpenTuiTextContent() {
|
|
15
|
+
if (patched)
|
|
16
|
+
return;
|
|
17
|
+
patched = true;
|
|
18
|
+
const proto = TextRenderable.prototype;
|
|
19
|
+
const desc = Object.getOwnPropertyDescriptor(proto, "content");
|
|
20
|
+
if (!desc?.set || !desc.get)
|
|
21
|
+
return;
|
|
22
|
+
const originalSet = desc.set;
|
|
23
|
+
Object.defineProperty(proto, "content", {
|
|
24
|
+
configurable: true,
|
|
25
|
+
enumerable: desc.enumerable ?? true,
|
|
26
|
+
get: desc.get,
|
|
27
|
+
set(value) {
|
|
28
|
+
if (value == null) {
|
|
29
|
+
originalSet.call(this, " ");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (typeof value === "string") {
|
|
33
|
+
originalSet.call(this, value.length === 0 ? " " : value);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (isStyledText(value)) {
|
|
37
|
+
if (!value.chunks || value.chunks.length === 0) {
|
|
38
|
+
originalSet.call(this, " ");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
originalSet.call(this, value);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
originalSet.call(this, stringToStyledText(String(value)));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
originalSet.call(this, " ");
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=patch-opentui-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-opentui-text.js","sourceRoot":"","sources":["../../../src/tui-v2/bootstrap/patch-opentui-text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/E,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,KAAK,YAAY,UAAU;QAC3B,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,KAAK,KAAK,IAAI;YACd,KAAK,CAAC,OAAO,CAAE,KAA8B,CAAC,MAAM,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO;QAAE,OAAO;IACpB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,KAAK,GAAG,cAAc,CAAC,SAE5B,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO;IAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE;QACtC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,CAAC,KAAc;YAChB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/C,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -17,7 +17,14 @@ import { createCompositionRoot } from "./composition-root.js";
|
|
|
17
17
|
import { RendererLifecycle } from "./lifecycle.js";
|
|
18
18
|
import { createOsc52ClipboardPort } from "./osc52-clipboard.js";
|
|
19
19
|
import { createPagerExportPort } from "./pager-export.js";
|
|
20
|
+
import { patchOpenTuiTextContent } from "./patch-opentui-text.js";
|
|
21
|
+
import { setAllowInteractiveStdinInherit } from "../../tools/shell.js";
|
|
20
22
|
export async function startTuiV2(options = {}) {
|
|
23
|
+
// Must run before any <text content=…> mounts — null content crashes OpenTUI.
|
|
24
|
+
patchOpenTuiTextContent();
|
|
25
|
+
// Never let sudo/ssh steal stdin — that freezes the TUI (Password: under
|
|
26
|
+
// composer, Esc/Ctrl+C/clicks dead). Elevation uses the secret modal + -S.
|
|
27
|
+
setAllowInteractiveStdinInherit(false);
|
|
21
28
|
// OpenTUI native drag-select is enabled. Interactive chrome (prompts/tools/
|
|
22
29
|
// composer) sets selectable={false}; response/thinking body stays selectable.
|
|
23
30
|
// Copy-on-release is wired in TranscriptView via useNativeSelectionCopy.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-tui-v2.js","sourceRoot":"","sources":["../../../src/tui-v2/bootstrap/start-tui-v2.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAEhG,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAuB,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"start-tui-v2.js","sourceRoot":"","sources":["../../../src/tui-v2/bootstrap/start-tui-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,18 +10,24 @@ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
|
10
10
|
import { useEffect, useState } from "react";
|
|
11
11
|
import { useKeyboard } from "@opentui/react";
|
|
12
12
|
import { chordFromKeyEvent } from "../../actions/chord-from-key.js";
|
|
13
|
-
const HUNG_AFTER_MS = 120_000;
|
|
14
13
|
const POLL_MS = 1000;
|
|
15
14
|
function statusView(job, theme) {
|
|
16
15
|
if (job.status === "running") {
|
|
17
|
-
const
|
|
18
|
-
return
|
|
19
|
-
? { text: "running (
|
|
16
|
+
const heartbeatAge = job.heartbeatAt ? Date.now() - new Date(job.heartbeatAt).getTime() : undefined;
|
|
17
|
+
return heartbeatAge !== undefined && heartbeatAge > 120_000
|
|
18
|
+
? { text: "running (quiet)", fg: theme.foreground }
|
|
20
19
|
: { text: "running", fg: theme.foreground };
|
|
21
20
|
}
|
|
22
21
|
if (job.status === "exited") {
|
|
23
22
|
return { text: `exited (${job.exitCode ?? "?"})`, fg: job.exitCode ? theme.accent : theme.muted };
|
|
24
23
|
}
|
|
24
|
+
if (job.status === "failed") {
|
|
25
|
+
return { text: `failed (${job.exitCode ?? "?"})`, fg: theme.accent };
|
|
26
|
+
}
|
|
27
|
+
if (job.status === "killed") {
|
|
28
|
+
const detail = [job.signal, job.exitCode].filter((value) => value !== undefined).join("/") || "?";
|
|
29
|
+
return { text: `killed (${detail})`, fg: theme.accent };
|
|
30
|
+
}
|
|
25
31
|
return { text: job.status, fg: theme.accent };
|
|
26
32
|
}
|
|
27
33
|
function elapsedLabel(job) {
|
|
@@ -30,11 +36,12 @@ function elapsedLabel(job) {
|
|
|
30
36
|
}
|
|
31
37
|
export function JobsPanel(props) {
|
|
32
38
|
const { services, theme } = props;
|
|
33
|
-
const
|
|
39
|
+
const readJobs = () => services.ports.jobs.recent?.(100) ?? services.ports.jobs.running();
|
|
40
|
+
const [jobs, setJobs] = useState(readJobs);
|
|
34
41
|
const [selected, setSelected] = useState(0);
|
|
35
42
|
const [note, setNote] = useState("");
|
|
36
43
|
useEffect(() => {
|
|
37
|
-
const interval = setInterval(() => setJobs(
|
|
44
|
+
const interval = setInterval(() => setJobs(readJobs()), POLL_MS);
|
|
38
45
|
return () => clearInterval(interval);
|
|
39
46
|
}, [services.ports.jobs]);
|
|
40
47
|
async function tail(job) {
|
|
@@ -59,9 +66,10 @@ export function JobsPanel(props) {
|
|
|
59
66
|
break;
|
|
60
67
|
case "jobs.stop":
|
|
61
68
|
if (job?.status === "running") {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
void services.ports.jobs.stop(job.id).then((result) => {
|
|
70
|
+
setNote(result.output);
|
|
71
|
+
setJobs(readJobs());
|
|
72
|
+
});
|
|
65
73
|
}
|
|
66
74
|
break;
|
|
67
75
|
case "jobs.tail":
|
|
@@ -78,15 +86,16 @@ export function JobsPanel(props) {
|
|
|
78
86
|
return (_jsxs("box", { style: {
|
|
79
87
|
flexDirection: "column",
|
|
80
88
|
width: "70%",
|
|
89
|
+
height: "70%",
|
|
81
90
|
border: true,
|
|
82
91
|
borderColor: theme.border,
|
|
83
92
|
backgroundColor: theme.background,
|
|
84
93
|
paddingLeft: 1,
|
|
85
94
|
paddingRight: 1,
|
|
86
|
-
}, children: [_jsx("text", { style: { fg: theme.accent }, children: "Background jobs" }), _jsx("text", { style: { fg: theme.muted }, children: "\u2191\u2193:select \u00B7 enter/t:tail \u00B7 k:kill \u00B7 q/esc:close" }), _jsx("text", { style: { fg: theme.border }, children: "─".repeat(40) }), _jsx("text", { content: " " }), jobs.length === 0 ? (_jsx("text", { style: { fg: theme.muted }, children: "no background jobs" })) : (jobs.map((job, index) => {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
}, children: [_jsx("text", { style: { fg: theme.accent }, children: "Background jobs" }), _jsx("text", { style: { fg: theme.muted }, children: "\u2191\u2193:select \u00B7 enter/t:tail \u00B7 k:kill \u00B7 q/esc:close" }), _jsx("text", { style: { fg: theme.border }, children: "─".repeat(40) }), _jsx("text", { content: " " }), _jsx("scrollbox", { scrollY: true, scrollX: false, viewportCulling: true, style: { flexGrow: 1, width: "100%" }, children: jobs.length === 0 ? (_jsx("text", { style: { fg: theme.muted }, children: "no background jobs" })) : (jobs.map((job, index) => {
|
|
96
|
+
const status = statusView(job, theme);
|
|
97
|
+
const focused = index === selected;
|
|
98
|
+
return (_jsx("box", { onMouseDown: () => setSelected(index), style: { flexDirection: "row" }, children: _jsxs("text", { style: { fg: focused ? theme.accent : theme.foreground }, children: [focused ? "❯ " : " ", "[", job.id, "] ", _jsx("span", { style: { fg: status.fg }, children: status.text }), " ", elapsedLabel(job), " ", job.command.slice(0, 48)] }) }, job.id));
|
|
99
|
+
})) }), note ? _jsx("text", { style: { fg: theme.muted }, children: note }) : null] }));
|
|
91
100
|
}
|
|
92
101
|
//# sourceMappingURL=jobs-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs-panel.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/jobs/jobs-panel.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAOpE,MAAM,
|
|
1
|
+
{"version":3,"file":"jobs-panel.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/jobs/jobs-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Confirmation surface (CORE-002, PICK-002, V2-073).
|
|
4
4
|
*
|
|
5
5
|
* Docked above the composer by default — compact action bar, not a full-screen
|
|
6
|
-
* black modal. Keys: y/n (or r for reset, i/d/p for plan).
|
|
6
|
+
* black modal. Keys: y/n (or r for reset, i/d/p/s for plan).
|
|
7
7
|
*/
|
|
8
8
|
import type { ReactNode } from "react";
|
|
9
9
|
import type { AppServices } from "../../bootstrap/composition-root.js";
|
|
@@ -25,15 +25,26 @@ export function ConfirmModal(props) {
|
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
else if (request.kind === "plan") {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
// Only explicit decision keys — free-text suggestions use `s` then composer.
|
|
29
|
+
if (chord === "y" || chord === "i" || chord === "enter") {
|
|
30
|
+
services.overlay.answerPlanConfirm("implement");
|
|
31
|
+
}
|
|
32
|
+
else if (chord === "n" || chord === "d") {
|
|
33
|
+
services.overlay.answerPlanConfirm("discard");
|
|
32
34
|
}
|
|
33
|
-
else if (chord === "
|
|
35
|
+
else if (chord === "s") {
|
|
36
|
+
services.overlay.answerPlanConfirm("suggest");
|
|
37
|
+
}
|
|
38
|
+
else if (chord === "p") {
|
|
34
39
|
onViewPlan?.();
|
|
35
|
-
|
|
40
|
+
}
|
|
41
|
+
else if (chord === "escape") {
|
|
42
|
+
// Dismiss only — leave draft plan pending (do not discard)
|
|
43
|
+
services.overlay.answerPlanConfirm("dismiss");
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
36
46
|
return;
|
|
47
|
+
}
|
|
37
48
|
}
|
|
38
49
|
else {
|
|
39
50
|
if (chord === "y")
|
|
@@ -56,7 +67,7 @@ export function ConfirmModal(props) {
|
|
|
56
67
|
const hint = request.kind === "reset"
|
|
57
68
|
? "r confirm · esc cancel"
|
|
58
69
|
: request.kind === "plan"
|
|
59
|
-
? "y/i implement ·
|
|
70
|
+
? "y/i implement · s suggest · p view · n/d discard · esc dismiss"
|
|
60
71
|
: request.kind === "continue"
|
|
61
72
|
? "y continue · n stop · esc cancel"
|
|
62
73
|
: "y approve · n deny · esc cancel";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-modal.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/modal/confirm-modal.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAYpE,MAAM,MAAM,GAA2C;IACrD,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,mBAAmB;IAC5B,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE/D,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO;QACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,GAAG;gBAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;iBACnD,IAAI,KAAK,KAAK,QAAQ;gBAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;gBAC9D,OAAO;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"confirm-modal.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/modal/confirm-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,6 @@ export function OverlayHost(props) {
|
|
|
38
38
|
backgroundColor: theme.background,
|
|
39
39
|
alignItems: "center",
|
|
40
40
|
justifyContent: "center",
|
|
41
|
-
}, children: [state.kind === "picker" ? (_jsx(Picker, { services: services, theme: theme, request: state.request })) : null, state.kind === "prompt-actions" ? (_jsx(PromptActionsModal, { services: services, theme: theme, request: state.request })) : null, state.kind === "pager" ? (_jsx(Pager, { services: services, theme: theme, title: state.title, body: state.body })) : null, state.kind === "jobs" ? _jsx(JobsPanel, { services: services, theme: theme }) : null] }));
|
|
41
|
+
}, children: [state.kind === "picker" ? (_jsx(Picker, { services: services, theme: theme, request: state.request })) : null, state.kind === "prompt-actions" ? (_jsx(PromptActionsModal, { services: services, theme: theme, request: state.request })) : null, state.kind === "pager" ? (_jsx(Pager, { services: services, theme: theme, title: state.title, body: state.body, source: state.source, highlightPath: state.highlightPath })) : null, state.kind === "jobs" ? _jsx(JobsPanel, { services: services, theme: theme }) : null] }));
|
|
42
42
|
}
|
|
43
43
|
//# sourceMappingURL=overlay-host.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-host.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/overlay/overlay-host.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAclD,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvC,uDAAuD;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,CACL,eACE,KAAK,EAAE;gBACL,aAAa,EAAE,QAAQ;gBACvB,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;aAChB,aAEA,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1B,KAAC,YAAY,IACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,MAAM,SACN,CACH,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACzB,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,MAAM,SACN,CACH,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,CACL,eACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,GAAG;YACX,eAAe,EAAE,KAAK,CAAC,UAAU;YACjC,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;SACzB,aAEA,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACzB,KAAC,MAAM,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CACrE,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,CACjC,KAAC,kBAAkB,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CACjF,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CACxB,KAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"overlay-host.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/overlay/overlay-host.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,16 @@
|
|
|
11
11
|
import { type ReactNode } from "react";
|
|
12
12
|
import type { AppServices } from "../../bootstrap/composition-root.js";
|
|
13
13
|
import type { Theme } from "../../rendering/theme.js";
|
|
14
|
+
import type { ArtifactPagerSource } from "../../rendering/artifact-pager-source.js";
|
|
14
15
|
export interface PagerProps {
|
|
15
16
|
readonly services: AppServices;
|
|
16
17
|
readonly theme: Theme;
|
|
17
18
|
readonly title: string;
|
|
18
19
|
readonly body: string;
|
|
20
|
+
readonly source?: ArtifactPagerSource | undefined;
|
|
21
|
+
/** When set, syntax-highlight diff bodies using this path's language. */
|
|
22
|
+
readonly highlightPath?: string | undefined;
|
|
19
23
|
}
|
|
24
|
+
/** Strip gutters from a full pager body for clipboard copy. */
|
|
25
|
+
export declare function bodyOnlyForCopy(full: string): string;
|
|
20
26
|
export declare function Pager(props: PagerProps): ReactNode;
|