tau-coding-agent 0.1.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/extensions/answer.ts +601 -0
  4. package/extensions/branch-term.ts +405 -0
  5. package/extensions/btw.ts +444 -0
  6. package/extensions/ghostty.ts +301 -0
  7. package/extensions/git-diff-stats.ts +277 -0
  8. package/extensions/git-pr-status.ts +286 -0
  9. package/extensions/insights.ts +2367 -0
  10. package/extensions/interlude.ts +144 -0
  11. package/extensions/loop.ts +529 -0
  12. package/extensions/memory.ts +1889 -0
  13. package/extensions/notify.ts +161 -0
  14. package/extensions/openai-fast.ts +227 -0
  15. package/extensions/openai-verbosity.ts +223 -0
  16. package/extensions/review.ts +4347 -0
  17. package/extensions/sandbox/index.ts +2578 -0
  18. package/extensions/usage/anthropic.ts +198 -0
  19. package/extensions/usage/github-copilot.ts +204 -0
  20. package/extensions/usage/google-gemini-cli.ts +232 -0
  21. package/extensions/usage/index.ts +2310 -0
  22. package/extensions/usage/minimax.ts +208 -0
  23. package/extensions/usage/openai-codex.ts +180 -0
  24. package/extensions/usage/openrouter.ts +168 -0
  25. package/extensions/usage/providers.ts +26 -0
  26. package/extensions/usage/shared.ts +156 -0
  27. package/extensions/usage/types.ts +53 -0
  28. package/extensions/usage/zai.ts +186 -0
  29. package/extensions/websearch/README.md +68 -0
  30. package/extensions/websearch/browser/chromium.ts +330 -0
  31. package/extensions/websearch/browser/discovery.ts +75 -0
  32. package/extensions/websearch/browser/firefox.ts +150 -0
  33. package/extensions/websearch/browser/sqlite.ts +38 -0
  34. package/extensions/websearch/config.ts +76 -0
  35. package/extensions/websearch/index.ts +312 -0
  36. package/extensions/websearch/normalize.ts +155 -0
  37. package/extensions/websearch/providers/anthropic.pi.ts +139 -0
  38. package/extensions/websearch/providers/gemini.browser.ts +185 -0
  39. package/extensions/websearch/providers/gemini.pi.ts +108 -0
  40. package/extensions/websearch/providers/openai-codex.browser.ts +77 -0
  41. package/extensions/websearch/providers/openai-codex.pi.ts +49 -0
  42. package/extensions/websearch/providers/openai-codex.shared.ts +123 -0
  43. package/extensions/websearch/providers/pi-model.shared.ts +86 -0
  44. package/extensions/websearch/providers/search-prompt.shared.ts +17 -0
  45. package/extensions/websearch/providers/shared.ts +76 -0
  46. package/extensions/websearch/types.ts +52 -0
  47. package/extensions/worktree.ts +2223 -0
  48. package/package.json +72 -0
  49. package/skills/browser-tools/SKILL.md +253 -0
  50. package/skills/browser-tools/scripts/browser-content.js +100 -0
  51. package/skills/browser-tools/scripts/browser-cookies.js +33 -0
  52. package/skills/browser-tools/scripts/browser-dismiss-cookies.js +455 -0
  53. package/skills/browser-tools/scripts/browser-eval.js +75 -0
  54. package/skills/browser-tools/scripts/browser-logs-tail.js +89 -0
  55. package/skills/browser-tools/scripts/browser-nav.js +28 -0
  56. package/skills/browser-tools/scripts/browser-net-summary.js +115 -0
  57. package/skills/browser-tools/scripts/browser-pick.js +133 -0
  58. package/skills/browser-tools/scripts/browser-screenshot.js +18 -0
  59. package/skills/browser-tools/scripts/browser-start.js +281 -0
  60. package/skills/browser-tools/scripts/browser-watch.js +321 -0
  61. package/skills/browser-tools/scripts/utils.js +60 -0
  62. package/skills/git-clean-history/SKILL.md +45 -0
  63. package/skills/git-commit/SKILL.md +55 -0
  64. package/skills/oracle/SKILL.md +64 -0
  65. package/skills/oracle/scripts/oracle +249 -0
  66. package/skills/oracle/scripts/oracle-bundle +227 -0
  67. package/skills/sentry/SKILL.md +198 -0
  68. package/skills/sentry/lib/auth.js +99 -0
  69. package/skills/sentry/scripts/fetch-event.js +325 -0
  70. package/skills/sentry/scripts/fetch-issue.js +368 -0
  71. package/skills/sentry/scripts/list-issues.js +245 -0
  72. package/skills/sentry/scripts/search-events.js +291 -0
  73. package/skills/sentry/scripts/search-logs.js +234 -0
  74. package/skills/update-changelog/SKILL.md +135 -0
  75. package/skills/web-design/SKILL.md +117 -0
