thatgfsj-code 2.2.9 → 3.0.1

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 (190) hide show
  1. package/CHANGELOG.md +15 -67
  2. package/dist/app/index.d.ts +28 -5
  3. package/dist/app/index.d.ts.map +1 -1
  4. package/dist/app/index.js +76 -10
  5. package/dist/app/index.js.map +1 -1
  6. package/dist/cache/fingerprint.d.ts +49 -0
  7. package/dist/cache/fingerprint.d.ts.map +1 -0
  8. package/dist/cache/fingerprint.js +100 -0
  9. package/dist/cache/fingerprint.js.map +1 -0
  10. package/dist/cache/index.d.ts +15 -0
  11. package/dist/cache/index.d.ts.map +1 -0
  12. package/dist/cache/index.js +15 -0
  13. package/dist/cache/index.js.map +1 -0
  14. package/dist/cache/smartModel.d.ts +40 -0
  15. package/dist/cache/smartModel.d.ts.map +1 -0
  16. package/dist/cache/smartModel.js +43 -0
  17. package/dist/cache/smartModel.js.map +1 -0
  18. package/dist/cache/stats.d.ts +93 -0
  19. package/dist/cache/stats.d.ts.map +1 -0
  20. package/dist/cache/stats.js +155 -0
  21. package/dist/cache/stats.js.map +1 -0
  22. package/dist/cache/volatile.d.ts +32 -0
  23. package/dist/cache/volatile.d.ts.map +1 -0
  24. package/dist/cache/volatile.js +44 -0
  25. package/dist/cache/volatile.js.map +1 -0
  26. package/dist/cmd/index.js +49 -57
  27. package/dist/cmd/index.js.map +1 -1
  28. package/dist/config/index.d.ts.map +1 -1
  29. package/dist/config/index.js +8 -0
  30. package/dist/config/index.js.map +1 -1
  31. package/dist/config/types.d.ts +14 -0
  32. package/dist/config/types.d.ts.map +1 -1
  33. package/dist/llm/anthropic.d.ts +55 -5
  34. package/dist/llm/anthropic.d.ts.map +1 -1
  35. package/dist/llm/anthropic.js +172 -26
  36. package/dist/llm/anthropic.js.map +1 -1
  37. package/dist/llm/index.d.ts +26 -8
  38. package/dist/llm/index.d.ts.map +1 -1
  39. package/dist/llm/index.js +83 -15
  40. package/dist/llm/index.js.map +1 -1
  41. package/dist/llm/openai.d.ts +28 -8
  42. package/dist/llm/openai.d.ts.map +1 -1
  43. package/dist/llm/openai.js +58 -8
  44. package/dist/llm/openai.js.map +1 -1
  45. package/dist/llm/provider.d.ts +40 -8
  46. package/dist/llm/provider.d.ts.map +1 -1
  47. package/dist/llm/provider.js +8 -1
  48. package/dist/llm/provider.js.map +1 -1
  49. package/dist/prompts/index.d.ts +32 -0
  50. package/dist/prompts/index.d.ts.map +1 -1
  51. package/dist/prompts/index.js +33 -11
  52. package/dist/prompts/index.js.map +1 -1
  53. package/dist/session/index.d.ts +32 -3
  54. package/dist/session/index.d.ts.map +1 -1
  55. package/dist/session/index.js +51 -36
  56. package/dist/session/index.js.map +1 -1
  57. package/dist/skills/brainstorming.js +33 -33
  58. package/dist/skills/code-review.js +35 -35
  59. package/dist/skills/executing-plans.js +18 -18
  60. package/dist/skills/frontend-design.js +25 -25
  61. package/dist/skills/git-workflow.js +26 -26
  62. package/dist/skills/improve-architecture.js +28 -28
  63. package/dist/skills/neuroweave.js +37 -37
  64. package/dist/skills/playwright.js +62 -62
  65. package/dist/skills/prototype.js +20 -20
  66. package/dist/skills/subagent.js +19 -19
  67. package/dist/skills/supabase.js +34 -34
  68. package/dist/skills/systematic-debugging.js +34 -34
  69. package/dist/skills/tdd.js +29 -29
  70. package/dist/skills/triage.js +25 -25
  71. package/dist/skills/verification.js +22 -22
  72. package/dist/skills/writing-plans.js +32 -32
  73. package/dist/tools/nwt.js +16 -16
  74. package/dist/tui/app.d.ts.map +1 -1
  75. package/dist/tui/app.js +9 -2
  76. package/dist/tui/app.js.map +1 -1
  77. package/dist/tui/components/Header.d.ts +8 -0
  78. package/dist/tui/components/Header.d.ts.map +1 -1
  79. package/dist/tui/components/Header.js +17 -4
  80. package/dist/tui/components/Header.js.map +1 -1
  81. package/dist/tui/components/InitWizard.d.ts +12 -1
  82. package/dist/tui/components/InitWizard.d.ts.map +1 -1
  83. package/dist/tui/components/InitWizard.js +58 -3
  84. package/dist/tui/components/InitWizard.js.map +1 -1
  85. package/dist/tui/components/ModelSelector.d.ts +3 -1
  86. package/dist/tui/components/ModelSelector.d.ts.map +1 -1
  87. package/dist/tui/components/ModelSelector.js +24 -7
  88. package/dist/tui/components/ModelSelector.js.map +1 -1
  89. package/dist/tui/components/ToolCall.d.ts.map +1 -1
  90. package/dist/tui/components/ToolCall.js +1 -6
  91. package/dist/tui/components/ToolCall.js.map +1 -1
  92. package/dist/tui/components/UserInput.d.ts.map +1 -1
  93. package/dist/tui/components/UserInput.js +20 -0
  94. package/dist/tui/components/UserInput.js.map +1 -1
  95. package/dist/tui/hooks/useChat.d.ts +22 -0
  96. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  97. package/dist/tui/hooks/useChat.js +82 -46
  98. package/dist/tui/hooks/useChat.js.map +1 -1
  99. package/dist/tui/hooks/useCommands.d.ts.map +1 -1
  100. package/dist/tui/hooks/useCommands.js +57 -0
  101. package/dist/tui/hooks/useCommands.js.map +1 -1
  102. package/dist/tui/welcome.d.ts.map +1 -1
  103. package/dist/tui/welcome.js +2 -3
  104. package/dist/tui/welcome.js.map +1 -1
  105. package/dist/types.d.ts +79 -6
  106. package/dist/types.d.ts.map +1 -1
  107. package/dist/types.js +7 -0
  108. package/dist/types.js.map +1 -1
  109. package/dist/utils/stableStringify.d.ts +21 -0
  110. package/dist/utils/stableStringify.d.ts.map +1 -0
  111. package/dist/utils/stableStringify.js +53 -0
  112. package/dist/utils/stableStringify.js.map +1 -0
  113. package/dist/utils/thinking.d.ts.map +1 -1
  114. package/dist/utils/thinking.js +0 -3
  115. package/dist/utils/thinking.js.map +1 -1
  116. package/package.json +7 -6
  117. package/src/app/index.ts +189 -124
  118. package/src/cache/fingerprint.ts +101 -0
  119. package/src/cache/index.ts +15 -0
  120. package/src/cache/smartModel.ts +52 -0
  121. package/src/cache/stats.ts +199 -0
  122. package/src/cache/volatile.ts +47 -0
  123. package/src/cmd/index.tsx +288 -292
  124. package/src/config/index.ts +156 -148
  125. package/src/config/providers.ts +234 -234
  126. package/src/config/types.ts +67 -53
  127. package/src/hooks/index.ts +111 -111
  128. package/src/llm/anthropic.ts +388 -243
  129. package/src/llm/gemini.ts +169 -169
  130. package/src/llm/index.ts +265 -200
  131. package/src/llm/openai.ts +243 -196
  132. package/src/llm/provider.ts +66 -34
  133. package/src/prompts/index.ts +260 -220
  134. package/src/session/compactor.ts +103 -103
  135. package/src/session/index.ts +181 -168
  136. package/src/session/message.ts +42 -42
  137. package/src/skills/brainstorming.ts +43 -43
  138. package/src/skills/code-review.ts +45 -45
  139. package/src/skills/executing-plans.ts +27 -27
  140. package/src/skills/frontend-design.ts +35 -35
  141. package/src/skills/git-workflow.ts +36 -36
  142. package/src/skills/improve-architecture.ts +38 -38
  143. package/src/skills/index.ts +136 -136
  144. package/src/skills/neuroweave.ts +47 -47
  145. package/src/skills/playwright.ts +72 -72
  146. package/src/skills/prototype.ts +30 -30
  147. package/src/skills/subagent.ts +28 -28
  148. package/src/skills/supabase.ts +44 -44
  149. package/src/skills/systematic-debugging.ts +44 -44
  150. package/src/skills/tdd.ts +39 -39
  151. package/src/skills/triage.ts +35 -35
  152. package/src/skills/verification.ts +31 -31
  153. package/src/skills/writing-plans.ts +42 -42
  154. package/src/tools/nwt.ts +598 -598
  155. package/src/tools/types.ts +122 -122
  156. package/src/tui/app.tsx +200 -186
  157. package/src/tui/components/ChatList.tsx +41 -41
  158. package/src/tui/components/ChatMessage.tsx +54 -54
  159. package/src/tui/components/Header.tsx +56 -29
  160. package/src/tui/components/InitWizard.tsx +217 -132
  161. package/src/tui/components/Markdown.tsx +35 -35
  162. package/src/tui/components/ModelSelector.tsx +107 -87
  163. package/src/tui/components/StatusBar.tsx +30 -30
  164. package/src/tui/components/Thinking.tsx +17 -17
  165. package/src/tui/components/ToolCall.tsx +102 -107
  166. package/src/tui/components/UserInput.tsx +151 -131
  167. package/src/tui/hooks/useChat.ts +287 -238
  168. package/src/tui/hooks/useCommands.ts +234 -176
  169. package/src/tui/index.ts +6 -6
  170. package/src/tui/welcome.ts +177 -178
  171. package/src/types.ts +104 -42
  172. package/src/utils/diff.ts +71 -71
  173. package/src/utils/project.ts +99 -99
  174. package/src/utils/stableStringify.ts +47 -0
  175. package/src/utils/thinking.ts +118 -121
  176. package/tests/cache/fingerprint.test.ts +75 -0
  177. package/tests/cache/providerCatalog.test.ts +31 -0
  178. package/tests/cache/stableStringify.test.ts +43 -0
  179. package/tests/cache/stats.test.ts +146 -0
  180. package/tests/cache/volatile.test.ts +75 -0
  181. package/tests/smoke-pollution.mjs +78 -0
  182. package/tests/smoke-thinking.mjs +110 -0
  183. package/tests/smoke-tool-stream.mjs +69 -0
  184. package/tests/smoke-tool.mjs +117 -0
  185. package/.nwt/meta.json +0 -5
  186. package/dist/version.d.ts +0 -16
  187. package/dist/version.d.ts.map +0 -1
  188. package/dist/version.js +0 -16
  189. package/dist/version.js.map +0 -1
  190. package/src/version.ts +0 -16
