Version Packages#292
Merged
Merged
Conversation
0dcd059 to
4818218
Compare
4818218 to
71fa6d5
Compare
418b4ff to
5c3ad56
Compare
5c3ad56 to
5479042
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to develop, this PR will be updated.
Releases
@bluecadet/launchpad-cli@3.0.0
Major Changes
#283
73e0d1e- Remove thescaffoldpackage andlaunchpad scaffoldCLI command. Windows kiosk and exhibit machine configuration is now handled by Preflight, a dedicated tool by Bluecadet.Migration: If you relied on
launchpad scaffoldor@bluecadet/launchpad/scaffold, switch to Preflight.#293
ce098d3- Plugins can now declare CLI commands viamanifest.cli. The hardcodedcontentandmonitorCLI commands are removed — both plugins now declare their commands via their manifests. See the@bluecadet/launchpadchangelog for migration details.bde09a4- Replaces the hook-based plugin system with a unified plugin model across all packages. See the@bluecadet/launchpadchangelog for migration details.#280
f18098c- Add log level flag to CLI to control verbosity of terminal output.#280
7debdda- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management. See the@bluecadet/launchpadchangelog for migration details.Minor Changes
#280
7debdda- Breaking changes to the content fetch pipeline, path helpers, and file path defaults. See the@bluecadet/launchpadchangelog for migration details.#280
7debdda- Adds persistent controller mode with a JSON-RPC 2.0 IPC interface.launchpad startA new
startcommand launches the controller in persistent mode, opening an IPC socket so subsequent CLI commands connect to the running instance:IPC
The CLI communicates with a running controller over a JSON-RPC 2.0 socket. The
IPCClientAPI (queryState(),executeCommand(),shutdown(), event subscriptions) is the programmatic interface for this. A CLI and daemon must be on the same version.LaunchpadConfigmoved to utilsLaunchpadConfigmoves from@bluecadet/launchpad-clito@bluecadet/launchpad-utils, enabling declaration merging without a direct dependency on the CLI package.Patch Changes
#280
b29a443- Bump dependencies with vulnerabilitiesUpdated dependencies [
8d6cf1e,b0925c8,b29a443,8d6cf1e,7debdda,ce098d3,bde09a4,7debdda]:@bluecadet/launchpad-content@3.0.0
Major Changes
#280
7debdda- Breaking changes to the content fetch pipeline, path helpers, and file path defaults. See the@bluecadet/launchpadchangelog for migration details.bde09a4- Replaces the hook-based plugin system with a unified plugin model across all packages. See the@bluecadet/launchpadchangelog for migration details.#280
7debdda- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management. See the@bluecadet/launchpadchangelog for migration details.Minor Changes
#280
8d6cf1e- Emitcontent:source:errorevent when an individual content source fails during a fetch.Previously, source errors were only surfaced through the fetch result. Now a
content:source:errorevent is emitted on the event bus with{ sourceId, error }, allowing subscribers to react to partial failures without waiting for the entire fetch to complete.#280
8d6cf1e- IntroduceEventBus<TEvents>and per-package event types.EventBus<TEvents extends Record<string, unknown>>is available from@bluecadet/launchpad-utils. The defaultTEventsisRecord<string, unknown>, so untyped usage works out of the box. Plugins and custom integrations can create typed event buses scoped to their own event contracts.Each plugin package exports its event types directly:
ContentEventsfrom@bluecadet/launchpad-contentMonitorEventsfrom@bluecadet/launchpad-monitorCoreEventsfrom@bluecadet/launchpad-utils#293
ce098d3- Plugins can now declare CLI commands viamanifest.cli. The hardcodedcontentandmonitorCLI commands are removed — both plugins now declare their commands via their manifests. See the@bluecadet/launchpadchangelog for migration details.#280
8d6cf1e- Add Zod runtime validation for plugin commands.Content and monitor plugins now validate incoming commands against Zod schemas before processing. Invalid commands are rejected with a typed error at the plugin boundary rather than failing deep in business logic.
ContentCommandSchemaandMonitorCommandSchemaare exported from their respective packages for use in custom integrations.Patch Changes
#280
1460cfd- Fix orphaned promises in data store#280
b29a443- Bump dependencies with vulnerabilities#280
7debdda- Adds persistent controller mode with a JSON-RPC 2.0 IPC interface.launchpad startA new
startcommand launches the controller in persistent mode, opening an IPC socket so subsequent CLI commands connect to the running instance:IPC
The CLI communicates with a running controller over a JSON-RPC 2.0 socket. The
IPCClientAPI (queryState(),executeCommand(),shutdown(), event subscriptions) is the programmatic interface for this. A CLI and daemon must be on the same version.LaunchpadConfigmoved to utilsLaunchpadConfigmoves from@bluecadet/launchpad-clito@bluecadet/launchpad-utils, enabling declaration merging without a direct dependency on the CLI package.#280
22c2428- Clear content data store when starting new fetch. Prevents stale content when refetching with persistent controller instance.Updated dependencies [
8d6cf1e,b29a443,7debdda,ce098d3,bde09a4,7debdda]:@bluecadet/launchpad-controller@1.0.0
Major Changes
bde09a4- Replaces the hook-based plugin system with a unified plugin model across all packages. See the@bluecadet/launchpadchangelog for migration details.#280
7debdda- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management. See the@bluecadet/launchpadchangelog for migration details.Minor Changes
#280
7debdda- Adds persistent controller mode with a JSON-RPC 2.0 IPC interface.launchpad startA new
startcommand launches the controller in persistent mode, opening an IPC socket so subsequent CLI commands connect to the running instance:IPC
The CLI communicates with a running controller over a JSON-RPC 2.0 socket. The
IPCClientAPI (queryState(),executeCommand(),shutdown(), event subscriptions) is the programmatic interface for this. A CLI and daemon must be on the same version.LaunchpadConfigmoved to utilsLaunchpadConfigmoves from@bluecadet/launchpad-clito@bluecadet/launchpad-utils, enabling declaration merging without a direct dependency on the CLI package.Patch Changes
#280
b0925c8- Fix invalid named pipe on windows#280
b29a443- Bump dependencies with vulnerabilities#280
8d6cf1e- Removeprocess.exit()calls from library code.Library code should never terminate the host process. The monitor and IPC transport now emit a
system:shutdownevent on the event bus instead of callingprocess.exit(0)on graceful shutdown. The CLI handles this event and exits cleanly. Programmatic users of the monitor or controller who relied on the implicit exit should listen forsystem:shutdowninstead.Updated dependencies [
8d6cf1e,b29a443,7debdda,ce098d3,bde09a4,7debdda]:@bluecadet/launchpad@3.0.0
Major Changes
bde09a4- Breaking changes to the content fetch pipeline, path helpers, and file path defaults.Fetch API
LaunchpadContentgains aloadSources()method.fetch()andclear()now accept source IDs (strings) instead of full source objects:Staged promotion model
Fetches no longer write directly to
downloadPath. Instead, each run stages output under an isolated directory insidetempPath, then atomically promotes it into the publisheddownloadPathonly after every source and transform succeeds:tempPath/runs/<runId>/downloads/.downloadPaththat matchkeeprules are copied into staging.downloadPath.downloadPathis left unchanged.This means failed fetches no longer corrupt published content without requiring
backupAndRestore. Backup is still available as an extra safety net but is no longer the primary rollback mechanism.Breaking for custom transforms:
paths.getDownloadPath()now returns the staged run path, not the published path. If you need to read currently published files, use the newpaths.getPublishedDownloadPath(). Do not write to the published path during a fetch run.New path helper methods:
getPublishedDownloadPath(),getStagedDownloadPath(),getRunPath().Default file paths
Default
tempPathchanges from.tmp/to.launchpad/tmp/. Tokenization logic is removed from all path generation — backup, download, and temp paths are no longer namespaced by token.#283
73e0d1e- Remove thescaffoldpackage andlaunchpad scaffoldCLI command. Windows kiosk and exhibit machine configuration is now handled by Preflight, a dedicated tool by Bluecadet.Migration: If you relied on
launchpad scaffoldor@bluecadet/launchpad/scaffold, switch to Preflight.#293
ce098d3- Plugins can now declare CLI commands in their manifest. The hardcodedcontentandmonitorCLI commands are removed and replaced with manifest declarations inside their respective plugins.Plugin-declared CLI commands
Third-party plugins can expose CLI commands by adding a
clifield to theirPluginManifest. The CLI loads plugin manifests at startup and registers declared commands as yargs commands — no CLI package changes needed.Leaf commands support
flags(typed options withboolean,string, ornumbertypes, including array flags) andpositionals(ordered arguments, including variadic). Group commands nest subcommands under a parent name:The CLI exits with a descriptive error at startup if two plugins declare the same top-level command name. If the config file is missing or invalid, built-in commands (
start,stop,status) remain available — plugin commands are silently absent.Breaking:
launchpad contentandlaunchpad monitorcommand changes#280
7debdda- Replaces the hook-based plugin system with a unified plugin model across all packages.Config shape
The top-level
contentandmonitorkeys are replaced by apluginsarray:Renamed factory functions
createLaunchpadContent→content(@bluecadet/launchpad-content)createLaunchpadMonitor→monitor(@bluecadet/launchpad-monitor)Content transforms
The
pluginsconfig field is renamed totransforms, andContentPlugin/ContentPluginDriverare replaced byContentTransform:Events renamed:
content:plugin:start/done/error→content:transform:start/done/error; payload fieldpluginName→transformName.Monitor plugins removed
The
pluginsconfig field andMonitorPlugin/MonitorPluginDrivertypes are removed. Previously, monitor plugins received lifecycle callbacks (beforeConnect,afterConnect,beforeAppStart,afterAppStart,onAppLog, etc.) invoked by the driver. All of those lifecycle moments — and more — are now emitted as typed events on the shared event bus:beforeConnect/afterConnectmonitor:connect:start/monitor:connect:donebeforeDisconnect/afterDisconnectmonitor:disconnect:start/monitor:disconnect:donebeforeAppStart/afterAppStartmonitor:app:start/monitor:app:startedbeforeAppStop/afterAppStopmonitor:app:stop/monitor:app:stoppedonAppErrormonitor:app:erroronAppLog/onAppErrorLogmonitor:app:log/monitor:app:errorLogbeforeShutdownmonitor:beforeShutdownAdditional events with no hook equivalent:
monitor:app:online,monitor:app:exit,monitor:app:crash,monitor:app:restart/monitor:app:restarted, and Windows-specificmonitor:window:foreground/monitor:window:minimize/monitor:window:hide/monitor:window:error.Plugin author renames
defineSubsystem→definePlugin,SubsystemConfig→PluginConfig,SubsystemContext→PluginContext,InstantiatedSubsystem→InstantiatedPlugin. A new optionalstartupCommandsfield is added toPluginConfig.PluginDriverandHookContextProviderare removed from@bluecadet/launchpad-utils. The newdefinePluginmodel replaces the hook-based driver pattern entirely.Updated import paths
Most re-exports have been removed from index files in favor of explicit sub-path exports. Nearly all import paths across the ecosystem have changed — see each package's
package.json#exportsfor the updated paths.@bluecadet/launchpad(the meta package) now exposes sub-path exports that mirror the individual packages (e.g.@bluecadet/launchpad/content/transforms/media-downloader), replacing the previous flat re-export structure.New
@bluecadet/launchpad-controllerpackageProvides a centralized controller used internally by the CLI for command execution. End-user APIs are unchanged.
Logging
File logging config and logic move to the controller package; terminal logging moves to the CLI. Logs are now routed through the event bus, making them visible across processes.
Subsystems are now functions
Plugins are functional instead of class-based, allowing for simpler logic and easier testing. No changes to the CLI — only to the JS API.
Declaration merging
Declaration merging moves from the controller package to the utils package, improving type safety when the controller is not a direct dependency.
bde09a4- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management.Status:
summarize()Plugins expose an optional
summarize?(state) => Section | nullproperty on the value returned bydefinePlugin(). It is a pure function overLaunchpadState— no chalk, no side effects.The controller composes a
StatusSnapshotfrom each plugin'ssummarizeand exposes it over IPC viaclient.queryStatusSnapshot()andclient.onStatusSnapshotChange(). The CLI'sformatSnapshot()owns all chalk formatting.Tone,Row,Section, andStatusSnapshotare exported from@bluecadet/launchpad-utils/types.State:
ctx.updateState()Plugins call
ctx.updateState(patch)to establish and update their state slice. The controller lazily creates a scoped state store per plugin on first call, handling patch generation, versioning, and broadcasting across processes via Immer.CLI:
--watchflag onstatuslaunchpad status --watchstreams live state updates from a running controller.Patch Changes
#280
b29a443- Bump dependencies with vulnerabilitiesUpdated dependencies [
7debdda,8d6cf1e,73e0d1e,8d6cf1e,1460cfd,41f432d,b0925c8,b29a443,8d6cf1e,7debdda,ce098d3,bde09a4,9061c4d,f18098c,22c2428,7debdda,8d6cf1e]:@bluecadet/launchpad-monitor@3.0.0
Major Changes
bde09a4- Replaces the hook-based plugin system with a unified plugin model across all packages. See the@bluecadet/launchpadchangelog for migration details.#280
7debdda- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management. See the@bluecadet/launchpadchangelog for migration details.Minor Changes
#280
8d6cf1e- IntroduceEventBus<TEvents>and per-package event types.EventBus<TEvents extends Record<string, unknown>>is available from@bluecadet/launchpad-utils. The defaultTEventsisRecord<string, unknown>, so untyped usage works out of the box. Plugins and custom integrations can create typed event buses scoped to their own event contracts.Each plugin package exports its event types directly:
ContentEventsfrom@bluecadet/launchpad-contentMonitorEventsfrom@bluecadet/launchpad-monitorCoreEventsfrom@bluecadet/launchpad-utils#293
ce098d3- Plugins can now declare CLI commands viamanifest.cli. The hardcodedcontentandmonitorCLI commands are removed — both plugins now declare their commands via their manifests. See the@bluecadet/launchpadchangelog for migration details.#280
8d6cf1e- Add Zod runtime validation for plugin commands.Content and monitor plugins now validate incoming commands against Zod schemas before processing. Invalid commands are rejected with a typed error at the plugin boundary rather than failing deep in business logic.
ContentCommandSchemaandMonitorCommandSchemaare exported from their respective packages for use in custom integrations.Patch Changes
#280
41f432d- Fix monitor shutdown not working properly.#280
b29a443- Bump dependencies with vulnerabilities#280
8d6cf1e- Removeprocess.exit()calls from library code.Library code should never terminate the host process. The monitor and IPC transport now emit a
system:shutdownevent on the event bus instead of callingprocess.exit(0)on graceful shutdown. The CLI handles this event and exits cleanly. Programmatic users of the monitor or controller who relied on the implicit exit should listen forsystem:shutdowninstead.#280
7debdda- Adds persistent controller mode with a JSON-RPC 2.0 IPC interface.launchpad startA new
startcommand launches the controller in persistent mode, opening an IPC socket so subsequent CLI commands connect to the running instance:IPC
The CLI communicates with a running controller over a JSON-RPC 2.0 socket. The
IPCClientAPI (queryState(),executeCommand(),shutdown(), event subscriptions) is the programmatic interface for this. A CLI and daemon must be on the same version.LaunchpadConfigmoved to utilsLaunchpadConfigmoves from@bluecadet/launchpad-clito@bluecadet/launchpad-utils, enabling declaration merging without a direct dependency on the CLI package.#273
9061c4d- Fix pm2 'ENOENT' bugUpdated dependencies [
8d6cf1e,b29a443,7debdda,ce098d3,bde09a4,7debdda]:@bluecadet/launchpad-utils@3.0.0
Major Changes
bde09a4- Replaces the hook-based plugin system with a unified plugin model across all packages. See the@bluecadet/launchpadchangelog for migration details.#280
7debdda- IntroducesStatusSnapshotandctx.updateState()for plugin status and state management. See the@bluecadet/launchpadchangelog for migration details.Minor Changes
#280
8d6cf1e- IntroduceEventBus<TEvents>and per-package event types.EventBus<TEvents extends Record<string, unknown>>is available from@bluecadet/launchpad-utils. The defaultTEventsisRecord<string, unknown>, so untyped usage works out of the box. Plugins and custom integrations can create typed event buses scoped to their own event contracts.Each plugin package exports its event types directly:
ContentEventsfrom@bluecadet/launchpad-contentMonitorEventsfrom@bluecadet/launchpad-monitorCoreEventsfrom@bluecadet/launchpad-utils#293
ce098d3- Plugins can now declare CLI commands viamanifest.cli. The hardcodedcontentandmonitorCLI commands are removed — both plugins now declare their commands via their manifests. See the@bluecadet/launchpadchangelog for migration details.Patch Changes
#280
b29a443- Bump dependencies with vulnerabilities#280
7debdda- Adds persistent controller mode with a JSON-RPC 2.0 IPC interface.launchpad startA new
startcommand launches the controller in persistent mode, opening an IPC socket so subsequent CLI commands connect to the running instance:IPC
The CLI communicates with a running controller over a JSON-RPC 2.0 socket. The
IPCClientAPI (queryState(),executeCommand(),shutdown(), event subscriptions) is the programmatic interface for this. A CLI and daemon must be on the same version.LaunchpadConfigmoved to utilsLaunchpadConfigmoves from@bluecadet/launchpad-clito@bluecadet/launchpad-utils, enabling declaration merging without a direct dependency on the CLI package.@bluecadet/create-launchpad@1.1.0
Minor Changes
076eb64- Introduces@bluecadet/create-launchpad, a scaffolding CLI invoked vianpm create @bluecadet/launchpad. Interactively guides users through selecting plugins (content, monitor), sources, and transforms, then generates or patchespackage.json,tsconfig.json,launchpad.config.ts, and.gitignore.