claudecode-omc 5.9.1 → 5.11.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/.local/settings/settings.json +8 -0
- package/.omc-curation/governance.json +3 -0
- package/.omc-curation/sources.lock.json +5 -0
- package/README.md +10 -1
- package/bundled/manifest.json +2 -1
- package/bundled/upstream/impeccable/.omc-source/bundle.json +20 -0
- package/bundled/upstream/impeccable/.omc-source/provenance.json +105 -0
- package/bundled/upstream/impeccable/agents/impeccable-manual-edit-applier.md +97 -0
- package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +168 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/adapt.md +311 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/animate.md +201 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/audit.md +133 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/bolder.md +113 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/brand.md +108 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/clarify.md +288 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/codex.md +105 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/colorize.md +257 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/craft.md +123 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/critique.md +767 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/delight.md +302 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/distill.md +111 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/document.md +429 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/extract.md +69 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/harden.md +347 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +88 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/init.md +172 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/interaction-design.md +189 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/layout.md +161 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +718 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/onboard.md +234 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/optimize.md +258 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/overdrive.md +130 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/polish.md +241 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/product.md +60 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/quieter.md +99 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/shape.md +165 -0
- package/bundled/upstream/impeccable/skills/impeccable/reference/typeset.md +279 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/command-metadata.json +94 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +280 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detect.mjs +21 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +1735 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4907 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +552 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1013 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/rules/checks.mjs +2671 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +574 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +473 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +1286 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/hook.mjs +61 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +835 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +126 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/completion.mjs +19 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/event-validation.mjs +137 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/session-store.mjs +289 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +11086 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-inject.mjs +583 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +379 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +1134 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-status.mjs +61 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +246 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/palette.mjs +633 -0
- package/bundled/upstream/impeccable/skills/impeccable/scripts/pin.mjs +214 -0
- package/package.json +1 -1
- package/src/cli/source.js +6 -0
- package/src/config/sources.js +15 -0
- package/src/merge/content-patch.js +4 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side DOM helpers for Impeccable live mode.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from live-browser.js so future browser script parts can share
|
|
5
|
+
* chrome mounting, lookup, focus, and picker helpers without depending on the
|
|
6
|
+
* full overlay UI bundle.
|
|
7
|
+
*/
|
|
8
|
+
(function (root) {
|
|
9
|
+
'use strict';
|
|
10
|
+
if (!root) return;
|
|
11
|
+
|
|
12
|
+
function createLiveBrowserDomHelpers({
|
|
13
|
+
prefix,
|
|
14
|
+
skipTags,
|
|
15
|
+
document: doc = root.document,
|
|
16
|
+
css = root.CSS,
|
|
17
|
+
crypto = root.crypto,
|
|
18
|
+
} = {}) {
|
|
19
|
+
if (!prefix) throw new Error('prefix required');
|
|
20
|
+
if (!doc) throw new Error('document required');
|
|
21
|
+
const tagsToSkip = skipTags || new Set();
|
|
22
|
+
|
|
23
|
+
function own(el) {
|
|
24
|
+
return el && (el.id?.startsWith(prefix) || el.closest?.('[id^="' + prefix + '"]'));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function pickable(el) {
|
|
28
|
+
if (!el || el.nodeType !== 1) return false;
|
|
29
|
+
if (tagsToSkip.has(String(el.tagName || '').toLowerCase())) return false;
|
|
30
|
+
if (own(el)) return false;
|
|
31
|
+
const r = el.getBoundingClientRect();
|
|
32
|
+
return r.width >= 20 && r.height >= 20;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function desc(el) {
|
|
36
|
+
if (!el) return '';
|
|
37
|
+
let s = el.tagName.toLowerCase();
|
|
38
|
+
if (el.id) s += '#' + el.id;
|
|
39
|
+
else if (el.classList.length) s += '.' + [...el.classList].slice(0, 2).join('.');
|
|
40
|
+
return s;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function rectIsUsableAnchor(rect) {
|
|
44
|
+
return !!rect && rect.width > 0.5 && rect.height > 0.5;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function makeFrozenAnchor(el) {
|
|
48
|
+
if (!el || !el.getBoundingClientRect) return null;
|
|
49
|
+
const r = el.getBoundingClientRect();
|
|
50
|
+
if (!rectIsUsableAnchor(r)) return null;
|
|
51
|
+
const rect = {
|
|
52
|
+
x: r.x, y: r.y,
|
|
53
|
+
top: r.top, left: r.left,
|
|
54
|
+
right: r.right, bottom: r.bottom,
|
|
55
|
+
width: r.width, height: r.height,
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
__impeccableFrozenAnchor: true,
|
|
59
|
+
tagName: el.tagName || 'DIV',
|
|
60
|
+
id: el.id || '',
|
|
61
|
+
classList: el.classList ? [...el.classList] : [],
|
|
62
|
+
hasAttribute: () => false,
|
|
63
|
+
getBoundingClientRect: () => rect,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function id8() {
|
|
68
|
+
if (crypto?.randomUUID) return crypto.randomUUID().replace(/-/g, '').slice(0, 8);
|
|
69
|
+
return (Math.random().toString(16).slice(2) + Date.now().toString(16)).slice(0, 8);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function cssId(id) {
|
|
73
|
+
if (css?.escape) return css.escape(id);
|
|
74
|
+
return String(id).replace(/([ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, '\\$1');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function liveUiRoot() {
|
|
78
|
+
const uiRoot = root.__IMPECCABLE_LIVE_UI_ROOT__;
|
|
79
|
+
if (uiRoot && typeof uiRoot.appendChild === 'function') return uiRoot;
|
|
80
|
+
return doc.body;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function uiAppend(el) {
|
|
84
|
+
liveUiRoot().appendChild(el);
|
|
85
|
+
return el;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function uiAppendStyle(styleEl) {
|
|
89
|
+
const uiRoot = liveUiRoot();
|
|
90
|
+
if (uiRoot && uiRoot !== doc.body) uiRoot.appendChild(styleEl);
|
|
91
|
+
else doc.head.appendChild(styleEl);
|
|
92
|
+
return styleEl;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function uiGetById(id) {
|
|
96
|
+
const uiRoot = liveUiRoot();
|
|
97
|
+
if (uiRoot?.getElementById) {
|
|
98
|
+
const found = uiRoot.getElementById(id);
|
|
99
|
+
if (found) return found;
|
|
100
|
+
}
|
|
101
|
+
if (uiRoot?.querySelector) {
|
|
102
|
+
const found = uiRoot.querySelector('#' + cssId(id));
|
|
103
|
+
if (found) return found;
|
|
104
|
+
}
|
|
105
|
+
return doc.getElementById(id);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function activeElementDeep() {
|
|
109
|
+
let active = doc.activeElement;
|
|
110
|
+
while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
|
|
111
|
+
return active;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function defangOutsideHandlers(rootEl, { setPointerEvents = true } = {}) {
|
|
115
|
+
if (!rootEl) return;
|
|
116
|
+
if (setPointerEvents) {
|
|
117
|
+
rootEl.style.setProperty('pointer-events', 'auto', 'important');
|
|
118
|
+
}
|
|
119
|
+
const stop = (e) => e.stopPropagation();
|
|
120
|
+
rootEl.addEventListener('pointerdown', stop);
|
|
121
|
+
rootEl.addEventListener('mousedown', stop);
|
|
122
|
+
rootEl.addEventListener('focusin', stop);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
own,
|
|
127
|
+
pickable,
|
|
128
|
+
desc,
|
|
129
|
+
rectIsUsableAnchor,
|
|
130
|
+
makeFrozenAnchor,
|
|
131
|
+
id8,
|
|
132
|
+
cssId,
|
|
133
|
+
liveUiRoot,
|
|
134
|
+
uiAppend,
|
|
135
|
+
uiAppendStyle,
|
|
136
|
+
uiGetById,
|
|
137
|
+
activeElementDeep,
|
|
138
|
+
defangOutsideHandlers,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
root.__IMPECCABLE_LIVE_DOM__ = {
|
|
143
|
+
version: 1,
|
|
144
|
+
createLiveBrowserDomHelpers,
|
|
145
|
+
};
|
|
146
|
+
})(typeof window !== 'undefined' ? window : globalThis);
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side durable session helpers for Impeccable live mode.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from live-browser.js so recovery state can be tested without
|
|
5
|
+
* booting the full overlay UI. Served before live-browser.js and attached to
|
|
6
|
+
* window.__IMPECCABLE_LIVE_SESSION__.
|
|
7
|
+
*/
|
|
8
|
+
(function (root) {
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
function createLiveBrowserSessionState({ prefix, storage, idFactory }) {
|
|
12
|
+
if (!prefix) throw new Error('prefix required');
|
|
13
|
+
const store = storage || root.localStorage;
|
|
14
|
+
const makeId = idFactory || function () { return Math.random().toString(16).slice(2, 10); };
|
|
15
|
+
const sessionKey = prefix + '-session';
|
|
16
|
+
const handledKey = sessionKey + '-handled';
|
|
17
|
+
const scrollKey = sessionKey + '-scroll';
|
|
18
|
+
let checkpointRevision = 0;
|
|
19
|
+
const owner = makeId();
|
|
20
|
+
|
|
21
|
+
function safeRead(key) {
|
|
22
|
+
try { return store.getItem(key); } catch { return null; }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function safeWrite(key, value) {
|
|
26
|
+
try { store.setItem(key, value); } catch { /* quota exceeded or private mode */ }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function safeRemove(key) {
|
|
30
|
+
try { store.removeItem(key); } catch { /* unavailable storage */ }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function loadSession() {
|
|
34
|
+
try {
|
|
35
|
+
const raw = safeRead(sessionKey);
|
|
36
|
+
if (!raw) return null;
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
if (Number.isInteger(parsed.checkpointRevision)) {
|
|
39
|
+
checkpointRevision = Math.max(checkpointRevision, parsed.checkpointRevision);
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
} catch { return null; }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function saveSession(session) {
|
|
46
|
+
if (!session || !session.id) return;
|
|
47
|
+
const payload = {
|
|
48
|
+
...session,
|
|
49
|
+
checkpointRevision,
|
|
50
|
+
};
|
|
51
|
+
safeWrite(sessionKey, JSON.stringify(payload));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function clearSession() {
|
|
55
|
+
safeRemove(sessionKey);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function nextCheckpointRevision() {
|
|
59
|
+
checkpointRevision += 1;
|
|
60
|
+
const existing = loadSession();
|
|
61
|
+
if (existing?.id) saveSession(existing);
|
|
62
|
+
return checkpointRevision;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function seedCheckpointRevision(value) {
|
|
66
|
+
if (Number.isInteger(value)) checkpointRevision = Math.max(checkpointRevision, value);
|
|
67
|
+
return checkpointRevision;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function currentCheckpointRevision() {
|
|
71
|
+
return checkpointRevision;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function markHandled(id) {
|
|
75
|
+
if (!id) return;
|
|
76
|
+
safeWrite(handledKey, id);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isHandled(id) {
|
|
80
|
+
return !!id && safeRead(handledKey) === id;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function clearHandled() {
|
|
84
|
+
safeRemove(handledKey);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function writeScrollY(y) {
|
|
88
|
+
safeWrite(scrollKey, String(y));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function readScrollY() {
|
|
92
|
+
const raw = safeRead(scrollKey);
|
|
93
|
+
if (raw == null) return null;
|
|
94
|
+
const n = parseFloat(raw);
|
|
95
|
+
return isFinite(n) ? n : null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function clearScrollY() {
|
|
99
|
+
safeRemove(scrollKey);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
owner,
|
|
104
|
+
sessionKey,
|
|
105
|
+
handledKey,
|
|
106
|
+
scrollKey,
|
|
107
|
+
saveSession,
|
|
108
|
+
loadSession,
|
|
109
|
+
clearSession,
|
|
110
|
+
nextCheckpointRevision,
|
|
111
|
+
seedCheckpointRevision,
|
|
112
|
+
currentCheckpointRevision,
|
|
113
|
+
markHandled,
|
|
114
|
+
isHandled,
|
|
115
|
+
clearHandled,
|
|
116
|
+
writeScrollY,
|
|
117
|
+
readScrollY,
|
|
118
|
+
clearScrollY,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
root.__IMPECCABLE_LIVE_SESSION__ = { createLiveBrowserSessionState };
|
|
123
|
+
})(typeof window !== 'undefined' ? window : globalThis);
|