@agents-inc/cli 0.68.0 → 0.71.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/CHANGELOG.md +34 -0
- package/dist/chunk-2MHSOPIU.js +84 -0
- package/dist/chunk-2MHSOPIU.js.map +1 -0
- package/dist/{chunk-VTRVAXUM.js → chunk-2VT2DMD7.js} +6 -6
- package/dist/{chunk-KFDTVSIC.js → chunk-6YMW4HMX.js} +2 -2
- package/dist/{chunk-L5LD3ZSR.js → chunk-AX6MMYAZ.js} +4 -4
- package/dist/{chunk-45R64U2S.js → chunk-CADG5WWP.js} +13 -11
- package/dist/chunk-CADG5WWP.js.map +1 -0
- package/dist/chunk-DA3WIZ4C.js +253 -0
- package/dist/chunk-DA3WIZ4C.js.map +1 -0
- package/dist/chunk-DHBRWGRZ.js +58 -0
- package/dist/chunk-DHBRWGRZ.js.map +1 -0
- package/dist/{chunk-2JJUPWE5.js → chunk-HWVRHPXR.js} +2 -2
- package/dist/{chunk-N4D43IOO.js → chunk-J2D6OBIX.js} +26 -2
- package/dist/chunk-J2D6OBIX.js.map +1 -0
- package/dist/{chunk-KMDBOO3E.js → chunk-KANNRFY7.js} +2 -2
- package/dist/{chunk-SSGPFKS4.js → chunk-KSAGOKWT.js} +2 -2
- package/dist/{chunk-EULHBV5V.js → chunk-QOJAZI72.js} +2 -2
- package/dist/{chunk-JAWXWNIX.js → chunk-UDAHHJIM.js} +9 -9
- package/dist/{chunk-F6KEZ4Y5.js → chunk-UQM5YPPJ.js} +2 -2
- package/dist/{chunk-HADHP7XF.js → chunk-V5L532ZH.js} +6 -6
- package/dist/{chunk-RMMHVE2R.js → chunk-VUUGWE6G.js} +2 -2
- package/dist/chunk-WF5PMBIR.js +54 -0
- package/dist/chunk-WF5PMBIR.js.map +1 -0
- package/dist/{chunk-GK5CAS3A.js → chunk-X4RIMJNY.js} +2 -2
- package/dist/{chunk-QUEO6QEL.js → chunk-XB3TYSPL.js} +2 -2
- package/dist/{chunk-7LCI5PSJ.js → chunk-XMZNHLV3.js} +2 -2
- package/dist/{chunk-KBG7GYPL.js → chunk-XYRVAEI6.js} +74 -111
- package/dist/chunk-XYRVAEI6.js.map +1 -0
- package/dist/commands/build/plugins.js +2 -2
- package/dist/commands/build/stack.js +2 -2
- package/dist/commands/compile.js +2 -2
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/config/path.js +1 -1
- package/dist/commands/config/show.js +2 -2
- package/dist/commands/diff.js +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/edit.js +17 -16
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +1 -1
- package/dist/commands/import/skill.js +1 -1
- package/dist/commands/info.js +1 -1
- package/dist/commands/init.js +17 -16
- package/dist/commands/list.js +1 -1
- package/dist/commands/new/agent.js +2 -2
- package/dist/commands/new/marketplace.js +2 -2
- package/dist/commands/new/skill.js +2 -2
- package/dist/commands/outdated.js +1 -1
- package/dist/commands/search.js +1 -1
- package/dist/commands/uninstall.js +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/commands/validate.js +1 -1
- package/dist/components/common/select-list.js +11 -0
- package/dist/components/wizard/category-grid.test.js +3 -3
- package/dist/components/wizard/domain-selection.js +3 -3
- package/dist/components/wizard/search-modal.js +2 -1
- package/dist/components/wizard/search-modal.test.js +3 -2
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +3 -2
- package/dist/components/wizard/source-grid.test.js +11 -7
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +3 -3
- package/dist/components/wizard/step-agents.js +3 -3
- package/dist/components/wizard/step-agents.test.js +7 -6
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +4 -4
- package/dist/components/wizard/step-build.test.js +14 -49
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.test.js +3 -3
- package/dist/components/wizard/step-settings.js +2 -2
- package/dist/components/wizard/step-settings.test.js +5 -5
- package/dist/components/wizard/step-sources.js +7 -6
- package/dist/components/wizard/step-sources.test.js +12 -10
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +6 -6
- package/dist/components/wizard/step-stack.test.js +7 -7
- package/dist/components/wizard/wizard-layout.js +3 -3
- package/dist/components/wizard/wizard.js +16 -15
- package/dist/hooks/init.js +17 -16
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-loader-YMWWZFVD.js → source-loader-3MZ2MBOF.js} +2 -2
- package/dist/{source-manager-6G3EVTU2.js → source-manager-NEH6QXE5.js} +2 -2
- package/dist/source-manager-NEH6QXE5.js.map +1 -0
- package/dist/stores/matrix-store.test.js +14 -10
- package/dist/stores/matrix-store.test.js.map +1 -1
- package/dist/stores/wizard-store.js +2 -2
- package/dist/stores/wizard-store.test.js +28 -103
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-45R64U2S.js.map +0 -1
- package/dist/chunk-6IK2TCK7.js +0 -97
- package/dist/chunk-6IK2TCK7.js.map +0 -1
- package/dist/chunk-KBG7GYPL.js.map +0 -1
- package/dist/chunk-N4D43IOO.js.map +0 -1
- /package/dist/{chunk-VTRVAXUM.js.map → chunk-2VT2DMD7.js.map} +0 -0
- /package/dist/{chunk-KFDTVSIC.js.map → chunk-6YMW4HMX.js.map} +0 -0
- /package/dist/{chunk-L5LD3ZSR.js.map → chunk-AX6MMYAZ.js.map} +0 -0
- /package/dist/{chunk-2JJUPWE5.js.map → chunk-HWVRHPXR.js.map} +0 -0
- /package/dist/{chunk-KMDBOO3E.js.map → chunk-KANNRFY7.js.map} +0 -0
- /package/dist/{chunk-SSGPFKS4.js.map → chunk-KSAGOKWT.js.map} +0 -0
- /package/dist/{chunk-EULHBV5V.js.map → chunk-QOJAZI72.js.map} +0 -0
- /package/dist/{chunk-JAWXWNIX.js.map → chunk-UDAHHJIM.js.map} +0 -0
- /package/dist/{chunk-F6KEZ4Y5.js.map → chunk-UQM5YPPJ.js.map} +0 -0
- /package/dist/{chunk-HADHP7XF.js.map → chunk-V5L532ZH.js.map} +0 -0
- /package/dist/{chunk-RMMHVE2R.js.map → chunk-VUUGWE6G.js.map} +0 -0
- /package/dist/{chunk-GK5CAS3A.js.map → chunk-X4RIMJNY.js.map} +0 -0
- /package/dist/{chunk-QUEO6QEL.js.map → chunk-XB3TYSPL.js.map} +0 -0
- /package/dist/{chunk-7LCI5PSJ.js.map → chunk-XMZNHLV3.js.map} +0 -0
- /package/dist/{source-loader-YMWWZFVD.js.map → components/common/select-list.js.map} +0 -0
- /package/dist/{source-manager-6G3EVTU2.js.map → source-loader-3MZ2MBOF.js.map} +0 -0
package/dist/commands/edit.js
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
Wizard
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-UDAHHJIM.js";
|
|
5
|
+
import "../chunk-VUUGWE6G.js";
|
|
6
6
|
import "../chunk-SXGBPQY6.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-XB3TYSPL.js";
|
|
8
|
+
import "../chunk-V5L532ZH.js";
|
|
9
9
|
import "../chunk-HGTC76BX.js";
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-AX6MMYAZ.js";
|
|
11
|
+
import "../chunk-6YMW4HMX.js";
|
|
12
|
+
import "../chunk-7SOPVGDV.js";
|
|
13
|
+
import "../chunk-XMZNHLV3.js";
|
|
14
|
+
import "../chunk-HWVRHPXR.js";
|
|
15
|
+
import "../chunk-2VT2DMD7.js";
|
|
14
16
|
import "../chunk-K77I4XGL.js";
|
|
15
17
|
import "../chunk-52THXN5G.js";
|
|
18
|
+
import "../chunk-KANNRFY7.js";
|
|
19
|
+
import "../chunk-ZYUASJUN.js";
|
|
16
20
|
import "../chunk-KYULKBFC.js";
|
|
21
|
+
import "../chunk-2MHSOPIU.js";
|
|
17
22
|
import "../chunk-MWGDG4QN.js";
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-7SOPVGDV.js";
|
|
20
|
-
import "../chunk-6IK2TCK7.js";
|
|
23
|
+
import "../chunk-WF5PMBIR.js";
|
|
21
24
|
import "../chunk-KUV24B5M.js";
|
|
22
25
|
import "../chunk-CKPJTMNC.js";
|
|
23
26
|
import "../chunk-GG4BSB6S.js";
|
|
24
|
-
import "../chunk-KMDBOO3E.js";
|
|
25
|
-
import "../chunk-ZYUASJUN.js";
|
|
26
27
|
import "../chunk-OV5UJWS5.js";
|
|
27
28
|
import "../chunk-XMLCXRTS.js";
|
|
28
29
|
import "../chunk-AQYAVLZK.js";
|
|
29
30
|
import "../chunk-AUNBGZS4.js";
|
|
30
|
-
import "../chunk-
|
|
31
|
+
import "../chunk-QOJAZI72.js";
|
|
31
32
|
import "../chunk-T5DJCIUP.js";
|
|
32
33
|
import "../chunk-U3IGFMCY.js";
|
|
33
34
|
import "../chunk-6VIOO74O.js";
|
|
34
35
|
import {
|
|
35
36
|
getAgentDefinitions,
|
|
36
37
|
recompileAgents
|
|
37
|
-
} from "../chunk-
|
|
38
|
+
} from "../chunk-UQM5YPPJ.js";
|
|
38
39
|
import {
|
|
39
40
|
ERROR_MESSAGES,
|
|
40
41
|
INFO_MESSAGES,
|
|
@@ -55,7 +56,7 @@ import {
|
|
|
55
56
|
loadSkillsMatrixFromSource,
|
|
56
57
|
migrateLocalSkillScope,
|
|
57
58
|
writeScopedConfigs
|
|
58
|
-
} from "../chunk-
|
|
59
|
+
} from "../chunk-CADG5WWP.js";
|
|
59
60
|
import {
|
|
60
61
|
loadAllAgents
|
|
61
62
|
} from "../chunk-L6MTIQ2U.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/edit.tsx"],"sourcesContent":["import os from \"os\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport {\n ASCII_LOGO,\n CLI_BIN_NAME,\n GLOBAL_INSTALL_ROOT,\n PROJECT_ROOT,\n SOURCE_DISPLAY_NAMES,\n} from \"../consts.js\";\nimport { getAgentDefinitions, recompileAgents } from \"../lib/agents/index.js\";\nimport { loadProjectConfig } from \"../lib/configuration/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport {\n detectInstallation,\n buildAndMergeConfig,\n writeScopedConfigs,\n detectMigrations,\n executeMigration,\n deriveInstallMode,\n} from \"../lib/installation/index.js\";\nimport {\n getMarketplaceLabel,\n loadAllAgents,\n loadSkillsMatrixFromSource,\n} from \"../lib/loading/index.js\";\nimport { findSkill, getMatrix, getSkill, useMatrixStore } from \"../stores/matrix-store\";\nimport { discoverAllPluginSkills } from \"../lib/plugins/index.js\";\nimport { deleteLocalSkill, migrateLocalSkillScope } from \"../lib/skills/index.js\";\nimport type { AgentDefinition, AgentName, SkillId } from \"../types/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { claudePluginInstall, claudePluginUninstall } from \"../utils/exec.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n pushBufferMessage,\n type StartupMessage,\n} from \"../utils/logger.js\";\nimport { ERROR_MESSAGES, INFO_MESSAGES, STATUS_MESSAGES } from \"../utils/messages.js\";\n\nfunction formatSourceDisplayName(sourceName: string): string {\n return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;\n}\n\nexport default class Edit extends BaseCommand {\n static summary = \"Edit skills in the plugin\";\n static description = \"Modify the currently installed skills via interactive wizard\";\n\n static examples = [\n {\n description: \"Open the edit wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Edit with a custom source\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Edit);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const projectDir = installation.projectDir;\n\n enableBuffering();\n\n if (installation.projectDir === os.homedir()) {\n pushBufferMessage(\n \"info\",\n \"No project installation found. Using global installation from ~/.claude-src/\",\n );\n }\n let sourceResult;\n let startupMessages: StartupMessage[] = [];\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n\n const sourceInfo = sourceResult.isLocal ? \"local\" : sourceResult.sourceConfig.sourceOrigin;\n pushBufferMessage(\n \"info\",\n `Loaded ${Object.keys(getMatrix().skills).length} skills (${sourceInfo})`,\n );\n } catch (error) {\n disableBuffering();\n this.handleError(error);\n }\n\n const projectConfig = await loadProjectConfig(projectDir);\n\n let currentSkillIds: SkillId[];\n try {\n const discoveredSkills = await discoverAllPluginSkills(projectDir);\n // Boundary cast: discoverAllPluginSkills keys are skill IDs from frontmatter\n currentSkillIds = Object.keys(discoveredSkills) as SkillId[];\n\n // In local mode, plugin discovery returns empty — fall back to project config skills\n if (currentSkillIds.length === 0 && projectConfig?.config?.skills?.length) {\n currentSkillIds = projectConfig.config.skills.map((s) => s.id);\n pushBufferMessage(\"info\", `Found ${currentSkillIds.length} skills from project config`);\n } else {\n pushBufferMessage(\"info\", `Current plugin has ${currentSkillIds.length} skills`);\n }\n } catch (error) {\n disableBuffering();\n this.handleError(error);\n }\n\n startupMessages = drainBuffer();\n disableBuffering();\n\n let wizardResult: WizardResultV2 | null = null;\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n\n // D9: In project context, existing global items are read-only (locked).\n // When editing from ~/ (global context), nothing is locked.\n const isGlobalDir = projectDir === GLOBAL_INSTALL_ROOT;\n const lockedSkillIds = isGlobalDir\n ? undefined\n : projectConfig?.config?.skills?.filter((s) => s.scope === \"global\").map((s) => s.id);\n const lockedAgentNames = isGlobalDir\n ? undefined\n : projectConfig?.config?.agents?.filter((a) => a.scope === \"global\").map((a) => a.name);\n\n useMatrixStore.getState().setMatrix(sourceResult.matrix);\n const { waitUntilExit } = render(\n <Wizard\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n logo={ASCII_LOGO}\n initialStep=\"build\"\n initialDomains={projectConfig?.config?.domains}\n initialAgents={projectConfig?.config?.selectedAgents}\n installedSkillIds={currentSkillIds}\n installedSkillConfigs={projectConfig?.config?.skills}\n lockedSkillIds={lockedSkillIds}\n installedAgentConfigs={projectConfig?.config?.agents}\n lockedAgentNames={lockedAgentNames}\n projectDir={projectDir}\n startupMessages={startupMessages}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"\\nEdit cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n }\n\n if (!result.validation.valid) {\n const errorMessages = result.validation.errors.map((e) => e.message).join(\"\\n \");\n this.error(`Selection has validation errors:\\n ${errorMessages}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const newSkillIds = result.skills.map((s) => s.id);\n const addedSkills = newSkillIds.filter((id) => !currentSkillIds.includes(id));\n const removedSkills = currentSkillIds.filter((id) => !newSkillIds.includes(id));\n\n const sourceChanges = new Map<SkillId, { from: string; to: string }>();\n const scopeChanges = new Map<\n SkillId,\n { from: \"project\" | \"global\"; to: \"project\" | \"global\" }\n >();\n if (projectConfig?.config?.skills) {\n for (const newSkill of result.skills) {\n const oldSkill = projectConfig.config.skills.find((s) => s.id === newSkill.id);\n if (oldSkill && oldSkill.source !== newSkill.source) {\n sourceChanges.set(newSkill.id, {\n from: oldSkill.source,\n to: newSkill.source,\n });\n }\n if (oldSkill && oldSkill.scope !== newSkill.scope) {\n scopeChanges.set(newSkill.id, {\n from: oldSkill.scope,\n to: newSkill.scope,\n });\n }\n }\n }\n\n const agentScopeChanges = new Map<\n AgentName,\n { from: \"project\" | \"global\"; to: \"project\" | \"global\" }\n >();\n if (projectConfig?.config?.agents) {\n for (const newAgent of result.agentConfigs) {\n const oldAgent = projectConfig.config.agents.find((a) => a.name === newAgent.name);\n if (oldAgent && oldAgent.scope !== newAgent.scope) {\n agentScopeChanges.set(newAgent.name, {\n from: oldAgent.scope,\n to: newAgent.scope,\n });\n }\n }\n }\n\n const hasSourceChanges = sourceChanges.size > 0;\n const hasScopeChanges = scopeChanges.size > 0;\n const hasAgentScopeChanges = agentScopeChanges.size > 0;\n const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;\n\n if (!hasSkillChanges && !hasSourceChanges && !hasScopeChanges && !hasAgentScopeChanges) {\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n this.log(\"Plugin unchanged\\n\");\n return;\n }\n\n this.log(\"\\nChanges:\");\n for (const skillId of addedSkills) {\n this.log(` + ${getSkill(skillId).displayName}`);\n }\n for (const skillId of removedSkills) {\n const skill = findSkill(skillId);\n this.log(` - ${skill?.displayName ?? skillId}`);\n }\n for (const [skillId, change] of sourceChanges) {\n const fromLabel = formatSourceDisplayName(change.from);\n const toLabel = formatSourceDisplayName(change.to);\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n for (const [skillId, change] of scopeChanges) {\n const fromLabel = change.from === \"global\" ? \"[G]\" : \"[P]\";\n const toLabel = change.to === \"global\" ? \"[G]\" : \"[P]\";\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n for (const [agentName, change] of agentScopeChanges) {\n const fromLabel = change.from === \"global\" ? \"[G]\" : \"[P]\";\n const toLabel = change.to === \"global\" ? \"[G]\" : \"[P]\";\n this.log(` ~ ${agentName} (${fromLabel} \\u2192 ${toLabel})`);\n }\n this.log(\"\");\n\n // Handle per-skill mode migrations (local <-> plugin)\n const oldSkills = projectConfig?.config?.skills ?? [];\n const migrationPlan = detectMigrations(oldSkills, result.skills);\n const hasMigrations = migrationPlan.toLocal.length > 0 || migrationPlan.toPlugin.length > 0;\n\n if (hasMigrations) {\n if (migrationPlan.toLocal.length > 0) {\n this.log(`Switching ${migrationPlan.toLocal.length} skill(s) to local:`);\n for (const migration of migrationPlan.toLocal) {\n this.log(` - ${migration.id}`);\n }\n }\n if (migrationPlan.toPlugin.length > 0) {\n this.log(`Switching ${migrationPlan.toPlugin.length} skill(s) to plugin:`);\n for (const migration of migrationPlan.toPlugin) {\n this.log(` - ${migration.id}`);\n }\n }\n\n const migrationResult = await executeMigration(migrationPlan, projectDir, sourceResult);\n\n for (const warning of migrationResult.warnings) {\n this.warn(warning);\n }\n }\n\n const migratedSkillIds = new Set([\n ...migrationPlan.toLocal.map((m) => m.id),\n ...migrationPlan.toPlugin.map((m) => m.id),\n ]);\n\n // Handle scope migrations (P→G or G→P) for local-mode skills\n for (const [skillId, change] of scopeChanges) {\n const skillConfig = result.skills.find((s) => s.id === skillId);\n if (skillConfig?.source === \"local\") {\n await migrateLocalSkillScope(skillId, change.from, projectDir);\n } else if (sourceResult.marketplace && skillConfig) {\n // Plugin-mode scope change: uninstall from old scope, install to new scope\n const oldPluginScope = change.from === \"global\" ? \"user\" : \"project\";\n const newPluginScope = change.to === \"global\" ? \"user\" : \"project\";\n try {\n await claudePluginUninstall(skillId, oldPluginScope, projectDir);\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n await claudePluginInstall(pluginRef, newPluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to migrate plugin scope for ${skillId}: ${getErrorMessage(error)}`);\n }\n }\n }\n\n // Handle remaining non-migration source changes (e.g., marketplace A -> marketplace B)\n for (const [skillId, change] of sourceChanges) {\n // Skip skills already handled by mode migration\n if (migratedSkillIds.has(skillId)) {\n continue;\n }\n if (change.from === \"local\") {\n await deleteLocalSkill(projectDir, skillId);\n }\n }\n\n if (sourceResult.marketplace) {\n for (const skillId of addedSkills) {\n // Find the skill config to get its scope\n const skillConfig = result.skills.find((s) => s.id === skillId);\n if (!skillConfig || skillConfig.source === \"local\") continue;\n\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n const pluginScope = skillConfig.scope === \"global\" ? \"user\" : \"project\";\n this.log(`Installing plugin: ${pluginRef}...`);\n try {\n await claudePluginInstall(pluginRef, pluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`);\n }\n }\n for (const skillId of removedSkills) {\n // For removed skills, use old config to determine scope\n const oldSkill = projectConfig?.config?.skills?.find((s) => s.id === skillId);\n const pluginScope = oldSkill?.scope === \"global\" ? \"user\" : \"project\";\n this.log(`Uninstalling plugin: ${skillId}...`);\n try {\n await claudePluginUninstall(skillId, pluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to uninstall plugin ${skillId}: ${getErrorMessage(error)}`);\n }\n }\n }\n\n // Load agent definitions first — needed for both config-types.ts and recompilation\n let sourcePath: string;\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n });\n sourcePath = agentDefs.sourcePath;\n this.log(flags[\"agent-source\"] ? \"✓ Agent partials fetched\\n\" : \"✓ Agent partials loaded\\n\");\n } catch (error) {\n this.handleError(error);\n }\n\n // Persist wizard result to config.ts and config-types.ts (split by scope when in project context)\n try {\n const mergeResult = await buildAndMergeConfig(result, sourceResult, projectDir, flags.source);\n\n // Load full agent definitions for config-types.ts generation\n const cliAgents = await loadAllAgents(PROJECT_ROOT);\n const sourceAgents = await loadAllAgents(sourcePath);\n // Boundary cast: loadAllAgents returns Record<string, AgentDefinition>, agent dirs are AgentName by convention\n const agents = { ...cliAgents, ...sourceAgents } as Record<AgentName, AgentDefinition>;\n\n await writeScopedConfigs(\n mergeResult.config,\n sourceResult.matrix,\n agents,\n projectDir,\n installation.configPath,\n );\n } catch (error) {\n this.warn(`Could not update config: ${getErrorMessage(error)}`);\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileSkills = await discoverAllPluginSkills(projectDir);\n\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath,\n skills: recompileSkills,\n projectDir,\n outputDir: installation.agentsDir,\n installMode: deriveInstallMode(result.skills),\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `✓ Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)\\n`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`✓ Recompiled ${recompileResult.compiled.length} agents\\n`);\n } else {\n this.log(\"✓ No agents to recompile\\n\");\n }\n } catch (error) {\n this.warn(`Agent recompilation failed: ${getErrorMessage(error)}`);\n this.log(`You can manually recompile with '${CLI_BIN_NAME} compile'.\\n`);\n }\n\n const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];\n if (hasSourceChanges) {\n summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? \"s\" : \"\"} changed`);\n }\n if (hasScopeChanges || hasAgentScopeChanges) {\n const totalScopeChanges = scopeChanges.size + agentScopeChanges.size;\n summaryParts.push(`${totalScopeChanges} scope${totalScopeChanges > 1 ? \"s\" : \"\"} changed`);\n }\n this.log(`\\n\\u2713 Plugin updated! (${summaryParts.join(\", \")})\\n`);\n }\n}\n"],"mappings":"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","names":["result"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/edit.tsx"],"sourcesContent":["import os from \"os\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render } from \"ink\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport {\n ASCII_LOGO,\n CLI_BIN_NAME,\n GLOBAL_INSTALL_ROOT,\n PROJECT_ROOT,\n SOURCE_DISPLAY_NAMES,\n} from \"../consts.js\";\nimport { getAgentDefinitions, recompileAgents } from \"../lib/agents/index.js\";\nimport { loadProjectConfig } from \"../lib/configuration/index.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport {\n detectInstallation,\n buildAndMergeConfig,\n writeScopedConfigs,\n detectMigrations,\n executeMigration,\n deriveInstallMode,\n} from \"../lib/installation/index.js\";\nimport {\n getMarketplaceLabel,\n loadAllAgents,\n loadSkillsMatrixFromSource,\n} from \"../lib/loading/index.js\";\nimport { findSkill, getMatrix, getSkill, useMatrixStore } from \"../stores/matrix-store\";\nimport { discoverAllPluginSkills } from \"../lib/plugins/index.js\";\nimport { deleteLocalSkill, migrateLocalSkillScope } from \"../lib/skills/index.js\";\nimport type { AgentDefinition, AgentName, SkillId } from \"../types/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { claudePluginInstall, claudePluginUninstall } from \"../utils/exec.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n pushBufferMessage,\n type StartupMessage,\n} from \"../utils/logger.js\";\nimport { ERROR_MESSAGES, INFO_MESSAGES, STATUS_MESSAGES } from \"../utils/messages.js\";\n\nfunction formatSourceDisplayName(sourceName: string): string {\n return SOURCE_DISPLAY_NAMES[sourceName] ?? sourceName;\n}\n\nexport default class Edit extends BaseCommand {\n static summary = \"Edit skills in the plugin\";\n static description = \"Modify the currently installed skills via interactive wizard\";\n\n static examples = [\n {\n description: \"Open the edit wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Edit with a custom source\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Edit);\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const projectDir = installation.projectDir;\n\n enableBuffering();\n\n if (installation.projectDir === os.homedir()) {\n pushBufferMessage(\n \"info\",\n \"No project installation found. Using global installation from ~/.claude-src/\",\n );\n }\n let sourceResult;\n let startupMessages: StartupMessage[] = [];\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n\n const sourceInfo = sourceResult.isLocal ? \"local\" : sourceResult.sourceConfig.sourceOrigin;\n pushBufferMessage(\n \"info\",\n `Loaded ${Object.keys(getMatrix().skills).length} skills (${sourceInfo})`,\n );\n } catch (error) {\n disableBuffering();\n this.handleError(error);\n }\n\n const projectConfig = await loadProjectConfig(projectDir);\n\n let currentSkillIds: SkillId[];\n try {\n const discoveredSkills = await discoverAllPluginSkills(projectDir);\n // Boundary cast: discoverAllPluginSkills keys are skill IDs from frontmatter\n currentSkillIds = Object.keys(discoveredSkills) as SkillId[];\n\n // In local mode, plugin discovery returns empty — fall back to project config skills\n if (currentSkillIds.length === 0 && projectConfig?.config?.skills?.length) {\n currentSkillIds = projectConfig.config.skills.map((s) => s.id);\n pushBufferMessage(\"info\", `Found ${currentSkillIds.length} skills from project config`);\n } else {\n pushBufferMessage(\"info\", `Current plugin has ${currentSkillIds.length} skills`);\n }\n } catch (error) {\n disableBuffering();\n this.handleError(error);\n }\n\n startupMessages = drainBuffer();\n disableBuffering();\n\n let wizardResult: WizardResultV2 | null = null;\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n\n // D9: In project context, existing global items are read-only (locked).\n // When editing from ~/ (global context), nothing is locked.\n const isGlobalDir = projectDir === GLOBAL_INSTALL_ROOT;\n const lockedSkillIds = isGlobalDir\n ? undefined\n : projectConfig?.config?.skills?.filter((s) => s.scope === \"global\").map((s) => s.id);\n const lockedAgentNames = isGlobalDir\n ? undefined\n : projectConfig?.config?.agents?.filter((a) => a.scope === \"global\").map((a) => a.name);\n\n useMatrixStore.getState().setMatrix(sourceResult.matrix);\n const { waitUntilExit } = render(\n <Wizard\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n logo={ASCII_LOGO}\n initialStep=\"build\"\n initialDomains={projectConfig?.config?.domains}\n initialAgents={projectConfig?.config?.selectedAgents}\n installedSkillIds={currentSkillIds}\n installedSkillConfigs={projectConfig?.config?.skills}\n lockedSkillIds={lockedSkillIds}\n installedAgentConfigs={projectConfig?.config?.agents}\n lockedAgentNames={lockedAgentNames}\n projectDir={projectDir}\n startupMessages={startupMessages}\n onComplete={(result) => {\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"\\nEdit cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n const result = wizardResult as WizardResultV2 | null;\n\n if (!result || result.cancelled) {\n this.error(\"Cancelled\", { exit: EXIT_CODES.CANCELLED });\n }\n\n if (!result.validation.valid) {\n const errorMessages = result.validation.errors.map((e) => e.message).join(\"\\n \");\n this.error(`Selection has validation errors:\\n ${errorMessages}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n const newSkillIds = result.skills.map((s) => s.id);\n const addedSkills = newSkillIds.filter((id) => !currentSkillIds.includes(id));\n const removedSkills = currentSkillIds.filter((id) => !newSkillIds.includes(id));\n\n const sourceChanges = new Map<SkillId, { from: string; to: string }>();\n const scopeChanges = new Map<\n SkillId,\n { from: \"project\" | \"global\"; to: \"project\" | \"global\" }\n >();\n if (projectConfig?.config?.skills) {\n for (const newSkill of result.skills) {\n const oldSkill = projectConfig.config.skills.find((s) => s.id === newSkill.id);\n if (oldSkill && oldSkill.source !== newSkill.source) {\n sourceChanges.set(newSkill.id, {\n from: oldSkill.source,\n to: newSkill.source,\n });\n }\n if (oldSkill && oldSkill.scope !== newSkill.scope) {\n scopeChanges.set(newSkill.id, {\n from: oldSkill.scope,\n to: newSkill.scope,\n });\n }\n }\n }\n\n const agentScopeChanges = new Map<\n AgentName,\n { from: \"project\" | \"global\"; to: \"project\" | \"global\" }\n >();\n if (projectConfig?.config?.agents) {\n for (const newAgent of result.agentConfigs) {\n const oldAgent = projectConfig.config.agents.find((a) => a.name === newAgent.name);\n if (oldAgent && oldAgent.scope !== newAgent.scope) {\n agentScopeChanges.set(newAgent.name, {\n from: oldAgent.scope,\n to: newAgent.scope,\n });\n }\n }\n }\n\n const hasSourceChanges = sourceChanges.size > 0;\n const hasScopeChanges = scopeChanges.size > 0;\n const hasAgentScopeChanges = agentScopeChanges.size > 0;\n const hasSkillChanges = addedSkills.length > 0 || removedSkills.length > 0;\n\n if (!hasSkillChanges && !hasSourceChanges && !hasScopeChanges && !hasAgentScopeChanges) {\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n this.log(\"Plugin unchanged\\n\");\n return;\n }\n\n this.log(\"\\nChanges:\");\n for (const skillId of addedSkills) {\n this.log(` + ${getSkill(skillId).displayName}`);\n }\n for (const skillId of removedSkills) {\n const skill = findSkill(skillId);\n this.log(` - ${skill?.displayName ?? skillId}`);\n }\n for (const [skillId, change] of sourceChanges) {\n const fromLabel = formatSourceDisplayName(change.from);\n const toLabel = formatSourceDisplayName(change.to);\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n for (const [skillId, change] of scopeChanges) {\n const fromLabel = change.from === \"global\" ? \"[G]\" : \"[P]\";\n const toLabel = change.to === \"global\" ? \"[G]\" : \"[P]\";\n this.log(` ~ ${skillId} (${fromLabel} \\u2192 ${toLabel})`);\n }\n for (const [agentName, change] of agentScopeChanges) {\n const fromLabel = change.from === \"global\" ? \"[G]\" : \"[P]\";\n const toLabel = change.to === \"global\" ? \"[G]\" : \"[P]\";\n this.log(` ~ ${agentName} (${fromLabel} \\u2192 ${toLabel})`);\n }\n this.log(\"\");\n\n // Handle per-skill mode migrations (local <-> plugin)\n const oldSkills = projectConfig?.config?.skills ?? [];\n const migrationPlan = detectMigrations(oldSkills, result.skills);\n const hasMigrations = migrationPlan.toLocal.length > 0 || migrationPlan.toPlugin.length > 0;\n\n if (hasMigrations) {\n if (migrationPlan.toLocal.length > 0) {\n this.log(`Switching ${migrationPlan.toLocal.length} skill(s) to local:`);\n for (const migration of migrationPlan.toLocal) {\n this.log(` - ${migration.id}`);\n }\n }\n if (migrationPlan.toPlugin.length > 0) {\n this.log(`Switching ${migrationPlan.toPlugin.length} skill(s) to plugin:`);\n for (const migration of migrationPlan.toPlugin) {\n this.log(` - ${migration.id}`);\n }\n }\n\n const migrationResult = await executeMigration(migrationPlan, projectDir, sourceResult);\n\n for (const warning of migrationResult.warnings) {\n this.warn(warning);\n }\n }\n\n const migratedSkillIds = new Set([\n ...migrationPlan.toLocal.map((m) => m.id),\n ...migrationPlan.toPlugin.map((m) => m.id),\n ]);\n\n // Handle scope migrations (P→G or G→P) for local-mode skills\n for (const [skillId, change] of scopeChanges) {\n const skillConfig = result.skills.find((s) => s.id === skillId);\n if (skillConfig?.source === \"local\") {\n await migrateLocalSkillScope(skillId, change.from, projectDir);\n } else if (sourceResult.marketplace && skillConfig) {\n // Plugin-mode scope change: uninstall from old scope, install to new scope\n const oldPluginScope = change.from === \"global\" ? \"user\" : \"project\";\n const newPluginScope = change.to === \"global\" ? \"user\" : \"project\";\n try {\n await claudePluginUninstall(skillId, oldPluginScope, projectDir);\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n await claudePluginInstall(pluginRef, newPluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to migrate plugin scope for ${skillId}: ${getErrorMessage(error)}`);\n }\n }\n }\n\n // Handle remaining non-migration source changes (e.g., marketplace A -> marketplace B)\n for (const [skillId, change] of sourceChanges) {\n // Skip skills already handled by mode migration\n if (migratedSkillIds.has(skillId)) {\n continue;\n }\n if (change.from === \"local\") {\n await deleteLocalSkill(projectDir, skillId);\n }\n }\n\n if (sourceResult.marketplace) {\n for (const skillId of addedSkills) {\n // Find the skill config to get its scope\n const skillConfig = result.skills.find((s) => s.id === skillId);\n if (!skillConfig || skillConfig.source === \"local\") continue;\n\n const pluginRef = `${skillId}@${sourceResult.marketplace}`;\n const pluginScope = skillConfig.scope === \"global\" ? \"user\" : \"project\";\n this.log(`Installing plugin: ${pluginRef}...`);\n try {\n await claudePluginInstall(pluginRef, pluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`);\n }\n }\n for (const skillId of removedSkills) {\n // For removed skills, use old config to determine scope\n const oldSkill = projectConfig?.config?.skills?.find((s) => s.id === skillId);\n const pluginScope = oldSkill?.scope === \"global\" ? \"user\" : \"project\";\n this.log(`Uninstalling plugin: ${skillId}...`);\n try {\n await claudePluginUninstall(skillId, pluginScope, projectDir);\n } catch (error) {\n this.warn(`Failed to uninstall plugin ${skillId}: ${getErrorMessage(error)}`);\n }\n }\n }\n\n // Load agent definitions first — needed for both config-types.ts and recompilation\n let sourcePath: string;\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n });\n sourcePath = agentDefs.sourcePath;\n this.log(flags[\"agent-source\"] ? \"✓ Agent partials fetched\\n\" : \"✓ Agent partials loaded\\n\");\n } catch (error) {\n this.handleError(error);\n }\n\n // Persist wizard result to config.ts and config-types.ts (split by scope when in project context)\n try {\n const mergeResult = await buildAndMergeConfig(result, sourceResult, projectDir, flags.source);\n\n // Load full agent definitions for config-types.ts generation\n const cliAgents = await loadAllAgents(PROJECT_ROOT);\n const sourceAgents = await loadAllAgents(sourcePath);\n // Boundary cast: loadAllAgents returns Record<string, AgentDefinition>, agent dirs are AgentName by convention\n const agents = { ...cliAgents, ...sourceAgents } as Record<AgentName, AgentDefinition>;\n\n await writeScopedConfigs(\n mergeResult.config,\n sourceResult.matrix,\n agents,\n projectDir,\n installation.configPath,\n );\n } catch (error) {\n this.warn(`Could not update config: ${getErrorMessage(error)}`);\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileSkills = await discoverAllPluginSkills(projectDir);\n\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath,\n skills: recompileSkills,\n projectDir,\n outputDir: installation.agentsDir,\n installMode: deriveInstallMode(result.skills),\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `✓ Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)\\n`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`✓ Recompiled ${recompileResult.compiled.length} agents\\n`);\n } else {\n this.log(\"✓ No agents to recompile\\n\");\n }\n } catch (error) {\n this.warn(`Agent recompilation failed: ${getErrorMessage(error)}`);\n this.log(`You can manually recompile with '${CLI_BIN_NAME} compile'.\\n`);\n }\n\n const summaryParts = [`${addedSkills.length} added`, `${removedSkills.length} removed`];\n if (hasSourceChanges) {\n summaryParts.push(`${sourceChanges.size} source${sourceChanges.size > 1 ? \"s\" : \"\"} changed`);\n }\n if (hasScopeChanges || hasAgentScopeChanges) {\n const totalScopeChanges = scopeChanges.size + agentScopeChanges.size;\n summaryParts.push(`${totalScopeChanges} scope${totalScopeChanges > 1 ? \"s\" : \"\"} changed`);\n }\n this.log(`\\n\\u2713 Plugin updated! (${summaryParts.join(\", \")})\\n`);\n }\n}\n"],"mappings":"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","names":["result"]}
|
package/dist/commands/eject.js
CHANGED
package/dist/commands/info.js
CHANGED
package/dist/commands/init.js
CHANGED
|
@@ -4,39 +4,40 @@ import {
|
|
|
4
4
|
formatDashboardText,
|
|
5
5
|
getDashboardData,
|
|
6
6
|
showDashboard
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-XYRVAEI6.js";
|
|
8
|
+
import "../chunk-UDAHHJIM.js";
|
|
9
|
+
import "../chunk-VUUGWE6G.js";
|
|
10
10
|
import "../chunk-SXGBPQY6.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-XB3TYSPL.js";
|
|
12
|
+
import "../chunk-V5L532ZH.js";
|
|
13
13
|
import "../chunk-HGTC76BX.js";
|
|
14
|
-
import "../chunk-
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
14
|
+
import "../chunk-AX6MMYAZ.js";
|
|
15
|
+
import "../chunk-6YMW4HMX.js";
|
|
16
|
+
import "../chunk-7SOPVGDV.js";
|
|
17
|
+
import "../chunk-XMZNHLV3.js";
|
|
18
|
+
import "../chunk-HWVRHPXR.js";
|
|
19
|
+
import "../chunk-2VT2DMD7.js";
|
|
18
20
|
import "../chunk-K77I4XGL.js";
|
|
19
21
|
import "../chunk-52THXN5G.js";
|
|
22
|
+
import "../chunk-KANNRFY7.js";
|
|
23
|
+
import "../chunk-ZYUASJUN.js";
|
|
20
24
|
import "../chunk-KYULKBFC.js";
|
|
25
|
+
import "../chunk-2MHSOPIU.js";
|
|
21
26
|
import "../chunk-MWGDG4QN.js";
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-7SOPVGDV.js";
|
|
24
|
-
import "../chunk-6IK2TCK7.js";
|
|
27
|
+
import "../chunk-WF5PMBIR.js";
|
|
25
28
|
import "../chunk-KUV24B5M.js";
|
|
26
29
|
import "../chunk-CKPJTMNC.js";
|
|
27
30
|
import "../chunk-GG4BSB6S.js";
|
|
28
|
-
import "../chunk-KMDBOO3E.js";
|
|
29
|
-
import "../chunk-ZYUASJUN.js";
|
|
30
31
|
import "../chunk-OV5UJWS5.js";
|
|
31
32
|
import "../chunk-XMLCXRTS.js";
|
|
32
33
|
import "../chunk-AQYAVLZK.js";
|
|
33
34
|
import "../chunk-AUNBGZS4.js";
|
|
34
|
-
import "../chunk-
|
|
35
|
+
import "../chunk-QOJAZI72.js";
|
|
35
36
|
import "../chunk-T5DJCIUP.js";
|
|
36
37
|
import "../chunk-U3IGFMCY.js";
|
|
37
38
|
import "../chunk-6VIOO74O.js";
|
|
38
39
|
import "../chunk-CXRVM7BA.js";
|
|
39
|
-
import "../chunk-
|
|
40
|
+
import "../chunk-CADG5WWP.js";
|
|
40
41
|
import "../chunk-L6MTIQ2U.js";
|
|
41
42
|
import "../chunk-T4EXUIBY.js";
|
|
42
43
|
import "../chunk-BKL3DF2Q.js";
|
package/dist/commands/list.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getAgentDefinitions
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-UQM5YPPJ.js";
|
|
5
5
|
import {
|
|
6
6
|
isClaudeCLIAvailable,
|
|
7
7
|
loadConfigTypesDataInBackground,
|
|
8
8
|
regenerateConfigTypes,
|
|
9
9
|
resolveSource
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-CADG5WWP.js";
|
|
11
11
|
import "../../chunk-L6MTIQ2U.js";
|
|
12
12
|
import "../../chunk-T4EXUIBY.js";
|
|
13
13
|
import "../../chunk-BKL3DF2Q.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
generateSkillCategoriesTs,
|
|
4
4
|
generateSkillRulesTs
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-X4RIMJNY.js";
|
|
6
6
|
import {
|
|
7
7
|
generateMarketplace,
|
|
8
8
|
writeMarketplace
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
generateConfigSource,
|
|
14
14
|
loadConfigTypesDataInBackground,
|
|
15
15
|
regenerateConfigTypes
|
|
16
|
-
} from "../../chunk-
|
|
16
|
+
} from "../../chunk-CADG5WWP.js";
|
|
17
17
|
import "../../chunk-L6MTIQ2U.js";
|
|
18
18
|
import "../../chunk-T4EXUIBY.js";
|
|
19
19
|
import "../../chunk-BKL3DF2Q.js";
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
generateSkillRulesTs,
|
|
8
8
|
toTitleCase,
|
|
9
9
|
validateSkillName
|
|
10
|
-
} from "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
} from "../../chunk-X4RIMJNY.js";
|
|
11
|
+
import "../../chunk-CADG5WWP.js";
|
|
12
12
|
import "../../chunk-L6MTIQ2U.js";
|
|
13
13
|
import "../../chunk-T4EXUIBY.js";
|
|
14
14
|
import "../../chunk-BKL3DF2Q.js";
|
package/dist/commands/search.js
CHANGED
package/dist/commands/update.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "../chunk-N6S7ZRIL.js";
|
|
5
5
|
import {
|
|
6
6
|
recompileAgents
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-UQM5YPPJ.js";
|
|
8
8
|
import {
|
|
9
9
|
ERROR_MESSAGES,
|
|
10
10
|
INFO_MESSAGES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
compareLocalSkillsWithSource,
|
|
16
16
|
injectForkedFromMetadata,
|
|
17
17
|
loadSkillsMatrixFromSource
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-CADG5WWP.js";
|
|
19
19
|
import "../chunk-L6MTIQ2U.js";
|
|
20
20
|
import "../chunk-T4EXUIBY.js";
|
|
21
21
|
import {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
SelectList
|
|
4
|
+
} from "../../chunk-WF5PMBIR.js";
|
|
5
|
+
import "../../chunk-KUV24B5M.js";
|
|
6
|
+
import "../../chunk-EGMQ3SXN.js";
|
|
7
|
+
import "../../chunk-DHET7RCE.js";
|
|
8
|
+
export {
|
|
9
|
+
SelectList
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=select-list.js.map
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import {
|
|
16
16
|
createMockMatrix,
|
|
17
17
|
createMockSkill
|
|
18
|
-
} from "../../chunk-
|
|
18
|
+
} from "../../chunk-J2D6OBIX.js";
|
|
19
19
|
import {
|
|
20
20
|
afterEach,
|
|
21
21
|
beforeEach,
|
|
@@ -29,9 +29,9 @@ import {
|
|
|
29
29
|
} from "../../chunk-CKPJTMNC.js";
|
|
30
30
|
import "../../chunk-GG4BSB6S.js";
|
|
31
31
|
import "../../chunk-AUNBGZS4.js";
|
|
32
|
-
import "../../chunk-
|
|
32
|
+
import "../../chunk-QOJAZI72.js";
|
|
33
33
|
import "../../chunk-6VIOO74O.js";
|
|
34
|
-
import "../../chunk-
|
|
34
|
+
import "../../chunk-CADG5WWP.js";
|
|
35
35
|
import "../../chunk-L6MTIQ2U.js";
|
|
36
36
|
import "../../chunk-T4EXUIBY.js";
|
|
37
37
|
import {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DomainSelection
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-KANNRFY7.js";
|
|
5
5
|
import "../../chunk-ZYUASJUN.js";
|
|
6
6
|
import "../../chunk-OV5UJWS5.js";
|
|
7
7
|
import "../../chunk-XMLCXRTS.js";
|
|
8
8
|
import "../../chunk-AQYAVLZK.js";
|
|
9
9
|
import "../../chunk-AUNBGZS4.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-QOJAZI72.js";
|
|
11
|
+
import "../../chunk-CADG5WWP.js";
|
|
12
12
|
import "../../chunk-L6MTIQ2U.js";
|
|
13
13
|
import "../../chunk-T4EXUIBY.js";
|
|
14
14
|
import "../../chunk-BKL3DF2Q.js";
|
|
@@ -20,7 +20,8 @@ import {
|
|
|
20
20
|
} from "../../chunk-XY3XDVMI.js";
|
|
21
21
|
import {
|
|
22
22
|
SearchModal
|
|
23
|
-
} from "../../chunk-
|
|
23
|
+
} from "../../chunk-2MHSOPIU.js";
|
|
24
|
+
import "../../chunk-WF5PMBIR.js";
|
|
24
25
|
import "../../chunk-KUV24B5M.js";
|
|
25
26
|
import "../../chunk-6VIOO74O.js";
|
|
26
27
|
import "../../chunk-EGMQ3SXN.js";
|
|
@@ -96,7 +97,7 @@ describe("SearchModal component", () => {
|
|
|
96
97
|
const { lastFrame, unmount } = renderModal();
|
|
97
98
|
cleanup = unmount;
|
|
98
99
|
const output = lastFrame();
|
|
99
|
-
globalExpect(output).toContain("\
|
|
100
|
+
globalExpect(output).toContain("\u276F");
|
|
100
101
|
});
|
|
101
102
|
it("should show 'No results found' when results array is empty", () => {
|
|
102
103
|
const { lastFrame, unmount } = renderModal({ results: [] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/components/wizard/search-modal.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, vi } from \"vitest\";\nimport { SearchModal, type SearchModalProps } from \"./search-modal\";\nimport type { BoundSkillCandidate } from \"../../types\";\nimport {\n ARROW_UP,\n ARROW_DOWN,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst candidates: BoundSkillCandidate[] = [\n {\n id: \"web-framework-react-pro\",\n sourceUrl: \"github:awesome-dev/skills\",\n sourceName: \"awesome-dev\",\n alias: \"react\",\n description: \"Opinionated React with strict TS\",\n },\n {\n id: \"web-framework-react-strict\",\n sourceUrl: \"github:team-xyz/skills\",\n sourceName: \"team-xyz\",\n alias: \"react\",\n description: \"Strict mode React\",\n },\n {\n id: \"web-framework-react-minimal\",\n sourceUrl: \"github:solo-dev/skills\",\n sourceName: \"solo-dev\",\n alias: \"react\",\n description: \"Minimal hooks-only React\",\n },\n];\n\nconst defaultProps: SearchModalProps = {\n results: candidates,\n alias: \"react\",\n onBind: vi.fn(),\n onClose: vi.fn(),\n};\n\nconst renderModal = (props: Partial<SearchModalProps> = {}) => {\n return render(<SearchModal {...defaultProps} {...props} />);\n};\n\ndescribe(\"SearchModal component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render the alias in the title\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"react\");\n expect(output).toContain(\"Search results\");\n });\n\n it(\"should render all result source names\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"awesome-dev\");\n expect(output).toContain(\"team-xyz\");\n expect(output).toContain(\"solo-dev\");\n });\n\n it(\"should render result descriptions\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Opinionated React with strict TS\");\n expect(output).toContain(\"Strict mode React\");\n });\n\n it(\"should show focused marker on first result by default\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n // The focused marker should appear\n expect(output).toContain(\"\\u25B8\");\n });\n\n it(\"should show 'No results found' when results array is empty\", () => {\n const { lastFrame, unmount } = renderModal({ results: [] });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"No results found\");\n });\n\n it(\"should render help text with navigation hints\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"navigate\");\n expect(output).toContain(\"ENTER\");\n expect(output).toContain(\"ESC\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should move focus down with arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // The second result (team-xyz) should now have the marker\n // We check that the output changed — specific marker positioning depends on rendering\n expect(output).toContain(\"team-xyz\");\n });\n\n it(\"should move focus up with arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n // Move down first, then back up\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"awesome-dev\");\n });\n\n it(\"should wrap from last result to first on arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // Move down 3 times (past last result)\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should have wrapped to first result\n expect(output).toContain(\"awesome-dev\");\n });\n\n it(\"should wrap from first result to last on arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should have wrapped to last result\n expect(output).toContain(\"solo-dev\");\n });\n });\n\n describe(\"actions\", () => {\n it(\"should call onBind with focused candidate on Enter\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).toHaveBeenCalledWith(candidates[0]);\n });\n\n it(\"should call onBind with second candidate after navigating down\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).toHaveBeenCalledWith(candidates[1]);\n });\n\n it(\"should call onClose on Escape\", async () => {\n const onClose = vi.fn();\n const { stdin, unmount } = renderModal({ onClose });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).toHaveBeenCalled();\n });\n\n it(\"should not call onBind on Enter when results are empty\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ results: [], onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).not.toHaveBeenCalled();\n });\n\n it(\"should not call onBind on Escape\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/wizard/search-modal.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, vi } from \"vitest\";\nimport { SearchModal, type SearchModalProps } from \"./search-modal\";\nimport type { BoundSkillCandidate } from \"../../types\";\nimport {\n ARROW_UP,\n ARROW_DOWN,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst candidates: BoundSkillCandidate[] = [\n {\n id: \"web-framework-react-pro\",\n sourceUrl: \"github:awesome-dev/skills\",\n sourceName: \"awesome-dev\",\n alias: \"react\",\n description: \"Opinionated React with strict TS\",\n },\n {\n id: \"web-framework-react-strict\",\n sourceUrl: \"github:team-xyz/skills\",\n sourceName: \"team-xyz\",\n alias: \"react\",\n description: \"Strict mode React\",\n },\n {\n id: \"web-framework-react-minimal\",\n sourceUrl: \"github:solo-dev/skills\",\n sourceName: \"solo-dev\",\n alias: \"react\",\n description: \"Minimal hooks-only React\",\n },\n];\n\nconst defaultProps: SearchModalProps = {\n results: candidates,\n alias: \"react\",\n onBind: vi.fn(),\n onClose: vi.fn(),\n};\n\nconst renderModal = (props: Partial<SearchModalProps> = {}) => {\n return render(<SearchModal {...defaultProps} {...props} />);\n};\n\ndescribe(\"SearchModal component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render the alias in the title\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"react\");\n expect(output).toContain(\"Search results\");\n });\n\n it(\"should render all result source names\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"awesome-dev\");\n expect(output).toContain(\"team-xyz\");\n expect(output).toContain(\"solo-dev\");\n });\n\n it(\"should render result descriptions\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Opinionated React with strict TS\");\n expect(output).toContain(\"Strict mode React\");\n });\n\n it(\"should show focused marker on first result by default\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n // The focused marker should appear (UI_SYMBOLS.CHEVRON = U+276F)\n expect(output).toContain(\"\\u276F\");\n });\n\n it(\"should show 'No results found' when results array is empty\", () => {\n const { lastFrame, unmount } = renderModal({ results: [] });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"No results found\");\n });\n\n it(\"should render help text with navigation hints\", () => {\n const { lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"navigate\");\n expect(output).toContain(\"ENTER\");\n expect(output).toContain(\"ESC\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should move focus down with arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // The second result (team-xyz) should now have the marker\n // We check that the output changed — specific marker positioning depends on rendering\n expect(output).toContain(\"team-xyz\");\n });\n\n it(\"should move focus up with arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n // Move down first, then back up\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"awesome-dev\");\n });\n\n it(\"should wrap from last result to first on arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // Move down 3 times (past last result)\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should have wrapped to first result\n expect(output).toContain(\"awesome-dev\");\n });\n\n it(\"should wrap from first result to last on arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderModal();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should have wrapped to last result\n expect(output).toContain(\"solo-dev\");\n });\n });\n\n describe(\"actions\", () => {\n it(\"should call onBind with focused candidate on Enter\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).toHaveBeenCalledWith(candidates[0]);\n });\n\n it(\"should call onBind with second candidate after navigating down\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).toHaveBeenCalledWith(candidates[1]);\n });\n\n it(\"should call onClose on Escape\", async () => {\n const onClose = vi.fn();\n const { stdin, unmount } = renderModal({ onClose });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).toHaveBeenCalled();\n });\n\n it(\"should not call onBind on Enter when results are empty\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ results: [], onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).not.toHaveBeenCalled();\n });\n\n it(\"should not call onBind on Escape\", async () => {\n const onBind = vi.fn();\n const { stdin, unmount } = renderModal({ onBind });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBind).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SourceGrid
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-6YMW4HMX.js";
|
|
5
5
|
import "../../chunk-7SOPVGDV.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-2MHSOPIU.js";
|
|
7
|
+
import "../../chunk-WF5PMBIR.js";
|
|
7
8
|
import "../../chunk-KUV24B5M.js";
|
|
8
9
|
import "../../chunk-GG4BSB6S.js";
|
|
9
10
|
import "../../chunk-AUNBGZS4.js";
|
|
@@ -15,10 +15,13 @@ import {
|
|
|
15
15
|
render
|
|
16
16
|
} from "../../chunk-66UDJBF6.js";
|
|
17
17
|
import {
|
|
18
|
-
|
|
18
|
+
WEB_TRIO_MATRIX
|
|
19
|
+
} from "../../chunk-DA3WIZ4C.js";
|
|
20
|
+
import "../../chunk-DHBRWGRZ.js";
|
|
21
|
+
import {
|
|
19
22
|
createMockMatrix,
|
|
20
23
|
createMockSkill
|
|
21
|
-
} from "../../chunk-
|
|
24
|
+
} from "../../chunk-J2D6OBIX.js";
|
|
22
25
|
import {
|
|
23
26
|
afterEach,
|
|
24
27
|
beforeEach,
|
|
@@ -29,15 +32,16 @@ import {
|
|
|
29
32
|
} from "../../chunk-XY3XDVMI.js";
|
|
30
33
|
import {
|
|
31
34
|
SourceGrid
|
|
32
|
-
} from "../../chunk-
|
|
35
|
+
} from "../../chunk-6YMW4HMX.js";
|
|
33
36
|
import "../../chunk-7SOPVGDV.js";
|
|
34
|
-
import "../../chunk-
|
|
37
|
+
import "../../chunk-2MHSOPIU.js";
|
|
38
|
+
import "../../chunk-WF5PMBIR.js";
|
|
35
39
|
import "../../chunk-KUV24B5M.js";
|
|
36
40
|
import "../../chunk-GG4BSB6S.js";
|
|
37
41
|
import "../../chunk-AUNBGZS4.js";
|
|
38
|
-
import "../../chunk-
|
|
42
|
+
import "../../chunk-QOJAZI72.js";
|
|
39
43
|
import "../../chunk-6VIOO74O.js";
|
|
40
|
-
import "../../chunk-
|
|
44
|
+
import "../../chunk-CADG5WWP.js";
|
|
41
45
|
import "../../chunk-L6MTIQ2U.js";
|
|
42
46
|
import "../../chunk-T4EXUIBY.js";
|
|
43
47
|
import {
|
|
@@ -92,7 +96,7 @@ var renderGrid = (props = {}) => {
|
|
|
92
96
|
describe("SourceGrid component", () => {
|
|
93
97
|
let cleanup;
|
|
94
98
|
beforeEach(() => {
|
|
95
|
-
useMatrixStore.getState().setMatrix(
|
|
99
|
+
useMatrixStore.getState().setMatrix(WEB_TRIO_MATRIX);
|
|
96
100
|
});
|
|
97
101
|
afterEach(() => {
|
|
98
102
|
cleanup?.();
|