@@ -0,0 +1,76 @@
1
+ export function withTimeout(signal: AbortSignal | undefined, timeoutMs: number): AbortSignal {
2
+ return signal
3
+ ? AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)])
4
+ : AbortSignal.timeout(timeoutMs);
5
+ }
6
+
7
+ export async function fetchJson<T>(url: string, options: RequestInit = {}): Promise<T> {
8
+ return JSON.parse(await fetchText(url, options)) as T;
9
+ }
10
+
11
+ export async function fetchText(url: string, options: RequestInit = {}): Promise<string> {
12
+ const response = await fetch(url, options);
13
+ const text = await response.text();
14
+ if (!response.ok) {
15
+ throw new Error(`${response.status} ${response.statusText}${text ? `\n${text}` : ""}`);
16
+ }
17
+ return text;
18
+ }
19
+
20
+ export async function readEventStream(
21
+ response: Response,
22
+ onEvent: (event: { event?: string; data: string }) => void,
23
+ ): Promise<void> {
24
+ if (!response.ok) {
25
+ const text = await response.text();
26
+ throw new Error(`${response.status} ${response.statusText}${text ? `\n${text}` : ""}`);
27
+ }
28
+
29
+ if (!response.body) {
30
+ throw new Error("Missing response body.");
31
+ }
32
+
33
+ const decoder = new TextDecoder();
34
+ let buffer = "";
35
+
36
+ for await (const chunk of response.body) {
37
+ buffer += decoder.decode(chunk, { stream: true });
38
+ buffer = buffer.replace(/\r\n/g, "\n");
39
+
40
+ while (true) {
41
+ const separatorIndex = buffer.indexOf("\n\n");
42
+ if (separatorIndex === -1) break;
43
+
44
+ const block = buffer.slice(0, separatorIndex);
45
+ buffer = buffer.slice(separatorIndex + 2);
46
+ emitEventBlock(block, onEvent);
47
+ }
48
+ }
49
+
50
+ buffer = buffer.replace(/\r\n/g, "\n");
51
+ if (buffer.trim().length > 0) {
52
+ emitEventBlock(buffer, onEvent);
53
+ }
54
+ }
55
+
56
+ function emitEventBlock(
57
+ block: string,
58
+ onEvent: (event: { event?: string; data: string }) => void,
59
+ ): void {
60
+ let eventName: string | undefined;
61
+ const dataLines: string[] = [];
62
+
63
+ for (const line of block.split(/\r?\n/)) {
64
+ if (line.startsWith("event:")) {
65
+ eventName = line.slice(6).trim();
66
+ continue;
67
+ }
68
+ if (line.startsWith("data:")) {
69
+ dataLines.push(line.slice(5).trimStart());
70
+ }
71
+ }
72
+
73
+ if (dataLines.length > 0) {
74
+ onEvent({ event: eventName, data: dataLines.join("\n") });
75
+ }
76
+ }
@@ -0,0 +1,52 @@
1
+ export type WebsearchBackendId = "openai-codex" | "anthropic" | "gemini";
2
+ export type WebsearchAuthSource = "pi" | "firefox" | "chromium";
3
+ export type WebsearchBrowserFamily = "firefox" | "chromium";
4
+ export type WebsearchRouteId =
5
+ | "pi:openai-codex"
6
+ | "pi:anthropic"
7
+ | "pi:gemini"
8
+ | "firefox:openai-codex"
9
+ | "firefox:gemini"
10
+ | "chromium:openai-codex"
11
+ | "chromium:gemini";
12
+
13
+ export interface BrowserCookie {
14
+ name: string;
15
+ value: string;
16
+ domain: string;
17
+ path: string;
18
+ secure: boolean;
19
+ }
20
+
21
+ export interface WebsearchConfig {
22
+ routes: WebsearchRouteId[];
23
+ profiles: Partial<Record<WebsearchBrowserFamily, string>>;
24
+ }
25
+
26
+ export interface BrowserProfile {
27
+ family: WebsearchBrowserFamily;
28
+ browserName: string;
29
+ profileName: string;
30
+ profilePath: string;
31
+ }
32
+
33
+ export interface BrowserSession {
34
+ profile: BrowserProfile;
35
+ cookies: BrowserCookie[];
36
+ }
37
+
38
+ export interface WebsearchSource {
39
+ title: string;
40
+ url: string;
41
+ snippet?: string;
42
+ }
43
+
44
+ export interface WebsearchResult {
45
+ backend: WebsearchBackendId;
46
+ authSource: WebsearchAuthSource;
47
+ browserName?: string;
48
+ profile?: string;
49
+ accountLabel?: string;
50
+ answer: string;
51
+ sources: WebsearchSource[];
52
+ }