@pleri/olam-cli 0.1.145 → 0.1.147

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 (90) hide show
  1. package/dist/commands/skills-doctor.d.ts +14 -0
  2. package/dist/commands/skills-doctor.d.ts.map +1 -0
  3. package/dist/commands/skills-doctor.js +126 -0
  4. package/dist/commands/skills-doctor.js.map +1 -0
  5. package/dist/commands/skills-hook.d.ts +19 -0
  6. package/dist/commands/skills-hook.d.ts.map +1 -0
  7. package/dist/commands/skills-hook.js +99 -0
  8. package/dist/commands/skills-hook.js.map +1 -0
  9. package/dist/commands/skills-migrate-back.d.ts +21 -0
  10. package/dist/commands/skills-migrate-back.d.ts.map +1 -0
  11. package/dist/commands/skills-migrate-back.js +222 -0
  12. package/dist/commands/skills-migrate-back.js.map +1 -0
  13. package/dist/commands/skills-migrate-hooks-back.d.ts +19 -0
  14. package/dist/commands/skills-migrate-hooks-back.d.ts.map +1 -0
  15. package/dist/commands/skills-migrate-hooks-back.js +83 -0
  16. package/dist/commands/skills-migrate-hooks-back.js.map +1 -0
  17. package/dist/commands/skills-migrate-hooks.d.ts +40 -0
  18. package/dist/commands/skills-migrate-hooks.d.ts.map +1 -0
  19. package/dist/commands/skills-migrate-hooks.js +178 -0
  20. package/dist/commands/skills-migrate-hooks.js.map +1 -0
  21. package/dist/commands/skills-migrate.d.ts +33 -0
  22. package/dist/commands/skills-migrate.d.ts.map +1 -0
  23. package/dist/commands/skills-migrate.js +216 -0
  24. package/dist/commands/skills-migrate.js.map +1 -0
  25. package/dist/commands/skills-onboard.d.ts +26 -0
  26. package/dist/commands/skills-onboard.d.ts.map +1 -0
  27. package/dist/commands/skills-onboard.js +227 -0
  28. package/dist/commands/skills-onboard.js.map +1 -0
  29. package/dist/commands/skills-shadow-backups.d.ts +15 -0
  30. package/dist/commands/skills-shadow-backups.d.ts.map +1 -0
  31. package/dist/commands/skills-shadow-backups.js +132 -0
  32. package/dist/commands/skills-shadow-backups.js.map +1 -0
  33. package/dist/commands/skills-source.d.ts +25 -0
  34. package/dist/commands/skills-source.d.ts.map +1 -1
  35. package/dist/commands/skills-source.js +305 -7
  36. package/dist/commands/skills-source.js.map +1 -1
  37. package/dist/commands/skills.d.ts.map +1 -1
  38. package/dist/commands/skills.js +62 -7
  39. package/dist/commands/skills.js.map +1 -1
  40. package/dist/commands/substrate-audit-log.d.ts +49 -0
  41. package/dist/commands/substrate-audit-log.d.ts.map +1 -0
  42. package/dist/commands/substrate-audit-log.js +148 -0
  43. package/dist/commands/substrate-audit-log.js.map +1 -0
  44. package/dist/commands/substrate.d.ts +60 -0
  45. package/dist/commands/substrate.d.ts.map +1 -0
  46. package/dist/commands/substrate.js +175 -0
  47. package/dist/commands/substrate.js.map +1 -0
  48. package/dist/commands/upgrade.d.ts +10 -0
  49. package/dist/commands/upgrade.d.ts.map +1 -1
  50. package/dist/commands/upgrade.js +30 -0
  51. package/dist/commands/upgrade.js.map +1 -1
  52. package/dist/image-digests.json +7 -7
  53. package/dist/index.js +8687 -4713
  54. package/dist/index.js.map +1 -1
  55. package/dist/lib/config.d.ts +69 -0
  56. package/dist/lib/config.d.ts.map +1 -0
  57. package/dist/lib/config.js +146 -0
  58. package/dist/lib/config.js.map +1 -0
  59. package/dist/lib/instrumentation.d.ts +85 -0
  60. package/dist/lib/instrumentation.d.ts.map +1 -0
  61. package/dist/lib/instrumentation.js +104 -0
  62. package/dist/lib/instrumentation.js.map +1 -0
  63. package/dist/lib/kubectl-wrap.d.ts +59 -0
  64. package/dist/lib/kubectl-wrap.d.ts.map +1 -0
  65. package/dist/lib/kubectl-wrap.js +130 -0
  66. package/dist/lib/kubectl-wrap.js.map +1 -0
  67. package/dist/lib/manifest-refresh.d.ts +95 -0
  68. package/dist/lib/manifest-refresh.d.ts.map +1 -0
  69. package/dist/lib/manifest-refresh.js +222 -0
  70. package/dist/lib/manifest-refresh.js.map +1 -0
  71. package/dist/lib/port-forward.d.ts +101 -0
  72. package/dist/lib/port-forward.d.ts.map +1 -0
  73. package/dist/lib/port-forward.js +240 -0
  74. package/dist/lib/port-forward.js.map +1 -0
  75. package/dist/lib/upgrade-kubernetes.d.ts +77 -0
  76. package/dist/lib/upgrade-kubernetes.d.ts.map +1 -0
  77. package/dist/lib/upgrade-kubernetes.js +277 -0
  78. package/dist/lib/upgrade-kubernetes.js.map +1 -0
  79. package/dist/mcp-server.js +20262 -18211
  80. package/host-cp/k8s/manifests/00-namespace.yaml +7 -0
  81. package/host-cp/k8s/manifests/10-serviceaccount.yaml +8 -0
  82. package/host-cp/k8s/manifests/20-rbac.yaml +34 -0
  83. package/host-cp/k8s/manifests/30-configmap.yaml +30 -0
  84. package/host-cp/k8s/manifests/45-pvc.yaml +27 -0
  85. package/host-cp/k8s/manifests/50-deployment.yaml +148 -0
  86. package/host-cp/k8s/manifests/60-service.yaml +22 -0
  87. package/host-cp/k8s/templates/40-secret-template.yaml +32 -0
  88. package/host-cp/src/plan-chat-service.mjs +31 -7
  89. package/host-cp/src/server.mjs +32 -7
  90. package/package.json +3 -2
