* refactor: move Electron app to main directory and enforce ts strict mode * chore: add pre-install plugins * remove duplicated initModel function Signed-off-by: James <james@jan.ai> * chore: correct module path * fix: dynamic import does not work with ts * chore: web should be able to run on target host browser * fix: history panel, should display conversations rather just blank state * chore: init default model * chore: pluggin in ts * fix: pre-pack model management * fix: compiled core should not include plugins * chore: refactor - invoke plugin function * refactor download/delete file Signed-off-by: James <james@jan.ai> * update prebuild lib Signed-off-by: James <james@jan.ai> * chore: yarn workspace * chore: update yarn workspace * chore: yarn workspace with nohoist * fix: llama-cpp-import * chore: fix data-plugin wrong module path * chore: correct build step * chore: - separate inference service (#212) - remove base-plugin Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai> * chore: update core plugins * chore: hide installation prompt and fix model load - management plugin * chore: remove legacy files; update readme * fix: refresh page lost the download state Signed-off-by: James <james@jan.ai> * fix: ai prompt not passed to plugin Signed-off-by: James <james@jan.ai> * chore: module import fix for production * chore: auto updater * chore: package is public * chore: fix yarn workspace config * update: model management uses Q4_K_M * chore: fix yarn scripts for publishing * chore: app updater - progress update message * chore: user confirms update action * adding some state for changing page store downloaded model to database Signed-off-by: James <james@jan.ai> * chore: refactor plugins into yarn workspace - a single command to publish all base plugins * chore update readme (#218) Co-authored-by: Hien To <tominhhien97@gmail.com> * change app name and app icon Signed-off-by: James <james@jan.ai> * remove: go-to-nowhere actions * chore: bundle core plugins from root and scan default plugins * fix: app crashes on different field name lookup * chore: css fix * chore: bind download progress to app ui * chore: bind active model * chore: simplify app splash-screen only centered jan icon * feature: system monitoring plugin (#196) * feat: Add function for system monitoring * chore: register plugin functions * chore: move to corresponding directory * chore: bind system monitoring data to UI --------- Co-authored-by: Louis <louis@jan.ai> * chore: add build:plugins step to README * chore: model searching and fix model name * fix: plugin file selected appearance * fix: create new conversation does not work * fix: delete conversation not update state - messages still exist * chore: fix asset path prefix * Add CICD for macos (#221) Co-authored-by: Hien To <tominhhien97@gmail.com> * chore: fix production plugin path * chore: add shell open url in external browser --------- Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai> Co-authored-by: NamH <NamNh0122@gmail.com> Co-authored-by: 0xSage <n@pragmatic.vc> Co-authored-by: hiento09 <136591877+hiento09@users.noreply.github.com> Co-authored-by: Hien To <tominhhien97@gmail.com> Co-authored-by: namvuong <22463238+vuonghoainam@users.noreply.github.com>
88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
import Activation from "./Activation.js"
|
|
|
|
/**
|
|
* This object contains a register of plugin registrations to an activation points, and the means to work with them.
|
|
* @namespace activationPoints
|
|
*/
|
|
|
|
/**
|
|
* @constant {Array.<Activation>} activationRegister
|
|
* @private
|
|
* Store of activations used by the consumer
|
|
*/
|
|
const activationRegister = []
|
|
|
|
/**
|
|
* Register a plugin with its activation points (as defined in its manifest).
|
|
* @param {Plugin} plugin plugin object as provided by the main process.
|
|
* @returns {void}
|
|
* @alias activationPoints.register
|
|
*/
|
|
export function register(plugin) {
|
|
if (!Array.isArray(plugin.activationPoints)) throw new Error(
|
|
`Plugin ${plugin.name || 'without name'} does not have any activation points set up in its manifest.`
|
|
)
|
|
for (const ap of plugin.activationPoints) {
|
|
// Ensure plugin is not already registered to activation point
|
|
const duplicate = activationRegister.findIndex(act =>
|
|
act.plugin === plugin.name && act.activationPoint === ap
|
|
)
|
|
|
|
// Create new activation and add it to the register
|
|
if (duplicate < 0) activationRegister.push(new Activation(plugin.name, ap, plugin.url))
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Trigger all activations registered to the given activation point. See {@link Plugin}.
|
|
* This will call the function with the same name as the activation point on the path specified in the plugin.
|
|
* @param {string} activationPoint Name of the activation to trigger
|
|
* @returns {Promise.<Boolean>} Resolves to true when the activations are complete.
|
|
* @alias activationPoints.trigger
|
|
*/
|
|
export async function trigger(activationPoint) {
|
|
// Make sure all triggers are complete before returning
|
|
await Promise.all(
|
|
// Trigger each relevant activation point from the register and return an array of trigger promises
|
|
activationRegister.reduce((triggered, act) => {
|
|
if (act.activationPoint === activationPoint) {
|
|
triggered.push(act.trigger())
|
|
}
|
|
return triggered
|
|
}, [])
|
|
)
|
|
return true
|
|
}
|
|
|
|
/**
|
|
* Remove a plugin from the activations register.
|
|
* @param {string} plugin Name of the plugin to remove.
|
|
* @returns {void}
|
|
* @alias activationPoints.remove
|
|
*/
|
|
export function remove(plugin) {
|
|
let i = activationRegister.length
|
|
while (i--) {
|
|
if (activationRegister[i].plugin === plugin) {
|
|
activationRegister.splice(i, 1)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove all activations from the activation register.
|
|
* @returns {void}
|
|
* @alias activationPoints.clear
|
|
*/
|
|
export function clear() {
|
|
activationRegister.length = 0
|
|
}
|
|
|
|
/**
|
|
* Fetch all activations.
|
|
* @returns {Array.<Activation>} Found extension points
|
|
* @alias activationPoints.get
|
|
*/
|
|
export function get() {
|
|
return [...activationRegister]
|
|
} |