kiokuko-dsh 0.2.36 → 0.2.37

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/docs/typesafe.md CHANGED
@@ -31,9 +31,14 @@ not verified. Invoke the same command with a new key to replace it immediately.
31
31
 
32
32
  The first command reports configuration, source and writability. Clear removes
33
33
  the stored key and reports any remaining source. DSH resolves `TYPESAFE_API_KEY`
34
- for each call. Its inherited environment takes precedence and makes changes
35
- read-only; the managed credential store precedes project/user environment files.
36
- To change an inherited key, update that launch environment and restart DSH.
34
+ for each call. With the standard credentials-local provider, the saved file wins,
35
+ then the launch environment, project `.env` and harness-home `.env`. Saving writes
36
+ the higher-priority file even when an environment fallback exists. Default file
37
+ watching applies valid edits without a restart; an environment-only change must
38
+ be present when DSH is launched. Preserve existing `refs` and `records`.
39
+ See [credential paths, permissions and precedence](typed-decisions.md#openai-credentials).
40
+ Those storage rules also apply to `TYPESAFE_API_KEY`, but `/kioku-typesafe-key`
41
+ does not set `OPENAI_API_KEY`; ChatGPT/Codex OAuth is separate from both keys.
37
42
  With no credential provider, evaluation can use the host's `TYPESAFE_API_KEY`,
38
43
  but save/clear return `TYPESAFE_STORAGE_UNAVAILABLE`. Kiokuko creates no separate
39
44
  credential file and never supplies the key to workers or their subprocesses.
@@ -15,9 +15,19 @@ Native fixture preparation is deferred until a selected, executable check declar
15
15
  root dependencies (`npm ci`), not the DSH runtime fixture. Missing or invalid native
16
16
  fixtures remain `prerequisite-missing` for checks that require them.
17
17
 
18
- The required CI `verify` aggregate waits for `verify-main`, the complete Protected
19
- Lisp matrix and the complete semantic platform matrix. All three dependency results
20
- must be `success`; failure, cancellation, skipped or missing results fail the aggregate.
18
+ CI schedules **Linux x64** and **macOS ARM64**. Full selection has 21 jobs:
19
+ selection, two native micro-judge builds, 17 verification lanes and the aggregate.
20
+ Linux ARM64 is not scheduled or claimed as CI coverage. Its runtime/build support
21
+ remains in the native target registry; this workflow does not produce its binary.
22
+
23
+ The required `verify` aggregate consumes `select`, `micro-judge-native` and `checks`.
24
+ Every selected lane and native artifact must be present, successful, fresh and
25
+ bound to the same selected plan and source. Failure, cancellation, a missing
26
+ selected report, an extra target or an altered artifact fails acceptance. Only
27
+ prose-only selection can legitimately skip both executable job groups. The
28
+ remaining Linux x64/macOS ARM64 check inventories and their deadlines are unchanged.
29
+ The CI review bundle contains exactly its selected targets; standalone native
30
+ bundle verification still requires the complete supported-target inventory.
21
31
 
22
32
  Output defaults to a fresh OS temporary directory. Supply an empty directory
23
33
  outside the repository with `--output`. `plan.json`, per-command logs, official
@@ -80,6 +90,21 @@ arbitrary stdout or a successful no-op process is insufficient.
80
90
 
81
91
  ## Consolidated duplicate invocations
82
92
 
93
+ Selected CI dependency installs set `KIOKUKO_CI_DEFER_PREPARE=1` only on the root
94
+ `npm ci` step. With `CI=true`, this defers this package's `prepare` build to the
95
+ verifier's required clean build; it does not disable dependency lifecycle scripts.
96
+ Ordinary npm/pnpm preparation still builds, including in CI without this explicit
97
+ flag, and build failure remains a failed prepare. The verifier's source/build
98
+ digests, packed-artifact receipts and stale-source rejection remain mandatory.
99
+
100
+ For full coverage, Linux ARM64 removal changes the planned job count from 27 to
101
+ 21 and official DSH fixture builds from 19 to 15. Deferring prepare removes one
102
+ redundant plugin build in each of the remaining 17 verification lanes. This is an
103
+ execution-plan comparison, not a measured hosted-CI duration improvement. Official
104
+ DSH still builds separately for each selected fixture lane; no OS/architecture,
105
+ Node/ABI or native dependency is reused across platforms.
106
+
107
+
83
108
  - `skill-prompts` is covered by `native-unit`: `tests/dsh/unit/skill-compiler.test.ts`, `tests/dsh/unit/skill-snapshot.test.ts`.
84
109
  - `index-reasoning` is covered by `native-integration`: `tests/dsh/integration/index-reasoning.test.ts`, `tests/dsh/integration/index-reasoning-native.test.ts`, `tests/dsh/integration/index-reasoning-evaluation.test.ts`.
85
110
  - `index-evaluation` is covered by `native-integration`: `tests/dsh/integration/index-reasoning-evaluation.test.ts`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kiokuko-dsh",
3
- "version": "0.2.36",
3
+ "version": "0.2.37",
4
4
  "description": "Kiokuko plugin for DeepSeek Harness",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -24,6 +24,7 @@
24
24
  "skills/",
25
25
  "dsh/cordis.patch.yml",
26
26
  "docs/",
27
+ "scripts/prepare-build.mjs",
27
28
  "scripts/backfill-akinator-memory.mjs",
28
29
  "scripts/setup-dsh.mjs",
29
30
  "scripts/repair-session-log.mjs",
@@ -168,7 +169,7 @@
168
169
  "Enabled source-candidate assessment distinguishes unavailable and incomplete checks from proof; the micro judge is native-verified on Apple Silicon macOS only, unsupported platforms report unavailable, and explicit typed-decision OFF records no assessment"
169
170
  ],
