sneakoscope 0.6.26 → 0.6.27
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 +4 -4
- package/package.json +1 -1
- package/src/core/fsx.mjs +1 -1
- package/src/core/version-manager.mjs +14 -3
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ npm i -g sneakoscope
|
|
|
43
43
|
sks
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
`npm i -g sneakoscope` prints setup guidance without
|
|
46
|
+
`npm i -g sneakoscope` prints setup guidance without looking like a crash. If OMX/DCodex traces exist, npm can finish but SKS blocks setup/doctor until human-approved cleanup. Otherwise postinstall best-effort creates an `sks` shim, configures Context7 when Codex CLI exists, and initializes the current project when `INIT_CWD` looks like one. Project setup writes hooks, skills, agents, `$team`, and `$agent-team`.
|
|
47
47
|
|
|
48
48
|
Default non-interactive setup:
|
|
49
49
|
|
|
@@ -161,9 +161,9 @@ AGENTS.md repository rules loaded by Codex agents
|
|
|
161
161
|
|
|
162
162
|
Codex App discovers repo-local skills from `.agents/skills/`. The picker should find `$team`, `$ralph`, `$sks`, `$db`, `$gx`, and other lowercase aliases; SKS still accepts `$Team`, `$Ralph`, and uppercase forms. SKS also installs `$agent-team` as a Team fallback alias when the app hides the plain `team` skill name.
|
|
163
163
|
|
|
164
|
-
SKS uses
|
|
164
|
+
SKS uses official Codex hook behavior for prompt context injection, blocking, continuation, and visible route or guard status.
|
|
165
165
|
|
|
166
|
-
After setup,
|
|
166
|
+
After setup, hooks block LLM tool calls that edit installed harness control files. The automatic exception is the Sneakoscope engine source repository, detected from `package.json` name `sneakoscope` plus `bin/sks.mjs` and `src/core/*`.
|
|
167
167
|
|
|
168
168
|
## Project Versioning
|
|
169
169
|
|
|
@@ -816,7 +816,7 @@ npm run doctor
|
|
|
816
816
|
|
|
817
817
|
`npm run repo-audit` checks tracked files for risky local paths and high-confidence secret material such as private keys, npm/GitHub/OpenAI-style tokens, local MCP configs, DB dumps, and credential files. It is included in `release:check` and `prepublishOnly`. The package intentionally does not define `prepack`; GitHub installs should not trigger npm's heavier git-dependency preparation path for normal users.
|
|
818
818
|
|
|
819
|
-
`npm run sizecheck` blocks accidental package bloat during
|
|
819
|
+
`npm run sizecheck` blocks accidental package bloat during release and publish checks. Defaults: packed tarball `<=136 KiB`, unpacked package `<=500 KiB`, package files `<=40`, and each tracked file `<=256 KiB`.
|
|
820
820
|
|
|
821
821
|
`npm run selftest` uses the mock path and does not call a model. Live Ralph runs require a working Codex CLI installation and authentication.
|
|
822
822
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sneakoscope",
|
|
3
3
|
"displayName": "Sneakoscope Codex",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.27",
|
|
5
5
|
"description": "Sneakoscope Codex: update-aware, database-safe Codex CLI harness with multi-agent Team orchestration, Ralph no-question execution, autoresearch-style loops, and H-Proof gates.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
|
package/src/core/fsx.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import os from 'node:os';
|
|
|
5
5
|
import crypto from 'node:crypto';
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
|
|
8
|
-
export const PACKAGE_VERSION = '0.6.
|
|
8
|
+
export const PACKAGE_VERSION = '0.6.27';
|
|
9
9
|
export const DEFAULT_PROCESS_TAIL_BYTES = 256 * 1024;
|
|
10
10
|
export const DEFAULT_PROCESS_TIMEOUT_MS = 30 * 60 * 1000;
|
|
11
11
|
|
|
@@ -76,8 +76,9 @@ export async function bumpProjectVersion(root, opts = {}) {
|
|
|
76
76
|
pkg.version = formatSemver(target);
|
|
77
77
|
await writeJsonAtomic(pkgPath, pkg);
|
|
78
78
|
}
|
|
79
|
+
const sourceVersion = await syncSourcePackageVersion(root, formatSemver(target));
|
|
79
80
|
const synced = await syncPackageLockVersions(root, formatSemver(target));
|
|
80
|
-
const staged = await stageVersionFiles(root, [pkgPath, ...synced.files]);
|
|
81
|
+
const staged = await stageVersionFiles(root, [pkgPath, ...synced.files, ...sourceVersion.files]);
|
|
81
82
|
if (!staged.ok) return { ok: false, reason: 'git_add_version_files_failed', stderr: staged.stderr };
|
|
82
83
|
if (statePath) {
|
|
83
84
|
await writeJsonAtomic(statePath, {
|
|
@@ -95,7 +96,7 @@ export async function bumpProjectVersion(root, opts = {}) {
|
|
|
95
96
|
version: formatSemver(target),
|
|
96
97
|
previous_version: formatSemver(current),
|
|
97
98
|
changed,
|
|
98
|
-
synced_files: synced.relative_files,
|
|
99
|
+
synced_files: [...synced.relative_files, ...sourceVersion.relative_files],
|
|
99
100
|
staged_files: staged.relative_files,
|
|
100
101
|
updated_at: nowIso()
|
|
101
102
|
}).catch(() => {});
|
|
@@ -104,7 +105,7 @@ export async function bumpProjectVersion(root, opts = {}) {
|
|
|
104
105
|
changed,
|
|
105
106
|
version: formatSemver(target),
|
|
106
107
|
previous_version: formatSemver(current),
|
|
107
|
-
synced_files: synced.relative_files,
|
|
108
|
+
synced_files: [...synced.relative_files, ...sourceVersion.relative_files],
|
|
108
109
|
staged_files: staged.relative_files,
|
|
109
110
|
lock_scope: git.common_dir
|
|
110
111
|
};
|
|
@@ -187,6 +188,16 @@ async function syncPackageLockVersions(root, version) {
|
|
|
187
188
|
return { files, relative_files: files.map((file) => path.relative(root, file)) };
|
|
188
189
|
}
|
|
189
190
|
|
|
191
|
+
async function syncSourcePackageVersion(root, version) {
|
|
192
|
+
const file = path.join(root, 'src', 'core', 'fsx.mjs');
|
|
193
|
+
const text = await readFileMaybe(file);
|
|
194
|
+
if (!text) return { files: [], relative_files: [] };
|
|
195
|
+
const next = text.replace(/export const PACKAGE_VERSION = ['"][^'"]+['"];/, `export const PACKAGE_VERSION = '${version}';`);
|
|
196
|
+
if (next === text) return { files: [], relative_files: [] };
|
|
197
|
+
await writeTextAtomic(file, next);
|
|
198
|
+
return { files: [file], relative_files: [path.relative(root, file)] };
|
|
199
|
+
}
|
|
200
|
+
|
|
190
201
|
async function stageVersionFiles(root, files) {
|
|
191
202
|
const existing = [];
|
|
192
203
|
for (const file of files) if (await exists(file)) existing.push(path.relative(root, file));
|