@code-yeongyu/senpi-codemode 2026.8.22-2 → 2026.8.23
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 +14 -0
- package/package.json +4 -4
- package/src/extension/eval-notifier.ts +16 -4
- package/src/index.ts +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,20 @@
|
|
|
12
12
|
|
|
13
13
|
### Removed
|
|
14
14
|
|
|
15
|
+
## [2026.8.23] - 2026-08-23
|
|
16
|
+
|
|
17
|
+
### Breaking Changes
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Detached eval cell completion notices no longer enter the user-input steering queue. They were delivered via `sendUserMessage`, so hosts projecting that queue (e.g. the OmO desktop composer) rendered the raw `<system-reminder>Detached eval cell …</system-reminder>` notice under the STEERING heading as if the user had typed and queued it. Notices now deliver via `sendMessage` with `customType: "senpi-codemode:notification"` and `display: false` — model-visible, never painted as user input — matching the terminal and monitor notification contract.
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
15
29
|
## [2026.8.22-2] - 2026-08-22
|
|
16
30
|
|
|
17
31
|
### Breaking Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/senpi-codemode",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.23",
|
|
4
4
|
"description": "Source-only senpi extension package for codemode evaluation tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -30,14 +30,14 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@babel/parser": "8.0.4",
|
|
33
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.8.
|
|
33
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.8.23",
|
|
34
34
|
"typebox": "1.3.16"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
37
|
+
"@code-yeongyu/senpi": "2026.8.23"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
40
|
+
"@code-yeongyu/senpi": "2026.8.23"
|
|
41
41
|
},
|
|
42
42
|
"keywords": [
|
|
43
43
|
"senpi",
|
|
@@ -3,10 +3,17 @@ import type { EvalDetachedCellNotification, EvalDetachedCellNotifier } from "../
|
|
|
3
3
|
|
|
4
4
|
const NON_INTERACTIVE_MODES = new Set(["print", "json"]);
|
|
5
5
|
|
|
6
|
+
/** Provenance marker for agent-internal detached-cell notices. */
|
|
7
|
+
export const EVAL_NOTIFICATION_CUSTOM_TYPE = "senpi-codemode:notification";
|
|
8
|
+
|
|
6
9
|
export type EvalNotifyMode = "wake" | "next-turn" | "off";
|
|
7
10
|
|
|
8
11
|
export interface EvalNotifierDeps {
|
|
9
|
-
|
|
12
|
+
/** Deliver a model-visible notification without rendering synthetic user input. */
|
|
13
|
+
readonly sendMessage: (
|
|
14
|
+
message: { customType: string; content: string; display: boolean },
|
|
15
|
+
options: { triggerTurn: boolean; deliverAs: "steer" | "followUp" },
|
|
16
|
+
) => void;
|
|
10
17
|
readonly getContext: () => ExtensionContext | undefined;
|
|
11
18
|
readonly getMode: () => EvalNotifyMode;
|
|
12
19
|
}
|
|
@@ -33,8 +40,13 @@ export class EvalNotifier implements EvalDetachedCellNotifier {
|
|
|
33
40
|
const pending = cells.filter((cell) => !this.#notified.has(cell.cellId));
|
|
34
41
|
if (pending.length === 0) return;
|
|
35
42
|
for (const cell of pending) this.#notified.add(cell.cellId);
|
|
36
|
-
this.#deps.
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
this.#deps.sendMessage(
|
|
44
|
+
{
|
|
45
|
+
customType: EVAL_NOTIFICATION_CUSTOM_TYPE,
|
|
46
|
+
content: pending.map((cell) => cell.content).join("\n\n"),
|
|
47
|
+
display: false,
|
|
48
|
+
},
|
|
49
|
+
{ triggerTurn: true, deliverAs: mode === "wake" ? "steer" : "followUp" },
|
|
50
|
+
);
|
|
39
51
|
}
|
|
40
52
|
}
|
package/src/index.ts
CHANGED
|
@@ -44,7 +44,10 @@ export interface CodemodeExtensionAPI {
|
|
|
44
44
|
executeTool: AgentExecuteTool;
|
|
45
45
|
getActiveTools(): string[];
|
|
46
46
|
getAllTools(): readonly EvalSchemaToolInfo[];
|
|
47
|
-
|
|
47
|
+
sendMessage(
|
|
48
|
+
message: { customType: string; content: string; display: boolean },
|
|
49
|
+
options?: { triggerTurn?: boolean; deliverAs?: "steer" | "followUp" | "nextTurn" },
|
|
50
|
+
): void;
|
|
48
51
|
/** Optional host event bus; a host without one turns extension event emission into a harmless no-op. */
|
|
49
52
|
events?: { emit(name: string, data: unknown): void };
|
|
50
53
|
/** Optional host RPC surface for forwarding extension-owned events to connected clients. */
|
|
@@ -69,7 +72,7 @@ export default function senpiCodemode(pi: CodemodeExtensionAPI, options: SenpiCo
|
|
|
69
72
|
let activeContext: ExtensionContext | undefined;
|
|
70
73
|
let activeCells: EvalDetachedCellManager | undefined;
|
|
71
74
|
const notifier = new EvalNotifier({
|
|
72
|
-
|
|
75
|
+
sendMessage: (message, notifyOptions) => pi.sendMessage(message, notifyOptions),
|
|
73
76
|
getContext: () => activeContext,
|
|
74
77
|
getMode: () => "wake",
|
|
75
78
|
});
|