@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
|
@@ -71,39 +71,39 @@ export class ContextFileMetadataStore {
|
|
|
71
71
|
this.db = new DatabaseSync(resolvedPath);
|
|
72
72
|
this.db.exec("PRAGMA busy_timeout = 5000");
|
|
73
73
|
this.db.exec("PRAGMA journal_mode = WAL");
|
|
74
|
-
this.db.exec(`
|
|
75
|
-
CREATE TABLE IF NOT EXISTS context_files (
|
|
76
|
-
key TEXT PRIMARY KEY,
|
|
77
|
-
label TEXT NOT NULL,
|
|
78
|
-
managed_path TEXT NOT NULL,
|
|
79
|
-
scope TEXT NOT NULL,
|
|
80
|
-
source_type TEXT NOT NULL,
|
|
81
|
-
agent_profile_name TEXT,
|
|
82
|
-
active_revision_id TEXT,
|
|
83
|
-
source_ref TEXT,
|
|
84
|
-
source_hash TEXT,
|
|
85
|
-
created_at TEXT NOT NULL,
|
|
86
|
-
updated_at TEXT NOT NULL
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
CREATE INDEX IF NOT EXISTS idx_context_files_scope
|
|
90
|
-
ON context_files(scope, updated_at);
|
|
91
|
-
|
|
92
|
-
CREATE TABLE IF NOT EXISTS context_file_revisions (
|
|
93
|
-
id TEXT PRIMARY KEY,
|
|
94
|
-
context_file_key TEXT NOT NULL,
|
|
95
|
-
kind TEXT NOT NULL,
|
|
96
|
-
content_hash TEXT NOT NULL,
|
|
97
|
-
content TEXT NOT NULL,
|
|
98
|
-
created_at TEXT NOT NULL,
|
|
99
|
-
actor_id TEXT,
|
|
100
|
-
based_on_revision_id TEXT,
|
|
101
|
-
source_hash_at_creation TEXT,
|
|
102
|
-
note TEXT
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
CREATE INDEX IF NOT EXISTS idx_context_file_revisions_key
|
|
106
|
-
ON context_file_revisions(context_file_key, created_at DESC);
|
|
74
|
+
this.db.exec(`
|
|
75
|
+
CREATE TABLE IF NOT EXISTS context_files (
|
|
76
|
+
key TEXT PRIMARY KEY,
|
|
77
|
+
label TEXT NOT NULL,
|
|
78
|
+
managed_path TEXT NOT NULL,
|
|
79
|
+
scope TEXT NOT NULL,
|
|
80
|
+
source_type TEXT NOT NULL,
|
|
81
|
+
agent_profile_name TEXT,
|
|
82
|
+
active_revision_id TEXT,
|
|
83
|
+
source_ref TEXT,
|
|
84
|
+
source_hash TEXT,
|
|
85
|
+
created_at TEXT NOT NULL,
|
|
86
|
+
updated_at TEXT NOT NULL
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_context_files_scope
|
|
90
|
+
ON context_files(scope, updated_at);
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS context_file_revisions (
|
|
93
|
+
id TEXT PRIMARY KEY,
|
|
94
|
+
context_file_key TEXT NOT NULL,
|
|
95
|
+
kind TEXT NOT NULL,
|
|
96
|
+
content_hash TEXT NOT NULL,
|
|
97
|
+
content TEXT NOT NULL,
|
|
98
|
+
created_at TEXT NOT NULL,
|
|
99
|
+
actor_id TEXT,
|
|
100
|
+
based_on_revision_id TEXT,
|
|
101
|
+
source_hash_at_creation TEXT,
|
|
102
|
+
note TEXT
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE INDEX IF NOT EXISTS idx_context_file_revisions_key
|
|
106
|
+
ON context_file_revisions(context_file_key, created_at DESC);
|
|
107
107
|
`);
|
|
108
108
|
this.migrateLegacyStore();
|
|
109
109
|
}
|
|
@@ -119,20 +119,20 @@ export class ContextFileMetadataStore {
|
|
|
119
119
|
const createdAt = input.createdAt ?? new Date().toISOString();
|
|
120
120
|
const updatedAt = input.updatedAt ?? createdAt;
|
|
121
121
|
this.db
|
|
122
|
-
.prepare(`
|
|
123
|
-
INSERT INTO context_files (
|
|
124
|
-
key,
|
|
125
|
-
label,
|
|
126
|
-
managed_path,
|
|
127
|
-
scope,
|
|
128
|
-
source_type,
|
|
129
|
-
agent_profile_name,
|
|
130
|
-
active_revision_id,
|
|
131
|
-
source_ref,
|
|
132
|
-
source_hash,
|
|
133
|
-
created_at,
|
|
134
|
-
updated_at
|
|
135
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
122
|
+
.prepare(`
|
|
123
|
+
INSERT INTO context_files (
|
|
124
|
+
key,
|
|
125
|
+
label,
|
|
126
|
+
managed_path,
|
|
127
|
+
scope,
|
|
128
|
+
source_type,
|
|
129
|
+
agent_profile_name,
|
|
130
|
+
active_revision_id,
|
|
131
|
+
source_ref,
|
|
132
|
+
source_hash,
|
|
133
|
+
created_at,
|
|
134
|
+
updated_at
|
|
135
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
136
136
|
`)
|
|
137
137
|
.run(input.key, input.label, input.managedPath, input.scope, "managed", input.agentProfileName ?? null, null, input.sourceRef ?? null, input.sourceHash ?? null, createdAt, updatedAt);
|
|
138
138
|
const record = this.getFile(input.key);
|
|
@@ -142,19 +142,19 @@ export class ContextFileMetadataStore {
|
|
|
142
142
|
}
|
|
143
143
|
updateFile(input) {
|
|
144
144
|
this.db
|
|
145
|
-
.prepare(`
|
|
146
|
-
UPDATE context_files SET
|
|
147
|
-
label = ?,
|
|
148
|
-
managed_path = ?,
|
|
149
|
-
scope = ?,
|
|
150
|
-
source_type = ?,
|
|
151
|
-
agent_profile_name = ?,
|
|
152
|
-
active_revision_id = ?,
|
|
153
|
-
source_ref = ?,
|
|
154
|
-
source_hash = ?,
|
|
155
|
-
created_at = ?,
|
|
156
|
-
updated_at = ?
|
|
157
|
-
WHERE key = ?
|
|
145
|
+
.prepare(`
|
|
146
|
+
UPDATE context_files SET
|
|
147
|
+
label = ?,
|
|
148
|
+
managed_path = ?,
|
|
149
|
+
scope = ?,
|
|
150
|
+
source_type = ?,
|
|
151
|
+
agent_profile_name = ?,
|
|
152
|
+
active_revision_id = ?,
|
|
153
|
+
source_ref = ?,
|
|
154
|
+
source_hash = ?,
|
|
155
|
+
created_at = ?,
|
|
156
|
+
updated_at = ?
|
|
157
|
+
WHERE key = ?
|
|
158
158
|
`)
|
|
159
159
|
.run(input.label, input.managedPath, input.scope, "managed", input.agentProfileName ?? null, input.activeRevisionId ?? null, input.sourceRef ?? null, input.sourceHash ?? null, input.createdAt, input.updatedAt, input.key);
|
|
160
160
|
const record = this.getFile(input.key);
|
|
@@ -178,19 +178,19 @@ export class ContextFileMetadataStore {
|
|
|
178
178
|
const id = `rev_${randomUUID()}`;
|
|
179
179
|
const createdAt = input.createdAt ?? new Date().toISOString();
|
|
180
180
|
this.db
|
|
181
|
-
.prepare(`
|
|
182
|
-
INSERT INTO context_file_revisions (
|
|
183
|
-
id,
|
|
184
|
-
context_file_key,
|
|
185
|
-
kind,
|
|
186
|
-
content_hash,
|
|
187
|
-
content,
|
|
188
|
-
created_at,
|
|
189
|
-
actor_id,
|
|
190
|
-
based_on_revision_id,
|
|
191
|
-
source_hash_at_creation,
|
|
192
|
-
note
|
|
193
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
181
|
+
.prepare(`
|
|
182
|
+
INSERT INTO context_file_revisions (
|
|
183
|
+
id,
|
|
184
|
+
context_file_key,
|
|
185
|
+
kind,
|
|
186
|
+
content_hash,
|
|
187
|
+
content,
|
|
188
|
+
created_at,
|
|
189
|
+
actor_id,
|
|
190
|
+
based_on_revision_id,
|
|
191
|
+
source_hash_at_creation,
|
|
192
|
+
note
|
|
193
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
194
194
|
`)
|
|
195
195
|
.run(id, input.contextFileKey, input.kind, input.contentHash, input.content, createdAt, input.actorId ?? null, input.basedOnRevisionId ?? null, input.sourceHashAtCreation ?? null, input.note ?? null);
|
|
196
196
|
const revision = this.getRevision(id);
|
|
@@ -211,19 +211,19 @@ export class ContextFileMetadataStore {
|
|
|
211
211
|
findLatestSourceSnapshot(contextFileKey, sourceHash) {
|
|
212
212
|
const row = sourceHash
|
|
213
213
|
? this.db
|
|
214
|
-
.prepare(`
|
|
215
|
-
SELECT * FROM context_file_revisions
|
|
216
|
-
WHERE context_file_key = ? AND kind = 'source-snapshot' AND content_hash = ?
|
|
217
|
-
ORDER BY created_at DESC
|
|
218
|
-
LIMIT 1
|
|
214
|
+
.prepare(`
|
|
215
|
+
SELECT * FROM context_file_revisions
|
|
216
|
+
WHERE context_file_key = ? AND kind = 'source-snapshot' AND content_hash = ?
|
|
217
|
+
ORDER BY created_at DESC
|
|
218
|
+
LIMIT 1
|
|
219
219
|
`)
|
|
220
220
|
.get(contextFileKey, sourceHash)
|
|
221
221
|
: this.db
|
|
222
|
-
.prepare(`
|
|
223
|
-
SELECT * FROM context_file_revisions
|
|
224
|
-
WHERE context_file_key = ? AND kind = 'source-snapshot'
|
|
225
|
-
ORDER BY created_at DESC
|
|
226
|
-
LIMIT 1
|
|
222
|
+
.prepare(`
|
|
223
|
+
SELECT * FROM context_file_revisions
|
|
224
|
+
WHERE context_file_key = ? AND kind = 'source-snapshot'
|
|
225
|
+
ORDER BY created_at DESC
|
|
226
|
+
LIMIT 1
|
|
227
227
|
`)
|
|
228
228
|
.get(contextFileKey);
|
|
229
229
|
return row ? revisionRowToRecord(row) : undefined;
|
|
@@ -248,20 +248,20 @@ export class ContextFileMetadataStore {
|
|
|
248
248
|
? statSync(resolvedPath).mtime.toISOString()
|
|
249
249
|
: new Date().toISOString();
|
|
250
250
|
this.db
|
|
251
|
-
.prepare(`
|
|
252
|
-
INSERT INTO context_files (
|
|
253
|
-
key,
|
|
254
|
-
label,
|
|
255
|
-
managed_path,
|
|
256
|
-
scope,
|
|
257
|
-
source_type,
|
|
258
|
-
agent_profile_name,
|
|
259
|
-
active_revision_id,
|
|
260
|
-
source_ref,
|
|
261
|
-
source_hash,
|
|
262
|
-
created_at,
|
|
263
|
-
updated_at
|
|
264
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
251
|
+
.prepare(`
|
|
252
|
+
INSERT INTO context_files (
|
|
253
|
+
key,
|
|
254
|
+
label,
|
|
255
|
+
managed_path,
|
|
256
|
+
scope,
|
|
257
|
+
source_type,
|
|
258
|
+
agent_profile_name,
|
|
259
|
+
active_revision_id,
|
|
260
|
+
source_ref,
|
|
261
|
+
source_hash,
|
|
262
|
+
created_at,
|
|
263
|
+
updated_at
|
|
264
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
265
265
|
`)
|
|
266
266
|
.run(file.key, file.label, resolvedPath, file.scope, "managed", file.agentProfileName ?? null, null, null, null, createdAt, createdAt);
|
|
267
267
|
if (!existsSync(resolvedPath))
|
|
@@ -270,19 +270,19 @@ export class ContextFileMetadataStore {
|
|
|
270
270
|
const contentHash = hashContextFileContent(content);
|
|
271
271
|
const revisionId = `rev_${randomUUID()}`;
|
|
272
272
|
this.db
|
|
273
|
-
.prepare(`
|
|
274
|
-
INSERT INTO context_file_revisions (
|
|
275
|
-
id,
|
|
276
|
-
context_file_key,
|
|
277
|
-
kind,
|
|
278
|
-
content_hash,
|
|
279
|
-
content,
|
|
280
|
-
created_at,
|
|
281
|
-
actor_id,
|
|
282
|
-
based_on_revision_id,
|
|
283
|
-
source_hash_at_creation,
|
|
284
|
-
note
|
|
285
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
273
|
+
.prepare(`
|
|
274
|
+
INSERT INTO context_file_revisions (
|
|
275
|
+
id,
|
|
276
|
+
context_file_key,
|
|
277
|
+
kind,
|
|
278
|
+
content_hash,
|
|
279
|
+
content,
|
|
280
|
+
created_at,
|
|
281
|
+
actor_id,
|
|
282
|
+
based_on_revision_id,
|
|
283
|
+
source_hash_at_creation,
|
|
284
|
+
note
|
|
285
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
286
286
|
`)
|
|
287
287
|
.run(revisionId, file.key, "working", contentHash, content, createdAt, null, null, null, "Legacy managed file import");
|
|
288
288
|
this.db
|
|
@@ -227,10 +227,10 @@ function responseBuiltIndex() {
|
|
|
227
227
|
return responseHtml(readFileSync(indexPath, "utf8"));
|
|
228
228
|
}
|
|
229
229
|
function fallbackHtml() {
|
|
230
|
-
return responseHtml(`<!doctype html>
|
|
231
|
-
<html lang="en">
|
|
232
|
-
<head><meta charset="utf-8"><title>Pibo Context Files</title></head>
|
|
233
|
-
<body><p>Context Files UI has not been built. Run <code>npm run context-files-ui:build</code>.</p></body>
|
|
230
|
+
return responseHtml(`<!doctype html>
|
|
231
|
+
<html lang="en">
|
|
232
|
+
<head><meta charset="utf-8"><title>Pibo Context Files</title></head>
|
|
233
|
+
<body><p>Context Files UI has not been built. Run <code>npm run context-files-ui:build</code>.</p></body>
|
|
234
234
|
</html>`);
|
|
235
235
|
}
|
|
236
236
|
function writeSse(controller, eventName, payload, id) {
|
package/dist/plugins/registry.js
CHANGED
|
@@ -33,7 +33,7 @@ export class PiboPluginRegistry {
|
|
|
33
33
|
capabilityPackages = new Map();
|
|
34
34
|
eventListeners = new Set();
|
|
35
35
|
productEventListeners = new Set();
|
|
36
|
-
|
|
36
|
+
loopStopConditions = new Map();
|
|
37
37
|
pluginIds = new Set();
|
|
38
38
|
pluginNames = new Map();
|
|
39
39
|
eventErrors = [];
|
|
@@ -133,20 +133,22 @@ export class PiboPluginRegistry {
|
|
|
133
133
|
registerCapabilityPackage(pkg) {
|
|
134
134
|
this.addUnique(this.capabilityPackages, pkg.name, { ...pkg, toolNames: [...pkg.toolNames] }, "capability package");
|
|
135
135
|
}
|
|
136
|
-
|
|
136
|
+
registerLoopStopCondition(condition, pluginId) {
|
|
137
137
|
if (!condition.type.trim())
|
|
138
|
-
throw new Error('
|
|
138
|
+
throw new Error('Loop stop condition type is required');
|
|
139
139
|
if (!condition.name.trim())
|
|
140
|
-
throw new Error(`
|
|
140
|
+
throw new Error(`Loop stop condition "${condition.type}" name is required`);
|
|
141
141
|
if (condition.phases.length === 0)
|
|
142
|
-
throw new Error(`
|
|
143
|
-
this.addUnique(this.
|
|
142
|
+
throw new Error(`Loop stop condition "${condition.type}" must support at least one phase`);
|
|
143
|
+
this.addUnique(this.loopStopConditions, condition.type, { definition: { ...condition, phases: [...condition.phases] }, pluginId }, 'Loop stop condition');
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
registerRalphStopCondition(condition, pluginId) { this.registerLoopStopCondition(condition, pluginId); }
|
|
146
|
+
getLoopStopConditionDefinitions() {
|
|
147
|
+
return [...this.loopStopConditions.values()].map((entry) => entry.definition);
|
|
147
148
|
}
|
|
148
|
-
|
|
149
|
-
|
|
149
|
+
getRalphStopConditionDefinitions() { return this.getLoopStopConditionDefinitions(); }
|
|
150
|
+
getLoopStopConditionInfos() {
|
|
151
|
+
return [...this.loopStopConditions.values()].map((entry) => ({
|
|
150
152
|
type: entry.definition.type,
|
|
151
153
|
name: entry.definition.name,
|
|
152
154
|
description: entry.definition.description,
|
|
@@ -157,6 +159,7 @@ export class PiboPluginRegistry {
|
|
|
157
159
|
pluginName: entry.pluginId ? this.pluginNames.get(entry.pluginId) : undefined,
|
|
158
160
|
}));
|
|
159
161
|
}
|
|
162
|
+
getRalphStopConditionInfos() { return this.getLoopStopConditionInfos(); }
|
|
160
163
|
onEvent(listener) {
|
|
161
164
|
this.eventListeners.add(listener);
|
|
162
165
|
}
|
|
@@ -203,6 +206,7 @@ export class PiboPluginRegistry {
|
|
|
203
206
|
builtinToolNames: [...sessionContext.builtinToolNames],
|
|
204
207
|
autoContextFiles: sessionContext.autoContextFiles,
|
|
205
208
|
runControl: sessionContext.toolPackages.runControl === true,
|
|
209
|
+
goalControl: sessionContext.toolPackages.goalControl !== false,
|
|
206
210
|
};
|
|
207
211
|
});
|
|
208
212
|
}
|
|
@@ -255,6 +259,11 @@ export class PiboPluginRegistry {
|
|
|
255
259
|
"pibo_run_ack",
|
|
256
260
|
],
|
|
257
261
|
},
|
|
262
|
+
{
|
|
263
|
+
name: "pibo-goal-control",
|
|
264
|
+
description: "Expose get_goal, create_goal, and update_goal as one native goal lifecycle package.",
|
|
265
|
+
toolNames: ["get_goal", "create_goal", "update_goal"],
|
|
266
|
+
},
|
|
258
267
|
...[...this.capabilityPackages.values()].map((pkg) => ({
|
|
259
268
|
...pkg,
|
|
260
269
|
toolNames: [...pkg.toolNames],
|
|
@@ -264,7 +273,8 @@ export class PiboPluginRegistry {
|
|
|
264
273
|
piboTools: listInstalledCliToolAgentContexts(),
|
|
265
274
|
mcpServers: [],
|
|
266
275
|
piPackages: listPiPackages(),
|
|
267
|
-
|
|
276
|
+
loopStopConditions: this.getLoopStopConditionInfos(),
|
|
277
|
+
ralphStopConditions: this.getLoopStopConditionInfos(),
|
|
268
278
|
};
|
|
269
279
|
}
|
|
270
280
|
resolveProfileName(name) {
|
|
@@ -355,7 +365,8 @@ export class PiboPluginRegistry {
|
|
|
355
365
|
registerAuthService: (service) => this.registerAuthService(service),
|
|
356
366
|
registerWebApp: (app) => this.registerWebApp(app),
|
|
357
367
|
registerCapabilityPackage: (pkg) => this.registerCapabilityPackage(withPluginPackageContext(pkg)),
|
|
358
|
-
|
|
368
|
+
registerLoopStopCondition: (condition) => this.registerLoopStopCondition(condition, pluginId),
|
|
369
|
+
registerRalphStopCondition: (condition) => this.registerLoopStopCondition(condition, pluginId),
|
|
359
370
|
onEvent: (listener) => this.onEvent(listener),
|
|
360
371
|
emitProductEvent: (event) => this.emitProductEvent(event),
|
|
361
372
|
onProductEvent: (listener) => this.onProductEvent(listener),
|
package/dist/ralph/cli.js
CHANGED
|
@@ -6,24 +6,24 @@ import { DEFAULT_PIBO_PROFILE_NAME } from '../plugins/builtin.js';
|
|
|
6
6
|
import { getRalphJobTemplate, listRalphJobTemplates } from './templates.js';
|
|
7
7
|
import { parsePiboThinkingLevel } from '../core/thinking.js';
|
|
8
8
|
function printDiscovery() {
|
|
9
|
-
console.log(`pibo ralph
|
|
10
|
-
|
|
11
|
-
Manage continuous Ralph Pibo agent jobs.
|
|
12
|
-
|
|
13
|
-
Commands:
|
|
14
|
-
status Show Ralph status
|
|
15
|
-
list List Ralph jobs
|
|
16
|
-
add Create a Ralph job
|
|
17
|
-
edit Update a Ralph job
|
|
18
|
-
conditions List registered built-in stop conditions
|
|
19
|
-
templates List built-in Ralph job templates
|
|
20
|
-
policy Show, set, or clear a job stop policy
|
|
21
|
-
start Start a Ralph job now
|
|
22
|
-
stop Stop after the current session finishes
|
|
23
|
-
cancel Abort the current session and stop
|
|
24
|
-
remove Delete a Ralph job
|
|
25
|
-
runs List Ralph runs
|
|
26
|
-
|
|
9
|
+
console.log(`pibo ralph
|
|
10
|
+
|
|
11
|
+
Manage continuous Ralph Pibo agent jobs.
|
|
12
|
+
|
|
13
|
+
Commands:
|
|
14
|
+
status Show Ralph status
|
|
15
|
+
list List Ralph jobs
|
|
16
|
+
add Create a Ralph job
|
|
17
|
+
edit Update a Ralph job
|
|
18
|
+
conditions List registered built-in stop conditions
|
|
19
|
+
templates List built-in Ralph job templates
|
|
20
|
+
policy Show, set, or clear a job stop policy
|
|
21
|
+
start Start a Ralph job now
|
|
22
|
+
stop Stop after the current session finishes
|
|
23
|
+
cancel Abort the current session and stop
|
|
24
|
+
remove Delete a Ralph job
|
|
25
|
+
runs List Ralph runs
|
|
26
|
+
|
|
27
27
|
Next: pibo ralph add --help`);
|
|
28
28
|
}
|
|
29
29
|
function targetFromOptions(options) { if (options.room)
|