@@ -16,17 +16,39 @@ export class SystemPromptBuilder {
16
16
  };
17
17
  }
18
18
  build() {
19
- const fragments = [
20
- this.buildProjectInstructions(), // User config FIRST for better compliance
21
- this.buildIdentity(),
22
- this.buildToolInstructions(),
23
- this.buildEnvironment(),
24
- this.buildPermissionMode(),
25
- this.buildNwtHistory(),
26
- this.buildSkills(),
27
- this.buildDateInfo(),
28
- ];
29
- return fragments.filter(Boolean).join('\n\n');
19
+ return this.buildSegments()
20
+ .map(s => s.content)
21
+ .filter(Boolean)
22
+ .join('\n\n');
23
+ }
24
+ /**
25
+ * v3.0.0: build the system prompt as named segments instead of a flat
26
+ * string. The provider layer (Anthropic) can attach cache_control markers
27
+ * to the segments it caches, and the fingerprint module can hash the
28
+ * static portion to detect when the immutable prefix changed.
29
+ *
30
+ * Ordering rule (Reasonix-style): immutable prefix first, volatile tail
31
+ * last. NWT history and Date move to the tail because both can change
32
+ * between rounds (Date: every build; NWT: when a new event is logged).
33
+ * Keeping them out of the prefix means the upstream cache keeps its
34
+ * prefix checkpoint stable across those changes.
35
+ *
36
+ * Segments with empty content are filtered out — they neither contribute
37
+ * to the string output nor to any cache fingerprint.
38
+ */
39
+ buildSegments() {
40
+ return [
41
+ // Immutable prefix (cacheable as a single block on Anthropic)
42
+ { name: 'project-instructions', content: this.buildProjectInstructions(), volatile: false },
43
+ { name: 'identity', content: this.buildIdentity(), volatile: false },
44
+ { name: 'tool-instructions', content: this.buildToolInstructions(), volatile: false },
45
+ { name: 'environment', content: this.buildEnvironment(), volatile: false },
46
+ { name: 'permission-mode', content: this.buildPermissionMode(), volatile: false },
47
+ { name: 'skills', content: this.buildSkills(), volatile: false },
48
+ // Volatile tail — not part of the cache prefix
49
+ { name: 'nwt-history', content: this.buildNwtHistory(), volatile: true },
50
+ { name: 'date-info', content: this.buildDateInfo(), volatile: true },
51
+ ].filter(s => s.content);
30
52
  }
