wize-dev-kit 0.17.0 → 0.18.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/CHANGELOG.md CHANGED
@@ -7,7 +7,11 @@ Format inspired by [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
7
7
  > **0.10.0 and earlier are in Brazilian Portuguese** and are kept verbatim as a
8
8
  > historical record (not back-translated).
9
9
 
10
- ## [Unreleased]
10
+ ## [0.18.0] — 2026-09-18
11
+
12
+ ### Added
13
+
14
+ - **`wize-update`** (orchestrator skill) + **`wize-dev-kit version-check`** (CLI) — an agent-facing way to ask "is there a newer kit?" without hitting the network on every invocation. `version-check --json` reads a local 1h cache first, caps any registry call at ~1.5s, and degrades to `{"latest":null}` silently when offline; it honors `WIZE_DISABLE_UPDATE_CHECK=1` like the existing opportunistic hint. `wize-help`/`wize`'s proactive version-skew check (Step 2.5) now calls it instead of a live `npm view` on every invocation, says the hint at most once per conversation, and points to `/wize-update` — which shows the version jump + changelog excerpt, asks for a one-line confirmation, then runs `npx wize-dev-kit@latest update` and relays the result. Intent phrases: "atualizar o kit", "tem atualização", "nova versão do kit".
11
15
 
12
16
  ## [0.17.0] — 2026-09-08
13
17
 
package/README.es.md CHANGED
@@ -157,6 +157,8 @@ Transversales:
157
157
  /wize-check Checklist de avance de la demanda en vuelo: hecho
158
158
  (con evidencia), en curso, lo que falta — luego
159
159
  retoma el trabajo interrumpido.
160
+ /wize-update Revisa si el kit está desactualizado, muestra el
161
+ changelog, confirma y aplica la actualización.
160
162
  /wize-grill Entrevista-hasta-entendimiento antes de cualquier
161
163
  paso de autoría.
162
164
  /wize-quick-dev Shuri toma un arreglo pequeño sin el ciclo completo.
@@ -240,6 +242,7 @@ npx wize-dev-kit document-project [quick|initial_scan|full_rescan|deep_dive] [--
240
242
  npx wize-dev-kit uninstall # elimina .wize/ (tu código queda intacto)
241
243
  npx wize-dev-kit help # referencia de comandos
242
244
  npx wize-dev-kit version # imprime la versión instalada del kit
245
+ npx wize-dev-kit version-check [--json] # instalada vs. más reciente (con caché; scriptable; nunca bloquea)
243
246
  ```
244
247
 
245
248
  ---
package/README.md CHANGED
@@ -155,6 +155,8 @@ Cross-cutting:
155
155
  /wize-check Progress checklist for the demand in flight:
156
156
  done (with evidence), in progress, what's left —
157
157
  then resumes the interrupted work.
158
+ /wize-update Checks kit version skew, shows the changelog
159
+ jump, confirms, then applies the update.
158
160
  /wize-grill Interview-to-understanding before any authoring step.
159
161
  /wize-eli5 Explain anything to anyone — vocabulary, analogies,
160
162
  tone, depth and framing calibrated to the audience
@@ -238,6 +240,7 @@ npx wize-dev-kit document-project [quick|initial_scan|full_rescan|deep_dive] [--
238
240
  npx wize-dev-kit uninstall # remove .wize/ (your code is left untouched)
239
241
  npx wize-dev-kit help # command reference
240
242
  npx wize-dev-kit version # print the installed kit version
243
+ npx wize-dev-kit version-check [--json] # installed vs latest (cached; scriptable; never blocks)
241
244
  ```
242
245
 
243
246
  ---
package/README.pt-BR.md CHANGED
@@ -156,6 +156,8 @@ Transversais:
156
156
  /wize-check Checklist de acompanhamento da demanda em voo:
157
157
  feito (com evidência), em andamento, o que falta —
158
158
  depois retoma o trabalho interrompido.
159
+ /wize-update Verifica se o kit está desatualizado, mostra o
160
+ changelog, confirma e aplica o update.
159
161
  /wize-grill Entrevista-até-entendimento antes de qualquer passo
160
162
  de autoria.
161
163
  /wize-quick-dev Shuri pega uma correção pequena sem o ciclo completo.
@@ -238,6 +240,7 @@ npx wize-dev-kit document-project [quick|initial_scan|full_rescan|deep_dive] [--
238
240
  npx wize-dev-kit uninstall # remove .wize/ (seu código permanece intacto)
239
241
  npx wize-dev-kit help # referência de comandos
240
242
  npx wize-dev-kit version # imprime a versão instalada do kit
243
+ npx wize-dev-kit version-check [--json] # instalada vs. mais recente (com cache; scriptável; nunca bloqueia)
241
244
  ```
242
245
 
243
246
  ---
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "wize-dev-kit",
4
- "version": "0.17.0",
4
+ "version": "0.18.0",
5
5
  "description": "Full-lifecycle AI-assisted development kit with Test Architect and Whiteport Design Studio embedded. Inspired by BMAD Method and WDS.",
6
6
  "keywords": [
7
7
  "ai",
@@ -22,6 +22,9 @@ skills:
22
22
  - code: wize-check
23
23
  name: "Check (Wizer)"
24
24
  description: "Progress checklist for the demand in flight: done (with evidence), in progress, left, blocked. Read-only — reports, then resumes the interrupted work."
25
+ - code: wize-update
26
+ name: "Update (Wizer)"
27
+ description: "Checks kit version skew, shows the changelog jump, confirms, then applies `wize-dev-kit update` and reports the result."
25
28
  - code: wize-onboarding
26
29
  name: "Onboarding"
27
30
  description: "Post-install triage: greenfield vs brownfield, profile, objective. Delegates to specialists."
@@ -99,15 +99,15 @@ See the full intent routing table in `wize-help/skill.md` (Step 2a). The same ta
99
99
 
100
100
  ## Step 2.5 — version skew (proactive)
101
101
 
102
- Compare `kit_version` (project.toml) vs the installed kit vs (if you have a terminal, 2s timeout) `npm view wize-dev-kit version`:
102
+ If you have Bash, run `npx wize-dev-kit version-check --json` once — it reads a local 1h cache before touching the network, caps any registry call at ~1.5s, and degrades to `{"latest":null}` silently if offline, so this never blocks the response. Compare its `installed` field against `kit_version` (project.toml):
103
103
 
104
104
  | Condition | Suggest |
105
105
  |---|---|
106
- | installed > project.toml | `npx wize-dev-kit update` |
107
- | registry > installed | `npx wize-dev-kit@latest update` |
108
- | all match | nothing |
106
+ | `installed` > `kit_version` (project.toml) | `/wize-update` |
107
+ | `latest` > `installed` | `/wize-update` |
108
+ | everything matches, or `latest` is `null` | nothing |
109
109
 
110
- Phrase as one short line, not a banner. If the user agrees and you have Bash, run it in the project root.
110
+ Phrase as one short line, not a banner — and only the **first time in this conversation**. If you already mentioned it earlier in this session, don't repeat it.
111
111
 
112
112
  ## Step 3 — respond
113
113
 
@@ -201,18 +201,19 @@ Match is case-insensitive, substring-based. Longest match wins. When no intent m
201
201
  | "create workflow", "criar workflow", "novo workflow" | `wize-create-workflow` |
202
202
  | "onboarding", "instalar kit", "primeiro uso" | `wize-onboarding` |
203
203
  | "party mode", "multi-agent", "reunir agentes" | `wize-party-mode` |
204
+ | "atualizar o kit", "tem atualização", "nova versão do kit", "update the kit", "wize update" | `wize-update` |
204
205
 
205
206
  ## Step 2.5 — version skew (proactive)
206
207
 
207
- Compare `kit_version` (project.toml) vs the installed kit vs (if you have a terminal, 2s timeout) `npm view wize-dev-kit version`:
208
+ If you have Bash, run `npx wize-dev-kit version-check --json` once — it reads a local 1h cache before touching the network, caps any registry call at ~1.5s, and degrades to `{"latest":null}` silently if offline, so this never blocks the response. Compare its `installed` field against `kit_version` (project.toml):
208
209
 
209
210
  | Condition | Suggest |
210
211
  |---|---|
211
- | installed > project.toml | `npx wize-dev-kit update` |
212
- | registry > installed | `npx wize-dev-kit@latest update` |
213
- | all match | nothing |
212
+ | `installed` > `kit_version` (project.toml) | `/wize-update` |
213
+ | `latest` > `installed` | `/wize-update` |
214
+ | everything matches, or `latest` is `null` | nothing |
214
215
 
215
- Phrase as one short line, not a banner. If the user agrees and you have Bash, run it in the project root.
216
+ Phrase as one short line, not a banner — and only the **first time in this conversation**. If you already mentioned it earlier in this session, don't repeat it.
216
217
 
217
218
  ## Step 3 — respond
218
219
 
@@ -0,0 +1,61 @@
1
+ ---
2
+
3
+ code: wize-update
4
+ description: "Use quando o usuário pedir para atualizar o Wize Dev Kit, perguntar se há uma versão nova, ou quando o Wizer notar version skew (Step 2.5) e ele confirmar o update."
5
+ name: Update (Wizer)
6
+ module: orchestrator
7
+ owner: wize-orchestrator
8
+ status: ready
9
+ aliases: []
10
+ ---
11
+
12
+ # Wizer · `/wize-update`
13
+
14
+ **Goal.** Bring the installed kit up to date safely: check the real version skew, show what changes before anything runs, get a one-line confirmation, apply it, report the result. Never a surprise — this rewrites files under version control.
15
+
16
+ ## Step 1 — check version skew
17
+
18
+ If you have Bash, run:
19
+
20
+ ```
21
+ npx wize-dev-kit version-check --json
22
+ ```
23
+
24
+ Cheap by design: it reads a local 1h cache before touching the network, caps any registry call at ~1.5s, and degrades to `{"latest":null}` silently if offline — it never blocks this step.
25
+
26
+ Read `kit_version` from `.wize/config/project.toml` — that is the version **this project's** rendered skills are on. `version-check`'s `installed` field is the kit version currently resolved by `npx` (it can already be newer than what is rendered here, if someone bumped the resolved package without running `update`).
27
+
28
+ | Condition | Meaning |
29
+ |---|---|
30
+ | `latest` (registry) > `installed` | A newer kit exists upstream. |
31
+ | `installed` > project's `kit_version` | This project is behind what npx already resolves. |
32
+ | everything matches, or `latest` is `null` | Nothing to do — say so in one line and stop. Do not continue to Step 2. |
33
+
34
+ ## Step 2 — show the jump, then confirm
35
+
36
+ State the version jump plainly (`{from} → {to}`). If you have Bash, `sed -n`/`cat` the relevant excerpt of `CHANGELOG.md` between those versions for a one-line summary of what changed — or trust the excerpt `update` itself prints in Step 3 and summarize that instead.
37
+
38
+ Ask one line: *"Atualizar o kit de {from} para {to}? Isso vai re-renderizar os adapters instalados (claude-code, generic, …) e regravar `kit_version` em `project.toml`."*
39
+
40
+ Never run Step 3 without this confirmation — it rewrites rendered skill/command files that live under version control, and the resulting diff should land as the user's own reviewed commit, not an unreviewed surprise.
41
+
42
+ ## Step 3 — run it
43
+
44
+ On confirmation:
45
+
46
+ ```
47
+ npx wize-dev-kit@latest update
48
+ ```
49
+
50
+ Relay its output — it already reports per-adapter results and a CHANGELOG excerpt. It is idempotent and additive: it never touches `.wize/config/user.toml`, never removes custom agents/skills under `.wize/custom/`, and only rewrites the `kit_version` line in `project.toml`.
51
+
52
+ ## Step 4 — close the loop
53
+
54
+ - Flag any adapter the output reported as `skipped` or `error` — those need a manual look.
55
+ - Repeat, in one line, that the IDE/harness needs a restart to pick up refreshed slash commands.
56
+ - Suggest reviewing the diff (`git status` / `git diff`) before committing — this is a real file change, not a no-op.
57
+
58
+ ## When NOT to use
59
+
60
+ - No `.wize/` folder at all → this is a fresh install, not an update. Route to `npx wize-dev-kit install` (see `wize-onboarding`).
61
+ - The user only wants to know whether an update exists, without applying it → Step 1 alone answers that; do not push into Step 2/3 unasked.
@@ -0,0 +1,39 @@
1
+ // `wize-dev-kit version-check` — explicit, agent-friendly version check.
2
+ //
3
+ // The other CLI commands print an opportunistic hint (version-check.js's
4
+ // printUpdateHintIfAny) that stays silent on a non-TTY stdout so it never
5
+ // spams a pipe. This command is the opposite: it was asked for by name —
6
+ // by a human, or by an AI agent shelling out from a skill instruction where
7
+ // stdout is never a TTY — so it always answers, in `--json` when a caller
8
+ // needs to parse it.
9
+
10
+ 'use strict';
11
+
12
+ const { getVersionCheckResult } = require('../version-check.js');
13
+
14
+ async function cmdVersionCheck({ currentVersion, json = false, log = console.log } = {}) {
15
+ const result = await getVersionCheckResult(currentVersion);
16
+
17
+ if (json) {
18
+ log(JSON.stringify(result));
19
+ return result;
20
+ }
21
+
22
+ if (result.disabled) {
23
+ log('Update check disabled (WIZE_DISABLE_UPDATE_CHECK=1).');
24
+ return result;
25
+ }
26
+ if (!result.latest) {
27
+ log(`wize-dev-kit ${result.installed} (could not reach the registry — offline or timed out).`);
28
+ return result;
29
+ }
30
+ if (result.updateAvailable) {
31
+ log(`↑ Update available: wize-dev-kit ${result.installed} → ${result.latest}`);
32
+ log(' Run `npx wize-dev-kit@latest update` in your project to refresh adapters — or `/wize-update` from inside your AI harness.');
33
+ } else {
34
+ log(`wize-dev-kit ${result.installed} is up to date.`);
35
+ }
36
+ return result;
37
+ }
38
+
39
+ module.exports = { cmdVersionCheck };
@@ -104,6 +104,25 @@ async function printUpdateHintIfAny(currentVersion, { log = console.log, isTTY =
104
104
  }
105
105
  }
106
106
 
107
+ // Pure, TTY-agnostic version check. printUpdateHintIfAny above is an
108
+ // opportunistic hint meant for a human's terminal (gated on isTTY so it
109
+ // never spams a pipe or a script); this is the explicit-invocation
110
+ // counterpart behind the `version-check` CLI command, which an AI agent
111
+ // shells out to non-interactively — stdout there is never a TTY, so a
112
+ // TTY-gated check would go silent exactly when it's needed. Always resolves
113
+ // to a plain object, never throws, and shares the same 1h cache.
114
+ async function getVersionCheckResult(currentVersion, { skipCache = false } = {}) {
115
+ if (process.env.WIZE_DISABLE_UPDATE_CHECK === '1') {
116
+ return { installed: currentVersion, latest: null, updateAvailable: false, disabled: true };
117
+ }
118
+ const latest = await getLatestVersion({ skipCache });
119
+ return {
120
+ installed: currentVersion,
121
+ latest: latest || null,
122
+ updateAvailable: latest ? semverGreater(latest, currentVersion) : false
123
+ };
124
+ }
125
+
107
126
  module.exports = {
108
127
  CACHE_TTL_MS,
109
128
  NETWORK_TIMEOUT_MS,
@@ -113,5 +132,6 @@ module.exports = {
113
132
  fetchLatestFromRegistry,
114
133
  getLatestVersion,
115
134
  semverGreater,
116
- printUpdateHintIfAny
135
+ printUpdateHintIfAny,
136
+ getVersionCheckResult
117
137
  };
@@ -19,6 +19,7 @@ const prompts = require('prompts');
19
19
  const { applyGitignore, generateUserToml } = require('./setup-helpers.js');
20
20
  const { cmdUpdate, loadProjectConfig } = require('./commands/update.js');
21
21
  const { printUpdateHintIfAny } = require('./version-check.js');
22
+ const { cmdVersionCheck } = require('./commands/version-check.js');
22
23
  const { cmdSync: cmdSyncReal } = require('./commands/sync.js');
23
24
  const { cmdAgentList, cmdAgentCreate, cmdAgentEdit } = require('./commands/agent.js');
24
25
  const { cmdDoctor, adapterTargetPath } = require('./commands/doctor.js');
@@ -73,6 +74,7 @@ Usage:
73
74
  Commands:
74
75
  install Install the kit into the current repo (interactive).
75
76
  update Apply upstream diff while preserving customizations.
77
+ version-check [--json] Check installed vs. latest version (scriptable; never blocks).
76
78
  uninstall Remove the kit from the current repo (preserves code).
77
79
  list List installed agents, skills and workflows.
78
80
  sync Regenerate IDE adapters for active targets.
@@ -891,6 +893,8 @@ async function main() {
891
893
  switch (cmd) {
892
894
  case 'install': return cmdInstall(rest);
893
895
  case 'update': return cmdUpdate({ kitRoot: KIT_ROOT, projectRoot: process.cwd() });
896
+ case 'version-check':
897
+ return cmdVersionCheck({ currentVersion: KIT_VERSION, json: rest.includes('--json') });
894
898
  case 'uninstall': return cmdUninstall(rest);
895
899
  case 'list': return cmdList();
896
900
  case 'sync': return cmdSync();