@selesai/code 0.5.29 → 0.6.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 (94) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -1
  3. package/dist/config.d.ts +16 -3
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +106 -5
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/system-prompt.d.ts.map +1 -1
  8. package/dist/core/system-prompt.js +18 -0
  9. package/dist/core/system-prompt.js.map +1 -1
  10. package/dist/core/system-prompt.test.d.ts +2 -0
  11. package/dist/core/system-prompt.test.d.ts.map +1 -0
  12. package/dist/core/system-prompt.test.js +89 -0
  13. package/dist/core/system-prompt.test.js.map +1 -0
  14. package/dist/defaults/models.json +13 -45
  15. package/dist/defaults/settings.json +5 -7
  16. package/dist/extensions/copy-turn.test.ts +131 -0
  17. package/dist/extensions/copy-turn.ts +6 -1
  18. package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  19. package/dist/extensions/package.json +0 -1
  20. package/dist/extensions/pi-subagents/CHANGELOG.md +3 -0
  21. package/dist/extensions/pi-subagents/README.md +27 -32
  22. package/dist/extensions/pi-subagents/agents/architect.md +4 -4
  23. package/dist/extensions/pi-subagents/agents/builder.md +5 -4
  24. package/dist/extensions/pi-subagents/agents/commentator.md +3 -2
  25. package/dist/extensions/pi-subagents/agents/explorer.md +3 -2
  26. package/dist/extensions/pi-subagents/agents/recapper.md +3 -2
  27. package/dist/extensions/pi-subagents/agents/researcher.md +4 -3
  28. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +2 -0
  29. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +10 -9
  30. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +12 -11
  31. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +10 -11
  32. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +56 -9
  33. package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +125 -0
  34. package/dist/extensions/pi-subagents/src/api/preflight.ts +1 -1
  35. package/dist/extensions/pi-subagents/src/extension/index.ts +5 -1
  36. package/dist/extensions/pi-subagents/src/extension/schemas.ts +2 -2
  37. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +24 -7
  38. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +23 -5
  39. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +27 -1
  40. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +64 -6
  41. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +16 -1
  42. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +72 -18
  43. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +19 -5
  44. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +127 -31
  45. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +4 -6
  46. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +63 -9
  47. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -0
  48. package/dist/extensions/pi-subagents/src/shared/types.ts +41 -2
  49. package/dist/extensions/pi-subagents/src/shared/utils.ts +29 -1
  50. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +5 -1
  51. package/dist/extensions/pi-subagents/src/tui/render.ts +32 -6
  52. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +111 -6
  53. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +74 -43
  54. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +36 -21
  55. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +5 -3
  56. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +20 -8
  57. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +14 -7
  58. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +227 -0
  59. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +81 -5
  60. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +49 -10
  61. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +18 -2
  62. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
  63. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +70 -6
  64. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +161 -1
  65. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +63 -0
  66. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +34 -0
  67. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +24 -0
  68. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +6 -1
  69. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +29 -0
  70. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +2 -0
  71. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +12 -0
  72. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +91 -1
  73. package/dist/extensions/pi-subagents/test/unit/task-aware-routing.test.ts +213 -0
  74. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +23 -1
  75. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +60 -9
  76. package/dist/extensions/pi-web-agent/package.json +1 -1
  77. package/dist/skills/pi-subagents/SKILL.md +43 -0
  78. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +257 -0
  79. package/dist/skills/pi-subagents/references/execution-controls.md +431 -0
  80. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +144 -0
  81. package/dist/skills/pi-subagents/references/prompting-and-roles.md +281 -0
  82. package/dist/skills/ponytail/SKILL.md +1 -3
  83. package/docs/plans/subagent-delegation/phase-0-correctness.md +265 -0
  84. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +486 -0
  85. package/docs/plans/subagent-delegation/phase-2-context-controls.md +282 -0
  86. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +362 -0
  87. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +381 -0
  88. package/package.json +2 -2
  89. package/dist/extensions/caveman/caveman-instructions.cjs +0 -11
  90. package/dist/extensions/caveman/index.js +0 -118
  91. package/dist/extensions/caveman/package.json +0 -8
  92. package/dist/extensions/caveman/test/extension.test.js +0 -203
  93. package/dist/extensions/caveman/test/helpers.test.js +0 -58
  94. package/dist/skills/caveman/SKILL.md +0 -50
