@onesclawkolor/onesclaw 0.1.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 (141) hide show
  1. package/README.md +65 -0
  2. package/dist/agent/conversation.d.ts +34 -0
  3. package/dist/agent/conversation.js +61 -0
  4. package/dist/agent/conversation.js.map +1 -0
  5. package/dist/agent/loop.d.ts +40 -0
  6. package/dist/agent/loop.js +213 -0
  7. package/dist/agent/loop.js.map +1 -0
  8. package/dist/agent/session.d.ts +73 -0
  9. package/dist/agent/session.js +225 -0
  10. package/dist/agent/session.js.map +1 -0
  11. package/dist/audit/file-sink.d.ts +6 -0
  12. package/dist/audit/file-sink.js +21 -0
  13. package/dist/audit/file-sink.js.map +1 -0
  14. package/dist/audit/ids.d.ts +3 -0
  15. package/dist/audit/ids.js +15 -0
  16. package/dist/audit/ids.js.map +1 -0
  17. package/dist/audit/types.d.ts +13 -0
  18. package/dist/audit/types.js +2 -0
  19. package/dist/audit/types.js.map +1 -0
  20. package/dist/cli/commands.d.ts +31 -0
  21. package/dist/cli/commands.js +433 -0
  22. package/dist/cli/commands.js.map +1 -0
  23. package/dist/cli/logger.d.ts +57 -0
  24. package/dist/cli/logger.js +79 -0
  25. package/dist/cli/logger.js.map +1 -0
  26. package/dist/cli/output.d.ts +59 -0
  27. package/dist/cli/output.js +306 -0
  28. package/dist/cli/output.js.map +1 -0
  29. package/dist/cli/prompt.d.ts +29 -0
  30. package/dist/cli/prompt.js +197 -0
  31. package/dist/cli/prompt.js.map +1 -0
  32. package/dist/cli/repl.d.ts +4 -0
  33. package/dist/cli/repl.js +486 -0
  34. package/dist/cli/repl.js.map +1 -0
  35. package/dist/commands/init.d.ts +4 -0
  36. package/dist/commands/init.js +84 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/model.d.ts +3 -0
  39. package/dist/commands/model.js +178 -0
  40. package/dist/commands/model.js.map +1 -0
  41. package/dist/commands/plugin-init.d.ts +23 -0
  42. package/dist/commands/plugin-init.js +303 -0
  43. package/dist/commands/plugin-init.js.map +1 -0
  44. package/dist/commands/provider-auth.d.ts +14 -0
  45. package/dist/commands/provider-auth.js +153 -0
  46. package/dist/commands/provider-auth.js.map +1 -0
  47. package/dist/config/manager.d.ts +71 -0
  48. package/dist/config/manager.js +201 -0
  49. package/dist/config/manager.js.map +1 -0
  50. package/dist/config/types.d.ts +43 -0
  51. package/dist/config/types.js +2 -0
  52. package/dist/config/types.js.map +1 -0
  53. package/dist/errors.d.ts +37 -0
  54. package/dist/errors.js +55 -0
  55. package/dist/errors.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +207 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/llm/anthropic.d.ts +83 -0
  60. package/dist/llm/anthropic.js +190 -0
  61. package/dist/llm/anthropic.js.map +1 -0
  62. package/dist/llm/factory.d.ts +105 -0
  63. package/dist/llm/factory.js +164 -0
  64. package/dist/llm/factory.js.map +1 -0
  65. package/dist/llm/openai-codex.d.ts +102 -0
  66. package/dist/llm/openai-codex.js +445 -0
  67. package/dist/llm/openai-codex.js.map +1 -0
  68. package/dist/llm/openai.d.ts +71 -0
  69. package/dist/llm/openai.js +289 -0
  70. package/dist/llm/openai.js.map +1 -0
  71. package/dist/llm/provider.d.ts +1 -0
  72. package/dist/llm/provider.js +2 -0
  73. package/dist/llm/provider.js.map +1 -0
  74. package/dist/llm/types.d.ts +72 -0
  75. package/dist/llm/types.js +2 -0
  76. package/dist/llm/types.js.map +1 -0
  77. package/dist/mcp/bridge.d.ts +17 -0
  78. package/dist/mcp/bridge.js +74 -0
  79. package/dist/mcp/bridge.js.map +1 -0
  80. package/dist/mcp/config.d.ts +10 -0
  81. package/dist/mcp/config.js +27 -0
  82. package/dist/mcp/config.js.map +1 -0
  83. package/dist/mcp/manager.d.ts +67 -0
  84. package/dist/mcp/manager.js +207 -0
  85. package/dist/mcp/manager.js.map +1 -0
  86. package/dist/memory/scope.d.ts +4 -0
  87. package/dist/memory/scope.js +14 -0
  88. package/dist/memory/scope.js.map +1 -0
  89. package/dist/memory/store.d.ts +28 -0
  90. package/dist/memory/store.js +126 -0
  91. package/dist/memory/store.js.map +1 -0
  92. package/dist/prompts/system.d.ts +4 -0
  93. package/dist/prompts/system.js +197 -0
  94. package/dist/prompts/system.js.map +1 -0
  95. package/dist/skills/loader.d.ts +25 -0
  96. package/dist/skills/loader.js +98 -0
  97. package/dist/skills/loader.js.map +1 -0
  98. package/dist/skills/registry.d.ts +57 -0
  99. package/dist/skills/registry.js +132 -0
  100. package/dist/skills/registry.js.map +1 -0
  101. package/dist/skills/sync.d.ts +33 -0
  102. package/dist/skills/sync.js +180 -0
  103. package/dist/skills/sync.js.map +1 -0
  104. package/dist/skills/types.d.ts +1 -0
  105. package/dist/skills/types.js +2 -0
  106. package/dist/skills/types.js.map +1 -0
  107. package/dist/tools/ask.d.ts +30 -0
  108. package/dist/tools/ask.js +60 -0
  109. package/dist/tools/ask.js.map +1 -0
  110. package/dist/tools/confirmation.d.ts +12 -0
  111. package/dist/tools/confirmation.js +75 -0
  112. package/dist/tools/confirmation.js.map +1 -0
  113. package/dist/tools/plugin-init.d.ts +29 -0
  114. package/dist/tools/plugin-init.js +47 -0
  115. package/dist/tools/plugin-init.js.map +1 -0
  116. package/dist/tools/registry.d.ts +56 -0
  117. package/dist/tools/registry.js +123 -0
  118. package/dist/tools/registry.js.map +1 -0
  119. package/dist/tools/safety.d.ts +2 -0
  120. package/dist/tools/safety.js +30 -0
  121. package/dist/tools/safety.js.map +1 -0
  122. package/dist/tools/server.d.ts +91 -0
  123. package/dist/tools/server.js +149 -0
  124. package/dist/tools/server.js.map +1 -0
  125. package/dist/tools/shell.d.ts +11 -0
  126. package/dist/tools/shell.js +174 -0
  127. package/dist/tools/shell.js.map +1 -0
  128. package/dist/tools/skills-sync.d.ts +19 -0
  129. package/dist/tools/skills-sync.js +29 -0
  130. package/dist/tools/skills-sync.js.map +1 -0
  131. package/dist/tools/ssh.d.ts +62 -0
  132. package/dist/tools/ssh.js +343 -0
  133. package/dist/tools/ssh.js.map +1 -0
  134. package/dist/tools/types.d.ts +10 -0
  135. package/dist/tools/types.js +2 -0
  136. package/dist/tools/types.js.map +1 -0
  137. package/dist/utils/retry.d.ts +7 -0
  138. package/dist/utils/retry.js +34 -0
  139. package/dist/utils/retry.js.map +1 -0
  140. package/install.sh +171 -0
  141. package/package.json +49 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 通用重试函数(指数退避)
