@x-code-cli/core 0.1.0 → 0.1.4

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 (136) hide show
  1. package/dist/agent/api-errors.d.ts +11 -0
  2. package/dist/agent/api-errors.d.ts.map +1 -0
  3. package/dist/agent/api-errors.js +134 -0
  4. package/dist/agent/api-errors.js.map +1 -0
  5. package/dist/agent/context-window.d.ts +26 -0
  6. package/dist/agent/context-window.d.ts.map +1 -0
  7. package/dist/agent/context-window.js +126 -0
  8. package/dist/agent/context-window.js.map +1 -0
  9. package/dist/agent/loop-state.d.ts +14 -0
  10. package/dist/agent/loop-state.d.ts.map +1 -0
  11. package/dist/agent/loop-state.js +12 -0
  12. package/dist/agent/loop-state.js.map +1 -0
  13. package/dist/agent/loop.d.ts +11 -15
  14. package/dist/agent/loop.d.ts.map +1 -1
  15. package/dist/agent/loop.js +213 -381
  16. package/dist/agent/loop.js.map +1 -1
  17. package/dist/agent/messages.d.ts +0 -2
  18. package/dist/agent/messages.d.ts.map +1 -1
  19. package/dist/agent/messages.js +0 -32
  20. package/dist/agent/messages.js.map +1 -1
  21. package/dist/agent/provider-compat.d.ts +17 -0
  22. package/dist/agent/provider-compat.d.ts.map +1 -0
  23. package/dist/agent/provider-compat.js +31 -0
  24. package/dist/agent/provider-compat.js.map +1 -0
  25. package/dist/agent/stream-utils.d.ts +33 -0
  26. package/dist/agent/stream-utils.d.ts.map +1 -0
  27. package/dist/agent/stream-utils.js +14 -0
  28. package/dist/agent/stream-utils.js.map +1 -0
  29. package/dist/agent/system-prompt.d.ts +1 -3
  30. package/dist/agent/system-prompt.d.ts.map +1 -1
  31. package/dist/agent/system-prompt.js +35 -24
  32. package/dist/agent/system-prompt.js.map +1 -1
  33. package/dist/agent/tool-execution.d.ts +11 -0
  34. package/dist/agent/tool-execution.d.ts.map +1 -0
  35. package/dist/agent/tool-execution.js +171 -0
  36. package/dist/agent/tool-execution.js.map +1 -0
  37. package/dist/config/index.d.ts +19 -8
  38. package/dist/config/index.d.ts.map +1 -1
  39. package/dist/config/index.js +66 -32
  40. package/dist/config/index.js.map +1 -1
  41. package/dist/index.d.ts +7 -8
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +6 -7
  44. package/dist/index.js.map +1 -1
  45. package/dist/knowledge/auto-memory.d.ts +1 -1
  46. package/dist/knowledge/auto-memory.d.ts.map +1 -1
  47. package/dist/knowledge/auto-memory.js +56 -17
  48. package/dist/knowledge/auto-memory.js.map +1 -1
  49. package/dist/knowledge/init.d.ts +1 -2
  50. package/dist/knowledge/init.d.ts.map +1 -1
  51. package/dist/knowledge/init.js +84 -70
  52. package/dist/knowledge/init.js.map +1 -1
  53. package/dist/knowledge/loader.d.ts +0 -9
  54. package/dist/knowledge/loader.d.ts.map +1 -1
  55. package/dist/knowledge/loader.js +54 -99
  56. package/dist/knowledge/loader.js.map +1 -1
  57. package/dist/knowledge/session.d.ts +1 -1
  58. package/dist/knowledge/session.d.ts.map +1 -1
  59. package/dist/knowledge/session.js +3 -2
  60. package/dist/knowledge/session.js.map +1 -1
  61. package/dist/permissions/index.d.ts +2 -0
  62. package/dist/permissions/index.d.ts.map +1 -1
  63. package/dist/permissions/index.js +36 -15
  64. package/dist/permissions/index.js.map +1 -1
  65. package/dist/providers/registry.js +1 -1
  66. package/dist/providers/registry.js.map +1 -1
  67. package/dist/tools/ask-user.js +1 -1
  68. package/dist/tools/ask-user.js.map +1 -1
  69. package/dist/tools/edit.js +1 -1
  70. package/dist/tools/edit.js.map +1 -1
  71. package/dist/tools/glob.d.ts.map +1 -1
  72. package/dist/tools/glob.js +4 -2
  73. package/dist/tools/glob.js.map +1 -1
  74. package/dist/tools/grep.d.ts.map +1 -1
  75. package/dist/tools/grep.js +8 -3
  76. package/dist/tools/grep.js.map +1 -1
  77. package/dist/tools/index.d.ts +2 -6
  78. package/dist/tools/index.d.ts.map +1 -1
  79. package/dist/tools/index.js +2 -6
  80. package/dist/tools/index.js.map +1 -1
  81. package/dist/tools/list-dir.d.ts.map +1 -1
  82. package/dist/tools/list-dir.js +4 -2
  83. package/dist/tools/list-dir.js.map +1 -1
  84. package/dist/tools/progress.d.ts +6 -0
  85. package/dist/tools/progress.d.ts.map +1 -0
  86. package/dist/tools/progress.js +14 -0
  87. package/dist/tools/progress.js.map +1 -0
  88. package/dist/tools/read-file.d.ts.map +1 -1
  89. package/dist/tools/read-file.js +4 -2
  90. package/dist/tools/read-file.js.map +1 -1
  91. package/dist/tools/save-knowledge.d.ts +1 -1
  92. package/dist/tools/save-knowledge.d.ts.map +1 -1
  93. package/dist/tools/save-knowledge.js +31 -6
  94. package/dist/tools/save-knowledge.js.map +1 -1
  95. package/dist/tools/shell-utils.d.ts.map +1 -1
  96. package/dist/tools/shell-utils.js +8 -1
  97. package/dist/tools/shell-utils.js.map +1 -1
  98. package/dist/tools/shell.js +1 -1
  99. package/dist/tools/shell.js.map +1 -1
  100. package/dist/tools/web-fetch.d.ts.map +1 -1
  101. package/dist/tools/web-fetch.js +88 -19
  102. package/dist/tools/web-fetch.js.map +1 -1
  103. package/dist/tools/web-search.d.ts.map +1 -1
  104. package/dist/tools/web-search.js +85 -12
  105. package/dist/tools/web-search.js.map +1 -1
  106. package/dist/tools/write-file.js +1 -1
  107. package/dist/tools/write-file.js.map +1 -1
  108. package/dist/types/index.d.ts +60 -21
  109. package/dist/types/index.d.ts.map +1 -1
  110. package/dist/types/index.js +64 -6
  111. package/dist/types/index.js.map +1 -1
  112. package/dist/utils.d.ts +3 -0
  113. package/dist/utils.d.ts.map +1 -1
  114. package/dist/utils.js +33 -1
  115. package/dist/utils.js.map +1 -1
  116. package/package.json +6 -1
  117. package/dist/agent/plan-mode.d.ts +0 -11
  118. package/dist/agent/plan-mode.d.ts.map +0 -1
  119. package/dist/agent/plan-mode.js +0 -37
  120. package/dist/agent/plan-mode.js.map +0 -1
  121. package/dist/agent/pricing.d.ts +0 -9
  122. package/dist/agent/pricing.d.ts.map +0 -1
  123. package/dist/agent/pricing.js +0 -47
  124. package/dist/agent/pricing.js.map +0 -1
  125. package/dist/knowledge/hooks.d.ts +0 -3
  126. package/dist/knowledge/hooks.d.ts.map +0 -1
  127. package/dist/knowledge/hooks.js +0 -59
  128. package/dist/knowledge/hooks.js.map +0 -1
  129. package/dist/tools/enter-plan-mode.d.ts +0 -2
  130. package/dist/tools/enter-plan-mode.d.ts.map +0 -1
  131. package/dist/tools/enter-plan-mode.js +0 -11
  132. package/dist/tools/enter-plan-mode.js.map +0 -1
  133. package/dist/tools/exit-plan-mode.d.ts +0 -2
  134. package/dist/tools/exit-plan-mode.d.ts.map +0 -1
  135. package/dist/tools/exit-plan-mode.js +0 -9
  136. package/dist/tools/exit-plan-mode.js.map +0 -1
