tinker-agent 1.0.65 → 1.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.
Files changed (208) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +6 -0
  4. package/README.md +90 -9
  5. package/bin/tinker.js +39 -0
  6. package/node_modules/ansi-regex/index.d.ts +33 -0
  7. package/node_modules/ansi-regex/index.js +14 -0
  8. package/node_modules/ansi-regex/license +9 -0
  9. package/node_modules/ansi-regex/package.json +61 -0
  10. package/node_modules/ansi-regex/readme.md +66 -0
  11. package/node_modules/ansi-styles/index.d.ts +236 -0
  12. package/node_modules/ansi-styles/index.js +223 -0
  13. package/node_modules/ansi-styles/license +9 -0
  14. package/node_modules/ansi-styles/package.json +54 -0
  15. package/node_modules/ansi-styles/readme.md +173 -0
  16. package/node_modules/chalk/license +9 -0
  17. package/node_modules/chalk/package.json +83 -0
  18. package/node_modules/chalk/readme.md +297 -0
  19. package/node_modules/chalk/source/index.d.ts +325 -0
  20. package/node_modules/chalk/source/index.js +225 -0
  21. package/node_modules/chalk/source/utilities.js +33 -0
  22. package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  23. package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  24. package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  25. package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
  26. package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  27. package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
  28. package/node_modules/character-entities/index.d.ts +6 -0
  29. package/node_modules/character-entities/index.js +2132 -0
  30. package/node_modules/character-entities/license +22 -0
  31. package/node_modules/character-entities/package.json +78 -0
  32. package/node_modules/character-entities/readme.md +152 -0
  33. package/node_modules/decode-named-character-reference/index.d.ts +13 -0
  34. package/node_modules/decode-named-character-reference/index.d.ts.map +1 -0
  35. package/node_modules/decode-named-character-reference/index.dom.d.ts +6 -0
  36. package/node_modules/decode-named-character-reference/index.dom.d.ts.map +1 -0
  37. package/node_modules/decode-named-character-reference/index.dom.js +32 -0
  38. package/node_modules/decode-named-character-reference/index.js +19 -0
  39. package/node_modules/decode-named-character-reference/license +22 -0
  40. package/node_modules/decode-named-character-reference/package.json +90 -0
  41. package/node_modules/decode-named-character-reference/readme.md +136 -0
  42. package/node_modules/get-east-asian-width/index.d.ts +60 -0
  43. package/node_modules/get-east-asian-width/index.js +30 -0
  44. package/node_modules/get-east-asian-width/license +9 -0
  45. package/node_modules/get-east-asian-width/lookup-data.js +21 -0
  46. package/node_modules/get-east-asian-width/lookup.js +138 -0
  47. package/node_modules/get-east-asian-width/package.json +71 -0
  48. package/node_modules/get-east-asian-width/readme.md +65 -0
  49. package/node_modules/get-east-asian-width/utilities.js +24 -0
  50. package/node_modules/has-flag/index.d.ts +39 -0
  51. package/node_modules/has-flag/index.js +8 -0
  52. package/node_modules/has-flag/license +9 -0
  53. package/node_modules/has-flag/package.json +49 -0
  54. package/node_modules/has-flag/readme.md +74 -0
  55. package/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  56. package/node_modules/is-fullwidth-code-point/index.js +12 -0
  57. package/node_modules/is-fullwidth-code-point/license +9 -0
  58. package/node_modules/is-fullwidth-code-point/package.json +53 -0
  59. package/node_modules/is-fullwidth-code-point/readme.md +31 -0
  60. package/node_modules/markdansi/LICENSE +21 -0
  61. package/node_modules/markdansi/README.md +167 -0
  62. package/node_modules/markdansi/dist/ast.d.ts +99 -0
  63. package/node_modules/markdansi/dist/ast.js +1 -0
  64. package/node_modules/markdansi/dist/cli.d.ts +17 -0
  65. package/node_modules/markdansi/dist/cli.js +208 -0
  66. package/node_modules/markdansi/dist/hyperlink.d.ts +9 -0
  67. package/node_modules/markdansi/dist/hyperlink.js +26 -0
  68. package/node_modules/markdansi/dist/index.d.ts +10 -0
  69. package/node_modules/markdansi/dist/index.js +16 -0
  70. package/node_modules/markdansi/dist/parser.d.ts +2 -0
  71. package/node_modules/markdansi/dist/parser.js +205 -0
  72. package/node_modules/markdansi/dist/render.d.ts +9 -0
  73. package/node_modules/markdansi/dist/render.js +680 -0
  74. package/node_modules/markdansi/dist/stream.d.ts +39 -0
  75. package/node_modules/markdansi/dist/stream.js +192 -0
  76. package/node_modules/markdansi/dist/theme.d.ts +18 -0
  77. package/node_modules/markdansi/dist/theme.js +105 -0
  78. package/node_modules/markdansi/dist/types.d.ts +58 -0
  79. package/node_modules/markdansi/dist/types.js +1 -0
  80. package/node_modules/markdansi/dist/wrap.d.ts +10 -0
  81. package/node_modules/markdansi/dist/wrap.js +73 -0
  82. package/node_modules/markdansi/docs/spec.md +110 -0
  83. package/node_modules/markdansi/package.json +78 -0
  84. package/node_modules/markdansi/tsconfig.json +18 -0
  85. package/node_modules/marked/LICENSE +44 -0
  86. package/node_modules/marked/README.md +115 -0
  87. package/node_modules/marked/bin/main.js +284 -0
  88. package/node_modules/marked/bin/marked.js +16 -0
  89. package/node_modules/marked/lib/marked.d.ts +760 -0
  90. package/node_modules/marked/lib/marked.esm.js +77 -0
  91. package/node_modules/marked/lib/marked.esm.js.map +7 -0
  92. package/node_modules/marked/lib/marked.umd.js +79 -0
  93. package/node_modules/marked/lib/marked.umd.js.map +7 -0
  94. package/node_modules/marked/man/marked.1 +113 -0
  95. package/node_modules/marked/man/marked.1.md +93 -0
  96. package/node_modules/marked/package.json +103 -0
  97. package/node_modules/slice-ansi/index.d.ts +19 -0
  98. package/node_modules/slice-ansi/index.js +317 -0
  99. package/node_modules/slice-ansi/license +10 -0
  100. package/node_modules/slice-ansi/package.json +59 -0
  101. package/node_modules/slice-ansi/readme.md +55 -0
  102. package/node_modules/slice-ansi/tokenize-ansi.js +752 -0
  103. package/node_modules/string-width/index.d.ts +39 -0
  104. package/node_modules/string-width/index.js +203 -0
  105. package/node_modules/string-width/license +9 -0
  106. package/node_modules/string-width/package.json +65 -0
  107. package/node_modules/string-width/readme.md +66 -0
  108. package/node_modules/strip-ansi/index.d.ts +15 -0
  109. package/node_modules/strip-ansi/index.js +19 -0
  110. package/node_modules/strip-ansi/license +9 -0
  111. package/node_modules/strip-ansi/package.json +59 -0
  112. package/node_modules/strip-ansi/readme.md +37 -0
  113. package/node_modules/supports-color/browser.d.ts +1 -0
  114. package/node_modules/supports-color/browser.js +35 -0
  115. package/node_modules/supports-color/index.d.ts +55 -0
  116. package/node_modules/supports-color/index.js +202 -0
  117. package/node_modules/supports-color/license +9 -0
  118. package/node_modules/supports-color/package.json +64 -0
  119. package/node_modules/supports-color/readme.md +75 -0
  120. package/node_modules/supports-hyperlinks/browser.js +10 -0
  121. package/node_modules/supports-hyperlinks/index.d.ts +25 -0
  122. package/node_modules/supports-hyperlinks/index.js +163 -0
  123. package/node_modules/supports-hyperlinks/license +10 -0
  124. package/node_modules/supports-hyperlinks/package.json +47 -0
  125. package/node_modules/supports-hyperlinks/readme.md +45 -0
  126. package/package.json +41 -10
  127. package/patches/markdansi@0.3.2.patch +22 -2
  128. package/src/agent/context-builder.ts +24 -10
  129. package/src/agent/context-meter.ts +89 -5
  130. package/src/agent/loop.ts +107 -10
  131. package/src/agent/runtime-session.ts +1437 -82
  132. package/src/agent/session-ledger.ts +169 -29
  133. package/src/agent/types.ts +12 -1
  134. package/src/agent/user-prompt-projection.ts +62 -0
  135. package/src/cli/config.ts +57 -14
  136. package/src/cli/model-profiles.ts +124 -0
  137. package/src/cli/run-runner.ts +4 -1
  138. package/src/cli/tui-runner.tsx +68 -30
  139. package/src/context/compiled-context-hash.ts +1 -1
  140. package/src/context/compiled-context-validator.ts +92 -15
  141. package/src/context/context-automation-policy.ts +121 -0
  142. package/src/context/context-manager.ts +390 -11
  143. package/src/context/context-policy.ts +8 -0
  144. package/src/context/context-protocol-validator.ts +11 -1
  145. package/src/context/context-revision-compiler.ts +190 -27
  146. package/src/context/context-revision.ts +105 -19
  147. package/src/context/context-surface.ts +329 -0
  148. package/src/context/prefix-retirement-planner.ts +570 -0
  149. package/src/context/protocol-frame.ts +30 -3
  150. package/src/context/recall-retirement-contract.ts +27 -0
  151. package/src/context/swap-planner.ts +34 -10
  152. package/src/events/observation-text-log.ts +3 -3
  153. package/src/events/stdout-event-printer.ts +39 -3
  154. package/src/events/types.ts +172 -35
  155. package/src/ids/runtime-id.ts +6 -0
  156. package/src/ids/uuid-v7.ts +7 -0
  157. package/src/image/image-asset-store.ts +319 -0
  158. package/src/image/image-input-policy.ts +14 -0
  159. package/src/image/image-probe.ts +233 -0
  160. package/src/image/image-types.ts +262 -0
  161. package/src/instructions/project-instructions.ts +4 -1
  162. package/src/mcp/mcp-manager.ts +83 -19
  163. package/src/model/fake-model-client.ts +9 -1
  164. package/src/model/input-token-estimator.ts +25 -0
  165. package/src/model/model-client.ts +60 -0
  166. package/src/model/model-request-preflight.ts +1 -0
  167. package/src/model/moonshot-input-token-estimator.ts +107 -0
  168. package/src/model/openai-chat-mapping.ts +77 -1
  169. package/src/model/openai-chat-model-client.ts +389 -59
  170. package/src/model/openai-chat-stream.ts +272 -0
  171. package/src/model/prompt-prefix-hash.ts +2 -4
  172. package/src/model/token-estimator.ts +4 -0
  173. package/src/observation/observation-builder.ts +29 -0
  174. package/src/session/resume-projection.ts +94 -34
  175. package/src/session/session-catalog.ts +4 -4
  176. package/src/session/session-errors.ts +1 -1
  177. package/src/session/session-history-reader.ts +151 -4
  178. package/src/session/session-last-response-reader.ts +189 -0
  179. package/src/session/session-schema.ts +349 -35
  180. package/src/session/session-store.ts +3266 -255
  181. package/src/session/sqlite-session-ledger.ts +9 -4
  182. package/src/skills/skill-catalog.ts +182 -0
  183. package/src/skills/skill-context.ts +364 -0
  184. package/src/skills/skill-loader.ts +779 -0
  185. package/src/skills/skill-tool.ts +297 -0
  186. package/src/tools/edit.ts +51 -64
  187. package/src/tools/ensure-parent-directory.ts +6 -0
  188. package/src/tools/read.ts +2 -2
  189. package/src/tools/recall.ts +43 -40
  190. package/src/tools/registry.ts +24 -3
  191. package/src/tools/ripgrep.ts +3 -2
  192. package/src/tools/types.ts +43 -4
  193. package/src/tools/write.ts +20 -31
  194. package/src/tui/app.tsx +333 -96
  195. package/src/tui/clipboard.ts +5 -0
  196. package/src/tui/components/mcp-panel.tsx +28 -0
  197. package/src/tui/components/prompt-input.tsx +790 -257
  198. package/src/tui/components/skills-panel.tsx +31 -0
  199. package/src/tui/components/timeline.tsx +30 -1
  200. package/src/tui/event-store.ts +85 -2
  201. package/src/tui/file-mention.ts +234 -0
  202. package/src/tui/line-editor.ts +1 -0
  203. package/src/tui/project-slash-commands.ts +229 -0
  204. package/src/tui/prompt-draft.ts +510 -0
  205. package/src/tui/prompt-history.ts +294 -22
  206. package/src/tui/slash-commands.ts +46 -2
  207. package/src/tui/tui-session-controller.ts +110 -48
  208. package/src/tui/workspace-file-search.ts +94 -0