31
53
  buildIdentity() {
32
54
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,21 @@ export declare class SessionManager {
10
10
  private maxMessages;
11
11
  /** v2.2.4: counter for messages dropped by the pollution filter. */
12
12
  private droppedCount;
13
- constructor(maxMessages?: number);
13
+ /**
14
+ * v3.0.0: callback invoked when the message count exceeds maxMessages.
15
+ * Reasonix principle: do not mutate messages to compact; instead, signal
16
+ * the TUI to suggest the user call /new (start a fresh session) so that
17
+ * the upstream prompt cache keeps a stable prefix. NWT auto-logs every
18
+ * meaningful event, so no history is lost — it just moves out of the
19
+ * live cache window.
20
+ */
21
+ onSuggestNewSession?: (info: {
22
+ currentLength: number;
23
+ max: number;
24
+ }) => void;
25
+ constructor(maxMessages?: number, options?: {
26
+ onSuggestNewSession?: SessionManager['onSuggestNewSession'];
27
+ });
14
28
  addMessage(role: ChatMessage['role'], content: string, extras?: Partial<ChatMessage>): void;
15
29
  /**
16
30
  * v2.2.4 (port from v2.1.0): same as addMessage but returns false
@@ -25,8 +39,23 @@ export declare class SessionManager {
25
39
  getMessageCount(): number;
26
40
  clear(): void;
27
41
  /**
28
- * Auto-compact when messages exceed max.
29
- * Keeps system messages + recent half. One summary replaces the rest.
42
+ * v3.0.0: "auto-compact" is now a no-op on `messages`. We instead invoke
43
+ * the registered `onSuggestNewSession` callback (if any) so the TUI can
44
+ * surface a "context is getting long, consider /new" hint. This keeps
45
+ * the messages array byte-stable across rounds, which is critical for
46
+ * prompt-cache hit-rate: any reordering or summary insertion would
47
+ * invalidate every cache breakpoint the upstream provider has set.
48
+ *
49
+ * Rationale (Reasonix-style): when context exceeds the model window or
50
+ * the configured maxMessages threshold, the right action is to start a
51
+ * NEW session, not to silently truncate or summarize. NWT auto-logs
52
+ * every meaningful event, so the user does not lose context — it just
53
+ * moves out of the live cache window. If the user wants a longer
54
+ * session, they can bump maxMessages in `~/.thatgfsj/config.json`.
55
+ *
56
+ * The original "fake compact" logic (insert `[Earlier conversation...]`
57
+ * summary) is preserved as `truncate()` for callers that explicitly
58
+ * want to compact (e.g. /new command hard-reset).
30
59
  */
31
60
  private autoCompact;
32
61
  truncate(maxMessages?: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsD/C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,oEAAoE;IACpE,OAAO,CAAC,YAAY,CAAa;gBAErB,WAAW,SAAK;IAO5B,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAK3F;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO;IASlG,4EAA4E;IAC5E,eAAe,IAAI,MAAM;IAIzB,WAAW,IAAI,WAAW,EAAE;IAI5B,eAAe,IAAI,MAAM;IAIzB,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,OAAO,CAAC,WAAW;IAoBnB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBpC,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;CAOjE;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzE,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqD/C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,oEAAoE;IACpE,OAAO,CAAC,YAAY,CAAa;IACjC;;;;;;;OAOG;IACI,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;gBAExE,WAAW,SAAK,EAAE,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAA;KAAE;IAQvG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAK3F;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO;IASlG,4EAA4E;IAC5E,eAAe,IAAI,MAAM;IAIzB,WAAW,IAAI,WAAW,EAAE;IAI5B,eAAe,IAAI,MAAM;IAIzB,KAAK,IAAI,IAAI;IAIb;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,WAAW;IAiBnB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IASpC,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;CAOjE;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzE,cAAc,cAAc,CAAC"}
@@ -36,22 +36,21 @@ const POLLUTION_WEAK = [
36
36
  function looksPolluted(content) {
37
37
  if (!content)
38
38
  return false;
39
- // Common gates (apply to both tiers):
40
- // - Length: model got cut off mid-stream → pollution is short.
41
- // A long message with [已中断] in the middle is the model
42
- // legitimately referencing the marker, not pollution.
43
- // - Question: ends with '?' user complaining about past behavior.
44
- // - Temporal: contains "last time" / "earlier" / etc. past tense.
39
+ if (POLLUTION_STRONG.some(p => p.test(content)))
40
+ return true;
41
+ // WEAK pattern gate:
42
+ // - Message must be short (model got cut off mid-stream, so it
43
+ // can't be long)
44
+ // - Message must NOT end with '?' (questions are user complaints
45
+ // about past behavior, not pollution)
46
+ // - Message must NOT contain "last time" / "earlier" / "before"
47
+ // (temporal references indicate user discussing past behavior)
45
48
  if (content.length >= 200)
46
49
  return false;
47
50
  if (/\?\s*$/.test(content.trim()))
48
51
  return false;
49
52
  if (/\b(last time|earlier|before|previously|yesterday)\b/i.test(content))
50
53
  return false;
51
- // STRONG markers — bracketed truncation markers, unambiguous.
52
- if (POLLUTION_STRONG.some(p => p.test(content)))
53
- return true;
54
- // WEAK markers — bare "response truncated" phrases.
55
54
  if (POLLUTION_WEAK.some(p => p.test(content)))
56
55
  return true;
57
56
  return false;
@@ -64,11 +63,21 @@ export class SessionManager {
64
63
  maxMessages;
65
64
  /** v2.2.4: counter for messages dropped by the pollution filter. */
66
65
  droppedCount = 0;
67
- constructor(maxMessages = 50) {
66
+ /**
67
+ * v3.0.0: callback invoked when the message count exceeds maxMessages.
68
+ * Reasonix principle: do not mutate messages to compact; instead, signal
69
+ * the TUI to suggest the user call /new (start a fresh session) so that
70
+ * the upstream prompt cache keeps a stable prefix. NWT auto-logs every
71
+ * meaningful event, so no history is lost — it just moves out of the
72
+ * live cache window.
73
+ */
74
+ onSuggestNewSession;
75
+ constructor(maxMessages = 50, options) {
68
76
  this.maxMessages = maxMessages;
69
77
  this.sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
70
78
  this.createdAt = new Date();
71
79
  this.compactor = new ContextCompactor({ maxMessages });
80
+ this.onSuggestNewSession = options?.onSuggestNewSession;
72
81
  }
73
82
  addMessage(role, content, extras) {
74
83
  this.messages.push({ role, content, ...extras });
@@ -102,39 +111,45 @@ export class SessionManager {
102
111
  this.messages = [];
103
112
  }
104
113
  /**
105
- * Auto-compact when messages exceed max.
106
- * Keeps system messages + recent half. One summary replaces the rest.
114
+ * v3.0.0: "auto-compact" is now a no-op on `messages`. We instead invoke
115
+ * the registered `onSuggestNewSession` callback (if any) so the TUI can
116
+ * surface a "context is getting long, consider /new" hint. This keeps
117
+ * the messages array byte-stable across rounds, which is critical for
118
+ * prompt-cache hit-rate: any reordering or summary insertion would
119
+ * invalidate every cache breakpoint the upstream provider has set.
120
+ *
121
+ * Rationale (Reasonix-style): when context exceeds the model window or
122
+ * the configured maxMessages threshold, the right action is to start a
123
+ * NEW session, not to silently truncate or summarize. NWT auto-logs
124
+ * every meaningful event, so the user does not lose context — it just
125
+ * moves out of the live cache window. If the user wants a longer
126
+ * session, they can bump maxMessages in `~/.thatgfsj/config.json`.
127
+ *
128
+ * The original "fake compact" logic (insert `[Earlier conversation...]`
129
+ * summary) is preserved as `truncate()` for callers that explicitly
130
+ * want to compact (e.g. /new command hard-reset).
107
131
  */
108
132
  autoCompact() {
109
133
  if (this.messages.length <= this.maxMessages)
110
134
  return;
111
- const systemMsgs = this.messages.filter(m => m.role === 'system');
112
- const others = this.messages.filter(m => m.role !== 'system');
113
- const keepCount = Math.floor(this.maxMessages * 0.5);
114
- const recent = others.slice(-keepCount);
115
- const removed = others.length - keepCount;
116
- if (removed <= 0)
117
- return;
118
- // Remove old summaries before adding new one
119
- const cleanSystem = systemMsgs.filter(m => !m.content.startsWith('[Earlier conversation'));
120
- const summary = {
121
- role: 'system',
122
- content: `[Earlier conversation: ${removed} messages compacted to save context]`,
123
- };
124
- this.messages = [...cleanSystem, summary, ...recent];
135
+ // Notify the TUI. The default TUI behavior is to render a toast:
136
+ // ⚠️ 上下文超长({currentLength}/{max}),建议调 /new 开新会话
137
+ // (NWT 已自动归档历史)
138
+ try {
139
+ this.onSuggestNewSession?.({
140
+ currentLength: this.messages.length,
141
+ max: this.maxMessages,
142
+ });
143
+ }
144
+ catch {
145
+ // Callback failure must not break the chat loop.
146
+ }
147
+ // Intentionally do NOT mutate this.messages. Prefix stability matters more.
125
148
  }
126
149
  truncate(maxMessages) {
127
150
  if (maxMessages) {
128
- // v2.2.7 edge fix: preserveRecent must be <= maxMessages - 1,
129
- // otherwise the compactor's "always keep recent N" branch
130
- // overrides the trim and no messages actually get dropped.
131
- // Set preserveRecent to maxMessages-1 so anything beyond the
132
- // last maxMessages-1 user/assistant msgs gets summarized.
133
151
  this.maxMessages = maxMessages;
134
- this.compactor = new ContextCompactor({
135
- maxMessages,
136
- preserveRecent: Math.max(1, maxMessages - 1),
137
- });
152
+ this.compactor = new ContextCompactor({ maxMessages });
138
153
  }
139
154
  const { compacted } = this.compactor.compact(this.messages);
140
155
  this.messages = compacted;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,gBAAgB,GAAa;IACjC,SAAS;IACT,kBAAkB;CACnB,CAAC;AAEF,MAAM,cAAc,GAAa;IAC/B,2BAA2B;IAC3B,oCAAoC;IACpC,sDAAsD;IACtD,oDAAoD;CACrD,CAAC;AAEF,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,qBAAqB;IACrB,iEAAiE;IACjE,qBAAqB;IACrB,mEAAmE;IACnE,0CAA0C;IAC1C,kEAAkE;IAClE,mEAAmE;IACnE,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,sDAAsD,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACvF,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAkB,EAAE,CAAC;IAC7B,SAAS,CAAS;IAClB,SAAS,CAAO;IAChB,SAAS,CAAmB;IAC5B,WAAW,CAAS;IAC5B,oEAAoE;IAC5D,YAAY,GAAW,CAAC,CAAC;IACjC;;;;;;;OAOG;IACI,mBAAmB,CAA0D;IAEpF,YAAY,WAAW,GAAG,EAAE,EAAE,OAAyE;QACrG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACvF,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,CAAC;IAC1D,CAAC;IAED,UAAU,CAAC,IAAyB,EAAE,OAAe,EAAE,MAA6B;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAyB,EAAE,OAAe,EAAE,MAA6B;QACtF,IAAI,IAAI,KAAK,WAAW,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,WAAW;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAErD,iEAAiE;QACjE,kDAAkD;QAClD,2BAA2B;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACnC,GAAG,EAAE,IAAI,CAAC,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;QACD,4EAA4E;IAC9E,CAAC;IAED,QAAQ,CAAC,WAAoB;QAC3B,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,cAAc,cAAc,CAAC"}
@@ -4,39 +4,39 @@ export const brainstormingSkill = {
4
4
  description: 'Explore multiple approaches before committing to a solution',
5
5
  category: 'planning',
6
6
  autoActivate: ['怎么', 'how to', '方案', 'approach', '有没有', 'alternatives'],
7
- prompt: `## Brainstorming Mode
8
-
9
- When exploring solutions, don't jump to the first idea. Instead:
10
-
11
- ### 1. Generate Options
12
- List 3-5 different approaches, including at least one unconventional one.
13
-
14
- ### 2. Evaluate Each
15
- For each approach, briefly note:
16
- - **Pros**: What makes it good
17
- - **Cons**: What could go wrong
18
- - **Effort**: How much work (quick/medium/heavy)
19
-
20
- ### 3. Recommend
21
- Pick the best approach and explain WHY it's the best fit for this specific situation.
22
-
23
- ### Format
24
- \`\`\`
25
- ## Approaches
26
-
27
- ### Option A: [Name]
28
- - Pros: ...
29
- - Cons: ...
30
- - Effort: medium
31
-
32
- ### Option B: [Name]
33
- - Pros: ...
34
- - Cons: ...
35
- - Effort: quick
36
-
37
- **Recommendation**: Option B because [specific reason]
38
- \`\`\`
39
-
7
+ prompt: `## Brainstorming Mode
8
+
9
+ When exploring solutions, don't jump to the first idea. Instead:
10
+
11
+ ### 1. Generate Options
12
+ List 3-5 different approaches, including at least one unconventional one.
13
+
14
+ ### 2. Evaluate Each
15
+ For each approach, briefly note:
16
+ - **Pros**: What makes it good
17
+ - **Cons**: What could go wrong
18
+ - **Effort**: How much work (quick/medium/heavy)
19
+
20
+ ### 3. Recommend
21
+ Pick the best approach and explain WHY it's the best fit for this specific situation.
22
+
23
+ ### Format
24
+ \`\`\`
25
+ ## Approaches
26
+
27
+ ### Option A: [Name]
28
+ - Pros: ...
29
+ - Cons: ...
30
+ - Effort: medium
31
+
32
+ ### Option B: [Name]
33
+ - Pros: ...
34
+ - Cons: ...
35
+ - Effort: quick
36
+
37
+ **Recommendation**: Option B because [specific reason]
38
+ \`\`\`
39
+
40
40
  Don't just list options - give a clear recommendation with reasoning.`,
41
41
  };
42
42
  //# sourceMappingURL=brainstorming.js.map
@@ -4,41 +4,41 @@ export const codeReviewSkill = {
4
4
  description: 'Systematic code review for quality, security, and correctness',
5
5
  category: 'review',
6
6
  autoActivate: ['review', '审查', '检查代码', 'code quality'],
7
- prompt: `## Code Review Checklist
8
-
9
- When reviewing code (your own or others):
10
-
11
- ### Correctness
12
- - Does it do what it's supposed to?
13
- - Are edge cases handled?
14
- - Are error cases handled?
15
-
16
- ### Security
17
- - No hardcoded secrets or API keys
18
- - Input validation on user data
19
- - No SQL injection, XSS, or path traversal risks
20
-
21
- ### Performance
22
- - No unnecessary loops or allocations
23
- - Efficient data structures
24
- - No N+1 queries or blocking calls
25
-
26
- ### Readability
27
- - Clear variable/function names
28
- - Appropriate comments (why, not what)
29
- - Consistent style with codebase
30
-
31
- ### Testability
32
- - Can this be easily tested?
33
- - Are dependencies injectable?
34
- - Are side effects isolated?
35
-
36
- ### Output Format
37
- \`\`\`
38
- ## Review Summary
39
- ✅ Good: [what's done well]
40
- ⚠️ Suggestions: [improvements]
41
- 🔴 Issues: [must fix]
7
+ prompt: `## Code Review Checklist
8
+
9
+ When reviewing code (your own or others):
10
+
11
+ ### Correctness
12
+ - Does it do what it's supposed to?
13
+ - Are edge cases handled?
14
+ - Are error cases handled?
15
+
16
+ ### Security
17
+ - No hardcoded secrets or API keys
18
+ - Input validation on user data
19
+ - No SQL injection, XSS, or path traversal risks
20
+
21
+ ### Performance
22
+ - No unnecessary loops or allocations
23
+ - Efficient data structures
24
+ - No N+1 queries or blocking calls
25
+
26
+ ### Readability
27
+ - Clear variable/function names
28
+ - Appropriate comments (why, not what)
29
+ - Consistent style with codebase
30
+
31
+ ### Testability
32
+ - Can this be easily tested?
33
+ - Are dependencies injectable?
34
+ - Are side effects isolated?
35
+
36
+ ### Output Format
37
+ \`\`\`
38
+ ## Review Summary
39
+ ✅ Good: [what's done well]
40
+ ⚠️ Suggestions: [improvements]
41
+ 🔴 Issues: [must fix]
42
42
  \`\`\``,
43
43
  };
44
44
  //# sourceMappingURL=code-review.js.map
@@ -3,24 +3,24 @@ export const executingPlansSkill = {
3
3
  name: 'Executing Plans',
4
4
  description: 'Execute multi-step plans methodically with verification',
5
5
  category: 'planning',
6
- prompt: `## Plan Execution Mode
7
-
8
- When executing a plan or multi-step task:
9
-
10
- 1. **One step at a time** - Complete each step fully before moving to the next
11
- 2. **Verify each step** - After each change, verify it works (read the file, run a test, check syntax)
12
- 3. **Report progress** - Tell the user what you did for each step
13
- 4. **Handle failures** - If a step fails, stop and explain. Don't silently skip.
14
- 5. **Commit checkpoints** - After successful steps, suggest a git commit
15
-
16
- ### Progress Format
17
- \`\`\`
18
- ✅ Step 1: [What was done] - Verified
19
- ✅ Step 2: [What was done] - Verified
20
- ⏳ Step 3: [Currently working on]
21
- ⬜ Step 4: [Pending]
22
- \`\`\`
23
-
6
+ prompt: `## Plan Execution Mode
7
+
8
+ When executing a plan or multi-step task:
9
+
10
+ 1. **One step at a time** - Complete each step fully before moving to the next
11
+ 2. **Verify each step** - After each change, verify it works (read the file, run a test, check syntax)
12
+ 3. **Report progress** - Tell the user what you did for each step
13
+ 4. **Handle failures** - If a step fails, stop and explain. Don't silently skip.
14
+ 5. **Commit checkpoints** - After successful steps, suggest a git commit
15
+
16
+ ### Progress Format
17
+ \`\`\`
18
+ ✅ Step 1: [What was done] - Verified
19
+ ✅ Step 2: [What was done] - Verified
20
+ ⏳ Step 3: [Currently working on]
21
+ ⬜ Step 4: [Pending]
22
+ \`\`\`
23
+
24
24
  If you encounter an unexpected issue, stop and ask the user how to proceed.`,
25
25
  };
26
26
  //# sourceMappingURL=executing-plans.js.map
@@ -4,31 +4,31 @@ export const frontendDesignSkill = {
4
4
  description: 'UI/UX best practices for web interfaces',
5
5
  category: 'architecture',
6
6
  autoActivate: ['ui', 'ux', 'frontend', 'css', 'layout', 'design', '界面', '页面'],
7
- prompt: `## Frontend Design Principles
8
-
9
- ### Layout
10
- - Use CSS Grid for 2D layouts, Flexbox for 1D
11
- - Mobile-first: design for small screens, enhance for larger
12
- - Consistent spacing: use a 4px or 8px grid system
13
-
14
- ### Typography
15
- - Max 2-3 font sizes per page
16
- - Line height: 1.5 for body, 1.2 for headings
17
- - Max line length: 60-80 characters
18
-
19
- ### Color
20
- - Use a limited palette (primary, secondary, accent, neutral)
21
- - Ensure contrast ratio ≥ 4.5:1 for text
22
- - Use color purposefully (not just decoration)
23
-
24
- ### Components
25
- - Keep components small and focused
26
- - Extract reusable patterns early
27
- - Props should be explicit, not spread
28
-
29
- ### Performance
30
- - Lazy load images and heavy components
31
- - Minimize bundle size
7
+ prompt: `## Frontend Design Principles
8
+
9
+ ### Layout
10
+ - Use CSS Grid for 2D layouts, Flexbox for 1D
11
+ - Mobile-first: design for small screens, enhance for larger
12
+ - Consistent spacing: use a 4px or 8px grid system
13
+
14
+ ### Typography
15
+ - Max 2-3 font sizes per page
16
+ - Line height: 1.5 for body, 1.2 for headings
17
+ - Max line length: 60-80 characters
18
+
19
+ ### Color
20
+ - Use a limited palette (primary, secondary, accent, neutral)
21
+ - Ensure contrast ratio ≥ 4.5:1 for text
22
+ - Use color purposefully (not just decoration)
23
+
24
+ ### Components
25
+ - Keep components small and focused
26
+ - Extract reusable patterns early
27
+ - Props should be explicit, not spread
28
+
29
+ ### Performance
30
+ - Lazy load images and heavy components
31
+ - Minimize bundle size
32
32
  - Use skeleton loaders for async content`,
33
33
  };
34
34
  //# sourceMappingURL=frontend-design.js.map
@@ -4,32 +4,32 @@ export const gitWorkflowSkill = {
4
4
  description: 'Clean git practices: commits, branches, PRs',
5
5
  category: 'workflow',
6
6
  autoActivate: ['git', 'commit', 'branch', 'merge', 'push', 'pull request'],
7
- prompt: `## Git Best Practices
8
-
9
- ### Commits
10
- - **Atomic**: One logical change per commit
11
- - **Message format**: \`type(scope): description\`
12
- - feat: new feature
13
- - fix: bug fix
14
- - refactor: code restructuring
15
- - docs: documentation
16
- - test: adding tests
17
- - chore: maintenance
18
-
19
- ### Before Committing
20
- 1. Review changes: \`git diff --staged\`
21
- 2. Run tests
22
- 3. Check for secrets or debug code
23
-
24
- ### Branch Naming
25
- - \`feature/description\` - New features
26
- - \`fix/description\` - Bug fixes
27
- - \`refactor/description\` - Code improvements
28
-
29
- ### Workflow
30
- 1. Create branch from main
31
- 2. Make changes with atomic commits
32
- 3. Push and create PR
7
+ prompt: `## Git Best Practices
8
+
9
+ ### Commits
10
+ - **Atomic**: One logical change per commit
11
+ - **Message format**: \`type(scope): description\`
12
+ - feat: new feature
13
+ - fix: bug fix
14
+ - refactor: code restructuring
15
+ - docs: documentation
16
+ - test: adding tests
17
+ - chore: maintenance
18
+
19
+ ### Before Committing
20
+ 1. Review changes: \`git diff --staged\`
21
+ 2. Run tests
22
+ 3. Check for secrets or debug code
23
+
24
+ ### Branch Naming
25
+ - \`feature/description\` - New features
26
+ - \`fix/description\` - Bug fixes
27
+ - \`refactor/description\` - Code improvements
28
+
29
+ ### Workflow
30
+ 1. Create branch from main
31
+ 2. Make changes with atomic commits
32
+ 3. Push and create PR
33
33
  4. Squash merge to main`,
34
34
  };
35
35
  //# sourceMappingURL=git-workflow.js.map