@pasko70/pibo 1.4.0 → 1.4.2

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.
Files changed (129) hide show
  1. package/README.md +183 -183
  2. package/context/codex-base-prompt.md +148 -148
  3. package/context/compute-worker.md +23 -23
  4. package/context/pibo-compaction-prompt.md +100 -100
  5. package/context/pibo-native-tooling.md +18 -18
  6. package/context/pibo-system-prompt.md +77 -77
  7. package/dist/apps/chat/agent-store.js +82 -82
  8. package/dist/apps/chat/data/project-service.js +166 -166
  9. package/dist/apps/chat/data/read-state-service.js +18 -18
  10. package/dist/apps/chat/data/timeline-query-service.js +8 -8
  11. package/dist/apps/chat/model-catalog.js +5 -1
  12. package/dist/apps/chat/static-assets.js +853 -853
  13. package/dist/apps/chat/workflow-persistence.js +255 -255
  14. package/dist/apps/chat-ui/assets/{dist-7YaJd19a.js → dist-B2BEpL7n.js} +1 -1
  15. package/dist/apps/chat-ui/assets/{dist-CiYeO8nN.js → dist-BAGS_xkV.js} +1 -1
  16. package/dist/apps/chat-ui/assets/{dist-BIvPnn_C.js → dist-BAXNalar.js} +1 -1
  17. package/dist/apps/chat-ui/assets/{dist-CjSI6y5z.js → dist-BwUvs6Ph.js} +1 -1
  18. package/dist/apps/chat-ui/assets/{dist-Ubstha8t.js → dist-C0zsJ8II.js} +1 -1
  19. package/dist/apps/chat-ui/assets/{dist-KXCMNKIL.js → dist-C3PnEkhb.js} +1 -1
  20. package/dist/apps/chat-ui/assets/{dist-CVQU42Fn.js → dist-CYPL-B2Z.js} +1 -1
  21. package/dist/apps/chat-ui/assets/{dist-BbNE72h8.js → dist-CiDSXgtg.js} +1 -1
  22. package/dist/apps/chat-ui/assets/{dist-D7TCkoFT.js → dist-DnACFKyO.js} +1 -1
  23. package/dist/apps/chat-ui/assets/{dist-ChSZNqKE.js → dist-ZB1-ui2y.js} +1 -1
  24. package/dist/apps/chat-ui/assets/{dist-8Noo5eCN.js → dist-vKlxFkTa.js} +1 -1
  25. package/dist/apps/chat-ui/assets/{index-CmxtUVG1.js → index-0x7tuTNX.js} +3 -3
  26. package/dist/apps/chat-ui/assets/{index-C25VYnyb.css → index-B-qaya1G.css} +1 -1
  27. package/dist/apps/chat-ui/index.html +18 -18
  28. package/dist/apps/chat-ui/manifest.webmanifest +25 -25
  29. package/dist/apps/chat-ui/sw.js +41 -41
  30. package/dist/apps/chat-vscode-web/index.html +12 -12
  31. package/dist/apps/cli-ui/cliSessionsCommand.js +23 -23
  32. package/dist/apps/context-files-ui/index.html +11 -11
  33. package/dist/apps/vscode-artifacts/latest.vsix +0 -0
  34. package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.4.2.vsix +0 -0
  35. package/dist/bin/pibo.js +0 -0
  36. package/dist/bin/rg.js +0 -0
  37. package/dist/cli.js +35 -35
  38. package/dist/compute/cli.js +54 -54
  39. package/dist/core/runtime.js +2 -0
  40. package/dist/core/session-router.js +1 -0
  41. package/dist/cron/cli.js +15 -15
  42. package/dist/cron/store.js +49 -49
  43. package/dist/data/cli.js +23 -23
  44. package/dist/data/event-log.js +23 -23
  45. package/dist/data/message-store.js +20 -20
  46. package/dist/data/navigation-store.js +9 -9
  47. package/dist/data/observation-store.js +4 -4
  48. package/dist/data/payload-store.js +17 -17
  49. package/dist/data/schema.js +429 -429
  50. package/dist/data/session-store.js +4 -4
  51. package/dist/data/telemetry-queries.js +54 -54
  52. package/dist/data/telemetry.js +156 -156
  53. package/dist/debug/events.js +12 -12
  54. package/dist/debug/failures.js +6 -6
  55. package/dist/debug/index.js +207 -207
  56. package/dist/debug/messages.js +6 -6
  57. package/dist/debug/pty.js +124 -124
  58. package/dist/debug/session.js +29 -29
  59. package/dist/debug/tools.js +5 -5
  60. package/dist/debug/web-snapshot-browser-scripts.js +294 -294
  61. package/dist/debug/web-streaming-browser-library.js +925 -925
  62. package/dist/debug/web-streaming-browser-scripts.js +232 -232
  63. package/dist/debug/web-streaming-provider-telemetry.js +4 -4
  64. package/dist/debug/web.js +93 -93
  65. package/dist/gateway/cli.js +19 -19
  66. package/dist/mcp/config-command.js +53 -53
  67. package/dist/mcp/index.js +21 -21
  68. package/dist/mcp/registry.js +11 -11
  69. package/dist/pi-packages/cli.js +11 -11
  70. package/dist/plugins/context-files-store.js +110 -110
  71. package/dist/plugins/context-files.js +4 -4
  72. package/dist/providers/glm.js +59 -0
  73. package/dist/ralph/cli.js +18 -18
  74. package/dist/ralph/templates.js +140 -140
  75. package/dist/reliability/store.js +226 -226
  76. package/dist/sessions/pibo-data-store.js +16 -16
  77. package/dist/sessions/sqlite-store.js +53 -53
  78. package/dist/setup/cli.js +58 -58
  79. package/dist/tools/agent-browser-wrapper.js +80 -80
  80. package/dist/tools/browser-use-cdp.js +12 -12
  81. package/dist/tools/browser-use-wrapper.js +762 -762
  82. package/dist/tools/guides.js +455 -455
  83. package/dist/tools/index.js +99 -99
  84. package/dist/tools/runtime/node-worker-source.js +205 -205
  85. package/dist/tools/runtime/python-worker-source.js +177 -177
  86. package/dist/vscode/cli.js +9 -9
  87. package/dist/web-annotations/cdp.js +900 -900
  88. package/dist/web-annotations/store.js +96 -96
  89. package/docs/README.md +23 -23
  90. package/docs/ops/install-developer-host.md +112 -112
  91. package/docs/ops/install-user-host.md +96 -96
  92. package/docs/ops/upgrade-user-to-developer-host.md +69 -69
  93. package/docs/ops/vscode-extension-release.md +160 -160
  94. package/package.json +1 -1
  95. package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
  96. package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
  97. package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
  98. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
  99. package/skills/builtin/prd/SKILL.md +143 -143
  100. package/skills/builtin/ralph-loop/SKILL.md +359 -359
  101. package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
  102. package/skills/builtin/skill-creator/LICENSE.txt +201 -201
  103. package/skills/builtin/skill-creator/SKILL.md +513 -513
  104. package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
  105. package/skills/builtin/skill-creator/agents/comparator.md +202 -202
  106. package/skills/builtin/skill-creator/agents/grader.md +223 -223
  107. package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
  108. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
  109. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
  110. package/skills/builtin/skill-creator/references/schemas.md +430 -430
  111. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
  112. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
  113. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
  114. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
  115. package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
  116. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
  117. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
  118. package/skills/builtin/skill-creator/scripts/utils.py +47 -47
  119. package/skills/builtin/web-annotations/SKILL.md +93 -93
  120. package/src/mcp/LICENSE.mcp-cli +21 -21
  121. package/dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix +0 -0
  122. package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.3.vsix +0 -0
  123. package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.4.vsix +0 -0
  124. package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.3.5.vsix +0 -0
  125. package/dist/core/shared-app.js +0 -17
  126. package/dist/data/final-app-space-cutover-migration.js +0 -728
  127. package/dist/data/shared-app-migration.js +0 -757
  128. package/dist/session-ui/ownerViewModel.js +0 -27
  129. package/dist/shared-app.js +0 -4
