opencode-navigator 0.19.3 → 0.20.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 +7 -0
- package/README.md +101 -3
- package/dist/{chunk-r37n7w97.js → chunk-c1kw6ktv.js} +3 -4
- package/dist/chunk-cmmnfes2.js +7 -0
- package/dist/layout-preset-actions.js +438 -0
- package/dist/mcp-groups.js +4 -4
- package/dist/project-profile.js +280 -0
- package/dist/provider-limits.js +739 -0
- package/dist/quick-actions-settings.js +2 -5
- package/dist/settings-import.js +40 -0
- package/dist/skill-groups.js +4 -4
- package/dist/trusted-skills.js +22 -0
- package/dist/tui.js +248 -267
- package/package.json +4 -2
- package/scripts/save-project-profile.mjs +41 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {QUICK_ACTION_IDS,PLUGIN_ID
|
|
2
|
+
} from "./chunk-cmmnfes2.js";
|
|
1
3
|
import {memo as _$memo} from "@opentui/solid"
|
|
2
4
|
import {createComponent as _$createComponent} from "@opentui/solid"
|
|
3
5
|
import {use as _$use} from "@opentui/solid"
|
|
@@ -11,11 +13,6 @@ import {TextAttributes} from "@opentui/core"
|
|
|
11
13
|
import {useTerminalDimensions} from "@opentui/solid"
|
|
12
14
|
import {For,createEffect,createMemo,onCleanup as onCleanup2} from "solid-js"
|
|
13
15
|
import {createSignal,onCleanup} from "solid-js"
|
|
14
|
-
var QUICK_ACTION_IDS=["session.rename","session.timeline","session.copy","session.export","session.compact","session.list","session.new","session.fork","messages.copy","session.first","session.last","session.messages_last_user","session.message.next","session.message.previous","permission.mode"];
|
|
15
|
-
var PLUGIN_ID="opencode-navigator"
|
|
16
|
-
var TOGGLE_COMMAND=`${PLUGIN_ID}.toggle`
|
|
17
|
-
var FOCUS_COMMAND=`${PLUGIN_ID}.focus`
|
|
18
|
-
var SEARCH_COMMAND=`${PLUGIN_ID}.search`;
|
|
19
16
|
var QUICK_ACTION_METADATA=[["\uEA73","Rename"],["\uEA82","Timeline"],["\uEBCC","Copy transcript"],["\uEBAC","Export"],["\uEAF5","Compact"],["\uEBEB","Switch session"],["\uEA60","New session"],["\uEB9E","Fork session"],["\uEBCC","Copy last response"],["\uEAA1","First message"],["\uEA9A","Last message"],["\uEA82","Last user message"],["\uEA9A","Next message"],["\uEAA1","Previous message"],["\uEBB3","Auto-approve permissions"]]
|
|
20
17
|
var QUICK_ACTIONS=QUICK_ACTION_IDS.map((command,index)=>({command,icon:QUICK_ACTION_METADATA[index][0],label:QUICK_ACTION_METADATA[index][1]
|
|
21
18
|
}))
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {createComponent as _$createComponent} from "@opentui/solid"
|
|
2
|
+
import {setProp as _$setProp} from "@opentui/solid"
|
|
3
|
+
import {effect as _$effect} from "@opentui/solid"
|
|
4
|
+
import {createTextNode as _$createTextNode} from "@opentui/solid"
|
|
5
|
+
import {insertNode as _$insertNode} from "@opentui/solid"
|
|
6
|
+
import {createElement as _$createElement} from "@opentui/solid"
|
|
7
|
+
import {SelectionMenu} from "./tui.js"
|
|
8
|
+
function openSettingsImport(input){input.dialogs.prompt({title:"Import portable settings",description:()=>(()=>{var _el$=_$createElement("text")
|
|
9
|
+
_$insertNode(_el$,_$createTextNode(`Paste versioned Navigator JSON.`))
|
|
10
|
+
_$effect((_$p)=>_$setProp(_el$,"fg",input.api.theme.current.textMuted,_$p))
|
|
11
|
+
return _el$
|
|
12
|
+
})(),onConfirm(source){const preview=input.preferences.previewPortableSettings(source)
|
|
13
|
+
const options=[...preview.settings.layout?[{title:`Layout \xB7 ${preview.layoutChanged ? "CHANGED" : "UNCHANGED"}`,value:"status",description:`${Object.keys(preview.settings.layout.sections).length} visibility \xB7 ${Object.keys(preview.settings.layout.expanded).length} expansion values`,icon:preview.layoutChanged?"edit":"done"
|
|
14
|
+
}]:[],...preview.settings.mcp?[{title:`MCP \xB7 ${preview.mcpChanged ? "CHANGED" : "UNCHANGED"}`,value:"status",description:`${Object.keys(preview.settings.mcp).length} remembered server states`,icon:preview.mcpChanged?"edit":"done"
|
|
15
|
+
}]:[],...preview.unsupported.map((path)=>({title:"Unsupported field \xB7 SKIPPED",value:"status",description:path,icon:"error"
|
|
16
|
+
})),...preview.layoutChanged||preview.mcpChanged?[{title:"Apply imported settings",value:"apply",description:preview.target,icon:"done"
|
|
17
|
+
}]:[],{title:"Cancel",value:"cancel",description:"return without changes",icon:"close"
|
|
18
|
+
}]
|
|
19
|
+
let applying=false
|
|
20
|
+
async function apply(){applying=true
|
|
21
|
+
try{await input.preferences.applyPortableSettings(preview)
|
|
22
|
+
input.api.ui.toast({variant:"success",title:"Portable settings",message:"Layout and MCP settings imported",duration:3000
|
|
23
|
+
})
|
|
24
|
+
input.dialogs.back()
|
|
25
|
+
} catch(error){applying=false
|
|
26
|
+
input.api.ui.toast({variant:"error",title:"Portable settings",message:error instanceof Error?error.message:"Could not import settings",duration:5000
|
|
27
|
+
})
|
|
28
|
+
}}
|
|
29
|
+
input.dialogs.replace(()=>_$createComponent(SelectionMenu,{get api(){return input.api
|
|
30
|
+
},title:"Settings import preview",options,get height(){return Math.min(options.length*3,18)
|
|
31
|
+
},onSelect:(option)=>{if(option.value==="cancel")
|
|
32
|
+
input.dialogs.back()
|
|
33
|
+
if(option.value!=="apply"||applying)
|
|
34
|
+
return
|
|
35
|
+
apply()
|
|
36
|
+
}}))
|
|
37
|
+
}})
|
|
38
|
+
}
|
|
39
|
+
export{openSettingsImport
|
|
40
|
+
}
|
package/dist/skill-groups.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
} from "./chunk-
|
|
1
|
+
import {GroupAssignmentDialog
|
|
2
|
+
} from "./chunk-c1kw6ktv.js";
|
|
3
3
|
import {createComponent as _$createComponent} from "@opentui/solid"
|
|
4
|
-
import {useDialogs} from "./tui.js"
|
|
4
|
+
import {SelectionMenu,useDialogs} from "./tui.js"
|
|
5
5
|
import {createEffect,createMemo,untrack} from "solid-js"
|
|
6
6
|
function createSkillGroupsModel(skills,preferences){const target=createMemo(()=>skills.target())
|
|
7
7
|
createEffect(()=>{const current=target()
|
|
@@ -24,7 +24,7 @@ return entries
|
|
|
24
24
|
return{options,retry:()=>skills.refresh(target(),true)}}
|
|
25
25
|
function SkillGroupsDialog(props){const dialogs=useDialogs(props.api)
|
|
26
26
|
const model=createSkillGroupsModel(props.skills,props.preferences)
|
|
27
|
-
return _$createComponent(
|
|
27
|
+
return _$createComponent(SelectionMenu,{get api(){return props.api
|
|
28
28
|
},title:"Skill groups \xB7 user-wide",get options(){return model.options()
|
|
29
29
|
},onSelect:(option)=>{if(option.value==="__retry__"){model.retry().catch(()=>{})
|
|
30
30
|
return
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {createComponent as _$createComponent} from "@opentui/solid"
|
|
2
|
+
import {createMemo} from "solid-js"
|
|
3
|
+
import {SelectionMenu} from "./tui.js"
|
|
4
|
+
var RESET_ALL="__reset_all__"
|
|
5
|
+
function TrustedSkillsDialog(props){const options=createMemo(()=>{const locations=props.preferences.trustedSkillLocations()
|
|
6
|
+
if(locations.length===0)
|
|
7
|
+
return [{title:"Every skill requires confirmation",value:"empty",description:"No trusted skills",icon:"info"
|
|
8
|
+
}]
|
|
9
|
+
return [{title:"Require confirmation for all",value:RESET_ALL,description:`Revoke trust for ${locations.length} skill${locations.length === 1 ? "" : "s"}`,icon:"reset"
|
|
10
|
+
},...locations.map((location)=>({title:location.split("/").at(-2)??location,value:location,description:location,icon:"checked"
|
|
11
|
+
}))]
|
|
12
|
+
})
|
|
13
|
+
return _$createComponent(SelectionMenu,{get api(){return props.api
|
|
14
|
+
},title:"Trusted skills",get options(){return options()
|
|
15
|
+
},onSelect:(option)=>{if(option.value===RESET_ALL)
|
|
16
|
+
props.preferences.resetSkillConfirmations()
|
|
17
|
+
else if(option.value!=="empty")
|
|
18
|
+
props.preferences.revokeSkillConfirmation(option.value)
|
|
19
|
+
}})
|
|
20
|
+
}
|
|
21
|
+
export{TrustedSkillsDialog
|
|
22
|
+
}
|