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.
Files changed (153) hide show
  1. package/LICENSE +32 -0
  2. package/README.md +202 -0
  3. package/agents/explore.md +24 -0
  4. package/agents/general-purpose.md +21 -0
  5. package/agents/plan.md +22 -0
  6. package/docs/decisions/auto-mode.md +526 -0
  7. package/docs/decisions/branding.md +127 -0
  8. package/docs/decisions/code-review-remediation.md +106 -0
  9. package/docs/decisions/compaction.md +140 -0
  10. package/docs/decisions/distribution.md +133 -0
  11. package/docs/decisions/hooks.md +64 -0
  12. package/docs/decisions/lsp.md +58 -0
  13. package/docs/decisions/mcp.md +104 -0
  14. package/docs/decisions/memory-state.md +170 -0
  15. package/docs/decisions/model-policy.md +126 -0
  16. package/docs/decisions/modes.md +178 -0
  17. package/docs/decisions/skills-plugins.md +56 -0
  18. package/docs/decisions/subagents-workflows.md +225 -0
  19. package/docs/decisions/system-prompt.md +98 -0
  20. package/docs/decisions/tools.md +407 -0
  21. package/docs/decisions/tui.md +202 -0
  22. package/docs/decisions.md +148 -0
  23. package/extensions/ask-user/index.ts +124 -0
  24. package/extensions/ask-user/questions.ts +60 -0
  25. package/extensions/auto-mode/actions.ts +78 -0
  26. package/extensions/auto-mode/classifier.ts +388 -0
  27. package/extensions/auto-mode/config.ts +237 -0
  28. package/extensions/auto-mode/decision-log.ts +60 -0
  29. package/extensions/auto-mode/defaults.ts +65 -0
  30. package/extensions/auto-mode/instructions.ts +74 -0
  31. package/extensions/auto-mode/model-picker.ts +225 -0
  32. package/extensions/auto-mode/model-select.ts +178 -0
  33. package/extensions/auto-mode/paths.ts +109 -0
  34. package/extensions/auto-mode/pause.ts +96 -0
  35. package/extensions/auto-mode/prompt.ts +307 -0
  36. package/extensions/auto-mode/rules.ts +96 -0
  37. package/extensions/auto-mode/safety-floor.ts +100 -0
  38. package/extensions/auto-mode/sensitive.ts +137 -0
  39. package/extensions/auto-mode/shell-analysis.ts +702 -0
  40. package/extensions/background/index.ts +405 -0
  41. package/extensions/background/registry.ts +81 -0
  42. package/extensions/background/wakeup.ts +41 -0
  43. package/extensions/bash/background.ts +136 -0
  44. package/extensions/bash/index.ts +149 -0
  45. package/extensions/branding/assistant-marker.ts +53 -0
  46. package/extensions/branding/index.ts +366 -0
  47. package/extensions/branding/prompt-editor.ts +42 -0
  48. package/extensions/branding/prompt-marker.ts +29 -0
  49. package/extensions/branding/startup.ts +152 -0
  50. package/extensions/claude-compat/index.ts +50 -0
  51. package/extensions/claude-context/index.ts +79 -0
  52. package/extensions/compaction/index.ts +231 -0
  53. package/extensions/compaction/prompt.ts +191 -0
  54. package/extensions/context-management/index.ts +147 -0
  55. package/extensions/effort/index.ts +216 -0
  56. package/extensions/effort/slider.ts +253 -0
  57. package/extensions/exit/index.ts +28 -0
  58. package/extensions/file-tracker/index.ts +103 -0
  59. package/extensions/file-tracker/tracker.ts +145 -0
  60. package/extensions/hooks/debug.ts +53 -0
  61. package/extensions/hooks/executor.ts +132 -0
  62. package/extensions/hooks/index.ts +310 -0
  63. package/extensions/hooks/matcher.ts +72 -0
  64. package/extensions/hooks/plugin-hooks.ts +79 -0
  65. package/extensions/hooks/protocol.ts +151 -0
  66. package/extensions/hooks/settings.ts +163 -0
  67. package/extensions/hooks/trust.ts +151 -0
  68. package/extensions/lib/branch-restore.ts +35 -0
  69. package/extensions/lib/claude-context.ts +148 -0
  70. package/extensions/lib/deferred.ts +119 -0
  71. package/extensions/lib/git.ts +14 -0
  72. package/extensions/lib/memory.ts +219 -0
  73. package/extensions/lib/model-policy.ts +436 -0
  74. package/extensions/lib/model-tier.ts +99 -0
  75. package/extensions/lib/notifications.ts +18 -0
  76. package/extensions/lib/paths.ts +26 -0
  77. package/extensions/lib/per-cwd.ts +21 -0
  78. package/extensions/lib/persisted-output.ts +70 -0
  79. package/extensions/lib/pi-version.ts +54 -0
  80. package/extensions/lib/plugins.ts +227 -0
  81. package/extensions/lib/reminders.ts +212 -0
  82. package/extensions/lib/scratchpad.ts +68 -0
  83. package/extensions/lib/tui-render.ts +522 -0
  84. package/extensions/lsp/client.ts +278 -0
  85. package/extensions/lsp/format.ts +46 -0
  86. package/extensions/lsp/index.ts +193 -0
  87. package/extensions/lsp/protocol.ts +64 -0
  88. package/extensions/lsp/servers.ts +79 -0
  89. package/extensions/mcp/client.ts +205 -0
  90. package/extensions/mcp/config.ts +199 -0
  91. package/extensions/mcp/index.ts +373 -0
  92. package/extensions/mcp/schema.ts +161 -0
  93. package/extensions/memory/index.ts +90 -0
  94. package/extensions/notebook/index.ts +77 -0
  95. package/extensions/notebook/notebook.ts +108 -0
  96. package/extensions/permissions/index.ts +876 -0
  97. package/extensions/permissions/matcher.ts +455 -0
  98. package/extensions/permissions/modes.ts +107 -0
  99. package/extensions/permissions/protected-paths.ts +125 -0
  100. package/extensions/permissions/settings.ts +98 -0
  101. package/extensions/plan-mode/index.ts +209 -0
  102. package/extensions/plan-mode/reminder.ts +33 -0
  103. package/extensions/plan-mode/slug.ts +28 -0
  104. package/extensions/plan-mode/viewer.ts +124 -0
  105. package/extensions/plugins/index.ts +115 -0
  106. package/extensions/plugins/template.ts +42 -0
  107. package/extensions/search-tools/index.ts +0 -0
  108. package/extensions/search-tools/tools.ts +24 -0
  109. package/extensions/skill/index.ts +170 -0
  110. package/extensions/subagents/agents.ts +126 -0
  111. package/extensions/subagents/child.ts +414 -0
  112. package/extensions/subagents/default-model.ts +122 -0
  113. package/extensions/subagents/index.ts +1119 -0
  114. package/extensions/subagents/model-select.ts +346 -0
  115. package/extensions/subagents/rpc-turns.ts +123 -0
  116. package/extensions/subagents/runs.ts +93 -0
  117. package/extensions/subagents/usage.ts +53 -0
  118. package/extensions/subagents/worktree.ts +69 -0
  119. package/extensions/system-prompt/environment.ts +35 -0
  120. package/extensions/system-prompt/index.ts +54 -0
  121. package/extensions/system-prompt/template.ts +103 -0
  122. package/extensions/system-prompt/tiers/common.ts +63 -0
  123. package/extensions/system-prompt/tiers/frontier.ts +24 -0
  124. package/extensions/system-prompt/tiers/low.ts +71 -0
  125. package/extensions/system-prompt/tiers/mid.ts +56 -0
  126. package/extensions/system-reminder/index.ts +37 -0
  127. package/extensions/tasks/index.ts +140 -0
  128. package/extensions/tasks/store.ts +174 -0
  129. package/extensions/todo/index.ts +133 -0
  130. package/extensions/tool-search/index.ts +168 -0
  131. package/extensions/tool-style/index.ts +84 -0
  132. package/extensions/web/index.ts +43 -0
  133. package/extensions/web-fetch/extract.ts +139 -0
  134. package/extensions/web-fetch/index.ts +291 -0
  135. package/extensions/web-fetch/summarize.ts +78 -0
  136. package/extensions/workflow/agent-session.ts +368 -0
  137. package/extensions/workflow/globals.ts +251 -0
  138. package/extensions/workflow/index.ts +364 -0
  139. package/extensions/workflow/journal.ts +75 -0
  140. package/extensions/workflow/permission-gate.ts +71 -0
  141. package/extensions/workflow/run-manager.ts +306 -0
  142. package/extensions/workflow/saved-workflows.ts +45 -0
  143. package/extensions/workflow/script-source.ts +201 -0
  144. package/extensions/workflow/types.ts +99 -0
  145. package/extensions/workflow/vm-runtime.ts +31 -0
  146. package/extensions/workflow/widget.ts +56 -0
  147. package/extensions/worktree/index.ts +266 -0
  148. package/extensions/worktree/rewrite.ts +59 -0
  149. package/package.json +101 -0
  150. package/themes/one-code-light.json +76 -0
  151. package/themes/one-code.json +76 -0
  152. package/types/app.d.ts +5 -0
  153. 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
+ }