@noodleseed/one 0.10.0 → 0.11.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive-ops.d.ts +3 -0
- package/dist/commands/archive-ops.d.ts.map +1 -0
- package/dist/commands/archive-ops.js +168 -0
- package/dist/commands/archive-ops.js.map +1 -0
- package/dist/commands/org-admin.d.ts +17 -0
- package/dist/commands/org-admin.d.ts.map +1 -0
- package/dist/commands/org-admin.js +241 -0
- package/dist/commands/org-admin.js.map +1 -0
- package/dist/commands/policy-ops.d.ts.map +1 -1
- package/dist/commands/policy-ops.js +94 -1
- package/dist/commands/policy-ops.js.map +1 -1
- package/dist/commands/session.d.ts +1 -15
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +15 -170
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +13 -5
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/update-ops.d.ts +29 -0
- package/dist/commands/update-ops.d.ts.map +1 -0
- package/dist/commands/update-ops.js +315 -0
- package/dist/commands/update-ops.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/update-binary.d.ts +38 -0
- package/dist/update-binary.d.ts.map +1 -0
- package/dist/update-binary.js +144 -0
- package/dist/update-binary.js.map +1 -0
- package/dist/update-check.d.ts +40 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +212 -0
- package/dist/update-check.js.map +1 -0
- package/dist/update-render.d.ts +17 -0
- package/dist/update-render.d.ts.map +1 -0
- package/dist/update-render.js +39 -0
- package/dist/update-render.js.map +1 -0
- package/dist/update.d.ts +10 -9
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +21 -89
- package/dist/update.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +13 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts +43 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js +122 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js +119 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +2 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js +119 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +7 -6
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +44 -44
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js +83 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +1 -18
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +18 -260
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +88 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +40 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +353 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +47 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js +159 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/policies.js +7 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +19 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +107 -4
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js +38 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +163 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +16 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +60 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +101 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +8 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +20 -6
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +74 -122
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts +35 -0
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js +87 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js +61 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +68 -44
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +48 -213
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passive post-command update check (#242, ADR 0118, refining ADR 0079).
|
|
3
|
+
*
|
|
4
|
+
* Default behavior on a human TTY: at most once per day, offer "Update now?"
|
|
5
|
+
* (Enter = yes; "n" snoozes for 24h via `updateCheck.snoozedUntil`). When a prompt
|
|
6
|
+
* is not possible (no interactive stdin, NOODLE_NO_PROMPT, machine notices) it
|
|
7
|
+
* falls back to the once-per-day notice. `NOODLE_UPDATE_MODE` selects explicit
|
|
8
|
+
* behaviors for automation: `off` (no checks), `notify` (notice only), `check`
|
|
9
|
+
* (stable exit-code overlay 10 when an update is available — the only mode that
|
|
10
|
+
* runs without a TTY / in CI), and `auto` (run the update, interactive shells
|
|
11
|
+
* only; `NOODLE_AUTO_UPDATE` stays as the shipped alias).
|
|
12
|
+
*
|
|
13
|
+
* A failed, declined, or crashed check must NEVER break or re-code the user's
|
|
14
|
+
* actual command — every failure path resolves to `undefined`.
|
|
15
|
+
*/
|
|
16
|
+
export type UpdateMode = 'off' | 'notify' | 'check' | 'auto' | 'prompt';
|
|
17
|
+
export interface UpdateCheckInput {
|
|
18
|
+
readonly command: string | undefined;
|
|
19
|
+
/** Remaining argv of the invocation; any `--json` invocation skips the check. */
|
|
20
|
+
readonly argv?: readonly string[];
|
|
21
|
+
readonly env: NodeJS.ProcessEnv;
|
|
22
|
+
readonly home: string;
|
|
23
|
+
readonly fetchImpl?: typeof fetch;
|
|
24
|
+
/** Injectable updater (defaults to `runUpdateCommand`); tests avoid spawning npm. */
|
|
25
|
+
readonly runUpdate?: (rest: readonly string[]) => Promise<number>;
|
|
26
|
+
readonly confirmImpl?: (message: string) => Promise<boolean>;
|
|
27
|
+
/** May we prompt? Defaults to stdin+stderr being TTYs. */
|
|
28
|
+
readonly promptCapable?: boolean;
|
|
29
|
+
/** May we print a notice? Defaults to stderr being a TTY. */
|
|
30
|
+
readonly noticeCapable?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Resolve the update mode: NOODLE_UPDATE_MODE, else the NOODLE_AUTO_UPDATE alias, else the default prompt. */
|
|
33
|
+
export declare function resolveUpdateMode(env: NodeJS.ProcessEnv): UpdateMode;
|
|
34
|
+
/**
|
|
35
|
+
* Run the passive update check after a successful command. Returns an exit-code
|
|
36
|
+
* overlay only under `NOODLE_UPDATE_MODE=check` (10 = update available); every
|
|
37
|
+
* other outcome — including all failures — resolves `undefined`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function maybeCheckForCliUpdate(input: UpdateCheckInput): Promise<number | undefined>;
|
|
40
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAsBH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,+GAA+G;AAC/G,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAKpE;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMjG"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passive post-command update check (#242, ADR 0118, refining ADR 0079).
|
|
3
|
+
*
|
|
4
|
+
* Default behavior on a human TTY: at most once per day, offer "Update now?"
|
|
5
|
+
* (Enter = yes; "n" snoozes for 24h via `updateCheck.snoozedUntil`). When a prompt
|
|
6
|
+
* is not possible (no interactive stdin, NOODLE_NO_PROMPT, machine notices) it
|
|
7
|
+
* falls back to the once-per-day notice. `NOODLE_UPDATE_MODE` selects explicit
|
|
8
|
+
* behaviors for automation: `off` (no checks), `notify` (notice only), `check`
|
|
9
|
+
* (stable exit-code overlay 10 when an update is available — the only mode that
|
|
10
|
+
* runs without a TTY / in CI), and `auto` (run the update, interactive shells
|
|
11
|
+
* only; `NOODLE_AUTO_UPDATE` stays as the shipped alias).
|
|
12
|
+
*
|
|
13
|
+
* A failed, declined, or crashed check must NEVER break or re-code the user's
|
|
14
|
+
* actual command — every failure path resolves to `undefined`.
|
|
15
|
+
*/
|
|
16
|
+
import { runUpdateCommand } from './commands/update-ops.js';
|
|
17
|
+
import { readConfig, writeConfig } from './config.js';
|
|
18
|
+
import { detectColorMode } from './gradient.js';
|
|
19
|
+
import { confirm } from './prompts.js';
|
|
20
|
+
import { bundledAgentKitVersion, fetchLatestAgentKitVersion, isSkillsUpdateAvailable, skillsUpdatePromptMessage, } from './skills-update.js';
|
|
21
|
+
import { CLI_PACKAGE_NAME, compareVersions, currentCliVersion, fetchLatestVersion, truthyEnv, UPDATE_CHECK_INTERVAL_MS, } from './update.js';
|
|
22
|
+
import { renderUpdateAvailable } from './update-render.js';
|
|
23
|
+
/** Resolve the update mode: NOODLE_UPDATE_MODE, else the NOODLE_AUTO_UPDATE alias, else the default prompt. */
|
|
24
|
+
export function resolveUpdateMode(env) {
|
|
25
|
+
const raw = env.NOODLE_UPDATE_MODE?.toLowerCase();
|
|
26
|
+
if (raw === 'off' || raw === 'notify' || raw === 'check' || raw === 'auto')
|
|
27
|
+
return raw;
|
|
28
|
+
if (truthyEnv(env.NOODLE_AUTO_UPDATE))
|
|
29
|
+
return 'auto';
|
|
30
|
+
return 'prompt';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Run the passive update check after a successful command. Returns an exit-code
|
|
34
|
+
* overlay only under `NOODLE_UPDATE_MODE=check` (10 = update available); every
|
|
35
|
+
* other outcome — including all failures — resolves `undefined`.
|
|
36
|
+
*/
|
|
37
|
+
export async function maybeCheckForCliUpdate(input) {
|
|
38
|
+
try {
|
|
39
|
+
return await checkForCliUpdate(input);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return undefined; // an optional check must never break the user's command
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function checkForCliUpdate(input) {
|
|
46
|
+
const { env } = input;
|
|
47
|
+
if (shouldSkipCommand(input.command))
|
|
48
|
+
return undefined;
|
|
49
|
+
if (truthyEnv(env.NOODLE_DISABLE_UPDATE_CHECK))
|
|
50
|
+
return undefined;
|
|
51
|
+
if (input.argv?.includes('--json'))
|
|
52
|
+
return undefined;
|
|
53
|
+
const mode = resolveUpdateMode(env);
|
|
54
|
+
if (mode === 'off')
|
|
55
|
+
return undefined;
|
|
56
|
+
const noticeCapable = input.noticeCapable ?? process.stderr.isTTY === true;
|
|
57
|
+
const promptCapable = input.promptCapable ?? (process.stdin.isTTY === true && noticeCapable);
|
|
58
|
+
const jsonNotices = truthyEnv(env.NOODLE_UPDATE_JSON);
|
|
59
|
+
// `check` is the automation contract and runs anywhere; everything else stays
|
|
60
|
+
// out of CI and non-interactive shells (never prompt or auto-update there).
|
|
61
|
+
if (mode !== 'check' && (truthyEnv(env.CI) || !noticeCapable))
|
|
62
|
+
return undefined;
|
|
63
|
+
const installed = currentCliVersion();
|
|
64
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
65
|
+
const config = readConfig(input.home);
|
|
66
|
+
const wantsPrompt = mode === 'prompt' && promptCapable && !truthyEnv(env.NOODLE_NO_PROMPT) && !jsonNotices;
|
|
67
|
+
if (wantsPrompt || mode === 'check') {
|
|
68
|
+
if (wantsPrompt && isSnoozed(config.updateCheck?.snoozedUntil))
|
|
69
|
+
return undefined;
|
|
70
|
+
// Deterministic freshness: use the cached latest when fresh, else fetch once.
|
|
71
|
+
let latest;
|
|
72
|
+
let skillsLatest;
|
|
73
|
+
if (isFresh(config.updateCheck?.checkedAt) && config.updateCheck?.latestVersion !== undefined) {
|
|
74
|
+
latest = config.updateCheck.latestVersion;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
latest = await fetchLatestVersion(fetchImpl).catch(() => undefined);
|
|
78
|
+
skillsLatest = await fetchLatestAgentKitVersion(fetchImpl).catch(() => undefined);
|
|
79
|
+
if (latest !== undefined || skillsLatest !== undefined) {
|
|
80
|
+
writeCheckCache(input.home, latest, skillsLatest);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const newer = latest !== undefined && compareVersions(latest, installed) > 0;
|
|
84
|
+
if (mode === 'check') {
|
|
85
|
+
if (!newer || latest === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
emitNotice(jsonNotices, installed, latest);
|
|
88
|
+
return 10;
|
|
89
|
+
}
|
|
90
|
+
if (newer && latest !== undefined) {
|
|
91
|
+
// Snooze before asking so an aborted or killed prompt never repeats.
|
|
92
|
+
snooze(input.home);
|
|
93
|
+
console.error(renderUpdateAvailable(installed, latest, detectColorMode(process.stderr)));
|
|
94
|
+
const ask = input.confirmImpl ?? ((message) => confirm(message, { output: process.stderr }));
|
|
95
|
+
const accepted = await ask('Update now?').catch(() => false);
|
|
96
|
+
if (accepted) {
|
|
97
|
+
await runUpdate(input)(['--yes']).catch(() => 1);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.error('Snoozed for 24 hours. Run `noodle update` when ready.');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
maybeSkillsNotice(jsonNotices, skillsLatest);
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
// notify / auto (and non-promptable defaults): the once-per-24h notice pass.
|
|
107
|
+
if (isFresh(config.updateCheck?.checkedAt))
|
|
108
|
+
return undefined;
|
|
109
|
+
const latest = await fetchLatestVersion(fetchImpl).catch(() => undefined);
|
|
110
|
+
const skillsLatest = await fetchLatestAgentKitVersion(fetchImpl).catch(() => undefined);
|
|
111
|
+
if (latest === undefined && skillsLatest === undefined)
|
|
112
|
+
return undefined;
|
|
113
|
+
writeCheckCache(input.home, latest, skillsLatest);
|
|
114
|
+
if (latest !== undefined && compareVersions(latest, installed) > 0) {
|
|
115
|
+
if (mode === 'auto') {
|
|
116
|
+
console.error(`A newer Noodle CLI is available: ${installed} -> ${latest}`);
|
|
117
|
+
console.error(`${autoTrigger(env)} — updating now...`);
|
|
118
|
+
await runUpdate(input)(['--yes']).catch(() => 1);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
emitNotice(jsonNotices, installed, latest);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
maybeSkillsNotice(jsonNotices, skillsLatest);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function runUpdate(input) {
|
|
128
|
+
return input.runUpdate ?? ((rest) => runUpdateCommand(rest, { env: input.env }));
|
|
129
|
+
}
|
|
130
|
+
function shouldSkipCommand(command) {
|
|
131
|
+
return (command === undefined ||
|
|
132
|
+
command === '--version' ||
|
|
133
|
+
command === '-v' ||
|
|
134
|
+
command === 'version' ||
|
|
135
|
+
command === '--help' ||
|
|
136
|
+
command === '-h' ||
|
|
137
|
+
command === 'help' ||
|
|
138
|
+
command === 'update');
|
|
139
|
+
}
|
|
140
|
+
function emitNotice(jsonNotices, installed, latest) {
|
|
141
|
+
if (jsonNotices) {
|
|
142
|
+
console.error(JSON.stringify({
|
|
143
|
+
event: 'update_available',
|
|
144
|
+
package: CLI_PACKAGE_NAME,
|
|
145
|
+
installed,
|
|
146
|
+
latest,
|
|
147
|
+
recommendedCommand: 'noodle update --yes --json',
|
|
148
|
+
}));
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
console.error(`A newer Noodle CLI is available: ${installed} -> ${latest}`);
|
|
152
|
+
console.error('Update: noodle update');
|
|
153
|
+
}
|
|
154
|
+
/** Self-checking skills: notify (never auto-update) when the registry has a newer agent-kit. */
|
|
155
|
+
function maybeSkillsNotice(jsonNotices, skillsLatest) {
|
|
156
|
+
if (jsonNotices)
|
|
157
|
+
return; // machine notices carry only the CLI update event
|
|
158
|
+
if (skillsLatest !== undefined && isSkillsUpdateAvailable(skillsLatest)) {
|
|
159
|
+
console.error(skillsUpdatePromptMessage(skillsLatest, bundledAgentKitVersion()));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function autoTrigger(env) {
|
|
163
|
+
return env.NOODLE_UPDATE_MODE?.toLowerCase() === 'auto'
|
|
164
|
+
? 'NOODLE_UPDATE_MODE=auto'
|
|
165
|
+
: 'NOODLE_AUTO_UPDATE is set';
|
|
166
|
+
}
|
|
167
|
+
function isFresh(checkedAt) {
|
|
168
|
+
if (checkedAt === undefined)
|
|
169
|
+
return false;
|
|
170
|
+
const checked = Date.parse(checkedAt);
|
|
171
|
+
if (!Number.isFinite(checked))
|
|
172
|
+
return false;
|
|
173
|
+
return Date.now() - checked < UPDATE_CHECK_INTERVAL_MS;
|
|
174
|
+
}
|
|
175
|
+
function isSnoozed(snoozedUntil) {
|
|
176
|
+
if (snoozedUntil === undefined)
|
|
177
|
+
return false;
|
|
178
|
+
const until = Date.parse(snoozedUntil);
|
|
179
|
+
return Number.isFinite(until) && Date.now() < until;
|
|
180
|
+
}
|
|
181
|
+
function writeCheckCache(home, latestVersion, skillsLatestVersion) {
|
|
182
|
+
const config = readConfig(home);
|
|
183
|
+
writeConfig({
|
|
184
|
+
...config,
|
|
185
|
+
updateCheck: {
|
|
186
|
+
checkedAt: new Date().toISOString(),
|
|
187
|
+
...(latestVersion !== undefined ? { latestVersion } : {}),
|
|
188
|
+
...(skillsLatestVersion !== undefined ? { skillsLatestVersion } : {}),
|
|
189
|
+
...(config.updateCheck?.snoozedUntil !== undefined &&
|
|
190
|
+
isSnoozed(config.updateCheck.snoozedUntil)
|
|
191
|
+
? { snoozedUntil: config.updateCheck.snoozedUntil }
|
|
192
|
+
: {}),
|
|
193
|
+
},
|
|
194
|
+
}, home);
|
|
195
|
+
}
|
|
196
|
+
function snooze(home) {
|
|
197
|
+
const config = readConfig(home);
|
|
198
|
+
writeConfig({
|
|
199
|
+
...config,
|
|
200
|
+
updateCheck: {
|
|
201
|
+
checkedAt: config.updateCheck?.checkedAt ?? new Date().toISOString(),
|
|
202
|
+
...(config.updateCheck?.latestVersion !== undefined
|
|
203
|
+
? { latestVersion: config.updateCheck.latestVersion }
|
|
204
|
+
: {}),
|
|
205
|
+
...(config.updateCheck?.skillsLatestVersion !== undefined
|
|
206
|
+
? { skillsLatestVersion: config.updateCheck.skillsLatestVersion }
|
|
207
|
+
: {}),
|
|
208
|
+
snoozedUntil: new Date(Date.now() + UPDATE_CHECK_INTERVAL_MS).toISOString(),
|
|
209
|
+
},
|
|
210
|
+
}, home);
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded rendering for the update flow: the warm palette and step glyphs the
|
|
3
|
+
* rest of the CLI already speaks (gradient.ts + status.ts), composed - never
|
|
4
|
+
* reinvented - for version deltas, settled results, and repair notices.
|
|
5
|
+
*
|
|
6
|
+
* The 'none' color mode is a hard contract: byte-identical plain, escape-free
|
|
7
|
+
* copy. It is what agents, CI, pipes, NO_COLOR, and the update-command tests
|
|
8
|
+
* see, and it matches the #242 spec strings exactly.
|
|
9
|
+
*/
|
|
10
|
+
import { type ColorMode } from './gradient.js';
|
|
11
|
+
/** "Noodle CLI update available: X -> Y" - old version dimmed, arrow amber, new version orange. */
|
|
12
|
+
export declare function renderUpdateAvailable(installed: string, latest: string, mode: ColorMode): string;
|
|
13
|
+
export declare function renderUpToDate(installed: string, mode: ColorMode): string;
|
|
14
|
+
export declare function renderUpdated(installed: string, latest: string, mode: ColorMode): string;
|
|
15
|
+
/** A calm ⚠ line for repair situations; plain mode passes the text through untouched. */
|
|
16
|
+
export declare function renderRepairNotice(text: string, mode: ColorMode): string;
|
|
17
|
+
//# sourceMappingURL=update-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-render.d.ts","sourceRoot":"","sources":["../src/update-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,SAAS,EAAkC,MAAM,eAAe,CAAC;AAQtF,mGAAmG;AACnG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAGhG;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAIzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAQxF;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAGxE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded rendering for the update flow: the warm palette and step glyphs the
|
|
3
|
+
* rest of the CLI already speaks (gradient.ts + status.ts), composed - never
|
|
4
|
+
* reinvented - for version deltas, settled results, and repair notices.
|
|
5
|
+
*
|
|
6
|
+
* The 'none' color mode is a hard contract: byte-identical plain, escape-free
|
|
7
|
+
* copy. It is what agents, CI, pipes, NO_COLOR, and the update-command tests
|
|
8
|
+
* see, and it matches the #242 spec strings exactly.
|
|
9
|
+
*/
|
|
10
|
+
import { AMBER, detectGlyphMode, ORANGE, paint } from './gradient.js';
|
|
11
|
+
import { renderStep } from './status.js';
|
|
12
|
+
// Control codes composed per the gradient.ts convention (no raw ESC bytes in source).
|
|
13
|
+
const ESC = String.fromCharCode(27);
|
|
14
|
+
const DIM = `${ESC}[2m`;
|
|
15
|
+
const UNDIM = `${ESC}[22m`;
|
|
16
|
+
/** "Noodle CLI update available: X -> Y" - old version dimmed, arrow amber, new version orange. */
|
|
17
|
+
export function renderUpdateAvailable(installed, latest, mode) {
|
|
18
|
+
if (mode === 'none')
|
|
19
|
+
return `Noodle CLI update available: ${installed} -> ${latest}`;
|
|
20
|
+
return `Noodle CLI update available: ${DIM}${installed}${UNDIM} ${paint(AMBER, '→', mode)} ${paint(ORANGE, latest, mode)}`;
|
|
21
|
+
}
|
|
22
|
+
export function renderUpToDate(installed, mode) {
|
|
23
|
+
const text = `Noodle CLI is up to date. (v${installed})`;
|
|
24
|
+
if (mode === 'none')
|
|
25
|
+
return text;
|
|
26
|
+
return renderStep('done', text, mode, detectGlyphMode());
|
|
27
|
+
}
|
|
28
|
+
export function renderUpdated(installed, latest, mode) {
|
|
29
|
+
if (mode === 'none')
|
|
30
|
+
return `Updated Noodle CLI: ${installed} -> ${latest}`;
|
|
31
|
+
return renderStep('done', `Updated Noodle CLI: ${DIM}${installed}${UNDIM} ${paint(AMBER, '→', mode)} ${paint(ORANGE, latest, mode)}`, mode, detectGlyphMode());
|
|
32
|
+
}
|
|
33
|
+
/** A calm ⚠ line for repair situations; plain mode passes the text through untouched. */
|
|
34
|
+
export function renderRepairNotice(text, mode) {
|
|
35
|
+
if (mode === 'none')
|
|
36
|
+
return text;
|
|
37
|
+
return renderStep('warn', text, mode, detectGlyphMode());
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=update-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-render.js","sourceRoot":"","sources":["../src/update-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAkB,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,sFAAsF;AACtF,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;AACxB,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;AAE3B,mGAAmG;AACnG,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAe;IACtF,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,gCAAgC,SAAS,OAAO,MAAM,EAAE,CAAC;IACrF,OAAO,gCAAgC,GAAG,GAAG,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAe;IAC/D,MAAM,IAAI,GAAG,+BAA+B,SAAS,GAAG,CAAC;IACzD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAe;IAC9E,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,uBAAuB,SAAS,OAAO,MAAM,EAAE,CAAC;IAC5E,OAAO,UAAU,CACf,MAAM,EACN,uBAAuB,GAAG,GAAG,SAAS,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAC1G,IAAI,EACJ,eAAe,EAAE,CAClB,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAe;IAC9D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/update.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
export declare const CLI_PACKAGE_NAME = "@noodleseed/one";
|
|
2
2
|
export declare const GLOBAL_UPDATE_COMMAND = "npm install -g @noodleseed/one@latest";
|
|
3
|
+
export declare const UPDATE_CHECK_INTERVAL_MS: number;
|
|
3
4
|
export declare function currentCliVersion(): string;
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
/** True for set env toggles, honoring the `0`/`false` opt-outs. */
|
|
6
|
+
export declare function truthyEnv(value: string | undefined): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Fetch the registry `latest` dist-tag version of the CLI package. Throws on
|
|
9
|
+
* failure so callers choose their own inconclusive-network handling. The passive
|
|
10
|
+
* check uses the default ~1s budget; the explicit `noodle update` command passes
|
|
11
|
+
* a longer one.
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchLatestVersion(fetchImpl: typeof fetch, timeoutMs?: number): Promise<string | undefined>;
|
|
13
14
|
export declare function compareVersions(a: string, b: string): number;
|
|
14
15
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAClD,eAAO,MAAM,qBAAqB,0CAA8C,CAAC;AAEjF,eAAO,MAAM,wBAAwB,QAAsB,CAAC;AAK5D,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG5D;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,OAAO,KAAK,EACvB,SAAS,SAAO,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5D"}
|
package/dist/update.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Shared update-system core (#242, ADR 0118): package identity, installed-version
|
|
3
|
+
* lookup, registry `latest` fetch, and version comparison.
|
|
4
|
+
*
|
|
5
|
+
* The update system is split along its natural seams:
|
|
6
|
+
* - `update.ts` (this file) — shared constants + helpers.
|
|
7
|
+
* - `update-binary.ts` — global `noodle` binary ownership resolver (safe vs unsafe repair).
|
|
8
|
+
* - `commands/update-ops.ts` — the `noodle update` command (--check/--yes/--repair/--json).
|
|
9
|
+
* - `update-check.ts` — the passive post-command check (default prompt, modes, snooze).
|
|
10
|
+
*/
|
|
2
11
|
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { readConfig, writeConfig } from './config.js';
|
|
4
|
-
import { bundledAgentKitVersion, fetchLatestAgentKitVersion, isSkillsUpdateAvailable, skillsUpdatePromptMessage, } from './skills-update.js';
|
|
5
12
|
export const CLI_PACKAGE_NAME = '@noodleseed/one';
|
|
6
13
|
export const GLOBAL_UPDATE_COMMAND = `npm install -g ${CLI_PACKAGE_NAME}@latest`;
|
|
7
|
-
const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
14
|
+
export const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
8
15
|
const REGISTRY_LATEST_URL = `https://registry.npmjs.org/${encodeURIComponent(CLI_PACKAGE_NAME)}/latest`;
|
|
9
16
|
let versionCache;
|
|
10
17
|
export function currentCliVersion() {
|
|
@@ -14,97 +21,22 @@ export function currentCliVersion() {
|
|
|
14
21
|
versionCache = typeof pkg.version === 'string' ? pkg.version : '0.0.0';
|
|
15
22
|
return versionCache;
|
|
16
23
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
console.log(`Installed: ${currentCliVersion()}`);
|
|
20
|
-
console.log(`Update: ${GLOBAL_UPDATE_COMMAND}`);
|
|
21
|
-
if (!yes) {
|
|
22
|
-
console.log('Run `noodle update --yes` to execute that command.');
|
|
23
|
-
return 0;
|
|
24
|
-
}
|
|
25
|
-
return new Promise((resolve) => {
|
|
26
|
-
const child = spawn('npm', ['install', '-g', `${CLI_PACKAGE_NAME}@latest`], {
|
|
27
|
-
stdio: 'inherit',
|
|
28
|
-
});
|
|
29
|
-
child.on('error', (error) => {
|
|
30
|
-
console.error(`update: ${error.message}`);
|
|
31
|
-
resolve(1);
|
|
32
|
-
});
|
|
33
|
-
child.on('close', (code) => resolve(code ?? 1));
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export async function maybeCheckForCliUpdate(input) {
|
|
37
|
-
// shouldSkipUpdateCheck already gates CI / non-TTY / disabled, so neither the notice nor the opt-in
|
|
38
|
-
// auto-update ever fires in a non-interactive or CI context.
|
|
39
|
-
if (shouldSkipUpdateCheck(input.command, input.env))
|
|
40
|
-
return;
|
|
41
|
-
const config = readConfig(input.home);
|
|
42
|
-
if (wasRecentlyChecked(config.updateCheck?.checkedAt))
|
|
43
|
-
return;
|
|
44
|
-
const latestVersion = await fetchLatestVersion(input.fetchImpl ?? fetch).catch(() => undefined);
|
|
45
|
-
// Skills check shares the same interactive gate + 24h throttle as the CLI check (no second notifier).
|
|
46
|
-
const skillsLatest = await fetchLatestAgentKitVersion(input.fetchImpl ?? fetch).catch(() => undefined);
|
|
47
|
-
if (latestVersion === undefined && skillsLatest === undefined)
|
|
48
|
-
return;
|
|
49
|
-
writeConfig({
|
|
50
|
-
...readConfig(input.home),
|
|
51
|
-
updateCheck: {
|
|
52
|
-
checkedAt: new Date().toISOString(),
|
|
53
|
-
...(latestVersion !== undefined ? { latestVersion } : {}),
|
|
54
|
-
...(skillsLatest !== undefined ? { skillsLatestVersion: skillsLatest } : {}),
|
|
55
|
-
},
|
|
56
|
-
}, input.home);
|
|
57
|
-
const currentVersion = currentCliVersion();
|
|
58
|
-
if (latestVersion !== undefined && compareVersions(latestVersion, currentVersion) > 0) {
|
|
59
|
-
console.error(`A newer Noodle CLI is available: ${currentVersion} -> ${latestVersion}`);
|
|
60
|
-
if (isAutoUpdateEnabled(input.env)) {
|
|
61
|
-
console.error('NOODLE_AUTO_UPDATE is set — updating now...');
|
|
62
|
-
await (input.runUpdate ?? runUpdateCommand)(['--yes']);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
console.error(`Update: ${GLOBAL_UPDATE_COMMAND}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Self-checking skills: notify (no auto-update) when the registry has a newer agent-kit.
|
|
69
|
-
if (skillsLatest !== undefined && isSkillsUpdateAvailable(skillsLatest)) {
|
|
70
|
-
console.error(skillsUpdatePromptMessage(skillsLatest, bundledAgentKitVersion()));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/** Opt-in auto-update. Enabled when `NOODLE_AUTO_UPDATE` is set to anything other than `0`/`false`. */
|
|
74
|
-
function isAutoUpdateEnabled(env) {
|
|
75
|
-
const value = env.NOODLE_AUTO_UPDATE;
|
|
24
|
+
/** True for set env toggles, honoring the `0`/`false` opt-outs. */
|
|
25
|
+
export function truthyEnv(value) {
|
|
76
26
|
if (value === undefined || value === '')
|
|
77
27
|
return false;
|
|
78
28
|
return value !== '0' && value.toLowerCase() !== 'false';
|
|
79
29
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (command === 'update')
|
|
88
|
-
return true;
|
|
89
|
-
if (env.NOODLE_DISABLE_UPDATE_CHECK !== undefined && env.NOODLE_DISABLE_UPDATE_CHECK !== '') {
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
if (env.CI !== undefined && env.CI !== '')
|
|
93
|
-
return true;
|
|
94
|
-
return process.stderr.isTTY !== true;
|
|
95
|
-
}
|
|
96
|
-
function wasRecentlyChecked(checkedAt) {
|
|
97
|
-
if (checkedAt === undefined)
|
|
98
|
-
return false;
|
|
99
|
-
const checked = Date.parse(checkedAt);
|
|
100
|
-
if (!Number.isFinite(checked))
|
|
101
|
-
return false;
|
|
102
|
-
return Date.now() - checked < UPDATE_CHECK_INTERVAL_MS;
|
|
103
|
-
}
|
|
104
|
-
async function fetchLatestVersion(fetchImpl) {
|
|
30
|
+
/**
|
|
31
|
+
* Fetch the registry `latest` dist-tag version of the CLI package. Throws on
|
|
32
|
+
* failure so callers choose their own inconclusive-network handling. The passive
|
|
33
|
+
* check uses the default ~1s budget; the explicit `noodle update` command passes
|
|
34
|
+
* a longer one.
|
|
35
|
+
*/
|
|
36
|
+
export async function fetchLatestVersion(fetchImpl, timeoutMs = 1000) {
|
|
105
37
|
const res = await fetchImpl(REGISTRY_LATEST_URL, {
|
|
106
38
|
headers: { accept: 'application/json' },
|
|
107
|
-
signal: AbortSignal.timeout(
|
|
39
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
108
40
|
});
|
|
109
41
|
if (!res.ok)
|
|
110
42
|
return undefined;
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-groups.d.ts","sourceRoot":"","sources":["../../src/curated/command-groups.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAShD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"command-groups.d.ts","sourceRoot":"","sources":["../../src/curated/command-groups.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAShD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA+J5D,CAAC"}
|
|
@@ -107,6 +107,14 @@ export const COMMAND_GROUPS = {
|
|
|
107
107
|
group: 'Hosted deploy & operations',
|
|
108
108
|
summary: 'Roll back to a previous deployment.',
|
|
109
109
|
},
|
|
110
|
+
archive: {
|
|
111
|
+
group: 'Hosted deploy & operations',
|
|
112
|
+
summary: 'Archive the whole app: endpoints answer 410 Gone; hard-deleted after the retention window.',
|
|
113
|
+
},
|
|
114
|
+
restore: {
|
|
115
|
+
group: 'Hosted deploy & operations',
|
|
116
|
+
summary: 'Restore an archived app within the retention window.',
|
|
117
|
+
},
|
|
110
118
|
access: {
|
|
111
119
|
group: 'Hosted deploy & operations',
|
|
112
120
|
summary: 'Set the access mode (owner-only|org-members|authenticated|customers).',
|
|
@@ -147,7 +155,11 @@ export const COMMAND_GROUPS = {
|
|
|
147
155
|
},
|
|
148
156
|
help: { group: 'CLI maintenance', summary: 'Print CLI usage and command help.' },
|
|
149
157
|
version: { group: 'CLI maintenance', summary: 'Print the installed CLI version.' },
|
|
150
|
-
update: {
|
|
158
|
+
update: {
|
|
159
|
+
group: 'CLI maintenance',
|
|
160
|
+
summary: 'Check for, install, or safely repair the CLI update. Agents: `noodle update --check --json`, then ' +
|
|
161
|
+
'`noodle update --yes --json`; add `--repair` only when the check reports `repairSafe: true`.',
|
|
162
|
+
},
|
|
151
163
|
keys: {
|
|
152
164
|
group: 'Deprecated',
|
|
153
165
|
summary: 'Removed: this command no longer exists; hosted access is identity-based.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-groups.js","sourceRoot":"","sources":["../../src/curated/command-groups.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"command-groups.js","sourceRoot":"","sources":["../../src/curated/command-groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAIA,8FAA8F;AAC9F,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAIA,8FAA8F;AAC9F,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EA8CzC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAgBxC,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAwChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,iGAAiG;AAEjG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,WAAW;IACX,SAAS;IACT,KAAK;IACL,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,OAAO;IACP,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,eAAe;IACf,gBAAgB;IAChB,UAAU;IACV,MAAM;IACN,QAAQ;IACR,GAAG;CACJ,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,8BAA8B;IAC9B,uBAAuB;IACvB,cAAc;IACd,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,wBAAwB;IACxB,6BAA6B;IAC7B,eAAe;IACf,gCAAgC;IAChC,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;CACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/generated/surface.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6EAA6E;AAC7E,iGAAiG;AAEjG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,WAAW;IACX,SAAS;IACT,KAAK;IACL,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;CACZ,CAAC;AAEF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,aAAa;IACb,OAAO;IACP,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,eAAe;IACf,gBAAgB;IAChB,UAAU;IACV,MAAM;IACN,QAAQ;IACR,GAAG;CACJ,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,8BAA8B;IAC9B,uBAAuB;IACvB,cAAc;IACd,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,2BAA2B;IAC3B,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,uBAAuB;IACvB,wBAAwB;IACxB,6BAA6B;IAC7B,eAAe;IACf,gCAAgC;IAChC,oBAAoB;IACpB,yBAAyB;IACzB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;CACf,CAAC"}
|