@markusylisiurunen/tau 0.2.35 → 0.2.37

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 (53) hide show
  1. package/README.md +63 -5
  2. package/dist/core/cli.js +20 -1
  3. package/dist/core/cli.js.map +1 -1
  4. package/dist/core/commands/registry.js +16 -0
  5. package/dist/core/commands/registry.js.map +1 -1
  6. package/dist/core/config/builtin_themes.js +31 -0
  7. package/dist/core/config/builtin_themes.js.map +1 -1
  8. package/dist/core/config/index.js +1 -1
  9. package/dist/core/config/index.js.map +1 -1
  10. package/dist/core/config/schema.js +24 -7
  11. package/dist/core/config/schema.js.map +1 -1
  12. package/dist/core/index.js +5 -2
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/core/modes/index.js +2 -0
  15. package/dist/core/modes/index.js.map +1 -1
  16. package/dist/core/modes/rpc_protocol.js +240 -0
  17. package/dist/core/modes/rpc_protocol.js.map +1 -0
  18. package/dist/core/modes/rpc_server.js +275 -0
  19. package/dist/core/modes/rpc_server.js.map +1 -0
  20. package/dist/core/runtime/chat_runtime.js +124 -0
  21. package/dist/core/runtime/chat_runtime.js.map +1 -0
  22. package/dist/core/runtime/conversation_turn_runtime.js +49 -0
  23. package/dist/core/runtime/conversation_turn_runtime.js.map +1 -0
  24. package/dist/core/runtime/session_prompt_composer.js +55 -0
  25. package/dist/core/runtime/session_prompt_composer.js.map +1 -0
  26. package/dist/core/utils/auto_retry.js +1 -1
  27. package/dist/core/utils/auto_retry.js.map +1 -1
  28. package/dist/core/version.js +1 -1
  29. package/dist/main.js +140 -5
  30. package/dist/main.js.map +1 -1
  31. package/dist/sdk/client.d.ts +2 -0
  32. package/dist/sdk/client.js +409 -0
  33. package/dist/sdk/client.js.map +1 -0
  34. package/dist/sdk/errors.d.ts +32 -0
  35. package/dist/sdk/errors.js +37 -0
  36. package/dist/sdk/errors.js.map +1 -0
  37. package/dist/sdk/index.d.ts +4 -0
  38. package/dist/sdk/index.js +3 -0
  39. package/dist/sdk/index.js.map +1 -0
  40. package/dist/sdk/types.d.ts +83 -0
  41. package/dist/sdk/types.js +2 -0
  42. package/dist/sdk/types.js.map +1 -0
  43. package/dist/tui/app.js.map +1 -1
  44. package/dist/tui/chat_controller.js +378 -101
  45. package/dist/tui/chat_controller.js.map +1 -1
  46. package/dist/tui/chat_view.js +59 -0
  47. package/dist/tui/chat_view.js.map +1 -1
  48. package/dist/tui/ui/custom_editor.js +12 -0
  49. package/dist/tui/ui/custom_editor.js.map +1 -1
  50. package/dist/tui/ui/theme/palette.js +1 -0
  51. package/dist/tui/ui/theme/palette.js.map +1 -1
  52. package/dist/tui/ui/theme/theme.js.map +1 -1
  53. package/package.json +11 -5
