@stonerzju/opencode 1.2.16-offline.1 → 1.2.18

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 (262) hide show
  1. package/bin/opencode +29 -157
  2. package/package.json +29 -29
  3. package/src/acp/agent.ts +4 -4
  4. package/src/acp/session.ts +1 -1
  5. package/src/agent/agent.ts +3 -3
  6. package/src/bun/index.ts +2 -2
  7. package/src/cli/cmd/acp.ts +3 -3
  8. package/src/cli/cmd/debug/file.ts +1 -1
  9. package/src/cli/cmd/github.ts +2 -2
  10. package/src/cli/cmd/pr.ts +1 -1
  11. package/src/cli/cmd/tui/app.tsx +24 -24
  12. package/src/cli/cmd/tui/attach.ts +3 -3
  13. package/src/cli/cmd/tui/component/dialog-agent.tsx +3 -3
  14. package/src/cli/cmd/tui/component/dialog-command.tsx +3 -3
  15. package/src/cli/cmd/tui/component/dialog-mcp.tsx +5 -5
  16. package/src/cli/cmd/tui/component/dialog-model.tsx +4 -4
  17. package/src/cli/cmd/tui/component/dialog-provider.tsx +4 -4
  18. package/src/cli/cmd/tui/component/dialog-session-list.tsx +5 -5
  19. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +3 -3
  20. package/src/cli/cmd/tui/component/dialog-skill.tsx +3 -3
  21. package/src/cli/cmd/tui/component/dialog-stash.tsx +3 -3
  22. package/src/cli/cmd/tui/component/dialog-status.tsx +2 -2
  23. package/src/cli/cmd/tui/component/dialog-tag.tsx +3 -3
  24. package/src/cli/cmd/tui/component/logo.tsx +2 -2
  25. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +6 -6
  26. package/src/cli/cmd/tui/component/prompt/frecency.tsx +2 -2
  27. package/src/cli/cmd/tui/component/prompt/history.tsx +2 -2
  28. package/src/cli/cmd/tui/component/prompt/index.tsx +14 -14
  29. package/src/cli/cmd/tui/component/prompt/stash.tsx +2 -2
  30. package/src/cli/cmd/tui/component/textarea-keybindings.ts +1 -1
  31. package/src/cli/cmd/tui/component/tips.tsx +1 -1
  32. package/src/cli/cmd/tui/context/directory.ts +1 -1
  33. package/src/cli/cmd/tui/context/exit.tsx +1 -1
  34. package/src/cli/cmd/tui/context/keybind.tsx +2 -2
  35. package/src/cli/cmd/tui/context/kv.tsx +2 -2
  36. package/src/cli/cmd/tui/context/local.tsx +6 -6
  37. package/src/cli/cmd/tui/context/sync.tsx +4 -4
  38. package/src/cli/cmd/tui/context/theme/opencode.json +245 -0
  39. package/src/cli/cmd/tui/context/theme.tsx +2 -2
  40. package/src/cli/cmd/tui/context/tui-config.tsx +1 -1
  41. package/src/cli/cmd/tui/event.ts +2 -2
  42. package/src/cli/cmd/tui/routes/home.tsx +6 -6
  43. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +6 -6
  44. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +6 -6
  45. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +2 -2
  46. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +3 -3
  47. package/src/cli/cmd/tui/routes/session/header.tsx +5 -5
  48. package/src/cli/cmd/tui/routes/session/index.tsx +32 -32
  49. package/src/cli/cmd/tui/routes/session/permission.tsx +4 -4
  50. package/src/cli/cmd/tui/routes/session/sidebar.tsx +4 -4
  51. package/src/cli/cmd/tui/thread.ts +9 -9
  52. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +1 -1
  53. package/src/cli/cmd/tui/ui/dialog-help.tsx +2 -2
  54. package/src/cli/cmd/tui/ui/dialog-select.tsx +5 -5
  55. package/src/cli/cmd/tui/ui/dialog.tsx +3 -3
  56. package/src/cli/cmd/tui/ui/toast.tsx +1 -1
  57. package/src/cli/cmd/tui/util/editor.ts +3 -3
  58. package/src/cli/cmd/tui/util/transcript.ts +1 -1
  59. package/src/cli/cmd/tui/worker.ts +10 -10
  60. package/src/cli/error.ts +1 -1
  61. package/src/cli/ui.ts +1 -1
  62. package/src/cli/upgrade.ts +4 -4
  63. package/src/command/index.ts +1 -1
  64. package/src/config/config.ts +10 -10
  65. package/src/config/markdown.ts +1 -1
  66. package/src/config/migrate-tui-config.ts +5 -5
  67. package/src/config/paths.ts +4 -4
  68. package/src/config/tui.ts +4 -4
  69. package/src/control/control.sql.ts +1 -1
  70. package/src/control/index.ts +1 -1
  71. package/src/control-plane/adaptors/worktree.ts +1 -1
  72. package/src/control-plane/session-proxy-middleware.ts +1 -1
  73. package/src/control-plane/workspace.sql.ts +1 -1
  74. package/src/control-plane/workspace.ts +7 -7
  75. package/src/file/index.ts +1 -1
  76. package/src/file/ripgrep.ts +2 -2
  77. package/src/file/watcher.ts +5 -5
  78. package/src/format/formatter.ts +1 -1
  79. package/src/ide/index.ts +3 -3
  80. package/src/index.ts +1 -1
  81. package/src/installation/index.ts +3 -3
  82. package/src/lsp/client.ts +3 -3
  83. package/src/lsp/index.ts +3 -3
  84. package/src/mcp/index.ts +4 -4
  85. package/src/permission/index.ts +2 -2
  86. package/src/permission/next.ts +10 -10
  87. package/src/plugin/codex.ts +1 -1
  88. package/src/plugin/copilot.ts +2 -2
  89. package/src/plugin/index.ts +1 -1
  90. package/src/project/bootstrap.ts +2 -2
  91. package/src/project/instance.ts +4 -4
  92. package/src/project/project.sql.ts +1 -1
  93. package/src/project/project.ts +5 -5
  94. package/src/project/state.ts +1 -1
  95. package/src/project/vcs.ts +4 -4
  96. package/src/provider/auth.ts +4 -4
  97. package/src/provider/error.ts +1 -1
  98. package/src/provider/models-snapshot.ts +2 -0
  99. package/src/provider/models.ts +1 -1
  100. package/src/provider/provider.ts +2 -2
  101. package/src/provider/transform.ts +2 -2
  102. package/src/pty/index.ts +5 -5
  103. package/src/question/index.ts +5 -5
  104. package/src/server/event.ts +1 -1
  105. package/src/server/mdns.ts +1 -1
  106. package/src/server/routes/global.ts +3 -3
  107. package/src/server/routes/permission.ts +1 -1
  108. package/src/server/routes/pty.ts +1 -1
  109. package/src/server/routes/session.ts +4 -4
  110. package/src/server/routes/tui.ts +1 -1
  111. package/src/server/server.ts +3 -3
  112. package/src/session/compaction.ts +7 -7
  113. package/src/session/index.ts +10 -10
  114. package/src/session/instruction.ts +1 -1
  115. package/src/session/llm.ts +11 -11
  116. package/src/session/message-v2.ts +10 -10
  117. package/src/session/message.ts +1 -1
  118. package/src/session/processor.ts +10 -10
  119. package/src/session/prompt.ts +8 -8
  120. package/src/session/retry.ts +2 -2
  121. package/src/session/revert.ts +1 -1
  122. package/src/session/session.sql.ts +3 -3
  123. package/src/session/status.ts +3 -3
  124. package/src/session/summary.ts +5 -5
  125. package/src/session/system.ts +1 -1
  126. package/src/session/todo.ts +2 -2
  127. package/src/share/share-next.ts +7 -7
  128. package/src/share/share.sql.ts +1 -1
  129. package/src/shell/shell.ts +3 -3
  130. package/src/skill/skill.ts +6 -6
  131. package/src/storage/db.ts +1 -1
  132. package/src/storage/storage.ts +1 -1
  133. package/src/tool/bash.ts +6 -6
  134. package/src/tool/edit.ts +1 -1
  135. package/src/tool/registry.ts +2 -2
  136. package/src/tool/skill.ts +1 -1
  137. package/src/tool/task.ts +3 -3
  138. package/src/util/array.ts +10 -0
  139. package/src/util/binary.ts +41 -0
  140. package/src/util/encode.ts +51 -0
  141. package/src/util/error.ts +54 -0
  142. package/src/util/identifier.ts +48 -0
  143. package/src/util/lazy.ts +4 -16
  144. package/src/util/path.ts +37 -0
  145. package/src/util/retry.ts +41 -0
  146. package/src/util/slug.ts +74 -0
  147. package/src/worktree/index.ts +3 -3
  148. package/AGENTS.md +0 -10
  149. package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
  150. package/Dockerfile +0 -18
  151. package/README.md +0 -15
  152. package/bunfig.toml +0 -7
  153. package/drizzle.config.ts +0 -10
  154. package/package.json.bak +0 -140
  155. package/script/build.ts +0 -224
  156. package/script/check-migrations.ts +0 -16
  157. package/script/postinstall.mjs +0 -131
  158. package/script/publish.ts +0 -181
  159. package/script/schema.ts +0 -63
  160. package/script/seed-e2e.ts +0 -50
  161. package/sst-env.d.ts +0 -10
  162. package/test/AGENTS.md +0 -81
  163. package/test/acp/agent-interface.test.ts +0 -51
  164. package/test/acp/event-subscription.test.ts +0 -683
  165. package/test/agent/agent.test.ts +0 -689
  166. package/test/bun.test.ts +0 -53
  167. package/test/cli/github-action.test.ts +0 -197
  168. package/test/cli/github-remote.test.ts +0 -80
  169. package/test/cli/import.test.ts +0 -38
  170. package/test/cli/plugin-auth-picker.test.ts +0 -120
  171. package/test/cli/tui/transcript.test.ts +0 -322
  172. package/test/config/agent-color.test.ts +0 -71
  173. package/test/config/config.test.ts +0 -1886
  174. package/test/config/fixtures/empty-frontmatter.md +0 -4
  175. package/test/config/fixtures/frontmatter.md +0 -28
  176. package/test/config/fixtures/markdown-header.md +0 -11
  177. package/test/config/fixtures/no-frontmatter.md +0 -1
  178. package/test/config/fixtures/weird-model-id.md +0 -13
  179. package/test/config/markdown.test.ts +0 -228
  180. package/test/config/tui.test.ts +0 -510
  181. package/test/control-plane/session-proxy-middleware.test.ts +0 -147
  182. package/test/control-plane/sse.test.ts +0 -56
  183. package/test/control-plane/workspace-server-sse.test.ts +0 -65
  184. package/test/control-plane/workspace-sync.test.ts +0 -97
  185. package/test/file/ignore.test.ts +0 -10
  186. package/test/file/index.test.ts +0 -394
  187. package/test/file/path-traversal.test.ts +0 -198
  188. package/test/file/ripgrep.test.ts +0 -39
  189. package/test/file/time.test.ts +0 -361
  190. package/test/fixture/db.ts +0 -11
  191. package/test/fixture/fixture.ts +0 -45
  192. package/test/fixture/lsp/fake-lsp-server.js +0 -77
  193. package/test/fixture/skills/agents-sdk/SKILL.md +0 -152
  194. package/test/fixture/skills/agents-sdk/references/callable.md +0 -92
  195. package/test/fixture/skills/cloudflare/SKILL.md +0 -211
  196. package/test/fixture/skills/index.json +0 -6
  197. package/test/ide/ide.test.ts +0 -82
  198. package/test/keybind.test.ts +0 -421
  199. package/test/lsp/client.test.ts +0 -95
  200. package/test/mcp/headers.test.ts +0 -153
  201. package/test/mcp/oauth-browser.test.ts +0 -249
  202. package/test/memory/abort-leak.test.ts +0 -136
  203. package/test/patch/patch.test.ts +0 -348
  204. package/test/permission/arity.test.ts +0 -33
  205. package/test/permission/next.test.ts +0 -689
  206. package/test/permission-task.test.ts +0 -319
  207. package/test/plugin/auth-override.test.ts +0 -44
  208. package/test/plugin/codex.test.ts +0 -123
  209. package/test/preload.ts +0 -80
  210. package/test/project/project.test.ts +0 -348
  211. package/test/project/worktree-remove.test.ts +0 -65
  212. package/test/provider/amazon-bedrock.test.ts +0 -446
  213. package/test/provider/copilot/convert-to-copilot-messages.test.ts +0 -523
  214. package/test/provider/copilot/copilot-chat-model.test.ts +0 -592
  215. package/test/provider/gitlab-duo.test.ts +0 -262
  216. package/test/provider/provider.test.ts +0 -2220
  217. package/test/provider/transform.test.ts +0 -2353
  218. package/test/pty/pty-output-isolation.test.ts +0 -140
  219. package/test/question/question.test.ts +0 -300
  220. package/test/scheduler.test.ts +0 -73
  221. package/test/server/global-session-list.test.ts +0 -89
  222. package/test/server/session-list.test.ts +0 -90
  223. package/test/server/session-select.test.ts +0 -78
  224. package/test/session/compaction.test.ts +0 -423
  225. package/test/session/instruction.test.ts +0 -170
  226. package/test/session/llm.test.ts +0 -667
  227. package/test/session/message-v2.test.ts +0 -924
  228. package/test/session/prompt.test.ts +0 -211
  229. package/test/session/retry.test.ts +0 -188
  230. package/test/session/revert-compact.test.ts +0 -285
  231. package/test/session/session.test.ts +0 -71
  232. package/test/session/structured-output-integration.test.ts +0 -233
  233. package/test/session/structured-output.test.ts +0 -385
  234. package/test/skill/discovery.test.ts +0 -110
  235. package/test/skill/skill.test.ts +0 -388
  236. package/test/snapshot/snapshot.test.ts +0 -1180
  237. package/test/storage/json-migration.test.ts +0 -846
  238. package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
  239. package/test/tool/apply_patch.test.ts +0 -566
  240. package/test/tool/bash.test.ts +0 -402
  241. package/test/tool/edit.test.ts +0 -496
  242. package/test/tool/external-directory.test.ts +0 -127
  243. package/test/tool/fixtures/large-image.png +0 -0
  244. package/test/tool/fixtures/models-api.json +0 -38413
  245. package/test/tool/grep.test.ts +0 -110
  246. package/test/tool/question.test.ts +0 -107
  247. package/test/tool/read.test.ts +0 -504
  248. package/test/tool/registry.test.ts +0 -122
  249. package/test/tool/skill.test.ts +0 -112
  250. package/test/tool/truncation.test.ts +0 -160
  251. package/test/tool/webfetch.test.ts +0 -100
  252. package/test/tool/write.test.ts +0 -348
  253. package/test/util/filesystem.test.ts +0 -443
  254. package/test/util/format.test.ts +0 -59
  255. package/test/util/glob.test.ts +0 -164
  256. package/test/util/iife.test.ts +0 -36
  257. package/test/util/lazy.test.ts +0 -50
  258. package/test/util/lock.test.ts +0 -72
  259. package/test/util/process.test.ts +0 -59
  260. package/test/util/timeout.test.ts +0 -21
  261. package/test/util/wildcard.test.ts +0 -90
  262. package/tsconfig.json +0 -16
