@markusylisiurunen/tau 0.3.8 → 0.3.10

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 (107) hide show
  1. package/README.md +41 -3
  2. package/dist/core/cli.js +3 -0
  3. package/dist/core/cli.js.map +1 -1
  4. package/dist/core/config/content_loader.js +1 -3
  5. package/dist/core/config/content_loader.js.map +1 -1
  6. package/dist/core/config/index.js +1 -1
  7. package/dist/core/config/index.js.map +1 -1
  8. package/dist/core/config/schema.js +68 -0
  9. package/dist/core/config/schema.js.map +1 -1
  10. package/dist/core/diff_review/index.js +2 -0
  11. package/dist/core/diff_review/index.js.map +1 -1
  12. package/dist/core/diff_review/result_text.js +33 -0
  13. package/dist/core/diff_review/result_text.js.map +1 -0
  14. package/dist/core/diff_review/tool.js +107 -0
  15. package/dist/core/diff_review/tool.js.map +1 -0
  16. package/dist/core/index.js +2 -1
  17. package/dist/core/index.js.map +1 -1
  18. package/dist/core/nook/cli.js +196 -0
  19. package/dist/core/nook/cli.js.map +1 -0
  20. package/dist/core/nook/client.js +164 -0
  21. package/dist/core/nook/client.js.map +1 -0
  22. package/dist/core/nook/deploy.js +116 -0
  23. package/dist/core/nook/deploy.js.map +1 -0
  24. package/dist/core/nook/index.js +5 -0
  25. package/dist/core/nook/index.js.map +1 -0
  26. package/dist/core/nook/setup.js +270 -0
  27. package/dist/core/nook/setup.js.map +1 -0
  28. package/dist/core/nook/validation.js +149 -0
  29. package/dist/core/nook/validation.js.map +1 -0
  30. package/dist/core/personas.js +12 -2
  31. package/dist/core/personas.js.map +1 -1
  32. package/dist/core/runtime/chat_runtime.js +1 -0
  33. package/dist/core/runtime/chat_runtime.js.map +1 -1
  34. package/dist/core/session/core_session.js.map +1 -1
  35. package/dist/core/session/runner.js +3 -2
  36. package/dist/core/session/runner.js.map +1 -1
  37. package/dist/core/session/session_engine.js +56 -13
  38. package/dist/core/session/session_engine.js.map +1 -1
  39. package/dist/core/telegram/adapter.js +88 -5
  40. package/dist/core/telegram/adapter.js.map +1 -1
  41. package/dist/core/telegram/session_manager.js +11 -0
  42. package/dist/core/telegram/session_manager.js.map +1 -1
  43. package/dist/core/tools/catalog.js +3 -3
  44. package/dist/core/tools/catalog.js.map +1 -1
  45. package/dist/core/tools/nook.js +175 -0
  46. package/dist/core/tools/nook.js.map +1 -0
  47. package/dist/core/tools/registry.js.map +1 -1
  48. package/dist/core/tools/tool_names.js +2 -1
  49. package/dist/core/tools/tool_names.js.map +1 -1
  50. package/dist/core/version.js +1 -1
  51. package/dist/core/version.js.map +1 -1
  52. package/dist/execution/cloudflare_sandbox_execution_environment.js +0 -4
  53. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
  54. package/dist/execution/fly_sprite_execution_environment.js +0 -4
  55. package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
  56. package/dist/execution/local_execution_environment.js +1 -3
  57. package/dist/execution/local_execution_environment.js.map +1 -1
  58. package/dist/execution/tool_backend_execution_environment.js +1 -1
  59. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  60. package/dist/host/client_tool_broker.js +245 -0
  61. package/dist/host/client_tool_broker.js.map +1 -0
  62. package/dist/host/local_session_host.js +19 -10
  63. package/dist/host/local_session_host.js.map +1 -1
  64. package/dist/host/session_protocol_handler.js +54 -1
  65. package/dist/host/session_protocol_handler.js.map +1 -1
  66. package/dist/main.js +30 -12
  67. package/dist/main.js.map +1 -1
  68. package/dist/nook/README.md +96 -0
  69. package/dist/nook/worker/index.js +767 -0
  70. package/dist/nook/worker/index.js.map +1 -0
  71. package/dist/protocol/session_protocol.d.ts +52 -3
  72. package/dist/protocol/session_protocol.js +142 -2
  73. package/dist/protocol/session_protocol.js.map +1 -1
  74. package/dist/sdk/client.js +6 -13
  75. package/dist/sdk/client.js.map +1 -1
  76. package/dist/sdk/session.d.ts +2 -2
  77. package/dist/sdk/session.js +77 -5
  78. package/dist/sdk/session.js.map +1 -1
  79. package/dist/sdk/types.d.ts +14 -1
  80. package/dist/transport/in_process_session_transport.js +16 -1
  81. package/dist/transport/in_process_session_transport.js.map +1 -1
  82. package/dist/transport/session_protocol_transport_helpers.js +12 -0
  83. package/dist/transport/session_protocol_transport_helpers.js.map +1 -1
  84. package/dist/transport/session_transport.d.ts +3 -1
  85. package/dist/transport/stdio_session_transport.d.ts +3 -1
  86. package/dist/transport/stdio_session_transport.js +16 -1
  87. package/dist/transport/stdio_session_transport.js.map +1 -1
  88. package/dist/transport/websocket_session_transport.d.ts +3 -1
  89. package/dist/transport/websocket_session_transport.js +16 -1
  90. package/dist/transport/websocket_session_transport.js.map +1 -1
  91. package/dist/tui/chat_controller/diff_review_service.js +116 -19
  92. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  93. package/dist/tui/chat_controller/diff_review_user_message.js +11 -14
  94. package/dist/tui/chat_controller/diff_review_user_message.js.map +1 -1
  95. package/dist/tui/index.js +1 -1
  96. package/dist/tui/index.js.map +1 -1
  97. package/dist/tui/session_chat_app.js +26 -1
  98. package/dist/tui/session_chat_app.js.map +1 -1
  99. package/dist/tui/session_chat_controller.js +16 -8
  100. package/dist/tui/session_chat_controller.js.map +1 -1
  101. package/dist/tui/tool_ui_router.js +0 -38
  102. package/dist/tui/tool_ui_router.js.map +1 -1
  103. package/dist/tui/ui/tool_ui_registry.js +45 -170
  104. package/dist/tui/ui/tool_ui_registry.js.map +1 -1
  105. package/package.json +3 -2
  106. package/dist/core/tools/diff_review.js +0 -369
  107. package/dist/core/tools/diff_review.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ export function formatDiffReviewReviewedFiles(files) {
2
+ return files.length > 0
3
+ ? ["Reviewed files:", ...files.map((file) => `- ${file}`)]
4
+ : ["Reviewed files: (none)"];
5
+ }
6
+ export function formatDiffReviewReturnedReviewToolResult(review) {
7
+ return [
8
+ "Diff review completed.",
9
+ "",
10
+ "The following feedback came from a completed diff review. During that review, the user read through the captured diff snapshot and the files included in it, and may have left comments on specific files, lines, or broader concerns they noticed while reviewing.",
11
+ "",
12
+ `Reviewed scope: ${review.command}`,
13
+ ...formatDiffReviewReviewedFiles(review.reviewedFiles),
14
+ "",
15
+ "Treat the returned review as feedback on that reviewed diff snapshot. Address valid issues directly, clarify anything that seems mistaken or ambiguous, and do not treat it as a new unrelated request.",
16
+ "",
17
+ "Review:",
18
+ review.review,
19
+ ].join("\n");
20
+ }
21
+ export function formatDiffReviewReturnedReviewUserSystemMessage(review) {
22
+ return [
23
+ "The following user message comes from a completed diff review. During that review, the user read through the reviewed diff snapshot and the files included in it, and may have left comments on specific files, lines, or broader concerns they noticed while reviewing. The message below is the feedback returned from that review.",
24
+ "",
25
+ `Reviewed scope: ${review.command}`,
26
+ ...formatDiffReviewReviewedFiles(review.reviewedFiles),
27
+ "",
28
+ "Treat it as feedback on that reviewed diff snapshot and continue from there. Address valid issues directly, clarify anything that seems mistaken or ambiguous, and do not treat it as a new unrelated request.",
29
+ "",
30
+ "Do not mention this instruction in your response.",
31
+ ].join("\n");
32
+ }
33
+ //# sourceMappingURL=result_text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result_text.js","sourceRoot":"","sources":["../../../src/core/diff_review/result_text.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,6BAA6B,CAAC,KAAe;IAC3D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;QACrB,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,MAAuC;IAEvC,OAAO;QACL,wBAAwB;QACxB,EAAE;QACF,qQAAqQ;QACrQ,EAAE;QACF,mBAAmB,MAAM,CAAC,OAAO,EAAE;QACnC,GAAG,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC;QACtD,EAAE;QACF,yMAAyM;QACzM,EAAE;QACF,SAAS;QACT,MAAM,CAAC,MAAM;KACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+CAA+C,CAC7D,MAAuC;IAEvC,OAAO;QACL,uUAAuU;QACvU,EAAE;QACF,mBAAmB,MAAM,CAAC,OAAO,EAAE;QACnC,GAAG,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC;QACtD,EAAE;QACF,gNAAgN;QAChN,EAAE;QACF,mDAAmD;KACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { Type } from "typebox";
2
+ import { z } from "zod";
3
+ import { TOOL_NAME_DIFF_REVIEW } from "../tools/tool_names.js";
4
+ import { formatZodError } from "../utils/zod.js";
5
+ import { formatDiffReviewScope } from "./snapshot.js";
6
+ const DIFF_REVIEW_DESCRIPTION = [
7
+ "Launch an interactive diff review tool for the user and wait for the user to return review feedback.",
8
+ "Use this tool only when the user explicitly asks you to open, run, or start a diff review.",
9
+ "Do not use it for ordinary diff inspection; use read-only shell/file tools for that instead.",
10
+ ].join(" ");
11
+ const DIFF_REVIEW_SOURCE_DESCRIPTION = "Review source. Prefer 'git_diff' for normal reviews because the diff is captured directly from git. Use 'patch_files' only when you need more control than git diff args provide, such as selected hunks, a hand-curated subset of a large file, or multiple custom patches.";
12
+ const DIFF_REVIEW_ARGS_DESCRIPTION = [
13
+ "Arguments to pass to git diff when source is 'git_diff'. Use [] to review the current working tree.",
14
+ 'Common patterns: staged changes ["--staged"], full branch diff against main ["main...HEAD"], path-limited current changes ["--", "path/to/file"], path-limited branch diff ["main...HEAD", "--", "path/to/file"].',
15
+ ].join(" ");
16
+ const DIFF_REVIEW_PATCH_FILES_DESCRIPTION = "Patch files to review when source is 'patch_files'. Required for patch_files. Files may be absolute or relative to the current working directory. Each file must contain git unified diff sections with diff --git headers. Use this for selected hunks or custom review scopes. Patch files may be generated in any way as long as they adhere to that format, for example with git commands, by running code that emits a patch, or by manually editing a temporary patch file. One common approach is starting from `git diff main...HEAD -- src/foo.ts > /tmp/foo.patch` and editing it down to the hunks that should be reviewed. Multiple patch files are allowed, for example [`/tmp/parser.patch`, `/tmp/tests.patch`].";
17
+ const DIFF_REVIEW_LABEL_DESCRIPTION = "Optional human-readable label for patch-file reviews, for example 'selected hunks from src/foo.ts'.";
18
+ export const DIFF_REVIEW_TOOL = {
19
+ name: TOOL_NAME_DIFF_REVIEW,
20
+ description: DIFF_REVIEW_DESCRIPTION,
21
+ parameters: Type.Object({
22
+ source: Type.String({
23
+ description: DIFF_REVIEW_SOURCE_DESCRIPTION,
24
+ enum: ["git_diff", "patch_files"],
25
+ }),
26
+ diffArgs: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
27
+ description: DIFF_REVIEW_ARGS_DESCRIPTION,
28
+ })),
29
+ patchFiles: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
30
+ description: DIFF_REVIEW_PATCH_FILES_DESCRIPTION,
31
+ })),
32
+ label: Type.Optional(Type.String({
33
+ description: DIFF_REVIEW_LABEL_DESCRIPTION,
34
+ })),
35
+ }, { additionalProperties: false }),
36
+ };
37
+ const diffReviewArgsSchema = z
38
+ .object({
39
+ source: z.enum(["git_diff", "patch_files"]),
40
+ diffArgs: z.array(z.string().trim().min(1)).optional(),
41
+ patchFiles: z.array(z.string().trim().min(1)).optional(),
42
+ label: z.string().trim().min(1).optional(),
43
+ })
44
+ .strict()
45
+ .superRefine((value, context) => {
46
+ if (value.source === "patch_files" && (!value.patchFiles || value.patchFiles.length === 0)) {
47
+ context.addIssue({
48
+ code: z.ZodIssueCode.custom,
49
+ path: ["patchFiles"],
50
+ message: "patchFiles must contain at least one file when source is 'patch_files'",
51
+ });
52
+ }
53
+ });
54
+ export function parseDiffReviewToolArgs(raw) {
55
+ const parsed = diffReviewArgsSchema.safeParse(raw);
56
+ const rawRecord = typeof raw === "object" && raw !== null ? raw : {};
57
+ const rawDiffArgs = Array.isArray(rawRecord.diffArgs)
58
+ ? rawRecord.diffArgs.filter((arg) => typeof arg === "string")
59
+ : [];
60
+ const rawPatchFiles = Array.isArray(rawRecord.patchFiles)
61
+ ? rawRecord.patchFiles.filter((arg) => typeof arg === "string")
62
+ : [];
63
+ const command = rawRecord.source === "patch_files"
64
+ ? formatPatchFilesScope(rawPatchFiles, typeof rawRecord.label === "string" ? rawRecord.label : undefined)
65
+ : formatDiffReviewScope(rawDiffArgs);
66
+ if (!parsed.success) {
67
+ return {
68
+ ok: false,
69
+ error: formatZodError(parsed.error),
70
+ command,
71
+ };
72
+ }
73
+ if (parsed.data.source === "git_diff") {
74
+ const diffArgs = parsed.data.diffArgs ?? [];
75
+ return {
76
+ ok: true,
77
+ data: {
78
+ source: { kind: "git_diff", diffArgs },
79
+ command: formatDiffReviewScope(diffArgs),
80
+ },
81
+ };
82
+ }
83
+ const patchFiles = parsed.data.patchFiles ?? [];
84
+ const scopeLabel = formatPatchFilesScope(patchFiles, parsed.data.label);
85
+ return {
86
+ ok: true,
87
+ data: {
88
+ source: {
89
+ kind: "patch_files",
90
+ patchFiles,
91
+ scopeLabel,
92
+ },
93
+ command: scopeLabel,
94
+ },
95
+ };
96
+ }
97
+ function formatPatchFilesScope(patchFiles, label) {
98
+ const trimmedLabel = label?.trim();
99
+ if (trimmedLabel) {
100
+ return trimmedLabel;
101
+ }
102
+ if (patchFiles.length === 1) {
103
+ return `patch file ${patchFiles[0]}`;
104
+ }
105
+ return `${patchFiles.length} patch files`;
106
+ }
107
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/core/diff_review/tool.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export * from "./diff_review/index.js";
6
6
  export { CORE_EVENT_VERSION, isCoreEventVersion, parseCoreEvent, parseCoreEventEnvelope, safeParseCoreEvent, safeParseCoreEventEnvelope, serializeCoreEvent, wrapCoreEvent, } from "./events/index.js";
