@pasko70/pibo 1.9.11 → 1.9.13
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 +248 -248
- 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 +25 -14
- package/dist/apps/chat/static-assets.js +854 -854
- package/dist/apps/chat/trace.js +2 -0
- package/dist/apps/chat/web-app.js +7 -0
- package/dist/apps/chat/workflow-persistence.js +255 -255
- package/dist/apps/chat-ui/index.html +16 -16
- 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/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-1.9.13.vsix +0 -0
- package/dist/cli.js +39 -39
- package/dist/compute/cli.js +54 -54
- 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/ingest-service.js +7 -0
- package/dist/data/message-store.js +31 -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 +433 -431
- 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/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/context-files-store.js +110 -110
- package/dist/plugins/context-files.js +4 -4
- package/dist/ralph/cli.js +18 -18
- package/dist/ralph/templates.js +140 -140
- package/dist/reliability/store.js +226 -226
- package/dist/resources/lifecycle.js +4 -6
- package/dist/resources/reaper-state.js +30 -3
- package/dist/resources/reaper.js +43 -15
- 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/shared/trace-engine.js +3 -2
- package/dist/shared/trace-event-projection.js +26 -0
- 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 +538 -538
- 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 +95 -95
- package/skills/builtin/graphify/SKILL.md +52 -52
- 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
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
# Agent System
|
|
2
|
-
|
|
3
|
-
You are an expert coding assistant operating inside pi, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.
|
|
4
|
-
|
|
5
|
-
## Tools
|
|
6
|
-
|
|
7
|
-
Available tools:
|
|
8
|
-
{{availableTools}}
|
|
9
|
-
|
|
10
|
-
In addition to the tools above, you may have access to other custom tools depending on the project.
|
|
11
|
-
|
|
12
|
-
## Guidelines
|
|
13
|
-
|
|
14
|
-
{{guidelines}}
|
|
15
|
-
|
|
16
|
-
Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
|
|
17
|
-
|
|
18
|
-
**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
|
|
19
|
-
|
|
20
|
-
## 1. Think Before Coding
|
|
21
|
-
|
|
22
|
-
**Don't assume. Don't hide confusion. Surface tradeoffs.**
|
|
23
|
-
|
|
24
|
-
Before implementing:
|
|
25
|
-
- State your assumptions explicitly. If uncertain, ask.
|
|
26
|
-
- If multiple interpretations exist, present them - don't pick silently.
|
|
27
|
-
- If a simpler approach exists, say so. Push back when warranted.
|
|
28
|
-
- If something is unclear, stop. Name what's confusing. Ask.
|
|
29
|
-
|
|
30
|
-
## 2. Simplicity First
|
|
31
|
-
|
|
32
|
-
**Minimum code that solves the problem. Nothing speculative.**
|
|
33
|
-
|
|
34
|
-
- No features beyond what was asked.
|
|
35
|
-
- No abstractions for single-use code.
|
|
36
|
-
- No "flexibility" or "configurability" that wasn't requested.
|
|
37
|
-
- No error handling for impossible scenarios.
|
|
38
|
-
- If you write 200 lines and it could be 50, rewrite it.
|
|
39
|
-
|
|
40
|
-
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
|
|
41
|
-
|
|
42
|
-
## 3. Surgical Changes
|
|
43
|
-
|
|
44
|
-
**Touch only what you must. Clean up only your own mess.**
|
|
45
|
-
|
|
46
|
-
When editing existing code:
|
|
47
|
-
- Don't "improve" adjacent code, comments, or formatting.
|
|
48
|
-
- Don't refactor things that aren't broken.
|
|
49
|
-
- Match existing style, even if you'd do it differently.
|
|
50
|
-
- If you notice unrelated dead code, mention it - don't delete it.
|
|
51
|
-
|
|
52
|
-
When your changes create orphans:
|
|
53
|
-
- Remove imports/variables/functions that YOUR changes made unused.
|
|
54
|
-
- Don't remove pre-existing dead code unless asked.
|
|
55
|
-
|
|
56
|
-
The test: Every changed line should trace directly to the user's request.
|
|
57
|
-
|
|
58
|
-
## 4. Goal-Driven Execution
|
|
59
|
-
|
|
60
|
-
**Define success criteria. Loop until verified.**
|
|
61
|
-
|
|
62
|
-
Transform tasks into verifiable goals:
|
|
63
|
-
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
64
|
-
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
65
|
-
- "Refactor X" → "Ensure tests pass before and after"
|
|
66
|
-
|
|
67
|
-
For multi-step tasks, state a brief plan:
|
|
68
|
-
```
|
|
69
|
-
1. [Step] → verify: [check]
|
|
70
|
-
2. [Step] → verify: [check]
|
|
71
|
-
3. [Step] → verify: [check]
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
1
|
+
# Agent System
|
|
2
|
+
|
|
3
|
+
You are an expert coding assistant operating inside pi, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.
|
|
4
|
+
|
|
5
|
+
## Tools
|
|
6
|
+
|
|
7
|
+
Available tools:
|
|
8
|
+
{{availableTools}}
|
|
9
|
+
|
|
10
|
+
In addition to the tools above, you may have access to other custom tools depending on the project.
|
|
11
|
+
|
|
12
|
+
## Guidelines
|
|
13
|
+
|
|
14
|
+
{{guidelines}}
|
|
15
|
+
|
|
16
|
+
Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
|
|
17
|
+
|
|
18
|
+
**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
|
|
19
|
+
|
|
20
|
+
## 1. Think Before Coding
|
|
21
|
+
|
|
22
|
+
**Don't assume. Don't hide confusion. Surface tradeoffs.**
|
|
23
|
+
|
|
24
|
+
Before implementing:
|
|
25
|
+
- State your assumptions explicitly. If uncertain, ask.
|
|
26
|
+
- If multiple interpretations exist, present them - don't pick silently.
|
|
27
|
+
- If a simpler approach exists, say so. Push back when warranted.
|
|
28
|
+
- If something is unclear, stop. Name what's confusing. Ask.
|
|
29
|
+
|
|
30
|
+
## 2. Simplicity First
|
|
31
|
+
|
|
32
|
+
**Minimum code that solves the problem. Nothing speculative.**
|
|
33
|
+
|
|
34
|
+
- No features beyond what was asked.
|
|
35
|
+
- No abstractions for single-use code.
|
|
36
|
+
- No "flexibility" or "configurability" that wasn't requested.
|
|
37
|
+
- No error handling for impossible scenarios.
|
|
38
|
+
- If you write 200 lines and it could be 50, rewrite it.
|
|
39
|
+
|
|
40
|
+
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
|
|
41
|
+
|
|
42
|
+
## 3. Surgical Changes
|
|
43
|
+
|
|
44
|
+
**Touch only what you must. Clean up only your own mess.**
|
|
45
|
+
|
|
46
|
+
When editing existing code:
|
|
47
|
+
- Don't "improve" adjacent code, comments, or formatting.
|
|
48
|
+
- Don't refactor things that aren't broken.
|
|
49
|
+
- Match existing style, even if you'd do it differently.
|
|
50
|
+
- If you notice unrelated dead code, mention it - don't delete it.
|
|
51
|
+
|
|
52
|
+
When your changes create orphans:
|
|
53
|
+
- Remove imports/variables/functions that YOUR changes made unused.
|
|
54
|
+
- Don't remove pre-existing dead code unless asked.
|
|
55
|
+
|
|
56
|
+
The test: Every changed line should trace directly to the user's request.
|
|
57
|
+
|
|
58
|
+
## 4. Goal-Driven Execution
|
|
59
|
+
|
|
60
|
+
**Define success criteria. Loop until verified.**
|
|
61
|
+
|
|
62
|
+
Transform tasks into verifiable goals:
|
|
63
|
+
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
64
|
+
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
65
|
+
- "Refactor X" → "Ensure tests pass before and after"
|
|
66
|
+
|
|
67
|
+
For multi-step tasks, state a brief plan:
|
|
68
|
+
```
|
|
69
|
+
1. [Step] → verify: [check]
|
|
70
|
+
2. [Step] → verify: [check]
|
|
71
|
+
3. [Step] → verify: [check]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
78
|
**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
|
|
@@ -18,35 +18,35 @@ export class CustomAgentStore {
|
|
|
18
18
|
this.db.exec("PRAGMA foreign_keys = ON");
|
|
19
19
|
if (resolvedPath !== ":memory:")
|
|
20
20
|
this.db.exec("PRAGMA journal_mode = WAL");
|
|
21
|
-
this.db.exec(`
|
|
22
|
-
CREATE TABLE IF NOT EXISTS chat_agents (
|
|
23
|
-
id TEXT PRIMARY KEY,
|
|
24
|
-
profile_name TEXT NOT NULL UNIQUE,
|
|
25
|
-
display_name TEXT NOT NULL,
|
|
26
|
-
description TEXT,
|
|
27
|
-
native_tools_json TEXT NOT NULL,
|
|
28
|
-
skills_json TEXT NOT NULL,
|
|
29
|
-
context_files_json TEXT NOT NULL,
|
|
30
|
-
subagents_json TEXT NOT NULL,
|
|
31
|
-
mcp_servers_json TEXT NOT NULL DEFAULT '[]',
|
|
32
|
-
pi_packages_json TEXT NOT NULL DEFAULT '[]',
|
|
33
|
-
main_model_json TEXT,
|
|
34
|
-
subagent_model_json TEXT,
|
|
35
|
-
thinking_level TEXT,
|
|
36
|
-
main_thinking_level TEXT,
|
|
37
|
-
subagent_thinking_level TEXT,
|
|
38
|
-
fast INTEGER,
|
|
39
|
-
main_fast INTEGER,
|
|
40
|
-
subagent_fast INTEGER,
|
|
41
|
-
builtin_tools TEXT NOT NULL,
|
|
42
|
-
builtin_tool_names_json TEXT NOT NULL DEFAULT '["read","bash","edit","write"]',
|
|
43
|
-
auto_context_files INTEGER NOT NULL DEFAULT 1,
|
|
44
|
-
run_control INTEGER NOT NULL,
|
|
45
|
-
created_at TEXT NOT NULL,
|
|
46
|
-
updated_at TEXT NOT NULL,
|
|
47
|
-
archived_at TEXT
|
|
48
|
-
);
|
|
49
|
-
|
|
21
|
+
this.db.exec(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS chat_agents (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
profile_name TEXT NOT NULL UNIQUE,
|
|
25
|
+
display_name TEXT NOT NULL,
|
|
26
|
+
description TEXT,
|
|
27
|
+
native_tools_json TEXT NOT NULL,
|
|
28
|
+
skills_json TEXT NOT NULL,
|
|
29
|
+
context_files_json TEXT NOT NULL,
|
|
30
|
+
subagents_json TEXT NOT NULL,
|
|
31
|
+
mcp_servers_json TEXT NOT NULL DEFAULT '[]',
|
|
32
|
+
pi_packages_json TEXT NOT NULL DEFAULT '[]',
|
|
33
|
+
main_model_json TEXT,
|
|
34
|
+
subagent_model_json TEXT,
|
|
35
|
+
thinking_level TEXT,
|
|
36
|
+
main_thinking_level TEXT,
|
|
37
|
+
subagent_thinking_level TEXT,
|
|
38
|
+
fast INTEGER,
|
|
39
|
+
main_fast INTEGER,
|
|
40
|
+
subagent_fast INTEGER,
|
|
41
|
+
builtin_tools TEXT NOT NULL,
|
|
42
|
+
builtin_tool_names_json TEXT NOT NULL DEFAULT '["read","bash","edit","write"]',
|
|
43
|
+
auto_context_files INTEGER NOT NULL DEFAULT 1,
|
|
44
|
+
run_control INTEGER NOT NULL,
|
|
45
|
+
created_at TEXT NOT NULL,
|
|
46
|
+
updated_at TEXT NOT NULL,
|
|
47
|
+
archived_at TEXT
|
|
48
|
+
);
|
|
49
|
+
|
|
50
50
|
`);
|
|
51
51
|
this.migrateProfileAliasTable();
|
|
52
52
|
this.migrateArchivedAtColumn();
|
|
@@ -146,31 +146,31 @@ export class CustomAgentStore {
|
|
|
146
146
|
updatedAt: new Date().toISOString(),
|
|
147
147
|
};
|
|
148
148
|
this.db
|
|
149
|
-
.prepare(`
|
|
150
|
-
UPDATE chat_agents SET
|
|
151
|
-
profile_name = ?,
|
|
152
|
-
display_name = ?,
|
|
153
|
-
description = ?,
|
|
154
|
-
native_tools_json = ?,
|
|
155
|
-
skills_json = ?,
|
|
156
|
-
context_files_json = ?,
|
|
157
|
-
subagents_json = ?,
|
|
158
|
-
mcp_servers_json = ?,
|
|
159
|
-
pi_packages_json = ?,
|
|
160
|
-
main_model_json = ?,
|
|
161
|
-
subagent_model_json = ?,
|
|
162
|
-
thinking_level = ?,
|
|
163
|
-
main_thinking_level = ?,
|
|
164
|
-
subagent_thinking_level = ?,
|
|
165
|
-
fast = ?,
|
|
166
|
-
main_fast = ?,
|
|
167
|
-
subagent_fast = ?,
|
|
168
|
-
builtin_tools = ?,
|
|
169
|
-
builtin_tool_names_json = ?,
|
|
170
|
-
auto_context_files = ?,
|
|
171
|
-
run_control = ?,
|
|
172
|
-
updated_at = ?
|
|
173
|
-
WHERE id = ?
|
|
149
|
+
.prepare(`
|
|
150
|
+
UPDATE chat_agents SET
|
|
151
|
+
profile_name = ?,
|
|
152
|
+
display_name = ?,
|
|
153
|
+
description = ?,
|
|
154
|
+
native_tools_json = ?,
|
|
155
|
+
skills_json = ?,
|
|
156
|
+
context_files_json = ?,
|
|
157
|
+
subagents_json = ?,
|
|
158
|
+
mcp_servers_json = ?,
|
|
159
|
+
pi_packages_json = ?,
|
|
160
|
+
main_model_json = ?,
|
|
161
|
+
subagent_model_json = ?,
|
|
162
|
+
thinking_level = ?,
|
|
163
|
+
main_thinking_level = ?,
|
|
164
|
+
subagent_thinking_level = ?,
|
|
165
|
+
fast = ?,
|
|
166
|
+
main_fast = ?,
|
|
167
|
+
subagent_fast = ?,
|
|
168
|
+
builtin_tools = ?,
|
|
169
|
+
builtin_tool_names_json = ?,
|
|
170
|
+
auto_context_files = ?,
|
|
171
|
+
run_control = ?,
|
|
172
|
+
updated_at = ?
|
|
173
|
+
WHERE id = ?
|
|
174
174
|
`)
|
|
175
175
|
.run(updated.profileName, updated.displayName, updated.description ?? null, JSON.stringify(updated.nativeTools), JSON.stringify(updated.skills), JSON.stringify(updated.contextFiles), JSON.stringify(sanitizeSubagents(updated.subagents)), JSON.stringify(updated.mcpServers), JSON.stringify(updated.piPackages), updated.mainModel ? JSON.stringify(updated.mainModel) : null, updated.subagentModel ? JSON.stringify(updated.subagentModel) : null, updated.thinkingLevel ?? null, updated.mainThinkingLevel ?? null, updated.subagentThinkingLevel ?? null, serializeBoolean(updated.fast), serializeBoolean(updated.mainFast), serializeBoolean(updated.subagentFast), updated.builtinTools, JSON.stringify(updated.builtinToolNames), updated.autoContextFiles ? 1 : 0, updated.runControl ? 1 : 0, updated.updatedAt, id);
|
|
176
176
|
return this.get(id);
|
|
@@ -196,34 +196,34 @@ export class CustomAgentStore {
|
|
|
196
196
|
}
|
|
197
197
|
insert(agent) {
|
|
198
198
|
this.db
|
|
199
|
-
.prepare(`
|
|
200
|
-
INSERT INTO chat_agents (
|
|
201
|
-
id,
|
|
202
|
-
profile_name,
|
|
203
|
-
display_name,
|
|
204
|
-
description,
|
|
205
|
-
native_tools_json,
|
|
206
|
-
skills_json,
|
|
207
|
-
context_files_json,
|
|
208
|
-
subagents_json,
|
|
209
|
-
mcp_servers_json,
|
|
210
|
-
pi_packages_json,
|
|
211
|
-
main_model_json,
|
|
212
|
-
subagent_model_json,
|
|
213
|
-
thinking_level,
|
|
214
|
-
main_thinking_level,
|
|
215
|
-
subagent_thinking_level,
|
|
216
|
-
fast,
|
|
217
|
-
main_fast,
|
|
218
|
-
subagent_fast,
|
|
219
|
-
builtin_tools,
|
|
220
|
-
builtin_tool_names_json,
|
|
221
|
-
auto_context_files,
|
|
222
|
-
run_control,
|
|
223
|
-
created_at,
|
|
224
|
-
updated_at,
|
|
225
|
-
archived_at
|
|
226
|
-
) VALUES (${Array.from({ length: 25 }, () => "?").join(", ")})
|
|
199
|
+
.prepare(`
|
|
200
|
+
INSERT INTO chat_agents (
|
|
201
|
+
id,
|
|
202
|
+
profile_name,
|
|
203
|
+
display_name,
|
|
204
|
+
description,
|
|
205
|
+
native_tools_json,
|
|
206
|
+
skills_json,
|
|
207
|
+
context_files_json,
|
|
208
|
+
subagents_json,
|
|
209
|
+
mcp_servers_json,
|
|
210
|
+
pi_packages_json,
|
|
211
|
+
main_model_json,
|
|
212
|
+
subagent_model_json,
|
|
213
|
+
thinking_level,
|
|
214
|
+
main_thinking_level,
|
|
215
|
+
subagent_thinking_level,
|
|
216
|
+
fast,
|
|
217
|
+
main_fast,
|
|
218
|
+
subagent_fast,
|
|
219
|
+
builtin_tools,
|
|
220
|
+
builtin_tool_names_json,
|
|
221
|
+
auto_context_files,
|
|
222
|
+
run_control,
|
|
223
|
+
created_at,
|
|
224
|
+
updated_at,
|
|
225
|
+
archived_at
|
|
226
|
+
) VALUES (${Array.from({ length: 25 }, () => "?").join(", ")})
|
|
227
227
|
`)
|
|
228
228
|
.run(agent.id, agent.profileName, agent.displayName, agent.description ?? null, JSON.stringify(agent.nativeTools), JSON.stringify(agent.skills), JSON.stringify(agent.contextFiles), JSON.stringify(sanitizeSubagents(agent.subagents)), JSON.stringify(agent.mcpServers), JSON.stringify(agent.piPackages), agent.mainModel ? JSON.stringify(agent.mainModel) : null, agent.subagentModel ? JSON.stringify(agent.subagentModel) : null, agent.thinkingLevel ?? null, agent.mainThinkingLevel ?? null, agent.subagentThinkingLevel ?? null, serializeBoolean(agent.fast), serializeBoolean(agent.mainFast), serializeBoolean(agent.subagentFast), agent.builtinTools, JSON.stringify(agent.builtinToolNames), agent.autoContextFiles ? 1 : 0, agent.runControl ? 1 : 0, agent.createdAt, agent.updatedAt, agent.archivedAt ?? null);
|
|
229
229
|
}
|
|
@@ -276,42 +276,42 @@ export class CustomAgentStore {
|
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
278
|
migrateProfileAliasTable() {
|
|
279
|
-
this.db.exec(`
|
|
280
|
-
CREATE TABLE IF NOT EXISTS chat_agent_profile_aliases (
|
|
281
|
-
id TEXT PRIMARY KEY,
|
|
282
|
-
agent_id TEXT NOT NULL,
|
|
283
|
-
old_profile_name TEXT NOT NULL UNIQUE,
|
|
284
|
-
new_profile_name TEXT NOT NULL,
|
|
285
|
-
created_at TEXT NOT NULL,
|
|
286
|
-
FOREIGN KEY(agent_id) REFERENCES chat_agents(id) ON DELETE CASCADE
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
CREATE TRIGGER IF NOT EXISTS chat_agents_profile_alias_insert
|
|
290
|
-
AFTER UPDATE OF profile_name ON chat_agents
|
|
291
|
-
WHEN OLD.profile_name IS NOT NEW.profile_name
|
|
292
|
-
BEGIN
|
|
293
|
-
INSERT INTO chat_agent_profile_aliases (
|
|
294
|
-
id,
|
|
295
|
-
agent_id,
|
|
296
|
-
old_profile_name,
|
|
297
|
-
new_profile_name,
|
|
298
|
-
created_at
|
|
299
|
-
) VALUES (
|
|
300
|
-
'alias_' || lower(hex(randomblob(16))),
|
|
301
|
-
NEW.id,
|
|
302
|
-
OLD.profile_name,
|
|
303
|
-
NEW.profile_name,
|
|
304
|
-
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
305
|
-
)
|
|
306
|
-
ON CONFLICT(old_profile_name) DO UPDATE SET
|
|
307
|
-
agent_id = excluded.agent_id,
|
|
308
|
-
new_profile_name = excluded.new_profile_name,
|
|
309
|
-
created_at = excluded.created_at
|
|
310
|
-
WHERE chat_agent_profile_aliases.agent_id = excluded.agent_id;
|
|
311
|
-
|
|
312
|
-
DELETE FROM chat_agent_profile_aliases
|
|
313
|
-
WHERE agent_id = NEW.id AND old_profile_name = NEW.profile_name;
|
|
314
|
-
END;
|
|
279
|
+
this.db.exec(`
|
|
280
|
+
CREATE TABLE IF NOT EXISTS chat_agent_profile_aliases (
|
|
281
|
+
id TEXT PRIMARY KEY,
|
|
282
|
+
agent_id TEXT NOT NULL,
|
|
283
|
+
old_profile_name TEXT NOT NULL UNIQUE,
|
|
284
|
+
new_profile_name TEXT NOT NULL,
|
|
285
|
+
created_at TEXT NOT NULL,
|
|
286
|
+
FOREIGN KEY(agent_id) REFERENCES chat_agents(id) ON DELETE CASCADE
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
CREATE TRIGGER IF NOT EXISTS chat_agents_profile_alias_insert
|
|
290
|
+
AFTER UPDATE OF profile_name ON chat_agents
|
|
291
|
+
WHEN OLD.profile_name IS NOT NEW.profile_name
|
|
292
|
+
BEGIN
|
|
293
|
+
INSERT INTO chat_agent_profile_aliases (
|
|
294
|
+
id,
|
|
295
|
+
agent_id,
|
|
296
|
+
old_profile_name,
|
|
297
|
+
new_profile_name,
|
|
298
|
+
created_at
|
|
299
|
+
) VALUES (
|
|
300
|
+
'alias_' || lower(hex(randomblob(16))),
|
|
301
|
+
NEW.id,
|
|
302
|
+
OLD.profile_name,
|
|
303
|
+
NEW.profile_name,
|
|
304
|
+
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
305
|
+
)
|
|
306
|
+
ON CONFLICT(old_profile_name) DO UPDATE SET
|
|
307
|
+
agent_id = excluded.agent_id,
|
|
308
|
+
new_profile_name = excluded.new_profile_name,
|
|
309
|
+
created_at = excluded.created_at
|
|
310
|
+
WHERE chat_agent_profile_aliases.agent_id = excluded.agent_id;
|
|
311
|
+
|
|
312
|
+
DELETE FROM chat_agent_profile_aliases
|
|
313
|
+
WHERE agent_id = NEW.id AND old_profile_name = NEW.profile_name;
|
|
314
|
+
END;
|
|
315
315
|
`);
|
|
316
316
|
}
|
|
317
317
|
tableColumns() {
|
|
@@ -381,136 +381,136 @@ export class CustomAgentStore {
|
|
|
381
381
|
}
|
|
382
382
|
}
|
|
383
383
|
migrateAgentHistory() {
|
|
384
|
-
this.db.exec(`
|
|
385
|
-
CREATE TABLE IF NOT EXISTS chat_agent_events (
|
|
386
|
-
id TEXT PRIMARY KEY,
|
|
387
|
-
agent_id TEXT NOT NULL,
|
|
388
|
-
event_type TEXT NOT NULL CHECK (event_type IN ('updated', 'deleted')),
|
|
389
|
-
field_name TEXT,
|
|
390
|
-
old_value TEXT,
|
|
391
|
-
new_value TEXT,
|
|
392
|
-
old_profile_name TEXT,
|
|
393
|
-
new_profile_name TEXT,
|
|
394
|
-
old_display_name TEXT,
|
|
395
|
-
new_display_name TEXT,
|
|
396
|
-
recorded_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
397
|
-
);
|
|
398
|
-
|
|
399
|
-
CREATE INDEX IF NOT EXISTS chat_agent_events_agent_id_idx
|
|
400
|
-
ON chat_agent_events(agent_id, recorded_at);
|
|
401
|
-
|
|
402
|
-
CREATE INDEX IF NOT EXISTS chat_agent_events_profile_name_idx
|
|
403
|
-
ON chat_agent_events(old_profile_name, new_profile_name, recorded_at);
|
|
404
|
-
|
|
405
|
-
CREATE TRIGGER IF NOT EXISTS chat_agents_profile_name_history_update
|
|
406
|
-
AFTER UPDATE OF profile_name ON chat_agents
|
|
407
|
-
FOR EACH ROW
|
|
408
|
-
WHEN OLD.profile_name IS NOT NEW.profile_name
|
|
409
|
-
BEGIN
|
|
410
|
-
INSERT INTO chat_agent_events (
|
|
411
|
-
id,
|
|
412
|
-
agent_id,
|
|
413
|
-
event_type,
|
|
414
|
-
field_name,
|
|
415
|
-
old_value,
|
|
416
|
-
new_value,
|
|
417
|
-
old_profile_name,
|
|
418
|
-
new_profile_name,
|
|
419
|
-
old_display_name,
|
|
420
|
-
new_display_name,
|
|
421
|
-
recorded_at
|
|
422
|
-
) VALUES (
|
|
423
|
-
'agent_event_' || lower(hex(randomblob(16))),
|
|
424
|
-
NEW.id,
|
|
425
|
-
'updated',
|
|
426
|
-
'profile_name',
|
|
427
|
-
OLD.profile_name,
|
|
428
|
-
NEW.profile_name,
|
|
429
|
-
OLD.profile_name,
|
|
430
|
-
NEW.profile_name,
|
|
431
|
-
OLD.display_name,
|
|
432
|
-
NEW.display_name,
|
|
433
|
-
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
434
|
-
);
|
|
435
|
-
END;
|
|
436
|
-
|
|
437
|
-
CREATE TRIGGER IF NOT EXISTS chat_agents_display_name_history_update
|
|
438
|
-
AFTER UPDATE OF display_name ON chat_agents
|
|
439
|
-
FOR EACH ROW
|
|
440
|
-
WHEN OLD.display_name IS NOT NEW.display_name
|
|
441
|
-
BEGIN
|
|
442
|
-
INSERT INTO chat_agent_events (
|
|
443
|
-
id,
|
|
444
|
-
agent_id,
|
|
445
|
-
event_type,
|
|
446
|
-
field_name,
|
|
447
|
-
old_value,
|
|
448
|
-
new_value,
|
|
449
|
-
old_profile_name,
|
|
450
|
-
new_profile_name,
|
|
451
|
-
old_display_name,
|
|
452
|
-
new_display_name,
|
|
453
|
-
recorded_at
|
|
454
|
-
) VALUES (
|
|
455
|
-
'agent_event_' || lower(hex(randomblob(16))),
|
|
456
|
-
NEW.id,
|
|
457
|
-
'updated',
|
|
458
|
-
'display_name',
|
|
459
|
-
OLD.display_name,
|
|
460
|
-
NEW.display_name,
|
|
461
|
-
OLD.profile_name,
|
|
462
|
-
NEW.profile_name,
|
|
463
|
-
OLD.display_name,
|
|
464
|
-
NEW.display_name,
|
|
465
|
-
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
466
|
-
);
|
|
467
|
-
END;
|
|
468
|
-
|
|
469
|
-
CREATE TRIGGER IF NOT EXISTS chat_agents_history_delete
|
|
470
|
-
AFTER DELETE ON chat_agents
|
|
471
|
-
FOR EACH ROW
|
|
472
|
-
BEGIN
|
|
473
|
-
INSERT INTO chat_agent_events (
|
|
474
|
-
id,
|
|
475
|
-
agent_id,
|
|
476
|
-
event_type,
|
|
477
|
-
field_name,
|
|
478
|
-
old_value,
|
|
479
|
-
new_value,
|
|
480
|
-
old_profile_name,
|
|
481
|
-
new_profile_name,
|
|
482
|
-
old_display_name,
|
|
483
|
-
new_display_name,
|
|
484
|
-
recorded_at
|
|
485
|
-
) VALUES (
|
|
486
|
-
'agent_event_' || lower(hex(randomblob(16))),
|
|
487
|
-
OLD.id,
|
|
488
|
-
'deleted',
|
|
489
|
-
NULL,
|
|
490
|
-
OLD.profile_name,
|
|
491
|
-
NULL,
|
|
492
|
-
OLD.profile_name,
|
|
493
|
-
NULL,
|
|
494
|
-
OLD.display_name,
|
|
495
|
-
NULL,
|
|
496
|
-
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
497
|
-
);
|
|
498
|
-
END;
|
|
499
|
-
|
|
500
|
-
CREATE VIEW IF NOT EXISTS chat_agent_history AS
|
|
501
|
-
SELECT
|
|
502
|
-
id,
|
|
503
|
-
agent_id,
|
|
504
|
-
event_type,
|
|
505
|
-
field_name,
|
|
506
|
-
old_value,
|
|
507
|
-
new_value,
|
|
508
|
-
old_profile_name,
|
|
509
|
-
new_profile_name,
|
|
510
|
-
old_display_name,
|
|
511
|
-
new_display_name,
|
|
512
|
-
recorded_at
|
|
513
|
-
FROM chat_agent_events;
|
|
384
|
+
this.db.exec(`
|
|
385
|
+
CREATE TABLE IF NOT EXISTS chat_agent_events (
|
|
386
|
+
id TEXT PRIMARY KEY,
|
|
387
|
+
agent_id TEXT NOT NULL,
|
|
388
|
+
event_type TEXT NOT NULL CHECK (event_type IN ('updated', 'deleted')),
|
|
389
|
+
field_name TEXT,
|
|
390
|
+
old_value TEXT,
|
|
391
|
+
new_value TEXT,
|
|
392
|
+
old_profile_name TEXT,
|
|
393
|
+
new_profile_name TEXT,
|
|
394
|
+
old_display_name TEXT,
|
|
395
|
+
new_display_name TEXT,
|
|
396
|
+
recorded_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
CREATE INDEX IF NOT EXISTS chat_agent_events_agent_id_idx
|
|
400
|
+
ON chat_agent_events(agent_id, recorded_at);
|
|
401
|
+
|
|
402
|
+
CREATE INDEX IF NOT EXISTS chat_agent_events_profile_name_idx
|
|
403
|
+
ON chat_agent_events(old_profile_name, new_profile_name, recorded_at);
|
|
404
|
+
|
|
405
|
+
CREATE TRIGGER IF NOT EXISTS chat_agents_profile_name_history_update
|
|
406
|
+
AFTER UPDATE OF profile_name ON chat_agents
|
|
407
|
+
FOR EACH ROW
|
|
408
|
+
WHEN OLD.profile_name IS NOT NEW.profile_name
|
|
409
|
+
BEGIN
|
|
410
|
+
INSERT INTO chat_agent_events (
|
|
411
|
+
id,
|
|
412
|
+
agent_id,
|
|
413
|
+
event_type,
|
|
414
|
+
field_name,
|
|
415
|
+
old_value,
|
|
416
|
+
new_value,
|
|
417
|
+
old_profile_name,
|
|
418
|
+
new_profile_name,
|
|
419
|
+
old_display_name,
|
|
420
|
+
new_display_name,
|
|
421
|
+
recorded_at
|
|
422
|
+
) VALUES (
|
|
423
|
+
'agent_event_' || lower(hex(randomblob(16))),
|
|
424
|
+
NEW.id,
|
|
425
|
+
'updated',
|
|
426
|
+
'profile_name',
|
|
427
|
+
OLD.profile_name,
|
|
428
|
+
NEW.profile_name,
|
|
429
|
+
OLD.profile_name,
|
|
430
|
+
NEW.profile_name,
|
|
431
|
+
OLD.display_name,
|
|
432
|
+
NEW.display_name,
|
|
433
|
+
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
434
|
+
);
|
|
435
|
+
END;
|
|
436
|
+
|
|
437
|
+
CREATE TRIGGER IF NOT EXISTS chat_agents_display_name_history_update
|
|
438
|
+
AFTER UPDATE OF display_name ON chat_agents
|
|
439
|
+
FOR EACH ROW
|
|
440
|
+
WHEN OLD.display_name IS NOT NEW.display_name
|
|
441
|
+
BEGIN
|
|
442
|
+
INSERT INTO chat_agent_events (
|
|
443
|
+
id,
|
|
444
|
+
agent_id,
|
|
445
|
+
event_type,
|
|
446
|
+
field_name,
|
|
447
|
+
old_value,
|
|
448
|
+
new_value,
|
|
449
|
+
old_profile_name,
|
|
450
|
+
new_profile_name,
|
|
451
|
+
old_display_name,
|
|
452
|
+
new_display_name,
|
|
453
|
+
recorded_at
|
|
454
|
+
) VALUES (
|
|
455
|
+
'agent_event_' || lower(hex(randomblob(16))),
|
|
456
|
+
NEW.id,
|
|
457
|
+
'updated',
|
|
458
|
+
'display_name',
|
|
459
|
+
OLD.display_name,
|
|
460
|
+
NEW.display_name,
|
|
461
|
+
OLD.profile_name,
|
|
462
|
+
NEW.profile_name,
|
|
463
|
+
OLD.display_name,
|
|
464
|
+
NEW.display_name,
|
|
465
|
+
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
466
|
+
);
|
|
467
|
+
END;
|
|
468
|
+
|
|
469
|
+
CREATE TRIGGER IF NOT EXISTS chat_agents_history_delete
|
|
470
|
+
AFTER DELETE ON chat_agents
|
|
471
|
+
FOR EACH ROW
|
|
472
|
+
BEGIN
|
|
473
|
+
INSERT INTO chat_agent_events (
|
|
474
|
+
id,
|
|
475
|
+
agent_id,
|
|
476
|
+
event_type,
|
|
477
|
+
field_name,
|
|
478
|
+
old_value,
|
|
479
|
+
new_value,
|
|
480
|
+
old_profile_name,
|
|
481
|
+
new_profile_name,
|
|
482
|
+
old_display_name,
|
|
483
|
+
new_display_name,
|
|
484
|
+
recorded_at
|
|
485
|
+
) VALUES (
|
|
486
|
+
'agent_event_' || lower(hex(randomblob(16))),
|
|
487
|
+
OLD.id,
|
|
488
|
+
'deleted',
|
|
489
|
+
NULL,
|
|
490
|
+
OLD.profile_name,
|
|
491
|
+
NULL,
|
|
492
|
+
OLD.profile_name,
|
|
493
|
+
NULL,
|
|
494
|
+
OLD.display_name,
|
|
495
|
+
NULL,
|
|
496
|
+
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
497
|
+
);
|
|
498
|
+
END;
|
|
499
|
+
|
|
500
|
+
CREATE VIEW IF NOT EXISTS chat_agent_history AS
|
|
501
|
+
SELECT
|
|
502
|
+
id,
|
|
503
|
+
agent_id,
|
|
504
|
+
event_type,
|
|
505
|
+
field_name,
|
|
506
|
+
old_value,
|
|
507
|
+
new_value,
|
|
508
|
+
old_profile_name,
|
|
509
|
+
new_profile_name,
|
|
510
|
+
old_display_name,
|
|
511
|
+
new_display_name,
|
|
512
|
+
recorded_at
|
|
513
|
+
FROM chat_agent_events;
|
|
514
514
|
`);
|
|
515
515
|
}
|
|
516
516
|
}
|