pi-harness-runtime 1.1.136 → 1.1.138
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/harness/langchain/daemon.ts +128 -25
- package/harness/langchain/run.ts +1 -1
- package/index.ts +41 -2
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/dist/src/index.d.ts +42 -0
- package/packages/codex-watcher/dist/src/index.d.ts.map +1 -0
- package/packages/codex-watcher/dist/src/index.js +198 -0
- package/packages/codex-watcher/dist/src/index.js.map +1 -0
- package/packages/codex-watcher/dist/src/parser.d.ts +36 -0
- package/packages/codex-watcher/dist/src/parser.d.ts.map +1 -0
- package/packages/codex-watcher/dist/src/parser.js +151 -0
- package/packages/codex-watcher/dist/src/parser.js.map +1 -0
- package/packages/codex-watcher/dist/src/session.d.ts +9 -0
- package/packages/codex-watcher/dist/src/session.d.ts.map +1 -0
- package/packages/codex-watcher/dist/src/session.js +131 -0
- package/packages/codex-watcher/dist/src/session.js.map +1 -0
- package/packages/codex-watcher/dist/src/types.d.ts +63 -0
- package/packages/codex-watcher/dist/src/types.d.ts.map +1 -0
- package/packages/codex-watcher/dist/src/types.js +17 -0
- package/packages/codex-watcher/dist/src/types.js.map +1 -0
- package/packages/codex-watcher/package.json +26 -0
- package/packages/codex-watcher/src/index.ts +244 -0
- package/packages/codex-watcher/src/parser.ts +210 -0
- package/packages/codex-watcher/src/session.ts +151 -0
- package/packages/codex-watcher/src/types.ts +67 -0
- package/packages/codex-watcher/test/watch.test.ts +150 -0
- package/packages/config-capture/package.json +1 -1
- package/packages/config-capture/src/index.ts +5 -16
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/dist/harness-header.d.ts +18 -14
- package/packages/tui/dist/harness-header.d.ts.map +1 -1
- package/packages/tui/dist/harness-header.js +110 -64
- package/packages/tui/dist/harness-header.js.map +1 -1
- package/packages/tui/dist/index.d.ts +1 -2
- package/packages/tui/dist/index.d.ts.map +1 -1
- package/packages/tui/dist/index.js +1 -2
- package/packages/tui/dist/index.js.map +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/tui/src/harness-header.ts +156 -77
- package/packages/tui/src/index.ts +6 -2
- package/packages/tui/test/harness-header.test.ts +380 -100
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Codex session watcher
|
|
3
|
+
*
|
|
4
|
+
* Run with: bun test packages/codex-watcher/test/watch.test.ts
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// @ts-expect-error: bun:test types are provided by bun runtime
|
|
8
|
+
import { describe, expect, it } from "bun:test";
|
|
9
|
+
import { classifyMessage, parseNewMessages } from "../src/parser.js";
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Parser: parseNewMessages
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
describe("parseNewMessages", () => {
|
|
16
|
+
it("returns empty array for empty input", () => {
|
|
17
|
+
expect(parseNewMessages([], 0)).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it("skips lines with ordinal ≤ fromOrdinal", () => {
|
|
21
|
+
const lines = [
|
|
22
|
+
JSON.stringify({
|
|
23
|
+
ordinal: 5,
|
|
24
|
+
timestamp: "2026-10-02T14:00:00Z",
|
|
25
|
+
type: "response_item",
|
|
26
|
+
payload: {
|
|
27
|
+
type: "message",
|
|
28
|
+
role: "user",
|
|
29
|
+
content: [{ type: "input_text", text: "hello" }],
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
];
|
|
33
|
+
const msgs = parseNewMessages(lines, 5);
|
|
34
|
+
expect(msgs).toHaveLength(0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("parses user message from response_item", () => {
|
|
38
|
+
const lines = [
|
|
39
|
+
JSON.stringify({
|
|
40
|
+
ordinal: 10,
|
|
41
|
+
timestamp: "2026-10-02T14:00:00Z",
|
|
42
|
+
type: "response_item",
|
|
43
|
+
payload: {
|
|
44
|
+
type: "message",
|
|
45
|
+
role: "user",
|
|
46
|
+
content: [{ type: "input_text", text: "write tests" }],
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
];
|
|
50
|
+
const msgs = parseNewMessages(lines, 0);
|
|
51
|
+
expect(msgs).toHaveLength(1);
|
|
52
|
+
expect(msgs[0].role).toBe("user");
|
|
53
|
+
expect(msgs[0].text).toBe("write tests");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("parses assistant message from AgentMessage item_completed", () => {
|
|
57
|
+
const lines = [
|
|
58
|
+
JSON.stringify({
|
|
59
|
+
ordinal: 11,
|
|
60
|
+
timestamp: "2026-10-02T14:00:00Z",
|
|
61
|
+
type: "event_msg",
|
|
62
|
+
payload: {
|
|
63
|
+
type: "item_completed",
|
|
64
|
+
item: {
|
|
65
|
+
type: "AgentMessage",
|
|
66
|
+
content: [{ type: "Text", text: "Here is the plan" }],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
];
|
|
71
|
+
const msgs = parseNewMessages(lines, 0);
|
|
72
|
+
expect(msgs).toHaveLength(1);
|
|
73
|
+
expect(msgs[0].role).toBe("assistant");
|
|
74
|
+
expect(msgs[0].text).toBe("Here is the plan");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("ignores malformed JSON", () => {
|
|
78
|
+
const lines = [
|
|
79
|
+
"not valid json {{{",
|
|
80
|
+
JSON.stringify({
|
|
81
|
+
ordinal: 1,
|
|
82
|
+
timestamp: "",
|
|
83
|
+
type: "response_item",
|
|
84
|
+
payload: {
|
|
85
|
+
type: "message",
|
|
86
|
+
role: "user",
|
|
87
|
+
content: [{ type: "input_text", text: "test" }],
|
|
88
|
+
},
|
|
89
|
+
}),
|
|
90
|
+
];
|
|
91
|
+
const msgs = parseNewMessages(lines, 0);
|
|
92
|
+
// Only the well-formed line should produce a message
|
|
93
|
+
expect(msgs).toHaveLength(1);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("returns messages sorted by ordinal", () => {
|
|
97
|
+
const lines = [
|
|
98
|
+
JSON.stringify({
|
|
99
|
+
ordinal: 30,
|
|
100
|
+
timestamp: "t",
|
|
101
|
+
type: "response_item",
|
|
102
|
+
payload: {
|
|
103
|
+
type: "message",
|
|
104
|
+
role: "user",
|
|
105
|
+
content: [{ type: "input_text", text: "second" }],
|
|
106
|
+
},
|
|
107
|
+
}),
|
|
108
|
+
JSON.stringify({
|
|
109
|
+
ordinal: 10,
|
|
110
|
+
timestamp: "t",
|
|
111
|
+
type: "response_item",
|
|
112
|
+
payload: {
|
|
113
|
+
type: "message",
|
|
114
|
+
role: "user",
|
|
115
|
+
content: [{ type: "input_text", text: "first" }],
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
118
|
+
];
|
|
119
|
+
const msgs = parseNewMessages(lines, 0);
|
|
120
|
+
expect(msgs).toHaveLength(2);
|
|
121
|
+
expect(msgs[0].ordinal).toBeLessThan(msgs[1].ordinal);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
// classifyMessage
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
|
|
129
|
+
describe("classifyMessage", () => {
|
|
130
|
+
it('classifies text-only as "plan"', () => {
|
|
131
|
+
expect(
|
|
132
|
+
classifyMessage("# Implementation Plan\n\n1. Step one\n2. Step two"),
|
|
133
|
+
).toBe("plan");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('classifies code-only as "code"', () => {
|
|
137
|
+
expect(classifyMessage("```\nconst x = 1;\n```")).toBe("code");
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('classifies mixed text and code as "mixed"', () => {
|
|
141
|
+
expect(classifyMessage("# Plan\n\n```\nconst x = 1;\n```\n\nDone.")).toBe(
|
|
142
|
+
"mixed",
|
|
143
|
+
);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('classifies empty as "unknown"', () => {
|
|
147
|
+
expect(classifyMessage("")).toBe("unknown");
|
|
148
|
+
expect(classifyMessage(" ")).toBe("unknown");
|
|
149
|
+
});
|
|
150
|
+
});
|
|
@@ -331,26 +331,15 @@ export function registerConfigCapture(
|
|
|
331
331
|
// Skip if already suggested in this session
|
|
332
332
|
if (documentedConfigs.has(configKey)) return;
|
|
333
333
|
|
|
334
|
-
// Log detection
|
|
335
|
-
if (cfg.debug) {
|
|
336
|
-
console.log(`[config-capture] Detected ${detection.configType} (${detection.confidence})`);
|
|
337
|
-
console.log(`[config-capture] Sample: ${detection.sampleData}`);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
334
|
// Mark as documented
|
|
341
335
|
documentedConfigs.add(configKey);
|
|
342
336
|
|
|
343
|
-
//
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
// Suggest action
|
|
349
|
-
const actionMsg = `[config-capture] Consider documenting this to AGENTS.md section "Discovered Configuration"`;
|
|
350
|
-
console.log(actionMsg);
|
|
337
|
+
// Detection is silent by default — set debug: true in registerConfigCapture() to enable logs.
|
|
338
|
+
if (cfg.debug) {
|
|
339
|
+
console.log(`[config-capture] Detected ${detection.configType} (${detection.confidence})`);
|
|
340
|
+
console.log(`[config-capture] Sample: ${detection.sampleData?.slice(0, 200)}`);
|
|
341
|
+
}
|
|
351
342
|
});
|
|
352
|
-
|
|
353
|
-
console.log("[config-capture] Started - detecting API config responses");
|
|
354
343
|
}
|
|
355
344
|
|
|
356
345
|
// Default export
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.138",
|
|
4
4
|
"description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/provider-router.js",
|