3
+ *
4
+ * 首次执行 fn(),失败后按 baseDelayMs * 2^attempt 间隔重试,
5
+ * 直到成功或达到 maxRetries 次。
6
+ */
7
+ export declare function withRetry(fn: any, options: any): Promise<any>;
@@ -0,0 +1,34 @@
1
+ // @ts-nocheck
2
+ import { logger } from '../cli/logger.js';
3
+ /**
4
+ * 通用重试函数(指数退避)
5
+ *
6
+ * 首次执行 fn(),失败后按 baseDelayMs * 2^attempt 间隔重试,
7
+ * 直到成功或达到 maxRetries 次。
8
+ */
9
+ export async function withRetry(fn, options) {
10
+ const { maxRetries, baseDelayMs, maxDelayMs = 10000, shouldRetry } = options;
11
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
12
+ try {
13
+ return await fn();
14
+ }
15
+ catch (error) {
16
+ // 最后一次尝试 or 不可重试 → 直接抛出
17
+ if (attempt === maxRetries)
18
+ throw error;
19
+ if (shouldRetry && !shouldRetry(error))
20
+ throw error;
21
+ // 指数退避
22
+ const delay = Math.min(baseDelayMs * Math.pow(2, attempt), maxDelayMs);
23
+ const message = error instanceof Error ? error.message : String(error);
24
+ logger.debug('retry', `Attempt ${attempt + 1}/${maxRetries} failed: ${message}, retrying in ${delay}ms`);
25
+ await sleep(delay);
26
+ }
27
+ }
28
+ // TypeScript 需要(实际不会到达)
29
+ throw new Error('Unreachable');
30
+ }
31
+ function sleep(ms) {
32
+ return new Promise((resolve) => setTimeout(resolve, ms));
33
+ }
34
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAE,EAAE,OAAO;IACvC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC7E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC;YACD,OAAO,MAAM,EAAE,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,wBAAwB;YACxB,IAAI,OAAO,KAAK,UAAU;gBACtB,MAAM,KAAK,CAAC;YAChB,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBAClC,MAAM,KAAK,CAAC;YAChB,OAAO;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,OAAO,GAAG,CAAC,IAAI,UAAU,YAAY,OAAO,iBAAiB,KAAK,IAAI,CAAC,CAAC;YACzG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,wBAAwB;IACxB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AACD,SAAS,KAAK,CAAC,EAAE;IACb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC"}
package/install.sh ADDED
@@ -0,0 +1,171 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ PACKAGE_NAME="${ONESCLAW_PACKAGE_NAME:-@onesclawkolor/onesclaw}"
5
+ NPM_REGISTRY="${ONESCLAW_NPM_REGISTRY:-https://registry.npmjs.org/}"
6
+ NPM_GLOBAL_PREFIX="${ONESCLAW_NPM_GLOBAL_PREFIX:-}"
7
+ SKIP_INIT="${ONESCLAW_SKIP_INIT:-0}"
8
+ MIN_NODE_VERSION=18
9
+ GREEN='\033[0;32m'
10
+ YELLOW='\033[0;33m'
11
+ RED='\033[0;31m'
12
+ CYAN='\033[0;36m'
13
+ NC='\033[0m'
14
+
15
+ info() { printf "${CYAN} %s${NC}\n" "$1"; }
16
+ success() { printf "${GREEN} ✓ %s${NC}\n" "$1"; }
17
+ warn() { printf "${YELLOW} ⚠ %s${NC}\n" "$1"; }
18
+ error() { printf "${RED} ✗ %s${NC}\n" "$1"; }
19
+
20
+ detect_os() {
21
+ case "$(uname -s)" in
22
+ Darwin*) echo "macos" ;;
23
+ Linux*) echo "linux" ;;
24
+ MINGW*|MSYS*|CYGWIN*) echo "windows" ;;
25
+ *) echo "unknown" ;;
26
+ esac
27
+ }
28
+
29
+ check_node() {
30
+ if command -v node &>/dev/null; then
31
+ local node_version
32
+ node_version=$(node -v | sed 's/v//' | cut -d. -f1)
33
+ if [ "$node_version" -ge "$MIN_NODE_VERSION" ]; then
34
+ success "Node.js $(node -v) found"
35
+ return 0
36
+ fi
37
+
38
+ warn "Node.js $(node -v) found, but >= v${MIN_NODE_VERSION} is required"
39
+ return 1
40
+ fi
41
+
42
+ warn "Node.js not found"
43
+ return 1
44
+ }
45
+
46
+ install_node() {
47
+ info "Node.js >= v${MIN_NODE_VERSION} is required. Installing automatically..."
48
+
49
+ if [ "$OS" = "macos" ]; then
50
+ if ! command -v brew &>/dev/null; then
51
+ info "Homebrew not found. Installing Homebrew first..."
52
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
53
+ if [ -f /opt/homebrew/bin/brew ]; then
54
+ eval "$(/opt/homebrew/bin/brew shellenv)"
55
+ fi
56
+ fi
57
+
58
+ info "Installing Node.js via Homebrew..."
59
+ brew install node
60
+ else
61
+ if command -v apt-get &>/dev/null; then
62
+ info "Installing Node.js 22.x via NodeSource (apt)..."
63
+ curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
64
+ sudo apt-get install -y nodejs
65
+ elif command -v dnf &>/dev/null; then
66
+ info "Installing Node.js 22.x via NodeSource (dnf)..."
67
+ curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash -
68
+ sudo dnf install -y nodejs
69
+ elif command -v yum &>/dev/null; then
70
+ info "Installing Node.js 22.x via NodeSource (yum)..."
71
+ curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash -
72
+ sudo yum install -y nodejs
73
+ else
74
+ error "Could not detect package manager (apt/dnf/yum)."
75
+ error "Please install Node.js >= v${MIN_NODE_VERSION} manually: https://nodejs.org/"
76
+ exit 1
77
+ fi
78
+ fi
79
+
80
+ if command -v node &>/dev/null; then
81
+ success "Node.js $(node -v) installed successfully"
82
+ else
83
+ error "Node.js installation failed. Please install manually: https://nodejs.org/"
84
+ exit 1
85
+ fi
86
+ }
87
+
88
+ echo ""
89
+ echo " ╔════════════════════════════════════╗"
90
+ echo " ║ ONESCLAW CLI Installer ║"
91
+ echo " ║ ONES 企业内部 AI Agent CLI ║"
92
+ echo " ╚════════════════════════════════════╝"
93
+ echo ""
94
+
95
+ OS=$(detect_os)
96
+ if [ "$OS" = "unknown" ]; then
97
+ error "Unsupported operating system: $(uname -s)"
98
+ exit 1
99
+ fi
100
+
101
+ if [ "$OS" = "windows" ]; then
102
+ error "Windows is not supported. Please use WSL (Windows Subsystem for Linux)."
103
+ exit 1
104
+ fi
105
+
106
+ info "Detected OS: $OS"
107
+
108
+ if ! check_node; then
109
+ install_node
110
+ fi
111
+
112
+ if ! command -v npm &>/dev/null; then
113
+ error "npm not found. It should be installed with Node.js."
114
+ error "Please reinstall Node.js from https://nodejs.org/"
115
+ exit 1
116
+ fi
117
+ success "npm $(npm -v) found"
118
+ info "Using npm registry: ${NPM_REGISTRY}"
119
+
120
+ NPM_INSTALL_ARGS=(-g "${PACKAGE_NAME}")
121
+ NPM_INSTALL_ARGS+=("--registry" "${NPM_REGISTRY}")
122
+ if [ -n "${NPM_GLOBAL_PREFIX}" ]; then
123
+ NPM_INSTALL_ARGS+=("--prefix" "${NPM_GLOBAL_PREFIX}")
124
+ fi
125
+
126
+ echo ""
127
+ info "Installing onesclaw globally..."
128
+ echo ""
129
+
130
+ if npm install "${NPM_INSTALL_ARGS[@]}" 2>&1; then
131
+ echo ""
132
+ success "onesclaw installed successfully!"
133
+ else
134
+ echo ""
135
+ error "Installation failed."
136
+ echo ""
137
+ info "If you got a permission error, try:"
138
+ echo ""
139
+ if [ -n "${NPM_REGISTRY}" ]; then
140
+ echo " sudo npm install -g ${PACKAGE_NAME} --registry ${NPM_REGISTRY}"
141
+ else
142
+ echo " sudo npm install -g ${PACKAGE_NAME}"
143
+ fi
144
+ echo ""
145
+ exit 1
146
+ fi
147
+
148
+ if [ -n "${NPM_GLOBAL_PREFIX}" ]; then
149
+ export PATH="${NPM_GLOBAL_PREFIX}/bin:${PATH}"
150
+ fi
151
+
152
+ if ! command -v onesclaw &>/dev/null; then
153
+ warn "onesclaw was installed but is not in your PATH."
154
+ info "You may need to add npm's global bin directory to your PATH:"
155
+ echo ""
156
+ echo " export PATH=\"$(npm config get prefix)/bin:\$PATH\""
157
+ echo ""
158
+ exit 1
159
+ fi
160
+
161
+ success "onesclaw $(onesclaw --version 2>/dev/null || echo 'unknown') is ready"
162
+
163
+ if [ "${SKIP_INIT}" = "1" ]; then
164
+ info "ONESCLAW_SKIP_INIT=1 detected, skipping interactive init."
165
+ exit 0
166
+ fi
167
+
168
+ echo ""
169
+ info "Starting initial setup..."
170
+ echo ""
171
+ exec onesclaw init < /dev/tty
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@onesclawkolor/onesclaw",
3
+ "version": "0.1.0",
4
+ "description": "ONES internal AI Agent CLI",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "onesclaw": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "install.sh"
14
+ ],
15
+ "engines": {
16
+ "node": ">=18.0.0"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public",
20
+ "registry": "https://registry.npmjs.org/"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/ones-ai/onesclaw.git"
25
+ },
26
+ "license": "MIT",
27
+ "keywords": [
28
+ "cli",
29
+ "ai",
30
+ "agent",
31
+ "ones",
32
+ "mcp"
33
+ ],
34
+ "dependencies": {
35
+ "@anthropic-ai/sdk": "^0.39.0",
36
+ "@modelcontextprotocol/sdk": "^1.8.0",
37
+ "chalk": "^5.4.1",
38
+ "commander": "^13.1.0",
39
+ "dotenv": "^16.4.7",
40
+ "gray-matter": "^4.0.3",
41
+ "marked": "^15.0.7",
42
+ "marked-terminal": "^7.3.0",
43
+ "openai": "^6.27.0",
44
+ "ora": "^8.2.0",
45
+ "sqlite": "^5.1.1",
46
+ "sqlite3": "^5.1.7",
47
+ "ssh2": "^1.17.0"
48
+ }
49
+ }