@ghfs/cli 0.1.1 → 0.2.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.
Files changed (78) hide show
  1. package/README.md +41 -1
  2. package/dist/cli.mjs +5710 -572
  3. package/dist/{factory-DmX3S7tf.mjs → factory-UMSInaa_.mjs} +379 -102
  4. package/dist/index.d.mts +363 -2
  5. package/dist/index.mjs +1 -1
  6. package/dist/ui/200.html +1 -1
  7. package/dist/ui/404.html +1 -1
  8. package/dist/ui/_nuxt/3t-6YNGz.js +1 -0
  9. package/dist/ui/_nuxt/{D8rZpOte.js → B0tHio-l.js} +1 -1
  10. package/dist/ui/_nuxt/BBxLfTx_.js +1 -0
  11. package/dist/ui/_nuxt/{Bp3cYrEr.js → BDEKrZIi.js} +1 -1
  12. package/dist/ui/_nuxt/{oH_c3LbQ.js → BMKCr1FU.js} +1 -1
  13. package/dist/ui/_nuxt/BO53GVu8.js +1 -0
  14. package/dist/ui/_nuxt/BvOdM423.js +1 -0
  15. package/dist/ui/_nuxt/Bzq9aFVy.js +1 -0
  16. package/dist/ui/_nuxt/{BLtJtn59.js → CRqJ_cUM.js} +1 -1
  17. package/dist/ui/_nuxt/{DbWOdLaN.js → CV3vykTa.js} +1 -1
  18. package/dist/ui/_nuxt/{8syuri0t.js → ChS_g7wu.js} +1 -1
  19. package/dist/ui/_nuxt/{DWX1VroF.js → ChgxH8nk.js} +1 -1
  20. package/dist/ui/_nuxt/CrQuFoFY.js +1 -0
  21. package/dist/ui/_nuxt/D0jeqgqx.js +1 -0
  22. package/dist/ui/_nuxt/DCJHYwE6.js +67 -0
  23. package/dist/ui/_nuxt/{CANp3yme.js → DMkUaiYH.js} +1 -1
  24. package/dist/ui/_nuxt/DRcdqDVD.js +1 -0
  25. package/dist/ui/_nuxt/DRje8inN.js +1 -0
  26. package/dist/ui/_nuxt/DS2KJUFh.js +1 -0
  27. package/dist/ui/_nuxt/{COcwbKMJ.js → DSvCPggb.js} +1 -1
  28. package/dist/ui/_nuxt/DToHIG1N.js +1 -0
  29. package/dist/ui/_nuxt/{D4Qn4bBI.js → DWbelWgw.js} +1 -1
  30. package/dist/ui/_nuxt/Dc-i7Zfu.js +1 -0
  31. package/dist/ui/_nuxt/{B6eN_cS4.js → Df2X-ZUM.js} +1 -1
  32. package/dist/ui/_nuxt/{CG8Ifv2g.js → DhaYTIfE.js} +1 -1
  33. package/dist/ui/_nuxt/DiuiI0_S.js +1 -0
  34. package/dist/ui/_nuxt/Dl1uYT3n.js +15 -0
  35. package/dist/ui/_nuxt/Dqspr-GT.js +1 -0
  36. package/dist/ui/_nuxt/{DN-Z_aST.js → Dsmy0J62.js} +1 -1
  37. package/dist/ui/_nuxt/{DM8c43g1.js → HgPamjhh.js} +1 -1
  38. package/dist/ui/_nuxt/KW6xsasC.js +1 -0
  39. package/dist/ui/_nuxt/{CRBrlGZW.js → LYj2JSs-.js} +1 -1
  40. package/dist/ui/_nuxt/MRO5bC_T.js +1 -0
  41. package/dist/ui/_nuxt/Project.BMA756E4.css +1 -0
  42. package/dist/ui/_nuxt/W70NOuRA.js +1 -0
  43. package/dist/ui/_nuxt/builds/latest.json +1 -1
  44. package/dist/ui/_nuxt/builds/meta/283a6ae8-b1fa-4a56-aab5-927ed1779674.json +1 -0
  45. package/dist/ui/_nuxt/{C7UmGho8.js → e9S_qqu4.js} +1 -1
  46. package/dist/ui/_nuxt/entry.DnCs62PI.css +1 -0
  47. package/dist/ui/_nuxt/error-404.CiGdHkfa.css +1 -0
  48. package/dist/ui/_nuxt/error-500.DrZuPeVU.css +1 -0
  49. package/dist/ui/_nuxt/index.C3E0NnSu.css +1 -0
  50. package/dist/ui/_nuxt/ivQhLDHX.js +11 -0
  51. package/dist/ui/_nuxt/{DElX3lK9.js → ka8bt-K2.js} +17 -17
  52. package/dist/ui/_nuxt/zinMudAE.js +1 -0
  53. package/dist/ui/hub/index.html +1 -0
  54. package/dist/ui/hub/queue/index.html +1 -0
  55. package/dist/ui/hub/recent/index.html +1 -0
  56. package/dist/ui/index.html +1 -1
  57. package/dist/ui/queue/index.html +1 -0
  58. package/dist/ui/recent/index.html +1 -0
  59. package/package.json +25 -26
  60. package/skills/ghfs/SKILL.md +10 -0
  61. package/dist/provider-DCIsHVeA.d.mts +0 -249
  62. package/dist/server/index.d.mts +0 -330
  63. package/dist/server/index.mjs +0 -2
  64. package/dist/server-BwSU4kqr.mjs +0 -3518
  65. package/dist/ui/_nuxt/BhrAK1vL.js +0 -1
  66. package/dist/ui/_nuxt/C-HG3fhB.js +0 -1
  67. package/dist/ui/_nuxt/C4zNGwhW.js +0 -1
  68. package/dist/ui/_nuxt/CFbOZP3I.js +0 -75
  69. package/dist/ui/_nuxt/D8_7TLub.js +0 -1
  70. package/dist/ui/_nuxt/DU1UobuO.js +0 -1
  71. package/dist/ui/_nuxt/DnF83RMp.js +0 -1
  72. package/dist/ui/_nuxt/JZbLTBME.js +0 -1
  73. package/dist/ui/_nuxt/W9tJ9s81.js +0 -1
  74. package/dist/ui/_nuxt/builds/meta/12d68071-f4db-447f-b929-9033d66eadc3.json +0 -1
  75. package/dist/ui/_nuxt/entry.DfrFFNxd.css +0 -1
  76. package/dist/ui/_nuxt/eo99z4R2.js +0 -1
  77. package/dist/ui/_nuxt/error-404.C93cll2q.css +0 -1
  78. package/dist/ui/_nuxt/error-500.CPQqaJsC.css +0 -1