@@ -0,0 +1,227 @@
1
+ /**
2
+ * olam skills onboard — fresh-install umbrella that composes the 3-step
3
+ * recipe into one operator-friendly verb.
4
+ *
5
+ * olam skills onboard --name <n> --git-url <url> [--branch main]
6
+ * [--trust] [--scope project|user]
7
+ *
8
+ * Pipeline:
9
+ * 1. addSkillSource({ trustMethod: 'flag' }) — `--trust` is the only
10
+ * sanctioned trust method here. Onboard is non-interactive by
11
+ * design (it composes 4 steps; an interactive picker mid-pipeline
12
+ * would be confusing). Operators who want the picker should run
13
+ * `olam skills source add` directly.
14
+ * 2. cloneSkillSource(...) — register + clone.
15
+ * 3. installSkillsHookToFile(...) at --scope (default project).
16
+ * 4. syncSkills() — first sync.
17
+ * 5. Print a single success summary covering all 4 steps.
18
+ *
19
+ * Failure rollback: any failure AFTER step 1 (clone, hook install,
20
+ * sync) unwinds the registered source so the operator can re-try
21
+ * cleanly. Each step appends an audit row so the trust-coverage gate
22
+ * stays accurate even when the umbrella partially fails.
23
+ */
24
+ import pc from 'picocolors';
25
+ import { addSkillSource, cloneSkillSource, installSkillsHookToFile, removeSkillSource, removeSkillSourceClone, skillsHookSettingsPathFor, syncSkills, updateSkillSource, appendTrustAudit, redactUrl, } from '@olam/core/src/skill-sources/index.js';
26
+ import { printError, printInfo, printSuccess, printHeader } from '../output.js';
27
+ function asMessage(err) {
28
+ return err instanceof Error ? err.message : String(err);
29
+ }
30
+ export function registerSkillsOnboard(program) {
31
+ const skills = program.commands.find((c) => c.name() === 'skills') ??
32
+ program.command('skills').description('Manage skill sources and synchronization');
33
+ skills
34
+ .command('onboard')
35
+ .description('Fresh-install umbrella: register + clone + install SessionStart hook + first sync, in one verb')
36
+ .requiredOption('--name <name>', 'Display name (lowercase, digits, dash)')
37
+ .requiredOption('--git-url <url>', 'git URL (https://, git@, ssh://, file://, or absolute path)')
38
+ .option('--branch <branch>', 'Branch to track', 'main')
39
+ .option('--trust', 'Acknowledge that registering grants symlink-into-~/.claude permission (required: onboard is non-interactive)')
40
+ .option('--scope <scope>', 'Hook install scope: project (<cwd>/.claude/settings.json) or user (~/.claude/settings.json)', 'project')
41
+ .action(async (opts) => {
42
+ const scope = opts.scope === 'user' ? 'user' : 'project';
43
+ // Onboard composes 4 steps end-to-end. Surfacing a TTY trust prompt
44
+ // mid-pipeline would split operator attention; require --trust as
45
+ // the only sanctioned path here. Operators who want the picker can
46
+ // run `olam skills source add` (then run install-hook + sync
47
+ // themselves) — same surface, different ergonomic.
48
+ if (opts.trust !== true) {
49
+ try {
50
+ appendTrustAudit({
51
+ gitUrl: redactUrl(opts.gitUrl),
52
+ action: 'auto-rejected',
53
+ trustMethod: 'auto-reject-tty',
54
+ note: 'onboard: --trust required (composed pipeline; no mid-flow picker)',
55
+ });
56
+ }
57
+ catch {
58
+ // best-effort audit
59
+ }
60
+ printError('`olam skills onboard` requires --trust. Registering a skill source grants ' +
61
+ 'symlink-into-~/.claude permission; onboard is non-interactive so the operator ' +
62
+ 'must acknowledge up front. (For the interactive picker use `olam skills source add`.)');
63
+ process.exitCode = 1;
64
+ return;
65
+ }
66
+ // ---------------------------------------------------------------
67
+ // Step 1: register the source (writes 'added' audit entry internally).
68
+ // ---------------------------------------------------------------
69
+ let entry;
70
+ try {
71
+ entry = addSkillSource({
72
+ name: opts.name,
73
+ gitUrl: opts.gitUrl,
74
+ branch: opts.branch ?? 'main',
75
+ trustMethod: 'flag',
76
+ });
77
+ }
78
+ catch (err) {
79
+ try {
80
+ appendTrustAudit({
81
+ gitUrl: redactUrl(opts.gitUrl),
82
+ action: 'failed',
83
+ trustMethod: 'flag',
84
+ note: `onboard step=add: ${asMessage(err)}`,
85
+ });
86
+ }
87
+ catch {
88
+ // best-effort
89
+ }
90
+ printError(asMessage(err));
91
+ process.exitCode = 1;
92
+ return;
93
+ }
94
+ // ---------------------------------------------------------------
95
+ // Step 2: clone the source. Rolls back step 1 on failure.
96
+ // ---------------------------------------------------------------
97
+ let headSha;
98
+ try {
99
+ const result = cloneSkillSource({
100
+ gitUrl: entry.gitUrl,
101
+ branch: entry.branch,
102
+ id: entry.id,
103
+ });
104
+ headSha = result.headSha;
105
+ updateSkillSource(entry.id, { lastPulledSha: result.headSha });
106
+ }
107
+ catch (err) {
108
+ try {
109
+ removeSkillSource(entry.id);
110
+ }
111
+ catch {
112
+ // best-effort
113
+ }
114
+ try {
115
+ appendTrustAudit({
116
+ gitUrl: redactUrl(entry.gitUrl),
117
+ action: 'failed',
118
+ trustMethod: 'flag',
119
+ sourceId: entry.id,
120
+ note: `onboard step=clone: ${asMessage(err)}`,
121
+ });
122
+ }
123
+ catch {
124
+ // best-effort
125
+ }
126
+ printError(asMessage(err));
127
+ process.exitCode = 1;
128
+ return;
129
+ }
130
+ // ---------------------------------------------------------------
131
+ // Step 3: install SessionStart hook. Rolls back clone + register
132
+ // on failure so the operator's state stays clean.
133
+ // ---------------------------------------------------------------
134
+ const hookFilePath = skillsHookSettingsPathFor(scope);
135
+ let hookStatus;
136
+ let hookBackupPath;
137
+ try {
138
+ const result = installSkillsHookToFile(hookFilePath);
139
+ hookStatus = result.status;
140
+ hookBackupPath = result.backupPath;
141
+ }
142
+ catch (err) {
143
+ try {
144
+ removeSkillSourceClone(entry.id);
145
+ removeSkillSource(entry.id);
146
+ }
147
+ catch {
148
+ // best-effort
149
+ }
150
+ try {
151
+ appendTrustAudit({
152
+ gitUrl: redactUrl(entry.gitUrl),
153
+ action: 'failed',
154
+ trustMethod: 'flag',
155
+ sourceId: entry.id,
156
+ note: `onboard step=install-hook: ${asMessage(err)}`,
157
+ });
158
+ }
159
+ catch {
160
+ // best-effort
161
+ }
162
+ printError(`install-hook failed: ${asMessage(err)}`);
163
+ process.exitCode = 1;
164
+ return;
165
+ }
166
+ // ---------------------------------------------------------------
167
+ // Step 4: first sync. Rolls back clone + register on failure so
168
+ // the operator can re-try cleanly. Leaves the hook in place — the
169
+ // hook is independently useful even if THIS source failed to
170
+ // deploy artifacts; uninstall-hook is its own surgical action.
171
+ // ---------------------------------------------------------------
172
+ let syncedArtifacts = 0;
173
+ try {
174
+ const summary = await syncSkills({});
175
+ syncedArtifacts = summary.artifactCount;
176
+ }
177
+ catch (err) {
178
+ try {
179
+ removeSkillSourceClone(entry.id);
180
+ removeSkillSource(entry.id);
181
+ }
182
+ catch {
183
+ // best-effort
184
+ }
185
+ try {
186
+ appendTrustAudit({
187
+ gitUrl: redactUrl(entry.gitUrl),
188
+ action: 'failed',
189
+ trustMethod: 'flag',
190
+ sourceId: entry.id,
191
+ note: `onboard step=sync: ${asMessage(err)}`,
192
+ });
193
+ }
194
+ catch {
195
+ // best-effort
196
+ }
197
+ printError(`sync failed: ${asMessage(err)}`);
198
+ process.exitCode = 1;
199
+ return;
200
+ }
201
+ // ---------------------------------------------------------------
202
+ // Single success summary covering all 4 steps.
203
+ // ---------------------------------------------------------------
204
+ printHeader('skills onboard — complete');
205
+ printSuccess(`registered "${entry.name}" (${entry.id}) @ ${headSha.slice(0, 8)}`);
206
+ printInfo('git url', entry.gitUrl);
207
+ printInfo('branch', entry.branch);
208
+ printInfo('clone', `(see ~/.olam/state/skill-sources/${entry.id})`);
209
+ switch (hookStatus) {
210
+ case 'installed':
211
+ printInfo('hook', `installed (${scope} scope) at ${hookFilePath}`);
212
+ if (hookBackupPath)
213
+ printInfo('backup', hookBackupPath);
214
+ break;
215
+ case 'already-present':
216
+ printInfo('hook', `already installed at ${hookFilePath}`);
217
+ break;
218
+ case 'no-op':
219
+ printInfo('hook', `no change at ${hookFilePath}`);
220
+ break;
221
+ }
222
+ printInfo('sync', `${syncedArtifacts} artifact(s) deployed`);
223
+ console.log();
224
+ console.log(pc.dim(' Open a new Claude Code session to pick up the deployed skills.'));
225
+ });
226
+ }
227
+ //# sourceMappingURL=skills-onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-onboard.js","sourceRoot":"","sources":["../../src/commands/skills-onboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * olam skills shadow-backups — manage A4's quarantine files.
3
+ *
4
+ * olam skills shadow-backups list all backups + ages
5
+ * olam skills shadow-backups prune [--older-than=<dur>] delete old ones
6
+ * [--all --force] OR delete every one
7
+ * [--dry-run]
8
+ * olam skills shadow-backups restore <path> [--force] move back to original
9
+ *
10
+ * T2 mitigation: prevents unbounded backup growth without ever touching a
11
+ * non-shadow-backup file (strict `.shadow-backup-<digits>` suffix match).
12
+ */
13
+ import type { Command } from 'commander';
14
+ export declare function registerSkillsShadowBackups(program: Command): void;
15
+ //# sourceMappingURL=skills-shadow-backups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-shadow-backups.d.ts","sourceRoot":"","sources":["../../src/commands/skills-shadow-backups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsFlE"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * olam skills shadow-backups — manage A4's quarantine files.
3
+ *
4
+ * olam skills shadow-backups list all backups + ages
5
+ * olam skills shadow-backups prune [--older-than=<dur>] delete old ones
6
+ * [--all --force] OR delete every one
7
+ * [--dry-run]
8
+ * olam skills shadow-backups restore <path> [--force] move back to original
9
+ *
10
+ * T2 mitigation: prevents unbounded backup growth without ever touching a
11
+ * non-shadow-backup file (strict `.shadow-backup-<digits>` suffix match).
12
+ */
13
+ import * as fs from 'node:fs';
14
+ import pc from 'picocolors';
15
+ import { listShadowBackups, pruneShadowBackups, restoreShadowBackup, parseDurationToMs, } from '@olam/core/src/skill-sources/index.js';
16
+ import { printError, printHeader, printSuccess } from '../output.js';
17
+ function asMessage(err) {
18
+ return err instanceof Error ? err.message : String(err);
19
+ }
20
+ function formatAge(ms) {
21
+ if (ms < 0)
22
+ return '<future>';
23
+ const d = Math.floor(ms / 86_400_000);
24
+ if (d >= 1)
25
+ return `${d}d`;
26
+ const h = Math.floor(ms / 3_600_000);
27
+ if (h >= 1)
28
+ return `${h}h`;
29
+ const m = Math.floor(ms / 60_000);
30
+ if (m >= 1)
31
+ return `${m}m`;
32
+ const s = Math.floor(ms / 1_000);
33
+ return `${s}s`;
34
+ }
35
+ function formatSize(bytes) {
36
+ if (bytes < 1024)
37
+ return `${bytes}B`;
38
+ if (bytes < 1024 * 1024)
39
+ return `${(bytes / 1024).toFixed(1)}KB`;
40
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
41
+ }
42
+ function printBackupRows(backups) {
43
+ for (const b of backups) {
44
+ const when = new Date(b.epochSeconds * 1000).toISOString().slice(0, 10);
45
+ console.log(` ${pc.dim(formatAge(b.ageMs).padStart(6))} ${formatSize(b.sizeBytes).padStart(7)} ${pc.dim(when)} ${b.bucket}/${pc.bold(b.basename)}`);
46
+ }
47
+ }
48
+ export function registerSkillsShadowBackups(program) {
49
+ const skills = program.commands.find((c) => c.name() === 'skills') ??
50
+ program.command('skills').description('Manage skill sources and synchronization');
51
+ const sb = skills
52
+ .command('shadow-backups')
53
+ .description('Manage `.shadow-backup-<epoch>` quarantine files left by `olam skills sync`');
54
+ sb.command('list')
55
+ .description('List all shadow-backup files under ~/.claude/')
56
+ .action(() => {
57
+ const all = listShadowBackups();
58
+ if (all.length === 0) {
59
+ console.log(pc.dim('No shadow-backup files under ~/.claude/.'));
60
+ return;
61
+ }
62
+ printHeader(`${all.length} shadow backup(s)`);
63
+ console.log(pc.dim(' age size created bucket/basename'));
64
+ printBackupRows(all);
65
+ });
66
+ sb.command('prune')
67
+ .description('Delete shadow-backup files older than a duration (e.g. 30d) OR all of them with --all --force')
68
+ .option('--older-than <duration>', 'Delete backups older than this duration (e.g. 30d, 7d, 24h, 2w)', '30d')
69
+ .option('--all', 'Delete every shadow-backup file (requires --force)')
70
+ .option('--force', 'Confirm deletion when --all is used')
71
+ .option('--dry-run', 'Show what would be deleted without deleting')
72
+ .action((opts) => {
73
+ try {
74
+ let pruneOpts;
75
+ if (opts.all === true) {
76
+ if (opts.force !== true) {
77
+ printError('--all requires --force (refuses accidental wipes)');
78
+ process.exitCode = 1;
79
+ return;
80
+ }
81
+ pruneOpts = { all: true, dryRun: opts.dryRun };
82
+ }
83
+ else {
84
+ const olderThanMs = parseDurationToMs(opts.olderThan);
85
+ if (olderThanMs === undefined) {
86
+ printError(`unrecognized --older-than value "${opts.olderThan}" (expected like "30d", "7d", "24h", "2w")`);
87
+ process.exitCode = 1;
88
+ return;
89
+ }
90
+ pruneOpts = { olderThanMs, dryRun: opts.dryRun };
91
+ }
92
+ const result = pruneShadowBackups(pruneOpts);
93
+ const action = opts.dryRun ? 'would delete' : 'deleted';
94
+ if (result.deleted.length === 0) {
95
+ console.log(pc.dim(`No shadow-backups match — ${result.skipped.length} kept`));
96
+ return;
97
+ }
98
+ printHeader(`${action} ${result.deleted.length} shadow backup(s) (${result.skipped.length} kept)`);
99
+ printBackupRows(result.deleted);
100
+ if (opts.dryRun) {
101
+ console.log(pc.dim('\n(dry-run — re-run without --dry-run to delete)'));
102
+ }
103
+ else {
104
+ printSuccess(`pruned ${result.deleted.length} backup(s)`);
105
+ }
106
+ }
107
+ catch (err) {
108
+ printError(asMessage(err));
109
+ process.exitCode = 1;
110
+ }
111
+ });
112
+ sb.command('restore')
113
+ .description('Move a shadow-backup file back to its original path')
114
+ .argument('<path>', 'Absolute path to the .shadow-backup-<epoch> file')
115
+ .option('--force', 'Overwrite the original path if it already exists')
116
+ .action((p, opts) => {
117
+ try {
118
+ if (!fs.existsSync(p)) {
119
+ printError(`backup file not found: ${p}`);
120
+ process.exitCode = 1;
121
+ return;
122
+ }
123
+ const result = restoreShadowBackup({ backupPath: p, force: opts.force });
124
+ printSuccess(`restored → ${result.restoredTo}`);
125
+ }
126
+ catch (err) {
127
+ printError(asMessage(err));
128
+ process.exitCode = 1;
129
+ }
130
+ });
131
+ }
132
+ //# sourceMappingURL=skills-shadow-backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-shadow-backups.js","sourceRoot":"","sources":["../../src/commands/skills-shadow-backups.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,30 @@
8
8
  * olam skills source show <id>
