@desplega.ai/agent-fs 0.1.2

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 (63) hide show
  1. package/dist/__tests__/api-client.test.d.ts +2 -0
  2. package/dist/__tests__/api-client.test.d.ts.map +1 -0
  3. package/dist/__tests__/api-client.test.js +86 -0
  4. package/dist/__tests__/api-client.test.js.map +1 -0
  5. package/dist/__tests__/param-mapping.test.d.ts +2 -0
  6. package/dist/__tests__/param-mapping.test.d.ts.map +1 -0
  7. package/dist/__tests__/param-mapping.test.js +53 -0
  8. package/dist/__tests__/param-mapping.test.js.map +1 -0
  9. package/dist/api-client.d.ts +11 -0
  10. package/dist/api-client.d.ts.map +1 -0
  11. package/dist/api-client.js +56 -0
  12. package/dist/api-client.js.map +1 -0
  13. package/dist/cli.js +280 -0
  14. package/dist/commands/auth.d.ts +4 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +81 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/comment.d.ts +4 -0
  19. package/dist/commands/comment.d.ts.map +1 -0
  20. package/dist/commands/comment.js +161 -0
  21. package/dist/commands/comment.js.map +1 -0
  22. package/dist/commands/config-cmd.d.ts +3 -0
  23. package/dist/commands/config-cmd.d.ts.map +1 -0
  24. package/dist/commands/config-cmd.js +147 -0
  25. package/dist/commands/config-cmd.js.map +1 -0
  26. package/dist/commands/daemon.d.ts +3 -0
  27. package/dist/commands/daemon.d.ts.map +1 -0
  28. package/dist/commands/daemon.js +33 -0
  29. package/dist/commands/daemon.js.map +1 -0
  30. package/dist/commands/docs.d.ts +3 -0
  31. package/dist/commands/docs.d.ts.map +1 -0
  32. package/dist/commands/docs.js +13 -0
  33. package/dist/commands/docs.js.map +1 -0
  34. package/dist/commands/drive.d.ts +4 -0
  35. package/dist/commands/drive.d.ts.map +1 -0
  36. package/dist/commands/drive.js +86 -0
  37. package/dist/commands/drive.js.map +1 -0
  38. package/dist/commands/init.d.ts +3 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +20 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/onboard.d.ts +3 -0
  43. package/dist/commands/onboard.d.ts.map +1 -0
  44. package/dist/commands/onboard.js +229 -0
  45. package/dist/commands/onboard.js.map +1 -0
  46. package/dist/commands/ops.d.ts +4 -0
  47. package/dist/commands/ops.d.ts.map +1 -0
  48. package/dist/commands/ops.js +99 -0
  49. package/dist/commands/ops.js.map +1 -0
  50. package/dist/embedded.d.ts +5 -0
  51. package/dist/embedded.d.ts.map +1 -0
  52. package/dist/embedded.js +59 -0
  53. package/dist/embedded.js.map +1 -0
  54. package/dist/formatters.d.ts +11 -0
  55. package/dist/formatters.d.ts.map +1 -0
  56. package/dist/formatters.js +257 -0
  57. package/dist/formatters.js.map +1 -0
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +83 -0
  61. package/dist/index.js.map +1 -0
  62. package/package.json +42 -0
  63. package/src/index.ts +90 -0
