ftown 0.25.2 → 0.25.3

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.
Files changed (71) hide show
  1. package/dist/command-rpc.d.ts +3 -0
  2. package/dist/command-rpc.js +41 -0
  3. package/dist/command-rpc.js.map +1 -1
  4. package/dist/ftown-cli.js +5 -2
  5. package/dist/ftown-cli.js.map +1 -1
  6. package/dist/index.js +3 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/quota/agy.d.ts +16 -0
  9. package/dist/quota/agy.js +287 -0
  10. package/dist/quota/agy.js.map +1 -0
  11. package/dist/quota/annotate.d.ts +5 -0
  12. package/dist/quota/annotate.js +56 -0
  13. package/dist/quota/annotate.js.map +1 -0
  14. package/dist/quota/claude.d.ts +27 -0
  15. package/dist/quota/claude.js +265 -0
  16. package/dist/quota/claude.js.map +1 -0
  17. package/dist/quota/codex.d.ts +25 -0
  18. package/dist/quota/codex.js +378 -0
  19. package/dist/quota/codex.js.map +1 -0
  20. package/dist/quota/format.d.ts +6 -0
  21. package/dist/quota/format.js +113 -0
  22. package/dist/quota/format.js.map +1 -0
  23. package/dist/quota/grok.d.ts +97 -0
  24. package/dist/quota/grok.js +563 -0
  25. package/dist/quota/grok.js.map +1 -0
  26. package/dist/quota/models-agy.d.ts +10 -0
  27. package/dist/quota/models-agy.js +144 -0
  28. package/dist/quota/models-agy.js.map +1 -0
  29. package/dist/quota/models-claude.d.ts +10 -0
  30. package/dist/quota/models-claude.js +227 -0
  31. package/dist/quota/models-claude.js.map +1 -0
  32. package/dist/quota/models-codex.d.ts +18 -0
  33. package/dist/quota/models-codex.js +305 -0
  34. package/dist/quota/models-codex.js.map +1 -0
  35. package/dist/quota/models-grok.d.ts +19 -0
  36. package/dist/quota/models-grok.js +272 -0
  37. package/dist/quota/models-grok.js.map +1 -0
  38. package/dist/quota/models-muse.d.ts +13 -0
  39. package/dist/quota/models-muse.js +200 -0
  40. package/dist/quota/models-muse.js.map +1 -0
  41. package/dist/quota/models-opencode.d.ts +51 -0
  42. package/dist/quota/models-opencode.js +400 -0
  43. package/dist/quota/models-opencode.js.map +1 -0
  44. package/dist/quota/muse.d.ts +38 -0
  45. package/dist/quota/muse.js +225 -0
  46. package/dist/quota/muse.js.map +1 -0
  47. package/dist/quota/opencode.d.ts +7 -0
  48. package/dist/quota/opencode.js +47 -0
  49. package/dist/quota/opencode.js.map +1 -0
  50. package/dist/quota/routing-config.d.ts +18 -0
  51. package/dist/quota/routing-config.js +438 -0
  52. package/dist/quota/routing-config.js.map +1 -0
  53. package/dist/quota/routing-service.d.ts +24 -0
  54. package/dist/quota/routing-service.js +118 -0
  55. package/dist/quota/routing-service.js.map +1 -0
  56. package/dist/quota/routing.d.ts +10 -0
  57. package/dist/quota/routing.js +180 -0
  58. package/dist/quota/routing.js.map +1 -0
  59. package/dist/quota/types.d.ts +304 -0
  60. package/dist/quota/types.js +45 -0
  61. package/dist/quota/types.js.map +1 -0
  62. package/dist/quota-cli.d.ts +80 -0
  63. package/dist/quota-cli.js +462 -0
  64. package/dist/quota-cli.js.map +1 -0
  65. package/dist/security/bridge/permissions.js +4 -2
  66. package/dist/security/bridge/permissions.js.map +1 -1
  67. package/dist/types.d.ts +2 -2
  68. package/package.json +3 -2
  69. package/skills/ftown/SKILL.md +2 -1
  70. package/skills/ftown/references/orchestrator.md +5 -0
  71. package/skills/ftown/references/quota.md +177 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-opencode.js","sourceRoot":"","sources":["../../src/quota/models-opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ProviderQuota, QuotaFetchOptions, QuotaFetcher } from './types.js';
