@oh-my-pi/pi-coding-agent 16.0.5 → 16.0.7

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 (223) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/cli.js +1945 -1386
  3. package/dist/types/advisor/advise-tool.d.ts +22 -19
  4. package/dist/types/autoresearch/tools/init-experiment.d.ts +13 -17
  5. package/dist/types/autoresearch/tools/log-experiment.d.ts +17 -19
  6. package/dist/types/autoresearch/tools/run-experiment.d.ts +3 -4
  7. package/dist/types/autoresearch/tools/update-notes.d.ts +4 -5
  8. package/dist/types/cli/ttsr-cli.d.ts +39 -0
  9. package/dist/types/commands/ttsr.d.ts +57 -0
  10. package/dist/types/commit/agentic/tools/analyze-file.d.ts +4 -5
  11. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +4 -5
  12. package/dist/types/commit/agentic/tools/git-hunk.d.ts +5 -6
  13. package/dist/types/commit/agentic/tools/git-overview.d.ts +4 -5
  14. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +23 -24
  15. package/dist/types/commit/agentic/tools/propose-commit.d.ts +11 -32
  16. package/dist/types/commit/agentic/tools/recent-commits.d.ts +3 -4
  17. package/dist/types/commit/agentic/tools/schemas.d.ts +6 -27
  18. package/dist/types/commit/agentic/tools/split-commit.d.ts +28 -49
  19. package/dist/types/commit/changelog/generate.d.ts +12 -13
  20. package/dist/types/commit/shared-llm.d.ts +10 -37
  21. package/dist/types/config/config-file.d.ts +4 -4
  22. package/dist/types/config/keybindings.d.ts +5 -0
  23. package/dist/types/config/models-config-schema.d.ts +625 -990
  24. package/dist/types/config/models-config.d.ts +229 -217
  25. package/dist/types/config/settings-schema.d.ts +53 -23
  26. package/dist/types/edit/hashline/params.d.ts +7 -11
  27. package/dist/types/edit/index.d.ts +2 -1
  28. package/dist/types/edit/modes/apply-patch.d.ts +4 -5
  29. package/dist/types/edit/modes/patch.d.ts +15 -24
  30. package/dist/types/edit/modes/replace.d.ts +16 -17
  31. package/dist/types/eval/js/index.d.ts +1 -0
  32. package/dist/types/extensibility/custom-commands/types.d.ts +6 -3
  33. package/dist/types/extensibility/custom-tools/types.d.ts +8 -5
  34. package/dist/types/extensibility/extensions/types.d.ts +6 -3
  35. package/dist/types/extensibility/hooks/types.d.ts +7 -4
  36. package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +13 -5
  37. package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +17 -0
  38. package/dist/types/extensibility/typebox.d.ts +80 -58
  39. package/dist/types/goals/tools/goal-tool.d.ts +11 -24
  40. package/dist/types/index.d.ts +2 -0
  41. package/dist/types/lsp/index.d.ts +11 -26
  42. package/dist/types/lsp/types.d.ts +12 -28
  43. package/dist/types/mcp/client.d.ts +8 -0
  44. package/dist/types/modes/components/btw-panel.d.ts +1 -0
  45. package/dist/types/modes/components/custom-editor.d.ts +3 -1
  46. package/dist/types/modes/controllers/btw-controller.d.ts +2 -0
  47. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  48. package/dist/types/modes/interactive-mode.d.ts +3 -0
  49. package/dist/types/modes/setup-wizard/index.d.ts +1 -0
  50. package/dist/types/modes/setup-wizard/startup-splash.d.ts +7 -0
  51. package/dist/types/modes/theme/theme.d.ts +1 -1
  52. package/dist/types/modes/types.d.ts +3 -0
  53. package/dist/types/sdk.d.ts +5 -0
  54. package/dist/types/session/agent-session.d.ts +4 -0
  55. package/dist/types/startup-splash.d.ts +12 -0
  56. package/dist/types/task/types.d.ts +47 -48
  57. package/dist/types/tools/ask.d.ts +26 -27
  58. package/dist/types/tools/ast-edit.d.ts +17 -17
  59. package/dist/types/tools/ast-grep.d.ts +12 -13
  60. package/dist/types/tools/bash.d.ts +20 -17
  61. package/dist/types/tools/browser.d.ts +46 -71
  62. package/dist/types/tools/checkpoint.d.ts +14 -15
  63. package/dist/types/tools/debug.d.ts +82 -145
  64. package/dist/types/tools/eval.d.ts +30 -40
  65. package/dist/types/tools/find.d.ts +17 -18
  66. package/dist/types/tools/gh.d.ts +49 -78
  67. package/dist/types/tools/image-gen.d.ts +20 -36
  68. package/dist/types/tools/inspect-image.d.ts +10 -11
  69. package/dist/types/tools/irc.d.ts +22 -33
  70. package/dist/types/tools/job.d.ts +11 -12
  71. package/dist/types/tools/learn.d.ts +21 -28
  72. package/dist/types/tools/manage-skill.d.ts +13 -22
  73. package/dist/types/tools/memory-edit.d.ts +15 -24
  74. package/dist/types/tools/memory-recall.d.ts +7 -8
  75. package/dist/types/tools/memory-reflect.d.ts +9 -10
  76. package/dist/types/tools/memory-retain.d.ts +13 -14
  77. package/dist/types/tools/read.d.ts +7 -8
  78. package/dist/types/tools/resolve.d.ts +11 -18
  79. package/dist/types/tools/review.d.ts +9 -15
  80. package/dist/types/tools/search-tool-bm25.d.ts +9 -10
  81. package/dist/types/tools/search.d.ts +16 -17
  82. package/dist/types/tools/ssh.d.ts +14 -15
  83. package/dist/types/tools/todo.d.ts +27 -43
  84. package/dist/types/tools/tts.d.ts +8 -9
  85. package/dist/types/tools/write.d.ts +9 -10
  86. package/dist/types/tui/index.d.ts +1 -0
  87. package/dist/types/tui/width-aware-text.d.ts +23 -0
  88. package/dist/types/utils/markit.d.ts +10 -1
  89. package/dist/types/web/search/index.d.ts +17 -28
  90. package/dist/types/web/search/providers/perplexity.d.ts +0 -2
  91. package/dist/types/web/search/types.d.ts +32 -26
  92. package/package.json +14 -13
  93. package/scripts/omp +1 -1
  94. package/src/advisor/__tests__/advisor.test.ts +44 -1
  95. package/src/advisor/advise-tool.ts +34 -11
  96. package/src/autoresearch/tools/init-experiment.ts +13 -16
  97. package/src/autoresearch/tools/log-experiment.ts +15 -18
  98. package/src/autoresearch/tools/run-experiment.ts +3 -3
  99. package/src/autoresearch/tools/update-notes.ts +4 -4
  100. package/src/cli/ttsr-cli.ts +995 -0
  101. package/src/cli-commands.ts +1 -0
  102. package/src/cli.ts +7 -1
  103. package/src/commands/ttsr.ts +125 -0
  104. package/src/commit/agentic/tools/analyze-file.ts +4 -4
  105. package/src/commit/agentic/tools/git-file-diff.ts +4 -4
  106. package/src/commit/agentic/tools/git-hunk.ts +7 -5
  107. package/src/commit/agentic/tools/git-overview.ts +4 -4
  108. package/src/commit/agentic/tools/propose-changelog.ts +18 -15
  109. package/src/commit/agentic/tools/propose-commit.ts +6 -6
  110. package/src/commit/agentic/tools/recent-commits.ts +3 -3
  111. package/src/commit/agentic/tools/schemas.ts +8 -20
  112. package/src/commit/agentic/tools/split-commit.ts +19 -23
  113. package/src/commit/analysis/summary.ts +7 -5
  114. package/src/commit/changelog/generate.ts +15 -11
  115. package/src/commit/shared-llm.ts +17 -24
  116. package/src/config/config-file.ts +13 -15
  117. package/src/config/keybindings.ts +6 -0
  118. package/src/config/models-config-schema.ts +206 -179
  119. package/src/config/settings-schema.ts +34 -0
  120. package/src/discovery/builtin-rules/index.ts +2 -0
  121. package/src/discovery/builtin-rules/ts-import-type.md +2 -2
  122. package/src/discovery/builtin-rules/ts-no-any.md +11 -2
  123. package/src/discovery/builtin-rules/ts-no-inline-cast-access.md +55 -0
  124. package/src/edit/hashline/params.ts +12 -11
  125. package/src/edit/index.ts +5 -4
  126. package/src/edit/modes/apply-patch.ts +4 -4
  127. package/src/edit/modes/patch.ts +15 -18
  128. package/src/edit/modes/replace.ts +13 -17
  129. package/src/edit/renderer.ts +0 -1
  130. package/src/eval/agent-bridge.ts +11 -13
  131. package/src/eval/completion-bridge.ts +25 -17
  132. package/src/eval/js/context-manager.ts +17 -2
  133. package/src/eval/js/index.ts +1 -1
  134. package/src/eval/py/executor.ts +2 -2
  135. package/src/extensibility/custom-commands/loader.ts +5 -3
  136. package/src/extensibility/custom-commands/types.ts +6 -3
  137. package/src/extensibility/custom-tools/loader.ts +4 -2
  138. package/src/extensibility/custom-tools/types.ts +8 -5
  139. package/src/extensibility/extensions/loader.ts +4 -2
  140. package/src/extensibility/extensions/types.ts +6 -3
  141. package/src/extensibility/hooks/loader.ts +5 -2
  142. package/src/extensibility/hooks/types.ts +7 -4
  143. package/src/extensibility/legacy-pi-ai-shim.ts +42 -5
  144. package/src/extensibility/legacy-pi-coding-agent-shim.ts +113 -0
  145. package/src/extensibility/plugins/legacy-pi-compat.ts +13 -13
  146. package/src/extensibility/tool-proxy.ts +4 -1
  147. package/src/extensibility/typebox.ts +778 -251
  148. package/src/goals/guided-setup.ts +12 -3
  149. package/src/goals/tools/goal-tool.ts +6 -6
  150. package/src/index.ts +2 -0
  151. package/src/internal-urls/docs-index.generated.ts +11 -9
  152. package/src/lsp/types.ts +13 -27
  153. package/src/main.ts +19 -18
  154. package/src/mcp/client.ts +38 -13
  155. package/src/mcp/render.ts +102 -89
  156. package/src/modes/components/agent-hub.ts +11 -4
  157. package/src/modes/components/btw-panel.ts +5 -1
  158. package/src/modes/components/custom-editor.ts +18 -0
  159. package/src/modes/components/status-line/component.ts +8 -1
  160. package/src/modes/components/tool-execution.ts +17 -10
  161. package/src/modes/controllers/btw-controller.ts +69 -1
  162. package/src/modes/controllers/input-controller.ts +29 -0
  163. package/src/modes/interactive-mode.ts +38 -8
  164. package/src/modes/setup-wizard/index.ts +1 -0
  165. package/src/modes/setup-wizard/scenes/sign-in.ts +77 -5
  166. package/src/modes/setup-wizard/startup-splash.ts +107 -0
  167. package/src/modes/theme/theme.ts +133 -143
  168. package/src/modes/types.ts +3 -0
  169. package/src/modes/utils/context-usage.ts +9 -5
  170. package/src/modes/utils/hotkeys-markdown.ts +1 -0
  171. package/src/prompts/system/system-prompt.md +1 -0
  172. package/src/sdk.ts +21 -4
  173. package/src/session/agent-session.ts +173 -33
  174. package/src/session/session-history-format.ts +11 -2
  175. package/src/session/snapcompact-inline.ts +1 -1
  176. package/src/slash-commands/builtin-registry.ts +3 -10
  177. package/src/startup-splash.ts +19 -0
  178. package/src/task/executor.ts +11 -6
  179. package/src/task/types.ts +44 -41
  180. package/src/tool-discovery/tool-index.ts +17 -4
  181. package/src/tools/ask.ts +14 -14
  182. package/src/tools/ast-edit.ts +17 -14
  183. package/src/tools/ast-grep.ts +10 -9
  184. package/src/tools/bash.ts +15 -10
  185. package/src/tools/browser/launch.ts +13 -0
  186. package/src/tools/browser.ts +26 -32
  187. package/src/tools/checkpoint.ts +7 -7
  188. package/src/tools/debug.ts +72 -69
  189. package/src/tools/eval.ts +18 -19
  190. package/src/tools/find.ts +20 -13
  191. package/src/tools/gh.ts +29 -49
  192. package/src/tools/image-gen.ts +27 -32
  193. package/src/tools/inspect-image.ts +8 -9
  194. package/src/tools/irc.ts +12 -12
  195. package/src/tools/job.ts +6 -6
  196. package/src/tools/learn.ts +11 -14
  197. package/src/tools/manage-skill.ts +19 -23
  198. package/src/tools/memory-edit.ts +8 -8
  199. package/src/tools/memory-recall.ts +4 -4
  200. package/src/tools/memory-reflect.ts +5 -5
  201. package/src/tools/memory-retain.ts +9 -11
  202. package/src/tools/puppeteer/02_stealth_hairline.txt +1 -1
  203. package/src/tools/puppeteer/04_stealth_iframe.txt +4 -4
  204. package/src/tools/puppeteer/05_stealth_webgl.txt +1 -1
  205. package/src/tools/puppeteer/10_stealth_plugins.txt +6 -4
  206. package/src/tools/puppeteer/12_stealth_codecs.txt +2 -2
  207. package/src/tools/puppeteer/13_stealth_worker.txt +1 -1
  208. package/src/tools/read.ts +169 -13
  209. package/src/tools/report-tool-issue.ts +6 -6
  210. package/src/tools/resolve.ts +6 -6
  211. package/src/tools/review.ts +10 -12
  212. package/src/tools/search-tool-bm25.ts +5 -5
  213. package/src/tools/search.ts +20 -29
  214. package/src/tools/ssh.ts +8 -8
  215. package/src/tools/todo.ts +16 -19
  216. package/src/tools/tts.ts +16 -15
  217. package/src/tools/write.ts +5 -5
  218. package/src/tui/index.ts +1 -0
  219. package/src/tui/width-aware-text.ts +58 -0
  220. package/src/utils/markit.ts +17 -2
  221. package/src/web/search/index.ts +9 -9
  222. package/src/web/search/providers/perplexity.ts +373 -126
  223. package/src/web/search/types.ts +28 -48
