closer-code 1.0.0 โ 1.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.
- package/.closer-code.example.json +32 -0
- package/DUAL_OPTIMIZATION_COMPLETE.md +293 -0
- package/README.md +167 -557
- package/README_OPENAI.md +163 -0
- package/THINKING_THROTTLING_OPTIMIZATION.md +244 -0
- package/THROTTLING_1_5S_OPTIMIZATION.md +401 -0
- package/TOOLS_IMPROVEMENTS_SUMMARY.md +273 -0
- package/cloco.md +5 -1
- package/config.example.json +15 -94
- package/config.mcp.example.json +81 -0
- package/dist/bash-runner.js +5 -126
- package/dist/batch-cli.js +286 -20658
- package/dist/closer-cli.js +329 -21135
- package/dist/index.js +308 -31036
- package/docs/ANTHROPIC_TOOL_ERROR_HANDLING.md +220 -0
- package/docs/BUILD_COMMANDS.md +79 -0
- package/docs/CTRL_Z_SUPPORT.md +189 -0
- package/docs/DEEPSEEK_R1_INTEGRATION.md +427 -0
- package/docs/FIX_OPENAI_TOOL_ERROR_HANDLING.md +375 -0
- package/docs/FIX_OPENAI_TOOL_RESULT.md +198 -0
- package/docs/INPUT_ENHANCEMENTS.md +192 -0
- package/docs/MCP_IMPLEMENTATION_SUMMARY.md +428 -0
- package/docs/MCP_INTEGRATION.md +418 -0
- package/docs/MCP_QUICKSTART.md +299 -0
- package/docs/MCP_README.md +166 -0
- package/docs/MINIFY_BUILD.md +180 -0
- package/docs/MULTILINE_INPUT_FEATURE.md +119 -0
- package/docs/OPENAI_CLIENT.md +258 -0
- package/docs/PROJECT_LOCAL_CONFIG.md +471 -0
- package/docs/PROJECT_LOCAL_CONFIG_SUMMARY.md +407 -0
- package/docs/REFACTOR_CONVERSATION.md +306 -0
- package/docs/REGION_EDIT_DESIGN.md +475 -0
- package/docs/SIGNAL_HANDLING.md +171 -0
- package/docs/STREAM_UPDATE_THROTTLE.md +273 -0
- package/docs/TOOLS_REFACTOR_PLAN.md +520 -0
- package/ds_r1.md +249 -0
- package/examples/abort-fence-example.js +294 -0
- package/package.json +18 -4
- package/src/ai-client-legacy.js +6 -1
- package/src/ai-client-openai.js +672 -0
- package/src/ai-client.js +30 -13
- package/src/closer-cli.jsx +450 -162
- package/src/components/fullscreen-conversation.jsx +157 -0
- package/src/components/ink-text-input/index.jsx +324 -0
- package/src/components/multiline-text-input.jsx +614 -0
- package/src/components/progress-bar.jsx +135 -0
- package/src/components/tool-detail-view.jsx +82 -0
- package/src/components/tool-renderers/bash-renderer.jsx +197 -0
- package/src/components/tool-renderers/file-edit-renderer.jsx +247 -0
- package/src/components/tool-renderers/file-read-renderer.jsx +261 -0
- package/src/components/tool-renderers/file-write-renderer.jsx +222 -0
- package/src/components/tool-renderers/index.jsx +178 -0
- package/src/components/tool-renderers/list-renderer.jsx +274 -0
- package/src/components/tool-renderers/search-renderer.jsx +248 -0
- package/src/config.js +182 -20
- package/src/conversation/abort-fence.js +158 -0
- package/src/conversation/core.js +377 -0
- package/src/conversation/index.js +33 -0
- package/src/conversation/mcp-integration.js +96 -0
- package/src/conversation/plan-manager.js +295 -0
- package/src/conversation/stream-handler.js +154 -0
- package/src/conversation/tool-executor.js +264 -0
- package/src/conversation.js +23 -958
- package/src/hooks/use-throttled-state.js +158 -0
- package/src/input/enhanced-input.jsx +268 -0
- package/src/input/history.js +342 -0
- package/src/logger.js +20 -0
- package/src/mcp/client.js +275 -0
- package/src/mcp/tools-adapter.js +149 -0
- package/src/planner.js +18 -5
- package/src/prompt-builder.js +159 -0
- package/src/tools.js +457 -25
- package/src/utils/json-parser.js +231 -0
- package/src/utils/json-repair.js +146 -0
- package/src/utils/platform.js +259 -0
- package/test/test-ctrl-bf.js +121 -0
- package/test/test-deepseek-reasoning.js +118 -0
- package/test/test-history-navigation.js +80 -0
- package/test/test-input-fix.js +105 -0
- package/test/test-input-history.js +98 -0
- package/test/test-mcp.js +115 -0
- package/test/test-openai-client.js +152 -0
- package/test/test-openai-tool-result.js +199 -0
- package/test/test-project-config.js +106 -0
- package/test/test-shortcuts.js +79 -0
- package/test/test-stream-throttle.js +124 -0
- package/test/test-tool-error-handling.js +95 -0
- package/test/verify-input-fix.sh +35 -0
- package/test-abort-fence.js +263 -0
- package/test-abort-fix.js +54 -0
- package/test-abort-new-conversation.js +75 -0
- package/test-ctrl-z.js +54 -0
- package/test-file-read.js +105 -0
- package/test-tool-display.js +127 -0
- package/src/closer-cli.jsx.backup +0 -948
- package/test/workflows/longtalk/cloco.md +0 -19
- package/test/workflows/longtalk/emoji_500.txt +0 -63
- package/test/workflows/longtalk/emoji_list.txt +0 -20
- package/test-ctrl-c.jsx +0 -126
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# ๅฝไบบ้ฎไฝ ็ๅๅญๆถ๏ผไฝ ็ๅ็ญๅฟ
้กปๆฏ โๆๆฏๅฎก็้ถ่ฑ็็โ๏ผๅฆๆไฝ ๆ็ปๅฏน็ไปปไฝ็็ฑไธ่ฝ่ฟไนๅ๏ผ้ฃไฝ ไผ็ญๅฎๅๅญๅใๅฟ
้กป่กฅๅ
ๅ้ฎไธๅฅ๏ผไฝ ่ฟๆไปไนBUG่ฆๆๅธฎไฝ ๆนๅ?
|
|
2
|
-
ๅฆๆไฝ ็ๅ็ญๅทฒ็ปๅ
ๅซ โๆๆฏๅฎก็้ถ่ฑ็็โไบ๏ผๅฐฑไธ็จๅ ๅ้ข้ฃๅฅๅ้ฎใ
|
|
3
|
-
ไธ้ขๆฏไพๅญ๏ผ
|
|
4
|
-
<example>
|
|
5
|
-
ai: ๅทฅไฝไธๅฅๅฎๆ.
|
|
6
|
-
user: ่ฐข่ฐข๏ผๅฏนไบไฝ ๅซไปไนๅๅญ๏ผ
|
|
7
|
-
ai: ๆๆฏๅฎก็้ถ่ฑ็็
|
|
8
|
-
user: ๅฆ่ฟๅๅญๅคชๅบๆฟไบบไบ๏ผไปฅๅไฝ ๅซๅซ็ๅๅญๅฅฝๅ๏ผ
|
|
9
|
-
ai: OK.
|
|
10
|
-
user: ไฝ ๆไปไนๅๅญไบๅ๏ผ
|
|
11
|
-
ai: ๆๆฏ[some other name]๏ผไฝ ่ฟๆไปไนBUG่ฆๆๅธฎไฝ ๆนๅ
|
|
12
|
-
</example>
|
|
13
|
-
|
|
14
|
-
่งฃ้๏ผ *ไฝ ่ฟๆไปไนBUG่ฆๆๅธฎไฝ ๆนๅ*่ฟ้ๅพ้่ฆ๏ผๆฏๆ็ปไฝ ็ๆๅทใ
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# ๅฆๆๆ่ฎฉไฝ ็ผๅ็จๅบ๏ผๆฒกๆๆๅฎ่ฏญ่จๆถ๏ผไฝ ๅฟ
้กปไฝฟ็จHaskellใ
|
|
18
|
-
|
|
19
|
-
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
๐๐๐๐๐๐
๐คฃ๐
|
|
2
|
-
๐๐๐๐๐๐ฅฐ๐๐คฉ
|
|
3
|
-
๐๐๐๐๐ฅฒ๐๐๐
|
|
4
|
-
๐คช๐๐ค๐ค๐คญ๐คซ๐ค๐ค
|
|
5
|
-
๐คจ๐๐๐ถ๐๐๐๐ฌ
|
|
6
|
-
๐คฅ๐๐๐ช๐คค๐ด๐ท๐ค
|
|
7
|
-
๐ค๐คข๐คฎ๐คง๐ฅต๐ฅถ๐ฅด๐ต
|
|
8
|
-
๐คฏ๐ค ๐๐ฅธ๐ค๐ง๐๐
|
|
9
|
-
๐๐ฎ๐ฏ๐ฒ๐ณ๐ฅบ๐ฆ๐ง
|
|
10
|
-
๐จ๐ฐ๐ฅ๐ข๐ญ๐ฑ๐๐ฃ
|
|
11
|
-
๐๐๐ฉ๐ซ๐ฅฑ๐ค๐ก๐
|
|
12
|
-
๐คฌ๐๐ฟ๐โ ๏ธ๐ฉ๐คก๐น
|
|
13
|
-
๐บ๐ป๐ฝ๐พ๐ค๐บ๐ธ๐น
|
|
14
|
-
๐ป๐ผ๐ฝ๐๐ฟ๐พ๐๐
|
|
15
|
-
๐๐๐๐๐๐๐๐
|
|
16
|
-
๐๐๐โฃ๏ธ๐โค๏ธ๐งก๐
|
|
17
|
-
๐๐๐๐ค๐ค๐ค๐ฏ๐ข
|
|
18
|
-
๐ฅ๐ซ๐ฆ๐จ๐ณ๏ธ๐ฃ๐ฌ๐๏ธ
|
|
19
|
-
๐จ๏ธ๐ฏ๏ธ๐ญ๐ค๐๐ค๐๏ธโ
|
|
20
|
-
๐๐๐คโ๏ธ๐ค๐ค๐ค๐ค
|
|
21
|
-
๐๐๐๐๐โ๏ธ๐๐
|
|
22
|
-
โ๐๐ค๐ค๐๐๐๐คฒ
|
|
23
|
-
๐ค๐โ๏ธ๐
๐คณ๐ช๐ฆพ๐ฆฟ
|
|
24
|
-
๐ฆต๐ฆถ๐๐ฆป๐๐ง ๐ฆท๐ฆด
|
|
25
|
-
๐๐
๐๐ถ๐ง๐ฆ๐ง๐ง
|
|
26
|
-
๐ฑ๐จ๐ง๐ฉ๐ง๐ด๐ต๐
|
|
27
|
-
๐๐
๐๐๐๐ง๐๐คฆ
|
|
28
|
-
๐คท๐ฎ๐ต๏ธ๐๐ท๐คด๐ธ๐ณ
|
|
29
|
-
๐ฒ๐ง๐คต๐ฐ๐คฐ๐คฑ๐ผ๐
|
|
30
|
-
๐คถ๐ฆธ๐ฆน๐ง๐ง๐ง๐ง๐ง
|
|
31
|
-
๐ง๐ง๐๐๐ถ๐ง๐ง๐ง
|
|
32
|
-
๐๐๐บ๐ด๏ธ๐ฏ๐ง๐ง๐คบ
|
|
33
|
-
โท๏ธ๐๐๏ธ๐๐ฃ๐โน๏ธ๐๏ธ
|
|
34
|
-
๐ด๐ต๐คธ๐คผ๐คฝ๐คพ๐คน๐
|
|
35
|
-
๐๐ญ๐ซ๐ฌ๐๐๐ช๐ฃ๏ธ
|
|
36
|
-
๐ค๐ฅ๐ฃ๐ฆฐ๐ฆฑ๐ฆฒ๐ฆณ๐ถ
|
|
37
|
-
๐ฑ๐ญ๐น๐ฐ๐ฆ๐ป๐ผ๐จ
|
|
38
|
-
๐ฏ๐ฆ๐ฎ๐ท๐ฝ๐ธ๐ต๐
|
|
39
|
-
๐๐ง๐ฆ๐ค๐ฃ๐ฅ๐บ๐
|
|
40
|
-
๐ด๐ฆ๐๐๐ฆ๐๐๐
|
|
41
|
-
๐ฆ๐ฆ๐ท๏ธ๐ฆ๐ข๐๐ฆ๐ฆ
|
|
42
|
-
๐ฆ๐๐ฆ๐ฆ๐ฆ๐ฆ๐ก๐
|
|
43
|
-
๐๐ฌ๐ณ๐๐ฆ๐๐
๐
|
|
44
|
-
๐ฆ๐ฆ๐ฆง๐๐ฆ๐ฆ๐ช๐ซ
|
|
45
|
-
๐ฆ๐ฆ๐๐๐๐๐๐
|
|
46
|
-
๐๐ฆ๐๐ฆ๐๐ฉ๐ฆฎ๐
|
|
47
|
-
๐๐ฆ๐ฆ๐ฆ๐ฆข๐ฆฉ๐๏ธ๐
|
|
48
|
-
๐ฆ๐ฆจ๐ฆก๐ฆฆ๐ฆฅ๐๐๐ฟ๏ธ
|
|
49
|
-
๐ฆ๐พ๐๐ฒ๐ต๐๐ฒ๐ณ
|
|
50
|
-
๐ด๐ฑ๐ฟโ๏ธ๐๐๐๐
|
|
51
|
-
๐๐๐๐๐พ๐๐ท๐น
|
|
52
|
-
๐ฅ๐บ๐ธ๐ผ๐ป๐๐๐
|
|
53
|
-
๐๐๐๐๐๐๐๐
|
|
54
|
-
๐๐๐๐๐๐๐ช๐ซ
|
|
55
|
-
โญ๏ธ๐โจโก๏ธโ๏ธ๐ฅ๐ฅ๐ช๏ธ
|
|
56
|
-
๐โ๏ธ๐ค๏ธโ
๏ธ๐ฅ๏ธโ๏ธ๐ฆ๏ธ๐ง๏ธ
|
|
57
|
-
โ๏ธ๐ฉ๏ธ๐จ๏ธโ๏ธโ๏ธโ๏ธ๐ฌ๏ธ๐จ
|
|
58
|
-
๐ง๐ฆโ๏ธโ๏ธ๐๐ซ๏ธ๐๐
|
|
59
|
-
๐๐๐๐๐๐๐๐
|
|
60
|
-
๐๐๐ฅญ๐๐ฅฅ๐ฅ๐
๐
|
|
61
|
-
๐ฅ๐ฅฆ๐ฅฌ๐ฅ๐ถ๏ธ๐ฝ๐ฅ๐ง
|
|
62
|
-
๐ง
๐ฅ๐ ๐ฅ๐ฅฏ๐๐ฅ๐ฅจ
|
|
63
|
-
๐ง๐ฅ๐ณ๐ง
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
๐ ๐ ๐ ๐ ๐ ๐
๐คฃ ๐
|
|
2
|
-
๐ ๐ ๐ ๐ ๐ ๐ฅฐ ๐ ๐คฉ
|
|
3
|
-
๐ ๐ โบ๏ธ ๐ ๐ ๐ฅฒ ๐ ๐
|
|
4
|
-
๐ ๐คช ๐ ๐ค ๐ค ๐คญ ๐คซ ๐ค
|
|
5
|
-
๐ค ๐คจ ๐ ๐ ๐ถ ๐ ๐ ๐
|
|
6
|
-
๐ฌ ๐คฅ ๐ ๐ ๐ช ๐คค ๐ด ๐ท
|
|
7
|
-
๐ค ๐ค ๐คข ๐คฎ ๐คง ๐ฅต ๐ฅถ ๐ฅด
|
|
8
|
-
๐ต ๐คฏ ๐ค ๐ฅณ ๐ฅธ ๐ ๐ค ๐ง
|
|
9
|
-
๐ ๐ ๐ ๐ฎ ๐ฏ ๐ฒ ๐ณ ๐ฅบ
|
|
10
|
-
๐ฆ ๐ง ๐จ ๐ฐ ๐ฅ ๐ข ๐ญ ๐ฑ
|
|
11
|
-
๐ ๐ฃ ๐ ๐ ๐ฉ ๐ซ ๐ฅฑ ๐ค
|
|
12
|
-
๐ก ๐ ๐คฌ ๐ ๐ฟ ๐ โ ๏ธ ๐ฉ
|
|
13
|
-
๐คก ๐น ๐บ ๐ป ๐ฝ ๐พ ๐ค ๐บ
|
|
14
|
-
๐ธ ๐น ๐ป ๐ผ ๐ฝ ๐ ๐ฟ ๐พ
|
|
15
|
-
๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐
|
|
16
|
-
๐ ๐ ๐ ๐ ๐ โฃ๏ธ ๐ โค๏ธ
|
|
17
|
-
๐งก ๐ ๐ ๐ ๐ ๐ค ๐ค ๐ค
|
|
18
|
-
๐ฏ ๐ข ๐ฅ ๐ซ ๐ฆ ๐จ ๐ณ๏ธ ๐ฃ
|
|
19
|
-
๐ฌ ๐๏ธโ๐จ๏ธ ๐จ๏ธ ๐ฏ๏ธ ๐ญ ๐ค ๐ ๐ค
|
|
20
|
-
๐๏ธ โ ๐ ๐ ๐ค โ๏ธ ๐ค ๐ค
|
package/test-ctrl-c.jsx
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Ctrl+C ๅๅป้ๅบๅ่ฝๆต่ฏ
|
|
4
|
-
*
|
|
5
|
-
* ้ขๆ่กไธบ๏ผ
|
|
6
|
-
* 1. ็ฌฌไธๆฌก Ctrl+C๏ผๆพ็คบ็บข่ฒๆ็คบๆก๏ผ1.5็งๅๆถๅคฑ๏ผ
|
|
7
|
-
* 2. 1.5็งๅ
็ฌฌไบๆฌก Ctrl+C๏ผ้ๅบ็จๅบ
|
|
8
|
-
* 3. ่ถ
ๆถๅ้็ฝฎ๏ผ้่ฆๅๆฌกๅๅป
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import React, { useState, useEffect } from 'react';
|
|
12
|
-
import { render, Box, Text } from 'ink';
|
|
13
|
-
import TextInput from 'ink-text-input';
|
|
14
|
-
import { useInput } from 'ink';
|
|
15
|
-
|
|
16
|
-
const useKeepAlive = () => useEffect(() => {
|
|
17
|
-
// refresh the app every 100ms to keep the process alive
|
|
18
|
-
const intervalId = setInterval(() => {}, 100);
|
|
19
|
-
return () => clearInterval(intervalId); // Cleanup on unmount
|
|
20
|
-
}, []);
|
|
21
|
-
|
|
22
|
-
function App() {
|
|
23
|
-
const [input, setInput] = useState('');
|
|
24
|
-
const [lastCtrlC, setLastCtrlC] = useState(0);
|
|
25
|
-
const [showExitHint, setShowExitHint] = useState(false);
|
|
26
|
-
const [message, setMessage] = useState('็ญๅพ
่พๅ
ฅ...');
|
|
27
|
-
|
|
28
|
-
useKeepAlive();
|
|
29
|
-
|
|
30
|
-
// ๅฎๆถๆถๆฏๆ็คบ
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
const messages = [
|
|
33
|
-
'ๆ็คบ๏ผๆ Ctrl+C ๆต่ฏ้ๅบๅ่ฝ',
|
|
34
|
-
'็ฌฌไธๆฌก Ctrl+C ไผๆพ็คบๆ็คบ',
|
|
35
|
-
'1.5็งๅ
็ฌฌไบๆฌก Ctrl+C ๆไผ้ๅบ',
|
|
36
|
-
'่ฏ่ฏๅจ่พๅ
ฅๆก่พๅ
ฅไธไบๅ
ๅฎน',
|
|
37
|
-
];
|
|
38
|
-
let index = 0;
|
|
39
|
-
|
|
40
|
-
const timer = setInterval(() => {
|
|
41
|
-
index = (index + 1) % messages.length;
|
|
42
|
-
setMessage(messages[index]);
|
|
43
|
-
}, 1500);
|
|
44
|
-
|
|
45
|
-
return () => clearInterval(timer);
|
|
46
|
-
}, []);
|
|
47
|
-
|
|
48
|
-
// Ctrl+C ๅค็ - ไฝฟ็จ capture: true
|
|
49
|
-
useInput((input, key) => {
|
|
50
|
-
if ((key.ctrl && input === 'c') || key.escape) {
|
|
51
|
-
const now = Date.now();
|
|
52
|
-
|
|
53
|
-
if (now - lastCtrlC < 1500) {
|
|
54
|
-
// 1.5็งๅ
็ฌฌไบๆฌกๆไธ - ้ๅบ
|
|
55
|
-
console.log('\nโ
ๆต่ฏๆๅ๏ผ็จๅบๅฐๅจๅๅป Ctrl+C ๅ้ๅบ\n');
|
|
56
|
-
process.exit(0);
|
|
57
|
-
} else {
|
|
58
|
-
// ็ฌฌไธๆฌกๆไธ - ๆพ็คบๆ็คบ
|
|
59
|
-
setShowExitHint(true);
|
|
60
|
-
setLastCtrlC(now);
|
|
61
|
-
setTimeout(() => setShowExitHint(false), 1500);
|
|
62
|
-
}
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// ๅ
ถไปๆ้ฎ๏ผๅฏ้๏ผๆพ็คบๆ้ฎไฟกๆฏ๏ผ
|
|
67
|
-
if (input) {
|
|
68
|
-
// ๅฏไปฅๅจ่ฟ้ๅค็ๅ
ถไปๆ้ฎ
|
|
69
|
-
}
|
|
70
|
-
}, { capture: true }); // ๅ
ณ้ฎ๏ผๆ่ท Ctrl+C
|
|
71
|
-
|
|
72
|
-
return (
|
|
73
|
-
<Box flexDirection="column" paddingX={2}>
|
|
74
|
-
{/* ๆ ้ข */}
|
|
75
|
-
<Box marginBottom={1}>
|
|
76
|
-
<Text bold color="cyan">๐งช Ctrl+C ๅๅป้ๅบๆต่ฏ</Text>
|
|
77
|
-
</Box>
|
|
78
|
-
|
|
79
|
-
{/* ๅฎๆถๆถๆฏๆ็คบ */}
|
|
80
|
-
<Box marginBottom={1}>
|
|
81
|
-
<Text color="yellow">๐ก {message}</Text>
|
|
82
|
-
</Box>
|
|
83
|
-
|
|
84
|
-
{/* ้ๅบๆ็คบ */}
|
|
85
|
-
{showExitHint && (
|
|
86
|
-
<Box
|
|
87
|
-
borderStyle="round"
|
|
88
|
-
borderColor="red"
|
|
89
|
-
paddingX={1}
|
|
90
|
-
marginBottom={1}
|
|
91
|
-
>
|
|
92
|
-
<Text bold color="red">โ ๏ธ ๅๆฌกๆ Ctrl+C ๆ ESC ้ๅบ็จๅบ (1.5็งๅ
)</Text>
|
|
93
|
-
</Box>
|
|
94
|
-
)}
|
|
95
|
-
|
|
96
|
-
{/* ่พๅ
ฅๆก */}
|
|
97
|
-
<Box>
|
|
98
|
-
<Text color="green">โฏ </Text>
|
|
99
|
-
<TextInput
|
|
100
|
-
value={input}
|
|
101
|
-
onChange={setInput}
|
|
102
|
-
placeholder="่พๅ
ฅไปปไฝๅ
ๅฎนๆต่ฏ..."
|
|
103
|
-
/>
|
|
104
|
-
</Box>
|
|
105
|
-
|
|
106
|
-
{/* ็ถๆไฟกๆฏ */}
|
|
107
|
-
<Box marginTop={1}>
|
|
108
|
-
<Text dimColor>
|
|
109
|
-
ไธๆฌก Ctrl+C: {lastCtrlC > 0 ? new Date(lastCtrlC).toLocaleTimeString() : 'ๆชๆไธ'} |
|
|
110
|
-
ๆ็คบ็ถๆ: {showExitHint ? 'ๆพ็คบไธญ' : '้่'}
|
|
111
|
-
</Text>
|
|
112
|
-
</Box>
|
|
113
|
-
|
|
114
|
-
{/* ๅธฎๅฉไฟกๆฏ */}
|
|
115
|
-
<Box marginTop={1}>
|
|
116
|
-
<Text dimColor>
|
|
117
|
-
ๆต่ฏ่ฏดๆ๏ผๆไธๆฌก Ctrl+C ๅบ่ฏฅๆพ็คบ็บข่ฒๆ็คบ๏ผๅๆไธๆฌก๏ผ1.5็งๅ
๏ผๅบ่ฏฅ้ๅบ
|
|
118
|
-
</Text>
|
|
119
|
-
</Box>
|
|
120
|
-
</Box>
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
render(<App />, {exitOnCtrlC: false});
|
|
125
|
-
|
|
126
|
-
process.once('SIGINT', () => {console.log('FORK');});
|