@@ -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) {
@@ -0,0 +1,59 @@
1
+ import { getModels } from "@mariozechner/pi-ai";
2
+ import { OPENAI_COMPLETIONS_API, registerOpenAiCompatProvider, resetOpenAiCompatProviderRegistration, unregisterOpenAiCompatProvider, } from "./openai-compat.js";
3
+ export const GLM_PROVIDER_ID = "glm";
4
+ export const GLM_DEFAULT_BASE_URL = "https://api.z.ai/api/coding/paas/v4";
5
+ export const GLM_API_KEY_ENV = "GLM_API_KEY";
6
+ export const GLM_5_2_MODEL = {
7
+ id: "GLM-5.2",
8
+ name: "GLM 5.2",
9
+ reasoning: false,
10
+ contextWindow: 200000,
11
+ maxTokens: 8192,
12
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
13
+ input: ["text"],
14
+ };
15
+ function resolveBaseUrl(defaultBaseUrl) {
16
+ const envOverride = process.env[`PIBO_${GLM_PROVIDER_ID.toUpperCase()}_BASE_URL`];
17
+ return envOverride && envOverride.length > 0 ? envOverride : defaultBaseUrl;
18
+ }
19
+ function buildGlmSpec(customModels = [GLM_5_2_MODEL]) {
20
+ return {
21
+ id: GLM_PROVIDER_ID,
22
+ baseUrl: resolveBaseUrl(GLM_DEFAULT_BASE_URL),
23
+ apiKeyEnv: GLM_API_KEY_ENV,
24
+ models: customModels,
25
+ };
26
+ }
27
+ export function isGlmProvider(provider) {
28
+ return provider === GLM_PROVIDER_ID;
29
+ }
30
+ export function findGlmModel(modelRegistry, model) {
31
+ if (!model?.provider || !model.id)
32
+ return undefined;
33
+ if (!isGlmProvider(model.provider))
34
+ return undefined;
35
+ return modelRegistry.find(model.provider, model.id);
36
+ }
37
+ export function getBuiltInGlmModels() {
38
+ try {
39
+ return getModels(GLM_PROVIDER_ID);
40
+ }
41
+ catch {
42
+ return [];
43
+ }
44
+ }
45
+ export function registerGlmProvider(modelRegistry, options = {}) {
46
+ const spec = buildGlmSpec(options.customModels ?? [GLM_5_2_MODEL]);
47
+ const baseModels = options.baseModels ?? getBuiltInGlmModels();
48
+ return registerOpenAiCompatProvider(modelRegistry, spec, { baseModels });
49
+ }
50
+ export function unregisterGlmProvider(modelRegistry) {
51
+ unregisterOpenAiCompatProvider(modelRegistry, GLM_PROVIDER_ID);
52
+ }
53
+ export function resetGlmProviderRegistration() {
54
+ resetOpenAiCompatProviderRegistration();
55
+ }
56
+ export function getDefaultGlmModels() {
57
+ return [GLM_5_2_MODEL];
58
+ }
59
+ export { OPENAI_COMPLETIONS_API };
package/dist/ralph/cli.js CHANGED
@@ -4,24 +4,24 @@ import { createDefaultPiboRalphStore } from './store.js';
4
4
  import { createBuiltInRalphStopConditions } from './stopping.js';
5
5
  import { getRalphJobTemplate, listRalphJobTemplates } from './templates.js';
6
6
  function printDiscovery() {
7
- console.log(`pibo ralph
8
-
9
- Manage continuous Ralph Pibo agent jobs.
10
-
11
- Commands:
12
- status Show Ralph status
13
- list List Ralph jobs
14
- add Create a Ralph job
15
- edit Update a Ralph job
16
- conditions List registered built-in stop conditions
17
- templates List built-in Ralph job templates
18
- policy Show, set, or clear a job stop policy
19
- start Start a Ralph job now
20
- stop Stop after the current session finishes
21
- cancel Abort the current session and stop
22
- remove Delete a Ralph job
23
- runs List Ralph runs
24
-
7
+ console.log(`pibo ralph
8
+
9
+ Manage continuous Ralph Pibo agent jobs.
10
+
11
+ Commands:
12
+ status Show Ralph status
13
+ list List Ralph jobs
14
+ add Create a Ralph job
15
+ edit Update a Ralph job
16
+ conditions List registered built-in stop conditions
17
+ templates List built-in Ralph job templates
18
+ policy Show, set, or clear a job stop policy
19
+ start Start a Ralph job now
20
+ stop Stop after the current session finishes
21
+ cancel Abort the current session and stop
22
+ remove Delete a Ralph job
23
+ runs List Ralph runs
24
+
25
25
  Next: pibo ralph add --help`);
26
26
  }
27
27
  function targetFromOptions(options) { if (options.room)