@s-gw/s-gw 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 (123) hide show
  1. package/.codex-plugin/plugin.json +35 -0
  2. package/.mcp.json +16 -0
  3. package/LICENSE +201 -0
  4. package/NOTICE +7 -0
  5. package/README.md +197 -0
  6. package/TRADEMARKS.md +9 -0
  7. package/assets/icons/aws-ec2.png +0 -0
  8. package/assets/icons/lucide/bot.svg +8 -0
  9. package/assets/icons/lucide/monitor.svg +5 -0
  10. package/assets/icons/lucide/server.svg +6 -0
  11. package/assets/icons/lucide/terminal.svg +4 -0
  12. package/assets/icons/s-gw-128.png +0 -0
  13. package/assets/icons/s-gw-16.png +0 -0
  14. package/assets/icons/s-gw-180.png +0 -0
  15. package/assets/icons/s-gw-192.png +0 -0
  16. package/assets/icons/s-gw-32.png +0 -0
  17. package/assets/icons/s-gw-64.png +0 -0
  18. package/assets/icons/s-gw-menu-bar-template.png +0 -0
  19. package/dist/agent-context.d.ts +17 -0
  20. package/dist/agent-context.js +207 -0
  21. package/dist/agents.d.ts +64 -0
  22. package/dist/agents.js +763 -0
  23. package/dist/cli.d.ts +2 -0
  24. package/dist/cli.js +1385 -0
  25. package/dist/command-suggest.d.ts +3 -0
  26. package/dist/command-suggest.js +131 -0
  27. package/dist/console-server.d.ts +16 -0
  28. package/dist/console-server.js +978 -0
  29. package/dist/console-ui/assets/codex-DYTPdPxi.png +0 -0
  30. package/dist/console-ui/assets/cursor-CBrUTJD-.png +0 -0
  31. package/dist/console-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  32. package/dist/console-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  33. package/dist/console-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  34. package/dist/console-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  35. package/dist/console-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  36. package/dist/console-ui/assets/hermes-B8hNbJPm.png +0 -0
  37. package/dist/console-ui/assets/index-BxUf0Sye.js +96 -0
  38. package/dist/console-ui/assets/index-CmTiBR_w.css +2 -0
  39. package/dist/console-ui/assets/omnigent-Cxa4p2Mq.png +0 -0
  40. package/dist/console-ui/assets/openclaw-C5wL4ZVW.png +0 -0
  41. package/dist/console-ui/assets/opencode-D_wFATSC.png +0 -0
  42. package/dist/console-ui/assets/openhands-DnrlGgev.svg +9 -0
  43. package/dist/console-ui/assets/s-gw-64-ByMUGQ3K.png +0 -0
  44. package/dist/console-ui/assets/vscode-Bdtr9eyf.png +0 -0
  45. package/dist/console-ui/assets/zeptoclaw-DztQW8Sw.png +0 -0
  46. package/dist/console-ui/index.html +13 -0
  47. package/dist/crypto.d.ts +6 -0
  48. package/dist/crypto.js +53 -0
  49. package/dist/executor.d.ts +7 -0
  50. package/dist/executor.js +297 -0
  51. package/dist/gateway.d.ts +31 -0
  52. package/dist/gateway.js +114 -0
  53. package/dist/guard.d.ts +61 -0
  54. package/dist/guard.js +247 -0
  55. package/dist/install.d.ts +146 -0
  56. package/dist/install.js +629 -0
  57. package/dist/mcp-server.d.ts +2 -0
  58. package/dist/mcp-server.js +119 -0
  59. package/dist/native/s-gw-core +0 -0
  60. package/dist/native/s-gw-keychain-helper +0 -0
  61. package/dist/onepassword.d.ts +48 -0
  62. package/dist/onepassword.js +412 -0
  63. package/dist/paths.d.ts +4 -0
  64. package/dist/paths.js +22 -0
  65. package/dist/s-gw Menu Bar.app/Contents/Info.plist +28 -0
  66. package/dist/s-gw Menu Bar.app/Contents/MacOS/s-gw-menu-bar-helper +0 -0
  67. package/dist/s-gw Menu Bar.app/Contents/Resources/AppIcon.icns +0 -0
  68. package/dist/s-gw Menu Bar.app/Contents/Resources/AwsEc2.png +0 -0
  69. package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-bot.svg +8 -0
  70. package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-monitor.svg +5 -0
  71. package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-server.svg +6 -0
  72. package/dist/s-gw Menu Bar.app/Contents/Resources/Lucide-terminal.svg +4 -0
  73. package/dist/s-gw Menu Bar.app/Contents/Resources/MenuBarTemplate.png +0 -0
  74. package/dist/s-gw Menu Bar.app/Contents/_CodeSignature/CodeResources +194 -0
  75. package/dist/s-gw.app/Contents/Info.plist +28 -0
  76. package/dist/s-gw.app/Contents/MacOS/s-gw +0 -0
  77. package/dist/s-gw.app/Contents/Resources/AppIcon.icns +0 -0
  78. package/dist/s-gw.app/Contents/Resources/MenuBarTemplate.png +0 -0
  79. package/dist/s-gw.app/Contents/_CodeSignature/CodeResources +139 -0
  80. package/dist/scanner.d.ts +9 -0
  81. package/dist/scanner.js +437 -0
  82. package/dist/ssh.d.ts +31 -0
  83. package/dist/ssh.js +286 -0
  84. package/dist/store.d.ts +131 -0
  85. package/dist/store.js +1611 -0
  86. package/dist/types.d.ts +196 -0
  87. package/dist/types.js +2 -0
  88. package/dist/unlock.d.ts +29 -0
  89. package/dist/unlock.js +274 -0
  90. package/dist/windows/VERSION.txt +1 -0
  91. package/dist/windows/s-gw-client.cmd +4 -0
  92. package/dist/windows/s-gw-client.ps1 +106 -0
  93. package/dist/windows/s-gw-credential.cmd +4 -0
  94. package/dist/windows/s-gw-credential.ps1 +167 -0
  95. package/dist/windows/s-gw-helper.cmd +4 -0
  96. package/dist/windows/s-gw-helper.ps1 +180 -0
  97. package/docs/README.md +23 -0
  98. package/docs/agents.md +160 -0
  99. package/docs/architecture.md +72 -0
  100. package/docs/deployment.md +447 -0
  101. package/docs/detection.md +44 -0
  102. package/docs/images/s-gw-overview.png +0 -0
  103. package/docs/integrations.md +195 -0
  104. package/docs/keychain.md +39 -0
  105. package/docs/onepassword.md +84 -0
  106. package/docs/quickstart.md +104 -0
  107. package/docs/threat-model.md +100 -0
  108. package/docs/ui/THIRD_PARTY_NOTICES.md +111 -0
  109. package/docs/ui/apple-touch-icon.png +0 -0
  110. package/docs/ui/favicon-32.png +0 -0
  111. package/docs/ui/local-console.html +4477 -0
  112. package/docs/ui/vendor/d3-sankey/d3-array.LICENSE.txt +27 -0
  113. package/docs/ui/vendor/d3-sankey/d3-array.min.js +2 -0
  114. package/docs/ui/vendor/d3-sankey/d3-path.LICENSE.txt +27 -0
  115. package/docs/ui/vendor/d3-sankey/d3-path.min.js +2 -0
  116. package/docs/ui/vendor/d3-sankey/d3-sankey.LICENSE.txt +27 -0
  117. package/docs/ui/vendor/d3-sankey/d3-sankey.min.js +2 -0
  118. package/docs/ui/vendor/d3-sankey/d3-shape.LICENSE.txt +27 -0
  119. package/docs/ui/vendor/d3-sankey/d3-shape.min.js +2 -0
  120. package/docs/ui/vendor/sankeymatic/LICENSE.txt +17 -0
  121. package/docs/ui/vendor/sankeymatic/sankey.js +897 -0
  122. package/package.json +117 -0
  123. package/skills/s-gw/SKILL.md +19 -0
