ESM conversion:
- plugin/package.json: add "type": "module".
- plugin/tsconfig.json: switch module/moduleResolution to "nodenext"; bump
target to ES2022.
- All relative imports across plugin/ now carry .js extensions as required
by Node ESM (nodenext module resolution).
- plugin/index.ts: replace `require('./calendar/schedule-cache')` with a
proper top-level import; switch `from 'os'` to `from 'node:os'`.
Plugin SDK convention update:
- Wrap default export with definePluginEntry({ id, name, description,
register }) per the current openclaw plugin authoring contract.
- Modernize plugin/openclaw.plugin.json: drop entry/version, add
activation.onStartup so gateway_start fires for this plugin at boot,
declare contracts.tools listing the five harborforge_* tools.
- Add a local plugin/openclaw-sdk.d.ts with ambient declarations for the
focused subpaths (openclaw/plugin-sdk/plugin-entry,
openclaw/plugin-sdk/core). We deliberately do NOT add openclaw as an
npm devDependency: the installer's `npm install --omit=dev` step trips
over openclaw's own (deeply nested) dependency graph when listed via
file:.../openclaw, and the runtime contract is provided by the gateway
loader anyway.
- The local PluginAPI interface is preserved (broader than the standard
OpenClawPluginApi — it surfaces `version`/`runtime`/`spawn`); the
register function is cast at the definePluginEntry boundary.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
80 lines
2.8 KiB
JSON
80 lines
2.8 KiB
JSON
{
|
|
"id": "harbor-forge",
|
|
"name": "HarborForge",
|
|
"description": "HarborForge plugin for OpenClaw - project management, monitoring, and CLI integration",
|
|
"activation": {
|
|
"onStartup": true
|
|
},
|
|
"contracts": {
|
|
"tools": [
|
|
"harborforge_status",
|
|
"harborforge_telemetry",
|
|
"harborforge_monitor_telemetry",
|
|
"harborforge_calendar_status",
|
|
"harborforge_calendar_complete"
|
|
]
|
|
},
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Enable the HarborForge plugin"
|
|
},
|
|
"backendUrl": {
|
|
"type": "string",
|
|
"default": "https://monitor.hangman-lab.top",
|
|
"description": "HarborForge backend base URL (shared by Monitor and Calendar API)"
|
|
},
|
|
"identifier": {
|
|
"type": "string",
|
|
"description": "Server/claw identifier. Used as claw_identifier in Calendar heartbeat and as MonitoredServer.identifier. Auto-detected from hostname if not set."
|
|
},
|
|
"apiKey": {
|
|
"type": "string",
|
|
"description": "API Key from HarborForge Monitor admin panel (optional but required for Monitor authentication)"
|
|
},
|
|
"monitor_port": {
|
|
"type": "number",
|
|
"description": "Local port for communication between HarborForge Monitor and this plugin"
|
|
},
|
|
"reportIntervalSec": {
|
|
"type": "number",
|
|
"default": 30,
|
|
"description": "How often to report metrics (seconds)"
|
|
},
|
|
"httpFallbackIntervalSec": {
|
|
"type": "number",
|
|
"default": 60,
|
|
"description": "HTTP heartbeat interval when WS unavailable"
|
|
},
|
|
"logLevel": {
|
|
"type": "string",
|
|
"enum": ["debug", "info", "warn", "error"],
|
|
"default": "info",
|
|
"description": "Logging level"
|
|
},
|
|
"calendarEnabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Enable Calendar heartbeat integration (PLG-CAL-001). When enabled, plugin sends periodic heartbeat to /calendar/agent/heartbeat to receive pending TimeSlots."
|
|
},
|
|
"calendarHeartbeatIntervalSec": {
|
|
"type": "number",
|
|
"default": 60,
|
|
"description": "How often to send Calendar heartbeat to backend (seconds). Defaults to 60s (1 minute)."
|
|
},
|
|
"calendarApiKey": {
|
|
"type": "string",
|
|
"description": "API key for Calendar API authentication. If not set, uses apiKey or plugin auto-authentication via X-Agent-ID header."
|
|
},
|
|
"managedMonitor": {
|
|
"type": "string",
|
|
"description": "Absolute path to an installed HarborForge.Monitor binary managed by this plugin installer. If set, gateway_start/gateway_stop hooks will start/stop the monitor process automatically."
|
|
}
|
|
}
|
|
}
|
|
}
|