9
9
  */
10
10
  import type { Command } from 'commander';
11
+ /**
12
+ * Post-add interactive picker — surfaces two follow-ups after a
13
+ * successful `source add` so operators don't have to remember the
14
+ * separate `sync` + `install-hook` invocations:
15
+ *
16
+ * 1. Sync now? [Y/n]
17
+ * 2. Install SessionStart hook so future sessions auto-sync? [Y/n]
18
+ * (only offered if hook not already installed at the chosen scope)
19
+ *
20
+ * Default Yes on both — onboard-friendly without forcing the umbrella
21
+ * verb (`olam skills onboard`) on operators who want the picker shape.
22
+ *
23
+ * Non-interactive (no-TTY) callers skip both prompts silently and keep
24
+ * the pre-Phase-D behavior. CLI flags `--sync-now` / `--no-sync-now`
25
+ * / `--install-hook` / `--no-install-hook` give scripts explicit
26
+ * control.
27
+ */
28
+ export interface PostAddPromptInput {
29
+ hookAlreadyInstalled: boolean;
30
+ }
31
+ export interface PostAddPromptResult {
32
+ syncNow: boolean;
33
+ installHook: boolean;
34
+ }
35
+ export type PostAddPromptFn = (input: PostAddPromptInput) => Promise<PostAddPromptResult>;
11
36
  export declare function registerSkillsSource(program: Command): void;
12
37
  //# sourceMappingURL=skills-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills-source.d.ts","sourceRoot":"","sources":["../../src/commands/skills-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2H3D"}
1
+ {"version":3,"file":"skills-source.d.ts","sourceRoot":"","sources":["../../src/commands/skills-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+EzC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AACD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAyB1F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgX3D"}