tau-coding-agent 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -12
- package/extensions/answer.ts +129 -79
- package/extensions/branch-term/README.md +7 -0
- package/extensions/{branch-term.ts → branch-term/index.ts} +113 -104
- package/extensions/btw.ts +17 -2
- package/extensions/caffeinate/README.md +5 -0
- package/extensions/caffeinate/index.ts +144 -0
- package/extensions/fast.ts +292 -0
- package/extensions/ghostty.ts +214 -211
- package/extensions/git-diff-stats.ts +124 -84
- package/extensions/git-pr-status.ts +274 -208
- package/extensions/insights.ts +109 -191
- package/extensions/loop.ts +149 -145
- package/extensions/memory.ts +138 -86
- package/extensions/notify.ts +14 -26
- package/extensions/openai-verbosity.ts +108 -42
- package/extensions/review/fix.ts +15 -6
- package/extensions/review/git.ts +93 -103
- package/extensions/review/index.ts +60 -62
- package/extensions/review/interrupt.ts +117 -0
- package/extensions/review/message-queue.ts +45 -12
- package/extensions/review/models.ts +79 -3
- package/extensions/review/prompts.ts +41 -38
- package/extensions/review/review.ts +161 -166
- package/extensions/review/runner.ts +139 -147
- package/extensions/review/runtime.ts +173 -120
- package/extensions/review/triage.ts +41 -44
- package/extensions/sandbox/bash.ts +775 -0
- package/extensions/sandbox/command.ts +605 -0
- package/extensions/sandbox/config.ts +764 -0
- package/extensions/sandbox/index.ts +132 -3338
- package/extensions/sandbox/permissions/dialog.ts +118 -0
- package/extensions/sandbox/permissions/filesystem.ts +559 -0
- package/extensions/sandbox/permissions/mach-lookup.ts +186 -0
- package/extensions/sandbox/permissions/network.ts +164 -0
- package/extensions/sandbox/permissions/unsandboxed.ts +270 -0
- package/extensions/sandbox/runtime.ts +616 -0
- package/extensions/stash.ts +28 -15
- package/extensions/subagent/README.md +73 -0
- package/extensions/subagent/index.ts +822 -0
- package/extensions/subagent/interrupt.ts +117 -0
- package/extensions/subagent/permissions.ts +101 -0
- package/extensions/subagent/rpc.ts +177 -0
- package/extensions/tool-display-mode.ts +267 -64
- package/extensions/usage/index.ts +249 -356
- package/extensions/usage/openrouter.ts +10 -2
- package/extensions/websearch/README.md +12 -47
- package/extensions/websearch/config.ts +5 -2
- package/extensions/websearch/index.ts +94 -109
- package/extensions/websearch/output.ts +51 -0
- package/extensions/websearch/providers/anthropic.pi.ts +27 -44
- package/extensions/websearch/providers/gemini.browser.ts +68 -77
- package/extensions/websearch/providers/gemini.pi.ts +17 -17
- package/extensions/websearch/providers/openai-codex.pi.ts +145 -7
- package/extensions/websearch/providers/pi-model.shared.ts +33 -39
- package/extensions/websearch/providers/shared.ts +87 -2
- package/extensions/websearch/types.ts +0 -3
- package/extensions/worktree.ts +132 -172
- package/package.json +10 -5
- package/skills/browser-tools/SKILL.md +29 -234
- package/skills/browser-tools/references/cookies.md +36 -0
- package/skills/browser-tools/references/interaction.md +90 -0
- package/skills/browser-tools/references/logging.md +34 -0
- package/skills/git-clean-history/SKILL.md +6 -6
- package/skills/git-commit/SKILL.md +5 -3
- package/skills/github-pull-request/SKILL.md +60 -0
- package/skills/github-pull-request/references/create.md +40 -0
- package/skills/github-pull-request/references/stewardship.md +60 -0
- package/skills/oracle/SKILL.md +3 -3
- package/skills/oracle/scripts/oracle +10 -1
- package/skills/sentry/SKILL.md +15 -185
- package/skills/sentry/references/events.md +79 -0
- package/skills/sentry/references/issues.md +62 -0
- package/skills/sentry/references/logs.md +46 -0
- package/skills/update-changelog/SKILL.md +27 -121
- package/skills/web-design/SKILL.md +16 -105
- package/themes/tau-dark.json +4 -0
- package/extensions/openai-fast.ts +0 -229
- package/extensions/websearch/providers/openai-codex.browser.ts +0 -77
- package/extensions/websearch/providers/openai-codex.shared.ts +0 -123
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import type { WebsearchSource } from "../types.js";
|
|
2
|
-
import { dedupeSources, extractMarkdownSources } from "../normalize.js";
|
|
3
|
-
import { buildWebsearchPrompt, WEBSEARCH_SYSTEM_PROMPT } from "./search-prompt.shared.js";
|
|
4
|
-
import { readEventStream, withTimeout } from "./shared.js";
|
|
5
|
-
|
|
6
|
-
export function decodeJwtAccountId(jwt: string | undefined): string | undefined {
|
|
7
|
-
if (!jwt || typeof jwt !== "string") return undefined;
|
|
8
|
-
|
|
9
|
-
try {
|
|
10
|
-
const parts = jwt.split(".");
|
|
11
|
-
if (parts.length !== 3) return undefined;
|
|
12
|
-
const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8")) as Record<
|
|
13
|
-
string,
|
|
14
|
-
unknown
|
|
15
|
-
>;
|
|
16
|
-
const auth = payload["https://api.openai.com/auth"];
|
|
17
|
-
return auth && typeof auth === "object"
|
|
18
|
-
? ((auth as Record<string, unknown>).chatgpt_account_id as string | undefined)
|
|
19
|
-
: undefined;
|
|
20
|
-
} catch {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function resolveCodexUrl(baseUrl = "https://chatgpt.com/backend-api"): string {
|
|
26
|
-
const normalized = String(baseUrl || "https://chatgpt.com/backend-api").replace(/\/+$/, "");
|
|
27
|
-
if (normalized.endsWith("/codex/responses")) return normalized;
|
|
28
|
-
if (normalized.endsWith("/codex")) return `${normalized}/responses`;
|
|
29
|
-
return `${normalized}/codex/responses`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export async function runOpenAICodexSearch(options: {
|
|
33
|
-
apiKey: string;
|
|
34
|
-
model: string;
|
|
35
|
-
query: string;
|
|
36
|
-
baseUrl?: string;
|
|
37
|
-
accountId?: string;
|
|
38
|
-
headers?: Record<string, string>;
|
|
39
|
-
signal?: AbortSignal;
|
|
40
|
-
}): Promise<{ answer: string; sources: WebsearchSource[] }> {
|
|
41
|
-
const response = await fetch(resolveCodexUrl(options.baseUrl), {
|
|
42
|
-
method: "POST",
|
|
43
|
-
headers: {
|
|
44
|
-
...options.headers,
|
|
45
|
-
authorization: `Bearer ${options.apiKey}`,
|
|
46
|
-
...(options.accountId ? { "chatgpt-account-id": options.accountId } : {}),
|
|
47
|
-
"content-type": "application/json",
|
|
48
|
-
accept: "text/event-stream",
|
|
49
|
-
"OpenAI-Beta": "responses=experimental",
|
|
50
|
-
originator: "pi-websearch",
|
|
51
|
-
},
|
|
52
|
-
body: JSON.stringify({
|
|
53
|
-
model: options.model,
|
|
54
|
-
store: false,
|
|
55
|
-
stream: true,
|
|
56
|
-
instructions: WEBSEARCH_SYSTEM_PROMPT,
|
|
57
|
-
input: [{ role: "user", content: buildWebsearchPrompt(options.query) }],
|
|
58
|
-
tools: [{ type: "web_search" }],
|
|
59
|
-
tool_choice: "auto",
|
|
60
|
-
}),
|
|
61
|
-
signal: withTimeout(options.signal, 120_000),
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
let answer = "";
|
|
65
|
-
let fallbackAnswer = "";
|
|
66
|
-
|
|
67
|
-
await readEventStream(response, ({ data }) => {
|
|
68
|
-
if (!data.trim()) return;
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
const event = JSON.parse(data) as Record<string, unknown>;
|
|
72
|
-
|
|
73
|
-
if (event.type === "response.output_text.delta" && typeof event.delta === "string") {
|
|
74
|
-
answer += event.delta;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (event.type === "response.output_item.done") {
|
|
78
|
-
const item = event.item as Record<string, unknown> | undefined;
|
|
79
|
-
const content = Array.isArray(item?.content) ? item.content : [];
|
|
80
|
-
const fullText = content
|
|
81
|
-
.filter(
|
|
82
|
-
(part) =>
|
|
83
|
-
part &&
|
|
84
|
-
typeof part === "object" &&
|
|
85
|
-
(part as Record<string, unknown>).type === "output_text",
|
|
86
|
-
)
|
|
87
|
-
.map((part) => (part as Record<string, unknown>).text)
|
|
88
|
-
.filter((text): text is string => typeof text === "string")
|
|
89
|
-
.join("\n");
|
|
90
|
-
if (fullText) fallbackAnswer = fullText;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (event.type === "response.failed" || event.type === "error") {
|
|
94
|
-
const failedResponse = event.response;
|
|
95
|
-
const eventMessage = typeof event.message === "string" ? event.message : undefined;
|
|
96
|
-
if (failedResponse && typeof failedResponse === "object") {
|
|
97
|
-
const error = (failedResponse as Record<string, unknown>).error;
|
|
98
|
-
if (
|
|
99
|
-
error &&
|
|
100
|
-
typeof error === "object" &&
|
|
101
|
-
typeof (error as Record<string, unknown>).message === "string"
|
|
102
|
-
) {
|
|
103
|
-
throw new Error((error as Record<string, unknown>).message as string);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
throw new Error(eventMessage ?? "OpenAI Codex search failed.");
|
|
107
|
-
}
|
|
108
|
-
} catch (error) {
|
|
109
|
-
if (error instanceof SyntaxError) return;
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
const finalAnswer = (answer || fallbackAnswer).trim();
|
|
115
|
-
if (!finalAnswer) {
|
|
116
|
-
throw new Error("OpenAI Codex returned an empty response.");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
answer: finalAnswer,
|
|
121
|
-
sources: dedupeSources(extractMarkdownSources(finalAnswer)),
|
|
122
|
-
};
|
|
123
|
-
}
|