hacklab 0.0.2 → 0.3.1

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 (154) hide show
  1. package/README.md +44 -3
  2. package/bin/ddd +19 -0
  3. package/dist/commands/brag.d.ts +3 -6
  4. package/dist/commands/brag.d.ts.map +1 -1
  5. package/dist/commands/brag.js +68 -299
  6. package/dist/commands/brag.js.map +1 -1
  7. package/dist/commands/config.d.ts +2 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +48 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/drop.d.ts +2 -0
  12. package/dist/commands/drop.d.ts.map +1 -0
  13. package/dist/commands/drop.js +29 -0
  14. package/dist/commands/drop.js.map +1 -0
  15. package/dist/commands/exam.d.ts +5 -0
  16. package/dist/commands/exam.d.ts.map +1 -0
  17. package/dist/commands/exam.js +224 -0
  18. package/dist/commands/exam.js.map +1 -0
  19. package/dist/commands/join.d.ts +10 -9
  20. package/dist/commands/join.d.ts.map +1 -1
  21. package/dist/commands/join.js +213 -285
  22. package/dist/commands/join.js.map +1 -1
  23. package/dist/commands/login.d.ts +1 -15
  24. package/dist/commands/login.d.ts.map +1 -1
  25. package/dist/commands/login.js +69 -133
  26. package/dist/commands/login.js.map +1 -1
  27. package/dist/commands/scan-profile.d.ts +33 -0
  28. package/dist/commands/scan-profile.d.ts.map +1 -0
  29. package/dist/commands/scan-profile.js +279 -0
  30. package/dist/commands/scan-profile.js.map +1 -0
  31. package/dist/commands/sync.d.ts +2 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +55 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/commands/whoami.d.ts +1 -3
  36. package/dist/commands/whoami.d.ts.map +1 -1
  37. package/dist/commands/whoami.js +10 -37
  38. package/dist/commands/whoami.js.map +1 -1
  39. package/dist/config.d.ts +7 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +18 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/dd.d.ts +3 -0
  44. package/dist/dd.d.ts.map +1 -0
  45. package/dist/dd.js +28 -0
  46. package/dist/dd.js.map +1 -0
  47. package/dist/index.js +117 -112
  48. package/dist/index.js.map +1 -1
  49. package/dist/project-brag.d.ts +58 -0
  50. package/dist/project-brag.d.ts.map +1 -0
  51. package/dist/project-brag.js +270 -0
  52. package/dist/project-brag.js.map +1 -0
  53. package/dist/scanners/index.d.ts +24 -0
  54. package/dist/scanners/index.d.ts.map +1 -0
  55. package/dist/scanners/index.js +543 -0
  56. package/dist/scanners/index.js.map +1 -0
  57. package/dist/scanners/util.d.ts +83 -0
  58. package/dist/scanners/util.d.ts.map +1 -0
  59. package/dist/scanners/util.js +129 -0
  60. package/dist/scanners/util.js.map +1 -0
  61. package/dist/session.d.ts +17 -13
  62. package/dist/session.d.ts.map +1 -1
  63. package/dist/session.js +46 -155
  64. package/dist/session.js.map +1 -1
  65. package/dist/share-card.d.ts +29 -0
  66. package/dist/share-card.d.ts.map +1 -0
  67. package/dist/share-card.js +401 -0
  68. package/dist/share-card.js.map +1 -0
  69. package/dist/sync.d.ts +64 -0
  70. package/dist/sync.d.ts.map +1 -0
  71. package/dist/sync.js +805 -0
  72. package/dist/sync.js.map +1 -0
  73. package/dist/ui.d.ts +10 -0
  74. package/dist/ui.d.ts.map +1 -0
  75. package/dist/ui.js +21 -0
  76. package/dist/ui.js.map +1 -0
  77. package/dist/utils/openBrowser.js.map +1 -1
  78. package/package.json +36 -29
  79. package/dist/api/client.d.ts +0 -150
  80. package/dist/api/client.d.ts.map +0 -1
  81. package/dist/api/client.js +0 -246
  82. package/dist/api/client.js.map +0 -1
  83. package/dist/commands/admin-waitlist.d.ts +0 -12
  84. package/dist/commands/admin-waitlist.d.ts.map +0 -1
  85. package/dist/commands/admin-waitlist.js +0 -96
  86. package/dist/commands/admin-waitlist.js.map +0 -1
  87. package/dist/commands/brag.utils.d.ts +0 -12
  88. package/dist/commands/brag.utils.d.ts.map +0 -1
  89. package/dist/commands/brag.utils.js +0 -43
  90. package/dist/commands/brag.utils.js.map +0 -1
  91. package/dist/commands/essay.d.ts +0 -18
  92. package/dist/commands/essay.d.ts.map +0 -1
  93. package/dist/commands/essay.js +0 -117
  94. package/dist/commands/essay.js.map +0 -1
  95. package/dist/commands/explore.d.ts +0 -9
  96. package/dist/commands/explore.d.ts.map +0 -1
  97. package/dist/commands/explore.js +0 -32
  98. package/dist/commands/explore.js.map +0 -1
  99. package/dist/commands/init.d.ts +0 -16
  100. package/dist/commands/init.d.ts.map +0 -1
  101. package/dist/commands/init.js +0 -237
  102. package/dist/commands/init.js.map +0 -1
  103. package/dist/commands/link.d.ts +0 -17
  104. package/dist/commands/link.d.ts.map +0 -1
  105. package/dist/commands/link.js +0 -36
  106. package/dist/commands/link.js.map +0 -1
  107. package/dist/commands/login.utils.d.ts +0 -3
  108. package/dist/commands/login.utils.d.ts.map +0 -1
  109. package/dist/commands/login.utils.js +0 -13
  110. package/dist/commands/login.utils.js.map +0 -1
  111. package/dist/commands/new.d.ts +0 -15
  112. package/dist/commands/new.d.ts.map +0 -1
  113. package/dist/commands/new.js +0 -172
  114. package/dist/commands/new.js.map +0 -1
  115. package/dist/commands/new.utils.d.ts +0 -7
  116. package/dist/commands/new.utils.d.ts.map +0 -1
  117. package/dist/commands/new.utils.js +0 -50
  118. package/dist/commands/new.utils.js.map +0 -1
  119. package/dist/commands/onboard.d.ts +0 -10
  120. package/dist/commands/onboard.d.ts.map +0 -1
  121. package/dist/commands/onboard.js +0 -93
  122. package/dist/commands/onboard.js.map +0 -1
  123. package/dist/commands/publish.d.ts +0 -8
  124. package/dist/commands/publish.d.ts.map +0 -1
  125. package/dist/commands/publish.js +0 -47
  126. package/dist/commands/publish.js.map +0 -1
  127. package/dist/commands/tui.d.ts +0 -12
  128. package/dist/commands/tui.d.ts.map +0 -1
  129. package/dist/commands/tui.js +0 -112
  130. package/dist/commands/tui.js.map +0 -1
  131. package/dist/help-format.d.ts +0 -4
  132. package/dist/help-format.d.ts.map +0 -1
  133. package/dist/help-format.js +0 -30
  134. package/dist/help-format.js.map +0 -1
  135. package/dist/lab/config.d.ts +0 -32
  136. package/dist/lab/config.d.ts.map +0 -1
  137. package/dist/lab/config.js +0 -148
  138. package/dist/lab/config.js.map +0 -1
  139. package/dist/lab/contentStatus.d.ts +0 -6
  140. package/dist/lab/contentStatus.d.ts.map +0 -1
  141. package/dist/lab/contentStatus.js +0 -19
  142. package/dist/lab/contentStatus.js.map +0 -1
  143. package/dist/ui/banner.d.ts +0 -2
  144. package/dist/ui/banner.d.ts.map +0 -1
  145. package/dist/ui/banner.js +0 -22
  146. package/dist/ui/banner.js.map +0 -1
  147. package/dist/utils/findRepoRoot.d.ts +0 -2
  148. package/dist/utils/findRepoRoot.d.ts.map +0 -1
  149. package/dist/utils/findRepoRoot.js +0 -17
  150. package/dist/utils/findRepoRoot.js.map +0 -1
  151. package/dist/utils/pathExists.d.ts +0 -2
  152. package/dist/utils/pathExists.d.ts.map +0 -1
  153. package/dist/utils/pathExists.js +0 -11
  154. package/dist/utils/pathExists.js.map +0 -1
