sneakoscope 3.1.5 → 3.1.7
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/README.md +9 -37
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/crates/sks-core/src/main.rs +1 -1
- package/dist/.sks-build-stamp.json +4 -4
- package/dist/bin/sks.js +1 -1
- package/dist/cli/command-registry.js +1 -2
- package/dist/commands/codex-app.js +20 -12
- package/dist/commands/codex-native.js +84 -0
- package/dist/commands/doctor.js +90 -2
- package/dist/core/codex-app/codex-agent-role-sync.js +15 -5
- package/dist/core/codex-app/codex-app-execution-profile.js +38 -16
- package/dist/core/codex-app/codex-app-harness-matrix.js +4 -117
- package/dist/core/codex-app/codex-hook-lifecycle.js +4 -1
- package/dist/core/codex-app/codex-init-deep.js +66 -4
- package/dist/core/codex-app/codex-skill-sync.js +13 -8
- package/dist/core/codex-control/codex-0138-capability.js +5 -2
- package/dist/core/codex-native/codex-native-capability-cache.js +21 -0
- package/dist/core/codex-native/codex-native-feature-broker.js +250 -0
- package/dist/core/codex-native/codex-native-feature-matrix.js +31 -0
- package/dist/core/codex-native/codex-native-harness-compat.js +54 -0
- package/dist/core/{codex-app/lazycodex-interop-policy.js → codex-native/codex-native-interop-policy.js} +13 -15
- package/dist/core/codex-native/codex-native-invocation-router.js +112 -0
- package/dist/core/codex-native/codex-native-pattern-analysis.js +68 -0
- package/dist/core/codex-native/codex-native-reference-cache.js +98 -0
- package/dist/core/codex-native/codex-native-reference-evidence.js +2 -0
- package/dist/core/codex-native/codex-native-reference-source.js +149 -0
- package/dist/core/codex-native/codex-native-rename-map.js +25 -0
- package/dist/core/codex-native/codex-native-repair-transaction.js +150 -0
- package/dist/core/codex-plugins/codex-plugin-json.js +5 -2
- package/dist/core/commands/mad-sks-command.js +16 -0
- package/dist/core/feature-fixtures.js +2 -4
- package/dist/core/feature-registry.js +1 -1
- package/dist/core/fsx.js +1 -1
- package/dist/core/image/image-artifact-path-contract.js +18 -1
- package/dist/core/loops/loop-owner-inference.js +3 -0
- package/dist/core/loops/loop-planner.js +8 -2
- package/dist/core/loops/loop-worker-prompts.js +2 -0
- package/dist/core/loops/loop-worker-runtime.js +42 -7
- package/dist/core/qa-loop.js +24 -1
- package/dist/core/research.js +36 -3
- package/dist/core/routes.js +2 -3
- package/dist/core/version.js +1 -1
- package/dist/scripts/codex-native-runtime-e2e-fixture.js +75 -0
- package/dist/scripts/loop-worker-fixture-child.js +2 -1
- package/dist/scripts/sks-3-1-4-directive-check-lib.js +1 -30
- package/dist/scripts/sks-3-1-5-directive-check-lib.js +4 -33
- package/dist/scripts/sks-3-1-6-directive-check-lib.js +522 -0
- package/dist/scripts/sks-3-1-7-directive-check-lib.js +58 -0
- package/package.json +44 -13
- package/dist/cli/hermes-command.js +0 -99
- package/dist/cli/openclaw-command.js +0 -83
- package/dist/commands/hermes.js +0 -5
- package/dist/commands/openclaw.js +0 -3
- package/dist/core/codex-app/lazycodex-analysis.js +0 -72
- package/dist/core/codex-app/lazycodex-live-analyzer.js +0 -98
- package/dist/core/hermes.js +0 -192
- package/dist/core/openclaw.js +0 -171
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "ㅅㅋㅅ",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.7",
|
|
5
5
|
"description": "Sneakoscope Codex: fast proof-first Codex trust layer with image-based Voxel TriWiki.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"agent:janitor": "node ./dist/scripts/agent-janitor-check.js",
|
|
56
56
|
"agent:multi-project-isolation": "node ./dist/scripts/agent-multi-project-isolation-check.js",
|
|
57
57
|
"verification:parallel-engine": "node ./dist/scripts/parallel-verification-engine-check.js",
|
|
58
|
-
"release:check:parallel": "npm run build --silent && node ./dist/scripts/release-check
|
|
58
|
+
"release:check:parallel": "npm run build --silent && node ./dist/scripts/release-parallel-check.js && node ./dist/scripts/release-check-stamp.js write",
|
|
59
59
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
60
60
|
"typecheck:suppressions": "node ./dist/scripts/check-ts-suppressions.js",
|
|
61
61
|
"typescript:migration-report": "node ./dist/scripts/typescript-migration-report.js",
|
|
@@ -819,7 +819,6 @@
|
|
|
819
819
|
"mad:zellij-self-heal-blackbox": "node ./dist/scripts/mad-zellij-self-heal-blackbox.js",
|
|
820
820
|
"mad:zellij-headless-fallback-blackbox": "node ./dist/scripts/mad-zellij-headless-fallback-blackbox.js",
|
|
821
821
|
"mad:zellij-no-contradictory-output": "node ./dist/scripts/mad-zellij-no-contradictory-output-check.js",
|
|
822
|
-
"lazycodex:analysis": "node ./dist/scripts/lazycodex-analysis-check.js",
|
|
823
822
|
"codex-app:harness-matrix": "node ./dist/scripts/codex-app-harness-matrix-check.js",
|
|
824
823
|
"doctor:codex-app-harness": "node ./dist/scripts/doctor-codex-app-harness-check.js",
|
|
825
824
|
"codex-app:skill-sync": "node ./dist/scripts/codex-skill-sync-check.js",
|
|
@@ -829,9 +828,7 @@
|
|
|
829
828
|
"codex-app:hook-lifecycle": "node ./dist/scripts/codex-hook-lifecycle-check.js",
|
|
830
829
|
"loop:continuation-enforcer": "node ./dist/scripts/loop-continuation-enforcer-check.js",
|
|
831
830
|
"codex-app:execution-profile": "node ./dist/scripts/codex-app-execution-profile-check.js",
|
|
832
|
-
"lazycodex:interop-policy": "node ./dist/scripts/lazycodex-interop-policy-check.js",
|
|
833
831
|
"codex-app:harness-blackbox": "node ./dist/scripts/codex-app-harness-blackbox.js",
|
|
834
|
-
"lazycodex:pattern-adoption-blackbox": "node ./dist/scripts/lazycodex-pattern-adoption-blackbox.js",
|
|
835
832
|
"codex-app:skill-agent-blackbox": "node ./dist/scripts/codex-app-skill-agent-blackbox.js",
|
|
836
833
|
"lint:no-ts-nocheck-core": "node ./dist/scripts/no-ts-nocheck-core-check.js",
|
|
837
834
|
"codex-app:type-safety": "node ./dist/scripts/codex-app-type-safety-check.js",
|
|
@@ -845,9 +842,6 @@
|
|
|
845
842
|
"codex-app:agent-type-probe": "node ./dist/scripts/codex-agent-type-probe-check.js",
|
|
846
843
|
"codex-app:agent-type-routing": "node ./dist/scripts/codex-agent-type-routing-check.js",
|
|
847
844
|
"codex-app:agent-type-blackbox": "node ./dist/scripts/codex-agent-type-blackbox.js",
|
|
848
|
-
"lazycodex:live-analysis": "node ./dist/scripts/lazycodex-live-analysis-check.js",
|
|
849
|
-
"lazycodex:analysis-with-evidence": "node ./dist/scripts/lazycodex-analysis-with-evidence-check.js",
|
|
850
|
-
"lazycodex:live-analysis-blackbox": "node ./dist/scripts/lazycodex-live-analysis-blackbox.js",
|
|
851
845
|
"codex-app:init-deep-managed-agents": "node ./dist/scripts/codex-init-deep-managed-agents-check.js",
|
|
852
846
|
"loop:planner-project-memory-deep": "node ./dist/scripts/loop-planner-project-memory-deep-check.js",
|
|
853
847
|
"codex-app:init-deep-directory-local-blackbox": "node ./dist/scripts/codex-init-deep-directory-local-blackbox.js",
|
|
@@ -856,7 +850,47 @@
|
|
|
856
850
|
"research:execution-profile-routing": "node ./dist/scripts/research-execution-profile-routing-check.js",
|
|
857
851
|
"pipeline:execution-profile-routing-blackbox": "node ./dist/scripts/pipeline-execution-profile-routing-blackbox.js",
|
|
858
852
|
"codex-app:skill-rich-content": "node ./dist/scripts/codex-skill-rich-content-check.js",
|
|
859
|
-
"codex-app:agent-role-rich-content": "node ./dist/scripts/codex-agent-role-rich-content-check.js"
|
|
853
|
+
"codex-app:agent-role-rich-content": "node ./dist/scripts/codex-agent-role-rich-content-check.js",
|
|
854
|
+
"brand-neutrality:rename-map": "node ./dist/scripts/brand-neutrality-rename-map-check.js",
|
|
855
|
+
"brand-neutrality:zero-leakage": "node ./dist/scripts/brand-neutrality-zero-leakage-check.js",
|
|
856
|
+
"brand-neutrality:zero-leakage-blackbox": "node ./dist/scripts/brand-neutrality-zero-leakage-blackbox.js",
|
|
857
|
+
"brand-neutrality:generated-artifacts": "node ./dist/scripts/brand-neutrality-generated-artifacts-check.js",
|
|
858
|
+
"docs:brand-neutrality": "node ./dist/scripts/docs-brand-neutrality-check.js",
|
|
859
|
+
"codex-native:feature-broker": "node ./dist/scripts/codex-native-feature-broker-check.js",
|
|
860
|
+
"codex-native:harness-compat": "node ./dist/scripts/codex-native-harness-compat-check.js",
|
|
861
|
+
"codex-native:invocation-defaults": "node ./dist/scripts/codex-native-invocation-defaults-check.js",
|
|
862
|
+
"codex-native:invocation-router": "node ./dist/scripts/codex-native-invocation-router-check.js",
|
|
863
|
+
"codex-native:route-map": "node ./dist/scripts/codex-native-route-map-check.js",
|
|
864
|
+
"pipeline:codex-native-loop-routing": "node ./dist/scripts/pipeline-codex-native-loop-routing-check.js",
|
|
865
|
+
"pipeline:codex-native-qa-routing": "node ./dist/scripts/pipeline-codex-native-qa-routing-check.js",
|
|
866
|
+
"pipeline:codex-native-research-routing": "node ./dist/scripts/pipeline-codex-native-research-routing-check.js",
|
|
867
|
+
"pipeline:codex-native-image-routing": "node ./dist/scripts/pipeline-codex-native-image-routing-check.js",
|
|
868
|
+
"pipeline:codex-native-doctor-mad-routing": "node ./dist/scripts/pipeline-codex-native-doctor-mad-routing-check.js",
|
|
869
|
+
"pipeline:codex-native-loop-routing-real-blackbox": "node ./dist/scripts/pipeline-codex-native-loop-routing-real-blackbox.js",
|
|
870
|
+
"pipeline:codex-native-qa-routing-real-blackbox": "node ./dist/scripts/pipeline-codex-native-qa-routing-real-blackbox.js",
|
|
871
|
+
"pipeline:codex-native-research-routing-real-blackbox": "node ./dist/scripts/pipeline-codex-native-research-routing-real-blackbox.js",
|
|
872
|
+
"pipeline:codex-native-image-routing-real-blackbox": "node ./dist/scripts/pipeline-codex-native-image-routing-real-blackbox.js",
|
|
873
|
+
"pipeline:codex-native-doctor-mad-routing-real-blackbox": "node ./dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js",
|
|
874
|
+
"codex-native:pattern-analysis": "node ./dist/scripts/codex-native-pattern-analysis-check.js",
|
|
875
|
+
"codex-native:reference-cache": "node ./dist/scripts/codex-native-reference-cache-check.js",
|
|
876
|
+
"codex-native:reference-cache-blackbox": "node ./dist/scripts/codex-native-reference-cache-blackbox.js",
|
|
877
|
+
"codex-native:reference-evidence": "node ./dist/scripts/codex-native-reference-evidence-check.js",
|
|
878
|
+
"codex-native:pattern-analysis-blackbox": "node ./dist/scripts/codex-native-pattern-analysis-blackbox.js",
|
|
879
|
+
"codex-native:interop-policy": "node ./dist/scripts/codex-native-interop-policy-check.js",
|
|
880
|
+
"codex-native:skill-content": "node ./dist/scripts/codex-native-skill-content-check.js",
|
|
881
|
+
"codex-native:agent-role-content": "node ./dist/scripts/codex-native-agent-role-content-check.js",
|
|
882
|
+
"codex-native:hook-lifecycle-proof": "node ./dist/scripts/codex-native-hook-lifecycle-proof-check.js",
|
|
883
|
+
"codex-native:broker-read-only": "node ./dist/scripts/codex-native-broker-read-only-check.js",
|
|
884
|
+
"codex-native:repair-transaction": "node ./dist/scripts/codex-native-repair-transaction-check.js",
|
|
885
|
+
"codex-native:read-repair-split-blackbox": "node ./dist/scripts/codex-native-read-repair-split-blackbox.js",
|
|
886
|
+
"init-deep:backup-retention": "node ./dist/scripts/init-deep-backup-retention-check.js",
|
|
887
|
+
"init-deep:memory-scope-safety": "node ./dist/scripts/init-deep-memory-scope-safety-check.js",
|
|
888
|
+
"release-scripts:type-safe": "node ./dist/scripts/release-script-type-safety-check.js",
|
|
889
|
+
"lint:no-ts-nocheck-release-scripts": "node ./dist/scripts/no-ts-nocheck-release-scripts-check.js",
|
|
890
|
+
"doctor:codex-native-readiness-ux": "node ./dist/scripts/doctor-codex-native-readiness-ux-check.js",
|
|
891
|
+
"doctor:codex-native-repair-actions": "node ./dist/scripts/doctor-codex-native-repair-actions-check.js",
|
|
892
|
+
"codex-native:feature-broker-blackbox": "node ./dist/scripts/codex-native-feature-broker-blackbox.js",
|
|
893
|
+
"pipeline:codex-native-e2e-blackbox": "node ./dist/scripts/pipeline-codex-native-e2e-blackbox.js"
|
|
860
894
|
},
|
|
861
895
|
"keywords": [
|
|
862
896
|
"sneakoscope",
|
|
@@ -864,10 +898,7 @@
|
|
|
864
898
|
"sks",
|
|
865
899
|
"openai",
|
|
866
900
|
"openai-codex",
|
|
867
|
-
"
|
|
868
|
-
"openclaw-skill",
|
|
869
|
-
"hermes-agent",
|
|
870
|
-
"hermes-skill",
|
|
901
|
+
"codex-native",
|
|
871
902
|
"cli",
|
|
872
903
|
"developer-tools",
|
|
873
904
|
"ai-coding",
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { HERMES_SKILL_NAME, buildHermesSkillFiles, defaultHermesSkillDir, installHermesSkill } from '../core/hermes.js';
|
|
3
|
-
import { exists } from '../core/fsx.js';
|
|
4
|
-
const flag = (args, name) => args.includes(name);
|
|
5
|
-
function readFlagValue(args, name, fallback) {
|
|
6
|
-
const i = args.indexOf(name);
|
|
7
|
-
return i >= 0 && args[i + 1] ? args[i + 1] : fallback;
|
|
8
|
-
}
|
|
9
|
-
function positionalArgs(args = []) {
|
|
10
|
-
const out = [];
|
|
11
|
-
const valueFlags = new Set(['--dir']);
|
|
12
|
-
for (let i = 0; i < args.length; i++) {
|
|
13
|
-
const arg = String(args[i]);
|
|
14
|
-
if (valueFlags.has(arg)) {
|
|
15
|
-
i++;
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
if (!arg.startsWith('--'))
|
|
19
|
-
out.push(arg);
|
|
20
|
-
}
|
|
21
|
-
return out;
|
|
22
|
-
}
|
|
23
|
-
export async function hermesCommand(args = []) {
|
|
24
|
-
const action = args[0] || 'help';
|
|
25
|
-
const targetDir = readFlagValue(args, '--dir', defaultHermesSkillDir());
|
|
26
|
-
const resultOptions = {
|
|
27
|
-
targetDir,
|
|
28
|
-
force: flag(args, '--force'),
|
|
29
|
-
dryRun: flag(args, '--dry-run')
|
|
30
|
-
};
|
|
31
|
-
if (action === 'path') {
|
|
32
|
-
const result = { skill: HERMES_SKILL_NAME, target_dir: path.resolve(targetDir) };
|
|
33
|
-
if (flag(args, '--json'))
|
|
34
|
-
return console.log(JSON.stringify(result, null, 2));
|
|
35
|
-
console.log(result.target_dir);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (action === 'status') {
|
|
39
|
-
const files = buildHermesSkillFiles();
|
|
40
|
-
const target = path.resolve(targetDir);
|
|
41
|
-
const installed = await exists(path.join(target, 'SKILL.md'));
|
|
42
|
-
const result = {
|
|
43
|
-
schema: 'sks.hermes-skill-status.v1',
|
|
44
|
-
ok: true,
|
|
45
|
-
skill: HERMES_SKILL_NAME,
|
|
46
|
-
target_dir: target,
|
|
47
|
-
installed,
|
|
48
|
-
expected_files: Object.keys(files),
|
|
49
|
-
env_mode: 'SKS_HERMES=1',
|
|
50
|
-
slash_command: `/${HERMES_SKILL_NAME}`
|
|
51
|
-
};
|
|
52
|
-
if (flag(args, '--json'))
|
|
53
|
-
return console.log(JSON.stringify(result, null, 2));
|
|
54
|
-
console.log(`Hermes skill: ${installed ? 'installed' : 'not installed'} ${target}`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (action === 'print') {
|
|
58
|
-
const files = buildHermesSkillFiles();
|
|
59
|
-
const file = (positionalArgs(args.slice(1))[0] || 'SKILL.md');
|
|
60
|
-
if (!files[file]) {
|
|
61
|
-
console.error(`Unknown Hermes skill file: ${file}`);
|
|
62
|
-
console.error(`Files: ${Object.keys(files).join(', ')}`);
|
|
63
|
-
process.exitCode = 1;
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
console.log(files[file]);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (action === 'install') {
|
|
70
|
-
const result = await installHermesSkill(resultOptions);
|
|
71
|
-
if (flag(args, '--json'))
|
|
72
|
-
return console.log(JSON.stringify(result, null, 2));
|
|
73
|
-
if (!result.ok) {
|
|
74
|
-
console.error(`Hermes skill install blocked: ${result.reason}`);
|
|
75
|
-
console.error(`Target: ${result.target_dir}`);
|
|
76
|
-
process.exitCode = 1;
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
console.log(`Hermes skill ${result.status}: ${result.target_dir}`);
|
|
80
|
-
console.log(`Use it in Hermes as /${HERMES_SKILL_NAME} and run SKS shell commands with SKS_HERMES=1.`);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
console.log(`Hermes
|
|
84
|
-
|
|
85
|
-
Usage:
|
|
86
|
-
sks hermes install [--dir path] [--force] [--dry-run] [--json]
|
|
87
|
-
sks hermes status [--dir path] [--json]
|
|
88
|
-
sks hermes path [--dir path] [--json]
|
|
89
|
-
sks hermes print [SKILL.md|README.md|hermes-config.example.yaml|skill-bundle.example.yaml]
|
|
90
|
-
|
|
91
|
-
Default skill: ${HERMES_SKILL_NAME}
|
|
92
|
-
Default path: ${defaultHermesSkillDir()}
|
|
93
|
-
|
|
94
|
-
After install, open Hermes and invoke:
|
|
95
|
-
|
|
96
|
-
/${HERMES_SKILL_NAME} Use SKS in this repository.
|
|
97
|
-
`);
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=hermes-command.js.map
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { OPENCLAW_SKILL_NAME, buildOpenClawSkillFiles, defaultOpenClawSkillDir, installOpenClawSkill } from '../core/openclaw.js';
|
|
3
|
-
const flag = (args, name) => args.includes(name);
|
|
4
|
-
function readFlagValue(args, name, fallback) {
|
|
5
|
-
const i = args.indexOf(name);
|
|
6
|
-
return i >= 0 && args[i + 1] ? args[i + 1] : fallback;
|
|
7
|
-
}
|
|
8
|
-
function positionalArgs(args = []) {
|
|
9
|
-
const out = [];
|
|
10
|
-
const valueFlags = new Set(['--dir']);
|
|
11
|
-
for (let i = 0; i < args.length; i++) {
|
|
12
|
-
const arg = String(args[i]);
|
|
13
|
-
if (valueFlags.has(arg)) {
|
|
14
|
-
i++;
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
if (!arg.startsWith('--'))
|
|
18
|
-
out.push(arg);
|
|
19
|
-
}
|
|
20
|
-
return out;
|
|
21
|
-
}
|
|
22
|
-
export async function openClawCommand(args = []) {
|
|
23
|
-
const action = args[0] || 'help';
|
|
24
|
-
const targetDir = readFlagValue(args, '--dir', defaultOpenClawSkillDir());
|
|
25
|
-
const resultOptions = {
|
|
26
|
-
targetDir,
|
|
27
|
-
force: flag(args, '--force'),
|
|
28
|
-
dryRun: flag(args, '--dry-run')
|
|
29
|
-
};
|
|
30
|
-
if (action === 'path') {
|
|
31
|
-
const result = { skill: OPENCLAW_SKILL_NAME, target_dir: path.resolve(targetDir) };
|
|
32
|
-
if (flag(args, '--json'))
|
|
33
|
-
return console.log(JSON.stringify(result, null, 2));
|
|
34
|
-
console.log(result.target_dir);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (action === 'print') {
|
|
38
|
-
const files = buildOpenClawSkillFiles();
|
|
39
|
-
const file = (positionalArgs(args.slice(1))[0] || 'SKILL.md');
|
|
40
|
-
if (!files[file]) {
|
|
41
|
-
console.error(`Unknown OpenClaw skill file: ${file}`);
|
|
42
|
-
console.error(`Files: ${Object.keys(files).join(', ')}`);
|
|
43
|
-
process.exitCode = 1;
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
console.log(files[file]);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (action === 'install') {
|
|
50
|
-
const result = await installOpenClawSkill(resultOptions);
|
|
51
|
-
if (flag(args, '--json'))
|
|
52
|
-
return console.log(JSON.stringify(result, null, 2));
|
|
53
|
-
if (!result.ok) {
|
|
54
|
-
console.error(`OpenClaw skill install blocked: ${result.reason}`);
|
|
55
|
-
console.error(`Target: ${result.target_dir}`);
|
|
56
|
-
process.exitCode = 1;
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
console.log(`OpenClaw skill ${result.status}: ${result.target_dir}`);
|
|
60
|
-
console.log(`Attach it to an agent with skills: [${OPENCLAW_SKILL_NAME}] and tools: [shell].`);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
console.log(`OpenClaw
|
|
64
|
-
|
|
65
|
-
Usage:
|
|
66
|
-
sks openclaw install [--dir path] [--force] [--dry-run] [--json]
|
|
67
|
-
sks openclaw path [--dir path] [--json]
|
|
68
|
-
sks openclaw print [SKILL.md|manifest.yaml|README.md|openclaw-agent-config.example.yaml]
|
|
69
|
-
|
|
70
|
-
Default skill: ${OPENCLAW_SKILL_NAME}
|
|
71
|
-
Default path: ${defaultOpenClawSkillDir()}
|
|
72
|
-
|
|
73
|
-
After install, add this to an OpenClaw agent config:
|
|
74
|
-
|
|
75
|
-
agents:
|
|
76
|
-
coding-agent:
|
|
77
|
-
tools:
|
|
78
|
-
- shell
|
|
79
|
-
skills:
|
|
80
|
-
- ${OPENCLAW_SKILL_NAME}
|
|
81
|
-
`);
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=openclaw-command.js.map
|
package/dist/commands/hermes.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { nowIso, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
|
|
3
|
-
import { analyzeLazyCodexLiveSource } from './lazycodex-live-analyzer.js';
|
|
4
|
-
export function buildLazyCodexPatternAnalysis(live = null) {
|
|
5
|
-
const liveByPattern = new Map(live?.patterns.map((row) => [row.id, row]) || []);
|
|
6
|
-
const liveEvidenceByPattern = new Map();
|
|
7
|
-
for (const row of live?.evidence || []) {
|
|
8
|
-
const list = liveEvidenceByPattern.get(row.pattern_id) || [];
|
|
9
|
-
list.push(`${row.file}:${row.lines?.join('-') || 'unknown'}:${row.snippet_hash}`);
|
|
10
|
-
liveEvidenceByPattern.set(row.pattern_id, list);
|
|
11
|
-
}
|
|
12
|
-
return {
|
|
13
|
-
schema: 'sks.lazycodex-pattern-analysis.v1',
|
|
14
|
-
source_repo: 'code-yeongyu/lazycodex',
|
|
15
|
-
analyzed_at: nowIso(),
|
|
16
|
-
patterns: [
|
|
17
|
-
pattern('npx-no-global-install', 'npx no-global install alias', ['Directive: npx lazycodex-ai install aliases npx --yes --package oh-my-openagent omo install --platform=codex.'], 'adapt', 'Keep optional tooling no-global by default and record repair transactions.', ['src/cli/install-helpers.ts', 'src/core/zellij/zellij-self-heal.ts']),
|
|
18
|
-
pattern('codex-marketplace-plugin', 'Codex marketplace plugin add/upgrade', ['Directive: codex plugin marketplace add and codex plugin add omo@sisyphuslabs.'], 'adapt', 'Track marketplace/plugin inventory without assuming hooks are approved.', ['src/core/codex-app/codex-app-harness-matrix.ts']),
|
|
19
|
-
pattern('startup-review-hooks', 'Startup review hook approval', ['Directive: hooks require Codex startup review approval and re-approval after modifications.'], 'adopt', 'Separate installed hook files from approval state; unknown remains unknown.', ['src/core/codex-app/codex-hook-lifecycle.ts']),
|
|
20
|
-
pattern('background-bootstrap', 'Background bootstrap and restart notice', ['Directive: first approved session performs background bootstrap and upgrade may require restart.'], 'adapt', 'Report bootstrap proof as warning/blocker instead of silently assuming completion.', ['src/core/codex-app/codex-app-harness-matrix.ts']),
|
|
21
|
-
pattern('doctor-health-report', 'Doctor health report for plugin cache/hooks/MCP/agents/config', ['Directive: LazyCodex doctor reports plugin cache, hooks, MCP servers, agents, config state.'], 'adopt', 'Add Codex App Harness section to SKS doctor.', ['src/commands/doctor.ts']),
|
|
22
|
-
pattern('dollar-skill-picker', '$ skill picker and $command invocation', ['Directive: Codex composer $ browses installed skills.'], 'adapt', 'Keep SKS route skills synced without clobbering user or LazyCodex skills.', ['src/core/codex-app/codex-skill-sync.ts']),
|
|
23
|
-
pattern('init-deep-agents', '$init-deep hierarchical AGENTS.md', ['Directive: init-deep creates hierarchical AGENTS.md context.'], 'adapt', 'Generate SKS memory under .sneakoscope/context by default and preserve user AGENTS.md.', ['src/core/codex-app/codex-init-deep.ts']),
|
|
24
|
-
pattern('plan-start-loop', '$ulw-plan, $start-work, $ulw-loop command pillars', ['Directive: separate planning, durable work, and evidence loop.'], 'adapt', 'Map onto sks loop plan/run/proof without replacing existing Loop Mesh.', ['src/core/commands/loop-command.ts']),
|
|
25
|
-
pattern('specialist-skills', 'Specialist skills', ['Directive: specialist skills include review-work, LSP, AST-grep, programming, frontend UI/UX.'], 'watch', 'Keep checker profile selection explicit and evidence-backed.', ['src/core/loops/loop-gate-selector.ts']),
|
|
26
|
-
pattern('native-agent-type', 'Native spawn_agent agent_type with message fallback', ['Directive: LazyCodex probes agent_type and falls back to role in message.'], 'adopt', 'Expose native agent_type capability in execution profile.', ['src/core/codex-app/codex-agent-role-sync.ts', 'src/core/codex-app/codex-app-execution-profile.ts']),
|
|
27
|
-
pattern('multi-model-routing', 'Multi-model routing', ['Directive: LazyCodex/OmO route multiple models.'], 'watch', 'SKS keeps provider/profile policy separate from harness matrix.', ['src/core/provider/provider-context.ts']),
|
|
28
|
-
pattern('hook-continuation', 'Hook lifecycle and continuation enforcer', ['Directive: UserPromptSubmit, PreToolUse, PostToolUse, Stop, Notification map to pipeline actions.'], 'adopt', 'Map lifecycle and add Loop continuation proof adapter.', ['src/core/codex-app/codex-hook-lifecycle.ts', 'src/core/loops/loop-continuation-enforcer.ts']),
|
|
29
|
-
pattern('skill-mcp-slashcommand', 'Skill MCP and slashcommand tool', ['Directive: OmO exposes skill MCP and slashcommand tools.'], 'adapt', 'Report MCP candidates and SKS route skill availability without assuming external plugin behavior.', ['src/core/codex-app/codex-app-harness-matrix.ts']),
|
|
30
|
-
pattern('lsp-ast-grep', 'LSP/AST-grep optional tooling', ['Directive: LSP/AST-grep are optional-but-first-class loop gates/tools.'], 'watch', 'Use as future specialist gates; do not add unrequested fallback tooling now.', ['src/core/loops/loop-gate-selector.ts'])
|
|
31
|
-
].map((row) => {
|
|
32
|
-
const livePattern = liveByPattern.get(row.id);
|
|
33
|
-
const liveEvidence = liveEvidenceByPattern.get(row.id) || [];
|
|
34
|
-
return {
|
|
35
|
-
...row,
|
|
36
|
-
evidence: [...row.evidence, ...liveEvidence],
|
|
37
|
-
confidence: liveEvidence.length ? 'high' : livePattern ? 'medium' : 'low',
|
|
38
|
-
live_evidence: liveEvidence
|
|
39
|
-
};
|
|
40
|
-
}),
|
|
41
|
-
blockers: live?.blockers || [],
|
|
42
|
-
warnings: live?.warnings || (live ? [] : ['live_analysis_not_available_static_only']),
|
|
43
|
-
live_analysis_path: live ? '.sneakoscope/reports/lazycodex-live-analysis.json' : null
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export async function writeLazyCodexPatternAnalysis(root) {
|
|
47
|
-
const live = await analyzeLazyCodexLiveSource({ root, writeReport: true }).catch(() => null);
|
|
48
|
-
const report = buildLazyCodexPatternAnalysis(live);
|
|
49
|
-
await writeJsonAtomic(path.join(root, '.sneakoscope', 'reports', 'lazycodex-analysis.json'), report);
|
|
50
|
-
await writeTextAtomic(path.join(root, 'docs', 'lazycodex-analysis.md'), renderLazyCodexAnalysisMarkdown(report)).catch(() => undefined);
|
|
51
|
-
return report;
|
|
52
|
-
}
|
|
53
|
-
export function renderLazyCodexAnalysisMarkdown(report) {
|
|
54
|
-
const rows = report.patterns.map((p) => `| ${p.id} | ${p.sks_adoption} | ${p.confidence} | ${p.live_evidence.length} | ${p.rationale.replace(/\|/g, '\\|')} |`).join('\n');
|
|
55
|
-
return [
|
|
56
|
-
'# LazyCodex / OmO Pattern Analysis',
|
|
57
|
-
'',
|
|
58
|
-
`Source repo: \`${report.source_repo}\``,
|
|
59
|
-
`Analyzed at: \`${report.analyzed_at}\``,
|
|
60
|
-
`Live analysis: \`${report.live_analysis_path || 'not available'}\``,
|
|
61
|
-
'',
|
|
62
|
-
'| Pattern | Adoption | Confidence | Live Evidence | Rationale |',
|
|
63
|
-
'|---|---|---|---:|---|',
|
|
64
|
-
rows,
|
|
65
|
-
'',
|
|
66
|
-
'This artifact combines static directive mapping with hashed current-source evidence when available. Long source excerpts are intentionally omitted.'
|
|
67
|
-
].join('\n');
|
|
68
|
-
}
|
|
69
|
-
function pattern(id, title, evidence, sks_adoption, rationale, target_modules) {
|
|
70
|
-
return { id, title, evidence, sks_adoption, rationale, target_modules };
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=lazycodex-analysis.js.map
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { createHash } from 'node:crypto';
|
|
4
|
-
import { nowIso, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
|
|
5
|
-
const PATTERNS = [
|
|
6
|
-
{ id: 'npx-no-global-install', claim: 'npx install command evidence', re: /\bnpx\b.+(?:lazycodex|omo|oh-my-openagent)/i },
|
|
7
|
-
{ id: 'codex-marketplace-plugin', claim: 'Codex marketplace install command evidence', re: /\bcodex\b.+(?:plugin|marketplace).+(?:add|install)/i },
|
|
8
|
-
{ id: 'startup-review-hooks', claim: 'Hook approval statement evidence', re: /\bhook\b.+\b(approval|approve|review|trusted|trust)\b/i },
|
|
9
|
-
{ id: 'doctor-health-report', claim: 'Doctor health report evidence', re: /\bdoctor\b.+\b(health|report|check)\b/i },
|
|
10
|
-
{ id: 'plan-start-loop', claim: '$ulw-loop/$ulw-plan/$start-work command evidence', re: /\$(?:ulw-loop|ulw-plan|start-work)\b/ },
|
|
11
|
-
{ id: 'init-deep-agents', claim: '$init-deep evidence', re: /\$init-deep\b|init-deep/i },
|
|
12
|
-
{ id: 'native-agent-type', claim: 'agent_type fallback evidence', re: /\bagent_type\b|message[- ]role|fallback/i }
|
|
13
|
-
];
|
|
14
|
-
export async function analyzeLazyCodexLiveSource(input) {
|
|
15
|
-
const root = path.resolve(input.root);
|
|
16
|
-
const sourceDir = input.sourceDir ? path.resolve(input.sourceDir) : path.join(root, '.sneakoscope', 'cache', 'lazycodex');
|
|
17
|
-
const files = ['README.md', 'package.json', 'bin/lazycodex-ai.js', '.gitmodules'];
|
|
18
|
-
const evidence = [];
|
|
19
|
-
const blockers = [];
|
|
20
|
-
for (const rel of files) {
|
|
21
|
-
const file = path.join(sourceDir, rel);
|
|
22
|
-
const text = await fs.readFile(file, 'utf8').catch(() => '');
|
|
23
|
-
if (!text)
|
|
24
|
-
continue;
|
|
25
|
-
evidence.push(...extractEvidence(rel, text));
|
|
26
|
-
}
|
|
27
|
-
if (!evidence.length)
|
|
28
|
-
blockers.push(`lazycodex_source_evidence_missing:${sourceDir}`);
|
|
29
|
-
const sourceSha = await gitSha(sourceDir);
|
|
30
|
-
const patterns = PATTERNS.map((pattern) => ({
|
|
31
|
-
id: pattern.id,
|
|
32
|
-
title: pattern.claim,
|
|
33
|
-
evidence: evidence.filter((row) => row.pattern_id === pattern.id).map((row) => `${row.file}:${row.lines?.join('-') || 'unknown'}:${row.snippet_hash}`),
|
|
34
|
-
sks_adoption: pattern.id === 'native-agent-type' || pattern.id === 'startup-review-hooks' || pattern.id === 'doctor-health-report' ? 'adopt' : 'adapt',
|
|
35
|
-
rationale: evidence.some((row) => row.pattern_id === pattern.id) ? 'Live source evidence found and hashed.' : 'No live source evidence found; keep static analysis as lower confidence.',
|
|
36
|
-
target_modules: []
|
|
37
|
-
}));
|
|
38
|
-
const report = {
|
|
39
|
-
schema: 'sks.lazycodex-live-analysis.v1',
|
|
40
|
-
generated_at: nowIso(),
|
|
41
|
-
source_repo: 'code-yeongyu/lazycodex',
|
|
42
|
-
source_ref: input.sourceRef || sourceSha || 'local-snapshot',
|
|
43
|
-
source_sha: sourceSha,
|
|
44
|
-
evidence,
|
|
45
|
-
patterns,
|
|
46
|
-
blockers,
|
|
47
|
-
warnings: blockers.length ? ['live_evidence_incomplete_static_fallback_required'] : []
|
|
48
|
-
};
|
|
49
|
-
if (input.writeReport !== false) {
|
|
50
|
-
await writeJsonAtomic(path.join(root, '.sneakoscope', 'reports', 'lazycodex-live-analysis.json'), report).catch(() => undefined);
|
|
51
|
-
await writeTextAtomic(path.join(root, 'docs', 'lazycodex-analysis.md'), renderLazyCodexLiveMarkdown(report)).catch(() => undefined);
|
|
52
|
-
}
|
|
53
|
-
return report;
|
|
54
|
-
}
|
|
55
|
-
export function extractEvidence(file, text) {
|
|
56
|
-
const lines = text.split(/\r?\n/);
|
|
57
|
-
const rows = [];
|
|
58
|
-
for (const pattern of PATTERNS) {
|
|
59
|
-
const index = lines.findIndex((line) => pattern.re.test(line));
|
|
60
|
-
if (index < 0)
|
|
61
|
-
continue;
|
|
62
|
-
const snippet = lines.slice(Math.max(0, index - 1), Math.min(lines.length, index + 2)).join('\n').slice(0, 500);
|
|
63
|
-
rows.push({
|
|
64
|
-
pattern_id: pattern.id,
|
|
65
|
-
file,
|
|
66
|
-
lines: [index + 1, index + 1],
|
|
67
|
-
snippet_hash: createHash('sha256').update(snippet).digest('hex'),
|
|
68
|
-
claim: pattern.claim,
|
|
69
|
-
confidence: 'high'
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
return rows;
|
|
73
|
-
}
|
|
74
|
-
export function renderLazyCodexLiveMarkdown(report) {
|
|
75
|
-
const rows = report.evidence.map((row) => `| ${row.pattern_id} | ${row.file} | ${row.lines?.join('-') || '-'} | ${row.snippet_hash.slice(0, 16)} | ${row.confidence} |`).join('\n');
|
|
76
|
-
return [
|
|
77
|
-
'# LazyCodex / OmO Pattern Analysis',
|
|
78
|
-
'',
|
|
79
|
-
`Source repo: \`${report.source_repo}\``,
|
|
80
|
-
`Source ref: \`${report.source_ref}\``,
|
|
81
|
-
`Source sha: \`${report.source_sha || 'unknown'}\``,
|
|
82
|
-
`Generated at: \`${report.generated_at}\``,
|
|
83
|
-
'',
|
|
84
|
-
'| Pattern | File | Lines | Snippet Hash | Confidence |',
|
|
85
|
-
'|---|---|---:|---|---|',
|
|
86
|
-
rows || '| none | - | - | - | low |',
|
|
87
|
-
'',
|
|
88
|
-
'Long source excerpts are intentionally omitted; release artifacts store line anchors and snippet hashes only.'
|
|
89
|
-
].join('\n');
|
|
90
|
-
}
|
|
91
|
-
async function gitSha(sourceDir) {
|
|
92
|
-
const head = await fs.readFile(path.join(sourceDir, '.git', 'HEAD'), 'utf8').catch(() => '');
|
|
93
|
-
const ref = head.match(/^ref:\s*(.+)$/m)?.[1];
|
|
94
|
-
if (ref)
|
|
95
|
-
return (await fs.readFile(path.join(sourceDir, '.git', ref), 'utf8').catch(() => '')).trim() || null;
|
|
96
|
-
return /^[0-9a-f]{40}$/i.test(head.trim()) ? head.trim() : null;
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=lazycodex-live-analyzer.js.map
|