gipity 1.0.48

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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/dist/__tests__/config.test.d.ts +1 -0
  4. package/dist/__tests__/config.test.js +31 -0
  5. package/dist/__tests__/config.test.js.map +1 -0
  6. package/dist/__tests__/sync.test.d.ts +1 -0
  7. package/dist/__tests__/sync.test.js +89 -0
  8. package/dist/__tests__/sync.test.js.map +1 -0
  9. package/dist/__tests__/utils.test.d.ts +1 -0
  10. package/dist/__tests__/utils.test.js +69 -0
  11. package/dist/__tests__/utils.test.js.map +1 -0
  12. package/dist/api.d.ts +13 -0
  13. package/dist/api.js +85 -0
  14. package/dist/api.js.map +1 -0
  15. package/dist/auth.d.ts +12 -0
  16. package/dist/auth.js +90 -0
  17. package/dist/auth.js.map +1 -0
  18. package/dist/coding-guidelines.d.ts +9 -0
  19. package/dist/coding-guidelines.js +52 -0
  20. package/dist/coding-guidelines.js.map +1 -0
  21. package/dist/commands/agent.d.ts +2 -0
  22. package/dist/commands/agent.js +164 -0
  23. package/dist/commands/agent.js.map +1 -0
  24. package/dist/commands/api.d.ts +2 -0
  25. package/dist/commands/api.js +137 -0
  26. package/dist/commands/api.js.map +1 -0
  27. package/dist/commands/audit.d.ts +2 -0
  28. package/dist/commands/audit.js +70 -0
  29. package/dist/commands/audit.js.map +1 -0
  30. package/dist/commands/browser.d.ts +2 -0
  31. package/dist/commands/browser.js +88 -0
  32. package/dist/commands/browser.js.map +1 -0
  33. package/dist/commands/chat.d.ts +2 -0
  34. package/dist/commands/chat.js +68 -0
  35. package/dist/commands/chat.js.map +1 -0
  36. package/dist/commands/checkpoint.d.ts +2 -0
  37. package/dist/commands/checkpoint.js +67 -0
  38. package/dist/commands/checkpoint.js.map +1 -0
  39. package/dist/commands/credits.d.ts +2 -0
  40. package/dist/commands/credits.js +57 -0
  41. package/dist/commands/credits.js.map +1 -0
  42. package/dist/commands/db.d.ts +2 -0
  43. package/dist/commands/db.js +102 -0
  44. package/dist/commands/db.js.map +1 -0
  45. package/dist/commands/deploy.d.ts +2 -0
  46. package/dist/commands/deploy.js +49 -0
  47. package/dist/commands/deploy.js.map +1 -0
  48. package/dist/commands/file.d.ts +2 -0
  49. package/dist/commands/file.js +85 -0
  50. package/dist/commands/file.js.map +1 -0
  51. package/dist/commands/fn.d.ts +2 -0
  52. package/dist/commands/fn.js +87 -0
  53. package/dist/commands/fn.js.map +1 -0
  54. package/dist/commands/init.d.ts +2 -0
  55. package/dist/commands/init.js +107 -0
  56. package/dist/commands/init.js.map +1 -0
  57. package/dist/commands/login.d.ts +2 -0
  58. package/dist/commands/login.js +62 -0
  59. package/dist/commands/login.js.map +1 -0
  60. package/dist/commands/logout.d.ts +2 -0
  61. package/dist/commands/logout.js +14 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/logs.d.ts +2 -0
  64. package/dist/commands/logs.js +39 -0
  65. package/dist/commands/logs.js.map +1 -0
  66. package/dist/commands/memory.d.ts +2 -0
  67. package/dist/commands/memory.js +114 -0
  68. package/dist/commands/memory.js.map +1 -0
  69. package/dist/commands/project.d.ts +2 -0
  70. package/dist/commands/project.js +132 -0
  71. package/dist/commands/project.js.map +1 -0
  72. package/dist/commands/push.d.ts +2 -0
  73. package/dist/commands/push.js +34 -0
  74. package/dist/commands/push.js.map +1 -0
  75. package/dist/commands/rbac.d.ts +2 -0
  76. package/dist/commands/rbac.js +89 -0
  77. package/dist/commands/rbac.js.map +1 -0
  78. package/dist/commands/records.d.ts +2 -0
  79. package/dist/commands/records.js +131 -0
  80. package/dist/commands/records.js.map +1 -0
  81. package/dist/commands/sandbox.d.ts +2 -0
  82. package/dist/commands/sandbox.js +53 -0
  83. package/dist/commands/sandbox.js.map +1 -0
  84. package/dist/commands/scaffold.d.ts +2 -0
  85. package/dist/commands/scaffold.js +38 -0
  86. package/dist/commands/scaffold.js.map +1 -0
  87. package/dist/commands/start-cc.d.ts +2 -0
  88. package/dist/commands/start-cc.js +201 -0
  89. package/dist/commands/start-cc.js.map +1 -0
  90. package/dist/commands/status.d.ts +2 -0
  91. package/dist/commands/status.js +43 -0
  92. package/dist/commands/status.js.map +1 -0
  93. package/dist/commands/sync.d.ts +2 -0
  94. package/dist/commands/sync.js +42 -0
  95. package/dist/commands/sync.js.map +1 -0
  96. package/dist/commands/workflow.d.ts +2 -0
  97. package/dist/commands/workflow.js +163 -0
  98. package/dist/commands/workflow.js.map +1 -0
  99. package/dist/config.d.ts +15 -0
  100. package/dist/config.js +76 -0
  101. package/dist/config.js.map +1 -0
  102. package/dist/index.d.ts +2 -0
  103. package/dist/index.js +65 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/setup.d.ts +23 -0
  106. package/dist/setup.js +168 -0
  107. package/dist/setup.js.map +1 -0
  108. package/dist/sync.d.ts +34 -0
  109. package/dist/sync.js +234 -0
  110. package/dist/sync.js.map +1 -0
  111. package/dist/utils.d.ts +10 -0
  112. package/dist/utils.js +57 -0
  113. package/dist/utils.js.map +1 -0
  114. package/hooks/post-write.sh +17 -0
  115. package/hooks/pre-turn.sh +20 -0
  116. package/package.json +29 -0