170
171
  "lifecycleEvidence": [
171
- "prepare runs only npm run build",
172
+ "prepare builds by default; selected CI installs defer to the verifier clean build",
172
173
  "Git installs use repository-scoped pnpm allowBuilds approval on a supporting pnpm version; source revision pinning is optional and separate",
173
174
  "Disposable-profile install, Web start, and uninstall evidence is recorded by CI"
174
175
  ]
@@ -201,7 +202,7 @@
201
202
  "publint": "publint",
202
203
  "pack:check": "node scripts/pack-check.mjs",
203
204
  "prepublishOnly": "node scripts/prepublish.mjs",
204
- "prepare": "npm run build",
205
+ "prepare": "node scripts/prepare-build.mjs",
205
206
  "test:agenticreplay:package": "npm run build && node scripts/verify-agenticreplay-consumer.mjs && node scripts/verify-agenticreplay-consumer.mjs --pnpm",
206
207
  "test:memory-review": "node scripts/run-tests.mjs tests/dsh/unit/memory-review tests/dsh/integration/memory-review",
207
208
  "test:evolution": "node scripts/run-tests.mjs tests/dsh/unit/evolution tests/dsh/integration/evolution",
@@ -0,0 +1,13 @@
1
+ // CI dependency installation may defer only this package's duplicate build.
2
+ // Dependency lifecycle scripts still run; the selected verifier builds from source.
3
+ import { spawnSync } from 'node:child_process'
4
+
5
+ if (process.env.CI === 'true' && process.env.KIOKUKO_CI_DEFER_PREPARE === '1') {
6
+ console.log('Deferring package prepare build to the selected verifier clean build.')
7
+ } else {
8
+ const runner=process.env.npm_execpath
9
+ if (!runner) throw new Error('Run prepare through npm or pnpm.')
10
+ const result=spawnSync(process.execPath,[runner,'run','build'],{stdio:'inherit'})
11
+ if (result.error) throw result.error
12
+ process.exitCode=result.status ?? 1
13
+ }
@@ -1,14 +1,19 @@
1
1
  import { parseArgs } from 'node:util'
2
- import { setupDsh } from '../dist/dsh/setup.js'
2
+ import { removeDshSetup, setupDsh } from '../dist/dsh/setup.js'
3
3
 
4
4
  try {
5
5
  const { values } = parseArgs({ options: {
6
6
  cwd: { type: 'string' }, home: { type: 'string' },
7
7
  check: { type: 'boolean', default: false }, json: { type: 'boolean', default: false },
8
+ remove: { type: 'boolean', default: false },
8
9
  } })
9
- const result = await setupDsh({ cwd: values.cwd, homeDirectory: values.home, check: values.check })
10
+ const result = await (values.remove ? removeDshSetup : setupDsh)({ cwd: values.cwd, homeDirectory: values.home, check: values.check })
10
11
  if (values.json) console.log(JSON.stringify(result, null, 2))
11
- else {
12
+ else if (values.remove) {
13
+ console.log(values.check ? result.current ? 'Removal is current.' : 'Removal is needed; run again without --check.' : 'Removal complete.')
14
+ console.log(`Skills: ${result.skills.directory} (${result.skills.removed} ${values.check ? 'removable' : 'removed'}, ${result.skills.preserved} preserved)`)
15
+ console.log(`Project instructions: ${result.instructions.path} (${result.instructions.status})`)
16
+ } else {
12
17
  console.log(values.check ? result.current ? 'Setup is current.' : 'Setup needs updating; run again without --check.' : 'Setup complete. Reload existing sessions to refresh their instructions.')
13
18
  console.log(`Skills: ${result.skills.directory} (${result.skills.created} ${values.check ? 'missing' : 'created'}, ${result.skills.updated} ${values.check ? 'stale' : 'updated'}, ${result.skills.unchanged} unchanged)`)
14
19
  console.log(`Project instructions: ${result.instructions.path} (${result.instructions.status})`)