@@ -4,8 +4,6 @@ export interface TokenUsage {
4
4
  inputTokens: number;
5
5
  outputTokens: number;
6
6
  totalTokens: number;
7
- estimatedCost: number;
8
- costCurrency: 'USD' | 'CNY';
9
7
  }
10
8
  export interface DisplayMessage {
11
9
  id: string;
@@ -13,19 +11,45 @@ export interface DisplayMessage {
13
11
  content: string;
14
12
  toolCalls?: DisplayToolCall[];
15
13
  timestamp: number;
14
+ /** True for assistant text chunks emitted mid-stream (one per newline).
15
+ * Rendered WITHOUT the trailing blank line that regular messages append,
16
+ * so consecutive chunks join into a single paragraph visually. Keeps
17
+ * streaming text out of the bottom cell buffer (avoids row-shift jitter)
18
+ * by sending each complete line directly to scrollback. */
19
+ streamingChunk?: boolean;
20
+ /** Compact slash-command rendering, matching Claude Code's 2-line block:
21
+ * > /model
22
+ * ⎿ Set model to Sonnet 4.6
23
+ * 'command-echo' (user role) drops the trailing blank that regular user
24
+ * messages append; 'command-result' (assistant role) renders with the
25
+ * ⎿ prefix and a single trailing newline instead of markdown + \n\n.
26
+ * Used only for short, single-line command responses. Long multi-line
27
+ * output (/help, /usage) keeps the regular assistant-message path. */
28
+ kind?: 'command-echo' | 'command-result';
16
29
  }
17
30
  export interface DisplayToolCall {
18
31
  id: string;
19
32
  toolName: string;
20
33
  input: Record<string, unknown>;
21
34
  output?: string;
22
- status: 'pending' | 'running' | 'completed' | 'denied';
35
+ /** `error` marks a tool that finished but with a non-zero exit / thrown
36
+ * exception — the stdout-writer renders its result body in red so
37
+ * failures stand out in scrollback. `denied` is reserved for the
38
+ * permission-denial path. */
39
+ status: 'pending' | 'running' | 'completed' | 'denied' | 'error';
40
+ /** How long the tool call took to execute (milliseconds) */
41
+ durationMs?: number;
23
42
  }
24
43
  export interface AgentCallbacks {
25
44
  onTextDelta: (text: string) => void;
26
- onToolCall: (toolName: string, input: Record<string, unknown>) => void;
27
- onToolResult: (toolCallId: string, result: string) => void;
45
+ onToolCall: (toolCallId: string, toolName: string, input: Record<string, unknown>) => void;
46
+ /** Streamed progress messages emitted by a tool while it runs (e.g.
47
+ * "Searching: query" → "Found 5 results"). Only the LATEST message is
48
+ * shown in the live UI; the final summary comes through onToolResult. */
49
+ onToolProgress: (toolCallId: string, message: string) => void;
50
+ onToolResult: (toolCallId: string, result: string, isError?: boolean) => void;
28
51
  onAskPermission: (toolCall: {
52
+ toolCallId: string;
29
53
  toolName: string;
30
54
  input: Record<string, unknown>;
31
55
  }) => Promise<boolean>;
@@ -46,13 +70,22 @@ export interface AgentOptions {
46
70
  systemPromptExtra?: string;
47
71
  abortSignal?: AbortSignal;
48
72
  }
49
- export interface AppConfig {
50
- model?: string;
51
- }
73
+ /**
74
+ * Category taxonomy for auto memory entries. Categories describe the TYPE of
75
+ * knowledge (who it's about, how it was learned) rather than the topic —
76
+ * this mirrors the taxonomy Claude Code uses and produces sharper memories
77
+ * because each category has distinct trigger conditions for the agent.
78
+ *
79
+ * - user: Facts about the human user — role, expertise, goals, constraints
80
+ * - feedback: Corrections or validated approaches ("don't mock the db", "yes, that was right")
81
+ * - project: Ongoing work, initiatives, decisions, non-obvious project state
82
+ * - reference: Pointers to external systems (Linear project, Grafana dashboard, etc.)
83
+ */
84
+ export type KnowledgeCategory = 'user' | 'feedback' | 'project' | 'reference';
52
85
  export interface KnowledgeFact {
53
86
  key: string;
54
87
  fact: string;
55
- category: 'tech-stack' | 'commands' | 'conventions' | 'preferences' | 'context';
88
+ category: KnowledgeCategory;
56
89
  date: string;
57
90
  }
58
91
  export interface SessionSummary {
@@ -67,26 +100,16 @@ export interface SessionSummary {
67
100
  filesModified: string[];
68
101
  decisions: string[];
69
102
  }
70
- export interface RuleFrontmatter {
71
- alwaysApply?: boolean;
72
- paths?: string[];
73
- description?: string;
74
- }
75
- export interface RuleFile {
76
- filename: string;
77
- frontmatter: RuleFrontmatter;
78
- content: string;
79
- }
80
103
  export declare const MODEL_ALIASES: Record<string, string>;
81
104
  export declare const PROVIDER_DETECTION_ORDER: readonly [{
82
105
  readonly envKey: "ANTHROPIC_API_KEY";
83
- readonly defaultModel: "anthropic:claude-sonnet-4-5";
106
+ readonly defaultModel: "anthropic:claude-sonnet-4-6";
84
107
  }, {
85
108
  readonly envKey: "OPENAI_API_KEY";
86
109
  readonly defaultModel: "openai:gpt-4.1";
87
110
  }, {
88
111
  readonly envKey: "DEEPSEEK_API_KEY";
89
- readonly defaultModel: "deepseek:deepseek-chat";
112
+ readonly defaultModel: "deepseek:deepseek-v4-flash";
90
113
  }, {
91
114
  readonly envKey: "ALIBABA_API_KEY";
92
115
  readonly defaultModel: "alibaba:qwen-max";
@@ -103,6 +126,22 @@ export declare const PROVIDER_DETECTION_ORDER: readonly [{
103
126
  readonly envKey: "MOONSHOT_API_KEY";
104
127
  readonly defaultModel: "moonshotai:kimi-k2.5";
105
128
  }];
129
+ export interface ProviderModel {
130
+ /** Full `<provider>:<model>` id passed to AI SDK */
131
+ id: string;
132
+ /** Short display label shown in the picker */
133
+ label: string;
134
+ /** One-line description shown under the label */
135
+ description: string;
136
+ }
137
+ /**
138
+ * Hand-curated models per provider. Only models we've tested or that are
139
+ * advertised as production-stable make the list — agents tend to pick
140
+ * whatever is visible, so we don't dump every experimental variant here.
141
+ * Users who need something exotic can still type the full id into
142
+ * `/model <provider>:<model>` or pass it via `--model`.
143
+ */
144
+ export declare const PROVIDER_MODELS: Record<string, readonly ProviderModel[]>;
106
145
  export declare const PROVIDER_KEY_URLS: Record<string, string>;
107
146
  export type { ModelMessage, LanguageModel };
108
147
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,85 @@
1
1
  // ─── Model aliases ───
2
2
  export const MODEL_ALIASES = {
3
- sonnet: 'anthropic:claude-sonnet-4-5',
4
- opus: 'anthropic:claude-opus-4-6',
3
+ sonnet: 'anthropic:claude-sonnet-4-6',
4
+ opus: 'anthropic:claude-opus-4-7',
5
5
  haiku: 'anthropic:claude-haiku-4-5',
6
6
  gpt4: 'openai:gpt-4.1',
7
7
  gemini: 'google:gemini-2.5-pro',
8
- deepseek: 'deepseek:deepseek-chat',
9
- r1: 'deepseek:deepseek-reasoner',
8
+ deepseek: 'deepseek:deepseek-v4-flash',
9
+ 'deepseek-pro': 'deepseek:deepseek-v4-pro',
10
10
  qwen: 'alibaba:qwen-max',
11
11
  glm: 'zhipu:glm-4-plus',
12
12
  kimi: 'moonshotai:kimi-k2.5',
13
13
  };
14
14
  // ─── Provider detection order (for smart defaults) ───
15
15
  export const PROVIDER_DETECTION_ORDER = [
16
- { envKey: 'ANTHROPIC_API_KEY', defaultModel: 'anthropic:claude-sonnet-4-5' },
16
+ { envKey: 'ANTHROPIC_API_KEY', defaultModel: 'anthropic:claude-sonnet-4-6' },
17
17
  { envKey: 'OPENAI_API_KEY', defaultModel: 'openai:gpt-4.1' },
18
- { envKey: 'DEEPSEEK_API_KEY', defaultModel: 'deepseek:deepseek-chat' },
18
+ { envKey: 'DEEPSEEK_API_KEY', defaultModel: 'deepseek:deepseek-v4-flash' },
19
19
  { envKey: 'ALIBABA_API_KEY', defaultModel: 'alibaba:qwen-max' },
20
20
  { envKey: 'GOOGLE_GENERATIVE_AI_API_KEY', defaultModel: 'google:gemini-2.5-pro' },
21
21
  { envKey: 'XAI_API_KEY', defaultModel: 'xai:grok-3' },
22
22
  { envKey: 'ZHIPU_API_KEY', defaultModel: 'zhipu:glm-4-plus' },
23
23
  { envKey: 'MOONSHOT_API_KEY', defaultModel: 'moonshotai:kimi-k2.5' },
24
24
  ];
25
+ /**
26
+ * Hand-curated models per provider. Only models we've tested or that are
27
+ * advertised as production-stable make the list — agents tend to pick
28
+ * whatever is visible, so we don't dump every experimental variant here.
29
+ * Users who need something exotic can still type the full id into
30
+ * `/model <provider>:<model>` or pass it via `--model`.
31
+ */
32
+ export const PROVIDER_MODELS = {
33
+ anthropic: [
34
+ {
35
+ id: 'anthropic:claude-sonnet-4-6',
36
+ label: 'Sonnet 4.6',
37
+ description: 'Balanced default — good for coding + reasoning, 1M context',
38
+ },
39
+ {
40
+ id: 'anthropic:claude-opus-4-7',
41
+ label: 'Opus 4.7',
42
+ description: 'Most capable, strongest at agentic coding, 1M context',
43
+ },
44
+ { id: 'anthropic:claude-haiku-4-5', label: 'Haiku 4.5', description: 'Fastest, cheapest — shorter replies' },
45
+ ],
46
+ openai: [
47
+ { id: 'openai:gpt-4.1', label: 'GPT-4.1', description: 'General-purpose, 1M context window' },
48
+ { id: 'openai:gpt-4.1-mini', label: 'GPT-4.1 Mini', description: 'Cheaper tier of 4.1, 1M context' },
49
+ { id: 'openai:o3', label: 'o3', description: 'Reasoning model — slower, stronger on hard problems' },
50
+ { id: 'openai:o4-mini', label: 'o4-mini', description: 'Smaller reasoning model' },
51
+ ],
52
+ deepseek: [
53
+ {
54
+ id: 'deepseek:deepseek-v4-flash',
55
+ label: 'DeepSeek V4 Flash',
56
+ description: 'Fast, efficient general-purpose, 1M context',
57
+ },
58
+ {
59
+ id: 'deepseek:deepseek-v4-pro',
60
+ label: 'DeepSeek V4 Pro',
61
+ description: 'Flagship, stronger reasoning, 1M context',
62
+ },
63
+ ],
64
+ alibaba: [
65
+ { id: 'alibaba:qwen-max', label: 'Qwen Max', description: 'Strongest general Qwen, 128k context' },
66
+ { id: 'alibaba:qwen-plus', label: 'Qwen Plus', description: 'Balanced cost/quality' },
67
+ { id: 'alibaba:qwen-turbo', label: 'Qwen Turbo', description: 'Cheapest, fast' },
68
+ { id: 'alibaba:qwen3-max', label: 'Qwen3 Max', description: 'Latest flagship' },
69
+ { id: 'alibaba:qwen3-coder-plus', label: 'Qwen3 Coder Plus', description: 'Tuned for coding tasks' },
70
+ { id: 'alibaba:qwq-plus', label: 'QwQ Plus', description: 'Reasoning model' },
71
+ ],
72
+ google: [
73
+ { id: 'google:gemini-2.5-pro', label: 'Gemini 2.5 Pro', description: '1M context, strong long-doc handling' },
74
+ { id: 'google:gemini-2.5-flash', label: 'Gemini 2.5 Flash', description: 'Cheaper/faster tier' },
75
+ ],
76
+ xai: [
77
+ { id: 'xai:grok-3', label: 'Grok 3', description: '131k context' },
78
+ { id: 'xai:grok-3-mini', label: 'Grok 3 Mini', description: 'Smaller/cheaper variant' },
79
+ ],
80
+ zhipu: [{ id: 'zhipu:glm-4-plus', label: 'GLM-4 Plus', description: '128k context' }],
81
+ moonshotai: [{ id: 'moonshotai:kimi-k2.5', label: 'Kimi K2.5', description: '131k context' }],
82
+ };
25
83
  // ─── Provider API key URLs ───
26
84
  export const PROVIDER_KEY_URLS = {
27
85
  anthropic: 'https://console.anthropic.com/',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAsGA,wBAAwB;AAExB,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,MAAM,EAAE,6BAA6B;IACrC,IAAI,EAAE,2BAA2B;IACjC,KAAK,EAAE,4BAA4B;IACnC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,uBAAuB;IAC/B,QAAQ,EAAE,wBAAwB;IAClC,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,sBAAsB;CAC7B,CAAA;AAED,wDAAwD;AAExD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,6BAA6B,EAAE;IAC5E,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE;IAC5D,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,wBAAwB,EAAE;IACtE,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE;IAC/D,EAAE,MAAM,EAAE,8BAA8B,EAAE,YAAY,EAAE,uBAAuB,EAAE;IACjF,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE;IACrD,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE;IAC7D,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,sBAAsB,EAAE;CAC5D,CAAA;AAEV,gCAAgC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,SAAS,EAAE,gCAAgC;IAC3C,MAAM,EAAE,sCAAsC;IAC9C,MAAM,EAAE,oCAAoC;IAC5C,GAAG,EAAE,uBAAuB;IAC5B,QAAQ,EAAE,wCAAwC;IAClD,OAAO,EAAE,6CAA6C;IACtD,KAAK,EAAE,6CAA6C;IACpD,UAAU,EAAE,+CAA+C;CAC5D,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  /** Project-local config directory name */
2
2
  export declare const XCODE_DIR = ".x-code";
3
+ /** Global config directory (~/.x-code) */
4
+ export declare const GLOBAL_XCODE_DIR: string;
5
+ export declare function debugLog(tag: string, content: string): void;
3
6
  /** Check if a file exists */
4
7
  export declare function fileExists(filePath: string): Promise<boolean>;
5
8
  /** Read a file safely, return empty string on error */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,0CAA0C;AAC1C,eAAO,MAAM,SAAS,YAAY,CAAA;AAElC,6BAA6B;AAC7B,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,uDAAuD;AACvD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpE;AAED,uDAAuD;AACvD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAO5F"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,0CAA0C;AAC1C,eAAO,MAAM,SAAS,YAAY,CAAA;AAElC,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,QAAqC,CAAA;AAgBlE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY3D;AAED,6BAA6B;AAC7B,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,uDAAuD;AACvD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpE;AAED,uDAAuD;AACvD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAO5F"}
package/dist/utils.js CHANGED
@@ -1,7 +1,39 @@
1
- // @x-code/core — Shared utilities and constants
1
+ // @x-code-cli/core — Shared utilities and constants
2
+ import fsSync from 'node:fs';
2
3
  import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
3
6
  /** Project-local config directory name */
4
7
  export const XCODE_DIR = '.x-code';
8
+ /** Global config directory (~/.x-code) */
9
+ export const GLOBAL_XCODE_DIR = path.join(os.homedir(), '.x-code');
10
+ // ── Debug log (shared by core + cli) ────────────────────────────────────
11
+ // Turn on with `DEBUG_STDOUT=1`. Writes to <cwd>/stdout-debug.log —
12
+ // project-root rather than ~/.x-code so a single tail -f in the repo
13
+ // captures everything. Intentionally sync I/O because callers are in hot
14
+ // paths (every stream chunk, every tool call) and we want ordering to
15
+ // match real-time events; an async queue would reorder entries.
16
+ //
17
+ // Content is logged **verbatim**, no truncation. This file is gitignored.
18
+ const DEBUG = process.env.DEBUG_STDOUT === '1';
19
+ function debugLogPath() {
20
+ return path.join(process.cwd(), 'stdout-debug.log');
21
+ }
22
+ export function debugLog(tag, content) {
23
+ if (!DEBUG)
24
+ return;
25
+ try {
26
+ const ts = new Date().toISOString();
27
+ // `JSON.stringify(content)` quotes newlines/tabs so the full payload
28
+ // lands on ONE line in the log — much easier to grep across turns,
29
+ // and multi-line text-deltas don't visually merge with neighbours.
30
+ const line = `[${ts}] ${tag} ${JSON.stringify(content)}\n`;
31
+ fsSync.appendFileSync(debugLogPath(), line, 'utf8');
32
+ }
33
+ catch {
34
+ // best effort — never crash the agent just because we can't log
35
+ }
36
+ }
5
37
  /** Check if a file exists */
6
38
  export async function fileExists(filePath) {
7
39
  try {
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAEjC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAA;AAElC,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,0CAA0C;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAA;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;AAElE,2EAA2E;AAC3E,oEAAoE;AACpE,qEAAqE;AACrE,yEAAyE;AACzE,sEAAsE;AACtE,gEAAgE;AAChE,EAAE;AACF,0EAA0E;AAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG,CAAA;AAE9C,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe;IACnD,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACnC,qEAAqE;QACrE,mEAAmE;QACnE,mEAAmE;QACnE,MAAM,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA;QAC1D,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "@x-code-cli/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/woai3c/x-code-cli",
7
+ "directory": "packages/core"
8
+ },
4
9
  "type": "module",
5
10
  "exports": {
6
11
  ".": {
@@ -1,11 +0,0 @@
1
- /** Generate a plan ID based on timestamp */
2
- export declare function generatePlanId(): string;
3
- /** Get the plan file path */
4
- export declare function getPlanPath(planId: string): string;
5
- /** Ensure plans directory exists */
6
- export declare function ensurePlansDir(): Promise<void>;
7
- /** Read a plan file */
8
- export declare function readPlan(planId: string): Promise<string | null>;
9
- /** List all plan files */
10
- export declare function listPlans(): Promise<string[]>;
11
- //# sourceMappingURL=plan-mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-mode.d.ts","sourceRoot":"","sources":["../../src/agent/plan-mode.ts"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,6BAA6B;AAC7B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oCAAoC;AACpC,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD;AAED,uBAAuB;AACvB,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMrE;AAED,0BAA0B;AAC1B,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnD"}
@@ -1,37 +0,0 @@
1
- // @x-code/core — Plan Mode logic
2
- import fs from 'node:fs/promises';
3
- import path from 'node:path';
4
- const PLANS_DIR = '.x-code/plans';
5
- /** Generate a plan ID based on timestamp */
6
- export function generatePlanId() {
7
- return new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
8
- }
9
- /** Get the plan file path */
10
- export function getPlanPath(planId) {
11
- return path.join(process.cwd(), PLANS_DIR, `${planId}.md`);
12
- }
13
- /** Ensure plans directory exists */
14
- export async function ensurePlansDir() {
15
- await fs.mkdir(path.join(process.cwd(), PLANS_DIR), { recursive: true });
16
- }
17
- /** Read a plan file */
18
- export async function readPlan(planId) {
19
- try {
20
- return await fs.readFile(getPlanPath(planId), 'utf-8');
21
- }
22
- catch {
23
- return null;
24
- }
25
- }
26
- /** List all plan files */
27
- export async function listPlans() {
28
- try {
29
- const dir = path.join(process.cwd(), PLANS_DIR);
30
- const files = await fs.readdir(dir);
31
- return files.filter((f) => f.endsWith('.md')).map((f) => f.replace('.md', ''));
32
- }
33
- catch {
34
- return [];
35
- }
36
- }
37
- //# sourceMappingURL=plan-mode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-mode.js","sourceRoot":"","sources":["../../src/agent/plan-mode.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,SAAS,GAAG,eAAe,CAAA;AAEjC,4CAA4C;AAC5C,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1E,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -1,9 +0,0 @@
1
- export interface CostEstimate {
2
- cost: number;
3
- currency: 'USD' | 'CNY';
4
- }
5
- /** Estimate cost from model ID and token counts. Returns cost and currency. */
6
- export declare function estimateCost(modelId: string, inputTokens: number, outputTokens: number): CostEstimate;
7
- /** Format cost string with currency symbol */
8
- export declare function formatCost(estimate: CostEstimate): string;
9
- //# sourceMappingURL=pricing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/agent/pricing.ts"],"names":[],"mappings":"AA2CA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAA;CACxB;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAKrG;AAED,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAIzD"}
@@ -1,47 +0,0 @@
1
- // @x-code/core — Model pricing table and cost estimation
2
- const MODEL_PRICING = {
3
- // ── USD providers ──
4
- // Anthropic
5
- 'anthropic:claude-opus-4-6': { input: 15, output: 75, currency: 'USD' },
6
- 'anthropic:claude-sonnet-4-5': { input: 3, output: 15, currency: 'USD' },
7
- 'anthropic:claude-haiku-4-5': { input: 0.8, output: 4, currency: 'USD' },
8
- // OpenAI
9
- 'openai:gpt-4.1': { input: 2, output: 8, currency: 'USD' },
10
- 'openai:gpt-4.1-mini': { input: 0.4, output: 1.6, currency: 'USD' },
11
- 'openai:gpt-4.1-nano': { input: 0.1, output: 0.4, currency: 'USD' },
12
- 'openai:o3': { input: 2, output: 8, currency: 'USD' },
13
- 'openai:o4-mini': { input: 1.1, output: 4.4, currency: 'USD' },
14
- // Google
15
- 'google:gemini-2.5-pro': { input: 1.25, output: 10, currency: 'USD' },
16
- 'google:gemini-2.5-flash': { input: 0.15, output: 0.6, currency: 'USD' },
17
- // xAI
18
- 'xai:grok-3': { input: 3, output: 15, currency: 'USD' },
19
- 'xai:grok-3-mini': { input: 0.3, output: 0.5, currency: 'USD' },
20
- // ── CNY (人民币) providers ──
21
- // DeepSeek (api.deepseek.com, V3.2 统一定价, 人民币)
22
- 'deepseek:deepseek-chat': { input: 2, output: 3, currency: 'CNY' },
23
- 'deepseek:deepseek-reasoner': { input: 2, output: 3, currency: 'CNY' },
24
- // Alibaba / 阿里云百炼 (dashscope.aliyuncs.com, 中国内地定价)
25
- 'alibaba:qwen-max': { input: 2.4, output: 9.6, currency: 'CNY' },
26
- 'alibaba:qwen-plus': { input: 0.8, output: 2, currency: 'CNY' },
27
- // Zhipu / 智谱 (bigmodel.cn)
28
- 'zhipu:glm-4-plus': { input: 5, output: 5, currency: 'CNY' },
29
- // Moonshot / 月之暗面 (platform.moonshot.cn, 人民币)
30
- 'moonshotai:kimi-k2.5': { input: 4, output: 16, currency: 'CNY' },
31
- };
32
- /** Estimate cost from model ID and token counts. Returns cost and currency. */
33
- export function estimateCost(modelId, inputTokens, outputTokens) {
34
- const pricing = MODEL_PRICING[modelId];
35
- if (!pricing)
36
- return { cost: 0, currency: 'USD' };
37
- const cost = (inputTokens * pricing.input + outputTokens * pricing.output) / 1_000_000;
38
- return { cost, currency: pricing.currency };
39
- }
40
- /** Format cost string with currency symbol */
41
- export function formatCost(estimate) {
42
- if (estimate.cost <= 0)
43
- return '';
44
- const symbol = estimate.currency === 'CNY' ? '¥' : '$';
45
- return `${symbol}${estimate.cost.toFixed(4)}`;
46
- }
47
- //# sourceMappingURL=pricing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/agent/pricing.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- /** Scan project root and populate auto memory with basic facts */
2
- export declare function scanProject(projectRoot: string): Promise<void>;
3
- //# sourceMappingURL=hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/knowledge/hooks.ts"],"names":[],"mappings":"AAUA,kEAAkE;AAClE,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDpE"}
@@ -1,59 +0,0 @@
1
- // @x-code/core — Startup project scan (reads config files to inject basic context)
2
- import path from 'node:path';
3
- import { fileExists, readJsonSafe } from '../utils.js';
4
- import { getAutoMemory } from './auto-memory.js';
5
- function today() {
6
- return new Date().toISOString().slice(0, 10);
7
- }
8
- /** Scan project root and populate auto memory with basic facts */
9
- export async function scanProject(projectRoot) {
10
- const memory = getAutoMemory('project');
11
- // Detect package manager from lock files
12
- if (await fileExists(path.join(projectRoot, 'pnpm-lock.yaml'))) {
13
- memory.add({ key: 'package-manager', fact: 'pnpm', category: 'tech-stack', date: today() });
14
- }
15
- else if (await fileExists(path.join(projectRoot, 'yarn.lock'))) {
16
- memory.add({ key: 'package-manager', fact: 'yarn', category: 'tech-stack', date: today() });
17
- }
18
- else if (await fileExists(path.join(projectRoot, 'package-lock.json'))) {
19
- memory.add({ key: 'package-manager', fact: 'npm', category: 'tech-stack', date: today() });
20
- }
21
- // Read package.json
22
- const pkg = await readJsonSafe(path.join(projectRoot, 'package.json'));
23
- if (pkg) {
24
- const scripts = pkg.scripts;
25
- if (scripts?.test) {
26
- memory.add({ key: 'test-command', fact: scripts.test, category: 'commands', date: today() });
27
- }
28
- if (scripts?.build) {
29
- memory.add({ key: 'build-command', fact: scripts.build, category: 'commands', date: today() });
30
- }
31
- if (scripts?.lint) {
32
- memory.add({ key: 'lint-command', fact: scripts.lint, category: 'commands', date: today() });
33
- }
34
- const deps = {
35
- ...pkg.dependencies,
36
- ...pkg.devDependencies,
37
- };
38
- if (deps.react)
39
- memory.add({ key: 'ui-framework', fact: `React ${deps.react}`, category: 'tech-stack', date: today() });
40
- if (deps.vitest)
41
- memory.add({ key: 'test-framework', fact: 'Vitest', category: 'tech-stack', date: today() });
42
- if (deps.typescript)
43
- memory.add({ key: 'language', fact: `TypeScript ${deps.typescript}`, category: 'tech-stack', date: today() });
44
- if (deps.ink)
45
- memory.add({ key: 'tui-framework', fact: `Ink ${deps.ink}`, category: 'tech-stack', date: today() });
46
- }
47
- // Read tsconfig for TS settings
48
- const tsconfig = await readJsonSafe(path.join(projectRoot, 'tsconfig.json'));
49
- if (tsconfig) {
50
- const compilerOptions = tsconfig.compilerOptions;
51
- if (compilerOptions?.strict) {
52
- memory.add({ key: 'ts-strict-mode', fact: 'enabled', category: 'conventions', date: today() });
53
- }
54
- if (compilerOptions?.module?.toString().toLowerCase().includes('nodenext')) {
55
- memory.add({ key: 'module-system', fact: 'ESM (NodeNext)', category: 'conventions', date: today() });
56
- }
57
- }
58
- }
59
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/knowledge/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const enterPlanMode: import("ai").Tool<{}, never>;
2
- //# sourceMappingURL=enter-plan-mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enter-plan-mode.d.ts","sourceRoot":"","sources":["../../src/tools/enter-plan-mode.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,8BAMxB,CAAA"}
@@ -1,11 +0,0 @@
1
- // @x-code/core — enterPlanMode tool (no execute — handled in agent loop)
2
- import { tool } from 'ai';
3
- import { z } from 'zod';
4
- export const enterPlanMode = tool({
5
- description: `Enter plan mode for exploring the codebase and designing an implementation plan.
6
- Use proactively for non-trivial tasks: new features, multi-file changes, architectural decisions, unclear requirements.
7
- Skip for: single-line fixes, obvious bugs, specific user instructions.`,
8
- inputSchema: z.object({}),
9
- // No execute — handled in agent loop (inject plan mode prompt + wait for user consent)
10
- });
11
- //# sourceMappingURL=enter-plan-mode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enter-plan-mode.js","sourceRoot":"","sources":["../../src/tools/enter-plan-mode.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE;;uEAEwD;IACrE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,uFAAuF;CACxF,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const exitPlanMode: import("ai").Tool<{}, never>;
2
- //# sourceMappingURL=exit-plan-mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exit-plan-mode.d.ts","sourceRoot":"","sources":["../../src/tools/exit-plan-mode.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,8BAKvB,CAAA"}
@@ -1,9 +0,0 @@
1
- // @x-code/core — exitPlanMode tool (no execute — handled in agent loop)
2
- import { tool } from 'ai';
3
- import { z } from 'zod';
4
- export const exitPlanMode = tool({
5
- description: 'Signal that the plan is complete and ready for user review. The system will read the plan file and present it to the user.',
6
- inputSchema: z.object({}),
7
- // No execute — handled in agent loop (read plan file + present to user)
8
- });
9
- //# sourceMappingURL=exit-plan-mode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exit-plan-mode.js","sourceRoot":"","sources":["../../src/tools/exit-plan-mode.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;IAC/B,WAAW,EACT,4HAA4H;IAC9H,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,wEAAwE;CACzE,CAAC,CAAA"}