@pasko70/pibo 1.4.1 → 1.4.3
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-store.js +82 -82
- package/dist/apps/chat/data/project-service.js +166 -166
- package/dist/apps/chat/data/read-state-service.js +18 -18
- package/dist/apps/chat/data/timeline-query-service.js +8 -8
- package/dist/apps/chat/model-catalog.js +5 -1
- package/dist/apps/chat/static-assets.js +853 -853
- package/dist/apps/chat/workflow-persistence.js +255 -255
- package/dist/apps/chat-ui/assets/{dist-7YaJd19a.js → dist-B2BEpL7n.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CiYeO8nN.js → dist-BAGS_xkV.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BIvPnn_C.js → dist-BAXNalar.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CjSI6y5z.js → dist-BwUvs6Ph.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-Ubstha8t.js → dist-C0zsJ8II.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-KXCMNKIL.js → dist-C3PnEkhb.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CVQU42Fn.js → dist-CYPL-B2Z.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-BbNE72h8.js → dist-CiDSXgtg.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D7TCkoFT.js → dist-DnACFKyO.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-ChSZNqKE.js → dist-ZB1-ui2y.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-8Noo5eCN.js → dist-vKlxFkTa.js} +1 -1
- package/dist/apps/chat-ui/assets/{index-CmxtUVG1.js → index-0x7tuTNX.js} +3 -3
- package/dist/apps/chat-ui/assets/{index-C25VYnyb.css → index-B-qaya1G.css} +1 -1
- package/dist/apps/chat-ui/index.html +18 -18
- package/dist/apps/chat-ui/manifest.webmanifest +25 -25
- package/dist/apps/chat-ui/sw.js +41 -41
- 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/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.4.2.vsix +0 -0
- package/dist/apps/vscode-artifacts/{pibo-vscode-ext-1.4.1.vsix → pibo-vscode-ext-1.4.3.vsix} +0 -0
- package/dist/bin/pibo.js +0 -0
- package/dist/bin/rg.js +0 -0
- package/dist/cli.js +35 -35
- package/dist/compute/cli.js +54 -54
- package/dist/core/runtime.js +2 -0
- package/dist/core/session-router.js +1 -0
- 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 +20 -20
- 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 +429 -429
- package/dist/data/session-store.js +4 -4
- package/dist/data/telemetry-queries.js +54 -54
- package/dist/data/telemetry.js +156 -156
- package/dist/debug/events.js +12 -12
- package/dist/debug/failures.js +6 -6
- package/dist/debug/index.js +207 -207
- 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/mcp/config-command.js +53 -53
- package/dist/mcp/errors.js +1 -1
- package/dist/mcp/index.js +21 -21
- package/dist/mcp/output.js +47 -7
- package/dist/mcp/registry.js +11 -11
- package/dist/pi-packages/cli.js +11 -11
- package/dist/plugins/context-files-store.js +110 -110
- package/dist/plugins/context-files.js +4 -4
- package/dist/providers/glm.js +59 -0
- 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 +455 -455
- package/dist/tools/index.js +99 -99
- 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 +93 -93
- 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 +359 -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/pibo-vscode-1.3.0.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.3.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.4.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.5.vsix +0 -0
- package/dist/core/shared-app.js +0 -17
- package/dist/data/final-app-space-cutover-migration.js +0 -728
- package/dist/data/shared-app-migration.js +0 -757
- package/dist/session-ui/ownerViewModel.js +0 -27
- package/dist/shared-app.js +0 -4
|
@@ -26,7 +26,7 @@ export class ChatProjectService {
|
|
|
26
26
|
const folder = resolve(input.projectFolder ?? piboHomePath("projects/workspace"));
|
|
27
27
|
mkdirSync(folder, { recursive: true });
|
|
28
28
|
const now = new Date().toISOString();
|
|
29
|
-
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
29
|
+
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
30
30
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, "Shared Project", null, folder, "configured", JSON.stringify({ default: true }), now, now);
|
|
31
31
|
return this.requireProject(id);
|
|
32
32
|
}
|
|
@@ -53,7 +53,7 @@ export class ChatProjectService {
|
|
|
53
53
|
mkdirSync(projectFolder, { recursive: true });
|
|
54
54
|
const now = new Date().toISOString();
|
|
55
55
|
const id = `prj_${randomUUID()}`;
|
|
56
|
-
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
56
|
+
this.db.prepare(`INSERT INTO projects (id, name, description, project_folder, configuration_status, metadata_json, created_at, updated_at)
|
|
57
57
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, name, normalizeOptionalString(input.description) ?? null, projectFolder, "configured", "{}", now, now);
|
|
58
58
|
return this.requireProject(id);
|
|
59
59
|
}
|
|
@@ -111,8 +111,8 @@ export class ChatProjectService {
|
|
|
111
111
|
configuration,
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
|
-
this.db.prepare(`INSERT INTO project_sessions (project_id, pibo_session_id, kind, workflow_id, workflow_version, workflow_run_id, parent_main_session_id, title, state, configuration_json, archived, created_at, updated_at)
|
|
115
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?)
|
|
114
|
+
this.db.prepare(`INSERT INTO project_sessions (project_id, pibo_session_id, kind, workflow_id, workflow_version, workflow_run_id, parent_main_session_id, title, state, configuration_json, archived, created_at, updated_at)
|
|
115
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?)
|
|
116
116
|
ON CONFLICT(pibo_session_id) DO UPDATE SET project_id = excluded.project_id, kind = excluded.kind, workflow_id = excluded.workflow_id, workflow_version = excluded.workflow_version, workflow_run_id = excluded.workflow_run_id, parent_main_session_id = excluded.parent_main_session_id, title = excluded.title, state = excluded.state, configuration_json = excluded.configuration_json, updated_at = excluded.updated_at`)
|
|
117
117
|
.run(input.projectId, input.piboSessionId, kind, workflowId, workflowVersion ?? null, workflowRunId ?? null, parentMainSessionId ?? null, title ?? null, state, serializeProjectSessionConfiguration(configuration), now, now);
|
|
118
118
|
if (kind === "main") {
|
|
@@ -144,7 +144,7 @@ export class ChatProjectService {
|
|
|
144
144
|
const existingForSession = this.getWorkflowSessionSnapshotForSession(snapshot.piboSessionId);
|
|
145
145
|
if (existingForSession)
|
|
146
146
|
throw new Error(`Project workflow session '${snapshot.piboSessionId}' already has a configuration snapshot`);
|
|
147
|
-
this.db.prepare(`INSERT INTO project_workflow_session_snapshots (id, schema_version, project_id, pibo_session_id, workflow_id, workflow_version, base_definition_hash, effective_definition_hash, snapshot_json, created_at)
|
|
147
|
+
this.db.prepare(`INSERT INTO project_workflow_session_snapshots (id, schema_version, project_id, pibo_session_id, workflow_id, workflow_version, base_definition_hash, effective_definition_hash, snapshot_json, created_at)
|
|
148
148
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(snapshot.id, snapshot.schemaVersion, snapshot.projectId, snapshot.piboSessionId, snapshot.workflow.id, snapshot.workflow.version, snapshot.workflow.baseDefinitionHash, snapshot.workflow.effectiveDefinitionHash, JSON.stringify(snapshot), snapshot.createdAt);
|
|
149
149
|
return this.getWorkflowSessionSnapshot(snapshot.id);
|
|
150
150
|
}
|
|
@@ -181,36 +181,36 @@ export class ChatProjectService {
|
|
|
181
181
|
return rows.map(projectWorkflowRunFromRow);
|
|
182
182
|
}
|
|
183
183
|
saveProjectWorkflowWaitToken(token) {
|
|
184
|
-
this.db.prepare(`INSERT INTO project_workflow_wait_tokens (
|
|
185
|
-
id,
|
|
186
|
-
project_id,
|
|
187
|
-
pibo_session_id,
|
|
188
|
-
workflow_run_id,
|
|
189
|
-
node_attempt_id,
|
|
190
|
-
human_node_id,
|
|
191
|
-
actions_json,
|
|
192
|
-
prompt,
|
|
193
|
-
schema_json,
|
|
194
|
-
status,
|
|
195
|
-
resume_payload_json,
|
|
196
|
-
resume_payload_present,
|
|
197
|
-
expires_at,
|
|
198
|
-
created_at,
|
|
199
|
-
resolved_at
|
|
200
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
201
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
202
|
-
project_id = excluded.project_id,
|
|
203
|
-
pibo_session_id = excluded.pibo_session_id,
|
|
204
|
-
workflow_run_id = excluded.workflow_run_id,
|
|
205
|
-
node_attempt_id = excluded.node_attempt_id,
|
|
206
|
-
human_node_id = excluded.human_node_id,
|
|
207
|
-
actions_json = excluded.actions_json,
|
|
208
|
-
prompt = excluded.prompt,
|
|
209
|
-
schema_json = excluded.schema_json,
|
|
210
|
-
status = excluded.status,
|
|
211
|
-
resume_payload_json = excluded.resume_payload_json,
|
|
212
|
-
resume_payload_present = excluded.resume_payload_present,
|
|
213
|
-
expires_at = excluded.expires_at,
|
|
184
|
+
this.db.prepare(`INSERT INTO project_workflow_wait_tokens (
|
|
185
|
+
id,
|
|
186
|
+
project_id,
|
|
187
|
+
pibo_session_id,
|
|
188
|
+
workflow_run_id,
|
|
189
|
+
node_attempt_id,
|
|
190
|
+
human_node_id,
|
|
191
|
+
actions_json,
|
|
192
|
+
prompt,
|
|
193
|
+
schema_json,
|
|
194
|
+
status,
|
|
195
|
+
resume_payload_json,
|
|
196
|
+
resume_payload_present,
|
|
197
|
+
expires_at,
|
|
198
|
+
created_at,
|
|
199
|
+
resolved_at
|
|
200
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
201
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
202
|
+
project_id = excluded.project_id,
|
|
203
|
+
pibo_session_id = excluded.pibo_session_id,
|
|
204
|
+
workflow_run_id = excluded.workflow_run_id,
|
|
205
|
+
node_attempt_id = excluded.node_attempt_id,
|
|
206
|
+
human_node_id = excluded.human_node_id,
|
|
207
|
+
actions_json = excluded.actions_json,
|
|
208
|
+
prompt = excluded.prompt,
|
|
209
|
+
schema_json = excluded.schema_json,
|
|
210
|
+
status = excluded.status,
|
|
211
|
+
resume_payload_json = excluded.resume_payload_json,
|
|
212
|
+
resume_payload_present = excluded.resume_payload_present,
|
|
213
|
+
expires_at = excluded.expires_at,
|
|
214
214
|
resolved_at = excluded.resolved_at`).run(token.id, token.projectId, token.piboSessionId, token.workflowRunId, token.nodeAttemptId ?? null, token.humanNodeId ?? null, JSON.stringify(token.actions), token.prompt, token.schema ? JSON.stringify(token.schema) : null, token.status, token.resumePayload === undefined ? null : JSON.stringify(token.resumePayload), token.resumePayload === undefined ? 0 : 1, token.expiresAt ?? null, token.createdAt, token.resolvedAt ?? null);
|
|
215
215
|
if (token.status === "pending") {
|
|
216
216
|
const now = new Date().toISOString();
|
|
@@ -309,18 +309,18 @@ export class ChatProjectService {
|
|
|
309
309
|
...(input.payload !== undefined ? { payload: input.payload } : {}),
|
|
310
310
|
createdAt: actedAt,
|
|
311
311
|
};
|
|
312
|
-
this.db.prepare(`INSERT INTO project_workflow_human_actions (
|
|
313
|
-
id,
|
|
314
|
-
project_id,
|
|
315
|
-
pibo_session_id,
|
|
316
|
-
workflow_run_id,
|
|
317
|
-
wait_token_id,
|
|
318
|
-
action_id,
|
|
319
|
-
kind,
|
|
320
|
-
actor_json,
|
|
321
|
-
payload_json,
|
|
322
|
-
payload_present,
|
|
323
|
-
created_at
|
|
312
|
+
this.db.prepare(`INSERT INTO project_workflow_human_actions (
|
|
313
|
+
id,
|
|
314
|
+
project_id,
|
|
315
|
+
pibo_session_id,
|
|
316
|
+
workflow_run_id,
|
|
317
|
+
wait_token_id,
|
|
318
|
+
action_id,
|
|
319
|
+
kind,
|
|
320
|
+
actor_json,
|
|
321
|
+
payload_json,
|
|
322
|
+
payload_present,
|
|
323
|
+
created_at
|
|
324
324
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
325
325
|
.run(action.id, action.projectId, action.piboSessionId, action.workflowRunId, action.waitTokenId, action.actionId ?? null, action.kind, action.actor ? JSON.stringify(action.actor) : null, action.payload === undefined ? null : JSON.stringify(action.payload), action.payload === undefined ? 0 : 1, action.createdAt);
|
|
326
326
|
this.db.prepare("UPDATE project_workflow_wait_tokens SET status = ?, resume_payload_json = ?, resume_payload_present = ?, resolved_at = ? WHERE id = ?")
|
|
@@ -429,128 +429,128 @@ export class ChatProjectService {
|
|
|
429
429
|
return run;
|
|
430
430
|
}
|
|
431
431
|
insertProjectWorkflowRun(run) {
|
|
432
|
-
this.db.prepare(`INSERT INTO project_workflow_runs (
|
|
433
|
-
id,
|
|
434
|
-
project_id,
|
|
435
|
-
pibo_session_id,
|
|
436
|
-
workflow_id,
|
|
437
|
-
workflow_version,
|
|
438
|
-
snapshot_id,
|
|
439
|
-
effective_definition_hash,
|
|
440
|
-
status,
|
|
441
|
-
current_json,
|
|
442
|
-
input_json,
|
|
443
|
-
validation_json,
|
|
444
|
-
created_at,
|
|
445
|
-
updated_at,
|
|
446
|
-
completed_at,
|
|
447
|
-
failed_at,
|
|
448
|
-
cancelled_at
|
|
432
|
+
this.db.prepare(`INSERT INTO project_workflow_runs (
|
|
433
|
+
id,
|
|
434
|
+
project_id,
|
|
435
|
+
pibo_session_id,
|
|
436
|
+
workflow_id,
|
|
437
|
+
workflow_version,
|
|
438
|
+
snapshot_id,
|
|
439
|
+
effective_definition_hash,
|
|
440
|
+
status,
|
|
441
|
+
current_json,
|
|
442
|
+
input_json,
|
|
443
|
+
validation_json,
|
|
444
|
+
created_at,
|
|
445
|
+
updated_at,
|
|
446
|
+
completed_at,
|
|
447
|
+
failed_at,
|
|
448
|
+
cancelled_at
|
|
449
449
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(run.id, run.projectId, run.piboSessionId, run.workflowId, run.workflowVersion, run.snapshotId, run.effectiveDefinitionHash, run.status, JSON.stringify(run.current), JSON.stringify(run.inputValues), run.validation ? JSON.stringify(run.validation) : null, run.createdAt, run.updatedAt, run.completedAt ?? null, run.failedAt ?? null, run.cancelledAt ?? null);
|
|
450
450
|
}
|
|
451
451
|
applySchema() {
|
|
452
|
-
this.db.exec(`
|
|
453
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
454
|
-
id TEXT PRIMARY KEY,
|
|
455
|
-
name TEXT NOT NULL,
|
|
456
|
-
description TEXT,
|
|
457
|
-
project_folder TEXT NOT NULL,
|
|
458
|
-
configuration_status TEXT NOT NULL DEFAULT 'configured',
|
|
459
|
-
current_main_session_id TEXT,
|
|
460
|
-
archived_at TEXT,
|
|
461
|
-
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
462
|
-
created_at TEXT NOT NULL,
|
|
463
|
-
updated_at TEXT NOT NULL
|
|
464
|
-
);
|
|
465
|
-
CREATE UNIQUE INDEX IF NOT EXISTS projects_name_unique ON projects (lower(name));
|
|
466
|
-
CREATE UNIQUE INDEX IF NOT EXISTS projects_folder_unique ON projects (project_folder);
|
|
467
|
-
CREATE TABLE IF NOT EXISTS project_sessions (
|
|
468
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
469
|
-
pibo_session_id TEXT PRIMARY KEY,
|
|
470
|
-
kind TEXT NOT NULL DEFAULT 'main',
|
|
471
|
-
workflow_id TEXT NOT NULL DEFAULT 'simple-chat',
|
|
472
|
-
workflow_version TEXT,
|
|
473
|
-
workflow_run_id TEXT,
|
|
474
|
-
parent_main_session_id TEXT,
|
|
475
|
-
title TEXT,
|
|
476
|
-
state TEXT,
|
|
477
|
-
configuration_json TEXT,
|
|
478
|
-
retry_count INTEGER,
|
|
479
|
-
max_retries INTEGER,
|
|
480
|
-
archived INTEGER NOT NULL DEFAULT 0,
|
|
481
|
-
created_at TEXT NOT NULL,
|
|
482
|
-
updated_at TEXT NOT NULL
|
|
483
|
-
);
|
|
484
|
-
CREATE INDEX IF NOT EXISTS project_sessions_project_id_idx ON project_sessions(project_id, archived, created_at);
|
|
485
|
-
CREATE TABLE IF NOT EXISTS project_workflow_session_snapshots (
|
|
486
|
-
id TEXT PRIMARY KEY,
|
|
487
|
-
schema_version INTEGER NOT NULL,
|
|
488
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
489
|
-
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
490
|
-
workflow_id TEXT NOT NULL,
|
|
491
|
-
workflow_version TEXT NOT NULL,
|
|
492
|
-
base_definition_hash TEXT NOT NULL,
|
|
493
|
-
effective_definition_hash TEXT NOT NULL,
|
|
494
|
-
snapshot_json TEXT NOT NULL,
|
|
495
|
-
created_at TEXT NOT NULL,
|
|
496
|
-
UNIQUE(pibo_session_id)
|
|
497
|
-
);
|
|
498
|
-
CREATE INDEX IF NOT EXISTS project_workflow_session_snapshots_project_idx ON project_workflow_session_snapshots(project_id, created_at);
|
|
499
|
-
CREATE TABLE IF NOT EXISTS project_workflow_runs (
|
|
500
|
-
id TEXT PRIMARY KEY,
|
|
501
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
502
|
-
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
503
|
-
workflow_id TEXT NOT NULL,
|
|
504
|
-
workflow_version TEXT NOT NULL,
|
|
505
|
-
snapshot_id TEXT NOT NULL REFERENCES project_workflow_session_snapshots(id) ON DELETE RESTRICT,
|
|
506
|
-
effective_definition_hash TEXT NOT NULL,
|
|
507
|
-
status TEXT NOT NULL,
|
|
508
|
-
current_json TEXT NOT NULL,
|
|
509
|
-
input_json TEXT NOT NULL,
|
|
510
|
-
validation_json TEXT,
|
|
511
|
-
created_at TEXT NOT NULL,
|
|
512
|
-
updated_at TEXT NOT NULL,
|
|
513
|
-
completed_at TEXT,
|
|
514
|
-
failed_at TEXT,
|
|
515
|
-
cancelled_at TEXT,
|
|
516
|
-
UNIQUE(pibo_session_id)
|
|
517
|
-
);
|
|
518
|
-
CREATE INDEX IF NOT EXISTS project_workflow_runs_project_idx ON project_workflow_runs(project_id, created_at);
|
|
519
|
-
CREATE INDEX IF NOT EXISTS project_workflow_runs_session_idx ON project_workflow_runs(pibo_session_id);
|
|
520
|
-
CREATE TABLE IF NOT EXISTS project_workflow_wait_tokens (
|
|
521
|
-
id TEXT PRIMARY KEY,
|
|
522
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
523
|
-
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
524
|
-
workflow_run_id TEXT NOT NULL REFERENCES project_workflow_runs(id) ON DELETE CASCADE,
|
|
525
|
-
node_attempt_id TEXT,
|
|
526
|
-
human_node_id TEXT,
|
|
527
|
-
actions_json TEXT NOT NULL,
|
|
528
|
-
prompt TEXT NOT NULL,
|
|
529
|
-
schema_json TEXT,
|
|
530
|
-
status TEXT NOT NULL,
|
|
531
|
-
resume_payload_json TEXT,
|
|
532
|
-
resume_payload_present INTEGER NOT NULL DEFAULT 0,
|
|
533
|
-
expires_at TEXT,
|
|
534
|
-
created_at TEXT NOT NULL,
|
|
535
|
-
resolved_at TEXT
|
|
536
|
-
);
|
|
537
|
-
CREATE INDEX IF NOT EXISTS project_workflow_wait_tokens_run_idx ON project_workflow_wait_tokens(workflow_run_id, status, created_at);
|
|
538
|
-
CREATE INDEX IF NOT EXISTS project_workflow_wait_tokens_session_idx ON project_workflow_wait_tokens(project_id, pibo_session_id, status, created_at);
|
|
539
|
-
CREATE TABLE IF NOT EXISTS project_workflow_human_actions (
|
|
540
|
-
id TEXT PRIMARY KEY,
|
|
541
|
-
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
542
|
-
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
543
|
-
workflow_run_id TEXT NOT NULL REFERENCES project_workflow_runs(id) ON DELETE CASCADE,
|
|
544
|
-
wait_token_id TEXT NOT NULL REFERENCES project_workflow_wait_tokens(id) ON DELETE CASCADE,
|
|
545
|
-
action_id TEXT,
|
|
546
|
-
kind TEXT NOT NULL,
|
|
547
|
-
actor_json TEXT,
|
|
548
|
-
payload_json TEXT,
|
|
549
|
-
payload_present INTEGER NOT NULL DEFAULT 0,
|
|
550
|
-
created_at TEXT NOT NULL
|
|
551
|
-
);
|
|
552
|
-
CREATE INDEX IF NOT EXISTS project_workflow_human_actions_run_idx ON project_workflow_human_actions(workflow_run_id, created_at);
|
|
553
|
-
CREATE INDEX IF NOT EXISTS project_workflow_human_actions_wait_token_idx ON project_workflow_human_actions(wait_token_id, created_at);
|
|
452
|
+
this.db.exec(`
|
|
453
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
454
|
+
id TEXT PRIMARY KEY,
|
|
455
|
+
name TEXT NOT NULL,
|
|
456
|
+
description TEXT,
|
|
457
|
+
project_folder TEXT NOT NULL,
|
|
458
|
+
configuration_status TEXT NOT NULL DEFAULT 'configured',
|
|
459
|
+
current_main_session_id TEXT,
|
|
460
|
+
archived_at TEXT,
|
|
461
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
462
|
+
created_at TEXT NOT NULL,
|
|
463
|
+
updated_at TEXT NOT NULL
|
|
464
|
+
);
|
|
465
|
+
CREATE UNIQUE INDEX IF NOT EXISTS projects_name_unique ON projects (lower(name));
|
|
466
|
+
CREATE UNIQUE INDEX IF NOT EXISTS projects_folder_unique ON projects (project_folder);
|
|
467
|
+
CREATE TABLE IF NOT EXISTS project_sessions (
|
|
468
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
469
|
+
pibo_session_id TEXT PRIMARY KEY,
|
|
470
|
+
kind TEXT NOT NULL DEFAULT 'main',
|
|
471
|
+
workflow_id TEXT NOT NULL DEFAULT 'simple-chat',
|
|
472
|
+
workflow_version TEXT,
|
|
473
|
+
workflow_run_id TEXT,
|
|
474
|
+
parent_main_session_id TEXT,
|
|
475
|
+
title TEXT,
|
|
476
|
+
state TEXT,
|
|
477
|
+
configuration_json TEXT,
|
|
478
|
+
retry_count INTEGER,
|
|
479
|
+
max_retries INTEGER,
|
|
480
|
+
archived INTEGER NOT NULL DEFAULT 0,
|
|
481
|
+
created_at TEXT NOT NULL,
|
|
482
|
+
updated_at TEXT NOT NULL
|
|
483
|
+
);
|
|
484
|
+
CREATE INDEX IF NOT EXISTS project_sessions_project_id_idx ON project_sessions(project_id, archived, created_at);
|
|
485
|
+
CREATE TABLE IF NOT EXISTS project_workflow_session_snapshots (
|
|
486
|
+
id TEXT PRIMARY KEY,
|
|
487
|
+
schema_version INTEGER NOT NULL,
|
|
488
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
489
|
+
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
490
|
+
workflow_id TEXT NOT NULL,
|
|
491
|
+
workflow_version TEXT NOT NULL,
|
|
492
|
+
base_definition_hash TEXT NOT NULL,
|
|
493
|
+
effective_definition_hash TEXT NOT NULL,
|
|
494
|
+
snapshot_json TEXT NOT NULL,
|
|
495
|
+
created_at TEXT NOT NULL,
|
|
496
|
+
UNIQUE(pibo_session_id)
|
|
497
|
+
);
|
|
498
|
+
CREATE INDEX IF NOT EXISTS project_workflow_session_snapshots_project_idx ON project_workflow_session_snapshots(project_id, created_at);
|
|
499
|
+
CREATE TABLE IF NOT EXISTS project_workflow_runs (
|
|
500
|
+
id TEXT PRIMARY KEY,
|
|
501
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
502
|
+
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
503
|
+
workflow_id TEXT NOT NULL,
|
|
504
|
+
workflow_version TEXT NOT NULL,
|
|
505
|
+
snapshot_id TEXT NOT NULL REFERENCES project_workflow_session_snapshots(id) ON DELETE RESTRICT,
|
|
506
|
+
effective_definition_hash TEXT NOT NULL,
|
|
507
|
+
status TEXT NOT NULL,
|
|
508
|
+
current_json TEXT NOT NULL,
|
|
509
|
+
input_json TEXT NOT NULL,
|
|
510
|
+
validation_json TEXT,
|
|
511
|
+
created_at TEXT NOT NULL,
|
|
512
|
+
updated_at TEXT NOT NULL,
|
|
513
|
+
completed_at TEXT,
|
|
514
|
+
failed_at TEXT,
|
|
515
|
+
cancelled_at TEXT,
|
|
516
|
+
UNIQUE(pibo_session_id)
|
|
517
|
+
);
|
|
518
|
+
CREATE INDEX IF NOT EXISTS project_workflow_runs_project_idx ON project_workflow_runs(project_id, created_at);
|
|
519
|
+
CREATE INDEX IF NOT EXISTS project_workflow_runs_session_idx ON project_workflow_runs(pibo_session_id);
|
|
520
|
+
CREATE TABLE IF NOT EXISTS project_workflow_wait_tokens (
|
|
521
|
+
id TEXT PRIMARY KEY,
|
|
522
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
523
|
+
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
524
|
+
workflow_run_id TEXT NOT NULL REFERENCES project_workflow_runs(id) ON DELETE CASCADE,
|
|
525
|
+
node_attempt_id TEXT,
|
|
526
|
+
human_node_id TEXT,
|
|
527
|
+
actions_json TEXT NOT NULL,
|
|
528
|
+
prompt TEXT NOT NULL,
|
|
529
|
+
schema_json TEXT,
|
|
530
|
+
status TEXT NOT NULL,
|
|
531
|
+
resume_payload_json TEXT,
|
|
532
|
+
resume_payload_present INTEGER NOT NULL DEFAULT 0,
|
|
533
|
+
expires_at TEXT,
|
|
534
|
+
created_at TEXT NOT NULL,
|
|
535
|
+
resolved_at TEXT
|
|
536
|
+
);
|
|
537
|
+
CREATE INDEX IF NOT EXISTS project_workflow_wait_tokens_run_idx ON project_workflow_wait_tokens(workflow_run_id, status, created_at);
|
|
538
|
+
CREATE INDEX IF NOT EXISTS project_workflow_wait_tokens_session_idx ON project_workflow_wait_tokens(project_id, pibo_session_id, status, created_at);
|
|
539
|
+
CREATE TABLE IF NOT EXISTS project_workflow_human_actions (
|
|
540
|
+
id TEXT PRIMARY KEY,
|
|
541
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
542
|
+
pibo_session_id TEXT NOT NULL REFERENCES project_sessions(pibo_session_id) ON DELETE CASCADE,
|
|
543
|
+
workflow_run_id TEXT NOT NULL REFERENCES project_workflow_runs(id) ON DELETE CASCADE,
|
|
544
|
+
wait_token_id TEXT NOT NULL REFERENCES project_workflow_wait_tokens(id) ON DELETE CASCADE,
|
|
545
|
+
action_id TEXT,
|
|
546
|
+
kind TEXT NOT NULL,
|
|
547
|
+
actor_json TEXT,
|
|
548
|
+
payload_json TEXT,
|
|
549
|
+
payload_present INTEGER NOT NULL DEFAULT 0,
|
|
550
|
+
created_at TEXT NOT NULL
|
|
551
|
+
);
|
|
552
|
+
CREATE INDEX IF NOT EXISTS project_workflow_human_actions_run_idx ON project_workflow_human_actions(workflow_run_id, created_at);
|
|
553
|
+
CREATE INDEX IF NOT EXISTS project_workflow_human_actions_wait_token_idx ON project_workflow_human_actions(wait_token_id, created_at);
|
|
554
554
|
`);
|
|
555
555
|
this.ensureProjectSessionWorkflowVersionColumn();
|
|
556
556
|
this.ensureProjectSessionConfigurationColumn();
|
|
@@ -5,13 +5,13 @@ export class ChatReadStateService {
|
|
|
5
5
|
}
|
|
6
6
|
markSessionRead(piboSessionId, lastReadStreamId) {
|
|
7
7
|
const now = new Date().toISOString();
|
|
8
|
-
this.store.db.prepare(`
|
|
9
|
-
INSERT INTO app_session_read_state (session_id, last_read_stream_id, last_read_at, updated_at)
|
|
10
|
-
VALUES (?, ?, ?, ?)
|
|
11
|
-
ON CONFLICT(session_id) DO UPDATE SET
|
|
12
|
-
last_read_stream_id = MAX(app_session_read_state.last_read_stream_id, excluded.last_read_stream_id),
|
|
13
|
-
last_read_at = excluded.last_read_at,
|
|
14
|
-
updated_at = excluded.updated_at
|
|
8
|
+
this.store.db.prepare(`
|
|
9
|
+
INSERT INTO app_session_read_state (session_id, last_read_stream_id, last_read_at, updated_at)
|
|
10
|
+
VALUES (?, ?, ?, ?)
|
|
11
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
12
|
+
last_read_stream_id = MAX(app_session_read_state.last_read_stream_id, excluded.last_read_stream_id),
|
|
13
|
+
last_read_at = excluded.last_read_at,
|
|
14
|
+
updated_at = excluded.updated_at
|
|
15
15
|
`).run(piboSessionId, lastReadStreamId, now, now);
|
|
16
16
|
}
|
|
17
17
|
countUnreadMessagesBySession(input) {
|
|
@@ -21,17 +21,17 @@ export class ChatReadStateService {
|
|
|
21
21
|
for (let offset = 0; offset < input.piboSessionIds.length; offset += 400) {
|
|
22
22
|
const ids = [...new Set(input.piboSessionIds)].slice(offset, offset + 400);
|
|
23
23
|
const placeholders = ids.map(() => "?").join(", ");
|
|
24
|
-
const rows = this.store.db.prepare(`
|
|
25
|
-
SELECT e.session_id, COUNT(*) AS count
|
|
26
|
-
FROM event_log e
|
|
27
|
-
LEFT JOIN app_session_read_state reads ON reads.session_id = e.session_id
|
|
28
|
-
WHERE e.session_id IN (${placeholders})
|
|
29
|
-
AND e.stream_id > COALESCE(reads.last_read_stream_id, 0)
|
|
30
|
-
AND (
|
|
31
|
-
(e.retention_class = 'chat_message' AND e.type IN ('user.message.accepted', 'assistant_message'))
|
|
32
|
-
OR e.type = 'session_error'
|
|
33
|
-
)
|
|
34
|
-
GROUP BY e.session_id
|
|
24
|
+
const rows = this.store.db.prepare(`
|
|
25
|
+
SELECT e.session_id, COUNT(*) AS count
|
|
26
|
+
FROM event_log e
|
|
27
|
+
LEFT JOIN app_session_read_state reads ON reads.session_id = e.session_id
|
|
28
|
+
WHERE e.session_id IN (${placeholders})
|
|
29
|
+
AND e.stream_id > COALESCE(reads.last_read_stream_id, 0)
|
|
30
|
+
AND (
|
|
31
|
+
(e.retention_class = 'chat_message' AND e.type IN ('user.message.accepted', 'assistant_message'))
|
|
32
|
+
OR e.type = 'session_error'
|
|
33
|
+
)
|
|
34
|
+
GROUP BY e.session_id
|
|
35
35
|
`).all(...ids);
|
|
36
36
|
for (const row of rows)
|
|
37
37
|
if (Number(row.count) > 0)
|
|
@@ -48,14 +48,14 @@ export class ChatTimelineQueryService {
|
|
|
48
48
|
clauses.push("session_sequence <= ?");
|
|
49
49
|
values.push(beforeOrAtSequence);
|
|
50
50
|
}
|
|
51
|
-
const rows = this.store.db.prepare(`
|
|
52
|
-
SELECT * FROM (
|
|
53
|
-
SELECT * FROM event_log
|
|
54
|
-
WHERE ${clauses.join(" AND ")}
|
|
55
|
-
ORDER BY session_sequence DESC, stream_id DESC
|
|
56
|
-
LIMIT ?
|
|
57
|
-
)
|
|
58
|
-
ORDER BY session_sequence ASC, stream_id ASC
|
|
51
|
+
const rows = this.store.db.prepare(`
|
|
52
|
+
SELECT * FROM (
|
|
53
|
+
SELECT * FROM event_log
|
|
54
|
+
WHERE ${clauses.join(" AND ")}
|
|
55
|
+
ORDER BY session_sequence DESC, stream_id DESC
|
|
56
|
+
LIMIT ?
|
|
57
|
+
)
|
|
58
|
+
ORDER BY session_sequence ASC, stream_id ASC
|
|
59
59
|
`).all(...values, limit);
|
|
60
60
|
return rows.map(storedPiboEventFromV2Row).filter((event) => event !== undefined);
|
|
61
61
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createAgentSessionServices } from "@mariozechner/pi-coding-agent";
|
|
2
2
|
import { registerMiniMaxProvider } from "../../providers/minimax.js";
|
|
3
|
+
import { registerGlmProvider } from "../../providers/glm.js";
|
|
3
4
|
export function buildModelCatalogFromRegistry(registry) {
|
|
4
5
|
const providers = new Map();
|
|
5
6
|
for (const model of registry.getAll()) {
|
|
@@ -43,5 +44,8 @@ export async function loadModelCatalogWithServices(createServices, cwd = process
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
export async function loadModelCatalog(cwd = process.cwd()) {
|
|
46
|
-
return loadModelCatalogWithServices(createAgentSessionServices, cwd,
|
|
47
|
+
return loadModelCatalogWithServices(createAgentSessionServices, cwd, (registry) => {
|
|
48
|
+
registerMiniMaxProvider(registry);
|
|
49
|
+
registerGlmProvider(registry);
|
|
50
|
+
});
|
|
47
51
|
}
|