@tom2012/cc-web 1.5.83 → 1.5.85
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 +1 -1
- package/backend/dist/config.d.ts +2 -0
- package/backend/dist/config.d.ts.map +1 -1
- package/backend/dist/config.js +1 -0
- package/backend/dist/config.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +27 -1
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/plan-control/checker.d.ts +3 -0
- package/backend/dist/plan-control/checker.d.ts.map +1 -0
- package/backend/dist/plan-control/checker.js +103 -0
- package/backend/dist/plan-control/checker.js.map +1 -0
- package/backend/dist/plan-control/executor.d.ts +85 -0
- package/backend/dist/plan-control/executor.d.ts.map +1 -0
- package/backend/dist/plan-control/executor.js +854 -0
- package/backend/dist/plan-control/executor.js.map +1 -0
- package/backend/dist/plan-control/parser.d.ts +12 -0
- package/backend/dist/plan-control/parser.d.ts.map +1 -0
- package/backend/dist/plan-control/parser.js +216 -0
- package/backend/dist/plan-control/parser.js.map +1 -0
- package/backend/dist/plan-control/templates.d.ts +4 -0
- package/backend/dist/plan-control/templates.d.ts.map +1 -0
- package/backend/dist/plan-control/templates.js +218 -0
- package/backend/dist/plan-control/templates.js.map +1 -0
- package/backend/dist/plan-control/types.d.ts +102 -0
- package/backend/dist/plan-control/types.d.ts.map +1 -0
- package/backend/dist/plan-control/types.js +12 -0
- package/backend/dist/plan-control/types.js.map +1 -0
- package/backend/dist/routes/plan-control.d.ts +8 -0
- package/backend/dist/routes/plan-control.d.ts.map +1 -0
- package/backend/dist/routes/plan-control.js +304 -0
- package/backend/dist/routes/plan-control.js.map +1 -0
- package/frontend/dist/assets/GraphPreview-2WXuNUTC.js +2 -0
- package/frontend/dist/assets/{OfficePreview-CGE86imK.js → OfficePreview-Ddn426ac.js} +2 -2
- package/frontend/dist/assets/PlanPanel-CAwoVERS.js +13 -0
- package/frontend/dist/assets/{ProjectPage-LZuxFngN.js → ProjectPage-Bsmij9PR.js} +4 -4
- package/frontend/dist/assets/{SettingsPage-DcE9vyAO.js → SettingsPage-D_qkFpli.js} +1 -1
- package/frontend/dist/assets/{ShareViewPage-RQfo-sAE.js → ShareViewPage-D_qyAmta.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-BuQCOzTY.js → SkillHubPage-C0FH24pf.js} +1 -1
- package/frontend/dist/assets/{bot-BTPL5fMo.js → bot-BlJwFT2K.js} +1 -1
- package/frontend/dist/assets/{chevron-down-B5QB8OvI.js → chevron-down-CK5p8rdp.js} +1 -1
- package/frontend/dist/assets/{download-CRCiN6lp.js → download-CUOp54z9.js} +1 -1
- package/frontend/dist/assets/{index-Cq7E361N.js → index-0ybprEWn.js} +1 -1
- package/frontend/dist/assets/{index-DxdTRVVE.js → index-BV5oU0la.js} +10 -10
- package/frontend/dist/assets/index-C8OaV-rT.css +1 -0
- package/frontend/dist/assets/{jszip.min-86jXs0Jp.js → jszip.min-5kkrvu4H.js} +1 -1
- package/frontend/dist/assets/maximize-2-CjNiqJGr.js +7 -0
- package/frontend/dist/assets/{save-VwSCjXJc.js → save-DFFb1Eaz.js} +1 -1
- package/frontend/dist/assets/{user-B-E27M2h.js → user-JyvDYJ0V.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/GraphPreview-DeUOTqGU.js +0 -8
- package/frontend/dist/assets/index-Cko3_F0X.css +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export type StatementType = 'comment' | 'blank' | 'var_assign' | 'task_assign' | 'task' | 'if' | 'elif' | 'else' | 'for' | 'loop' | 'func' | 'call' | 'break' | 'continue' | 'return';
|
|
2
|
+
export interface ASTNode {
|
|
3
|
+
line: number;
|
|
4
|
+
indent: number;
|
|
5
|
+
type: StatementType;
|
|
6
|
+
raw: string;
|
|
7
|
+
children: ASTNode[];
|
|
8
|
+
varName?: string;
|
|
9
|
+
listItems?: string[];
|
|
10
|
+
description?: string;
|
|
11
|
+
condition?: string;
|
|
12
|
+
iterVar?: string;
|
|
13
|
+
iterRef?: string;
|
|
14
|
+
loopCount?: number;
|
|
15
|
+
loopCounter?: string;
|
|
16
|
+
funcName?: string;
|
|
17
|
+
params?: string[];
|
|
18
|
+
args?: CallArg[];
|
|
19
|
+
}
|
|
20
|
+
export type CallArg = {
|
|
21
|
+
type: 'var';
|
|
22
|
+
name: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'list';
|
|
25
|
+
items: string[];
|
|
26
|
+
};
|
|
27
|
+
export interface CheckError {
|
|
28
|
+
line: number;
|
|
29
|
+
message: string;
|
|
30
|
+
}
|
|
31
|
+
export type PlanStatus = 'running' | 'waiting' | 'replanning' | 'paused' | 'stopped' | 'completed';
|
|
32
|
+
export interface CallFrame {
|
|
33
|
+
func: string;
|
|
34
|
+
return_line: number;
|
|
35
|
+
local_vars: Record<string, PlanVarValue>;
|
|
36
|
+
saved_last_task_status: string | null;
|
|
37
|
+
}
|
|
38
|
+
export interface LoopFrame {
|
|
39
|
+
type: 'for' | 'loop';
|
|
40
|
+
var?: string;
|
|
41
|
+
list?: PlanVarValue[];
|
|
42
|
+
index: number;
|
|
43
|
+
count?: number;
|
|
44
|
+
start_line: number;
|
|
45
|
+
end_line: number;
|
|
46
|
+
}
|
|
47
|
+
export type PlanVarValue = string | string[] | boolean | null;
|
|
48
|
+
export interface HistoryEntry {
|
|
49
|
+
node_id: string;
|
|
50
|
+
line: number;
|
|
51
|
+
status: string;
|
|
52
|
+
timestamp: string;
|
|
53
|
+
}
|
|
54
|
+
export interface PlanState {
|
|
55
|
+
status: PlanStatus;
|
|
56
|
+
current_line: number;
|
|
57
|
+
executed_tasks: number;
|
|
58
|
+
estimated_tasks: number;
|
|
59
|
+
variables: Record<string, PlanVarValue>;
|
|
60
|
+
call_stack: CallFrame[];
|
|
61
|
+
loop_stack: LoopFrame[];
|
|
62
|
+
last_task_status: string | null;
|
|
63
|
+
history: HistoryEntry[];
|
|
64
|
+
stop_line?: number;
|
|
65
|
+
stop_node_id?: string;
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface NodeRecord {
|
|
69
|
+
id: string;
|
|
70
|
+
line: number;
|
|
71
|
+
code: string;
|
|
72
|
+
resolved_code: string;
|
|
73
|
+
prompt: string;
|
|
74
|
+
started_at: string;
|
|
75
|
+
completed_at: string | null;
|
|
76
|
+
nudge_count: number;
|
|
77
|
+
status: string | null;
|
|
78
|
+
result: PlanVarValue;
|
|
79
|
+
summary: string | null;
|
|
80
|
+
request_replan?: boolean;
|
|
81
|
+
replan_reason?: string;
|
|
82
|
+
}
|
|
83
|
+
export type TreeNodeType = 'task' | 'if' | 'elif' | 'else' | 'for' | 'loop' | 'call' | 'func' | 'var';
|
|
84
|
+
export type TreeNodeStatus = 'pending' | 'running' | 'success' | 'failed' | 'blocked' | 'skipped';
|
|
85
|
+
export interface PlanTreeNode {
|
|
86
|
+
id: string;
|
|
87
|
+
type: TreeNodeType;
|
|
88
|
+
label: string;
|
|
89
|
+
line: number;
|
|
90
|
+
node_id?: string;
|
|
91
|
+
status?: TreeNodeStatus;
|
|
92
|
+
children: PlanTreeNode[];
|
|
93
|
+
}
|
|
94
|
+
export interface PlanConfig {
|
|
95
|
+
nudge_idle_seconds: number;
|
|
96
|
+
nudge_max_count: number;
|
|
97
|
+
nudge_interval_multiplier: number;
|
|
98
|
+
send_idle_seconds: number;
|
|
99
|
+
watch_poll_interval: number;
|
|
100
|
+
}
|
|
101
|
+
export declare const DEFAULT_PLAN_CONFIG: PlanConfig;
|
|
102
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plan-control/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// backend/src/plan-control/types.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DEFAULT_PLAN_CONFIG = void 0;
|
|
5
|
+
exports.DEFAULT_PLAN_CONFIG = {
|
|
6
|
+
nudge_idle_seconds: 60,
|
|
7
|
+
nudge_max_count: 3,
|
|
8
|
+
nudge_interval_multiplier: 2,
|
|
9
|
+
send_idle_seconds: 5,
|
|
10
|
+
watch_poll_interval: 10000,
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plan-control/types.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;AAkIvB,QAAA,mBAAmB,GAAe;IAC7C,kBAAkB,EAAE,EAAE;IACtB,eAAe,EAAE,CAAC;IAClB,yBAAyB,EAAE,CAAC;IAC5B,iBAAiB,EAAE,CAAC;IACpB,mBAAmB,EAAE,KAAK;CAC3B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PlanExecutor } from '../plan-control/executor';
|
|
2
|
+
declare const router: import("express-serve-static-core").Router;
|
|
3
|
+
/** Get or create executor for a project. Deps will be injected by index.ts. */
|
|
4
|
+
export declare function getExecutor(projectId: string): PlanExecutor | undefined;
|
|
5
|
+
export declare function setExecutor(projectId: string, executor: PlanExecutor): void;
|
|
6
|
+
export declare function removeExecutor(projectId: string): void;
|
|
7
|
+
export default router;
|
|
8
|
+
//# sourceMappingURL=plan-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-control.d.ts","sourceRoot":"","sources":["../../src/routes/plan-control.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKxD,QAAA,MAAM,MAAM,4CAAW,CAAC;AAKxB,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEvE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAE3E;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEtD;AAiQD,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getExecutor = getExecutor;
|
|
37
|
+
exports.setExecutor = setExecutor;
|
|
38
|
+
exports.removeExecutor = removeExecutor;
|
|
39
|
+
// backend/src/routes/plan-control.ts
|
|
40
|
+
const express_1 = require("express");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const config_1 = require("../config");
|
|
44
|
+
const executor_1 = require("../plan-control/executor");
|
|
45
|
+
const parser_1 = require("../plan-control/parser");
|
|
46
|
+
const templates_1 = require("../plan-control/templates");
|
|
47
|
+
const router = (0, express_1.Router)();
|
|
48
|
+
// In-memory executor instances per project
|
|
49
|
+
const executors = new Map();
|
|
50
|
+
/** Get or create executor for a project. Deps will be injected by index.ts. */
|
|
51
|
+
function getExecutor(projectId) {
|
|
52
|
+
return executors.get(projectId);
|
|
53
|
+
}
|
|
54
|
+
function setExecutor(projectId, executor) {
|
|
55
|
+
executors.set(projectId, executor);
|
|
56
|
+
}
|
|
57
|
+
function removeExecutor(projectId) {
|
|
58
|
+
executors.delete(projectId);
|
|
59
|
+
}
|
|
60
|
+
// POST /init — Initialize .plan-control/ directory
|
|
61
|
+
router.post('/:id/plan/init', (req, res) => {
|
|
62
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
63
|
+
if (!project)
|
|
64
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
65
|
+
const pcDir = path.join(project.folderPath, '.plan-control');
|
|
66
|
+
try {
|
|
67
|
+
fs.mkdirSync(pcDir, { recursive: true });
|
|
68
|
+
fs.mkdirSync(path.join(pcDir, 'nodes'), { recursive: true });
|
|
69
|
+
fs.writeFileSync(path.join(pcDir, 'init.md'), templates_1.INIT_MD);
|
|
70
|
+
fs.writeFileSync(path.join(pcDir, 'plan-code.md'), templates_1.PLAN_CODE_MD);
|
|
71
|
+
fs.writeFileSync(path.join(pcDir, 'output-format.md'), templates_1.OUTPUT_FORMAT_MD);
|
|
72
|
+
res.json({ success: true });
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
res.status(500).json({ error: `初始化失败: ${err.message}` });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// GET /status — Get execution state
|
|
79
|
+
router.get('/:id/plan/status', (req, res) => {
|
|
80
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
81
|
+
if (!project)
|
|
82
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
83
|
+
const stateFile = path.join(project.folderPath, '.plan-control', 'state.json');
|
|
84
|
+
const pcDir = path.join(project.folderPath, '.plan-control');
|
|
85
|
+
const hasPcDir = fs.existsSync(pcDir);
|
|
86
|
+
const hasMainPc = fs.existsSync(path.join(pcDir, 'main.pc'));
|
|
87
|
+
if (fs.existsSync(stateFile)) {
|
|
88
|
+
try {
|
|
89
|
+
const state = JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
|
|
90
|
+
res.json({ initialized: hasPcDir, hasMainPc, state });
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
res.json({ initialized: hasPcDir, hasMainPc, state: null });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
res.json({ initialized: hasPcDir, hasMainPc, state: null });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// POST /check — Syntax check main.pc
|
|
101
|
+
router.post('/:id/plan/check', (req, res) => {
|
|
102
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
103
|
+
if (!project)
|
|
104
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
105
|
+
const executor = ensureExecutor(req.params.id, project.folderPath);
|
|
106
|
+
const result = executor.checkSyntax();
|
|
107
|
+
res.json({ errors: result.errors, valid: result.errors.length === 0 });
|
|
108
|
+
});
|
|
109
|
+
// POST /start — Start execution
|
|
110
|
+
router.post('/:id/plan/start', (req, res) => {
|
|
111
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
112
|
+
if (!project)
|
|
113
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
114
|
+
const executor = ensureExecutor(req.params.id, project.folderPath);
|
|
115
|
+
try {
|
|
116
|
+
executor.start();
|
|
117
|
+
res.json({ success: true });
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
res.status(400).json({ error: err.message });
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// POST /pause
|
|
124
|
+
router.post('/:id/plan/pause', (req, res) => {
|
|
125
|
+
const executor = executors.get(req.params.id);
|
|
126
|
+
if (!executor)
|
|
127
|
+
return res.status(404).json({ error: 'No executor' });
|
|
128
|
+
executor.pause();
|
|
129
|
+
res.json({ success: true });
|
|
130
|
+
});
|
|
131
|
+
// POST /resume
|
|
132
|
+
router.post('/:id/plan/resume', (req, res) => {
|
|
133
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
134
|
+
if (!project)
|
|
135
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
136
|
+
const executor = ensureExecutor(req.params.id, project.folderPath);
|
|
137
|
+
try {
|
|
138
|
+
executor.resume();
|
|
139
|
+
res.json({ success: true });
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
res.status(400).json({ error: err.message });
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// POST /stop
|
|
146
|
+
router.post('/:id/plan/stop', (req, res) => {
|
|
147
|
+
const executor = executors.get(req.params.id);
|
|
148
|
+
if (!executor)
|
|
149
|
+
return res.status(404).json({ error: 'No executor' });
|
|
150
|
+
executor.stop();
|
|
151
|
+
res.json({ success: true });
|
|
152
|
+
});
|
|
153
|
+
// GET /nodes — List all node records
|
|
154
|
+
router.get('/:id/plan/nodes', (req, res) => {
|
|
155
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
156
|
+
if (!project)
|
|
157
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
158
|
+
const executor = ensureExecutor(req.params.id, project.folderPath);
|
|
159
|
+
res.json(executor.getNodes());
|
|
160
|
+
});
|
|
161
|
+
// GET /nodes/:nodeId — Single node detail
|
|
162
|
+
router.get('/:id/plan/nodes/:nodeId', (req, res) => {
|
|
163
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
164
|
+
if (!project)
|
|
165
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
166
|
+
const executor = ensureExecutor(req.params.id, project.folderPath);
|
|
167
|
+
const node = executor.getNode(req.params.nodeId);
|
|
168
|
+
if (!node)
|
|
169
|
+
return res.status(404).json({ error: 'Node not found' });
|
|
170
|
+
res.json(node);
|
|
171
|
+
});
|
|
172
|
+
// GET /tree — Get AST topology tree for frontend rendering
|
|
173
|
+
router.get('/:id/plan/tree', (req, res) => {
|
|
174
|
+
const project = (0, config_1.getProject)(req.params.id);
|
|
175
|
+
if (!project)
|
|
176
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
177
|
+
const pcDir = path.join(project.folderPath, '.plan-control');
|
|
178
|
+
const mainPcPath = path.join(pcDir, 'main.pc');
|
|
179
|
+
if (!fs.existsSync(mainPcPath)) {
|
|
180
|
+
return res.json({ tree: null });
|
|
181
|
+
}
|
|
182
|
+
const source = fs.readFileSync(mainPcPath, 'utf-8');
|
|
183
|
+
const ast = (0, parser_1.parseProgram)(source);
|
|
184
|
+
// Load state and node records to merge status
|
|
185
|
+
let currentLine = null;
|
|
186
|
+
let stateStatus = null;
|
|
187
|
+
const stateFile = path.join(pcDir, 'state.json');
|
|
188
|
+
if (fs.existsSync(stateFile)) {
|
|
189
|
+
try {
|
|
190
|
+
const state = JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
|
|
191
|
+
currentLine = state.current_line;
|
|
192
|
+
stateStatus = state.status;
|
|
193
|
+
}
|
|
194
|
+
catch { /* ignore */ }
|
|
195
|
+
}
|
|
196
|
+
// Load node records for status mapping
|
|
197
|
+
const nodeRecords = new Map();
|
|
198
|
+
const nodesDir = path.join(pcDir, 'nodes');
|
|
199
|
+
if (fs.existsSync(nodesDir)) {
|
|
200
|
+
for (const f of fs.readdirSync(nodesDir)) {
|
|
201
|
+
if (!f.startsWith('node-') || !f.endsWith('.json'))
|
|
202
|
+
continue;
|
|
203
|
+
try {
|
|
204
|
+
const rec = JSON.parse(fs.readFileSync(path.join(nodesDir, f), 'utf-8'));
|
|
205
|
+
nodeRecords.set(rec.line, { id: rec.id, status: rec.status });
|
|
206
|
+
}
|
|
207
|
+
catch { /* ignore */ }
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const tree = astToTree(ast, currentLine, stateStatus, nodeRecords);
|
|
211
|
+
res.json({ tree });
|
|
212
|
+
});
|
|
213
|
+
function astToTree(nodes, currentLine, stateStatus, nodeRecords) {
|
|
214
|
+
const result = [];
|
|
215
|
+
for (const node of nodes) {
|
|
216
|
+
if (node.type === 'blank' || node.type === 'comment')
|
|
217
|
+
continue;
|
|
218
|
+
const typeMap = {
|
|
219
|
+
task: 'task', task_assign: 'task',
|
|
220
|
+
if: 'if', elif: 'elif', else: 'else',
|
|
221
|
+
for: 'for', loop: 'loop',
|
|
222
|
+
func: 'func', call: 'call',
|
|
223
|
+
var_assign: 'var',
|
|
224
|
+
};
|
|
225
|
+
const treeType = typeMap[node.type];
|
|
226
|
+
if (!treeType)
|
|
227
|
+
continue;
|
|
228
|
+
const label = getNodeLabel(node);
|
|
229
|
+
const rec = nodeRecords.get(node.line);
|
|
230
|
+
let status;
|
|
231
|
+
if (rec) {
|
|
232
|
+
if (rec.status === 'success')
|
|
233
|
+
status = 'success';
|
|
234
|
+
else if (rec.status === 'failed')
|
|
235
|
+
status = 'failed';
|
|
236
|
+
else if (rec.status === 'blocked')
|
|
237
|
+
status = 'blocked';
|
|
238
|
+
else if (rec.status === null && currentLine === node.line &&
|
|
239
|
+
(stateStatus === 'waiting' || stateStatus === 'running')) {
|
|
240
|
+
status = 'running';
|
|
241
|
+
}
|
|
242
|
+
else if (rec.status === null)
|
|
243
|
+
status = 'pending';
|
|
244
|
+
}
|
|
245
|
+
else if (currentLine !== null && node.line < currentLine) {
|
|
246
|
+
status = undefined;
|
|
247
|
+
}
|
|
248
|
+
const treeNode = {
|
|
249
|
+
id: `L${node.line}`,
|
|
250
|
+
type: treeType,
|
|
251
|
+
label,
|
|
252
|
+
line: node.line,
|
|
253
|
+
node_id: rec?.id,
|
|
254
|
+
status,
|
|
255
|
+
children: node.children.length > 0
|
|
256
|
+
? astToTree(node.children, currentLine, stateStatus, nodeRecords)
|
|
257
|
+
: [],
|
|
258
|
+
};
|
|
259
|
+
result.push(treeNode);
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
function getNodeLabel(node) {
|
|
264
|
+
switch (node.type) {
|
|
265
|
+
case 'task':
|
|
266
|
+
case 'task_assign': {
|
|
267
|
+
const desc = node.description ?? '';
|
|
268
|
+
const prefix = node.type === 'task_assign' ? `${node.varName} = ` : '';
|
|
269
|
+
return prefix + (desc.length > 30 ? desc.slice(0, 30) + '...' : desc);
|
|
270
|
+
}
|
|
271
|
+
case 'if':
|
|
272
|
+
case 'elif':
|
|
273
|
+
return `${node.type} ${node.condition}`;
|
|
274
|
+
case 'else':
|
|
275
|
+
return 'else';
|
|
276
|
+
case 'for':
|
|
277
|
+
return `for ${node.iterVar} in \${${node.iterRef}}`;
|
|
278
|
+
case 'loop':
|
|
279
|
+
return node.loopCounter ? `loop ${node.loopCount} as ${node.loopCounter}` : `loop ${node.loopCount}`;
|
|
280
|
+
case 'func':
|
|
281
|
+
return `func ${node.funcName}(${node.params?.join(', ') ?? ''})`;
|
|
282
|
+
case 'call':
|
|
283
|
+
return `call ${node.funcName}(...)`;
|
|
284
|
+
case 'var_assign':
|
|
285
|
+
return `${node.varName} = [${node.listItems?.join(', ') ?? ''}]`;
|
|
286
|
+
default:
|
|
287
|
+
return node.raw;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
function ensureExecutor(projectId, folderPath) {
|
|
291
|
+
let executor = executors.get(projectId);
|
|
292
|
+
if (!executor) {
|
|
293
|
+
// Create with no-op deps (will be connected when start/resume is called from index.ts)
|
|
294
|
+
executor = new executor_1.PlanExecutor(folderPath, {
|
|
295
|
+
writeToPty: () => { },
|
|
296
|
+
getLastActivity: () => null,
|
|
297
|
+
broadcast: () => { },
|
|
298
|
+
});
|
|
299
|
+
executors.set(projectId, executor);
|
|
300
|
+
}
|
|
301
|
+
return executor;
|
|
302
|
+
}
|
|
303
|
+
exports.default = router;
|
|
304
|
+
//# sourceMappingURL=plan-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-control.js","sourceRoot":"","sources":["../../src/routes/plan-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e,d as t,j as n,B as i,m as r}from"./index-BV5oU0la.js";import{L as o,Z as a,a as s}from"./ProjectPage-Bsmij9PR.js";import{M as l}from"./maximize-2-CjNiqJGr.js";import"./save-DFFb1Eaz.js";import"./download-CUOp54z9.js";import"./chevron-down-CK5p8rdp.js";import"./bot-BlJwFT2K.js";import"./user-JyvDYJ0V.js";
|
|
2
|
+
/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */function c(e){return null==e}var u={isNothing:c,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:c(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;n<t;n+=1)i+=e;return i},isNegativeZero:function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},extend:function(e,t){var n,i,r,o;if(t)for(n=0,i=(o=Object.keys(t)).length;n<i;n+=1)e[r=o[n]]=t[r];return e}};function p(e,t){var n="",i=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(n+='in "'+e.mark.name+'" '),n+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!t&&e.mark.snippet&&(n+="\n\n"+e.mark.snippet),i+" "+n):i}function f(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=p(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}f.prototype=Object.create(Error.prototype),f.prototype.constructor=f,f.prototype.toString=function(e){return this.name+": "+p(this,e)};var d=f;function h(e,t,n,i,r){var o="",a="",s=Math.floor(r/2)-1;return i-t>s&&(t=i-s+(o=" ... ").length),n-i>s&&(n=i+s-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function m(e,t){return u.repeat(" ",t-e.length)+e}var g=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,i=/\r?\n|\r|\0/g,r=[0],o=[],a=-1;n=i.exec(e.buffer);)o.push(n.index),r.push(n.index+n[0].length),e.position<=n.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var s,l,c="",p=Math.min(e.line+t.linesAfter,o.length).toString().length,f=t.maxLength-(t.indent+p+3);for(s=1;s<=t.linesBefore&&!(a-s<0);s++)l=h(e.buffer,r[a-s],o[a-s],e.position-(r[a]-r[a-s]),f),c=u.repeat(" ",t.indent)+m((e.line-s+1).toString(),p)+" | "+l.str+"\n"+c;for(l=h(e.buffer,r[a],o[a],e.position,f),c+=u.repeat(" ",t.indent)+m((e.line+1).toString(),p)+" | "+l.str+"\n",c+=u.repeat("-",t.indent+p+3+l.pos)+"^\n",s=1;s<=t.linesAfter&&!(a+s>=o.length);s++)l=h(e.buffer,r[a+s],o[a+s],e.position-(r[a]-r[a+s]),f),c+=u.repeat(" ",t.indent)+m((e.line+s+1).toString(),p)+" | "+l.str+"\n";return c.replace(/\n$/,"")},b=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],y=["scalar","sequence","mapping"];var x=function(e,t){var n,i;if(t=t||{},Object.keys(t).forEach(function(t){if(-1===b.indexOf(t))throw new d('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=(n=t.styleAliases||null,i={},null!==n&&Object.keys(n).forEach(function(e){n[e].forEach(function(t){i[String(t)]=e})}),i),-1===y.indexOf(this.kind))throw new d('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function A(e,t){var n=[];return e[t].forEach(function(e){var t=n.length;n.forEach(function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)}),n[t]=e}),n}function v(e){return this.extend(e)}v.prototype.extend=function(e){var t=[],n=[];if(e instanceof x)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new d("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach(function(e){if(!(e instanceof x))throw new d("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new d("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new d("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(e){if(!(e instanceof x))throw new d("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(v.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=A(i,"implicit"),i.compiledExplicit=A(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(i);return n}(i.compiledImplicit,i.compiledExplicit),i};var k=new v({explicit:[new x("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}}),new x("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}}),new x("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})]});var w=new x("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var C=new x("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function j(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function I(e){return 48<=e&&e<=55}function S(e){return 48<=e&&e<=57}var N=new x("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n=e.length,i=0,r=!1;if(!n)return!1;if("-"!==(t=e[i])&&"+"!==t||(t=e[++i]),"0"===t){if(i+1===n)return!0;if("b"===(t=e[++i])){for(i++;i<n;i++)if("_"!==(t=e[i])){if("0"!==t&&"1"!==t)return!1;r=!0}return r&&"_"!==t}if("x"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!j(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}if("o"===t){for(i++;i<n;i++)if("_"!==(t=e[i])){if(!I(e.charCodeAt(i)))return!1;r=!0}return r&&"_"!==t}}if("_"===t)return!1;for(;i<n;i++)if("_"!==(t=e[i])){if(!S(e.charCodeAt(i)))return!1;r=!0}return!(!r||"_"===t)},construct:function(e){var t,n=e,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(t=n[0])&&"+"!==t||("-"===t&&(i=-1),t=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===t){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1==0&&!u.isNegativeZero(e)},represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),M=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var O=/^[-+]?[0-9]+e/;var T=new x("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!M.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||u.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(u.isNegativeZero(e))return"-0.0";return n=e.toString(10),O.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),E=k.extend({implicit:[w,C,N,T]}),L=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),F=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var _=new x("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==L.exec(e)||null!==F.exec(e))},construct:function(e){var t,n,i,r,o,a,s,l,c=0,u=null;if(null===(t=L.exec(e))&&(t=F.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],s=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),l=new Date(Date.UTC(n,i,r,o,a,s,c)),u&&l.setTime(l.getTime()-u),l},instanceOf:Date,represent:function(e){return e.toISOString()}});var $=new x("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),Y="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var D=new x("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=Y;for(n=0;n<r;n++)if(!((t=o.indexOf(e.charAt(n)))>64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=Y,a=0,s=[];for(t=0;t<r;t++)t%4==0&&t&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===n?(s.push(a>>10&255),s.push(a>>2&255)):12===n&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=Y;for(t=0;t<o;t++)t%3==0&&t&&(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),U=Object.prototype.hasOwnProperty,q=Object.prototype.toString;var B=new x("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],s=e;for(t=0,n=s.length;t<n;t+=1){if(i=s[t],o=!1,"[object Object]"!==q.call(i))return!1;for(r in i)if(U.call(i,r)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(r))return!1;a.push(r)}return!0},construct:function(e){return null!==e?e:[]}}),R=Object.prototype.toString;var z=new x("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1){if(i=a[t],"[object Object]"!==R.call(i))return!1;if(1!==(r=Object.keys(i)).length)return!1;o[t]=[r[0],i[r[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,i,r,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1)i=a[t],r=Object.keys(i),o[t]=[r[0],i[r[0]]];return o}}),W=Object.prototype.hasOwnProperty;var P=new x("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(W.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),G=E.extend({implicit:[_,$],explicit:[D,B,z,P]}),Z=Object.prototype.hasOwnProperty,V=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,X=/[\x85\u2028\u2029]/,H=/[,\[\]\{\}]/,K=/^(?:!|!!|![a-z\-]+!)$/i,J=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Q(e){return Object.prototype.toString.call(e)}function ee(e){return 10===e||13===e}function te(e){return 9===e||32===e}function ne(e){return 9===e||32===e||10===e||13===e}function ie(e){return 44===e||91===e||93===e||123===e||125===e}function re(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function oe(e){return 120===e?2:117===e?4:85===e?8:0}function ae(e){return 48<=e&&e<=57?e-48:-1}function se(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e||9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"
":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function le(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function ce(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}for(var ue=new Array(256),pe=new Array(256),fe=0;fe<256;fe++)ue[fe]=se(fe)?1:0,pe[fe]=se(fe);function de(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||G,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function he(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=g(n),new d(t,n)}function me(e,t){throw he(e,t)}function ge(e,t){e.onWarning&&e.onWarning.call(null,he(e,t))}var be={YAML:function(e,t,n){var i,r,o;null!==e.version&&me(e,"duplication of %YAML directive"),1!==n.length&&me(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&me(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&me(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ge(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&me(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],K.test(i)||me(e,"ill-formed tag handle (first argument) of the TAG directive"),Z.call(e.tagMap,i)&&me(e,'there is a previously declared suffix for "'+i+'" tag handle'),J.test(r)||me(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(o){me(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function ye(e,t,n,i){var r,o,a,s;if(t<n){if(s=e.input.slice(t,n),i)for(r=0,o=s.length;r<o;r+=1)9===(a=s.charCodeAt(r))||32<=a&&a<=1114111||me(e,"expected valid JSON character");else V.test(s)&&me(e,"the stream contains non-printable characters");e.result+=s}}function xe(e,t,n,i){var r,o,a,s;for(u.isObject(n)||me(e,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(r=Object.keys(n)).length;a<s;a+=1)o=r[a],Z.call(t,o)||(ce(t,o,n[o]),i[o]=!0)}function Ae(e,t,n,i,r,o,a,s,l){var c,u;if(Array.isArray(r))for(c=0,u=(r=Array.prototype.slice.call(r)).length;c<u;c+=1)Array.isArray(r[c])&&me(e,"nested arrays are not supported inside keys"),"object"==typeof r&&"[object Object]"===Q(r[c])&&(r[c]="[object Object]");if("object"==typeof r&&"[object Object]"===Q(r)&&(r="[object Object]"),r=String(r),null===t&&(t={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,u=o.length;c<u;c+=1)xe(e,t,o[c],n);else xe(e,t,o,n);else e.json||Z.call(n,r)||!Z.call(t,r)||(e.line=a||e.line,e.lineStart=s||e.lineStart,e.position=l||e.position,me(e,"duplicated mapping key")),ce(t,r,o),delete n[r];return t}function ve(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):me(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function ke(e,t,n){for(var i=0,r=e.input.charCodeAt(e.position);0!==r;){for(;te(r);)9===r&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),r=e.input.charCodeAt(++e.position);if(t&&35===r)do{r=e.input.charCodeAt(++e.position)}while(10!==r&&13!==r&&0!==r);if(!ee(r))break;for(ve(e),r=e.input.charCodeAt(e.position),i++,e.lineIndent=0;32===r;)e.lineIndent++,r=e.input.charCodeAt(++e.position)}return-1!==n&&0!==i&&e.lineIndent<n&&ge(e,"deficient indentation"),i}function we(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!ne(t)))}function Ce(e,t){1===t?e.result+=" ":t>1&&(e.result+=u.repeat("\n",t-1))}function je(e,t){var n,i,r=e.tag,o=e.anchor,a=[],s=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,me(e,"tab characters must not be used in indentation")),45===i)&&ne(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,ke(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,Ne(e,t,3,!1,!0),a.push(e.result),ke(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)me(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return!!s&&(e.tag=r,e.anchor=o,e.kind="sequence",e.result=a,!0)}function Ie(e){var t,n,i,r,o=!1,a=!1;if(33!==(r=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&me(e,"duplication of a tag property"),60===(r=e.input.charCodeAt(++e.position))?(o=!0,r=e.input.charCodeAt(++e.position)):33===r?(a=!0,n="!!",r=e.input.charCodeAt(++e.position)):n="!",t=e.position,o){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&62!==r);e.position<e.length?(i=e.input.slice(t,e.position),r=e.input.charCodeAt(++e.position)):me(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==r&&!ne(r);)33===r&&(a?me(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),K.test(n)||me(e,"named tag handle cannot contain such characters"),a=!0,t=e.position+1)),r=e.input.charCodeAt(++e.position);i=e.input.slice(t,e.position),H.test(i)&&me(e,"tag suffix cannot contain flow indicator characters")}i&&!J.test(i)&&me(e,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(s){me(e,"tag name is malformed: "+i)}return o?e.tag=i:Z.call(e.tagMap,n)?e.tag=e.tagMap[n]+i:"!"===n?e.tag="!"+i:"!!"===n?e.tag="tag:yaml.org,2002:"+i:me(e,'undeclared tag handle "'+n+'"'),!0}function Se(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&me(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!ne(n)&&!ie(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&me(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function Ne(e,t,n,i,r){var o,a,s,l,c,p,f,d,h,m=1,g=!1,b=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=a=s=4===n||3===n,i&&ke(e,!0,-1)&&(g=!0,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)),1===m)for(;Ie(e)||Se(e);)ke(e,!0,-1)?(g=!0,s=o,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)):s=!1;if(s&&(s=g||r),1!==m&&4!==n||(d=1===n||2===n?t:t+1,h=e.position-e.lineStart,1===m?s&&(je(e,h)||function(e,t,n){var i,r,o,a,s,l,c,u=e.tag,p=e.anchor,f={},d=Object.create(null),h=null,m=null,g=null,b=!1,y=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=f),c=e.input.charCodeAt(e.position);0!==c;){if(b||-1===e.firstTabInLine||(e.position=e.firstTabInLine,me(e,"tab characters must not be used in indentation")),i=e.input.charCodeAt(e.position+1),o=e.line,63!==c&&58!==c||!ne(i)){if(a=e.line,s=e.lineStart,l=e.position,!Ne(e,n,2,!1,!0))break;if(e.line===o){for(c=e.input.charCodeAt(e.position);te(c);)c=e.input.charCodeAt(++e.position);if(58===c)ne(c=e.input.charCodeAt(++e.position))||me(e,"a whitespace character is expected after the key-value separator within a block mapping"),b&&(Ae(e,f,d,h,m,null,a,s,l),h=m=g=null),y=!0,b=!1,r=!1,h=e.tag,m=e.result;else{if(!y)return e.tag=u,e.anchor=p,!0;me(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!y)return e.tag=u,e.anchor=p,!0;me(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(b&&(Ae(e,f,d,h,m,null,a,s,l),h=m=g=null),y=!0,b=!0,r=!0):b?(b=!1,r=!0):me(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,c=i;if((e.line===o||e.lineIndent>t)&&(b&&(a=e.line,s=e.lineStart,l=e.position),Ne(e,t,4,!0,r)&&(b?m=e.result:g=e.result),b||(Ae(e,f,d,h,m,g,a,s,l),h=m=g=null),ke(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==c)me(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return b&&Ae(e,f,d,h,m,null,a,s,l),y&&(e.tag=u,e.anchor=p,e.kind="mapping",e.result=f),y}(e,h,d))||function(e,t){var n,i,r,o,a,s,l,c,u,p,f,d,h=!0,m=e.tag,g=e.anchor,b=Object.create(null);if(91===(d=e.input.charCodeAt(e.position)))a=93,c=!1,o=[];else{if(123!==d)return!1;a=125,c=!0,o={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=o),d=e.input.charCodeAt(++e.position);0!==d;){if(ke(e,!0,t),(d=e.input.charCodeAt(e.position))===a)return e.position++,e.tag=m,e.anchor=g,e.kind=c?"mapping":"sequence",e.result=o,!0;h?44===d&&me(e,"expected the node content, but found ','"):me(e,"missed comma between flow collection entries"),f=null,s=l=!1,63===d&&ne(e.input.charCodeAt(e.position+1))&&(s=l=!0,e.position++,ke(e,!0,t)),n=e.line,i=e.lineStart,r=e.position,Ne(e,t,1,!1,!0),p=e.tag,u=e.result,ke(e,!0,t),d=e.input.charCodeAt(e.position),!l&&e.line!==n||58!==d||(s=!0,d=e.input.charCodeAt(++e.position),ke(e,!0,t),Ne(e,t,1,!1,!0),f=e.result),c?Ae(e,o,b,p,u,f,n,i,r):s?o.push(Ae(e,null,b,p,u,f,n,i,r)):o.push(u),ke(e,!0,t),44===(d=e.input.charCodeAt(e.position))?(h=!0,d=e.input.charCodeAt(++e.position)):h=!1}me(e,"unexpected end of the stream within a flow collection")}(e,d)?b=!0:(a&&function(e,t){var n,i,r,o,a=1,s=!1,l=!1,c=t,p=0,f=!1;if(124===(o=e.input.charCodeAt(e.position)))i=!1;else{if(62!==o)return!1;i=!0}for(e.kind="scalar",e.result="";0!==o;)if(43===(o=e.input.charCodeAt(++e.position))||45===o)1===a?a=43===o?3:2:me(e,"repeat of a chomping mode identifier");else{if(!((r=ae(o))>=0))break;0===r?me(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?me(e,"repeat of an indentation width identifier"):(c=t+r-1,l=!0)}if(te(o)){do{o=e.input.charCodeAt(++e.position)}while(te(o));if(35===o)do{o=e.input.charCodeAt(++e.position)}while(!ee(o)&&0!==o)}for(;0!==o;){for(ve(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!l||e.lineIndent<c)&&32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position);if(!l&&e.lineIndent>c&&(c=e.lineIndent),ee(o))p++;else{if(e.lineIndent<c){3===a?e.result+=u.repeat("\n",s?1+p:p):1===a&&s&&(e.result+="\n");break}for(i?te(o)?(f=!0,e.result+=u.repeat("\n",s?1+p:p)):f?(f=!1,e.result+=u.repeat("\n",p+1)):0===p?s&&(e.result+=" "):e.result+=u.repeat("\n",p):e.result+=u.repeat("\n",s?1+p:p),s=!0,l=!0,p=0,n=e.position;!ee(o)&&0!==o;)o=e.input.charCodeAt(++e.position);ye(e,n,e.position,!1)}}return!0}(e,d)||function(e,t){var n,i,r;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(ye(e,i,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;i=e.position,e.position++,r=e.position}else ee(n)?(ye(e,i,r,!0),Ce(e,ke(e,!1,t)),i=r=e.position):e.position===e.lineStart&&we(e)?me(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);me(e,"unexpected end of the stream within a single quoted scalar")}(e,d)||function(e,t){var n,i,r,o,a,s;if(34!==(s=e.input.charCodeAt(e.position)))return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(s=e.input.charCodeAt(e.position));){if(34===s)return ye(e,n,e.position,!0),e.position++,!0;if(92===s){if(ye(e,n,e.position,!0),ee(s=e.input.charCodeAt(++e.position)))ke(e,!1,t);else if(s<256&&ue[s])e.result+=pe[s],e.position++;else if((a=oe(s))>0){for(r=a,o=0;r>0;r--)(a=re(s=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:me(e,"expected hexadecimal character");e.result+=le(o),e.position++}else me(e,"unknown escape sequence");n=i=e.position}else ee(s)?(ye(e,n,i,!0),Ce(e,ke(e,!1,t)),n=i=e.position):e.position===e.lineStart&&we(e)?me(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}me(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?b=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!ne(i)&&!ie(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&me(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),Z.call(e.anchorMap,n)||me(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ke(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,s,l,c,u,p=e.kind,f=e.result;if(ne(u=e.input.charCodeAt(e.position))||ie(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(ne(i=e.input.charCodeAt(e.position+1))||n&&ie(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(ne(i=e.input.charCodeAt(e.position+1))||n&&ie(i))break}else if(35===u){if(ne(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&we(e)||n&&ie(u))break;if(ee(u)){if(s=e.line,l=e.lineStart,c=e.lineIndent,ke(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=s,e.lineStart=l,e.lineIndent=c;break}}a&&(ye(e,r,o,!1),Ce(e,e.line-s),r=o=e.position,a=!1),te(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return ye(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===n)&&(b=!0,null===e.tag&&(e.tag="?")):(b=!0,null===e.tag&&null===e.anchor||me(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(b=s&&je(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&me(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),l=0,c=e.implicitTypes.length;l<c;l+=1)if((f=e.implicitTypes[l]).resolve(e.result)){e.result=f.construct(e.result),e.tag=f.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if("!"!==e.tag){if(Z.call(e.typeMap[e.kind||"fallback"],e.tag))f=e.typeMap[e.kind||"fallback"][e.tag];else for(f=null,l=0,c=(p=e.typeMap.multi[e.kind||"fallback"]).length;l<c;l+=1)if(e.tag.slice(0,p[l].tag.length)===p[l].tag){f=p[l];break}f||me(e,"unknown tag !<"+e.tag+">"),null!==e.result&&f.kind!==e.kind&&me(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):me(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||b}function Me(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ke(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ne(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&me(e,"directive name must not be less than one character in length");0!==r;){for(;te(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!ee(r));break}if(ee(r))break;for(t=e.position;0!==r&&!ne(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&ve(e),Z.call(be,n)?be[n](e,n,i):ge(e,'unknown document directive "'+n+'"')}ke(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ke(e,!0,-1)):a&&me(e,"directives end mark is expected"),Ne(e,e.lineIndent-1,4,!1,!0),ke(e,!0,-1),e.checkLineBreaks&&X.test(e.input.slice(o,e.position))&&ge(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&we(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ke(e,!0,-1)):e.position<e.length-1&&me(e,"end of the stream or a document separator is expected")}var Oe={load:function(e,t){var n=function(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new de(e,t),i=e.indexOf("\0");for(-1!==i&&(n.position=i,me(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Me(n);return n.documents}(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new d("expected a single document in the stream, but found more")}}}.load;function Te(e){var t;const n=e.pages||[],i=e.relations||[];if(0===n.length)return{nodes:[],edges:[]};const r=new Map,o=new Map;for(const d of n)r.set(d.id,[]),o.set(d.id,0);for(const d of i)null==(t=r.get(d.from))||t.push(d.to),o.set(d.to,(o.get(d.to)||0)+1);const a=new Map,s=[];for(const d of n)0===(o.get(d.id)||0)&&(s.push(d.id),a.set(d.id,0));let l=0;for(;s.length>0;){const e=s.shift(),t=a.get(e)||0;for(const n of r.get(e)||[]){const e=t+1;e>(a.get(n)||0)&&(a.set(n,e),e>l&&(l=e));const i=(o.get(n)||1)-1;o.set(n,i),i<=0&&s.push(n)}}for(const d of n)a.has(d.id)||a.set(d.id,l+1);const c=new Map;for(const d of n){const e=a.get(d.id)||0;c.has(e)||c.set(e,[]),c.get(e).push(d.id)}const u=[],p=new Map(n.map(e=>[e.id,e]));for(const[d,h]of c){const e=-(160*h.length+60*(h.length-1))/2;h.forEach((t,n)=>{const i=p.get(t);u.push({id:t,title:(null==i?void 0:i.title)||t,x:e+220*n+80,y:130*d,layer:d})})}const f=i.map(e=>({from:e.from,to:e.to,label:e.label}));return{nodes:u,edges:f}}const Ee=["#3b82f6","#8b5cf6","#ec4899","#f59e0b","#10b981","#06b6d4","#f97316","#6366f1"];function Le({folderPath:c}){const[u,p]=e.useState(null),[f,d]=e.useState(!0),[h,m]=e.useState(null),[g,b]=e.useState(1),[y,x]=e.useState({x:0,y:0}),[A,v]=e.useState(!1),[k,w]=e.useState({x:0,y:0}),C=e.useRef(null),j=e.useRef(null),I=`${c}/.notebook/graph.yaml`,S=e.useCallback(async()=>{d(!0),m(null);try{const e=await t(I);if(!e.content)return m("graph.yaml is empty"),void p(null);const n=Oe(e.content);p(n),b(1),x({x:0,y:0})}catch{m("Cannot read .notebook/graph.yaml"),p(null)}finally{d(!1)}},[I]);e.useEffect(()=>{S()},[S]);const N=e.useCallback(e=>{e.preventDefault();const t=e.deltaY>0?-.1:.1;b(e=>Math.max(.2,Math.min(3,e+t)))},[]),M=e.useCallback(e=>{0===e.button&&(v(!0),w({x:e.clientX-y.x,y:e.clientY-y.y}))},[y]),O=e.useCallback(e=>{A&&x({x:e.clientX-k.x,y:e.clientY-k.y})},[A,k]),T=e.useCallback(()=>{v(!1)},[]),E=e.useCallback(()=>{if(!u||!j.current)return;const{nodes:e}=Te(u);if(0===e.length)return;const t=Math.min(...e.map(e=>e.x))-100,n=Math.max(...e.map(e=>e.x))+100,i=Math.min(...e.map(e=>e.y))-40,r=Math.max(...e.map(e=>e.y))+60,o=n-t,a=r-i,s=j.current.clientWidth,l=j.current.clientHeight,c=.9*Math.min(s/o,l/a,1.5);b(c),x({x:s/2-(t+n)/2*c,y:l/2-(i+r)/2*c})},[u]),{nodes:L,edges:F}=e.useMemo(()=>u?Te(u):{nodes:[],edges:[]},[u]),_=e.useMemo(()=>new Map(L.map(e=>[e.id,e])),[L]);return e.useEffect(()=>{u&&!f&&setTimeout(E,50)},[u,f,E]),f?n.jsx("div",{className:"flex items-center justify-center h-full text-muted-foreground",children:n.jsx(o,{className:"h-5 w-5 animate-spin"})}):h||!u?n.jsxs("div",{className:"flex flex-col items-center justify-center h-full gap-2 text-muted-foreground text-sm px-4 text-center",children:[n.jsx("p",{children:h||"No graph data"}),n.jsxs(i,{variant:"ghost",size:"sm",onClick:()=>{S()},children:[n.jsx(r,{className:"h-3 w-3 mr-1"})," Retry"]})]}):n.jsxs("div",{className:"flex flex-col h-full",children:[n.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 border-b shrink-0",children:[n.jsxs("span",{className:"text-xs text-muted-foreground mr-auto",children:[L.length," pages, ",F.length," relations"]}),n.jsx(i,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>b(e=>Math.min(3,e+.2)),children:n.jsx(a,{className:"h-3 w-3"})}),n.jsx(i,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>b(e=>Math.max(.2,e-.2)),children:n.jsx(s,{className:"h-3 w-3"})}),n.jsx(i,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:E,children:n.jsx(l,{className:"h-3 w-3"})}),n.jsx(i,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>{S()},children:n.jsx(r,{className:"h-3 w-3"})})]}),n.jsx("div",{ref:j,className:"flex-1 overflow-hidden cursor-grab active:cursor-grabbing bg-muted/30",onWheel:N,onMouseDown:M,onMouseMove:O,onMouseUp:T,onMouseLeave:T,children:n.jsxs("svg",{ref:C,width:"100%",height:"100%",style:{userSelect:"none"},children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrowhead",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"8",markerHeight:"6",orient:"auto",children:n.jsx("polygon",{points:"0 0, 10 3.5, 0 7",className:"fill-muted-foreground/60"})})}),n.jsxs("g",{transform:`translate(${y.x}, ${y.y}) scale(${g})`,children:[F.map((e,t)=>{const i=_.get(e.from),r=_.get(e.to);if(!i||!r)return null;const o=i.y+20,a=r.y-20,s=(o+a)/2;return n.jsxs("g",{children:[n.jsx("path",{d:`M ${i.x} ${o} C ${i.x} ${s}, ${r.x} ${s}, ${r.x} ${a}`,fill:"none",className:"stroke-muted-foreground/40",strokeWidth:1.5,markerEnd:"url(#arrowhead)"}),e.label&&n.jsx("text",{x:(i.x+r.x)/2,y:s-4,textAnchor:"middle",className:"fill-muted-foreground/60",fontSize:9,children:e.label})]},`edge-${t}`)}),L.map(e=>{const t=Ee[e.layer%Ee.length];return n.jsxs("g",{transform:`translate(${e.x-70}, ${e.y-18})`,children:[n.jsx("rect",{width:140,height:36,rx:8,fill:t,fillOpacity:.15,stroke:t,strokeWidth:1.5}),n.jsx("text",{x:70,y:19,textAnchor:"middle",dominantBaseline:"middle",className:"fill-foreground",fontSize:11,fontWeight:500,children:e.title.length>14?e.title.slice(0,13)+"…":e.title})]},e.id)})]})]})})]})}export{Le as GraphPreview};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import{j as e,r as t,_ as s,b as r,h as a}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-0ybprEWn.js","assets/index-BV5oU0la.js","assets/index-C8OaV-rT.css","assets/jszip.min-5kkrvu4H.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{j as e,r as t,_ as s,b as r,h as a}from"./index-BV5oU0la.js";async function n(e){let t=a(e);const s=r();s&&(t+=`${t.includes("?")?"&":"?"}token=${encodeURIComponent(s)}`);const n=await fetch(t);if(!n.ok)throw new Error(`Failed to fetch file: ${n.status}`);return n.arrayBuffer()}function l({filePath:r,zoom:a}){const[l,o]=t.useState(""),[i,d]=t.useState(null),[c,x]=t.useState(!0);return t.useEffect(()=>{let e=!1;return x(!0),d(null),(async()=>{try{const t=await s(()=>import("./index-0ybprEWn.js").then(e=>e.i),__vite__mapDeps([0,1,2,3])),a=await n(r),l=await t.convertToHtml({arrayBuffer:a});e||o(l.value)}catch(t){e||d(t instanceof Error?t.message:"Failed to render docx")}finally{e||x(!1)}})(),()=>{e=!0}},[r]),c?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Word 文档中..."}):i?e.jsx("p",{className:"text-sm text-destructive p-4",children:i}):e.jsx("div",{className:"p-6 prose dark:prose-invert max-w-none",style:{fontSize:12*a/100+"px"},dangerouslySetInnerHTML:{__html:l}})}function o({filePath:r,zoom:a}){var l;const[o,i]=t.useState([]),[d,c]=t.useState(0),[x,u]=t.useState(null),[m,p]=t.useState(!0);return t.useEffect(()=>{let e=!1;return p(!0),u(null),(async()=>{try{const t=await s(()=>import("./xlsx-DfDjAMCE.js"),[]),a=await n(r),l=t.read(a,{type:"array"}),o=l.SheetNames.map(e=>({name:e,html:t.utils.sheet_to_html(l.Sheets[e],{editable:!1})}));e||(i(o),c(0))}catch(t){e||u(t instanceof Error?t.message:"Failed to render xlsx")}finally{e||p(!1)}})(),()=>{e=!0}},[r]),m?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 Excel 文件中..."}):x?e.jsx("p",{className:"text-sm text-destructive p-4",children:x}):0===o.length?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsxs("div",{className:"flex flex-col h-full",children:[o.length>1&&e.jsx("div",{className:"flex gap-0.5 px-3 py-1.5 border-b border-border bg-muted/30 flex-shrink-0 overflow-x-auto",children:o.map((t,s)=>e.jsx("button",{onClick:()=>c(s),className:"px-3 py-1 text-xs rounded-t transition-colors whitespace-nowrap "+(s===d?"bg-background text-foreground border border-b-0 border-border":"text-muted-foreground hover:text-foreground"),children:t.name},s))}),e.jsx("div",{className:"flex-1 overflow-auto p-2 xlsx-preview",style:{fontSize:12*a/100+"px"},dangerouslySetInnerHTML:{__html:(null==(l=o[d])?void 0:l.html)??""}}),e.jsx("style",{children:"\n .xlsx-preview table { border-collapse: collapse; width: auto; min-width: 100%; }\n .xlsx-preview td, .xlsx-preview th {\n border: 1px solid hsl(var(--border));\n padding: 4px 8px;\n text-align: left;\n white-space: nowrap;\n font-size: inherit;\n }\n .xlsx-preview th { background: hsl(var(--muted)); font-weight: 600; }\n .xlsx-preview tr:hover td { background: hsl(var(--accent) / 0.3); }\n "})]})}function i({filePath:r,zoom:a}){const[l,o]=t.useState([]),[i,d]=t.useState(null),[c,x]=t.useState(!0);return t.useEffect(()=>{let e=!1;return x(!0),d(null),(async()=>{try{const t=await n(r),a=await async function(e){const{default:t}=await s(async()=>{const{default:e}=await import("./jszip.min-5kkrvu4H.js").then(e=>e.j);return{default:e}},__vite__mapDeps([3,1,2])),r=await t.loadAsync(e),a=[],n=Object.keys(r.files).filter(e=>/^ppt\/slides\/slide\d+\.xml$/i.test(e)).sort((e,t)=>{var s,r;return parseInt((null==(s=e.match(/slide(\d+)/))?void 0:s[1])??"0")-parseInt((null==(r=t.match(/slide(\d+)/))?void 0:r[1])??"0")});for(let s=0;s<n.length;s++){const e=await r.file(n[s]).async("text"),t=[],l=/<a:t[^>]*>([\s\S]*?)<\/a:t>/g;let o;for(;null!==(o=l.exec(e));){const e=o[1].replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').trim();e&&t.push(e)}a.push({index:s+1,texts:t})}return a}(t);e||o(a)}catch(t){e||d(t instanceof Error?t.message:"Failed to render pptx")}finally{e||x(!1)}})(),()=>{e=!0}},[r]),c?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"加载 PPT 文件中..."}):i?e.jsx("p",{className:"text-sm text-destructive p-4",children:i}):0===l.length?e.jsx("p",{className:"text-sm text-muted-foreground p-4",children:"空文件"}):e.jsx("div",{className:"p-4 space-y-4",style:{fontSize:12*a/100+"px"},children:l.map(t=>e.jsxs("div",{className:"border border-border rounded-lg p-5 bg-muted/20",children:[e.jsxs("div",{className:"text-xs text-muted-foreground mb-2 font-medium",children:["Slide ",t.index]}),t.texts.length>0?e.jsx("div",{className:"space-y-1.5",children:t.texts.map((t,s)=>e.jsx("p",{className:"text-foreground leading-relaxed",style:{fontSize:"inherit"},children:t},s))}):e.jsx("p",{className:"text-muted-foreground text-sm italic",children:"(无文本内容)"})]},t.index))})}const d=new Set(["docx","xlsx","xls","pptx"]);function c({filePath:t,ext:s,zoom:r}){return"docx"===s?e.jsx(l,{filePath:t,zoom:r}):"xlsx"===s||"xls"===s?e.jsx(o,{filePath:t,zoom:r}):"pptx"===s?e.jsx(i,{filePath:t,zoom:r}):null}export{d as OFFICE_EXTS,c as OfficePreview};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{c as e,r as s,j as t,b4 as a,b5 as n,b6 as l,t as r,b7 as i,b8 as o,b9 as c,ba as d,bb as h,B as x}from"./index-BV5oU0la.js";import{Z as u,a as m,L as f,P as y,A as g}from"./ProjectPage-Bsmij9PR.js";import{M as b}from"./maximize-2-CjNiqJGr.js";import"./save-DFFb1Eaz.js";import"./download-CUOp54z9.js";import"./chevron-down-CK5p8rdp.js";import"./bot-BlJwFT2K.js";import"./user-JyvDYJ0V.js";
|
|
2
|
+
/**
|
|
3
|
+
* @license lucide-react v0.309.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/const p=e("CheckCircle",[["path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14",key:"g774vq"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),j=e("Pause",[["rect",{width:"4",height:"16",x:"6",y:"4",key:"iffhe4"}],["rect",{width:"4",height:"16",x:"14",y:"4",key:"sjin7j"}]]),k=e("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]),v=e("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),w=140,N=36,C={pending:{fill:"#71717a20",stroke:"#71717a"},running:{fill:"#3b82f633",stroke:"#3b82f6"},success:{fill:"#22c55e26",stroke:"#22c55e"},failed:{fill:"#ef444426",stroke:"#ef4444"},blocked:{fill:"#eab30826",stroke:"#eab308"},skipped:{fill:"#71717a14",stroke:"#71717a"}},M={fill:"#71717a15",stroke:"#52525b"};
|
|
8
|
+
/**
|
|
9
|
+
* @license lucide-react v0.309.0 - ISC
|
|
10
|
+
*
|
|
11
|
+
* This source code is licensed under the ISC license.
|
|
12
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
13
|
+
*/function _({tree:e,currentLine:a}){const n=s.useRef(null),[l,r]=s.useState(1),[i,o]=s.useState({x:0,y:0}),[c,d]=s.useState(!1),[h,x]=s.useState({x:0,y:0}),[f,y]=s.useState(null),{layoutNodes:g,edges:p,bounds:j}=s.useMemo(()=>{const s=[],t=[];const a=function e(a,n,l,r){const i=[];let o=l;for(const c of a){const a=40+160*r,n={id:c.id,x:a,y:o,w:w,h:N,type:c.type,label:c.label,status:c.status,node_id:c.node_id,line:c.line,children:[]};if(c.children.length>0){const s=e(c.children,a,o+N+16,r+1);n.children=s.nodes,o=Math.max(o+N+16,o+N+16+s.height);for(const e of s.nodes)t.push({x1:n.x+70,y1:n.y+N,x2:e.x+70,y2:e.y,dashed:"call"===c.type})}else o+=52;i.push(n),s.push(n)}return{nodes:i,height:o-l}}(e,0,20,0);for(let e=1;e<a.nodes.length;e++){const s=a.nodes[e-1],n=a.nodes[e];if(s.x===n.x){const e=z(s);t.push({x1:s.x+70,y1:e,x2:n.x+70,y2:n.y})}}let n=1/0,l=1/0,r=-1/0,i=-1/0;for(const e of s)n=Math.min(n,e.x),l=Math.min(l,e.y),r=Math.max(r,e.x+e.w),i=Math.max(i,e.y+e.h);return{layoutNodes:s,edges:t,bounds:{minX:n,minY:l,maxX:r+40,maxY:i+20}}},[e]);s.useEffect(()=>{k()},[e]),s.useEffect(()=>{if(null===a)return;const e=g.find(e=>e.line===a);if(!e||!n.current)return;const s=n.current.getBoundingClientRect(),t=e.x+70,r=e.y+18;o({x:s.width/2-t*l,y:s.height/2-r*l})},[a]);const k=s.useCallback(()=>{if(!n.current||0===g.length)return;const e=n.current.getBoundingClientRect(),s=j.maxX-j.minX,t=j.maxY-j.minY;if(0===s||0===t)return;const a=.9*Math.min(e.width/s,e.height/t,2);r(a),o({x:(e.width-s*a)/2-j.minX*a,y:(e.height-t*a)/2-j.minY*a})},[g,j]),v=s.useCallback(e=>{e.preventDefault(),r(s=>Math.max(.2,Math.min(3,s+(e.deltaY>0?-.1:.1))))},[]),_=s.useCallback(e=>{0===e.button&&(d(!0),x({x:e.clientX-i.x,y:e.clientY-i.y}))},[i]),S=s.useCallback(e=>{c&&o({x:e.clientX-h.x,y:e.clientY-h.y})},[c,h]),P=s.useCallback(()=>d(!1),[]);return t.jsxs("div",{className:"relative w-full h-full",children:[t.jsxs("div",{className:"absolute top-1 right-1 z-10 flex gap-0.5",children:[t.jsx("button",{className:"p-1 rounded bg-muted/50 hover:bg-muted",onClick:()=>r(e=>Math.min(3,e+.2)),children:t.jsx(u,{className:"h-3 w-3"})}),t.jsx("button",{className:"p-1 rounded bg-muted/50 hover:bg-muted",onClick:()=>r(e=>Math.max(.2,e-.2)),children:t.jsx(m,{className:"h-3 w-3"})}),t.jsx("button",{className:"p-1 rounded bg-muted/50 hover:bg-muted",onClick:k,children:t.jsx(b,{className:"h-3 w-3"})})]}),t.jsxs("svg",{ref:n,className:"w-full h-full",onWheel:v,onMouseDown:_,onMouseMove:S,onMouseUp:P,onMouseLeave:P,style:{cursor:c?"grabbing":"grab"},children:[t.jsx("defs",{children:t.jsx("marker",{id:"arrow",viewBox:"0 0 10 10",refX:"10",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:t.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:"#71717a"})})}),t.jsxs("g",{transform:`translate(${i.x},${i.y}) scale(${l})`,children:[p.map((e,s)=>t.jsx("line",{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,stroke:"#71717a",strokeWidth:1,strokeDasharray:e.dashed?"4,2":void 0,markerEnd:"url(#arrow)"},`e${s}`)),g.map(e=>{const s=C[e.status??""]??M,n=a===e.line;return t.jsxs("g",{onClick:()=>y(e),style:{cursor:"pointer"},children:[t.jsx("rect",{x:e.x,y:e.y,width:e.w,height:e.h,rx:6,fill:s.fill,stroke:n?"#60a5fa":s.stroke,strokeWidth:n?2:1,strokeDasharray:"skipped"===e.status?"4,2":void 0}),"running"===e.status&&t.jsx("rect",{x:e.x,y:e.y,width:e.w,height:e.h,rx:6,fill:"none",stroke:"#3b82f6",strokeWidth:2,opacity:.5,children:t.jsx("animate",{attributeName:"opacity",values:"0.5;0;0.5",dur:"2s",repeatCount:"indefinite"})}),t.jsx("text",{x:e.x+6,y:e.y+13,fontSize:9,fill:"#a1a1aa",fontFamily:"monospace",children:e.type}),t.jsx("text",{x:e.x+6,y:e.y+26,fontSize:10,fill:"#e4e4e7",clipPath:"inset(0 0 0 0)",children:e.label.length>16?e.label.slice(0,16)+"…":e.label}),e.node_id&&t.jsxs("text",{x:e.x+e.w-4,y:e.y+10,fontSize:7,fill:"#71717a",textAnchor:"end",children:["#",e.node_id]})]},e.id)})]})]}),f&&t.jsxs("div",{className:"absolute bottom-2 left-2 right-2 bg-background/95 border border-border rounded-lg p-3 text-xs shadow-lg z-20",onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{className:"flex justify-between items-start mb-1",children:[t.jsxs("span",{className:"font-mono text-muted-foreground",children:[f.type," L",f.line]}),t.jsx("button",{className:"text-muted-foreground hover:text-foreground",onClick:()=>y(null),children:"✕"})]}),t.jsx("div",{className:"text-foreground mb-1",children:f.label}),f.status&&t.jsxs("div",{className:"text-muted-foreground",children:["状态: ",f.status]}),f.node_id&&t.jsxs("div",{className:"text-muted-foreground",children:["节点 ID: #",f.node_id]})]})]})}function z(e){return 0===e.children.length?e.y+e.h:Math.max(e.y+e.h,...e.children.map(z))}function S({projectId:e,planStatus:u,planNodeUpdate:m,planReplan:b}){const[w,N]=s.useState(null),[C,M]=s.useState(null),[z,S]=s.useState(null),[L,Y]=s.useState(!1);s.useEffect(()=>{let s=!1;return(async()=>{try{const t=await a(e);if(s||N(t),t.hasMainPc){const t=await n(e);s||S(t.tree)}}catch{}})(),()=>{s=!0}},[e]),s.useEffect(()=>{m&&z&&S(e=>e?P(e,m.node_id,m.status):e)},[m]),s.useEffect(()=>{u&&N(e=>e?{...e,state:e.state?{...e.state,...u}:{status:u.status,current_line:u.current_line,executed_tasks:u.executed_tasks,estimated_tasks:u.estimated_tasks}}:e)},[u]),s.useEffect(()=>{b&&n(e).then(e=>S(e.tree)).catch(()=>{})},[b,e]);const X=s.useCallback(async()=>{Y(!0);try{await l(e);const s=await a(e);N(s),r.success("Plan Control 已初始化")}catch(s){r.error(s.message)}finally{Y(!1)}},[e]),E=s.useCallback(async()=>{Y(!0);try{const s=await i(e);if(M(s),s.valid){r.success("语法检查通过");const s=await n(e);S(s.tree)}else r.error(`${s.errors.length} 个语法错误`)}catch(s){r.error(s.message)}finally{Y(!1)}},[e]),D=s.useCallback(async()=>{try{await o(e);const s=await a(e);N(s)}catch(s){r.error(s.message)}},[e]),R=s.useCallback(async()=>{try{await c(e)}catch(s){r.error(s.message)}},[e]),W=s.useCallback(async()=>{try{await d(e);const s=await a(e);N(s)}catch(s){r.error(s.message)}},[e]),$=s.useCallback(async()=>{try{await h(e)}catch(s){r.error(s.message)}},[e]),B=null==w?void 0:w.state,q=(null==B?void 0:B.status)??((null==w?void 0:w.hasMainPc)?"ready":(null==w?void 0:w.initialized)?"editing":"none");return t.jsxs("div",{className:"h-full flex flex-col",children:[t.jsxs("div",{className:"flex-none h-8 flex items-center gap-1 px-2 border-b border-border text-xs",children:["none"===q&&t.jsxs(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:X,disabled:L,children:[L?t.jsx(f,{className:"h-3 w-3 animate-spin mr-1"}):null,"初始化"]}),("editing"===q||"ready"===q)&&t.jsxs(t.Fragment,{children:[t.jsxs(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:E,disabled:L,children:[L?t.jsx(f,{className:"h-3 w-3 animate-spin mr-1"}):t.jsx(p,{className:"h-3 w-3 mr-1"}),"检查"]}),(null==C?void 0:C.valid)&&t.jsxs(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:D,children:[t.jsx(y,{className:"h-3 w-3 mr-1"}),"启动"]})]}),("running"===q||"waiting"===q)&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"text-muted-foreground",children:["已完成 ",(null==B?void 0:B.executed_tasks)??0,"(≥",(null==B?void 0:B.estimated_tasks)??0,")"]}),t.jsx("div",{className:"flex-1"}),t.jsx(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:R,children:t.jsx(j,{className:"h-3 w-3"})}),t.jsx(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:$,children:t.jsx(v,{className:"h-3 w-3"})})]}),("paused"===q||"stopped"===q)&&t.jsxs(x,{size:"sm",variant:"ghost",className:"h-6 text-xs",onClick:W,children:[t.jsx(k,{className:"h-3 w-3 mr-1"}),"继续"]}),"completed"===q&&t.jsxs("span",{className:"text-green-500 flex items-center gap-1",children:[t.jsx(p,{className:"h-3 w-3"})," 已完成"]})]}),C&&!C.valid&&t.jsx("div",{className:"flex-none max-h-24 overflow-y-auto px-2 py-1 border-b border-border bg-red-500/5",children:C.errors.map((e,s)=>t.jsxs("div",{className:"text-[10px] text-red-400 flex gap-1",children:[t.jsx(g,{className:"h-3 w-3 flex-shrink-0 mt-0.5"}),t.jsxs("span",{children:["第",e.line,"行: ",e.message]})]},s))}),t.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:z?t.jsx(_,{tree:z,currentLine:(null==B?void 0:B.current_line)??null}):t.jsx("div",{className:"flex items-center justify-center h-full text-xs text-muted-foreground",children:(null==w?void 0:w.initialized)?(null==w?void 0:w.hasMainPc)?'点击"检查"查看任务树':"等待 AI 编写计划...":'点击"初始化"开始'})})]})}function P(e,s,t){return e.map(e=>e.node_id===s?{...e,status:t}:e.children.length>0?{...e,children:P(e.children,s,t)}:e)}export{S as PlanPanel};
|