@skillkit/tui 1.8.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +732 -387
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -4324,6 +4324,293 @@ showing `), _el$32 = createTextNode(`-`), _el$33 = createTextNode(` of `);
|
|
|
4324
4324
|
})();
|
|
4325
4325
|
}
|
|
4326
4326
|
|
|
4327
|
+
// src/services/memory.service.ts
|
|
4328
|
+
async function loadMemories() {
|
|
4329
|
+
return {
|
|
4330
|
+
entries: [],
|
|
4331
|
+
status: { projectMemoryExists: false, globalMemoryExists: true },
|
|
4332
|
+
paths: { projectMemoryDir: ".skillkit/memory", globalMemoryDir: "~/.skillkit/memory" },
|
|
4333
|
+
loading: false,
|
|
4334
|
+
error: null
|
|
4335
|
+
};
|
|
4336
|
+
}
|
|
4337
|
+
async function deleteMemoryEntry(_key) {
|
|
4338
|
+
return true;
|
|
4339
|
+
}
|
|
4340
|
+
async function clearMemory(_path, _scope) {
|
|
4341
|
+
return true;
|
|
4342
|
+
}
|
|
4343
|
+
async function initializeMemory() {
|
|
4344
|
+
return true;
|
|
4345
|
+
}
|
|
4346
|
+
|
|
4347
|
+
// src/services/workflow.service.ts
|
|
4348
|
+
async function loadWorkflowsList(_projectPath) {
|
|
4349
|
+
return {
|
|
4350
|
+
workflows: [],
|
|
4351
|
+
current: null,
|
|
4352
|
+
progress: null,
|
|
4353
|
+
loading: false,
|
|
4354
|
+
error: null
|
|
4355
|
+
};
|
|
4356
|
+
}
|
|
4357
|
+
async function executeWorkflow(_name, _projectPath, _onProgress) {
|
|
4358
|
+
return { success: true, completedWaves: 0, totalWaves: 0, errors: [] };
|
|
4359
|
+
}
|
|
4360
|
+
|
|
4361
|
+
// src/services/plan.service.ts
|
|
4362
|
+
async function loadPlansList(_projectPath) {
|
|
4363
|
+
return {
|
|
4364
|
+
plans: [],
|
|
4365
|
+
current: null,
|
|
4366
|
+
validation: null,
|
|
4367
|
+
execution: null,
|
|
4368
|
+
loading: false,
|
|
4369
|
+
error: null
|
|
4370
|
+
};
|
|
4371
|
+
}
|
|
4372
|
+
async function loadPlan(_planPath) {
|
|
4373
|
+
return null;
|
|
4374
|
+
}
|
|
4375
|
+
async function validatePlan(_plan) {
|
|
4376
|
+
return { valid: true, errors: [], warnings: [], issues: [] };
|
|
4377
|
+
}
|
|
4378
|
+
async function executePlan(_plan, _projectPath, _onEvent, _dryRun) {
|
|
4379
|
+
return { success: true, completedTasks: [], failedTasks: [], totalTasks: 0, errors: [] };
|
|
4380
|
+
}
|
|
4381
|
+
async function executePlanDryRun(plan, projectPath, onEvent) {
|
|
4382
|
+
return executePlan(plan, projectPath, onEvent, true);
|
|
4383
|
+
}
|
|
4384
|
+
|
|
4385
|
+
// src/services/plugin.service.ts
|
|
4386
|
+
async function loadPluginsList(_projectPath) {
|
|
4387
|
+
return {
|
|
4388
|
+
plugins: [],
|
|
4389
|
+
manager: null,
|
|
4390
|
+
loading: false,
|
|
4391
|
+
error: null
|
|
4392
|
+
};
|
|
4393
|
+
}
|
|
4394
|
+
async function enablePlugin(_name, _manager) {
|
|
4395
|
+
return true;
|
|
4396
|
+
}
|
|
4397
|
+
async function disablePlugin(_name, _manager) {
|
|
4398
|
+
return true;
|
|
4399
|
+
}
|
|
4400
|
+
async function getPluginInfo(_name, _manager) {
|
|
4401
|
+
return null;
|
|
4402
|
+
}
|
|
4403
|
+
|
|
4404
|
+
// src/services/team.service.ts
|
|
4405
|
+
async function loadTeamConfig(_projectPath) {
|
|
4406
|
+
return {
|
|
4407
|
+
config: null,
|
|
4408
|
+
members: [],
|
|
4409
|
+
sharedSkills: [],
|
|
4410
|
+
loading: false,
|
|
4411
|
+
error: null
|
|
4412
|
+
};
|
|
4413
|
+
}
|
|
4414
|
+
async function initializeTeam(_teamName, _projectPath) {
|
|
4415
|
+
return true;
|
|
4416
|
+
}
|
|
4417
|
+
|
|
4418
|
+
// src/services/methodology.service.ts
|
|
4419
|
+
async function loadMethodologies() {
|
|
4420
|
+
return {
|
|
4421
|
+
packs: [],
|
|
4422
|
+
installedPacks: [],
|
|
4423
|
+
manager: null,
|
|
4424
|
+
loading: false,
|
|
4425
|
+
error: null
|
|
4426
|
+
};
|
|
4427
|
+
}
|
|
4428
|
+
async function installMethodologyPack(_name) {
|
|
4429
|
+
return true;
|
|
4430
|
+
}
|
|
4431
|
+
async function uninstallMethodologyPack(_name) {
|
|
4432
|
+
return true;
|
|
4433
|
+
}
|
|
4434
|
+
async function syncMethodologyPack(_name) {
|
|
4435
|
+
return true;
|
|
4436
|
+
}
|
|
4437
|
+
|
|
4438
|
+
// src/services/recommend.service.ts
|
|
4439
|
+
async function getRecommendations(_projectPath, _options) {
|
|
4440
|
+
return {
|
|
4441
|
+
recommendations: [],
|
|
4442
|
+
analyzing: false,
|
|
4443
|
+
loading: false,
|
|
4444
|
+
error: null,
|
|
4445
|
+
lastAnalyzed: (/* @__PURE__ */ new Date()).toISOString()
|
|
4446
|
+
};
|
|
4447
|
+
}
|
|
4448
|
+
async function analyzeProject(_projectPath) {
|
|
4449
|
+
return {
|
|
4450
|
+
languages: ["TypeScript", "JavaScript"],
|
|
4451
|
+
frameworks: ["Solid.js"],
|
|
4452
|
+
libraries: ["@opentui/solid"],
|
|
4453
|
+
patterns: []
|
|
4454
|
+
};
|
|
4455
|
+
}
|
|
4456
|
+
|
|
4457
|
+
// src/services/context.service.ts
|
|
4458
|
+
async function loadProjectContext() {
|
|
4459
|
+
return {
|
|
4460
|
+
context: {
|
|
4461
|
+
projectName: "skillkit",
|
|
4462
|
+
rootPath: process.cwd(),
|
|
4463
|
+
languages: ["TypeScript", "JavaScript"],
|
|
4464
|
+
frameworks: ["Solid.js", "React"],
|
|
4465
|
+
libraries: ["@opentui/solid"],
|
|
4466
|
+
patterns: {},
|
|
4467
|
+
lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
|
|
4468
|
+
},
|
|
4469
|
+
stack: null,
|
|
4470
|
+
loading: false,
|
|
4471
|
+
analyzing: false,
|
|
4472
|
+
error: null
|
|
4473
|
+
};
|
|
4474
|
+
}
|
|
4475
|
+
async function analyzeProjectContext() {
|
|
4476
|
+
return loadProjectContext();
|
|
4477
|
+
}
|
|
4478
|
+
async function refreshContext() {
|
|
4479
|
+
return loadProjectContext();
|
|
4480
|
+
}
|
|
4481
|
+
async function exportContext(_path, _format) {
|
|
4482
|
+
return true;
|
|
4483
|
+
}
|
|
4484
|
+
async function getStackTags() {
|
|
4485
|
+
return ["typescript", "solid-js", "cli"];
|
|
4486
|
+
}
|
|
4487
|
+
|
|
4488
|
+
// src/services/executor.service.ts
|
|
4489
|
+
async function getAgentAvailability() {
|
|
4490
|
+
return [
|
|
4491
|
+
{ agent: "claude-code", available: true },
|
|
4492
|
+
{ agent: "cursor", available: false },
|
|
4493
|
+
{ agent: "codex", available: false }
|
|
4494
|
+
];
|
|
4495
|
+
}
|
|
4496
|
+
async function executeSkillWithAgent(_skillPath, _agent, _options) {
|
|
4497
|
+
return { success: true, output: "Executed successfully" };
|
|
4498
|
+
}
|
|
4499
|
+
|
|
4500
|
+
// src/services/translator.service.ts
|
|
4501
|
+
function getSupportedAgents() {
|
|
4502
|
+
return [
|
|
4503
|
+
"claude-code",
|
|
4504
|
+
"cursor",
|
|
4505
|
+
"windsurf",
|
|
4506
|
+
"github-copilot",
|
|
4507
|
+
"codex",
|
|
4508
|
+
"gemini-cli",
|
|
4509
|
+
"opencode",
|
|
4510
|
+
"universal"
|
|
4511
|
+
];
|
|
4512
|
+
}
|
|
4513
|
+
function checkCanTranslate(_from, _to) {
|
|
4514
|
+
return true;
|
|
4515
|
+
}
|
|
4516
|
+
function translate(_content, targetAgent, options) {
|
|
4517
|
+
return {
|
|
4518
|
+
sourceFormat: options?.sourceFilename || "SKILL.md",
|
|
4519
|
+
targetAgent,
|
|
4520
|
+
success: true,
|
|
4521
|
+
content: "",
|
|
4522
|
+
filename: void 0,
|
|
4523
|
+
warnings: [],
|
|
4524
|
+
incompatible: []
|
|
4525
|
+
};
|
|
4526
|
+
}
|
|
4527
|
+
function previewTranslation(_content, _targetAgent) {
|
|
4528
|
+
return {
|
|
4529
|
+
preview: "",
|
|
4530
|
+
compatible: true,
|
|
4531
|
+
issues: []
|
|
4532
|
+
};
|
|
4533
|
+
}
|
|
4534
|
+
function getAgentFormatInfo(agent) {
|
|
4535
|
+
const formatMap = {
|
|
4536
|
+
"claude-code": { extension: ".md", formatName: "SKILL.md", description: "Claude Code skills format" },
|
|
4537
|
+
cursor: { extension: ".mdc", formatName: "MDC", description: "Cursor rules format" },
|
|
4538
|
+
windsurf: { extension: ".md", formatName: "Markdown", description: "Windsurf rules format" },
|
|
4539
|
+
"github-copilot": { extension: ".md", formatName: "Markdown", description: "GitHub Copilot instructions" },
|
|
4540
|
+
codex: { extension: ".md", formatName: "Markdown", description: "Codex instructions" },
|
|
4541
|
+
"gemini-cli": { extension: ".md", formatName: "Markdown", description: "Gemini CLI instructions" },
|
|
4542
|
+
opencode: { extension: ".md", formatName: "Markdown", description: "OpenCode instructions" },
|
|
4543
|
+
universal: { extension: ".md", formatName: "SKILL.md", description: "Universal skill format" }
|
|
4544
|
+
};
|
|
4545
|
+
return formatMap[agent] || { extension: ".md", formatName: "Markdown", description: "Unknown format" };
|
|
4546
|
+
}
|
|
4547
|
+
|
|
4548
|
+
// src/services/tree.service.ts
|
|
4549
|
+
import { join as join3 } from "path";
|
|
4550
|
+
import { homedir } from "os";
|
|
4551
|
+
import {
|
|
4552
|
+
generateSkillTree,
|
|
4553
|
+
loadTree,
|
|
4554
|
+
saveTree,
|
|
4555
|
+
loadIndex
|
|
4556
|
+
} from "@skillkit/core";
|
|
4557
|
+
var TREE_PATH = join3(homedir(), ".skillkit", "skill-tree.json");
|
|
4558
|
+
async function loadOrGenerateTree() {
|
|
4559
|
+
try {
|
|
4560
|
+
let tree = loadTree(TREE_PATH);
|
|
4561
|
+
if (!tree) {
|
|
4562
|
+
const index = loadIndex();
|
|
4563
|
+
if (index && index.skills.length > 0) {
|
|
4564
|
+
tree = generateSkillTree(index.skills);
|
|
4565
|
+
saveTree(tree, TREE_PATH);
|
|
4566
|
+
}
|
|
4567
|
+
}
|
|
4568
|
+
if (!tree) {
|
|
4569
|
+
return {
|
|
4570
|
+
tree: null,
|
|
4571
|
+
currentNode: null,
|
|
4572
|
+
currentPath: [],
|
|
4573
|
+
loading: false,
|
|
4574
|
+
error: 'No skill index found. Run "skillkit recommend --update" first.'
|
|
4575
|
+
};
|
|
4576
|
+
}
|
|
4577
|
+
return {
|
|
4578
|
+
tree,
|
|
4579
|
+
currentNode: tree.rootNode,
|
|
4580
|
+
currentPath: [],
|
|
4581
|
+
loading: false,
|
|
4582
|
+
error: null
|
|
4583
|
+
};
|
|
4584
|
+
} catch (err) {
|
|
4585
|
+
return {
|
|
4586
|
+
tree: null,
|
|
4587
|
+
currentNode: null,
|
|
4588
|
+
currentPath: [],
|
|
4589
|
+
loading: false,
|
|
4590
|
+
error: err instanceof Error ? err.message : "Failed to load tree"
|
|
4591
|
+
};
|
|
4592
|
+
}
|
|
4593
|
+
}
|
|
4594
|
+
function getNodeChildren2(node) {
|
|
4595
|
+
return node.children.map((child) => ({
|
|
4596
|
+
id: child.id,
|
|
4597
|
+
name: child.name,
|
|
4598
|
+
description: child.description,
|
|
4599
|
+
skillCount: child.skillCount,
|
|
4600
|
+
childCount: child.children.length,
|
|
4601
|
+
depth: child.depth,
|
|
4602
|
+
isExpanded: false,
|
|
4603
|
+
isCategory: child.children.length > 0
|
|
4604
|
+
}));
|
|
4605
|
+
}
|
|
4606
|
+
function getNodeSkills(node) {
|
|
4607
|
+
return node.skills;
|
|
4608
|
+
}
|
|
4609
|
+
function formatTreePath(path) {
|
|
4610
|
+
if (path.length === 0) return "Root";
|
|
4611
|
+
return path.join(" > ");
|
|
4612
|
+
}
|
|
4613
|
+
|
|
4327
4614
|
// src/screens/Marketplace.tsx
|
|
4328
4615
|
var CATEGORIES = [{
|
|
4329
4616
|
name: "Development",
|
|
@@ -4350,6 +4637,10 @@ function Marketplace(props) {
|
|
|
4350
4637
|
const [error, setError] = createSignal(null);
|
|
4351
4638
|
const [loadedRepos, setLoadedRepos] = createSignal([]);
|
|
4352
4639
|
const [failedRepos, setFailedRepos] = createSignal([]);
|
|
4640
|
+
const [viewMode, setViewMode] = createSignal("list");
|
|
4641
|
+
const [treeState, setTreeState] = createSignal(null);
|
|
4642
|
+
const [currentPath, setCurrentPath] = createSignal([]);
|
|
4643
|
+
const [treeItems, setTreeItems] = createSignal([]);
|
|
4353
4644
|
const rows = () => props.rows ?? 24;
|
|
4354
4645
|
createEffect(() => {
|
|
4355
4646
|
loadData();
|
|
@@ -4382,8 +4673,27 @@ function Marketplace(props) {
|
|
|
4382
4673
|
} else if (failed.length > 0 && skills.length === 0) {
|
|
4383
4674
|
setError(`Some repos failed (${failed.join(", ")}) and no skills loaded`);
|
|
4384
4675
|
}
|
|
4676
|
+
try {
|
|
4677
|
+
const tree = await loadOrGenerateTree();
|
|
4678
|
+
setTreeState(tree);
|
|
4679
|
+
if (tree.tree && tree.currentNode) {
|
|
4680
|
+
updateTreeItems(tree.currentNode);
|
|
4681
|
+
}
|
|
4682
|
+
} catch (e) {
|
|
4683
|
+
console.error("Failed to load skill tree:", e);
|
|
4684
|
+
}
|
|
4385
4685
|
setLoading(false);
|
|
4386
4686
|
};
|
|
4687
|
+
const updateTreeItems = (node) => {
|
|
4688
|
+
const children2 = getNodeChildren2(node);
|
|
4689
|
+
const skills = getNodeSkills(node);
|
|
4690
|
+
const items = [...children2, ...skills.map((name) => ({
|
|
4691
|
+
type: "skill",
|
|
4692
|
+
name
|
|
4693
|
+
}))];
|
|
4694
|
+
setTreeItems(items);
|
|
4695
|
+
setSelectedIndex(0);
|
|
4696
|
+
};
|
|
4387
4697
|
const filteredSkills = createMemo(() => {
|
|
4388
4698
|
let skills = allSkills();
|
|
4389
4699
|
if (selectedCategory()) {
|
|
@@ -4395,9 +4705,15 @@ function Marketplace(props) {
|
|
|
4395
4705
|
return skills;
|
|
4396
4706
|
});
|
|
4397
4707
|
createEffect(() => {
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4708
|
+
if (viewMode() === "list") {
|
|
4709
|
+
const list = filteredSkills();
|
|
4710
|
+
const maxIndex = Math.max(0, list.length - 1);
|
|
4711
|
+
setSelectedIndex((prev) => Math.max(0, Math.min(prev, maxIndex)));
|
|
4712
|
+
} else {
|
|
4713
|
+
const items = treeItems();
|
|
4714
|
+
const maxIndex = Math.max(0, items.length - 1);
|
|
4715
|
+
setSelectedIndex((prev) => Math.max(0, Math.min(prev, maxIndex)));
|
|
4716
|
+
}
|
|
4401
4717
|
});
|
|
4402
4718
|
const maxVisible = () => Math.max(4, Math.floor((rows() - 14) / 2));
|
|
4403
4719
|
const skillsWindow = createMemo(() => {
|
|
@@ -4416,9 +4732,30 @@ function Marketplace(props) {
|
|
|
4416
4732
|
items: list.slice(start, start + visible)
|
|
4417
4733
|
};
|
|
4418
4734
|
});
|
|
4735
|
+
const treeWindow = createMemo(() => {
|
|
4736
|
+
const list = treeItems();
|
|
4737
|
+
const selected = selectedIndex();
|
|
4738
|
+
const visible = maxVisible();
|
|
4739
|
+
const total = list.length;
|
|
4740
|
+
if (total <= visible) return {
|
|
4741
|
+
start: 0,
|
|
4742
|
+
items: list
|
|
4743
|
+
};
|
|
4744
|
+
let start = Math.max(0, selected - Math.floor(visible / 2));
|
|
4745
|
+
start = Math.min(start, total - visible);
|
|
4746
|
+
return {
|
|
4747
|
+
start,
|
|
4748
|
+
items: list.slice(start, start + visible)
|
|
4749
|
+
};
|
|
4750
|
+
});
|
|
4419
4751
|
const handleKeyNav = (delta) => {
|
|
4420
|
-
|
|
4421
|
-
|
|
4752
|
+
if (viewMode() === "list") {
|
|
4753
|
+
const max = filteredSkills().length - 1;
|
|
4754
|
+
setSelectedIndex((prev) => Math.max(0, Math.min(prev + delta, max)));
|
|
4755
|
+
} else {
|
|
4756
|
+
const max = treeItems().length - 1;
|
|
4757
|
+
setSelectedIndex((prev) => Math.max(0, Math.min(prev + delta, max)));
|
|
4758
|
+
}
|
|
4422
4759
|
};
|
|
4423
4760
|
const handleInstall = () => {
|
|
4424
4761
|
const skill = filteredSkills()[selectedIndex()];
|
|
@@ -4426,6 +4763,52 @@ function Marketplace(props) {
|
|
|
4426
4763
|
props.onNavigate("installed");
|
|
4427
4764
|
}
|
|
4428
4765
|
};
|
|
4766
|
+
const handleTreeEnter = () => {
|
|
4767
|
+
const items = treeItems();
|
|
4768
|
+
const item = items[selectedIndex()];
|
|
4769
|
+
if (!item) return;
|
|
4770
|
+
if ("type" in item && item.type === "skill") {
|
|
4771
|
+
props.onNavigate("installed");
|
|
4772
|
+
} else if ("isCategory" in item && item.isCategory) {
|
|
4773
|
+
const state = treeState();
|
|
4774
|
+
if (state?.tree) {
|
|
4775
|
+
const newPath = [...currentPath(), item.name];
|
|
4776
|
+
setCurrentPath(newPath);
|
|
4777
|
+
let node = state.tree.rootNode;
|
|
4778
|
+
for (const segment of newPath) {
|
|
4779
|
+
const child = node.children.find((c) => c.name === segment);
|
|
4780
|
+
if (child) {
|
|
4781
|
+
node = child;
|
|
4782
|
+
} else {
|
|
4783
|
+
setCurrentPath([]);
|
|
4784
|
+
updateTreeItems(state.tree.rootNode);
|
|
4785
|
+
return;
|
|
4786
|
+
}
|
|
4787
|
+
}
|
|
4788
|
+
updateTreeItems(node);
|
|
4789
|
+
}
|
|
4790
|
+
}
|
|
4791
|
+
};
|
|
4792
|
+
const handleTreeBack = () => {
|
|
4793
|
+
const path = currentPath();
|
|
4794
|
+
if (path.length === 0) {
|
|
4795
|
+
setViewMode("list");
|
|
4796
|
+
return;
|
|
4797
|
+
}
|
|
4798
|
+
const newPath = path.slice(0, -1);
|
|
4799
|
+
setCurrentPath(newPath);
|
|
4800
|
+
const state = treeState();
|
|
4801
|
+
if (state?.tree) {
|
|
4802
|
+
let node = state.tree.rootNode;
|
|
4803
|
+
for (const segment of newPath) {
|
|
4804
|
+
const child = node.children.find((c) => c.name === segment);
|
|
4805
|
+
if (child) {
|
|
4806
|
+
node = child;
|
|
4807
|
+
}
|
|
4808
|
+
}
|
|
4809
|
+
updateTreeItems(node);
|
|
4810
|
+
}
|
|
4811
|
+
};
|
|
4429
4812
|
const handleCategorySelect = (idx) => {
|
|
4430
4813
|
const cat = CATEGORIES[idx];
|
|
4431
4814
|
if (cat) {
|
|
@@ -4433,38 +4816,65 @@ function Marketplace(props) {
|
|
|
4433
4816
|
setSelectedIndex(0);
|
|
4434
4817
|
}
|
|
4435
4818
|
};
|
|
4819
|
+
const toggleViewMode = () => {
|
|
4820
|
+
if (viewMode() === "list") {
|
|
4821
|
+
setViewMode("tree");
|
|
4822
|
+
setSelectedIndex(0);
|
|
4823
|
+
const state = treeState();
|
|
4824
|
+
if (state?.tree) {
|
|
4825
|
+
updateTreeItems(state.tree.rootNode);
|
|
4826
|
+
}
|
|
4827
|
+
} else {
|
|
4828
|
+
setViewMode("list");
|
|
4829
|
+
setCurrentPath([]);
|
|
4830
|
+
setSelectedIndex(0);
|
|
4831
|
+
}
|
|
4832
|
+
};
|
|
4436
4833
|
useKeyboard((key) => {
|
|
4437
4834
|
if (key.name === "j" || key.name === "down") handleKeyNav(1);
|
|
4438
4835
|
else if (key.name === "k" || key.name === "up") handleKeyNav(-1);
|
|
4439
|
-
else if (key.name === "return")
|
|
4440
|
-
|
|
4836
|
+
else if (key.name === "return") {
|
|
4837
|
+
if (viewMode() === "tree") {
|
|
4838
|
+
handleTreeEnter();
|
|
4839
|
+
} else {
|
|
4840
|
+
handleInstall();
|
|
4841
|
+
}
|
|
4842
|
+
} else if (key.name === "b") props.onNavigate("browse");
|
|
4441
4843
|
else if (key.name === "r") loadData();
|
|
4844
|
+
else if (key.sequence === "v") toggleViewMode();
|
|
4442
4845
|
else if (key.sequence && ["1", "2", "3", "4", "5"].includes(key.sequence)) {
|
|
4443
|
-
|
|
4846
|
+
if (viewMode() === "list") {
|
|
4847
|
+
handleCategorySelect(parseInt(key.sequence) - 1);
|
|
4848
|
+
}
|
|
4444
4849
|
} else if (key.name === "escape") {
|
|
4445
|
-
if (
|
|
4850
|
+
if (viewMode() === "tree") {
|
|
4851
|
+
handleTreeBack();
|
|
4852
|
+
} else if (searchQuery() || selectedCategory()) {
|
|
4446
4853
|
setSearchQuery("");
|
|
4447
4854
|
setSelectedCategory(null);
|
|
4448
4855
|
} else {
|
|
4449
4856
|
props.onNavigate("home");
|
|
4450
4857
|
}
|
|
4858
|
+
} else if (key.name === "left" && viewMode() === "tree") {
|
|
4859
|
+
handleTreeBack();
|
|
4860
|
+
} else if (key.name === "right" && viewMode() === "tree") {
|
|
4861
|
+
handleTreeEnter();
|
|
4451
4862
|
}
|
|
4452
4863
|
});
|
|
4453
|
-
const selectedSkill = () => {
|
|
4454
|
-
const skills = filteredSkills();
|
|
4455
|
-
if (skills.length === 0) return null;
|
|
4456
|
-
return skills[selectedIndex()];
|
|
4457
|
-
};
|
|
4458
4864
|
return (() => {
|
|
4459
4865
|
var _el$ = createElement("box");
|
|
4460
4866
|
setProp(_el$, "flexDirection", "column");
|
|
4461
4867
|
setProp(_el$, "paddingLeft", 1);
|
|
4462
4868
|
insert(_el$, createComponent2(Header, {
|
|
4463
4869
|
title: "Marketplace",
|
|
4464
|
-
subtitle
|
|
4465
|
-
|
|
4870
|
+
get subtitle() {
|
|
4871
|
+
return memo2(() => viewMode() === "tree")() ? `Tree View: ${formatTreePath(currentPath())}` : "Discover and install skills";
|
|
4872
|
+
},
|
|
4873
|
+
get icon() {
|
|
4874
|
+
return viewMode() === "tree" ? "\u{1F333}" : "\u2605";
|
|
4875
|
+
},
|
|
4466
4876
|
get count() {
|
|
4467
|
-
return allSkills().length;
|
|
4877
|
+
return memo2(() => viewMode() === "tree")() ? treeState()?.tree?.totalSkills ?? 0 : allSkills().length;
|
|
4468
4878
|
}
|
|
4469
4879
|
}), null);
|
|
4470
4880
|
insert(_el$, createComponent2(Show, {
|
|
@@ -4515,10 +4925,12 @@ function Marketplace(props) {
|
|
|
4515
4925
|
},
|
|
4516
4926
|
get children() {
|
|
4517
4927
|
return [(() => {
|
|
4518
|
-
var _el$5 = createElement("box"), _el$6 = createElement("text"), _el$7 = createTextNode(`\u25CF `), _el$8 = createTextNode(` repos`), _el$12 = createElement("text"), _el$14 = createElement("text"), _el$15 = createTextNode(` skills`);
|
|
4928
|
+
var _el$5 = createElement("box"), _el$6 = createElement("text"), _el$7 = createTextNode(`\u25CF `), _el$8 = createTextNode(` repos`), _el$12 = createElement("text"), _el$14 = createElement("text"), _el$15 = createTextNode(` skills`), _el$16 = createElement("text"), _el$18 = createElement("text"), _el$19 = createTextNode(`[v] `);
|
|
4519
4929
|
insertNode(_el$5, _el$6);
|
|
4520
4930
|
insertNode(_el$5, _el$12);
|
|
4521
4931
|
insertNode(_el$5, _el$14);
|
|
4932
|
+
insertNode(_el$5, _el$16);
|
|
4933
|
+
insertNode(_el$5, _el$18);
|
|
4522
4934
|
setProp(_el$5, "flexDirection", "row");
|
|
4523
4935
|
setProp(_el$5, "marginBottom", 1);
|
|
4524
4936
|
insertNode(_el$6, _el$7);
|
|
@@ -4547,215 +4959,350 @@ function Marketplace(props) {
|
|
|
4547
4959
|
insertNode(_el$12, createTextNode(` | `));
|
|
4548
4960
|
insertNode(_el$14, _el$15);
|
|
4549
4961
|
insert(_el$14, () => allSkills().length, _el$15);
|
|
4962
|
+
insertNode(_el$16, createTextNode(` | `));
|
|
4963
|
+
insertNode(_el$18, _el$19);
|
|
4964
|
+
insert(_el$18, () => viewMode() === "tree" ? "\u{1F333} Tree" : "\u{1F4CB} List", null);
|
|
4550
4965
|
effect((_p$) => {
|
|
4551
|
-
var _v$ = terminalColors.success, _v$2 = terminalColors.textMuted, _v$3 = terminalColors.text;
|
|
4966
|
+
var _v$ = terminalColors.success, _v$2 = terminalColors.textMuted, _v$3 = terminalColors.text, _v$4 = terminalColors.textMuted, _v$5 = viewMode() === "tree" ? terminalColors.accent : terminalColors.textMuted;
|
|
4552
4967
|
_v$ !== _p$.e && (_p$.e = setProp(_el$6, "fg", _v$, _p$.e));
|
|
4553
4968
|
_v$2 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$2, _p$.t));
|
|
4554
4969
|
_v$3 !== _p$.a && (_p$.a = setProp(_el$14, "fg", _v$3, _p$.a));
|
|
4970
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$16, "fg", _v$4, _p$.o));
|
|
4971
|
+
_v$5 !== _p$.i && (_p$.i = setProp(_el$18, "fg", _v$5, _p$.i));
|
|
4555
4972
|
return _p$;
|
|
4556
4973
|
}, {
|
|
4557
4974
|
e: void 0,
|
|
4558
4975
|
t: void 0,
|
|
4559
|
-
a: void 0
|
|
4976
|
+
a: void 0,
|
|
4977
|
+
o: void 0,
|
|
4978
|
+
i: void 0
|
|
4560
4979
|
});
|
|
4561
4980
|
return _el$5;
|
|
4562
4981
|
})(), (() => {
|
|
4563
|
-
var _el$
|
|
4564
|
-
insertNode(_el$
|
|
4565
|
-
effect((_$p) => setProp(_el$
|
|
4566
|
-
return _el$16;
|
|
4567
|
-
})(), (() => {
|
|
4568
|
-
var _el$18 = createElement("text");
|
|
4569
|
-
insertNode(_el$18, createTextNode(` `));
|
|
4570
|
-
return _el$18;
|
|
4571
|
-
})(), (() => {
|
|
4572
|
-
var _el$20 = createElement("box"), _el$21 = createElement("text");
|
|
4573
|
-
insertNode(_el$20, _el$21);
|
|
4574
|
-
setProp(_el$20, "flexDirection", "row");
|
|
4575
|
-
setProp(_el$20, "marginBottom", 1);
|
|
4576
|
-
insertNode(_el$21, createTextNode(`Categories: `));
|
|
4577
|
-
insert(_el$20, createComponent2(For, {
|
|
4578
|
-
each: CATEGORIES,
|
|
4579
|
-
children: (cat, idx) => (() => {
|
|
4580
|
-
var _el$47 = createElement("text"), _el$48 = createTextNode(`[`), _el$49 = createTextNode(`]`), _el$50 = createTextNode(` `);
|
|
4581
|
-
insertNode(_el$47, _el$48);
|
|
4582
|
-
insertNode(_el$47, _el$49);
|
|
4583
|
-
insertNode(_el$47, _el$50);
|
|
4584
|
-
insert(_el$47, () => idx() + 1, _el$49);
|
|
4585
|
-
insert(_el$47, () => cat.name, _el$50);
|
|
4586
|
-
effect((_$p) => setProp(_el$47, "fg", selectedCategory() === cat.tag ? terminalColors.accent : terminalColors.textMuted, _$p));
|
|
4587
|
-
return _el$47;
|
|
4588
|
-
})()
|
|
4589
|
-
}), null);
|
|
4590
|
-
effect((_$p) => setProp(_el$21, "fg", terminalColors.text, _$p));
|
|
4982
|
+
var _el$20 = createElement("text");
|
|
4983
|
+
insertNode(_el$20, createTextNode(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`));
|
|
4984
|
+
effect((_$p) => setProp(_el$20, "fg", terminalColors.textMuted, _$p));
|
|
4591
4985
|
return _el$20;
|
|
4592
4986
|
})(), (() => {
|
|
4593
|
-
var _el$
|
|
4594
|
-
insertNode(_el$
|
|
4595
|
-
|
|
4596
|
-
return _el$23;
|
|
4597
|
-
})(), (() => {
|
|
4598
|
-
var _el$25 = createElement("text");
|
|
4599
|
-
insertNode(_el$25, createTextNode(` `));
|
|
4600
|
-
return _el$25;
|
|
4987
|
+
var _el$22 = createElement("text");
|
|
4988
|
+
insertNode(_el$22, createTextNode(` `));
|
|
4989
|
+
return _el$22;
|
|
4601
4990
|
})(), createComponent2(Show, {
|
|
4602
4991
|
get when() {
|
|
4603
|
-
return
|
|
4604
|
-
},
|
|
4605
|
-
get fallback() {
|
|
4606
|
-
return createComponent2(EmptyState, {
|
|
4607
|
-
icon: "\u2605",
|
|
4608
|
-
title: "No skills found",
|
|
4609
|
-
get description() {
|
|
4610
|
-
return searchQuery() || selectedCategory() ? "Try a different search or category" : "No skills loaded yet";
|
|
4611
|
-
},
|
|
4612
|
-
action: {
|
|
4613
|
-
label: "Clear Filter",
|
|
4614
|
-
key: "Esc"
|
|
4615
|
-
}
|
|
4616
|
-
});
|
|
4992
|
+
return viewMode() === "list";
|
|
4617
4993
|
},
|
|
4618
4994
|
get children() {
|
|
4619
4995
|
return [(() => {
|
|
4620
|
-
var _el$
|
|
4621
|
-
insertNode(_el$
|
|
4622
|
-
|
|
4623
|
-
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4996
|
+
var _el$24 = createElement("box"), _el$25 = createElement("text");
|
|
4997
|
+
insertNode(_el$24, _el$25);
|
|
4998
|
+
setProp(_el$24, "flexDirection", "row");
|
|
4999
|
+
setProp(_el$24, "marginBottom", 1);
|
|
5000
|
+
insertNode(_el$25, createTextNode(`Categories: `));
|
|
5001
|
+
insert(_el$24, createComponent2(For, {
|
|
5002
|
+
each: CATEGORIES,
|
|
5003
|
+
children: (cat, idx) => (() => {
|
|
5004
|
+
var _el$66 = createElement("text"), _el$67 = createTextNode(`[`), _el$68 = createTextNode(`]`), _el$69 = createTextNode(` `);
|
|
5005
|
+
insertNode(_el$66, _el$67);
|
|
5006
|
+
insertNode(_el$66, _el$68);
|
|
5007
|
+
insertNode(_el$66, _el$69);
|
|
5008
|
+
insert(_el$66, () => idx() + 1, _el$68);
|
|
5009
|
+
insert(_el$66, () => cat.name, _el$69);
|
|
5010
|
+
effect((_$p) => setProp(_el$66, "fg", selectedCategory() === cat.tag ? terminalColors.accent : terminalColors.textMuted, _$p));
|
|
5011
|
+
return _el$66;
|
|
5012
|
+
})()
|
|
5013
|
+
}), null);
|
|
5014
|
+
effect((_$p) => setProp(_el$25, "fg", terminalColors.text, _$p));
|
|
5015
|
+
return _el$24;
|
|
5016
|
+
})(), (() => {
|
|
5017
|
+
var _el$27 = createElement("text");
|
|
5018
|
+
insertNode(_el$27, createTextNode(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`));
|
|
5019
|
+
effect((_$p) => setProp(_el$27, "fg", terminalColors.textMuted, _$p));
|
|
4640
5020
|
return _el$27;
|
|
4641
5021
|
})(), (() => {
|
|
4642
|
-
var _el$
|
|
4643
|
-
insertNode(_el$
|
|
4644
|
-
return _el$
|
|
5022
|
+
var _el$29 = createElement("text");
|
|
5023
|
+
insertNode(_el$29, createTextNode(` `));
|
|
5024
|
+
return _el$29;
|
|
4645
5025
|
})(), createComponent2(Show, {
|
|
4646
5026
|
get when() {
|
|
4647
|
-
return
|
|
5027
|
+
return filteredSkills().length > 0;
|
|
4648
5028
|
},
|
|
4649
|
-
get
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
5029
|
+
get fallback() {
|
|
5030
|
+
return createComponent2(EmptyState, {
|
|
5031
|
+
icon: "\u2605",
|
|
5032
|
+
title: "No skills found",
|
|
5033
|
+
get description() {
|
|
5034
|
+
return searchQuery() || selectedCategory() ? "Try a different search or category" : "No skills loaded yet";
|
|
5035
|
+
},
|
|
5036
|
+
action: {
|
|
5037
|
+
label: "Clear Filter",
|
|
5038
|
+
key: "Esc"
|
|
5039
|
+
}
|
|
5040
|
+
});
|
|
4660
5041
|
},
|
|
4661
|
-
children
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
insertNode(_el$
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
insertNode(_el$
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
insert(_el$53, () => isSelected() ? "\u25B8 " : " ");
|
|
4675
|
-
setProp(_el$54, "width", 25);
|
|
4676
|
-
insert(_el$54, () => skill.name);
|
|
4677
|
-
insert(_el$55, () => skill.repoName);
|
|
4678
|
-
insert(_el$51, createComponent2(Show, {
|
|
4679
|
-
get when() {
|
|
4680
|
-
return skill.description;
|
|
4681
|
-
},
|
|
4682
|
-
get children() {
|
|
4683
|
-
var _el$56 = createElement("text"), _el$57 = createTextNode(` `);
|
|
4684
|
-
insertNode(_el$56, _el$57);
|
|
4685
|
-
insert(_el$56, () => skill.description?.slice(0, 50), null);
|
|
4686
|
-
insert(_el$56, () => (skill.description?.length || 0) > 50 ? "..." : "", null);
|
|
4687
|
-
effect((_$p) => setProp(_el$56, "fg", terminalColors.textMuted, _$p));
|
|
4688
|
-
return _el$56;
|
|
4689
|
-
}
|
|
4690
|
-
}), null);
|
|
5042
|
+
get children() {
|
|
5043
|
+
return [(() => {
|
|
5044
|
+
var _el$31 = createElement("text"), _el$32 = createElement("b"), _el$33 = createTextNode(` `), _el$34 = createElement("text"), _el$35 = createTextNode(`(`), _el$36 = createTextNode(` results)`);
|
|
5045
|
+
insertNode(_el$31, _el$32);
|
|
5046
|
+
insertNode(_el$31, _el$33);
|
|
5047
|
+
insertNode(_el$31, _el$34);
|
|
5048
|
+
insert(_el$32, (() => {
|
|
5049
|
+
var _c$ = memo2(() => !!selectedCategory());
|
|
5050
|
+
return () => _c$() ? `${selectedCategory()} Skills` : "Featured Skills";
|
|
5051
|
+
})());
|
|
5052
|
+
insertNode(_el$34, _el$35);
|
|
5053
|
+
insertNode(_el$34, _el$36);
|
|
5054
|
+
insert(_el$34, () => filteredSkills().length, _el$36);
|
|
4691
5055
|
effect((_p$) => {
|
|
4692
|
-
var _v$6 =
|
|
4693
|
-
_v$6 !== _p$.e && (_p$.e = setProp(_el$
|
|
4694
|
-
_v$7 !== _p$.t && (_p$.t = setProp(_el$
|
|
4695
|
-
_v$8 !== _p$.a && (_p$.a = setProp(_el$55, "fg", _v$8, _p$.a));
|
|
5056
|
+
var _v$6 = terminalColors.text, _v$7 = terminalColors.textMuted;
|
|
5057
|
+
_v$6 !== _p$.e && (_p$.e = setProp(_el$31, "fg", _v$6, _p$.e));
|
|
5058
|
+
_v$7 !== _p$.t && (_p$.t = setProp(_el$34, "fg", _v$7, _p$.t));
|
|
4696
5059
|
return _p$;
|
|
4697
5060
|
}, {
|
|
4698
5061
|
e: void 0,
|
|
4699
|
-
t: void 0
|
|
4700
|
-
a: void 0
|
|
5062
|
+
t: void 0
|
|
4701
5063
|
});
|
|
4702
|
-
return _el$
|
|
4703
|
-
})()
|
|
5064
|
+
return _el$31;
|
|
5065
|
+
})(), (() => {
|
|
5066
|
+
var _el$37 = createElement("text");
|
|
5067
|
+
insertNode(_el$37, createTextNode(` `));
|
|
5068
|
+
return _el$37;
|
|
5069
|
+
})(), createComponent2(Show, {
|
|
5070
|
+
get when() {
|
|
5071
|
+
return skillsWindow().start > 0;
|
|
5072
|
+
},
|
|
5073
|
+
get children() {
|
|
5074
|
+
var _el$39 = createElement("text"), _el$40 = createTextNode(` \u25B2 `), _el$41 = createTextNode(` more`);
|
|
5075
|
+
insertNode(_el$39, _el$40);
|
|
5076
|
+
insertNode(_el$39, _el$41);
|
|
5077
|
+
insert(_el$39, () => skillsWindow().start, _el$41);
|
|
5078
|
+
effect((_$p) => setProp(_el$39, "fg", terminalColors.textMuted, _$p));
|
|
5079
|
+
return _el$39;
|
|
5080
|
+
}
|
|
5081
|
+
}), createComponent2(For, {
|
|
5082
|
+
get each() {
|
|
5083
|
+
return skillsWindow().items;
|
|
5084
|
+
},
|
|
5085
|
+
children: (skill, idx) => {
|
|
5086
|
+
const originalIndex = () => skillsWindow().start + idx();
|
|
5087
|
+
const isSelected = () => originalIndex() === selectedIndex();
|
|
5088
|
+
return (() => {
|
|
5089
|
+
var _el$70 = createElement("box"), _el$71 = createElement("box"), _el$72 = createElement("text"), _el$73 = createElement("text"), _el$74 = createElement("text");
|
|
5090
|
+
insertNode(_el$70, _el$71);
|
|
5091
|
+
setProp(_el$70, "flexDirection", "column");
|
|
5092
|
+
setProp(_el$70, "marginBottom", 1);
|
|
5093
|
+
insertNode(_el$71, _el$72);
|
|
5094
|
+
insertNode(_el$71, _el$73);
|
|
5095
|
+
insertNode(_el$71, _el$74);
|
|
5096
|
+
setProp(_el$71, "flexDirection", "row");
|
|
5097
|
+
setProp(_el$72, "width", 3);
|
|
5098
|
+
insert(_el$72, () => isSelected() ? "\u25B8 " : " ");
|
|
5099
|
+
setProp(_el$73, "width", 25);
|
|
5100
|
+
insert(_el$73, () => skill.name);
|
|
5101
|
+
insert(_el$74, () => skill.repoName);
|
|
5102
|
+
insert(_el$70, createComponent2(Show, {
|
|
5103
|
+
get when() {
|
|
5104
|
+
return skill.description;
|
|
5105
|
+
},
|
|
5106
|
+
get children() {
|
|
5107
|
+
var _el$75 = createElement("text"), _el$76 = createTextNode(` `);
|
|
5108
|
+
insertNode(_el$75, _el$76);
|
|
5109
|
+
insert(_el$75, () => skill.description?.slice(0, 50), null);
|
|
5110
|
+
insert(_el$75, () => (skill.description?.length || 0) > 50 ? "..." : "", null);
|
|
5111
|
+
effect((_$p) => setProp(_el$75, "fg", terminalColors.textMuted, _$p));
|
|
5112
|
+
return _el$75;
|
|
5113
|
+
}
|
|
5114
|
+
}), null);
|
|
5115
|
+
effect((_p$) => {
|
|
5116
|
+
var _v$8 = isSelected() ? terminalColors.accent : terminalColors.text, _v$9 = isSelected() ? terminalColors.accent : terminalColors.text, _v$0 = terminalColors.textMuted;
|
|
5117
|
+
_v$8 !== _p$.e && (_p$.e = setProp(_el$72, "fg", _v$8, _p$.e));
|
|
5118
|
+
_v$9 !== _p$.t && (_p$.t = setProp(_el$73, "fg", _v$9, _p$.t));
|
|
5119
|
+
_v$0 !== _p$.a && (_p$.a = setProp(_el$74, "fg", _v$0, _p$.a));
|
|
5120
|
+
return _p$;
|
|
5121
|
+
}, {
|
|
5122
|
+
e: void 0,
|
|
5123
|
+
t: void 0,
|
|
5124
|
+
a: void 0
|
|
5125
|
+
});
|
|
5126
|
+
return _el$70;
|
|
5127
|
+
})();
|
|
5128
|
+
}
|
|
5129
|
+
}), createComponent2(Show, {
|
|
5130
|
+
get when() {
|
|
5131
|
+
return skillsWindow().start + maxVisible() < filteredSkills().length;
|
|
5132
|
+
},
|
|
5133
|
+
get children() {
|
|
5134
|
+
var _el$42 = createElement("text"), _el$43 = createTextNode(`\u25BC `), _el$44 = createTextNode(` more`);
|
|
5135
|
+
insertNode(_el$42, _el$43);
|
|
5136
|
+
insertNode(_el$42, _el$44);
|
|
5137
|
+
insert(_el$42, () => filteredSkills().length - skillsWindow().start - maxVisible(), _el$44);
|
|
5138
|
+
effect((_$p) => setProp(_el$42, "fg", terminalColors.textMuted, _$p));
|
|
5139
|
+
return _el$42;
|
|
5140
|
+
}
|
|
5141
|
+
})];
|
|
4704
5142
|
}
|
|
4705
|
-
})
|
|
5143
|
+
})];
|
|
5144
|
+
}
|
|
5145
|
+
}), createComponent2(Show, {
|
|
5146
|
+
get when() {
|
|
5147
|
+
return viewMode() === "tree";
|
|
5148
|
+
},
|
|
5149
|
+
get children() {
|
|
5150
|
+
return [(() => {
|
|
5151
|
+
var _el$45 = createElement("box"), _el$46 = createElement("text"), _el$47 = createTextNode(`\u{1F4C1} `);
|
|
5152
|
+
insertNode(_el$45, _el$46);
|
|
5153
|
+
setProp(_el$45, "flexDirection", "row");
|
|
5154
|
+
setProp(_el$45, "marginBottom", 1);
|
|
5155
|
+
insertNode(_el$46, _el$47);
|
|
5156
|
+
insert(_el$46, (() => {
|
|
5157
|
+
var _c$2 = memo2(() => currentPath().length === 0);
|
|
5158
|
+
return () => _c$2() ? "Root" : currentPath().join(" > ");
|
|
5159
|
+
})(), null);
|
|
5160
|
+
effect((_$p) => setProp(_el$46, "fg", terminalColors.accent, _$p));
|
|
5161
|
+
return _el$45;
|
|
5162
|
+
})(), (() => {
|
|
5163
|
+
var _el$48 = createElement("text");
|
|
5164
|
+
insertNode(_el$48, createTextNode(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`));
|
|
5165
|
+
effect((_$p) => setProp(_el$48, "fg", terminalColors.textMuted, _$p));
|
|
5166
|
+
return _el$48;
|
|
5167
|
+
})(), (() => {
|
|
5168
|
+
var _el$50 = createElement("text");
|
|
5169
|
+
insertNode(_el$50, createTextNode(` `));
|
|
5170
|
+
return _el$50;
|
|
5171
|
+
})(), createComponent2(Show, {
|
|
4706
5172
|
get when() {
|
|
4707
|
-
return
|
|
5173
|
+
return treeItems().length > 0;
|
|
5174
|
+
},
|
|
5175
|
+
get fallback() {
|
|
5176
|
+
return createComponent2(EmptyState, {
|
|
5177
|
+
icon: "\u{1F333}",
|
|
5178
|
+
title: "Empty category",
|
|
5179
|
+
description: "This category has no skills",
|
|
5180
|
+
action: {
|
|
5181
|
+
label: "Go Back",
|
|
5182
|
+
key: "Esc"
|
|
5183
|
+
}
|
|
5184
|
+
});
|
|
4708
5185
|
},
|
|
4709
5186
|
get children() {
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4715
|
-
|
|
5187
|
+
return [createComponent2(Show, {
|
|
5188
|
+
get when() {
|
|
5189
|
+
return treeWindow().start > 0;
|
|
5190
|
+
},
|
|
5191
|
+
get children() {
|
|
5192
|
+
var _el$52 = createElement("text"), _el$53 = createTextNode(` \u25B2 `), _el$54 = createTextNode(` more`);
|
|
5193
|
+
insertNode(_el$52, _el$53);
|
|
5194
|
+
insertNode(_el$52, _el$54);
|
|
5195
|
+
insert(_el$52, () => treeWindow().start, _el$54);
|
|
5196
|
+
effect((_$p) => setProp(_el$52, "fg", terminalColors.textMuted, _$p));
|
|
5197
|
+
return _el$52;
|
|
5198
|
+
}
|
|
5199
|
+
}), createComponent2(For, {
|
|
5200
|
+
get each() {
|
|
5201
|
+
return treeWindow().items;
|
|
5202
|
+
},
|
|
5203
|
+
children: (item, idx) => {
|
|
5204
|
+
const originalIndex = () => treeWindow().start + idx();
|
|
5205
|
+
const isSelected = () => originalIndex() === selectedIndex();
|
|
5206
|
+
const isCategory = () => "isCategory" in item && item.isCategory;
|
|
5207
|
+
const isSkill = () => "type" in item && item.type === "skill";
|
|
5208
|
+
return (() => {
|
|
5209
|
+
var _el$77 = createElement("box"), _el$78 = createElement("text"), _el$79 = createElement("text"), _el$80 = createElement("text");
|
|
5210
|
+
insertNode(_el$77, _el$78);
|
|
5211
|
+
insertNode(_el$77, _el$79);
|
|
5212
|
+
insertNode(_el$77, _el$80);
|
|
5213
|
+
setProp(_el$77, "flexDirection", "row");
|
|
5214
|
+
setProp(_el$77, "marginBottom", 1);
|
|
5215
|
+
setProp(_el$78, "width", 3);
|
|
5216
|
+
insert(_el$78, () => isSelected() ? "\u25B8 " : " ");
|
|
5217
|
+
setProp(_el$79, "width", 3);
|
|
5218
|
+
insert(_el$79, (() => {
|
|
5219
|
+
var _c$3 = memo2(() => !!isCategory());
|
|
5220
|
+
return () => _c$3() ? "\u{1F4C1}" : isSkill() ? "\u{1F4C4}" : "\u{1F4C1}";
|
|
5221
|
+
})());
|
|
5222
|
+
setProp(_el$80, "width", 25);
|
|
5223
|
+
insert(_el$80, (() => {
|
|
5224
|
+
var _c$4 = memo2(() => "name" in item);
|
|
5225
|
+
return () => _c$4() ? item.name : "";
|
|
5226
|
+
})());
|
|
5227
|
+
insert(_el$77, createComponent2(Show, {
|
|
5228
|
+
get when() {
|
|
5229
|
+
return memo2(() => !!isCategory())() && "skillCount" in item;
|
|
5230
|
+
},
|
|
5231
|
+
get children() {
|
|
5232
|
+
var _el$81 = createElement("text"), _el$82 = createTextNode(`(`), _el$83 = createTextNode(` skills)`);
|
|
5233
|
+
insertNode(_el$81, _el$82);
|
|
5234
|
+
insertNode(_el$81, _el$83);
|
|
5235
|
+
insert(_el$81, () => item.skillCount, _el$83);
|
|
5236
|
+
effect((_$p) => setProp(_el$81, "fg", terminalColors.textMuted, _$p));
|
|
5237
|
+
return _el$81;
|
|
5238
|
+
}
|
|
5239
|
+
}), null);
|
|
5240
|
+
effect((_p$) => {
|
|
5241
|
+
var _v$1 = isSelected() ? terminalColors.accent : terminalColors.text, _v$10 = isSelected() ? terminalColors.accent : terminalColors.textMuted, _v$11 = isSelected() ? terminalColors.accent : terminalColors.text;
|
|
5242
|
+
_v$1 !== _p$.e && (_p$.e = setProp(_el$78, "fg", _v$1, _p$.e));
|
|
5243
|
+
_v$10 !== _p$.t && (_p$.t = setProp(_el$79, "fg", _v$10, _p$.t));
|
|
5244
|
+
_v$11 !== _p$.a && (_p$.a = setProp(_el$80, "fg", _v$11, _p$.a));
|
|
5245
|
+
return _p$;
|
|
5246
|
+
}, {
|
|
5247
|
+
e: void 0,
|
|
5248
|
+
t: void 0,
|
|
5249
|
+
a: void 0
|
|
5250
|
+
});
|
|
5251
|
+
return _el$77;
|
|
5252
|
+
})();
|
|
5253
|
+
}
|
|
5254
|
+
}), createComponent2(Show, {
|
|
5255
|
+
get when() {
|
|
5256
|
+
return treeWindow().start + maxVisible() < treeItems().length;
|
|
5257
|
+
},
|
|
5258
|
+
get children() {
|
|
5259
|
+
var _el$55 = createElement("text"), _el$56 = createTextNode(`\u25BC `), _el$57 = createTextNode(` more`);
|
|
5260
|
+
insertNode(_el$55, _el$56);
|
|
5261
|
+
insertNode(_el$55, _el$57);
|
|
5262
|
+
insert(_el$55, () => treeItems().length - treeWindow().start - maxVisible(), _el$57);
|
|
5263
|
+
effect((_$p) => setProp(_el$55, "fg", terminalColors.textMuted, _$p));
|
|
5264
|
+
return _el$55;
|
|
5265
|
+
}
|
|
5266
|
+
})];
|
|
4716
5267
|
}
|
|
4717
5268
|
})];
|
|
4718
5269
|
}
|
|
4719
5270
|
}), (() => {
|
|
4720
|
-
var _el$
|
|
4721
|
-
insertNode(_el$
|
|
4722
|
-
return _el$
|
|
5271
|
+
var _el$58 = createElement("text");
|
|
5272
|
+
insertNode(_el$58, createTextNode(` `));
|
|
5273
|
+
return _el$58;
|
|
4723
5274
|
})(), (() => {
|
|
4724
|
-
var _el$
|
|
4725
|
-
insertNode(_el$
|
|
4726
|
-
effect((_$p) => setProp(_el$
|
|
4727
|
-
return _el$
|
|
4728
|
-
})(), (
|
|
4729
|
-
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
5275
|
+
var _el$60 = createElement("text");
|
|
5276
|
+
insertNode(_el$60, createTextNode(`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`));
|
|
5277
|
+
effect((_$p) => setProp(_el$60, "fg", terminalColors.textMuted, _$p));
|
|
5278
|
+
return _el$60;
|
|
5279
|
+
})(), createComponent2(Show, {
|
|
5280
|
+
get when() {
|
|
5281
|
+
return viewMode() === "list";
|
|
5282
|
+
},
|
|
5283
|
+
get children() {
|
|
5284
|
+
var _el$62 = createElement("text");
|
|
5285
|
+
insertNode(_el$62, createTextNode(`j/k navigate Enter install 1-5 category v tree view r refresh Esc back`));
|
|
5286
|
+
effect((_$p) => setProp(_el$62, "fg", terminalColors.textMuted, _$p));
|
|
5287
|
+
return _el$62;
|
|
5288
|
+
}
|
|
5289
|
+
}), createComponent2(Show, {
|
|
5290
|
+
get when() {
|
|
5291
|
+
return viewMode() === "tree";
|
|
5292
|
+
},
|
|
5293
|
+
get children() {
|
|
5294
|
+
var _el$64 = createElement("text");
|
|
5295
|
+
insertNode(_el$64, createTextNode(`j/k \u2191\u2193 navigate Enter/\u2192 open \u2190/Esc back v list view r refresh`));
|
|
5296
|
+
effect((_$p) => setProp(_el$64, "fg", terminalColors.textMuted, _$p));
|
|
5297
|
+
return _el$64;
|
|
5298
|
+
}
|
|
5299
|
+
})];
|
|
4734
5300
|
}
|
|
4735
5301
|
}), null);
|
|
4736
5302
|
return _el$;
|
|
4737
5303
|
})();
|
|
4738
5304
|
}
|
|
4739
5305
|
|
|
4740
|
-
// src/services/recommend.service.ts
|
|
4741
|
-
async function getRecommendations(_projectPath, _options) {
|
|
4742
|
-
return {
|
|
4743
|
-
recommendations: [],
|
|
4744
|
-
analyzing: false,
|
|
4745
|
-
loading: false,
|
|
4746
|
-
error: null,
|
|
4747
|
-
lastAnalyzed: (/* @__PURE__ */ new Date()).toISOString()
|
|
4748
|
-
};
|
|
4749
|
-
}
|
|
4750
|
-
async function analyzeProject(_projectPath) {
|
|
4751
|
-
return {
|
|
4752
|
-
languages: ["TypeScript", "JavaScript"],
|
|
4753
|
-
frameworks: ["Solid.js"],
|
|
4754
|
-
libraries: ["@opentui/solid"],
|
|
4755
|
-
patterns: []
|
|
4756
|
-
};
|
|
4757
|
-
}
|
|
4758
|
-
|
|
4759
5306
|
// src/screens/Recommend.tsx
|
|
4760
5307
|
function Recommend(props) {
|
|
4761
5308
|
const [state, setState] = createSignal({
|
|
@@ -5178,59 +5725,11 @@ function Recommend(props) {
|
|
|
5178
5725
|
})();
|
|
5179
5726
|
}
|
|
5180
5727
|
|
|
5181
|
-
// src/services/translator.service.ts
|
|
5182
|
-
function getSupportedAgents() {
|
|
5183
|
-
return [
|
|
5184
|
-
"claude-code",
|
|
5185
|
-
"cursor",
|
|
5186
|
-
"windsurf",
|
|
5187
|
-
"github-copilot",
|
|
5188
|
-
"codex",
|
|
5189
|
-
"gemini-cli",
|
|
5190
|
-
"opencode",
|
|
5191
|
-
"universal"
|
|
5192
|
-
];
|
|
5193
|
-
}
|
|
5194
|
-
function checkCanTranslate(_from, _to) {
|
|
5195
|
-
return true;
|
|
5196
|
-
}
|
|
5197
|
-
function translate(_content, targetAgent, options) {
|
|
5198
|
-
return {
|
|
5199
|
-
sourceFormat: options?.sourceFilename || "SKILL.md",
|
|
5200
|
-
targetAgent,
|
|
5201
|
-
success: true,
|
|
5202
|
-
content: "",
|
|
5203
|
-
filename: void 0,
|
|
5204
|
-
warnings: [],
|
|
5205
|
-
incompatible: []
|
|
5206
|
-
};
|
|
5207
|
-
}
|
|
5208
|
-
function previewTranslation(_content, _targetAgent) {
|
|
5209
|
-
return {
|
|
5210
|
-
preview: "",
|
|
5211
|
-
compatible: true,
|
|
5212
|
-
issues: []
|
|
5213
|
-
};
|
|
5214
|
-
}
|
|
5215
|
-
function getAgentFormatInfo(agent) {
|
|
5216
|
-
const formatMap = {
|
|
5217
|
-
"claude-code": { extension: ".md", formatName: "SKILL.md", description: "Claude Code skills format" },
|
|
5218
|
-
cursor: { extension: ".mdc", formatName: "MDC", description: "Cursor rules format" },
|
|
5219
|
-
windsurf: { extension: ".md", formatName: "Markdown", description: "Windsurf rules format" },
|
|
5220
|
-
"github-copilot": { extension: ".md", formatName: "Markdown", description: "GitHub Copilot instructions" },
|
|
5221
|
-
codex: { extension: ".md", formatName: "Markdown", description: "Codex instructions" },
|
|
5222
|
-
"gemini-cli": { extension: ".md", formatName: "Markdown", description: "Gemini CLI instructions" },
|
|
5223
|
-
opencode: { extension: ".md", formatName: "Markdown", description: "OpenCode instructions" },
|
|
5224
|
-
universal: { extension: ".md", formatName: "SKILL.md", description: "Universal skill format" }
|
|
5225
|
-
};
|
|
5226
|
-
return formatMap[agent] || { extension: ".md", formatName: "Markdown", description: "Unknown format" };
|
|
5227
|
-
}
|
|
5228
|
-
|
|
5229
5728
|
// src/screens/Translate.tsx
|
|
5230
5729
|
import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
|
|
5231
|
-
import { join as
|
|
5730
|
+
import { join as join4 } from "path";
|
|
5232
5731
|
function readSkillContent(skillPath) {
|
|
5233
|
-
const skillMdPath =
|
|
5732
|
+
const skillMdPath = join4(skillPath, "SKILL.md");
|
|
5234
5733
|
if (existsSync2(skillMdPath)) {
|
|
5235
5734
|
return readFileSync3(skillMdPath, "utf-8");
|
|
5236
5735
|
}
|
|
@@ -5758,37 +6257,6 @@ function Translate(props) {
|
|
|
5758
6257
|
})();
|
|
5759
6258
|
}
|
|
5760
6259
|
|
|
5761
|
-
// src/services/context.service.ts
|
|
5762
|
-
async function loadProjectContext() {
|
|
5763
|
-
return {
|
|
5764
|
-
context: {
|
|
5765
|
-
projectName: "skillkit",
|
|
5766
|
-
rootPath: process.cwd(),
|
|
5767
|
-
languages: ["TypeScript", "JavaScript"],
|
|
5768
|
-
frameworks: ["Solid.js", "React"],
|
|
5769
|
-
libraries: ["@opentui/solid"],
|
|
5770
|
-
patterns: {},
|
|
5771
|
-
lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
|
|
5772
|
-
},
|
|
5773
|
-
stack: null,
|
|
5774
|
-
loading: false,
|
|
5775
|
-
analyzing: false,
|
|
5776
|
-
error: null
|
|
5777
|
-
};
|
|
5778
|
-
}
|
|
5779
|
-
async function analyzeProjectContext() {
|
|
5780
|
-
return loadProjectContext();
|
|
5781
|
-
}
|
|
5782
|
-
async function refreshContext() {
|
|
5783
|
-
return loadProjectContext();
|
|
5784
|
-
}
|
|
5785
|
-
async function exportContext(_path, _format) {
|
|
5786
|
-
return true;
|
|
5787
|
-
}
|
|
5788
|
-
async function getStackTags() {
|
|
5789
|
-
return ["typescript", "solid-js", "cli"];
|
|
5790
|
-
}
|
|
5791
|
-
|
|
5792
6260
|
// src/screens/Context.tsx
|
|
5793
6261
|
function Context(props) {
|
|
5794
6262
|
const [state, setState] = createSignal({
|
|
@@ -6286,18 +6754,6 @@ function Context(props) {
|
|
|
6286
6754
|
})();
|
|
6287
6755
|
}
|
|
6288
6756
|
|
|
6289
|
-
// src/services/executor.service.ts
|
|
6290
|
-
async function getAgentAvailability() {
|
|
6291
|
-
return [
|
|
6292
|
-
{ agent: "claude-code", available: true },
|
|
6293
|
-
{ agent: "cursor", available: false },
|
|
6294
|
-
{ agent: "codex", available: false }
|
|
6295
|
-
];
|
|
6296
|
-
}
|
|
6297
|
-
async function executeSkillWithAgent(_skillPath, _agent, _options) {
|
|
6298
|
-
return { success: true, output: "Executed successfully" };
|
|
6299
|
-
}
|
|
6300
|
-
|
|
6301
6757
|
// src/screens/Sync.tsx
|
|
6302
6758
|
function Sync(props) {
|
|
6303
6759
|
const [agents, setAgents] = createSignal([]);
|
|
@@ -6670,26 +7126,6 @@ function Sync(props) {
|
|
|
6670
7126
|
})();
|
|
6671
7127
|
}
|
|
6672
7128
|
|
|
6673
|
-
// src/services/memory.service.ts
|
|
6674
|
-
async function loadMemories() {
|
|
6675
|
-
return {
|
|
6676
|
-
entries: [],
|
|
6677
|
-
status: { projectMemoryExists: false, globalMemoryExists: true },
|
|
6678
|
-
paths: { projectMemoryDir: ".skillkit/memory", globalMemoryDir: "~/.skillkit/memory" },
|
|
6679
|
-
loading: false,
|
|
6680
|
-
error: null
|
|
6681
|
-
};
|
|
6682
|
-
}
|
|
6683
|
-
async function deleteMemoryEntry(_key) {
|
|
6684
|
-
return true;
|
|
6685
|
-
}
|
|
6686
|
-
async function clearMemory(_path, _scope) {
|
|
6687
|
-
return true;
|
|
6688
|
-
}
|
|
6689
|
-
async function initializeMemory() {
|
|
6690
|
-
return true;
|
|
6691
|
-
}
|
|
6692
|
-
|
|
6693
7129
|
// src/screens/Memory.tsx
|
|
6694
7130
|
function Memory(props) {
|
|
6695
7131
|
const [state, setState] = createSignal({
|
|
@@ -7055,20 +7491,6 @@ function Memory(props) {
|
|
|
7055
7491
|
})();
|
|
7056
7492
|
}
|
|
7057
7493
|
|
|
7058
|
-
// src/services/workflow.service.ts
|
|
7059
|
-
async function loadWorkflowsList(_projectPath) {
|
|
7060
|
-
return {
|
|
7061
|
-
workflows: [],
|
|
7062
|
-
current: null,
|
|
7063
|
-
progress: null,
|
|
7064
|
-
loading: false,
|
|
7065
|
-
error: null
|
|
7066
|
-
};
|
|
7067
|
-
}
|
|
7068
|
-
async function executeWorkflow(_name, _projectPath, _onProgress) {
|
|
7069
|
-
return { success: true, completedWaves: 0, totalWaves: 0, errors: [] };
|
|
7070
|
-
}
|
|
7071
|
-
|
|
7072
7494
|
// src/screens/Workflow.tsx
|
|
7073
7495
|
function Workflow(props) {
|
|
7074
7496
|
const [state, setState] = createSignal({
|
|
@@ -8021,20 +8443,6 @@ function History(props) {
|
|
|
8021
8443
|
})();
|
|
8022
8444
|
}
|
|
8023
8445
|
|
|
8024
|
-
// src/services/team.service.ts
|
|
8025
|
-
async function loadTeamConfig(_projectPath) {
|
|
8026
|
-
return {
|
|
8027
|
-
config: null,
|
|
8028
|
-
members: [],
|
|
8029
|
-
sharedSkills: [],
|
|
8030
|
-
loading: false,
|
|
8031
|
-
error: null
|
|
8032
|
-
};
|
|
8033
|
-
}
|
|
8034
|
-
async function initializeTeam(_teamName, _projectPath) {
|
|
8035
|
-
return true;
|
|
8036
|
-
}
|
|
8037
|
-
|
|
8038
8446
|
// src/screens/Team.tsx
|
|
8039
8447
|
function Team(props) {
|
|
8040
8448
|
const [state, setState] = createSignal({
|
|
@@ -8540,25 +8948,6 @@ function Team(props) {
|
|
|
8540
8948
|
})();
|
|
8541
8949
|
}
|
|
8542
8950
|
|
|
8543
|
-
// src/services/plugin.service.ts
|
|
8544
|
-
async function loadPluginsList(_projectPath) {
|
|
8545
|
-
return {
|
|
8546
|
-
plugins: [],
|
|
8547
|
-
manager: null,
|
|
8548
|
-
loading: false,
|
|
8549
|
-
error: null
|
|
8550
|
-
};
|
|
8551
|
-
}
|
|
8552
|
-
async function enablePlugin(_name, _manager) {
|
|
8553
|
-
return true;
|
|
8554
|
-
}
|
|
8555
|
-
async function disablePlugin(_name, _manager) {
|
|
8556
|
-
return true;
|
|
8557
|
-
}
|
|
8558
|
-
async function getPluginInfo(_name, _manager) {
|
|
8559
|
-
return null;
|
|
8560
|
-
}
|
|
8561
|
-
|
|
8562
8951
|
// src/screens/Plugins.tsx
|
|
8563
8952
|
function Plugins(props) {
|
|
8564
8953
|
const [state, setState] = createSignal({
|
|
@@ -8904,26 +9293,6 @@ function Plugins(props) {
|
|
|
8904
9293
|
})();
|
|
8905
9294
|
}
|
|
8906
9295
|
|
|
8907
|
-
// src/services/methodology.service.ts
|
|
8908
|
-
async function loadMethodologies() {
|
|
8909
|
-
return {
|
|
8910
|
-
packs: [],
|
|
8911
|
-
installedPacks: [],
|
|
8912
|
-
manager: null,
|
|
8913
|
-
loading: false,
|
|
8914
|
-
error: null
|
|
8915
|
-
};
|
|
8916
|
-
}
|
|
8917
|
-
async function installMethodologyPack(_name) {
|
|
8918
|
-
return true;
|
|
8919
|
-
}
|
|
8920
|
-
async function uninstallMethodologyPack(_name) {
|
|
8921
|
-
return true;
|
|
8922
|
-
}
|
|
8923
|
-
async function syncMethodologyPack(_name) {
|
|
8924
|
-
return true;
|
|
8925
|
-
}
|
|
8926
|
-
|
|
8927
9296
|
// src/screens/Methodology.tsx
|
|
8928
9297
|
function Methodology(props) {
|
|
8929
9298
|
const [state, setState] = createSignal({
|
|
@@ -9394,30 +9763,6 @@ function ProgressBar(props) {
|
|
|
9394
9763
|
})();
|
|
9395
9764
|
}
|
|
9396
9765
|
|
|
9397
|
-
// src/services/plan.service.ts
|
|
9398
|
-
async function loadPlansList(_projectPath) {
|
|
9399
|
-
return {
|
|
9400
|
-
plans: [],
|
|
9401
|
-
current: null,
|
|
9402
|
-
validation: null,
|
|
9403
|
-
execution: null,
|
|
9404
|
-
loading: false,
|
|
9405
|
-
error: null
|
|
9406
|
-
};
|
|
9407
|
-
}
|
|
9408
|
-
async function loadPlan(_planPath) {
|
|
9409
|
-
return null;
|
|
9410
|
-
}
|
|
9411
|
-
async function validatePlan(_plan) {
|
|
9412
|
-
return { valid: true, errors: [], warnings: [], issues: [] };
|
|
9413
|
-
}
|
|
9414
|
-
async function executePlan(_plan, _projectPath, _onEvent, _dryRun) {
|
|
9415
|
-
return { success: true, completedTasks: [], failedTasks: [], totalTasks: 0, errors: [] };
|
|
9416
|
-
}
|
|
9417
|
-
async function executePlanDryRun(plan, projectPath, onEvent) {
|
|
9418
|
-
return executePlan(plan, projectPath, onEvent, true);
|
|
9419
|
-
}
|
|
9420
|
-
|
|
9421
9766
|
// src/screens/Plan.tsx
|
|
9422
9767
|
function Plan(props) {
|
|
9423
9768
|
const [state, setState] = createSignal({
|