@osovv/vv-opencode 1.7.0 → 2.0.0
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/CHANGELOG.md +25 -0
- package/README.md +22 -2
- package/dist/commands/preset.js +1 -1
- package/dist/commands/preset.js.map +1 -1
- package/dist/index.d.ts +7 -11
- package/dist/index.js +53 -20
- package/dist/index.js.map +1 -1
- package/dist/plugins/analytics/index.d.ts +2 -0
- package/dist/plugins/analytics/index.js +13 -2
- package/dist/plugins/analytics/index.js.map +1 -1
- package/dist/plugins/analytics/v2.d.ts +21 -0
- package/dist/plugins/analytics/v2.js +133 -0
- package/dist/plugins/analytics/v2.js.map +1 -0
- package/dist/plugins/guardian/index.d.ts +46 -0
- package/dist/plugins/guardian/index.js +21 -6
- package/dist/plugins/guardian/index.js.map +1 -1
- package/dist/plugins/guardian/v2.d.ts +13 -0
- package/dist/plugins/guardian/v2.js +161 -0
- package/dist/plugins/guardian/v2.js.map +1 -0
- package/dist/plugins/hashline-edit/index.d.ts +33 -1
- package/dist/plugins/hashline-edit/index.js +38 -14
- package/dist/plugins/hashline-edit/index.js.map +1 -1
- package/dist/plugins/hashline-edit/schemas.d.ts +7 -7
- package/dist/plugins/hashline-edit/v2.d.ts +12 -0
- package/dist/plugins/hashline-edit/v2.js +145 -0
- package/dist/plugins/hashline-edit/v2.js.map +1 -0
- package/dist/plugins/model-roles/index.d.ts +2 -0
- package/dist/plugins/model-roles/index.js +13 -2
- package/dist/plugins/model-roles/index.js.map +1 -1
- package/dist/plugins/model-roles/v2.d.ts +24 -0
- package/dist/plugins/model-roles/v2.js +274 -0
- package/dist/plugins/model-roles/v2.js.map +1 -0
- package/dist/plugins/peak-hours/index.d.ts +2 -0
- package/dist/plugins/peak-hours/index.js +13 -2
- package/dist/plugins/peak-hours/index.js.map +1 -1
- package/dist/plugins/peak-hours/v2.d.ts +12 -0
- package/dist/plugins/peak-hours/v2.js +95 -0
- package/dist/plugins/peak-hours/v2.js.map +1 -0
- package/dist/plugins/secrets-redaction/index.d.ts +7 -0
- package/dist/plugins/secrets-redaction/index.js +17 -4
- package/dist/plugins/secrets-redaction/index.js.map +1 -1
- package/dist/plugins/secrets-redaction/v2.d.ts +14 -0
- package/dist/plugins/secrets-redaction/v2.js +100 -0
- package/dist/plugins/secrets-redaction/v2.js.map +1 -0
- package/dist/plugins/spec-guard/index.d.ts +2 -0
- package/dist/plugins/spec-guard/index.js +13 -2
- package/dist/plugins/spec-guard/index.js.map +1 -1
- package/dist/plugins/spec-guard/v2.d.ts +12 -0
- package/dist/plugins/spec-guard/v2.js +139 -0
- package/dist/plugins/spec-guard/v2.js.map +1 -0
- package/dist/plugins/system-context-injection/agent-contexts.d.ts +5 -0
- package/dist/plugins/system-context-injection/agent-contexts.js +164 -0
- package/dist/plugins/system-context-injection/agent-contexts.js.map +1 -0
- package/dist/plugins/system-context-injection/index.d.ts +2 -0
- package/dist/plugins/system-context-injection/index.js +16 -146
- package/dist/plugins/system-context-injection/index.js.map +1 -1
- package/dist/plugins/system-context-injection/v2.d.ts +13 -0
- package/dist/plugins/system-context-injection/v2.js +60 -0
- package/dist/plugins/system-context-injection/v2.js.map +1 -0
- package/dist/plugins/tool-history-compaction/index.d.ts +2 -0
- package/dist/plugins/tool-history-compaction/index.js +13 -2
- package/dist/plugins/tool-history-compaction/index.js.map +1 -1
- package/dist/plugins/tool-history-compaction/v2.d.ts +11 -0
- package/dist/plugins/tool-history-compaction/v2.js +56 -0
- package/dist/plugins/tool-history-compaction/v2.js.map +1 -0
- package/dist/plugins/v2-runtime/config-watcher.d.ts +26 -0
- package/dist/plugins/v2-runtime/config-watcher.js +111 -0
- package/dist/plugins/v2-runtime/config-watcher.js.map +1 -0
- package/dist/plugins/v2-runtime/index.d.ts +50 -0
- package/dist/plugins/v2-runtime/index.js +114 -0
- package/dist/plugins/v2-runtime/index.js.map +1 -0
- package/dist/plugins/v2-runtime/location-config.d.ts +51 -0
- package/dist/plugins/v2-runtime/location-config.js +91 -0
- package/dist/plugins/v2-runtime/location-config.js.map +1 -0
- package/dist/plugins/v2-runtime/setup.d.ts +48 -0
- package/dist/plugins/v2-runtime/setup.js +174 -0
- package/dist/plugins/v2-runtime/setup.js.map +1 -0
- package/dist/plugins/web-tools/index.d.ts +2 -0
- package/dist/plugins/web-tools/index.js +13 -2
- package/dist/plugins/web-tools/index.js.map +1 -1
- package/dist/plugins/web-tools/v2.d.ts +11 -0
- package/dist/plugins/web-tools/v2.js +99 -0
- package/dist/plugins/web-tools/v2.js.map +1 -0
- package/dist/plugins/workflow/index.d.ts +2 -0
- package/dist/plugins/workflow/index.js +13 -2
- package/dist/plugins/workflow/index.js.map +1 -1
- package/dist/plugins/workflow/results.d.ts +16 -16
- package/dist/plugins/workflow/v2.d.ts +58 -0
- package/dist/plugins/workflow/v2.js +181 -0
- package/dist/plugins/workflow/v2.js.map +1 -0
- package/dist/tui.d.ts +1 -0
- package/dist/tui.js +41 -6
- package/dist/tui.js.map +1 -1
- package/package.json +13 -5
- package/schemas/vvoc/v3.json +1 -1
- package/server.js +7 -0
- package/templates/skills/vv-execute/references/tool-contracts.md +1 -1
- package/tui.js +7 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
## 2.0.0 (2026-09-26)
|
|
2
|
+
|
|
3
|
+
### Summary
|
|
4
|
+
|
|
5
|
+
Version 2.0.0 makes the package dual-runtime, so the same pinned install now loads under both OpenCode v1 (via the object server() entrypoint, floor raised to 1.18.29) and OpenCode v2 (via Plugin.define setup, floor 2.0.18), and vvoc install and sync work unchanged on either major line. All eleven server plugins — including Guardian, Hashline Edit, Model Roles, Workflow, Secrets Redaction, Web Tools, Tool-History Compaction, Analytics, Peak Hours, Spec Guard, and System Context Injection — were ported onto the v2 domain APIs, with configuration now resolved per session location so one shared server can host projects with different toggles, role maps, and policies. On v2, changes to vvoc.json apply through replayable transforms and a config watcher without restarting OpenCode, and each session pins its role-resolved model on the first prompt so long-running sessions stay anchored to their starting preset while new sessions pick up a switched one, verified end to end against a real sandboxed v2 server via the new bun run e2e:v2 harness. The TUI module gained a v2 entrypoint registering the /context command, README documents the dual-runtime support matrix and behaviors, and the failure semantics of existing plugins were preserved, with workflow continuation degrading fail-closed under the v2 prompt shape.
|
|
6
|
+
|
|
7
|
+
* feat(analytics): port event collection to OpenCode v2 event stream (T-003 1/5) ([6b368fe](https://github.com/osovv/vv-opencode/commit/6b368fe))
|
|
8
|
+
* feat(e2e): repeatable sandboxed v2 harness; TUI dual entry (T-007/T-009) ([0126f13](https://github.com/osovv/vv-opencode/commit/0126f13))
|
|
9
|
+
* feat(grace): approve C-OPENCODE-V2-MIGRATION spec and plan ([2ce153a](https://github.com/osovv/vv-opencode/commit/2ce153a))
|
|
10
|
+
* feat(grace): synchronize graph, verification, requirements, and harness tests (T-010) ([6cc061b](https://github.com/osovv/vv-opencode/commit/6cc061b))
|
|
11
|
+
* feat(guardian): port permission review to v2 events via client shim (T-003) ([9feadfa](https://github.com/osovv/vv-opencode/commit/9feadfa))
|
|
12
|
+
* feat(hashline-edit): port per-model edit routing to v2 (T-004) ([51227ec](https://github.com/osovv/vv-opencode/commit/51227ec))
|
|
13
|
+
* feat(model-roles): per-session prompt model application with preset anchoring (T-006 E2E) ([e44e6ba](https://github.com/osovv/vv-opencode/commit/e44e6ba))
|
|
14
|
+
* feat(model-roles): v2 transforms with restart-free preset switching (T-006) ([a68da72](https://github.com/osovv/vv-opencode/commit/a68da72))
|
|
15
|
+
* feat(plugins): dual-runtime entrypoints for OpenCode v1 and v2 (T-001) ([72f3100](https://github.com/osovv/vv-opencode/commit/72f3100))
|
|
16
|
+
* feat(plugins): port peak-hours and web-tools to v2 (T-003/T-004) ([0b98419](https://github.com/osovv/vv-opencode/commit/0b98419))
|
|
17
|
+
* feat(plugins): port tool-history-compaction, spec-guard, secrets-redaction to v2 (T-003/T-004) ([2c2496a](https://github.com/osovv/vv-opencode/commit/2c2496a))
|
|
18
|
+
* feat(system-context-injection): port guidance injection to v2 session context hook (T-004 1/4) ([7b5ec94](https://github.com/osovv/vv-opencode/commit/7b5ec94))
|
|
19
|
+
* feat(v2-runtime): add server/tui package shims and raw-config agent role references ([8183077](https://github.com/osovv/vv-opencode/commit/8183077))
|
|
20
|
+
* feat(v2-runtime): per-location config resolver and debounced watcher (T-002) ([dee353b](https://github.com/osovv/vv-opencode/commit/dee353b))
|
|
21
|
+
* feat(workflow): bridge full enforcement surface onto v2 domains (T-005) ([ecf5763](https://github.com/osovv/vv-opencode/commit/ecf5763))
|
|
22
|
+
* docs(readme): document dual-runtime v2 support matrix and behaviors (T-008) ([9104eb2](https://github.com/osovv/vv-opencode/commit/9104eb2))
|
|
23
|
+
* fix(grace): complete v2-runtime module maps ([a8044c3](https://github.com/osovv/vv-opencode/commit/a8044c3))
|
|
24
|
+
* fix(grace): synchronize module maps with dual entrypoint exports ([acd7024](https://github.com/osovv/vv-opencode/commit/acd7024))
|
|
25
|
+
|
|
1
26
|
## 1.7.0 (2026-09-25)
|
|
2
27
|
|
|
3
28
|
### Summary
|
package/README.md
CHANGED
|
@@ -74,7 +74,27 @@ vvoc install
|
|
|
74
74
|
- writes the canonical `vvoc.json` config;
|
|
75
75
|
- sets `vv-controller` as your default OpenCode agent, with the spec, planning, review, reflection, and handoff skills auto-triggered by request type.
|
|
76
76
|
|
|
77
|
-
The TUI integration requires OpenCode `1.18.2` or newer; `vvoc status` and `vvoc doctor` report the installed host version and fail compatibility checks for older releases.
|
|
77
|
+
The TUI integration requires OpenCode `1.18.2` or newer on the v1 line and OpenCode `2.0.18` or newer on the v2 line; `vvoc status` and `vvoc doctor` report the installed host version and fail compatibility checks for older releases.
|
|
78
|
+
|
|
79
|
+
### OpenCode v2 support
|
|
80
|
+
|
|
81
|
+
Since 2.0.0 the package is dual-runtime and supports both OpenCode 1 and OpenCode 2: the same pinned package loads under OpenCode v1 (`>= 1.18.29`, through the object `server()` entrypoint) and OpenCode v2 (`>= 2.0.18`, through `Plugin.define` `setup()`). Installing either major line with `vvoc install` / `vvoc sync` works unchanged: v2 reads the same `plugin` array fields and the same `.opencode/` layout.
|
|
82
|
+
|
|
83
|
+
What changes on the v2 runtime:
|
|
84
|
+
|
|
85
|
+
- **One server, many sessions.** v2 runs one background server with thin clients; vvoc plugins resolve their configuration per session location instead of one startup snapshot, so a single server can host projects with different toggles, role maps, and policies.
|
|
86
|
+
- **Restart-free presets.** Changing roles or presets in `vvoc.json` takes effect through replayable transforms and a config watcher — no OpenCode restart. Each session pins its role-resolved model on its first prompt, so a long autonomous session stays anchored to its starting preset while new sessions pick up the switched one (verified end to end against a real v2 server by `bun run e2e:v2`).
|
|
87
|
+
- **Role references survive config normalization.** v2 strips `vv-role:` model strings from config-defined agents; the model-roles plugin reads them from the raw project config and applies them per session.
|
|
88
|
+
- **Same-name tool registration replaces built-ins.** `web_search` / `web_fetch` override the v2 built-ins while enabled and restore them when disabled.
|
|
89
|
+
- **The workflow delegated continuation prompt degrades fail-closed** under the v2 prompt shape: unrecognized or unavailable continuation paths reject the attempt and never accept a report.
|
|
90
|
+
|
|
91
|
+
The full v2 `/context` TUI inspector ships in a follow-up release; the v2 TUI entry registers the `/context` command with a status dialog while the complete v1 inspector keeps running on the v1 runtime.
|
|
92
|
+
|
|
93
|
+
End-to-end verification against a sandboxed, real OpenCode v2 server (isolated binary, disposable XDG homes, PID-exact lifecycle):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
bun run e2e:v2
|
|
97
|
+
```
|
|
78
98
|
|
|
79
99
|
**Want to try it without touching your global setup?** Scope everything to one project:
|
|
80
100
|
|
|
@@ -285,7 +305,7 @@ OpenCode keeps server/runtime plugins and native TUI plugins in separate configu
|
|
|
285
305
|
|
|
286
306
|
`vvoc install`, `vvoc init`, and `vvoc sync` conservatively add the pinned base package specifier (for example `@osovv/vv-opencode@X.Y.Z`) to `tui.json(c)`; sync also migrates the broken legacy `@osovv/vv-opencode/tui` form and older managed pins. Existing comments, unrelated settings, unrelated plugin entries, and `[specifier, options]` tuples are preserved; malformed plugin entries fail without rewrite.
|
|
287
307
|
|
|
288
|
-
|
|
308
|
+
On the v1 runtime, plugins load the effective `vvoc.json` once during OpenCode startup and share one immutable config snapshot for the lifetime of the process; restart OpenCode after changing `vvoc.json` or `tui.json(c)`. On the v2 runtime, plugin configuration resolves per session location and role or preset changes apply through config watching without a restart (see [OpenCode v2 support](#opencode-v2-support)).
|
|
289
309
|
|
|
290
310
|
### Strict schema, loud failures
|
|
291
311
|
|
package/dist/commands/preset.js
CHANGED
|
@@ -186,7 +186,7 @@ async function runPresetCommand(args) {
|
|
|
186
186
|
console.log(`Target: ${applied.path}`);
|
|
187
187
|
if (applied.changes.some((change) => change.action === "updated") ||
|
|
188
188
|
applied.orchestration.action === "updated") {
|
|
189
|
-
console.log("
|
|
189
|
+
console.log("On OpenCode v1, restart OpenCode to apply the changed roles or orchestration profile. On OpenCode v2, the config watcher applies them without a restart; running sessions stay anchored to their starting preset.");
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
async function readConfiguredPresets(options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/commands/preset.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../src/commands/preset.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export { ToolHistoryCompactionPlugin } from "./plugins/tool-history-compaction/index.js";
|
|
9
|
-
export { AnalyticsPlugin } from "./plugins/analytics/index.js";
|
|
10
|
-
export { PeakHoursPlugin } from "./plugins/peak-hours/index.js";
|
|
11
|
-
export { SpecGuardPlugin } from "./plugins/spec-guard/index.js";
|
|
1
|
+
/**
|
|
2
|
+
* v1 plugin factories in the historical named-export load order from the
|
|
3
|
+
* pre-migration root module, so hook trigger order stays deterministic.
|
|
4
|
+
*/
|
|
5
|
+
export declare const V1_PLUGIN_ORDER: import("@opencode-ai/plugin").Plugin[];
|
|
6
|
+
declare const _default: import("./plugins/v2-runtime/index.js").DualPlugin;
|
|
7
|
+
export default _default;
|
package/dist/index.js
CHANGED
|
@@ -1,30 +1,63 @@
|
|
|
1
1
|
// FILE: src/index.ts
|
|
2
|
-
// VERSION:
|
|
2
|
+
// VERSION: 2.0.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE:
|
|
5
|
-
// SCOPE: Package-root
|
|
6
|
-
// DEPENDS: [src/plugins/guardian/index.ts, src/plugins/hashline-edit/index.ts, src/plugins/model-roles/index.ts, src/plugins/system-context-injection/index.ts, src/plugins/workflow/index.ts, src/plugins/secrets-redaction.ts, src/plugins/web-tools/index.ts, src/plugins/tool-history-compaction/index.ts, src/plugins/analytics/index.ts, src/plugins/peak-hours/index.ts, src/plugins/spec-guard/index.ts]
|
|
7
|
-
// LINKS: [M-PLUGIN-GUARDIAN, M-PLUGIN-HASHLINE-EDIT, M-PLUGIN-MODEL-ROLES, M-PLUGIN-SYSTEM-CONTEXT-INJECTION, M-PLUGIN-WORKFLOW, M-PLUGIN-SECRETS-REDACTION, M-PLUGIN-WEB-TOOLS, M-PLUGIN-TOOL-HISTORY-COMPACTION, M-PLUGIN-ANALYTICS, M-PLUGIN-PEAK-HOURS, M-PLUGIN-SPEC-GUARD]
|
|
8
|
-
// ROLE:
|
|
9
|
-
// MAP_MODE:
|
|
4
|
+
// PURPOSE: Publish the dual-runtime vv-opencode package entrypoint that loads under OpenCode v1 (>= 1.18.29 via server()) and OpenCode v2 (>= 2.0.18 via setup()).
|
|
5
|
+
// SCOPE: Package-root default export aggregating the eleven vvoc server plugins for the v1 runtime and delegating to the v2 runtime adapter for the v2 runtime; no named plugin exports remain at the root so neither runtime can double-register.
|
|
6
|
+
// DEPENDS: [src/plugins/v2-runtime/index.ts, src/plugins/guardian/index.ts, src/plugins/hashline-edit/index.ts, src/plugins/model-roles/index.ts, src/plugins/system-context-injection/index.ts, src/plugins/workflow/index.ts, src/plugins/secrets-redaction/index.ts, src/plugins/web-tools/index.ts, src/plugins/tool-history-compaction/index.ts, src/plugins/analytics/index.ts, src/plugins/peak-hours/index.ts, src/plugins/spec-guard/index.ts]
|
|
7
|
+
// LINKS: [M-PLUGIN-V2-RUNTIME, M-PLUGIN-GUARDIAN, M-PLUGIN-HASHLINE-EDIT, M-PLUGIN-MODEL-ROLES, M-PLUGIN-SYSTEM-CONTEXT-INJECTION, M-PLUGIN-WORKFLOW, M-PLUGIN-SECRETS-REDACTION, M-PLUGIN-WEB-TOOLS, M-PLUGIN-TOOL-HISTORY-COMPACTION, M-PLUGIN-ANALYTICS, M-PLUGIN-PEAK-HOURS, M-PLUGIN-SPEC-GUARD]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
10
|
// END_MODULE_CONTRACT
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
|
-
//
|
|
13
|
+
// default - Dual-runtime vvoc plugin entrypoint: v2 setup() through the v2 runtime adapter, v1 server() aggregating all server plugins.
|
|
14
|
+
// V1_PLUGIN_ORDER - Registration order of the v1 plugin factories, preserving the pre-migration named-export load order.
|
|
14
15
|
// END_MODULE_MAP
|
|
15
16
|
//
|
|
16
17
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [C-
|
|
18
|
+
// LAST_CHANGE: [C-OPENCODE-V2-MIGRATION - Replaced the eleven named root plugin exports with one dual-runtime default export; per-plugin factories remain available through their ./plugins/* subpath dual entrypoints.]
|
|
18
19
|
// END_CHANGE_SUMMARY
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
import { aggregateV1Plugins, defineDualPlugin } from "./plugins/v2-runtime/index.js";
|
|
21
|
+
import { GuardianPlugin } from "./plugins/guardian/index.js";
|
|
22
|
+
import { HashlineEditPlugin } from "./plugins/hashline-edit/index.js";
|
|
23
|
+
import { ModelRolesPlugin } from "./plugins/model-roles/index.js";
|
|
24
|
+
import { SystemContextInjectionPlugin } from "./plugins/system-context-injection/index.js";
|
|
25
|
+
import { WorkflowPlugin } from "./plugins/workflow/index.js";
|
|
26
|
+
import { SecretsRedactionPlugin } from "./plugins/secrets-redaction/index.js";
|
|
27
|
+
import { WebToolsPlugin } from "./plugins/web-tools/index.js";
|
|
28
|
+
import { ToolHistoryCompactionPlugin } from "./plugins/tool-history-compaction/index.js";
|
|
29
|
+
import { AnalyticsPlugin } from "./plugins/analytics/index.js";
|
|
30
|
+
import { PeakHoursPlugin } from "./plugins/peak-hours/index.js";
|
|
31
|
+
import { SpecGuardPlugin } from "./plugins/spec-guard/index.js";
|
|
32
|
+
import { setupV2Plugins } from "./plugins/v2-runtime/setup.js";
|
|
33
|
+
// START_BLOCK_V1_PLUGIN_ORDER
|
|
34
|
+
/**
|
|
35
|
+
* v1 plugin factories in the historical named-export load order from the
|
|
36
|
+
* pre-migration root module, so hook trigger order stays deterministic.
|
|
37
|
+
*/
|
|
38
|
+
export const V1_PLUGIN_ORDER = [
|
|
39
|
+
GuardianPlugin,
|
|
40
|
+
HashlineEditPlugin,
|
|
41
|
+
ModelRolesPlugin,
|
|
42
|
+
SystemContextInjectionPlugin,
|
|
43
|
+
WorkflowPlugin,
|
|
44
|
+
SecretsRedactionPlugin,
|
|
45
|
+
WebToolsPlugin,
|
|
46
|
+
ToolHistoryCompactionPlugin,
|
|
47
|
+
AnalyticsPlugin,
|
|
48
|
+
PeakHoursPlugin,
|
|
49
|
+
SpecGuardPlugin,
|
|
50
|
+
];
|
|
51
|
+
// END_BLOCK_V1_PLUGIN_ORDER
|
|
52
|
+
// START_BLOCK_DUAL_ROOT_ENTRY
|
|
53
|
+
export default defineDualPlugin({
|
|
54
|
+
id: "vvoc",
|
|
55
|
+
async v1(input, options) {
|
|
56
|
+
return aggregateV1Plugins(V1_PLUGIN_ORDER, input, options, (error, index) => {
|
|
57
|
+
console.error(`[vvoc][v1-runtime] plugin ${V1_PLUGIN_ORDER[index]?.name ?? `#${index}`} failed to load: ${String(error)}`);
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
v2: setupV2Plugins,
|
|
61
|
+
});
|
|
62
|
+
// END_BLOCK_DUAL_ROOT_ENTRY
|
|
30
63
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,iBAAiB;AACjB,wBAAwB;AACxB,qKAAqK;AACrK,qPAAqP;AACrP,0bAA0b;AAC1b,wSAAwS;AACxS,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,0IAA0I;AAC1I,2HAA2H;AAC3H,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,2NAA2N;AAC3N,qBAAqB;AAErB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,8BAA8B;AAC9B;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,4BAA4B;IAC5B,cAAc;IACd,sBAAsB;IACtB,cAAc;IACd,2BAA2B;IAC3B,eAAe;IACf,eAAe;IACf,eAAe;CAChB,CAAC;AACF,4BAA4B;AAE5B,8BAA8B;AAC9B,eAAe,gBAAgB,CAAC;IAC9B,EAAE,EAAE,MAAM;IACV,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO;QACrB,OAAO,kBAAkB,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1E,OAAO,CAAC,KAAK,CACX,6BAA6B,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,KAAK,EAAE,oBAAoB,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5G,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,EAAE,EAAE,cAAc;CACnB,CAAC,CAAC;AACH,4BAA4B"}
|
|
@@ -16,3 +16,5 @@ export type AnalyticsPluginDependencies = {
|
|
|
16
16
|
*/
|
|
17
17
|
export declare function createAnalyticsPlugin(dependencies?: Partial<AnalyticsPluginDependencies>): Plugin;
|
|
18
18
|
export declare const AnalyticsPlugin: Plugin;
|
|
19
|
+
declare const _default: import("../v2-runtime/index.js").DualPlugin;
|
|
20
|
+
export default _default;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Collect per-step token usage telemetry and session metadata into the analytics store with vvoc and OpenCode version attribution.
|
|
5
5
|
// SCOPE: Plugin toggle gating, assistant message attribution tracking, session version tracking, step-finish usage records, session records, and fail-soft event handling.
|
|
6
|
-
// DEPENDS: [@opencode-ai/plugin, src/lib/config-layers.ts, src/lib/package.ts, src/lib/plugin-toggle-config.ts, src/lib/analytics/store.ts, src/lib/analytics/types.ts]
|
|
6
|
+
// DEPENDS: [@opencode-ai/plugin, src/lib/config-layers.ts, src/lib/package.ts, src/lib/plugin-toggle-config.ts, src/lib/analytics/store.ts, src/lib/analytics/types.ts, src/plugins/v2-runtime/index.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-ANALYTICS, M-ANALYTICS-STORE, M-ANALYTICS-TYPES, M-PLUGIN-TOGGLE-CONFIG]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
// AnalyticsPluginDependencies - Injectable enablement and append dependencies for focused tests.
|
|
14
14
|
// createAnalyticsPlugin - Builds an OpenCode server plugin with injectable dependencies.
|
|
15
15
|
// AnalyticsPlugin - Default production analytics server plugin.
|
|
16
|
+
// default - Dual subpath entrypoint: v2 setup() seam plus v1 server() delegating to the named factory.
|
|
16
17
|
// END_MODULE_MAP
|
|
17
18
|
//
|
|
18
19
|
// START_CHANGE_SUMMARY
|
|
19
|
-
// LAST_CHANGE: [2026-08-19-cache-hit-rate-analytics - Added step-finish telemetry collection with session-derived OpenCode version attribution.]
|
|
20
|
+
// LAST_CHANGE: [C-OPENCODE-V2-MIGRATION T-001 - Added the dual subpath entrypoint so the plugin loads under OpenCode v1 via server() and v2 via setup(). Prior: 2026-08-19-cache-hit-rate-analytics - Added step-finish telemetry collection with session-derived OpenCode version attribution.]
|
|
20
21
|
// END_CHANGE_SUMMARY
|
|
21
22
|
import { loadVvocConfig } from "../../lib/config-layers.js";
|
|
22
23
|
import { getPackageVersionSync } from "../../lib/package.js";
|
|
@@ -148,4 +149,14 @@ function toCount(value) {
|
|
|
148
149
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
149
150
|
}
|
|
150
151
|
// END_BLOCK_EVENT_HANDLERS
|
|
152
|
+
// START_BLOCK_DUAL_SUBPATH_ENTRY
|
|
153
|
+
import { defineDualPlugin } from "../v2-runtime/index.js";
|
|
154
|
+
import { createV2Adapter } from "../v2-runtime/setup.js";
|
|
155
|
+
import { setupAnalyticsV2 } from "./v2.js";
|
|
156
|
+
export default defineDualPlugin({
|
|
157
|
+
id: "vvoc.analytics",
|
|
158
|
+
v1: AnalyticsPlugin,
|
|
159
|
+
v2: (ctx) => setupAnalyticsV2(createV2Adapter(ctx)),
|
|
160
|
+
});
|
|
161
|
+
// END_BLOCK_DUAL_SUBPATH_ENTRY
|
|
151
162
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/analytics/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,iBAAiB;AACjB,wBAAwB;AACxB,8IAA8I;AAC9I,6KAA6K;AAC7K,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/analytics/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Plugin as V2Plugin } from "@opencode/plugin";
|
|
2
|
+
import type { V2AdapterContext } from "../v2-runtime/setup.js";
|
|
3
|
+
import type { AnalyticsRecord } from "../../lib/analytics/types.js";
|
|
4
|
+
export type AnalyticsV2Dependencies = {
|
|
5
|
+
append: (record: AnalyticsRecord) => Promise<void>;
|
|
6
|
+
vvocVersion: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Register the analytics handlers on the v2 event stream.
|
|
10
|
+
*
|
|
11
|
+
* Mapping from the v1 event contract: the v1 message.part.updated
|
|
12
|
+
* step-finish record becomes the v2 session.step.ended record, session records
|
|
13
|
+
* keep coming from session.created, and agent attribution is tracked from
|
|
14
|
+
* session.agent.selected events. Provider and model attribution are empty
|
|
15
|
+
* strings in this port because the v2 usage events do not carry them; the
|
|
16
|
+
* store schema tolerates the gap exactly like the v1 fallback did.
|
|
17
|
+
*
|
|
18
|
+
* Enablement is resolved per event through the event's location directory so
|
|
19
|
+
* one shared server can host projects with analytics enabled and disabled.
|
|
20
|
+
*/
|
|
21
|
+
export declare function setupAnalyticsV2(adapter: V2AdapterContext, dependencies?: Partial<AnalyticsV2Dependencies>): Promise<V2Plugin.Cleanup | void>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// FILE: src/plugins/analytics/v2.ts
|
|
2
|
+
// VERSION: 1.0.0
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Register the analytics plugin on the OpenCode v2 runtime event stream with per-location enablement.
|
|
5
|
+
// SCOPE: v2 setup only: subscribe to session.step.ended for per-step usage records, session.created for session records, and session.agent.selected for best-effort agent attribution, resolving the analytics toggle from each event's location directory and staying fail-soft on every handler error.
|
|
6
|
+
// DEPENDS: [@opencode/plugin, src/lib/analytics/store.ts, src/lib/analytics/types.ts, src/lib/package.ts, src/plugins/v2-runtime/setup.ts]
|
|
7
|
+
// LINKS: [M-PLUGIN-ANALYTICS, V-M-PLUGIN-ANALYTICS, M-PLUGIN-V2-RUNTIME]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// setupAnalyticsV2 - Register the analytics event stream handlers for one OpenCode v2 plugin context.
|
|
14
|
+
// AnalyticsV2Dependencies - Injectable append, version, and enablement dependencies for focused tests.
|
|
15
|
+
// END_MODULE_MAP
|
|
16
|
+
//
|
|
17
|
+
// START_CHANGE_SUMMARY
|
|
18
|
+
// LAST_CHANGE: [C-OPENCODE-V2-MIGRATION T-003 - Ported analytics onto the v2 event stream with per-location gating.]
|
|
19
|
+
// END_CHANGE_SUMMARY
|
|
20
|
+
import { appendAnalyticsRecord } from "../../lib/analytics/store.js";
|
|
21
|
+
import { getPackageVersionSync } from "../../lib/package.js";
|
|
22
|
+
import { isVvocPluginEnabled } from "../../lib/plugin-toggle-config.js";
|
|
23
|
+
const DEFAULT_DEPENDENCIES = {
|
|
24
|
+
append: (record) => appendAnalyticsRecord(record),
|
|
25
|
+
vvocVersion: getPackageVersionSync(),
|
|
26
|
+
};
|
|
27
|
+
// END_BLOCK_ANALYTICS_V2_DEPENDENCIES
|
|
28
|
+
// START_BLOCK_SETUP_ANALYTICS_V2
|
|
29
|
+
/**
|
|
30
|
+
* Register the analytics handlers on the v2 event stream.
|
|
31
|
+
*
|
|
32
|
+
* Mapping from the v1 event contract: the v1 message.part.updated
|
|
33
|
+
* step-finish record becomes the v2 session.step.ended record, session records
|
|
34
|
+
* keep coming from session.created, and agent attribution is tracked from
|
|
35
|
+
* session.agent.selected events. Provider and model attribution are empty
|
|
36
|
+
* strings in this port because the v2 usage events do not carry them; the
|
|
37
|
+
* store schema tolerates the gap exactly like the v1 fallback did.
|
|
38
|
+
*
|
|
39
|
+
* Enablement is resolved per event through the event's location directory so
|
|
40
|
+
* one shared server can host projects with analytics enabled and disabled.
|
|
41
|
+
*/
|
|
42
|
+
export async function setupAnalyticsV2(adapter, dependencies = {}) {
|
|
43
|
+
const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
|
|
44
|
+
const opencodeVersion = String(adapter.ctx.app?.version ?? "unknown");
|
|
45
|
+
const sessionAgents = new Map();
|
|
46
|
+
let loggedFailure = false;
|
|
47
|
+
const failSoft = async (operation) => {
|
|
48
|
+
try {
|
|
49
|
+
await operation();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!loggedFailure) {
|
|
53
|
+
loggedFailure = true;
|
|
54
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
55
|
+
console.error(`[vvoc analytics] collection error: ${message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
void (async () => {
|
|
61
|
+
try {
|
|
62
|
+
for await (const event of adapter.ctx.event.subscribe({ signal: controller.signal })) {
|
|
63
|
+
await failSoft(async () => {
|
|
64
|
+
const typed = event;
|
|
65
|
+
const directory = typed.location?.directory;
|
|
66
|
+
if (!directory)
|
|
67
|
+
return;
|
|
68
|
+
if (typed.type === "session.agent.selected") {
|
|
69
|
+
const sessionID = typed.data?.sessionID;
|
|
70
|
+
const agent = typed.data?.agent;
|
|
71
|
+
if (typeof sessionID === "string" && typeof agent === "string") {
|
|
72
|
+
sessionAgents.set(sessionID, agent);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const snapshot = await adapter.resolver.forDirectory(directory);
|
|
77
|
+
if (!snapshot || !isVvocPluginEnabled(snapshot.config, "analytics"))
|
|
78
|
+
return;
|
|
79
|
+
if (typed.type === "session.created") {
|
|
80
|
+
const sessionID = typed.data?.sessionID ?? typed.data?.id;
|
|
81
|
+
if (typeof sessionID !== "string")
|
|
82
|
+
return;
|
|
83
|
+
await deps.append({
|
|
84
|
+
kind: "session",
|
|
85
|
+
ts: new Date().toISOString(),
|
|
86
|
+
sessionID,
|
|
87
|
+
projectID: directory,
|
|
88
|
+
title: "",
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (typed.type === "session.step.ended") {
|
|
93
|
+
const data = typed.data;
|
|
94
|
+
if (!data || typeof data.sessionID !== "string")
|
|
95
|
+
return;
|
|
96
|
+
const toCount = (value) => typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
97
|
+
const record = {
|
|
98
|
+
kind: "usage",
|
|
99
|
+
ts: new Date().toISOString(),
|
|
100
|
+
projectID: directory,
|
|
101
|
+
projectDirectory: directory,
|
|
102
|
+
sessionID: data.sessionID,
|
|
103
|
+
messageID: typeof data.assistantMessageID === "string" ? data.assistantMessageID : "",
|
|
104
|
+
partID: "",
|
|
105
|
+
providerID: "",
|
|
106
|
+
modelID: "",
|
|
107
|
+
agent: sessionAgents.get(data.sessionID) ?? "",
|
|
108
|
+
tokens: {
|
|
109
|
+
input: toCount(data.tokens?.input),
|
|
110
|
+
output: toCount(data.tokens?.output),
|
|
111
|
+
reasoning: toCount(data.tokens?.reasoning),
|
|
112
|
+
cacheRead: toCount(data.tokens?.cache?.read),
|
|
113
|
+
cacheWrite: toCount(data.tokens?.cache?.write),
|
|
114
|
+
},
|
|
115
|
+
cost: typeof data.cost === "number" && Number.isFinite(data.cost) ? data.cost : 0,
|
|
116
|
+
vvocVersion: deps.vvocVersion,
|
|
117
|
+
opencodeVersion,
|
|
118
|
+
};
|
|
119
|
+
await deps.append(record);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
// A non-iterable or failing event stream must never surface as an
|
|
126
|
+
// unhandled rejection inside the host process.
|
|
127
|
+
console.error(`[vvoc analytics] event stream failed: ${String(error)}`);
|
|
128
|
+
}
|
|
129
|
+
})();
|
|
130
|
+
return () => controller.abort();
|
|
131
|
+
}
|
|
132
|
+
// END_BLOCK_SETUP_ANALYTICS_V2
|
|
133
|
+
//# sourceMappingURL=v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2.js","sourceRoot":"","sources":["../../../src/plugins/analytics/v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,48 @@
|
|
|
1
1
|
import { type Plugin } from "@opencode-ai/plugin";
|
|
2
|
+
import { type VvocConfigSnapshot } from "../../lib/config-layers.js";
|
|
3
|
+
export declare const GUARDIAN_AGENT = "guardian";
|
|
4
|
+
export declare const GUARDIAN_DISABLED_ENV = "OPENCODE_GUARDIAN_DISABLED";
|
|
5
|
+
type PermissionAskedEvent = {
|
|
6
|
+
id: string;
|
|
7
|
+
sessionID: string;
|
|
8
|
+
permission?: string;
|
|
9
|
+
patterns?: string[];
|
|
10
|
+
metadata?: Record<string, unknown>;
|
|
11
|
+
always?: string[];
|
|
12
|
+
tool?: {
|
|
13
|
+
messageID: string;
|
|
14
|
+
callID: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
type ToolIntent = {
|
|
18
|
+
sessionID: string;
|
|
19
|
+
tool: string;
|
|
20
|
+
callID: string;
|
|
21
|
+
args: unknown;
|
|
22
|
+
time: number;
|
|
23
|
+
};
|
|
24
|
+
type CommandIntent = {
|
|
25
|
+
sessionID: string;
|
|
26
|
+
command: string;
|
|
27
|
+
arguments: string;
|
|
28
|
+
time: number;
|
|
29
|
+
};
|
|
30
|
+
type ActiveReview = {
|
|
31
|
+
cancelled: boolean;
|
|
32
|
+
internalReply: boolean;
|
|
33
|
+
cancel?: () => void;
|
|
34
|
+
cancellationNoticeShown: boolean;
|
|
35
|
+
};
|
|
36
|
+
type GuardianRuntimeConfig = {
|
|
37
|
+
model?: string;
|
|
38
|
+
timeoutMs: number;
|
|
39
|
+
approvalRiskThreshold: number;
|
|
40
|
+
reviewToastDurationMs: number;
|
|
41
|
+
sources: string[];
|
|
42
|
+
warnings: string[];
|
|
43
|
+
};
|
|
44
|
+
export declare function resolveGuardianRuntimeConfig(loaded: VvocConfigSnapshot): GuardianRuntimeConfig;
|
|
45
|
+
export declare function reviewPermissionRequest(client: Parameters<Plugin>[0]["client"], serverUrl: URL, directory: string, guardianPrompt: string, guardianConfig: GuardianRuntimeConfig, permissionEvent: PermissionAskedEvent, toolIntentsByCallID: Map<string, ToolIntent>, latestCommandIntentBySessionID: Map<string, CommandIntent>, activeReviews: Map<string, ActiveReview>, activeReview: ActiveReview): Promise<void>;
|
|
2
46
|
export declare const GuardianPlugin: Plugin;
|
|
47
|
+
declare const _default: import("../v2-runtime/index.js").DualPlugin;
|
|
48
|
+
export default _default;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Review OpenCode permission requests with a constrained Guardian agent and safe deny behavior.
|
|
5
5
|
// SCOPE: Guardian runtime config resolution from the shared startup vvoc config snapshot, managed prompt loading, transcript extraction, risk-assessment prompt construction, permission reply orchestration, and plugin event hooks.
|
|
6
|
-
// DEPENDS: [@opencode-ai/plugin, @opencode-ai/sdk, node:fs/promises, src/lib/config-layers.ts, src/lib/managed-agents.ts, src/lib/model-roles.ts, src/lib/vvoc-config.ts]
|
|
6
|
+
// DEPENDS: [@opencode-ai/plugin, @opencode-ai/sdk, node:fs/promises, src/lib/config-layers.ts, src/lib/managed-agents.ts, src/lib/model-roles.ts, src/lib/vvoc-config.ts, src/plugins/v2-runtime/index.ts]
|
|
7
7
|
// LINKS: [M-PLUGIN-GUARDIAN]
|
|
8
8
|
// ROLE: RUNTIME
|
|
9
9
|
// MAP_MODE: EXPORTS
|
|
@@ -11,10 +11,15 @@
|
|
|
11
11
|
//
|
|
12
12
|
// START_MODULE_MAP
|
|
13
13
|
// GuardianPlugin - Registers Guardian agent config, permission review flow, and tool/command intent capture hooks.
|
|
14
|
+
// default - Dual subpath entrypoint: v2 setup() seam plus v1 server() delegating to the named factory.
|
|
15
|
+
// GUARDIAN_AGENT - Guardian agent id shared with the managed agent files.
|
|
16
|
+
// GUARDIAN_DISABLED_ENV - Env var enabling the nested-review auto-deny mode.
|
|
17
|
+
// resolveGuardianRuntimeConfig - Resolve guardian runtime config from a vvoc snapshot.
|
|
18
|
+
// reviewPermissionRequest - Full permission review flow reused by both runtimes.
|
|
14
19
|
// END_MODULE_MAP
|
|
15
20
|
//
|
|
16
21
|
// START_CHANGE_SUMMARY
|
|
17
|
-
// LAST_CHANGE: [Direct fix - Restored legacy SDK permission respond fallback for embedded OpenCode clients where client.permission.reply is absent, and preserved the reply failure cause in Guardian logs.]
|
|
22
|
+
// LAST_CHANGE: [C-OPENCODE-V2-MIGRATION T-001 - Added the dual subpath entrypoint so the plugin loads under OpenCode v1 via server() and v2 via setup(). Prior: Direct fix - Restored legacy SDK permission respond fallback for embedded OpenCode clients where client.permission.reply is absent, and preserved the reply failure cause in Guardian logs.]
|
|
18
23
|
// END_CHANGE_SUMMARY
|
|
19
24
|
import { appendFile, unlink } from "node:fs/promises";
|
|
20
25
|
import { loadVvocConfig } from "../../lib/config-layers.js";
|
|
@@ -22,8 +27,8 @@ import { loadManagedAgentPromptText } from "../../lib/managed-agents.js";
|
|
|
22
27
|
import { ROLE_REFERENCE_PREFIX, resolveRoleReference, } from "../../lib/model-roles.js";
|
|
23
28
|
import { createGuardianConfig } from "../../lib/vvoc-config.js";
|
|
24
29
|
import { isVvocPluginEnabled } from "../../lib/plugin-toggle-config.js";
|
|
25
|
-
const GUARDIAN_AGENT = "guardian";
|
|
26
|
-
const GUARDIAN_DISABLED_ENV = "OPENCODE_GUARDIAN_DISABLED";
|
|
30
|
+
export const GUARDIAN_AGENT = "guardian";
|
|
31
|
+
export const GUARDIAN_DISABLED_ENV = "OPENCODE_GUARDIAN_DISABLED";
|
|
27
32
|
const GUARDIAN_RUN_DIRECTORY = "/tmp";
|
|
28
33
|
const GUARDIAN_DEBUG_LOG_PATH = "/tmp/opencode-guardian-debug.log";
|
|
29
34
|
const GUARDIAN_DEBUG_ENV = "OPENCODE_GUARDIAN_DEBUG";
|
|
@@ -196,7 +201,7 @@ function resolveGuardianRoleSelection(roleMap) {
|
|
|
196
201
|
});
|
|
197
202
|
}
|
|
198
203
|
}
|
|
199
|
-
function resolveGuardianRuntimeConfig(loaded) {
|
|
204
|
+
export function resolveGuardianRuntimeConfig(loaded) {
|
|
200
205
|
const sources = [loaded.source.path ?? loaded.source.kind];
|
|
201
206
|
const warnings = [...loaded.warnings];
|
|
202
207
|
const canonicalConfig = loaded.config;
|
|
@@ -742,7 +747,7 @@ async function replyToPermission(client, serverUrl, directory, sessionID, reques
|
|
|
742
747
|
}
|
|
743
748
|
// END_BLOCK_REPLY_TO_PERMISSION_REQUEST
|
|
744
749
|
// START_BLOCK_REVIEW_PERMISSION_REQUEST
|
|
745
|
-
async function reviewPermissionRequest(client, serverUrl, directory, guardianPrompt, guardianConfig, permissionEvent, toolIntentsByCallID, latestCommandIntentBySessionID, activeReviews, activeReview) {
|
|
750
|
+
export async function reviewPermissionRequest(client, serverUrl, directory, guardianPrompt, guardianConfig, permissionEvent, toolIntentsByCallID, latestCommandIntentBySessionID, activeReviews, activeReview) {
|
|
746
751
|
try {
|
|
747
752
|
await showGuardianToast(client, directory, "info", `Reviewing ${permissionEvent.permission ?? "unknown"} permission request...`, "Guardian", guardianConfig.reviewToastDurationMs);
|
|
748
753
|
pruneMap(toolIntentsByCallID);
|
|
@@ -1045,4 +1050,14 @@ export const GuardianPlugin = async ({ client, directory, serverUrl }) => {
|
|
|
1045
1050
|
};
|
|
1046
1051
|
};
|
|
1047
1052
|
// END_BLOCK_REGISTER_GUARDIAN_PLUGIN_HOOKS
|
|
1053
|
+
// START_BLOCK_DUAL_SUBPATH_ENTRY
|
|
1054
|
+
import { defineDualPlugin } from "../v2-runtime/index.js";
|
|
1055
|
+
import { createV2Adapter } from "../v2-runtime/setup.js";
|
|
1056
|
+
import { setupGuardianV2 } from "./v2.js";
|
|
1057
|
+
export default defineDualPlugin({
|
|
1058
|
+
id: "vvoc.guardian",
|
|
1059
|
+
v1: GuardianPlugin,
|
|
1060
|
+
v2: (ctx) => setupGuardianV2(createV2Adapter(ctx)),
|
|
1061
|
+
});
|
|
1062
|
+
// END_BLOCK_DUAL_SUBPATH_ENTRY
|
|
1048
1063
|
//# sourceMappingURL=index.js.map
|