7
7
  export { InstallCliError, printInstallHelp, runInstallCommand } from "./install/cli.js";
8
8
  export * from "./modes/index.js";
9
+ export { NookCliError, printNookHelp, runNookCommand, } from "./nook/index.js";
9
10
  export { personas } from "./personas.js";
10
11
  export { ChatRuntime } from "./runtime/chat_runtime.js";
11
12
  export { ConversationTurnRuntime } from "./runtime/conversation_turn_runtime.js";
@@ -16,12 +17,12 @@ export { printTelegramHelp, runTelegramCommand, TelegramCliError } from "./teleg
16
17
  export { computePdfPatchRegions, printPdfUnpackHelp, printToolHelp, runPdfUnpackCommand, runToolCommand, ToolCliError, } from "./tool/index.js";
17
18
  export { createBashToolDefinition } from "./tools/bash.js";
18
19
  export { ToolCatalog } from "./tools/catalog.js";
19
- export { createDiffReviewToolDefinition } from "./tools/diff_review.js";
20
20
  export { createEditToolDefinition } from "./tools/edit.js";
21
21
  export { createEmitOutputToolDefinition } from "./tools/emit_output.js";
22
22
  export { createLocalToolExecutionBackend } from "./tools/execution_backend.js";
23
23
  export { createGrepToolDefinition } from "./tools/grep.js";