@@ -0,0 +1,205 @@
1
+ import { decodeNamedCharacterReference } from "decode-named-character-reference";
2
+ import { marked } from "marked";
3
+ const CHARACTER_REFERENCE = /&(#\d+|#x[\da-f]+|[a-z][\da-z]+);/giu;
4
+ function decodeNumericReference(body, radix) {
5
+ const offset = radix === 16 ? 2 : 1;
6
+ const codePoint = Number.parseInt(body.slice(offset), radix);
7
+ const isDisallowedControl = codePoint <= 0x08 ||
8
+ codePoint === 0x0b ||
9
+ (codePoint >= 0x0e && codePoint <= 0x1f) ||
10
+ (codePoint >= 0x7f && codePoint <= 0x9f);
11
+ const isNonCharacter = (codePoint >= 0xfdd0 && codePoint <= 0xfdef) ||
12
+ (codePoint & 0xffff) === 0xfffe ||
13
+ (codePoint & 0xffff) === 0xffff;
14
+ if (!Number.isSafeInteger(codePoint) ||
15
+ codePoint <= 0 ||
16
+ codePoint > 0x10ffff ||
17
+ (codePoint >= 0xd800 && codePoint <= 0xdfff) ||
18
+ isDisallowedControl ||
19
+ isNonCharacter) {
20
+ return "\uFFFD";
21
+ }
22
+ return String.fromCodePoint(codePoint);
23
+ }
24
+ function decodeEntities(value) {
25
+ return value.replace(CHARACTER_REFERENCE, (reference, body) => {
26
+ if (body.startsWith("#x") || body.startsWith("#X")) {
27
+ return decodeNumericReference(body, 16);
28
+ }
29
+ if (body.startsWith("#")) {
30
+ return decodeNumericReference(body, 10);
31
+ }
32
+ return decodeNamedCharacterReference(body) || reference;
33
+ });
34
+ }
35
+ function convertInlineTokens(tokens) {
36
+ if (!tokens)
37
+ return [];
38
+ const nodes = [];
39
+ for (const token of tokens) {
40
+ switch (token.type) {
41
+ case "text": {
42
+ const text = token;
43
+ if (text.tokens?.length) {
44
+ nodes.push(...convertInlineTokens(text.tokens));
45
+ }
46
+ else {
47
+ nodes.push({ type: "text", value: decodeEntities(text.text) });
48
+ }
49
+ break;
50
+ }
51
+ case "escape":
52
+ nodes.push({ type: "text", value: token.text });
53
+ break;
54
+ case "em":
55
+ nodes.push({
56
+ type: "emphasis",
57
+ children: convertInlineTokens(token.tokens),
58
+ });
59
+ break;
60
+ case "strong":
61
+ nodes.push({
62
+ type: "strong",
63
+ children: convertInlineTokens(token.tokens),
64
+ });
65
+ break;
66
+ case "del":
67
+ nodes.push({
68
+ type: "delete",
69
+ children: convertInlineTokens(token.tokens),
70
+ });
71
+ break;
72
+ case "codespan":
73
+ nodes.push({ type: "inlineCode", value: token.text });
74
+ break;
75
+ case "link": {
76
+ const link = token;
77
+ nodes.push({
78
+ type: "link",
79
+ url: decodeEntities(link.href),
80
+ title: link.title ? decodeEntities(link.title) : link.title,
81
+ children: convertInlineTokens(link.tokens),
82
+ });
83
+ break;
84
+ }
85
+ case "br":
86
+ nodes.push({ type: "break" });
87
+ break;
88
+ case "html":
89
+ nodes.push({ type: "html", value: token.text });
90
+ break;
91
+ default:
92
+ break;
93
+ }
94
+ }
95
+ return nodes;
96
+ }
97
+ function convertCode(token) {
98
+ const info = token.lang?.trim() ?? "";
99
+ const separator = info.search(/\s/u);
100
+ const lang = separator >= 0 ? info.slice(0, separator) : info;
101
+ const meta = separator >= 0 ? info.slice(separator).trim() : "";
102
+ return {
103
+ type: "code",
104
+ value: token.text,
105
+ ...(lang ? { lang } : {}),
106
+ ...(meta ? { meta } : {}),
107
+ };
108
+ }
109
+ function convertListItem(item) {
110
+ return {
111
+ type: "listItem",
112
+ checked: item.task ? Boolean(item.checked) : null,
113
+ spread: item.loose,
114
+ children: convertBlockTokens(item.tokens),
115
+ };
116
+ }
117
+ function convertTableCell(cell) {
118
+ return {
119
+ type: "tableCell",
120
+ children: convertInlineTokens(cell.tokens),
121
+ };
122
+ }
123
+ function convertTableRow(cells) {
124
+ return {
125
+ type: "tableRow",
126
+ children: cells.map(convertTableCell),
127
+ };
128
+ }
129
+ function convertBlockToken(token) {
130
+ switch (token.type) {
131
+ case "paragraph":
132
+ return {
133
+ type: "paragraph",
134
+ children: convertInlineTokens(token.tokens),
135
+ };
136
+ case "text": {
137
+ const text = token;
138
+ return {
139
+ type: "paragraph",
140
+ children: text.tokens?.length
141
+ ? convertInlineTokens(text.tokens)
142
+ : [{ type: "text", value: decodeEntities(text.text) }],
143
+ };
144
+ }
145
+ case "heading": {
146
+ const heading = token;
147
+ return {
148
+ type: "heading",
149
+ depth: heading.depth,
150
+ children: convertInlineTokens(heading.tokens),
151
+ };
152
+ }
153
+ case "hr":
154
+ return { type: "thematicBreak" };
155
+ case "blockquote":
156
+ return {
157
+ type: "blockquote",
158
+ children: convertBlockTokens(token.tokens),
159
+ };
160
+ case "list": {
161
+ const list = token;
162
+ return {
163
+ type: "list",
164
+ ordered: list.ordered,
165
+ start: list.ordered && typeof list.start === "number" ? list.start : null,
166
+ spread: list.loose,
167
+ children: list.items.map(convertListItem),
168
+ };
169
+ }
170
+ case "code":
171
+ return convertCode(token);
172
+ case "table": {
173
+ const table = token;
174
+ return {
175
+ type: "table",
176
+ align: table.align,
177
+ children: [convertTableRow(table.header), ...table.rows.map(convertTableRow)],
178
+ };
179
+ }
180
+ case "def": {
181
+ const definition = token;
182
+ const title = decodeEntities((definition.title ?? "").replace(/\s+/gu, " ").trim());
183
+ return {
184
+ type: "definition",
185
+ identifier: definition.tag,
186
+ url: decodeEntities(definition.href),
187
+ title: title || null,
188
+ };
189
+ }
190
+ default:
191
+ return null;
192
+ }
193
+ }
194
+ function convertBlockTokens(tokens) {
195
+ return tokens.flatMap((token) => {
196
+ const node = convertBlockToken(token);
197
+ return node ? [node] : [];
198
+ });
199
+ }
200
+ export function parse(markdown) {
201
+ return {
202
+ type: "root",
203
+ children: convertBlockTokens(marked.lexer(markdown, { gfm: true })),
204
+ };
205
+ }
@@ -0,0 +1,9 @@
1
+ import type { RenderOptions } from "./types.js";
2
+ /**
3
+ * Render Markdown input to an ANSI string.
4
+ */
5
+ export declare function render(markdown: string, userOptions?: RenderOptions): string;
6
+ /**
7
+ * Create a reusable renderer with fixed options.
8
+ */
9
+ export declare function createRenderer(options?: RenderOptions): (md: string) => string;