@@ -1,4 +0,0 @@
1
- ---
2
- ---
3
-
4
- Content
@@ -1,28 +0,0 @@
1
- ---
2
- description: "This is a description wrapped in quotes"
3
- # field: this is a commented out field that should be ignored
4
- occupation: This man has the following occupation: Software Engineer
5
- title: 'Hello World'
6
- name: John "Doe"
7
-
8
- family: He has no 'family'
9
- summary: >
10
- This is a summary
11
- url: https://example.com:8080/path?query=value
12
- time: The time is 12:30:00 PM
13
- nested: First: Second: Third: Fourth
14
- quoted_colon: "Already quoted: no change needed"
15
- single_quoted_colon: 'Single quoted: also fine'
16
- mixed: He said "hello: world" and then left
17
- empty:
18
- dollar: Use $' and $& for special patterns
19
- ---
20
-
21
- Content that should not be parsed:
22
-
23
- fake_field: this is not yaml
24
- another: neither is this
25
- time: 10:30:00 AM
26
- url: https://should-not-be-parsed.com:3000
27
-
28
- The above lines look like YAML but are just content.
@@ -1,11 +0,0 @@
1
- # Response Formatting Requirements
2
-
3
- Always structure your responses using clear markdown formatting:
4
-
5
- - By default don't put information into tables for questions (but do put information into tables when creating or updating files)
6
- - Use headings (##, ###) to organise sections, always
7
- - Use bullet points or numbered lists for multiple items
8
- - Use code blocks with language tags for any code
9
- - Use **bold** for key terms and emphasis
10
- - Use tables when comparing options or listing structured data
11
- - Break long responses into logical sections with headings
@@ -1 +0,0 @@
1
- Content
@@ -1,13 +0,0 @@
1
- ---
2
- description: General coding and planning agent
3
- mode: subagent
4
- model: synthetic/hf:zai-org/GLM-4.7
5
- tools:
6
- write: true
7
- read: true
8
- edit: true
9
- stuff: >
10
- This is some stuff
11
- ---
12
-
13
- Strictly follow da rules
@@ -1,228 +0,0 @@
1
- import { expect, test, describe } from "bun:test"
2
- import { ConfigMarkdown } from "../../src/config/markdown"
3
-
4
- describe("ConfigMarkdown: normal template", () => {
5
- const template = `This is a @valid/path/to/a/file and it should also match at
6
- the beginning of a line:
7
-
8
- @another-valid/path/to/a/file
9
-
10
- but this is not:
11
-
12
- - Adds a "Co-authored-by:" footer which clarifies which AI agent
13
- helped create this commit, using an appropriate \`noreply@...\`
14
- or \`noreply@anthropic.com\` email address.
15
-
16
- We also need to deal with files followed by @commas, ones
17
- with @file-extensions.md, even @multiple.extensions.bak,
18
- hidden directories like @.config/ or files like @.bashrc
19
- and ones at the end of a sentence like @foo.md.
20
-
21
- Also shouldn't forget @/absolute/paths.txt with and @/without/extensions,
22
- as well as @~/home-files and @~/paths/under/home.txt.
23
-
24
- If the reference is \`@quoted/in/backticks\` then it shouldn't match at all.`
25
-
26
- const matches = ConfigMarkdown.files(template)
27
-
28
- test("should extract exactly 12 file references", () => {
29
- expect(matches.length).toBe(12)
30
- })
31
-
32
- test("should extract valid/path/to/a/file", () => {
33
- expect(matches[0][1]).toBe("valid/path/to/a/file")
34
- })
35
-
36
- test("should extract another-valid/path/to/a/file", () => {
37
- expect(matches[1][1]).toBe("another-valid/path/to/a/file")
38
- })
39
-
40
- test("should extract paths ignoring comma after", () => {
41
- expect(matches[2][1]).toBe("commas")
42
- })
43
-
44
- test("should extract a path with a file extension and comma after", () => {
45
- expect(matches[3][1]).toBe("file-extensions.md")
46
- })
47
-
48
- test("should extract a path with multiple dots and comma after", () => {
49
- expect(matches[4][1]).toBe("multiple.extensions.bak")
50
- })
51
-
52
- test("should extract hidden directory", () => {
53
- expect(matches[5][1]).toBe(".config/")
54
- })
55
-
56
- test("should extract hidden file", () => {
57
- expect(matches[6][1]).toBe(".bashrc")
58
- })
59
-
60
- test("should extract a file ignoring period at end of sentence", () => {
61
- expect(matches[7][1]).toBe("foo.md")
62
- })
63
-
64
- test("should extract an absolute path with an extension", () => {
65
- expect(matches[8][1]).toBe("/absolute/paths.txt")
66
- })
67
-
68
- test("should extract an absolute path without an extension", () => {
69
- expect(matches[9][1]).toBe("/without/extensions")
70
- })
71
-
72
- test("should extract an absolute path in home directory", () => {
73
- expect(matches[10][1]).toBe("~/home-files")
74
- })
75
-
76
- test("should extract an absolute path under home directory", () => {
77
- expect(matches[11][1]).toBe("~/paths/under/home.txt")
78
- })
79
-
80
- test("should not match when preceded by backtick", () => {
81
- const backtickTest = "This `@should/not/match` should be ignored"
82
- const backtickMatches = ConfigMarkdown.files(backtickTest)
83
- expect(backtickMatches.length).toBe(0)
84
- })
85
-
86
- test("should not match email addresses", () => {
87
- const emailTest = "Contact user@example.com for help"
88
- const emailMatches = ConfigMarkdown.files(emailTest)
89
- expect(emailMatches.length).toBe(0)
90
- })
91
- })
92
-
93
- describe("ConfigMarkdown: frontmatter parsing", async () => {
94
- const parsed = await ConfigMarkdown.parse(import.meta.dir + "/fixtures/frontmatter.md")
95
-
96
- test("should parse without throwing", () => {
97
- expect(parsed).toBeDefined()
98
- expect(parsed.data).toBeDefined()
99
- expect(parsed.content).toBeDefined()
100
- })
101
-
102
- test("should extract description field", () => {
103
- expect(parsed.data.description).toBe("This is a description wrapped in quotes")
104
- })
105
-
106
- test("should extract occupation field with colon in value", () => {
107
- expect(parsed.data.occupation).toBe("This man has the following occupation: Software Engineer")
108
- })
109
-
110
- test("should extract title field with single quotes", () => {
111
- expect(parsed.data.title).toBe("Hello World")
112
- })
113
-
114
- test("should extract name field with embedded quotes", () => {
115
- expect(parsed.data.name).toBe('John "Doe"')
116
- })
117
-
118
- test("should extract family field with embedded single quotes", () => {
119
- expect(parsed.data.family).toBe("He has no 'family'")
120
- })
121
-
122
- test("should extract multiline summary field", () => {
123
- expect(parsed.data.summary).toBe("This is a summary\n")
124
- })
125
-
126
- test("should not include commented fields in data", () => {
127
- expect(parsed.data.field).toBeUndefined()
128
- })
129
-
130
- test("should extract URL with port", () => {
131
- expect(parsed.data.url).toBe("https://example.com:8080/path?query=value")
132
- })
133
-
134
- test("should extract time with colons", () => {
135
- expect(parsed.data.time).toBe("The time is 12:30:00 PM")
136
- })
137
-
138
- test("should extract value with multiple colons", () => {
139
- expect(parsed.data.nested).toBe("First: Second: Third: Fourth")
140
- })
141
-
142
- test("should preserve already double-quoted values with colons", () => {
143
- expect(parsed.data.quoted_colon).toBe("Already quoted: no change needed")
144
- })
145
-
146
- test("should preserve already single-quoted values with colons", () => {
147
- expect(parsed.data.single_quoted_colon).toBe("Single quoted: also fine")
148
- })
149
-
150
- test("should extract value with quotes and colons mixed", () => {
151
- expect(parsed.data.mixed).toBe('He said "hello: world" and then left')
152
- })
153
-
154
- test("should handle empty values", () => {
155
- expect(parsed.data.empty).toBeNull()
156
- })
157
-
158
- test("should handle dollar sign replacement patterns literally", () => {
159
- expect(parsed.data.dollar).toBe("Use $' and $& for special patterns")
160
- })
161
-
162
- test("should not parse fake yaml from content", () => {
163
- expect(parsed.data.fake_field).toBeUndefined()
164
- expect(parsed.data.another).toBeUndefined()
165
- })
166
-
167
- test("should extract content after frontmatter without modification", () => {
168
- expect(parsed.content).toContain("Content that should not be parsed:")
169
- expect(parsed.content).toContain("fake_field: this is not yaml")
170
- expect(parsed.content).toContain("url: https://should-not-be-parsed.com:3000")
171
- })
172
- })
173
-
174
- describe("ConfigMarkdown: frontmatter parsing w/ empty frontmatter", async () => {
175
- const result = await ConfigMarkdown.parse(import.meta.dir + "/fixtures/empty-frontmatter.md")
176
-
177
- test("should parse without throwing", () => {
178
- expect(result).toBeDefined()
179
- expect(result.data).toEqual({})
180
- expect(result.content.trim()).toBe("Content")
181
- })
182
- })
183
-
184
- describe("ConfigMarkdown: frontmatter parsing w/ no frontmatter", async () => {
185
- const result = await ConfigMarkdown.parse(import.meta.dir + "/fixtures/no-frontmatter.md")
186
-
187
- test("should parse without throwing", () => {
188
- expect(result).toBeDefined()
189
- expect(result.data).toEqual({})
190
- expect(result.content.trim()).toBe("Content")
191
- })
192
- })
193
-
194
- describe("ConfigMarkdown: frontmatter parsing w/ Markdown header", async () => {
195
- const result = await ConfigMarkdown.parse(import.meta.dir + "/fixtures/markdown-header.md")
196
-
197
- test("should parse and match", () => {
198
- expect(result).toBeDefined()
199
- expect(result.data).toEqual({})
200
- expect(result.content.trim().replace(/\r\n/g, "\n")).toBe(`# Response Formatting Requirements
201
-
202
- Always structure your responses using clear markdown formatting:
203
-
204
- - By default don't put information into tables for questions (but do put information into tables when creating or updating files)
205
- - Use headings (##, ###) to organise sections, always
206
- - Use bullet points or numbered lists for multiple items
207
- - Use code blocks with language tags for any code
208
- - Use **bold** for key terms and emphasis
209
- - Use tables when comparing options or listing structured data
210
- - Break long responses into logical sections with headings`)
211
- })
212
- })
213
-
214
- describe("ConfigMarkdown: frontmatter has weird model id", async () => {
215
- const result = await ConfigMarkdown.parse(import.meta.dir + "/fixtures/weird-model-id.md")
216
-
217
- test("should parse and match", () => {
218
- expect(result).toBeDefined()
219
- expect(result.data["description"]).toEqual("General coding and planning agent")
220
- expect(result.data["mode"]).toEqual("subagent")
221
- expect(result.data["model"]).toEqual("synthetic/hf:zai-org/GLM-4.7")
222
- expect(result.data["tools"]["write"]).toBeTrue()
223
- expect(result.data["tools"]["read"]).toBeTrue()
224
- expect(result.data["stuff"]).toBe("This is some stuff\n")
225
-
226
- expect(result.content.trim()).toBe("Strictly follow da rules")
227
- })
228
- })