2
+ /**
3
+ * Pure: maps the parsed JSON of `muse usage --json` onto a ProviderQuota.
4
+ * Never throws.
5
+ */
6
+ export declare function parseMuseUsage(body: unknown, now: Date): ProviderQuota;
7
+ /**
8
+ * Pure: extracts the JSON document from `muse usage --json` stdout. The
9
+ * launcher may print notices around it. Order: the whole stdout; then each
10
+ * line (trimmed) that starts with `{`, last line first. The first candidate
11
+ * that parses to an object wins. Returns undefined when none does.
12
+ */
13
+ export declare function extractMuseJson(stdout: string): unknown | undefined;
14
+ /**
15
+ * Pure: classifies a non-zero `muse usage` exit. Auth wording in stderr (as a
16
+ * whole word) yields `auth`; anything else yields `error` with the exit code.
17
+ */
18
+ export declare function classifyMuseFailure(exitCode: number | null, stderr: string): {
19
+ status: 'auth' | 'error';
20
+ message: string;
21
+ };
22
+ export interface MuseRetryDeps {
23
+ /** Runs one attempt with the given timeout (the remaining overall budget). */
24
+ runUsage: (timeoutMs: number) => Promise<ProviderQuota>;
25
+ sleep: (ms: number) => Promise<void>;
26
+ /** Monotonic-ish clock in milliseconds, used only for budget accounting. */
27
+ nowMs: () => number;
28
+ }
29
+ /**
30
+ * Retry loop for muse. Muse often answers "no allowance" on the first ask and
31
+ * real numbers a few seconds later, so a `no_data` result is retried after
32
+ * RETRY_DELAY_MS, at most MAX_ATTEMPTS attempts in total. Other statuses are
33
+ * returned immediately. A retry only starts when the budget left after the
34
+ * wait is at least MIN_ATTEMPT_BUDGET_MS; the first attempt always runs with
35
+ * the full budget.
36
+ */
37
+ export declare function fetchMuseQuotaWith(options: QuotaFetchOptions, deps: MuseRetryDeps): Promise<ProviderQuota>;
38
+ export declare const fetchMuseQuota: QuotaFetcher;
@@ -0,0 +1,225 @@
1
+ import { execFile } from 'node:child_process';
2
+ /**
3
+ * Muse (Meta "Muse Code" CLI) subscription quota provider.
4
+ *
5
+ * Source: `muse usage --json`, documented as "Show your subscription allowance
6
+ * (no model turn)". The populated `allowance` shape was not observed live
7
+ * (the server only ever returned `allowance: null` during research), so every
8
+ * field is accepted in both camelCase and snake_case.
9
+ */
10
+ const MUSE_WEEKLY_MINUTES = 10080;
11
+ const MAX_ATTEMPTS = 3;
12
+ const RETRY_DELAY_MS = 2000;
13
+ const MIN_ATTEMPT_BUDGET_MS = 3000;
14
+ const HINT_MAX_CHARS = 160;
15
+ const NO_ALLOWANCE_MESSAGE = 'muse reported no allowance yet (it appears after the first use in a window)';
16
+ const NO_WINDOW_MESSAGE = 'muse reported an allowance without any window';
17
+ const UNEXPECTED_OUTPUT_MESSAGE = 'unexpected output from `muse usage --json`';
18
+ function isRecord(value) {
19
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
20
+ }
21
+ function firstFinite(record, keys) {
22
+ for (const key of keys) {
23
+ const value = record[key];
24
+ if (typeof value === 'number' && Number.isFinite(value))
25
+ return value;
26
+ }
27
+ return null;
28
+ }
29
+ function epochMsToIso(ms) {
30
+ if (ms === null || ms <= 0)
31
+ return null;
32
+ const date = new Date(ms);
33
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
34
+ }
35
+ function buildWindow(kind, raw, windowMinutes) {
36
+ return {
37
+ kind,
38
+ usedPercent: firstFinite(raw, ['usedPercent', 'used_percent']),
39
+ resetsAt: epochMsToIso(firstFinite(raw, ['resetsAtMs', 'resets_at_ms'])),
40
+ windowMinutes,
41
+ note: null,
42
+ };
43
+ }
44
+ function normalizeHint(hint) {
45
+ if (typeof hint !== 'string')
46
+ return null;
47
+ const collapsed = hint.replace(/\s+/g, ' ').trim();
48
+ if (collapsed.length === 0)
49
+ return null;
50
+ return collapsed.slice(0, HINT_MAX_CHARS);
51
+ }
52
+ /**
53
+ * Pure: maps the parsed JSON of `muse usage --json` onto a ProviderQuota.
54
+ * Never throws.
55
+ */
56
+ export function parseMuseUsage(body, now) {
57
+ const nowIso = now.toISOString();
58
+ if (!isRecord(body)) {
59
+ return {
60
+ provider: 'muse',
61
+ status: 'error',
62
+ plan: null,
63
+ windows: [],
64
+ source: 'live',
65
+ observedAt: nowIso,
66
+ message: UNEXPECTED_OUTPUT_MESSAGE,
67
+ };
68
+ }
69
+ const allowance = body.allowance;
70
+ if (!isRecord(allowance)) {
71
+ return {
72
+ provider: 'muse',
73
+ status: 'no_data',
74
+ plan: null,
75
+ windows: [],
76
+ source: 'live',
77
+ observedAt: nowIso,
78
+ message: normalizeHint(body.hint) ?? NO_ALLOWANCE_MESSAGE,
79
+ };
80
+ }
81
+ const tier = allowance.tier;
82
+ const plan = typeof tier === 'string' ? tier : null;
83
+ const observedAt = epochMsToIso(firstFinite(allowance, ['asOfMs', 'as_of_ms', 'observedAtMs', 'observed_at_ms'])) ??
84
+ nowIso;
85
+ const windows = [];
86
+ if (isRecord(allowance.window)) {
87
+ const durationMins = firstFinite(allowance.window, ['windowDurationMins', 'window_duration_mins']);
88
+ const windowMinutes = durationMins !== null && durationMins > 0 ? durationMins : null;
89
+ windows.push(buildWindow('five_hour', allowance.window, windowMinutes));
90
+ }
91
+ if (isRecord(allowance.weekly)) {
92
+ windows.push(buildWindow('weekly', allowance.weekly, MUSE_WEEKLY_MINUTES));
93
+ }
94
+ const status = windows.length > 0 ? 'ok' : 'no_data';
95
+ return {
96
+ provider: 'muse',
97
+ status,
98
+ plan,
99
+ windows,
100
+ source: 'live',
101
+ observedAt,
102
+ message: status === 'ok' ? null : NO_WINDOW_MESSAGE,
103
+ };
104
+ }
105
+ function nonParseFailure(status, message, now) {
106
+ return {
107
+ provider: 'muse',
108
+ status,
109
+ plan: null,
110
+ windows: [],
111
+ source: 'live',
112
+ observedAt: now.toISOString(),
113
+ message,
114
+ };
115
+ }
116
+ /**
117
+ * Pure: extracts the JSON document from `muse usage --json` stdout. The
118
+ * launcher may print notices around it. Order: the whole stdout; then each
119
+ * line (trimmed) that starts with `{`, last line first. The first candidate
120
+ * that parses to an object wins. Returns undefined when none does.
121
+ */
122
+ export function extractMuseJson(stdout) {
123
+ const trimmed = stdout.trim();
124
+ try {
125
+ const whole = JSON.parse(trimmed);
126
+ if (isRecord(whole))
127
+ return whole;
128
+ }
129
+ catch {
130
+ // fall through to line-by-line extraction
131
+ }
132
+ const lines = trimmed.split(/\r?\n/).map((line) => line.trim());
133
+ for (let i = lines.length - 1; i >= 0; i -= 1) {
134
+ const line = lines[i];
135
+ if (!line.startsWith('{'))
136
+ continue;
137
+ try {
138
+ const parsed = JSON.parse(line);
139
+ if (isRecord(parsed))
140
+ return parsed;
141
+ }
142
+ catch {
143
+ // not a JSON line; keep scanning upward
144
+ }
145
+ }
146
+ return undefined;
147
+ }
148
+ const AUTH_PATTERN = /\b(log ?in|logged out|sign ?in|signed out|unauthori[sz]ed|unauthenticated|authenticat\w*|not authenticated)\b/i;
149
+ /**
150
+ * Pure: classifies a non-zero `muse usage` exit. Auth wording in stderr (as a
151
+ * whole word) yields `auth`; anything else yields `error` with the exit code.
152
+ */
153
+ export function classifyMuseFailure(exitCode, stderr) {
154
+ if (AUTH_PATTERN.test(stderr)) {
155
+ return { status: 'auth', message: 'muse login problem: run `muse` and sign in' };
156
+ }
157
+ const shown = exitCode === null ? 'unknown' : String(exitCode);
158
+ return { status: 'error', message: `\`muse usage\` failed (exit ${shown})` };
159
+ }
160
+ /** One execution of `muse usage --json` with the given timeout, parsed and classified. Never rejects. */
161
+ function runMuseUsageOnce(now, timeoutMs) {
162
+ return new Promise((resolve) => {
163
+ try {
164
+ execFile('muse', ['usage', '--json'], { timeout: timeoutMs, encoding: 'utf8', maxBuffer: 1024 * 1024, windowsHide: true }, (error, stdout, stderr) => {
165
+ try {
166
+ if (error) {
167
+ const code = error.code;
168
+ const killed = error.killed === true;
169
+ if (code === 'ENOENT') {
170
+ resolve(nonParseFailure('unavailable', 'muse CLI not found', now));
171
+ return;
172
+ }
173
+ if (killed) {
174
+ resolve(nonParseFailure('error', '`muse usage` timed out', now));
175
+ return;
176
+ }
177
+ const failure = classifyMuseFailure(typeof code === 'number' ? code : null, String(stderr));
178
+ resolve(nonParseFailure(failure.status, failure.message, now));
179
+ return;
180
+ }
181
+ const parsed = extractMuseJson(String(stdout));
182
+ if (parsed === undefined) {
183
+ resolve(nonParseFailure('error', UNEXPECTED_OUTPUT_MESSAGE, now));
184
+ return;
185
+ }
186
+ resolve(parseMuseUsage(parsed, now));
187
+ }
188
+ catch {
189
+ resolve(nonParseFailure('error', UNEXPECTED_OUTPUT_MESSAGE, now));
190
+ }
191
+ });
192
+ }
193
+ catch {
194
+ resolve(nonParseFailure('error', '`muse usage` failed to start', now));
195
+ }
196
+ });
197
+ }
198
+ /**
199
+ * Retry loop for muse. Muse often answers "no allowance" on the first ask and
200
+ * real numbers a few seconds later, so a `no_data` result is retried after
201
+ * RETRY_DELAY_MS, at most MAX_ATTEMPTS attempts in total. Other statuses are
202
+ * returned immediately. A retry only starts when the budget left after the
203
+ * wait is at least MIN_ATTEMPT_BUDGET_MS; the first attempt always runs with
204
+ * the full budget.
205
+ */
206
+ export async function fetchMuseQuotaWith(options, deps) {
207
+ const start = deps.nowMs();
208
+ const remaining = () => options.timeoutMs - (deps.nowMs() - start);
209
+ let result = await deps.runUsage(options.timeoutMs);
210
+ for (let attempt = 2; attempt <= MAX_ATTEMPTS && result.status === 'no_data'; attempt += 1) {
211
+ if (remaining() - RETRY_DELAY_MS < MIN_ATTEMPT_BUDGET_MS)
212
+ break;
213
+ await deps.sleep(RETRY_DELAY_MS);
214
+ result = await deps.runUsage(remaining());
215
+ }
216
+ return result;
217
+ }
218
+ export const fetchMuseQuota = (options) => fetchMuseQuotaWith(options, {
219
+ runUsage: (timeoutMs) => runMuseUsageOnce(options.now(), timeoutMs),
220
+ sleep: (ms) => new Promise((resolve) => {
221
+ setTimeout(resolve, ms);
222
+ }),
223
+ nowMs: () => Date.now(),
224
+ });
225
+ //# sourceMappingURL=muse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muse.js","sourceRoot":"","sources":["../../src/quota/muse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { QuotaFetcher } from './types.js';
2
+ /**
3
+ * Reports opencode's subscription quota as unavailable, because opencode has no
4
+ * usage source to read. Only the CLI's presence is checked; nothing is spawned.
5
+ * Never throws or rejects.
6
+ */
7
+ export declare const fetchOpencodeQuota: QuotaFetcher;
@@ -0,0 +1,47 @@
1
+ import { resolveOpencodeBinary } from './models-opencode.js';
2
+ /**
3
+ * opencode subscription quota provider.
4
+ *
5
+ * opencode exposes no plan usage to scripts: `opencode stats` reports token and
6
+ * cost totals, not plan limits, and its local server has no such route. So this
7
+ * provider reports `unavailable` with no windows, and says so. It only checks
8
+ * that the CLI is installed.
9
+ */
10
+ const NO_USAGE_MESSAGE = 'opencode has no usage command for its subscription plans';
11
+ const NOT_FOUND_MESSAGE = 'opencode CLI not found';
12
+ const CHECK_FAILED_MESSAGE = 'opencode CLI check failed';
13
+ function observedNow(options) {
14
+ try {
15
+ return options.now().toISOString();
16
+ }
17
+ catch {
18
+ return new Date().toISOString();
19
+ }
20
+ }
21
+ function quotaWith(status, observedAt, message) {
22
+ return {
23
+ provider: 'opencode',
24
+ status,
25
+ plan: null,
26
+ windows: [],
27
+ source: 'live',
28
+ observedAt,
29
+ message,
30
+ };
31
+ }
32
+ /**
33
+ * Reports opencode's subscription quota as unavailable, because opencode has no
34
+ * usage source to read. Only the CLI's presence is checked; nothing is spawned.
35
+ * Never throws or rejects.
36
+ */
37
+ export const fetchOpencodeQuota = async (options) => {
38
+ const observedAt = observedNow(options);
39
+ try {
40
+ const binary = await resolveOpencodeBinary(options.homeDir, process.env.PATH);
41
+ return quotaWith('unavailable', observedAt, binary === null ? NOT_FOUND_MESSAGE : NO_USAGE_MESSAGE);
42
+ }
43
+ catch {
44
+ return quotaWith('error', observedAt, CHECK_FAILED_MESSAGE);
45
+ }
46
+ };
47
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/quota/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;GAOG;AAEH,MAAM,gBAAgB,GAAG,0DAA0D,CAAC;AACpF,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AACnD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD,SAAS,WAAW,CAAC,OAA0B;IAC7C,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAA+B,EAAE,UAAkB,EAAE,OAAe;IACrF,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,MAAM;QACN,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,MAAM;QACd,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACtG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ModelRoutingConfig, ProviderModels, RoutingConfigParseResult, RoutingConfigState } from './types.js';
2
+ type LoadResult = {
3
+ state: RoutingConfigState;
4
+ config: ModelRoutingConfig | null;
5
+ };
6
+ export declare function parseModelRoutingConfig(json: unknown): RoutingConfigParseResult;
7
+ export declare function validatePicksAgainstModels(config: ModelRoutingConfig, models: readonly ProviderModels[]): string[];
8
+ export declare function starterRoutingConfig(): ModelRoutingConfig;
9
+ /** The routing file path, or "" when homeDir is not an absolute path (never relative to the working directory). */
10
+ export declare function resolveRoutingPath(homeDir: string): string;
11
+ export declare function loadRoutingConfig(homeDir: string): Promise<LoadResult>;
12
+ export declare function saveRoutingConfig(homeDir: string, config: ModelRoutingConfig): Promise<{
13
+ ok: true;
14
+ } | {
15
+ ok: false;
16
+ error: string;
17
+ }>;
18
+ export {};