@code-yeongyu/senpi 2026.7.3 → 2026.7.5-2
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 +37 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +2 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +2 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/dispatcher.d.ts +2 -0
- package/dist/core/extensions/builtin/hooks/dispatcher.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/dispatcher.js +50 -17
- package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/index.js +11 -1
- package/dist/core/extensions/builtin/hooks/index.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/output-bounds.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/output-bounds.js +3 -7
- package/dist/core/extensions/builtin/hooks/output-bounds.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +65 -57
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +7 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/hidden-stdout-log.d.ts +2 -0
- package/dist/core/hidden-stdout-log.d.ts.map +1 -0
- package/dist/core/hidden-stdout-log.js +17 -0
- package/dist/core/hidden-stdout-log.js.map +1 -0
- package/dist/core/output-guard.d.ts +2 -0
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js +63 -0
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +0 -10
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/sensitive-output.d.ts +3 -0
- package/dist/core/sensitive-output.d.ts.map +1 -0
- package/dist/core/sensitive-output.js +12 -0
- package/dist/core/sensitive-output.js.map +1 -0
- package/dist/core/tools/edit.js +2 -2
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +40 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-stderr-guard.d.ts +3 -0
- package/dist/modes/interactive/interactive-stderr-guard.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-stderr-guard.js +24 -0
- package/dist/modes/interactive/interactive-stderr-guard.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +7 -0
- package/dist/package-manager-cli.js.map +1 -1
- package/docs/extensions.md +14 -1
- package/examples/sdk/12-full-control.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +115 -19
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +29 -171
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +0 -170
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +3 -173
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +4 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts +28 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +19 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +13 -13
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +9 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +17 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +75 -22
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +4 -0
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/npm-shrinkwrap.json +9 -9
- package/package.json +4 -4
|
@@ -44,6 +44,8 @@ type ExtensionToolHookLifecycleEventBase = {
|
|
|
44
44
|
};
|
|
45
45
|
export type ExtensionToolHookLifecycleEvent = (ExtensionToolHookLifecycleEventBase & {
|
|
46
46
|
phase: "start";
|
|
47
|
+
}) | (ExtensionToolHookLifecycleEventBase & {
|
|
48
|
+
phase: "update";
|
|
47
49
|
}) | (ExtensionToolHookLifecycleEventBase & {
|
|
48
50
|
phase: "end";
|
|
49
51
|
completedAt: number;
|
|
@@ -154,6 +156,7 @@ export declare class ExtensionRunner {
|
|
|
154
156
|
hasHandlers(eventType: string): boolean;
|
|
155
157
|
private getToolHookStatusMessage;
|
|
156
158
|
private emitToolHookLifecycleEvent;
|
|
159
|
+
private beginToolHookRun;
|
|
157
160
|
getMessageRenderer(customType: string): MessageRenderer | undefined;
|
|
158
161
|
getEntryRenderer(customType: string): EntryRenderer | undefined;
|
|
159
162
|
private resolveRegisteredCommands;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { basename } from "node:path";
|
|
5
5
|
import { theme } from "../../modes/interactive/theme/theme.js";
|
|
6
|
+
import { stripAnsi } from "../../utils/ansi.js";
|
|
6
7
|
// Extension shortcuts compete with canonical keybinding ids from keybindings.json.
|
|
7
8
|
// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.
|
|
8
9
|
const RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS = [
|
|
@@ -71,6 +72,16 @@ function cloneJsonValue(value) {
|
|
|
71
72
|
}
|
|
72
73
|
return JSON.parse(serialized);
|
|
73
74
|
}
|
|
75
|
+
function boundedToolHookStatusMessage(message) {
|
|
76
|
+
return message.length <= 79 ? message : `${message.slice(0, 76)}...`;
|
|
77
|
+
}
|
|
78
|
+
function sanitizedToolHookStatusMessage(message) {
|
|
79
|
+
return boundedToolHookStatusMessage(stripAnsi(message)
|
|
80
|
+
.replace(/[\r\n\t]+/g, " ")
|
|
81
|
+
.replace(/[\u0000-\u001f\u007f]+/g, "")
|
|
82
|
+
.replace(/\s+/g, " ")
|
|
83
|
+
.trim());
|
|
84
|
+
}
|
|
74
85
|
/**
|
|
75
86
|
* Helper function to emit session_shutdown event to extensions.
|
|
76
87
|
* Returns true if the event was emitted, false if there were no handlers.
|
|
@@ -419,15 +430,54 @@ export class ExtensionRunner {
|
|
|
419
430
|
if (builtinName === "tool-pair-guard") {
|
|
420
431
|
return "checking tool/result pairs";
|
|
421
432
|
}
|
|
422
|
-
const extensionName =
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
return
|
|
433
|
+
const extensionName = builtinName ??
|
|
434
|
+
(extensionPath.startsWith("<") && extensionPath.endsWith(">")
|
|
435
|
+
? extensionPath.slice(1, -1)
|
|
436
|
+
: basename(extensionPath).replace(/\.(?:c|m)?[jt]sx?$/, ""));
|
|
437
|
+
return boundedToolHookStatusMessage(`running ${extensionName}`);
|
|
427
438
|
}
|
|
428
439
|
emitToolHookLifecycleEvent(event) {
|
|
429
440
|
this.toolHookLifecycleObserver?.(event);
|
|
430
441
|
}
|
|
442
|
+
beginToolHookRun(baseContext, run) {
|
|
443
|
+
const base = {
|
|
444
|
+
type: "tool_hook_status",
|
|
445
|
+
hookRunId: `${run.toolCallId}:${run.hookName}:${this.nextToolHookRunIndex++}`,
|
|
446
|
+
hookName: run.hookName,
|
|
447
|
+
toolName: run.toolName,
|
|
448
|
+
toolCallId: run.toolCallId,
|
|
449
|
+
extensionPath: run.extensionPath,
|
|
450
|
+
startedAt: Date.now(),
|
|
451
|
+
};
|
|
452
|
+
let statusMessage = this.getToolHookStatusMessage(run.extensionPath, run.hookName);
|
|
453
|
+
let ended = false;
|
|
454
|
+
this.emitToolHookLifecycleEvent({ ...base, phase: "start", statusMessage });
|
|
455
|
+
// Property descriptors keep the guarded getters from createContext() lazy; a
|
|
456
|
+
// spread would freeze their current values and bypass stale-instance checks.
|
|
457
|
+
const context = Object.defineProperties({}, Object.getOwnPropertyDescriptors(baseContext));
|
|
458
|
+
context.updateToolHookStatus = (update) => {
|
|
459
|
+
if (ended)
|
|
460
|
+
return;
|
|
461
|
+
statusMessage = sanitizedToolHookStatusMessage(update);
|
|
462
|
+
this.emitToolHookLifecycleEvent({ ...base, phase: "update", statusMessage });
|
|
463
|
+
};
|
|
464
|
+
return {
|
|
465
|
+
context,
|
|
466
|
+
end: (status, errorMessage) => {
|
|
467
|
+
if (ended)
|
|
468
|
+
return;
|
|
469
|
+
ended = true;
|
|
470
|
+
this.emitToolHookLifecycleEvent({
|
|
471
|
+
...base,
|
|
472
|
+
phase: "end",
|
|
473
|
+
statusMessage,
|
|
474
|
+
completedAt: Date.now(),
|
|
475
|
+
status,
|
|
476
|
+
...(errorMessage !== undefined ? { errorMessage } : {}),
|
|
477
|
+
});
|
|
478
|
+
},
|
|
479
|
+
};
|
|
480
|
+
}
|
|
431
481
|
getMessageRenderer(customType) {
|
|
432
482
|
for (const ext of this.extensions) {
|
|
433
483
|
const renderer = ext.messageRenderers.get(customType);
|
|
@@ -763,24 +813,16 @@ export class ExtensionRunner {
|
|
|
763
813
|
if (!handlers || handlers.length === 0)
|
|
764
814
|
continue;
|
|
765
815
|
for (const handler of handlers) {
|
|
766
|
-
const
|
|
767
|
-
const startedAt = Date.now();
|
|
768
|
-
const statusMessage = this.getToolHookStatusMessage(ext.path, "PostToolUse");
|
|
769
|
-
let endStatus = "completed";
|
|
770
|
-
let errorMessage;
|
|
771
|
-
this.emitToolHookLifecycleEvent({
|
|
772
|
-
type: "tool_hook_status",
|
|
773
|
-
phase: "start",
|
|
774
|
-
hookRunId,
|
|
816
|
+
const hookRun = this.beginToolHookRun(ctx, {
|
|
775
817
|
hookName: "PostToolUse",
|
|
776
818
|
toolName: event.toolName,
|
|
777
819
|
toolCallId: event.toolCallId,
|
|
778
820
|
extensionPath: ext.path,
|
|
779
|
-
statusMessage,
|
|
780
|
-
startedAt,
|
|
781
821
|
});
|
|
822
|
+
let endStatus = "completed";
|
|
823
|
+
let errorMessage;
|
|
782
824
|
try {
|
|
783
|
-
const handlerResult = (await handler(currentEvent,
|
|
825
|
+
const handlerResult = (await handler(currentEvent, hookRun.context));
|
|
784
826
|
if (!handlerResult)
|
|
785
827
|
continue;
|
|
786
828
|
if (handlerResult.content !== undefined) {
|
|
@@ -809,20 +851,7 @@ export class ExtensionRunner {
|
|
|
809
851
|
});
|
|
810
852
|
}
|
|
811
853
|
finally {
|
|
812
|
-
|
|
813
|
-
type: "tool_hook_status",
|
|
814
|
-
phase: "end",
|
|
815
|
-
hookRunId,
|
|
816
|
-
hookName: "PostToolUse",
|
|
817
|
-
toolName: event.toolName,
|
|
818
|
-
toolCallId: event.toolCallId,
|
|
819
|
-
extensionPath: ext.path,
|
|
820
|
-
statusMessage,
|
|
821
|
-
startedAt,
|
|
822
|
-
completedAt: Date.now(),
|
|
823
|
-
status: endStatus,
|
|
824
|
-
...(errorMessage !== undefined ? { errorMessage } : {}),
|
|
825
|
-
});
|
|
854
|
+
hookRun.end(endStatus, errorMessage);
|
|
826
855
|
}
|
|
827
856
|
}
|
|
828
857
|
}
|
|
@@ -843,24 +872,16 @@ export class ExtensionRunner {
|
|
|
843
872
|
if (!handlers || handlers.length === 0)
|
|
844
873
|
continue;
|
|
845
874
|
for (const handler of handlers) {
|
|
846
|
-
const
|
|
847
|
-
const startedAt = Date.now();
|
|
848
|
-
const statusMessage = this.getToolHookStatusMessage(ext.path, "PreToolUse");
|
|
849
|
-
let endStatus = "completed";
|
|
850
|
-
let errorMessage;
|
|
851
|
-
this.emitToolHookLifecycleEvent({
|
|
852
|
-
type: "tool_hook_status",
|
|
853
|
-
phase: "start",
|
|
854
|
-
hookRunId,
|
|
875
|
+
const hookRun = this.beginToolHookRun(ctx, {
|
|
855
876
|
hookName: "PreToolUse",
|
|
856
877
|
toolName: event.toolName,
|
|
857
878
|
toolCallId: event.toolCallId,
|
|
858
879
|
extensionPath: ext.path,
|
|
859
|
-
statusMessage,
|
|
860
|
-
startedAt,
|
|
861
880
|
});
|
|
881
|
+
let endStatus = "completed";
|
|
882
|
+
let errorMessage;
|
|
862
883
|
try {
|
|
863
|
-
const handlerResult = await handler(event,
|
|
884
|
+
const handlerResult = await handler(event, hookRun.context);
|
|
864
885
|
if (handlerResult) {
|
|
865
886
|
result = handlerResult;
|
|
866
887
|
if (result.block) {
|
|
@@ -875,20 +896,7 @@ export class ExtensionRunner {
|
|
|
875
896
|
throw err;
|
|
876
897
|
}
|
|
877
898
|
finally {
|
|
878
|
-
|
|
879
|
-
type: "tool_hook_status",
|
|
880
|
-
phase: "end",
|
|
881
|
-
hookRunId,
|
|
882
|
-
hookName: "PreToolUse",
|
|
883
|
-
toolName: event.toolName,
|
|
884
|
-
toolCallId: event.toolCallId,
|
|
885
|
-
extensionPath: ext.path,
|
|
886
|
-
statusMessage,
|
|
887
|
-
startedAt,
|
|
888
|
-
completedAt: Date.now(),
|
|
889
|
-
status: endStatus,
|
|
890
|
-
...(errorMessage !== undefined ? { errorMessage } : {}),
|
|
891
|
-
});
|
|
899
|
+
hookRun.end(endStatus, errorMessage);
|
|
892
900
|
}
|
|
893
901
|
}
|
|
894
902
|
}
|