instar 1.3.206 → 1.3.208
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/commands/init.js +4 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +10 -2
- package/dist/commands/server.js.map +1 -1
- package/dist/core/AutoUpdater.d.ts.map +1 -1
- package/dist/core/AutoUpdater.js +22 -5
- package/dist/core/AutoUpdater.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +23 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +134 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
- package/dist/core/UpgradeGuideProcessor.js +13 -3
- package/dist/core/UpgradeGuideProcessor.js.map +1 -1
- package/dist/core/UpgradeNotifyManager.d.ts.map +1 -1
- package/dist/core/UpgradeNotifyManager.js +49 -24
- package/dist/core/UpgradeNotifyManager.js.map +1 -1
- package/dist/core/types.d.ts +10 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/upgradeAnnouncement.d.ts +66 -0
- package/dist/core/upgradeAnnouncement.d.ts.map +1 -0
- package/dist/core/upgradeAnnouncement.js +143 -0
- package/dist/core/upgradeAnnouncement.js.map +1 -0
- package/dist/monitoring/sentinelWiring.d.ts +13 -0
- package/dist/monitoring/sentinelWiring.d.ts.map +1 -1
- package/dist/monitoring/sentinelWiring.js +44 -1
- package/dist/monitoring/sentinelWiring.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +1 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/package.json +1 -1
- package/scripts/analyze-release.js +59 -1
- package/src/data/builtin-manifest.json +20 -20
- package/src/scaffold/templates.ts +1 -0
- package/upgrades/1.3.207.md +47 -0
- package/upgrades/1.3.208.md +54 -0
- package/upgrades/side-effects/mature-update-announcements.md +149 -0
- package/upgrades/side-effects/spinner-immune-liveness.md +122 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* upgradeAnnouncement — pure parsing + maturity-framing for the user-facing
|
|
3
|
+
* announcement block of a release upgrade guide
|
|
4
|
+
* (MATURE-UPDATE-ANNOUNCEMENTS spec). No I/O, no spawn, no config — just the
|
|
5
|
+
* deterministic mapping from a guide's `user_announcement` front-matter to the
|
|
6
|
+
* announcement decision, so every rule is unit-testable in isolation.
|
|
7
|
+
*
|
|
8
|
+
* THE polarity invariant: a guide with no parseable `audience: user` entry
|
|
9
|
+
* yields NO user message. Silence is the fail-safe — a parse error, a missing
|
|
10
|
+
* block, or an entry with an unknown audience/maturity all collapse to "do not
|
|
11
|
+
* announce" rather than to a malformed or misleading message. The detailed prose
|
|
12
|
+
* BELOW the front-matter is the agent-facing guide and is never touched here.
|
|
13
|
+
*/
|
|
14
|
+
export type AnnouncementAudience = 'user' | 'agent-only';
|
|
15
|
+
export type AnnouncementMaturity = 'experimental' | 'preview' | 'stable';
|
|
16
|
+
/** One authored announcement decision for a notable change in a release. */
|
|
17
|
+
export interface AnnouncementEntry {
|
|
18
|
+
/** `user` ⇒ eligible to compose into a user message; `agent-only` ⇒ never. */
|
|
19
|
+
audience: AnnouncementAudience;
|
|
20
|
+
/** Drives the framing + badge applied when composing the user message. */
|
|
21
|
+
maturity: AnnouncementMaturity;
|
|
22
|
+
/** Short user-facing title for the change. */
|
|
23
|
+
headline: string;
|
|
24
|
+
/** User-facing body sentence(s) for the change. */
|
|
25
|
+
body: string;
|
|
26
|
+
}
|
|
27
|
+
/** Prompt-injection guidance derived from an entry's maturity. */
|
|
28
|
+
export interface MaturityFraming {
|
|
29
|
+
/** Badge prefix for the headline (empty for `stable`). */
|
|
30
|
+
badge: string;
|
|
31
|
+
/** One-line instruction to the composer about tone + required caveat. */
|
|
32
|
+
framing: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse the `user_announcement` block from an upgrade guide. Returns the valid
|
|
36
|
+
* entries (any shape may be present; invalid entries are dropped). Returns `[]`
|
|
37
|
+
* for: no front-matter, a YAML error, a missing/`non-array` `user_announcement`,
|
|
38
|
+
* or entries failing schema. Never throws.
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseUserAnnouncement(guide: string): AnnouncementEntry[];
|
|
41
|
+
/** The subset of entries that are eligible to reach the user. */
|
|
42
|
+
export declare function userFacingEntries(entries: AnnouncementEntry[]): AnnouncementEntry[];
|
|
43
|
+
/**
|
|
44
|
+
* Return the guide body with its leading `user_announcement` front-matter
|
|
45
|
+
* removed. If there is no front-matter, the guide is returned unchanged. Used by
|
|
46
|
+
* UpgradeGuideProcessor to keep the agent-facing prose while it hoists the
|
|
47
|
+
* announcement block to the top of the concatenated pending guide.
|
|
48
|
+
*/
|
|
49
|
+
export declare function stripAnnouncementFrontmatter(guide: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Serialize entries into a `---`-delimited `user_announcement` front-matter
|
|
52
|
+
* block (ending in a trailing newline). Returns the empty string for an empty
|
|
53
|
+
* list — so a guide-set with NO announcements produces NO front-matter, leaving
|
|
54
|
+
* the assembled guide byte-identical to the pre-feature behavior.
|
|
55
|
+
*/
|
|
56
|
+
export declare function serializeUserAnnouncement(entries: AnnouncementEntry[]): string;
|
|
57
|
+
/** Badge + framing instruction for a maturity rung. */
|
|
58
|
+
export declare function frameByMaturity(maturity: AnnouncementMaturity): MaturityFraming;
|
|
59
|
+
/**
|
|
60
|
+
* Render the announcement brief injected into the compose prompt. Returns the
|
|
61
|
+
* empty string when there is nothing user-facing — the caller treats `''` as
|
|
62
|
+
* "skip the user message entirely". Each entry becomes a labeled block carrying
|
|
63
|
+
* its badge + maturity framing so the composer cannot overstate readiness.
|
|
64
|
+
*/
|
|
65
|
+
export declare function renderAnnouncementBrief(entries: AnnouncementEntry[]): string;
|
|
66
|
+
//# sourceMappingURL=upgradeAnnouncement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeAnnouncement.d.ts","sourceRoot":"","sources":["../../src/core/upgradeAnnouncement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,YAAY,CAAC;AACzD,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AASD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAwCxE;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAEnF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAO9E;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,oBAAoB,GAAG,eAAe,CAqB/E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAgB5E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* upgradeAnnouncement — pure parsing + maturity-framing for the user-facing
|
|
3
|
+
* announcement block of a release upgrade guide
|
|
4
|
+
* (MATURE-UPDATE-ANNOUNCEMENTS spec). No I/O, no spawn, no config — just the
|
|
5
|
+
* deterministic mapping from a guide's `user_announcement` front-matter to the
|
|
6
|
+
* announcement decision, so every rule is unit-testable in isolation.
|
|
7
|
+
*
|
|
8
|
+
* THE polarity invariant: a guide with no parseable `audience: user` entry
|
|
9
|
+
* yields NO user message. Silence is the fail-safe — a parse error, a missing
|
|
10
|
+
* block, or an entry with an unknown audience/maturity all collapse to "do not
|
|
11
|
+
* announce" rather than to a malformed or misleading message. The detailed prose
|
|
12
|
+
* BELOW the front-matter is the agent-facing guide and is never touched here.
|
|
13
|
+
*/
|
|
14
|
+
import yaml from 'js-yaml';
|
|
15
|
+
const AUDIENCES = new Set(['user', 'agent-only']);
|
|
16
|
+
const MATURITIES = new Set(['experimental', 'preview', 'stable']);
|
|
17
|
+
/** Front-matter splitter matching the house pattern (retroHarvestValidator):
|
|
18
|
+
* optional BOM, `---` line, captured YAML, closing `---`, then the body. */
|
|
19
|
+
const FRONTMATTER_RE = /^?---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
20
|
+
/**
|
|
21
|
+
* Parse the `user_announcement` block from an upgrade guide. Returns the valid
|
|
22
|
+
* entries (any shape may be present; invalid entries are dropped). Returns `[]`
|
|
23
|
+
* for: no front-matter, a YAML error, a missing/`non-array` `user_announcement`,
|
|
24
|
+
* or entries failing schema. Never throws.
|
|
25
|
+
*/
|
|
26
|
+
export function parseUserAnnouncement(guide) {
|
|
27
|
+
if (!guide)
|
|
28
|
+
return [];
|
|
29
|
+
const m = FRONTMATTER_RE.exec(guide);
|
|
30
|
+
if (!m)
|
|
31
|
+
return [];
|
|
32
|
+
let fm;
|
|
33
|
+
try {
|
|
34
|
+
fm = yaml.load(m[1]);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// @silent-fallback-ok — malformed front-matter ⇒ silent (no user message)
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
if (!fm || typeof fm !== 'object')
|
|
41
|
+
return [];
|
|
42
|
+
const raw = fm.user_announcement;
|
|
43
|
+
if (!Array.isArray(raw))
|
|
44
|
+
return [];
|
|
45
|
+
const entries = [];
|
|
46
|
+
for (const item of raw) {
|
|
47
|
+
if (!item || typeof item !== 'object')
|
|
48
|
+
continue;
|
|
49
|
+
const o = item;
|
|
50
|
+
const audience = typeof o.audience === 'string' ? o.audience.trim().toLowerCase() : '';
|
|
51
|
+
const maturity = typeof o.maturity === 'string' ? o.maturity.trim().toLowerCase() : '';
|
|
52
|
+
const headline = typeof o.headline === 'string' ? o.headline.trim() : '';
|
|
53
|
+
const body = typeof o.body === 'string' ? o.body.trim() : '';
|
|
54
|
+
// Fail-safe: an unknown audience or maturity drops the entry rather than
|
|
55
|
+
// guessing — we never invent a user-facing announcement from a malformed one.
|
|
56
|
+
if (!AUDIENCES.has(audience))
|
|
57
|
+
continue;
|
|
58
|
+
if (!MATURITIES.has(maturity))
|
|
59
|
+
continue;
|
|
60
|
+
if (!headline && !body)
|
|
61
|
+
continue; // nothing to actually say
|
|
62
|
+
entries.push({
|
|
63
|
+
audience: audience,
|
|
64
|
+
maturity: maturity,
|
|
65
|
+
headline,
|
|
66
|
+
body,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return entries;
|
|
70
|
+
}
|
|
71
|
+
/** The subset of entries that are eligible to reach the user. */
|
|
72
|
+
export function userFacingEntries(entries) {
|
|
73
|
+
return entries.filter((e) => e.audience === 'user');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Return the guide body with its leading `user_announcement` front-matter
|
|
77
|
+
* removed. If there is no front-matter, the guide is returned unchanged. Used by
|
|
78
|
+
* UpgradeGuideProcessor to keep the agent-facing prose while it hoists the
|
|
79
|
+
* announcement block to the top of the concatenated pending guide.
|
|
80
|
+
*/
|
|
81
|
+
export function stripAnnouncementFrontmatter(guide) {
|
|
82
|
+
if (!guide)
|
|
83
|
+
return guide;
|
|
84
|
+
const m = FRONTMATTER_RE.exec(guide);
|
|
85
|
+
if (!m)
|
|
86
|
+
return guide;
|
|
87
|
+
return m[2];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Serialize entries into a `---`-delimited `user_announcement` front-matter
|
|
91
|
+
* block (ending in a trailing newline). Returns the empty string for an empty
|
|
92
|
+
* list — so a guide-set with NO announcements produces NO front-matter, leaving
|
|
93
|
+
* the assembled guide byte-identical to the pre-feature behavior.
|
|
94
|
+
*/
|
|
95
|
+
export function serializeUserAnnouncement(entries) {
|
|
96
|
+
if (!entries.length)
|
|
97
|
+
return '';
|
|
98
|
+
const yamlBody = yaml.dump({ user_announcement: entries }, { lineWidth: -1, noRefs: true });
|
|
99
|
+
return `---\n${yamlBody}---\n`;
|
|
100
|
+
}
|
|
101
|
+
/** Badge + framing instruction for a maturity rung. */
|
|
102
|
+
export function frameByMaturity(maturity) {
|
|
103
|
+
switch (maturity) {
|
|
104
|
+
case 'stable':
|
|
105
|
+
return {
|
|
106
|
+
badge: '',
|
|
107
|
+
framing: 'Stable — speak confidently: this is a finished feature the user can use right now. No maturity caveat needed.',
|
|
108
|
+
};
|
|
109
|
+
case 'preview':
|
|
110
|
+
return {
|
|
111
|
+
badge: '🧪 Preview',
|
|
112
|
+
framing: 'Preview — say it is available to try but still rough around the edges; invite feedback. Prefix the headline with the "🧪 Preview" badge.',
|
|
113
|
+
};
|
|
114
|
+
case 'experimental':
|
|
115
|
+
return {
|
|
116
|
+
badge: '⚗️ Experimental',
|
|
117
|
+
framing: 'Experimental — be explicit that this is EARLY and NOT ready for general use yet, and that you will tell them when it is. NEVER imply it is finished or "more reliable". Prefix the headline with the "⚗️ Experimental" badge.',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Render the announcement brief injected into the compose prompt. Returns the
|
|
123
|
+
* empty string when there is nothing user-facing — the caller treats `''` as
|
|
124
|
+
* "skip the user message entirely". Each entry becomes a labeled block carrying
|
|
125
|
+
* its badge + maturity framing so the composer cannot overstate readiness.
|
|
126
|
+
*/
|
|
127
|
+
export function renderAnnouncementBrief(entries) {
|
|
128
|
+
const userEntries = userFacingEntries(entries);
|
|
129
|
+
if (userEntries.length === 0)
|
|
130
|
+
return '';
|
|
131
|
+
const blocks = userEntries.map((e, i) => {
|
|
132
|
+
const { badge, framing } = frameByMaturity(e.maturity);
|
|
133
|
+
const title = badge ? `${badge} — ${e.headline}` : e.headline;
|
|
134
|
+
return [
|
|
135
|
+
`Announcement ${i + 1} (maturity: ${e.maturity}):`,
|
|
136
|
+
` Headline: ${title}`,
|
|
137
|
+
` What it is: ${e.body}`,
|
|
138
|
+
` Framing: ${framing}`,
|
|
139
|
+
].join('\n');
|
|
140
|
+
});
|
|
141
|
+
return blocks.join('\n\n');
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=upgradeAnnouncement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeAnnouncement.js","sourceRoot":"","sources":["../../src/core/upgradeAnnouncement.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import type { SocketDisconnectSentinelDeps } from './SocketDisconnectSentinel.js';
|
|
23
23
|
import type { ActiveWorkSilenceSentinelDeps, SessionRegistryEntry } from './ActiveWorkSilenceSentinel.js';
|
|
24
24
|
import type { ContextWedgeSentinelDeps } from './ContextWedgeSentinel.js';
|
|
25
|
+
import { getActivitySignal } from './frameworkActivitySignals.js';
|
|
25
26
|
import type { IntelligenceFramework } from '../core/intelligenceProviderFactory.js';
|
|
26
27
|
/** Minimal SessionManager surface the wiring depends on. */
|
|
27
28
|
export interface SentinelSessionSurface {
|
|
@@ -151,4 +152,16 @@ export declare function buildRateLimitRecoveryDeps(s: RateLimitRecoverySurface):
|
|
|
151
152
|
resumeFn: (sessionName: string) => Promise<boolean>;
|
|
152
153
|
notifyFn: (sessionName: string, text: string) => Promise<void>;
|
|
153
154
|
};
|
|
155
|
+
/** FNV-1a — enough to detect that captured output changed. Not security-sensitive. */
|
|
156
|
+
/**
|
|
157
|
+
* Spinner-immune view of a captured pane for the change-detector hash. Removes
|
|
158
|
+
* the host's animated working-status region — the rotating Braille glyph, the
|
|
159
|
+
* ticking elapsed-time counter, the token/context counters, and the
|
|
160
|
+
* `esc to interrupt` footer line — so only REAL scrollback content affects the
|
|
161
|
+
* hash. Without this, the spinner's per-second clock made every poll look like
|
|
162
|
+
* fresh output and blinded the silence sentinel to a stalled-but-spinning turn.
|
|
163
|
+
* Conservative + anchored: real assistant/tool text is never stripped; unknown
|
|
164
|
+
* frameworks still get the shared footer/glyph/timer stripping. (task #63)
|
|
165
|
+
*/
|
|
166
|
+
export declare function stripVolatileStatus(output: string, framework: Parameters<typeof getActivitySignal>[0]): string;
|
|
154
167
|
//# sourceMappingURL=sentinelWiring.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelWiring.d.ts","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sentinelWiring.d.ts","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -147,7 +147,18 @@ export class OutputActivityTracker {
|
|
|
147
147
|
for (const s of running) {
|
|
148
148
|
seen.add(s.tmuxSession);
|
|
149
149
|
const output = this.sessions.captureOutput(s.tmuxSession, SILENCE_CAPTURE_LINES) ?? '';
|
|
150
|
-
|
|
150
|
+
// Hash a SPINNER-IMMUNE view of the frame. The host's "working" spinner
|
|
151
|
+
// (e.g. Claude's `✻ Sautéed for 26m 16s · (esc to interrupt)`) ticks its
|
|
152
|
+
// elapsed-time counter every second, so a raw hash changes on every poll
|
|
153
|
+
// even when the turn has produced no real output for many minutes — which
|
|
154
|
+
// made `lastChangeAt` perpetually fresh and blinded ActiveWorkSilenceSentinel
|
|
155
|
+
// to a stalled-but-spinning turn (the 26-min API-stall incident). Stripping
|
|
156
|
+
// the volatile status region means only REAL scrollback changes refresh the
|
|
157
|
+
// activity timestamp. Safe: the silence nudge is a non-destructive `Enter`
|
|
158
|
+
// (sendKey 'Enter'), so a false-positive on a genuinely-long turn is harmless;
|
|
159
|
+
// the only destructive recovery (Ctrl-C) lives in SocketDisconnectSentinel,
|
|
160
|
+
// gated on a positive error-string marker. (Cross-model reviewed, task #63.)
|
|
161
|
+
const hash = cheapHash(stripVolatileStatus(output, s.framework));
|
|
151
162
|
const prev = this.last.get(s.tmuxSession);
|
|
152
163
|
let lastChangeAt;
|
|
153
164
|
if (!prev) {
|
|
@@ -242,6 +253,38 @@ export function buildRateLimitRecoveryDeps(s) {
|
|
|
242
253
|
};
|
|
243
254
|
}
|
|
244
255
|
/** FNV-1a — enough to detect that captured output changed. Not security-sensitive. */
|
|
256
|
+
/**
|
|
257
|
+
* Spinner-immune view of a captured pane for the change-detector hash. Removes
|
|
258
|
+
* the host's animated working-status region — the rotating Braille glyph, the
|
|
259
|
+
* ticking elapsed-time counter, the token/context counters, and the
|
|
260
|
+
* `esc to interrupt` footer line — so only REAL scrollback content affects the
|
|
261
|
+
* hash. Without this, the spinner's per-second clock made every poll look like
|
|
262
|
+
* fresh output and blinded the silence sentinel to a stalled-but-spinning turn.
|
|
263
|
+
* Conservative + anchored: real assistant/tool text is never stripped; unknown
|
|
264
|
+
* frameworks still get the shared footer/glyph/timer stripping. (task #63)
|
|
265
|
+
*/
|
|
266
|
+
export function stripVolatileStatus(output, framework) {
|
|
267
|
+
if (!output)
|
|
268
|
+
return output;
|
|
269
|
+
const sig = getActivitySignal(framework);
|
|
270
|
+
// Strip volatile TOKENS from each line (not the whole line): real hosts put
|
|
271
|
+
// genuine progress on the same line as the spinner/affordance — e.g.
|
|
272
|
+
// `Bash(npm test) step 2 (esc to interrupt)` — so dropping the line would erase
|
|
273
|
+
// the real active→silent signal. We remove only the parts that change without
|
|
274
|
+
// real progress: the rotating glyph, the `esc to interrupt` affordance phrase,
|
|
275
|
+
// the elapsed-time and token/context counters.
|
|
276
|
+
const escPhrase = new RegExp(sig.escapeToInterrupt.source, 'gi');
|
|
277
|
+
return output
|
|
278
|
+
.split('\n')
|
|
279
|
+
.map((line) => line
|
|
280
|
+
.replace(/[⠀-⣿]/g, '') // Braille spinner glyphs
|
|
281
|
+
.replace(escPhrase, '') // the "esc to interrupt" affordance phrase
|
|
282
|
+
.replace(/\b\d+m\s*\d+s\b/g, '') // elapsed "26m 16s"
|
|
283
|
+
.replace(/\(\s*\d+\s*s\b/g, '(') // "(12s …" working-status seconds
|
|
284
|
+
.replace(/[↑↓]\s*[\d.,]+\s*k?\s*tokens?/gi, '') // token counter
|
|
285
|
+
.replace(/\b\d+%\s*context\b/gi, ''))
|
|
286
|
+
.join('\n');
|
|
287
|
+
}
|
|
245
288
|
function cheapHash(s) {
|
|
246
289
|
let h = 0x811c9dc5;
|
|
247
290
|
for (let i = 0; i < s.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinelWiring.js","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sentinelWiring.js","sourceRoot":"","sources":["../../src/monitoring/sentinelWiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAgG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA2E/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2B1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CAiuCR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuSR"}
|
|
@@ -446,6 +446,7 @@ This routes feedback to the Instar maintainers automatically. Valid types: \`bug
|
|
|
446
446
|
- The endpoint resolves the Updates topic from state server-side; you cannot specify a topic and you should not try to.
|
|
447
447
|
- If Updates is not configured, the endpoint returns 400 — do NOT fall back to sending in the active topic. Update-class messages belong in Updates or they don't go out at all.
|
|
448
448
|
- **When to use** (PROACTIVE — this is the trigger): the moment I am about to author a conversational message whose subject is *me* shipping, updating, or restarting — including post-restart "I'm back" confirmations — I use this endpoint. Authoring such a message via the standard Telegram reply path puts release chatter into whatever conversation the user was last in, which is the bug this routing closes.
|
|
449
|
+
- **Maturity honesty (silent-by-default user announcements)**: user-facing update announcements are *opt-in and maturity-tagged*, authored in the release's upgrade guide (\`user_announcement\` front-matter: each change is \`audience: user|agent-only\` + \`maturity: experimental|preview|stable\`). The post-update notifier stays SILENT unless a change was explicitly promoted to \`audience: user\`, and experimental/preview features are announced as such (⚗️ Experimental / 🧪 Preview) — never implied to be finished. When I narrate my own ship here, I mirror that honesty: I do NOT announce a feature that ships dark/disabled as if it works, and I don't dress up an infra change as a finished capability. Patch-level "restarting…" notices are suppressed (only deferral warnings — "your work is holding a restart" — still surface).
|
|
449
450
|
|
|
450
451
|
**Secret Drop** — Securely collect secrets (API keys, passwords, tokens) from users without exposing them in chat history.
|
|
451
452
|
- Request a secret: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/secrets/request -H 'Content-Type: application/json' -d '{"label":"OpenAI API Key","description":"Needed for GPT integration","topicId":TOPIC_ID}'\`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAuB;IACrD,OAAO,KAAK,QAAQ,CAAC,IAAI;;;;OAIpB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;;;;EAIpC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;6BAsBO,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D7C,CAAC;AAEF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,WAAmB,EAAE,QAAgB;IACrF,OAAO;;;;;;;;;;;;;;;;;;EAkBP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkDH,QAAQ;;;;;CAKjB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,KAAK,QAAQ;;;;;;;;;;;;;;4CAcsB,QAAQ;CACnD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,SAAiB,EACjB,IAAY,EACZ,WAAoB,EACpB,cAAuB,KAAK,EAC5B,cAAuB,KAAK;IAE5B,IAAI,OAAO,GAAG,iBAAiB,WAAW;;;;OAIrC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCT,SAAS;;gCAEgB,IAAI,kFAAkF,IAAI;;;;;;;;;;;;;8EAa5C,IAAI;;;yFAGO,IAAI;;;;;;;uGAOU,IAAI;;;;;;;;;;;;;;;;;;;;;;;0CAuBjE,IAAI;oCACV,IAAI;;;;;;;;;;;;;yDAaiB,IAAI;;;;;;;;;;;;gCAY7B,IAAI;;;;;;;;;sFASkD,IAAI;4FACE,IAAI;;;;;;;mEAO7B,IAAI;8EACO,IAAI;;;mEAGf,IAAI;4EACK,IAAI;;;;;sHAKsC,IAAI;+WACqP,IAAI;;;;;uEAK5S,IAAI;;;;;sEAKL,IAAI;;;;;;6EAMG,IAAI;;2FAEU,IAAI;qFACV,IAAI;;;;;;mGAMU,IAAI;;;;;yHAKkB,IAAI;0JAC6B,IAAI;;;;mEAI3F,IAAI;;;8EAGO,IAAI;6EACL,IAAI;0EACP,IAAI;;;;;6EAKD,IAAI;yCACxC,IAAI;mEACsB,IAAI;4EACK,IAAI;+EACD,IAAI;;;;;2EAKR,IAAI
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scaffold/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -706,9 +706,48 @@ HUMAN-REQUIRED: reproduction + observed before/after, or "Not reproducible in de
|
|
|
706
706
|
return out;
|
|
707
707
|
}
|
|
708
708
|
|
|
709
|
+
/**
|
|
710
|
+
* Build the silent-by-default `user_announcement` front-matter block
|
|
711
|
+
* (MATURE-UPDATE-ANNOUNCEMENTS spec D3). One entry per feature/enhancement,
|
|
712
|
+
* every entry defaulting to `audience: agent-only` + `maturity: experimental`
|
|
713
|
+
* — so NOTHING reaches the user until a human deliberately flips an entry to
|
|
714
|
+
* `audience: user`. An un-reviewed block is therefore SAFE (it announces
|
|
715
|
+
* nothing). Parsed at notify-time by src/core/upgradeAnnouncement.ts; the
|
|
716
|
+
* coherence check over edited entries is the canonical TS helper
|
|
717
|
+
* `announcementCoherenceWarnings`.
|
|
718
|
+
*/
|
|
719
|
+
function buildAnnouncementFrontmatter(changeDescriptions) {
|
|
720
|
+
const candidates = changeDescriptions.filter(
|
|
721
|
+
(d) => d.type === 'feature' || d.type === 'enhancement'
|
|
722
|
+
);
|
|
723
|
+
const yamlStr = (s) => `"${String(s ?? '').replace(/"/g, '\\"')}"`;
|
|
724
|
+
const entries = candidates.length
|
|
725
|
+
? candidates
|
|
726
|
+
.map(
|
|
727
|
+
(d) =>
|
|
728
|
+
` - audience: agent-only # flip to "user" to announce to the user
|
|
729
|
+
maturity: experimental # experimental | preview | stable
|
|
730
|
+
headline: ${yamlStr(sanitizeDraftText(d.summary))}
|
|
731
|
+
body: ${yamlStr('HUMAN-REQUIRED: one or two plain sentences for the user, matching the maturity above')}`
|
|
732
|
+
)
|
|
733
|
+
.join('\n')
|
|
734
|
+
: ' # (no feature/enhancement changes detected — add an entry only if a change is user-facing)';
|
|
735
|
+
|
|
736
|
+
return `---
|
|
737
|
+
# user_announcement — SILENT BY DEFAULT (mature-update-announcements spec).
|
|
738
|
+
# Every entry below defaults to agent-only, so the user hears NOTHING about this
|
|
739
|
+
# release until you deliberately set an entry's audience to "user". Then set its
|
|
740
|
+
# maturity honestly: experimental (early, not for general use), preview (try it,
|
|
741
|
+
# still rough), or stable (finished, use it now).
|
|
742
|
+
user_announcement:
|
|
743
|
+
${entries}
|
|
744
|
+
---
|
|
745
|
+
`;
|
|
746
|
+
}
|
|
747
|
+
|
|
709
748
|
/** Full NEXT.md draft (used when the guide is absent or a pristine template). */
|
|
710
749
|
function buildFullDraft(changeDescriptions, recommended, hasFix) {
|
|
711
|
-
return
|
|
750
|
+
return `${buildAnnouncementFrontmatter(changeDescriptions)}# Upgrade Guide — vNEXT
|
|
712
751
|
|
|
713
752
|
<!-- bump: ${recommended} -->
|
|
714
753
|
${UNREVIEWED_BLOCK_MARKER}
|
|
@@ -941,6 +980,25 @@ if (guideContent) {
|
|
|
941
980
|
if (guideCoverage.gaps.length === 0) {
|
|
942
981
|
log(`\n ✓ Upgrade guide adequately covers all detected changes.`);
|
|
943
982
|
}
|
|
983
|
+
|
|
984
|
+
// Silent-by-default author guard (mature-update-announcements spec, D3):
|
|
985
|
+
// when a release ships user-relevant changes but the guide carries NO
|
|
986
|
+
// `user_announcement` block at all, every change is silent to the user. That
|
|
987
|
+
// is correct for an all-internal release, but it is also exactly what a
|
|
988
|
+
// forgotten block looks like. Emit a NON-BLOCKING advisory so the author
|
|
989
|
+
// consciously decides — `instar` analyze --draft-guide scaffolds the block
|
|
990
|
+
// (defaulting agent-only), so its total absence means the scaffold was
|
|
991
|
+
// bypassed. Structure informs; the author decides (never blocks).
|
|
992
|
+
const userRelevantChanges = changeDescriptions.filter(
|
|
993
|
+
(d) => d.type === 'feature' || d.type === 'enhancement',
|
|
994
|
+
).length;
|
|
995
|
+
if (userRelevantChanges > 0 && !/^\s*user_announcement\s*:/m.test(guideContent)) {
|
|
996
|
+
log(
|
|
997
|
+
`\n ⚠ This release has ${userRelevantChanges} user-relevant change(s) but the guide has no ` +
|
|
998
|
+
`\`user_announcement\` block — nothing will be announced to the user. If any change is ` +
|
|
999
|
+
`user-ready, add a block (\`audience: user\` + a maturity); otherwise this silence is correct.`,
|
|
1000
|
+
);
|
|
1001
|
+
}
|
|
944
1002
|
} else {
|
|
945
1003
|
log(`\n ⚠ No upgrade guide found — cannot validate coverage.`);
|
|
946
1004
|
}
|