@zhushanwen/pi-system-prompt 1.4.0 → 1.4.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/package.json +2 -2
- package/src/__tests__/system-prompt.test.ts +2 -20
- package/src/index.ts +7 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/pi-system-prompt",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "System prompt injection extension for Pi — reads config and appends to system prompt",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -36,6 +36,6 @@
|
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"typecheck": "npx tsc --noEmit",
|
|
39
|
-
"test": "vitest run"
|
|
39
|
+
"test": "vitest run --pool=threads"
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* 在 config 里显式 "capability":{"enabled":false} 隔离关注点;无法塞字段的用例(畸形 JSON /
|
|
18
18
|
* 文件缺失)期望值如实更新为含 capability 段。capability 自身行为由专项 describe 锚定。
|
|
19
19
|
*
|
|
20
|
-
* mock 策略(参照 msg-id-mapper 测试模式):pi SDK import type 零运行时解析,
|
|
20
|
+
* mock 策略(参照 host-internals msg-id-mapper 测试模式):pi SDK import type 零运行时解析,
|
|
21
21
|
* ExtensionAPI 用结构化桩;node:fs mock 后按路径分流(env 指向假目录,不碰真实文件系统)。
|
|
22
22
|
*
|
|
23
23
|
* 运行:cd extensions/taiji/system-prompt && npx vitest run
|
|
@@ -58,7 +58,7 @@ const CAP_HEADER = '# TaiJi capabilities'
|
|
|
58
58
|
/** 既有用例隔离关注点用的「capability 显式关闭」config 片段 */
|
|
59
59
|
const CAP_OFF = '"capability": {"enabled": false}'
|
|
60
60
|
|
|
61
|
-
/** hook 注册表桩(参照 msg-id-mapper harness 模式)——handler 第二参 ctx 透传(路径注入测试用) */
|
|
61
|
+
/** hook 注册表桩(参照 host-internals msg-id-mapper harness 模式)——handler 第二参 ctx 透传(路径注入测试用) */
|
|
62
62
|
function createHarness(): { beforeAgentStart: (event: BeforeAgentStartEvent, ctx?: unknown) => unknown } {
|
|
63
63
|
const handlers = new Map<string, (...args: unknown[]) => unknown>()
|
|
64
64
|
const pi = {
|
|
@@ -386,24 +386,6 @@ describe('fail-safe(外层 catch return undefined,永不阻断 agent loop)
|
|
|
386
386
|
)
|
|
387
387
|
})
|
|
388
388
|
|
|
389
|
-
it('logger 自身抛错的终极兜底 → stderr 兜底,仍 return undefined', () => {
|
|
390
|
-
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true)
|
|
391
|
-
loggerMock.error.mockImplementation(() => {
|
|
392
|
-
throw new Error('logger gone')
|
|
393
|
-
})
|
|
394
|
-
const h = createHarness()
|
|
395
|
-
const event = { type: 'before_agent_start', prompt: 'hi' } as unknown as BeforeAgentStartEvent
|
|
396
|
-
Object.defineProperty(event, 'systemPrompt', {
|
|
397
|
-
get() {
|
|
398
|
-
throw new Error('getter boom')
|
|
399
|
-
},
|
|
400
|
-
})
|
|
401
|
-
expect(h.beforeAgentStart(event)).toBeUndefined()
|
|
402
|
-
expect(stderrSpy).toHaveBeenCalledWith(
|
|
403
|
-
expect.stringContaining('logHookFailure also failed'),
|
|
404
|
-
)
|
|
405
|
-
})
|
|
406
|
-
|
|
407
389
|
it('systemPrompt 非法类型(undefined)且无 append → 旧 quirk 锚定:返回仅含 capability 段的结果而非 undefined', () => {
|
|
408
390
|
// R3 复核锚定的返回值检查 quirk(index.ts newPrompt === event.systemPrompt 比较):
|
|
409
391
|
// base 收敛 '',capability 默认开 → newPrompt 非空且 !== undefined → 必然返回对象。
|
package/src/index.ts
CHANGED
|
@@ -452,22 +452,15 @@ function buildSystemPrompt(event: BeforeAgentStartEvent, ctx?: ExtensionContext)
|
|
|
452
452
|
* 落盘诊断,不泄露配置内容。
|
|
453
453
|
*
|
|
454
454
|
* 通道:extension-logger 的 error → appendEntry 写入 session JSONL(需 setPiHandle
|
|
455
|
-
* 注入 pi handle 后生效);TAIJI_AGENT_DEBUG=1
|
|
456
|
-
*
|
|
455
|
+
* 注入 pi handle 后生效);TAIJI_AGENT_DEBUG=1 时另落文件日志。logger 全程吞错
|
|
456
|
+
* (appendEntry 与 fileLog 通道内部各自整体 try/catch,实装见 extension-logger
|
|
457
|
+
* error 方法),不会抛错到本调用方——旧的两层嵌套兜底(stderr 终极兜底 + 静默
|
|
458
|
+
* catch)已删,恒不命中。若未来 logger 改为可抛实现,异常由外层 handler 的
|
|
459
|
+
* try/catch 兜住(同样不外泄到 agent loop)。
|
|
457
460
|
*/
|
|
458
461
|
function logHookFailure(err: unknown): void {
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
logger.error(`before_agent_start hook failed: ${msg}`)
|
|
462
|
-
} catch (nestedErr) {
|
|
463
|
-
// best-effort:logger 抛错时的终极兜底 process.stderr.write——其内部吞错不会抛,仍不外泄到 agent loop。
|
|
464
|
-
try {
|
|
465
|
-
process.stderr.write(`[taiji-system-prompt-extension] logHookFailure also failed: ${String(nestedErr)}\n`)
|
|
466
|
-
} catch (finalErr) {
|
|
467
|
-
/* 完全静默:两层兜底都失败时无处可写 */
|
|
468
|
-
void finalErr
|
|
469
|
-
}
|
|
470
|
-
}
|
|
462
|
+
const msg = err instanceof Error ? `${err.name}: ${err.message}` : String(err)
|
|
463
|
+
logger.error(`before_agent_start hook failed: ${msg}`)
|
|
471
464
|
}
|
|
472
465
|
|
|
473
466
|
export default function (pi: ExtensionAPI): void {
|