@@ -1,19 +1,23 @@
1
- import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
1
+ import type {
2
+ AgentIdentity,
3
+ AgentTelemetryConfig,
4
+ AgentTool,
5
+ AgentToolContext,
6
+ AgentToolResult,
7
+ AgentToolUpdateCallback,
8
+ } from "@oh-my-pi/pi-agent-core";
2
9
  import { escapeXmlText } from "@oh-my-pi/pi-utils";
3
- import { z } from "zod/v4";
10
+ import { type } from "arktype";
4
11
  import adviseDescription from "../prompts/advisor/advise-tool.md" with { type: "text" };
5
12
 
6
- const adviseSchema = z.object({
7
- note: z
8
- .string()
9
- .describe("One concrete piece of advice for the agent you are watching. Terse, specific, actionable."),
10
- severity: z
11
- .enum(["nit", "concern", "blocker"])
12
- .optional()
13
- .describe("How strongly to weigh this. Omit for a plain nit."),
13
+ const adviseSchema = type({
14
+ note: type("string").describe(
15
+ "One concrete piece of advice for the agent you are watching. Terse, specific, actionable.",
16
+ ),
17
+ "severity?": type("'nit' | 'concern' | 'blocker'").describe("How strongly to weigh this. Omit for a plain nit."),
14
18
  });
15
19
 
16
- export type AdviseParams = z.infer<typeof adviseSchema>;
20
+ export type AdviseParams = typeof adviseSchema.infer;
17
21
 
18
22
  export type AdvisorSeverity = "nit" | "concern" | "blocker";
19
23
 
@@ -109,6 +113,25 @@ export function resolveAdvisorDeliveryChannel(opts: {
109
113
  return "steer";
110
114
  }
111
115
 
116
+ /**
117
+ * Derive the advisor loop's telemetry from the primary session's config so the
118
+ * advisor model's GenAI spans and usage/cost hooks (onChatUsage, onCostDelta,
119
+ * costEstimator) fire under the same pipeline as every other model call —
120
+ * stamped with the advisor's own agent identity. `conversationId` is cleared so
121
+ * the advisor loop falls back to its own `-advisor` session id for
122
+ * `gen_ai.conversation.id` instead of inheriting the primary's conversation.
123
+ *
124
+ * Returns undefined when the primary has no telemetry (instrumentation off), so
125
+ * the advisor `Agent` stays a zero-overhead no-op as well.
126
+ */
127
+ export function deriveAdvisorTelemetry(
128
+ primaryTelemetry: AgentTelemetryConfig | undefined,
129
+ identity: AgentIdentity,
130
+ ): AgentTelemetryConfig | undefined {
131
+ if (!primaryTelemetry) return undefined;
132
+ return { ...primaryTelemetry, agent: identity, conversationId: undefined };
133
+ }
134
+
112
135
  /**
113
136
  * Side-effect-free investigation tools handed to the advisor agent so it can
114
137
  * inspect the workspace before weighing in. Names match the primary session's
@@ -1,7 +1,7 @@
1
1
  import * as path from "node:path";
2
2
 
3
3
  import { Text } from "@oh-my-pi/pi-tui";
4
- import { z } from "zod/v4";
4
+ import { type } from "arktype";
5
5
  import type { ToolDefinition } from "../../extensibility/extensions";
6
6
  import type { Theme } from "../../modes/theme/theme";
7
7
  import { replaceTabs, truncateToWidth } from "../../tools/render-utils";
@@ -16,21 +16,18 @@ export const HARNESS_FILENAME = "autoresearch.sh";
16
16
  export const DEFAULT_HARNESS_COMMAND = `bash ${HARNESS_FILENAME}`;
17
17
  const HARNESS_COMMIT_TITLE = "autoresearch: harness setup";
18
18
 
19
- const initExperimentSchema = z.object({
20
- name: z.string().describe("experiment name"),
21
- goal: z.string().describe("session goal").optional(),
22
- primary_metric: z.string().describe("primary metric name"),
23
- metric_unit: z.string().describe("metric unit (e.g. ms, µs, mb)").optional(),
24
- direction: z
25
- .enum(["lower", "higher"] as const)
26
- .describe("better direction (default lower)")
27
- .optional(),
28
- secondary_metrics: z.array(z.string()).describe("secondary metric names").optional(),
29
- scope_paths: z.array(z.string()).describe("expected-to-modify paths").optional(),
30
- off_limits: z.array(z.string()).describe("off-limits paths").optional(),
31
- constraints: z.array(z.string()).describe("free-form constraints").optional(),
32
- max_iterations: z.number().describe("soft iteration cap per segment").optional(),
33
- new_segment: z.boolean().describe("bump to a new segment in existing session").optional(),
19
+ const initExperimentSchema = type({
20
+ name: type("string").describe("experiment name"),
21
+ "goal?": type("string").describe("session goal"),
22
+ primary_metric: type("string").describe("primary metric name"),
23
+ "metric_unit?": type("string").describe("metric unit (e.g. ms, µs, mb)"),
24
+ "direction?": type("'lower' | 'higher'").describe("better direction (default lower)"),
25
+ "secondary_metrics?": type("string[]").describe("secondary metric names"),
26
+ "scope_paths?": type("string[]").describe("expected-to-modify paths"),
27
+ "off_limits?": type("string[]").describe("off-limits paths"),
28
+ "constraints?": type("string[]").describe("free-form constraints"),
29
+ "max_iterations?": type("number").describe("soft iteration cap per segment"),
30
+ "new_segment?": type("boolean").describe("bump to a new segment in existing session"),
34
31
  });
35
32
 
36
33
  interface InitExperimentDetails {
@@ -2,7 +2,7 @@ import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
 
4
4
  import { Text } from "@oh-my-pi/pi-tui";
5
- import { z } from "zod/v4";
5
+ import { type } from "arktype";
6
6
  import type { ToolDefinition } from "../../extensibility/extensions";
7
7
  import type { Theme } from "../../modes/theme/theme";
8
8
  import { replaceTabs, truncateToWidth } from "../../tools/render-utils";
@@ -36,23 +36,20 @@ import type {
36
36
 
37
37
  const EXPERIMENT_TOOL_NAMES = ["init_experiment", "run_experiment", "log_experiment", "update_notes"];
38
38
 
39
- const logExperimentSchema = z.object({
40
- metric: z.number().describe("primary metric value"),
41
- status: z.enum(["keep", "discard", "crash", "checks_failed"] as const).describe("run outcome"),
42
- description: z.string().describe("short run description"),
43
- metrics: z.record(z.string(), z.number()).describe("secondary metrics").optional(),
44
- asi: z.object({}).passthrough().describe("free-form structured metadata").optional(),
45
- commit: z.string().describe("override recorded commit hash").optional(),
46
- justification: z.string().describe("required when keeping a scope-deviating run").optional(),
47
- flag_runs: z
48
- .array(
49
- z.object({
50
- run_id: z.number().describe("run id to flag"),
51
- reason: z.string().describe("why this run is suspect"),
52
- }),
53
- )
54
- .describe("flag earlier runs as suspect")
55
- .optional(),
39
+ const logExperimentSchema = type({
40
+ metric: type("number").describe("primary metric value"),
41
+ status: type("'keep'|'discard'|'crash'|'checks_failed'").describe("run outcome"),
42
+ description: type("string").describe("short run description"),
43
+ "metrics?": type({ "[string]": "number" }).describe("secondary metrics"),
44
+ "asi?": type({ "[string]": "unknown" }).describe("free-form structured metadata"),
45
+ "commit?": type("string").describe("override recorded commit hash"),
46
+ "justification?": type("string").describe("required when keeping a scope-deviating run"),
47
+ "flag_runs?": type({
48
+ run_id: type("number.integer").describe("run id to flag"),
49
+ reason: type("string").describe("why this run is suspect"),
50
+ })
51
+ .array()
52
+ .describe("flag earlier runs as suspect"),
56
53
  });
57
54
 
58
55
  export function createLogExperimentTool(
@@ -2,7 +2,7 @@ import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
  import { Text } from "@oh-my-pi/pi-tui";
4
4
  import { formatBytes } from "@oh-my-pi/pi-utils";
5
- import { z } from "zod/v4";
5
+ import { type } from "arktype";
6
6
  import { executeBash } from "../../exec/bash-executor";
7
7
  import type { ToolDefinition } from "../../extensibility/extensions";
8
8
  import type { Theme } from "../../modes/theme/theme";
@@ -25,8 +25,8 @@ import { openAutoresearchStorageIfExists } from "../storage";
25
25
  import type { AutoresearchToolFactoryOptions, RunDetails, RunExperimentProgressDetails } from "../types";
26
26
  import { DEFAULT_HARNESS_COMMAND } from "./init-experiment";
27
27
 
28
- const runExperimentSchema = z.object({
29
- timeout_seconds: z.number().describe("timeout in seconds (default 600)").optional(),
28
+ const runExperimentSchema = type({
29
+ "timeout_seconds?": type("number").describe("timeout in seconds (default 600)"),
30
30
  });
31
31
 
32
32
  interface ProcessExecutionResult {
@@ -1,5 +1,5 @@
1
1
  import { Text } from "@oh-my-pi/pi-tui";
2
- import { z } from "zod/v4";
2
+ import { type } from "arktype";
3
3
  import type { ToolDefinition } from "../../extensibility/extensions";
4
4
  import type { Theme } from "../../modes/theme/theme";
5
5
  import { replaceTabs, truncateToWidth } from "../../tools/render-utils";
@@ -8,9 +8,9 @@ import { buildExperimentState } from "../state";
8
8
  import { openAutoresearchStorageIfExists } from "../storage";
9
9
  import type { AutoresearchToolFactoryOptions } from "../types";
10
10
 
11
- const updateNotesSchema = z.object({
12
- body: z.string().describe("replacement notes body"),
13
- append_idea: z.string().describe("append as bullet under Ideas instead of replacing body").optional(),
11
+ const updateNotesSchema = type({
12
+ body: type("string").describe("replacement notes body"),
13
+ "append_idea?": type("string").describe("append as bullet under Ideas instead of replacing body"),
14
14
  });
15
15
 
16
16
  interface UpdateNotesDetails {