pi-harness-runtime 1.1.229 → 1.1.231
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 +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/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/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- 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/e2e-tester/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/dist/continuation-controller.d.ts.map +1 -1
- package/packages/jev-judge/dist/continuation-controller.js +19 -4
- package/packages/jev-judge/dist/continuation-controller.js.map +1 -1
- package/packages/jev-judge/dist/todo-provider.d.ts +4 -1
- package/packages/jev-judge/dist/todo-provider.d.ts.map +1 -1
- package/packages/jev-judge/dist/todo-provider.js +114 -5
- package/packages/jev-judge/dist/todo-provider.js.map +1 -1
- package/packages/jev-judge/dist/typesafe-provider.d.ts +1 -0
- package/packages/jev-judge/dist/typesafe-provider.d.ts.map +1 -1
- package/packages/jev-judge/dist/typesafe-provider.js +15 -13
- package/packages/jev-judge/dist/typesafe-provider.js.map +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/continuation-controller.ts +20 -4
- package/packages/jev-judge/src/todo-provider.ts +140 -5
- package/packages/jev-judge/src/typesafe-provider.ts +32 -23
- 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/paperclip-integration/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/telegram/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/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/webmcp-tester/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
|
@@ -75,14 +75,120 @@ export class MockTodoProvider {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
|
-
* Create a todo provider
|
|
78
|
+
* Create a todo provider that reads from rpiv-todo state via session branch
|
|
79
79
|
*/
|
|
80
80
|
export function createTodoProvider(pi) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
if (pi && "sessionManager" in pi) {
|
|
82
|
+
return new PiTodoProvider(pi);
|
|
83
|
+
}
|
|
84
84
|
return new PiUnavailableTodoProvider();
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Provider that reads rpiv-todo state from session branch
|
|
88
|
+
* Replicates rpiv-todo's replayFromBranch logic to access todo state
|
|
89
|
+
*/
|
|
90
|
+
class PiTodoProvider {
|
|
91
|
+
pi;
|
|
92
|
+
_revision = 0;
|
|
93
|
+
constructor(pi) {
|
|
94
|
+
this.pi = pi;
|
|
95
|
+
}
|
|
96
|
+
async availability() {
|
|
97
|
+
if (!this.pi.sessionManager) {
|
|
98
|
+
return {
|
|
99
|
+
available: false,
|
|
100
|
+
error: "Session manager not available",
|
|
101
|
+
provider: "pi-todo",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return { available: true, provider: "pi-todo" };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a value is a TaskDetails shape (defensive validation)
|
|
108
|
+
*/
|
|
109
|
+
isTaskDetails(value) {
|
|
110
|
+
if (!value || typeof value !== "object")
|
|
111
|
+
return false;
|
|
112
|
+
const v = value;
|
|
113
|
+
return Array.isArray(v.tasks) && typeof v.nextId === "number";
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get todo state from session branch (replicates rpiv-todo's replayFromBranch)
|
|
117
|
+
*/
|
|
118
|
+
getTodoState() {
|
|
119
|
+
let fromEntries;
|
|
120
|
+
let fromToolResults;
|
|
121
|
+
try {
|
|
122
|
+
for (const entry of this.pi.sessionManager.getBranch()) {
|
|
123
|
+
const e = entry;
|
|
124
|
+
// Priority 1: rpiv-todo-state custom entries
|
|
125
|
+
if (e.type === "custom") {
|
|
126
|
+
if (e.customType === "rpiv-todo-state" && this.isTaskDetails(e.data)) {
|
|
127
|
+
fromEntries = { tasks: e.data.tasks.map(t => ({ ...t })), nextId: e.data.nextId };
|
|
128
|
+
}
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// Priority 2: toolResult entries with toolName === "todo"
|
|
132
|
+
if (e.type !== "message")
|
|
133
|
+
continue;
|
|
134
|
+
const msg = e.message;
|
|
135
|
+
if (msg?.role !== "toolResult" || msg.toolName !== "todo")
|
|
136
|
+
continue;
|
|
137
|
+
if (!this.isTaskDetails(msg.details))
|
|
138
|
+
continue;
|
|
139
|
+
fromToolResults = { tasks: msg.details.tasks.map(t => ({ ...t })), nextId: msg.details.nextId };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
// Fall through to EMPTY_STATE on error
|
|
144
|
+
}
|
|
145
|
+
// Prefer custom entries (more authoritative), fall back to tool results
|
|
146
|
+
return fromEntries ?? fromToolResults ?? { tasks: [], nextId: 1 };
|
|
147
|
+
}
|
|
148
|
+
async getSnapshot() {
|
|
149
|
+
this._revision++;
|
|
150
|
+
const state = this.getTodoState();
|
|
151
|
+
return {
|
|
152
|
+
items: state.tasks,
|
|
153
|
+
sessionId: this.pi.sessionManager.getSessionId() ?? "unknown",
|
|
154
|
+
revision: this._revision,
|
|
155
|
+
createdAt: new Date(),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
async getByStatus(status) {
|
|
159
|
+
const { items } = await this.getSnapshot();
|
|
160
|
+
return items.filter((item) => item.status === status);
|
|
161
|
+
}
|
|
162
|
+
async getInProgress() {
|
|
163
|
+
return this.getByStatus("in_progress");
|
|
164
|
+
}
|
|
165
|
+
async getPending() {
|
|
166
|
+
return this.getByStatus("pending");
|
|
167
|
+
}
|
|
168
|
+
async getCompleted() {
|
|
169
|
+
return this.getByStatus("completed");
|
|
170
|
+
}
|
|
171
|
+
async getReady() {
|
|
172
|
+
const pending = await this.getPending();
|
|
173
|
+
const all = (await this.getSnapshot()).items;
|
|
174
|
+
return pending.filter((item) => {
|
|
175
|
+
if (!item.blockedBy?.length)
|
|
176
|
+
return true;
|
|
177
|
+
const blockedIds = new Set(item.blockedBy);
|
|
178
|
+
return !all.some((i) => blockedIds.has(i.id) && i.status !== "completed");
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
async getBlocked() {
|
|
182
|
+
const pending = await this.getPending();
|
|
183
|
+
const all = (await this.getSnapshot()).items;
|
|
184
|
+
return pending.filter((item) => {
|
|
185
|
+
if (!item.blockedBy?.length)
|
|
186
|
+
return false;
|
|
187
|
+
const blockedIds = new Set(item.blockedBy);
|
|
188
|
+
return all.some((i) => blockedIds.has(i.id) && i.status !== "completed");
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
86
192
|
/**
|
|
87
193
|
* Provider that reports Pi todo extension is not available
|
|
88
194
|
*/
|
|
@@ -90,7 +196,7 @@ class PiUnavailableTodoProvider {
|
|
|
90
196
|
async availability() {
|
|
91
197
|
return {
|
|
92
198
|
available: false,
|
|
93
|
-
error: "Pi
|
|
199
|
+
error: "Pi session manager not available. Todo state is not accessible.",
|
|
94
200
|
provider: "pi-todo",
|
|
95
201
|
};
|
|
96
202
|
}
|
|
@@ -116,4 +222,7 @@ class PiUnavailableTodoProvider {
|
|
|
116
222
|
return [];
|
|
117
223
|
}
|
|
118
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Provider that reports Pi todo extension is not available
|
|
227
|
+
*/
|
|
119
228
|
//# sourceMappingURL=todo-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todo-provider.js","sourceRoot":"","sources":["../src/todo-provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"todo-provider.js","sourceRoot":"","sources":["../src/todo-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesafe-provider.d.ts","sourceRoot":"","sources":["../src/typesafe-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,YAAY,EAGZ,mBAAmB,EAIpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"typesafe-provider.d.ts","sourceRoot":"","sources":["../src/typesafe-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,YAAY,EAGZ,mBAAmB,EAIpB,MAAM,YAAY,CAAC;AAkDpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA2B;IAEzC,YAAY,MAAM,EAAE,cAAc,EAKjC;IAED;;OAEG;IACG,QAAQ,CAAC,CAAC,SAAS,MAAM,EAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CA2EjC;IAED;;OAEG;IACG,IAAI,CACR,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;KAAE,CAAC,CAWlE;IAED;;OAEG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,EAAE,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAW5C;IAED;;OAEG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAI,EACP,GAAG,SAAM,GACR,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAWhD;IAED;;OAEG;IACH,OAAO,CAAC,aAAa;IA2DrB;;OAEG;IACH,OAAO,CAAC,aAAa;CAOtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,UAAU,GAAG,YAAY,CAgB3B"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* Default configuration
|
|
12
12
|
*/
|
|
13
13
|
const DEFAULT_CONFIG = {
|
|
14
|
+
model: "jev-latest",
|
|
14
15
|
baseUrl: "https://api.typesafe.ai",
|
|
15
16
|
timeoutMs: 30000,
|
|
16
17
|
};
|
|
@@ -35,25 +36,24 @@ export class TypeSafeJudge {
|
|
|
35
36
|
const startTime = Date.now();
|
|
36
37
|
// Convert state to string if object
|
|
37
38
|
const stateStr = typeof state === "string" ? state : JSON.stringify(state);
|
|
38
|
-
// Build TypeSafe question format
|
|
39
|
-
const
|
|
39
|
+
// Build TypeSafe question format as a map (not array)
|
|
40
|
+
const questionsMap = {};
|
|
41
|
+
for (const [id, q] of Object.entries(questions)) {
|
|
40
42
|
const questionObj = q;
|
|
41
|
-
|
|
42
|
-
id,
|
|
43
|
+
questionsMap[id] = {
|
|
43
44
|
type: questionObj.type,
|
|
44
45
|
instructions: questionObj.instructions,
|
|
45
46
|
};
|
|
46
47
|
if (questionObj.type === "choice") {
|
|
47
|
-
|
|
48
|
+
questionsMap[id].options = questionObj.options;
|
|
48
49
|
// For choice questions, criteria defines ordered preference levels
|
|
49
|
-
|
|
50
|
+
questionsMap[id].criteria = questionObj.options;
|
|
50
51
|
}
|
|
51
52
|
else if (questionObj.type === "score") {
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
questionsMap[id].min = questionObj.min ?? 0;
|
|
54
|
+
questionsMap[id].max = questionObj.max ?? 100;
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
-
});
|
|
56
|
+
}
|
|
57
57
|
// Call TypeSafe API directly
|
|
58
58
|
const response = await fetch(`${this.config.baseUrl}/v1/systemone`, {
|
|
59
59
|
method: "POST",
|
|
@@ -62,7 +62,8 @@ export class TypeSafeJudge {
|
|
|
62
62
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
63
63
|
},
|
|
64
64
|
body: JSON.stringify({
|
|
65
|
-
|
|
65
|
+
model: this.config.model,
|
|
66
|
+
questions: questionsMap,
|
|
66
67
|
state: stateStr,
|
|
67
68
|
}),
|
|
68
69
|
signal: AbortSignal.timeout(this.config.timeoutMs),
|
|
@@ -142,11 +143,12 @@ export class TypeSafeJudge {
|
|
|
142
143
|
let probability;
|
|
143
144
|
switch (answer.type) {
|
|
144
145
|
case "noul":
|
|
146
|
+
// FIX: Use answer.noul (not probability) per TypeSafe API spec
|
|
145
147
|
response = {
|
|
146
148
|
type: "noul",
|
|
147
|
-
noul: answer.
|
|
149
|
+
noul: answer.noul ?? 0.5,
|
|
148
150
|
};
|
|
149
|
-
probability = answer.
|
|
151
|
+
probability = answer.noul ?? 0.5;
|
|
150
152
|
break;
|
|
151
153
|
case "choice":
|
|
152
154
|
response = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesafe-provider.js","sourceRoot":"","sources":["../src/typesafe-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"typesafe-provider.js","sourceRoot":"","sources":["../src/typesafe-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ export interface ContinuationResult {
|
|
|
67
67
|
export class TodoContinuationController {
|
|
68
68
|
private pi: ExtensionAPI;
|
|
69
69
|
private config: Required<ContinuationConfig>;
|
|
70
|
-
private todoProvider
|
|
70
|
+
private todoProvider: ReturnType<typeof createTodoProvider>;
|
|
71
71
|
|
|
72
72
|
private state: ContinuationState = {
|
|
73
73
|
sessionId: "",
|
|
@@ -85,6 +85,7 @@ export class TodoContinuationController {
|
|
|
85
85
|
|
|
86
86
|
constructor(pi: ExtensionAPI, config?: ContinuationConfig) {
|
|
87
87
|
this.pi = pi;
|
|
88
|
+
this.todoProvider = createTodoProvider(pi);
|
|
88
89
|
this.config = {
|
|
89
90
|
jevFallbackMinWaitMs: 5 * 60 * 1000, // 5 minutes
|
|
90
91
|
routineThreshold: 0.7,
|
|
@@ -215,15 +216,22 @@ export class TodoContinuationController {
|
|
|
215
216
|
|
|
216
217
|
this.state.steerAttempts++;
|
|
217
218
|
this.state.continuationQueued = true;
|
|
219
|
+
|
|
218
220
|
// Build continuation message
|
|
219
221
|
const message = item.description
|
|
220
222
|
? `Continue task: ${item.subject}\n\n${item.description}`
|
|
221
223
|
: `Continue task: ${item.subject}`;
|
|
222
224
|
|
|
223
225
|
this.state.lastSteerMessage = message;
|
|
224
|
-
debugLog("TodoContinuation", "
|
|
225
|
-
|
|
226
|
-
//
|
|
226
|
+
debugLog("TodoContinuation", "Sending continuation:", item.subject);
|
|
227
|
+
|
|
228
|
+
// Send continuation message via Pi API
|
|
229
|
+
try {
|
|
230
|
+
await (this.pi as ExtensionAPI & { sendUserMessage: (content: string, opts?: { deliverAs?: string }) => Promise<void> }).sendUserMessage(message, { deliverAs: "steer" });
|
|
231
|
+
} catch (err) {
|
|
232
|
+
debugLog("TodoContinuation", "Failed to send continuation:", String(err));
|
|
233
|
+
this.state.continuationQueued = false;
|
|
234
|
+
}
|
|
227
235
|
}
|
|
228
236
|
|
|
229
237
|
/**
|
|
@@ -248,6 +256,14 @@ export class TodoContinuationController {
|
|
|
248
256
|
this.state.lastSteerMessage = message;
|
|
249
257
|
this.state.todoRevision = snapshot.revision;
|
|
250
258
|
debugLog("TodoContinuation", "Steering to continue item", itemId);
|
|
259
|
+
|
|
260
|
+
// Send continuation message via Pi API
|
|
261
|
+
try {
|
|
262
|
+
await (this.pi as ExtensionAPI & { sendUserMessage: (content: string, opts?: { deliverAs?: string }) => Promise<void> }).sendUserMessage(message, { deliverAs: "steer" });
|
|
263
|
+
} catch (err) {
|
|
264
|
+
debugLog("TodoContinuation", "Failed to send steer:", String(err));
|
|
265
|
+
this.state.continuationQueued = false;
|
|
266
|
+
}
|
|
251
267
|
}
|
|
252
268
|
|
|
253
269
|
/**
|
|
@@ -176,15 +176,145 @@ export class MockTodoProvider implements TodoProvider {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
|
-
*
|
|
179
|
+
* Extended ExtensionAPI type with sessionManager (not in base type but available at runtime)
|
|
180
|
+
*/
|
|
181
|
+
interface PiExtensionAPI extends ExtensionAPI {
|
|
182
|
+
sessionManager: {
|
|
183
|
+
getSessionId(): string;
|
|
184
|
+
getBranch(): Iterable<unknown>;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Create a todo provider that reads from rpiv-todo state via session branch
|
|
180
190
|
*/
|
|
181
191
|
export function createTodoProvider(pi?: ExtensionAPI): TodoProvider {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
192
|
+
if (pi && "sessionManager" in pi) {
|
|
193
|
+
return new PiTodoProvider(pi as PiExtensionAPI);
|
|
194
|
+
}
|
|
185
195
|
return new PiUnavailableTodoProvider();
|
|
186
196
|
}
|
|
187
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Provider that reads rpiv-todo state from session branch
|
|
200
|
+
* Replicates rpiv-todo's replayFromBranch logic to access todo state
|
|
201
|
+
*/
|
|
202
|
+
class PiTodoProvider implements TodoProvider {
|
|
203
|
+
private pi: PiExtensionAPI;
|
|
204
|
+
private _revision = 0;
|
|
205
|
+
|
|
206
|
+
constructor(pi: PiExtensionAPI) {
|
|
207
|
+
this.pi = pi;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async availability(): Promise<TodoAvailability> {
|
|
211
|
+
if (!this.pi.sessionManager) {
|
|
212
|
+
return {
|
|
213
|
+
available: false,
|
|
214
|
+
error: "Session manager not available",
|
|
215
|
+
provider: "pi-todo",
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return { available: true, provider: "pi-todo" };
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Check if a value is a TaskDetails shape (defensive validation)
|
|
223
|
+
*/
|
|
224
|
+
private isTaskDetails(value: unknown): value is { tasks: TodoItem[]; nextId: number } {
|
|
225
|
+
if (!value || typeof value !== "object") return false;
|
|
226
|
+
const v = value as Record<string, unknown>;
|
|
227
|
+
return Array.isArray(v.tasks) && typeof v.nextId === "number";
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Get todo state from session branch (replicates rpiv-todo's replayFromBranch)
|
|
232
|
+
*/
|
|
233
|
+
private getTodoState(): { tasks: TodoItem[]; nextId: number } {
|
|
234
|
+
let fromEntries: { tasks: TodoItem[]; nextId: number } | undefined;
|
|
235
|
+
let fromToolResults: { tasks: TodoItem[]; nextId: number } | undefined;
|
|
236
|
+
|
|
237
|
+
try {
|
|
238
|
+
for (const entry of this.pi.sessionManager.getBranch()) {
|
|
239
|
+
const e = entry as {
|
|
240
|
+
type?: string;
|
|
241
|
+
customType?: string;
|
|
242
|
+
data?: unknown;
|
|
243
|
+
message?: { role?: string; toolName?: string; details?: unknown };
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Priority 1: rpiv-todo-state custom entries
|
|
247
|
+
if (e.type === "custom") {
|
|
248
|
+
if (e.customType === "rpiv-todo-state" && this.isTaskDetails(e.data)) {
|
|
249
|
+
fromEntries = { tasks: (e.data as { tasks: TodoItem[] }).tasks.map(t => ({ ...t })), nextId: (e.data as { nextId: number }).nextId };
|
|
250
|
+
}
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Priority 2: toolResult entries with toolName === "todo"
|
|
255
|
+
if (e.type !== "message") continue;
|
|
256
|
+
const msg = e.message;
|
|
257
|
+
if (msg?.role !== "toolResult" || msg.toolName !== "todo") continue;
|
|
258
|
+
if (!this.isTaskDetails(msg.details)) continue;
|
|
259
|
+
fromToolResults = { tasks: (msg.details as { tasks: TodoItem[] }).tasks.map(t => ({ ...t })), nextId: (msg.details as { nextId: number }).nextId };
|
|
260
|
+
}
|
|
261
|
+
} catch (err) {
|
|
262
|
+
// Fall through to EMPTY_STATE on error
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Prefer custom entries (more authoritative), fall back to tool results
|
|
266
|
+
return fromEntries ?? fromToolResults ?? { tasks: [], nextId: 1 };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
async getSnapshot(): Promise<TodoSnapshot> {
|
|
270
|
+
this._revision++;
|
|
271
|
+
const state = this.getTodoState();
|
|
272
|
+
return {
|
|
273
|
+
items: state.tasks,
|
|
274
|
+
sessionId: this.pi.sessionManager.getSessionId() ?? "unknown",
|
|
275
|
+
revision: this._revision,
|
|
276
|
+
createdAt: new Date(),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
async getByStatus(status: TodoStatus): Promise<TodoItem[]> {
|
|
281
|
+
const { items } = await this.getSnapshot();
|
|
282
|
+
return items.filter((item) => item.status === status);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async getInProgress(): Promise<TodoItem[]> {
|
|
286
|
+
return this.getByStatus("in_progress");
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
async getPending(): Promise<TodoItem[]> {
|
|
290
|
+
return this.getByStatus("pending");
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
async getCompleted(): Promise<TodoItem[]> {
|
|
294
|
+
return this.getByStatus("completed");
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
async getReady(): Promise<TodoItem[]> {
|
|
298
|
+
const pending = await this.getPending();
|
|
299
|
+
const all = (await this.getSnapshot()).items;
|
|
300
|
+
return pending.filter((item) => {
|
|
301
|
+
if (!item.blockedBy?.length) return true;
|
|
302
|
+
const blockedIds = new Set(item.blockedBy);
|
|
303
|
+
return !all.some((i) => blockedIds.has(i.id) && i.status !== "completed");
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
async getBlocked(): Promise<TodoItem[]> {
|
|
308
|
+
const pending = await this.getPending();
|
|
309
|
+
const all = (await this.getSnapshot()).items;
|
|
310
|
+
return pending.filter((item) => {
|
|
311
|
+
if (!item.blockedBy?.length) return false;
|
|
312
|
+
const blockedIds = new Set(item.blockedBy);
|
|
313
|
+
return all.some((i) => blockedIds.has(i.id) && i.status !== "completed");
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
188
318
|
/**
|
|
189
319
|
* Provider that reports Pi todo extension is not available
|
|
190
320
|
*/
|
|
@@ -192,7 +322,7 @@ class PiUnavailableTodoProvider implements TodoProvider {
|
|
|
192
322
|
async availability(): Promise<TodoAvailability> {
|
|
193
323
|
return {
|
|
194
324
|
available: false,
|
|
195
|
-
error: "Pi
|
|
325
|
+
error: "Pi session manager not available. Todo state is not accessible.",
|
|
196
326
|
provider: "pi-todo",
|
|
197
327
|
};
|
|
198
328
|
}
|
|
@@ -225,3 +355,8 @@ class PiUnavailableTodoProvider implements TodoProvider {
|
|
|
225
355
|
return [];
|
|
226
356
|
}
|
|
227
357
|
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Provider that reports Pi todo extension is not available
|
|
361
|
+
*/
|
|
362
|
+
|
|
@@ -23,15 +23,18 @@ import type {
|
|
|
23
23
|
* TypeSafe API request format
|
|
24
24
|
*/
|
|
25
25
|
interface TypeSafeRequest {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
/** The model that handles the request. Required. */
|
|
27
|
+
model: string;
|
|
28
|
+
/** The content to evaluate. */
|
|
29
|
+
state: string | object | unknown[];
|
|
30
|
+
/** A map of typed questions. Keys are question IDs. */
|
|
31
|
+
questions: Record<string, TypeSafeQuestion>;
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
/**
|
|
31
|
-
* TypeSafe question format
|
|
35
|
+
* TypeSafe question format (per API spec, id not needed in question object - it's the map key)
|
|
32
36
|
*/
|
|
33
37
|
interface TypeSafeQuestion {
|
|
34
|
-
id: string;
|
|
35
38
|
type: "noul" | "choice" | "score";
|
|
36
39
|
instructions: string;
|
|
37
40
|
options?: string[]; // For choice type
|
|
@@ -54,10 +57,14 @@ interface TypeSafeResponse {
|
|
|
54
57
|
*/
|
|
55
58
|
interface TypeSafeAnswer {
|
|
56
59
|
type: "noul" | "choice" | "score";
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
/** For noul type: probability of yes (0-1). */
|
|
61
|
+
noul?: number;
|
|
62
|
+
/** For choice type: the selected option. */
|
|
63
|
+
choice?: string;
|
|
64
|
+
/** For score type: the probability-weighted score. */
|
|
65
|
+
score?: number;
|
|
66
|
+
/** For choice/score: confidence 0-1. */
|
|
67
|
+
confidence?: number;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
70
|
/**
|
|
@@ -65,14 +72,16 @@ interface TypeSafeAnswer {
|
|
|
65
72
|
*/
|
|
66
73
|
export interface TypeSafeConfig {
|
|
67
74
|
apiKey: string;
|
|
75
|
+
model?: string; // Defaults to jev-latest
|
|
68
76
|
baseUrl?: string; // Defaults to https://api.typesafe.ai
|
|
69
|
-
timeoutMs?: number;
|
|
77
|
+
timeoutMs?: number; // Defaults to 30000
|
|
70
78
|
}
|
|
71
79
|
|
|
72
80
|
/**
|
|
73
81
|
* Default configuration
|
|
74
82
|
*/
|
|
75
83
|
const DEFAULT_CONFIG = {
|
|
84
|
+
model: "jev-latest",
|
|
76
85
|
baseUrl: "https://api.typesafe.ai",
|
|
77
86
|
timeoutMs: 30000,
|
|
78
87
|
};
|
|
@@ -105,26 +114,24 @@ export class TypeSafeJudge {
|
|
|
105
114
|
// Convert state to string if object
|
|
106
115
|
const stateStr = typeof state === "string" ? state : JSON.stringify(state);
|
|
107
116
|
|
|
108
|
-
// Build TypeSafe question format
|
|
109
|
-
const
|
|
117
|
+
// Build TypeSafe question format as a map (not array)
|
|
118
|
+
const questionsMap: Record<string, TypeSafeQuestion> = {};
|
|
119
|
+
for (const [id, q] of Object.entries(questions)) {
|
|
110
120
|
const questionObj = q as JevQuestion;
|
|
111
|
-
|
|
112
|
-
id,
|
|
121
|
+
questionsMap[id] = {
|
|
113
122
|
type: questionObj.type,
|
|
114
123
|
instructions: questionObj.instructions,
|
|
115
124
|
};
|
|
116
125
|
|
|
117
126
|
if (questionObj.type === "choice") {
|
|
118
|
-
|
|
127
|
+
questionsMap[id].options = questionObj.options;
|
|
119
128
|
// For choice questions, criteria defines ordered preference levels
|
|
120
|
-
|
|
129
|
+
questionsMap[id].criteria = questionObj.options;
|
|
121
130
|
} else if (questionObj.type === "score") {
|
|
122
|
-
|
|
123
|
-
|
|
131
|
+
questionsMap[id].min = questionObj.min ?? 0;
|
|
132
|
+
questionsMap[id].max = questionObj.max ?? 100;
|
|
124
133
|
}
|
|
125
|
-
|
|
126
|
-
return question;
|
|
127
|
-
});
|
|
134
|
+
}
|
|
128
135
|
|
|
129
136
|
// Call TypeSafe API directly
|
|
130
137
|
const response = await fetch(`${this.config.baseUrl}/v1/systemone`, {
|
|
@@ -134,7 +141,8 @@ export class TypeSafeJudge {
|
|
|
134
141
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
135
142
|
},
|
|
136
143
|
body: JSON.stringify({
|
|
137
|
-
|
|
144
|
+
model: this.config.model,
|
|
145
|
+
questions: questionsMap,
|
|
138
146
|
state: stateStr,
|
|
139
147
|
} satisfies TypeSafeRequest),
|
|
140
148
|
signal: AbortSignal.timeout(this.config.timeoutMs),
|
|
@@ -250,11 +258,12 @@ export class TypeSafeJudge {
|
|
|
250
258
|
|
|
251
259
|
switch (answer.type) {
|
|
252
260
|
case "noul":
|
|
261
|
+
// FIX: Use answer.noul (not probability) per TypeSafe API spec
|
|
253
262
|
response = {
|
|
254
263
|
type: "noul",
|
|
255
|
-
noul: answer.
|
|
264
|
+
noul: answer.noul ?? 0.5,
|
|
256
265
|
};
|
|
257
|
-
probability = answer.
|
|
266
|
+
probability = answer.noul ?? 0.5;
|
|
258
267
|
break;
|
|
259
268
|
|
|
260
269
|
case "choice":
|