orbitmap 0.1.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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -0
  3. package/dist/api-client.d.ts +234 -0
  4. package/dist/api-client.js +401 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/commands/agents.d.ts +3 -0
  7. package/dist/commands/agents.js +44 -0
  8. package/dist/commands/agents.js.map +1 -0
  9. package/dist/commands/assign.d.ts +5 -0
  10. package/dist/commands/assign.js +44 -0
  11. package/dist/commands/assign.js.map +1 -0
  12. package/dist/commands/context.d.ts +4 -0
  13. package/dist/commands/context.js +37 -0
  14. package/dist/commands/context.js.map +1 -0
  15. package/dist/commands/create.d.ts +12 -0
  16. package/dist/commands/create.js +54 -0
  17. package/dist/commands/create.js.map +1 -0
  18. package/dist/commands/dep.d.ts +11 -0
  19. package/dist/commands/dep.js +56 -0
  20. package/dist/commands/dep.js.map +1 -0
  21. package/dist/commands/doc-import.d.ts +9 -0
  22. package/dist/commands/doc-import.js +97 -0
  23. package/dist/commands/doc-import.js.map +1 -0
  24. package/dist/commands/doc-patch.d.ts +16 -0
  25. package/dist/commands/doc-patch.js +142 -0
  26. package/dist/commands/doc-patch.js.map +1 -0
  27. package/dist/commands/doc-share.d.ts +14 -0
  28. package/dist/commands/doc-share.js +60 -0
  29. package/dist/commands/doc-share.js.map +1 -0
  30. package/dist/commands/doc-update.d.ts +6 -0
  31. package/dist/commands/doc-update.js +64 -0
  32. package/dist/commands/doc-update.js.map +1 -0
  33. package/dist/commands/doc.d.ts +6 -0
  34. package/dist/commands/doc.js +108 -0
  35. package/dist/commands/doc.js.map +1 -0
  36. package/dist/commands/docs-cache.d.ts +11 -0
  37. package/dist/commands/docs-cache.js +119 -0
  38. package/dist/commands/docs-cache.js.map +1 -0
  39. package/dist/commands/docs.d.ts +6 -0
  40. package/dist/commands/docs.js +35 -0
  41. package/dist/commands/docs.js.map +1 -0
  42. package/dist/commands/get.d.ts +8 -0
  43. package/dist/commands/get.js +102 -0
  44. package/dist/commands/get.js.map +1 -0
  45. package/dist/commands/ideas.d.ts +23 -0
  46. package/dist/commands/ideas.js +155 -0
  47. package/dist/commands/ideas.js.map +1 -0
  48. package/dist/commands/init.d.ts +7 -0
  49. package/dist/commands/init.js +175 -0
  50. package/dist/commands/init.js.map +1 -0
  51. package/dist/commands/issues.d.ts +32 -0
  52. package/dist/commands/issues.js +206 -0
  53. package/dist/commands/issues.js.map +1 -0
  54. package/dist/commands/log.d.ts +6 -0
  55. package/dist/commands/log.js +47 -0
  56. package/dist/commands/log.js.map +1 -0
  57. package/dist/commands/login.d.ts +3 -0
  58. package/dist/commands/login.js +48 -0
  59. package/dist/commands/login.js.map +1 -0
  60. package/dist/commands/logout.d.ts +1 -0
  61. package/dist/commands/logout.js +13 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/orbit.d.ts +18 -0
  64. package/dist/commands/orbit.js +159 -0
  65. package/dist/commands/orbit.js.map +1 -0
  66. package/dist/commands/overview.d.ts +4 -0
  67. package/dist/commands/overview.js +56 -0
  68. package/dist/commands/overview.js.map +1 -0
  69. package/dist/commands/projects.d.ts +3 -0
  70. package/dist/commands/projects.js +28 -0
  71. package/dist/commands/projects.js.map +1 -0
  72. package/dist/commands/setup-agent.d.ts +3 -0
  73. package/dist/commands/setup-agent.js +178 -0
  74. package/dist/commands/setup-agent.js.map +1 -0
  75. package/dist/commands/start.d.ts +4 -0
  76. package/dist/commands/start.js +38 -0
  77. package/dist/commands/start.js.map +1 -0
  78. package/dist/commands/status.d.ts +5 -0
  79. package/dist/commands/status.js +54 -0
  80. package/dist/commands/status.js.map +1 -0
  81. package/dist/commands/subtask.d.ts +7 -0
  82. package/dist/commands/subtask.js +26 -0
  83. package/dist/commands/subtask.js.map +1 -0
  84. package/dist/commands/task-edit-content.d.ts +7 -0
  85. package/dist/commands/task-edit-content.js +45 -0
  86. package/dist/commands/task-edit-content.js.map +1 -0
  87. package/dist/commands/task.d.ts +66 -0
  88. package/dist/commands/task.js +92 -0
  89. package/dist/commands/task.js.map +1 -0
  90. package/dist/commands/tasks.d.ts +7 -0
  91. package/dist/commands/tasks.js +35 -0
  92. package/dist/commands/tasks.js.map +1 -0
  93. package/dist/commands/vibes.d.ts +27 -0
  94. package/dist/commands/vibes.js +142 -0
  95. package/dist/commands/vibes.js.map +1 -0
  96. package/dist/config.d.ts +14 -0
  97. package/dist/config.js +34 -0
  98. package/dist/config.js.map +1 -0
  99. package/dist/doc-cache.d.ts +24 -0
  100. package/dist/doc-cache.js +116 -0
  101. package/dist/doc-cache.js.map +1 -0
  102. package/dist/errors.d.ts +16 -0
  103. package/dist/errors.js +26 -0
  104. package/dist/errors.js.map +1 -0
  105. package/dist/index.d.ts +2 -0
  106. package/dist/index.js +705 -0
  107. package/dist/index.js.map +1 -0
  108. package/dist/oauth.d.ts +42 -0
  109. package/dist/oauth.js +207 -0
  110. package/dist/oauth.js.map +1 -0
  111. package/dist/output.d.ts +4 -0
  112. package/dist/output.js +66 -0
  113. package/dist/output.js.map +1 -0
  114. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAsBtE,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,OAWC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,aAAiC,CAAC;QACtC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAwB,CAAC;gBACzG,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC;YACxC,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB,EAAE,OAAO,CAAC,MAAM;YAChC,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,WAAW,EAAE,OAAO,CAAC,MAAM;YAC3B,kBAAkB,EAAE,OAAO,CAAC,YAAY;YACxC,eAAe,EAAE,aAAa;SAC/B,CAAC,CAAmB,CAAC;QAEtB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;QACxB,IAAI,GAAG,GAAG,iBAAiB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC;QACzG,IAAI,aAAa,EAAE,CAAC;YAClB,GAAG,IAAI,qBAAqB,OAAO,CAAC,SAAS,sBAAsB,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5B,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function depAddCommand(taskId: string, targetTaskId: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ type?: string;
5
+ note?: string;
6
+ }): Promise<void>;
7
+ export declare function depRemoveCommand(taskId: string, targetTaskId: string, options: {
8
+ json: boolean;
9
+ project?: string;
10
+ type?: string;
11
+ }): Promise<void>;
@@ -0,0 +1,56 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, printSuccess } from '../output.js';
3
+ const VALID_DEP_TYPES = ['depends_on', 'related'];
4
+ // ── Commands ──
5
+ export async function depAddCommand(taskId, targetTaskId, options) {
6
+ const depType = options.type ?? 'depends_on';
7
+ if (!VALID_DEP_TYPES.includes(depType)) {
8
+ const msg = `Invalid dependency type "${depType}". Valid: ${VALID_DEP_TYPES.join(', ')}`;
9
+ if (options.json) {
10
+ console.error(JSON.stringify({ error: { message: msg } }));
11
+ }
12
+ else {
13
+ console.error(`Error: ${msg}`);
14
+ }
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ try {
19
+ const client = await createClient(options.project);
20
+ const response = (await client.addTaskDependency(taskId, {
21
+ target_task_id: targetTaskId,
22
+ type: depType,
23
+ note: options.note,
24
+ }));
25
+ if (options.json) {
26
+ console.log(formatOutput(response, true));
27
+ return;
28
+ }
29
+ printSuccess(`Added ${response.data.type} dependency: ${response.data.task_id ?? taskId} → ${response.data.target_task_id ?? targetTaskId}.`, false);
30
+ }
31
+ catch (error) {
32
+ printError(error, options.json);
33
+ process.exitCode = 1;
34
+ }
35
+ }
36
+ export async function depRemoveCommand(taskId, targetTaskId, options) {
37
+ try {
38
+ const client = await createClient(options.project);
39
+ const response = await client.removeTaskDependency(taskId, targetTaskId, options.type);
40
+ if (options.json) {
41
+ console.log(formatOutput(response ?? { data: { removed: true } }, true));
42
+ return;
43
+ }
44
+ if (response?.data) {
45
+ printSuccess(`Removed dependency: ${response.data.task_id} → ${response.data.target_task_id}.`, false);
46
+ }
47
+ else {
48
+ printSuccess(`Removed dependency: ${taskId} → ${targetTaskId}.`, false);
49
+ }
50
+ }
51
+ catch (error) {
52
+ printError(error, options.json);
53
+ process.exitCode = 1;
54
+ }
55
+ }
56
+ //# sourceMappingURL=dep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dep.js","sourceRoot":"","sources":["../../src/commands/dep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function docImportCommand(title: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ type: string;
5
+ file: string;
6
+ sourcePath?: string;
7
+ context?: string;
8
+ workspaceId?: string;
9
+ }): Promise<void>;
@@ -0,0 +1,97 @@
1
+ import { readFileSync, statSync } from 'node:fs';
2
+ import { createClient } from '../api-client.js';
3
+ import { formatOutput, printError, printSuccess } from '../output.js';
4
+ const VALID_DOC_TYPES = [
5
+ 'spec',
6
+ 'architecture',
7
+ 'api',
8
+ 'guide',
9
+ 'decision',
10
+ 'changelog',
11
+ 'other',
12
+ ];
13
+ function formatBytes(bytes) {
14
+ if (bytes < 1024)
15
+ return `${bytes} B`;
16
+ if (bytes < 1024 * 1024)
17
+ return `${(bytes / 1024).toFixed(1)} KB`;
18
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
19
+ }
20
+ export async function docImportCommand(title, options) {
21
+ if (!VALID_DOC_TYPES.includes(options.type)) {
22
+ const msg = `Invalid document type "${options.type}". Valid: ${VALID_DOC_TYPES.join(', ')}`;
23
+ if (options.json) {
24
+ console.error(JSON.stringify({ error: { message: msg } }));
25
+ }
26
+ else {
27
+ console.error(`Error: ${msg}`);
28
+ }
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ // Verify file is readable before doing anything
33
+ try {
34
+ statSync(options.file);
35
+ }
36
+ catch (err) {
37
+ const msg = `Cannot read file "${options.file}": ${err instanceof Error ? err.message : String(err)}`;
38
+ if (options.json) {
39
+ console.error(JSON.stringify({ error: { message: msg } }));
40
+ }
41
+ else {
42
+ console.error(`Error: ${msg}`);
43
+ }
44
+ process.exitCode = 1;
45
+ return;
46
+ }
47
+ try {
48
+ const client = await createClient(options.project);
49
+ // Try presigned URL upload first
50
+ const presignedResult = await client.presignedImport(options.file, {
51
+ title,
52
+ type: options.type,
53
+ source_path: options.sourcePath,
54
+ context: options.context,
55
+ workspace_id: options.workspaceId,
56
+ }, options.json
57
+ ? undefined
58
+ : (uploaded, total) => {
59
+ process.stderr.write(`\rUploading: ${formatBytes(uploaded)} / ${formatBytes(total)}`);
60
+ });
61
+ if (presignedResult) {
62
+ if (!options.json) {
63
+ process.stderr.write('\n');
64
+ }
65
+ if (options.json) {
66
+ console.log(formatOutput({ ...presignedResult, upload_method: 'presigned' }, true));
67
+ return;
68
+ }
69
+ printSuccess(`Document imported: "${title}" (slug: ${presignedResult.data.slug}) [presigned upload]`, false);
70
+ return;
71
+ }
72
+ // Fallback: read file into memory and send as JSON body
73
+ const content = readFileSync(options.file, 'utf-8');
74
+ const response = (await client.importDocument({
75
+ title,
76
+ type: options.type,
77
+ content,
78
+ source_path: options.sourcePath,
79
+ context: options.context,
80
+ workspace_id: options.workspaceId,
81
+ }));
82
+ if (options.json) {
83
+ console.log(formatOutput({ ...response, upload_method: 'direct' }, true));
84
+ return;
85
+ }
86
+ printSuccess(`Document imported: "${title}" (slug: ${response.data.slug})`, false);
87
+ }
88
+ catch (error) {
89
+ if (!options.json) {
90
+ // Clear progress line if present
91
+ process.stderr.write('\n');
92
+ }
93
+ printError(error, options.json);
94
+ process.exitCode = 1;
95
+ }
96
+ }
97
+ //# sourceMappingURL=doc-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-import.js","sourceRoot":"","sources":["../../src/commands/doc-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare function docPatchCommand(idOrSlug: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ operations?: string;
5
+ baseVersion: string;
6
+ changelog?: string;
7
+ replaceSection?: string;
8
+ insertSection?: boolean;
9
+ deleteSection?: string;
10
+ append?: boolean;
11
+ after?: string;
12
+ content?: string;
13
+ replaceLines?: string;
14
+ insertAfterLine?: string;
15
+ deleteLines?: string;
16
+ }): Promise<void>;
@@ -0,0 +1,142 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, printSuccess } from '../output.js';
3
+ import { OrbitMapAPIError } from '../errors.js';
4
+ const FRIENDLY_ERRORS = {
5
+ CONTENT_UNAVAILABLE: 'Storage unavailable — patch aborted to prevent data loss. Try again later.',
6
+ PATCH_RESULT_EMPTY: 'Patch would result in an empty document — aborted.',
7
+ };
8
+ const DEPRECATED_FLAGS = ['replaceLines', 'insertAfterLine', 'deleteLines'];
9
+ export async function docPatchCommand(idOrSlug, options) {
10
+ // Check for deprecated line-based flags
11
+ for (const flag of DEPRECATED_FLAGS) {
12
+ if (options[flag] !== undefined) {
13
+ const kebab = flag.replace(/([A-Z])/g, '-$1').toLowerCase();
14
+ console.error(`Warning: --${kebab} is deprecated. Use section-based operations instead (--replace-section, --insert-section, --delete-section).`);
15
+ }
16
+ }
17
+ let operations;
18
+ if (options.operations) {
19
+ // Raw JSON operations mode
20
+ try {
21
+ operations = JSON.parse(options.operations);
22
+ if (!Array.isArray(operations)) {
23
+ throw new Error('Operations must be a JSON array');
24
+ }
25
+ }
26
+ catch (err) {
27
+ const msg = `Invalid --operations JSON: ${err instanceof Error ? err.message : String(err)}`;
28
+ if (options.json) {
29
+ console.error(JSON.stringify({ error: { message: msg } }));
30
+ }
31
+ else {
32
+ console.error(`Error: ${msg}`);
33
+ }
34
+ process.exitCode = 1;
35
+ return;
36
+ }
37
+ }
38
+ else if (options.replaceSection) {
39
+ if (!options.content) {
40
+ const msg = '--replace-section requires --content with the new section body';
41
+ if (options.json) {
42
+ console.error(JSON.stringify({ error: { message: msg } }));
43
+ }
44
+ else {
45
+ console.error(`Error: ${msg}`);
46
+ }
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ operations = [{ op: 'replace_section', heading: options.replaceSection, content: options.content }];
51
+ }
52
+ else if (options.insertSection) {
53
+ if (!options.content) {
54
+ const msg = '--insert-section requires --content with the section to insert';
55
+ if (options.json) {
56
+ console.error(JSON.stringify({ error: { message: msg } }));
57
+ }
58
+ else {
59
+ console.error(`Error: ${msg}`);
60
+ }
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ operations = [{ op: 'insert_section', after_heading: options.after, content: options.content }];
65
+ }
66
+ else if (options.deleteSection) {
67
+ operations = [{ op: 'delete_section', heading: options.deleteSection }];
68
+ }
69
+ else if (options.append) {
70
+ if (!options.content) {
71
+ const msg = '--append requires --content with the text to append';
72
+ if (options.json) {
73
+ console.error(JSON.stringify({ error: { message: msg } }));
74
+ }
75
+ else {
76
+ console.error(`Error: ${msg}`);
77
+ }
78
+ process.exitCode = 1;
79
+ return;
80
+ }
81
+ operations = [{ op: 'append', content: options.content }];
82
+ }
83
+ else {
84
+ const msg = 'Provide --operations JSON, or use --replace-section, --insert-section, --delete-section, or --append';
85
+ if (options.json) {
86
+ console.error(JSON.stringify({ error: { message: msg } }));
87
+ }
88
+ else {
89
+ console.error(`Error: ${msg}`);
90
+ }
91
+ process.exitCode = 1;
92
+ return;
93
+ }
94
+ const baseVersion = parseInt(options.baseVersion, 10);
95
+ if (isNaN(baseVersion) || baseVersion < 1) {
96
+ const msg = '--base-version must be a positive integer';
97
+ if (options.json) {
98
+ console.error(JSON.stringify({ error: { message: msg } }));
99
+ }
100
+ else {
101
+ console.error(`Error: ${msg}`);
102
+ }
103
+ process.exitCode = 1;
104
+ return;
105
+ }
106
+ try {
107
+ const client = await createClient(options.project);
108
+ const response = (await client.patchDocument(idOrSlug, operations, baseVersion, options.changelog));
109
+ if (options.json) {
110
+ console.log(formatOutput(response, true));
111
+ return;
112
+ }
113
+ const d = response.data;
114
+ let msg = `Document "${idOrSlug}" patched to version ${d.version}.`;
115
+ if (d.lines_before !== undefined && d.lines_after !== undefined) {
116
+ msg += ` ${d.lines_before} → ${d.lines_after} lines.`;
117
+ }
118
+ printSuccess(msg, false);
119
+ if (d.warnings && d.warnings.length > 0) {
120
+ for (const warning of d.warnings) {
121
+ console.log(` Warning: ${warning}`);
122
+ }
123
+ }
124
+ }
125
+ catch (error) {
126
+ if (error instanceof OrbitMapAPIError && FRIENDLY_ERRORS[error.code]) {
127
+ if (options.json) {
128
+ console.error(JSON.stringify({
129
+ error: { code: error.code, message: FRIENDLY_ERRORS[error.code], status: error.status },
130
+ }, null, 2));
131
+ }
132
+ else {
133
+ console.error(`Error: ${FRIENDLY_ERRORS[error.code]}`);
134
+ }
135
+ process.exitCode = 1;
136
+ return;
137
+ }
138
+ printError(error, options.json);
139
+ process.exitCode = 1;
140
+ }
141
+ }
142
+ //# sourceMappingURL=doc-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-patch.js","sourceRoot":"","sources":["../../src/commands/doc-patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function docShareCommand(documentId: string, projectId: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ agents?: string;
5
+ }): Promise<void>;
6
+ export declare function docUnshareCommand(documentId: string, projectId: string, options: {
7
+ json: boolean;
8
+ project?: string;
9
+ }): Promise<void>;
10
+ export declare function docVisibilityCommand(documentId: string, projectId: string, options: {
11
+ json: boolean;
12
+ project?: string;
13
+ agents?: string;
14
+ }): Promise<void>;
@@ -0,0 +1,60 @@
1
+ import { createClient } from '../api-client.js';
2
+ import { formatOutput, printError, printSuccess } from '../output.js';
3
+ export async function docShareCommand(documentId, projectId, options) {
4
+ const agentIds = options.agents
5
+ ? options.agents.split(',').map((s) => s.trim())
6
+ : undefined;
7
+ try {
8
+ const client = await createClient(options.project);
9
+ const response = (await client.shareDocument(documentId, projectId, agentIds));
10
+ if (options.json) {
11
+ console.log(formatOutput(response, true));
12
+ return;
13
+ }
14
+ const restriction = response.data.restricted_to_agents.length > 0
15
+ ? ` (restricted to ${response.data.restricted_to_agents.length} agent(s))`
16
+ : '';
17
+ printSuccess(`Document ${documentId} shared with project ${projectId}${restriction}.`, false);
18
+ }
19
+ catch (error) {
20
+ printError(error, options.json);
21
+ process.exitCode = 1;
22
+ }
23
+ }
24
+ export async function docUnshareCommand(documentId, projectId, options) {
25
+ try {
26
+ const client = await createClient(options.project);
27
+ const response = (await client.unshareDocument(documentId, projectId));
28
+ if (options.json) {
29
+ console.log(formatOutput(response, true));
30
+ return;
31
+ }
32
+ printSuccess(`Document ${documentId} unshared from project ${projectId}.`, false);
33
+ }
34
+ catch (error) {
35
+ printError(error, options.json);
36
+ process.exitCode = 1;
37
+ }
38
+ }
39
+ export async function docVisibilityCommand(documentId, projectId, options) {
40
+ const agentIds = options.agents
41
+ ? options.agents.split(',').map((s) => s.trim())
42
+ : [];
43
+ try {
44
+ const client = await createClient(options.project);
45
+ const response = (await client.setDocumentVisibility(documentId, projectId, agentIds));
46
+ if (options.json) {
47
+ console.log(formatOutput(response, true));
48
+ return;
49
+ }
50
+ const restriction = response.data.restricted_to_agents.length > 0
51
+ ? `Restricted to ${response.data.restricted_to_agents.length} agent(s).`
52
+ : 'All agents can access.';
53
+ printSuccess(`Visibility updated for document ${documentId} in project ${projectId}. ${restriction}`, false);
54
+ }
55
+ catch (error) {
56
+ printError(error, options.json);
57
+ process.exitCode = 1;
58
+ }
59
+ }
60
+ //# sourceMappingURL=doc-share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-share.js","sourceRoot":"","sources":["../../src/commands/doc-share.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function docUpdateCommand(idOrSlug: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ file: string;
5
+ changelog?: string;
6
+ }): Promise<void>;
@@ -0,0 +1,64 @@
1
+ import { readFileSync, statSync } from 'node:fs';
2
+ import { createClient } from '../api-client.js';
3
+ import { formatOutput, printError, printSuccess } from '../output.js';
4
+ function formatBytes(bytes) {
5
+ if (bytes < 1024)
6
+ return `${bytes} B`;
7
+ if (bytes < 1024 * 1024)
8
+ return `${(bytes / 1024).toFixed(1)} KB`;
9
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
10
+ }
11
+ export async function docUpdateCommand(idOrSlug, options) {
12
+ // Verify file is readable before doing anything
13
+ try {
14
+ statSync(options.file);
15
+ }
16
+ catch (err) {
17
+ const msg = `Cannot read file "${options.file}": ${err instanceof Error ? err.message : String(err)}`;
18
+ if (options.json) {
19
+ console.error(JSON.stringify({ error: { message: msg } }));
20
+ }
21
+ else {
22
+ console.error(`Error: ${msg}`);
23
+ }
24
+ process.exitCode = 1;
25
+ return;
26
+ }
27
+ try {
28
+ const client = await createClient(options.project);
29
+ // Try presigned URL upload first
30
+ const presignedResult = await client.presignedUpdate(idOrSlug, options.file, options.changelog, options.json
31
+ ? undefined
32
+ : (uploaded, total) => {
33
+ process.stderr.write(`\rUploading: ${formatBytes(uploaded)} / ${formatBytes(total)}`);
34
+ });
35
+ if (presignedResult) {
36
+ if (!options.json) {
37
+ process.stderr.write('\n');
38
+ }
39
+ if (options.json) {
40
+ console.log(formatOutput({ ...presignedResult, upload_method: 'presigned' }, true));
41
+ return;
42
+ }
43
+ printSuccess(`Document "${idOrSlug}" updated to version ${presignedResult.data.version}. [presigned upload]`, false);
44
+ return;
45
+ }
46
+ // Fallback: read file into memory and send as JSON body
47
+ const content = readFileSync(options.file, 'utf-8');
48
+ const response = (await client.updateDocument(idOrSlug, content, options.changelog));
49
+ if (options.json) {
50
+ console.log(formatOutput({ ...response, upload_method: 'direct' }, true));
51
+ return;
52
+ }
53
+ printSuccess(`Document "${idOrSlug}" updated to version ${response.data.version}.`, false);
54
+ }
55
+ catch (error) {
56
+ if (!options.json) {
57
+ // Clear progress line if present
58
+ process.stderr.write('\n');
59
+ }
60
+ printError(error, options.json);
61
+ process.exitCode = 1;
62
+ }
63
+ }
64
+ //# sourceMappingURL=doc-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-update.js","sourceRoot":"","sources":["../../src/commands/doc-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function docCommand(idOrSlug: string, options: {
2
+ json: boolean;
3
+ project?: string;
4
+ full?: boolean;
5
+ section?: string;
6
+ }): Promise<void>;
@@ -0,0 +1,108 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createClient } from '../api-client.js';
3
+ import { formatOutput, printError } from '../output.js';
4
+ import { downloadDocument, readManifest, writeManifest } from '../doc-cache.js';
5
+ export async function docCommand(idOrSlug, options) {
6
+ try {
7
+ const client = await createClient(options.project);
8
+ // Determine fetch mode based on flags
9
+ const wantsFull = options.full === true;
10
+ const wantsSection = options.section !== undefined;
11
+ if (wantsFull && wantsSection) {
12
+ const msg = 'Cannot use --full and --section together. Use one or the other.';
13
+ if (options.json) {
14
+ console.error(JSON.stringify({ error: { message: msg } }));
15
+ }
16
+ else {
17
+ console.error(`Error: ${msg}`);
18
+ }
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ if (wantsFull) {
23
+ // Full content mode — same as legacy behavior
24
+ const response = (await client.getDocument(idOrSlug, 'file', { full: true }));
25
+ const doc = response.data;
26
+ let content;
27
+ let fromCache = false;
28
+ if (doc.download_url) {
29
+ const result = await downloadDocument(client, idOrSlug);
30
+ content = readFileSync(result.filePath, 'utf-8');
31
+ fromCache = result.cached;
32
+ }
33
+ else if (doc.content !== undefined) {
34
+ content = doc.content;
35
+ }
36
+ else {
37
+ throw new Error(`API returned neither download_url nor content for ${idOrSlug}`);
38
+ }
39
+ // Update last_accessed in manifest
40
+ const manifest = readManifest();
41
+ if (manifest[doc.slug]) {
42
+ manifest[doc.slug].last_accessed = new Date().toISOString();
43
+ writeManifest(manifest);
44
+ }
45
+ if (options.json) {
46
+ console.log(formatOutput({ data: { ...doc, content } }, true));
47
+ return;
48
+ }
49
+ console.log(`Title: ${doc.title}`);
50
+ console.log(`Type: ${doc.type} Version: ${doc.version} Slug: ${doc.slug}`);
51
+ if (doc.context)
52
+ console.log(`Context: ${doc.context}`);
53
+ if (doc.source_path)
54
+ console.log(`Source: ${doc.source_path}`);
55
+ if (doc._shared)
56
+ console.log(`Shared: yes`);
57
+ if (fromCache)
58
+ console.log(`Cache: hit`);
59
+ console.log(`Updated: ${doc.updated_at}`);
60
+ console.log(`\n${content}`);
61
+ }
62
+ else if (wantsSection) {
63
+ // Section mode — fetch specific section content
64
+ const response = (await client.getDocument(idOrSlug, undefined, { section: options.section }));
65
+ const doc = response.data;
66
+ if (options.json) {
67
+ console.log(formatOutput(response, true));
68
+ return;
69
+ }
70
+ console.log(`Title: ${doc.title}`);
71
+ console.log(`Type: ${doc.type} Version: ${doc.version} Slug: ${doc.slug}`);
72
+ console.log(`Section: ${options.section}`);
73
+ if (doc.content !== undefined) {
74
+ console.log(`\n${doc.content}`);
75
+ }
76
+ }
77
+ else {
78
+ // Default mode — TOC view (context + table of contents)
79
+ const response = (await client.getDocument(idOrSlug));
80
+ const doc = response.data;
81
+ if (options.json) {
82
+ console.log(formatOutput(response, true));
83
+ return;
84
+ }
85
+ console.log(`${doc.title} (${doc.slug}) v${doc.version}`);
86
+ if (doc.context)
87
+ console.log(`Context: ${doc.context}`);
88
+ if (doc._shared)
89
+ console.log(`Shared: yes`);
90
+ if (doc.toc && doc.toc.length > 0) {
91
+ console.log(`\nTable of Contents:`);
92
+ for (const entry of doc.toc) {
93
+ const indent = ' '.repeat(entry.level - 1);
94
+ console.log(` ${indent}${entry.heading}`);
95
+ }
96
+ }
97
+ else if (doc.sections_count !== undefined) {
98
+ console.log(`\nSections: ${doc.sections_count}`);
99
+ }
100
+ console.log(`\nUse --full to see full content, or --section "## Heading" for a specific section.`);
101
+ }
102
+ }
103
+ catch (error) {
104
+ printError(error, options.json);
105
+ process.exitCode = 1;
106
+ }
107
+ }
108
+ //# sourceMappingURL=doc.js.map