|
|
@@ -19,6 +19,8 @@ import { BunProc } from "@/bun"
|
|
|
import { Installation } from "@/installation"
|
|
|
import { ConfigMarkdown } from "./markdown"
|
|
|
import { existsSync } from "fs"
|
|
|
+import { Bus } from "@/bus"
|
|
|
+import { Session } from "@/session"
|
|
|
|
|
|
export namespace Config {
|
|
|
const log = Log.create({ service: "config" })
|
|
|
@@ -231,8 +233,15 @@ export namespace Config {
|
|
|
dot: true,
|
|
|
cwd: dir,
|
|
|
})) {
|
|
|
- const md = await ConfigMarkdown.parse(item)
|
|
|
- if (!md.data) continue
|
|
|
+ const md = await ConfigMarkdown.parse(item).catch((err) => {
|
|
|
+ const message = ConfigMarkdown.FrontmatterError.isInstance(err)
|
|
|
+ ? `${err.data.path}: ${err.data.message}`
|
|
|
+ : `Failed to parse command ${item}`
|
|
|
+ Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
|
|
|
+ log.error("failed to load command", { command: item, err })
|
|
|
+ return undefined
|
|
|
+ })
|
|
|
+ if (!md) continue
|
|
|
|
|
|
const patterns = ["/.opencode/command/", "/.opencode/commands/", "/command/", "/commands/"]
|
|
|
const file = rel(item, patterns) ?? path.basename(item)
|
|
|
@@ -263,8 +272,15 @@ export namespace Config {
|
|
|
dot: true,
|
|
|
cwd: dir,
|
|
|
})) {
|
|
|
- const md = await ConfigMarkdown.parse(item)
|
|
|
- if (!md.data) continue
|
|
|
+ const md = await ConfigMarkdown.parse(item).catch((err) => {
|
|
|
+ const message = ConfigMarkdown.FrontmatterError.isInstance(err)
|
|
|
+ ? `${err.data.path}: ${err.data.message}`
|
|
|
+ : `Failed to parse agent ${item}`
|
|
|
+ Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
|
|
|
+ log.error("failed to load agent", { agent: item, err })
|
|
|
+ return undefined
|
|
|
+ })
|
|
|
+ if (!md) continue
|
|
|
|
|
|
const patterns = ["/.opencode/agent/", "/.opencode/agents/", "/agent/", "/agents/"]
|
|
|
const file = rel(item, patterns) ?? path.basename(item)
|
|
|
@@ -294,8 +310,15 @@ export namespace Config {
|
|
|
dot: true,
|
|
|
cwd: dir,
|
|
|
})) {
|
|
|
- const md = await ConfigMarkdown.parse(item)
|
|
|
- if (!md.data) continue
|
|
|
+ const md = await ConfigMarkdown.parse(item).catch((err) => {
|
|
|
+ const message = ConfigMarkdown.FrontmatterError.isInstance(err)
|
|
|
+ ? `${err.data.path}: ${err.data.message}`
|
|
|
+ : `Failed to parse mode ${item}`
|
|
|
+ Bus.publish(Session.Event.Error, { error: new NamedError.Unknown({ message }).toObject() })
|
|
|
+ log.error("failed to load mode", { mode: item, err })
|
|
|
+ return undefined
|
|
|
+ })
|
|
|
+ if (!md) continue
|
|
|
|
|
|
const config = {
|
|
|
name: path.basename(item, ".md"),
|