@@ -0,0 +1,275 @@
1
+ import { createInterface } from "node:readline";
2
+ import { wrapCoreEvent } from "../events/types.js";
3
+ import { createRpcErrorResponse, createRpcEventMessage, createRpcReadyMessage, createRpcSuccessResponse, parseRpcRequestLine, RPC_ERROR_CODES, RPC_METHODS, RPC_PROTOCOL_VERSION, serializeRpcMessage, } from "./rpc_protocol.js";
4
+ export class RpcServer {
5
+ runtime;
6
+ send;
7
+ unsubscribeSubagent;
8
+ activeSubmit;
9
+ initialized = false;
10
+ rpcShutdown = false;
11
+ closed = false;
12
+ constructor(options) {
13
+ this.runtime = options.runtime;
14
+ this.send = options.send;
15
+ this.unsubscribeSubagent = this.runtime.session.onSubagentEvent((event) => {
16
+ if (this.rpcShutdown || this.closed) {
17
+ return;
18
+ }
19
+ this.sendMessage(createRpcEventMessage(wrapCoreEvent(event)));
20
+ });
21
+ if (options.emitReadyOnStart ?? true) {
22
+ this.emitReady();
23
+ }
24
+ }
25
+ async handleLine(line) {
26
+ if (this.closed) {
27
+ return;
28
+ }
29
+ const parsed = parseRpcRequestLine(line);
30
+ if (!parsed.ok) {
31
+ this.sendParseFailure(parsed);
32
+ return;
33
+ }
34
+ const request = parsed.request;
35
+ if (this.rpcShutdown && request.method !== "initialize") {
36
+ this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.invalidRequest, "rpc server is shut down"));
37
+ return;
38
+ }
39
+ try {
40
+ switch (request.method) {
41
+ case "initialize":
42
+ this.handleInitialize(request);
43
+ return;
44
+ case "session.submit":
45
+ await this.handleSubmit(request);
46
+ return;
47
+ case "session.interrupt":
48
+ this.handleInterrupt(request);
49
+ return;
50
+ case "session.snapshot":
51
+ this.handleSnapshot(request);
52
+ return;
53
+ case "session.reset":
54
+ await this.handleReset(request);
55
+ return;
56
+ case "session.shutdown":
57
+ await this.handleShutdown(request);
58
+ return;
59
+ }
60
+ }
61
+ catch (error) {
62
+ this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.internalError, "rpc request failed", {
63
+ cause: error instanceof Error ? error.message : String(error),
64
+ }));
65
+ }
66
+ }
67
+ async close(options = {}) {
68
+ if (this.closed) {
69
+ return;
70
+ }
71
+ this.closed = true;
72
+ this.unsubscribeSubagentListener();
73
+ if (options.interruptActiveSubmit && (this.activeSubmit || this.runtime.isTurnRunning)) {
74
+ this.runtime.interruptTurn();
75
+ }
76
+ }
77
+ async shutdown(options = {}) {
78
+ await this.close(options);
79
+ }
80
+ emitReady() {
81
+ this.sendMessage(createRpcReadyMessage({
82
+ sessionId: this.runtime.session.sessionId,
83
+ }));
84
+ }
85
+ sendParseFailure(parsed) {
86
+ this.sendMessage(createRpcErrorResponse(parsed.id, parsed.error.code, parsed.error.message, parsed.error.data));
87
+ }
88
+ handleInitialize(request) {
89
+ const result = {
90
+ protocolVersion: RPC_PROTOCOL_VERSION,
91
+ sessionId: this.runtime.session.sessionId,
92
+ methods: [...RPC_METHODS],
93
+ alreadyInitialized: this.initialized,
94
+ };
95
+ this.initialized = true;
96
+ this.sendMessage(createRpcSuccessResponse(request.id, result));
97
+ }
98
+ async handleSubmit(request) {
99
+ if (this.activeSubmit || this.runtime.isTurnRunning) {
100
+ this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.busy, "a session turn is already running"));
101
+ return;
102
+ }
103
+ const addOptions = request.params.historyEntryId
104
+ ? { historyEntryId: request.params.historyEntryId }
105
+ : undefined;
106
+ const userHistoryEntryId = this.runtime.session.addUserText(request.params.text, addOptions);
107
+ const submitPromise = this.executeSubmit(request.id, userHistoryEntryId);
108
+ this.activeSubmit = submitPromise;
109
+ try {
110
+ await submitPromise;
111
+ }
112
+ finally {
113
+ if (this.activeSubmit === submitPromise) {
114
+ this.activeSubmit = undefined;
115
+ }
116
+ }
117
+ }
118
+ async executeSubmit(requestId, userHistoryEntryId) {
119
+ try {
120
+ const turnResult = await this.runtime.runTurn((event) => {
121
+ this.sendMessage(createRpcEventMessage(wrapCoreEvent(event), { requestId }));
122
+ });
123
+ const result = {
124
+ userHistoryEntryId,
125
+ turn: {
126
+ aborted: turnResult.aborted,
127
+ },
128
+ };
129
+ this.sendMessage(createRpcSuccessResponse(requestId, result));
130
+ }
131
+ catch (error) {
132
+ this.sendMessage(createRpcErrorResponse(requestId, RPC_ERROR_CODES.internalError, "failed to run session turn", { cause: error instanceof Error ? error.message : String(error) }));
133
+ }
134
+ }
135
+ handleInterrupt(request) {
136
+ const interrupted = this.runtime.interruptTurn();
137
+ const result = {
138
+ interrupted,
139
+ isTurnRunning: this.runtime.isTurnRunning,
140
+ };
141
+ this.sendMessage(createRpcSuccessResponse(request.id, result));
142
+ }
143
+ handleSnapshot(request) {
144
+ const result = {
145
+ sessionId: this.runtime.session.sessionId,
146
+ isTurnRunning: this.runtime.isTurnRunning,
147
+ historyLength: this.runtime.session.history.length,
148
+ history: [...this.runtime.session.history],
149
+ historyEntries: this.runtime.session.historyEntries.map((entry) => ({
150
+ id: entry.id,
151
+ message: entry.message,
152
+ })),
153
+ };
154
+ this.sendMessage(createRpcSuccessResponse(request.id, result));
155
+ }
156
+ async handleReset(request) {
157
+ if (this.activeSubmit || this.runtime.isTurnRunning) {
158
+ this.runtime.interruptTurn();
159
+ if (this.activeSubmit) {
160
+ try {
161
+ await this.activeSubmit;
162
+ }
163
+ catch {
164
+ // ignore submit failure while resetting
165
+ }
166
+ }
167
+ }
168
+ const previousSessionId = this.runtime.session.sessionId;
169
+ this.runtime.session.reset();
170
+ const result = {
171
+ previousSessionId,
172
+ sessionId: this.runtime.session.sessionId,
173
+ };
174
+ this.sendMessage(createRpcSuccessResponse(request.id, result));
175
+ }
176
+ async handleShutdown(request) {
177
+ if (this.activeSubmit || this.runtime.isTurnRunning) {
178
+ this.runtime.interruptTurn();
179
+ if (this.activeSubmit) {
180
+ try {
181
+ await this.activeSubmit;
182
+ }
183
+ catch {
184
+ // ignore submit failure while shutting down
185
+ }
186
+ }
187
+ }
188
+ this.rpcShutdown = true;
189
+ this.unsubscribeSubagentListener();
190
+ const result = {
191
+ shutdown: true,
192
+ };
193
+ this.sendMessage(createRpcSuccessResponse(request.id, result));
194
+ }
195
+ unsubscribeSubagentListener() {
196
+ if (!this.unsubscribeSubagent) {
197
+ return;
198
+ }
199
+ this.unsubscribeSubagent();
200
+ this.unsubscribeSubagent = undefined;
201
+ }
202
+ sendMessage(message) {
203
+ this.send(serializeRpcMessage(message));
204
+ }
205
+ }
206
+ export async function runRpcServer(options) {
207
+ const server = new RpcServer({
208
+ runtime: options.runtime,
209
+ send: (line) => {
210
+ options.output.write(`${line}\n`);
211
+ },
212
+ emitReadyOnStart: true,
213
+ });
214
+ const lineReader = createInterface({
215
+ input: options.input,
216
+ crlfDelay: Number.POSITIVE_INFINITY,
217
+ });
218
+ const inFlightHandlers = new Set();
219
+ let firstError;
220
+ let stopRequested = false;
221
+ const trackInFlight = (promise) => {
222
+ inFlightHandlers.add(promise);
223
+ void promise
224
+ .catch((error) => {
225
+ if (firstError === undefined) {
226
+ firstError = error;
227
+ }
228
+ })
229
+ .finally(() => {
230
+ inFlightHandlers.delete(promise);
231
+ });
232
+ };
233
+ const requestStop = () => {
234
+ if (stopRequested) {
235
+ return;
236
+ }
237
+ stopRequested = true;
238
+ lineReader.close();
239
+ if (typeof options.input.pause === "function") {
240
+ options.input.pause();
241
+ }
242
+ };
243
+ const onLine = (line) => {
244
+ const handler = server.handleLine(line);
245
+ trackInFlight(handler);
246
+ };
247
+ const onAbort = () => {
248
+ requestStop();
249
+ };
250
+ lineReader.on("line", onLine);
251
+ const closePromise = new Promise((resolve) => {
252
+ lineReader.once("close", resolve);
253
+ });
254
+ if (options.signal) {
255
+ if (options.signal.aborted) {
256
+ requestStop();
257
+ }
258
+ options.signal.addEventListener("abort", onAbort);
259
+ }
260
+ try {
261
+ await closePromise;
262
+ }
263
+ finally {
264
+ lineReader.off("line", onLine);
265
+ options.signal?.removeEventListener("abort", onAbort);
266
+ await server.shutdown({ interruptActiveSubmit: true });
267
+ if (inFlightHandlers.size > 0) {
268
+ await Promise.allSettled([...inFlightHandlers]);
269
+ }
270
+ }
271
+ if (firstError !== undefined) {
272
+ throw firstError;
273
+ }
274
+ }
275
+ //# sourceMappingURL=rpc_server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc_server.js","sourceRoot":"","sources":["../../../src/core/modes/rpc_server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import { CoreSession } from "../session/core_session.js";
2
+ import { ConversationTurnRuntime, } from "./conversation_turn_runtime.js";
3
+ import { composeSessionPrompts } from "./session_prompt_composer.js";
4
+ export class ChatRuntime {
5
+ sessionInstance;
6
+ turnRuntime;
7
+ currentPersona;
8
+ riskLevel;
9
+ promptContext;
10
+ environment;
11
+ latestPromptComposition;
12
+ static create(options) {
13
+ const promptComposition = composeSessionPrompts({
14
+ persona: options.persona,
15
+ riskLevel: options.riskLevel,
16
+ cwd: options.promptContext.cwd,
17
+ datetime: new Date(options.environment.now()).toISOString(),
18
+ platform: options.environment.platform(),
19
+ nodeVersion: options.environment.nodeVersion(),
20
+ skillsBlock: options.promptContext.skillsBlock,
21
+ projectContextBlock: options.promptContext.projectContextBlock,
22
+ sandboxEnabled: options.promptContext.sandboxEnabled,
23
+ sandboxEnvironmentInfo: options.promptContext.sandboxEnvironmentInfo,
24
+ });
25
+ const session = new CoreSession({
26
+ persona: options.persona,
27
+ systemPrompt: promptComposition.baseSystemPrompt,
28
+ subagentPrompts: promptComposition.subagentPrompts,
29
+ riskLevel: options.riskLevel,
30
+ toolRegistry: options.toolRegistry,
31
+ config: options.config,
32
+ deps: options.deps,
33
+ });
34
+ return new ChatRuntime({
35
+ session,
36
+ persona: options.persona,
37
+ riskLevel: options.riskLevel,
38
+ promptContext: options.promptContext,
39
+ environment: options.environment,
40
+ initialPromptComposition: promptComposition,
41
+ });
42
+ }
43
+ constructor(options) {
44
+ this.sessionInstance = options.session;
45
+ this.turnRuntime = new ConversationTurnRuntime(this.sessionInstance);
46
+ this.currentPersona = options.persona;
47
+ this.riskLevel = options.riskLevel;
48
+ this.promptContext = { ...options.promptContext };
49
+ this.environment = options.environment;
50
+ this.latestPromptComposition = options.initialPromptComposition ?? this.composePromptSet();
51
+ if (!options.initialPromptComposition) {
52
+ this.sessionInstance.setPersona(this.currentPersona, this.latestPromptComposition.baseSystemPrompt, this.latestPromptComposition.subagentPrompts);
53
+ }
54
+ }
55
+ get session() {
56
+ return this.sessionInstance;
57
+ }
58
+ get isTurnRunning() {
59
+ return this.turnRuntime.isRunning;
60
+ }
61
+ get promptComposition() {
62
+ return this.latestPromptComposition;
63
+ }
64
+ runTurn(onEvent) {
65
+ return this.turnRuntime.run(onEvent);
66
+ }
67
+ interruptTurn() {
68
+ return this.turnRuntime.interrupt();
69
+ }
70
+ setConfig(config) {
71
+ this.sessionInstance.setConfig(config);
72
+ }
73
+ setRiskLevel(level) {
74
+ const previous = this.riskLevel;
75
+ this.riskLevel = level;
76
+ this.sessionInstance.setRiskLevel(level);
77
+ if (previous !== level) {
78
+ this.rebuildSubagentPrompts();
79
+ }
80
+ }
81
+ setPersona(persona, options) {
82
+ this.currentPersona = persona;
83
+ this.rebuildSystemPrompts(options);
84
+ }
85
+ updatePromptContext(context) {
86
+ this.promptContext = {
87
+ ...this.promptContext,
88
+ ...context,
89
+ };
90
+ }
91
+ rebuildSystemPrompts(options) {
92
+ if (options?.skillsBlock !== undefined) {
93
+ this.promptContext.skillsBlock = options.skillsBlock;
94
+ }
95
+ this.latestPromptComposition = this.composePromptSet(options?.skillsBlock);
96
+ this.sessionInstance.setPersona(this.currentPersona, this.latestPromptComposition.baseSystemPrompt, this.latestPromptComposition.subagentPrompts);
97
+ }
98
+ rebuildSubagentPrompts(options) {
99
+ if (options?.skillsBlock !== undefined) {
100
+ this.promptContext.skillsBlock = options.skillsBlock;
101
+ }
102
+ const nextPromptComposition = this.composePromptSet(options?.skillsBlock);
103
+ this.latestPromptComposition = {
104
+ ...this.latestPromptComposition,
105
+ subagentPrompts: nextPromptComposition.subagentPrompts,
106
+ };
107
+ this.sessionInstance.setPersona(this.currentPersona, this.latestPromptComposition.baseSystemPrompt, this.latestPromptComposition.subagentPrompts);
108
+ }
109
+ composePromptSet(skillsBlock) {
110
+ return composeSessionPrompts({
111
+ persona: this.currentPersona,
112
+ riskLevel: this.riskLevel,
113
+ cwd: this.promptContext.cwd,
114
+ datetime: new Date(this.environment.now()).toISOString(),
115
+ platform: this.environment.platform(),
116
+ nodeVersion: this.environment.nodeVersion(),
117
+ skillsBlock: skillsBlock ?? this.promptContext.skillsBlock,
118
+ projectContextBlock: this.promptContext.projectContextBlock,
119
+ sandboxEnabled: this.promptContext.sandboxEnabled,
120
+ sandboxEnvironmentInfo: this.promptContext.sandboxEnvironmentInfo,
121
+ });
122
+ }
123
+ }
124
+ //# sourceMappingURL=chat_runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat_runtime.js","sourceRoot":"","sources":["../../../src/core/runtime/chat_runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export class ConversationTurnRuntime {
2
+ session;
3
+ abortController;
4
+ constructor(session) {
5
+ this.session = session;
6
+ }
7
+ get isRunning() {
8
+ return this.abortController !== undefined;
9
+ }
10
+ async run(onEvent) {
11
+ if (this.abortController) {
12
+ throw new Error("conversation turn is already running");
13
+ }
14
+ const abortController = new AbortController();
15
+ this.abortController = abortController;
16
+ try {
17
+ try {
18
+ for await (const event of this.session.events(abortController.signal)) {
19
+ if (abortController.signal.aborted) {
20
+ break;
21
+ }
22
+ await onEvent(event);
23
+ }
24
+ }
25
+ catch (err) {
26
+ if (!abortController.signal.aborted) {
27
+ throw err;
28
+ }
29
+ }
30
+ return {
31
+ aborted: abortController.signal.aborted,
32
+ };
33
+ }
34
+ finally {
35
+ if (this.abortController === abortController) {
36
+ this.abortController = undefined;
37
+ }
38
+ }
39
+ }
40
+ interrupt() {
41
+ const abortController = this.abortController;
42
+ if (!abortController || abortController.signal.aborted) {
43
+ return false;
44
+ }
45
+ abortController.abort();
46
+ return true;
47
+ }
48
+ }
49
+ //# sourceMappingURL=conversation_turn_runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation_turn_runtime.js","sourceRoot":"","sources":["../../../src/core/runtime/conversation_turn_runtime.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,uBAAuB;IACjB,OAAO,CAA8B;IAC9C,eAAe,CAAmB;IAE1C,YAAY,OAAoC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAmD;QAC3D,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,IAAI,CAAC;YACH,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtE,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnC,MAAM;oBACR,CAAC;oBACD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO;aACxC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,EAAE,CAAC;gBAC7C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import { formatSubagentsForPrompt, getSubagentBasePrompt } from "../subagents/registry.js";
2
+ import { buildBaseSystemPrompt, buildEnvironmentTag, buildSandboxInfoBlock, } from "../utils/context.js";
3
+ export function composeSessionPrompts(args) {
4
+ const environmentTag = buildEnvironmentTag({
5
+ riskLevel: args.riskLevel,
6
+ cwd: args.cwd,
7
+ datetime: args.datetime,
8
+ platform: args.platform,
9
+ nodeVersion: args.nodeVersion,
10
+ });
11
+ const sandboxInfoBlock = args.sandboxEnabled
12
+ ? buildSandboxInfoBlock(args.sandboxEnvironmentInfo)
13
+ : undefined;
14
+ const baseSystemPrompt = buildBaseSystemPrompt({
15
+ personaSystemPrompt: args.persona.systemPrompt,
16
+ skillsBlock: args.skillsBlock,
17
+ projectContextBlock: args.projectContextBlock,
18
+ sandboxInfoBlock,
19
+ environmentTag,
20
+ subagentsBlock: formatSubagentsForPrompt(args.persona),
21
+ });
22
+ const subagentPrompts = {};
23
+ const subagents = args.persona.subagents;
24
+ if (subagents && Object.keys(subagents).length > 0) {
25
+ for (const [name, config] of Object.entries(subagents)) {
26
+ if (!config) {
27
+ continue;
28
+ }
29
+ const personaSystemPrompt = getSubagentBasePrompt(name, config);
30
+ if (!personaSystemPrompt) {
31
+ continue;
32
+ }
33
+ const subagentEnvironmentTag = buildEnvironmentTag({
34
+ riskLevel: config.riskLevel ?? args.riskLevel,
35
+ cwd: args.cwd,
36
+ datetime: args.datetime,
37
+ platform: args.platform,
38
+ nodeVersion: args.nodeVersion,
39
+ });
40
+ subagentPrompts[name] = buildBaseSystemPrompt({
41
+ personaSystemPrompt,
42
+ skillsBlock: args.skillsBlock,
43
+ projectContextBlock: args.projectContextBlock,
44
+ sandboxInfoBlock,
45
+ environmentTag: subagentEnvironmentTag,
46
+ });
47
+ }
48
+ }
49
+ return {
50
+ environmentTag,
51
+ baseSystemPrompt,
52
+ subagentPrompts,
53
+ };
54
+ }
55
+ //# sourceMappingURL=session_prompt_composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_prompt_composer.js","sourceRoot":"","sources":["../../../src/core/runtime/session_prompt_composer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAE3F,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,UAAU,qBAAqB,CAAC,IAA+B;IACnE,MAAM,cAAc,GAAG,mBAAmB,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAC1C,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACpD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;QAC7C,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;QAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,gBAAgB;QAChB,cAAc;QACd,cAAc,EAAE,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;KACvD,CAAC,CAAC;IAEH,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YAED,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;gBACjD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;gBAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YAEH,eAAe,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC;gBAC5C,mBAAmB;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,gBAAgB;gBAChB,cAAc,EAAE,sBAAsB;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc;QACd,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { isContextOverflow } from "@mariozechner/pi-ai";
2
- const RETRYABLE_ERROR_REGEX = /overloaded|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server error|internal error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated/i;
2
+ const RETRYABLE_ERROR_REGEX = /overloaded|high.?demand|peak.?load|maximum.?usage.?size|provisioned.?throughput|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server error|internal error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated/i;
3
3
  function asAssistantMessage(error) {
4
4
  if (!error || typeof error !== "object") {
5
5
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"auto_retry.js","sourceRoot":"","sources":["../../../src/core/utils/auto_retry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,qBAAqB,GACzB,uOAAuO,CAAC;AAE1O,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAkC,CAAC;IACnD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAA2B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoB;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"auto_retry.js","sourceRoot":"","sources":["../../../src/core/utils/auto_retry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,qBAAqB,GACzB,4SAA4S,CAAC;AAE/S,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAkC,CAAC;IACnD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAA2B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoB;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,2 +1,2 @@
1
- export const APP_VERSION = "0.2.35";
1
+ export const APP_VERSION = "0.2.37";
2
2
  //# sourceMappingURL=version.js.map