@@ -0,0 +1,207 @@
1
+ import { execFileSync } from "node:child_process";
2
+ export function agentNameFromReason(reason) {
3
+ return knownAgentNameFromText(reason) || "Agent";
4
+ }
5
+ export function requestAgentName(reason, env = process.env) {
6
+ return requestAgentIdentity(reason, { env }).name;
7
+ }
8
+ export function requestAgentIdentity(reason, context = {}) {
9
+ const env = context.env || process.env;
10
+ const configured = cleanAgentName(context.agentName || env.SGW_AGENT_NAME || env.SGW_REQUEST_AGENT_NAME);
11
+ if (configured) {
12
+ return { name: configured, source: "configured" };
13
+ }
14
+ const mcpClient = agentNameFromMcpClient(context.mcpClientName);
15
+ if (mcpClient) {
16
+ return { name: mcpClient, source: "mcp-client" };
17
+ }
18
+ const runtime = detectRuntimeAgentName(env);
19
+ if (runtime) {
20
+ return { name: runtime, source: "runtime" };
21
+ }
22
+ const processAgent = detectProcessTreeAgentName(env);
23
+ if (processAgent) {
24
+ return { name: processAgent, source: "process" };
25
+ }
26
+ const fromReason = agentNameFromReason(reason);
27
+ if (fromReason !== "Agent") {
28
+ return { name: fromReason, source: "reason" };
29
+ }
30
+ return { name: "Agent", source: "unknown" };
31
+ }
32
+ export function agentNameFromMcpClient(value) {
33
+ const cleaned = String(value || "").trim();
34
+ if (!cleaned) {
35
+ return undefined;
36
+ }
37
+ const known = knownAgentNameFromText(cleaned);
38
+ if (known && known !== "MCP") {
39
+ return known;
40
+ }
41
+ const generic = cleaned.toLowerCase().replace(/[^a-z0-9]+/g, "");
42
+ if (["agent", "client", "mcp", "mcpclient", "modelcontextprotocol"].includes(generic)) {
43
+ return undefined;
44
+ }
45
+ return cleanAgentName(cleaned);
46
+ }
47
+ export function detectRuntimeAgentName(env = process.env) {
48
+ const explicit = cleanAgentName(env.SGW_AGENT_NAME || env.SGW_REQUEST_AGENT_NAME);
49
+ if (explicit) {
50
+ return explicit;
51
+ }
52
+ const guardAgent = cleanAgentName(env.SGW_GUARD_AGENT);
53
+ if (guardAgent) {
54
+ return displayNameForAgentId(guardAgent);
55
+ }
56
+ const bundleId = String(env.__CFBundleIdentifier || "").toLowerCase();
57
+ if (hasAnyEnv(env, ["CODEX_SHELL", "CODEX_THREAD_ID", "CODEX_CI", "CODEX_INTERNAL_ORIGINATOR_OVERRIDE"]) || bundleId.includes("codex")) {
58
+ return "Codex";
59
+ }
60
+ if (hasAnyEnv(env, ["CLAUDECODE", "CLAUDE_CODE", "CLAUDECODE_CLI", "CLAUDE_PROJECT_DIR"]) || bundleId.includes("claude")) {
61
+ return "Claude";
62
+ }
63
+ if (hasAnyEnv(env, ["CURSOR_TRACE_ID", "CURSOR_AGENT", "CURSOR_SESSION_ID"]) || bundleId.includes("cursor")) {
64
+ return "Cursor";
65
+ }
66
+ if (hasAnyEnv(env, ["OPENCODE", "OPENCODE_SESSION", "OPENCODE_AGENT"]) || bundleId.includes("opencode")) {
67
+ return "OpenCode";
68
+ }
69
+ if (hasAnyEnv(env, ["GEMINI_CLI", "GEMINI_AGENT"]) || bundleId.includes("gemini")) {
70
+ return "Gemini";
71
+ }
72
+ if (hasAnyEnv(env, ["GITHUB_COPILOT_TOKEN", "COPILOT_AGENT", "COPILOT_CLI"]) || bundleId.includes("copilot")) {
73
+ return "GitHub Copilot";
74
+ }
75
+ if (hasAnyEnv(env, ["WINDSURF_AGENT", "WINDSURF_SESSION"]) || bundleId.includes("windsurf")) {
76
+ return "Windsurf";
77
+ }
78
+ return undefined;
79
+ }
80
+ export function detectProcessTreeAgentName(env = process.env) {
81
+ const fixture = env.SGW_AGENT_PROCESS_TREE;
82
+ if (fixture) {
83
+ return knownAgentNameFromText(fixture);
84
+ }
85
+ if (env.SGW_DISABLE_PROCESS_AGENT_DETECTION === "1") {
86
+ return undefined;
87
+ }
88
+ return knownAgentNameFromText(readParentProcessTree());
89
+ }
90
+ function hasAnyEnv(env, keys) {
91
+ return keys.some((key) => {
92
+ const value = env[key];
93
+ return value !== undefined && String(value).trim() !== "";
94
+ });
95
+ }
96
+ function cleanAgentName(value) {
97
+ const cleaned = String(value || "").trim();
98
+ if (!cleaned) {
99
+ return undefined;
100
+ }
101
+ return displayNameForAgentId(cleaned);
102
+ }
103
+ function knownAgentNameFromText(value) {
104
+ const lower = String(value || "").toLowerCase();
105
+ if (lower.includes("opencode") || lower.includes("open code"))
106
+ return "OpenCode";
107
+ if (lower.includes("openclaw"))
108
+ return "OpenClaw";
109
+ if (lower.includes("zeptoclaw"))
110
+ return "ZeptoClaw";
111
+ if (lower.includes("claude-code") || lower.includes("claudecode") || lower.includes("claude"))
112
+ return "Claude";
113
+ if (lower.includes("github-copilot") || lower.includes("github copilot") || lower.includes("copilot"))
114
+ return "GitHub Copilot";
115
+ if (lower.includes("gemini"))
116
+ return "Gemini";
117
+ if (lower.includes("windsurf"))
118
+ return "Windsurf";
119
+ if (lower.includes("hermes"))
120
+ return "Hermes";
121
+ if (lower.includes("openhands"))
122
+ return "OpenHands";
123
+ if (lower.includes("antigravity") || lower.includes("/agy") || lower.includes(" agy"))
124
+ return "Antigravity";
125
+ if (lower.includes("omnigent") || lower.includes("omniagent"))
126
+ return "OmniGent";
127
+ if (lower.includes("cursor"))
128
+ return "Cursor";
129
+ if (lower.includes("codex") || lower.includes("com.openai.codex"))
130
+ return "Codex";
131
+ if (lower.includes("console"))
132
+ return "Console";
133
+ if (lower.includes("mcp"))
134
+ return "MCP";
135
+ return undefined;
136
+ }
137
+ function readParentProcessTree() {
138
+ let pid = process.ppid;
139
+ const rows = [];
140
+ for (let depth = 0; depth < 8 && pid > 1; depth += 1) {
141
+ const row = readProcessRow(pid);
142
+ if (!row) {
143
+ break;
144
+ }
145
+ rows.push(row.text);
146
+ pid = row.parentPid;
147
+ }
148
+ return rows.join("\n");
149
+ }
150
+ function readProcessRow(pid) {
151
+ try {
152
+ const output = execFileSync("ps", ["-p", String(pid), "-o", "ppid=", "-o", "command="], {
153
+ encoding: "utf8",
154
+ stdio: ["ignore", "pipe", "ignore"],
155
+ timeout: 250
156
+ }).trim();
157
+ if (!output) {
158
+ return undefined;
159
+ }
160
+ const match = output.match(/^(\d+)\s+([\s\S]+)$/);
161
+ if (!match) {
162
+ return undefined;
163
+ }
164
+ return {
165
+ parentPid: Number(match[1]),
166
+ text: match[2]
167
+ };
168
+ }
169
+ catch {
170
+ return undefined;
171
+ }
172
+ }
173
+ function displayNameForAgentId(value) {
174
+ const normalized = value.toLowerCase().replace(/[^a-z0-9]+/g, "");
175
+ if (normalized === "codex")
176
+ return "Codex";
177
+ if (normalized === "claude" || normalized === "claudecode")
178
+ return "Claude";
179
+ if (normalized === "cursor")
180
+ return "Cursor";
181
+ if (normalized === "opencode")
182
+ return "OpenCode";
183
+ if (normalized === "gemini" || normalized === "geminicli")
184
+ return "Gemini";
185
+ if (normalized === "githubcopilot" || normalized === "copilot" || normalized === "copilotcli")
186
+ return "GitHub Copilot";
187
+ if (normalized === "windsurf")
188
+ return "Windsurf";
189
+ if (normalized === "openclaw")
190
+ return "OpenClaw";
191
+ if (normalized === "zeptoclaw")
192
+ return "ZeptoClaw";
193
+ if (normalized === "hermes")
194
+ return "Hermes";
195
+ if (normalized === "openhands")
196
+ return "OpenHands";
197
+ if (normalized === "antigravity" || normalized === "agy")
198
+ return "Antigravity";
199
+ if (normalized === "omnigent" || normalized === "omniagent")
200
+ return "OmniGent";
201
+ if (normalized === "console")
202
+ return "Console";
203
+ if (normalized === "mcp")
204
+ return "MCP";
205
+ return value.trim();
206
+ }
207
+ //# sourceMappingURL=agent-context.js.map
@@ -0,0 +1,64 @@
1
+ export type AgentMcpStatus = "supported" | "manual" | "planned" | "unsupported";
2
+ export type AgentSnippetFormat = "toml" | "json" | "jsonc" | "yaml" | "text";
3
+ export type AgentHookKind = "proxy" | "hook" | "plugin" | "policy" | "none";
4
+ export type CodeGuardRoute = "agent-skill" | "rule-files" | "plugin-marketplace" | "not-available";
5
+ export interface AgentSurface {
6
+ supported: boolean;
7
+ configPaths: string[];
8
+ notes: string[];
9
+ }
10
+ export interface AgentMcpSurface extends AgentSurface {
11
+ status: AgentMcpStatus;
12
+ snippet: AgentSnippetFormat;
13
+ writeMode: "safe" | "manual" | "unknown";
14
+ }
15
+ export interface AgentHookSurface extends AgentSurface {
16
+ kind: AgentHookKind;
17
+ events: string[];
18
+ }
19
+ export interface AgentProfile {
20
+ id: string;
21
+ displayName: string;
22
+ aliases: string[];
23
+ defenseClawConnector?: string;
24
+ mcp: AgentMcpSurface;
25
+ skills: AgentSurface;
26
+ plugins: AgentSurface;
27
+ hooks?: AgentHookSurface;
28
+ limitations: string[];
29
+ }
30
+ export interface McpSnippetOptions {
31
+ serverName?: string;
32
+ command?: string;
33
+ args?: string[];
34
+ env?: Record<string, string>;
35
+ }
36
+ export interface AgentProfileSummary {
37
+ id: string;
38
+ displayName: string;
39
+ aliases: string[];
40
+ defenseClawConnector?: string;
41
+ mcpStatus: AgentMcpStatus;
42
+ mcpConfigPaths: string[];
43
+ hookKind?: AgentHookKind;
44
+ hookConfigPaths: string[];
45
+ hookEvents: string[];
46
+ codeGuardRoute: CodeGuardRoute;
47
+ codeGuardInstallPaths: string[];
48
+ }
49
+ export interface AgentCodeGuardPlan {
50
+ agentId: string;
51
+ displayName: string;
52
+ supported: boolean;
53
+ route: CodeGuardRoute;
54
+ sourceRepo: string;
55
+ releaseArtifact?: string;
56
+ installPaths: string[];
57
+ commands: string[];
58
+ notes: string[];
59
+ }
60
+ export declare const agentProfiles: AgentProfile[];
61
+ export declare function listAgentProfiles(): AgentProfileSummary[];
62
+ export declare function resolveAgentProfile(input: string): AgentProfile;
63
+ export declare function renderAgentMcpSnippet(input: string, options?: McpSnippetOptions): string;
64
+ export declare function getAgentCodeGuardPlan(input: string): AgentCodeGuardPlan;