@@ -1,330 +0,0 @@
1
- import { c as ProviderTimelineEvent, d as IssueState, f as GhfsResolvedConfig, i as ProviderItem, n as ProviderComment, r as ProviderCommit, s as ProviderPullMetadata, u as IssueKind } from "../provider-DCIsHVeA.mjs";
2
-
3
- //#region src/types/execution.d.ts
4
- interface ExecutionResult {
5
- runId: string;
6
- createdAt: string;
7
- mode: 'report' | 'apply';
8
- repo: string;
9
- applied: number;
10
- planned: number;
11
- failed: number;
12
- details: Array<{
13
- op: number;
14
- action: string;
15
- number: number;
16
- target?: IssueKind;
17
- status: 'planned' | 'applied' | 'failed' | 'skipped';
18
- message: string;
19
- }>;
20
- }
21
- //#endregion
22
- //#region src/types/sync-state.d.ts
23
- type SyncRunStage = 'metadata' | 'pagination' | 'fetch' | 'materialize' | 'prune' | 'save';
24
- interface SyncRunCounters {
25
- scanned: number;
26
- selected: number;
27
- processed: number;
28
- skipped: number;
29
- written: number;
30
- moved: number;
31
- patchesWritten: number;
32
- patchesDeleted: number;
33
- }
34
- interface SyncRunTelemetry {
35
- runId: string;
36
- repo: string;
37
- startedAt: string;
38
- finishedAt: string;
39
- durationMs: number;
40
- requestCount: number;
41
- since?: string;
42
- numbersCount?: number;
43
- counters: SyncRunCounters;
44
- stages: Record<SyncRunStage, number>;
45
- }
46
- interface SyncItemCanonicalData {
47
- item: ProviderItem;
48
- comments: ProviderComment[];
49
- pull?: ProviderPullMetadata;
50
- commits?: ProviderCommit[];
51
- timeline?: ProviderTimelineEvent[];
52
- }
53
- interface SyncItemState {
54
- number: number;
55
- kind: IssueKind;
56
- state: IssueState;
57
- lastUpdatedAt: string;
58
- lastSyncedAt: string;
59
- filePath: string;
60
- patchPath?: string;
61
- data: SyncItemCanonicalData;
62
- }
63
- interface SyncState {
64
- version: 2;
65
- ghfsVersion?: string;
66
- repo?: string;
67
- lastSyncedAt?: string;
68
- lastSince?: string;
69
- lastRepoUpdatedAt?: string;
70
- lastSyncRun?: SyncRunTelemetry;
71
- items: Record<string, SyncItemState>;
72
- executions: ExecutionResult[];
73
- }
74
- //#endregion
75
- //#region src/execute/actions.d.ts
76
- declare const ACTIONS_SUPPORTED: readonly ["close", "close-with-comment", "reopen", "set-title", "set-body", "add-comment", "add-labels", "remove-labels", "set-labels", "add-assignees", "remove-assignees", "set-assignees", "set-milestone", "clear-milestone", "lock", "unlock", "request-reviewers", "remove-reviewers", "mark-ready-for-review", "convert-to-draft"];
77
- type ActionName = typeof ACTIONS_SUPPORTED[number];
78
- //#endregion
79
- //#region src/execute/types.d.ts
80
- interface PendingOpBase {
81
- number: number;
82
- action: ActionName;
83
- ifUnchangedSince?: string;
84
- }
85
- interface PendingTitleOp extends PendingOpBase {
86
- action: 'set-title';
87
- title: string;
88
- }
89
- interface PendingBodyOp extends PendingOpBase {
90
- action: 'set-body';
91
- body: string;
92
- }
93
- interface PendingCommentOp extends PendingOpBase {
94
- action: 'add-comment' | 'close-with-comment';
95
- body: string;
96
- }
97
- interface PendingLabelsOp extends PendingOpBase {
98
- action: 'add-labels' | 'remove-labels' | 'set-labels';
99
- labels: string[];
100
- }
101
- interface PendingAssigneesOp extends PendingOpBase {
102
- action: 'add-assignees' | 'remove-assignees' | 'set-assignees';
103
- assignees: string[];
104
- }
105
- interface PendingSetMilestoneOp extends PendingOpBase {
106
- action: 'set-milestone';
107
- milestone: string | number;
108
- }
109
- interface PendingLockOp extends PendingOpBase {
110
- action: 'lock';
111
- reason?: 'resolved' | 'off-topic' | 'too heated' | 'too-heated' | 'spam';
112
- }
113
- interface PendingReviewersOp extends PendingOpBase {
114
- action: 'request-reviewers' | 'remove-reviewers';
115
- reviewers: string[];
116
- }
117
- interface PendingSimpleOp extends PendingOpBase {
118
- action: 'close' | 'reopen' | 'clear-milestone' | 'unlock' | 'mark-ready-for-review' | 'convert-to-draft';
119
- }
120
- type PendingOp = PendingSimpleOp | PendingTitleOp | PendingBodyOp | PendingCommentOp | PendingLabelsOp | PendingAssigneesOp | PendingSetMilestoneOp | PendingLockOp | PendingReviewersOp;
121
- //#endregion
122
- //#region src/sync/contracts.d.ts
123
- type SyncStage = 'metadata' | 'pagination' | 'fetch' | 'materialize' | 'prune' | 'save';
124
- interface SyncProgressSnapshot {
125
- scanned: number;
126
- selected: number;
127
- processed: number;
128
- skipped: number;
129
- written: number;
130
- moved: number;
131
- patchesWritten: number;
132
- patchesDeleted: number;
133
- }
134
- interface SyncSummary {
135
- repo: string;
136
- since?: string;
137
- syncedAt: string;
138
- totalIssues: number;
139
- totalPulls: number;
140
- updatedIssues: number;
141
- updatedPulls: number;
142
- trackedItems: number;
143
- requestCount: number;
144
- selected: number;
145
- processed: number;
146
- skipped: number;
147
- scanned: number;
148
- written: number;
149
- moved: number;
150
- patchesWritten: number;
151
- patchesDeleted: number;
152
- durationMs: number;
153
- }
154
- //#endregion
155
- //#region src/server/ui-state.d.ts
156
- type PrTabId = 'conversation' | 'commits' | 'changes';
157
- interface UserOverride {
158
- login?: string;
159
- name?: string;
160
- avatarUrl?: string;
161
- }
162
- interface UiState {
163
- /** Map of issue number (string) → pending comment draft body. */
164
- drafts: Record<string, string>;
165
- /** Size (in percent) of the list pane in the Splitpanes layout. */
166
- listPaneSize?: number;
167
- /** Last tab selected on the PR detail panel. */
168
- lastPrTab?: PrTabId;
169
- /** Override for the authenticated user info shown in the UI. */
170
- userOverride?: UserOverride;
171
- }
172
- //#endregion
173
- //#region src/server/types.d.ts
174
- interface CurrentUser {
175
- login: string;
176
- name: string | null;
177
- avatarUrl: string;
178
- }
179
- type QueueSource = 'execute.yml' | 'execute.md' | 'per-item';
180
- interface QueueEntry {
181
- /** Stable id derived from source+index+action+number; survives refreshes. */
182
- id: string;
183
- source: QueueSource;
184
- /** Index within its source list (ymlOps concat execute.md ops concat per-item ops). */
185
- index: number;
186
- op: PendingOp;
187
- /** Relative file path under the storage directory, for per-item entries. */
188
- filePath?: string;
189
- }
190
- interface QueueState {
191
- entries: QueueEntry[];
192
- warnings: string[];
193
- /** Total queued ops; drives the ↑ counter. */
194
- upCount: number;
195
- }
196
- interface RemoteStatus {
197
- /** Items updated on GitHub since lastSyncedAt; drives the ↓ counter. */
198
- downCount: number;
199
- /** ISO timestamp of the last poll (success or failure). */
200
- checkedAt: string;
201
- /** True if poll was never run, failed, or no token is available. */
202
- stale: boolean;
203
- /** Optional message explaining stale state (e.g. "Missing token"). */
204
- message?: string;
205
- }
206
- interface RepoMeta {
207
- repo: string;
208
- storageDir: string;
209
- ghfsVersion: string;
210
- lastSyncedAt?: string;
211
- lastSince?: string;
212
- hasToken: boolean;
213
- }
214
- interface RepoLabel {
215
- name: string;
216
- color: string;
217
- description: string | null;
218
- }
219
- interface InitialPayload {
220
- repo: RepoMeta;
221
- syncState: SyncState;
222
- queue: QueueState;
223
- remote: RemoteStatus;
224
- recentExecutions: ExecutionResult[];
225
- uiState: UiState;
226
- repositoryLabels: RepoLabel[];
227
- currentUser: CurrentUser | null;
228
- }
229
- interface SyncTriggerOptions {
230
- full?: boolean;
231
- since?: string;
232
- numbers?: number[];
233
- }
234
- interface ExecuteTriggerOptions {
235
- entryIds?: string[];
236
- continueOnError?: boolean;
237
- }
238
- interface SyncProgressPayload {
239
- stage: SyncStage;
240
- message?: string;
241
- snapshot: SyncProgressSnapshot;
242
- }
243
- interface ExecuteProgressPayload {
244
- completed: number;
245
- planned: number;
246
- applied: number;
247
- failed: number;
248
- detail: ExecutionResult['details'][number];
249
- }
250
- interface ServerFunctions {
251
- getInitialPayload: () => Promise<InitialPayload>;
252
- getSyncState: () => Promise<SyncState>;
253
- getQueue: () => Promise<QueueState>;
254
- getRepoMeta: () => Promise<RepoMeta>;
255
- triggerSync: (options: SyncTriggerOptions) => Promise<SyncSummary>;
256
- executeQueue: (options: ExecuteTriggerOptions) => Promise<ExecutionResult>;
257
- addQueueOp: (op: PendingOp) => Promise<QueueState>;
258
- updateQueueOp: (id: string, op: PendingOp) => Promise<QueueState>;
259
- removeQueueOp: (id: string) => Promise<QueueState>;
260
- clearQueue: () => Promise<QueueState>;
261
- checkRemote: () => Promise<RemoteStatus>;
262
- openInEditor: (filePath: string) => Promise<void>;
263
- saveUiState: (state: UiState) => Promise<void>;
264
- getPullPatch: (number: number) => Promise<string | null>;
265
- }
266
- interface ClientFunctions {
267
- onSyncStageStart: (payload: {
268
- stage: SyncStage;
269
- message: string;
270
- }) => void;
271
- onSyncProgress: (payload: SyncProgressPayload) => void;
272
- onSyncStageEnd: (payload: {
273
- stage: SyncStage;
274
- durationMs: number;
275
- }) => void;
276
- onSyncComplete: (summary: SyncSummary) => void;
277
- onSyncError: (message: string) => void;
278
- onExecuteStart: (payload: {
279
- planned: number;
280
- }) => void;
281
- onExecuteProgress: (payload: ExecuteProgressPayload) => void;
282
- onExecuteComplete: (result: ExecutionResult) => void;
283
- onExecuteError: (message: string) => void;
284
- onSyncStateChange: (state: SyncState) => void;
285
- onQueueChange: (queue: QueueState) => void;
286
- onRemoteStatusChange: (status: RemoteStatus) => void;
287
- }
288
- //#endregion
289
- //#region src/server/index.d.ts
290
- interface UiServerLogger {
291
- info?: (message: string) => void;
292
- warn?: (message: string) => void;
293
- }
294
- interface PortlessServerOptions {
295
- enabled: boolean;
296
- subdomain: string;
297
- namespace?: string;
298
- }
299
- interface CreateUiServerOptions {
300
- config: GhfsResolvedConfig;
301
- repo: string;
302
- initialToken?: string;
303
- port: number;
304
- host: string;
305
- onRequestToken?: () => Promise<string>;
306
- /** Override the directory serving the prebuilt Nuxt SPA. */
307
- staticDir?: string;
308
- /** When true, skip serving static assets (dev proxies to Nuxt dev server). */
309
- devMode?: boolean;
310
- /** Poller tick interval; default 60_000. */
311
- pollerIntervalMs?: number;
312
- /** When provided and enabled, expose the UI through portless at https://<subdomain>.<namespace>.localhost. */
313
- portless?: PortlessServerOptions;
314
- /** Logger for non-fatal notices (e.g. portless fallback). */
315
- logger?: UiServerLogger;
316
- }
317
- interface UiServerHandle {
318
- /** The preferred URL to open — the portless URL when available, otherwise the direct URL. */
319
- url: string;
320
- /** The raw `http://host:port` URL, always available. */
321
- directUrl: string;
322
- /** The portless URL when the reverse proxy was set up successfully. */
323
- portlessUrl?: string;
324
- port: number;
325
- host: string;
326
- close: () => Promise<void>;
327
- }
328
- declare function createUiServer(options: CreateUiServerOptions): Promise<UiServerHandle>;
329
- //#endregion
330
- export { type ClientFunctions, CreateUiServerOptions, type InitialPayload, PortlessServerOptions, type QueueEntry, type QueueState, type RemoteStatus, type RepoMeta, type ServerFunctions, UiServerHandle, UiServerLogger, createUiServer };
@@ -1,2 +0,0 @@
1
- import { t as createUiServer } from "../server-BwSU4kqr.mjs";
2
- export { createUiServer };