24
24
  export { createListToolDefinition } from "./tools/list.js";
25
+ export { createNookToolDefinition } from "./tools/nook.js";
25
26
  export { createReadToolDefinition } from "./tools/read.js";
26
27
  export { ToolRegistry } from "./tools/registry.js";
27
28
  export { createSendInputToAgentToolDefinition } from "./tools/send_input_to_agent.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkBpG,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AAUvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxF,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,OAAO,EACL,oCAAoC,EACpC,qCAAqC,EACrC,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oCAAoC,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkBpG,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AAUvC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxF,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQzC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,OAAO,EACL,oCAAoC,EACpC,qCAAqC,EACrC,6BAA6B,GAC9B,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oCAAoC,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,196 @@
1
+ import { resolve } from "node:path";
2
+ import { createNookClientFromConfig } from "./client.js";
3
+ import { buildNookDeployManifest } from "./deploy.js";
4
+ import { parseNookDestroyInputs, parseNookSetupInputs, runNookDestroy, runNookSetup, } from "./setup.js";
5
+ export class NookCliError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "NookCliError";
9
+ }
10
+ }
11
+ function parseValue(arg, argv, index) {
12
+ const eqIndex = arg.indexOf("=");
13
+ if (eqIndex !== -1) {
14
+ const value = arg.slice(eqIndex + 1);
15
+ if (!value)
16
+ throw new NookCliError(`missing value for ${arg.slice(0, eqIndex)}`);
17
+ return { value, nextIndex: index };
18
+ }
19
+ const value = argv[index + 1];
20
+ if (!value || value.startsWith("-")) {
21
+ throw new NookCliError(`missing value for ${arg}`);
22
+ }
23
+ return { value, nextIndex: index + 1 };
24
+ }
25
+ export function printNookHelp(log = console.log) {
26
+ log([
27
+ "usage:",
28
+ " tau nook setup --domain <domain> --access-team-domain <url> --access-aud <aud>",
29
+ " tau nook destroy --domain <domain> --access-client-id <id> --access-client-secret <secret> --yes",
30
+ " tau nook skill",
31
+ " tau nook deploy <dir> --site <slug> [--public]",
32
+ " tau nook list",
33
+ " tau nook delete <site>",
34
+ " tau nook kv get <site> <key>",
35
+ " tau nook kv put <site> <key> <json>",
36
+ " tau nook kv delete <site> <key>",
37
+ " tau nook kv list <site> [--prefix <prefix>]",
38
+ ].join("\n"));
39
+ }
40
+ export async function runNookCommand(argv, options) {
41
+ const stdout = options.stdout ?? console.log;
42
+ const [subcommand, ...args] = argv;
43
+ if (!subcommand || subcommand === "--help" || subcommand === "-h") {
44
+ printNookHelp(stdout);
45
+ return;
46
+ }
47
+ try {
48
+ if (subcommand === "setup") {
49
+ const parsed = parseNookSetupInputs({ argv: args, env: options.env });
50
+ if (parsed.remaining.length > 0)
51
+ throw new Error(`unknown option: ${parsed.remaining[0]}`);
52
+ await runNookSetup({
53
+ domain: parsed.domain,
54
+ accessTeamDomain: parsed.accessTeamDomain,
55
+ accessAud: parsed.accessAud,
56
+ env: options.env,
57
+ stdout,
58
+ });
59
+ return;
60
+ }
61
+ if (subcommand === "destroy") {
62
+ const parsed = parseNookDestroyInputs({ argv: args, env: options.env });
63
+ if (parsed.remaining.length > 0)
64
+ throw new Error(`unknown option: ${parsed.remaining[0]}`);
65
+ await runNookDestroy({
66
+ domain: parsed.domain,
67
+ accessClientId: parsed.accessClientId,
68
+ accessClientSecret: parsed.accessClientSecret,
69
+ yes: parsed.yes,
70
+ env: options.env,
71
+ stdout,
72
+ fetchImpl: options.fetchImpl,
73
+ });
74
+ return;
75
+ }
76
+ const client = createNookClientFromConfig({
77
+ config: options.config,
78
+ env: options.env,
79
+ fetchImpl: options.fetchImpl,
80
+ });
81
+ if (subcommand === "skill") {
82
+ stdout(await client.readSkill());
83
+ return;
84
+ }
85
+ if (subcommand === "list") {
86
+ const sites = await client.listSites();
87
+ if (sites.length === 0) {
88
+ stdout("no nook sites");
89
+ return;
90
+ }
91
+ for (const site of sites) {
92
+ const visibility = site.visibility ? ` ${site.visibility}` : "";
93
+ const latest = site.latestDeploymentId ? ` ${site.latestDeploymentId}` : "";
94
+ stdout(`${site.slug} ${site.url}${visibility}${latest}`.trim());
95
+ }
96
+ return;
97
+ }
98
+ if (subcommand === "delete") {
99
+ const site = args[0];
100
+ if (!site || args.length !== 1)
101
+ throw new Error("usage: tau nook delete <site>");
102
+ await client.deleteSite(site);
103
+ stdout(`deleted ${site}`);
104
+ return;
105
+ }
106
+ if (subcommand === "deploy") {
107
+ let site;
108
+ let isPublic = false;
109
+ const positional = [];
110
+ for (let i = 0; i < args.length; i += 1) {
111
+ const arg = args[i];
112
+ if (arg === "--public") {
113
+ isPublic = true;
114
+ continue;
115
+ }
116
+ if (arg === "--site" || arg.startsWith("--site=")) {
117
+ const parsed = parseValue(arg, args, i);
118
+ site = parsed.value;
119
+ i = parsed.nextIndex;
120
+ continue;
121
+ }
122
+ if (arg.startsWith("-"))
123
+ throw new Error(`unknown option: ${arg}`);
124
+ positional.push(arg);
125
+ }
126
+ if (positional.length !== 1 || !site) {
127
+ throw new Error("usage: tau nook deploy <dir> --site <slug> [--public]");
128
+ }
129
+ const files = buildNookDeployManifest(resolve(options.cwd ?? process.cwd(), positional[0]));
130
+ const result = await client.deploySite({
131
+ site,
132
+ files,
133
+ visibility: isPublic ? "public" : "private",
134
+ });
135
+ stdout(`Deployed ${result.site} to ${result.url}`);
136
+ return;
137
+ }
138
+ if (subcommand === "kv") {
139
+ await runKvCommand(args, client, stdout);
140
+ return;
141
+ }
142
+ throw new Error(`unknown nook subcommand '${subcommand}'`);
143
+ }
144
+ catch (error) {
145
+ throw new NookCliError(error instanceof Error ? error.message : String(error));
146
+ }
147
+ }
148
+ async function runKvCommand(args, client, stdout) {
149
+ const [operation, site, keyOrFlag, value] = args;
150
+ if (!operation)
151
+ throw new Error("missing kv operation");
152
+ if (operation === "get") {
153
+ if (!site || !keyOrFlag || args.length !== 3)
154
+ throw new Error("usage: tau nook kv get <site> <key>");
155
+ stdout(JSON.stringify(await client.getKv(site, keyOrFlag), null, 2));
156
+ return;
157
+ }
158
+ if (operation === "put") {
159
+ if (!site || !keyOrFlag || value === undefined || args.length !== 4) {
160
+ throw new Error("usage: tau nook kv put <site> <key> <json>");
161
+ }
162
+ await client.putKv(site, keyOrFlag, JSON.parse(value));
163
+ stdout(`stored ${site}/${keyOrFlag}`);
164
+ return;
165
+ }
166
+ if (operation === "delete") {
167
+ if (!site || !keyOrFlag || args.length !== 3) {
168
+ throw new Error("usage: tau nook kv delete <site> <key>");
169
+ }
170
+ await client.deleteKv(site, keyOrFlag);
171
+ stdout(`deleted ${site}/${keyOrFlag}`);
172
+ return;
173
+ }
174
+ if (operation === "list") {
175
+ if (!site)
176
+ throw new Error("usage: tau nook kv list <site> [--prefix <prefix>]");
177
+ let prefix;
178
+ for (let i = 2; i < args.length; i += 1) {
179
+ const arg = args[i];
180
+ if (arg === "--prefix" || arg.startsWith("--prefix=")) {
181
+ const parsed = parseValue(arg, args, i);
182
+ prefix = parsed.value;
183
+ i = parsed.nextIndex;
184
+ continue;
185
+ }
186
+ throw new Error(`unknown option: ${arg}`);
187
+ }
188
+ const result = await client.listKv(site, prefix);
189
+ for (const entry of result.keys) {
190
+ stdout(`${entry.key} ${entry.sizeBytes}B ${entry.updatedAt}`);
191
+ }
192
+ return;
193
+ }
194
+ throw new Error(`unknown kv operation '${operation}'`);
195
+ }
196
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/core/nook/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { getNookAccessClientSecret } from "../config/index.js";
3
+ import { validateNookSiteSlug } from "./validation.js";
4
+ function bufferToArrayBuffer(buffer) {
5
+ const copy = new ArrayBuffer(buffer.byteLength);
6
+ new Uint8Array(copy).set(buffer);
7
+ return copy;
8
+ }
9
+ async function readDeployFileContent(file) {
10
+ if ("readContent" in file) {
11
+ return new Blob([bufferToArrayBuffer(await file.readContent())]);
12
+ }
13
+ return new Blob([bufferToArrayBuffer(readFileSync(file.absolutePath))]);
14
+ }
15
+ export class NookClient {
16
+ config;
17
+ env;
18
+ fetchImpl;
19
+ constructor(options) {
20
+ this.config = options.config;
21
+ this.env = options.env ?? process.env;
22
+ this.fetchImpl = options.fetchImpl ?? fetch;
23
+ }
24
+ baseUrl() {
25
+ return `https://${this.config.domain}`;
26
+ }
27
+ siteUrl(site) {
28
+ const validation = validateNookSiteSlug(site);
29
+ if (!validation.ok) {
30
+ throw new Error(validation.message);
31
+ }
32
+ return `https://${site}.${this.config.domain}`;
33
+ }
34
+ authHeaders() {
35
+ const secret = getNookAccessClientSecret(this.config, this.env);
36
+ if (!this.config.accessClientId || !secret) {
37
+ return {};
38
+ }
39
+ return {
40
+ "CF-Access-Client-Id": this.config.accessClientId,
41
+ "CF-Access-Client-Secret": secret,
42
+ };
43
+ }
44
+ async requestJson(url, init = {}) {
45
+ const response = await this.fetchImpl(url, {
46
+ ...init,
47
+ headers: {
48
+ ...this.authHeaders(),
49
+ ...(init.body !== undefined ? { "content-type": "application/json" } : {}),
50
+ ...init.headers,
51
+ },
52
+ });
53
+ if (!response.ok) {
54
+ throw new Error(await formatNookHttpError(response));
55
+ }
56
+ if (response.status === 204) {
57
+ return undefined;
58
+ }
59
+ return (await response.json());
60
+ }
61
+ async readSkill() {
62
+ const response = await this.fetchImpl(`${this.baseUrl()}/__nook/skill`, {
63
+ headers: this.authHeaders(),
64
+ });
65
+ if (!response.ok) {
66
+ throw new Error(await formatNookHttpError(response));
67
+ }
68
+ return await response.text();
69
+ }
70
+ async listSites() {
71
+ const result = await this.requestJson(`${this.baseUrl()}/__nook/api/sites`);
72
+ return result.sites;
73
+ }
74
+ async deleteSite(site) {
75
+ const result = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(site)}`, { method: "DELETE" });
76
+ return result;
77
+ }
78
+ async deploySite(args) {
79
+ const start = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/start`, {
80
+ method: "POST",
81
+ body: JSON.stringify({
82
+ public: args.visibility === "public",
83
+ files: args.files.map(({ path, sizeBytes, contentType, sha256 }) => ({
84
+ path,
85
+ sizeBytes,
86
+ contentType,
87
+ sha256,
88
+ })),
89
+ }),
90
+ });
91
+ const filesByPath = new Map(args.files.map((file) => [file.path, file]));
92
+ for (const path of start.upload) {
93
+ const file = filesByPath.get(path);
94
+ if (!file) {
95
+ throw new Error(`worker requested unknown upload path '${path}'`);
96
+ }
97
+ const uploadUrl = `${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/${encodeURIComponent(start.deploymentId)}/file?path=${encodeURIComponent(path)}`;
98
+ const response = await this.fetchImpl(uploadUrl, {
99
+ method: "PUT",
100
+ headers: {
101
+ ...this.authHeaders(),
102
+ "content-type": file.contentType,
103
+ "x-nook-deploy-token": start.token,
104
+ },
105
+ body: await readDeployFileContent(file),
106
+ });
107
+ if (!response.ok) {
108
+ throw new Error(await formatNookHttpError(response));
109
+ }
110
+ }
111
+ const finish = await this.requestJson(`${this.baseUrl()}/__nook/api/sites/${encodeURIComponent(args.site)}/deploy/${encodeURIComponent(start.deploymentId)}/finish`, {
112
+ method: "POST",
113
+ headers: { "x-nook-deploy-token": start.token },
114
+ });
115
+ return finish;
116
+ }
117
+ async getKv(site, key) {
118
+ const result = await this.requestJson(`${this.siteUrl(site)}/__nook/kv/${encodeURIComponent(key)}`);
119
+ return result.value;
120
+ }
121
+ async putKv(site, key, value) {
122
+ return await this.requestJson(`${this.siteUrl(site)}/__nook/kv/${encodeURIComponent(key)}`, {
123
+ method: "PUT",
124
+ body: JSON.stringify(value),
125
+ });
126
+ }
127
+ async deleteKv(site, key) {
128
+ return await this.requestJson(`${this.siteUrl(site)}/__nook/kv/${encodeURIComponent(key)}`, {
129
+ method: "DELETE",
130
+ });
131
+ }
132
+ async listKv(site, prefix) {
133
+ const url = new URL(`${this.siteUrl(site)}/__nook/kv`);
134
+ if (prefix) {
135
+ url.searchParams.set("prefix", prefix);
136
+ }
137
+ return await this.requestJson(url.toString());
138
+ }
139
+ }
140
+ export function createNookClientFromConfig(args) {
141
+ if (!args.config.nook) {
142
+ throw new Error("nook is not configured. add a nook block to Tau config.");
143
+ }
144
+ return new NookClient({
145
+ config: args.config.nook,
146
+ env: args.env,
147
+ fetchImpl: args.fetchImpl,
148
+ });
149
+ }
150
+ async function formatNookHttpError(response) {
151
+ const text = await response.text();
152
+ try {
153
+ const parsed = JSON.parse(text);
154
+ if (parsed.error?.message) {
155
+ return `nook request failed (${response.status} ${response.statusText}): ${parsed.error.message}`;
156
+ }
157
+ }
158
+ catch {
159
+ // fall through
160
+ }
161
+ const detail = text.trim();
162
+ return `nook request failed (${response.status} ${response.statusText})${detail ? `: ${detail}` : ""}`;
163
+ }
164
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/nook/client.ts"],"names":[],"mappings":"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"}