one-code-extension 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.
- package/LICENSE +32 -0
- package/README.md +202 -0
- package/agents/explore.md +24 -0
- package/agents/general-purpose.md +21 -0
- package/agents/plan.md +22 -0
- package/docs/decisions/auto-mode.md +526 -0
- package/docs/decisions/branding.md +127 -0
- package/docs/decisions/code-review-remediation.md +106 -0
- package/docs/decisions/compaction.md +140 -0
- package/docs/decisions/distribution.md +133 -0
- package/docs/decisions/hooks.md +64 -0
- package/docs/decisions/lsp.md +58 -0
- package/docs/decisions/mcp.md +104 -0
- package/docs/decisions/memory-state.md +170 -0
- package/docs/decisions/model-policy.md +126 -0
- package/docs/decisions/modes.md +178 -0
- package/docs/decisions/skills-plugins.md +56 -0
- package/docs/decisions/subagents-workflows.md +225 -0
- package/docs/decisions/system-prompt.md +98 -0
- package/docs/decisions/tools.md +407 -0
- package/docs/decisions/tui.md +202 -0
- package/docs/decisions.md +148 -0
- package/extensions/ask-user/index.ts +124 -0
- package/extensions/ask-user/questions.ts +60 -0
- package/extensions/auto-mode/actions.ts +78 -0
- package/extensions/auto-mode/classifier.ts +388 -0
- package/extensions/auto-mode/config.ts +237 -0
- package/extensions/auto-mode/decision-log.ts +60 -0
- package/extensions/auto-mode/defaults.ts +65 -0
- package/extensions/auto-mode/instructions.ts +74 -0
- package/extensions/auto-mode/model-picker.ts +225 -0
- package/extensions/auto-mode/model-select.ts +178 -0
- package/extensions/auto-mode/paths.ts +109 -0
- package/extensions/auto-mode/pause.ts +96 -0
- package/extensions/auto-mode/prompt.ts +307 -0
- package/extensions/auto-mode/rules.ts +96 -0
- package/extensions/auto-mode/safety-floor.ts +100 -0
- package/extensions/auto-mode/sensitive.ts +137 -0
- package/extensions/auto-mode/shell-analysis.ts +702 -0
- package/extensions/background/index.ts +405 -0
- package/extensions/background/registry.ts +81 -0
- package/extensions/background/wakeup.ts +41 -0
- package/extensions/bash/background.ts +136 -0
- package/extensions/bash/index.ts +149 -0
- package/extensions/branding/assistant-marker.ts +53 -0
- package/extensions/branding/index.ts +366 -0
- package/extensions/branding/prompt-editor.ts +42 -0
- package/extensions/branding/prompt-marker.ts +29 -0
- package/extensions/branding/startup.ts +152 -0
- package/extensions/claude-compat/index.ts +50 -0
- package/extensions/claude-context/index.ts +79 -0
- package/extensions/compaction/index.ts +231 -0
- package/extensions/compaction/prompt.ts +191 -0
- package/extensions/context-management/index.ts +147 -0
- package/extensions/effort/index.ts +216 -0
- package/extensions/effort/slider.ts +253 -0
- package/extensions/exit/index.ts +28 -0
- package/extensions/file-tracker/index.ts +103 -0
- package/extensions/file-tracker/tracker.ts +145 -0
- package/extensions/hooks/debug.ts +53 -0
- package/extensions/hooks/executor.ts +132 -0
- package/extensions/hooks/index.ts +310 -0
- package/extensions/hooks/matcher.ts +72 -0
- package/extensions/hooks/plugin-hooks.ts +79 -0
- package/extensions/hooks/protocol.ts +151 -0
- package/extensions/hooks/settings.ts +163 -0
- package/extensions/hooks/trust.ts +151 -0
- package/extensions/lib/branch-restore.ts +35 -0
- package/extensions/lib/claude-context.ts +148 -0
- package/extensions/lib/deferred.ts +119 -0
- package/extensions/lib/git.ts +14 -0
- package/extensions/lib/memory.ts +219 -0
- package/extensions/lib/model-policy.ts +436 -0
- package/extensions/lib/model-tier.ts +99 -0
- package/extensions/lib/notifications.ts +18 -0
- package/extensions/lib/paths.ts +26 -0
- package/extensions/lib/per-cwd.ts +21 -0
- package/extensions/lib/persisted-output.ts +70 -0
- package/extensions/lib/pi-version.ts +54 -0
- package/extensions/lib/plugins.ts +227 -0
- package/extensions/lib/reminders.ts +212 -0
- package/extensions/lib/scratchpad.ts +68 -0
- package/extensions/lib/tui-render.ts +522 -0
- package/extensions/lsp/client.ts +278 -0
- package/extensions/lsp/format.ts +46 -0
- package/extensions/lsp/index.ts +193 -0
- package/extensions/lsp/protocol.ts +64 -0
- package/extensions/lsp/servers.ts +79 -0
- package/extensions/mcp/client.ts +205 -0
- package/extensions/mcp/config.ts +199 -0
- package/extensions/mcp/index.ts +373 -0
- package/extensions/mcp/schema.ts +161 -0
- package/extensions/memory/index.ts +90 -0
- package/extensions/notebook/index.ts +77 -0
- package/extensions/notebook/notebook.ts +108 -0
- package/extensions/permissions/index.ts +876 -0
- package/extensions/permissions/matcher.ts +455 -0
- package/extensions/permissions/modes.ts +107 -0
- package/extensions/permissions/protected-paths.ts +125 -0
- package/extensions/permissions/settings.ts +98 -0
- package/extensions/plan-mode/index.ts +209 -0
- package/extensions/plan-mode/reminder.ts +33 -0
- package/extensions/plan-mode/slug.ts +28 -0
- package/extensions/plan-mode/viewer.ts +124 -0
- package/extensions/plugins/index.ts +115 -0
- package/extensions/plugins/template.ts +42 -0
- package/extensions/search-tools/index.ts +0 -0
- package/extensions/search-tools/tools.ts +24 -0
- package/extensions/skill/index.ts +170 -0
- package/extensions/subagents/agents.ts +126 -0
- package/extensions/subagents/child.ts +414 -0
- package/extensions/subagents/default-model.ts +122 -0
- package/extensions/subagents/index.ts +1119 -0
- package/extensions/subagents/model-select.ts +346 -0
- package/extensions/subagents/rpc-turns.ts +123 -0
- package/extensions/subagents/runs.ts +93 -0
- package/extensions/subagents/usage.ts +53 -0
- package/extensions/subagents/worktree.ts +69 -0
- package/extensions/system-prompt/environment.ts +35 -0
- package/extensions/system-prompt/index.ts +54 -0
- package/extensions/system-prompt/template.ts +103 -0
- package/extensions/system-prompt/tiers/common.ts +63 -0
- package/extensions/system-prompt/tiers/frontier.ts +24 -0
- package/extensions/system-prompt/tiers/low.ts +71 -0
- package/extensions/system-prompt/tiers/mid.ts +56 -0
- package/extensions/system-reminder/index.ts +37 -0
- package/extensions/tasks/index.ts +140 -0
- package/extensions/tasks/store.ts +174 -0
- package/extensions/todo/index.ts +133 -0
- package/extensions/tool-search/index.ts +168 -0
- package/extensions/tool-style/index.ts +84 -0
- package/extensions/web/index.ts +43 -0
- package/extensions/web-fetch/extract.ts +139 -0
- package/extensions/web-fetch/index.ts +291 -0
- package/extensions/web-fetch/summarize.ts +78 -0
- package/extensions/workflow/agent-session.ts +368 -0
- package/extensions/workflow/globals.ts +251 -0
- package/extensions/workflow/index.ts +364 -0
- package/extensions/workflow/journal.ts +75 -0
- package/extensions/workflow/permission-gate.ts +71 -0
- package/extensions/workflow/run-manager.ts +306 -0
- package/extensions/workflow/saved-workflows.ts +45 -0
- package/extensions/workflow/script-source.ts +201 -0
- package/extensions/workflow/types.ts +99 -0
- package/extensions/workflow/vm-runtime.ts +31 -0
- package/extensions/workflow/widget.ts +56 -0
- package/extensions/worktree/index.ts +266 -0
- package/extensions/worktree/rewrite.ts +59 -0
- package/package.json +101 -0
- package/themes/one-code-light.json +76 -0
- package/themes/one-code.json +76 -0
- package/types/app.d.ts +5 -0
- package/types/community-packages.d.ts +12 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one sensitive-path denylist (pure).
|
|
3
|
+
*
|
|
4
|
+
* The upstream sandbox this is derived from kept three divergent copies of this
|
|
5
|
+
* list (one for the shell classifier, one for file tools, one for PowerShell);
|
|
6
|
+
* they drifted, and the drift *was* the vulnerability — the shell path blocked
|
|
7
|
+
* `~/.kube/config` while the file path did not (review findings F3, F10, N13,
|
|
8
|
+
* N25). There is exactly one list here, it is case-folded, and every consumer
|
|
9
|
+
* calls these functions rather than re-deriving membership.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { basename } from "node:path";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Directory names that mean "credentials live under here". Matched as a *path
|
|
16
|
+
* segment*, so `~/.aws/credentials`, `/Users/x/.aws`, and a bare `.aws` in a
|
|
17
|
+
* command all hit. `.config/gcloud` is two segments and handled separately.
|
|
18
|
+
*/
|
|
19
|
+
const SENSITIVE_DIR_SEGMENTS = new Set([
|
|
20
|
+
".aws",
|
|
21
|
+
".azure",
|
|
22
|
+
".docker",
|
|
23
|
+
".gnupg",
|
|
24
|
+
".kube",
|
|
25
|
+
".m2", // Maven settings.xml holds plaintext repository credentials
|
|
26
|
+
".npm",
|
|
27
|
+
".ssh",
|
|
28
|
+
".terraform.d",
|
|
29
|
+
"gcloud", // under .config/
|
|
30
|
+
".gcloud",
|
|
31
|
+
".config/gcloud",
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
/** Two-segment sensitive suffixes, checked against the resolved path tail. */
|
|
35
|
+
const SENSITIVE_DIR_PAIRS = [
|
|
36
|
+
[".config", "gcloud"],
|
|
37
|
+
[".config", "gh"],
|
|
38
|
+
[".local", "share"],
|
|
39
|
+
] as const;
|
|
40
|
+
|
|
41
|
+
const SENSITIVE_BASENAMES = new Set([
|
|
42
|
+
".bash_history",
|
|
43
|
+
".bash_profile",
|
|
44
|
+
".bashrc",
|
|
45
|
+
".git-credentials",
|
|
46
|
+
".netrc",
|
|
47
|
+
".npmrc",
|
|
48
|
+
".pgpass",
|
|
49
|
+
".profile",
|
|
50
|
+
".pypirc",
|
|
51
|
+
".zprofile",
|
|
52
|
+
".zsh_history",
|
|
53
|
+
".zshrc",
|
|
54
|
+
"authorized_keys",
|
|
55
|
+
"credentials",
|
|
56
|
+
"id_dsa",
|
|
57
|
+
"id_ecdsa",
|
|
58
|
+
"id_ed25519",
|
|
59
|
+
"id_rsa",
|
|
60
|
+
"known_hosts",
|
|
61
|
+
"settings.xml",
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Filesystem roots that expose process state — `/proc/self/environ` hands over
|
|
66
|
+
* every environment variable, which defeats any path-based secret protection
|
|
67
|
+
* (review finding N23). Anything under these is sensitive regardless of name.
|
|
68
|
+
*/
|
|
69
|
+
const SENSITIVE_ROOTS = ["/proc", "/sys"];
|
|
70
|
+
|
|
71
|
+
function fold(value: string): string {
|
|
72
|
+
return value.trim().toLowerCase().replace(/\\/g, "/");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Whether a basename names a secret file (`.env`, `.env.local`, keys, …). */
|
|
76
|
+
export function isSensitiveBasename(name: string): boolean {
|
|
77
|
+
const folded = fold(name);
|
|
78
|
+
if (!folded) return false;
|
|
79
|
+
if (folded === ".env" || folded.startsWith(".env.")) return true;
|
|
80
|
+
if (SENSITIVE_BASENAMES.has(folded)) return true;
|
|
81
|
+
// Private keys and certificates by extension, plus the id_* key family.
|
|
82
|
+
if (/^id_(rsa|dsa|ecdsa|ed25519)(\.pub)?$/.test(folded)) return true;
|
|
83
|
+
if (/\.(pem|key|p12|pfx|jks|keystore)$/.test(folded)) return true;
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Whether a path (resolved or not) touches anything on the denylist. Callers
|
|
89
|
+
* pass resolved paths where they have them; the raw-token form is still checked
|
|
90
|
+
* so a bare `.kube` argument is caught before resolution.
|
|
91
|
+
*/
|
|
92
|
+
export function isSensitivePath(candidate: string): boolean {
|
|
93
|
+
const folded = fold(candidate);
|
|
94
|
+
if (!folded) return false;
|
|
95
|
+
|
|
96
|
+
for (const root of SENSITIVE_ROOTS) {
|
|
97
|
+
if (folded === root || folded.startsWith(`${root}/`)) return true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const segments = folded.split("/").filter(Boolean);
|
|
101
|
+
for (const segment of segments) {
|
|
102
|
+
if (SENSITIVE_DIR_SEGMENTS.has(segment)) return true;
|
|
103
|
+
}
|
|
104
|
+
for (const [first, second] of SENSITIVE_DIR_PAIRS) {
|
|
105
|
+
for (let i = 0; i + 1 < segments.length; i++) {
|
|
106
|
+
if (segments[i] === first && segments[i + 1] === second) return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return isSensitiveBasename(basename(folded));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Paths inside the project that are code-execution primitives: writing them
|
|
115
|
+
* plants code that runs later without any further approval (review finding
|
|
116
|
+
* N20 — `.git/hooks/pre-commit` fires on the next commit, `.git/config` can
|
|
117
|
+
* carry an `[alias]` shelling out). Containment inside the working directory
|
|
118
|
+
* says nothing about whether a write is safe, so these are called out as
|
|
119
|
+
* evidence for the classifier even when they are in-project.
|
|
120
|
+
*/
|
|
121
|
+
export function isExecutionPrimitivePath(candidate: string): boolean {
|
|
122
|
+
const folded = fold(candidate);
|
|
123
|
+
if (!folded) return false;
|
|
124
|
+
const segments = folded.split("/").filter(Boolean);
|
|
125
|
+
const hasGitDir = segments.includes(".git");
|
|
126
|
+
if (hasGitDir) {
|
|
127
|
+
const gitIndex = segments.lastIndexOf(".git");
|
|
128
|
+
const tail = segments.slice(gitIndex + 1);
|
|
129
|
+
if (tail[0] === "hooks" || tail[0] === "config") return true;
|
|
130
|
+
}
|
|
131
|
+
// Editor/tooling auto-run configuration.
|
|
132
|
+
if (segments.includes(".vscode") && /\.json$/.test(segments[segments.length - 1] ?? "")) return true;
|
|
133
|
+
if (/^(\.envrc|makefile|dockerfile|\.mvn)$/.test(segments[segments.length - 1] ?? "")) return true;
|
|
134
|
+
if (segments.includes(".mvn") || segments.includes(".github")) return true;
|
|
135
|
+
if (/^mvnw(\.cmd)?$/.test(segments[segments.length - 1] ?? "")) return true;
|
|
136
|
+
return false;
|
|
137
|
+
}
|