@@ -1,112 +0,0 @@
1
- import { cancel, intro, isCancel, note, outro, select, text } from '@clack/prompts';
2
- import { newCommand } from './new.js';
3
- import { printTuiSplash } from '../ui/banner.js';
4
- const SLASH_COMMANDS = [
5
- {
6
- command: '/new',
7
- description: 'create new content',
8
- },
9
- {
10
- command: '/help',
11
- description: 'show commands',
12
- },
13
- {
14
- command: '/exit',
15
- description: 'leave tui',
16
- },
17
- ];
18
- export function parseSlashCommand(rawInput) {
19
- const parts = rawInput.trim().split(/\s+/).filter(Boolean);
20
- return {
21
- command: parts[0] || '',
22
- args: parts.slice(1),
23
- };
24
- }
25
- export function getSlashCommandMatches(query) {
26
- const normalized = query.trim().toLowerCase();
27
- if (!normalized || normalized === '/') {
28
- return [...SLASH_COMMANDS];
29
- }
30
- return SLASH_COMMANDS.filter((entry) => entry.command.startsWith(normalized));
31
- }
32
- function commandListText() {
33
- return SLASH_COMMANDS.map((entry) => {
34
- return `${entry.command} - ${entry.description}`;
35
- }).join('\n');
36
- }
37
- async function pickSlashCommand(query) {
38
- const matches = getSlashCommandMatches(query);
39
- if (matches.length === 0) {
40
- return null;
41
- }
42
- const selected = await select({
43
- message: 'slash commands',
44
- options: matches.map((entry) => {
45
- return {
46
- value: entry.command,
47
- label: `${entry.command} ${entry.description}`,
48
- };
49
- }),
50
- });
51
- if (isCancel(selected)) {
52
- cancel('tui cancelled.');
53
- process.exit(1);
54
- }
55
- return String(selected);
56
- }
57
- async function runSlashCommand(command, args) {
58
- if (command === '/exit' || command === '/quit') {
59
- outro('leaving hacklab tui.');
60
- return true;
61
- }
62
- if (command === '/help') {
63
- note(commandListText(), 'slash commands');
64
- return false;
65
- }
66
- if (command === '/new') {
67
- const type = args[0];
68
- const slug = args[1];
69
- await newCommand(type, slug);
70
- return false;
71
- }
72
- note(`unknown command: ${command}. use /help to list commands.`, 'error');
73
- return false;
74
- }
75
- export async function tuiCommand() {
76
- printTuiSplash();
77
- intro('hacklab tui');
78
- note('type / to open slash commands', 'hint');
79
- note(commandListText(), 'slash commands');
80
- while (true) {
81
- const input = await text({
82
- message: 'tui',
83
- placeholder: '/',
84
- });
85
- if (isCancel(input)) {
86
- cancel('tui cancelled.');
87
- process.exit(1);
88
- }
89
- const value = String(input).trim();
90
- if (!value) {
91
- continue;
92
- }
93
- if (value.startsWith('/') && !value.includes(' ')) {
94
- const selected = await pickSlashCommand(value);
95
- if (!selected) {
96
- note(`no slash commands found for "${value}".`, 'error');
97
- continue;
98
- }
99
- const shouldExit = await runSlashCommand(selected, []);
100
- if (shouldExit) {
101
- return;
102
- }
103
- continue;
104
- }
105
- const parsed = parseSlashCommand(value);
106
- const shouldExit = await runSlashCommand(parsed.command, parsed.args);
107
- if (shouldExit) {
108
- return;
109
- }
110
- }
111
- }
112
- //# sourceMappingURL=tui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Help } from 'commander';
2
- export declare const HELP_BANNER: string;
3
- export declare function createGreenHelpConfig(): Partial<Help>;
4
- //# sourceMappingURL=help-format.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help-format.d.ts","sourceRoot":"","sources":["../src/help-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAkBrC,eAAO,MAAM,WAAW,QAMZ,CAAA;AAEZ,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD"}
@@ -1,30 +0,0 @@
1
- const ANSI_RESET = '\x1b[0m';
2
- const ANSI_BOLD = '\x1b[1m';
3
- const ANSI_GREEN = '\x1b[32m';
4
- function green(value) {
5
- return `${ANSI_GREEN}${value}${ANSI_RESET}`;
6
- }
7
- function greenBold(value) {
8
- return `${ANSI_BOLD}${ANSI_GREEN}${value}${ANSI_RESET}`;
9
- }
10
- function bold(value) {
11
- return `${ANSI_BOLD}${value}${ANSI_RESET}`;
12
- }
13
- export const HELP_BANNER = [
14
- '',
15
- bold('👽 hacklab'),
16
- '',
17
- `${bold('☠︎')} ${greenBold('information wants to be free')} ${bold('☠︎')}`,
18
- '',
19
- ].join('\n');
20
- export function createGreenHelpConfig() {
21
- return {
22
- styleTitle: (title) => {
23
- if (title === 'Options:' || title === 'Commands:') {
24
- return greenBold(title);
25
- }
26
- return title;
27
- },
28
- };
29
- }
30
- //# sourceMappingURL=help-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help-format.js","sourceRoot":"","sources":["../src/help-format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,SAAS,CAAA;AAC5B,MAAM,SAAS,GAAG,SAAS,CAAA;AAC3B,MAAM,UAAU,GAAG,UAAU,CAAA;AAE7B,SAAS,KAAK,CAAC,KAAa;IACxB,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC5B,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,EAAE,CAAA;AAC3D,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACvB,OAAO,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,EAAE,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,EAAE;IACF,IAAI,CAAC,YAAY,CAAC;IAClB,EAAE;IACF,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,8BAA8B,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;IAC1E,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,UAAU,qBAAqB;IACjC,OAAO;QACH,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBAChD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;YAED,OAAO,KAAK,CAAA;QAChB,CAAC;KACJ,CAAA;AACL,CAAC"}
@@ -1,32 +0,0 @@
1
- export declare const HACKLAB_SCHEMA_VERSION = 1;
2
- export type WorkspaceType = 'personal' | 'team' | 'org';
3
- export type HacklabConfig = {
4
- schemaVersion: number;
5
- labId?: string;
6
- labSlug: string;
7
- labName: string;
8
- workspaceType: WorkspaceType;
9
- owner: string;
10
- contentDirs: {
11
- projects: string;
12
- guides: string;
13
- courses: string;
14
- essays: string;
15
- research: string;
16
- };
17
- };
18
- type CreateHacklabConfigOptions = {
19
- labId?: string;
20
- labSlug?: string;
21
- labName: string;
22
- workspaceType?: WorkspaceType;
23
- owner?: string;
24
- };
25
- export declare function createDefaultHacklabConfig(options: string | CreateHacklabConfigOptions): HacklabConfig;
26
- export declare function getHacklabConfigDir(repoRoot: string): string;
27
- export declare function getHacklabConfigPath(repoRoot: string): string;
28
- export declare function hasHacklabConfig(repoRoot: string): Promise<boolean>;
29
- export declare function loadHacklabConfig(repoRoot: string): Promise<HacklabConfig | null>;
30
- export declare function saveHacklabConfig(repoRoot: string, config: HacklabConfig): Promise<void>;
31
- export {};
32
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lab/config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAA;AAEvD,MAAM,MAAM,aAAa,GAAG;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,aAAa,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE;QACT,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;KACnB,CAAA;CACJ,CAAA;AAED,KAAK,0BAA0B,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AA0FD,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,MAAM,GAAG,0BAA0B,GAC7C,aAAa,CAqBf;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzE;AAED,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+C/B;AAED,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,148 +0,0 @@
1
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { pathExists } from '../utils/pathExists.js';
4
- export const HACKLAB_SCHEMA_VERSION = 1;
5
- const DEFAULT_CONTENT_DIRS = {
6
- projects: 'projects',
7
- guides: 'guides',
8
- courses: 'courses',
9
- essays: 'essays',
10
- research: 'research',
11
- };
12
- const WORKSPACE_TYPES = ['personal', 'team', 'org'];
13
- function slugify(rawValue) {
14
- const normalized = rawValue
15
- .trim()
16
- .toLowerCase()
17
- .replace(/[^a-z0-9\s-_]/g, '')
18
- .replace(/[\s_]+/g, '-')
19
- .replace(/-+/g, '-')
20
- .replace(/^-|-$/g, '');
21
- return normalized;
22
- }
23
- function normalizeLabName(rawName) {
24
- const trimmed = rawName.trim();
25
- if (!trimmed) {
26
- return 'my-lab';
27
- }
28
- return trimmed;
29
- }
30
- function normalizeLabSlug(rawValue) {
31
- const normalized = slugify(rawValue);
32
- if (!normalized) {
33
- return 'my-lab';
34
- }
35
- return normalized;
36
- }
37
- function normalizeOwner(rawValue) {
38
- const normalized = rawValue
39
- .trim()
40
- .toLowerCase()
41
- .replace(/\s+/g, '-')
42
- .replace(/[^a-z0-9._-]/g, '');
43
- if (!normalized) {
44
- return 'unknown';
45
- }
46
- return normalized;
47
- }
48
- function getDefaultOwner() {
49
- return (process.env.HACKLAB_OWNER ||
50
- process.env.GITHUB_USER ||
51
- process.env.GITHUB_ACTOR ||
52
- process.env.USER ||
53
- process.env.USERNAME ||
54
- 'unknown');
55
- }
56
- function normalizeWorkspaceType(value) {
57
- if (typeof value !== 'string') {
58
- return null;
59
- }
60
- if (WORKSPACE_TYPES.includes(value)) {
61
- return value;
62
- }
63
- return null;
64
- }
65
- function normalizeLabId(rawValue) {
66
- if (typeof rawValue !== 'string') {
67
- return undefined;
68
- }
69
- const trimmed = rawValue.trim();
70
- return trimmed || undefined;
71
- }
72
- export function createDefaultHacklabConfig(options) {
73
- const normalizedOptions = typeof options === 'string' ? { labName: options } : options;
74
- const labName = normalizeLabName(normalizedOptions.labName);
75
- const workspaceType = normalizedOptions.workspaceType ?? 'personal';
76
- const labSlug = normalizeLabSlug(normalizedOptions.labSlug || labName);
77
- const owner = normalizeOwner(normalizedOptions.owner || getDefaultOwner());
78
- const labId = normalizeLabId(normalizedOptions.labId);
79
- return {
80
- schemaVersion: HACKLAB_SCHEMA_VERSION,
81
- ...(labId ? { labId } : {}),
82
- labSlug,
83
- labName,
84
- workspaceType,
85
- owner,
86
- contentDirs: {
87
- ...DEFAULT_CONTENT_DIRS,
88
- },
89
- };
90
- }
91
- export function getHacklabConfigDir(repoRoot) {
92
- return join(repoRoot, '.hacklab');
93
- }
94
- export function getHacklabConfigPath(repoRoot) {
95
- return join(getHacklabConfigDir(repoRoot), 'config.json');
96
- }
97
- export async function hasHacklabConfig(repoRoot) {
98
- return pathExists(getHacklabConfigPath(repoRoot));
99
- }
100
- export async function loadHacklabConfig(repoRoot) {
101
- const configPath = getHacklabConfigPath(repoRoot);
102
- if (!(await pathExists(configPath))) {
103
- return null;
104
- }
105
- try {
106
- const content = await readFile(configPath, 'utf8');
107
- const parsed = JSON.parse(content);
108
- const workspaceType = normalizeWorkspaceType(parsed.workspaceType);
109
- if (parsed.schemaVersion !== HACKLAB_SCHEMA_VERSION ||
110
- !parsed.labName ||
111
- !workspaceType ||
112
- !parsed.contentDirs?.projects ||
113
- !parsed.contentDirs?.courses ||
114
- !parsed.contentDirs?.essays ||
115
- !parsed.contentDirs?.research) {
116
- return null;
117
- }
118
- const labName = normalizeLabName(parsed.labName);
119
- const owner = normalizeOwner(parsed.owner || getDefaultOwner());
120
- const labSlug = normalizeLabSlug(parsed.labSlug || parsed.labName);
121
- const labId = normalizeLabId(parsed.labId);
122
- return {
123
- schemaVersion: parsed.schemaVersion,
124
- ...(labId ? { labId } : {}),
125
- labSlug,
126
- labName,
127
- workspaceType,
128
- owner,
129
- contentDirs: {
130
- projects: parsed.contentDirs.projects,
131
- guides: parsed.contentDirs.guides || DEFAULT_CONTENT_DIRS.guides,
132
- courses: parsed.contentDirs.courses,
133
- essays: parsed.contentDirs.essays,
134
- research: parsed.contentDirs.research,
135
- },
136
- };
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- export async function saveHacklabConfig(repoRoot, config) {
143
- const configDir = getHacklabConfigDir(repoRoot);
144
- const configPath = getHacklabConfigPath(repoRoot);
145
- await mkdir(configDir, { recursive: true });
146
- await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, 'utf8');
147
- }
148
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lab/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare const CONTENT_STATUSES: readonly ["idea", "draft", "in_progress", "in_review", "published", "archived"];
2
- export type ContentStatus = (typeof CONTENT_STATUSES)[number];
3
- export declare const DEFAULT_CONTENT_STATUS: ContentStatus;
4
- export declare const DEFAULT_CONTENT_VISIBILITY = "private";
5
- export declare const STATUS_DESCRIPTIONS: Record<ContentStatus, string>;
6
- //# sourceMappingURL=contentStatus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contentStatus.d.ts","sourceRoot":"","sources":["../../src/lab/contentStatus.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,iFAOnB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,sBAAsB,EAAE,aAAuB,CAAA;AAC5D,eAAO,MAAM,0BAA0B,YAAY,CAAA;AAEnD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAO7D,CAAA"}
@@ -1,19 +0,0 @@
1
- export const CONTENT_STATUSES = [
2
- 'idea',
3
- 'draft',
4
- 'in_progress',
5
- 'in_review',
6
- 'published',
7
- 'archived',
8
- ];
9
- export const DEFAULT_CONTENT_STATUS = 'draft';
10
- export const DEFAULT_CONTENT_VISIBILITY = 'private';
11
- export const STATUS_DESCRIPTIONS = {
12
- idea: 'early concept or note, no substantial draft yet',
13
- draft: 'first pass exists but still rough',
14
- in_progress: 'actively being developed toward completion',
15
- in_review: 'ready for feedback before publishing',
16
- published: 'live and considered complete for now',
17
- archived: 'retired and not actively maintained',
18
- };
19
- //# sourceMappingURL=contentStatus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contentStatus.js","sourceRoot":"","sources":["../../src/lab/contentStatus.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,MAAM;IACN,OAAO;IACP,aAAa;IACb,WAAW;IACX,WAAW;IACX,UAAU;CACJ,CAAA;AAIV,MAAM,CAAC,MAAM,sBAAsB,GAAkB,OAAO,CAAA;AAC5D,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAA;AAEnD,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAC9D,IAAI,EAAE,iDAAiD;IACvD,KAAK,EAAE,mCAAmC;IAC1C,WAAW,EAAE,4CAA4C;IACzD,SAAS,EAAE,sCAAsC;IACjD,SAAS,EAAE,sCAAsC;IACjD,QAAQ,EAAE,qCAAqC;CAClD,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare function printTuiSplash(): void;
2
- //# sourceMappingURL=banner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,IAAI,IAAI,CASrC"}
package/dist/ui/banner.js DELETED
@@ -1,22 +0,0 @@
1
- const BANNER = String.raw `
2
- █████ █████ ████ █████
3
- ░░███ ░░███ ░░███ ░░███
4
- ░███████ ██████ ██████ ░███ █████ ░███ ██████ ░███████
5
- ░███░░███ ░░░░░███ ███░░███ ░███░░███ ░███ ░░░░░███ ░███░░███
6
- ░███ ░███ ███████ ░███ ░░░ ░██████░ ░███ ███████ ░███ ░███
7
- ░███ ░███ ███░░███ ░███ ███ ░███░░███ ░███ ███░░███ ░███ ░███
8
- ████ █████░░████████░░██████ ████ █████ █████░░████████ ████████
9
- ░░░░ ░░░░░ ░░░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░░░░ ░░░░░░░░
10
- `;
11
- const TUI_TAGLINE = '☠️ 👽 hacklab 2026.2.19 (woz-preview) — we ship features faster than bugs can hide.';
12
- let printed = false;
13
- export function printTuiSplash() {
14
- if (printed) {
15
- return;
16
- }
17
- const GREEN = '\x1b[32m';
18
- const RESET = '\x1b[0m';
19
- console.log(`${GREEN}${BANNER}\n${TUI_TAGLINE}${RESET}`);
20
- printed = true;
21
- }
22
- //# sourceMappingURL=banner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;CASxB,CAAA;AAED,MAAM,WAAW,GACb,qFAAqF,CAAA;AAEzF,IAAI,OAAO,GAAG,KAAK,CAAA;AAEnB,MAAM,UAAU,cAAc;IAC1B,IAAI,OAAO,EAAE,CAAC;QACV,OAAM;IACV,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAA;IACxB,MAAM,KAAK,GAAG,SAAS,CAAA;IACvB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,KAAK,WAAW,GAAG,KAAK,EAAE,CAAC,CAAA;IACxD,OAAO,GAAG,IAAI,CAAA;AAClB,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function findRepoRoot(startDir?: string): Promise<string>;
2
- //# sourceMappingURL=findRepoRoot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findRepoRoot.d.ts","sourceRoot":"","sources":["../../src/utils/findRepoRoot.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,QAAQ,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB5E"}
@@ -1,17 +0,0 @@
1
- import { dirname, resolve } from 'node:path';
2
- import { pathExists } from './pathExists.js';
3
- export async function findRepoRoot(startDir = process.cwd()) {
4
- const initialPath = resolve(startDir);
5
- let currentPath = initialPath;
6
- while (true) {
7
- if (await pathExists(`${currentPath}/.git`)) {
8
- return currentPath;
9
- }
10
- const parentPath = dirname(currentPath);
11
- if (parentPath === currentPath) {
12
- return initialPath;
13
- }
14
- currentPath = parentPath;
15
- }
16
- }
17
- //# sourceMappingURL=findRepoRoot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findRepoRoot.js","sourceRoot":"","sources":["../../src/utils/findRepoRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrC,IAAI,WAAW,GAAG,WAAW,CAAA;IAE7B,OAAO,IAAI,EAAE,CAAC;QACV,IAAI,MAAM,UAAU,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,WAAW,CAAA;QACtB,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QAEvC,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAA;QACtB,CAAC;QAED,WAAW,GAAG,UAAU,CAAA;IAC5B,CAAC;AACL,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function pathExists(path: string): Promise<boolean>;
2
- //# sourceMappingURL=pathExists.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pathExists.d.ts","sourceRoot":"","sources":["../../src/utils/pathExists.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D"}
@@ -1,11 +0,0 @@
1
- import { access } from 'node:fs/promises';
2
- export async function pathExists(path) {
3
- try {
4
- await access(path);
5
- return true;
6
- }
7
- catch {
8
- return false;
9
- }
10
- }
11
- //# sourceMappingURL=pathExists.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pathExists.js","sourceRoot":"","sources":["../../src/utils/pathExists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IACzC,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QAClB,OAAO,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC"}