@@ -0,0 +1,87 @@
1
+ import { Command } from 'commander';
2
+ import { get, post } from '../api.js';
3
+ import { requireConfig } from '../config.js';
4
+ export const fnCommand = new Command('fn')
5
+ .description('Manage sandboxed functions');
6
+ fnCommand
7
+ .command('list')
8
+ .description('List functions')
9
+ .option('--json', 'Output as JSON')
10
+ .action(async (opts) => {
11
+ try {
12
+ const config = requireConfig();
13
+ const res = await get(`/projects/${config.projectGuid}/functions`);
14
+ if (opts.json) {
15
+ console.log(JSON.stringify(res.data));
16
+ }
17
+ else if (res.data.length === 0) {
18
+ console.log('No functions defined.');
19
+ }
20
+ else {
21
+ for (const f of res.data) {
22
+ console.log(`${f.name} v${f.version} ${f.auth_level} timeout=${f.timeout_ms}ms`);
23
+ if (f.description)
24
+ console.log(` ${f.description}`);
25
+ }
26
+ }
27
+ }
28
+ catch (err) {
29
+ console.error(`List failed: ${err.message}`);
30
+ process.exit(1);
31
+ }
32
+ });
33
+ fnCommand
34
+ .command('logs <name>')
35
+ .description('Show recent execution logs')
36
+ .option('--limit <n>', 'Max entries', '20')
37
+ .option('--json', 'Output as JSON')
38
+ .action(async (name, opts) => {
39
+ try {
40
+ const config = requireConfig();
41
+ const res = await get(`/projects/${config.projectGuid}/functions/${name}/logs?limit=${opts.limit}`);
42
+ if (opts.json) {
43
+ console.log(JSON.stringify(res.data));
44
+ }
45
+ else if (res.data.length === 0) {
46
+ console.log('No execution logs.');
47
+ }
48
+ else {
49
+ for (const log of res.data) {
50
+ const dur = log.duration_ms != null ? `${log.duration_ms}ms` : '?';
51
+ const ts = new Date(log.created_at).toLocaleString();
52
+ console.log(`${log.status} ${dur} ${log.trigger_type || 'http'} ${ts}`);
53
+ if (log.error_message)
54
+ console.log(` error: ${log.error_message}`);
55
+ }
56
+ }
57
+ }
58
+ catch (err) {
59
+ console.error(`Logs failed: ${err.message}`);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ fnCommand
64
+ .command('call <name>')
65
+ .description('Call a function directly')
66
+ .option('--data <json>', 'JSON request body', '{}')
67
+ .option('--json', 'Output as JSON')
68
+ .action(async (name, opts) => {
69
+ try {
70
+ const config = requireConfig();
71
+ const body = JSON.parse(opts.data);
72
+ // Call via the conversation/chat endpoint (agent-mediated)
73
+ // Direct function calls require an app token, so use the agent
74
+ const res = await post(`/conversations`, {
75
+ agentGuid: config.agentGuid,
76
+ projectGuid: config.projectGuid,
77
+ content: `Call function "${name}" with this payload: ${JSON.stringify(body)}`,
78
+ currentPath: '/',
79
+ });
80
+ console.log(opts.json ? JSON.stringify(res.data) : res.data.content);
81
+ }
82
+ catch (err) {
83
+ console.error(`Call failed: ${err.message}`);
84
+ process.exit(1);
85
+ }
86
+ });
87
+ //# sourceMappingURL=fn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn.js","sourceRoot":"","sources":["../../src/commands/fn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
@@ -0,0 +1,107 @@
1
+ import { Command } from 'commander';
2
+ import { basename } from 'path';
3
+ import { get, post } from '../api.js';
4
+ import { saveConfig, getConfig } from '../config.js';
5
+ import { syncDown } from '../sync.js';
6
+ import { getAuth } from '../auth.js';
7
+ import { slugify, setupClaudeHooks, setupClaudeMd, setupGitignore } from '../setup.js';
8
+ export const initCommand = new Command('init')
9
+ .description('Initialize a Gipity project (new or existing)')
10
+ .argument('[name]', 'Project name/slug (defaults to current directory name)')
11
+ .option('--agent <guid>', 'Agent GUID to use')
12
+ .option('--api-base <url>', 'API base URL', 'https://a.gipity.ai')
13
+ .action(async (name, opts) => {
14
+ try {
15
+ // Check auth
16
+ const auth = getAuth();
17
+ if (!auth) {
18
+ console.error('Not logged in. Run: gipity login');
19
+ process.exit(1);
20
+ }
21
+ // Check if already initialized
22
+ const existing = getConfig();
23
+ if (existing) {
24
+ console.log(`Already linked to "${existing.projectSlug}" (${existing.projectGuid})`);
25
+ // Re-run setup in case hooks/skills are missing
26
+ setupClaudeHooks();
27
+ setupClaudeMd();
28
+ setupGitignore();
29
+ console.log('Configuring Claude Code... done.');
30
+ return;
31
+ }
32
+ // Resolve project name
33
+ const projectName = name || basename(process.cwd());
34
+ const projectSlug = slugify(projectName);
35
+ if (!projectSlug) {
36
+ console.error('Could not derive a valid project slug. Provide a name: gipity init my-app');
37
+ process.exit(1);
38
+ }
39
+ // Search for existing project by slug
40
+ let project = null;
41
+ let accountSlug = '';
42
+ try {
43
+ const res = await get('/projects?limit=100');
44
+ project = res.data.find(p => p.slug === projectSlug) || null;
45
+ if (project) {
46
+ accountSlug = project.user?.account_slug || '';
47
+ }
48
+ }
49
+ catch {
50
+ // List failed — we'll create a new project
51
+ }
52
+ if (project) {
53
+ console.log(`Found existing project "${project.name}" (${project.slug})`);
54
+ }
55
+ else {
56
+ // Create new project
57
+ const res = await post('/projects', {
58
+ name: projectName,
59
+ slug: projectSlug,
60
+ });
61
+ project = res.data;
62
+ accountSlug = project.user?.account_slug || '';
63
+ console.log(`Created project "${project.name}" (${project.slug})`);
64
+ }
65
+ // Find agent for the project
66
+ let agentGuid = opts.agent || '';
67
+ if (!agentGuid) {
68
+ try {
69
+ const agents = await get(`/projects/${project.short_guid}/agents`);
70
+ if (agents.data.length > 0) {
71
+ agentGuid = agents.data[0].short_guid;
72
+ }
73
+ }
74
+ catch {
75
+ // No agents — that's fine
76
+ }
77
+ }
78
+ // 1. Write .gipity.json
79
+ saveConfig({
80
+ projectGuid: project.short_guid,
81
+ projectSlug: project.slug,
82
+ accountSlug,
83
+ agentGuid,
84
+ conversationGuid: null,
85
+ apiBase: opts.apiBase,
86
+ ignore: ['node_modules', '.git', '.gipity.json', '.gipity/', '.claude/', '.gitignore', 'CLAUDE.md', '*.log'],
87
+ });
88
+ // 2. Pull existing files
89
+ const result = await syncDown();
90
+ if (result.pulled > 0) {
91
+ console.log(`Pulled ${result.pulled} file${result.pulled > 1 ? 's' : ''}.`);
92
+ }
93
+ // 3. Write .claude/settings.json (CC hooks)
94
+ setupClaudeHooks();
95
+ // 4. Write CLAUDE.md (skills)
96
+ setupClaudeMd();
97
+ // 5. Update .gitignore
98
+ setupGitignore();
99
+ console.log('Configuring Claude Code... done.');
100
+ console.log('Ready! Run `claude` to start.');
101
+ }
102
+ catch (err) {
103
+ console.error(`Init failed: ${err.message}`);
104
+ process.exit(1);
105
+ }
106
+ });
107
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
@@ -0,0 +1,62 @@
1
+ import { Command } from 'commander';
2
+ import { saveAuth, getAuth } from '../auth.js';
3
+ import { publicPost } from '../api.js';
4
+ import { prompt, decodeJwtExp } from '../utils.js';
5
+ export const loginCommand = new Command('login')
6
+ .description('Authenticate with Gipity')
7
+ .option('--email <email>', 'Email address')
8
+ .option('--code <code>', 'Verification code')
9
+ .option('--api-base <url>', 'API base URL', 'https://a.gipity.ai')
10
+ .action(async (opts) => {
11
+ try {
12
+ let email = opts.email;
13
+ let code = opts.code;
14
+ // Both provided → verify immediately (non-interactive, ideal for scripts/CC)
15
+ if (email && code) {
16
+ await verify(email, code);
17
+ return;
18
+ }
19
+ // Email only → send code and exit (non-interactive step 1)
20
+ if (email && !code) {
21
+ await publicPost('/auth/login', { email });
22
+ console.log(`Code sent to ${email}. Run: gipity login --email ${email} --code <code>`);
23
+ return;
24
+ }
25
+ // Fully interactive flow
26
+ if (!email) {
27
+ const existing = getAuth();
28
+ email = await prompt(existing ? `Email [${existing.email}]: ` : 'Email: ');
29
+ if (!email && existing)
30
+ email = existing.email;
31
+ if (!email) {
32
+ console.error('Email required.');
33
+ process.exit(1);
34
+ }
35
+ }
36
+ await publicPost('/auth/login', { email });
37
+ console.log('Check your email for a 6-digit code.');
38
+ code = await prompt('Code: ');
39
+ await verify(email, code);
40
+ }
41
+ catch (err) {
42
+ console.error(`Login failed: ${err.message}`);
43
+ process.exit(1);
44
+ }
45
+ });
46
+ async function verify(email, code) {
47
+ const res = await publicPost('/auth/verify', { email, code });
48
+ const exp = decodeJwtExp(res.accessToken);
49
+ if (!exp) {
50
+ console.error('Invalid token received.');
51
+ process.exit(1);
52
+ }
53
+ const expiresAt = new Date(exp * 1000).toISOString();
54
+ saveAuth({
55
+ accessToken: res.accessToken,
56
+ refreshToken: res.refreshToken,
57
+ email,
58
+ expiresAt,
59
+ });
60
+ console.log(`Authenticated as ${email}`);
61
+ }
62
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const logoutCommand: Command;
@@ -0,0 +1,14 @@
1
+ import { Command } from 'commander';
2
+ import { getAuth, clearAuth } from '../auth.js';
3
+ export const logoutCommand = new Command('logout')
4
+ .description('Log out and clear stored credentials')
5
+ .action(() => {
6
+ const auth = getAuth();
7
+ if (!auth) {
8
+ console.log('Not logged in.');
9
+ return;
10
+ }
11
+ clearAuth();
12
+ console.log(`Logged out (${auth.email}).`);
13
+ });
14
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const logsCommand: Command;
@@ -0,0 +1,39 @@
1
+ import { Command } from 'commander';
2
+ import { get } from '../api.js';
3
+ import { requireConfig } from '../config.js';
4
+ export const logsCommand = new Command('logs')
5
+ .description('View execution logs');
6
+ logsCommand
7
+ .command('fn <name>')
8
+ .description('Show function execution logs')
9
+ .option('--limit <n>', 'Max entries', '20')
10
+ .option('--json', 'Output as JSON')
11
+ .action(async (name, opts) => {
12
+ try {
13
+ const config = requireConfig();
14
+ const limit = parseInt(opts.limit, 10) || 20;
15
+ const res = await get(`/projects/${config.projectGuid}/functions/${encodeURIComponent(name)}/logs?limit=${limit}`);
16
+ if (opts.json) {
17
+ console.log(JSON.stringify(res.data));
18
+ return;
19
+ }
20
+ if (res.data.length === 0) {
21
+ console.log(`No logs for function "${name}".`);
22
+ return;
23
+ }
24
+ console.log(`Logs for "${name}" (last ${res.data.length}):`);
25
+ for (const log of res.data) {
26
+ const time = new Date(log.created_at).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit' });
27
+ const dur = log.duration_ms !== null ? `${log.duration_ms}ms`.padEnd(8) : ''.padEnd(8);
28
+ const status = log.status.padEnd(8);
29
+ const trigger = log.trigger_type.padEnd(8);
30
+ const err = log.error ? ` "${log.error}"` : '';
31
+ console.log(` ${time} ${status} ${dur} ${trigger}${err}`);
32
+ }
33
+ }
34
+ catch (err) {
35
+ console.error(`Logs failed: ${err.message}`);
36
+ process.exit(1);
37
+ }
38
+ });
39
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAY7C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,WAAW;KACR,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;KAC1C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,GAAG,CACnB,aAAa,MAAM,CAAC,WAAW,cAAc,kBAAkB,CAAC,IAAI,CAAC,eAAe,KAAK,EAAE,CAC5F,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,IAAI,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7D,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACzH,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const memoryCommand: Command;
@@ -0,0 +1,114 @@
1
+ import { Command } from 'commander';
2
+ import { get, put, del } from '../api.js';
3
+ import { requireConfig } from '../config.js';
4
+ export const memoryCommand = new Command('memory')
5
+ .description('Read/write agent and project memory');
6
+ memoryCommand
7
+ .command('list')
8
+ .description('List memory topics')
9
+ .option('--project', 'List project memory (default is agent memory)')
10
+ .option('--json', 'Output as JSON')
11
+ .action(async (opts) => {
12
+ try {
13
+ const config = requireConfig();
14
+ const endpoint = opts.project
15
+ ? `/projects/${config.projectGuid}/memory`
16
+ : `/agents/${config.agentGuid}/memory`;
17
+ const res = await get(endpoint);
18
+ if (opts.json) {
19
+ console.log(JSON.stringify(res.data));
20
+ }
21
+ else {
22
+ if (res.data.length === 0) {
23
+ console.log('No memory topics.');
24
+ }
25
+ else {
26
+ for (const m of res.data) {
27
+ console.log(`${m.topic} (${new Date(m.updated_at).toLocaleDateString()})`);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ catch (err) {
33
+ console.error(`List failed: ${err.message}`);
34
+ process.exit(1);
35
+ }
36
+ });
37
+ memoryCommand
38
+ .command('read <topic>')
39
+ .description('Read a memory topic')
40
+ .option('--project', 'Read project memory')
41
+ .option('--json', 'Output as JSON')
42
+ .action(async (topic, opts) => {
43
+ try {
44
+ const config = requireConfig();
45
+ const endpoint = opts.project
46
+ ? `/projects/${config.projectGuid}/memory`
47
+ : `/agents/${config.agentGuid}/memory`;
48
+ const res = await get(endpoint);
49
+ const match = res.data.find(m => m.topic === topic);
50
+ if (!match) {
51
+ console.error(`Topic "${topic}" not found.`);
52
+ process.exit(1);
53
+ }
54
+ if (opts.json) {
55
+ console.log(JSON.stringify(match));
56
+ }
57
+ else {
58
+ console.log(match.content);
59
+ }
60
+ }
61
+ catch (err) {
62
+ console.error(`Read failed: ${err.message}`);
63
+ process.exit(1);
64
+ }
65
+ });
66
+ memoryCommand
67
+ .command('write <topic> <content>')
68
+ .description('Write a memory topic')
69
+ .option('--project', 'Write to project memory')
70
+ .option('--json', 'Output as JSON')
71
+ .action(async (topic, content, opts) => {
72
+ try {
73
+ const config = requireConfig();
74
+ const endpoint = opts.project
75
+ ? `/projects/${config.projectGuid}/memory/${encodeURIComponent(topic)}`
76
+ : `/agents/${config.agentGuid}/memory/${encodeURIComponent(topic)}`;
77
+ await put(endpoint, { content });
78
+ if (opts.json) {
79
+ console.log(JSON.stringify({ success: true, topic }));
80
+ }
81
+ else {
82
+ console.log(`Wrote "${topic}".`);
83
+ }
84
+ }
85
+ catch (err) {
86
+ console.error(`Write failed: ${err.message}`);
87
+ process.exit(1);
88
+ }
89
+ });
90
+ memoryCommand
91
+ .command('delete <topic>')
92
+ .description('Delete a memory topic')
93
+ .option('--project', 'Delete project memory')
94
+ .option('--json', 'Output as JSON')
95
+ .action(async (topic, opts) => {
96
+ try {
97
+ const config = requireConfig();
98
+ const endpoint = opts.project
99
+ ? `/projects/${config.projectGuid}/memory/${encodeURIComponent(topic)}`
100
+ : `/agents/${config.agentGuid}/memory/${encodeURIComponent(topic)}`;
101
+ await del(endpoint);
102
+ if (opts.json) {
103
+ console.log(JSON.stringify({ success: true, topic }));
104
+ }
105
+ else {
106
+ console.log(`Deleted "${topic}".`);
107
+ }
108
+ }
109
+ catch (err) {
110
+ console.error(`Delete failed: ${err.message}`);
111
+ process.exit(1);
112
+ }
113
+ });
114
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const projectCommand: Command;
@@ -0,0 +1,132 @@
1
+ import { Command } from 'commander';
2
+ import { get, post, del } from '../api.js';
3
+ import { requireConfig, saveConfig } from '../config.js';
4
+ import { slugify } from '../setup.js';
5
+ export const projectCommand = new Command('project')
6
+ .description('Manage projects')
7
+ .argument('[name]', 'Switch to project by name/slug')
8
+ .option('--json', 'Output as JSON')
9
+ .action(async (name, opts) => {
10
+ try {
11
+ const config = requireConfig();
12
+ if (name) {
13
+ // Switch to project
14
+ const res = await get('/projects?limit=100');
15
+ const match = res.data.find(p => p.slug === name || p.name === name || p.short_guid === name);
16
+ if (!match) {
17
+ console.error(`Project "${name}" not found.`);
18
+ process.exit(1);
19
+ }
20
+ saveConfig({ ...config, projectGuid: match.short_guid, projectSlug: match.slug, conversationGuid: null });
21
+ if (opts.json) {
22
+ console.log(JSON.stringify({ switched: match.slug, guid: match.short_guid }));
23
+ }
24
+ else {
25
+ console.log(`Switched to ${match.name} (${match.slug})`);
26
+ }
27
+ return;
28
+ }
29
+ // List projects
30
+ const res = await get('/projects?limit=100');
31
+ if (opts.json) {
32
+ console.log(JSON.stringify(res.data));
33
+ }
34
+ else {
35
+ if (res.data.length === 0) {
36
+ console.log('No projects.');
37
+ }
38
+ else {
39
+ for (const p of res.data) {
40
+ const active = p.short_guid === config.projectGuid ? ' *' : '';
41
+ const def = p.is_default ? ' (default)' : '';
42
+ console.log(`${p.slug}${active}${def}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ catch (err) {
48
+ console.error(`Failed: ${err.message}`);
49
+ process.exit(1);
50
+ }
51
+ });
52
+ projectCommand
53
+ .command('create <name>')
54
+ .description('Create a new project')
55
+ .option('--slug <slug>', 'Project slug')
56
+ .option('--switch', 'Switch to new project after creation')
57
+ .option('--json', 'Output as JSON')
58
+ .action(async (name, opts) => {
59
+ try {
60
+ const slug = opts.slug || slugify(name);
61
+ const res = await post('/projects', { name, slug });
62
+ if (opts.switch) {
63
+ const config = requireConfig();
64
+ saveConfig({ ...config, projectGuid: res.data.short_guid, projectSlug: res.data.slug, conversationGuid: null });
65
+ }
66
+ if (opts.json) {
67
+ console.log(JSON.stringify(res.data));
68
+ }
69
+ else {
70
+ console.log(`Created "${res.data.name}" (${res.data.slug})`);
71
+ if (opts.switch)
72
+ console.log('Switched.');
73
+ }
74
+ }
75
+ catch (err) {
76
+ console.error(`Create failed: ${err.message}`);
77
+ process.exit(1);
78
+ }
79
+ });
80
+ projectCommand
81
+ .command('delete <name>')
82
+ .description('Delete a project')
83
+ .option('--json', 'Output as JSON')
84
+ .action(async (name, opts) => {
85
+ try {
86
+ // Resolve name to guid
87
+ const res = await get('/projects?limit=100');
88
+ const match = res.data.find(p => p.slug === name || p.name === name || p.short_guid === name);
89
+ if (!match) {
90
+ console.error(`Project "${name}" not found.`);
91
+ process.exit(1);
92
+ }
93
+ await del(`/projects/${match.short_guid}`);
94
+ if (opts.json) {
95
+ console.log(JSON.stringify({ deleted: match.slug }));
96
+ }
97
+ else {
98
+ console.log(`Deleted "${match.name}".`);
99
+ }
100
+ }
101
+ catch (err) {
102
+ console.error(`Delete failed: ${err.message}`);
103
+ process.exit(1);
104
+ }
105
+ });
106
+ projectCommand
107
+ .command('info')
108
+ .description('Show current project details')
109
+ .option('--json', 'Output as JSON')
110
+ .action(async (opts) => {
111
+ try {
112
+ const config = requireConfig();
113
+ const res = await get(`/projects/${config.projectGuid}`);
114
+ if (opts.json) {
115
+ console.log(JSON.stringify(res.data));
116
+ }
117
+ else {
118
+ const p = res.data;
119
+ console.log(`Name: ${p.name}`);
120
+ console.log(`Slug: ${p.slug}`);
121
+ console.log(`GUID: ${p.short_guid}`);
122
+ console.log(`Created: ${new Date(p.created_at).toLocaleDateString()}`);
123
+ if (p.description)
124
+ console.log(`Desc: ${p.description}`);
125
+ }
126
+ }
127
+ catch (err) {
128
+ console.error(`Info failed: ${err.message}`);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const pushCommand: Command;