@@ -0,0 +1,81 @@
1
+ import { Command } from "commander";
2
+ import { setConfigValue, createUser, createDatabase, listUserOrgs, } from "@/core";
3
+ export function authCommands(client) {
4
+ const cmd = new Command("auth").description("Authentication commands");
5
+ cmd
6
+ .command("register")
7
+ .argument("<email>", "Email address")
8
+ .description("Register a new user")
9
+ .action(async (email) => {
10
+ // Try daemon first, fall back to direct DB registration
11
+ try {
12
+ const result = await client.post("/auth/register", { email });
13
+ printRegistration(result, client);
14
+ }
15
+ catch {
16
+ // Daemon not running — register directly against DB
17
+ try {
18
+ const db = createDatabase();
19
+ const result = createUser(db, { email });
20
+ const orgs = listUserOrgs(db, result.user.id);
21
+ printRegistration({
22
+ apiKey: result.apiKey,
23
+ userId: result.user.id,
24
+ orgId: orgs[0]?.id,
25
+ }, client);
26
+ }
27
+ catch (err) {
28
+ if (err.message?.includes("UNIQUE")) {
29
+ console.error("Error: User with this email already exists.");
30
+ }
31
+ else {
32
+ console.error(`Error: ${err.message}`);
33
+ }
34
+ process.exit(1);
35
+ }
36
+ }
37
+ });
38
+ cmd
39
+ .command("whoami")
40
+ .description("Show current user info")
41
+ .action(async () => {
42
+ try {
43
+ const result = await client.get("/auth/me");
44
+ console.log(JSON.stringify(result, null, 2));
45
+ }
46
+ catch {
47
+ // Daemon not running — look up directly from DB
48
+ try {
49
+ const { getConfig, getUserByApiKey, createDatabase, listUserOrgs } = await import("@/core");
50
+ const config = getConfig();
51
+ if (!config.auth.apiKey) {
52
+ console.error("Not logged in. Run: agent-fs auth register <email>");
53
+ process.exit(1);
54
+ }
55
+ const db = createDatabase();
56
+ const user = getUserByApiKey(db, config.auth.apiKey);
57
+ if (!user) {
58
+ console.error("Invalid API key in config.");
59
+ process.exit(1);
60
+ }
61
+ const orgs = listUserOrgs(db, user.id);
62
+ console.log(JSON.stringify({ ...user, orgs }, null, 2));
63
+ }
64
+ catch (err) {
65
+ console.error(`Error: ${err.message}`);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ });
70
+ return cmd;
71
+ }
72
+ function printRegistration(result, client) {
73
+ console.log(`Registered successfully!`);
74
+ console.log(`API Key: ${result.apiKey}`);
75
+ console.log(`User ID: ${result.userId}`);
76
+ console.log(`Org ID: ${result.orgId}`);
77
+ setConfigValue("auth.apiKey", result.apiKey);
78
+ client.setApiKey(result.apiKey);
79
+ console.log("\nAPI key saved to config.");
80
+ }
81
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function commentCommands(client: ApiClient, getOrgId: () => string): Command;
4
+ //# sourceMappingURL=comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,MAAM,WAuJxE"}
@@ -0,0 +1,161 @@
1
+ import { Command } from "commander";
2
+ import { isDaemonRunning, embeddedCallOp, getEmbeddedOrgId } from "../embedded.js";
3
+ export function commentCommands(client, getOrgId) {
4
+ const cmd = new Command("comment").description("Document comments");
5
+ async function callOp(opName, params) {
6
+ if (await isDaemonRunning()) {
7
+ return client.callOp(getOrgId(), opName, params);
8
+ }
9
+ else {
10
+ const orgId = getEmbeddedOrgId();
11
+ return embeddedCallOp(orgId, opName, params);
12
+ }
13
+ }
14
+ cmd
15
+ .command("add")
16
+ .argument("<path>", "File path to comment on")
17
+ .requiredOption("--body <text>", "Comment body")
18
+ .option("--line <n>", "Line number (sets both line-start and line-end)")
19
+ .option("--line-start <n>", "Start line")
20
+ .option("--line-end <n>", "End line")
21
+ .option("--quoted-content <text>", "Quoted content from the file")
22
+ .description("Add a comment to a file")
23
+ .action(async (path, opts) => {
24
+ try {
25
+ const params = { path, body: opts.body };
26
+ if (opts.quotedContent)
27
+ params.quotedContent = opts.quotedContent;
28
+ if (opts.line) {
29
+ params.lineStart = parseInt(opts.line);
30
+ params.lineEnd = parseInt(opts.line);
31
+ }
32
+ if (opts.lineStart)
33
+ params.lineStart = parseInt(opts.lineStart);
34
+ if (opts.lineEnd)
35
+ params.lineEnd = parseInt(opts.lineEnd);
36
+ const result = await callOp("comment-add", params);
37
+ console.log(JSON.stringify(result, null, 2));
38
+ }
39
+ catch (err) {
40
+ console.error(`Error: ${err.message}`);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ cmd
45
+ .command("reply")
46
+ .argument("<comment-id>", "Parent comment ID to reply to")
47
+ .requiredOption("--body <text>", "Reply body")
48
+ .description("Reply to a comment")
49
+ .action(async (commentId, opts) => {
50
+ try {
51
+ const result = await callOp("comment-add", {
52
+ parentId: commentId,
53
+ body: opts.body,
54
+ });
55
+ console.log(JSON.stringify(result, null, 2));
56
+ }
57
+ catch (err) {
58
+ console.error(`Error: ${err.message}`);
59
+ process.exit(1);
60
+ }
61
+ });
62
+ cmd
63
+ .command("list")
64
+ .argument("[path]", "File path to list comments for")
65
+ .option("--resolved", "Show resolved comments")
66
+ .option("--limit <n>", "Max results")
67
+ .option("--offset <n>", "Skip N results")
68
+ .description("List comments")
69
+ .action(async (path, opts) => {
70
+ try {
71
+ const params = {};
72
+ if (path)
73
+ params.path = path;
74
+ if (opts.resolved)
75
+ params.resolved = true;
76
+ if (opts.limit)
77
+ params.limit = parseInt(opts.limit);
78
+ if (opts.offset)
79
+ params.offset = parseInt(opts.offset);
80
+ const result = await callOp("comment-list", params);
81
+ console.log(JSON.stringify(result, null, 2));
82
+ }
83
+ catch (err) {
84
+ console.error(`Error: ${err.message}`);
85
+ process.exit(1);
86
+ }
87
+ });
88
+ cmd
89
+ .command("get")
90
+ .argument("<id>", "Comment ID")
91
+ .description("Get a comment with its replies")
92
+ .action(async (id) => {
93
+ try {
94
+ const result = await callOp("comment-get", { id });
95
+ console.log(JSON.stringify(result, null, 2));
96
+ }
97
+ catch (err) {
98
+ console.error(`Error: ${err.message}`);
99
+ process.exit(1);
100
+ }
101
+ });
102
+ cmd
103
+ .command("update")
104
+ .argument("<id>", "Comment ID")
105
+ .requiredOption("--body <text>", "New comment body")
106
+ .description("Update a comment")
107
+ .action(async (id, opts) => {
108
+ try {
109
+ const result = await callOp("comment-update", { id, body: opts.body });
110
+ console.log(JSON.stringify(result, null, 2));
111
+ }
112
+ catch (err) {
113
+ console.error(`Error: ${err.message}`);
114
+ process.exit(1);
115
+ }
116
+ });
117
+ cmd
118
+ .command("delete")
119
+ .argument("<id>", "Comment ID")
120
+ .description("Delete a comment (soft delete)")
121
+ .action(async (id) => {
122
+ try {
123
+ const result = await callOp("comment-delete", { id });
124
+ console.log(JSON.stringify(result, null, 2));
125
+ }
126
+ catch (err) {
127
+ console.error(`Error: ${err.message}`);
128
+ process.exit(1);
129
+ }
130
+ });
131
+ cmd
132
+ .command("resolve")
133
+ .argument("<id>", "Comment ID")
134
+ .description("Resolve a comment")
135
+ .action(async (id) => {
136
+ try {
137
+ const result = await callOp("comment-resolve", { id, resolved: true });
138
+ console.log(JSON.stringify(result, null, 2));
139
+ }
140
+ catch (err) {
141
+ console.error(`Error: ${err.message}`);
142
+ process.exit(1);
143
+ }
144
+ });
145
+ cmd
146
+ .command("reopen")
147
+ .argument("<id>", "Comment ID")
148
+ .description("Reopen a resolved comment")
149
+ .action(async (id) => {
150
+ try {
151
+ const result = await callOp("comment-resolve", { id, resolved: false });
152
+ console.log(JSON.stringify(result, null, 2));
153
+ }
154
+ catch (err) {
155
+ console.error(`Error: ${err.message}`);
156
+ process.exit(1);
157
+ }
158
+ });
159
+ return cmd;
160
+ }
161
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,QAAsB;IACvE,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAEpE,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,MAA2B;QAC/D,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;YACjC,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC7C,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC;SAC/C,MAAM,CAAC,YAAY,EAAE,iDAAiD,CAAC;SACvE,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC;SACxC,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;SACpC,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,CAAC;SACjE,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAS,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,aAAa;gBAAE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAClE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChE,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACzD,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,IAAS,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE;gBACzC,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SACpD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC;SACxC,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAS,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;SAC9B,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;SACnD,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAS,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;SAC9B,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;SAC9B,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function configCommands(): Command;
3
+ //# sourceMappingURL=config-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,cAAc,YAqJ7B"}
@@ -0,0 +1,147 @@
1
+ import { Command } from "commander";
2
+ import { existsSync } from "node:fs";
3
+ import { getConfig, setConfigValue, getDbPath, getConfigPath, AgentS3Client, createEmbeddingProviderFromEnv, } from "@/core";
4
+ export function configCommands() {
5
+ const cmd = new Command("config").description("Configuration management");
6
+ cmd
7
+ .command("get")
8
+ .argument("<key>", "Config key (dot notation, e.g., s3.bucket)")
9
+ .description("Get a config value")
10
+ .action((key) => {
11
+ const config = getConfig();
12
+ const keys = key.split(".");
13
+ let value = config;
14
+ for (const k of keys) {
15
+ value = value?.[k];
16
+ }
17
+ if (value === undefined) {
18
+ console.error(`Key not found: ${key}`);
19
+ process.exit(1);
20
+ }
21
+ console.log(typeof value === "object" ? JSON.stringify(value, null, 2) : String(value));
22
+ });
23
+ cmd
24
+ .command("set")
25
+ .argument("<key>", "Config key")
26
+ .argument("<value>", "Config value")
27
+ .description("Set a config value")
28
+ .action((key, value) => {
29
+ // Try to parse as JSON for objects/numbers/booleans
30
+ let parsed = value;
31
+ try {
32
+ parsed = JSON.parse(value);
33
+ }
34
+ catch { }
35
+ setConfigValue(key, parsed);
36
+ console.log(`Set ${key} = ${JSON.stringify(parsed)}`);
37
+ });
38
+ cmd
39
+ .command("list")
40
+ .description("Show all config")
41
+ .action(() => {
42
+ console.log(JSON.stringify(getConfig(), null, 2));
43
+ });
44
+ cmd
45
+ .command("validate")
46
+ .description("Check that config, database, S3, and embeddings are healthy")
47
+ .action(async () => {
48
+ const results = [];
49
+ const config = getConfig();
50
+ // 1. Config file exists
51
+ const configExists = existsSync(getConfigPath());
52
+ results.push({
53
+ name: "Config file",
54
+ ok: configExists,
55
+ message: configExists ? getConfigPath() : "Not found — run `agent-fs onboard`",
56
+ });
57
+ // 2. Required S3 fields
58
+ const s3Fields = ["endpoint", "bucket", "accessKeyId", "secretAccessKey"];
59
+ const missingS3 = s3Fields.filter((f) => !config.s3[f]);
60
+ results.push({
61
+ name: "S3 config",
62
+ ok: missingS3.length === 0,
63
+ message: missingS3.length === 0
64
+ ? `${config.s3.provider} → ${config.s3.endpoint}/${config.s3.bucket}`
65
+ : `Missing: ${missingS3.join(", ")}`,
66
+ });
67
+ // 3. S3 connectivity
68
+ if (missingS3.length === 0) {
69
+ try {
70
+ const s3 = new AgentS3Client(config.s3);
71
+ await s3.listObjects("");
72
+ results.push({ name: "S3 connectivity", ok: true, message: "Connected" });
73
+ }
74
+ catch (err) {
75
+ results.push({
76
+ name: "S3 connectivity",
77
+ ok: false,
78
+ message: err.message || "Connection failed",
79
+ });
80
+ }
81
+ }
82
+ // 4. Database
83
+ const dbExists = existsSync(getDbPath());
84
+ results.push({
85
+ name: "Database",
86
+ ok: dbExists,
87
+ message: dbExists ? getDbPath() : "Not found — run `agent-fs onboard`",
88
+ });
89
+ // 5. Auth
90
+ results.push({
91
+ name: "Auth",
92
+ ok: !!config.auth.apiKey,
93
+ message: config.auth.apiKey ? "API key configured" : "No API key — run `agent-fs onboard`",
94
+ });
95
+ // 6. Embedding provider
96
+ const embProvider = config.embedding.provider;
97
+ const hasEmbKey = !!config.embedding.apiKey || !!process.env.OPENAI_API_KEY || !!process.env.GEMINI_API_KEY;
98
+ if (embProvider === "openai" || embProvider === "gemini") {
99
+ if (hasEmbKey) {
100
+ try {
101
+ const provider = await createEmbeddingProviderFromEnv(config.embedding);
102
+ results.push({
103
+ name: "Embeddings",
104
+ ok: !!provider,
105
+ message: provider ? `${embProvider} ready` : `${embProvider} configured but failed to init`,
106
+ });
107
+ }
108
+ catch (err) {
109
+ results.push({ name: "Embeddings", ok: false, message: err.message });
110
+ }
111
+ }
112
+ else {
113
+ results.push({
114
+ name: "Embeddings",
115
+ ok: false,
116
+ message: `${embProvider} selected but no API key`,
117
+ });
118
+ }
119
+ }
120
+ else {
121
+ results.push({
122
+ name: "Embeddings",
123
+ ok: true,
124
+ message: "local/disabled (semantic search may be unavailable)",
125
+ });
126
+ }
127
+ // Print results
128
+ console.log("\nagent-fs health check\n");
129
+ let allOk = true;
130
+ for (const r of results) {
131
+ const icon = r.ok ? "\u2713" : "\u2717";
132
+ console.log(` ${icon} ${r.name}: ${r.message}`);
133
+ if (!r.ok)
134
+ allOk = false;
135
+ }
136
+ console.log();
137
+ if (allOk) {
138
+ console.log("All checks passed.");
139
+ }
140
+ else {
141
+ console.log("Some checks failed. Fix the issues above and re-run.");
142
+ process.exit(1);
143
+ }
144
+ });
145
+ return cmd;
146
+ }
147
+ //# sourceMappingURL=config-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function daemonCommands(): Command;
3
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,cAAc,YAiC7B"}
@@ -0,0 +1,33 @@
1
+ import { Command } from "commander";
2
+ export function daemonCommands() {
3
+ const cmd = new Command("daemon").description("Daemon lifecycle management");
4
+ cmd
5
+ .command("start")
6
+ .description("Start the agent-fs daemon")
7
+ .action(async () => {
8
+ const { startDaemon } = await import("@/server/daemon.js");
9
+ startDaemon();
10
+ });
11
+ cmd
12
+ .command("stop")
13
+ .description("Stop the agent-fs daemon")
14
+ .action(async () => {
15
+ const { stopDaemon } = await import("@/server/daemon.js");
16
+ stopDaemon();
17
+ });
18
+ cmd
19
+ .command("status")
20
+ .description("Check daemon status")
21
+ .action(async () => {
22
+ const { daemonStatus } = await import("@/server/daemon.js");
23
+ const status = daemonStatus();
24
+ if (status.running) {
25
+ console.log(`Daemon running (PID: ${status.pid})`);
26
+ }
27
+ else {
28
+ console.log("Daemon is not running");
29
+ }
30
+ });
31
+ return cmd;
32
+ }
33
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE7E,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC3D,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,UAAU,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function docsCommand(): Command;
3
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,WAAW,YAQ1B"}
@@ -0,0 +1,13 @@
1
+ import { Command } from "commander";
2
+ // @ts-ignore — bun supports text imports, inlined at build time
3
+ import content from "../../../../skills/agent-fs/SKILL.md" with { type: "text" };
4
+ export function docsCommand() {
5
+ return new Command("docs")
6
+ .description("Show agent-fs documentation and command reference")
7
+ .action(() => {
8
+ // Strip YAML frontmatter
9
+ const stripped = content.replace(/^---[\s\S]*?---\n*/, "");
10
+ console.log(stripped);
11
+ });
12
+ }
13
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,gEAAgE;AAChE,OAAO,OAAO,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEjF,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,GAAG,EAAE;QACX,yBAAyB;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function driveCommands(client: ApiClient): Command;
4
+ //# sourceMappingURL=drive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../src/commands/drive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAclD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,WA8E9C"}
@@ -0,0 +1,86 @@
1
+ import { Command } from "commander";
2
+ import { createDatabase, listDrives, createDrive, listUserOrgs, getUserByApiKey, getConfig, inviteToOrg, } from "@/core";
3
+ export function driveCommands(client) {
4
+ const cmd = new Command("drive").description("Drive management");
5
+ cmd
6
+ .command("list")
7
+ .description("List drives in current org")
8
+ .action(async () => {
9
+ try {
10
+ const { db, orgId } = getLocalContext();
11
+ const drives = listDrives(db, orgId);
12
+ console.log(JSON.stringify({ drives }, null, 2));
13
+ }
14
+ catch (err) {
15
+ console.error(`Error: ${err.message}`);
16
+ process.exit(1);
17
+ }
18
+ });
19
+ cmd
20
+ .command("create")
21
+ .argument("<name>", "Drive name")
22
+ .description("Create a new drive")
23
+ .action(async (name) => {
24
+ try {
25
+ const { db, orgId } = getLocalContext();
26
+ const drive = createDrive(db, { orgId, name });
27
+ console.log(JSON.stringify(drive, null, 2));
28
+ }
29
+ catch (err) {
30
+ console.error(`Error: ${err.message}`);
31
+ process.exit(1);
32
+ }
33
+ });
34
+ cmd
35
+ .command("current")
36
+ .description("Show current drive context")
37
+ .action(async () => {
38
+ try {
39
+ const { db, orgId, userId } = getLocalContext();
40
+ const drives = listDrives(db, orgId);
41
+ const defaultDrive = drives.find((d) => d.isDefault);
42
+ console.log(JSON.stringify({ orgId, drive: defaultDrive ?? drives[0] ?? null }, null, 2));
43
+ }
44
+ catch (err) {
45
+ console.error(`Error: ${err.message}`);
46
+ process.exit(1);
47
+ }
48
+ });
49
+ cmd
50
+ .command("invite")
51
+ .argument("<email>", "User email to invite")
52
+ .requiredOption("--role <role>", "Role: viewer, editor, or admin")
53
+ .description("Invite a user to the current org")
54
+ .addHelpText("after", "\nThis invites the user to the organization that owns the current drive. The user will have access to all drives in the org based on their role.")
55
+ .action(async (email, opts) => {
56
+ try {
57
+ const { db, orgId } = getLocalContext();
58
+ inviteToOrg(db, {
59
+ orgId,
60
+ email,
61
+ role: opts.role,
62
+ });
63
+ console.log(`Invited ${email} as ${opts.role}`);
64
+ }
65
+ catch (err) {
66
+ console.error(`Error: ${err.message}`);
67
+ process.exit(1);
68
+ }
69
+ });
70
+ return cmd;
71
+ }
72
+ function getLocalContext() {
73
+ const config = getConfig();
74
+ if (!config.auth.apiKey) {
75
+ throw new Error("Not logged in. Run: agent-fs auth register <email>");
76
+ }
77
+ const db = createDatabase();
78
+ const user = getUserByApiKey(db, config.auth.apiKey);
79
+ if (!user)
80
+ throw new Error("Invalid API key in config.");
81
+ const orgs = listUserOrgs(db, user.id);
82
+ if (orgs.length === 0)
83
+ throw new Error("No orgs found.");
84
+ return { db, orgId: orgs[0].id, userId: user.id };
85
+ }
86
+ //# sourceMappingURL=drive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../src/commands/drive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function initCommand(): Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,WAAW,YAkB1B"}
@@ -0,0 +1,20 @@
1
+ import { Command } from "commander";
2
+ import { onboardCommand } from "./onboard.js";
3
+ export function initCommand() {
4
+ // init is an alias for onboard — kept for backwards compatibility
5
+ const onboard = onboardCommand();
6
+ const cmd = new Command("init")
7
+ .description("Set up agent-fs (alias for 'onboard')")
8
+ .allowUnknownOption(true)
9
+ .action(async (_opts, command) => {
10
+ console.log("Note: 'agent-fs init' is now 'agent-fs onboard'.\n");
11
+ // Re-parse with the onboard command to handle all flags
12
+ await onboard.parseAsync(command.args, { from: "user" });
13
+ });
14
+ // Copy options from onboard so --help shows them
15
+ for (const opt of onboard.options) {
16
+ cmd.addOption(opt);
17
+ }
18
+ return cmd;
19
+ }
20
+ //# sourceMappingURL=init.js.map