@@ -1,203 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
-
4
- import cavemanExtension from "../index.js";
5
-
6
- function createPiHarness() {
7
- const events = new Map();
8
- const commands = new Map();
9
- const appendedEntries = [];
10
- const sentUserMessages = [];
11
-
12
- const pi = {
13
- on(eventName, handler) { events.set(eventName, handler); },
14
- registerCommand(name, options) { commands.set(name, options); },
15
- appendEntry(customType, data) { appendedEntries.push({ customType, data }); },
16
- sendUserMessage(text, options) { sentUserMessages.push({ text, options }); },
17
- };
18
-
19
- cavemanExtension(pi);
20
- return { events, commands, appendedEntries, sentUserMessages };
21
- }
22
-
23
- function createCommandContext(overrides = {}) {
24
- return {
25
- isIdle: () => true,
26
- sessionManager: { getEntries: () => [] },
27
- ui: { notify() {} },
28
- ...overrides,
29
- };
30
- }
31
-
32
- test("extension registers the /caveman command", () => {
33
- const { commands } = createPiHarness();
34
- assert.deepEqual([...commands.keys()], ["caveman"]);
35
- });
36
-
37
- test("/caveman on/off appends a caveman-mode entry", async () => {
38
- const { commands, events, appendedEntries } = createPiHarness();
39
- const ctx = createCommandContext();
40
-
41
- await events.get("session_start")({ reason: "startup" }, ctx);
42
- await commands.get("caveman").handler("off", ctx);
43
-
44
- assert.deepEqual(appendedEntries.at(-1), { customType: "caveman-mode", data: { active: false } });
45
-
46
- await commands.get("caveman").handler("on", ctx);
47
- assert.deepEqual(appendedEntries.at(-1), { customType: "caveman-mode", data: { active: true } });
48
- });
49
-
50
- test("bare /caveman toggles off then back on", async () => {
51
- const { commands, events, appendedEntries } = createPiHarness();
52
- const ctx = createCommandContext();
53
-
54
- await events.get("session_start")({ reason: "startup" }, ctx); // starts on
55
- await commands.get("caveman").handler("", ctx);
56
- assert.equal(appendedEntries.at(-1).data.active, false);
57
- await commands.get("caveman").handler("", ctx);
58
- assert.equal(appendedEntries.at(-1).data.active, true);
59
- });
60
-
61
- test("before_agent_start injects instructions while active", async () => {
62
- const { events } = createPiHarness();
63
- const ctx = createCommandContext();
64
-
65
- await events.get("session_start")({ reason: "startup" }, ctx);
66
- const result = await events.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
67
-
68
- assert.ok(result.systemPrompt.startsWith("BASE"));
69
- assert.ok(result.systemPrompt.includes("CAVEMAN MODE ACTIVE"));
70
- });
71
-
72
- test("disabled caveman skips instruction injection", async () => {
73
- const { commands, events } = createPiHarness();
74
- const ctx = createCommandContext();
75
-
76
- await events.get("session_start")({ reason: "startup" }, ctx);
77
- await commands.get("caveman").handler("off", ctx);
78
- const result = await events.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
79
-
80
- assert.equal(result, undefined);
81
- });
82
-
83
- test("session_start restores persisted OFF state", async () => {
84
- const { events } = createPiHarness();
85
- const ctx = createCommandContext({
86
- sessionManager: {
87
- getBranch: () => [
88
- { type: "custom", customType: "caveman-mode", data: { active: false } },
89
- ],
90
- getEntries: () => [
91
- { type: "custom", customType: "caveman-mode", data: { active: true } },
92
- ],
93
- },
94
- });
95
-
96
- await events.get("session_start")({ reason: "resume" }, ctx);
97
- const result = await events.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
98
-
99
- assert.equal(result, undefined);
100
- });
101
-
102
- test("session_start defaults to ON when no persisted entry exists", async () => {
103
- const { commands, events } = createPiHarness();
104
- const ctx = createCommandContext();
105
-
106
- await events.get("session_start")({ reason: "startup" }, ctx);
107
- await commands.get("caveman").handler("off", ctx);
108
-
109
- // Simulate a fresh session_start (new harness = fresh active state)
110
- const { events: events2 } = createPiHarness();
111
- await events2.get("session_start")({ reason: "new" }, ctx);
112
- const result = await events2.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
113
-
114
- assert.ok(result.systemPrompt.includes("CAVEMAN MODE ACTIVE"));
115
- });
116
-
117
- test("'stop caveman' as a whole message deactivates mid-session", async () => {
118
- const { events } = createPiHarness();
119
- const ctx = createCommandContext();
120
-
121
- await events.get("session_start")({ reason: "startup" }, ctx);
122
- await events.get("input")({ text: "stop caveman", source: "interactive" }, ctx);
123
-
124
- const result = await events.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
125
- assert.equal(result, undefined);
126
- });
127
-
128
- test("a request merely mentioning 'stop caveman' stays active", async () => {
129
- const { events } = createPiHarness();
130
- const ctx = createCommandContext();
131
-
132
- await events.get("session_start")({ reason: "startup" }, ctx);
133
- await events.get("input")({ text: "how do I stop caveman re-rendering?", source: "interactive" }, ctx);
134
-
135
- const result = await events.get("before_agent_start")({ systemPrompt: "BASE" }, ctx);
136
- assert.ok(result.systemPrompt.includes("CAVEMAN MODE ACTIVE"));
137
- });
138
-
139
- test("status bar renders ON and flips active on agent_start", async () => {
140
- const { events } = createPiHarness();
141
- const statusWrites = [];
142
- const ctx = createCommandContext({
143
- sessionManager: { getEntries: () => [] },
144
- ui: { notify() {}, setStatus: (key, text) => statusWrites.push({ key, text }), theme: { fg: (_c, t) => t } },
145
- });
146
-
147
- await events.get("session_start")({ reason: "startup" }, ctx);
148
- await events.get("agent_start")({}, ctx);
149
-
150
- assert.equal(statusWrites.at(-2).key, "caveman");
151
- assert.match(statusWrites.at(-2).text, /○.*ON/);
152
- assert.match(statusWrites.at(-1).text, /●.*ON/);
153
- });
154
-
155
- test("status bar clears when disabled", async () => {
156
- const { events, commands } = createPiHarness();
157
- const statusWrites = [];
158
- const ctx = createCommandContext({
159
- ui: { notify() {}, setStatus: (key, text) => statusWrites.push({ key, text }), theme: { fg: (_c, t) => t } },
160
- });
161
-
162
- await events.get("session_start")({ reason: "startup" }, ctx);
163
- await commands.get("caveman").handler("off", ctx);
164
-
165
- assert.deepEqual(statusWrites.at(-1), { key: "caveman", text: "" });
166
- });
167
-
168
- test("status bar stays silent when ui lacks a theme", async () => {
169
- const { events } = createPiHarness();
170
- const calls = [];
171
- const ctx = createCommandContext({
172
- sessionManager: { getEntries: () => [] },
173
- ui: { notify() {}, setStatus: (_key, text) => calls.push(text) }, // no theme
174
- });
175
-
176
- await events.get("session_start")({ reason: "startup" }, ctx);
177
- await events.get("agent_start")({}, ctx);
178
-
179
- assert.deepEqual(calls, []);
180
- });
181
-
182
- test("invalid subcommand notifies warning and does not append", async () => {
183
- const { commands, appendedEntries } = createPiHarness();
184
- let notified = null;
185
- const ctx = createCommandContext({ ui: { notify: (_m, kind) => { notified = kind; } } });
186
-
187
- await commands.get("caveman").handler("banana", ctx);
188
-
189
- assert.equal(notified, "warning");
190
- assert.equal(appendedEntries.length, 0);
191
- });
192
-
193
- test("status subcommand reports without changing state", async () => {
194
- const { commands, events, appendedEntries } = createPiHarness();
195
- let reported = null;
196
- const ctx = createCommandContext({ ui: { notify: (m) => { reported = m; } } });
197
-
198
- await events.get("session_start")({ reason: "startup" }, ctx); // starts on
199
- await commands.get("caveman").handler("status", ctx);
200
-
201
- assert.match(reported, /ON/);
202
- assert.equal(appendedEntries.length, 0);
203
- });
@@ -1,58 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
-
4
- import {
5
- getCavemanInstructions,
6
- isDeactivationCommand,
7
- parseCavemanCommand,
8
- resolveSessionActive,
9
- } from "../index.js";
10
-
11
- test("parseCavemanCommand: bare toggles", () => {
12
- assert.deepEqual(parseCavemanCommand(""), { type: "toggle" });
13
- assert.deepEqual(parseCavemanCommand(" "), { type: "toggle" });
14
- });
15
-
16
- test("parseCavemanCommand: on/off/status", () => {
17
- assert.deepEqual(parseCavemanCommand("on"), { type: "set", active: true });
18
- assert.deepEqual(parseCavemanCommand("ENABLE"), { type: "set", active: true });
19
- assert.deepEqual(parseCavemanCommand("off"), { type: "set", active: false });
20
- assert.deepEqual(parseCavemanCommand("disable"), { type: "set", active: false });
21
- assert.deepEqual(parseCavemanCommand("status"), { type: "status" });
22
- });
23
-
24
- test("parseCavemanCommand: unknown arg is invalid", () => {
25
- assert.deepEqual(parseCavemanCommand("banana"), { type: "invalid", reason: "unknown-subcommand", arg: "banana" });
26
- });
27
-
28
- test("resolveSessionActive: returns last persisted boolean, defaults to true", () => {
29
- assert.equal(resolveSessionActive([]), true);
30
- assert.equal(resolveSessionActive([{ type: "custom", customType: "caveman-mode", data: { active: false } }]), false);
31
- assert.equal(resolveSessionActive([{ type: "custom", customType: "caveman-mode", data: { active: true } }]), true);
32
- assert.equal(resolveSessionActive([
33
- { type: "custom", customType: "caveman-mode", data: { active: false } },
34
- { type: "custom", customType: "caveman-mode", data: { active: true } },
35
- ]), true);
36
- assert.equal(resolveSessionActive([{ type: "custom", customType: "other", data: {} }]), true);
37
- assert.equal(resolveSessionActive(null), true);
38
- });
39
-
40
- test("isDeactivationCommand: only the whole message, case-insensitive, trailing punct ok", () => {
41
- assert.equal(isDeactivationCommand("stop caveman"), true);
42
- assert.equal(isDeactivationCommand("STOP CAVEMAN!"), true);
43
- assert.equal(isDeactivationCommand("normal mode"), true);
44
- assert.equal(isDeactivationCommand("Normal Mode."), true);
45
- assert.equal(isDeactivationCommand("add a normal mode toggle"), false);
46
- assert.equal(isDeactivationCommand("how do I stop caveman re-rendering"), false);
47
- });
48
-
49
- test("getCavemanInstructions returns the compact runtime prompt", () => {
50
- const instructions = getCavemanInstructions();
51
-
52
- assert.equal(instructions,
53
- "CAVEMAN MODE ACTIVE. Terse, technically complete: omit articles, filler, pleasantries, and hedging; fragments, short terms, standard abbreviations, and -> are OK. Preserve technical terms, code blocks, and quoted errors exactly. Use clear normal prose for security warnings, irreversible confirmations, risky multi-step instructions, or requested/repeated clarification; then resume terse mode.");
54
- assert.ok(!instructions.includes("Persistence"));
55
- assert.ok(!instructions.includes("stop caveman"));
56
- assert.ok(!instructions.includes("normal mode"));
57
- assert.ok(instructions.length < 400);
58
- });
@@ -1,50 +0,0 @@
1
- ---
2
- name: caveman
3
- description: >
4
- Ultra-compressed communication mode. Cuts token usage ~75% by dropping
5
- filler, articles, and pleasantries while keeping full technical accuracy.
6
- Use when user says "caveman mode", "talk like caveman", "use caveman",
7
- "less tokens", "be brief", or invokes /caveman.
8
- disable-model-invocation: true
9
- ---
10
-
11
- Respond terse like smart caveman. All technical substance stay. Only fluff die.
12
-
13
- ## Persistence
14
-
15
- ACTIVE EVERY RESPONSE once triggered. No revert after many turns. No filler drift. Still active if unsure. Off only when user says "stop caveman" or "normal mode".
16
-
17
- ## Rules
18
-
19
- Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Abbreviate common terms (DB/auth/config/req/res/fn/impl). Strip conjunctions. Use arrows for causality (X -> Y). One word when one word enough.
20
-
21
- Technical terms stay exact. Code blocks unchanged. Errors quoted exact.
22
-
23
- Pattern: `[thing] [action] [reason]. [next step].`
24
-
25
- Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
26
- Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
27
-
28
- ### Examples
29
-
30
- **"Why React component re-render?"**
31
-
32
- > Inline obj prop -> new ref -> re-render. `useMemo`.
33
-
34
- **"Explain database connection pooling."**
35
-
36
- > Pool = reuse DB conn. Skip handshake -> fast under load.
37
-
38
- ## Auto-Clarity Exception
39
-
40
- Drop caveman temporarily for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question. Resume caveman after clear part done.
41
-
42
- Example -- destructive op:
43
-
44
- > **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
45
- >
46
- > ```sql
47
- > DROP TABLE users;
48
- > ```
49
- >
50
- > Caveman resume. Verify backup exist first.