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 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 making npm output look like a crash. If OMX, DCodex, or their global/repo-level traces are detected, npm can finish but SKS reports that `sks setup` and `sks doctor --fix` are blocked until human-approved cleanup. Otherwise postinstall best-effort creates an `sks` shim, configures Context7 when Codex CLI is available, and initializes the current project when `INIT_CWD` looks like one. Project setup writes hooks, skills, agents, `$team`, and the `$agent-team` fallback picker alias. Run `sks` for the setup UI.
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 the official Codex hook behavior: `UserPromptSubmit` can inject additional developer context or block a prompt, `Stop` with `decision: "block"` continues the turn by creating a new continuation prompt, and hook `statusMessage` text makes active SKS routing, guard, permission, and done-gate checks visible in Codex App.
164
+ SKS uses official Codex hook behavior for prompt context injection, blocking, continuation, and visible route or guard status.
165
165
 
166
- After setup, SKS writes `.sneakoscope/harness-guard.json`. Hooks block LLM tool calls that try to edit installed harness control files such as `.codex/hooks.json`, `.codex/config.toml`, `.codex/SNEAKOSCOPE.md`, `.agents/skills/`, `.codex/agents/`, `.sneakoscope/manifest.json`, `.sneakoscope/policy.json`, `.sneakoscope/db-safety.json`, `AGENTS.md`, or `node_modules/sneakoscope`. The only automatic exception is the Sneakoscope engine source repository itself, detected from `package.json` name `sneakoscope` plus `bin/sks.mjs` and `src/core/*`.
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 `release:check`, `publish:dry`, and `npm publish`. Defaults: packed tarball `<=136 KiB`, unpacked package `<=500 KiB`, package files `<=40`, and each tracked file `<=256 KiB`. Override only for an intentional release with `SKS_MAX_PACK_BYTES`, `SKS_MAX_UNPACKED_BYTES`, `SKS_MAX_PACK_FILES`, or `SKS_MAX_TRACKED_FILE_BYTES`.
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.26",
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.25';
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));