patchwork-os 1.2.0-beta.2.canary.813 → 1.2.0-beta.2.canary.815
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/dist/riskTier.d.ts +10 -0
- package/dist/riskTier.js +43 -1
- package/dist/riskTier.js.map +1 -1
- package/package.json +1 -1
package/dist/riskTier.d.ts
CHANGED
|
@@ -25,6 +25,16 @@
|
|
|
25
25
|
export type RiskTier = "low" | "medium" | "high";
|
|
26
26
|
/** CC-native behavior class. Prefer this over RiskTier for new code. */
|
|
27
27
|
export type ToolBehavior = "readOnly" | "localWrite" | "shellExec" | "externalEffect";
|
|
28
|
+
/**
|
|
29
|
+
* True exactly when `/search[A-Z].*Replace/i` would match, in one linear pass.
|
|
30
|
+
* That regex was a polynomial-ReDoS sink (`.*` backtracks against every later
|
|
31
|
+
* position). Semantics kept deliberately: ASCII-only case folding (`/i`
|
|
32
|
+
* without `u` never folds a non-ASCII char to ASCII, so `toLowerCase()` would
|
|
33
|
+
* be wrong for e.g. the Kelvin sign), and `.` does not cross a line
|
|
34
|
+
* terminator. Pinned against a brute-force oracle in
|
|
35
|
+
* `riskTier.searchReplace.test.ts`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function matchesSearchReplace(name: string): boolean;
|
|
28
38
|
/**
|
|
29
39
|
* Infer a risk tier from the tool name when the hardcoded map has no entry.
|
|
30
40
|
* Lets us classify newly-added tools without maintaining a parallel list.
|
package/dist/riskTier.js
CHANGED
|
@@ -105,6 +105,48 @@ const TIER_MAP = {
|
|
|
105
105
|
launchQuickTask: "high", // thin wrapper around runClaudeTask/resumeClaudeTask
|
|
106
106
|
cancelClaudeTask: "high", // sibling of runClaudeTask/resumeClaudeTask, kept consistent with them
|
|
107
107
|
};
|
|
108
|
+
const LINE_TERMINATORS = new Set([0x0a, 0x0d, 0x2028, 0x2029]);
|
|
109
|
+
/** Case-insensitive match of an ASCII-lowercase `word` at `at`, ASCII folding only. */
|
|
110
|
+
function asciiEqualsAt(s, at, word) {
|
|
111
|
+
if (at + word.length > s.length)
|
|
112
|
+
return false;
|
|
113
|
+
for (let k = 0; k < word.length; k++) {
|
|
114
|
+
let c = s.charCodeAt(at + k);
|
|
115
|
+
if (c >= 65 && c <= 90)
|
|
116
|
+
c += 32;
|
|
117
|
+
if (c !== word.charCodeAt(k))
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* True exactly when `/search[A-Z].*Replace/i` would match, in one linear pass.
|
|
124
|
+
* That regex was a polynomial-ReDoS sink (`.*` backtracks against every later
|
|
125
|
+
* position). Semantics kept deliberately: ASCII-only case folding (`/i`
|
|
126
|
+
* without `u` never folds a non-ASCII char to ASCII, so `toLowerCase()` would
|
|
127
|
+
* be wrong for e.g. the Kelvin sign), and `.` does not cross a line
|
|
128
|
+
* terminator. Pinned against a brute-force oracle in
|
|
129
|
+
* `riskTier.searchReplace.test.ts`.
|
|
130
|
+
*/
|
|
131
|
+
export function matchesSearchReplace(name) {
|
|
132
|
+
let armed = false;
|
|
133
|
+
for (let p = 0; p < name.length; p++) {
|
|
134
|
+
if (LINE_TERMINATORS.has(name.charCodeAt(p))) {
|
|
135
|
+
armed = false;
|
|
136
|
+
}
|
|
137
|
+
else if (!armed) {
|
|
138
|
+
const letter = name.charCodeAt(p + 6) | 32;
|
|
139
|
+
if (asciiEqualsAt(name, p, "search") && letter >= 97 && letter <= 122) {
|
|
140
|
+
armed = true;
|
|
141
|
+
p += 6; // "replace" may start only after the letter
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (asciiEqualsAt(name, p, "replace")) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
108
150
|
/**
|
|
109
151
|
* Infer a risk tier from the tool name when the hardcoded map has no entry.
|
|
110
152
|
* Lets us classify newly-added tools without maintaining a parallel list.
|
|
@@ -124,7 +166,7 @@ export function inferTierFromName(toolName) {
|
|
|
124
166
|
// Local writes
|
|
125
167
|
if (/^(edit|write|create|save|format|apply|fix|refactor|rename|organize|stage|commit|add|stash)[A-Z]/.test(n) ||
|
|
126
168
|
/(^set|^update|^replace)[A-Z]/.test(n) ||
|
|
127
|
-
|
|
169
|
+
matchesSearchReplace(n))
|
|
128
170
|
return "medium";
|
|
129
171
|
// Reads
|
|
130
172
|
if (/^(get|find|search|list|read|describe|explain|goTo|hover|preview|capture|explore|resolve|probe|check|lookup|parse|classify|compute|compare|render|validate|ping|ready|detect|watch)/.test(n) ||
|
package/dist/riskTier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"riskTier.js","sourceRoot":"","sources":["../src/riskTier.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"riskTier.js","sourceRoot":"","sources":["../src/riskTier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,MAAM,kBAAkB,GAAmC;IACzD,GAAG,EAAE,UAAU;IACf,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,gBAAgB;CACvB,CAAC;AAEF,MAAM,QAAQ,GAA6B;IACzC,6EAA6E;IAC7E,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;IACrB,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,eAAe,EAAE,KAAK;IACtB,sBAAsB,EAAE,KAAK;IAC7B,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,kBAAkB,EAAE,KAAK;IACzB,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,eAAe,EAAE,KAAK;IACtB,mBAAmB,EAAE,KAAK;IAC1B,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,KAAK;IAClB,iBAAiB,EAAE,KAAK;IACxB,cAAc,EAAE,KAAK;IACrB,iBAAiB,EAAE,KAAK;IACxB,QAAQ,EAAE,KAAK;IAEf,6EAA6E;IAC7E,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,QAAQ;IACtB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,QAAQ;IACvB,eAAe,EAAE,QAAQ;IACzB,YAAY,EAAE,QAAQ;IACtB,uBAAuB,EAAE,QAAQ;IACjC,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,QAAQ;IACxB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,QAAQ;IAErB,6EAA6E;IAC7E,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,cAAc,EAAE,MAAM;IACtB,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,kBAAkB,EAAE,MAAM;IAC1B,iBAAiB,EAAE,MAAM;IACzB,kBAAkB,EAAE,MAAM;IAC1B,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,MAAM;IACrB,mBAAmB,EAAE,MAAM;IAC3B,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;IAClB,eAAe,EAAE,MAAM;IACvB,oBAAoB,EAAE,MAAM;IAC5B,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,MAAM;IAC1B,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,2DAA2D;IAC3D,aAAa,EAAE,MAAM,EAAE,uFAAuF;IAC9G,cAAc,EAAE,MAAM,EAAE,4DAA4D;IACpF,eAAe,EAAE,MAAM,EAAE,qDAAqD;IAC9E,gBAAgB,EAAE,MAAM,EAAE,uEAAuE;CAClG,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,uFAAuF;AACvF,SAAS,aAAa,CAAC,CAAS,EAAE,EAAU,EAAE,IAAY;IACxD,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YAAE,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3C,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBACtE,KAAK,GAAG,IAAI,CAAC;gBACb,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;YACtD,CAAC;QACH,CAAC;aAAM,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,CAAC,GAAG,QAAQ,CAAC;IACnB,iCAAiC;IACjC,IACE,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,KAAK,YAAY;QAClB,kEAAkE,CAAC,IAAI,CACrE,CAAC,CACF;QACD,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,KAAK,iBAAiB;QAEvB,OAAO,MAAM,CAAC;IAEhB,eAAe;IACf,IACE,iGAAiG,CAAC,IAAI,CACpG,CAAC,CACF;QACD,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,oBAAoB,CAAC,CAAC,CAAC;QAEvB,OAAO,QAAQ,CAAC;IAElB,QAAQ;IACR,IACE,oLAAoL,CAAC,IAAI,CACvL,CAAC,CACF;QACD,CAAC,KAAK,eAAe;QAErB,OAAO,KAAK,CAAC;IAEf,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,oBAAoB,GACxB,yHAAyH,CAAC;AAC5H,MAAM,qBAAqB,GACzB,sLAAsL,CAAC;AAEzL;;;;;;;;GAQG;AACH,MAAM,yBAAyB,GAA6B;IAC1D,qBAAqB,EAAE,MAAM,EAAE,+BAA+B;IAC9D,6EAA6E;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,+BAA+B,EAAE,MAAM;IACvC,4BAA4B,EAAE,MAAM;IACpC,sBAAsB,EAAE,MAAM;IAC9B,8BAA8B,EAAE,MAAM;IACtC,sBAAsB,EAAE,MAAM;CAC/B,CAAC;AAEF,SAAS,yBAAyB,CAAC,EAAU;IAC3C,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtD,OAAO,QAAQ,CAAC,CAAC,sCAAsC;AACzD,CAAC;AAUD,IAAI,YAAY,GAAwB,IAAI,CAAC;AAE7C,MAAM,UAAU,oBAAoB,CAAC,EAAuB;IAC1D,YAAY,GAAG,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,4CAA4C;IAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,sEAAsE;IACtE,yEAAyE;IACzE,uDAAuD;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtC,CAAC,CAAE,QAAQ,CAAC,QAAQ,CAAc;QAClC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,SAAqB,CAAC,MAAM,CAAC;IAE7B,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAA6B,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "1.2.0-beta.2.canary.
|
|
3
|
+
"version": "1.2.0-beta.2.canary.815",
|
|
4
4
|
"description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|