@pasko70/pibo 1.9.13 → 1.10.0
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/README.md +183 -183
- package/context/codex-base-prompt.md +148 -148
- package/context/compute-worker.md +23 -23
- package/context/pibo-compaction-prompt.md +100 -100
- package/context/pibo-native-tooling.md +18 -18
- package/context/pibo-system-prompt.md +77 -77
- package/dist/apps/chat/agent-profiles.js +2 -2
- package/dist/apps/chat/agent-store.js +263 -250
- package/dist/apps/chat/chat-request-normalizers.js +10 -0
- package/dist/apps/chat/data/project-service.js +168 -168
- package/dist/apps/chat/data/read-state-service.js +18 -18
- package/dist/apps/chat/data/session-query-service.js +25 -25
- package/dist/apps/chat/data/timeline-query-service.js +19 -19
- package/dist/apps/chat/loop-api.js +176 -0
- package/dist/apps/chat/static-assets.js +854 -854
- package/dist/apps/chat/web-app.js +6 -6
- package/dist/apps/chat/workflow-manual-trigger-runtime.js +149 -46
- package/dist/apps/chat/workflow-persistence.js +255 -255
- package/dist/apps/chat-ui/assets/{dist-yCYNNb5d.js → dist-BwKObYnX.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BCB6zezO.js → dist-CKtT8YGm.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CnVsqwSG.js → dist-CS7wdk0Z.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-HqTN67dc.js → dist-D-cxLQO1.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BNMu92bb.js → dist-DUlaXAk7.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CzE6k3F3.js → dist-DlATLa-U.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Dq4GxJi3.js → dist-GdEM8UW1.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BZ2eTC4f.js → dist-LHRs1Nhr.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D811wJeV.js → dist-Y-AA2omI.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-WyXdYl-w.js → dist-nOLTkZrJ.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BHa-kcGl.js → dist-wE9nop9V.js} +1 -1
- package/dist/apps/chat-ui/assets/{index-DwHJfmiF.js → index-8W_yMHQI.js} +6 -6
- package/dist/apps/chat-ui/index.html +17 -17
- package/dist/apps/chat-ui/manifest.webmanifest +25 -25
- package/dist/apps/chat-ui/sw.js +47 -47
- package/dist/apps/chat-vscode-web/index.html +12 -12
- package/dist/apps/cli-ui/cliSessionsCommand.js +23 -23
- package/dist/apps/context-files-ui/index.html +11 -11
- package/dist/cli.js +61 -44
- package/dist/compute/cli.js +54 -54
- package/dist/core/routed-session.js +30 -1
- package/dist/core/runtime.js +6 -1
- package/dist/core/session-router.js +4 -2
- package/dist/cron/cli.js +15 -15
- package/dist/cron/store.js +49 -49
- package/dist/data/cli.js +23 -23
- package/dist/data/event-log.js +23 -23
- package/dist/data/message-store.js +27 -27
- package/dist/data/navigation-store.js +9 -9
- package/dist/data/observation-store.js +4 -4
- package/dist/data/payload-store.js +17 -17
- package/dist/data/schema.js +433 -433
- package/dist/data/session-store.js +4 -4
- package/dist/data/telemetry-queries.js +54 -54
- package/dist/data/telemetry.js +197 -197
- package/dist/debug/events.js +12 -12
- package/dist/debug/failures.js +6 -6
- package/dist/debug/index.js +227 -227
- package/dist/debug/messages.js +6 -6
- package/dist/debug/pty.js +124 -124
- package/dist/debug/session.js +29 -29
- package/dist/debug/tools.js +5 -5
- package/dist/debug/web-snapshot-browser-scripts.js +294 -294
- package/dist/debug/web-streaming-browser-library.js +925 -925
- package/dist/debug/web-streaming-browser-scripts.js +232 -232
- package/dist/debug/web-streaming-provider-telemetry.js +4 -4
- package/dist/debug/web.js +93 -93
- package/dist/gateway/cli.js +19 -19
- package/dist/gateway/server.js +4 -2
- package/dist/gateway/web.js +2 -2
- package/dist/loops/channel.js +8 -0
- package/dist/loops/cli.js +208 -0
- package/dist/loops/plugin.js +16 -0
- package/dist/loops/prompts.js +83 -0
- package/dist/loops/service.js +357 -0
- package/dist/loops/stopping.js +170 -0
- package/dist/loops/store.js +531 -0
- package/dist/loops/templates.js +232 -0
- package/dist/loops/tools.js +167 -0
- package/dist/loops/types.js +1 -0
- package/dist/mcp/config-command.js +53 -53
- package/dist/mcp/index.js +21 -21
- package/dist/mcp/registry.js +11 -11
- package/dist/pi-packages/cli.js +11 -11
- package/dist/plugins/builtin.js +8 -0
- package/dist/plugins/context-files-store.js +110 -110
- package/dist/plugins/context-files.js +4 -4
- package/dist/plugins/registry.js +23 -12
- package/dist/ralph/cli.js +18 -18
- package/dist/ralph/templates.js +140 -140
- package/dist/reliability/store.js +226 -226
- package/dist/sessions/pibo-data-store.js +16 -16
- package/dist/sessions/sqlite-store.js +53 -53
- package/dist/setup/cli.js +58 -58
- package/dist/tools/agent-browser-wrapper.js +80 -80
- package/dist/tools/browser-use-cdp.js +12 -12
- package/dist/tools/browser-use-wrapper.js +762 -762
- package/dist/tools/guides.js +589 -538
- package/dist/tools/index.js +122 -99
- package/dist/tools/registry.js +21 -3
- package/dist/tools/runtime/node-worker-source.js +205 -205
- package/dist/tools/runtime/python-worker-source.js +177 -177
- package/dist/vscode/cli.js +9 -9
- package/dist/web-annotations/cdp.js +900 -900
- package/dist/web-annotations/store.js +96 -96
- package/docs/README.md +23 -23
- package/docs/ops/install-developer-host.md +112 -112
- package/docs/ops/install-user-host.md +96 -96
- package/docs/ops/upgrade-user-to-developer-host.md +69 -69
- package/docs/ops/vscode-extension-release.md +160 -160
- package/package.json +98 -95
- package/skills/builtin/graphify/SKILL.md +52 -52
- package/skills/builtin/loop/SKILL.md +69 -0
- package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
- package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
- package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
- package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
- package/skills/builtin/prd/SKILL.md +143 -143
- package/skills/builtin/ralph-loop/SKILL.md +361 -359
- package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
- package/skills/builtin/skill-creator/LICENSE.txt +201 -201
- package/skills/builtin/skill-creator/SKILL.md +513 -513
- package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
- package/skills/builtin/skill-creator/agents/comparator.md +202 -202
- package/skills/builtin/skill-creator/agents/grader.md +223 -223
- package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
- package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
- package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
- package/skills/builtin/skill-creator/references/schemas.md +430 -430
- package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
- package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
- package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
- package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
- package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
- package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
- package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
- package/skills/builtin/skill-creator/scripts/utils.py +47 -47
- package/skills/builtin/web-annotations/SKILL.md +93 -93
- package/src/mcp/LICENSE.mcp-cli +21 -21
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.9.13.vsix +0 -0
|
@@ -33,9 +33,9 @@ import { ChatTimelineQueryService } from "./data/timeline-query-service.js";
|
|
|
33
33
|
import { ChatProjectService } from "./data/project-service.js";
|
|
34
34
|
import { PiboDataStore } from "../../data/pibo-store.js";
|
|
35
35
|
import { createDefaultPiboCronStore } from "../../cron/store.js";
|
|
36
|
-
import {
|
|
36
|
+
import { createDefaultPiboLoopStore } from "../../loops/store.js";
|
|
37
37
|
import { handleChatCronApiRequest } from "./cron-api.js";
|
|
38
|
-
import {
|
|
38
|
+
import { handleChatLoopApiRequest } from "./loop-api.js";
|
|
39
39
|
import { prepareWebAnnotationMessageAttachments } from "../../web-annotations/attachments.js";
|
|
40
40
|
import { createDefaultWebAnnotationStore } from "../../web-annotations/store.js";
|
|
41
41
|
import { CHAT_WEB_MOUNT_PATH, isChatAppPath, responseBuiltChatAsset, responseBuiltChatPublicFile, responseChatAppShell, isVscodeAppPath, responseBuiltVscodeAsset, responseVscodeAppShell } from "./static-assets.js";
|
|
@@ -3034,7 +3034,7 @@ export function createChatWebApp(options = {}) {
|
|
|
3034
3034
|
agentStore: createAgentStore(options.agentStorePath),
|
|
3035
3035
|
reliabilityStore: createReliabilityStore(options.reliabilityStorePath),
|
|
3036
3036
|
cronStore: createDefaultPiboCronStore({ path: options.cronStorePath }),
|
|
3037
|
-
|
|
3037
|
+
loopStore: createDefaultPiboLoopStore({ path: options.ralphStorePath }),
|
|
3038
3038
|
dataStore,
|
|
3039
3039
|
ingestService: new ChatDataIngestService(dataStore),
|
|
3040
3040
|
traceCache: new Map(),
|
|
@@ -3222,14 +3222,14 @@ export function createChatWebApp(options = {}) {
|
|
|
3222
3222
|
if (response)
|
|
3223
3223
|
return response;
|
|
3224
3224
|
}
|
|
3225
|
-
if (url.pathname.startsWith(`${CHAT_WEB_API_PREFIX}/ralph`)) {
|
|
3225
|
+
if (url.pathname.startsWith(`${CHAT_WEB_API_PREFIX}/loops`) || url.pathname.startsWith(`${CHAT_WEB_API_PREFIX}/loop`) || url.pathname.startsWith(`${CHAT_WEB_API_PREFIX}/ralph`)) {
|
|
3226
3226
|
const webSession = await requireSession(request, context);
|
|
3227
|
-
const response = await
|
|
3227
|
+
const response = await handleChatLoopApiRequest({
|
|
3228
3228
|
request,
|
|
3229
3229
|
context,
|
|
3230
3230
|
webSession,
|
|
3231
3231
|
roomService: state.roomService,
|
|
3232
|
-
|
|
3232
|
+
loopStore: state.loopStore,
|
|
3233
3233
|
defaultProfile,
|
|
3234
3234
|
});
|
|
3235
3235
|
if (response)
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { Annotation, END, START, StateGraph } from "@langchain/langgraph";
|
|
3
|
+
const WorkflowManualTriggerState = Annotation.Root({
|
|
4
|
+
execution: Annotation(),
|
|
5
|
+
});
|
|
2
6
|
export async function runWorkflowManualTextTrigger(options) {
|
|
3
7
|
const diagnostics = validateWorkflowManualTextTrigger(options.definition, options.triggerNodeId, options.input, options.resolveProfile);
|
|
4
8
|
if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
|
|
@@ -17,8 +21,6 @@ export async function runWorkflowManualTextTrigger(options) {
|
|
|
17
21
|
createdAt: now,
|
|
18
22
|
updatedAt: now,
|
|
19
23
|
};
|
|
20
|
-
const nodeAttempts = [];
|
|
21
|
-
const edgeTransfers = [];
|
|
22
24
|
const triggerAttempt = {
|
|
23
25
|
id: `wna_${randomUUID()}`,
|
|
24
26
|
workflowRunId: run.id,
|
|
@@ -30,52 +32,153 @@ export async function runWorkflowManualTextTrigger(options) {
|
|
|
30
32
|
startedAt: now,
|
|
31
33
|
completedAt: now,
|
|
32
34
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
35
|
+
const initialState = {
|
|
36
|
+
run,
|
|
37
|
+
nodeAttempts: [triggerAttempt],
|
|
38
|
+
edgeTransfers: [],
|
|
39
|
+
pending: [],
|
|
40
|
+
executedNodeIds: [],
|
|
41
|
+
lastOutput: options.input,
|
|
42
|
+
};
|
|
43
|
+
let execution;
|
|
44
|
+
try {
|
|
45
|
+
const graph = compileWorkflowManualTriggerGraph(options);
|
|
46
|
+
const result = await graph.invoke({ execution: initialState }, { recursionLimit: workflowGraphRecursionLimit(options.definition) });
|
|
47
|
+
execution = result.execution;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const failedAt = new Date().toISOString();
|
|
51
|
+
run.status = "failed";
|
|
52
|
+
run.failedAt = failedAt;
|
|
53
|
+
run.updatedAt = failedAt;
|
|
54
|
+
return {
|
|
55
|
+
ok: false,
|
|
56
|
+
run,
|
|
57
|
+
nodeAttempts: initialState.nodeAttempts,
|
|
58
|
+
edgeTransfers: initialState.edgeTransfers,
|
|
59
|
+
diagnostics: [{
|
|
60
|
+
code: "WorkflowRuntimeError.langGraphExecutionFailed",
|
|
61
|
+
message: error instanceof Error ? error.message : "LangGraph execution failed with a non-Error value.",
|
|
62
|
+
severity: "error",
|
|
63
|
+
path: "$",
|
|
64
|
+
}],
|
|
65
|
+
error: {
|
|
66
|
+
code: "WorkflowRuntimeError.langGraphExecutionFailed",
|
|
67
|
+
message: "Manual trigger run failed during LangGraph execution.",
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (execution.failure) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
run: execution.run,
|
|
75
|
+
nodeAttempts: execution.nodeAttempts,
|
|
76
|
+
edgeTransfers: execution.edgeTransfers,
|
|
77
|
+
diagnostics: execution.failure.diagnostics,
|
|
78
|
+
error: execution.failure.error,
|
|
79
|
+
};
|
|
73
80
|
}
|
|
74
81
|
const completedAt = new Date().toISOString();
|
|
75
|
-
run.output = lastOutput;
|
|
76
|
-
run.completedAt = completedAt;
|
|
77
|
-
run.updatedAt = completedAt;
|
|
78
|
-
return {
|
|
82
|
+
execution.run.output = execution.lastOutput;
|
|
83
|
+
execution.run.completedAt = completedAt;
|
|
84
|
+
execution.run.updatedAt = completedAt;
|
|
85
|
+
return {
|
|
86
|
+
ok: true,
|
|
87
|
+
run: execution.run,
|
|
88
|
+
nodeAttempts: execution.nodeAttempts,
|
|
89
|
+
edgeTransfers: execution.edgeTransfers,
|
|
90
|
+
diagnostics,
|
|
91
|
+
output: execution.lastOutput,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function compileWorkflowManualTriggerGraph(options) {
|
|
95
|
+
const nodes = objectValue(options.definition.nodes) ?? {};
|
|
96
|
+
const graphNodeNames = new Map();
|
|
97
|
+
for (const nodeId of Object.keys(nodes))
|
|
98
|
+
graphNodeNames.set(nodeId, workflowGraphNodeName(nodeId));
|
|
99
|
+
const triggerGraphNode = graphNodeNames.get(options.triggerNodeId) ?? workflowGraphNodeName(options.triggerNodeId);
|
|
100
|
+
const graph = new StateGraph(WorkflowManualTriggerState);
|
|
101
|
+
graph.addNode(triggerGraphNode, async (state) => {
|
|
102
|
+
const execution = state.execution;
|
|
103
|
+
const triggerAttempt = execution.nodeAttempts[0];
|
|
104
|
+
enqueueOutgoingEdges(options.definition, execution.run.id, triggerAttempt, execution.pending, execution.edgeTransfers);
|
|
105
|
+
execution.current = execution.pending.shift();
|
|
106
|
+
return { execution };
|
|
107
|
+
});
|
|
108
|
+
for (const [nodeId, rawNode] of Object.entries(nodes)) {
|
|
109
|
+
if (nodeId === options.triggerNodeId || objectValue(rawNode)?.kind !== "agent")
|
|
110
|
+
continue;
|
|
111
|
+
const graphNodeName = graphNodeNames.get(nodeId);
|
|
112
|
+
graph.addNode(graphNodeName, async (state) => {
|
|
113
|
+
const execution = state.execution;
|
|
114
|
+
const pending = execution.current;
|
|
115
|
+
if (!pending || pending.nodeId !== nodeId) {
|
|
116
|
+
markWorkflowGraphFailure(execution, {
|
|
117
|
+
diagnostics: [{
|
|
118
|
+
code: "WorkflowRuntimeError.langGraphStateMismatch",
|
|
119
|
+
message: `LangGraph scheduled workflow node '${nodeId}' without its pending input.`,
|
|
120
|
+
severity: "error",
|
|
121
|
+
nodeId,
|
|
122
|
+
path: `$.nodes.${nodeId}`,
|
|
123
|
+
}],
|
|
124
|
+
error: { code: "WorkflowRuntimeError.langGraphStateMismatch", message: "Manual trigger run reached an invalid LangGraph state." },
|
|
125
|
+
});
|
|
126
|
+
return { execution };
|
|
127
|
+
}
|
|
128
|
+
if (execution.executedNodeIds.includes(nodeId)) {
|
|
129
|
+
markWorkflowGraphFailure(execution, {
|
|
130
|
+
diagnostics: [{
|
|
131
|
+
code: "WorkflowRuntimeError.joinUnsupported",
|
|
132
|
+
message: `Workflow node '${nodeId}' received more than one input, but manual trigger V1 does not support joins yet.`,
|
|
133
|
+
severity: "error",
|
|
134
|
+
nodeId,
|
|
135
|
+
edgeId: pending.viaEdgeId,
|
|
136
|
+
path: `$.edges.${pending.viaEdgeId}`,
|
|
137
|
+
}],
|
|
138
|
+
error: { code: "WorkflowRuntimeError.joinUnsupported", message: "Manual trigger run failed because a join node was reached." },
|
|
139
|
+
});
|
|
140
|
+
return { execution };
|
|
141
|
+
}
|
|
142
|
+
execution.executedNodeIds.push(nodeId);
|
|
143
|
+
const result = await runAgentNode({ ...options, runId: execution.run.id, nodeId, input: pending.input });
|
|
144
|
+
execution.nodeAttempts.push(result.attempt);
|
|
145
|
+
if (!result.ok) {
|
|
146
|
+
markWorkflowGraphFailure(execution, { diagnostics: result.diagnostics, error: result.attempt.error });
|
|
147
|
+
return { execution };
|
|
148
|
+
}
|
|
149
|
+
execution.lastOutput = result.output;
|
|
150
|
+
enqueueOutgoingEdges(options.definition, execution.run.id, result.attempt, execution.pending, execution.edgeTransfers);
|
|
151
|
+
execution.current = execution.pending.shift();
|
|
152
|
+
return { execution };
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const route = (state) => {
|
|
156
|
+
if (state.execution.failure || !state.execution.current)
|
|
157
|
+
return END;
|
|
158
|
+
return graphNodeNames.get(state.execution.current.nodeId) ?? END;
|
|
159
|
+
};
|
|
160
|
+
graph.addEdge(START, triggerGraphNode);
|
|
161
|
+
graph.addConditionalEdges(triggerGraphNode, route);
|
|
162
|
+
for (const [nodeId, rawNode] of Object.entries(nodes)) {
|
|
163
|
+
if (nodeId === options.triggerNodeId || objectValue(rawNode)?.kind !== "agent")
|
|
164
|
+
continue;
|
|
165
|
+
graph.addConditionalEdges(graphNodeNames.get(nodeId), route);
|
|
166
|
+
}
|
|
167
|
+
return graph.compile();
|
|
168
|
+
}
|
|
169
|
+
function workflowGraphNodeName(nodeId) {
|
|
170
|
+
return `pibo_${Buffer.from(nodeId).toString("base64url")}`;
|
|
171
|
+
}
|
|
172
|
+
function workflowGraphRecursionLimit(definition) {
|
|
173
|
+
return Math.max(25, Object.keys(objectValue(definition.nodes) ?? {}).length * 2 + 2);
|
|
174
|
+
}
|
|
175
|
+
function markWorkflowGraphFailure(execution, failure) {
|
|
176
|
+
const failedAt = new Date().toISOString();
|
|
177
|
+
execution.run.status = "failed";
|
|
178
|
+
execution.run.failedAt = failedAt;
|
|
179
|
+
execution.run.updatedAt = failedAt;
|
|
180
|
+
execution.failure = failure;
|
|
181
|
+
execution.current = undefined;
|
|
79
182
|
}
|
|
80
183
|
export function validateWorkflowManualTextTrigger(definition, triggerNodeId, input, resolveProfile) {
|
|
81
184
|
const diagnostics = [];
|