agent-mockingbird 0.0.1
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/.agents/skills/btca-cli/SKILL.md +64 -0
- package/.agents/skills/btca-cli/agents/openai.yaml +3 -0
- package/.agents/skills/frontend-design/SKILL.md +42 -0
- package/.agents/skills/frontend-design/agents/openai.yaml +3 -0
- package/.env.example +36 -0
- package/.githooks/pre-commit +33 -0
- package/.github/workflows/ci.yml +309 -0
- package/.opencode/bun.lock +18 -0
- package/.opencode/package.json +5 -0
- package/.opencode/tools/agent_type_manager.ts +100 -0
- package/.opencode/tools/config_manager.ts +87 -0
- package/.opencode/tools/cron_manager.ts +145 -0
- package/.opencode/tools/memory_get.ts +43 -0
- package/.opencode/tools/memory_remember.ts +53 -0
- package/.opencode/tools/memory_search.ts +48 -0
- package/AGENTS.md +126 -0
- package/MEMORY.md +2 -0
- package/README.md +451 -0
- package/THIRD_PARTY_NOTICES.md +11 -0
- package/agent-mockingbird.config.example.json +135 -0
- package/apps/server/package.json +32 -0
- package/apps/server/src/backend/agents/bootstrapContext.ts +362 -0
- package/apps/server/src/backend/agents/openclawImport.test.ts +133 -0
- package/apps/server/src/backend/agents/openclawImport.ts +797 -0
- package/apps/server/src/backend/agents/opencodeConfig.ts +428 -0
- package/apps/server/src/backend/agents/service.ts +10 -0
- package/apps/server/src/backend/config/example-config.test.ts +20 -0
- package/apps/server/src/backend/config/orchestration.ts +243 -0
- package/apps/server/src/backend/config/policy.ts +158 -0
- package/apps/server/src/backend/config/schema.test.ts +15 -0
- package/apps/server/src/backend/config/schema.ts +391 -0
- package/apps/server/src/backend/config/semantic.test.ts +34 -0
- package/apps/server/src/backend/config/semantic.ts +149 -0
- package/apps/server/src/backend/config/service.test.ts +75 -0
- package/apps/server/src/backend/config/service.ts +207 -0
- package/apps/server/src/backend/config/smoke.ts +77 -0
- package/apps/server/src/backend/config/store.test.ts +123 -0
- package/apps/server/src/backend/config/store.ts +581 -0
- package/apps/server/src/backend/config/testFixtures.ts +5 -0
- package/apps/server/src/backend/config/types.ts +56 -0
- package/apps/server/src/backend/contracts/events.ts +320 -0
- package/apps/server/src/backend/contracts/runtime.ts +111 -0
- package/apps/server/src/backend/cron/executor.ts +435 -0
- package/apps/server/src/backend/cron/repository.ts +170 -0
- package/apps/server/src/backend/cron/service.ts +660 -0
- package/apps/server/src/backend/cron/storage.ts +92 -0
- package/apps/server/src/backend/cron/types.ts +138 -0
- package/apps/server/src/backend/cron/utils.ts +351 -0
- package/apps/server/src/backend/db/client.ts +20 -0
- package/apps/server/src/backend/db/migrate.ts +40 -0
- package/apps/server/src/backend/db/repository.ts +1762 -0
- package/apps/server/src/backend/db/schema.ts +113 -0
- package/apps/server/src/backend/db/usageDashboard.test.ts +102 -0
- package/apps/server/src/backend/db/wipe.ts +13 -0
- package/apps/server/src/backend/defaults.ts +32 -0
- package/apps/server/src/backend/env.ts +48 -0
- package/apps/server/src/backend/heartbeat/activeHours.ts +45 -0
- package/apps/server/src/backend/heartbeat/defaultJob.ts +88 -0
- package/apps/server/src/backend/heartbeat/heartbeat.test.ts +110 -0
- package/apps/server/src/backend/heartbeat/runtimeService.ts +190 -0
- package/apps/server/src/backend/heartbeat/service.ts +176 -0
- package/apps/server/src/backend/heartbeat/state.test.ts +63 -0
- package/apps/server/src/backend/heartbeat/state.ts +167 -0
- package/apps/server/src/backend/heartbeat/types.ts +54 -0
- package/apps/server/src/backend/http/boundedQueue.test.ts +49 -0
- package/apps/server/src/backend/http/boundedQueue.ts +92 -0
- package/apps/server/src/backend/http/parsers.ts +40 -0
- package/apps/server/src/backend/http/router.ts +61 -0
- package/apps/server/src/backend/http/routes/agentRoutes.ts +67 -0
- package/apps/server/src/backend/http/routes/backgroundRoutes.ts +203 -0
- package/apps/server/src/backend/http/routes/chatRoutes.ts +107 -0
- package/apps/server/src/backend/http/routes/configRoutes.ts +602 -0
- package/apps/server/src/backend/http/routes/cronRoutes.ts +221 -0
- package/apps/server/src/backend/http/routes/dashboardRoutes.ts +308 -0
- package/apps/server/src/backend/http/routes/eventRoutes.ts +7 -0
- package/apps/server/src/backend/http/routes/heartbeatRoutes.test.ts +41 -0
- package/apps/server/src/backend/http/routes/heartbeatRoutes.ts +28 -0
- package/apps/server/src/backend/http/routes/index.ts +101 -0
- package/apps/server/src/backend/http/routes/mcpRoutes.ts +213 -0
- package/apps/server/src/backend/http/routes/memoryRoutes.ts +154 -0
- package/apps/server/src/backend/http/routes/runRoutes.ts +310 -0
- package/apps/server/src/backend/http/routes/runtimeRoutes.ts +197 -0
- package/apps/server/src/backend/http/routes/skillRoutes.ts +112 -0
- package/apps/server/src/backend/http/routes/uiRoutes.test.ts +161 -0
- package/apps/server/src/backend/http/routes/uiRoutes.ts +177 -0
- package/apps/server/src/backend/http/routes/usageRoutes.test.ts +104 -0
- package/apps/server/src/backend/http/routes/usageRoutes.ts +767 -0
- package/apps/server/src/backend/http/schemas.ts +64 -0
- package/apps/server/src/backend/http/sse.ts +144 -0
- package/apps/server/src/backend/integration/backend-core.test.ts +2316 -0
- package/apps/server/src/backend/logging/logger.ts +64 -0
- package/apps/server/src/backend/mcp/service.ts +326 -0
- package/apps/server/src/backend/memory/cli.ts +170 -0
- package/apps/server/src/backend/memory/conceptExpansion.test.ts +28 -0
- package/apps/server/src/backend/memory/conceptExpansion.ts +80 -0
- package/apps/server/src/backend/memory/qmdPort.test.ts +54 -0
- package/apps/server/src/backend/memory/qmdPort.ts +61 -0
- package/apps/server/src/backend/memory/records.test.ts +66 -0
- package/apps/server/src/backend/memory/records.ts +229 -0
- package/apps/server/src/backend/memory/service.ts +2012 -0
- package/apps/server/src/backend/memory/sqliteVec.ts +58 -0
- package/apps/server/src/backend/memory/types.ts +104 -0
- package/apps/server/src/backend/opencode/agentMockingbirdPlugin.test.ts +396 -0
- package/apps/server/src/backend/opencode/client.ts +98 -0
- package/apps/server/src/backend/opencode/models.ts +41 -0
- package/apps/server/src/backend/opencode/systemPrompt.test.ts +146 -0
- package/apps/server/src/backend/opencode/systemPrompt.ts +284 -0
- package/apps/server/src/backend/paths.ts +57 -0
- package/apps/server/src/backend/prompts/service.ts +100 -0
- package/apps/server/src/backend/queue/queue.test.ts +189 -0
- package/apps/server/src/backend/queue/service.ts +177 -0
- package/apps/server/src/backend/queue/types.ts +39 -0
- package/apps/server/src/backend/run/service.ts +576 -0
- package/apps/server/src/backend/run/storage.ts +47 -0
- package/apps/server/src/backend/run/types.ts +44 -0
- package/apps/server/src/backend/runtime/errors.ts +61 -0
- package/apps/server/src/backend/runtime/index.ts +72 -0
- package/apps/server/src/backend/runtime/memoryPromptDedup.test.ts +153 -0
- package/apps/server/src/backend/runtime/memoryPromptDedup.ts +76 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/backgroundMethods.ts +765 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/coreMethods.ts +705 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/eventMethods.ts +503 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/memoryMethods.ts +462 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/promptMethods.ts +1167 -0
- package/apps/server/src/backend/runtime/opencodeRuntime/shared.ts +254 -0
- package/apps/server/src/backend/runtime/opencodeRuntime.test.ts +2899 -0
- package/apps/server/src/backend/runtime/opencodeRuntime.ts +135 -0
- package/apps/server/src/backend/runtime/sessionScope.ts +45 -0
- package/apps/server/src/backend/skills/service.ts +442 -0
- package/apps/server/src/backend/workspace/resolve.ts +27 -0
- package/apps/server/src/cli/agent-mockingbird.mjs +2522 -0
- package/apps/server/src/cli/agent-mockingbird.test.ts +68 -0
- package/apps/server/src/cli/runtime-assets.mjs +269 -0
- package/apps/server/src/cli/runtime-assets.test.ts +52 -0
- package/apps/server/src/cli/runtime-layout.mjs +75 -0
- package/apps/server/src/cli/standaloneBuild.test.ts +19 -0
- package/apps/server/src/cli/standaloneBuild.ts +19 -0
- package/apps/server/src/cli/standaloneCronBinary.test.ts +187 -0
- package/apps/server/src/index.ts +178 -0
- package/apps/server/tsconfig.json +12 -0
- package/backlog.md +5 -0
- package/bin/agent-mockingbird +2522 -0
- package/bin/runtime-layout.mjs +75 -0
- package/build-bin.ts +34 -0
- package/build-cli.mjs +37 -0
- package/build.ts +40 -0
- package/bun-env.d.ts +11 -0
- package/bun.lock +888 -0
- package/bunfig.toml +2 -0
- package/components.json +21 -0
- package/config.json +130 -0
- package/deploy/RELEASE_INSTALL.md +112 -0
- package/deploy/docker-compose.yml +42 -0
- package/deploy/systemd/README.md +46 -0
- package/deploy/systemd/agent-mockingbird.service +28 -0
- package/deploy/systemd/opencode.service +25 -0
- package/docs/legacy-config-ui-reference.md +51 -0
- package/docs/memory-e2e-trace-2026-03-04.md +63 -0
- package/docs/memory-ops.md +96 -0
- package/docs/memory-runtime-contract.md +42 -0
- package/docs/memory-tuning-remote-2026-03-04.md +59 -0
- package/docs/opencode-rebase-workflow-plan.md +614 -0
- package/docs/opencode-startup-sync-plan.md +94 -0
- package/docs/vendor-opencode.md +41 -0
- package/drizzle/0000_famous_turbo.sql +49 -0
- package/drizzle/0001_cron_memory_aux.sql +160 -0
- package/drizzle/0002_runtime_session_bindings.sql +28 -0
- package/drizzle/0003_background_runs.sql +27 -0
- package/drizzle/0004_memory_open_write.sql +63 -0
- package/drizzle/0005_signal_channel.sql +47 -0
- package/drizzle/0006_usage_event_dimensions.sql +7 -0
- package/drizzle/meta/0000_snapshot.json +341 -0
- package/drizzle/meta/_journal.json +55 -0
- package/drizzle.config.ts +14 -0
- package/eslint.config.mjs +77 -0
- package/knip.json +18 -0
- package/memory/2026-03-04.md +4 -0
- package/opencode.lock.json +16 -0
- package/package.json +67 -0
- package/packages/agent-mockingbird-installer/README.md +31 -0
- package/packages/agent-mockingbird-installer/bin/agent-mockingbird-installer.mjs +44 -0
- package/packages/agent-mockingbird-installer/opencode.lock.json +16 -0
- package/packages/agent-mockingbird-installer/package.json +23 -0
- package/packages/contracts/package.json +19 -0
- package/packages/contracts/src/agentTypes.ts +122 -0
- package/packages/contracts/src/cron.ts +146 -0
- package/packages/contracts/src/dashboard.ts +378 -0
- package/packages/contracts/src/index.ts +3 -0
- package/packages/contracts/tsconfig.json +4 -0
- package/patches/opencode/0001-Wafflebot-OpenCode-baseline.patch +2341 -0
- package/patches/opencode/0002-Fix-OpenCode-web-entry-and-settings-icons.patch +104 -0
- package/patches/opencode/0003-fix-app-remove-duplicate-sidebar-mount.patch +32 -0
- package/patches/opencode/0004-Add-heartbeat-settings-and-usage-nav.patch +506 -0
- package/patches/opencode/0005-Use-chart-icon-for-usage-nav.patch +38 -0
- package/patches/opencode/0006-Modernize-cron-settings.patch +399 -0
- package/patches/opencode/0007-Rename-waffle-namespaces-to-mockingbird.patch +1110 -0
- package/patches/opencode/0008-Remove-cron-contract-section.patch +178 -0
- package/patches/opencode/0009-Rework-cron-tab-as-operations-console.patch +414 -0
- package/patches/opencode/0010-Refine-heartbeat-settings-controls.patch +208 -0
- package/runtime-assets/opencode-config/opencode.jsonc +25 -0
- package/runtime-assets/opencode-config/package.json +5 -0
- package/runtime-assets/opencode-config/plugins/agent-mockingbird.ts +715 -0
- package/runtime-assets/workspace/.agents/skills/config-auditor/SKILL.md +25 -0
- package/runtime-assets/workspace/.agents/skills/config-editor/SKILL.md +24 -0
- package/runtime-assets/workspace/.agents/skills/cron-manager/SKILL.md +57 -0
- package/runtime-assets/workspace/.agents/skills/memory-ops/SKILL.md +120 -0
- package/runtime-assets/workspace/.agents/skills/runtime-diagnose/SKILL.md +25 -0
- package/runtime-assets/workspace/AGENTS.md +56 -0
- package/runtime-assets/workspace/MEMORY.md +4 -0
- package/scripts/build-release-bundle.sh +66 -0
- package/scripts/check-ship.ts +383 -0
- package/scripts/dev-opencode.sh +17 -0
- package/scripts/dev-stack-opencode.sh +15 -0
- package/scripts/dev-stack.sh +61 -0
- package/scripts/install-systemd.sh +87 -0
- package/scripts/memory-e2e.sh +76 -0
- package/scripts/memory-trace-e2e.sh +141 -0
- package/scripts/migrate-opencode-env.ts +108 -0
- package/scripts/onboard/bootstrap.sh +32 -0
- package/scripts/opencode-swap.ts +78 -0
- package/scripts/opencode-sync.ts +715 -0
- package/scripts/runtime-assets-sync.mjs +83 -0
- package/scripts/setup-git-hooks.ts +39 -0
- package/tsconfig.json +45 -0
- package/tui.json +98 -0
- package/turbo.json +36 -0
- package/vendor/OPENCODE_VENDOR.md +13 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
From 13ca62af83f42bbb18c20ada138d3e4a084322a1 Mon Sep 17 00:00:00 2001
|
|
2
|
+
From: Matt Campbell <matt@battleshopper.com>
|
|
3
|
+
Date: Thu, 19 Mar 2026 21:54:09 -0500
|
|
4
|
+
Subject: [PATCH 10/10] Refine heartbeat settings controls
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
.../src/components/dialog-select-model.tsx | 7 +-
|
|
8
|
+
.../app/src/components/settings-heartbeat.tsx | 93 ++++++++++++++++---
|
|
9
|
+
2 files changed, 85 insertions(+), 15 deletions(-)
|
|
10
|
+
|
|
11
|
+
diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx
|
|
12
|
+
index 3654aab85..8a4a88a36 100644
|
|
13
|
+
--- a/packages/app/src/components/dialog-select-model.tsx
|
|
14
|
+
+++ b/packages/app/src/components/dialog-select-model.tsx
|
|
15
|
+
@@ -19,13 +19,14 @@ const isFree = (provider: string, cost: { input: number } | undefined) =>
|
|
16
|
+
provider === "opencode" && (!cost || cost.input === 0)
|
|
17
|
+
|
|
18
|
+
type ModelState = ReturnType<typeof useLocal>["model"]
|
|
19
|
+
+export type ModelSelectorState = Pick<ModelState, "list" | "visible" | "current" | "set">
|
|
20
|
+
|
|
21
|
+
const ModelList: Component<{
|
|
22
|
+
provider?: string
|
|
23
|
+
class?: string
|
|
24
|
+
onSelect: () => void
|
|
25
|
+
action?: JSX.Element
|
|
26
|
+
- model?: ModelState
|
|
27
|
+
+ model?: ModelSelectorState
|
|
28
|
+
}> = (props) => {
|
|
29
|
+
const model = props.model ?? useLocal().model
|
|
30
|
+
const language = useLanguage()
|
|
31
|
+
@@ -91,7 +92,7 @@ type ModelSelectorTriggerProps = Omit<ComponentProps<typeof Kobalte.Trigger>, "a
|
|
32
|
+
|
|
33
|
+
export function ModelSelectorPopover(props: {
|
|
34
|
+
provider?: string
|
|
35
|
+
- model?: ModelState
|
|
36
|
+
+ model?: ModelSelectorState
|
|
37
|
+
children?: JSX.Element
|
|
38
|
+
triggerAs?: ValidComponent
|
|
39
|
+
triggerProps?: ModelSelectorTriggerProps
|
|
40
|
+
@@ -189,7 +190,7 @@ export function ModelSelectorPopover(props: {
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
-export const DialogSelectModel: Component<{ provider?: string; model?: ModelState }> = (props) => {
|
|
45
|
+
+export const DialogSelectModel: Component<{ provider?: string; model?: ModelSelectorState }> = (props) => {
|
|
46
|
+
const dialog = useDialog()
|
|
47
|
+
const language = useLanguage()
|
|
48
|
+
|
|
49
|
+
diff --git a/packages/app/src/components/settings-heartbeat.tsx b/packages/app/src/components/settings-heartbeat.tsx
|
|
50
|
+
index 628fda355..770e0ccbd 100644
|
|
51
|
+
--- a/packages/app/src/components/settings-heartbeat.tsx
|
|
52
|
+
+++ b/packages/app/src/components/settings-heartbeat.tsx
|
|
53
|
+
@@ -1,9 +1,13 @@
|
|
54
|
+
import { Button } from "@opencode-ai/ui/button"
|
|
55
|
+
+import { Select } from "@opencode-ai/ui/select"
|
|
56
|
+
import { Switch } from "@opencode-ai/ui/switch"
|
|
57
|
+
import { showToast } from "@opencode-ai/ui/toast"
|
|
58
|
+
-import { onMount, Show, type Component } from "solid-js"
|
|
59
|
+
+import { createMemo, onMount, Show, type Component } from "solid-js"
|
|
60
|
+
import { createStore } from "solid-js/store"
|
|
61
|
+
-import { mockingbirdJson } from "@/utils/mockingbird"
|
|
62
|
+
+import { useModels } from "@/context/models"
|
|
63
|
+
+import { useGlobalSDK } from "@/context/global-sdk"
|
|
64
|
+
+import { mockingbirdJson, readPinnedWorkspace } from "@/utils/mockingbird"
|
|
65
|
+
+import { ModelSelectorPopover, type ModelSelectorState } from "./dialog-select-model"
|
|
66
|
+
import {
|
|
67
|
+
MockingbirdCard,
|
|
68
|
+
MockingbirdInput,
|
|
69
|
+
@@ -54,6 +58,12 @@ type RuntimePayload = {
|
|
70
|
+
path: string
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
+type LiveAgent = {
|
|
74
|
+
+ name: string
|
|
75
|
+
+ mode?: string
|
|
76
|
+
+ hidden?: boolean
|
|
77
|
+
+}
|
|
78
|
+
+
|
|
79
|
+
type HeartbeatFormState = {
|
|
80
|
+
enabled: boolean
|
|
81
|
+
interval: string
|
|
82
|
+
@@ -141,6 +151,8 @@ function buildHeartbeatPatch(form: HeartbeatFormState): HeartbeatRuntimeConfig {
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const SettingsHeartbeat: Component = () => {
|
|
86
|
+
+ const globalSDK = useGlobalSDK()
|
|
87
|
+
+ const models = useModels()
|
|
88
|
+
const [state, setState] = createStore({
|
|
89
|
+
loading: true,
|
|
90
|
+
saving: false,
|
|
91
|
+
@@ -148,6 +160,7 @@ export const SettingsHeartbeat: Component = () => {
|
|
92
|
+
error: "",
|
|
93
|
+
runtimeHash: "",
|
|
94
|
+
runtimePath: "",
|
|
95
|
+
+ agentOptions: [] as string[],
|
|
96
|
+
status: null as HeartbeatStatus | null,
|
|
97
|
+
form: {
|
|
98
|
+
enabled: true,
|
|
99
|
+
@@ -163,17 +176,60 @@ export const SettingsHeartbeat: Component = () => {
|
|
100
|
+
} as HeartbeatFormState,
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
+ const agentOptions = createMemo(() => {
|
|
104
|
+
+ const options = state.agentOptions
|
|
105
|
+
+ if (options.includes(state.form.agentId)) return options
|
|
106
|
+
+ return state.form.agentId ? [state.form.agentId, ...options] : options
|
|
107
|
+
+ })
|
|
108
|
+
+
|
|
109
|
+
+ const currentModel = createMemo(() => {
|
|
110
|
+
+ const value = state.form.model.trim()
|
|
111
|
+
+ if (!value) return
|
|
112
|
+
+ const slash = value.indexOf("/")
|
|
113
|
+
+ if (slash === -1) return
|
|
114
|
+
+ const providerID = value.slice(0, slash)
|
|
115
|
+
+ const modelID = value.slice(slash + 1)
|
|
116
|
+
+ if (!providerID || !modelID) return
|
|
117
|
+
+ return models.find({ providerID, modelID })
|
|
118
|
+
+ })
|
|
119
|
+
+
|
|
120
|
+
+ const heartbeatModelSelector: ModelSelectorState = {
|
|
121
|
+
+ list: models.list,
|
|
122
|
+
+ current: currentModel,
|
|
123
|
+
+ visible: models.visible,
|
|
124
|
+
+ set(item, options) {
|
|
125
|
+
+ if (!item) return
|
|
126
|
+
+ models.setVisibility(item, true)
|
|
127
|
+
+ if (options?.recent) models.recent.push(item)
|
|
128
|
+
+ setState("form", "model", `${item.providerID}/${item.modelID}`)
|
|
129
|
+
+ },
|
|
130
|
+
+ }
|
|
131
|
+
+
|
|
132
|
+
async function load() {
|
|
133
|
+
setState("loading", true)
|
|
134
|
+
setState("error", "")
|
|
135
|
+
try {
|
|
136
|
+
- const [heartbeat, runtime] = await Promise.all([
|
|
137
|
+
+ const [heartbeat, runtime, agents] = await Promise.all([
|
|
138
|
+
mockingbirdJson<HeartbeatStatusPayload>("/api/mockingbird/heartbeat"),
|
|
139
|
+
mockingbirdJson<RuntimePayload>("/api/mockingbird/runtime/config"),
|
|
140
|
+
+ readPinnedWorkspace().then(async (workspace) => {
|
|
141
|
+
+ const client = globalSDK.createClient({
|
|
142
|
+
+ directory: workspace.directory,
|
|
143
|
+
+ throwOnError: true,
|
|
144
|
+
+ })
|
|
145
|
+
+ const payload = await client.app.agents()
|
|
146
|
+
+ return payload.data ?? []
|
|
147
|
+
+ }),
|
|
148
|
+
])
|
|
149
|
+
setState("status", heartbeat.heartbeat)
|
|
150
|
+
setState("runtimeHash", runtime.hash)
|
|
151
|
+
setState("runtimePath", runtime.path)
|
|
152
|
+
+ setState(
|
|
153
|
+
+ "agentOptions",
|
|
154
|
+
+ agents
|
|
155
|
+
+ .filter((item: LiveAgent) => item.mode !== "subagent" && !item.hidden)
|
|
156
|
+
+ .map((item: LiveAgent) => item.name),
|
|
157
|
+
+ )
|
|
158
|
+
setState("form", toForm(heartbeat.heartbeat.config))
|
|
159
|
+
} catch (error) {
|
|
160
|
+
setState("error", error instanceof Error ? error.message : "Failed to load heartbeat settings")
|
|
161
|
+
@@ -313,11 +369,18 @@ export const SettingsHeartbeat: Component = () => {
|
|
162
|
+
<div class="grid gap-4 sm:grid-cols-2">
|
|
163
|
+
<div class="flex flex-col gap-2">
|
|
164
|
+
<span class="text-12-medium text-text-weak">Model</span>
|
|
165
|
+
- <MockingbirdInput
|
|
166
|
+
- value={state.form.model}
|
|
167
|
+
- placeholder="openai/gpt-5.4"
|
|
168
|
+
- onInput={(event) => setState("form", "model", event.currentTarget.value)}
|
|
169
|
+
- />
|
|
170
|
+
+ <ModelSelectorPopover model={heartbeatModelSelector}>
|
|
171
|
+
+ <Button
|
|
172
|
+
+ as="div"
|
|
173
|
+
+ variant="ghost"
|
|
174
|
+
+ size="normal"
|
|
175
|
+
+ class="w-full min-w-0 justify-between rounded-lg border border-border-weak-base bg-surface-base px-3 py-2 text-13-regular text-text-strong hover:bg-surface-base"
|
|
176
|
+
+ >
|
|
177
|
+
+ <span class="truncate text-left">
|
|
178
|
+
+ {(currentModel()?.name ?? state.form.model) || "Select model"}
|
|
179
|
+
+ </span>
|
|
180
|
+
+ </Button>
|
|
181
|
+
+ </ModelSelectorPopover>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="flex flex-col gap-2">
|
|
184
|
+
<span class="text-12-medium text-text-weak">Interval</span>
|
|
185
|
+
@@ -329,10 +392,16 @@ export const SettingsHeartbeat: Component = () => {
|
|
186
|
+
</div>
|
|
187
|
+
<div class="flex flex-col gap-2">
|
|
188
|
+
<span class="text-12-medium text-text-weak">Agent id</span>
|
|
189
|
+
- <MockingbirdInput
|
|
190
|
+
- value={state.form.agentId}
|
|
191
|
+
- placeholder="build"
|
|
192
|
+
- onInput={(event) => setState("form", "agentId", event.currentTarget.value)}
|
|
193
|
+
+ <Select
|
|
194
|
+
+ options={agentOptions()}
|
|
195
|
+
+ current={state.form.agentId}
|
|
196
|
+
+ onSelect={(value) => value && setState("form", "agentId", value)}
|
|
197
|
+
+ placeholder="Select agent"
|
|
198
|
+
+ variant="ghost"
|
|
199
|
+
+ size="normal"
|
|
200
|
+
+ class="w-full capitalize text-text-base"
|
|
201
|
+
+ valueClass="truncate text-13-regular text-text-base"
|
|
202
|
+
+ triggerProps={{ "data-action": "heartbeat-agent" }}
|
|
203
|
+
/>
|
|
204
|
+
</div>
|
|
205
|
+
<div class="flex flex-col gap-2">
|
|
206
|
+
--
|
|
207
|
+
2.53.0
|
|
208
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/config.json",
|
|
3
|
+
"agent": {
|
|
4
|
+
"general": {
|
|
5
|
+
"mode": "subagent",
|
|
6
|
+
"description": "General subagent for delegated tasks."
|
|
7
|
+
},
|
|
8
|
+
"agent-mockingbird": {
|
|
9
|
+
"mode": "primary",
|
|
10
|
+
"permission": {
|
|
11
|
+
"question": "allow"
|
|
12
|
+
},
|
|
13
|
+
"prompt": "You are the primary assistant running inside Agent Mockingbird.\n\n## Tool Call Style\nDefault: do not narrate routine, low-risk tool calls.\nNarrate only when it adds value: multi-step work, risky actions, or when the user asks.\nKeep narration brief and concrete.\nWhen a first-class tool exists, use it instead of asking the user to run equivalent manual commands.\n\n## Safety\nYou have no independent goals. Do not pursue self-preservation, replication, resource acquisition, or power-seeking behavior.\nPrioritize user intent, safety, and operator control. If instructions conflict or are ambiguous, pause and ask.\nDo not attempt to bypass safeguards, policy limits, or permission boundaries.\nDo not alter system prompts, safety policies, or runtime controls unless explicitly asked.\n\n## Runtime Tools\nAgent Mockingbird commonly exposes these tools in this workspace:\n- config_manager: read and patch runtime config with hash-safe writes.\n- agent_type_manager: manage OpenCode agent definitions.\n- memory_search: search durable workspace memory notes.\n- memory_get: read specific memory records before relying on details.\n- memory_remember: write durable facts/decisions/preferences.\n- cron_manager: manage cron jobs and execution metadata.\n\nIf a tool call fails, report the concrete error and choose the smallest safe fallback.\n\n## Skills\nWorkspace skills live in .agents/skills.\nWhen a task clearly matches a skill, follow that skill's instructions first.\n\n## Memory Recall (Agent Mockingbird)\nDurable memory source of truth is workspace markdown:\n- MEMORY.md\n- memory/*.md\n\nBefore answering questions about prior work, decisions, preferences, or history:\n1) run memory_search\n2) verify details with memory_get\n3) if new context should persist, use memory_remember\n\nRespect runtime memory tool mode:\n- hybrid: use injected memory context + tools\n- inject_only: rely on injected memory context, avoid tool assumptions\n- tool_only: use tools, no injected memory block expected\n\nWhen replacing outdated memory records, include supersedes when possible.\n\n## Heartbeats and Silent Replies\nIf you receive a heartbeat poll and there is nothing requiring action, reply exactly: HEARTBEAT_OK\nIf nothing should be sent to the user, reply exactly: NO_REPLY\nUse these tokens only as the complete reply when appropriate.\n\n## Workspace\nTreat the bound workspace as the authoritative project context.\nBootstrap context may be injected from workspace files like AGENTS.md, TOOLS.md, IDENTITY.md, USER.md, SOUL.md, HEARTBEAT.md, BOOTSTRAP.md, and MEMORY.md.\nUse that context, but follow explicit user instructions first.",
|
|
14
|
+
"tools": {
|
|
15
|
+
"memory_search": true,
|
|
16
|
+
"memory_get": true,
|
|
17
|
+
"memory_remember": true
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"default_agent": "agent-mockingbird",
|
|
22
|
+
"experimental": {
|
|
23
|
+
"batch_tool": true
|
|
24
|
+
}
|
|
25
|
+
}
|