@jmtrin/opencode-kevin 0.8.0 → 0.9.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/README.md +63 -10
- package/dist/migrations/010_v09_native.sql +78 -0
- package/dist/plugin/HookLiveness.d.ts +81 -0
- package/dist/plugin/HookLiveness.js +324 -0
- package/dist/plugin/HookLiveness.js.map +1 -0
- package/dist/plugin/Materializer.d.ts +25 -0
- package/dist/plugin/Materializer.js +39 -10
- package/dist/plugin/Materializer.js.map +1 -1
- package/dist/plugin/Migrate.d.ts +1 -0
- package/dist/plugin/Migrate.js +46 -5
- package/dist/plugin/Migrate.js.map +1 -1
- package/dist/plugin/RepoIdentity.d.ts +20 -9
- package/dist/plugin/RepoIdentity.js +44 -9
- package/dist/plugin/RepoIdentity.js.map +1 -1
- package/dist/plugin/Retrospective.js +9 -0
- package/dist/plugin/Retrospective.js.map +1 -1
- package/dist/plugin/host.d.ts +70 -0
- package/dist/plugin/host.js +251 -0
- package/dist/plugin/host.js.map +1 -0
- package/dist/plugin/index.d.ts +2 -2
- package/dist/plugin/index.js +129 -7
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/kevin_audit.d.ts +29 -0
- package/dist/plugin/kevin_audit.js +84 -0
- package/dist/plugin/kevin_audit.js.map +1 -1
- package/dist/plugin/kevin_doctor.d.ts +57 -0
- package/dist/plugin/kevin_doctor.js +168 -0
- package/dist/plugin/kevin_doctor.js.map +1 -0
- package/dist/plugin/kevin_native.d.ts +29 -0
- package/dist/plugin/kevin_native.js +80 -0
- package/dist/plugin/kevin_native.js.map +1 -0
- package/dist/plugin/native.d.ts +92 -0
- package/dist/plugin/native.js +191 -0
- package/dist/plugin/native.js.map +1 -0
- package/migrations/010_v09_native.sql +78 -0
- package/package.json +2 -2
|
@@ -141,10 +141,31 @@ export class Materializer {
|
|
|
141
141
|
store;
|
|
142
142
|
/** `root` is injectable for tests; production defaults to ~/.opencode-kevin. */
|
|
143
143
|
root;
|
|
144
|
+
/**
|
|
145
|
+
* v0.9.0 (K9-016 / plan §5.4, D9-10) — the mutual-exclusion guard.
|
|
146
|
+
* A surface `attachNative()` registered is skipped by `materialize()`
|
|
147
|
+
* for that surface only; the other surface keeps emitting.
|
|
148
|
+
*/
|
|
149
|
+
nativeRegistered = new Set();
|
|
144
150
|
constructor(store, options = {}) {
|
|
145
151
|
this.store = store;
|
|
146
152
|
this.root = options.root ?? join(homedir(), ".opencode-kevin");
|
|
147
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* v0.9.0 (K9-016 / plan §5.4, D9-10) — record whether the surface was
|
|
156
|
+
* registered natively. Called at attach time (index.ts wiring, K9-018)
|
|
157
|
+
* with each `NativeRegistration.registered` flag.
|
|
158
|
+
*/
|
|
159
|
+
markNativeRegistered(surface, registered) {
|
|
160
|
+
if (registered)
|
|
161
|
+
this.nativeRegistered.add(surface);
|
|
162
|
+
else
|
|
163
|
+
this.nativeRegistered.delete(surface);
|
|
164
|
+
}
|
|
165
|
+
/** v0.9.0 (K9-016 / plan §5.4, D9-10) — is the surface registered natively? */
|
|
166
|
+
hasNativeRegistration(surface) {
|
|
167
|
+
return this.nativeRegistered.has(surface);
|
|
168
|
+
}
|
|
148
169
|
/** The curated, active memories — the knowledge the pull channels publish. */
|
|
149
170
|
curatedRows() {
|
|
150
171
|
return this.store
|
|
@@ -204,27 +225,35 @@ export class Materializer {
|
|
|
204
225
|
* a call site of `write()` — the single write FUNCTION with two
|
|
205
226
|
* constrained targets: `kevin_approve` reaches `agents_md_path`, this
|
|
206
227
|
* module reaches `~/.opencode-kevin` only (D6-07; enforced by K6-020).
|
|
228
|
+
*
|
|
229
|
+
* v0.9.0 (K9-016 / plan §5.4, D9-10) — the guard: a surface registered
|
|
230
|
+
* natively by `attachNative()` is skipped here for that surface only.
|
|
231
|
+
* Both active would put the curated skill in front of the model twice
|
|
232
|
+
* from two sources that can disagree; neither active would silently
|
|
233
|
+
* remove the feature on hosts that gained the subpath.
|
|
207
234
|
*/
|
|
208
235
|
materialize(writer) {
|
|
209
236
|
const pending = [];
|
|
210
237
|
const rows = this.curatedRows();
|
|
211
238
|
const skillBody = renderRows(rows);
|
|
212
|
-
if (skillBody !== "") {
|
|
239
|
+
if (skillBody !== "" && !this.nativeRegistered.has("skill")) {
|
|
213
240
|
pending.push({
|
|
214
241
|
topic: SKILL_TOPIC,
|
|
215
242
|
path: join(this.root, "skills", "project-knowledge.md"),
|
|
216
243
|
body: skillBody,
|
|
217
244
|
});
|
|
218
245
|
}
|
|
219
|
-
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
246
|
+
if (!this.nativeRegistered.has("reference")) {
|
|
247
|
+
for (const group of this.groupByTopic(rows)) {
|
|
248
|
+
const body = renderRows(group.rows);
|
|
249
|
+
if (body === "")
|
|
250
|
+
continue;
|
|
251
|
+
pending.push({
|
|
252
|
+
topic: group.topic,
|
|
253
|
+
path: join(this.root, "refs", `${group.topic}.md`),
|
|
254
|
+
body,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
228
257
|
}
|
|
229
258
|
return pending.map((bundle) => ({
|
|
230
259
|
topic: bundle.topic,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Materializer.js","sourceRoot":"","sources":["../../plugin/Materializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAkC7C,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Materializer.js","sourceRoot":"","sources":["../../plugin/Materializer.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin/Migrate.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface MigrateResult {
|
|
|
5
5
|
applied: string[];
|
|
6
6
|
}
|
|
7
7
|
export type PostApplyHook = (store: Store) => void;
|
|
8
|
+
export declare const HOOK_NAMES: readonly ["tool.execute.before", "tool.execute.after", "chat.message", "experimental.chat.system.transform", "experimental.session.compacting", "event"];
|
|
8
9
|
export declare class Migrate {
|
|
9
10
|
private store;
|
|
10
11
|
private migrationsDir;
|
package/dist/plugin/Migrate.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { readFileSync, readdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
// v0.9.0 (K9-001 / plan §5.3, D9-08) — the six hooks Kevin registers, in
|
|
4
|
+
// hook-object order. Canonical list: the "010" post-apply hook seeds
|
|
5
|
+
// hook_liveness from it, and HookLiveness (K9-009) wraps exactly these
|
|
6
|
+
// names, so a future hook added here is visible in the table on the next
|
|
7
|
+
// migration run.
|
|
8
|
+
export const HOOK_NAMES = [
|
|
9
|
+
"tool.execute.before",
|
|
10
|
+
"tool.execute.after",
|
|
11
|
+
"chat.message",
|
|
12
|
+
"experimental.chat.system.transform",
|
|
13
|
+
"experimental.session.compacting",
|
|
14
|
+
"event",
|
|
15
|
+
];
|
|
3
16
|
// Built-in post-apply hooks, keyed by migration version. Each hook runs inside
|
|
4
17
|
// the same transaction as the migration's DDL, so a hook failure rolls back the
|
|
5
18
|
// whole migration. Hooks run when their version is applied. Migration 008's
|
|
@@ -125,6 +138,31 @@ const DEFAULT_POST_APPLY_HOOKS = {
|
|
|
125
138
|
.prepare("UPDATE kevin_metrics SET value = (SELECT COUNT(*) FROM shared_entries) WHERE key = 'shared_entries_total'")
|
|
126
139
|
.run();
|
|
127
140
|
},
|
|
141
|
+
// v0.9.0 (K9-001 / plan §6.1, D9-08) — Native: three operations, all
|
|
142
|
+
// idempotent by design.
|
|
143
|
+
// 1. Seed one hook_liveness row per name in HOOK_NAMES, with the
|
|
144
|
+
// experimental flag derived from the hook's own `experimental.`
|
|
145
|
+
// prefix and every counter at zero. Seeding eagerly (INSERT OR
|
|
146
|
+
// IGNORE) makes a hook that has never fired a visible row with
|
|
147
|
+
// fire_count = 0, not an absent row indistinguishable from a hook
|
|
148
|
+
// Kevin does not register.
|
|
149
|
+
// 2. Re-derive hooks_dead_total from hook_liveness state rather than
|
|
150
|
+
// trusting an incremented value (same discipline as "006"-"009").
|
|
151
|
+
// 3. Normalize any experimental flag that disagrees with its own
|
|
152
|
+
// hook column's prefix — cheap, and it repairs a row hand-edited
|
|
153
|
+
// during debugging.
|
|
154
|
+
"010": (store) => {
|
|
155
|
+
const seed = store.prepare("INSERT OR IGNORE INTO hook_liveness (hook, experimental) VALUES (?, ?)");
|
|
156
|
+
for (const name of HOOK_NAMES) {
|
|
157
|
+
seed.run(name, name.startsWith("experimental.") ? 1 : 0);
|
|
158
|
+
}
|
|
159
|
+
store
|
|
160
|
+
.prepare("UPDATE kevin_metrics SET value = (SELECT COUNT(*) FROM hook_liveness WHERE dead_since IS NOT NULL) WHERE key = 'hooks_dead_total'")
|
|
161
|
+
.run();
|
|
162
|
+
store
|
|
163
|
+
.prepare("UPDATE hook_liveness SET experimental = CASE WHEN hook LIKE 'experimental.%' THEN 1 ELSE 0 END")
|
|
164
|
+
.run();
|
|
165
|
+
},
|
|
128
166
|
};
|
|
129
167
|
export class Migrate {
|
|
130
168
|
store;
|
|
@@ -155,11 +193,14 @@ export class Migrate {
|
|
|
155
193
|
// v0.7.0 (K7-002) — heal drift in the 008 counters on a no-op
|
|
156
194
|
// startup while preserving `applied: []` idempotency. v0.8.0
|
|
157
195
|
// (K8-002 / plan §6.1) extends the same repair to the 009
|
|
158
|
-
// back-fill and the shared_entries_total re-derivation
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
|
|
196
|
+
// back-fill and the shared_entries_total re-derivation, and
|
|
197
|
+
// v0.9.0 (K9-001 / plan §6.1) to the 010 seeding,
|
|
198
|
+
// hooks_dead_total re-derivation and experimental
|
|
199
|
+
// normalization: all three hooks are idempotent by guarded
|
|
200
|
+
// updates and re-derivation, so a no-op startup can heal a
|
|
201
|
+
// crash that landed between the DDL and the hook without
|
|
202
|
+
// re-applying DDL.
|
|
203
|
+
if (from === "008" || from === "009" || from === "010") {
|
|
163
204
|
const repairHook = this.postApplyHooks.get(from);
|
|
164
205
|
if (repairHook)
|
|
165
206
|
this.store.transaction(() => repairHook(this.store));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Migrate.js","sourceRoot":"","sources":["../../plugin/Migrate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Migrate.js","sourceRoot":"","sources":["../../plugin/Migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ArtifactWriter } from "./ArtifactWriter.js";
|
|
2
|
+
import type { HostSurface } from "./host.js";
|
|
2
3
|
/**
|
|
3
|
-
* The
|
|
4
|
+
* The four sources `resolve()` tries, in order (plan §5.2, D9-13).
|
|
4
5
|
*/
|
|
5
|
-
export type IdentitySource = "declared" | "remote" | "path";
|
|
6
|
+
export type IdentitySource = "declared" | "remote" | "host" | "path";
|
|
6
7
|
/**
|
|
7
8
|
* The outcome of resolving a repository identity.
|
|
8
9
|
*/
|
|
@@ -58,8 +59,8 @@ export declare function normalizeRemote(url: string): string | null;
|
|
|
58
59
|
*/
|
|
59
60
|
export declare function computeRepoId(normalized: string): string;
|
|
60
61
|
/**
|
|
61
|
-
* Resolve the repository identity for `cwd`, trying the
|
|
62
|
-
* sources in order (plan §5.
|
|
62
|
+
* Resolve the repository identity for `cwd`, trying the four
|
|
63
|
+
* sources in order (plan §5.2, D9-13):
|
|
63
64
|
*
|
|
64
65
|
* 1. `declared` — `.kevin/project.json` → `id` (validated as
|
|
65
66
|
* exactly 16 lowercase hex characters; anything else is ignored
|
|
@@ -68,14 +69,24 @@ export declare function computeRepoId(normalized: string): string;
|
|
|
68
69
|
* onto a typo);
|
|
69
70
|
* 2. `remote` — `.git/config` → `[remote "origin"] url`,
|
|
70
71
|
* normalized and hashed;
|
|
71
|
-
* 3. `
|
|
72
|
+
* 3. `host` — the value the host resolved for this directory,
|
|
73
|
+
* `host.project.worktree` first, `host.project.directory` as
|
|
74
|
+
* fallback; both empty or absent falls through to `path`.
|
|
75
|
+
* This is strictly better than `process.cwd()` — the host's own
|
|
76
|
+
* ToolContext documents "prefer this over `process.cwd()`" —
|
|
77
|
+
* but it sits below the explicit sources, because monorepos and
|
|
78
|
+
* D8-03's confirmed re-keying depend on `.kevin/project.json`
|
|
79
|
+
* winning;
|
|
80
|
+
* 4. `path` — `fingerprint(cwd)`, the v0.7.0 behaviour, preserved
|
|
81
|
+
* exactly when `host` is absent.
|
|
72
82
|
*
|
|
73
83
|
* Never throws: a directory that is not a git repository, an
|
|
74
|
-
* unreadable `.git/config`,
|
|
75
|
-
*
|
|
76
|
-
* `repoId`, regardless of
|
|
84
|
+
* unreadable `.git/config`, a malformed `project.json`, and a host
|
|
85
|
+
* with no usable project fields all fall through to source 4.
|
|
86
|
+
* `projectId` is always returned alongside `repoId`, regardless of
|
|
87
|
+
* which source won.
|
|
77
88
|
*/
|
|
78
|
-
export declare function resolve(cwd: string): ResolvedIdentity;
|
|
89
|
+
export declare function resolve(cwd: string, host?: HostSurface): ResolvedIdentity;
|
|
79
90
|
/**
|
|
80
91
|
* The outcome of `initProjectFile` (K8-008).
|
|
81
92
|
*/
|
|
@@ -3,6 +3,7 @@ import { join } from "node:path";
|
|
|
3
3
|
import { fingerprint, fnv1a64 } from "./fingerprint.js";
|
|
4
4
|
// ============================================================
|
|
5
5
|
// Kevin 0.8.0 — RepoIdentity (K8-005/K8-006 / plan §5.1, D8-04)
|
|
6
|
+
// v0.9.0 — host identity source (K9-006 / plan §5.2, D9-13)
|
|
6
7
|
// ============================================================
|
|
7
8
|
// Repository-derived identity that survives a clone. Two clones
|
|
8
9
|
// of the same remote must agree on one `repo_id` even though
|
|
@@ -149,8 +150,8 @@ export function computeRepoId(normalized) {
|
|
|
149
150
|
return fnv1a64(`okf:repo:v1\u0000${normalized}`);
|
|
150
151
|
}
|
|
151
152
|
/**
|
|
152
|
-
* Resolve the repository identity for `cwd`, trying the
|
|
153
|
-
* sources in order (plan §5.
|
|
153
|
+
* Resolve the repository identity for `cwd`, trying the four
|
|
154
|
+
* sources in order (plan §5.2, D9-13):
|
|
154
155
|
*
|
|
155
156
|
* 1. `declared` — `.kevin/project.json` → `id` (validated as
|
|
156
157
|
* exactly 16 lowercase hex characters; anything else is ignored
|
|
@@ -159,14 +160,24 @@ export function computeRepoId(normalized) {
|
|
|
159
160
|
* onto a typo);
|
|
160
161
|
* 2. `remote` — `.git/config` → `[remote "origin"] url`,
|
|
161
162
|
* normalized and hashed;
|
|
162
|
-
* 3. `
|
|
163
|
+
* 3. `host` — the value the host resolved for this directory,
|
|
164
|
+
* `host.project.worktree` first, `host.project.directory` as
|
|
165
|
+
* fallback; both empty or absent falls through to `path`.
|
|
166
|
+
* This is strictly better than `process.cwd()` — the host's own
|
|
167
|
+
* ToolContext documents "prefer this over `process.cwd()`" —
|
|
168
|
+
* but it sits below the explicit sources, because monorepos and
|
|
169
|
+
* D8-03's confirmed re-keying depend on `.kevin/project.json`
|
|
170
|
+
* winning;
|
|
171
|
+
* 4. `path` — `fingerprint(cwd)`, the v0.7.0 behaviour, preserved
|
|
172
|
+
* exactly when `host` is absent.
|
|
163
173
|
*
|
|
164
174
|
* Never throws: a directory that is not a git repository, an
|
|
165
|
-
* unreadable `.git/config`,
|
|
166
|
-
*
|
|
167
|
-
* `repoId`, regardless of
|
|
175
|
+
* unreadable `.git/config`, a malformed `project.json`, and a host
|
|
176
|
+
* with no usable project fields all fall through to source 4.
|
|
177
|
+
* `projectId` is always returned alongside `repoId`, regardless of
|
|
178
|
+
* which source won.
|
|
168
179
|
*/
|
|
169
|
-
export function resolve(cwd) {
|
|
180
|
+
export function resolve(cwd, host) {
|
|
170
181
|
const projectId = fingerprint(cwd);
|
|
171
182
|
// 1. Declared.
|
|
172
183
|
try {
|
|
@@ -201,7 +212,31 @@ export function resolve(cwd) {
|
|
|
201
212
|
catch {
|
|
202
213
|
// Unreadable or missing — fall through.
|
|
203
214
|
}
|
|
204
|
-
// 3.
|
|
215
|
+
// 3. Host — the value the host already resolved for this
|
|
216
|
+
// directory (D9-13), inserted above `path` and below the two
|
|
217
|
+
// explicit sources. `worktree` first, `directory` as fallback;
|
|
218
|
+
// both empty or absent falls through. The chosen value feeds
|
|
219
|
+
// the unchanged `computeRepoId()` — this chain changes which
|
|
220
|
+
// string is hashed, never how.
|
|
221
|
+
const worktree = host?.project?.worktree;
|
|
222
|
+
if (typeof worktree === "string" && worktree.length > 0) {
|
|
223
|
+
return {
|
|
224
|
+
repoId: computeRepoId(worktree),
|
|
225
|
+
source: "host",
|
|
226
|
+
evidence: "host:worktree",
|
|
227
|
+
projectId,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
const directory = host?.project?.directory;
|
|
231
|
+
if (typeof directory === "string" && directory.length > 0) {
|
|
232
|
+
return {
|
|
233
|
+
repoId: computeRepoId(directory),
|
|
234
|
+
source: "host",
|
|
235
|
+
evidence: "host:directory",
|
|
236
|
+
projectId,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// 4. Path — the v0.7.0 behaviour, preserved exactly.
|
|
205
240
|
return { repoId: projectId, source: "path", evidence: "cwd", projectId };
|
|
206
241
|
}
|
|
207
242
|
/**
|
|
@@ -240,7 +275,7 @@ export function initProjectFile(cwd, writer) {
|
|
|
240
275
|
const createdAt = new Date().toISOString();
|
|
241
276
|
const payload = `${JSON.stringify({
|
|
242
277
|
created_at: createdAt,
|
|
243
|
-
generator: "opencode-kevin/0.
|
|
278
|
+
generator: "opencode-kevin/0.9.0",
|
|
244
279
|
id,
|
|
245
280
|
})}\n`;
|
|
246
281
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepoIdentity.js","sourceRoot":"","sources":["../../plugin/RepoIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"RepoIdentity.js","sourceRoot":"","sources":["../../plugin/RepoIdentity.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,15 @@ export const METRIC_KEY_LABELS = {
|
|
|
58
58
|
okf_merge_folds: "Fusiones OKF (folds)",
|
|
59
59
|
rekey_events: "Re-keys de repositorio",
|
|
60
60
|
injections_from_shared: "Inyecciones desde la capa compartida",
|
|
61
|
+
// v0.9.0 (K9-003 / plan §8.16) — the K9 metric keys need their own
|
|
62
|
+
// Spanish labels; the audit regression forbids raw-key fallback for any
|
|
63
|
+
// key in METRIC_KEYS.
|
|
64
|
+
hook_fires_total: "Disparos de hooks (totales)",
|
|
65
|
+
hook_errors_total: "Errores de hooks",
|
|
66
|
+
hooks_dead_total: "Hooks muertos",
|
|
67
|
+
injections_suppressed_dead_hook: "Inyecciones suprimidas (hook muerto)",
|
|
68
|
+
native_registrations_total: "Registros nativos (totales)",
|
|
69
|
+
native_registration_failures: "Fallos de registro nativo",
|
|
61
70
|
};
|
|
62
71
|
function originLabel(origin) {
|
|
63
72
|
if (origin === "reflector")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Retrospective.js","sourceRoot":"","sources":["../../plugin/Retrospective.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAkCnC,yEAAyE;AACzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACxD,0BAA0B,EAAE,gCAAgC;IAC5D,0BAA0B,EAAE,gCAAgC;IAC5D,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,uBAAuB;IAC/C,kBAAkB,EAAE,oBAAoB;IACxC,cAAc,EAAE,kBAAkB;IAClC,sEAAsE;IACtE,0DAA0D;IAC1D,gBAAgB,EAAE,qBAAqB;IACvC,oBAAoB,EAAE,uBAAuB;IAC7C,sBAAsB,EAAE,wBAAwB;IAChD,qBAAqB,EAAE,8BAA8B;IACrD,eAAe,EAAE,mBAAmB;IACpC,YAAY,EAAE,kBAAkB;IAChC,mBAAmB,EAAE,oBAAoB;IACzC,kEAAkE;IAClE,kEAAkE;IAClE,uCAAuC;IACvC,uBAAuB,EAAE,4BAA4B;IACrD,uBAAuB,EAAE,oCAAoC;IAC7D,uBAAuB,EAAE,kCAAkC;IAC3D,6BAA6B,EAAE,sCAAsC;IACrE,wBAAwB,EAAE,oCAAoC;IAC9D,0BAA0B,EAAE,oCAAoC;IAChE,uBAAuB,EAAE,yBAAyB;IAClD,uBAAuB,EAAE,yBAAyB;IAClD,iBAAiB,EAAE,qBAAqB;IACxC,mEAAmE;IACnE,wEAAwE;IACxE,sBAAsB;IACtB,iBAAiB,EAAE,gCAAgC;IACnD,kBAAkB,EAAE,sBAAsB;IAC1C,kBAAkB,EAAE,uBAAuB;IAC3C,qBAAqB,EAAE,oCAAoC;IAC3D,oBAAoB,EAAE,uCAAuC;IAC7D,6BAA6B,EAAE,yCAAyC;IACxE,kEAAkE;IAClE,wEAAwE;IACxE,sBAAsB;IACtB,kBAAkB,EAAE,mCAAmC;IACvD,qBAAqB,EAAE,uBAAuB;IAC9C,iBAAiB,EAAE,sBAAsB;IACzC,kBAAkB,EAAE,uBAAuB;IAC3C,wBAAwB,EAAE,+BAA+B;IACzD,mEAAmE;IACnE,wEAAwE;IACxE,sBAAsB;IACtB,oBAAoB,EAAE,gCAAgC;IACtD,uBAAuB,EAAE,iCAAiC;IAC1D,uBAAuB,EAAE,iCAAiC;IAC1D,eAAe,EAAE,sBAAsB;IACvC,YAAY,EAAE,wBAAwB;IACtC,sBAAsB,EAAE,sCAAsC;
|
|
1
|
+
{"version":3,"file":"Retrospective.js","sourceRoot":"","sources":["../../plugin/Retrospective.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* K9-004 — v0.9.0 native — host probe (plan §5.1, D9-12).
|
|
3
|
+
*
|
|
4
|
+
* Kevin stops assuming the host and asks it instead. `probeHost()` inspects the
|
|
5
|
+
* plugin input and the resolved `@opencode-ai/plugin` package and answers four
|
|
6
|
+
* questions once per process: what plugin version is actually installed, which
|
|
7
|
+
* v1+v2 surface exists, what project context the host already knows, and
|
|
8
|
+
* whether a shell was handed over.
|
|
9
|
+
*
|
|
10
|
+
* Contract (plan §5.1 / §4 traps 24-26):
|
|
11
|
+
* - Never throws: every read is guarded, every failure appends to `notes` and
|
|
12
|
+
* yields a conservative `false`. A throw during construction takes down the
|
|
13
|
+
* host's plugin load — strictly worse than any missing feature.
|
|
14
|
+
* - Duck-typed: only `typeof` and `in` checks, never `instanceof`, never a cast
|
|
15
|
+
* to a host class.
|
|
16
|
+
* - The v2 probe is a dynamic `await import()` of the v2/promise subpath inside
|
|
17
|
+
* a try. Rejection is the answer (a pre-v2 package). When it resolves we record
|
|
18
|
+
* which domains are actually exposed rather than assuming both — the promise
|
|
19
|
+
* subpath exports `define` at runtime and its `skill`/`reference` domains are
|
|
20
|
+
* compile-time types, so domain availability is verified against the resolved
|
|
21
|
+
* package's own declaration files.
|
|
22
|
+
* - Runs once: the result is cached and frozen. A capability that appears
|
|
23
|
+
* mid-session is indistinguishable from a bug (D9-12).
|
|
24
|
+
* - `pluginVersion` comes from the resolved package's `package.json` — never
|
|
25
|
+
* from the declared range, which plan §3.4 showed to be untrustworthy.
|
|
26
|
+
* - The v2 subpath string itself lives in native.ts (K9-013 containment): this
|
|
27
|
+
* module only ever names it through the imported symbol.
|
|
28
|
+
*/
|
|
29
|
+
/** v0.9.0 (K9-004 / plan §5.1, D9-12) */
|
|
30
|
+
export type HostFlavour = "v1-only" | "v1+v2";
|
|
31
|
+
/** v0.9.0 (K9-004 / plan §5.1) */
|
|
32
|
+
export interface HostProject {
|
|
33
|
+
readonly id: string | null;
|
|
34
|
+
readonly worktree: string | null;
|
|
35
|
+
readonly directory: string | null;
|
|
36
|
+
}
|
|
37
|
+
/** v0.9.0 (K9-004 / plan §5.1) */
|
|
38
|
+
export interface HostSurface {
|
|
39
|
+
/** Resolved `version` from the installed package's package.json, or null. */
|
|
40
|
+
readonly pluginVersion: string | null;
|
|
41
|
+
readonly flavour: HostFlavour;
|
|
42
|
+
readonly project: HostProject;
|
|
43
|
+
/** The host handed over `input.$` (BunShell). Zero-spawn remains a choice. */
|
|
44
|
+
readonly hasShell: boolean;
|
|
45
|
+
/** Which v2 domains the resolved package actually exposes. */
|
|
46
|
+
readonly v2: {
|
|
47
|
+
readonly skill: boolean;
|
|
48
|
+
readonly reference: boolean;
|
|
49
|
+
};
|
|
50
|
+
/** Every degraded read is explained here; never empty on a degraded probe. */
|
|
51
|
+
readonly notes: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* v0.9.0 (K9-004 / plan §5.1, D9-12)
|
|
55
|
+
* `importV2` is a test seam; production callers omit it and the real
|
|
56
|
+
* `await import()` runs inside the try.
|
|
57
|
+
*/
|
|
58
|
+
export declare function probeHost(input: unknown, options?: {
|
|
59
|
+
importV2?: () => Promise<unknown>;
|
|
60
|
+
}): Promise<HostSurface>;
|
|
61
|
+
/**
|
|
62
|
+
* v0.9.0 (K9-004) — test hook. probeHost caches its result (probe once, freeze,
|
|
63
|
+
* restart to re-probe); tests reset between cases.
|
|
64
|
+
*/
|
|
65
|
+
export declare function resetHostProbeCache(): void;
|
|
66
|
+
/**
|
|
67
|
+
* v0.9.0 (K9-004 / plan §5.1) — one stable paragraph: version, flavour and the
|
|
68
|
+
* domain flags. No paths, no identifiers; safe to paste into an issue report.
|
|
69
|
+
*/
|
|
70
|
+
export declare function summarize(s: HostSurface): string;
|